15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Search the bookmarks when entering the search keyword. 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)$(function() { 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $('#search').change(function() { 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $('#bookmarks').empty(); 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dumpBookmarks($('#search').val()); 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }); 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}); 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Traverse the bookmark tree, and print the folder and nodes. 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function dumpBookmarks(query) { 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var bookmarkTreeNodes = chrome.bookmarks.getTree( 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) function(bookmarkTreeNodes) { 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $('#bookmarks').append(dumpTreeNodes(bookmarkTreeNodes, query)); 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }); 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function dumpTreeNodes(bookmarkNodes, query) { 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var list = $('<ul>'); 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var i; 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (i = 0; i < bookmarkNodes.length; i++) { 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) list.append(dumpNode(bookmarkNodes[i], query)); 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return list; 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function dumpNode(bookmarkNode, query) { 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (bookmarkNode.title) { 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (query && !bookmarkNode.children) { 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (String(bookmarkNode.title).indexOf(query) == -1) { 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return $('<span></span>'); 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var anchor = $('<a>'); 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) anchor.attr('href', bookmarkNode.url); 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) anchor.text(bookmarkNode.title); 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * When clicking on a bookmark in the extension, a new tab is fired with 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * the bookmark url. 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) anchor.click(function() { 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome.tabs.create({url: bookmarkNode.url}); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var span = $('<span>'); 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var options = bookmarkNode.children ? 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $('<span>[<a href="#" id="addlink">Add</a>]</span>') : 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $('<span>[<a id="editlink" href="#">Edit</a> <a id="deletelink" ' + 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'href="#">Delete</a>]</span>'); 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var edit = bookmarkNode.children ? $('<table><tr><td>Name</td><td>' + 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) '<input id="title"></td></tr><tr><td>URL</td><td><input id="url">' + 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) '</td></tr></table>') : $('<input>'); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Show add and edit links when hover over. 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) span.hover(function() { 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) span.append(options); 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $('#deletelink').click(function() { 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $('#deletedialog').empty().dialog({ 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) autoOpen: false, 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) title: 'Confirm Deletion', 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) resizable: false, 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) height: 140, 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) modal: true, 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) overlay: { 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) backgroundColor: '#000', 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) opacity: 0.5 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) buttons: { 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'Yes, Delete It!': function() { 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome.bookmarks.remove(String(bookmarkNode.id)); 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) span.parent().remove(); 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $(this).dialog('destroy'); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Cancel: function() { 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $(this).dialog('destroy'); 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }).dialog('open'); 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }); 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $('#addlink').click(function() { 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $('#adddialog').empty().append(edit).dialog({autoOpen: false, 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) closeOnEscape: true, title: 'Add New Bookmark', modal: true, 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) buttons: { 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'Add' : function() { 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome.bookmarks.create({parentId: bookmarkNode.id, 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) title: $('#title').val(), url: $('#url').val()}); 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $('#bookmarks').empty(); 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $(this).dialog('destroy'); 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window.dumpBookmarks(); 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'Cancel': function() { 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $(this).dialog('destroy'); 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }}).dialog('open'); 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }); 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $('#editlink').click(function() { 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) edit.val(anchor.text()); 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $('#editdialog').empty().append(edit).dialog({autoOpen: false, 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) closeOnEscape: true, title: 'Edit Title', modal: true, 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) show: 'slide', buttons: { 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'Save': function() { 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome.bookmarks.update(String(bookmarkNode.id), { 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) title: edit.val() 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }); 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) anchor.text(edit.val()); 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) options.show(); 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $(this).dialog('destroy'); 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'Cancel': function() { 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $(this).dialog('destroy'); 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }}).dialog('open'); 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }); 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) options.fadeIn(); 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // unhover 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) function() { 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) options.remove(); 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }).append(anchor); 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var li = $(bookmarkNode.title ? '<li>' : '<div>').append(span); 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (bookmarkNode.children && bookmarkNode.children.length > 0) { 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) li.append(dumpTreeNodes(bookmarkNode.children, query)); 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return li; 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)document.addEventListener('DOMContentLoaded', function () { 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dumpBookmarks(); 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}); 129