www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | Submodules | README | LICENSE

locateManager.xul (8669B)


      1 <?xml version="1.0"?>
      2 <!--
      3     ***** BEGIN LICENSE BLOCK *****
      4     
      5     Copyright © 2009 Center for History and New Media
      6                      George Mason University, Fairfax, Virginia, USA
      7                      http://zotero.org
      8     
      9     This file is part of Zotero.
     10     
     11     Zotero is free software: you can redistribute it and/or modify
     12     it under the terms of the GNU Affero General Public License as published by
     13     the Free Software Foundation, either version 3 of the License, or
     14     (at your option) any later version.
     15     
     16     Zotero is distributed in the hope that it will be useful,
     17     but WITHOUT ANY WARRANTY; without even the implied warranty of
     18     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     19     GNU Affero General Public License for more details.
     20     
     21     You should have received a copy of the GNU Affero General Public License
     22     along with Zotero.  If not, see <http://www.gnu.org/licenses/>.
     23     
     24     ***** END LICENSE BLOCK *****
     25 -->
     26 <!DOCTYPE prefwindow SYSTEM "chrome://zotero/locale/preferences.dtd">
     27 
     28 <?xml-stylesheet href="chrome://global/skin/global.css"?>
     29 <?xml-stylesheet href="chrome://browser/skin/preferences/preferences.css"?>
     30 <?xml-stylesheet href="chrome://zotero/skin/preferences.css"?>
     31 
     32 <!--
     33 
     34 To add a new preference:
     35 	1) Add a new <preference> to <preferences>
     36 	2) Add a XUL control with a 'preference' attribute
     37 	3) (Optional) Add additional setup/change logic to preferences.js
     38 	4) (Optional) To add an observer for a preference change,
     39 		add an appropriate case in the switch statement
     40 		in Zotero.Prefs.observe()
     41 
     42 -->
     43 <prefwindow id="zotero-locate-manager-prefs" title="&zotero.preferences.title;" onload="refreshLocateEnginesList()"
     44 		windowtype="zotero:pref" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
     45 		
     46 	<prefpane id="zotero-prefpane-locate"
     47 						label="&zotero.preferences.prefpane.locate;"
     48 						image="chrome://zotero/skin/prefs-styles.png">
     49 		<!-- TODO: pic for locate pane -->
     50 		<!-- TODO: create labels in dtd -->
     51 		
     52 		<preferences>
     53 			<preference id="pref-locate-activeEngines" name="extensions.zotero.locate.activeEngines" type="string"/>
     54 		</preferences>
     55 		
     56 		<groupbox flex="1">
     57 			<caption label="&zotero.preferences.locate.locateEngineManager;"/>
     58 			
     59 			<label id="locateEngineDescription" width="45em" style="font-size: 10px">
     60 				&zotero.preferences.locate.locateEnginedescription;
     61 			</label>
     62 			
     63 			<separator class="thin"/>
     64 			
     65 			<hbox>
     66 				<tree flex="1" id="locateManager" hidecolumnpicker="true" rows="10"
     67 						onselect="document.getElementById('locateManager-delete').disabled = undefined"
     68 						editable="false">
     69 					<treecols>
     70 						<treecol type="checkbox" id="locateManager-checkbox" editable="true" flex="0.5"/>
     71 						<treecol id="locateManager-name" label="&zotero.preferences.locate.name;" flex="1"/>
     72 						<treecol id="locateManager-description" label="&zotero.preferences.locate.description;" flex="2"/>
     73 					</treecols>
     74 					<treechildren id="locateManager-rows"/>
     75 				</tree>
     76 			</hbox>
     77 			
     78 			<separator class="thin"/>
     79 			
     80 			<hbox align="center">
     81 				<hbox pack="start" flex="1">
     82 					<button label="Toggle" onclick="toggleLocateEngines()" flex="1"/>
     83 					<button id="locateManager-restoreDefaults" label="&zotero.preferences.locate.restoreDefaults;" onclick="restoreDefaultLocateEngines()" flex="1"/>
     84 				</hbox>
     85 				<hbox pack="end" flex="2">
     86 					<button disabled="true" id="locateManager-delete" label="-" onclick="deleteLocateEngine()" flex="0.5"/>
     87 				</hbox>
     88 			</hbox>
     89 		
     90 			<separator class="thin"/>
     91 			
     92 			<!--
     93 			TODO: Restore a way to add these
     94 			<label id="addLocateEngineDescription" style="font-size: 10px; width: 45em; height: 6em">
     95 				&zotero.preferences.locate.addDescription;
     96 			</label>
     97 			-->
     98 		</groupbox>
     99 	</prefpane>
    100 	
    101 	<script src="chrome://zotero/content/include.js"></script>
    102 	<script type="application/javascript">
    103 	<![CDATA[
    104 		function treeClick(event) {
    105 			// We only care about primary button double and triple clicks
    106 			if (!event || (event.detail != 2 && event.detail != 3) || event.button != 0) {
    107 				return;
    108 			}
    109 			var t = event.originalTarget;
    110 			
    111 			if (t.localName != 'treechildren') {
    112 				return;
    113 			}
    114 			
    115 			var tree = t.parentNode;
    116 			
    117 			var row = {}, col = {}, obj = {};
    118 			var cell = tree.treeBoxObject.getCellAt(event.clientX, event.clientY, row, col, obj);
    119 			
    120 			var treechildren = document.getElementById('locateManager-rows');
    121 			var treeitem = treechildren.children[row.value];
    122 			
    123 			treeitem.engine.hidden = !treeitem.engine.hidden;
    124 
    125 			refreshLocateEnginesList()
    126 		}
    127 
    128 		/**
    129 		 * Refreshes the list of locate engines in the locate pane
    130 		 * @param {String} name of locate engine to select
    131 		 */
    132 		function refreshLocateEnginesList() {
    133 			var tree = document.getElementById('locateManager');
    134 			var treechildren = document.getElementById('locateManager-rows');
    135 			
    136 			// add click listener
    137 			tree.addEventListener("click", treeClick, false);
    138 			
    139 			// store ranges
    140 			var nRanges = tree.view.selection.getRangeCount();
    141 			var start = {};
    142 			var end = {};
    143 			var ranges = [];
    144 			for(var i=0; i<nRanges; i++) {
    145 				tree.view.selection.getRangeAt(i, start, end);
    146 				ranges.push([start.value, end.value]);
    147 			}
    148 
    149 			// clear tree
    150 			while (treechildren.hasChildNodes()) {
    151 				treechildren.removeChild(treechildren.firstChild);
    152 			}
    153 			
    154 			// repopulate tree with available engines
    155 			var engines = Zotero.LocateManager.getEngines();
    156 			var i = 0;
    157 			for (let engine of engines) {
    158 				var treeitem = document.createElement('treeitem');
    159 				var treerow = document.createElement('treerow');
    160 				var checkboxCell = document.createElement('treecell');
    161 				var nameCell = document.createElement('treecell');
    162 				var descriptionCell = document.createElement('treecell');
    163 				
    164 				treeitem.engine = engine;
    165 				nameCell.setAttribute('label', engine.name);
    166 				descriptionCell.setAttribute('label', engine.description);
    167 				if( !engine.hidden ) {
    168 					checkboxCell.setAttribute('value', 'true');
    169 				}
    170 
    171 				treerow.appendChild(checkboxCell);
    172 				treerow.appendChild(nameCell);
    173 				treerow.appendChild(descriptionCell);
    174 				treeitem.appendChild(treerow);
    175 				treechildren.appendChild(treeitem);
    176 				
    177 				i++;
    178 			}
    179 			
    180 			// restore ranges
    181 			for (let range of ranges) {
    182 				if(range[1] <= engines.length-1) {
    183 					tree.view.selection.rangedSelect(range[0], range[1], true);
    184 				}
    185 			}
    186 		}
    187 
    188 		/**
    189 		 * Adds a new Locate Engine to the locate pane
    190 		 **/
    191 		/*
    192 		function addLocateEngine() {
    193 			// alert(Zotero.LocateManager.activeLocateEngines.join(" || "));
    194 			var textbox = document.getElementById('locate-add-textbox');
    195 			Zotero.LocateManager.addLocateEngine(textbox.value);
    196 
    197 			refreshLocateEnginesList();
    198 		}
    199 		*/
    200 
    201 		function toggleLocateEngines() {
    202 			// get selected engines names
    203 			var tree = document.getElementById('locateManager');
    204 			var treeItems = tree.lastChild.childNodes;
    205 			var engineNames = [];
    206 			var start = {};
    207 			var end = {};
    208 			var nRanges = tree.view.selection.getRangeCount();
    209 			var numStatuses = 0;
    210 			var engineStatusesSum = 0;
    211 			for(var i=0; i<nRanges; i++) {
    212 				tree.view.selection.getRangeAt(i, start, end);
    213 				for(var j=start.value; j<=end.value; j++) {
    214 					var engineStatus = treeItems[j].engine.hidden ? 0 : 1;
    215 					numStatuses += 1;
    216 					engineStatusesSum += engineStatus;
    217 				}
    218 			}
    219 			
    220 			var hidden;
    221 			switch( engineStatusesSum ) {
    222 				case 0:
    223 				// all off, turn all on
    224 				hidden = false;
    225 				break;
    226 
    227 				case numStatuses:
    228 				// all on, turn all off
    229 				hidden = true;
    230 				break;
    231 
    232 				default:
    233 				// some on, some off. turn all on
    234 				hidden = false;
    235 			}
    236 			
    237 			Zotero.LocateManager.getEngines().forEach(engine => engine.hidden = hidden);
    238 
    239 			refreshLocateEnginesList();
    240 		}
    241 
    242 		/**
    243 		 * Deletes selected Locate Engines from the locate pane
    244 		 **/
    245 		function deleteLocateEngine() {
    246 			// get selected engines names
    247 			var tree = document.getElementById('locateManager');
    248 			var treeItems = tree.lastChild.childNodes;
    249 			var engineNames = [];
    250 			var start = {};
    251 			var end = {};
    252 			var nRanges = tree.view.selection.getRangeCount();
    253 			for(var i=0; i<nRanges; i++) {
    254 				tree.view.selection.getRangeAt(i, start, end);
    255 				for(var j=start.value; j<=end.value; j++) {
    256 					Zotero.LocateManager.removeEngine(treeItems[j].engine);
    257 				}
    258 			}
    259 
    260 			for(var i=0; i<engineNames.length; i++) {
    261 				Zotero.LocateManager.removeLocateEngine(engineNames[i]);
    262 			}
    263 			
    264 			tree.view.selection.clearSelection();
    265 			refreshLocateEnginesList();
    266 		}
    267 
    268 		/**
    269 		 * Restores Default Locate Engines
    270 		 **/
    271 		function restoreDefaultLocateEngines() {
    272 			Zotero.LocateManager.restoreDefaultEngines();
    273 			refreshLocateEnginesList();
    274 		}
    275 
    276 
    277 		
    278 	]]>
    279 	</script>
    280 </prefwindow>