2 * (C) Copyright 2011-2012 Peter Lunicks
4 * Use, modification, and distribution are subject to the terms specified in the
8 function get_bookmarks_for_uri(uri) {
9 return nav_bookmarks_service.getBookmarkIdsForURI(make_uri(uri), {});
11 function set_bookmark_title(id, title) {
12 return nav_bookmarks_service.setItemTitle(id, title);
14 function get_bookmark_title(id) {
15 return nav_bookmarks_service.getItemTitle(id);
17 function get_bookmark_uri(id) {
18 return nav_bookmarks_service.getBookmarkURI(id);
20 function set_bookmark_uri(id, uri) {
21 return nav_bookmarks_service.changeBookmarkURI(id, make_uri(uri));
23 function is_bookmarked(uri) {
24 return nav_bookmarks_service.isBookmarked(make_uri(uri))
27 function remove_bookmark(id) {
28 return nav_bookmarks_service.removeItem(id);
31 define_keymap("bookmark_edit_keymap", $parent = minibuffer_keymap);
32 function bookmark_edit_modality (buffer, elem) {
33 buffer.keymaps.push(bookmark_edit_keymap);
36 function kill_current_bookmark (I) {
37 var id = I.window.minibuffer.current_bookmark_id;
38 if (typeof id == 'undefined' || id == null) {
39 minibuffer_abort(I.window);
40 I.minibuffer.message("Not currently editing a bookmark.");
43 var uri_string = get_bookmark_uri(id).spec;
44 var title = get_bookmark_title(id);
46 minibuffer_abort(I.window);
47 I.minibuffer.message("Removed bookmark: " + uri_string + " - " + title);
50 interactive("kill-current-bookmark",
51 "Remove the bookmark that is currently being edited in the minibuffer.",
52 kill_current_bookmark);
54 define_key(bookmark_edit_keymap, "M-k", "kill-current-bookmark");
56 function bookmark_edit_current_bookmark_uri (I) {
57 var id = I.window.minibuffer.current_bookmark_id;
58 if (typeof id == 'undefined' || id == null) {
59 minibuffer_abort(I.window);
60 I.minibuffer.message("Not currently editing a bookmark.");
63 var list = keymap_lookup_command([bookmark_edit_keymap], "kill-current-bookmark");
66 keymsg = " (" + list.join(", ") + " to remove)";
69 var uri_string = yield I.minibuffer.read($prompt = "Edit bookmark URI"+keymsg+":",
70 $initial_value = get_bookmark_uri(id).spec || "",
71 $keymap = bookmark_edit_keymap);
73 // e.g. escape (C-g) -- don't modify the URI
76 set_bookmark_uri(id, make_uri(uri_string));
79 interactive("bookmark-edit-current-bookmark-uri",
80 "Switch to editing the URI of the currently-edited bookmark.",
81 bookmark_edit_current_bookmark_uri);
82 define_key(bookmark_edit_keymap, "M-e", "bookmark-edit-current-bookmark-uri");
84 function bookmark_add_or_edit (I) {
85 var element = yield read_browser_object(I);
86 var spec = load_spec(element);
87 var uri_string = load_spec_uri_string(spec);
90 if (is_bookmarked(uri_string)) {
91 // If the URI is bookmarked, edit the first instance.
92 var id = get_bookmarks_for_uri(uri_string)[0];
94 var list = keymap_lookup_command([bookmark_edit_keymap], "kill-current-bookmark");
97 keymsg = " (" + list.join(", ") + " to remove)";
99 var list_uri = keymap_lookup_command([bookmark_edit_keymap], "bookmark-edit-current-bookmark-uri");
102 keymsg_uri = " (" + list_uri.join(", ") + " to edit URL)";
104 panel = create_info_panel(I.window, "bookmark-panel",
106 element_get_operation_label(element, "Editing bookmark for"),
111 I.window.minibuffer.current_bookmark_id = id;
112 var title = yield I.minibuffer.read($prompt = "Edit bookmark title"+keymsg+":",
113 $initial_value = get_bookmark_title(id) || "",
114 $keymap = bookmark_edit_keymap);
115 delete I.window.minibuffer.current_bookmark_id;
117 // e.g. escape (C-g) -- don't modify the title
122 set_bookmark_title(id, title);
123 I.minibuffer.message("Edited bookmark: " + uri_string + " - " + title);
125 panel = create_info_panel(I.window, "bookmark-panel",
127 element_get_operation_label(element, "Bookmarking"),
130 var title = yield I.minibuffer.read($prompt = "Bookmark with title:", $initial_value = load_spec_title(spec) || "");
134 add_bookmark(uri_string, title);
135 I.minibuffer.message("Added bookmark: " + uri_string + " - " + title);
139 function bookmark_add (I) {
140 var element = yield read_browser_object(I);
141 var spec = load_spec(element);
142 var uri_string = load_spec_uri_string(spec);
144 panel = create_info_panel(I.window, "bookmark-panel",
146 element_get_operation_label(element, "Bookmarking"),
149 var title = yield I.minibuffer.read($prompt = "Bookmark with title:", $initial_value = load_spec_title(spec) || "");
153 add_bookmark(uri_string, title);
154 I.minibuffer.message("Added bookmark: " + uri_string + " - " + title);
157 interactive("bookmark",
158 "Add or edit a bookmark."
159 + "C-u adds a new bookmark even if one already exists for this URI.",
160 alternates(bookmark_add_or_edit, bookmark_add),
161 $browser_object = browser_object_frames);