Changeset 729
- Timestamp:
- 04/14/08 12:55:30 (8 months ago)
- Files:
-
- branches/manage-ui2/src/chrome/chromeFiles/content/manage.js (modified) (1 diff)
- branches/manage-ui2/src/chrome/chromeFiles/content/pages-overlay.js (modified) (1 diff)
- branches/manage-ui2/src/chrome/chromeFiles/content/pages-overlay.xul (modified) (1 diff)
- branches/manage-ui2/src/chrome/chromeFiles/content/utils.js (modified) (1 diff)
- branches/manage-ui2/src/chrome/chromeFiles/locale/en-US/greasemonkey.dtd (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
branches/manage-ui2/src/chrome/chromeFiles/content/manage.js
r703 r729 64 64 btnEdit = document.getElementById("btnEdit"); 65 65 btnUninstall = document.getElementById("btnUninstall"); 66 pagesControl = new PagesControl(document.getElementById("pages-control"));66 pagesControl = gPagesControl; 67 67 chkEnabled = document.getElementById("chkEnabled"); 68 68 branches/manage-ui2/src/chrome/chromeFiles/content/pages-overlay.js
r727 r729 1 function PagesControl(ctlPages) { 2 var includesBox = new PagesBox(document.getElementById("grpIncluded")); 3 var excludesBox = new PagesBox(document.getElementById("grpExcluded")); 1 var gPagesControl = { 2 notifyEvent: function(script, event, data) { 3 switch (event) { 4 case "edit-include-add": 5 this.includes.push(data); 6 this.treeView.treebox.rowCountChanged(this.excludes.length + this.includes.length - 1, 1); 7 break; 8 case "edit-include-remove": 9 this.includes.splice(data, 1); 10 this.treeView.treebox.rowCountChanged(this.excludes.length + data, -1); 11 break; 12 case "edit-exclude-add": 13 this.excludes.push(data); 14 this.treeView.treebox.rowCountChanged(this.excludes.length - 1, 1); 15 break; 16 case "edit-exclude-remove": 17 this.excludes.splice(data, 1); 18 this.treeView.treebox.rowCountChanged(data, -1); 19 break; 20 } 21 }, 4 22 5 this.notifyEvent = function(script, event, data) { 6 switch (event) { 7 case "edit-include-add": includesBox.pageAdded(data); break; 8 case "edit-include-remove": includesBox.pageRemoved(data); break; 9 case "edit-exclude-add": excludesBox.pageAdded(data); break; 10 case "edit-exclude-remove": excludesBox.pageRemoved(data); break; 11 } 12 }; 23 script: null, 13 24 14 this.script = null; 15 this.populate = function(script) { 25 populate: function(script) { 16 26 this.clear(); 17 includesBox.populate(script, "includes", script.includes);18 excludesBox.populate(script, "excludes", script.excludes);27 this.includes = script.includes; 28 this.excludes = script.excludes; 19 29 this.script = script; 20 30 this.script.addObserver(this); 21 };31 document.getElementById("pagesTree").view = this.treeView; 22 32 23 this.clear = function() { 33 var gmManageBundle = document.getElementById("gm-manage-bundle"); 34 var wmi = Components.classes["@mozilla.org/appshell/window-mediator;1"] 35 .getService(Components.interfaces.nsIWindowMediator); 36 var win = wmi.getMostRecentWindow("navigator:browser"); 37 var currentSite = GM_isGreasemonkeyable(win.content.location.href) 38 ? win.content.location.protocol + "//" + 39 win.content.location.hostname + "/*" 40 : gmManageBundle.getString("promptForNewPage.defVal"); 41 document.getElementById("locationBox").value = currentSite; 42 43 this.onLocationInput(); 44 this.onTreeSelect(); 45 }, 46 47 clear: function() { 24 48 if (this.script == null) return; 25 49 this.script.removeObserver(this); 26 includesBox.clear();27 excludesBox.clear();28 50 this.script = null; 29 } ;51 }, 30 52 31 function PagesBox(grpBox) { 32 var buttons = grpBox.getElementsByTagName("button"); 33 var self = this; 34 var selectedPage = null; 53 onLocationInput: function() { 54 document.getElementById("btnExclude").disabled = 55 document.getElementById("btnInclude").disabled = 56 !GM_isGreasemonkeyable(document.getElementById("locationBox").value); 57 }, 35 58 36 this.script = null; 37 this.type = null; 38 this.groupbox = grpBox; 39 this.listbox = grpBox.getElementsByTagName("listbox")[0]; 40 this.btnAdd = buttons[0]; 41 this.btnEdit = buttons[1]; 42 this.btnRemove = buttons[2]; 59 onTreeSelect: function() { 60 document.getElementById("btnRemove").disabled = 61 !this.treeView.selection.getRangeCount(); 62 }, 43 63 44 this.listbox.addEventListener("select", updatePagesBox, true); 45 this.btnAdd.addEventListener("command", promptForNewPage, true); 46 this.btnEdit.addEventListener("command", promptForEdit, true); 47 this.btnRemove.addEventListener("command", remove, true); 64 addPage: function(type) { 65 var val = document.getElementById("locationBox").value; 66 if(type == "include") 67 this.script.addInclude(val); 68 else 69 this.script.addExclude(val); 70 }, 48 71 49 this.populate = function(script, type, pages) {50 this.clear();51 this.script = script;52 this.type = type;72 removeSelectedPages: function() { 73 var start = {}; 74 var end = {}; 75 var numRanges = this.treeView.selection.getRangeCount(); 53 76 54 for (var i = 0, page = null; (page = pages[i]); i++) { 55 addPage(page); 56 } 57 }; 58 59 this.clear = function() { 60 this.script = null; 61 this.type = null; 62 63 while (this.listbox.hasChildNodes()) { 64 this.listbox.removeChild(this.listbox.childNodes[0]); 65 } 66 }; 67 68 function updatePagesBox(ev) { 69 selectedPage = self.listbox.getSelectedItem(0); 70 self.btnEdit.disabled = selectedPage == null; 71 self.btnRemove.disabled = selectedPage == null; 72 } 73 74 function promptForNewPage(ev) { 75 var gmManageBundle = document.getElementById("gm-manage-bundle"); 76 var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"] 77 .getService(); 78 var wmi = wm.QueryInterface(Components.interfaces.nsIWindowMediator); 79 var win = wmi.getMostRecentWindow("navigator:browser"); 80 var currentSite = GM_isGreasemonkeyable(win.content.location.href) 81 ? win.content.location.protocol + "//" + 82 win.content.location.hostname + "/*" 83 : gmManageBundle.getString("promptForNewPage.defVal"); 84 var val = gmPrompt( 85 gmManageBundle.getString("promptForNewPage.msg"), 86 currentSite, 87 gmManageBundle.getString("promptForNewPage.title")); 88 89 if (val && val != "") { 90 self.type == "includes" ? 91 self.script.addInclude(val): 92 self.script.addExclude(val); 93 dirty = true; 77 // Loop backwards to not mess up indexes while removing 78 for (var t = numRanges - 1; t >= 0; t--) { 79 this.treeView.selection.getRangeAt(t, start, end); 80 for (var v = end.value; v >= start.value; v--) { 81 // remove the page 82 var page = this.getPageFromRow(v); 83 switch (page.type) { 84 case "include": this.script.removeIncludeAt(page.index); break; 85 case "exclude": this.script.removeExcludeAt(page.index); break; 86 } 87 // allow user to edit the page and then re-add 88 document.getElementById("locationBox").value = page.value; 94 89 } 95 90 } 91 }, 96 92 97 function promptForEdit(ev) { 98 var gmManageBundle = document.getElementById("gm-manage-bundle"); 99 var val = gmPrompt( 100 gmManageBundle.getString("promptForEdit.msg"), 101 self.listbox.selectedItem.label, 102 gmManageBundle.getString("promptForEdit.title")); 103 104 if (val && val != "") { 105 self.type == "includes" ? 106 self.script.removeIncludeAt(self.listbox.selectedIndex): 107 self.script.removeExcludeAt(self.listbox.selectedIndex); 108 self.type == "includes" ? 109 self.script.addInclude(val): 110 self.script.addExclude(val); 111 112 dirty = true; 113 } 114 }; 93 getPageFromRow: function(row) { 94 if (row < this.excludes.length) 95 return {type: "exclude", index: row, value: this.excludes[row]}; 96 else 97 return {type: "include", index: row - this.excludes.length, 98 value: this.includes[row - this.excludes.length]}; 99 }, 115 100 116 this.pageAdded = function(val) { 117 addPage(val); 118 }; 101 treeView: { 102 get rowCount() { 103 return gPagesControl.includes.length + gPagesControl.excludes.length; 104 }, 119 105 120 function remove(ev) { 121 self.type == "includes" ? 122 self.script.removeIncludeAt(self.listbox.selectedIndex): 123 self.script.removeExcludeAt(self.listbox.selectedIndex); 106 getCellText: function(row, column) { 107 if (column.id == "colStatus") 108 return gPagesControl.getPageFromRow(row).type; 109 else 110 return gPagesControl.getPageFromRow(row).value; 111 }, 124 112 125 // it's sorta wierd that the button stays focused when it is disabled because nothing is selected 126 if (self.listbox.length == 0) { 127 self.listbox.focus(); 128 dirty = true; 129 } 130 } 131 132 this.pageRemoved= function(index) { 133 self.listbox.removeChild(self.listbox.childNodes[index]); 134 }; 135 136 function addPage(pageSpec) { 137 var listitem = document.createElement("listitem"); 138 listitem.setAttribute("label", pageSpec); 139 self.listbox.appendChild(listitem); 140 } 113 setTree: function(treebox){ this.treebox = treebox; }, 114 isContainer: function(row){ return false; }, 115 isSeparator: function(row){ return false; }, 116 isSorted: function(){ return false; }, 117 getLevel: function(row){ return 0; }, 118 getImageSrc: function(row,col){ return null; }, 119 getRowProperties: function(row,props){}, 120 getCellProperties: function(row,col,props){}, 121 getColumnProperties: function(colid,col,props){} 141 122 } 142 123 } branches/manage-ui2/src/chrome/chromeFiles/content/pages-overlay.xul
r727 r729 11 11 12 12 <vbox id="pages-control"> 13 <groupbox id="grpIncluded" 14 orient="vertical" 15 flex="1" 16 > 17 <caption label="&manage.label.grpIncluded;" /> 18 <hbox 19 style="margin-bottom:.5em" 20 flex="1" 21 > 22 <listbox flex="1" /> 23 <vbox> 24 <button 25 label="&manage.button.add;" /> 26 <button 27 label="&manage.button.edit;" 28 disabled="true" /> 29 <button 30 label="&manage.button.remove;" 31 disabled="true" /> 32 <spacer flex="1" /> 33 </vbox> 13 <groupbox orient="vertical" flex="1"> 14 <caption label="&manage.label.grpPages;"/> 15 <description>&pages.description;</description> 16 <label value="&pages.location.label;" accesskey="&pages.location.accesskey;" 17 control="locationBox"/> 18 <textbox id="locationBox" oninput="gPagesControl.onLocationInput();"/> 19 <hbox> 20 <spacer flex="1"/> 21 <button id="btnExclude" label="&pages.button.exclude.label;" 22 accesskey="&pages.button.exclude.accesskey;" 23 oncommand="gPagesControl.addPage('exclude');"/> 24 <button id="btnInclude" label="&pages.button.include.label;" 25 accesskey="&pages.button.include.accesskey;" 26 oncommand="gPagesControl.addPage('include');" default="true"/> 34 27 </hbox> 35 </groupbox> 36 37 <groupbox id="grpExcluded" 38 orient="vertical" 39 flex="1" 40 > 41 <caption label="&manage.label.grpExcluded;" /> 42 <hbox 43 style="margin-bottom:.5em" 44 flex="1" 45 > 46 <listbox flex="1" /> 47 <vbox> 48 <button 49 label="&manage.button.add;" /> 50 <button 51 label="&manage.button.edit;" 52 disabled="true" /> 53 <button label="&manage.button.remove;" 54 disabled="true" /> 55 <spacer flex="1" /> 56 </vbox> 28 <tree id="pagesTree" flex="1" style="min-height: 5em" onselect="gPagesControl.onTreeSelect();"> 29 <treecols> 30 <treecol id="colStatus" label="&pages.column.status.label;"/> 31 <treecol id="colPage" label="&pages.column.page.label;" flex="1"/> 32 </treecols> 33 <treechildren/> 34 </tree> 35 <hbox> 36 <button id="btnRemove" label="&pages.button.remove.label;" 37 accesskey="&pages.button.remove.accesskey;" oncommand="gPagesControl.removeSelectedPages();"/> 38 <spacer flex="1"/> 57 39 </hbox> 58 40 </groupbox> branches/manage-ui2/src/chrome/chromeFiles/content/utils.js
r727 r729 354 354 355 355 function GM_isGreasemonkeyable(url) { 356 var scheme = Components.classes["@mozilla.org/network/io-service;1"] 357 .getService(Components.interfaces.nsIIOService) 358 .extractScheme(url); 356 try { 357 var scheme = Components.classes["@mozilla.org/network/io-service;1"] 358 .getService(Components.interfaces.nsIIOService) 359 .extractScheme(url); 360 } catch (e) { 361 return false; 362 } 359 363 360 364 return (scheme == "http" || scheme == "https" || scheme == "file" || branches/manage-ui2/src/chrome/chromeFiles/locale/en-US/greasemonkey.dtd
r727 r729 1 1 <!ENTITY manage.title "Manage User Scripts"> 2 2 <!ENTITY manage.button.close "Close"> 3 <!ENTITY manage.button.add "Add..."> 4 <!ENTITY manage.button.edit "Edit..."> 5 <!ENTITY manage.button.remove "Remove"> 6 <!ENTITY manage.label.grpIncluded "Included Pages"> 7 <!ENTITY manage.label.grpExcluded "Excluded Pages"> 3 <!ENTITY manage.label.grpPages "Included and Excluded Pages"> 8 4 <!ENTITY manage.label.btnEdit "Edit"> 9 5 <!ENTITY manage.label.chkEnabled "Enabled"> 10 6 <!ENTITY manage.label.btnUninstall "Uninstall"> 11 7 <!ENTITY manage.reorderHelp "Drag-and-drop with the mouse or press Alt-Up/Alt-Down to reorder scripts in this list."> 8 <!ENTITY pages.description "You can specify on which web pages this user script will be used. Type the exact location of the web page you want to manage and then click Include or Exclude. You can use * as a wild card."> 9 <!ENTITY pages.location.label "Location of page:"> 10 <!ENTITY pages.location.accesskey "L"> 11 <!ENTITY pages.button.include.label "Include"> 12 <!ENTITY pages.button.include.accesskey "I"> 13 <!ENTITY pages.button.exclude.label "Exclude"> 14 <!ENTITY pages.button.exclude.accesskey "E"> 15 <!ENTITY pages.button.remove.label "Remove Page"> 16 <!ENTITY pages.button.remove.accesskey "R"> 17 <!ENTITY pages.column.status.label "Status"> 18 <!ENTITY pages.column.page.label "Page"> 12 19 <!ENTITY menu.install "Install User Script..."> 13 20 <!ENTITY menu.install.accesskey "I">
