Changeset 2731
- Timestamp:
- 03/22/13 10:52:12 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
DASISH/t5.6/client/trunk/chrome/markingcollection/content/markingcollection/tree.js
r2711 r2731 1 1 var mcTreeHandler = { 2 get TREE() { 3 return document.getElementById("mcTree"); 4 }, 5 get TREE_POPUP() { 6 return document.getElementById("mcToolbarRootFolderButton"); 7 }, 8 get POPUP() { 9 return document.getElementById("mcPopup"); 10 }, 11 get POPUP_FOLDER() { 12 return document.getElementById("mcPopupFolder"); 13 }, 14 get POPUP_OBJECT() { 15 return document.getElementById("mcPopupObject"); 16 }, 17 get DataSource() { 18 return window.top.bitsObjectMng.DataSource; 19 }, 20 get Common() { 21 return window.top.bitsObjectMng.Common; 22 }, 23 get XPath() { 24 return window.top.bitsObjectMng.XPath; 25 }, 26 get Database() { 27 return window.top.bitsObjectMng.Database; 28 }, 29 get gBrowser() { 30 return window.top.bitsObjectMng.getBrowser(); 31 }, 32 get resource() { 33 try { 34 if (this.TREE.view.selection.count < 1 || this.TREE.currentIndex < 0) 35 return null; 36 else 37 return this.TREE.builderView.getResourceAtIndex(this.TREE.currentIndex); 38 } catch (ex) { 39 _dump(ex); 40 return null; 41 } 42 }, 43 get object() { 44 var rValue; 45 var obj = null; 46 var res = this.resource; 47 if (res) { 48 var id = this.DataSource.getProperty(res, "id"); 49 var dbtype = this.DataSource.getProperty(res, "dbtype"); 50 var rValue; 51 if (this.DataSource.isContainer(res)) { 52 rValue = this.Database.getFolderFormID(id, dbtype); 53 if (!rValue) { 54 rValue = []; 55 rValue[0] = { 56 fid: id, 57 fid_title: this.DataSource.getProperty(res, "title"), 58 dbtype: dbtype, 59 fid_mode: this.DataSource.getProperty(res, "editmode") 60 }; 61 } 62 } else { 63 rValue = mcTreeHandler.Database.getObjectFormID(id, dbtype); 64 } 65 } 66 if (rValue && rValue.length > 0) 67 obj = rValue[0]; 68 return obj; 69 }, 70 autoCollapse: false, 71 progressWindow: null, 72 init: function(isContainer) { 73 try { 74 this.TREE.setAttribute("ref", this.DataSource.ABOUT_ROOT); 75 this.TREE.database.AddDataSource(this.DataSource.data); 76 this.autoCollapse = nsPreferences.getBoolPref("wiredmarker.tree.autoCollapse", false); 77 if (isContainer) 78 document.getElementById("mcTreeRule").setAttribute("iscontainer", true); 79 this.TREE.builder.rebuild(); 2 80 3 get TREE(){ return document.getElementById("mcTree"); }, 4 get TREE_POPUP(){ return document.getElementById("mcToolbarRootFolderButton"); }, 5 get POPUP() { return document.getElementById("mcPopup"); }, 6 get POPUP_FOLDER(){ return document.getElementById("mcPopupFolder"); }, 7 get POPUP_OBJECT(){ return document.getElementById("mcPopupObject"); }, 81 this.TREE_POPUP.setAttribute("ref", this.DataSource.ABOUT_ROOT); 82 this.TREE_POPUP.database.AddDataSource(this.DataSource.data); 83 this.TREE_POPUP.builder.rebuild(); 84 } catch (ex) { 85 } 86 }, 87 done: function() { 88 this.DataSource.flush(); 89 var dsEnum = this.TREE.database.GetDataSources(); 90 while (dsEnum.hasMoreElements()) { 91 var ds = dsEnum.getNext().QueryInterface(Components.interfaces.nsIRDFDataSource); 92 this.TREE.database.RemoveDataSource(ds); 93 } 94 }, 95 pageshow: function() { 96 try { 97 var selectIdx = mcTreeHandler.TREE.currentIndex; 98 mcTreeHandler.TREE.builder.rebuild(); 99 if (selectIdx >= 0) { 100 mcTreeHandler.TREE.currentIndex = selectIdx; 101 if (!mcTreeHandler.TREE.view.selection.isSelected(mcTreeHandler.TREE.currentIndex)) 102 mcTreeHandler.TREE.view.selection.select(mcTreeHandler.TREE.currentIndex); 103 mcTreeHandler.TREE.focus(); 104 } 105 } catch (ex) { 106 } 107 }, 108 onPopuphidden: function(aEvent) { 109 var self = mcTreeHandler; 110 var resource = self.resource; 111 if (resource) { 112 var contextmenu = self.DataSource.getProperty(resource, "contextmenu"); 113 var menu = document.getElementById(contextmenu); 114 if (menu) 115 menu.setAttribute("hidden", "true"); 116 } 117 }, 118 onMousedown: function(aEvent) { 119 mcTreeImageTooltip.onMousedown(aEvent); 120 mcItemView.onTreeClick(aEvent); 121 if (aEvent.button == 2) { 122 if (bitsSearchAcross.getIndex() == mcTreeHandler.TREE.currentIndex) { 123 mcTreeHandler.TREE.removeAttribute("contextmenu"); 124 return; 125 } 126 var contextmenu_mode = nsPreferences.copyUnicharPref("wiredmarker.contextmenu.mode"); 127 if (contextmenu_mode == "legacy") { 128 mcTreeHandler.TREE.setAttribute("contextmenu", this.POPUP.id); 129 this.POPUP.removeEventListener("popuphidden", mcTreeHandler.onPopuphidden, false); 130 var resource = this.resource; 131 if (resource) { 132 var contextmenu = this.DataSource.getProperty(resource, "contextmenu"); 133 if (contextmenu != undefined && contextmenu != "") { 134 var menu = document.getElementById(contextmenu); 135 if (menu) 136 menu.removeAttribute("hidden"); 137 this.POPUP.addEventListener("popuphidden", mcTreeHandler.onPopuphidden, false); 138 } 139 } 140 } else { 141 var resource = this.resource; 142 if (this.DataSource.isContainer(resource)) { 143 mcTreeHandler.TREE.setAttribute("contextmenu", this.POPUP_FOLDER.id); 144 this.POPUP_FOLDER.removeEventListener("popuphidden", mcTreeHandler.onPopuphidden, false); 145 if (resource) { 146 var contextmenu = this.DataSource.getProperty(resource, "contextmenu"); 147 if (contextmenu != undefined && contextmenu != "") { 148 var menu = document.getElementById(contextmenu); 149 if (menu) 150 menu.removeAttribute("hidden"); 151 this.POPUP_FOLDER.addEventListener("popuphidden", mcTreeHandler.onPopuphidden, false); 152 } 153 } 154 } else { 155 mcTreeHandler.TREE.setAttribute("contextmenu", this.POPUP_OBJECT.id); 156 this.POPUP_OBJECT.removeEventListener("popuphidden", mcTreeHandler.onPopuphidden, false); 157 if (resource) { 158 var contextmenu = this.DataSource.getProperty(resource, "contextmenu"); 159 if (contextmenu != undefined && contextmenu != "") { 160 var menu = document.getElementById(contextmenu); 161 if (menu) 162 menu.removeAttribute("hidden"); 163 this.POPUP_OBJECT.addEventListener("popuphidden", mcTreeHandler.onPopuphidden, false); 164 } 165 } 166 } 167 } 168 } else { 169 mcTreeHandler.TREE.removeAttribute("contextmenu"); 170 } 171 }, 172 onMouseup: function(aEvent) { 173 }, 174 onMousemove: function(aEvent) { 175 var param = { 176 tree: mcTreeHandler.TREE 177 }; 178 try { 179 var row = {}; 180 var col = {}; 181 var childElt = {}; 182 param.tree.treeBoxObject.getCellAt(aEvent.clientX, aEvent.clientY, row, col, childElt); 183 if (!row.value || !col.value || !childElt.value || childElt.value != "text") { 184 } else { 185 param.row = row; 186 param.col = col; 187 param.childElt = childElt; 188 if (mcTreeImageTooltip.tooltipRow != row.value) { 189 var curRes = param.tree.builderView.getResourceAtIndex(row.value); 190 var id = this.DataSource.getProperty(curRes, "id"); 191 var dbtype = this.DataSource.getProperty(curRes, "dbtype"); 192 var rtnObj = this.Database.getObject({oid: id}, dbtype); 193 if (rtnObj) 194 param.obj = rtnObj[0]; 195 } 196 } 197 } catch (e) { 198 } 199 mcTreeImageTooltip.onMousemove(aEvent, param); 200 }, 201 onMouseout: function(aEvent) { 202 mcTreeImageTooltip.onMouseout(aEvent); 203 }, 204 onClick: function(aEvent, aType) { 205 var curIdx = this.TREE.currentIndex; 206 if (bitsSearchAcross.getIndex() == curIdx) { 207 mcPropertyView.dispProperty(); 208 return; 209 } 210 if (curIdx >= 0) 211 mcPropertyView.dispProperty(mcTreeHandler.object); 212 var res = (mcTreeHandler.TREE.view.selection.count >= 1 && mcTreeHandler.TREE.currentIndex >= 0) ? mcTreeHandler.resource : null; 213 if (aEvent.button == 2) { 214 window.top.bitsScrapPartyAddonService.eventListener(aEvent, 1, res); 215 aEvent.stopPropagation(); 216 return; 217 } 218 if (aEvent.button != 0 && aEvent.button != 1) { 219 window.top.bitsScrapPartyAddonService.eventListener(aEvent, 1, res); 220 aEvent.stopPropagation(); 221 return; 222 } 223 var row = {}; 224 var col = {}; 225 var obj = {}; 226 this.TREE.treeBoxObject.getCellAt(aEvent.clientX, aEvent.clientY, row, col, obj); 227 if (!obj.value || obj.value == "twisty") 228 return; 229 if (this.TREE.view.isContainer(curIdx)) { 230 var curRes = mcTreeHandler.TREE.builderView.getResourceAtIndex(curIdx); 231 var source = this.DataSource.getProperty(curRes, "source"); 232 if (source != "") 233 mcController.open(this.resource, aEvent.button == 1 || aEvent.ctrlKey || aEvent.shiftKey); 234 } else { 235 if (aType < 2 && aEvent.button != 1) 236 return; 237 mcController.open(this.resource, aEvent.button == 1 || aEvent.ctrlKey || aEvent.shiftKey); 238 } 239 window.top.bitsScrapPartyAddonService.eventListener(aEvent, 1, res); 240 }, 241 onKeyDown: function(aEvent) { 242 }, 243 onKeyUp: function(aEvent) { 244 }, 245 onKeyPress: function(aEvent) { 246 switch (aEvent.keyCode) { 247 case aEvent.DOM_VK_RETURN : 248 if (this.TREE.view.isContainer(this.TREE.currentIndex)) 249 return; 250 mcController.open(this.resource, aEvent.ctrlKey || aEvent.shiftKey); 251 break; 252 case aEvent.DOM_VK_DELETE : 253 if (bitsSearchAcross.getIndex() == mcTreeHandler.TREE.currentIndex) 254 return; 255 if (!(aEvent.ctrlKey || aEvent.shiftKey)) { 256 aEvent.preventDefault(); 257 var res = mcTreeHandler.resource; 258 if (!res) 259 return; 260 var id = this.DataSource.getProperty(res, "id"); 261 var type = this.DataSource.getProperty(res, "type"); 262 if (type == "localfolder") 263 return; 264 if (type == window.top.bitsMarkingCollection._uncategorized.dbtype) 265 return; 266 var refRootfolder = nsPreferences.copyUnicharPref("wiredmarker.rootfolder", ""); 267 if (refRootfolder == id) 268 return; 269 this.remove(aEvent); 270 } 271 break; 272 case aEvent.DOM_VK_F2 : 273 mcController.property(this.resource); 274 break; 275 default: 276 break; 277 } 278 }, 279 onDblClick: function(aEvent) { 280 if (aEvent.originalTarget.localName != "treechildren" || aEvent.button != 0) 281 return; 282 if (this.TREE.view.isContainer(this.TREE.currentIndex)) 283 return; 284 if (aEvent.button == 2) { 285 aEvent.stopPropagation(); 286 return; 287 } 288 mcController.open(this.resource, aEvent.ctrlKey || aEvent.shiftKey); 289 return; 290 }, 291 existsFolderTitle: function(aRes, aTitle) { 292 var i; 293 var len; 294 var contResList = this.DataSource.flattenResources(aRes, 1, false); 295 for (i = 0, len = contResList.length; i < len; i++) { 296 if (aRes.Value == contResList[i].Value) 297 continue; 298 if (this.DataSource.getProperty(contResList[i], "title") == aTitle) 299 return true; 300 } 301 return false; 302 }, 303 create: function(pIdx) { 304 var curIdx = pIdx; 305 var curRes = null; 306 if (pIdx >= 0) { 307 if (!mcTreeHandler.TREE.view.isContainer(curIdx)) 308 return; 309 curRes = mcTreeHandler.TREE.builderView.getResourceAtIndex(curIdx); 310 if (!mcTreeHandler.TREE.view.isContainerOpen(curIdx)) 311 mcTreeHandler.TREE.view.toggleOpenState(curIdx); 312 } else { 313 curRes = this.Common.RDF.GetResource(mcTreeHandler.TREE.ref); 314 } 315 var title = this.DataSource.getProperty(curRes, "title"); 316 var style = this.DataSource.getProperty(curRes, "style"); 317 var editmode = "0"; 318 if (title != "") { 319 title = "New Folder [" + title + "]"; 320 } else { 321 title = "New Folder"; 322 } 323 if (editmode == "") 324 editmode = "0"; 325 if (!style || style == "") { 326 var styleIdx = nsPreferences.getIntPref("wiredmarker.folderstyleindex", 1); 327 if (styleIdx > 8) 328 styleIdx = 1; 329 style = bitsMarker.PRESET_STYLES[styleIdx]; 330 nsPreferences.setIntPref("wiredmarker.folderstyleindex", styleIdx); 331 } 332 if (this.existsFolderTitle(curRes, title)) { 333 var newTitle; 334 var cnt = 1; 335 do { 336 newTitle = title + "(" + (++cnt) + ")"; 337 } while (this.existsFolderTitle(curRes, newTitle)); 338 title = newTitle; 339 } 340 var newRes = mcMainService.createGroupFolder(title, curRes.Value, undefined, style, "", editmode); 341 mcController.rebuildLocal(); 342 window.top.bitsMarkingCollection.reOrder(curRes); 343 var newIdx = mcTreeHandler.TREE.builderView.getIndexOfResource(newRes); 344 mcTreeHandler.TREE.view.selection.select(newIdx); 345 mcTreeHandler.TREE.focus(); 346 var result = mcController.property(newRes); 347 if (result) { 348 window.top.bitsMarkingCollection.reOrder(curRes); 349 } else { 350 mcTreeHandler.remove(undefined, undefined, true); 351 } 352 var newIdx = mcTreeHandler.TREE.builderView.getIndexOfResource(newRes); 353 mcController.rebuildLocal(); 354 var selectIdx = newIdx; 355 if (selectIdx < 0) 356 selectIdx = pIdx; 357 mcTreeHandler.TREE.currentIndex = selectIdx; 358 if (!mcTreeHandler.TREE.view.selection.isSelected(mcTreeHandler.TREE.currentIndex)) 359 mcTreeHandler.TREE.view.selection.select(mcTreeHandler.TREE.currentIndex); 360 mcTreeHandler.TREE.focus(); 361 mcTreeHandler.TREE.treeBoxObject.ensureRowIsVisible(selectIdx); 362 mcPropertyView.dispProperty(mcTreeHandler.object); 363 }, 364 removeFolder: function(aEvent) { 365 if (!mcController.confirmRemovingFor(this.resource)) 366 return false; 367 if (aEvent) 368 window.top.bitsScrapPartyAddonService.eventListener(aEvent, 0, this.resource); 369 var aMode = this.DataSource.getProperty(this.resource, "dbtype"); 370 if (!this.Database.beginTransaction(aMode)) 371 return false; 372 var curIdx = this.TREE.currentIndex; 373 var curRes = this.TREE.builderView.getResourceAtIndex(curIdx); 374 this._removeFolder(curRes); 375 this.Database.endTransaction(aMode); 376 mcController.rebuildLocal(); 377 mcItemView.onTreeClick(); 378 if (aEvent) 379 window.top.bitsScrapPartyAddonService.eventListener(aEvent, 1, this.resource); 380 }, 381 _removeFolder: function(aRes) { 382 if (!aRes) 383 return []; 384 var curRes = aRes; 385 try { 386 this._removeAll(curRes); 387 var delObj = []; 388 var foldResList = this.DataSource.flattenResources(curRes, 1, true); 389 for (i = foldResList.length - 1; i >= 0; i--) { 390 var pRes = this.DataSource.findParentResource(foldResList[i]); 391 if (!this.DataSource.data.ArcLabelsOut(foldResList[i]).hasMoreElements() || this.Common.RDFCU.indexOf(this.DataSource.data, pRes, foldResList[i]) < 0) 392 continue; 393 delObj.push({ 394 id: this.DataSource.getProperty(foldResList[i], "id"), 395 dbtype: this.DataSource.getProperty(foldResList[i], "dbtype") 396 }); 397 this.Common.RDFC.Init(this.DataSource.data, pRes); 398 this.Common.RDFC.RemoveElement(foldResList[i], true); 399 } 400 var rmIDs = []; 401 var addIDs = []; 402 var depth = 0; 403 do { 404 addIDs = this.DataSource.cleanUpIsolation(); 405 rmIDs = rmIDs.concat(addIDs); 406 } while (addIDs.length > 0 && ++depth < 100); 407 this.DataSource.flush(); 408 for (var i = 0; i < delObj.length; i++) { 409 this.Database.removeFolder(delObj[i].id, delObj[i].dbtype, false); 410 } 411 } catch (e) { 412 _dump("mcTreeHandler._removeFolder():" + e); 413 } 414 }, 415 removeAllFolder: function(aEvent) { 416 if (!mcController.confirmRemovingFor(this.resource)) 417 return false; 418 if (aEvent) 419 window.top.bitsScrapPartyAddonService.eventListener(aEvent, 0, this.resource); 420 var aMode = this.DataSource.getProperty(this.resource, "dbtype"); 421 if (!this.Database.beginTransaction(aMode)) 422 return false; 423 var curRes = this.TREE.builderView.getResourceAtIndex(this.TREE.currentIndex); 424 try { 425 var delObj = []; 426 var foldResList = this.DataSource.flattenResources(curRes, 1, false); 427 var i, j; 428 for (i = foldResList.length - 1; i >= 0; i--) { 429 if (foldResList[i].Value == curRes.Value) 430 continue; 431 this._removeAll(foldResList[i]); 432 } 433 var foldResList = this.DataSource.flattenResources(curRes, 1, true); 434 for (i = foldResList.length - 1; i >= 0; i--) { 435 if (foldResList[i].Value == curRes.Value) 436 continue; 437 var pRes = this.DataSource.findParentResource(foldResList[i]); 438 if (!this.DataSource.data.ArcLabelsOut(foldResList[i]).hasMoreElements() || this.Common.RDFCU.indexOf(this.DataSource.data, pRes, foldResList[i]) < 0) 439 continue; 440 delObj.push({ 441 id: this.DataSource.getProperty(foldResList[i], "id"), 442 dbtype: this.DataSource.getProperty(foldResList[i], "dbtype") 443 }); 444 this.Common.RDFC.Init(this.DataSource.data, pRes); 445 this.Common.RDFC.RemoveElement(foldResList[i], true); 446 } 447 var rmIDs = []; 448 var addIDs = []; 449 var depth = 0; 450 do { 451 addIDs = this.DataSource.cleanUpIsolation(); 452 rmIDs = rmIDs.concat(addIDs); 453 } while (addIDs.length > 0 && ++depth < 100); 454 this.DataSource.flush(); 455 for (var i = 0; i < delObj.length; i++) { 456 this.Database.removeFolder(delObj[i].id, delObj[i].dbtype, false); 457 } 458 } catch (e) { 459 _dump("mcTreeHandler.removeAllFolder():" + e); 460 } 461 this.Database.endTransaction(aMode); 462 mcController.rebuildLocal(); 463 if (aEvent) 464 window.top.bitsScrapPartyAddonService.eventListener(aEvent, 1, this.resource); 465 }, 466 removeAll: function(aEvent) { 467 if (!mcController.confirmRemovingFor(this.resource)) 468 return false; 469 if (aEvent) 470 window.top.bitsScrapPartyAddonService.eventListener(aEvent, 0, this.resource); 471 var aMode = this.DataSource.getProperty(this.resource, "dbtype"); 472 if (!this.Database.beginTransaction(aMode)) 473 return false; 474 var curRes = this.TREE.builderView.getResourceAtIndex(this.TREE.currentIndex); 475 this._removeAll(curRes); 476 this.Database.endTransaction(aMode); 477 mcController.rebuildLocal(); 478 if (aEvent) 479 window.top.bitsScrapPartyAddonService.eventListener(aEvent, 1, this.resource); 480 }, 481 _removeAll: function(aRes) { 482 if (!aRes) 483 return false; 484 var curRes = aRes; 485 try { 486 var delObj = []; 487 var foldResList = this.DataSource.flattenResources(curRes, 1, true); 488 var i, j; 489 for (i = foldResList.length - 1; i >= 0; i--) { 490 var pfid = this.DataSource.getProperty(foldResList[i], "id"); 491 var contResList = this.DataSource.flattenResources(foldResList[i], 2, false); 492 this.Common.RDFC.Init(this.DataSource.data, foldResList[i]); 493 for (j = 0; j < contResList.length; j++) { 494 if (!this.DataSource.data.ArcLabelsOut(contResList[j]).hasMoreElements() || this.Common.RDFCU.indexOf(this.DataSource.data, foldResList[i], contResList[j]) < 0) 495 continue; 496 delObj.push({ 497 pfid: pfid, 498 id: this.DataSource.getProperty(contResList[j], "id"), 499 dbtype: this.DataSource.getProperty(contResList[j], "dbtype"), 500 source: this.DataSource.getProperty(contResList[j], "source") 501 }); 502 this.Common.RDFC.RemoveElement(contResList[j], true); 503 } 504 } 505 var rmIDs = []; 506 var addIDs = []; 507 var depth = 0; 508 do { 509 addIDs = this.DataSource.cleanUpIsolation(); 510 rmIDs = rmIDs.concat(addIDs); 511 } while (addIDs.length > 0 && ++depth < 100); 512 this.DataSource.flush(); 513 var match_exp = new RegExp("^" + bitsMarker.id_key + ".+$", "m"); 514 for (var i = 0; i < delObj.length; i++) { 515 this.Database.removeObject({oid: delObj[i].id, pfid: delObj[i].pfid}, delObj[i].dbtype, false); 516 if (delObj[i].source.match(match_exp)) 517 bitsMarker.unmarkerWindow(delObj[i].source); 518 } 519 } catch (e) { 520 _dump("mcTreeHandler.removeAll():" + e); 521 return false; 522 } 523 return true; 524 }, 525 remove: function(aEvent, pRes, pConfirm, aTransaction) { 526 if (pConfirm == undefined) 527 pConfirm = false; 528 if (aTransaction == undefined) 529 aTransaction = true; 530 if (pRes == undefined && this.TREE.view.selection.count == 0) 531 return false; 532 if (!pConfirm) 533 if (!mcController.confirmRemovingFor(this.resource)) 534 return false; 535 if (aEvent) 536 window.top.bitsScrapPartyAddonService.eventListener(aEvent, 0, this.resource); 537 var resList = []; 538 var parList = []; 539 if (this.TREE.view.selection.count > 1) { 540 var idxList = this.getSelection(false, 2); 541 if (idxList.length < 1) 542 return false; 543 if (this.validateMultipleSelection(idxList) == false) 544 return false; 545 var i; 546 for (i = 0; i < idxList.length; i++) { 547 resList.push(this.TREE.builderView.getResourceAtIndex(idxList[i])); 548 parList.push(this.getParentResource(idxList[i])); 549 } 550 } else { 551 var curRes; 552 var parRes; 553 if (pRes == undefined) { 554 var curIdx = this.TREE.currentIndex; 555 curRes = this.TREE.builderView.getResourceAtIndex(curIdx); 556 parRes = this.getParentResource(curIdx); 557 } else { 558 curRes = pRes; 559 parRes = this.DataSource.findParentResource(pRes); 560 } 561 resList.push(curRes); 562 parList.push(parRes); 563 var match_exp = new RegExp("^" + bitsMarker.id_key + ".+$", "m"); 564 var source = this.DataSource.getProperty(curRes, "source"); 565 if (source.match(match_exp)) 566 bitsMarker.unmarkerWindow(source); 567 var id = this.DataSource.getProperty(curRes, "id"); 568 var dbtype = this.DataSource.getProperty(curRes, "dbtype"); 569 var pfid = this.DataSource.getProperty(curRes, "pfid"); 570 var about = this.DataSource.getID2About(id, pfid, dbtype); 571 if (curRes.Value != about) { 572 var res = mcTreeDNDHandler.Common.RDF.GetResource(about); 573 resList.push(res); 574 parList.push(this.DataSource.findParentResource(res)); 575 var source = this.DataSource.getProperty(res, "source"); 576 if (source.match(match_exp)) 577 bitsMarker.unmarkerWindow(source); 578 } 579 if (aTransaction) 580 if (!this.Database.beginTransaction(dbtype)) 581 return false; 582 if (this.DataSource.isContainer(curRes)) { 583 this.Database.removeFolder(id, dbtype, false); 584 } else { 585 this.Database.removeObject({oid: id, pfid: pfid}, dbtype, false); 586 } 587 if (aTransaction) 588 this.Database.endTransaction(dbtype); 589 } 590 var rmIDs = mcController.removeInternal(resList, parList, false); 591 if (aTransaction) 592 mcPropertyView.dispProperty(mcTreeHandler.object); 593 this.isEdit = true; 594 if (aEvent) 595 window.top.bitsScrapPartyAddonService.eventListener(aEvent, 1, this.resource); 596 return true; 597 }, 598 replacedURL: function(aEvent) { 599 var curIdx = this.TREE.currentIndex; 600 var curRes = this.TREE.builderView.getResourceAtIndex(curIdx); 601 var parRes = this.getParentResource(curIdx); 602 var id = this.DataSource.getProperty(curRes, "id"); 603 var dbtype = this.DataSource.getProperty(curRes, "dbtype"); 604 if (!this.DataSource.isContainer(curRes)) 605 return; 606 var folderFilterHash = {}; 607 var tmpFolderFilter = nsPreferences.copyUnicharPref("wiredmarker.filter.folder", ""); 608 var tmpFolderFilterArr = tmpFolderFilter.split("\t"); 609 var i; 610 for (i = 0; i < tmpFolderFilterArr.length; i++) { 611 if (!tmpFolderFilterArr[i].match(/^(\d+):(\d+):(.+)$/)) 612 continue; 613 var filter_fid = RegExp.$1; 614 var filter_casesensitive = RegExp.$2; 615 var filter_keyword = RegExp.$3; 616 folderFilterHash[filter_fid] = new RegExp(filter_keyword, (filter_casesensitive == 1) ? "mg" : "img"); 617 } 618 tmpFolderFilterArr = undefined; 619 tmpFolderFilter = undefined; 620 var prompts = this.Common.PROMPT; 621 var flags = prompts.STD_YES_NO_BUTTONS + prompts.BUTTON_POS_1_DEFAULT; 622 var button = prompts.confirmEx(window, mcMainService.STRING.getString("CONFIRM_REPLACED_TITLE"), mcMainService.STRING.getString("CONFIRM_REPLACED_TARGET"), flags, "", "", "", null, {}); 623 var contResList = []; 624 if (button == 0) { 625 var folderList = this.DataSource.flattenResources(curRes, 1, true); 626 for (var i = 0; i < folderList.length; i++) { 627 var fid = this.DataSource.getProperty(folderList[i], "id"); 628 var rtn = this.Database.getObject({pfid: fid}, dbtype); 629 if (!rtn) 630 continue; 631 if (folderFilterHash[fid]) 632 rtn = rtn.filter(function(element, index, array) { 633 return folderFilterHash[fid].test(element.oid_title); 634 }); 635 contResList = contResList.concat(rtn); 636 } 637 } else { 638 var rtn = this.Database.getObject({pfid: id}, dbtype); 639 if (rtn) { 640 if (folderFilterHash[fid]) 641 rtn = rtn.filter(function(element, index, array) { 642 return folderFilterHash[fid].test(element.oid_title); 643 }); 644 contResList = contResList.concat(rtn); 645 } 646 } 647 if (contResList.length == 0) { 648 this.Common.alert(mcMainService.STRING.getString("ALERT_REPLACED_URL"), mcMainService.STRING.getString("CONFIRM_REPLACED_TITLE")); 649 return; 650 } 651 var result = {}; 652 result.res = curRes; 653 result.list = contResList; 654 result.accept = false; 655 result.objArr = null; 656 result.callback = this._replacedURL_CB; 657 if (this._replacedURL_window && !this._replacedURL_window.closed) 658 this._replacedURL_window.close(); 659 this._replacedURL_window = window.openDialog("chrome://markingcollection/content/replacedURL.xul", "", "chrome,centerscreen,alwaysRaised=yes,dependent=yes", result); 660 }, 661 _replacedURL_CB: function(aResult) { 662 var self = mcTreeHandler; 663 if (aResult.accept) { 664 if (!self.progressWindow) { 665 var x = screen.width; 666 var y = screen.height; 667 self.progressWindow = window.openDialog( 668 "chrome://markingcollection/content/progress.xul", 669 "myProgress", "chrome,centerscreen,alwaysRaised,dependent=yes,left=" + x + ",top=" + y, 670 {status: mcMainService.STRING.getString("MSG_REPLACED_URL") + "..."}); 671 } 672 if (self.progressWindow && !self.progressWindow.closed) { 673 if (aResult.objArr.length > 0) { 674 if (self.progressWindow.setStatus) 675 self.progressWindow.setStatus(mcMainService.STRING.getString("MSG_REPLACED_URL") + "... [ " + aResult.objArr.length + " ]"); 676 self.progressWindow.focus(); 677 setTimeout(function() { 678 mcTreeHandler._replacedURL(aResult.objArr); 679 }, 0); 680 } else { 681 if (self.progressWindow && !self.progressWindow.closed) 682 self.progressWindow.close(); 683 self.progressWindow = null; 684 } 685 } 686 } 687 if (self._replacedURL_window && !self._replacedURL_window.closed) 688 self._replacedURL_window.close(); 689 self._replacedURL_window = null; 690 }, 691 _replacedURL: function(aObjArr) { 692 if (this.progressWindow && !this.progressWindow.closed) { 693 if (aObjArr.length > 0) { 694 if (this.progressWindow.setStatus) 695 this.progressWindow.setStatus(mcMainService.STRING.getString("MSG_REPLACED_URL") + "... [ " + aObjArr.length + " ]"); 696 this.progressWindow.focus(); 697 } else { 698 if (this.progressWindow && !this.progressWindow.closed) 699 this.progressWindow.close(); 700 this.progressWindow = null; 701 } 702 } 703 if (aObjArr.length <= 0) { 704 mcTreeViewModeService.rebuild(); 705 return; 706 } 8 707 9 get DataSource(){ return window.top.bitsObjectMng.DataSource; }, 10 get Common() { return window.top.bitsObjectMng.Common; }, 11 get XPath() { return window.top.bitsObjectMng.XPath; }, 12 get Database() { return window.top.bitsObjectMng.Database; }, 13 get gBrowser() { return window.top.bitsObjectMng.getBrowser();}, 708 var obj = aObjArr.shift(); 709 var dbtype = obj.dbtype; 710 delete obj.dbtype; 711 if (obj.fid_style != undefined) 712 delete obj.fid_style; 713 if (obj.fid_title != undefined) 714 delete obj.fid_title; 715 if (obj.folder_order != undefined) 716 delete obj.folder_order; 717 var rtn = this.Database.updateObject(obj, dbtype); 14 718 15 get resource(){ 16 try{ 17 if(this.TREE.view.selection.count < 1 || this.TREE.currentIndex < 0) 18 return null; 19 else 20 return this.TREE.builderView.getResourceAtIndex(this.TREE.currentIndex); 21 }catch(ex){ 22 _dump(ex); 23 return null; 24 } 25 }, 26 27 get object(){ 28 var rValue; 29 var obj = null; 30 var res = this.resource; 31 if(res){ 32 var id = this.DataSource.getProperty(res,"id"); 33 var dbtype = this.DataSource.getProperty(res,"dbtype"); 34 var rValue; 35 if(this.DataSource.isContainer(res)){ 36 rValue = this.Database.getFolderFormID(id,dbtype); 37 if(!rValue){ 38 rValue = []; 39 rValue[0] = { 40 fid : id, 41 fid_title : this.DataSource.getProperty(res,"title"), 42 dbtype : dbtype, 43 fid_mode : this.DataSource.getProperty(res,"editmode") 44 }; 45 } 46 }else{ 47 rValue = mcTreeHandler.Database.getObjectFormID(id,dbtype); 48 } 49 } 50 if(rValue && rValue.length>0) obj = rValue[0]; 51 return obj; 52 }, 53 54 autoCollapse : false, 55 progressWindow : null, 56 57 init : function(isContainer){ 58 try{ 59 this.TREE.setAttribute("ref",this.DataSource.ABOUT_ROOT); 60 this.TREE.database.AddDataSource(this.DataSource.data); 61 this.autoCollapse = nsPreferences.getBoolPref("wiredmarker.tree.autoCollapse", false); 62 if(isContainer) document.getElementById("mcTreeRule").setAttribute("iscontainer", true); 63 this.TREE.builder.rebuild(); 64 65 this.TREE_POPUP.setAttribute("ref",this.DataSource.ABOUT_ROOT); 66 this.TREE_POPUP.database.AddDataSource(this.DataSource.data); 67 this.TREE_POPUP.builder.rebuild(); 68 }catch(ex){ 69 } 70 }, 71 72 done : function(){ 73 this.DataSource.flush(); 74 var dsEnum = this.TREE.database.GetDataSources(); 75 while(dsEnum.hasMoreElements()){ 76 var ds = dsEnum.getNext().QueryInterface(Components.interfaces.nsIRDFDataSource); 77 this.TREE.database.RemoveDataSource(ds); 78 } 79 }, 80 81 pageshow : function(){ 82 try{ 83 var selectIdx = mcTreeHandler.TREE.currentIndex; 84 mcTreeHandler.TREE.builder.rebuild(); 85 if(selectIdx>=0){ 86 mcTreeHandler.TREE.currentIndex = selectIdx; 87 if(!mcTreeHandler.TREE.view.selection.isSelected(mcTreeHandler.TREE.currentIndex)) mcTreeHandler.TREE.view.selection.select(mcTreeHandler.TREE.currentIndex); 88 mcTreeHandler.TREE.focus(); 89 } 90 }catch(ex){} 91 }, 92 93 onPopuphidden : function(aEvent){ 94 var self = mcTreeHandler; 95 var resource = self.resource; 96 if(resource){ 97 var contextmenu = self.DataSource.getProperty(resource,"contextmenu"); 98 var menu = document.getElementById(contextmenu); 99 if(menu) menu.setAttribute("hidden","true"); 100 } 101 }, 102 103 onMousedown : function(aEvent){ 104 mcTreeImageTooltip.onMousedown(aEvent); 105 mcItemView.onTreeClick(aEvent); 106 if(aEvent.button == 2){ 107 if(bitsSearchAcross.getIndex() == mcTreeHandler.TREE.currentIndex){ 108 mcTreeHandler.TREE.removeAttribute("contextmenu"); 109 return; 110 } 111 var contextmenu_mode = nsPreferences.copyUnicharPref("wiredmarker.contextmenu.mode"); 112 if(contextmenu_mode == "legacy"){ 113 mcTreeHandler.TREE.setAttribute("contextmenu",this.POPUP.id); 114 this.POPUP.removeEventListener("popuphidden",mcTreeHandler.onPopuphidden,false); 115 var resource = this.resource; 116 if(resource){ 117 var contextmenu = this.DataSource.getProperty(resource,"contextmenu"); 118 if(contextmenu != undefined && contextmenu != ""){ 119 var menu = document.getElementById(contextmenu); 120 if(menu) menu.removeAttribute("hidden"); 121 this.POPUP.addEventListener("popuphidden",mcTreeHandler.onPopuphidden,false); 122 } 123 } 124 }else{ 125 var resource = this.resource; 126 if(this.DataSource.isContainer(resource)){ 127 mcTreeHandler.TREE.setAttribute("contextmenu",this.POPUP_FOLDER.id); 128 this.POPUP_FOLDER.removeEventListener("popuphidden",mcTreeHandler.onPopuphidden,false); 129 if(resource){ 130 var contextmenu = this.DataSource.getProperty(resource,"contextmenu"); 131 if(contextmenu != undefined && contextmenu != ""){ 132 var menu = document.getElementById(contextmenu); 133 if(menu) menu.removeAttribute("hidden"); 134 this.POPUP_FOLDER.addEventListener("popuphidden",mcTreeHandler.onPopuphidden,false); 135 } 136 } 137 }else{ 138 mcTreeHandler.TREE.setAttribute("contextmenu",this.POPUP_OBJECT.id); 139 this.POPUP_OBJECT.removeEventListener("popuphidden",mcTreeHandler.onPopuphidden,false); 140 if(resource){ 141 var contextmenu = this.DataSource.getProperty(resource,"contextmenu"); 142 if(contextmenu != undefined && contextmenu != ""){ 143 var menu = document.getElementById(contextmenu); 144 if(menu) menu.removeAttribute("hidden"); 145 this.POPUP_OBJECT.addEventListener("popuphidden",mcTreeHandler.onPopuphidden,false); 146 } 147 } 148 } 149 } 150 }else{ 151 mcTreeHandler.TREE.removeAttribute("contextmenu"); 152 } 153 }, 154 155 onMouseup : function(aEvent){}, 156 157 onMousemove : function(aEvent){ 158 var param = { 159 tree : mcTreeHandler.TREE 160 }; 161 try{ 162 var row = {}; 163 var col = {}; 164 var childElt = {}; 165 param.tree.treeBoxObject.getCellAt(aEvent.clientX, aEvent.clientY, row, col, childElt); 166 if(!row.value || !col.value || !childElt.value || childElt.value != "text"){ 167 }else{ 168 param.row = row; 169 param.col = col; 170 param.childElt = childElt; 171 if(mcTreeImageTooltip.tooltipRow != row.value){ 172 var curRes = param.tree.builderView.getResourceAtIndex(row.value); 173 var id = this.DataSource.getProperty(curRes,"id"); 174 var dbtype = this.DataSource.getProperty(curRes,"dbtype"); 175 var rtnObj = this.Database.getObject({oid:id},dbtype); 176 if(rtnObj) param.obj = rtnObj[0]; 177 } 178 } 179 }catch(e){} 180 mcTreeImageTooltip.onMousemove(aEvent,param); 181 }, 182 183 onMouseout : function(aEvent){ 184 mcTreeImageTooltip.onMouseout(aEvent); 185 }, 186 187 onClick : function(aEvent, aType){ 188 var curIdx = this.TREE.currentIndex; 189 if(bitsSearchAcross.getIndex() == curIdx){ 190 mcPropertyView.dispProperty(); 191 return; 192 } 193 if(curIdx>=0) mcPropertyView.dispProperty(mcTreeHandler.object); 194 var res = (mcTreeHandler.TREE.view.selection.count >= 1 && mcTreeHandler.TREE.currentIndex >= 0) ? mcTreeHandler.resource : null; 195 if(aEvent.button == 2){ 196 window.top.bitsScrapPartyAddonService.eventListener(aEvent, 1, res); 197 aEvent.stopPropagation(); 198 return; 199 } 200 if(aEvent.button != 0 && aEvent.button != 1){ 201 window.top.bitsScrapPartyAddonService.eventListener(aEvent, 1, res); 202 aEvent.stopPropagation(); 203 return; 204 } 205 var row = {}; 206 var col = {}; 207 var obj = {}; 208 this.TREE.treeBoxObject.getCellAt(aEvent.clientX, aEvent.clientY, row, col, obj); 209 if(!obj.value || obj.value == "twisty") return; 210 if(this.TREE.view.isContainer(curIdx)){ 211 var curRes = mcTreeHandler.TREE.builderView.getResourceAtIndex(curIdx); 212 var source = this.DataSource.getProperty(curRes,"source"); 213 if(source != "") mcController.open(this.resource, aEvent.button == 1 || aEvent.ctrlKey || aEvent.shiftKey); 214 }else{ 215 if(aType < 2 && aEvent.button != 1) return; 216 mcController.open(this.resource, aEvent.button == 1 || aEvent.ctrlKey || aEvent.shiftKey); 217 } 218 window.top.bitsScrapPartyAddonService.eventListener(aEvent, 1, res); 219 }, 220 221 onKeyDown : function(aEvent){}, 222 223 onKeyUp : function(aEvent){}, 224 225 onKeyPress : function(aEvent){ 226 switch(aEvent.keyCode){ 227 case aEvent.DOM_VK_RETURN : 228 if(this.TREE.view.isContainer(this.TREE.currentIndex)) return; 229 mcController.open(this.resource, aEvent.ctrlKey || aEvent.shiftKey); 230 break; 231 case aEvent.DOM_VK_DELETE : 232 if(bitsSearchAcross.getIndex() == mcTreeHandler.TREE.currentIndex) return; 233 if(!(aEvent.ctrlKey || aEvent.shiftKey)){ 234 aEvent.preventDefault(); 235 var res = mcTreeHandler.resource; 236 if(!res) return; 237 var id = this.DataSource.getProperty(res,"id"); 238 var type = this.DataSource.getProperty(res,"type"); 239 if(type == "localfolder") return; 240 if(type == window.top.bitsMarkingCollection._uncategorized.dbtype) return; 241 var refRootfolder = nsPreferences.copyUnicharPref("wiredmarker.rootfolder",""); 242 if(refRootfolder == id) return; 243 this.remove(aEvent); 244 } 245 break; 246 case aEvent.DOM_VK_F2 : 247 mcController.property(this.resource); 248 break; 249 default: 250 break; 251 } 252 }, 253 254 onDblClick : function(aEvent){ 255 if(aEvent.originalTarget.localName != "treechildren" || aEvent.button != 0) return; 256 if(this.TREE.view.isContainer(this.TREE.currentIndex)) return; 257 if(aEvent.button == 2){ 258 aEvent.stopPropagation(); 259 return; 260 } 261 mcController.open(this.resource, aEvent.ctrlKey || aEvent.shiftKey); 262 return; 263 }, 264 265 existsFolderTitle : function(aRes,aTitle){ 266 var i; 267 var len; 268 var contResList = this.DataSource.flattenResources(aRes, 1, false); 269 for(i=0,len=contResList.length;i<len;i++){ 270 if(aRes.Value==contResList[i].Value) continue; 271 if(this.DataSource.getProperty(contResList[i],"title")==aTitle) return true; 272 } 273 return false; 274 }, 275 276 create : function(pIdx){ 277 var curIdx = pIdx; 278 var curRes = null; 279 if(pIdx>=0){ 280 if(!mcTreeHandler.TREE.view.isContainer(curIdx)) return; 281 curRes = mcTreeHandler.TREE.builderView.getResourceAtIndex(curIdx); 282 if(!mcTreeHandler.TREE.view.isContainerOpen(curIdx)) mcTreeHandler.TREE.view.toggleOpenState(curIdx); 283 }else{ 284 curRes = this.Common.RDF.GetResource(mcTreeHandler.TREE.ref); 285 } 286 var title = this.DataSource.getProperty(curRes,"title"); 287 var style = this.DataSource.getProperty(curRes,"style"); 288 var editmode = "0"; 289 if(title != ""){ 290 title = "New Folder ["+title+"]"; 291 }else{ 292 title = "New Folder"; 293 } 294 if(editmode == "") editmode = "0"; 295 if(!style || style==""){ 296 var styleIdx = nsPreferences.getIntPref("wiredmarker.folderstyleindex",1); 297 if(styleIdx>8) styleIdx = 1; 298 style = bitsMarker.PRESET_STYLES[styleIdx]; 299 nsPreferences.setIntPref("wiredmarker.folderstyleindex",styleIdx); 300 } 301 if(this.existsFolderTitle(curRes,title)){ 302 var newTitle; 303 var cnt=1; 304 do{ 305 newTitle = title+"("+(++cnt)+")"; 306 }while(this.existsFolderTitle(curRes,newTitle)); 307 title = newTitle; 308 } 309 var newRes = mcMainService.createGroupFolder(title,curRes.Value,undefined,style,"",editmode); 310 mcController.rebuildLocal(); 311 window.top.bitsMarkingCollection.reOrder(curRes); 312 var newIdx = mcTreeHandler.TREE.builderView.getIndexOfResource(newRes); 313 mcTreeHandler.TREE.view.selection.select(newIdx); 314 mcTreeHandler.TREE.focus(); 315 var result = mcController.property(newRes); 316 if(result){ 317 window.top.bitsMarkingCollection.reOrder(curRes); 318 }else{ 319 mcTreeHandler.remove(undefined,undefined,true); 320 } 321 var newIdx = mcTreeHandler.TREE.builderView.getIndexOfResource(newRes); 322 mcController.rebuildLocal(); 323 var selectIdx = newIdx; 324 if(selectIdx<0) selectIdx = pIdx; 325 mcTreeHandler.TREE.currentIndex = selectIdx; 326 if(!mcTreeHandler.TREE.view.selection.isSelected(mcTreeHandler.TREE.currentIndex)) mcTreeHandler.TREE.view.selection.select(mcTreeHandler.TREE.currentIndex); 327 mcTreeHandler.TREE.focus(); 328 mcTreeHandler.TREE.treeBoxObject.ensureRowIsVisible(selectIdx); 329 mcPropertyView.dispProperty(mcTreeHandler.object); 330 }, 331 332 removeFolder : function(aEvent){ 333 if(!mcController.confirmRemovingFor(this.resource)) return false; 334 if(aEvent) window.top.bitsScrapPartyAddonService.eventListener(aEvent, 0, this.resource); 335 var aMode = this.DataSource.getProperty(this.resource,"dbtype"); 336 if(!this.Database.beginTransaction(aMode)) return false; 337 var curIdx = this.TREE.currentIndex; 338 var curRes = this.TREE.builderView.getResourceAtIndex(curIdx); 339 this._removeFolder(curRes); 340 this.Database.endTransaction(aMode); 341 mcController.rebuildLocal(); 342 mcItemView.onTreeClick(); 343 if(aEvent) window.top.bitsScrapPartyAddonService.eventListener(aEvent, 1, this.resource); 344 }, 345 346 _removeFolder : function(aRes){ 347 if(!aRes) return []; 348 var curRes = aRes; 349 try{ 350 this._removeAll(curRes); 351 var delObj = []; 352 var foldResList = this.DataSource.flattenResources(curRes, 1, true); 353 for(i=foldResList.length-1;i>=0;i--){ 354 var pRes = this.DataSource.findParentResource(foldResList[i]); 355 if(!this.DataSource.data.ArcLabelsOut(foldResList[i]).hasMoreElements() || this.Common.RDFCU.indexOf(this.DataSource.data, pRes, foldResList[i]) < 0) continue; 356 delObj.push({ 357 id : this.DataSource.getProperty(foldResList[i],"id"), 358 dbtype : this.DataSource.getProperty(foldResList[i],"dbtype") 359 }); 360 this.Common.RDFC.Init(this.DataSource.data, pRes); 361 this.Common.RDFC.RemoveElement(foldResList[i], true); 362 } 363 var rmIDs = []; 364 var addIDs = []; 365 var depth = 0; 366 do{ 367 addIDs = this.DataSource.cleanUpIsolation(); 368 rmIDs = rmIDs.concat(addIDs); 369 }while(addIDs.length > 0 && ++depth < 100); 370 this.DataSource.flush(); 371 for(var i=0;i<delObj.length;i++){ 372 this.Database.removeFolder(delObj[i].id,delObj[i].dbtype,false); 373 } 374 }catch(e){ 375 _dump("mcTreeHandler._removeFolder():"+e); 376 } 377 }, 378 379 removeAllFolder : function(aEvent){ 380 if(!mcController.confirmRemovingFor(this.resource)) return false; 381 if(aEvent) window.top.bitsScrapPartyAddonService.eventListener(aEvent, 0, this.resource); 382 var aMode = this.DataSource.getProperty(this.resource,"dbtype"); 383 if(!this.Database.beginTransaction(aMode)) return false; 384 var curRes = this.TREE.builderView.getResourceAtIndex(this.TREE.currentIndex); 385 try{ 386 var delObj = []; 387 var foldResList = this.DataSource.flattenResources(curRes, 1, false); 388 var i,j; 389 for(i=foldResList.length-1;i>=0;i--){ 390 if(foldResList[i].Value == curRes.Value) continue; 391 this._removeAll(foldResList[i]); 392 } 393 var foldResList = this.DataSource.flattenResources(curRes, 1, true); 394 for(i=foldResList.length-1;i>=0;i--){ 395 if(foldResList[i].Value == curRes.Value) continue; 396 var pRes = this.DataSource.findParentResource(foldResList[i]); 397 if(!this.DataSource.data.ArcLabelsOut(foldResList[i]).hasMoreElements() || this.Common.RDFCU.indexOf(this.DataSource.data, pRes, foldResList[i]) < 0) continue; 398 delObj.push({ 399 id : this.DataSource.getProperty(foldResList[i],"id"), 400 dbtype : this.DataSource.getProperty(foldResList[i],"dbtype") 401 }); 402 this.Common.RDFC.Init(this.DataSource.data, pRes); 403 this.Common.RDFC.RemoveElement(foldResList[i], true); 404 } 405 var rmIDs = []; 406 var addIDs = []; 407 var depth = 0; 408 do{ 409 addIDs = this.DataSource.cleanUpIsolation(); 410 rmIDs = rmIDs.concat(addIDs); 411 }while(addIDs.length > 0 && ++depth < 100); 412 this.DataSource.flush(); 413 for(var i=0;i<delObj.length;i++){ 414 this.Database.removeFolder(delObj[i].id,delObj[i].dbtype,false); 415 } 416 }catch(e){ 417 _dump("mcTreeHandler.removeAllFolder():"+e); 418 } 419 this.Database.endTransaction(aMode); 420 mcController.rebuildLocal(); 421 if(aEvent) window.top.bitsScrapPartyAddonService.eventListener(aEvent, 1, this.resource); 422 }, 423 424 removeAll : function(aEvent){ 425 if(!mcController.confirmRemovingFor(this.resource)) return false; 426 if(aEvent) window.top.bitsScrapPartyAddonService.eventListener(aEvent, 0, this.resource); 427 var aMode = this.DataSource.getProperty(this.resource,"dbtype"); 428 if(!this.Database.beginTransaction(aMode)) return false; 429 var curRes = this.TREE.builderView.getResourceAtIndex(this.TREE.currentIndex); 430 this._removeAll(curRes); 431 this.Database.endTransaction(aMode); 432 mcController.rebuildLocal(); 433 if(aEvent) window.top.bitsScrapPartyAddonService.eventListener(aEvent, 1, this.resource); 434 }, 435 436 _removeAll : function(aRes){ 437 if(!aRes) return false; 438 var curRes = aRes; 439 try{ 440 var delObj = []; 441 var foldResList = this.DataSource.flattenResources(curRes, 1, true); 442 var i,j; 443 for(i=foldResList.length-1;i>=0;i--){ 444 var pfid = this.DataSource.getProperty(foldResList[i],"id"); 445 var contResList = this.DataSource.flattenResources(foldResList[i], 2, false); 446 this.Common.RDFC.Init(this.DataSource.data, foldResList[i]); 447 for(j=0;j<contResList.length;j++){ 448 if(!this.DataSource.data.ArcLabelsOut(contResList[j]).hasMoreElements() || this.Common.RDFCU.indexOf(this.DataSource.data, foldResList[i], contResList[j]) < 0) continue; 449 delObj.push({ 450 pfid : pfid, 451 id : this.DataSource.getProperty(contResList[j],"id"), 452 dbtype : this.DataSource.getProperty(contResList[j],"dbtype"), 453 source : this.DataSource.getProperty(contResList[j],"source") 454 }); 455 this.Common.RDFC.RemoveElement(contResList[j], true); 456 } 457 } 458 var rmIDs = []; 459 var addIDs = []; 460 var depth = 0; 461 do{ 462 addIDs = this.DataSource.cleanUpIsolation(); 463 rmIDs = rmIDs.concat(addIDs); 464 }while(addIDs.length > 0 && ++depth < 100); 465 this.DataSource.flush(); 466 var match_exp = new RegExp("^"+bitsMarker.id_key+".+$","m"); 467 for(var i=0;i<delObj.length;i++){ 468 this.Database.removeObject({oid:delObj[i].id,pfid:delObj[i].pfid},delObj[i].dbtype,false); 469 if(delObj[i].source.match(match_exp)) bitsMarker.unmarkerWindow(delObj[i].source); 470 } 471 }catch(e){ 472 _dump("mcTreeHandler.removeAll():"+e); 473 return false; 474 } 475 return true; 476 }, 477 478 remove : function(aEvent,pRes,pConfirm,aTransaction){ 479 if(pConfirm == undefined) pConfirm = false; 480 if(aTransaction == undefined) aTransaction = true; 481 if(pRes == undefined && this.TREE.view.selection.count == 0) return false; 482 if(!pConfirm) if(!mcController.confirmRemovingFor(this.resource)) return false; 483 if(aEvent) window.top.bitsScrapPartyAddonService.eventListener(aEvent, 0, this.resource); 484 var resList = []; 485 var parList = []; 486 if(this.TREE.view.selection.count > 1){ 487 var idxList = this.getSelection(false, 2); 488 if(idxList.length < 1) return false; 489 if(this.validateMultipleSelection(idxList) == false) return false; 490 var i; 491 for(i=0;i<idxList.length;i++){ 492 resList.push(this.TREE.builderView.getResourceAtIndex(idxList[i])); 493 parList.push(this.getParentResource(idxList[i])); 494 } 495 }else{ 496 var curRes; 497 var parRes; 498 if(pRes == undefined){ 499 var curIdx = this.TREE.currentIndex; 500 curRes = this.TREE.builderView.getResourceAtIndex(curIdx); 501 parRes = this.getParentResource(curIdx); 502 }else{ 503 curRes = pRes; 504 parRes = this.DataSource.findParentResource(pRes); 505 } 506 resList.push(curRes); 507 parList.push(parRes); 508 var match_exp = new RegExp("^"+bitsMarker.id_key+".+$","m"); 509 var source = this.DataSource.getProperty(curRes,"source"); 510 if(source.match(match_exp)) bitsMarker.unmarkerWindow(source); 511 var id = this.DataSource.getProperty(curRes,"id"); 512 var dbtype = this.DataSource.getProperty(curRes,"dbtype"); 513 var pfid = this.DataSource.getProperty(curRes,"pfid"); 514 var about = this.DataSource.getID2About(id,pfid,dbtype); 515 if(curRes.Value != about){ 516 var res = mcTreeDNDHandler.Common.RDF.GetResource(about); 517 resList.push(res); 518 parList.push(this.DataSource.findParentResource(res)); 519 var source = this.DataSource.getProperty(res,"source"); 520 if(source.match(match_exp)) bitsMarker.unmarkerWindow(source); 521 } 522 if(aTransaction) if(!this.Database.beginTransaction(dbtype)) return false; 523 if(this.DataSource.isContainer(curRes)){ 524 this.Database.removeFolder(id,dbtype,false); 525 }else{ 526 this.Database.removeObject({oid:id,pfid:pfid},dbtype,false); 527 } 528 if(aTransaction) this.Database.endTransaction(dbtype); 529 } 530 var rmIDs = mcController.removeInternal(resList, parList, false); 531 if(aTransaction) mcPropertyView.dispProperty(mcTreeHandler.object); 532 this.isEdit = true; 533 if(aEvent) window.top.bitsScrapPartyAddonService.eventListener(aEvent, 1, this.resource); 534 return true; 535 }, 536 537 replacedURL : function(aEvent){ 538 var curIdx = this.TREE.currentIndex; 539 var curRes = this.TREE.builderView.getResourceAtIndex(curIdx); 540 var parRes = this.getParentResource(curIdx); 541 var id = this.DataSource.getProperty(curRes,"id"); 542 var dbtype = this.DataSource.getProperty(curRes,"dbtype"); 543 if(!this.DataSource.isContainer(curRes)) return; 544 var folderFilterHash = {}; 545 var tmpFolderFilter = nsPreferences.copyUnicharPref("wiredmarker.filter.folder",""); 546 var tmpFolderFilterArr = tmpFolderFilter.split("\t"); 547 var i; 548 for(i=0;i<tmpFolderFilterArr.length;i++){ 549 if(!tmpFolderFilterArr[i].match(/^(\d+):(\d+):(.+)$/)) continue; 550 var filter_fid = RegExp.$1; 551 var filter_casesensitive = RegExp.$2; 552 var filter_keyword = RegExp.$3; 553 folderFilterHash[filter_fid] = new RegExp(filter_keyword,(filter_casesensitive==1)?"mg":"img"); 554 } 555 tmpFolderFilterArr = undefined; 556 tmpFolderFilter = undefined; 557 var prompts = this.Common.PROMPT; 558 var flags = prompts.STD_YES_NO_BUTTONS + prompts.BUTTON_POS_1_DEFAULT; 559 var button = prompts.confirmEx(window, mcMainService.STRING.getString("CONFIRM_REPLACED_TITLE"), mcMainService.STRING.getString("CONFIRM_REPLACED_TARGET"), flags, "", "", "", null, {}); 560 var contResList = []; 561 if(button==0){ 562 var folderList = this.DataSource.flattenResources(curRes, 1, true); 563 for(var i=0;i<folderList.length;i++){ 564 var fid = this.DataSource.getProperty(folderList[i],"id"); 565 var rtn = this.Database.getObject({pfid : fid},dbtype); 566 if(!rtn) continue; 567 if(folderFilterHash[fid]) rtn = rtn.filter(function(element, index, array){ return folderFilterHash[fid].test(element.oid_title); }); 568 contResList = contResList.concat(rtn); 569 } 570 }else{ 571 var rtn = this.Database.getObject({pfid : id},dbtype); 572 if(rtn){ 573 if(folderFilterHash[fid]) rtn = rtn.filter(function(element, index, array){ return folderFilterHash[fid].test(element.oid_title); }); 574 contResList = contResList.concat(rtn); 575 } 576 } 577 if(contResList.length == 0){ 578 this.Common.alert(mcMainService.STRING.getString("ALERT_REPLACED_URL"), mcMainService.STRING.getString("CONFIRM_REPLACED_TITLE")); 579 return; 580 } 581 var result = {}; 582 result.res = curRes; 583 result.list = contResList; 584 result.accept = false; 585 result.objArr = null; 586 result.callback = this._replacedURL_CB; 587 if(this._replacedURL_window && !this._replacedURL_window.closed) this._replacedURL_window.close(); 588 this._replacedURL_window = window.openDialog("chrome://markingcollection/content/replacedURL.xul", "", "chrome,centerscreen,alwaysRaised=yes,dependent=yes", result); 589 }, 590 591 _replacedURL_CB : function(aResult){ 592 var self = mcTreeHandler; 593 if(aResult.accept){ 594 if(!self.progressWindow){ 595 var x = screen.width; 596 var y = screen.height; 597 self.progressWindow = window.openDialog( 598 "chrome://markingcollection/content/progress.xul", 599 "myProgress", "chrome,centerscreen,alwaysRaised,dependent=yes,left="+x+",top="+y, 600 {status: mcMainService.STRING.getString("MSG_REPLACED_URL") + "..."}); 601 } 602 if(self.progressWindow && !self.progressWindow.closed){ 603 if(aResult.objArr.length>0){ 604 if(self.progressWindow.setStatus) self.progressWindow.setStatus(mcMainService.STRING.getString("MSG_REPLACED_URL") + "... [ "+ aResult.objArr.length + " ]"); 605 self.progressWindow.focus(); 606 setTimeout(function(){ mcTreeHandler._replacedURL(aResult.objArr); },0); 607 }else{ 608 if(self.progressWindow && !self.progressWindow.closed) self.progressWindow.close(); 609 self.progressWindow = null; 610 } 611 } 612 } 613 if(self._replacedURL_window && !self._replacedURL_window.closed) self._replacedURL_window.close(); 614 self._replacedURL_window = null; 615 }, 616 617 _replacedURL : function(aObjArr){ 618 if(this.progressWindow && !this.progressWindow.closed){ 619 if(aObjArr.length>0){ 620 if(this.progressWindow.setStatus) this.progressWindow.setStatus(mcMainService.STRING.getString("MSG_REPLACED_URL") + "... [ "+ aObjArr.length + " ]"); 621 this.progressWindow.focus(); 622 }else{ 623 if(this.progressWindow && !this.progressWindow.closed) this.progressWindow.close(); 624 this.progressWindow = null; 625 } 626 } 627 if(aObjArr.length <= 0){ 628 mcTreeViewModeService.rebuild(); 629 return; 630 } 631 632 var obj = aObjArr.shift(); 633 var dbtype = obj.dbtype; 634 delete obj.dbtype; 635 if(obj.fid_style != undefined) delete obj.fid_style; 636 if(obj.fid_title != undefined) delete obj.fid_title; 637 if(obj.folder_order != undefined) delete obj.folder_order; 638 var rtn = this.Database.updateObject(obj,dbtype); 639 640 setTimeout(function(){ mcTreeHandler._replacedURL(aObjArr); },0); 641 }, 642 643 getParentResource : function(aIdx){ 644 var parIdx = this.TREE.builderView.getParentIndex(aIdx); 645 if(parIdx == -1) 646 return this.TREE.resource; 647 else 648 return this.TREE.builderView.getResourceAtIndex(parIdx); 649 }, 650 651 getSelection : function(idx2res, rule){ 652 var ret = []; 653 var rc; 654 var i; 655 for(rc=0;rc<this.TREE.view.selection.getRangeCount();rc++){ 656 var start = {}, end = {}; 657 this.TREE.view.selection.getRangeAt(rc, start, end); 658 for(i=start.value;i<= end.value;i++){ 659 if(rule == 1 && !this.TREE.view.isContainer(i)) continue; 660 if(rule == 2 && this.TREE.view.isContainer(i)) continue; 661 ret.push(idx2res ? this.TREE.builderView.getResourceAtIndex(i) : i); 662 } 663 } 664 return ret; 665 }, 666 667 validateMultipleSelection : function(aIdxList){ 668 if(aIdxList.length != this.TREE.view.selection.count){ 669 this.Common.alert(mcMainService.STRING.getString("ERROR_MULTIPLE_SELECTION")); 670 return false; 671 } 672 return true; 673 }, 674 675 toggleFolder : function(aIdx){ 676 if(!aIdx) aIdx = this.TREE.currentIndex; 677 this.TREE.view.toggleOpenState(aIdx); 678 if(this.autoCollapse) this.collapseFoldersBut(aIdx); 679 }, 680 681 toggleAllFolders : function(forceClose){ 682 var willOpen = true; 683 var i; 684 for(i=0;i<this.TREE.view.rowCount;i++){ 685 if(!this.TREE.view.isContainer(i)) continue; 686 if(this.TREE.view.isContainerOpen(i)){ willOpen = false; break; } 687 } 688 if(forceClose) willOpen = false; 689 if(willOpen){ 690 for(i=0;i<this.TREE.view.rowCount;i++){ 691 if(this.TREE.view.isContainer(i) && !this.TREE.view.isContainerOpen(i)) this.TREE.view.toggleOpenState(i); 692 } 693 }else{ 694 for(i=this.TREE.view.rowCount-1;i>=0;i--){ 695 if(this.TREE.view.isContainer(i) && this.TREE.view.isContainerOpen(i)) this.TREE.view.toggleOpenState(i); 696 } 697 } 698 }, 699 700 openAllFolders : function(){ 701 var i; 702 for(i=0;i<this.TREE.view.rowCount;i++){ 703 if(this.TREE.view.isContainer(i) && !this.TREE.view.isContainerOpen(i)) this.TREE.view.toggleOpenState(i); 704 } 705 }, 706 707 collapseFoldersBut : function(curIdx){ 708 var ascIdxList = {}; 709 ascIdxList[curIdx] = true; 710 while(curIdx >= 0){ 711 curIdx = this.TREE.builderView.getParentIndex(curIdx); 712 ascIdxList[curIdx] = true; 713 } 714 var i; 715 for(i=this.TREE.view.rowCount-1;i>=0;i--){ 716 if(!ascIdxList[i] && this.TREE.view.isContainer(i) && this.TREE.view.isContainerOpen(i)){ 717 this.TREE.view.toggleOpenState(i); 718 } 719 } 720 }, 721 719 setTimeout(function() { 720 mcTreeHandler._replacedURL(aObjArr); 721 }, 0); 722 }, 723 getParentResource: function(aIdx) { 724 var parIdx = this.TREE.builderView.getParentIndex(aIdx); 725 if (parIdx == -1) 726 return this.TREE.resource; 727 else 728 return this.TREE.builderView.getResourceAtIndex(parIdx); 729 }, 730 getSelection: function(idx2res, rule) { 731 var ret = []; 732 var rc; 733 var i; 734 for (rc = 0; rc < this.TREE.view.selection.getRangeCount(); rc++) { 735 var start = {}, end = {}; 736 this.TREE.view.selection.getRangeAt(rc, start, end); 737 for (i = start.value; i <= end.value; i++) { 738 if (rule == 1 && !this.TREE.view.isContainer(i)) 739 continue; 740 if (rule == 2 && this.TREE.view.isContainer(i)) 741 continue; 742 ret.push(idx2res ? this.TREE.builderView.getResourceAtIndex(i) : i); 743 } 744 } 745 return ret; 746 }, 747 validateMultipleSelection: function(aIdxList) { 748 if (aIdxList.length != this.TREE.view.selection.count) { 749 this.Common.alert(mcMainService.STRING.getString("ERROR_MULTIPLE_SELECTION")); 750 return false; 751 } 752 return true; 753 }, 754 toggleFolder: function(aIdx) { 755 if (!aIdx) 756 aIdx = this.TREE.currentIndex; 757 this.TREE.view.toggleOpenState(aIdx); 758 if (this.autoCollapse) 759 this.collapseFoldersBut(aIdx); 760 }, 761 toggleAllFolders: function(forceClose) { 762 var willOpen = true; 763 var i; 764 for (i = 0; i < this.TREE.view.rowCount; i++) { 765 if (!this.TREE.view.isContainer(i)) 766 continue; 767 if (this.TREE.view.isContainerOpen(i)) { 768 willOpen = false; 769 break; 770 } 771 } 772 if (forceClose) 773 willOpen = false; 774 if (willOpen) { 775 for (i = 0; i < this.TREE.view.rowCount; i++) { 776 if (this.TREE.view.isContainer(i) && !this.TREE.view.isContainerOpen(i)) 777 this.TREE.view.toggleOpenState(i); 778 } 779 } else { 780 for (i = this.TREE.view.rowCount - 1; i >= 0; i--) { 781 if (this.TREE.view.isContainer(i) && this.TREE.view.isContainerOpen(i)) 782 this.TREE.view.toggleOpenState(i); 783 } 784 } 785 }, 786 openAllFolders: function() { 787 var i; 788 for (i = 0; i < this.TREE.view.rowCount; i++) { 789 if (this.TREE.view.isContainer(i) && !this.TREE.view.isContainerOpen(i)) 790 this.TREE.view.toggleOpenState(i); 791 } 792 }, 793 collapseFoldersBut: function(curIdx) { 794 var ascIdxList = {}; 795 ascIdxList[curIdx] = true; 796 while (curIdx >= 0) { 797 curIdx = this.TREE.builderView.getParentIndex(curIdx); 798 ascIdxList[curIdx] = true; 799 } 800 var i; 801 for (i = this.TREE.view.rowCount - 1; i >= 0; i--) { 802 if (!ascIdxList[i] && this.TREE.view.isContainer(i) && this.TREE.view.isContainerOpen(i)) { 803 this.TREE.view.toggleOpenState(i); 804 } 805 } 806 }, 722 807 }; 723 808 724 809 var mcController = { 725 _pageshow_elem_id : "", 726 _pageshow_elem_dbtype : "", 727 _pageshow_id : "", 728 729 get DataSource(){ return window.top.bitsObjectMng.DataSource; }, 730 get Common() { return window.top.bitsObjectMng.Common; }, 731 get XPath() { return window.top.bitsObjectMng.XPath; }, 732 get Database() { return window.top.bitsObjectMng.Database; }, 733 get gBrowser() { return window.top.bitsObjectMng.getBrowser();}, 734 735 get isTreeContext(){ 736 return document.popupNode.nodeName == "treechildren"; 737 }, 738 739 onPopupShowing : function(aEvent){ 740 if(aEvent.originalTarget.localName != "popup") return; 741 var res = mcTreeHandler.resource; 742 if(!res){ aEvent.preventDefault(); return; } 743 var viewmode = mcTreeViewModeService.viewmode; 744 var id = this.DataSource.getProperty(res,"id"); 745 var type = this.DataSource.getProperty(res,"type"); 746 var title = this.DataSource.getProperty(res,"title"); 747 var source = this.DataSource.getProperty(res,"source"); 748 var dbtype = this.DataSource.getProperty(res,"dbtype"); 749 if(type == window.top.bitsMarkingCollection._uncategorized.dbtype) type= 'localfolder'; 750 var hidePopupRemoveFolder = false; 751 var contFolderList = []; 752 var contItemList = []; 753 var existsObject = false; 754 if(type.indexOf("folder")>=0){ 755 contFolderList = this.DataSource.flattenResources(res, 1, false); 756 contItemList = this.DataSource.flattenResources(res, 2, true); 757 var folderList = this.DataSource.flattenResources(res, 1, true); 758 for(var i=0;i<folderList.length;i++){ 759 var fid = this.DataSource.getProperty(folderList[i],"id"); 760 if(!this.Database.existsObject({pfid : fid},dbtype)) continue; 761 existsObject = true; 762 break; 763 } 764 var refRootfolder = nsPreferences.copyUnicharPref("wiredmarker.rootfolder",""); 765 if(refRootfolder == id) hidePopupRemoveFolder = true; 766 } 767 var contextmenu_type = nsPreferences.copyUnicharPref("wiredmarker.contextmenu.type",""); 768 try{ 769 document.getElementById("mcPopupOpen").hidden = type.indexOf("folder")>=0; 770 document.getElementById("mcPopupOpenNewTab").hidden = type.indexOf("folder")>=0; 771 document.getElementById("mcPopupOpenAllItems").hidden = true; 772 document.getElementById("mcPopupOpenSeparator").hidden = (document.getElementById("mcPopupOpen").hidden && document.getElementById("mcPopupOpenAllItems").hidden); 773 document.getElementById("mcPopupCreates").hidden = type.indexOf("folder")<0; 774 document.getElementById("mcPopupRemoveContents").hidden = type.indexOf("folder")>=0 ; 775 document.getElementById("mcPopupRemoves").hidden = type=="item" || (contFolderList.length<=1 && type=="localfolder"); 776 document.getElementById("mcPopupRemoveAllFolder").hidden = type=="item" || contFolderList.length<=1; 777 document.getElementById("mcPopupRemoveFolder").hidden = type!="folder" || hidePopupRemoveFolder; 778 document.getElementById("mcPopupRemoveAllContents").hidden = contItemList.length==0; 779 document.getElementById("mcPopupEditReplacedURL").hidden = type.indexOf("folder")<0 || !existsObject || contextmenu_type == "simple"; 780 document.getElementById("mcPopupViewMenu").hidden = type.indexOf("folder")<0; 781 document.getElementById("mcPopupRootFolder").hidden = true; 782 document.getElementById("mcPopupFilter").hidden = type.indexOf("folder")<0 || contextmenu_type == "simple"; 783 document.getElementById("mcPopupFilterSeparator").hidden = !document.getElementById("mcPopupRootFolder").hidden || document.getElementById("mcPopupFilter").hidden || contextmenu_type == "simple"; 784 document.getElementById("mcPopupExport").hidden = type.indexOf("folder")<0; 785 document.getElementById("mcPopupTemplateFolder").hidden = type!="folder"; 786 document.getElementById("mcPopupImportTag").hidden = type!="folder" || contextmenu_type == "simple"; 787 document.getElementById("mcPopupFolderAutoOpenSeparator").hidden = !document.getElementById("mcPopupRootFolder").hidden || mcItemView.isChecked; 788 document.getElementById("mcPopupFolderAutoOpenSeparator").hidden = type!="folder" || mcItemView.isChecked;; 789 document.getElementById("mcPopupFolderAutoOpen").hidden = type!="folder" || mcItemView.isChecked; 790 document.getElementById("mcPopupAddonMenu").hidden = !(type.indexOf("folder")==0 && window.top.bitsScrapPartyAddonService.existsAddon(true) && contFolderList.length<=1 && !existsObject) || contextmenu_type == "simple"; 791 document.getElementById("mcPopupHyperAnchorCopyToClipboard").hidden = type.indexOf("folder")>=0; 792 document.getElementById("mcPopupHyperAnchorCopyFormatSetting").hidden = type.indexOf("folder")>=0; 793 document.getElementById("mcPopupHyperAnchorCopyFormatToClipboard").hidden = type.indexOf("folder")>=0; 794 if(!document.getElementById("mcPopupRootFolder").hidden){ 795 var index = mcTreeHandler.TREE.currentIndex; 796 var res = mcTreeHandler.TREE.builderView.getResourceAtIndex(index); 797 var baseID = this.DataSource.getProperty(res, "id"); 798 var rootfolder = nsPreferences.copyUnicharPref("wiredmarker.rootfolder",""); 799 if(baseID == rootfolder){ 800 document.getElementById("mcPopupRootFolder").setAttribute("checked",true); 801 }else{ 802 document.getElementById("mcPopupRootFolder").removeAttribute("checked"); 803 } 804 } 805 if(!document.getElementById("mcPopupFilter").hidden){ 806 if(mcTreeFolderFilterService.isUseFilter(res)) 807 document.getElementById("mcPopupFilter").setAttribute("checked",true); 808 else 809 document.getElementById("mcPopupFilter").removeAttribute("checked"); 810 } 811 if(!document.getElementById("mcPopupFolderAutoOpen").hidden){ 812 var folderautoopen = nsPreferences.getBoolPref("wiredmarker.folderautoopen", true); 813 if(folderautoopen){ 814 document.getElementById("mcPopupFolderAutoOpen").removeAttribute("checked"); 815 }else{ 816 document.getElementById("mcPopupFolderAutoOpen").setAttribute("checked",true); 817 } 818 } 819 document.getElementById("mcPopupFolderRemoveAllContents").hidden = contItemList.length==0; 820 document.getElementById("mcPopupFolderRemoveFolder").hidden = type!="folder" || hidePopupRemoveFolder; 821 window.top.bitsScrapPartyAddonService.eventListener(aEvent ,1, res); 822 }catch(ex){_dump(ex)} 823 }, 824 825 onPopupHiding : function(aEvent){ 826 if(aEvent.originalTarget.localName != "popup") return; 827 var res = mcTreeHandler.resource; 828 if(!res){ aEvent.preventDefault(); return; } 829 try{ 830 window.top.bitsScrapPartyAddonService.eventListener(aEvent ,1, res); 831 }catch(ex){_dump(ex)} 832 }, 833 834 copy : function(aMode){ 835 var aRes = mcTreeHandler.resource; 836 if(!aRes) return; 837 if(!aMode) aMode = 'copy'; 838 var id = this.DataSource.getProperty(aRes, "id"); 839 if(!id) return; 840 switch(this.DataSource.getProperty(aRes, "type")){ 841 case "folder" : 842 case "item" : 843 var id = this.DataSource.getProperty(aRes,"id"); 844 var dbtype = this.DataSource.getProperty(aRes, "dbtype"); 845 window.top.bitsMetaCapture.copyToClipBoard(id,dbtype,aMode); 846 break; 847 default : 848 break; 849 } 850 }, 851 852 open : function(aRes, tabbed){ 853 if(!aRes) aRes = mcTreeHandler.resource; 854 if(!aRes) return; 855 var id = this.DataSource.getProperty(aRes, "id"); 856 if(!id) return; 857 switch(this.DataSource.getProperty(aRes, "type")){ 858 case "folder" : 859 case "item" : 860 var id = this.DataSource.getProperty(aRes,"id"); 861 var pfid = this.DataSource.getProperty(aRes,"pfid"); 862 var dbtype = this.DataSource.getProperty(aRes, "dbtype"); 863 var aObject = this.Database.getObject({oid:id,pfid:pfid},dbtype)[0]; 864 this.Common.loadFromObject(aObject,tabbed); 865 break; 866 default : 867 this.Common.loadURL(mcMainService.baseURL + "data/" + id + "/index.html", tabbed || mcMainService.prefs.tabsOpen); 868 } 869 }, 870 871 openAllInTabs : function(aRes){ 872 if(!aRes) aRes = mcTreeHandler.resource; 873 if(!aRes) return; 874 var resList = this.DataSource.flattenResources(aRes, 2, true); 875 resList.forEach( 876 function(res){ 877 var uri = window.top.bitsObjectMng.DataSource.getProperty(res, "uri"); 878 window.top.bitsObjectMng.Common.loadURL(uri, true); 879 } 880 ); 881 }, 882 883 property : function(aRes){ 884 if(!aRes) aRes = mcTreeHandler.resource; 885 if(!aRes) return; 886 var id = this.DataSource.getProperty(aRes, "id"); 887 if(!id) return; 888 var result = {}; 889 var regexp = new RegExp("^"+this.DataSource.ABOUT_ITEM+"(\\d+)$"); 890 aRes.Value.match(regexp); 891 id = RegExp.$1; 892 var old_style = this.DataSource.getProperty(aRes, "style"); 893 window.openDialog("chrome://markingcollection/content/property.xul", "", "chrome,centerscreen,modal", id, result); 894 if(result.accept){ 895 try{ 896 this.DataSource.flush(); 897 this.rebuildLocal(); 898 if(this.DataSource.isContainer(aRes)){ 899 var fid = this.DataSource.getProperty(aRes, "id"); 900 var dbtype = this.DataSource.getProperty(aRes, "dbtype"); 901 var style = this.DataSource.getProperty(aRes, "style"); 902 var title = this.DataSource.getProperty(aRes, "title"); 903 if(fid == "0" && dbtype == window.top.bitsMarkingCollection._uncategorized.dbtype){ 904 nsPreferences.setUnicharPref("wiredmarker.uncategorized.style", style); 905 nsPreferences.setUnicharPref("wiredmarker.uncategorized.title", title); 906 }else{ 907 if(this.Database.updateFolder({fid:fid,fid_style:style},dbtype)) this.DataSource.setProperty(aRes,"style",style); 908 } 909 var doc_url = this.Common.getURLStringFromDocument(this.gBrowser.contentDocument); 910 var contResList = this.Database.getObject({pfid:fid,doc_url:doc_url}, dbtype); 911 if(contResList){ 912 var i; 913 for(i=0;i<contResList.length;i++){ 914 var source = bitsMarker.id_key+contResList[i].dbtype+contResList[i].oid; 915 mcTreeDNDHandler.Common.changeNodeStyleFromID(source,style,fid,contResList[i].oid,contResList[i].dbtype); 916 } 917 } 918 this.DataSource.flush(); 919 mcTreeCssService.init(); 920 this.rebuildLocal(); 921 mcPropertyView.dispProperty(mcTreeHandler.object); 922 if(mcItemView.isChecked) mcItemView.onTreeClick(); 923 }else{ 924 mcPropertyView.dispProperty(mcTreeHandler.object); 925 } 926 }catch(ex){_dump("property():["+ex+"]");} 927 } 928 return result.accept; 929 }, 930 931 removeInternal : function(aResList, aParResList, aBypassConfirm){ 932 var rmIDs = []; 933 for(var i=0;i<aResList.length;i++){ 934 var id = this.DataSource.getProperty(aResList[i],"id"); 935 var dbtype = this.DataSource.getProperty(aResList[i],"dbtype"); 936 var pfid = this.DataSource.getProperty(aResList[i],"pfid"); 937 if(!this.DataSource.exists(aResList[i]) || this.DataSource.getRelativeIndex(aParResList[i], aResList[i]) < 0){ 938 _dump("ERROR: Failed to remove resource.\n" + aResList[i].Value); 939 continue; 940 } 941 rmIDs = rmIDs.concat(this.DataSource.deleteItemDescending(aResList[i], aParResList[i])); 942 this.DataSource.setID2About(id,pfid,undefined,dbtype); 943 } 944 this.DataSource.flush(); 945 return rmIDs; 946 }, 947 948 confirmRemovingFor : function(aRes){ 949 try{ 950 if(this.DataSource.isContainer(aRes) || mcMainService.prefs.confirmDelete){ 951 return this.Common.confirm( mcMainService.STRING.getString("CONFIRM_DELETE")); 952 } 953 return true; 954 }catch(e){ 955 return false; 956 } 957 }, 958 959 rebuildLocal : function(){ 960 var currentIndex = mcTreeHandler.TREE.currentIndex; 961 mcTreeHandler.TREE.builder.rebuild(); 962 if(currentIndex>=0){ 963 mcTreeHandler.TREE.currentIndex = currentIndex; 964 if(!mcTreeHandler.TREE.view.selection.isSelected(mcTreeHandler.TREE.currentIndex)) mcTreeHandler.TREE.view.selection.select(mcTreeHandler.TREE.currentIndex); 965 mcTreeHandler.TREE.focus(); 966 mcTreeHandler.TREE.treeBoxObject.ensureRowIsVisible(currentIndex); 967 mcPropertyView.dispProperty(mcTreeHandler.object); 968 } 969 }, 970 810 _pageshow_elem_id: "", 811 _pageshow_elem_dbtype: "", 812 _pageshow_id: "", 813 get DataSource() { 814 return window.top.bitsObjectMng.DataSource; 815 }, 816 get Common() { 817 return window.top.bitsObjectMng.Common; 818 }, 819 get XPath() { 820 return window.top.bitsObjectMng.XPath; 821 }, 822 get Database() { 823 return window.top.bitsObjectMng.Database; 824 }, 825 get gBrowser() { 826 return window.top.bitsObjectMng.getBrowser(); 827 }, 828 get isTreeContext() { 829 return document.popupNode.nodeName == "treechildren"; 830 }, 831 onPopupShowing: function(aEvent) { 832 if (aEvent.originalTarget.localName != "popup") 833 return; 834 var res = mcTreeHandler.resource; 835 if (!res) { 836 aEvent.preventDefault(); 837 return; 838 } 839 var viewmode = mcTreeViewModeService.viewmode; 840 var id = this.DataSource.getProperty(res, "id"); 841 var type = this.DataSource.getProperty(res, "type"); 842 var title = this.DataSource.getProperty(res, "title"); 843 var source = this.DataSource.getProperty(res, "source"); 844 var dbtype = this.DataSource.getProperty(res, "dbtype"); 845 if (type == window.top.bitsMarkingCollection._uncategorized.dbtype) 846 type = 'localfolder'; 847 var hidePopupRemoveFolder = false; 848 var contFolderList = []; 849 var contItemList = []; 850 var existsObject = false; 851 if (type.indexOf("folder") >= 0) { 852 contFolderList = this.DataSource.flattenResources(res, 1, false); 853 contItemList = this.DataSource.flattenResources(res, 2, true); 854 var folderList = this.DataSource.flattenResources(res, 1, true); 855 for (var i = 0; i < folderList.length; i++) { 856 var fid = this.DataSource.getProperty(folderList[i], "id"); 857 if (!this.Database.existsObject({pfid: fid}, dbtype)) 858 continue; 859 existsObject = true; 860 break; 861 } 862 var refRootfolder = nsPreferences.copyUnicharPref("wiredmarker.rootfolder", ""); 863 if (refRootfolder == id) 864 hidePopupRemoveFolder = true; 865 } 866 var contextmenu_type = nsPreferences.copyUnicharPref("wiredmarker.contextmenu.type", ""); 867 try { 868 document.getElementById("mcPopupOpen").hidden = type.indexOf("folder") >= 0; 869 document.getElementById("mcPopupOpenNewTab").hidden = type.indexOf("folder") >= 0; 870 document.getElementById("mcPopupOpenAllItems").hidden = true; 871 document.getElementById("mcPopupOpenSeparator").hidden = (document.getElementById("mcPopupOpen").hidden && document.getElementById("mcPopupOpenAllItems").hidden); 872 document.getElementById("mcPopupCreates").hidden = type.indexOf("folder") < 0; 873 document.getElementById("mcPopupRemoveContents").hidden = type.indexOf("folder") >= 0; 874 document.getElementById("mcPopupRemoves").hidden = type == "item" || (contFolderList.length <= 1 && type == "localfolder"); 875 document.getElementById("mcPopupRemoveAllFolder").hidden = type == "item" || contFolderList.length <= 1; 876 document.getElementById("mcPopupRemoveFolder").hidden = type != "folder" || hidePopupRemoveFolder; 877 document.getElementById("mcPopupRemoveAllContents").hidden = contItemList.length == 0; 878 document.getElementById("mcPopupEditReplacedURL").hidden = type.indexOf("folder") < 0 || !existsObject || contextmenu_type == "simple"; 879 document.getElementById("mcPopupViewMenu").hidden = type.indexOf("folder") < 0; 880 document.getElementById("mcPopupRootFolder").hidden = true; 881 document.getElementById("mcPopupFilter").hidden = type.indexOf("folder") < 0 || contextmenu_type == "simple"; 882 document.getElementById("mcPopupFilterSeparator").hidden = !document.getElementById("mcPopupRootFolder").hidden || document.getElementById("mcPopupFilter").hidden || contextmenu_type == "simple"; 883 document.getElementById("mcPopupExport").hidden = type.indexOf("folder") < 0; 884 document.getElementById("mcPopupTemplateFolder").hidden = type != "folder"; 885 document.getElementById("mcPopupImportTag").hidden = type != "folder" || contextmenu_type == "simple"; 886 document.getElementById("mcPopupFolderAutoOpenSeparator").hidden = !document.getElementById("mcPopupRootFolder").hidden || mcItemView.isChecked; 887 document.getElementById("mcPopupFolderAutoOpenSeparator").hidden = type != "folder" || mcItemView.isChecked; 888 ; 889 document.getElementById("mcPopupFolderAutoOpen").hidden = type != "folder" || mcItemView.isChecked; 890 document.getElementById("mcPopupAddonMenu").hidden = !(type.indexOf("folder") == 0 && window.top.bitsScrapPartyAddonService.existsAddon(true) && contFolderList.length <= 1 && !existsObject) || contextmenu_type == "simple"; 891 document.getElementById("mcPopupHyperAnchorCopyToClipboard").hidden = type.indexOf("folder") >= 0; 892 document.getElementById("mcPopupHyperAnchorCopyFormatSetting").hidden = type.indexOf("folder") >= 0; 893 document.getElementById("mcPopupHyperAnchorCopyFormatToClipboard").hidden = type.indexOf("folder") >= 0; 894 if (!document.getElementById("mcPopupRootFolder").hidden) { 895 var index = mcTreeHandler.TREE.currentIndex; 896 var res = mcTreeHandler.TREE.builderView.getResourceAtIndex(index); 897 var baseID = this.DataSource.getProperty(res, "id"); 898 var rootfolder = nsPreferences.copyUnicharPref("wiredmarker.rootfolder", ""); 899 if (baseID == rootfolder) { 900 document.getElementById("mcPopupRootFolder").setAttribute("checked", true); 901 } else { 902 document.getElementById("mcPopupRootFolder").removeAttribute("checked"); 903 } 904 } 905 if (!document.getElementById("mcPopupFilter").hidden) { 906 if (mcTreeFolderFilterService.isUseFilter(res)) 907 document.getElementById("mcPopupFilter").setAttribute("checked", true); 908 else 909 document.getElementById("mcPopupFilter").removeAttribute("checked"); 910 } 911 if (!document.getElementById("mcPopupFolderAutoOpen").hidden) { 912 var folderautoopen = nsPreferences.getBoolPref("wiredmarker.folderautoopen", true); 913 if (folderautoopen) { 914 document.getElementById("mcPopupFolderAutoOpen").removeAttribute("checked"); 915 } else { 916 document.getElementById("mcPopupFolderAutoOpen").setAttribute("checked", true); 917 } 918 } 919 document.getElementById("mcPopupFolderRemoveAllContents").hidden = contItemList.length == 0; 920 document.getElementById("mcPopupFolderRemoveFolder").hidden = type != "folder" || hidePopupRemoveFolder; 921 window.top.bitsScrapPartyAddonService.eventListener(aEvent, 1, res); 922 } catch (ex) { 923 _dump(ex) 924 } 925 }, 926 onPopupHiding: function(aEvent) { 927 if (aEvent.originalTarget.localName != "popup") 928 return; 929 var res = mcTreeHandler.resource; 930 if (!res) { 931 aEvent.preventDefault(); 932 return; 933 } 934 try { 935 window.top.bitsScrapPartyAddonService.eventListener(aEvent, 1, res); 936 } catch (ex) { 937 _dump(ex) 938 } 939 }, 940 copy: function(aMode) { 941 var aRes = mcTreeHandler.resource; 942 if (!aRes) 943 return; 944 if (!aMode) 945 aMode = 'copy'; 946 var id = this.DataSource.getProperty(aRes, "id"); 947 if (!id) 948 return; 949 switch (this.DataSource.getProperty(aRes, "type")) { 950 case "folder" : 951 case "item" : 952 var id = this.DataSource.getProperty(aRes, "id"); 953 var dbtype = this.DataSource.getProperty(aRes, "dbtype"); 954 window.top.bitsMetaCapture.copyToClipBoard(id, dbtype, aMode); 955 break; 956 default : 957 break; 958 } 959 }, 960 open: function(aRes, tabbed) { 961 if (!aRes) 962 aRes = mcTreeHandler.resource; 963 if (!aRes) 964 return; 965 var id = this.DataSource.getProperty(aRes, "id"); 966 if (!id) 967 return; 968 switch (this.DataSource.getProperty(aRes, "type")) { 969 case "folder" : 970 case "item" : 971 var id = this.DataSource.getProperty(aRes, "id"); 972 var pfid = this.DataSource.getProperty(aRes, "pfid"); 973 var dbtype = this.DataSource.getProperty(aRes, "dbtype"); 974 var aObject = this.Database.getObject({oid: id, pfid: pfid}, dbtype)[0]; 975 this.Common.loadFromObject(aObject, tabbed); 976 break; 977 default : 978 this.Common.loadURL(mcMainService.baseURL + "data/" + id + "/index.html", tabbed || mcMainService.prefs.tabsOpen); 979 } 980 }, 981 openAllInTabs: function(aRes) { 982 if (!aRes) 983 aRes = mcTreeHandler.resource; 984 if (!aRes) 985 return; 986 var resList = this.DataSource.flattenResources(aRes, 2, true); 987 resList.forEach( 988 function(res) { 989 var uri = window.top.bitsObjectMng.DataSource.getProperty(res, "uri"); 990 window.top.bitsObjectMng.Common.loadURL(uri, true); 991 } 992 ); 993 }, 994 property: function(aRes) { 995 if (!aRes) 996 aRes = mcTreeHandler.resource; 997 if (!aRes) 998 return; 999 var id = this.DataSource.getProperty(aRes, "id"); 1000 if (!id) 1001 return; 1002 var result = {}; 1003 var regexp = new RegExp("^" + this.DataSource.ABOUT_ITEM + "(\\d+)$"); 1004 aRes.Value.match(regexp); 1005 id = RegExp.$1; 1006 var old_style = this.DataSource.getProperty(aRes, "style"); 1007 window.openDialog("chrome://markingcollection/content/property.xul", "", "chrome,centerscreen,modal", id, result); 1008 if (result.accept) { 1009 try { 1010 this.DataSource.flush(); 1011 this.rebuildLocal(); 1012 if (this.DataSource.isContainer(aRes)) { 1013 var fid = this.DataSource.getProperty(aRes, "id"); 1014 var dbtype = this.DataSource.getProperty(aRes, "dbtype"); 1015 var style = this.DataSource.getProperty(aRes, "style"); 1016 var title = this.DataSource.getProperty(aRes, "title"); 1017 if (fid == "0" && dbtype == window.top.bitsMarkingCollection._uncategorized.dbtype) { 1018 nsPreferences.setUnicharPref("wiredmarker.uncategorized.style", style); 1019 nsPreferences.setUnicharPref("wiredmarker.uncategorized.title", title); 1020 } else { 1021 if (this.Database.updateFolder({fid: fid, fid_style: style}, dbtype)) 1022 this.DataSource.setProperty(aRes, "style", style); 1023 } 1024 var doc_url = this.Common.getURLStringFromDocument(this.gBrowser.contentDocument); 1025 var contResList = this.Database.getObject({pfid: fid, doc_url: doc_url}, dbtype); 1026 if (contResList) { 1027 var i; 1028 for (i = 0; i < contResList.length; i++) { 1029 var source = bitsMarker.id_key + contResList[i].dbtype + contResList[i].oid; 1030 mcTreeDNDHandler.Common.changeNodeStyleFromID(source, style, fid, contResList[i].oid, contResList[i].dbtype); 1031 } 1032 } 1033 this.DataSource.flush(); 1034 mcTreeCssService.init(); 1035 this.rebuildLocal(); 1036 mcPropertyView.dispProperty(mcTreeHandler.object); 1037 if (mcItemView.isChecked) 1038 mcItemView.onTreeClick(); 1039 } else { 1040 mcPropertyView.dispProperty(mcTreeHandler.object); 1041 } 1042 } catch (ex) { 1043 _dump("property():[" + ex + "]"); 1044 } 1045 } 1046 return result.accept; 1047 }, 1048 removeInternal: function(aResList, aParResList, aBypassConfirm) { 1049 var rmIDs = []; 1050 for (var i = 0; i < aResList.length; i++) { 1051 var id = this.DataSource.getProperty(aResList[i], "id"); 1052 var dbtype = this.DataSource.getProperty(aResList[i], "dbtype"); 1053 var pfid = this.DataSource.getProperty(aResList[i], "pfid"); 1054 if (!this.DataSource.exists(aResList[i]) || this.DataSource.getRelativeIndex(aParResList[i], aResList[i]) < 0) { 1055 _dump("ERROR: Failed to remove resource.\n" + aResList[i].Value); 1056 continue; 1057 } 1058 rmIDs = rmIDs.concat(this.DataSource.deleteItemDescending(aResList[i], aParResList[i])); 1059 this.DataSource.setID2About(id, pfid, undefined, dbtype); 1060 } 1061 this.DataSource.flush(); 1062 return rmIDs; 1063 }, 1064 confirmRemovingFor: function(aRes) { 1065 try { 1066 if (this.DataSource.isContainer(aRes) || mcMainService.prefs.confirmDelete) { 1067 return this.Common.confirm(mcMainService.STRING.getString("CONFIRM_DELETE")); 1068 } 1069 return true; 1070 } catch (e) { 1071 return false; 1072 } 1073 }, 1074 rebuildLocal: function() { 1075 var currentIndex = mcTreeHandler.TREE.currentIndex; 1076 mcTreeHandler.TREE.builder.rebuild(); 1077 if (currentIndex >= 0) { 1078 mcTreeHandler.TREE.currentIndex = currentIndex; 1079 if (!mcTreeHandler.TREE.view.selection.isSelected(mcTreeHandler.TREE.currentIndex)) 1080 mcTreeHandler.TREE.view.selection.select(mcTreeHandler.TREE.currentIndex); 1081 mcTreeHandler.TREE.focus(); 1082 mcTreeHandler.TREE.treeBoxObject.ensureRowIsVisible(currentIndex); 1083 mcPropertyView.dispProperty(mcTreeHandler.object); 1084 } 1085 }, 971 1086 }; 972 1087 973 1088 var mcMainService = { 974 975 get STRING(){ return document.getElementById("mcMainString"); }, 976 977 get DataSource(){ return window.top.bitsObjectMng.DataSource; }, 978 get Common() { return window.top.bitsObjectMng.Common; }, 979 get XPath() { return window.top.bitsObjectMng.XPath; }, 980 get Database() { return window.top.bitsObjectMng.Database; }, 981 get gBrowser() { return window.top.bitsObjectMng.getBrowser();}, 982 983 baseURL : "", 984 prefs : {}, 985 _init : false, 986 987 init : function(aEvent){ 988 try{ 989 if(!window.top.bitsObjectMng){ 990 setTimeout(function(){ mcMainService.init(aEvent); },1000); 991 return; 992 } 993 }catch(ex){ 994 setTimeout(function(){ mcMainService.init(aEvent); },1000); 995 return; 996 } 997 try{ 998 window.top.bitsMarkingCollection._contentWindow = document.defaultView; 999 this.initPrefs(); 1000 this.DataSource.init(); 1001 mcTreeHandler.init(false); 1002 mcTreeDNDHandler.init(); 1003 mcTreeMultiDocumentService.init(); 1004 mcItemView.init(); 1005 mcTreeRootFolder.init(); 1006 mcTreeViewModeService.init(); 1007 mcTreeCssService.init(); 1008 bitsTreeDate.init(aEvent); 1009 mcTreeTemplateFolder.init(); 1010 mcTreeImageTooltip.init(); 1011 mcTreeFavoriteFolder.init(); 1012 try{ 1013 this.gBrowser.addEventListener("pageshow", mcTreeHandler.pageshow, false); 1014 window.top.addEventListener("focus", mcDatabaseUpdate.rebuild, false); 1015 }catch(ex2){ 1016 _dump2("mcMainService.init():"+ex2); 1017 } 1018 this.Common.addPrefListener(mcDatabaseObserver); 1019 var clone = top.document.getElementById("mciconimage"); 1020 if(!clone){ 1021 var sidebartitle = top.document.getElementById("sidebar-title"); 1022 var sidebarthrobber = top.document.getElementById("sidebar-throbber"); 1023 clone = sidebarthrobber.cloneNode(false); 1024 clone.setAttribute("src","chrome://markingcollection/skin/icon_16.gif"); 1025 clone.setAttribute("id","mciconimage"); 1026 clone.setAttribute("crop","end"); 1027 sidebartitle.parentNode.insertBefore(clone,sidebartitle); 1028 } 1029 var viewmode = mcTreeViewModeService.viewmode; 1030 if(viewmode == "each") mcTreeHandler.openAllFolders(); 1031 if(window.top.bitsScrapPartyAddonService && window.top.bitsScrapPartyAddonService.existsAddon()){ 1032 var addon_info_arr = window.top.bitsScrapPartyAddonService.getAddonInfo(); 1033 if(addon_info_arr && addon_info_arr.length > 0){ 1034 var i; 1035 for(i=0;i<addon_info_arr.length;i++){ 1036 if(!addon_info_arr[i].side_toolbar) continue; 1037 if(!addon_info_arr[i].side_toolbar.attrs.xul) continue; 1038 try{ 1039 var xul = document.getElementsByTagName(addon_info_arr[i].side_toolbar.attrs.xul)[0].cloneNode(false); 1040 delete addon_info_arr[i].side_toolbar.attrs.xul; 1041 var j; 1042 for(j=xul.attributes.length-1;j>=0;j--){ 1043 xul.removeAttribute(xul.attributes[j].name); 1044 } 1045 var event_attr = []; 1046 var key; 1047 for(key in addon_info_arr[i].side_toolbar.attrs){ 1048 if(key.match(/^on([A-Za-z]+)$/)){ 1049 event_attr[RegExp.$1] = addon_info_arr[i].side_toolbar.attrs[key]; 1050 }else{ 1051 xul.setAttribute(key,addon_info_arr[i].side_toolbar.attrs[key]); 1052 } 1053 } 1054 var pxul = document.getElementById("mcToolbarAddonHBox"); 1055 pxul.appendChild(xul); 1056 for(key in event_attr){ 1057 //xul.addEventListener(key,eval(event_attr[key]),false); 1058 } 1059 }catch(ex_xul){ 1060 continue; 1061 } 1062 } 1063 } 1064 try{window.top.bitsScrapPartyAddonService.eventListener(aEvent, 1, undefined);}catch(ex){_dump2(ex)} 1065 } 1066 try{if(nsPreferences.getBoolPref("wiredmarker.debug", false)) document.getElementById("mcToolbarMenuButton").removeAttribute("hidden");}catch(e){} 1067 try{ 1068 mcTreeViewModeService.rebuild(); 1069 }catch(ex2){ 1070 _dump2("mcMainService.init():"+ex2); 1071 } 1072 mcDatabaseUpdate.init(); 1073 mcItemView.disp(); 1074 }catch(ex){ 1075 this.Common.alert("mcMainService.init():"+ex); 1076 } 1077 }, 1078 1079 initPrefs : function(){ 1080 this.prefs.confirmDelete = window.top.bitsObjectMng.Common.getBoolPref("wiredmarker.confirmDelete", true); 1081 this.prefs.tabsOpen = window.top.bitsObjectMng.Common.getBoolPref("wiredmarker.tabs.open", false); 1082 this.prefs.tabsOpenSource = window.top.bitsObjectMng.Common.getBoolPref("wiredmarker.tabs.openSource", false); 1083 }, 1084 1085 refresh : function(){ 1086 mcTreeHandler.done(); 1087 mcTreeDNDHandler.quit(); 1088 this.init(); 1089 }, 1090 1091 done : function(aEvent){ 1092 try{ 1093 mcItemView.done(); 1094 mcTreeRdfRebuildItem.done(); 1095 this.Common.removePrefListener(mcDatabaseObserver); 1096 this.gBrowser.removeEventListener("pageshow", mcTreeHandler.pageshow, false); 1097 window.top.removeEventListener("focus", mcDatabaseUpdate.rebuild, false); 1098 var mciconimage = top.document.getElementById("mciconimage"); 1099 if(mciconimage) mciconimage.parentNode.removeChild(mciconimage); 1100 mcTreeHandler.done(); 1101 mcTreeDNDHandler.quit(); 1102 mcTreeViewModeService.done(); 1103 mcTreeTemplateFolder.done(); 1104 mcTreeImageTooltip.done(); 1105 try{ 1106 window.top.bitsScrapPartyAddonService.eventListener(aEvent, 1, undefined); 1107 }catch(ex2){_dump(ex)} 1108 window.top.bitsObjectMng.DataSource.done(); 1109 }catch(ex){this.Common.alert('done():'+ex);} 1110 try{ window.top.bitsMarkingCollection._contentWindow = null; }catch(e){} 1111 }, 1112 1113 locate : function(aRes){ 1114 if(aRes.Value == window.top.bitsObjectMng.DataSource.ABOUT_ROOT) return; 1115 var resList = [aRes]; 1116 var i; 1117 for(i=0;i<32;i++){ 1118 aRes = window.top.bitsObjectMng.DataSource.findParentResource(aRes); 1119 if(aRes.Value == window.top.bitsObjectMng.DataSource.ABOUT_ROOT) break; 1120 resList.unshift(aRes); 1121 } 1122 for(i=0;i<resList.length;i++){ 1123 var idx = mcTreeHandler.TREE.builderView.getIndexOfResource(resList[i]); 1124 if(!mcTreeHandler.TREE.view.isContainerOpen(idx)) mcTreeHandler.TREE.view.toggleOpenState(idx); 1125 } 1126 mcTreeHandler.TREE.treeBoxObject.ensureRowIsVisible(idx); 1127 mcTreeHandler.TREE.view.selection.select(idx); 1128 mcTreeHandler.TREE.focus(); 1129 mcPropertyView.dispProperty(mcTreeHandler.object); 1130 }, 1131 1132 createGroupFolder : function(pTitle,pTarResName,pGroup,pStyle,pSource,pEditMode,pIndex){ 1133 var tarRes = this.Common.RDF.GetResource(pTarResName); 1134 var pPID = this.DataSource.getProperty(tarRes,"id"); 1135 var dbtype = this.DataSource.getProperty(tarRes,"dbtype"); 1136 var folder = this.Database.getFolderFormID(pPID,dbtype); 1137 var newFolder = this.Database.newFolder(); 1138 newFolder.fid_title = pTitle; 1139 newFolder.fid_style = pStyle; 1140 newFolder.pfid = ""+pPID; 1141 newFolder.fid_mode = ""+pEditMode; 1142 if(!this.Database.addFolder(newFolder,dbtype)) return null; 1143 var newItem = this.Common.newItem(); 1144 newItem.id = newFolder.fid; 1145 newItem.about = this.DataSource.getAbout(newFolder.fid,newFolder.pfid,dbtype); 1146 newItem.pfid = pPID; 1147 newItem.title = pTitle; 1148 newItem.type = "folder"; 1149 newItem.style = pStyle; 1150 newItem.source = pSource; 1151 newItem.cssrule = 'css_'+dbtype+'_'+newFolder.fid; 1152 newItem.dbtype = dbtype; 1153 if(pIndex) newItem.index = pIndex; 1154 if(pEditMode){ 1155 newItem.editmode = pEditMode; 1156 }else{ 1157 newItem.editmode = "false"; 1158 } 1089 get STRING() { 1090 return document.getElementById("mcMainString"); 1091 }, 1092 get DataSource() { 1093 return window.top.bitsObjectMng.DataSource; 1094 }, 1095 get Common() { 1096 return window.top.bitsObjectMng.Common; 1097 }, 1098 get XPath() { 1099 return window.top.bitsObjectMng.XPath; 1100 }, 1101 get Database() { 1102 return window.top.bitsObjectMng.Database; 1103 }, 1104 get gBrowser() { 1105 return window.top.bitsObjectMng.getBrowser(); 1106 }, 1107 baseURL: "", 1108 prefs: {}, 1109 _init: false, 1110 init: function(aEvent) { 1111 try { 1112 if (!window.top.bitsObjectMng) { 1113 setTimeout(function() { 1114 mcMainService.init(aEvent); 1115 }, 1000); 1116 return; 1117 } 1118 } catch (ex) { 1119 setTimeout(function() { 1120 mcMainService.init(aEvent); 1121 }, 1000); 1122 return; 1123 } 1124 try { 1125 window.top.bitsMarkingCollection._contentWindow = document.defaultView; 1126 this.initPrefs(); 1127 this.DataSource.init(); 1128 mcTreeHandler.init(false); 1129 mcTreeDNDHandler.init(); 1130 mcTreeMultiDocumentService.init(); 1131 mcItemView.init(); 1132 mcTreeRootFolder.init(); 1133 mcTreeViewModeService.init(); 1134 mcTreeCssService.init(); 1135 bitsTreeDate.init(aEvent); 1136 mcTreeTemplateFolder.init(); 1137 mcTreeImageTooltip.init(); 1138 mcTreeFavoriteFolder.init(); 1139 try { 1140 this.gBrowser.addEventListener("pageshow", mcTreeHandler.pageshow, false); 1141 window.top.addEventListener("focus", mcDatabaseUpdate.rebuild, false); 1142 } catch (ex2) { 1143 _dump2("mcMainService.init():" + ex2); 1144 } 1145 this.Common.addPrefListener(mcDatabaseObserver); 1146 var clone = top.document.getElementById("mciconimage"); 1147 if (!clone) { 1148 var sidebartitle = top.document.getElementById("sidebar-title"); 1149 var sidebarthrobber = top.document.getElementById("sidebar-throbber"); 1150 clone = sidebarthrobber.cloneNode(false); 1151 /* clone.setAttribute("src","chrome://markingcollection/skin/icon_16.gif"); */ 1152 /* DASISH icon set as src (icon shown in top area of left sidebar */ 1153 clone.setAttribute("src", "chrome://markingcollection/skin/annotator-skin/icon_dasish_bluegrey_bg_32.gif"); 1154 clone.setAttribute("id", "mciconimage"); 1155 clone.setAttribute("crop", "end"); 1156 sidebartitle.parentNode.setAttribute("style", "background: #d4dde5"); 1157 sidebartitle.parentNode.insertBefore(clone, sidebartitle); 1158 } 1159 var viewmode = mcTreeViewModeService.viewmode; 1160 if (viewmode == "each") 1161 mcTreeHandler.openAllFolders(); 1162 if (window.top.bitsScrapPartyAddonService && window.top.bitsScrapPartyAddonService.existsAddon()) { 1163 var addon_info_arr = window.top.bitsScrapPartyAddonService.getAddonInfo(); 1164 if (addon_info_arr && addon_info_arr.length > 0) { 1165 var i; 1166 for (i = 0; i < addon_info_arr.length; i++) { 1167 if (!addon_info_arr[i].side_toolbar) 1168 continue; 1169 if (!addon_info_arr[i].side_toolbar.attrs.xul) 1170 continue; 1171 try { 1172 var xul = document.getElementsByTagName(addon_info_arr[i].side_toolbar.attrs.xul)[0].cloneNode(false); 1173 delete addon_info_arr[i].side_toolbar.attrs.xul; 1174 var j; 1175 for (j = xul.attributes.length - 1; j >= 0; j--) { 1176 xul.removeAttribute(xul.attributes[j].name); 1177 } 1178 var event_attr = []; 1179 var key; 1180 for (key in addon_info_arr[i].side_toolbar.attrs) { 1181 if (key.match(/^on([A-Za-z]+)$/)) { 1182 event_attr[RegExp.$1] = addon_info_arr[i].side_toolbar.attrs[key]; 1183 } else { 1184 xul.setAttribute(key, addon_info_arr[i].side_toolbar.attrs[key]); 1185 } 1186 } 1187 var pxul = document.getElementById("mcToolbarAddonHBox"); 1188 pxul.appendChild(xul); 1189 for (key in event_attr) { 1190 //xul.addEventListener(key,eval(event_attr[key]),false); 1191 } 1192 } catch (ex_xul) { 1193 continue; 1194 } 1195 } 1196 } 1197 try { 1198 window.top.bitsScrapPartyAddonService.eventListener(aEvent, 1, undefined); 1199 } catch (ex) { 1200 _dump2(ex) 1201 } 1202 } 1203 try { 1204 if (nsPreferences.getBoolPref("wiredmarker.debug", false)) 1205 document.getElementById("mcToolbarMenuButton").removeAttribute("hidden"); 1206 } catch (e) { 1207 } 1208 try { 1209 mcTreeViewModeService.rebuild(); 1210 } catch (ex2) { 1211 _dump2("mcMainService.init():" + ex2); 1212 } 1213 mcDatabaseUpdate.init(); 1214 mcItemView.disp(); 1215 } catch (ex) { 1216 this.Common.alert("mcMainService.init():" + ex); 1217 } 1218 }, 1219 initPrefs: function() { 1220 this.prefs.confirmDelete = window.top.bitsObjectMng.Common.getBoolPref("wiredmarker.confirmDelete", true); 1221 this.prefs.tabsOpen = window.top.bitsObjectMng.Common.getBoolPref("wiredmarker.tabs.open", false); 1222 this.prefs.tabsOpenSource = window.top.bitsObjectMng.Common.getBoolPref("wiredmarker.tabs.openSource", false); 1223 }, 1224 refresh: function() { 1225 mcTreeHandler.done(); 1226 mcTreeDNDHandler.quit(); 1227 this.init(); 1228 }, 1229 done: function(aEvent) { 1230 try { 1231 mcItemView.done(); 1232 mcTreeRdfRebuildItem.done(); 1233 this.Common.removePrefListener(mcDatabaseObserver); 1234 this.gBrowser.removeEventListener("pageshow", mcTreeHandler.pageshow, false); 1235 window.top.removeEventListener("focus", mcDatabaseUpdate.rebuild, false); 1236 var mciconimage = top.document.getElementById("mciconimage"); 1237 if (mciconimage) 1238 mciconimage.parentNode.removeChild(mciconimage); 1239 mcTreeHandler.done(); 1240 mcTreeDNDHandler.quit(); 1241 mcTreeViewModeService.done(); 1242 mcTreeTemplateFolder.done(); 1243 mcTreeImageTooltip.done(); 1244 try { 1245 window.top.bitsScrapPartyAddonService.eventListener(aEvent, 1, undefined); 1246 } catch (ex2) { 1247 _dump(ex) 1248 } 1249 window.top.bitsObjectMng.DataSource.done(); 1250 } catch (ex) { 1251 this.Common.alert('done():' + ex); 1252 } 1253 try { 1254 window.top.bitsMarkingCollection._contentWindow = null; 1255 } catch (e) { 1256 } 1257 }, 1258 locate: function(aRes) { 1259 if (aRes.Value == window.top.bitsObjectMng.DataSource.ABOUT_ROOT) 1260 return; 1261 var resList = [aRes]; 1262 var i; 1263 for (i = 0; i < 32; i++) { 1264 aRes = window.top.bitsObjectMng.DataSource.findParentResource(aRes); 1265 if (aRes.Value == window.top.bitsObjectMng.DataSource.ABOUT_ROOT) 1266 break; 1267 resList.unshift(aRes); 1268 } 1269 for (i = 0; i < resList.length; i++) { 1270 var idx = mcTreeHandler.TREE.builderView.getIndexOfResource(resList[i]); 1271 if (!mcTreeHandler.TREE.view.isContainerOpen(idx)) 1272 mcTreeHandler.TREE.view.toggleOpenState(idx); 1273 } 1274 mcTreeHandler.TREE.treeBoxObject.ensureRowIsVisible(idx); 1275 mcTreeHandler.TREE.view.selection.select(idx); 1276 mcTreeHandler.TREE.focus(); 1277 mcPropertyView.dispProperty(mcTreeHandler.object); 1278 }, 1279 createGroupFolder: function(pTitle, pTarResName, pGroup, pStyle, pSource, pEditMode, pIndex) { 1280 var tarRes = this.Common.RDF.GetResource(pTarResName); 1281 var pPID = this.DataSource.getProperty(tarRes, "id"); 1282 var dbtype = this.DataSource.getProperty(tarRes, "dbtype"); 1283 var folder = this.Database.getFolderFormID(pPID, dbtype); 1284 var newFolder = this.Database.newFolder(); 1285 newFolder.fid_title = pTitle; 1286 newFolder.fid_style = pStyle; 1287 newFolder.pfid = "" + pPID; 1288 newFolder.fid_mode = "" + pEditMode; 1289 if (!this.Database.addFolder(newFolder, dbtype)) 1290 return null; 1291 var newItem = this.Common.newItem(); 1292 newItem.id = newFolder.fid; 1293 newItem.about = this.DataSource.getAbout(newFolder.fid, newFolder.pfid, dbtype); 1294 newItem.pfid = pPID; 1295 newItem.title = pTitle; 1296 newItem.type = "folder"; 1297 newItem.style = pStyle; 1298 newItem.source = pSource; 1299 newItem.cssrule = 'css_' + dbtype + '_' + newFolder.fid; 1300 newItem.dbtype = dbtype; 1301 if (pIndex) 1302 newItem.index = pIndex; 1303 if (pEditMode) { 1304 newItem.editmode = pEditMode; 1305 } else { 1306 newItem.editmode = "false"; 1307 } 1159 1308 //0.299*R + 0.587*G + 0.114*B 1160 var tarResName, tarRelIdx; 1161 tarResName = pTarResName; 1162 try{ 1163 var cont = window.top.bitsObjectMng.DataSource.getContainer(tarResName, false); 1164 tarRelIdx = cont.GetCount(); 1165 }catch(ex){ 1166 tarRelIdx = -1; 1167 } 1168 var newRes = window.top.bitsObjectMng.DataSource.addItem(newItem, tarResName, tarRelIdx, dbtype); 1169 if(newRes && newRes.Value){ 1170 window.top.bitsObjectMng.DataSource.flush(); 1171 window.top.bitsObjectMng.DataSource.createEmptySeq(newRes.Value); 1172 } 1173 return newRes; 1174 }, 1175 1176 openPrefWindow : function(){ 1177 window.top.bitsMarkingCollection.openPrefWindow(); 1178 }, 1309 var tarResName, tarRelIdx; 1310 tarResName = pTarResName; 1311 try { 1312 var cont = window.top.bitsObjectMng.DataSource.getContainer(tarResName, false); 1313 tarRelIdx = cont.GetCount(); 1314 } catch (ex) { 1315 tarRelIdx = -1; 1316 } 1317 var newRes = window.top.bitsObjectMng.DataSource.addItem(newItem, tarResName, tarRelIdx, dbtype); 1318 if (newRes && newRes.Value) { 1319 window.top.bitsObjectMng.DataSource.flush(); 1320 window.top.bitsObjectMng.DataSource.createEmptySeq(newRes.Value); 1321 } 1322 return newRes; 1323 }, 1324 openPrefWindow: function() { 1325 window.top.bitsMarkingCollection.openPrefWindow(); 1326 }, 1179 1327 }; 1180 1328 1181 1329 var mcTreeDNDHandler = { 1330 row: 0, 1331 orient: 0, 1332 modAlt: false, 1333 modShift: false, 1334 modCtrl: false, 1335 modMeta: false, 1336 _dataTransfer: null, //3.1以é 1182 1337 1183 row : 0, 1184 orient : 0, 1185 modAlt : false, 1186 modShift : false, 1187 modCtrl : false, 1188 modMeta : false, 1189 _dataTransfer : null, //3.1以é 1338 folderAutoOpenRow: -1, 1339 rangeParent: null, 1340 originalTarget: null, 1341 get DataSource() { 1342 return window.top.bitsObjectMng.DataSource; 1343 }, 1344 get Common() { 1345 return window.top.bitsObjectMng.Common; 1346 }, 1347 get XPath() { 1348 return window.top.bitsObjectMng.XPath; 1349 }, 1350 get Database() { 1351 return window.top.bitsObjectMng.Database; 1352 }, 1353 get gBrowser() { 1354 return window.top.bitsObjectMng.getBrowser(); 1355 }, 1356 onDragDrop: function(aEvent) { 1357 mcTreeDNDHandler.getModifiers(aEvent); 1358 this.nsDragAndDrop_drop(aEvent, mcTreeDNDHandler.dragDropObserver); 1359 aEvent.stopPropagation(); 1360 }, 1361 nsDragAndDrop_drop: function(aEvent, aDragDropObserver) { 1362 if (!("onDrop" in aDragDropObserver)) 1363 return; 1364 if (!nsDragAndDrop.checkCanDrop(aEvent, aDragDropObserver)) 1365 return; 1366 if (nsDragAndDrop.mDragSession.canDrop) { 1367 var flavourSet = aDragDropObserver.getSupportedFlavours(); 1368 var transferData = mcTreeDNDHandler.nsTransferable_get(flavourSet, nsDragAndDrop.getDragData, true); 1369 var multiple = "canHandleMultipleItems" in aDragDropObserver && aDragDropObserver.canHandleMultipleItems; 1370 var dropData = multiple ? transferData : transferData.first.first; 1371 aDragDropObserver.onDrop(aEvent, dropData, nsDragAndDrop.mDragSession); 1372 } 1373 aEvent.stopPropagation(); 1374 }, 1375 nsTransferable_get: function(aFlavourSet, aRetrievalFunc, aAnyFlag) { 1376 if (!aRetrievalFunc) 1377 throw "No data retrieval handler provided!"; 1378 var supportsArray = aRetrievalFunc(aFlavourSet); 1379 var dataArray = []; 1380 var count = supportsArray.Count(); 1381 for (var i = 0; i < count; i++) { 1382 var trans = supportsArray.GetElementAt(i); 1383 if (!trans) 1384 continue; 1385 trans = trans.QueryInterface(Components.interfaces.nsITransferable); 1386 var data = {}; 1387 var length = {}; 1388 var currData = null; 1389 if (aAnyFlag) { 1390 var flavour = {}; 1391 try { 1392 trans.getAnyTransferData(flavour, data, length); 1393 if (data && flavour) { 1394 var selectedFlavour = aFlavourSet.flavourTable[flavour.value]; 1395 if (selectedFlavour) 1396 dataArray[i] = FlavourToXfer(data.value, length.value, selectedFlavour); 1397 } 1398 } catch (ex) { 1399 _dump2("nsTransferable_get(" + i + "):" + ex); 1400 continue; 1401 } 1402 } else { 1403 var firstFlavour = aFlavourSet.flavours[0]; 1404 trans.getTransferData(firstFlavour, data, length); 1405 if (data && firstFlavour) 1406 dataArray[i] = FlavourToXfer(data.value, length.value, firstFlavour); 1407 } 1408 } 1409 return new TransferDataSet(dataArray); 1410 }, 1411 dragDropObserver: { 1412 onDragStart: function(event, transferData, action) { 1413 try { 1414 mcTreeImageTooltip.hidePopup() 1415 } catch (ex) { 1416 } 1417 try { 1418 if (event.originalTarget.localName != "treechildren") 1419 return; 1420 var curIdx = mcTreeHandler.TREE.currentIndex; 1421 var res = mcTreeHandler.TREE.builderView.getResourceAtIndex(curIdx); 1422 var source = mcTreeDNDHandler.DataSource.getProperty(res, "source"); 1423 var editmode = mcTreeDNDHandler.DataSource.getProperty(res, "editmode"); 1424 var curPar = mcTreeHandler.getParentResource(curIdx); 1425 var p_source = window.top.bitsObjectMng.DataSource.getProperty(curPar, "source"); 1426 transferData.data = new TransferData(); 1427 transferData.data.addDataForFlavour("moz/rdfitem", res.Value); 1428 } catch (ex) { 1429 _dump("dragDropObserver.onDragStart():" + ex); 1430 } 1431 }, 1432 getSupportedFlavours: function() { 1433 var flavours = new FlavourSet(); 1434 flavours.appendFlavour("moz/rdfitem"); 1435 flavours.appendFlavour("text/x-moz-url"); 1436 flavours.appendFlavour("text/html"); 1437 flavours.appendFlavour("text/xml"); 1438 flavours.appendFlavour("application/x-moz-url"); 1439 flavours.appendFlavour("application/x-moz-file", "nsIFile"); 1440 flavours.appendFlavour("text/unicode"); 1441 flavours.appendFlavour("wired-marker/folder"); 1442 flavours.appendFlavour("wired-marker/object"); 1443 return flavours; 1444 }, 1445 onDragOver: function(event, flavour, session) { 1446 }, 1447 onDragExit: function(event, session) { 1448 }, 1449 onDrop: function(event, transferData, session) { 1450 }, 1451 }, 1452 builderObserver: { 1453 canDrop: function(index, orient) { 1454 var XferDataSet = null; 1455 var XferData = null; 1456 var doraggedData = null; 1457 var XferDataType = null; 1458 var info = Components.classes["@mozilla.org/xre/app-info;1"].getService(Components.interfaces.nsIXULAppInfo); 1459 var app_version = parseFloat(info.version); 1460 if (app_version < 3.1) { 1461 try { 1462 XferDataSet = nsTransferable.get(mcTreeDNDHandler.dragDropObserver.getSupportedFlavours(), nsDragAndDrop.getDragData, true); 1463 XferData = XferDataSet.first.first; 1464 doraggedData = XferData.data; 1465 XferDataType = XferData.flavour.contentType; 1466 } catch (ex) { 1467 } 1468 } else { 1469 try { 1470 if (mcTreeDNDHandler._dataTransfer) { 1471 var dataTransfer = mcTreeDNDHandler._dataTransfer; 1472 XferData = {}; 1473 var supportedTypes = ["moz/rdfitem", "wired-marker/object", "text/x-moz-url", "text/url-list", "text/plain", "application/x-moz-file"]; 1474 var types = dataTransfer.types; 1475 types = supportedTypes.filter(function(value) { 1476 return types.contains(value); 1477 }); 1478 if (types.length) { 1479 XferData.data = dataTransfer.getData(types[0]); 1480 XferData.flavour = {contentType: types[0]}; 1481 if (!XferData.data) 1482 XferData.data = dataTransfer.mozGetDataAt(types[0], 0); 1483 } 1484 if (XferData.data) { 1485 doraggedData = XferData.data; 1486 XferDataType = XferData.flavour.contentType; 1487 } 1488 } 1489 } catch (ex) { 1490 XferData = undefined; 1491 doraggedData = undefined; 1492 XferDataType = undefined; 1493 } 1494 } 1495 try { 1496 var res = (index == -1) ? [mcTreeHandler.TREE.ref, 0] : mcTreeDNDHandler.getTarget(index, orient); 1497 var curRes = mcTreeHandler.TREE.builderView.getResourceAtIndex(index); 1498 var editmode = window.top.bitsObjectMng.DataSource.getProperty(curRes, "editmode"); 1499 var dbtype = window.top.bitsObjectMng.DataSource.getProperty(curRes, "dbtype"); 1500 if (dbtype == "") 1501 return false; 1502 if (res[0] == mcTreeHandler.TREE.ref && !(editmode & 0x1000)) 1503 return false; 1504 if (mcTreeHandler.TREE.currentIndex >= 0 && XferDataType == "moz/rdfitem") { 1505 var srcRes = mcTreeHandler.resource; 1506 var d_editmode = window.top.bitsObjectMng.DataSource.getProperty(srcRes, "editmode"); 1507 if (res[0] != mcTreeHandler.TREE.ref && (d_editmode & 0x1000)) 1508 return false; 1509 if (res[0] != mcTreeHandler.TREE.ref && ((editmode & 0x1000) && (d_editmode & 0x1000))) 1510 return false; 1511 } else { 1512 if (editmode & 0x1000) { 1513 if (XferDataType == "text/x-moz-url" || XferDataType == "application/x-moz-file") { 1514 var url; 1515 var aFile; 1516 if (XferDataType == "text/x-moz-url") { 1517 url = doraggedData.split("\n")[0]; 1518 aFile = mcTreeHandler.Common.convertURLToFile(url); 1519 } else if (XferDataType == "application/x-moz-file") { 1520 aFile = doraggedData; 1521 url = mcTreeDNDHandler.Common.convertFilePathToURL(aFile.path); 1522 } 1523 if (!aFile || !aFile.exists() || !url) 1524 return false; 1525 var splitFileName = mcTreeHandler.Common.splitFileName(url); 1526 if (splitFileName[1].toLowerCase() != "xml" && splitFileName[1].toLowerCase() != "zip") 1527 return false; 1528 } else { 1529 return false; 1530 } 1531 } else if (index > 0 && orient < 0) { 1532 var prevRes = mcTreeHandler.TREE.builderView.getResourceAtIndex(index - 1); 1533 var prevEditmode = window.top.bitsObjectMng.DataSource.getProperty(prevRes, "editmode"); 1534 if (prevEditmode & 0x1000) 1535 return false; 1536 } 1537 } 1538 if (index != -1 && !mcTreeHandler.TREE.view.isContainer(index) && orient == 0) 1539 return false; 1540 window.top.bitsScrapPartyAddonService.builderViewObserver.canDrop(index, orient, mcTreeHandler.TREE); 1541 return true; 1542 } catch (ex) { 1543 return false; 1544 } 1545 }, 1546 onDrop: function(row, orient) { 1547 var XferDataSet = null; 1548 var XferData = null; 1549 var doraggedData = null; 1550 var XferDataType = null; 1551 var info = Components.classes["@mozilla.org/xre/app-info;1"].getService(Components.interfaces.nsIXULAppInfo); 1552 var app_version = parseFloat(info.version); 1553 if (app_version < 3.1) { 1554 try { 1555 XferDataSet = nsTransferable.get(mcTreeDNDHandler.dragDropObserver.getSupportedFlavours(), nsDragAndDrop.getDragData, true); 1556 XferData = XferDataSet.first.first; 1557 doraggedData = XferData.data; 1558 XferDataType = XferData.flavour.contentType; 1559 } catch (ex) { 1560 } 1561 } else { 1562 try { 1563 if (mcTreeDNDHandler._dataTransfer) { 1564 var dataTransfer = mcTreeDNDHandler._dataTransfer; 1565 XferData = {}; 1566 var supportedTypes = ["moz/rdfitem", "wired-marker/object", "text/x-moz-url", "text/url-list", "text/plain", "application/x-moz-file"]; 1567 var types = dataTransfer.types; 1568 types = supportedTypes.filter(function(value) { 1569 return types.contains(value); 1570 }); 1571 if (types.length) { 1572 XferData.data = dataTransfer.getData(types[0]); 1573 XferData.flavour = {contentType: types[0]}; 1574 if (!XferData.data) 1575 XferData.data = dataTransfer.mozGetDataAt(types[0], 0); 1576 } 1577 if (XferData.data) { 1578 doraggedData = XferData.data; 1579 XferDataType = XferData.flavour.contentType; 1580 } 1581 } 1582 } catch (ex) { 1583 } 1584 } 1585 var state; 1586 // try{ 1587 if (XferDataType == "moz/rdfitem") { 1588 if (mcTreeHandler.TREE.currentIndex >= 0 && mcTreeHandler.TREE.currentIndex != row && window.top.bitsScrapPartyMergeService) { 1589 var srcRes = mcTreeHandler.resource; 1590 var dstRes = mcTreeHandler.TREE.builderView.getResourceAtIndex(row); 1591 var param = { 1592 tree: mcTreeHandler.TREE, 1593 srcRes: srcRes, 1594 dstRes: dstRes, 1595 modCtrl: mcTreeDNDHandler.modCtrl, 1596 modAlt: mcTreeDNDHandler.modAlt, 1597 modShift: mcTreeDNDHandler.modShift, 1598 modMeta: mcTreeDNDHandler.modMeta 1599 }; 1600 var mergeRtn = window.top.bitsScrapPartyMergeService.mergeResource(param); 1601 if (mergeRtn) { 1602 window.top.bitsScrapPartyAddonService.builderViewObserver.onDrop(row, orient, mcTreeHandler.TREE, XferDataSet); 1603 return; 1604 } 1605 if (window.top.bitsScrapPartyMergeService.cancel) { 1606 window.top.bitsScrapPartyAddonService.builderViewObserver.onDrop(row, orient, mcTreeHandler.TREE, XferDataSet); 1607 mcTreeViewModeService.rebuild(); 1608 return; 1609 } 1610 var src_dbtype = mcTreeDNDHandler.DataSource.getProperty(srcRes, "dbtype"); 1611 var dst_dbtype = mcTreeDNDHandler.DataSource.getProperty(dstRes, "dbtype"); 1612 if (src_dbtype == window.top.bitsMarkingCollection._uncategorized.dbtype || dst_dbtype == window.top.bitsMarkingCollection._uncategorized.dbtype || mcTreeDNDHandler.modShift) { 1613 mcTreeDNDHandler.modShift = true; 1614 mcTreeDNDHandler.move(row, orient); 1615 } else { 1616 if (mcTreeDNDHandler.modCtrl || mcTreeDNDHandler.modMeta) { 1617 mcTreeDNDHandler.copy(row, orient); 1618 } else { 1619 mcTreeDNDHandler.move(row, orient); 1620 } 1621 } 1622 } else { 1623 if (mcTreeDNDHandler.modCtrl || mcTreeDNDHandler.modMeta) { 1624 mcTreeDNDHandler.copy(row, orient); 1625 } else { 1626 mcTreeDNDHandler.move(row, orient); 1627 } 1628 } 1629 } else if (XferDataType == "wired-marker/object" && XferData) { 1630 var dstRes = mcTreeHandler.TREE.builderView.getResourceAtIndex(row); 1631 var type = mcTreeHandler.DataSource.getProperty(dstRes, "type"); 1632 if (!(type & 0x1000) && mcTreeHandler.TREE.currentIndex >= 0 && mcTreeHandler.TREE.currentIndex != row && window.top.bitsScrapPartyMergeService) { 1633 var srcRes = mcTreeHandler.resource; 1634 var mergeRtn = mcItemView.mergeObject(srcRes, dstRes); 1635 if (mergeRtn) 1636 return; 1637 var src_dbtype = mcTreeDNDHandler.DataSource.getProperty(srcRes, "dbtype"); 1638 if (!src_dbtype || src_dbtype == "") { 1639 if (mcItemView.isChecked) { 1640 var object = mcItemView.object; 1641 if (object.dbtype) 1642 src_dbtype = object.dbtype; 1643 } 1644 } 1645 if (!src_dbtype || src_dbtype == "") 1646 return; 1647 var dst_dbtype = mcTreeDNDHandler.DataSource.getProperty(dstRes, "dbtype"); 1648 if (src_dbtype == window.top.bitsMarkingCollection._uncategorized.dbtype || dst_dbtype == window.top.bitsMarkingCollection._uncategorized.dbtype || mcTreeDNDHandler.modShift) { 1649 mcItemView.moveObject(dstRes, true); 1650 } else { 1651 if (mcItemView.modCtrl || mcItemView.modMeta) { 1652 mcItemView.copyObject(dstRes); 1653 } else { 1654 mcItemView.moveObject(dstRes, mcItemView.modShift); 1655 } 1656 } 1657 } 1658 } else if (XferDataType == "application/x-moz-file" && XferData) { 1659 if (XferData.data instanceof Components.interfaces.nsIFile) { 1660 var urlString = mcTreeDNDHandler.Common.convertFilePathToURL(XferData.data.path); 1661 state = mcTreeDNDHandler.capture(urlString, row, orient); 1662 } 1663 } else if (XferData && XferData.data) { 1664 if ( 1665 mcTreeDNDHandler.originalTarget && 1666 mcTreeDNDHandler.originalTarget.nodeName == "IMG" && 1667 mcTreeDNDHandler.originalTarget.hasAttribute('oid') && 1668 mcTreeDNDHandler.originalTarget.hasAttribute('dbtype') && 1669 mcTreeDNDHandler.originalTarget.hasAttribute('pfid')) { 1670 var oid = mcTreeDNDHandler.originalTarget.getAttribute('oid'); 1671 var dbtype = mcTreeDNDHandler.originalTarget.getAttribute('dbtype'); 1672 var pfid = mcTreeDNDHandler.originalTarget.getAttribute('pfid'); 1673 var dstRes = mcTreeHandler.TREE.builderView.getResourceAtIndex(row); 1674 var dst_fid = mcTreeDNDHandler.DataSource.getProperty(dstRes, "id"); 1675 var dst_dbtype = mcTreeDNDHandler.DataSource.getProperty(dstRes, "dbtype"); 1676 var dst_style = mcTreeDNDHandler.DataSource.getProperty(dstRes, "style"); 1677 if (dst_fid == pfid && dst_dbtype == dbtype) 1678 return; 1679 var srcObjects = mcTreeDNDHandler.Database.getObject({oid: oid, pfid: pfid}, dbtype); 1680 var mergeRtn = window.top.bitsTreeListService.mergeObject({fid: dst_fid, dbtype: dst_dbtype}, srcObjects[0]); 1681 if (mergeRtn) 1682 return; 1683 var rtnObj = null; 1684 if (dbtype == window.top.bitsMarkingCollection._uncategorized.dbtype || mcTreeDNDHandler.modShift) { 1685 rtnObj = window.top.bitsTreeListService.moveObject({fid: dst_fid, dbtype: dst_dbtype, fid_style: dst_style}, srcObjects[0], true); 1686 } else { 1687 rtnObj = window.top.bitsTreeListService.copyObject({fid: dst_fid, dbtype: dst_dbtype, fid_style: dst_style}, srcObjects[0]); 1688 } 1689 if (rtnObj) { 1690 setTimeout(function() { 1691 try { 1692 mcTreeHandler.TREE.currentIndex = row; 1693 if (!mcTreeHandler.TREE.view.selection.isSelected(mcTreeHandler.TREE.currentIndex)) 1694 mcTreeHandler.TREE.view.selection.select(mcTreeHandler.TREE.currentIndex); 1695 mcPropertyView.dispProperty(mcTreeHandler.object); 1696 var viewmode = mcTreeViewModeService.viewmode; 1697 if (mcItemView.isChecked) { 1698 mcItemView._bitsItemView.onTreeClick({viewmode: viewmode, fid: dst_fid, dbtype: dst_dbtype, res: dstRes}); 1699 } else { 1700 var f_pfid = undefined; 1701 var rtnFolder = mcTreeDNDHandler.Database.getFolder({fid: pfid}, dbtype); 1702 if (rtnFolder && rtnFolder.length) 1703 f_pfid = rtnFolder[0].pfid; 1704 rtnFolder = undefined; 1705 if (dbtype == window.top.bitsMarkingCollection._uncategorized.dbtype || mcTreeDNDHandler.modShift) { 1706 var srcPRes = mcTreeDNDHandler.Common.RDF.GetResource(mcTreeDNDHandler.DataSource.getID2About(pfid, f_pfid, dbtype)); 1707 var srcAbout = mcTreeDNDHandler.DataSource.getID2About(oid, pfid, dbtype); 1708 var srcRes = mcTreeDNDHandler.Common.RDF.GetResource(srcAbout); 1709 if (mcTreeDNDHandler.DataSource.moveItem(srcRes, srcPRes, dstRes, -1)) { 1710 mcTreeDNDHandler.DataSource.setProperty(srcRes, "dbtype", dst_dbtype); 1711 mcTreeDNDHandler.DataSource.setProperty(srcRes, "pfid", dst_fid); 1712 mcTreeDNDHandler.DataSource.setProperty(srcRes, "id", rtnObj.oid); 1713 mcTreeDNDHandler.DataSource.setID2About(oid, pfid, undefined, dbtype); 1714 mcTreeDNDHandler.DataSource.setID2About(rtnObj.oid, dst_fid, srcRes.Value, dst_dbtype); 1715 mcTreeDNDHandler.changeNodeStyle(srcRes); 1716 } 1717 } else { 1718 mcTreeDNDHandler.DataSource.addItem(mcTreeDNDHandler.Database.makeObjectToItem(rtnObj), dstRes.Value, -1, dst_dbtype); 1719 } 1720 mcTreeDNDHandler.DataSource.flush(); 1721 mcTreeCssService.init(); 1722 mcController.rebuildLocal(); 1723 } 1724 window.top.bitsTreeListService.reload(mcTreeDNDHandler.originalTarget.ownerDocument); 1725 mcTreeDNDHandler.originalTarget = null; 1726 } catch (e) { 1727 _dump2(e); 1728 } 1729 }, 0); 1730 } 1731 } else { 1732 state = mcTreeDNDHandler.capture(XferData.data, row, orient); 1733 } 1734 } 1735 // }catch(ex){_dump2("onDrop():"+ex);} 1736 mcController.rebuildLocal(); 1737 window.top.bitsScrapPartyAddonService.builderViewObserver.onDrop(row, orient, mcTreeHandler.TREE, XferDataSet, state); 1738 }, 1739 onToggleOpenState: function(aRow) { 1740 }, 1741 onCycleHeader: function() { 1742 }, 1743 onSelectionChanged: function() { 1744 }, 1745 onCycleCell: function(aRow, pColID) { 1746 }, 1747 isEditable: function() { 1748 }, 1749 onSetCellText: function() { 1750 }, 1751 onPerformAction: function() { 1752 }, 1753 onPerformActionOnRow: function() { 1754 }, 1755 onPerformActionOnCell: function(aAction, aRow, aColID) { 1756 }, 1757 }, 1758 getModifiers: function(aEvent) { 1759 this.modAlt = aEvent.altKey; 1760 this.modShift = aEvent.shiftKey; 1761 this.modCtrl = aEvent.ctrlKey; 1762 this.modMeta = aEvent.metaKey; 1763 }, 1764 setDataTransfer: function(aEvent) { 1765 try { 1766 if (aEvent.dataTransfer) 1767 this._dataTransfer = aEvent.dataTransfer; 1768 } catch (e) { 1769 } 1770 }, 1771 onMousedown: function(aEvent) { 1772 try { 1773 mcTreeDNDHandler.rangeParent = aEvent.rangeParent; 1774 } catch (ex) { 1775 } 1776 try { 1777 mcTreeDNDHandler.originalTarget = aEvent.originalTarget; 1778 } catch (ex) { 1779 } 1780 }, 1781 init: function() { 1782 this.gBrowser.addEventListener("mousedown", this.onMousedown, false); 1783 }, 1784 quit: function() { 1785 try { 1786 this.gBrowser.removeEventListener("mousedown", this.onMousedown, false); 1787 } catch (ex) { 1788 } 1789 }, 1790 move: function(aRow, aOrient) { 1791 this.row = aRow; 1792 this.orient = aOrient; 1793 this.rowRes = mcTreeHandler.TREE.builderView.getResourceAtIndex(aRow); 1794 (mcTreeHandler.TREE.view.selection.count == 1) ? this.moveSingle() : this.moveMultiple(); 1795 }, 1796 moveSingle: function() { 1797 var curIdx = mcTreeHandler.TREE.currentIndex; 1798 var curRes = mcTreeHandler.TREE.builderView.getResourceAtIndex(curIdx); 1190 1799 1191 folderAutoOpenRow : -1, 1192 1193 rangeParent : null, 1194 originalTarget : null, 1195 1196 get DataSource(){ return window.top.bitsObjectMng.DataSource; }, 1197 get Common() { return window.top.bitsObjectMng.Common; }, 1198 get XPath() { return window.top.bitsObjectMng.XPath; }, 1199 get Database() { return window.top.bitsObjectMng.Database; }, 1200 get gBrowser() { return window.top.bitsObjectMng.getBrowser();}, 1201 1202 onDragDrop : function(aEvent){ 1203 mcTreeDNDHandler.getModifiers(aEvent); 1204 this.nsDragAndDrop_drop(aEvent,mcTreeDNDHandler.dragDropObserver); 1205 aEvent.stopPropagation(); 1206 }, 1207 1208 nsDragAndDrop_drop : function (aEvent, aDragDropObserver){ 1209 if(!("onDrop" in aDragDropObserver)) return; 1210 if(!nsDragAndDrop.checkCanDrop(aEvent, aDragDropObserver)) return; 1211 if(nsDragAndDrop.mDragSession.canDrop){ 1212 var flavourSet = aDragDropObserver.getSupportedFlavours(); 1213 var transferData = mcTreeDNDHandler.nsTransferable_get(flavourSet, nsDragAndDrop.getDragData, true); 1214 var multiple = "canHandleMultipleItems" in aDragDropObserver && aDragDropObserver.canHandleMultipleItems; 1215 var dropData = multiple ? transferData : transferData.first.first; 1216 aDragDropObserver.onDrop(aEvent, dropData, nsDragAndDrop.mDragSession); 1217 } 1218 aEvent.stopPropagation(); 1219 }, 1220 1221 nsTransferable_get: function (aFlavourSet, aRetrievalFunc, aAnyFlag){ 1222 if(!aRetrievalFunc) throw "No data retrieval handler provided!"; 1223 var supportsArray = aRetrievalFunc(aFlavourSet); 1224 var dataArray = []; 1225 var count = supportsArray.Count(); 1226 for(var i=0;i<count;i++){ 1227 var trans = supportsArray.GetElementAt(i); 1228 if(!trans) continue; 1229 trans = trans.QueryInterface(Components.interfaces.nsITransferable); 1230 var data = {}; 1231 var length = {}; 1232 var currData = null; 1233 if(aAnyFlag){ 1234 var flavour = {}; 1235 try{ 1236 trans.getAnyTransferData(flavour, data, length); 1237 if(data && flavour){ 1238 var selectedFlavour = aFlavourSet.flavourTable[flavour.value]; 1239 if(selectedFlavour) dataArray[i] = FlavourToXfer(data.value, length.value, selectedFlavour); 1240 } 1241 }catch(ex){ 1242 _dump2("nsTransferable_get("+i+"):"+ex); 1243 continue; 1244 } 1245 }else{ 1246 var firstFlavour = aFlavourSet.flavours[0]; 1247 trans.getTransferData(firstFlavour, data, length); 1248 if(data && firstFlavour) dataArray[i] = FlavourToXfer(data.value, length.value, firstFlavour); 1249 } 1250 } 1251 return new TransferDataSet(dataArray); 1252 }, 1253 1254 dragDropObserver : { 1255 onDragStart : function(event, transferData, action){ 1256 try{mcTreeImageTooltip.hidePopup()}catch(ex){} 1257 try{ 1258 if(event.originalTarget.localName != "treechildren") return; 1259 var curIdx = mcTreeHandler.TREE.currentIndex; 1260 var res = mcTreeHandler.TREE.builderView.getResourceAtIndex(curIdx); 1261 var source = mcTreeDNDHandler.DataSource.getProperty(res,"source"); 1262 var editmode = mcTreeDNDHandler.DataSource.getProperty(res,"editmode"); 1263 var curPar = mcTreeHandler.getParentResource(curIdx); 1264 var p_source = window.top.bitsObjectMng.DataSource.getProperty(curPar,"source"); 1265 transferData.data = new TransferData(); 1266 transferData.data.addDataForFlavour("moz/rdfitem", res.Value); 1267 }catch(ex){ 1268 _dump("dragDropObserver.onDragStart():"+ex); 1269 } 1270 }, 1271 getSupportedFlavours : function(){ 1272 var flavours = new FlavourSet(); 1273 flavours.appendFlavour("moz/rdfitem"); 1274 flavours.appendFlavour("text/x-moz-url"); 1275 flavours.appendFlavour("text/html"); 1276 flavours.appendFlavour("text/xml"); 1277 flavours.appendFlavour("application/x-moz-url"); 1278 flavours.appendFlavour("application/x-moz-file","nsIFile"); 1279 flavours.appendFlavour("text/unicode"); 1280 flavours.appendFlavour("wired-marker/folder"); 1281 flavours.appendFlavour("wired-marker/object"); 1282 return flavours; 1283 }, 1284 onDragOver : function(event, flavour, session){}, 1285 onDragExit : function(event, session){}, 1286 onDrop : function(event, transferData, session){}, 1287 }, 1288 1289 builderObserver : { 1290 canDrop : function(index, orient){ 1291 var XferDataSet = null; 1292 var XferData = null; 1293 var doraggedData = null; 1294 var XferDataType = null; 1295 var info = Components.classes["@mozilla.org/xre/app-info;1"].getService(Components.interfaces.nsIXULAppInfo); 1296 var app_version = parseFloat(info.version); 1297 if(app_version<3.1){ 1298 try{ 1299 XferDataSet = nsTransferable.get(mcTreeDNDHandler.dragDropObserver.getSupportedFlavours(),nsDragAndDrop.getDragData,true); 1300 XferData = XferDataSet.first.first; 1301 doraggedData = XferData.data; 1302 XferDataType = XferData.flavour.contentType; 1303 }catch(ex){} 1304 }else{ 1305 try{ 1306 if(mcTreeDNDHandler._dataTransfer){ 1307 var dataTransfer = mcTreeDNDHandler._dataTransfer; 1308 XferData = {}; 1309 var supportedTypes = ["moz/rdfitem", "wired-marker/object", "text/x-moz-url", "text/url-list", "text/plain", "application/x-moz-file"]; 1310 var types = dataTransfer.types; 1311 types = supportedTypes.filter(function(value){ return types.contains(value);}); 1312 if(types.length){ 1313 XferData.data = dataTransfer.getData(types[0]); 1314 XferData.flavour = {contentType : types[0]}; 1315 if(!XferData.data) XferData.data = dataTransfer.mozGetDataAt(types[0],0); 1316 } 1317 if(XferData.data){ 1318 doraggedData = XferData.data; 1319 XferDataType = XferData.flavour.contentType; 1320 } 1321 } 1322 }catch(ex){ 1323 XferData = undefined; 1324 doraggedData = undefined; 1325 XferDataType = undefined; 1326 } 1327 } 1328 try{ 1329 var res = ( index == -1) ? [mcTreeHandler.TREE.ref, 0] : mcTreeDNDHandler.getTarget(index, orient); 1330 var curRes = mcTreeHandler.TREE.builderView.getResourceAtIndex(index); 1331 var editmode = window.top.bitsObjectMng.DataSource.getProperty(curRes,"editmode"); 1332 var dbtype = window.top.bitsObjectMng.DataSource.getProperty(curRes,"dbtype"); 1333 if(dbtype == "") return false; 1334 if(res[0] == mcTreeHandler.TREE.ref && !(editmode & 0x1000)) return false; 1335 if(mcTreeHandler.TREE.currentIndex>=0 && XferDataType == "moz/rdfitem"){ 1336 var srcRes = mcTreeHandler.resource; 1337 var d_editmode = window.top.bitsObjectMng.DataSource.getProperty(srcRes,"editmode"); 1338 if(res[0] != mcTreeHandler.TREE.ref && (d_editmode & 0x1000)) return false; 1339 if(res[0] != mcTreeHandler.TREE.ref && ((editmode & 0x1000) && (d_editmode & 0x1000))) return false; 1340 }else{ 1341 if(editmode & 0x1000){ 1342 if(XferDataType == "text/x-moz-url" || XferDataType == "application/x-moz-file"){ 1343 var url; 1344 var aFile; 1345 if(XferDataType == "text/x-moz-url"){ 1346 url = doraggedData.split("\n")[0]; 1347 aFile = mcTreeHandler.Common.convertURLToFile(url); 1348 }else if(XferDataType == "application/x-moz-file"){ 1349 aFile = doraggedData; 1350 url = mcTreeDNDHandler.Common.convertFilePathToURL(aFile.path); 1351 } 1352 if(!aFile || !aFile.exists() || !url) return false; 1353 var splitFileName = mcTreeHandler.Common.splitFileName(url); 1354 if(splitFileName[1].toLowerCase() != "xml" && splitFileName[1].toLowerCase() != "zip") return false; 1355 }else{ 1356 return false; 1357 } 1358 }else if(index>0 && orient<0){ 1359 var prevRes = mcTreeHandler.TREE.builderView.getResourceAtIndex(index-1); 1360 var prevEditmode = window.top.bitsObjectMng.DataSource.getProperty(prevRes,"editmode"); 1361 if(prevEditmode & 0x1000) return false; 1362 } 1363 } 1364 if(index != -1 && !mcTreeHandler.TREE.view.isContainer(index) && orient == 0) return false; 1365 window.top.bitsScrapPartyAddonService.builderViewObserver.canDrop(index, orient, mcTreeHandler.TREE); 1366 return true; 1367 }catch(ex){ 1368 return false; 1369 } 1370 }, 1371 onDrop : function(row, orient){ 1372 var XferDataSet = null; 1373 var XferData = null; 1374 var doraggedData = null; 1375 var XferDataType = null; 1376 var info = Components.classes["@mozilla.org/xre/app-info;1"].getService(Components.interfaces.nsIXULAppInfo); 1377 var app_version = parseFloat(info.version); 1378 if(app_version<3.1){ 1379 try{ 1380 XferDataSet = nsTransferable.get(mcTreeDNDHandler.dragDropObserver.getSupportedFlavours(),nsDragAndDrop.getDragData,true); 1381 XferData = XferDataSet.first.first; 1382 doraggedData = XferData.data; 1383 XferDataType = XferData.flavour.contentType; 1384 }catch(ex){} 1385 }else{ 1386 try{ 1387 if(mcTreeDNDHandler._dataTransfer){ 1388 var dataTransfer = mcTreeDNDHandler._dataTransfer; 1389 XferData = {}; 1390 var supportedTypes = ["moz/rdfitem", "wired-marker/object", "text/x-moz-url", "text/url-list", "text/plain", "application/x-moz-file"]; 1391 var types = dataTransfer.types; 1392 types = supportedTypes.filter(function(value){ return types.contains(value); }); 1393 if(types.length){ 1394 XferData.data = dataTransfer.getData(types[0]); 1395 XferData.flavour = {contentType : types[0]}; 1396 if(!XferData.data) XferData.data = dataTransfer.mozGetDataAt(types[0],0); 1397 } 1398 if(XferData.data){ 1399 doraggedData = XferData.data; 1400 XferDataType = XferData.flavour.contentType; 1401 } 1402 } 1403 }catch(ex){} 1404 } 1405 var state; 1406 // try{ 1407 if(XferDataType == "moz/rdfitem"){ 1408 if(mcTreeHandler.TREE.currentIndex>=0 && mcTreeHandler.TREE.currentIndex != row && window.top.bitsScrapPartyMergeService){ 1409 var srcRes = mcTreeHandler.resource; 1410 var dstRes = mcTreeHandler.TREE.builderView.getResourceAtIndex(row); 1411 var param = { 1412 tree : mcTreeHandler.TREE, 1413 srcRes : srcRes, 1414 dstRes : dstRes, 1415 modCtrl : mcTreeDNDHandler.modCtrl, 1416 modAlt : mcTreeDNDHandler.modAlt, 1417 modShift : mcTreeDNDHandler.modShift, 1418 modMeta : mcTreeDNDHandler.modMeta 1419 }; 1420 var mergeRtn = window.top.bitsScrapPartyMergeService.mergeResource(param); 1421 if(mergeRtn){ 1422 window.top.bitsScrapPartyAddonService.builderViewObserver.onDrop(row, orient, mcTreeHandler.TREE, XferDataSet); 1423 return; 1424 } 1425 if(window.top.bitsScrapPartyMergeService.cancel){ 1426 window.top.bitsScrapPartyAddonService.builderViewObserver.onDrop(row, orient, mcTreeHandler.TREE, XferDataSet); 1427 mcTreeViewModeService.rebuild(); 1428 return; 1429 } 1430 var src_dbtype = mcTreeDNDHandler.DataSource.getProperty(srcRes,"dbtype"); 1431 var dst_dbtype = mcTreeDNDHandler.DataSource.getProperty(dstRes,"dbtype"); 1432 if(src_dbtype == window.top.bitsMarkingCollection._uncategorized.dbtype || dst_dbtype == window.top.bitsMarkingCollection._uncategorized.dbtype || mcTreeDNDHandler.modShift){ 1433 mcTreeDNDHandler.modShift = true; 1434 mcTreeDNDHandler.move(row, orient); 1435 }else{ 1436 if(mcTreeDNDHandler.modCtrl || mcTreeDNDHandler.modMeta){ 1437 mcTreeDNDHandler.copy(row, orient); 1438 }else{ 1439 mcTreeDNDHandler.move(row, orient); 1440 } 1441 } 1442 }else{ 1443 if(mcTreeDNDHandler.modCtrl || mcTreeDNDHandler.modMeta){ 1444 mcTreeDNDHandler.copy(row, orient); 1445 }else{ 1446 mcTreeDNDHandler.move(row, orient); 1447 } 1448 } 1449 }else if(XferDataType == "wired-marker/object" && XferData){ 1450 var dstRes = mcTreeHandler.TREE.builderView.getResourceAtIndex(row); 1451 var type = mcTreeHandler.DataSource.getProperty(dstRes, "type"); 1452 if(!(type & 0x1000) && mcTreeHandler.TREE.currentIndex>=0 && mcTreeHandler.TREE.currentIndex != row && window.top.bitsScrapPartyMergeService){ 1453 var srcRes = mcTreeHandler.resource; 1454 var mergeRtn = mcItemView.mergeObject(srcRes,dstRes); 1455 if(mergeRtn) return; 1456 var src_dbtype = mcTreeDNDHandler.DataSource.getProperty(srcRes,"dbtype"); 1457 if(!src_dbtype || src_dbtype == ""){ 1458 if(mcItemView.isChecked){ 1459 var object = mcItemView.object; 1460 if(object.dbtype) src_dbtype = object.dbtype; 1461 } 1462 } 1463 if(!src_dbtype || src_dbtype == "") return; 1464 var dst_dbtype = mcTreeDNDHandler.DataSource.getProperty(dstRes,"dbtype"); 1465 if(src_dbtype == window.top.bitsMarkingCollection._uncategorized.dbtype || dst_dbtype == window.top.bitsMarkingCollection._uncategorized.dbtype || mcTreeDNDHandler.modShift){ 1466 mcItemView.moveObject(dstRes,true); 1467 }else{ 1468 if(mcItemView.modCtrl || mcItemView.modMeta){ 1469 mcItemView.copyObject(dstRes); 1470 }else{ 1471 mcItemView.moveObject(dstRes,mcItemView.modShift); 1472 } 1473 } 1474 } 1475 }else if(XferDataType == "application/x-moz-file" && XferData){ 1476 if(XferData.data instanceof Components.interfaces.nsIFile){ 1477 var urlString = mcTreeDNDHandler.Common.convertFilePathToURL(XferData.data.path); 1478 state = mcTreeDNDHandler.capture(urlString, row, orient); 1479 } 1480 }else if(XferData && XferData.data){ 1481 if( 1482 mcTreeDNDHandler.originalTarget && 1483 mcTreeDNDHandler.originalTarget.nodeName == "IMG" && 1484 mcTreeDNDHandler.originalTarget.hasAttribute('oid') && 1485 mcTreeDNDHandler.originalTarget.hasAttribute('dbtype') && 1486 mcTreeDNDHandler.originalTarget.hasAttribute('pfid')){ 1487 var oid = mcTreeDNDHandler.originalTarget.getAttribute('oid'); 1488 var dbtype = mcTreeDNDHandler.originalTarget.getAttribute('dbtype'); 1489 var pfid = mcTreeDNDHandler.originalTarget.getAttribute('pfid'); 1490 var dstRes = mcTreeHandler.TREE.builderView.getResourceAtIndex(row); 1491 var dst_fid = mcTreeDNDHandler.DataSource.getProperty(dstRes,"id"); 1492 var dst_dbtype = mcTreeDNDHandler.DataSource.getProperty(dstRes,"dbtype"); 1493 var dst_style = mcTreeDNDHandler.DataSource.getProperty(dstRes,"style"); 1494 if(dst_fid == pfid && dst_dbtype == dbtype) return; 1495 var srcObjects = mcTreeDNDHandler.Database.getObject({oid:oid,pfid:pfid}, dbtype); 1496 var mergeRtn = window.top.bitsTreeListService.mergeObject({fid:dst_fid,dbtype:dst_dbtype},srcObjects[0]); 1497 if(mergeRtn) return; 1498 var rtnObj = null; 1499 if(dbtype == window.top.bitsMarkingCollection._uncategorized.dbtype || mcTreeDNDHandler.modShift){ 1500 rtnObj = window.top.bitsTreeListService.moveObject({fid:dst_fid,dbtype:dst_dbtype,fid_style:dst_style},srcObjects[0],true); 1501 }else{ 1502 rtnObj = window.top.bitsTreeListService.copyObject({fid:dst_fid,dbtype:dst_dbtype,fid_style:dst_style},srcObjects[0]); 1503 } 1504 if(rtnObj){ 1505 setTimeout(function(){ 1506 try{ 1507 mcTreeHandler.TREE.currentIndex = row; 1508 if(!mcTreeHandler.TREE.view.selection.isSelected(mcTreeHandler.TREE.currentIndex)) mcTreeHandler.TREE.view.selection.select(mcTreeHandler.TREE.currentIndex); 1509 mcPropertyView.dispProperty(mcTreeHandler.object); 1510 var viewmode = mcTreeViewModeService.viewmode; 1511 if(mcItemView.isChecked){ 1512 mcItemView._bitsItemView.onTreeClick({viewmode:viewmode,fid:dst_fid,dbtype:dst_dbtype,res:dstRes}); 1513 }else{ 1514 var f_pfid = undefined; 1515 var rtnFolder = mcTreeDNDHandler.Database.getFolder({fid:pfid},dbtype); 1516 if(rtnFolder && rtnFolder.length) f_pfid = rtnFolder[0].pfid; 1517 rtnFolder = undefined; 1518 if(dbtype == window.top.bitsMarkingCollection._uncategorized.dbtype || mcTreeDNDHandler.modShift){ 1519 var srcPRes = mcTreeDNDHandler.Common.RDF.GetResource(mcTreeDNDHandler.DataSource.getID2About(pfid,f_pfid,dbtype)); 1520 var srcAbout = mcTreeDNDHandler.DataSource.getID2About(oid,pfid,dbtype); 1521 var srcRes = mcTreeDNDHandler.Common.RDF.GetResource(srcAbout); 1522 if(mcTreeDNDHandler.DataSource.moveItem(srcRes, srcPRes, dstRes, -1)){ 1523 mcTreeDNDHandler.DataSource.setProperty(srcRes, "dbtype", dst_dbtype); 1524 mcTreeDNDHandler.DataSource.setProperty(srcRes, "pfid", dst_fid); 1525 mcTreeDNDHandler.DataSource.setProperty(srcRes, "id", rtnObj.oid); 1526 mcTreeDNDHandler.DataSource.setID2About(oid,pfid,undefined,dbtype); 1527 mcTreeDNDHandler.DataSource.setID2About(rtnObj.oid,dst_fid,srcRes.Value,dst_dbtype); 1528 mcTreeDNDHandler.changeNodeStyle(srcRes); 1529 } 1530 }else{ 1531 mcTreeDNDHandler.DataSource.addItem(mcTreeDNDHandler.Database.makeObjectToItem(rtnObj),dstRes.Value,-1,dst_dbtype); 1532 } 1533 mcTreeDNDHandler.DataSource.flush(); 1534 mcTreeCssService.init(); 1535 mcController.rebuildLocal(); 1536 } 1537 window.top.bitsTreeListService.reload(mcTreeDNDHandler.originalTarget.ownerDocument); 1538 mcTreeDNDHandler.originalTarget = null; 1539 }catch(e){ 1540 _dump2(e); 1541 } 1542 },0); 1543 } 1544 }else{ 1545 state = mcTreeDNDHandler.capture(XferData.data, row, orient); 1546 } 1547 } 1548 // }catch(ex){_dump2("onDrop():"+ex);} 1549 mcController.rebuildLocal(); 1550 window.top.bitsScrapPartyAddonService.builderViewObserver.onDrop(row, orient, mcTreeHandler.TREE, XferDataSet, state); 1551 }, 1552 onToggleOpenState : function(aRow){}, 1553 onCycleHeader : function(){}, 1554 onSelectionChanged : function(){}, 1555 onCycleCell : function(aRow, pColID){}, 1556 isEditable : function(){}, 1557 onSetCellText : function(){}, 1558 onPerformAction : function(){}, 1559 onPerformActionOnRow : function(){}, 1560 onPerformActionOnCell : function(aAction, aRow, aColID){}, 1561 }, 1562 1563 getModifiers : function(aEvent){ 1564 this.modAlt = aEvent.altKey; 1565 this.modShift = aEvent.shiftKey; 1566 this.modCtrl = aEvent.ctrlKey; 1567 this.modMeta = aEvent.metaKey; 1568 }, 1569 1570 setDataTransfer : function(aEvent){ 1571 try{if(aEvent.dataTransfer) this._dataTransfer = aEvent.dataTransfer;}catch(e){} 1572 }, 1573 1574 onMousedown : function(aEvent){ 1575 try{ mcTreeDNDHandler.rangeParent = aEvent.rangeParent; }catch(ex){} 1576 try{ mcTreeDNDHandler.originalTarget = aEvent.originalTarget; }catch(ex){} 1577 }, 1578 1579 init : function(){ 1580 this.gBrowser.addEventListener("mousedown", this.onMousedown, false); 1581 }, 1582 1583 quit : function(){ 1584 try{ this.gBrowser.removeEventListener("mousedown", this.onMousedown, false); }catch(ex){} 1585 }, 1586 1587 move : function(aRow, aOrient){ 1588 this.row = aRow; 1589 this.orient = aOrient; 1590 this.rowRes = mcTreeHandler.TREE.builderView.getResourceAtIndex(aRow); 1591 (mcTreeHandler.TREE.view.selection.count == 1) ? this.moveSingle() : this.moveMultiple(); 1592 }, 1593 1594 moveSingle : function(){ 1595 var curIdx = mcTreeHandler.TREE.currentIndex; 1596 var curRes = mcTreeHandler.TREE.builderView.getResourceAtIndex(curIdx); 1597 1598 var id = this.DataSource.getProperty(curRes,"id"); 1599 var dbtype = this.DataSource.getProperty(curRes,"dbtype"); 1600 var pfid = this.DataSource.getProperty(curRes,"pfid"); 1601 var about = this.DataSource.getID2About(id,pfid,dbtype); 1602 var curRes = mcTreeDNDHandler.Common.RDF.GetResource(about); 1603 var curPar = this.DataSource.findParentResource(curRes); 1604 var tarRes = mcTreeHandler.TREE.builderView.getResourceAtIndex(this.row); 1605 var tarPar = ( this.orient == 0) ? tarRes : mcTreeHandler.getParentResource(this.row); 1606 this.moveAfterChecking(curRes, curPar, tarRes, tarPar); 1607 window.top.bitsObjectMng.DataSource.flush(); 1608 }, 1609 1610 moveMultiple : function(){ 1611 var idxList = mcTreeHandler.getSelection(false, 2); 1612 if(mcTreeHandler.validateMultipleSelection(idxList) == false) return; 1613 var i = 0; 1614 var curResList = []; var curParList = []; 1615 var tarResList = []; var tarParList = []; 1616 for(i=0;i<idxList.length;i++){ 1617 curResList.push( mcTreeHandler.TREE.builderView.getResourceAtIndex(idxList[i])); 1618 curParList.push( mcTreeHandler.getParentResource(idxList[i])); 1619 tarResList.push( mcTreeHandler.TREE.builderView.getResourceAtIndex(this.row)); 1620 tarParList.push( ( this.orient == 0) ? tarResList[i] : mcTreeHandler.getParentResource(this.row)); 1621 } 1622 if(this.orient == 1){ 1623 for(i=idxList.length-1;i>=0;i--){ 1624 this.moveAfterChecking(curResList[i], curParList[i], tarResList[i], tarParList[i]); 1625 } 1626 }else{ 1627 for(i=0;i<idxList.length;i++){ 1628 this.moveAfterChecking(curResList[i], curParList[i], tarResList[i], tarParList[i]); 1629 } 1630 } 1631 window.top.bitsObjectMng.DataSource.flush(); 1632 }, 1633 1634 moveAfterChecking : function(curRes, curPar, tarRes, tarPar){ 1635 var curAbsIdx = mcTreeHandler.TREE.builderView.getIndexOfResource(curRes); 1636 var curRelIdx = this.DataSource.getRelativeIndex(curPar, curRes); 1637 var tarRelIdx = this.DataSource.getRelativeIndex(tarPar, tarRes); 1638 if(this.orient == 0){ 1639 if(curAbsIdx == this.row) return; 1640 }else{ 1641 if(this.orient == 1) tarRelIdx++; 1642 if(curPar.Value == tarPar.Value && tarRelIdx > curRelIdx) tarRelIdx--; 1643 if(this.orient == 1 && 1644 mcTreeHandler.TREE.view.isContainer(this.row) && 1645 mcTreeHandler.TREE.view.isContainerOpen(this.row) && 1646 mcTreeHandler.TREE.view.isContainerEmpty(this.row) == false){ 1647 if(curAbsIdx == this.row) return; 1648 tarPar = tarRes; 1649 tarRes = mcTreeHandler.TREE.builderView.getResourceAtIndex(this.row + 1); 1650 tarRelIdx = 1; 1651 } 1652 if(curPar.Value == tarPar.Value && curRelIdx == tarRelIdx) return; 1653 } 1654 if(curAbsIdx>=0 && mcTreeHandler.TREE.view.isContainer(curAbsIdx)){ 1655 var tmpIdx = this.row; 1656 var tmpRes = tarRes; 1657 while(tmpRes.Value != mcTreeHandler.TREE.ref && tmpIdx != -1){ 1658 tmpRes = mcTreeHandler.getParentResource(tmpIdx); 1659 tmpIdx = mcTreeHandler.TREE.builderView.getIndexOfResource(tmpRes); 1660 if(tmpRes.Value == curRes.Value) return; 1661 } 1662 } 1663 var rtn = false; 1664 var tar_pfid = this.DataSource.getProperty(tarPar, "id"); 1665 var tar_dbtype = this.DataSource.getProperty(tarPar, "dbtype"); 1666 var cur_dbtype = this.DataSource.getProperty(curRes, "dbtype"); 1667 var cur_pfid = this.DataSource.getProperty(curRes, "pfid"); 1668 var rtnFolder = null; 1669 var rtnObject = null; 1670 var pfid_order = 0; 1671 if(this.DataSource.isContainer(this.rowRes)){ 1672 var tmp_fid = this.DataSource.getProperty(this.rowRes, "id"); 1673 rtnFolder = this.Database.getFolderFormID(tmp_fid,tar_dbtype); 1674 if(rtnFolder && rtnFolder.length) pfid_order = rtnFolder[0].pfid_order; 1675 }else{ 1676 var tmp_oid = this.DataSource.getProperty(this.rowRes, "id"); 1677 rtnObject = this.Database.getObject({oid:tmp_oid,pfid:tar_pfid},tar_dbtype); 1678 if(rtnObject && rtnObject.length) pfid_order = rtnObject[0].pfid_order; 1679 } 1680 if(this.orient>=0) pfid_order = parseFloat(parseFloat(pfid_order) + parseFloat(this.orient)); 1681 if(curAbsIdx>=0 && mcTreeHandler.TREE.view.isContainer(curAbsIdx)){ 1682 var fid = this.DataSource.getProperty(curRes, "id"); 1683 if(cur_dbtype == tar_dbtype){ 1684 rtn = this.Database.updateFolder({fid:fid,pfid:tar_pfid,pfid_order:pfid_order},tar_dbtype); 1685 if(rtn){ 1686 this.DataSource.setProperty(curRes, "pfid", tar_pfid); 1687 this.DataSource.setProperty(curRes, "pfid_order", pfid_order); 1688 this.DataSource.setID2About(fid,cur_pfid,undefined,cur_dbtype); 1689 this.DataSource.setID2About(fid,tar_pfid,curRes.Value,tar_dbtype); 1690 } 1691 }else{ 1692 this.moveFolder(curRes, curPar, tarPar, tarRelIdx); 1693 return; 1694 } 1695 }else{ 1696 var oid = this.DataSource.getProperty(curRes, "id"); 1697 if(tar_pfid != cur_pfid){ 1698 rtn = !this.Database.existsObject({oid:oid,pfid:tar_pfid},tar_dbtype); 1699 }else{ 1700 rtn = true; 1701 } 1702 if(!rtn){ 1703 rtn = this.Common.confirm(mcMainService.STRING.getString("CONFIRM_COPYOBJECT_OVERWRITE")); 1704 if(rtn){ 1705 var contResList = this.DataSource.flattenResources(tarPar, 2, false); 1706 var i; 1707 for(i=0;i<contResList.length;i++){ 1708 if(contResList[i].Value == curRes.Value) continue; 1709 var del_oid = this.DataSource.getProperty(contResList[i], "id"); 1710 if(del_oid != oid) continue; 1711 mcTreeHandler.remove(undefined,contResList[i],true,false); 1712 } 1713 } 1714 } 1715 if(rtn){ 1716 if(cur_dbtype == tar_dbtype){ 1717 if(cur_pfid != tar_pfid){ 1718 rtn = this.Database.updateObject({oid:oid,pfid:tar_pfid,pfid_old:cur_pfid,pfid_order:pfid_order},tar_dbtype); 1719 if(rtn){ 1720 this.DataSource.setProperty(curRes, "pfid", tar_pfid); 1721 this.DataSource.setProperty(curRes, "pfid_order", pfid_order); 1722 this.DataSource.setID2About(oid,cur_pfid,undefined,cur_dbtype); 1723 this.DataSource.setID2About(oid,tar_pfid,curRes.Value,tar_dbtype); 1724 } 1725 } 1726 }else{ 1727 this.moveObject(curRes, curPar, tarPar, tarRelIdx); 1728 return; 1729 } 1730 } 1731 } 1732 if(rtn){ 1733 rtn = this.DataSource.moveItem(curRes, curPar, tarPar, tarRelIdx); 1734 if(rtn){ 1735 if(this.DataSource.isContainer(this.Common.RDF.GetResource(curRes.Value))){ 1736 }else{ 1737 mcTreeDNDHandler.changeNodeStyle(curRes); 1738 } 1739 window.top.bitsMarkingCollection.reOrder(tarPar); 1740 var selectIdx = mcTreeHandler.TREE.builderView.getIndexOfResource(this.Common.RDF.GetResource(curRes.Value)); 1741 if(selectIdx>=0){ 1742 mcTreeHandler.TREE.currentIndex = selectIdx; 1743 if(!mcTreeHandler.TREE.view.selection.isSelected(mcTreeHandler.TREE.currentIndex)) mcTreeHandler.TREE.view.selection.select(mcTreeHandler.TREE.currentIndex); 1744 mcTreeHandler.TREE.focus(); 1745 mcTreeHandler.TREE.treeBoxObject.ensureRowIsVisible(selectIdx); 1746 mcPropertyView.dispProperty(mcTreeHandler.object); 1747 } 1748 }else{ 1749 mcTreeViewModeService.rebuild(); 1750 } 1751 } 1752 }, 1753 1754 moveFolder : function(curRes, curPar, tarPar, tarRelIdx){ 1755 var rtn = false; 1756 var modShift = this.modShift; 1757 var tar_dbtype = this.DataSource.getProperty(tarPar, "dbtype"); 1758 var cur_dbtype = this.DataSource.getProperty(curPar, "dbtype"); 1759 var aTransaction = true; 1760 if(!aTransaction){ 1761 this.Database.beginTransaction(tar_dbtype); 1762 this.Database.beginTransaction(cur_dbtype); 1763 } 1764 var addPar; 1765 var moveRes = null; 1766 var moveFids = []; 1767 var fid2newfid = []; 1768 var moveID = parseInt(this.DataSource.identify(this.Common.getTimeStamp())); 1769 var i,j; 1770 var fldResList = this.DataSource.flattenResources(curRes, 1, true); 1771 for(i=0;i<fldResList.length;i++){ 1772 addParAbout = null; 1773 var tmp_fid = this.DataSource.getProperty(fldResList[i], "id"); 1774 if(this.Database._idExists(tar_dbtype,tmp_fid,aTransaction)){ 1775 fid2newfid[""+tmp_fid] = ""+moveID; 1776 moveID = parseInt(moveID)+1; 1777 }else{ 1778 fid2newfid[""+tmp_fid] = ""+tmp_fid; 1779 } 1780 var tmp_dbtype = this.DataSource.getProperty(fldResList[i], "dbtype"); 1781 var moveFolder = this.Database.getFolderFormID(tmp_fid, tmp_dbtype, aTransaction); 1782 if(!moveFolder || moveFolder.length==0) break; 1783 moveFolder = moveFolder[0]; 1784 delete moveFolder.dbtype; 1785 if(fid2newfid[""+moveFolder.fid]) moveFolder.fid = fid2newfid[""+moveFolder.fid]; 1786 moveFids.push(moveFolder); 1787 if(curRes.Value == fldResList[i].Value){ 1788 moveFolder.pfid = this.DataSource.getProperty(tarPar, "id"); 1789 addParAbout = tarPar.Value; 1790 }else if(fid2newfid[""+moveFolder.pfid]){ 1791 moveFolder.pfid = fid2newfid[""+moveFolder.pfid]; 1792 } 1793 rtn = this.Database.addFolder(moveFolder, tar_dbtype, aTransaction); 1794 if(rtn){ 1795 if(!addParAbout){ 1796 var fid = moveFolder.pfid; 1797 var f_pfid = undefined; 1798 var rtnFolder = this.Database.getFolder({fid:moveFolder.pfid},tar_dbtype); 1799 if(rtnFolder && rtnFolder.length) f_pfid = rtnFolder[0].pfid; 1800 rtnFolder = undefined; 1801 addParAbout = this.DataSource.getID2About(moveFolder.pfid,f_pfid,tar_dbtype); 1802 } 1803 var newItem = this.Common.newItem(); 1804 newItem.id = moveFolder.fid; 1805 newItem.about = this.DataSource.getAbout(moveFolder.fid,moveFolder.pfid,tar_dbtype); 1806 newItem.pfid = moveFolder.pfid; 1807 newItem.title = moveFolder.fid_title; 1808 newItem.type = "folder"; 1809 newItem.style = moveFolder.fid_style; 1810 newItem.source = ""; 1811 newItem.cssrule = 'css_'+tar_dbtype+'_'+moveFolder.fid; 1812 newItem.dbtype = tar_dbtype; 1813 newItem.editmode = moveFolder.fid_mode; 1814 newItem.icon = this.DataSource.getProperty(fldResList[i], "icon"); 1815 newItem.addon_id = this.DataSource.getProperty(fldResList[i], "addon_id"); 1816 var tarRelIdx = -1; 1817 try{ 1818 var cont = this.DataSource.getContainer(addParAbout, false); 1819 tarRelIdx = cont.GetCount(); 1820 }catch(ex){} 1821 var newRes = this.DataSource.addItem(newItem, addParAbout, tarRelIdx, tar_dbtype); 1822 if(newRes && newRes.Value){ 1823 this.DataSource.createEmptySeq(newRes.Value); 1824 if(!moveRes) moveRes = newRes; 1825 } 1826 }else{//倱æããå Žå 1827 if(moveRes) mcTreeHandler._removeFolder(moveRes); 1828 break; 1829 } 1830 } 1831 if(mcItemView.isChecked){ 1832 var objResList = []; 1833 if(rtn){ 1834 var tmp_fid = this.DataSource.getProperty(curRes, "id"); 1835 var tmp_dbtype = this.DataSource.getProperty(curRes, "dbtype"); 1836 objResList = window.top.bitsTreeExportService._getAllObject({fid:tmp_fid,dbtype:tmp_dbtype}); 1837 for(i=0;i<objResList.length;i++){ 1838 var moveObject = objResList[i]; 1839 var folder = { 1840 fid : fid2newfid[""+moveObject.pfid], 1841 dbtype : tar_dbtype 1842 }; 1843 rtn = bitsItemView._moveObject(folder,moveObject,modShift); 1844 if(!rtn){ 1845 if(moveRes) mcTreeHandler._removeFolder(moveRes); 1846 break; 1847 } 1848 } 1849 } 1850 }else{ 1851 var objResList = this.DataSource.flattenResources(curRes, 2, true); 1852 if(rtn){ 1853 for(i=0;i<objResList.length;i++){ 1854 var tmp_oid = this.DataSource.getProperty(objResList[i], "id"); 1855 var tmp_dbtype = this.DataSource.getProperty(objResList[i], "dbtype"); 1856 var moveObject = null; 1857 var moveObjects = this.Database.getObjectFormID(tmp_oid, tmp_dbtype, aTransaction); 1858 if(!moveObjects || moveObjects.length==0) break; 1859 for(j=0;j<moveObjects.length;j++){ 1860 if(fid2newfid[""+moveObjects[j].pfid] == undefined) continue; 1861 moveObject = moveObjects[j]; 1862 } 1863 if(!moveObject) continue; 1864 delete moveObject.dbtype; 1865 delete moveObject.fid_style; 1866 delete moveObject.fid_title; 1867 delete moveObject.folder_order; 1868 if(this.Database._idExists(tar_dbtype,moveObject.oid,aTransaction)){ 1869 moveObject.oid = ""+moveID; 1870 moveID = parseInt(moveID)+1; 1871 } 1872 if(fid2newfid[""+moveObject.pfid]) moveObject.pfid = fid2newfid[""+moveObject.pfid]; 1873 rtn = this.Database.addObject(moveObject, tar_dbtype, aTransaction); 1874 if(rtn){ 1875 var objAddParAbout = null; 1876 if(!objAddParAbout){ 1877 var fid = moveFolder.pfid; 1878 var f_pfid = undefined; 1879 var rtnFolder = this.Database.getFolder({fid:moveObject.pfid},tar_dbtype); 1880 if(rtnFolder && rtnFolder.length) f_pfid = rtnFolder[0].pfid; 1881 rtnFolder = undefined; 1882 objAddParAbout = this.DataSource.getID2About(moveObject.pfid,f_pfid,tar_dbtype); 1883 } 1884 var newItem = this.Common.newItem(); 1885 newItem.id = moveObject.oid; 1886 newItem.about = this.DataSource.getAbout(moveObject.oid,moveObject.pfid,tar_dbtype); 1887 newItem.pfid = moveObject.pfid; 1888 newItem.type = "item"; 1889 newItem.source = this.DataSource.getProperty(objResList[i], "source"); 1890 newItem.title = moveObject.oid_title; 1891 newItem.editmode = moveObject.oid_mode; 1892 newItem.uri = moveObject.doc_url; 1893 newItem.dbtype = tar_dbtype; 1894 newItem.icon = this.DataSource.getProperty(objResList[i], "icon"); 1895 var tarRelIdx = -1; 1896 try{ 1897 var cont = this.DataSource.getContainer(objAddParAbout, false); 1898 tarRelIdx = cont.GetCount(); 1899 }catch(ex){} 1900 var newRes = this.DataSource.addItem(newItem, objAddParAbout, tarRelIdx, tar_dbtype); 1901 }else{//倱æããå Žå 1902 if(moveRes) mcTreeHandler._removeFolder(moveRes); 1903 break; 1904 } 1905 } 1906 } 1907 if(rtn && modShift){ 1908 rtn = true; 1909 if(rtn){ 1910 //ShiftããŒãæŒãããŠããå Žåã移åå 1800 var id = this.DataSource.getProperty(curRes, "id"); 1801 var dbtype = this.DataSource.getProperty(curRes, "dbtype"); 1802 var pfid = this.DataSource.getProperty(curRes, "pfid"); 1803 var about = this.DataSource.getID2About(id, pfid, dbtype); 1804 var curRes = mcTreeDNDHandler.Common.RDF.GetResource(about); 1805 var curPar = this.DataSource.findParentResource(curRes); 1806 var tarRes = mcTreeHandler.TREE.builderView.getResourceAtIndex(this.row); 1807 var tarPar = (this.orient == 0) ? tarRes : mcTreeHandler.getParentResource(this.row); 1808 this.moveAfterChecking(curRes, curPar, tarRes, tarPar); 1809 window.top.bitsObjectMng.DataSource.flush(); 1810 }, 1811 moveMultiple: function() { 1812 var idxList = mcTreeHandler.getSelection(false, 2); 1813 if (mcTreeHandler.validateMultipleSelection(idxList) == false) 1814 return; 1815 var i = 0; 1816 var curResList = []; 1817 var curParList = []; 1818 var tarResList = []; 1819 var tarParList = []; 1820 for (i = 0; i < idxList.length; i++) { 1821 curResList.push(mcTreeHandler.TREE.builderView.getResourceAtIndex(idxList[i])); 1822 curParList.push(mcTreeHandler.getParentResource(idxList[i])); 1823 tarResList.push(mcTreeHandler.TREE.builderView.getResourceAtIndex(this.row)); 1824 tarParList.push((this.orient == 0) ? tarResList[i] : mcTreeHandler.getParentResource(this.row)); 1825 } 1826 if (this.orient == 1) { 1827 for (i = idxList.length - 1; i >= 0; i--) { 1828 this.moveAfterChecking(curResList[i], curParList[i], tarResList[i], tarParList[i]); 1829 } 1830 } else { 1831 for (i = 0; i < idxList.length; i++) { 1832 this.moveAfterChecking(curResList[i], curParList[i], tarResList[i], tarParList[i]); 1833 } 1834 } 1835 window.top.bitsObjectMng.DataSource.flush(); 1836 }, 1837 moveAfterChecking: function(curRes, curPar, tarRes, tarPar) { 1838 var curAbsIdx = mcTreeHandler.TREE.builderView.getIndexOfResource(curRes); 1839 var curRelIdx = this.DataSource.getRelativeIndex(curPar, curRes); 1840 var tarRelIdx = this.DataSource.getRelativeIndex(tarPar, tarRes); 1841 if (this.orient == 0) { 1842 if (curAbsIdx == this.row) 1843 return; 1844 } else { 1845 if (this.orient == 1) 1846 tarRelIdx++; 1847 if (curPar.Value == tarPar.Value && tarRelIdx > curRelIdx) 1848 tarRelIdx--; 1849 if (this.orient == 1 && 1850 mcTreeHandler.TREE.view.isContainer(this.row) && 1851 mcTreeHandler.TREE.view.isContainerOpen(this.row) && 1852 mcTreeHandler.TREE.view.isContainerEmpty(this.row) == false) { 1853 if (curAbsIdx == this.row) 1854 return; 1855 tarPar = tarRes; 1856 tarRes = mcTreeHandler.TREE.builderView.getResourceAtIndex(this.row + 1); 1857 tarRelIdx = 1; 1858 } 1859 if (curPar.Value == tarPar.Value && curRelIdx == tarRelIdx) 1860 return; 1861 } 1862 if (curAbsIdx >= 0 && mcTreeHandler.TREE.view.isContainer(curAbsIdx)) { 1863 var tmpIdx = this.row; 1864 var tmpRes = tarRes; 1865 while (tmpRes.Value != mcTreeHandler.TREE.ref && tmpIdx != -1) { 1866 tmpRes = mcTreeHandler.getParentResource(tmpIdx); 1867 tmpIdx = mcTreeHandler.TREE.builderView.getIndexOfResource(tmpRes); 1868 if (tmpRes.Value == curRes.Value) 1869 return; 1870 } 1871 } 1872 var rtn = false; 1873 var tar_pfid = this.DataSource.getProperty(tarPar, "id"); 1874 var tar_dbtype = this.DataSource.getProperty(tarPar, "dbtype"); 1875 var cur_dbtype = this.DataSource.getProperty(curRes, "dbtype"); 1876 var cur_pfid = this.DataSource.getProperty(curRes, "pfid"); 1877 var rtnFolder = null; 1878 var rtnObject = null; 1879 var pfid_order = 0; 1880 if (this.DataSource.isContainer(this.rowRes)) { 1881 var tmp_fid = this.DataSource.getProperty(this.rowRes, "id"); 1882 rtnFolder = this.Database.getFolderFormID(tmp_fid, tar_dbtype); 1883 if (rtnFolder && rtnFolder.length) 1884 pfid_order = rtnFolder[0].pfid_order; 1885 } else { 1886 var tmp_oid = this.DataSource.getProperty(this.rowRes, "id"); 1887 rtnObject = this.Database.getObject({oid: tmp_oid, pfid: tar_pfid}, tar_dbtype); 1888 if (rtnObject && rtnObject.length) 1889 pfid_order = rtnObject[0].pfid_order; 1890 } 1891 if (this.orient >= 0) 1892 pfid_order = parseFloat(parseFloat(pfid_order) + parseFloat(this.orient)); 1893 if (curAbsIdx >= 0 && mcTreeHandler.TREE.view.isContainer(curAbsIdx)) { 1894 var fid = this.DataSource.getProperty(curRes, "id"); 1895 if (cur_dbtype == tar_dbtype) { 1896 rtn = this.Database.updateFolder({fid: fid, pfid: tar_pfid, pfid_order: pfid_order}, tar_dbtype); 1897 if (rtn) { 1898 this.DataSource.setProperty(curRes, "pfid", tar_pfid); 1899 this.DataSource.setProperty(curRes, "pfid_order", pfid_order); 1900 this.DataSource.setID2About(fid, cur_pfid, undefined, cur_dbtype); 1901 this.DataSource.setID2About(fid, tar_pfid, curRes.Value, tar_dbtype); 1902 } 1903 } else { 1904 this.moveFolder(curRes, curPar, tarPar, tarRelIdx); 1905 return; 1906 } 1907 } else { 1908 var oid = this.DataSource.getProperty(curRes, "id"); 1909 if (tar_pfid != cur_pfid) { 1910 rtn = !this.Database.existsObject({oid: oid, pfid: tar_pfid}, tar_dbtype); 1911 } else { 1912 rtn = true; 1913 } 1914 if (!rtn) { 1915 rtn = this.Common.confirm(mcMainService.STRING.getString("CONFIRM_COPYOBJECT_OVERWRITE")); 1916 if (rtn) { 1917 var contResList = this.DataSource.flattenResources(tarPar, 2, false); 1918 var i; 1919 for (i = 0; i < contResList.length; i++) { 1920 if (contResList[i].Value == curRes.Value) 1921 continue; 1922 var del_oid = this.DataSource.getProperty(contResList[i], "id"); 1923 if (del_oid != oid) 1924 continue; 1925 mcTreeHandler.remove(undefined, contResList[i], true, false); 1926 } 1927 } 1928 } 1929 if (rtn) { 1930 if (cur_dbtype == tar_dbtype) { 1931 if (cur_pfid != tar_pfid) { 1932 rtn = this.Database.updateObject({oid: oid, pfid: tar_pfid, pfid_old: cur_pfid, pfid_order: pfid_order}, tar_dbtype); 1933 if (rtn) { 1934 this.DataSource.setProperty(curRes, "pfid", tar_pfid); 1935 this.DataSource.setProperty(curRes, "pfid_order", pfid_order); 1936 this.DataSource.setID2About(oid, cur_pfid, undefined, cur_dbtype); 1937 this.DataSource.setID2About(oid, tar_pfid, curRes.Value, tar_dbtype); 1938 } 1939 } 1940 } else { 1941 this.moveObject(curRes, curPar, tarPar, tarRelIdx); 1942 return; 1943 } 1944 } 1945 } 1946 if (rtn) { 1947 rtn = this.DataSource.moveItem(curRes, curPar, tarPar, tarRelIdx); 1948 if (rtn) { 1949 if (this.DataSource.isContainer(this.Common.RDF.GetResource(curRes.Value))) { 1950 } else { 1951 mcTreeDNDHandler.changeNodeStyle(curRes); 1952 } 1953 window.top.bitsMarkingCollection.reOrder(tarPar); 1954 var selectIdx = mcTreeHandler.TREE.builderView.getIndexOfResource(this.Common.RDF.GetResource(curRes.Value)); 1955 if (selectIdx >= 0) { 1956 mcTreeHandler.TREE.currentIndex = selectIdx; 1957 if (!mcTreeHandler.TREE.view.selection.isSelected(mcTreeHandler.TREE.currentIndex)) 1958 mcTreeHandler.TREE.view.selection.select(mcTreeHandler.TREE.currentIndex); 1959 mcTreeHandler.TREE.focus(); 1960 mcTreeHandler.TREE.treeBoxObject.ensureRowIsVisible(selectIdx); 1961 mcPropertyView.dispProperty(mcTreeHandler.object); 1962 } 1963 } else { 1964 mcTreeViewModeService.rebuild(); 1965 } 1966 } 1967 }, 1968 moveFolder: function(curRes, curPar, tarPar, tarRelIdx) { 1969 var rtn = false; 1970 var modShift = this.modShift; 1971 var tar_dbtype = this.DataSource.getProperty(tarPar, "dbtype"); 1972 var cur_dbtype = this.DataSource.getProperty(curPar, "dbtype"); 1973 var aTransaction = true; 1974 if (!aTransaction) { 1975 this.Database.beginTransaction(tar_dbtype); 1976 this.Database.beginTransaction(cur_dbtype); 1977 } 1978 var addPar; 1979 var moveRes = null; 1980 var moveFids = []; 1981 var fid2newfid = []; 1982 var moveID = parseInt(this.DataSource.identify(this.Common.getTimeStamp())); 1983 var i, j; 1984 var fldResList = this.DataSource.flattenResources(curRes, 1, true); 1985 for (i = 0; i < fldResList.length; i++) { 1986 addParAbout = null; 1987 var tmp_fid = this.DataSource.getProperty(fldResList[i], "id"); 1988 if (this.Database._idExists(tar_dbtype, tmp_fid, aTransaction)) { 1989 fid2newfid["" + tmp_fid] = "" + moveID; 1990 moveID = parseInt(moveID) + 1; 1991 } else { 1992 fid2newfid["" + tmp_fid] = "" + tmp_fid; 1993 } 1994 var tmp_dbtype = this.DataSource.getProperty(fldResList[i], "dbtype"); 1995 var moveFolder = this.Database.getFolderFormID(tmp_fid, tmp_dbtype, aTransaction); 1996 if (!moveFolder || moveFolder.length == 0) 1997 break; 1998 moveFolder = moveFolder[0]; 1999 delete moveFolder.dbtype; 2000 if (fid2newfid["" + moveFolder.fid]) 2001 moveFolder.fid = fid2newfid["" + moveFolder.fid]; 2002 moveFids.push(moveFolder); 2003 if (curRes.Value == fldResList[i].Value) { 2004 moveFolder.pfid = this.DataSource.getProperty(tarPar, "id"); 2005 addParAbout = tarPar.Value; 2006 } else if (fid2newfid["" + moveFolder.pfid]) { 2007 moveFolder.pfid = fid2newfid["" + moveFolder.pfid]; 2008 } 2009 rtn = this.Database.addFolder(moveFolder, tar_dbtype, aTransaction); 2010 if (rtn) { 2011 if (!addParAbout) { 2012 var fid = moveFolder.pfid; 2013 var f_pfid = undefined; 2014 var rtnFolder = this.Database.getFolder({fid: moveFolder.pfid}, tar_dbtype); 2015 if (rtnFolder && rtnFolder.length) 2016 f_pfid = rtnFolder[0].pfid; 2017 rtnFolder = undefined; 2018 addParAbout = this.DataSource.getID2About(moveFolder.pfid, f_pfid, tar_dbtype); 2019 } 2020 var newItem = this.Common.newItem(); 2021 newItem.id = moveFolder.fid; 2022 newItem.about = this.DataSource.getAbout(moveFolder.fid, moveFolder.pfid, tar_dbtype); 2023 newItem.pfid = moveFolder.pfid; 2024 newItem.title = moveFolder.fid_title; 2025 newItem.type = "folder"; 2026 newItem.style = moveFolder.fid_style; 2027 newItem.source = ""; 2028 newItem.cssrule = 'css_' + tar_dbtype + '_' + moveFolder.fid; 2029 newItem.dbtype = tar_dbtype; 2030 newItem.editmode = moveFolder.fid_mode; 2031 newItem.icon = this.DataSource.getProperty(fldResList[i], "icon"); 2032 newItem.addon_id = this.DataSource.getProperty(fldResList[i], "addon_id"); 2033 var tarRelIdx = -1; 2034 try { 2035 var cont = this.DataSource.getContainer(addParAbout, false); 2036 tarRelIdx = cont.GetCount(); 2037 } catch (ex) { 2038 } 2039 var newRes = this.DataSource.addItem(newItem, addParAbout, tarRelIdx, tar_dbtype); 2040 if (newRes && newRes.Value) { 2041 this.DataSource.createEmptySeq(newRes.Value); 2042 if (!moveRes) 2043 moveRes = newRes; 2044 } 2045 } else {//倱æããå Žå 2046 if (moveRes) 2047 mcTreeHandler._removeFolder(moveRes); 2048 break; 2049 } 2050 } 2051 if (mcItemView.isChecked) { 2052 var objResList = []; 2053 if (rtn) { 2054 var tmp_fid = this.DataSource.getProperty(curRes, "id"); 2055 var tmp_dbtype = this.DataSource.getProperty(curRes, "dbtype"); 2056 objResList = window.top.bitsTreeExportService._getAllObject({fid: tmp_fid, dbtype: tmp_dbtype}); 2057 for (i = 0; i < objResList.length; i++) { 2058 var moveObject = objResList[i]; 2059 var folder = { 2060 fid: fid2newfid["" + moveObject.pfid], 2061 dbtype: tar_dbtype 2062 }; 2063 rtn = bitsItemView._moveObject(folder, moveObject, modShift); 2064 if (!rtn) { 2065 if (moveRes) 2066 mcTreeHandler._removeFolder(moveRes); 2067 break; 2068 } 2069 } 2070 } 2071 } else { 2072 var objResList = this.DataSource.flattenResources(curRes, 2, true); 2073 if (rtn) { 2074 for (i = 0; i < objResList.length; i++) { 2075 var tmp_oid = this.DataSource.getProperty(objResList[i], "id"); 2076 var tmp_dbtype = this.DataSource.getProperty(objResList[i], "dbtype"); 2077 var moveObject = null; 2078 var moveObjects = this.Database.getObjectFormID(tmp_oid, tmp_dbtype, aTransaction); 2079 if (!moveObjects || moveObjects.length == 0) 2080 break; 2081 for (j = 0; j < moveObjects.length; j++) { 2082 if (fid2newfid["" + moveObjects[j].pfid] == undefined) 2083 continue; 2084 moveObject = moveObjects[j]; 2085 } 2086 if (!moveObject) 2087 continue; 2088 delete moveObject.dbtype; 2089 delete moveObject.fid_style; 2090 delete moveObject.fid_title; 2091 delete moveObject.folder_order; 2092 if (this.Database._idExists(tar_dbtype, moveObject.oid, aTransaction)) { 2093 moveObject.oid = "" + moveID; 2094 moveID = parseInt(moveID) + 1; 2095 } 2096 if (fid2newfid["" + moveObject.pfid]) 2097 moveObject.pfid = fid2newfid["" + moveObject.pfid]; 2098 rtn = this.Database.addObject(moveObject, tar_dbtype, aTransaction); 2099 if (rtn) { 2100 var objAddParAbout = null; 2101 if (!objAddParAbout) { 2102 var fid = moveFolder.pfid; 2103 var f_pfid = undefined; 2104 var rtnFolder = this.Database.getFolder({fid: moveObject.pfid}, tar_dbtype); 2105 if (rtnFolder && rtnFolder.length) 2106 f_pfid = rtnFolder[0].pfid; 2107 rtnFolder = undefined; 2108 objAddParAbout = this.DataSource.getID2About(moveObject.pfid, f_pfid, tar_dbtype); 2109 } 2110 var newItem = this.Common.newItem(); 2111 newItem.id = moveObject.oid; 2112 newItem.about = this.DataSource.getAbout(moveObject.oid, moveObject.pfid, tar_dbtype); 2113 newItem.pfid = moveObject.pfid; 2114 newItem.type = "item"; 2115 newItem.source = this.DataSource.getProperty(objResList[i], "source"); 2116 newItem.title = moveObject.oid_title; 2117 newItem.editmode = moveObject.oid_mode; 2118 newItem.uri = moveObject.doc_url; 2119 newItem.dbtype = tar_dbtype; 2120 newItem.icon = this.DataSource.getProperty(objResList[i], "icon"); 2121 var tarRelIdx = -1; 2122 try { 2123 var cont = this.DataSource.getContainer(objAddParAbout, false); 2124 tarRelIdx = cont.GetCount(); 2125 } catch (ex) { 2126 } 2127 var newRes = this.DataSource.addItem(newItem, objAddParAbout, tarRelIdx, tar_dbtype); 2128 } else {//倱æããå Žå 2129 if (moveRes) 2130 mcTreeHandler._removeFolder(moveRes); 2131 break; 2132 } 2133 } 2134 } 2135 if (rtn && modShift) { 2136 rtn = true; 2137 if (rtn) { 2138 //ShiftããŒãæŒãããŠããå Žåã移åå 1911 2139 ã®DBããããŒã¿ãåé€ 1912 for(i=objResList.length-1;i>=0;i--){ 1913 var tmp_oid = this.DataSource.getProperty(objResList[i], "id"); 1914 var tmp_dbtype = this.DataSource.getProperty(objResList[i], "dbtype"); 1915 var tmp_pfid = this.DataSource.getProperty(objResList[i], "pfid"); 1916 rtn = this.Database.removeObject({oid:tmp_oid,pfid:tmp_pfid},tmp_dbtype, aTransaction); 1917 if(!rtn) break; 1918 this.DataSource.deleteItem(objResList[i]); 1919 this.DataSource.setID2About(tmp_oid,tmp_pfid,undefined,tmp_dbtype); 1920 } 1921 if(rtn){ 1922 for(i=fldResList.length-1;i>=0;i--){ 1923 var tmp_fid = this.DataSource.getProperty(fldResList[i], "id"); 1924 var tmp_dbtype = this.DataSource.getProperty(fldResList[i], "dbtype"); 1925 var tmp_pfid = this.DataSource.getProperty(fldResList[i], "pfid"); 1926 rtn = this.Database.removeFolder(tmp_fid,tmp_dbtype, aTransaction); 1927 if(!rtn) break; 1928 this.DataSource.deleteItem(fldResList[i]); 1929 this.DataSource.setID2About(tmp_fid,tmp_pfid,undefined,tmp_dbtype); 1930 } 1931 } 1932 } 1933 } 1934 } 1935 if(!aTransaction){ 1936 this.Database.endTransaction(tar_dbtype); 1937 this.Database.endTransaction(cur_dbtype); 1938 } 1939 if(tarPar) window.top.bitsMarkingCollection.reOrder(tarPar); 1940 this.DataSource.flush(); 1941 mcTreeCssService.init(); 1942 mcController.rebuildLocal(); 1943 }, 1944 1945 moveObject : function(curRes, curPar, tarPar, tarRelIdx){ 1946 var rtn = false; 1947 var modShift = this.modShift; 1948 var tar_fid = this.DataSource.getProperty(tarPar, "id"); 1949 var tar_dbtype = this.DataSource.getProperty(tarPar, "dbtype"); 1950 var moveRes = null; 1951 var moveFids = []; 1952 var moveID = parseInt(this.DataSource.identify(this.Common.getTimeStamp())); 1953 var i; 1954 var cur_oid = this.DataSource.getProperty(curRes, "id"); 1955 var cur_dbtype = this.DataSource.getProperty(curRes, "dbtype"); 1956 var cur_pfid = this.DataSource.getProperty(curRes, "pfid"); 1957 var moveObject = this.Database.getObjectWithProperty({oid:cur_oid,pfid:cur_pfid}, cur_dbtype); 1958 if(!moveObject || moveObject.length==0){ 1959 this.DataSource.flush(); 1960 mcTreeCssService.init(); 1961 mcController.rebuildLocal(); 1962 return; 1963 } 1964 var blob = this.Database.getObjectBLOB(cur_oid,cur_dbtype); 1965 moveObject = moveObject[0]; 1966 delete moveObject.dbtype; 1967 delete moveObject.fid_style; 1968 if(!modShift){ 1969 moveObject.oid = ""+moveID; 1970 moveID = parseInt(moveID)+1; 1971 moveObject.pfid = this.DataSource.getProperty(tarPar, "id"); 1972 } 1973 if(cur_dbtype == window.top.bitsMarkingCollection._uncategorized.dbtype || tar_dbtype == window.top.bitsMarkingCollection._uncategorized.dbtype){ 1974 moveObject.pfid = tar_fid; 1975 } 1976 rtn = this.Database.addObject(moveObject, tar_dbtype); 1977 if(rtn){ 1978 if(blob) this.Database.updateObjectBLOB(moveObject.oid,blob[0],tar_dbtype); 1979 if(!modShift){ 1980 var newItem = this.Common.newItem(); 1981 newItem.id = moveObject.oid; 1982 newItem.about = this.DataSource.getAbout(moveObject.oid,moveObject.pfid,tar_dbtype); 1983 newItem.pfid = moveObject.pfid; 1984 newItem.type = "item"; 1985 newItem.source = this.DataSource.getProperty(curRes, "source"); 1986 newItem.title = moveObject.oid_title; 1987 newItem.editmode = moveObject.oid_mode; 1988 newItem.uri = moveObject.doc_url; 1989 newItem.dbtype = tar_dbtype; 1990 newItem.icon = this.DataSource.getProperty(curRes, "icon"); 1991 var tarRelIdx = -1; 1992 try{ 1993 var cont = this.DataSource.getContainer(tarPar.Value, false); 1994 tarRelIdx = cont.GetCount(); 1995 }catch(ex){} 1996 var newRes = this.DataSource.addItem(newItem, tarPar.Value, tarRelIdx, tar_dbtype); 1997 } 1998 } 1999 if(rtn && modShift){ 2000 var f_pfid = undefined; 2001 var rtnFolder = this.Database.getFolder({fid:cur_pfid},cur_dbtype); 2002 if(rtnFolder && rtnFolder.length) f_pfid = rtnFolder[0].pfid; 2003 rtnFolder = undefined; 2004 var curPar = this.Common.RDF.GetResource(this.DataSource.getID2About(cur_pfid,f_pfid,cur_dbtype)); 2005 var contResList = this.DataSource.flattenResources(curPar, 2, false); 2006 var i; 2007 for(var i=0;i<contResList.length;i++){ 2008 if(contResList[i].Value == curRes.Value) continue; 2009 var oid = this.DataSource.getProperty(contResList[i], "id"); 2010 if(oid != cur_oid) continue; 2011 curRes = contResList[i]; 2012 break; 2013 } 2014 rtn = this.DataSource.moveItem(curRes, curPar, tarPar, tarRelIdx); 2015 if(rtn) rtn = this.Database.removeObject({oid:cur_oid,pfid:cur_pfid},cur_dbtype); 2016 if(rtn){ 2017 this.DataSource.setProperty(curRes, "dbtype", tar_dbtype); 2018 this.DataSource.setProperty(curRes, "pfid", tar_fid); 2019 this.DataSource.setProperty(curRes, "id", moveObject.oid); 2020 this.DataSource.setID2About(cur_oid,cur_pfid,undefined,cur_dbtype); 2021 this.DataSource.setID2About(moveObject.oid,tar_fid,curRes.Value,tar_dbtype); 2022 } 2023 mcTreeDNDHandler.changeNodeStyle(curRes); 2024 } 2025 if(tarPar) window.top.bitsMarkingCollection.reOrder(tarPar); 2026 this.DataSource.flush(); 2027 mcTreeCssService.init(); 2028 mcController.rebuildLocal(); 2029 }, 2030 2031 copy : function(aRow, aOrient){ 2032 this.row = aRow; 2033 this.orient = aOrient; 2034 this.rowRes = mcTreeHandler.TREE.builderView.getResourceAtIndex(aRow); 2035 (mcTreeHandler.TREE.view.selection.count == 1) ? this.copySingle() : this.copyMultiple(); 2036 }, 2037 2038 copySingle : function(){ 2039 var curIdx = mcTreeHandler.TREE.currentIndex; 2040 var curRes = mcTreeHandler.TREE.builderView.getResourceAtIndex(curIdx); 2041 var curPar = mcTreeHandler.getParentResource(curIdx); 2042 var tarRes = mcTreeHandler.TREE.builderView.getResourceAtIndex(this.row); 2043 var tarPar = ( this.orient == 0) ? tarRes : mcTreeHandler.getParentResource(this.row); 2044 this.copyAfterChecking(curRes, curPar, tarRes, tarPar); 2045 this.DataSource.flush(); 2046 mcController.rebuildLocal(); 2047 }, 2048 2049 copyMultiple : function(){ 2050 var idxList = mcTreeHandler.getSelection(false, 2); 2051 if(mcTreeHandler.validateMultipleSelection(idxList) == false) return; 2052 var i = 0; 2053 var curResList = []; var curParList = []; 2054 var tarResList = []; var tarParList = []; 2055 for(i=0;i<idxList.length;i++){ 2056 curResList.push( mcTreeHandler.TREE.builderView.getResourceAtIndex(idxList[i])); 2057 curParList.push( mcTreeHandler.getParentResource(idxList[i])); 2058 tarResList.push( mcTreeHandler.TREE.builderView.getResourceAtIndex(this.row)); 2059 tarParList.push( ( this.orient == 0) ? tarResList[i] : mcTreeHandler.getParentResource(this.row)); 2060 } 2061 if(this.orient == 1){ 2062 for(i=idxList.length-1;i>=0;i--){ 2063 this.copyAfterChecking(curResList[i], curParList[i], tarResList[i], tarParList[i]); 2064 } 2065 }else{ 2066 for(i=0;i<idxList.length;i++){ 2067 this.copyAfterChecking(curResList[i], curParList[i], tarResList[i], tarParList[i]); 2068 } 2069 } 2070 this.DataSource.flush(); 2071 mcController.rebuildLocal(); 2072 }, 2073 2074 copyAfterChecking : function(curRes, curPar, tarRes, tarPar){ 2075 var curAbsIdx = mcTreeHandler.TREE.builderView.getIndexOfResource(curRes); 2076 var curRelIdx = window.top.bitsObjectMng.DataSource.getRelativeIndex(curPar, curRes); 2077 var tarRelIdx = window.top.bitsObjectMng.DataSource.getRelativeIndex(tarPar, tarRes); 2078 var tar_dbtype = this.DataSource.getProperty(tarPar, "dbtype"); 2079 var cur_dbtype = this.DataSource.getProperty(curPar, "dbtype"); 2080 if(cur_dbtype != tar_dbtype){ 2081 if(mcTreeHandler.TREE.view.isContainer(curAbsIdx)){ 2082 this.moveFolder(curRes, curPar, tarPar, tarRelIdx); 2083 }else{ 2084 this.moveObject(curRes, curPar, tarPar, tarRelIdx); 2085 } 2086 return; 2087 } 2088 if(mcTreeHandler.TREE.view.isContainer(curAbsIdx)) return; 2089 if(this.orient == 0){ 2090 if(curAbsIdx == this.row) return; 2091 }else{ 2092 if(this.orient == 1) tarRelIdx++; 2093 if(curPar.Value == tarPar.Value && tarRelIdx > curRelIdx) tarRelIdx--; 2094 if(this.orient == 1 && 2095 mcTreeHandler.TREE.view.isContainer(this.row) && 2096 mcTreeHandler.TREE.view.isContainerOpen(this.row) && 2097 mcTreeHandler.TREE.view.isContainerEmpty(this.row) == false){ 2098 if(curAbsIdx == this.row) return; 2099 tarPar = tarRes; 2100 tarRes = mcTreeHandler.TREE.builderView.getResourceAtIndex(this.row + 1); 2101 tarRelIdx = 1; 2102 } 2103 if(curPar.Value == tarPar.Value && curRelIdx == tarRelIdx) return; 2104 } 2105 if(mcTreeHandler.TREE.view.isContainer(curAbsIdx)){ 2106 var tmpIdx = this.row; 2107 var tmpRes = tarRes; 2108 while(tmpRes.Value != mcTreeHandler.TREE.ref && tmpIdx != -1){ 2109 tmpRes = mcTreeHandler.getParentResource(tmpIdx); 2110 tmpIdx = mcTreeHandler.TREE.builderView.getIndexOfResource(tmpRes); 2111 if(tmpRes.Value == curRes.Value) return; 2112 } 2113 } 2114 var rtn = false; 2115 var pfid = this.DataSource.getProperty(tarPar, "id"); 2116 var dbtype = this.DataSource.getProperty(tarPar, "dbtype"); 2117 var oid = this.DataSource.getProperty(curRes, "id"); 2118 rtn = this.Database.existsObject({oid:oid,pfid:pfid},dbtype); 2119 if(rtn){ 2120 this.Common.alert(mcMainService.STRING.getString("ALERT_COPYOBJECT_EXISTS")); 2121 return; 2122 } 2123 var newDCitem = this.Common.newItem(); 2124 newDCitem.id = oid; 2125 newDCitem.about = this.DataSource.getAbout(oid,pfid,this.DataSource.getProperty(curRes, "dbtype")); 2126 newDCitem.pfid = pfid; 2127 newDCitem.type = this.DataSource.getProperty(curRes, "type"); 2128 newDCitem.source = this.DataSource.getProperty(curRes, "source"); 2129 newDCitem.title = this.DataSource.getProperty(curRes, "title"); 2130 newDCitem.editmode = this.DataSource.getProperty(curRes, "editmode"); 2131 newDCitem.uri = this.DataSource.getProperty(curRes, "uri"); 2132 newDCitem.source = this.DataSource.getProperty(curRes, "source"); 2133 newDCitem.dbtype = this.DataSource.getProperty(curRes, "dbtype"); 2134 var pfid_order = 0; 2135 if(this.DataSource.isContainer(this.rowRes)){ 2136 var tmp_fid = this.DataSource.getProperty(this.rowRes, "id"); 2137 var rtnFolder = mcTreeDNDHandler.Database.getFolderFormID(tmp_fid,newDCitem.dbtype); 2138 if(rtnFolder && rtnFolder.length) pfid_order = rtnFolder[0].pfid_order; 2139 }else{ 2140 var tmp_oid = this.DataSource.getProperty(this.rowRes, "id"); 2141 var rtnObject = mcTreeDNDHandler.Database.getObject({oid:tmp_oid,pfid:pfid},newDCitem.dbtype); 2142 if(rtnObject && rtnObject.length) pfid_order = rtnObject[0].pfid_order; 2143 } 2144 if(this.orient>=0) pfid_order = parseFloat(parseFloat(pfid_order) + parseFloat(this.orient)); 2145 rtn = mcTreeDNDHandler.Database.addLink({oid:oid,pfid:pfid,pfid_order:pfid_order},newDCitem.dbtype); 2146 if(rtn){ 2147 var newRes = this.DataSource.addItem(newDCitem,tarPar.Value,tarRelIdx,newDCitem.dbtype); 2148 if(newRes){ 2149 this.DataSource.setProperty(newRes, "id", oid); //Treeã«è¿œå åŸãidãå€æŽããã 2150 this.DataSource.flush(); 2151 } 2152 var selectIdx = mcTreeHandler.TREE.builderView.getIndexOfResource(newRes); 2153 if(selectIdx>=0){ 2154 mcTreeHandler.TREE.currentIndex = selectIdx; 2155 if(!mcTreeHandler.TREE.view.selection.isSelected(mcTreeHandler.TREE.currentIndex)) mcTreeHandler.TREE.view.selection.select(mcTreeHandler.TREE.currentIndex); 2156 mcTreeHandler.TREE.focus(); 2157 mcTreeHandler.TREE.treeBoxObject.ensureRowIsVisible(selectIdx); 2158 mcPropertyView.dispProperty(mcTreeHandler.object); 2159 } 2160 }else{ 2161 mcTreeViewModeService.rebuild(); 2162 } 2163 }, 2164 2165 capture : function(aXferString, aRow, aOrient){ 2166 var aXferStringArr = aXferString.split("\n"); 2167 var url = aXferStringArr[0]; 2168 var url_title = aXferStringArr[1]; 2169 if(!url_title || url == url_title) url_title = ""; 2170 var basedir = window.top.bitsTreeListService.getBaseDir(); 2171 var res_uri = this.Common.convertFilePathToURL(basedir.path); 2172 if(url.indexOf(res_uri)>=0) return; 2173 if(this.originalTarget && this.originalTarget.nodeName == "IMG" && this.originalTarget.hasAttribute('oid') && this.originalTarget.hasAttribute('dbtype')) return; 2174 var win = window.top.bitsObjectMng.Common.getFocusedWindow(); 2175 var sel = win.getSelection(); 2176 var isSelected = false; 2177 try{ 2178 isSelected = ( sel.anchorNode === sel.focusNode && sel.anchorOffset == sel.focusOffset) ? false : true; 2179 if(isSelected && aXferStringArr.length != 1) isSelected = false; 2180 if(isSelected && win.document.contentType == "application/pdf") isSelected = false; 2181 }catch(ex){} 2182 var isEntire = (url == top.window._content.location.href); 2183 var res = ( aRow == -1) ? [mcTreeHandler.TREE.ref, 0] : this.getTarget(aRow, aOrient); 2184 var newResArr; 2185 if(this.modAlt && isEntire){ 2186 }else if(isSelected){ 2187 newResArr = window.top.bitsMarkingCollection.addSelectedText(res[0], res[1], aRow); 2188 }else{ 2189 if(url.indexOf("http://") == 0 || 2190 url.indexOf("https://") == 0 || 2191 url.indexOf("ftp://") == 0 || 2192 url.indexOf("file://") == 0){ 2193 var importFlag = false; 2194 var splitFileName = this.Common.splitFileName(url); 2195 if(splitFileName[1].toLowerCase() == "xml" || splitFileName[1].toLowerCase() == "zip") importFlag = mcXmlImportService.loadFile(res[0], res[1], aRow, url); 2196 if(!importFlag && !mcXmlImportService.isExportFile){ 2197 if(this.originalTarget){ 2198 //æ¢ã«Targetãèšå®ãããŠããå Žåãã«ã¬ã³ãã®ããã¥ã¡ã³ãã®ãã®ãããã§ã㯠2199 if(this.originalTarget.ownerDocument != this.gBrowser.contentDocument){ 2200 var win = this.gBrowser.contentWindow; 2201 if(win.frames != null){ 2202 var i; 2203 for(i=0;i<win.frames.length;i++){ 2204 if(this.originalTarget.ownerDocument == win.frames[i].document) break; 2205 } 2206 if(i>=win.frames.length) this.originalTarget=null; 2207 }else{ 2208 this.originalTarget=null; 2209 } 2210 } 2211 } 2212 var tmpOriginalTarget = this.originalTarget; 2213 while(tmpOriginalTarget && (tmpOriginalTarget.nodeName != "A" && tmpOriginalTarget.nodeName != "IMG")){ 2214 tmpOriginalTarget = tmpOriginalTarget.parentNode; 2215 } 2216 if(tmpOriginalTarget) this.originalTarget = tmpOriginalTarget; 2217 newResArr = window.top.bitsMarkingCollection.addURLText(res[0], res[1], aRow, aXferString, this.originalTarget); 2218 } 2219 }else{ 2220 isSelected = false; 2221 try{ isSelected = ( sel.anchorNode === sel.focusNode && sel.anchorOffset == sel.focusOffset) ? false : true; }catch(ex){} 2222 if(isSelected && win.document.contentType == "application/pdf") isSelected = false; 2223 if(isSelected){ 2224 newResArr = window.top.bitsMarkingCollection.addSelectedText(res[0], res[1], aRow); 2225 }else{ 2226 setTimeout(function(){ 2227 var rtn = window.top.bitsMarkingCollection.addPDFText(res[0], res[1], aRow, aXferString); 2228 if(!rtn) window.top.bitsMarkingCollection.Common.alert(mcMainService.STRING.getString("ERROR_INVALID_URL") + "\n" + url); 2229 },0); 2230 } 2231 } 2232 } 2233 return {isSelected : isSelected, resArr : newResArr}; 2234 }, 2235 2236 loadHTML : function(aEvent){ 2237 var doc = window.top.bitsMarkingCollection.BROWSER.contentDocument; 2238 var url = mcTreeDNDHandler.Common.getURLStringFromDocument(doc); 2239 var title = doc.title; 2240 var icon = ""; 2241 var links = doc.getElementsByTagName("link"); 2242 if(links && links.length>0){ 2243 for(var i=0;i<links.length;i++){ 2244 if(links[i].rel.toLowerCase() == "shortcut icon" || links[i].rel.toLowerCase() == "icon"){ 2245 icon = links[i].href; 2246 break; 2247 } 2248 } 2249 } 2250 if(icon == "" && (url.indexOf("http://") == 0 || url.indexOf("https://") == 0)){ 2251 var root = mcTreeDNDHandler.Common.getRootHref(url); 2252 root += "/favicon.ico"; 2253 var xmlhttp = new XMLHttpRequest(); 2254 if(xmlhttp){ 2255 xmlhttp.open("GET",root,false); 2256 xmlhttp.send(null); 2257 if(xmlhttp.status == 200) icon = root; 2258 } 2259 } 2260 if(title) mcTreeDNDHandler.DataSource.setProperty(mcTreeDNDHandler._oRes,"title",title); 2261 if(icon) mcTreeDNDHandler.DataSource.setProperty(mcTreeDNDHandler._oRes,"icon",icon); 2262 if(title || icon){ 2263 mcTreeDNDHandler.DataSource.flush(); 2264 mcTreeHandler.TREE.builder.rebuild(); 2265 var dbtype = mcTreeDNDHandler.DataSource.getProperty(mcTreeDNDHandler._oRes,"dbtype"); 2266 var oid_property = ""; 2267 var obj = mcTreeDNDHandler.Database.getObjectFormID(mcTreeDNDHandler._oID,dbtype); 2268 if(obj && obj.length>0) oid_property = obj[0].oid_property; 2269 if(icon) oid_property += "<ICON>"+icon+"</ICON>"; 2270 mcTreeDNDHandler.Database.updateObject({oid:mcTreeDNDHandler._oID,oid_title:title,oid_property:oid_property},dbtype); 2271 } 2272 window.top.bitsMarkingCollection.BROWSER.removeEventListener("load", mcTreeDNDHandler.loadHTML, true); 2273 window.top.bitsMarkingCollection.BROWSER.loadURI("about:blank"); 2274 if(title || icon) mcTreeViewModeService.rebuild(); 2275 }, 2276 2277 getIconFromURL : function(aUrl,aRes){ 2278 var uri = aUrl; 2279 var xmlhttp = null; 2280 xmlhttp = new XMLHttpRequest(); 2281 if(xmlhttp){ 2282 xmlhttp.onreadystatechange = function (){ 2283 if(xmlhttp.readyState == 4){ 2284 if(xmlhttp.status == 200){ 2285 var contentType = xmlhttp.getResponseHeader("Content-Type"); 2286 var id = mcTreeDNDHandler.DataSource.getProperty(aRes,"id"); 2287 var dbtype = mcTreeDNDHandler.DataSource.getProperty(aRes,"id"); 2288 var type = "url"; 2289 var ext = "txt"; 2290 if(contentType.match(/^image\/(\S+)/)){ 2291 type = "image"; 2292 ext = RegExp.$1; 2293 }else if(contentType.match(/^text\/(\S+)/)){ 2294 ext = RegExp.$1; 2295 ext = ext.replace(/[^A-Za-z0-9]+$/mg,""); 2296 } 2297 mcTreeDNDHandler.Database.updateObject({oid:id,oid_txt:ext},dbtype); 2298 var bytes = []; 2299 var filestream = xmlhttp.responseText; 2300 for(var i=0; i<filestream.length;i++){ 2301 bytes[i] = filestream.charCodeAt(i) & 0xff; 2302 } 2303 var file = window.top.bitsMarkingCollection.getExtensionDir().clone(); 2304 file.append("data"); 2305 if(!file.exists()) file.create(file.DIRECTORY_TYPE, 0700); 2306 file.append(id+"."+ext); 2307 if(type == "image"){ 2308 if(file.exists()) file.remove(false); 2309 file.create(file.NORMAL_FILE_TYPE, 0666); 2310 var ostream = Components.classes['@mozilla.org/network/file-output-stream;1'].createInstance(Components.interfaces.nsIFileOutputStream); 2311 ostream.init(file, 2, 0x200, false); 2312 ostream.write(String.fromCharCode.apply(String, bytes), bytes.length); 2313 ostream.close(); 2314 mcTreeDNDHandler.DataSource.setProperty(aRes,"icon",mcTreeDNDHandler.Common.convertFilePathToURL(file.path)); 2315 mcTreeDNDHandler.DataSource.flush(); 2316 mcTreeHandler.TREE.builder.rebuild(); 2317 mcTreeDNDHandler.Database.updateObjectBLOB(id,bytes,dbtype); 2318 } 2319 }else{ 2320 _dump("mcTreeDNDHandler.getIconFromURL():status=["+xmlhttp.status+"]"); 2321 } 2322 } 2323 }; 2324 xmlhttp.open("GET", uri , true); 2325 xmlhttp.overrideMimeType('text/plain; charset=x-user-defined'); 2326 xmlhttp.send(null); 2327 } 2328 }, 2329 2330 parseHTML : function(text){ 2331 try{ 2332 var createHTMLDocument = function(){ 2333 var xsl = (new DOMParser()).parseFromString( 2334 ['<?xml version="1.0"?>', 2335 '<stylesheet version="1.0" xmlns="http://www.w3.org/1999/XSL/Transform">', 2336 '<output method="html"/>', 2337 '</stylesheet>'].join("\n"), "text/xml"); 2338 var xsltp = new XSLTProcessor(); 2339 xsltp.importStylesheet(xsl); 2340 var doc = xsltp.transformToDocument(document.implementation.createDocument("", "", null)); 2341 return doc; 2342 }; 2343 var doc = createHTMLDocument(); 2344 var range = doc.createRange(); 2345 doc.appendChild(doc.createElement("html")); 2346 range.selectNodeContents(doc.documentElement); 2347 doc.documentElement.appendChild(range.createContextualFragment(text)); 2348 return doc; 2349 }catch(ex){ 2350 _dump("mcTreeDNDHandler.parseHTML():"+ex); 2351 return null; 2352 } 2353 }, 2354 2355 changeNodeStyle : function(pRes){ 2356 var id = this.DataSource.getProperty(pRes, "id"); 2357 var pfid = this.DataSource.getProperty(pRes, "pfid"); 2358 var dbtype = this.DataSource.getProperty(pRes, "dbtype"); 2359 var source = this.DataSource.getProperty(pRes, "source"); 2360 if(!source) source = bitsMarker.id_key+dbtype+id; 2361 var parentRes = this.DataSource.findParentResource(pRes); 2362 var style = this.DataSource.getProperty(parentRes, "style"); 2363 this.Common.changeNodeStyleFromID(source,style,pfid,id,dbtype); 2364 this.DataSource.setProperty(pRes, "source", bitsMarker.id_key+dbtype+id); 2365 }, 2366 2367 getTarget : function(aRow, aOrient){ 2368 var tarRes = mcTreeHandler.TREE.builderView.getResourceAtIndex(aRow); 2369 var tarPar = ( aOrient == 0) ? tarRes : mcTreeHandler.getParentResource(aRow); 2370 var tarRelIdx = window.top.bitsObjectMng.DataSource.getRelativeIndex(tarPar, tarRes); 2371 if(aOrient == 1) tarRelIdx++; 2372 if(aOrient == 1 && 2373 mcTreeHandler.TREE.view.isContainer(aRow) && 2374 mcTreeHandler.TREE.view.isContainerOpen(aRow) && 2375 mcTreeHandler.TREE.view.isContainerEmpty(aRow) == false){ 2376 tarPar = tarRes; 2377 tarRelIdx = 1; 2378 } 2379 return [tarPar.Value, tarRelIdx]; 2380 }, 2381 2140 for (i = objResList.length - 1; i >= 0; i--) { 2141 var tmp_oid = this.DataSource.getProperty(objResList[i], "id"); 2142 var tmp_dbtype = this.DataSource.getProperty(objResList[i], "dbtype"); 2143 var tmp_pfid = this.DataSource.getProperty(objResList[i], "pfid"); 2144 rtn = this.Database.removeObject({oid: tmp_oid, pfid: tmp_pfid}, tmp_dbtype, aTransaction); 2145 if (!rtn) 2146 break; 2147 this.DataSource.deleteItem(objResList[i]); 2148 this.DataSource.setID2About(tmp_oid, tmp_pfid, undefined, tmp_dbtype); 2149 } 2150 if (rtn) { 2151 for (i = fldResList.length - 1; i >= 0; i--) { 2152 var tmp_fid = this.DataSource.getProperty(fldResList[i], "id"); 2153 var tmp_dbtype = this.DataSource.getProperty(fldResList[i], "dbtype"); 2154 var tmp_pfid = this.DataSource.getProperty(fldResList[i], "pfid"); 2155 rtn = this.Database.removeFolder(tmp_fid, tmp_dbtype, aTransaction); 2156 if (!rtn) 2157 break; 2158 this.DataSource.deleteItem(fldResList[i]); 2159 this.DataSource.setID2About(tmp_fid, tmp_pfid, undefined, tmp_dbtype); 2160 } 2161 } 2162 } 2163 } 2164 } 2165 if (!aTransaction) { 2166 this.Database.endTransaction(tar_dbtype); 2167 this.Database.endTransaction(cur_dbtype); 2168 } 2169 if (tarPar) 2170 window.top.bitsMarkingCollection.reOrder(tarPar); 2171 this.DataSource.flush(); 2172 mcTreeCssService.init(); 2173 mcController.rebuildLocal(); 2174 }, 2175 moveObject: function(curRes, curPar, tarPar, tarRelIdx) { 2176 var rtn = false; 2177 var modShift = this.modShift; 2178 var tar_fid = this.DataSource.getProperty(tarPar, "id"); 2179 var tar_dbtype = this.DataSource.getProperty(tarPar, "dbtype"); 2180 var moveRes = null; 2181 var moveFids = []; 2182 var moveID = parseInt(this.DataSource.identify(this.Common.getTimeStamp())); 2183 var i; 2184 var cur_oid = this.DataSource.getProperty(curRes, "id"); 2185 var cur_dbtype = this.DataSource.getProperty(curRes, "dbtype"); 2186 var cur_pfid = this.DataSource.getProperty(curRes, "pfid"); 2187 var moveObject = this.Database.getObjectWithProperty({oid: cur_oid, pfid: cur_pfid}, cur_dbtype); 2188 if (!moveObject || moveObject.length == 0) { 2189 this.DataSource.flush(); 2190 mcTreeCssService.init(); 2191 mcController.rebuildLocal(); 2192 return; 2193 } 2194 var blob = this.Database.getObjectBLOB(cur_oid, cur_dbtype); 2195 moveObject = moveObject[0]; 2196 delete moveObject.dbtype; 2197 delete moveObject.fid_style; 2198 if (!modShift) { 2199 moveObject.oid = "" + moveID; 2200 moveID = parseInt(moveID) + 1; 2201 moveObject.pfid = this.DataSource.getProperty(tarPar, "id"); 2202 } 2203 if (cur_dbtype == window.top.bitsMarkingCollection._uncategorized.dbtype || tar_dbtype == window.top.bitsMarkingCollection._uncategorized.dbtype) { 2204 moveObject.pfid = tar_fid; 2205 } 2206 rtn = this.Database.addObject(moveObject, tar_dbtype); 2207 if (rtn) { 2208 if (blob) 2209 this.Database.updateObjectBLOB(moveObject.oid, blob[0], tar_dbtype); 2210 if (!modShift) { 2211 var newItem = this.Common.newItem(); 2212 newItem.id = moveObject.oid; 2213 newItem.about = this.DataSource.getAbout(moveObject.oid, moveObject.pfid, tar_dbtype); 2214 newItem.pfid = moveObject.pfid; 2215 newItem.type = "item"; 2216 newItem.source = this.DataSource.getProperty(curRes, "source"); 2217 newItem.title = moveObject.oid_title; 2218 newItem.editmode = moveObject.oid_mode; 2219 newItem.uri = moveObject.doc_url; 2220 newItem.dbtype = tar_dbtype; 2221 newItem.icon = this.DataSource.getProperty(curRes, "icon"); 2222 var tarRelIdx = -1; 2223 try { 2224 var cont = this.DataSource.getContainer(tarPar.Value, false); 2225 tarRelIdx = cont.GetCount(); 2226 } catch (ex) { 2227 } 2228 var newRes = this.DataSource.addItem(newItem, tarPar.Value, tarRelIdx, tar_dbtype); 2229 } 2230 } 2231 if (rtn && modShift) { 2232 var f_pfid = undefined; 2233 var rtnFolder = this.Database.getFolder({fid: cur_pfid}, cur_dbtype); 2234 if (rtnFolder && rtnFolder.length) 2235 f_pfid = rtnFolder[0].pfid; 2236 rtnFolder = undefined; 2237 var curPar = this.Common.RDF.GetResource(this.DataSource.getID2About(cur_pfid, f_pfid, cur_dbtype)); 2238 var contResList = this.DataSource.flattenResources(curPar, 2, false); 2239 var i; 2240 for (var i = 0; i < contResList.length; i++) { 2241 if (contResList[i].Value == curRes.Value) 2242 continue; 2243 var oid = this.DataSource.getProperty(contResList[i], "id"); 2244 if (oid != cur_oid) 2245 continue; 2246 curRes = contResList[i]; 2247 break; 2248 } 2249 rtn = this.DataSource.moveItem(curRes, curPar, tarPar, tarRelIdx); 2250 if (rtn) 2251 rtn = this.Database.removeObject({oid: cur_oid, pfid: cur_pfid}, cur_dbtype); 2252 if (rtn) { 2253 this.DataSource.setProperty(curRes, "dbtype", tar_dbtype); 2254 this.DataSource.setProperty(curRes, "pfid", tar_fid); 2255 this.DataSource.setProperty(curRes, "id", moveObject.oid); 2256 this.DataSource.setID2About(cur_oid, cur_pfid, undefined, cur_dbtype); 2257 this.DataSource.setID2About(moveObject.oid, tar_fid, curRes.Value, tar_dbtype); 2258 } 2259 mcTreeDNDHandler.changeNodeStyle(curRes); 2260 } 2261 if (tarPar) 2262 window.top.bitsMarkingCollection.reOrder(tarPar); 2263 this.DataSource.flush(); 2264 mcTreeCssService.init(); 2265 mcController.rebuildLocal(); 2266 }, 2267 copy: function(aRow, aOrient) { 2268 this.row = aRow; 2269 this.orient = aOrient; 2270 this.rowRes = mcTreeHandler.TREE.builderView.getResourceAtIndex(aRow); 2271 (mcTreeHandler.TREE.view.selection.count == 1) ? this.copySingle() : this.copyMultiple(); 2272 }, 2273 copySingle: function() { 2274 var curIdx = mcTreeHandler.TREE.currentIndex; 2275 var curRes = mcTreeHandler.TREE.builderView.getResourceAtIndex(curIdx); 2276 var curPar = mcTreeHandler.getParentResource(curIdx); 2277 var tarRes = mcTreeHandler.TREE.builderView.getResourceAtIndex(this.row); 2278 var tarPar = (this.orient == 0) ? tarRes : mcTreeHandler.getParentResource(this.row); 2279 this.copyAfterChecking(curRes, curPar, tarRes, tarPar); 2280 this.DataSource.flush(); 2281 mcController.rebuildLocal(); 2282 }, 2283 copyMultiple: function() { 2284 var idxList = mcTreeHandler.getSelection(false, 2); 2285 if (mcTreeHandler.validateMultipleSelection(idxList) == false) 2286 return; 2287 var i = 0; 2288 var curResList = []; 2289 var curParList = []; 2290 var tarResList = []; 2291 var tarParList = []; 2292 for (i = 0; i < idxList.length; i++) { 2293 curResList.push(mcTreeHandler.TREE.builderView.getResourceAtIndex(idxList[i])); 2294 curParList.push(mcTreeHandler.getParentResource(idxList[i])); 2295 tarResList.push(mcTreeHandler.TREE.builderView.getResourceAtIndex(this.row)); 2296 tarParList.push((this.orient == 0) ? tarResList[i] : mcTreeHandler.getParentResource(this.row)); 2297 } 2298 if (this.orient == 1) { 2299 for (i = idxList.length - 1; i >= 0; i--) { 2300 this.copyAfterChecking(curResList[i], curParList[i], tarResList[i], tarParList[i]); 2301 } 2302 } else { 2303 for (i = 0; i < idxList.length; i++) { 2304 this.copyAfterChecking(curResList[i], curParList[i], tarResList[i], tarParList[i]); 2305 } 2306 } 2307 this.DataSource.flush(); 2308 mcController.rebuildLocal(); 2309 }, 2310 copyAfterChecking: function(curRes, curPar, tarRes, tarPar) { 2311 var curAbsIdx = mcTreeHandler.TREE.builderView.getIndexOfResource(curRes); 2312 var curRelIdx = window.top.bitsObjectMng.DataSource.getRelativeIndex(curPar, curRes); 2313 var tarRelIdx = window.top.bitsObjectMng.DataSource.getRelativeIndex(tarPar, tarRes); 2314 var tar_dbtype = this.DataSource.getProperty(tarPar, "dbtype"); 2315 var cur_dbtype = this.DataSource.getProperty(curPar, "dbtype"); 2316 if (cur_dbtype != tar_dbtype) { 2317 if (mcTreeHandler.TREE.view.isContainer(curAbsIdx)) { 2318 this.moveFolder(curRes, curPar, tarPar, tarRelIdx); 2319 } else { 2320 this.moveObject(curRes, curPar, tarPar, tarRelIdx); 2321 } 2322 return; 2323 } 2324 if (mcTreeHandler.TREE.view.isContainer(curAbsIdx)) 2325 return; 2326 if (this.orient == 0) { 2327 if (curAbsIdx == this.row) 2328 return; 2329 } else { 2330 if (this.orient == 1) 2331 tarRelIdx++; 2332 if (curPar.Value == tarPar.Value && tarRelIdx > curRelIdx) 2333 tarRelIdx--; 2334 if (this.orient == 1 && 2335 mcTreeHandler.TREE.view.isContainer(this.row) && 2336 mcTreeHandler.TREE.view.isContainerOpen(this.row) && 2337 mcTreeHandler.TREE.view.isContainerEmpty(this.row) == false) { 2338 if (curAbsIdx == this.row) 2339 return; 2340 tarPar = tarRes; 2341 tarRes = mcTreeHandler.TREE.builderView.getResourceAtIndex(this.row + 1); 2342 tarRelIdx = 1; 2343 } 2344 if (curPar.Value == tarPar.Value && curRelIdx == tarRelIdx) 2345 return; 2346 } 2347 if (mcTreeHandler.TREE.view.isContainer(curAbsIdx)) { 2348 var tmpIdx = this.row; 2349 var tmpRes = tarRes; 2350 while (tmpRes.Value != mcTreeHandler.TREE.ref && tmpIdx != -1) { 2351 tmpRes = mcTreeHandler.getParentResource(tmpIdx); 2352 tmpIdx = mcTreeHandler.TREE.builderView.getIndexOfResource(tmpRes); 2353 if (tmpRes.Value == curRes.Value) 2354 return; 2355 } 2356 } 2357 var rtn = false; 2358 var pfid = this.DataSource.getProperty(tarPar, "id"); 2359 var dbtype = this.DataSource.getProperty(tarPar, "dbtype"); 2360 var oid = this.DataSource.getProperty(curRes, "id"); 2361 rtn = this.Database.existsObject({oid: oid, pfid: pfid}, dbtype); 2362 if (rtn) { 2363 this.Common.alert(mcMainService.STRING.getString("ALERT_COPYOBJECT_EXISTS")); 2364 return; 2365 } 2366 var newDCitem = this.Common.newItem(); 2367 newDCitem.id = oid; 2368 newDCitem.about = this.DataSource.getAbout(oid, pfid, this.DataSource.getProperty(curRes, "dbtype")); 2369 newDCitem.pfid = pfid; 2370 newDCitem.type = this.DataSource.getProperty(curRes, "type"); 2371 newDCitem.source = this.DataSource.getProperty(curRes, "source"); 2372 newDCitem.title = this.DataSource.getProperty(curRes, "title"); 2373 newDCitem.editmode = this.DataSource.getProperty(curRes, "editmode"); 2374 newDCitem.uri = this.DataSource.getProperty(curRes, "uri"); 2375 newDCitem.source = this.DataSource.getProperty(curRes, "source"); 2376 newDCitem.dbtype = this.DataSource.getProperty(curRes, "dbtype"); 2377 var pfid_order = 0; 2378 if (this.DataSource.isContainer(this.rowRes)) { 2379 var tmp_fid = this.DataSource.getProperty(this.rowRes, "id"); 2380 var rtnFolder = mcTreeDNDHandler.Database.getFolderFormID(tmp_fid, newDCitem.dbtype); 2381 if (rtnFolder && rtnFolder.length) 2382 pfid_order = rtnFolder[0].pfid_order; 2383 } else { 2384 var tmp_oid = this.DataSource.getProperty(this.rowRes, "id"); 2385 var rtnObject = mcTreeDNDHandler.Database.getObject({oid: tmp_oid, pfid: pfid}, newDCitem.dbtype); 2386 if (rtnObject && rtnObject.length) 2387 pfid_order = rtnObject[0].pfid_order; 2388 } 2389 if (this.orient >= 0) 2390 pfid_order = parseFloat(parseFloat(pfid_order) + parseFloat(this.orient)); 2391 rtn = mcTreeDNDHandler.Database.addLink({oid: oid, pfid: pfid, pfid_order: pfid_order}, newDCitem.dbtype); 2392 if (rtn) { 2393 var newRes = this.DataSource.addItem(newDCitem, tarPar.Value, tarRelIdx, newDCitem.dbtype); 2394 if (newRes) { 2395 this.DataSource.setProperty(newRes, "id", oid); //Treeã«è¿œå åŸãidãå€æŽããã 2396 this.DataSource.flush(); 2397 } 2398 var selectIdx = mcTreeHandler.TREE.builderView.getIndexOfResource(newRes); 2399 if (selectIdx >= 0) { 2400 mcTreeHandler.TREE.currentIndex = selectIdx; 2401 if (!mcTreeHandler.TREE.view.selection.isSelected(mcTreeHandler.TREE.currentIndex)) 2402 mcTreeHandler.TREE.view.selection.select(mcTreeHandler.TREE.currentIndex); 2403 mcTreeHandler.TREE.focus(); 2404 mcTreeHandler.TREE.treeBoxObject.ensureRowIsVisible(selectIdx); 2405 mcPropertyView.dispProperty(mcTreeHandler.object); 2406 } 2407 } else { 2408 mcTreeViewModeService.rebuild(); 2409 } 2410 }, 2411 capture: function(aXferString, aRow, aOrient) { 2412 var aXferStringArr = aXferString.split("\n"); 2413 var url = aXferStringArr[0]; 2414 var url_title = aXferStringArr[1]; 2415 if (!url_title || url == url_title) 2416 url_title = ""; 2417 var basedir = window.top.bitsTreeListService.getBaseDir(); 2418 var res_uri = this.Common.convertFilePathToURL(basedir.path); 2419 if (url.indexOf(res_uri) >= 0) 2420 return; 2421 if (this.originalTarget && this.originalTarget.nodeName == "IMG" && this.originalTarget.hasAttribute('oid') && this.originalTarget.hasAttribute('dbtype')) 2422 return; 2423 var win = window.top.bitsObjectMng.Common.getFocusedWindow(); 2424 var sel = win.getSelection(); 2425 var isSelected = false; 2426 try { 2427 isSelected = (sel.anchorNode === sel.focusNode && sel.anchorOffset == sel.focusOffset) ? false : true; 2428 if (isSelected && aXferStringArr.length != 1) 2429 isSelected = false; 2430 if (isSelected && win.document.contentType == "application/pdf") 2431 isSelected = false; 2432 } catch (ex) { 2433 } 2434 var isEntire = (url == top.window._content.location.href); 2435 var res = (aRow == -1) ? [mcTreeHandler.TREE.ref, 0] : this.getTarget(aRow, aOrient); 2436 var newResArr; 2437 if (this.modAlt && isEntire) { 2438 } else if (isSelected) { 2439 newResArr = window.top.bitsMarkingCollection.addSelectedText(res[0], res[1], aRow); 2440 } else { 2441 if (url.indexOf("http://") == 0 || 2442 url.indexOf("https://") == 0 || 2443 url.indexOf("ftp://") == 0 || 2444 url.indexOf("file://") == 0) { 2445 var importFlag = false; 2446 var splitFileName = this.Common.splitFileName(url); 2447 if (splitFileName[1].toLowerCase() == "xml" || splitFileName[1].toLowerCase() == "zip") 2448 importFlag = mcXmlImportService.loadFile(res[0], res[1], aRow, url); 2449 if (!importFlag && !mcXmlImportService.isExportFile) { 2450 if (this.originalTarget) { 2451 //æ¢ã«Targetãèšå®ãããŠããå Žåãã«ã¬ã³ãã®ããã¥ã¡ã³ãã®ãã®ãããã§ã㯠2452 if (this.originalTarget.ownerDocument != this.gBrowser.contentDocument) { 2453 var win = this.gBrowser.contentWindow; 2454 if (win.frames != null) { 2455 var i; 2456 for (i = 0; i < win.frames.length; i++) { 2457 if (this.originalTarget.ownerDocument == win.frames[i].document) 2458 break; 2459 } 2460 if (i >= win.frames.length) 2461 this.originalTarget = null; 2462 } else { 2463 this.originalTarget = null; 2464 } 2465 } 2466 } 2467 var tmpOriginalTarget = this.originalTarget; 2468 while (tmpOriginalTarget && (tmpOriginalTarget.nodeName != "A" && tmpOriginalTarget.nodeName != "IMG")) { 2469 tmpOriginalTarget = tmpOriginalTarget.parentNode; 2470 } 2471 if (tmpOriginalTarget) 2472 this.originalTarget = tmpOriginalTarget; 2473 newResArr = window.top.bitsMarkingCollection.addURLText(res[0], res[1], aRow, aXferString, this.originalTarget); 2474 } 2475 } else { 2476 isSelected = false; 2477 try { 2478 isSelected = (sel.anchorNode === sel.focusNode && sel.anchorOffset == sel.focusOffset) ? false : true; 2479 } catch (ex) { 2480 } 2481 if (isSelected && win.document.contentType == "application/pdf") 2482 isSelected = false; 2483 if (isSelected) { 2484 newResArr = window.top.bitsMarkingCollection.addSelectedText(res[0], res[1], aRow); 2485 } else { 2486 setTimeout(function() { 2487 var rtn = window.top.bitsMarkingCollection.addPDFText(res[0], res[1], aRow, aXferString); 2488 if (!rtn) 2489 window.top.bitsMarkingCollection.Common.alert(mcMainService.STRING.getString("ERROR_INVALID_URL") + "\n" + url); 2490 }, 0); 2491 } 2492 } 2493 } 2494 return {isSelected: isSelected, resArr: newResArr}; 2495 }, 2496 loadHTML: function(aEvent) { 2497 var doc = window.top.bitsMarkingCollection.BROWSER.contentDocument; 2498 var url = mcTreeDNDHandler.Common.getURLStringFromDocument(doc); 2499 var title = doc.title; 2500 var icon = ""; 2501 var links = doc.getElementsByTagName("link"); 2502 if (links && links.length > 0) { 2503 for (var i = 0; i < links.length; i++) { 2504 if (links[i].rel.toLowerCase() == "shortcut icon" || links[i].rel.toLowerCase() == "icon") { 2505 icon = links[i].href; 2506 break; 2507 } 2508 } 2509 } 2510 if (icon == "" && (url.indexOf("http://") == 0 || url.indexOf("https://") == 0)) { 2511 var root = mcTreeDNDHandler.Common.getRootHref(url); 2512 root += "/favicon.ico"; 2513 var xmlhttp = new XMLHttpRequest(); 2514 if (xmlhttp) { 2515 xmlhttp.open("GET", root, false); 2516 xmlhttp.send(null); 2517 if (xmlhttp.status == 200) 2518 icon = root; 2519 } 2520 } 2521 if (title) 2522 mcTreeDNDHandler.DataSource.setProperty(mcTreeDNDHandler._oRes, "title", title); 2523 if (icon) 2524 mcTreeDNDHandler.DataSource.setProperty(mcTreeDNDHandler._oRes, "icon", icon); 2525 if (title || icon) { 2526 mcTreeDNDHandler.DataSource.flush(); 2527 mcTreeHandler.TREE.builder.rebuild(); 2528 var dbtype = mcTreeDNDHandler.DataSource.getProperty(mcTreeDNDHandler._oRes, "dbtype"); 2529 var oid_property = ""; 2530 var obj = mcTreeDNDHandler.Database.getObjectFormID(mcTreeDNDHandler._oID, dbtype); 2531 if (obj && obj.length > 0) 2532 oid_property = obj[0].oid_property; 2533 if (icon) 2534 oid_property += "<ICON>" + icon + "</ICON>"; 2535 mcTreeDNDHandler.Database.updateObject({oid: mcTreeDNDHandler._oID, oid_title: title, oid_property: oid_property}, dbtype); 2536 } 2537 window.top.bitsMarkingCollection.BROWSER.removeEventListener("load", mcTreeDNDHandler.loadHTML, true); 2538 window.top.bitsMarkingCollection.BROWSER.loadURI("about:blank"); 2539 if (title || icon) 2540 mcTreeViewModeService.rebuild(); 2541 }, 2542 getIconFromURL: function(aUrl, aRes) { 2543 var uri = aUrl; 2544 var xmlhttp = null; 2545 xmlhttp = new XMLHttpRequest(); 2546 if (xmlhttp) { 2547 xmlhttp.onreadystatechange = function() { 2548 if (xmlhttp.readyState == 4) { 2549 if (xmlhttp.status == 200) { 2550 var contentType = xmlhttp.getResponseHeader("Content-Type"); 2551 var id = mcTreeDNDHandler.DataSource.getProperty(aRes, "id"); 2552 var dbtype = mcTreeDNDHandler.DataSource.getProperty(aRes, "id"); 2553 var type = "url"; 2554 var ext = "txt"; 2555 if (contentType.match(/^image\/(\S+)/)) { 2556 type = "image"; 2557 ext = RegExp.$1; 2558 } else if (contentType.match(/^text\/(\S+)/)) { 2559 ext = RegExp.$1; 2560 ext = ext.replace(/[^A-Za-z0-9]+$/mg, ""); 2561 } 2562 mcTreeDNDHandler.Database.updateObject({oid: id, oid_txt: ext}, dbtype); 2563 var bytes = []; 2564 var filestream = xmlhttp.responseText; 2565 for (var i = 0; i < filestream.length; i++) { 2566 bytes[i] = filestream.charCodeAt(i) & 0xff; 2567 } 2568 var file = window.top.bitsMarkingCollection.getExtensionDir().clone(); 2569 file.append("data"); 2570 if (!file.exists()) 2571 file.create(file.DIRECTORY_TYPE, 0700); 2572 file.append(id + "." + ext); 2573 if (type == "image") { 2574 if (file.exists()) 2575 file.remove(false); 2576 file.create(file.NORMAL_FILE_TYPE, 0666); 2577 var ostream = Components.classes['@mozilla.org/network/file-output-stream;1'].createInstance(Components.interfaces.nsIFileOutputStream); 2578 ostream.init(file, 2, 0x200, false); 2579 ostream.write(String.fromCharCode.apply(String, bytes), bytes.length); 2580 ostream.close(); 2581 mcTreeDNDHandler.DataSource.setProperty(aRes, "icon", mcTreeDNDHandler.Common.convertFilePathToURL(file.path)); 2582 mcTreeDNDHandler.DataSource.flush(); 2583 mcTreeHandler.TREE.builder.rebuild(); 2584 mcTreeDNDHandler.Database.updateObjectBLOB(id, bytes, dbtype); 2585 } 2586 } else { 2587 _dump("mcTreeDNDHandler.getIconFromURL():status=[" + xmlhttp.status + "]"); 2588 } 2589 } 2590 }; 2591 xmlhttp.open("GET", uri, true); 2592 xmlhttp.overrideMimeType('text/plain; charset=x-user-defined'); 2593 xmlhttp.send(null); 2594 } 2595 }, 2596 parseHTML: function(text) { 2597 try { 2598 var createHTMLDocument = function() { 2599 var xsl = (new DOMParser()).parseFromString( 2600 ['<?xml version="1.0"?>', 2601 '<stylesheet version="1.0" xmlns="http://www.w3.org/1999/XSL/Transform">', 2602 '<output method="html"/>', 2603 '</stylesheet>'].join("\n"), "text/xml"); 2604 var xsltp = new XSLTProcessor(); 2605 xsltp.importStylesheet(xsl); 2606 var doc = xsltp.transformToDocument(document.implementation.createDocument("", "", null)); 2607 return doc; 2608 }; 2609 var doc = createHTMLDocument(); 2610 var range = doc.createRange(); 2611 doc.appendChild(doc.createElement("html")); 2612 range.selectNodeContents(doc.documentElement); 2613 doc.documentElement.appendChild(range.createContextualFragment(text)); 2614 return doc; 2615 } catch (ex) { 2616 _dump("mcTreeDNDHandler.parseHTML():" + ex); 2617 return null; 2618 } 2619 }, 2620 changeNodeStyle: function(pRes) { 2621 var id = this.DataSource.getProperty(pRes, "id"); 2622 var pfid = this.DataSource.getProperty(pRes, "pfid"); 2623 var dbtype = this.DataSource.getProperty(pRes, "dbtype"); 2624 var source = this.DataSource.getProperty(pRes, "source"); 2625 if (!source) 2626 source = bitsMarker.id_key + dbtype + id; 2627 var parentRes = this.DataSource.findParentResource(pRes); 2628 var style = this.DataSource.getProperty(parentRes, "style"); 2629 this.Common.changeNodeStyleFromID(source, style, pfid, id, dbtype); 2630 this.DataSource.setProperty(pRes, "source", bitsMarker.id_key + dbtype + id); 2631 }, 2632 getTarget: function(aRow, aOrient) { 2633 var tarRes = mcTreeHandler.TREE.builderView.getResourceAtIndex(aRow); 2634 var tarPar = (aOrient == 0) ? tarRes : mcTreeHandler.getParentResource(aRow); 2635 var tarRelIdx = window.top.bitsObjectMng.DataSource.getRelativeIndex(tarPar, tarRes); 2636 if (aOrient == 1) 2637 tarRelIdx++; 2638 if (aOrient == 1 && 2639 mcTreeHandler.TREE.view.isContainer(aRow) && 2640 mcTreeHandler.TREE.view.isContainerOpen(aRow) && 2641 mcTreeHandler.TREE.view.isContainerEmpty(aRow) == false) { 2642 tarPar = tarRes; 2643 tarRelIdx = 1; 2644 } 2645 return [tarPar.Value, tarRelIdx]; 2646 }, 2382 2647 }; 2383 2648 … … 2385 2650 ///////////////////////////////////////////////////////////////////// 2386 2651 var mcTreeCssService = { 2387 2388 get DataSource(){ return window.top.bitsObjectMng.DataSource; }, 2389 get Common() { return window.top.bitsObjectMng.Common; }, 2390 get XPath() { return window.top.bitsObjectMng.XPath; }, 2391 get Database() { return window.top.bitsObjectMng.Database; }, 2392 get gBrowser(){ return window.top.bitsObjectMng.getBrowser();}, 2393 2394 init : function(){ 2395 try{ 2396 if(document.styleSheets.length <= 1) return; 2397 mcTreeHandler.TREE.treeBoxObject.clearStyleAndImageCaches(); 2398 var styleSheet = document.styleSheets[1]; 2399 for(var i=styleSheet.cssRules.length-1;i>=0;i--){ 2400 styleSheet.deleteRule(i); 2401 } 2402 var useid = {}; 2403 var i; 2404 var listRes = this.DataSource.flattenResources(this.Common.RDF.GetResource(this.DataSource.ABOUT_ROOT),1,true); 2405 for(i=0;i<listRes.length;i++){ 2406 if(listRes[i].Value == this.DataSource.ABOUT_ROOT) continue; 2407 var id = this.DataSource.getProperty(listRes[i],"id"); 2408 var dbtype = this.DataSource.getProperty(listRes[i],"dbtype"); 2409 var style = this.DataSource.getProperty(listRes[i],"style"); 2410 var style_id = 'css_'+dbtype+'_'+id; 2411 this.DataSource.setProperty(listRes[i],"cssrule",style_id); 2412 if(useid[style_id]) continue; 2413 useid[style_id] = style; 2414 styleSheet.insertRule("treechildren::-moz-tree-cell("+style_id+"){ "+style+" }",styleSheet.cssRules.length); 2415 styleSheet.insertRule("treechildren::-moz-tree-cell-text("+style_id+"){ "+style+" }",styleSheet.cssRules.length); 2416 } 2417 listRes = undefined; 2418 window.top.bitsContextMenu.rebuildCSS(); 2419 }catch(ex){ 2420 _dump("mcTreeCssService.init():"+ex); 2421 } 2422 }, 2652 get DataSource() { 2653 return window.top.bitsObjectMng.DataSource; 2654 }, 2655 get Common() { 2656 return window.top.bitsObjectMng.Common; 2657 }, 2658 get XPath() { 2659 return window.top.bitsObjectMng.XPath; 2660 }, 2661 get Database() { 2662 return window.top.bitsObjectMng.Database; 2663 }, 2664 get gBrowser() { 2665 return window.top.bitsObjectMng.getBrowser(); 2666 }, 2667 init: function() { 2668 try { 2669 if (document.styleSheets.length <= 1) 2670 return; 2671 mcTreeHandler.TREE.treeBoxObject.clearStyleAndImageCaches(); 2672 var styleSheet = document.styleSheets[1]; 2673 for (var i = styleSheet.cssRules.length - 1; i >= 0; i--) { 2674 styleSheet.deleteRule(i); 2675 } 2676 var useid = {}; 2677 var i; 2678 var listRes = this.DataSource.flattenResources(this.Common.RDF.GetResource(this.DataSource.ABOUT_ROOT), 1, true); 2679 for (i = 0; i < listRes.length; i++) { 2680 if (listRes[i].Value == this.DataSource.ABOUT_ROOT) 2681 continue; 2682 var id = this.DataSource.getProperty(listRes[i], "id"); 2683 var dbtype = this.DataSource.getProperty(listRes[i], "dbtype"); 2684 var style = this.DataSource.getProperty(listRes[i], "style"); 2685 var style_id = 'css_' + dbtype + '_' + id; 2686 this.DataSource.setProperty(listRes[i], "cssrule", style_id); 2687 if (useid[style_id]) 2688 continue; 2689 useid[style_id] = style; 2690 styleSheet.insertRule("treechildren::-moz-tree-cell(" + style_id + "){ " + style + " }", styleSheet.cssRules.length); 2691 styleSheet.insertRule("treechildren::-moz-tree-cell-text(" + style_id + "){ " + style + " }", styleSheet.cssRules.length); 2692 } 2693 listRes = undefined; 2694 window.top.bitsContextMenu.rebuildCSS(); 2695 } catch (ex) { 2696 _dump("mcTreeCssService.init():" + ex); 2697 } 2698 }, 2423 2699 }; 2424 2700 … … 2426 2702 ///////////////////////////////////////////////////////////////////// 2427 2703 var mcTreeMultiDocumentService = { 2428 get BUTTON(){ return document.getElementById("mcToolbarMultiDocumentButton"); }, 2429 2430 get DataSource(){ return window.top.bitsObjectMng.DataSource; }, 2431 get Common() { return window.top.bitsObjectMng.Common; }, 2432 get Database() { return window.top.bitsObjectMng.Database; }, 2433 get gBrowser() { return window.top.bitsObjectMng.getBrowser();}, 2434 2435 init : function(){ 2436 var multidocument = nsPreferences.getBoolPref("wiredmarker.multidocument", false); 2437 if(this.BUTTON) this.BUTTON.setAttribute("checked",multidocument); 2438 }, 2439 2440 onClick : function(aEvent){ 2441 var multidocument = this.BUTTON.getAttribute("checked"); 2442 if(!multidocument || multidocument == "false"){ 2443 multidocument = true; 2444 }else{ 2445 multidocument = false; 2446 } 2447 this.BUTTON.setAttribute("checked",multidocument); 2448 nsPreferences.setBoolPref("wiredmarker.multidocument",multidocument); 2449 mcPropertyView.dispProperty(mcTreeHandler.object); 2450 aEvent.stopPropagation(); 2451 }, 2704 get BUTTON() { 2705 return document.getElementById("mcToolbarMultiDocumentButton"); 2706 }, 2707 get DataSource() { 2708 return window.top.bitsObjectMng.DataSource; 2709 }, 2710 get Common() { 2711 return window.top.bitsObjectMng.Common; 2712 }, 2713 get Database() { 2714 return window.top.bitsObjectMng.Database; 2715 }, 2716 get gBrowser() { 2717 return window.top.bitsObjectMng.getBrowser(); 2718 }, 2719 init: function() { 2720 var multidocument = nsPreferences.getBoolPref("wiredmarker.multidocument", false); 2721 if (this.BUTTON) 2722 this.BUTTON.setAttribute("checked", multidocument); 2723 }, 2724 onClick: function(aEvent) { 2725 var multidocument = this.BUTTON.getAttribute("checked"); 2726 if (!multidocument || multidocument == "false") { 2727 multidocument = true; 2728 } else { 2729 multidocument = false; 2730 } 2731 this.BUTTON.setAttribute("checked", multidocument); 2732 nsPreferences.setBoolPref("wiredmarker.multidocument", multidocument); 2733 mcPropertyView.dispProperty(mcTreeHandler.object); 2734 aEvent.stopPropagation(); 2735 }, 2452 2736 }; 2453 2737 … … 2455 2739 ///////////////////////////////////////////////////////////////////// 2456 2740 var mcTreeViewModeService = { 2457 _select : false, 2458 _openlist : [], 2459 dbupdateTimer : null, 2741 _select: false, 2742 _openlist: [], 2743 dbupdateTimer: null, 2744 get BUTTON() { 2745 return document.getElementById("mcToolbarViewModeButton"); 2746 }, 2747 get SINGLE() { 2748 return document.getElementById("mcToolbarViewModeItemSingle"); 2749 }, 2750 get ALL() { 2751 return document.getElementById("mcToolbarViewModeItemAll"); 2752 }, 2753 get EACH() { 2754 return document.getElementById("mcToolbarViewModeItemEach"); 2755 }, 2756 get TITLE() { 2757 return window.top.document.getElementById("sidebar-title"); 2758 }, 2759 get PROGRESS() { 2760 return document.getElementById("mcToolbarProgressmeter"); 2761 }, 2762 get DataSource() { 2763 return window.top.bitsObjectMng.DataSource; 2764 }, 2765 get Common() { 2766 return window.top.bitsObjectMng.Common; 2767 }, 2768 get Database() { 2769 return window.top.bitsObjectMng.Database; 2770 }, 2771 get gBrowser() { 2772 return window.top.bitsObjectMng.getBrowser(); 2773 }, 2774 get viewmode() { 2775 var viewmode = "all"; 2776 if (mcTreeViewModeService.EACH && mcTreeViewModeService.EACH.getAttribute("checked")) { 2777 viewmode = "each"; 2778 } else if (mcTreeViewModeService.SINGLE && mcTreeViewModeService.SINGLE.getAttribute("checked")) { 2779 viewmode = "single"; 2780 } else if (!mcTreeViewModeService.ALL) { 2781 viewmode = nsPreferences.copyUnicharPref("wiredmarker.viewmode", "all"); 2782 } 2783 return viewmode; 2784 }, 2785 init: function() { 2786 var viewmode = nsPreferences.copyUnicharPref("wiredmarker.viewmode", "all"); 2787 switch (viewmode) { 2788 case "each" : 2789 this.EACH.setAttribute("checked", true); 2790 break; 2791 case "single" : 2792 this.SINGLE.setAttribute("checked", true); 2793 break; 2794 default : 2795 this.ALL.setAttribute("checked", true); 2796 break; 2797 } 2798 this.gBrowser.addEventListener("pageshow", this.pageshow, false); 2799 this.gBrowser.addEventListener("select", this.select, false); 2800 this.gBrowser.addEventListener("click", this.click, false); 2801 if (this.dbupdateTimer) 2802 clearTimeout(this.dbupdateTimer); 2803 }, 2804 done: function() { 2805 this.gBrowser.removeEventListener("pageshow", this.pageshow, false); 2806 this.gBrowser.removeEventListener("select", this.select, false); 2807 this.gBrowser.removeEventListener("click", this.click, false); 2808 var viewmode = this.viewmode; 2809 if (viewmode == "each") 2810 viewmode = "all"; 2811 nsPreferences.setUnicharPref("wiredmarker.viewmode", viewmode); 2812 if (this.dbupdateTimer) 2813 clearTimeout(this.dbupdateTimer); 2814 }, 2815 pageshow: function(aEvent) { 2816 try { 2817 if (mcTreeViewModeService.gBrowser.contentDocument == aEvent.target) { 2818 var pageshow_url = mcTreeViewModeService.Common.getURLStringFromDocument(aEvent.target); 2819 if (mcTreeViewModeService._openlist[pageshow_url] == undefined && mcTreeViewModeService.viewmode == "single") { 2820 mcTreeViewModeService.rebuild(); 2821 } 2822 } 2823 } catch (e) { 2824 } 2825 }, 2826 select: function(aEvent) { 2827 try { 2828 if (!mcTreeViewModeService) 2829 return; 2830 if (!mcTreeViewModeService._select) { 2831 mcTreeViewModeService._select = true; 2832 return; 2833 } 2834 var url = mcTreeViewModeService.Common.getURLStringFromDocument(mcTreeViewModeService.gBrowser.contentDocument); 2835 if (url.indexOf("chrome:") < 0 && url.indexOf("about:") < 0 && mcTreeViewModeService._openlist[url] == undefined) { 2836 if (mcTreeViewModeService.viewmode == "single") 2837 mcTreeViewModeService.rebuild(); 2838 } 2839 mcTreeViewModeService._select = false; 2840 } catch (ex) { 2841 } 2842 }, 2843 dbupdate: function() { 2844 if (mcTreeViewModeService.dbupdateTimer) 2845 clearTimeout(mcTreeViewModeService.dbupdateTimer); 2846 var rtnUpdate = false; 2847 if (!rtnUpdate) 2848 rtnUpdate = mcTreeViewModeService.Database._updateCheck(mcTreeViewModeService.Database._defaultMode); 2849 if (rtnUpdate) 2850 mcTreeViewModeService.rebuild(); 2851 mcTreeViewModeService.dbupdateTimer = setTimeout(mcTreeViewModeService.dbupdate, 1000) 2852 }, 2853 click: function(aEvent) { 2854 var parent = aEvent.rangeParent; 2855 var offset = aEvent.rangeOffset; 2856 try { 2857 if (!bitsMarker) 2858 return; 2859 } catch (ex) { 2860 return; 2861 } 2862 var match_exp = new RegExp("^" + bitsMarker.id_key + "\\D+(\\d+)$", "m"); 2863 var click_oid = ""; 2864 while (parent) { 2865 if (parent.id && parent.id.match(match_exp)) { 2866 var dbtype = parent.getAttribute("dbtype"); 2867 match_exp = new RegExp("^" + bitsMarker.id_key + dbtype + "(\\d+)$", "m"); 2868 if (match_exp.test(parent.id)) { 2869 click_oid = RegExp.$1; 2870 break; 2871 } 2872 } 2873 parent = parent.parentNode; 2874 } 2875 if (!parent || click_oid == "") 2876 return; 2877 mcTreeViewModeService.selectTreeObject(click_oid, parent.getAttribute("dbtype"), parent.getAttribute("pfid")); 2878 }, 2879 selectTreeObject: function(aOID, aDBTYPE, aPFID) { 2880 var click_oid = aOID; 2881 var click_dbtype = aDBTYPE; 2882 var click_pfid = aPFID; 2883 if (mcItemView.isChecked) { 2884 var f_pfid = undefined; 2885 var rtnFolder = this.Database.getFolder({fid: click_pfid}, click_dbtype); 2886 if (rtnFolder && rtnFolder.length) 2887 f_pfid = rtnFolder[0].pfid; 2888 rtnFolder = undefined; 2889 var About = this.DataSource.getID2About(click_pfid, f_pfid, click_dbtype); 2890 try { 2891 var searchRes = this.Common.RDF.GetResource(About); 2892 if (searchRes) { 2893 var resArr = []; 2894 var parentRes = searchRes; 2895 do { 2896 parentRes = this.DataSource.findParentResource(parentRes); 2897 if (parentRes) 2898 resArr.push(parentRes); 2899 } while (parentRes && parentRes.Value != this.DataSource.ABOUT_ROOT); 2900 for (var i = resArr.length - 1; i >= 0; i--) { 2901 var selectIdx = mcTreeHandler.TREE.builderView.getIndexOfResource(resArr[i]); 2902 if (selectIdx >= 0 && !mcTreeHandler.TREE.view.isContainerOpen(selectIdx)) 2903 mcTreeHandler.TREE.view.toggleOpenState(selectIdx); 2904 } 2905 var selectIdx = mcTreeHandler.TREE.builderView.getIndexOfResource(searchRes); 2906 if (selectIdx >= 0) { 2907 mcTreeHandler.TREE.currentIndex = selectIdx; 2908 if (!mcTreeHandler.TREE.view.selection.isSelected(mcTreeHandler.TREE.currentIndex)) 2909 mcTreeHandler.TREE.view.selection.select(mcTreeHandler.TREE.currentIndex); 2910 mcTreeHandler.TREE.treeBoxObject.ensureRowIsVisible(selectIdx); 2911 if (bitsTreeDate && bitsTreeDate.isChecked) { 2912 bitsTreeDate.onSelect({ 2913 oid: click_oid, 2914 dbtype: click_dbtype 2915 }); 2916 } else { 2917 mcItemView.onTreeClick(); 2918 } 2919 setTimeout(function() { 2920 mcItemView.setSelection(click_oid, click_dbtype); 2921 }, 0); 2922 } 2923 } 2924 } catch (e) { 2925 } 2926 } else { 2927 var searchIdx = -1; 2928 var searchRes = null; 2929 var searchRes1 = null; 2930 var listRes2 = this.DataSource.flattenResources(this.Common.RDF.GetResource(this.DataSource.ABOUT_ROOT), 2, true); 2931 for (var j = 0; j < listRes2.length; j++) { 2932 var id = this.DataSource.getProperty(listRes2[j], "id"); 2933 if (id == click_oid) { 2934 if (!searchRes1) 2935 searchRes1 = listRes2[j]; 2936 searchIdx = mcTreeHandler.TREE.builderView.getIndexOfResource(listRes2[j]); 2937 if ((mcTreeHandler.TREE.currentIndex > -1 && mcTreeHandler.TREE.currentIndex < searchIdx) || searchIdx < 0) { 2938 searchRes = listRes2[j]; 2939 break; 2940 } 2941 } 2942 } 2943 if (!searchRes && searchRes1) 2944 searchRes = searchRes1; 2945 if (searchRes) { 2946 var resArr = []; 2947 var parentRes = searchRes; 2948 do { 2949 parentRes = this.DataSource.findParentResource(parentRes); 2950 if (parentRes) 2951 resArr.push(parentRes); 2952 } while (parentRes && parentRes.Value != this.DataSource.ABOUT_ROOT); 2953 var i; 2954 for (i = resArr.length - 1; i >= 0; i--) { 2955 var selectIdx = mcTreeHandler.TREE.builderView.getIndexOfResource(resArr[i]); 2956 if (selectIdx >= 0 && !mcTreeHandler.TREE.view.isContainerOpen(selectIdx)) 2957 mcTreeHandler.TREE.view.toggleOpenState(selectIdx); 2958 } 2959 var selectIdx = mcTreeHandler.TREE.builderView.getIndexOfResource(searchRes); 2960 if (selectIdx >= 0) { 2961 mcTreeHandler.TREE.currentIndex = selectIdx; 2962 if (!mcTreeHandler.TREE.view.selection.isSelected(mcTreeHandler.TREE.currentIndex)) 2963 mcTreeHandler.TREE.view.selection.select(mcTreeHandler.TREE.currentIndex); 2964 mcTreeHandler.TREE.focus(); 2965 mcTreeHandler.TREE.treeBoxObject.ensureRowIsVisible(selectIdx); 2966 mcPropertyView.dispProperty(mcTreeHandler.object); 2967 } 2968 } 2969 } 2970 var doc = this.gBrowser.contentDocument; 2971 var selection = doc.defaultView.getSelection(); 2972 if (selection) { 2973 if (selection.rangeCount) { 2974 var range = selection.getRangeAt(0); 2975 if (range.startContainer != range.endContainer || range.startOffset != range.endOffset) { 2976 doc.defaultView.focus(); 2977 } 2978 } 2979 } 2980 }, 2981 changeTitle: function() { 2982 var label = ""; 2983 var viewmode = mcTreeViewModeService.viewmode; 2984 switch (viewmode) { 2985 case "each" : 2986 label = this.EACH.getAttribute("label"); 2987 break; 2988 case "single" : 2989 label = this.SINGLE.getAttribute("label"); 2990 break; 2991 default : 2992 label = this.ALL.getAttribute("label"); 2993 break; 2994 } 2995 var rootfolder = nsPreferences.copyUnicharPref("wiredmarker.rootfolder", ""); 2996 var title = ""; 2997 var foldres; 2998 if (rootfolder && rootfolder != "") 2999 foldres = this.Database.getFolderFormID(rootfolder); 3000 if (foldres) 3001 title = foldres[0].fid_title; 3002 if (title == "") 3003 title = mcMainService.STRING.getString("DEFAULT_FOLDER"); 3004 var button_title = mcMainService.STRING.getString("APP_DISP_TITLE"); 2460 3005 2461 get BUTTON(){ return document.getElementById("mcToolbarViewModeButton"); }, 2462 get SINGLE(){ return document.getElementById("mcToolbarViewModeItemSingle"); }, 2463 get ALL() { return document.getElementById("mcToolbarViewModeItemAll"); }, 2464 get EACH() { return document.getElementById("mcToolbarViewModeItemEach"); }, 2465 get TITLE() { return window.top.document.getElementById("sidebar-title"); }, 2466 get PROGRESS(){ return document.getElementById("mcToolbarProgressmeter"); }, 3006 // DASISH modification 3007 // this.TITLE.setAttribute("value",button_title + " [ " + title + " ]"); 3008 this.TITLE.setAttribute("value", "My Annotations"); 3009 this.TITLE.setAttribute("style", "font-size: 1.2em; text-align: center; margin: 2pt 28pt 2pt 0;"); 2467 3010 2468 get DataSource(){ return window.top.bitsObjectMng.DataSource; }, 2469 get Common() { return window.top.bitsObjectMng.Common; }, 2470 get Database() { return window.top.bitsObjectMng.Database; }, 2471 get gBrowser() { return window.top.bitsObjectMng.getBrowser();}, 2472 2473 get viewmode(){ 2474 var viewmode = "all"; 2475 if(mcTreeViewModeService.EACH && mcTreeViewModeService.EACH.getAttribute("checked")){ 2476 viewmode = "each"; 2477 }else if(mcTreeViewModeService.SINGLE && mcTreeViewModeService.SINGLE.getAttribute("checked")){ 2478 viewmode = "single"; 2479 }else if(!mcTreeViewModeService.ALL){ 2480 viewmode = nsPreferences.copyUnicharPref("wiredmarker.viewmode","all"); 2481 } 2482 return viewmode; 2483 }, 2484 2485 init : function(){ 2486 var viewmode = nsPreferences.copyUnicharPref("wiredmarker.viewmode","all"); 2487 switch(viewmode){ 2488 case "each" : 2489 this.EACH.setAttribute("checked",true); 2490 break; 2491 case "single" : 2492 this.SINGLE.setAttribute("checked",true); 2493 break; 2494 default : 2495 this.ALL.setAttribute("checked",true); 2496 break; 2497 } 2498 this.gBrowser.addEventListener("pageshow", this.pageshow, false); 2499 this.gBrowser.addEventListener("select", this.select, false); 2500 this.gBrowser.addEventListener("click", this.click, false); 2501 if(this.dbupdateTimer) clearTimeout(this.dbupdateTimer); 2502 }, 2503 2504 done : function(){ 2505 this.gBrowser.removeEventListener("pageshow", this.pageshow, false); 2506 this.gBrowser.removeEventListener("select", this.select, false); 2507 this.gBrowser.removeEventListener("click", this.click, false); 2508 var viewmode = this.viewmode; 2509 if(viewmode == "each") viewmode = "all"; 2510 nsPreferences.setUnicharPref("wiredmarker.viewmode", viewmode); 2511 if(this.dbupdateTimer) clearTimeout(this.dbupdateTimer); 2512 }, 2513 2514 pageshow : function(aEvent){ 2515 try{ 2516 if(mcTreeViewModeService.gBrowser.contentDocument == aEvent.target){ 2517 var pageshow_url = mcTreeViewModeService.Common.getURLStringFromDocument(aEvent.target); 2518 if(mcTreeViewModeService._openlist[pageshow_url]==undefined && mcTreeViewModeService.viewmode == "single"){ 2519 mcTreeViewModeService.rebuild(); 2520 } 2521 } 2522 }catch(e){} 2523 }, 2524 2525 select : function(aEvent){ 2526 try{ 2527 if(!mcTreeViewModeService) return; 2528 if(!mcTreeViewModeService._select){ 2529 mcTreeViewModeService._select = true; 2530 return; 2531 } 2532 var url = mcTreeViewModeService.Common.getURLStringFromDocument(mcTreeViewModeService.gBrowser.contentDocument); 2533 if(url.indexOf("chrome:") < 0 && url.indexOf("about:") < 0 && mcTreeViewModeService._openlist[url]==undefined){ 2534 if(mcTreeViewModeService.viewmode == "single") mcTreeViewModeService.rebuild(); 2535 } 2536 mcTreeViewModeService._select = false; 2537 }catch(ex){} 2538 }, 2539 2540 dbupdate : function(){ 2541 if(mcTreeViewModeService.dbupdateTimer) clearTimeout(mcTreeViewModeService.dbupdateTimer); 2542 var rtnUpdate = false; 2543 if(!rtnUpdate) rtnUpdate = mcTreeViewModeService.Database._updateCheck(mcTreeViewModeService.Database._defaultMode); 2544 if(rtnUpdate) mcTreeViewModeService.rebuild(); 2545 mcTreeViewModeService.dbupdateTimer = setTimeout(mcTreeViewModeService.dbupdate,1000) 2546 }, 2547 2548 click : function(aEvent){ 2549 var parent = aEvent.rangeParent; 2550 var offset = aEvent.rangeOffset; 2551 try{ if(!bitsMarker) return; }catch(ex){ return; } 2552 var match_exp = new RegExp("^"+bitsMarker.id_key+"\\D+(\\d+)$","m"); 2553 var click_oid = ""; 2554 while(parent){ 2555 if(parent.id && parent.id.match(match_exp)){ 2556 var dbtype = parent.getAttribute("dbtype"); 2557 match_exp = new RegExp("^"+bitsMarker.id_key+dbtype+"(\\d+)$","m"); 2558 if(match_exp.test(parent.id)){ 2559 click_oid = RegExp.$1; 2560 break; 2561 } 2562 } 2563 parent = parent.parentNode; 2564 } 2565 if(!parent || click_oid == "") return; 2566 mcTreeViewModeService.selectTreeObject(click_oid,parent.getAttribute("dbtype"),parent.getAttribute("pfid")); 2567 }, 2568 2569 selectTreeObject : function(aOID,aDBTYPE,aPFID){ 2570 var click_oid = aOID; 2571 var click_dbtype = aDBTYPE; 2572 var click_pfid = aPFID; 2573 if(mcItemView.isChecked){ 2574 var f_pfid = undefined; 2575 var rtnFolder = this.Database.getFolder({fid:click_pfid},click_dbtype); 2576 if(rtnFolder && rtnFolder.length) f_pfid = rtnFolder[0].pfid; 2577 rtnFolder = undefined; 2578 var About = this.DataSource.getID2About(click_pfid,f_pfid,click_dbtype); 2579 try{ 2580 var searchRes = this.Common.RDF.GetResource(About); 2581 if(searchRes){ 2582 var resArr = []; 2583 var parentRes = searchRes; 2584 do{ 2585 parentRes = this.DataSource.findParentResource(parentRes); 2586 if(parentRes) resArr.push(parentRes); 2587 }while(parentRes && parentRes.Value != this.DataSource.ABOUT_ROOT); 2588 for(var i=resArr.length-1;i>=0;i--){ 2589 var selectIdx = mcTreeHandler.TREE.builderView.getIndexOfResource(resArr[i]); 2590 if(selectIdx>=0 && !mcTreeHandler.TREE.view.isContainerOpen(selectIdx)) mcTreeHandler.TREE.view.toggleOpenState(selectIdx); 2591 } 2592 var selectIdx = mcTreeHandler.TREE.builderView.getIndexOfResource(searchRes); 2593 if(selectIdx>=0){ 2594 mcTreeHandler.TREE.currentIndex = selectIdx; 2595 if(!mcTreeHandler.TREE.view.selection.isSelected(mcTreeHandler.TREE.currentIndex)) mcTreeHandler.TREE.view.selection.select(mcTreeHandler.TREE.currentIndex); 2596 mcTreeHandler.TREE.treeBoxObject.ensureRowIsVisible(selectIdx); 2597 if(bitsTreeDate && bitsTreeDate.isChecked){ 2598 bitsTreeDate.onSelect({ 2599 oid : click_oid, 2600 dbtype : click_dbtype 2601 }); 2602 }else{ 2603 mcItemView.onTreeClick(); 2604 } 2605 setTimeout(function(){ mcItemView.setSelection(click_oid,click_dbtype); },0); 2606 } 2607 } 2608 }catch(e){} 2609 }else{ 2610 var searchIdx = -1; 2611 var searchRes = null; 2612 var searchRes1 = null; 2613 var listRes2 = this.DataSource.flattenResources(this.Common.RDF.GetResource(this.DataSource.ABOUT_ROOT),2,true); 2614 for(var j=0;j<listRes2.length;j++){ 2615 var id = this.DataSource.getProperty(listRes2[j],"id"); 2616 if(id == click_oid){ 2617 if(!searchRes1) searchRes1 = listRes2[j]; 2618 searchIdx = mcTreeHandler.TREE.builderView.getIndexOfResource(listRes2[j]); 2619 if((mcTreeHandler.TREE.currentIndex > -1 && mcTreeHandler.TREE.currentIndex < searchIdx) || searchIdx < 0){ 2620 searchRes = listRes2[j]; 2621 break; 2622 } 2623 } 2624 } 2625 if(!searchRes && searchRes1) searchRes = searchRes1; 2626 if(searchRes){ 2627 var resArr = []; 2628 var parentRes = searchRes; 2629 do{ 2630 parentRes = this.DataSource.findParentResource(parentRes); 2631 if(parentRes) resArr.push(parentRes); 2632 }while(parentRes && parentRes.Value != this.DataSource.ABOUT_ROOT); 2633 var i; 2634 for(i=resArr.length-1;i>=0;i--){ 2635 var selectIdx = mcTreeHandler.TREE.builderView.getIndexOfResource(resArr[i]); 2636 if(selectIdx>=0 && !mcTreeHandler.TREE.view.isContainerOpen(selectIdx)) mcTreeHandler.TREE.view.toggleOpenState(selectIdx); 2637 } 2638 var selectIdx = mcTreeHandler.TREE.builderView.getIndexOfResource(searchRes); 2639 if(selectIdx>=0){ 2640 mcTreeHandler.TREE.currentIndex = selectIdx; 2641 if(!mcTreeHandler.TREE.view.selection.isSelected(mcTreeHandler.TREE.currentIndex)) mcTreeHandler.TREE.view.selection.select(mcTreeHandler.TREE.currentIndex); 2642 mcTreeHandler.TREE.focus(); 2643 mcTreeHandler.TREE.treeBoxObject.ensureRowIsVisible(selectIdx); 2644 mcPropertyView.dispProperty(mcTreeHandler.object); 2645 } 2646 } 2647 } 2648 var doc = this.gBrowser.contentDocument; 2649 var selection = doc.defaultView.getSelection(); 2650 if(selection){ 2651 if(selection.rangeCount){ 2652 var range = selection.getRangeAt(0); 2653 if(range.startContainer != range.endContainer || range.startOffset != range.endOffset){ 2654 doc.defaultView.focus(); 2655 } 2656 } 2657 } 2658 }, 2659 2660 changeTitle : function(){ 2661 var label = ""; 2662 var viewmode = mcTreeViewModeService.viewmode; 2663 switch(viewmode){ 2664 case "each" : 2665 label = this.EACH.getAttribute("label"); 2666 break; 2667 case "single" : 2668 label = this.SINGLE.getAttribute("label"); 2669 break; 2670 default : 2671 label = this.ALL.getAttribute("label"); 2672 break; 2673 } 2674 var rootfolder = nsPreferences.copyUnicharPref("wiredmarker.rootfolder",""); 2675 var title = ""; 2676 var foldres; 2677 if(rootfolder && rootfolder != "") foldres = this.Database.getFolderFormID(rootfolder); 2678 if(foldres) title = foldres[0].fid_title; 2679 if(title == "") title = mcMainService.STRING.getString("DEFAULT_FOLDER"); 2680 var button_title = mcMainService.STRING.getString("APP_DISP_TITLE"); 2681 this.TITLE.setAttribute("value",button_title + " [ " + title + " ]"); 2682 this.BUTTON.setAttribute("label",label+" "); 2683 }, 2684 2685 onClick : function(aEvent){ 2686 var viewmode = aEvent.target.value; 2687 if(mcTreeViewModeService.dbupdateTimer) clearTimeout(mcTreeViewModeService.dbupdateTimer); 2688 if(viewmode == "each") mcTreeHandler.TREE.setAttribute("ref",this.DataSource.ABOUT_ROOT); //æ«å®åŠç 2689 this.rebuild(); 2690 if(viewmode == "each") mcTreeHandler.openAllFolders(); 2691 aEvent.stopPropagation(); 2692 }, 2693 2694 rebuild : function(){ 2695 try{ 2696 var currentTreeIndex = mcTreeHandler.TREE.currentIndex; 2697 var currentTreeRes = null; 2698 if(currentTreeIndex>=0) currentTreeRes = mcTreeHandler.TREE.builderView.getResourceAtIndex(currentTreeIndex); 2699 var firstVisibleRow = mcTreeHandler.TREE.treeBoxObject.getFirstVisibleRow(); 2700 var lastVisibleRow = mcTreeHandler.TREE.treeBoxObject.getLastVisibleRow(); 2701 this.changeTitle(); 2702 var resEnum = this.DataSource.data.GetAllResources(); 2703 while(resEnum.hasMoreElements()){ 2704 var aRes = resEnum.getNext().QueryInterface(Components.interfaces.nsIRDFResource); 2705 if(aRes.Value != this.DataSource.ABOUT_ROOT) this.DataSource.removeResource(aRes); 2706 } 2707 var dsEnum = mcTreeHandler.TREE.database.GetDataSources(); 2708 while(dsEnum.hasMoreElements()){ 2709 var ds = dsEnum.getNext().QueryInterface(Components.interfaces.nsIRDFDataSource); 2710 mcTreeHandler.TREE.database.RemoveDataSource(ds); 2711 } 2712 mcTreeHandler.TREE.treeBoxObject.clearStyleAndImageCaches(); 2713 mcTreeHandler.TREE.builder.rebuild(); 2714 if(mcTreeViewModeService.viewmode == "each"){ 2715 window.top.bitsMarkingCollection.rebuildRdf(mcTreeViewModeService.rebuildCallback); 2716 }else{ 2717 try{ 2718 window.top.bitsMarkingCollection.rebuildRdf(); 2719 }catch(ex){ 2720 _dump("mcTreeViewModeService.rebuild(1):"+ ex); 2721 } 2722 this.DataSource.refresh(); 2723 mcTreeCssService.init(); 2724 mcTreeHandler.TREE.database.AddDataSource(this.DataSource.data); 2725 mcTreeHandler.TREE.builder.rebuild(); 2726 mcTreeRootFolder.rebuild(); 2727 if(currentTreeIndex<0) currentTreeIndex = 0; 2728 try{var selectRes = mcTreeHandler.TREE.builderView.getResourceAtIndex(currentTreeIndex);}catch(ex2){selectRes=null;} 2729 if(!selectRes) currentTreeIndex = 0; 2730 if(firstVisibleRow<= currentTreeIndex && currentTreeIndex <= lastVisibleRow && currentTreeRes){ 2731 var idx = mcTreeHandler.TREE.builderView.getIndexOfResource(currentTreeRes); 2732 if(idx>=0) mcTreeHandler.TREE.currentIndex = idx; 2733 } 2734 if(!mcTreeHandler.TREE.view.selection.isSelected(mcTreeHandler.TREE.currentIndex)) mcTreeHandler.TREE.view.selection.select(mcTreeHandler.TREE.currentIndex); 2735 mcTreeHandler.TREE.treeBoxObject.ensureRowIsVisible(currentTreeIndex); 2736 if(firstVisibleRow>=0) mcTreeHandler.TREE.treeBoxObject.scrollToRow(firstVisibleRow); 2737 mcPropertyView.dispProperty(mcTreeHandler.object); 2738 this.showShortcutKey(); 2739 setTimeout(function(){ mcTreeRdfRebuildItem.init(); },0); 2740 return; 2741 } 2742 }catch(ex){ 2743 _dump("mcTreeViewModeService.rebuild():"+ ex); 2744 } 2745 }, 2746 2747 showShortcutKey : function(){ 2748 var elem = document.getElementById("mcTreeColShortcut"); 2749 var show_shortcut = nsPreferences.getBoolPref("wiredmarker.shortcut.tree_disp", true); 2750 if(show_shortcut){ 2751 if(elem) elem.removeAttribute("hidden"); 2752 var resAllFolder = this.DataSource.flattenResources(this.Common.RDF.GetResource(this.DataSource.ABOUT_ROOT), 1, true); 2753 var rcnt; 2754 for(rcnt=0;rcnt<resAllFolder.length;rcnt++){ 2755 var fRes = resAllFolder[rcnt]; 2756 if(fRes.Value == this.DataSource.ABOUT_ROOT) continue; 2757 var fid = this.DataSource.getProperty(fRes, "id"); 2758 var dbtype = this.DataSource.getProperty(fRes, "dbtype"); 2759 var type = this.DataSource.getProperty(fRes, "type"); 2760 if(!fid || !dbtype || type=="localfolder") continue; 2761 var acceltext = window.top.bitsShortcutService.getAcceltext(fid,dbtype); 2762 if(!acceltext) acceltext = ""; 2763 this.DataSource.setProperty(fRes, "shortcut", acceltext); 2764 } 2765 this.DataSource.flush(); 2766 }else{ 2767 if(elem) elem.setAttribute("hidden","true"); 2768 } 2769 }, 2770 2771 rebuildCallback : function(aStatus){ 2772 switch(aStatus.status){ 2773 case 0: 2774 mcTreeViewModeService.PROGRESS.setAttribute("value","0%"); 2775 mcTreeViewModeService.PROGRESS.removeAttribute("hidden"); 2776 break; 2777 case 1: 2778 case 2: 2779 case 3: 2780 mcTreeViewModeService.PROGRESS.removeAttribute("hidden"); 2781 mcTreeViewModeService.PROGRESS.setAttribute("value",aStatus.value+"%"); 2782 break; 2783 case 4: 2784 var dsEnum = mcTreeHandler.TREE.database.GetDataSources(); 2785 while(dsEnum.hasMoreElements()){ 2786 var ds = dsEnum.getNext().QueryInterface(Components.interfaces.nsIRDFDataSource); 2787 mcTreeHandler.TREE.database.RemoveDataSource(ds); 2788 } 2789 mcTreeViewModeService.DataSource.refresh(); 2790 mcTreeHandler.TREE.database.AddDataSource(mcTreeViewModeService.DataSource.data); 2791 mcTreeCssService.init(); 2792 mcTreeHandler.TREE.builder.rebuild(); 2793 mcTreeRootFolder.rebuild(); 2794 mcPropertyView.dispProperty(mcTreeHandler.object); 2795 mcTreeHandler.openAllFolders(); 2796 mcTreeViewModeService.PROGRESS.setAttribute("hidden","true"); 2797 break; 2798 default: 2799 break; 2800 } 2801 }, 3011 this.BUTTON.setAttribute("label", label + " "); 3012 }, 3013 onClick: function(aEvent) { 3014 var viewmode = aEvent.target.value; 3015 if (mcTreeViewModeService.dbupdateTimer) 3016 clearTimeout(mcTreeViewModeService.dbupdateTimer); 3017 if (viewmode == "each") 3018 mcTreeHandler.TREE.setAttribute("ref", this.DataSource.ABOUT_ROOT); //æ«å®åŠç 3019 this.rebuild(); 3020 if (viewmode == "each") 3021 mcTreeHandler.openAllFolders(); 3022 aEvent.stopPropagation(); 3023 }, 3024 rebuild: function() { 3025 try { 3026 var currentTreeIndex = mcTreeHandler.TREE.currentIndex; 3027 var currentTreeRes = null; 3028 if (currentTreeIndex >= 0) 3029 currentTreeRes = mcTreeHandler.TREE.builderView.getResourceAtIndex(currentTreeIndex); 3030 var firstVisibleRow = mcTreeHandler.TREE.treeBoxObject.getFirstVisibleRow(); 3031 var lastVisibleRow = mcTreeHandler.TREE.treeBoxObject.getLastVisibleRow(); 3032 this.changeTitle(); 3033 var resEnum = this.DataSource.data.GetAllResources(); 3034 while (resEnum.hasMoreElements()) { 3035 var aRes = resEnum.getNext().QueryInterface(Components.interfaces.nsIRDFResource); 3036 if (aRes.Value != this.DataSource.ABOUT_ROOT) 3037 this.DataSource.removeResource(aRes); 3038 } 3039 var dsEnum = mcTreeHandler.TREE.database.GetDataSources(); 3040 while (dsEnum.hasMoreElements()) { 3041 var ds = dsEnum.getNext().QueryInterface(Components.interfaces.nsIRDFDataSource); 3042 mcTreeHandler.TREE.database.RemoveDataSource(ds); 3043 } 3044 mcTreeHandler.TREE.treeBoxObject.clearStyleAndImageCaches(); 3045 mcTreeHandler.TREE.builder.rebuild(); 3046 if (mcTreeViewModeService.viewmode == "each") { 3047 window.top.bitsMarkingCollection.rebuildRdf(mcTreeViewModeService.rebuildCallback); 3048 } else { 3049 try { 3050 window.top.bitsMarkingCollection.rebuildRdf(); 3051 } catch (ex) { 3052 _dump("mcTreeViewModeService.rebuild(1):" + ex); 3053 } 3054 this.DataSource.refresh(); 3055 mcTreeCssService.init(); 3056 mcTreeHandler.TREE.database.AddDataSource(this.DataSource.data); 3057 mcTreeHandler.TREE.builder.rebuild(); 3058 mcTreeRootFolder.rebuild(); 3059 if (currentTreeIndex < 0) 3060 currentTreeIndex = 0; 3061 try { 3062 var selectRes = mcTreeHandler.TREE.builderView.getResourceAtIndex(currentTreeIndex); 3063 } catch (ex2) { 3064 selectRes = null; 3065 } 3066 if (!selectRes) 3067 currentTreeIndex = 0; 3068 if (firstVisibleRow <= currentTreeIndex && currentTreeIndex <= lastVisibleRow && currentTreeRes) { 3069 var idx = mcTreeHandler.TREE.builderView.getIndexOfResource(currentTreeRes); 3070 if (idx >= 0) 3071 mcTreeHandler.TREE.currentIndex = idx; 3072 } 3073 if (!mcTreeHandler.TREE.view.selection.isSelected(mcTreeHandler.TREE.currentIndex)) 3074 mcTreeHandler.TREE.view.selection.select(mcTreeHandler.TREE.currentIndex); 3075 mcTreeHandler.TREE.treeBoxObject.ensureRowIsVisible(currentTreeIndex); 3076 if (firstVisibleRow >= 0) 3077 mcTreeHandler.TREE.treeBoxObject.scrollToRow(firstVisibleRow); 3078 mcPropertyView.dispProperty(mcTreeHandler.object); 3079 this.showShortcutKey(); 3080 setTimeout(function() { 3081 mcTreeRdfRebuildItem.init(); 3082 }, 0); 3083 return; 3084 } 3085 } catch (ex) { 3086 _dump("mcTreeViewModeService.rebuild():" + ex); 3087 } 3088 }, 3089 showShortcutKey: function() { 3090 var elem = document.getElementById("mcTreeColShortcut"); 3091 var show_shortcut = nsPreferences.getBoolPref("wiredmarker.shortcut.tree_disp", true); 3092 if (show_shortcut) { 3093 if (elem) 3094 elem.removeAttribute("hidden"); 3095 var resAllFolder = this.DataSource.flattenResources(this.Common.RDF.GetResource(this.DataSource.ABOUT_ROOT), 1, true); 3096 var rcnt; 3097 for (rcnt = 0; rcnt < resAllFolder.length; rcnt++) { 3098 var fRes = resAllFolder[rcnt]; 3099 if (fRes.Value == this.DataSource.ABOUT_ROOT) 3100 continue; 3101 var fid = this.DataSource.getProperty(fRes, "id"); 3102 var dbtype = this.DataSource.getProperty(fRes, "dbtype"); 3103 var type = this.DataSource.getProperty(fRes, "type"); 3104 if (!fid || !dbtype || type == "localfolder") 3105 continue; 3106 var acceltext = window.top.bitsShortcutService.getAcceltext(fid, dbtype); 3107 if (!acceltext) 3108 acceltext = ""; 3109 this.DataSource.setProperty(fRes, "shortcut", acceltext); 3110 } 3111 this.DataSource.flush(); 3112 } else { 3113 if (elem) 3114 elem.setAttribute("hidden", "true"); 3115 } 3116 }, 3117 rebuildCallback: function(aStatus) { 3118 switch (aStatus.status) { 3119 case 0: 3120 mcTreeViewModeService.PROGRESS.setAttribute("value", "0%"); 3121 mcTreeViewModeService.PROGRESS.removeAttribute("hidden"); 3122 break; 3123 case 1: 3124 case 2: 3125 case 3: 3126 mcTreeViewModeService.PROGRESS.removeAttribute("hidden"); 3127 mcTreeViewModeService.PROGRESS.setAttribute("value", aStatus.value + "%"); 3128 break; 3129 case 4: 3130 var dsEnum = mcTreeHandler.TREE.database.GetDataSources(); 3131 while (dsEnum.hasMoreElements()) { 3132 var ds = dsEnum.getNext().QueryInterface(Components.interfaces.nsIRDFDataSource); 3133 mcTreeHandler.TREE.database.RemoveDataSource(ds); 3134 } 3135 mcTreeViewModeService.DataSource.refresh(); 3136 mcTreeHandler.TREE.database.AddDataSource(mcTreeViewModeService.DataSource.data); 3137 mcTreeCssService.init(); 3138 mcTreeHandler.TREE.builder.rebuild(); 3139 mcTreeRootFolder.rebuild(); 3140 mcPropertyView.dispProperty(mcTreeHandler.object); 3141 mcTreeHandler.openAllFolders(); 3142 mcTreeViewModeService.PROGRESS.setAttribute("hidden", "true"); 3143 break; 3144 default: 3145 break; 3146 } 3147 }, 2802 3148 }; 2803 3149 2804 3150 ///////////////////////////////////////////////////////////////////// 2805 3151 var mcTreeImageTooltip = { 2806 get tooltipRow(){ return window.top.bitsImageTooltip.tooltipRow; }, 2807 2808 init : function(){ 2809 window.top.bitsImageTooltip.init(); 2810 }, 2811 2812 done : function(){ 2813 window.top.bitsImageTooltip.done(); 2814 }, 2815 2816 onMousedown : function(aEvent){ 2817 window.top.bitsImageTooltip.onMousedown(aEvent); 2818 }, 2819 2820 onMouseout : function(aEvent){ 2821 window.top.bitsImageTooltip.onMouseout(aEvent); 2822 }, 2823 2824 hidePopup : function(){ 2825 window.top.bitsImageTooltip.hidePopup(); 2826 }, 2827 2828 onMousemove : function(aEvent,aParam){ 2829 window.top.bitsImageTooltip.onMousemove(aEvent,aParam); 2830 }, 3152 get tooltipRow() { 3153 return window.top.bitsImageTooltip.tooltipRow; 3154 }, 3155 init: function() { 3156 window.top.bitsImageTooltip.init(); 3157 }, 3158 done: function() { 3159 window.top.bitsImageTooltip.done(); 3160 }, 3161 onMousedown: function(aEvent) { 3162 window.top.bitsImageTooltip.onMousedown(aEvent); 3163 }, 3164 onMouseout: function(aEvent) { 3165 window.top.bitsImageTooltip.onMouseout(aEvent); 3166 }, 3167 hidePopup: function() { 3168 window.top.bitsImageTooltip.hidePopup(); 3169 }, 3170 onMousemove: function(aEvent, aParam) { 3171 window.top.bitsImageTooltip.onMousemove(aEvent, aParam); 3172 }, 2831 3173 }; 2832 3174 2833 3175 ///////////////////////////////////////////////////////////////////// 2834 3176 var mcTreeRdfRebuildItem = { 2835 _init : false, 2836 timerid : null, 2837 rdfdoc : null, 2838 nsResolver : null, 2839 xmlNode : null, 2840 2841 progressWindow : null, 2842 2843 folderFilterHash : {}, 2844 2845 resOpenFolder : [], 2846 resLoadFolder : [], 2847 resAllFolder : [], 2848 itemObjects : [], 2849 viewmode : "", 2850 2851 get DataSource(){ return window.top.bitsObjectMng.DataSource; }, 2852 get Common() { return window.top.bitsObjectMng.Common; }, 2853 get Database() { return window.top.bitsObjectMng.Database; }, 2854 get gBrowser() { return window.top.bitsObjectMng.getBrowser();}, 2855 2856 get uriRDF(){ return "http://www.w3.org/1999/02/22-rdf-syntax-ns#"; }, 2857 get uriNS1(){ return "http://www.bits.cc/Wired-Marker/wiredmarker-rdf#"; }, 2858 2859 init : function(){ 2860 try{ 2861 this.unsetTreeEvent(); 2862 if(mcItemView.isChecked){ 2863 this.setTreeEvent(); 2864 if(bitsTreeDate.isChecked){ 2865 bitsTreeDate.onSelectTab(); 2866 }else{ 2867 mcItemView.onTreeClick(); 2868 } 2869 return;; 2870 } 2871 this._init = true; 2872 if(this.timerid) clearTimeout(this.timerid); 2873 this.timerid = null; 2874 this.viewmode = mcTreeViewModeService.viewmode; 2875 this.doc_url = this.Common.getURLStringFromDocument(this.gBrowser.contentDocument); 2876 if(this.progressWindow && !this.progressWindow.closed) this.progressWindow.close(); 2877 this.progressWindow = null; 2878 if(!this.progressWindow){ 2879 var x = screen.width; 2880 var y = screen.height; 2881 } 2882 var i; 2883 this.rdfdoc = null; 2884 this.nsResolver = null; 2885 this.xmlNode = null; 2886 var aRdfFile = this.DataSource.file.clone(); 2887 var rdf = this.Common.convertToUnicode(this.Common.readFile(aRdfFile),"UTF-8"); 2888 if(rdf && rdf != ""){ 2889 var parser = new DOMParser(); 2890 this.rdfdoc = parser.parseFromString(rdf, "text/xml"); 2891 parser = undefined; 2892 if(this.rdfdoc) this.nsResolver = this.rdfdoc.createNSResolver( this.rdfdoc.ownerDocument == null ? this.rdfdoc.documentElement : this.rdfdoc.ownerDocument.documentElement); 2893 rdf = undefined; 2894 } 2895 this.resOpenFolder.length = 0; 2896 this.resLoadFolder = []; 2897 this.resAllFolder.length = 0; 2898 this.itemObjects.length = 0; 2899 if(mcTreeHandler.TREE.view){ 2900 for(i=0;i<mcTreeHandler.TREE.view.rowCount;i++){ 2901 if(mcTreeHandler.TREE.view.isContainer(i) && mcTreeHandler.TREE.view.isContainerOpen(i)){ 2902 var res = mcTreeHandler.TREE.builderView.getResourceAtIndex(i); 2903 this.resOpenFolder.push(res); 2904 } 2905 } 2906 } 2907 this.resAllFolder = this.DataSource.flattenResources(this.Common.RDF.GetResource(this.DataSource.ABOUT_ROOT), 1, true); 2908 this.timerid = setTimeout(function(){ mcTreeRdfRebuildItem.exec(); }, 0); 2909 this.folderFilterHash = {}; 2910 var tmpFolderFilter = nsPreferences.copyUnicharPref("wiredmarker.filter.folder",""); 2911 var tmpFolderFilterArr = tmpFolderFilter.split("\t"); 2912 var i; 2913 for(i=0;i<tmpFolderFilterArr.length;i++){ 2914 if(!tmpFolderFilterArr[i].match(/^(\d+):(\d+):(.+)$/)) continue; 2915 var filter_fid = RegExp.$1; 2916 var filter_casesensitive = RegExp.$2; 2917 var filter_keyword = RegExp.$3; 2918 this.folderFilterHash[filter_fid] = new RegExp(filter_keyword,(filter_casesensitive==1)?"mg":"img"); 2919 } 2920 tmpFolderFilterArr = undefined; 2921 tmpFolderFilter = undefined; 2922 if(this.progressWindow && !this.progressWindow.closed){ 2923 if(this.resOpenFolder.length>0 || this.resAllFolder.length>0){ 2924 if(this.progressWindow.setStatus) this.progressWindow.setStatus(mcMainService.STRING.getString("MSG_LOADING_SCRAP") + "... [ "+ (this.resOpenFolder.length + this.resAllFolder.length) + " ]"); 2925 }else{ 2926 if(this.progressWindow && !this.progressWindow.closed) this.progressWindow.close(); 2927 this.progressWindow = null; 2928 } 2929 } 2930 }catch(e){ 2931 _dump("mcTreeRdfRebuildItem.init():"+e); 2932 } 2933 }, 2934 2935 exec : function(){ 2936 try{ 2937 var fRes = null; 2938 if(this.resOpenFolder.length>0){ 2939 fRes = this.resOpenFolder.shift(); 2940 }else if(this.resAllFolder.length>0){ 2941 fRes = this.resAllFolder.shift(); 2942 } 2943 if(this.progressWindow && !this.progressWindow.closed){ 2944 if(fRes){ 2945 var title = this.DataSource.getProperty(fRes, "title"); 2946 if(this.progressWindow.setStatus) this.progressWindow.setStatus(mcMainService.STRING.getString("MSG_LOADING_SCRAP") + "... [ "+ (this.resOpenFolder.length + this.resAllFolder.length + 1) + " ]"); 2947 } 2948 } 2949 if(!fRes){ 2950 this.done(); 2951 return; 2952 } 2953 if(this.itemObjects) this.itemObjects.length = 0; 2954 this.itemObjects = []; 2955 if(this.resLoadFolder[fRes.Value] == undefined){ 2956 var j; 2957 var fid = this.DataSource.getProperty(fRes, "id"); 2958 var dbtype = this.DataSource.getProperty(fRes, "dbtype"); 2959 if(fid && dbtype){ 2960 if(this.viewmode == "all"){ 2961 this.itemObjects = this.Database.getObjectFormPID(fid, dbtype); 2962 }else{ 2963 this.itemObjects = this.Database.getObject({pfid:fid,doc_url:this.doc_url}, dbtype); 2964 } 2965 } 2966 if(this.itemObjects && this.itemObjects.length>0 && this.folderFilterHash[fid]){ 2967 var newObj = []; 2968 for(j=0;j<this.itemObjects.length;j++){ 2969 var obj = this.itemObjects[j]; 2970 if(this.folderFilterHash[obj.pfid] && !obj.oid_title.match(this.folderFilterHash[obj.pfid])) continue; 2971 newObj.push(obj); 2972 } 2973 this.itemObjects = newObj; 2974 } 2975 if(this.itemObjects && this.itemObjects.length>0){ 2976 this.xmlNode = null; 2977 if(this.rdfdoc && this.nsResolver){ 2978 var xPathXML = this.rdfdoc.evaluate('//RDF:Seq[@RDF:about="'+ fRes.Value + '"]', this.rdfdoc, this.nsResolver, XPathResult.FIRST_ORDERED_NODE_TYPE , null); 2979 if(xPathXML && xPathXML.singleNodeValue) this.xmlNode = xPathXML.singleNodeValue; 2980 } 2981 if(this.xmlNode){ 2982 this.timerid = setTimeout(function(){ mcTreeRdfRebuildItem.execItem(fRes); }, 0); 2983 return; 2984 } 2985 }else{ 2986 if(!this.itemObjects) this.itemObjects = []; 2987 } 2988 this.resLoadFolder[fRes.Value] = ""; 2989 } 2990 this.timerid = setTimeout(function(){ mcTreeRdfRebuildItem.exec(); }, 0); 2991 }catch(e){ 2992 _dump("mcTreeRdfRebuildItem.exec():"+e); 2993 } 2994 }, 2995 2996 execItem : function(fRes){ 2997 try{ 2998 if(!this.itemObjects || this.itemObjects.length==0){ 2999 if(this.DataSource.file.exists()){ 3000 var s = new XMLSerializer(); 3001 var rdfstr = s.serializeToString(this.rdfdoc); 3002 this.Common.writeFile(this.DataSource.file.clone(), rdfstr+"\n","UTF-8"); 3003 this.DataSource.refresh(); 3004 }else{ 3005 this.done(); 3006 return; 3007 } 3008 this.resLoadFolder[fRes.Value] = ""; 3009 this.timerid = setTimeout(function(){ mcTreeRdfRebuildItem.exec(); }, 0); 3010 return; 3011 } 3012 var EXECNUM = 10; 3013 var i; 3014 for(i=0;i<EXECNUM && this.itemObjects.length>0;i++){ 3015 var item = this.Database.makeObjectToItem(this.itemObjects.shift()); 3016 var itemKey; 3017 var xmlItem = this.rdfdoc.createElementNS(this.uriRDF, "RDF:Description"); 3018 for(itemKey in item){ 3019 if(itemKey == "about"){ 3020 xmlItem.setAttributeNS(this.uriRDF, "RDF:"+itemKey, item[itemKey]); 3021 }else if(itemKey == "list"){ 3022 continue; 3023 }else{ 3024 xmlItem.setAttributeNS(this.uriNS1, "NS1:"+itemKey, item[itemKey]); 3025 } 3026 } 3027 this.xmlNode.appendChild(this.rdfdoc.createTextNode(" ")); 3028 var xmlList = this.rdfdoc.createElementNS(this.uriRDF, "RDF:li"); 3029 xmlList.setAttributeNS(this.uriRDF, "RDF:resource", item.about); 3030 this.xmlNode.appendChild(xmlList); 3031 this.xmlNode.appendChild(this.rdfdoc.createTextNode("\n ")); 3032 this.rdfdoc.documentElement.appendChild(this.rdfdoc.createTextNode(" ")); 3033 this.rdfdoc.documentElement.appendChild(xmlItem); 3034 this.rdfdoc.documentElement.appendChild(this.rdfdoc.createTextNode("\n")); 3035 } 3036 this.timerid = setTimeout(function(){ mcTreeRdfRebuildItem.execItem(fRes); }, 0); 3037 }catch(e){ 3038 _dump("mcTreeRdfRebuildItem.execItem():"+e); 3039 } 3040 }, 3041 3042 done : function(){ 3043 try{ 3044 if(this.DataSource.file.exists()){ 3045 var box = mcTreeHandler.TREE.boxObject; 3046 box.QueryInterface(Components.interfaces.nsITreeBoxObject); 3047 var fvRow = box.getFirstVisibleRow(); 3048 try{ 3049 var fvRes = mcTreeHandler.TREE.builderView.getResourceAtIndex(fvRow); 3050 var resEnum = this.DataSource.data.GetAllResources(); 3051 while(resEnum.hasMoreElements()){ 3052 var aRes = resEnum.getNext().QueryInterface(Components.interfaces.nsIRDFResource); 3053 if(aRes.Value != this.DataSource.ABOUT_ROOT) this.DataSource.removeResource(aRes); 3054 } 3055 var dsEnum = mcTreeHandler.TREE.database.GetDataSources(); 3056 while(dsEnum.hasMoreElements()){ 3057 var ds = dsEnum.getNext().QueryInterface(Components.interfaces.nsIRDFDataSource); 3058 mcTreeHandler.TREE.database.RemoveDataSource(ds); 3059 } 3060 mcTreeHandler.TREE.treeBoxObject.clearStyleAndImageCaches(); 3061 mcTreeHandler.TREE.builder.rebuild(); 3062 var s = new XMLSerializer(); 3063 var rdfstr = s.serializeToString(this.rdfdoc); 3064 this.Common.writeFile(this.DataSource.file.clone(), rdfstr+"\n","UTF-8"); 3065 this.DataSource.refresh(); 3066 mcTreeCssService.init(); 3067 mcTreeHandler.TREE.database.AddDataSource(this.DataSource.data); 3068 mcTreeHandler.TREE.builder.rebuild(); 3069 mcTreeRootFolder.rebuild(); 3070 fvRow = mcTreeHandler.TREE.builderView.getIndexOfResource(this.Common.RDF.GetResource(fvRes.Value)); 3071 box.scrollToRow(fvRow); 3072 }catch(e){} 3073 this.setTreeEvent(); 3074 } 3075 }catch(ex){ 3076 _dump("mcTreeRdfRebuildItem.done():"+ex); 3077 } 3078 if(this.progressWindow && !this.progressWindow.closed) this.progressWindow.close(); 3079 this.progressWindow = null; 3080 if(this.timerid) clearTimeout(this.timerid); 3081 this.timerid = null; 3082 this.rdfdoc = null; 3083 this.nsResolver = null; 3084 this.xmlNode = null; 3085 this.resOpenFolder.length = 0; 3086 this.resLoadFolder = []; 3087 this.resAllFolder.length = 0; 3088 this.itemObjects.length = 0; 3089 }, 3090 3091 setTreeEvent : function(){ 3092 mcTreeHandler.TREE.onmousedown=function(e){ mcTreeHandler.onMousedown(e); } 3093 mcTreeHandler.TREE.onmouseup=function(e){ mcTreeHandler.onMouseup(e); } 3094 mcTreeHandler.TREE.onmousemove=function(e){ mcTreeHandler.onMousemove(e); } 3095 mcTreeHandler.TREE.onmouseout=function(e){ mcTreeHandler.onMouseout(e); } 3096 mcTreeHandler.TREE.ondblclick=function(e){ mcTreeHandler.onDblClick(e); } 3097 mcTreeHandler.TREE.onkeydown=function(e){ mcTreeHandler.onKeyDown(e); } 3098 mcTreeHandler.TREE.onkeyup=function(e){ mcTreeHandler.onKeyUp(e); } 3099 mcTreeHandler.TREE.onkeypress=function(e){ mcTreeHandler.onKeyPress(e); } 3100 mcTreeHandler.TREE.onclick=function(e){ mcTreeRdfRebuildItem.onclick(e); } 3101 var info = Components.classes["@mozilla.org/xre/app-info;1"].getService(Components.interfaces.nsIXULAppInfo); 3102 var app_version = parseFloat(info.version); 3103 if(app_version<3.1){ 3104 mcTreeHandler.TREE.addEventListener("draggesture",mcTreeRdfRebuildItem.onOldDraggesture,false); 3105 mcTreeHandler.TREE.addEventListener("dragover",mcTreeRdfRebuildItem.onOldDragover,false); 3106 mcTreeHandler.TREE.addEventListener("dragdrop",mcTreeRdfRebuildItem.onOldDragdrop,false); 3107 mcTreeHandler.TREE.addEventListener("dragexit",mcTreeRdfRebuildItem.onOldDragexit,false); 3108 }else{ 3109 mcTreeHandler.TREE.addEventListener("dragstart", mcTreeRdfRebuildItem.onDragEvents, false); 3110 mcTreeHandler.TREE.addEventListener("drag", mcTreeRdfRebuildItem.onDragEvents, false); 3111 mcTreeHandler.TREE.addEventListener("dragend", mcTreeRdfRebuildItem.onDragEvents, false); 3112 mcTreeHandler.TREE.addEventListener("dragenter", mcTreeRdfRebuildItem.onDropEvents, false); 3113 mcTreeHandler.TREE.addEventListener("dragover", mcTreeRdfRebuildItem.onDropEvents, false); 3114 mcTreeHandler.TREE.addEventListener("dragleave", mcTreeRdfRebuildItem.onDropEvents, false); 3115 mcTreeHandler.TREE.addEventListener("drop", mcTreeRdfRebuildItem.onDropEvents, false); 3116 } 3117 }, 3118 3119 unsetTreeEvent : function(){ 3120 mcTreeHandler.TREE.onmousedown=null; 3121 mcTreeHandler.TREE.onmouseup=null; 3122 mcTreeHandler.TREE.onmousemove=null; 3123 mcTreeHandler.TREE.onmouseout=null; 3124 mcTreeHandler.TREE.ondblclick=null; 3125 mcTreeHandler.TREE.onkeydown=null; 3126 mcTreeHandler.TREE.onkeyup=null; 3127 mcTreeHandler.TREE.onkeypress=null; 3128 mcTreeHandler.TREE.onclick=null; 3129 var info = Components.classes["@mozilla.org/xre/app-info;1"].getService(Components.interfaces.nsIXULAppInfo); 3130 var app_version = parseFloat(info.version); 3131 if(app_version<3.1){ 3132 mcTreeHandler.TREE.removeEventListener("draggesture",mcTreeRdfRebuildItem.onOldDraggesture,false); 3133 mcTreeHandler.TREE.removeEventListener("dragover",mcTreeRdfRebuildItem.onOldDragover,false); 3134 mcTreeHandler.TREE.removeEventListener("dragdrop",mcTreeRdfRebuildItem.onOldDragdrop,false); 3135 mcTreeHandler.TREE.removeEventListener("dragexit",mcTreeRdfRebuildItem.onOldDragexit,false); 3136 }else{ 3137 mcTreeHandler.TREE.removeEventListener("dragstart", mcTreeRdfRebuildItem.onDragEvents, false); 3138 mcTreeHandler.TREE.removeEventListener("drag", mcTreeRdfRebuildItem.onDragEvents, false); 3139 mcTreeHandler.TREE.removeEventListener("dragend", mcTreeRdfRebuildItem.onDragEvents, false); 3140 mcTreeHandler.TREE.removeEventListener("dragenter", mcTreeRdfRebuildItem.onDropEvents, false); 3141 mcTreeHandler.TREE.removeEventListener("dragover", mcTreeRdfRebuildItem.onDropEvents, false); 3142 mcTreeHandler.TREE.removeEventListener("dragleave", mcTreeRdfRebuildItem.onDropEvents, false); 3143 mcTreeHandler.TREE.removeEventListener("drop", mcTreeRdfRebuildItem.onDropEvents, false); 3144 } 3145 }, 3146 3147 onclick : function(e){ 3148 mcTreeHandler.onClick(e, 2); 3149 }, 3150 3177 _init: false, 3178 timerid: null, 3179 rdfdoc: null, 3180 nsResolver: null, 3181 xmlNode: null, 3182 progressWindow: null, 3183 folderFilterHash: {}, 3184 resOpenFolder: [], 3185 resLoadFolder: [], 3186 resAllFolder: [], 3187 itemObjects: [], 3188 viewmode: "", 3189 get DataSource() { 3190 return window.top.bitsObjectMng.DataSource; 3191 }, 3192 get Common() { 3193 return window.top.bitsObjectMng.Common; 3194 }, 3195 get Database() { 3196 return window.top.bitsObjectMng.Database; 3197 }, 3198 get gBrowser() { 3199 return window.top.bitsObjectMng.getBrowser(); 3200 }, 3201 get uriRDF() { 3202 return "http://www.w3.org/1999/02/22-rdf-syntax-ns#"; 3203 }, 3204 get uriNS1() { 3205 return "http://www.bits.cc/Wired-Marker/wiredmarker-rdf#"; 3206 }, 3207 init: function() { 3208 try { 3209 this.unsetTreeEvent(); 3210 if (mcItemView.isChecked) { 3211 this.setTreeEvent(); 3212 if (bitsTreeDate.isChecked) { 3213 bitsTreeDate.onSelectTab(); 3214 } else { 3215 mcItemView.onTreeClick(); 3216 } 3217 return; 3218 ; 3219 } 3220 this._init = true; 3221 if (this.timerid) 3222 clearTimeout(this.timerid); 3223 this.timerid = null; 3224 this.viewmode = mcTreeViewModeService.viewmode; 3225 this.doc_url = this.Common.getURLStringFromDocument(this.gBrowser.contentDocument); 3226 if (this.progressWindow && !this.progressWindow.closed) 3227 this.progressWindow.close(); 3228 this.progressWindow = null; 3229 if (!this.progressWindow) { 3230 var x = screen.width; 3231 var y = screen.height; 3232 } 3233 var i; 3234 this.rdfdoc = null; 3235 this.nsResolver = null; 3236 this.xmlNode = null; 3237 var aRdfFile = this.DataSource.file.clone(); 3238 var rdf = this.Common.convertToUnicode(this.Common.readFile(aRdfFile), "UTF-8"); 3239 if (rdf && rdf != "") { 3240 var parser = new DOMParser(); 3241 this.rdfdoc = parser.parseFromString(rdf, "text/xml"); 3242 parser = undefined; 3243 if (this.rdfdoc) 3244 this.nsResolver = this.rdfdoc.createNSResolver(this.rdfdoc.ownerDocument == null ? this.rdfdoc.documentElement : this.rdfdoc.ownerDocument.documentElement); 3245 rdf = undefined; 3246 } 3247 this.resOpenFolder.length = 0; 3248 this.resLoadFolder = []; 3249 this.resAllFolder.length = 0; 3250 this.itemObjects.length = 0; 3251 if (mcTreeHandler.TREE.view) { 3252 for (i = 0; i < mcTreeHandler.TREE.view.rowCount; i++) { 3253 if (mcTreeHandler.TREE.view.isContainer(i) && mcTreeHandler.TREE.view.isContainerOpen(i)) { 3254 var res = mcTreeHandler.TREE.builderView.getResourceAtIndex(i); 3255 this.resOpenFolder.push(res); 3256 } 3257 } 3258 } 3259 this.resAllFolder = this.DataSource.flattenResources(this.Common.RDF.GetResource(this.DataSource.ABOUT_ROOT), 1, true); 3260 this.timerid = setTimeout(function() { 3261 mcTreeRdfRebuildItem.exec(); 3262 }, 0); 3263 this.folderFilterHash = {}; 3264 var tmpFolderFilter = nsPreferences.copyUnicharPref("wiredmarker.filter.folder", ""); 3265 var tmpFolderFilterArr = tmpFolderFilter.split("\t"); 3266 var i; 3267 for (i = 0; i < tmpFolderFilterArr.length; i++) { 3268 if (!tmpFolderFilterArr[i].match(/^(\d+):(\d+):(.+)$/)) 3269 continue; 3270 var filter_fid = RegExp.$1; 3271 var filter_casesensitive = RegExp.$2; 3272 var filter_keyword = RegExp.$3; 3273 this.folderFilterHash[filter_fid] = new RegExp(filter_keyword, (filter_casesensitive == 1) ? "mg" : "img"); 3274 } 3275 tmpFolderFilterArr = undefined; 3276 tmpFolderFilter = undefined; 3277 if (this.progressWindow && !this.progressWindow.closed) { 3278 if (this.resOpenFolder.length > 0 || this.resAllFolder.length > 0) { 3279 if (this.progressWindow.setStatus) 3280 this.progressWindow.setStatus(mcMainService.STRING.getString("MSG_LOADING_SCRAP") + "... [ " + (this.resOpenFolder.length + this.resAllFolder.length) + " ]"); 3281 } else { 3282 if (this.progressWindow && !this.progressWindow.closed) 3283 this.progressWindow.close(); 3284 this.progressWindow = null; 3285 } 3286 } 3287 } catch (e) { 3288 _dump("mcTreeRdfRebuildItem.init():" + e); 3289 } 3290 }, 3291 exec: function() { 3292 try { 3293 var fRes = null; 3294 if (this.resOpenFolder.length > 0) { 3295 fRes = this.resOpenFolder.shift(); 3296 } else if (this.resAllFolder.length > 0) { 3297 fRes = this.resAllFolder.shift(); 3298 } 3299 if (this.progressWindow && !this.progressWindow.closed) { 3300 if (fRes) { 3301 var title = this.DataSource.getProperty(fRes, "title"); 3302 if (this.progressWindow.setStatus) 3303 this.progressWindow.setStatus(mcMainService.STRING.getString("MSG_LOADING_SCRAP") + "... [ " + (this.resOpenFolder.length + this.resAllFolder.length + 1) + " ]"); 3304 } 3305 } 3306 if (!fRes) { 3307 this.done(); 3308 return; 3309 } 3310 if (this.itemObjects) 3311 this.itemObjects.length = 0; 3312 this.itemObjects = []; 3313 if (this.resLoadFolder[fRes.Value] == undefined) { 3314 var j; 3315 var fid = this.DataSource.getProperty(fRes, "id"); 3316 var dbtype = this.DataSource.getProperty(fRes, "dbtype"); 3317 if (fid && dbtype) { 3318 if (this.viewmode == "all") { 3319 this.itemObjects = this.Database.getObjectFormPID(fid, dbtype); 3320 } else { 3321 this.itemObjects = this.Database.getObject({pfid: fid, doc_url: this.doc_url}, dbtype); 3322 } 3323 } 3324 if (this.itemObjects && this.itemObjects.length > 0 && this.folderFilterHash[fid]) { 3325 var newObj = []; 3326 for (j = 0; j < this.itemObjects.length; j++) { 3327 var obj = this.itemObjects[j]; 3328 if (this.folderFilterHash[obj.pfid] && !obj.oid_title.match(this.folderFilterHash[obj.pfid])) 3329 continue; 3330 newObj.push(obj); 3331 } 3332 this.itemObjects = newObj; 3333 } 3334 if (this.itemObjects && this.itemObjects.length > 0) { 3335 this.xmlNode = null; 3336 if (this.rdfdoc && this.nsResolver) { 3337 var xPathXML = this.rdfdoc.evaluate('//RDF:Seq[@RDF:about="' + fRes.Value + '"]', this.rdfdoc, this.nsResolver, XPathResult.FIRST_ORDERED_NODE_TYPE, null); 3338 if (xPathXML && xPathXML.singleNodeValue) 3339 this.xmlNode = xPathXML.singleNodeValue; 3340 } 3341 if (this.xmlNode) { 3342 this.timerid = setTimeout(function() { 3343 mcTreeRdfRebuildItem.execItem(fRes); 3344 }, 0); 3345 return; 3346 } 3347 } else { 3348 if (!this.itemObjects) 3349 this.itemObjects = []; 3350 } 3351 this.resLoadFolder[fRes.Value] = ""; 3352 } 3353 this.timerid = setTimeout(function() { 3354 mcTreeRdfRebuildItem.exec(); 3355 }, 0); 3356 } catch (e) { 3357 _dump("mcTreeRdfRebuildItem.exec():" + e); 3358 } 3359 }, 3360 execItem: function(fRes) { 3361 try { 3362 if (!this.itemObjects || this.itemObjects.length == 0) { 3363 if (this.DataSource.file.exists()) { 3364 var s = new XMLSerializer(); 3365 var rdfstr = s.serializeToString(this.rdfdoc); 3366 this.Common.writeFile(this.DataSource.file.clone(), rdfstr + "\n", "UTF-8"); 3367 this.DataSource.refresh(); 3368 } else { 3369 this.done(); 3370 return; 3371 } 3372 this.resLoadFolder[fRes.Value] = ""; 3373 this.timerid = setTimeout(function() { 3374 mcTreeRdfRebuildItem.exec(); 3375 }, 0); 3376 return; 3377 } 3378 var EXECNUM = 10; 3379 var i; 3380 for (i = 0; i < EXECNUM && this.itemObjects.length > 0; i++) { 3381 var item = this.Database.makeObjectToItem(this.itemObjects.shift()); 3382 var itemKey; 3383 var xmlItem = this.rdfdoc.createElementNS(this.uriRDF, "RDF:Description"); 3384 for (itemKey in item) { 3385 if (itemKey == "about") { 3386 xmlItem.setAttributeNS(this.uriRDF, "RDF:" + itemKey, item[itemKey]); 3387 } else if (itemKey == "list") { 3388 continue; 3389 } else { 3390 xmlItem.setAttributeNS(this.uriNS1, "NS1:" + itemKey, item[itemKey]); 3391 } 3392 } 3393 this.xmlNode.appendChild(this.rdfdoc.createTextNode(" ")); 3394 var xmlList = this.rdfdoc.createElementNS(this.uriRDF, "RDF:li"); 3395 xmlList.setAttributeNS(this.uriRDF, "RDF:resource", item.about); 3396 this.xmlNode.appendChild(xmlList); 3397 this.xmlNode.appendChild(this.rdfdoc.createTextNode("\n ")); 3398 this.rdfdoc.documentElement.appendChild(this.rdfdoc.createTextNode(" ")); 3399 this.rdfdoc.documentElement.appendChild(xmlItem); 3400 this.rdfdoc.documentElement.appendChild(this.rdfdoc.createTextNode("\n")); 3401 } 3402 this.timerid = setTimeout(function() { 3403 mcTreeRdfRebuildItem.execItem(fRes); 3404 }, 0); 3405 } catch (e) { 3406 _dump("mcTreeRdfRebuildItem.execItem():" + e); 3407 } 3408 }, 3409 done: function() { 3410 try { 3411 if (this.DataSource.file.exists()) { 3412 var box = mcTreeHandler.TREE.boxObject; 3413 box.QueryInterface(Components.interfaces.nsITreeBoxObject); 3414 var fvRow = box.getFirstVisibleRow(); 3415 try { 3416 var fvRes = mcTreeHandler.TREE.builderView.getResourceAtIndex(fvRow); 3417 var resEnum = this.DataSource.data.GetAllResources(); 3418 while (resEnum.hasMoreElements()) { 3419 var aRes = resEnum.getNext().QueryInterface(Components.interfaces.nsIRDFResource); 3420 if (aRes.Value != this.DataSource.ABOUT_ROOT) 3421 this.DataSource.removeResource(aRes); 3422 } 3423 var dsEnum = mcTreeHandler.TREE.database.GetDataSources(); 3424 while (dsEnum.hasMoreElements()) { 3425 var ds = dsEnum.getNext().QueryInterface(Components.interfaces.nsIRDFDataSource); 3426 mcTreeHandler.TREE.database.RemoveDataSource(ds); 3427 } 3428 mcTreeHandler.TREE.treeBoxObject.clearStyleAndImageCaches(); 3429 mcTreeHandler.TREE.builder.rebuild(); 3430 var s = new XMLSerializer(); 3431 var rdfstr = s.serializeToString(this.rdfdoc); 3432 this.Common.writeFile(this.DataSource.file.clone(), rdfstr + "\n", "UTF-8"); 3433 this.DataSource.refresh(); 3434 mcTreeCssService.init(); 3435 mcTreeHandler.TREE.database.AddDataSource(this.DataSource.data); 3436 mcTreeHandler.TREE.builder.rebuild(); 3437 mcTreeRootFolder.rebuild(); 3438 fvRow = mcTreeHandler.TREE.builderView.getIndexOfResource(this.Common.RDF.GetResource(fvRes.Value)); 3439 box.scrollToRow(fvRow); 3440 } catch (e) { 3441 } 3442 this.setTreeEvent(); 3443 } 3444 } catch (ex) { 3445 _dump("mcTreeRdfRebuildItem.done():" + ex); 3446 } 3447 if (this.progressWindow && !this.progressWindow.closed) 3448 this.progressWindow.close(); 3449 this.progressWindow = null; 3450 if (this.timerid) 3451 clearTimeout(this.timerid); 3452 this.timerid = null; 3453 this.rdfdoc = null; 3454 this.nsResolver = null; 3455 this.xmlNode = null; 3456 this.resOpenFolder.length = 0; 3457 this.resLoadFolder = []; 3458 this.resAllFolder.length = 0; 3459 this.itemObjects.length = 0; 3460 }, 3461 setTreeEvent: function() { 3462 mcTreeHandler.TREE.onmousedown = function(e) { 3463 mcTreeHandler.onMousedown(e); 3464 } 3465 mcTreeHandler.TREE.onmouseup = function(e) { 3466 mcTreeHandler.onMouseup(e); 3467 } 3468 mcTreeHandler.TREE.onmousemove = function(e) { 3469 mcTreeHandler.onMousemove(e); 3470 } 3471 mcTreeHandler.TREE.onmouseout = function(e) { 3472 mcTreeHandler.onMouseout(e); 3473 } 3474 mcTreeHandler.TREE.ondblclick = function(e) { 3475 mcTreeHandler.onDblClick(e); 3476 } 3477 mcTreeHandler.TREE.onkeydown = function(e) { 3478 mcTreeHandler.onKeyDown(e); 3479 } 3480 mcTreeHandler.TREE.onkeyup = function(e) { 3481 mcTreeHandler.onKeyUp(e); 3482 } 3483 mcTreeHandler.TREE.onkeypress = function(e) { 3484 mcTreeHandler.onKeyPress(e); 3485 } 3486 mcTreeHandler.TREE.onclick = function(e) { 3487 mcTreeRdfRebuildItem.onclick(e); 3488 } 3489 var info = Components.classes["@mozilla.org/xre/app-info;1"].getService(Components.interfaces.nsIXULAppInfo); 3490 var app_version = parseFloat(info.version); 3491 if (app_version < 3.1) { 3492 mcTreeHandler.TREE.addEventListener("draggesture", mcTreeRdfRebuildItem.onOldDraggesture, false); 3493 mcTreeHandler.TREE.addEventListener("dragover", mcTreeRdfRebuildItem.onOldDragover, false); 3494 mcTreeHandler.TREE.addEventListener("dragdrop", mcTreeRdfRebuildItem.onOldDragdrop, false); 3495 mcTreeHandler.TREE.addEventListener("dragexit", mcTreeRdfRebuildItem.onOldDragexit, false); 3496 } else { 3497 mcTreeHandler.TREE.addEventListener("dragstart", mcTreeRdfRebuildItem.onDragEvents, false); 3498 mcTreeHandler.TREE.addEventListener("drag", mcTreeRdfRebuildItem.onDragEvents, false); 3499 mcTreeHandler.TREE.addEventListener("dragend", mcTreeRdfRebuildItem.onDragEvents, false); 3500 mcTreeHandler.TREE.addEventListener("dragenter", mcTreeRdfRebuildItem.onDropEvents, false); 3501 mcTreeHandler.TREE.addEventListener("dragover", mcTreeRdfRebuildItem.onDropEvents, false); 3502 mcTreeHandler.TREE.addEventListener("dragleave", mcTreeRdfRebuildItem.onDropEvents, false); 3503 mcTreeHandler.TREE.addEventListener("drop", mcTreeRdfRebuildItem.onDropEvents, false); 3504 } 3505 }, 3506 unsetTreeEvent: function() { 3507 mcTreeHandler.TREE.onmousedown = null; 3508 mcTreeHandler.TREE.onmouseup = null; 3509 mcTreeHandler.TREE.onmousemove = null; 3510 mcTreeHandler.TREE.onmouseout = null; 3511 mcTreeHandler.TREE.ondblclick = null; 3512 mcTreeHandler.TREE.onkeydown = null; 3513 mcTreeHandler.TREE.onkeyup = null; 3514 mcTreeHandler.TREE.onkeypress = null; 3515 mcTreeHandler.TREE.onclick = null; 3516 var info = Components.classes["@mozilla.org/xre/app-info;1"].getService(Components.interfaces.nsIXULAppInfo); 3517 var app_version = parseFloat(info.version); 3518 if (app_version < 3.1) { 3519 mcTreeHandler.TREE.removeEventListener("draggesture", mcTreeRdfRebuildItem.onOldDraggesture, false); 3520 mcTreeHandler.TREE.removeEventListener("dragover", mcTreeRdfRebuildItem.onOldDragover, false); 3521 mcTreeHandler.TREE.removeEventListener("dragdrop", mcTreeRdfRebuildItem.onOldDragdrop, false); 3522 mcTreeHandler.TREE.removeEventListener("dragexit", mcTreeRdfRebuildItem.onOldDragexit, false); 3523 } else { 3524 mcTreeHandler.TREE.removeEventListener("dragstart", mcTreeRdfRebuildItem.onDragEvents, false); 3525 mcTreeHandler.TREE.removeEventListener("drag", mcTreeRdfRebuildItem.onDragEvents, false); 3526 mcTreeHandler.TREE.removeEventListener("dragend", mcTreeRdfRebuildItem.onDragEvents, false); 3527 mcTreeHandler.TREE.removeEventListener("dragenter", mcTreeRdfRebuildItem.onDropEvents, false); 3528 mcTreeHandler.TREE.removeEventListener("dragover", mcTreeRdfRebuildItem.onDropEvents, false); 3529 mcTreeHandler.TREE.removeEventListener("dragleave", mcTreeRdfRebuildItem.onDropEvents, false); 3530 mcTreeHandler.TREE.removeEventListener("drop", mcTreeRdfRebuildItem.onDropEvents, false); 3531 } 3532 }, 3533 onclick: function(e) { 3534 mcTreeHandler.onClick(e, 2); 3535 }, 3151 3536 ///////////////////////////////////////////////////////////////////// 3152 3537 // Drag & Drop Old Callback functions 3153 3538 ///////////////////////////////////////////////////////////////////// 3154 onOldDraggesture : function(e){ 3155 mcTreeDNDHandler.getModifiers(e); 3156 nsDragAndDrop.startDrag(e,mcTreeDNDHandler.dragDropObserver); 3157 e.stopPropagation(); 3158 }, 3159 onOldDragover : function(e){ 3160 nsDragAndDrop.dragOver(e,mcTreeDNDHandler.dragDropObserver); 3161 e.stopPropagation(); 3162 }, 3163 onOldDragdrop : function(e){ 3164 mcTreeDNDHandler.setDataTransfer(e); 3165 nsDragAndDrop.drop(e,mcTreeDNDHandler.dragDropObserver); 3166 e.stopPropagation(); 3167 }, 3168 onOldDragexit : function(e){ 3169 nsDragAndDrop.dragExit(e,mcTreeDNDHandler.dragDropObserver); 3170 e.stopPropagation(); 3171 }, 3172 3539 onOldDraggesture: function(e) { 3540 mcTreeDNDHandler.getModifiers(e); 3541 nsDragAndDrop.startDrag(e, mcTreeDNDHandler.dragDropObserver); 3542 e.stopPropagation(); 3543 }, 3544 onOldDragover: function(e) { 3545 nsDragAndDrop.dragOver(e, mcTreeDNDHandler.dragDropObserver); 3546 e.stopPropagation(); 3547 }, 3548 onOldDragdrop: function(e) { 3549 mcTreeDNDHandler.setDataTransfer(e); 3550 nsDragAndDrop.drop(e, mcTreeDNDHandler.dragDropObserver); 3551 e.stopPropagation(); 3552 }, 3553 onOldDragexit: function(e) { 3554 nsDragAndDrop.dragExit(e, mcTreeDNDHandler.dragDropObserver); 3555 e.stopPropagation(); 3556 }, 3173 3557 ///////////////////////////////////////////////////////////////////// 3174 3558 // Drag & Drop New Callback functions 3175 3559 ///////////////////////////////////////////////////////////////////// 3176 onDragEvents: function(aEvent){ 3177 switch(aEvent.type){ 3178 case "dragstart": 3179 mcTreeRdfRebuildItem.onDragStart(aEvent); 3180 break; 3181 case "drag": 3182 break; 3183 case "dragend": 3184 break; 3185 } 3186 }, 3187 3188 onDragStart : function(aEvent){ 3189 try{mcTreeImageTooltip.hidePopup()}catch(ex){} 3190 try{ 3191 if(aEvent.originalTarget.localName != "treechildren") return; 3192 mcTreeDNDHandler.getModifiers(aEvent); 3193 var curIdx = mcTreeHandler.TREE.currentIndex; 3194 var res = mcTreeHandler.TREE.builderView.getResourceAtIndex(curIdx); 3195 var curPar = mcTreeHandler.getParentResource(curIdx); 3196 var p_source = window.top.bitsObjectMng.DataSource.getProperty(curPar,"source"); 3197 var transferData = aEvent.dataTransfer; 3198 transferData.setData("moz/rdfitem", res.Value); 3199 }catch(ex){ 3200 _dump("mcTreeRdfRebuildItem.onDragStart():"+ex); 3201 } 3202 }, 3203 3204 onDropEvents: function(aEvent){ 3205 switch(aEvent.type){ 3206 case "dragenter": 3207 case "dragover": 3208 aEvent.preventDefault(); 3209 break; 3210 case "drop": 3211 mcTreeDNDHandler.setDataTransfer(aEvent); 3212 aEvent.preventDefault(); 3213 break; 3214 } 3215 }, 3216 3560 onDragEvents: function(aEvent) { 3561 switch (aEvent.type) { 3562 case "dragstart": 3563 mcTreeRdfRebuildItem.onDragStart(aEvent); 3564 break; 3565 case "drag": 3566 break; 3567 case "dragend": 3568 break; 3569 } 3570 }, 3571 onDragStart: function(aEvent) { 3572 try { 3573 mcTreeImageTooltip.hidePopup() 3574 } catch (ex) { 3575 } 3576 try { 3577 if (aEvent.originalTarget.localName != "treechildren") 3578 return; 3579 mcTreeDNDHandler.getModifiers(aEvent); 3580 var curIdx = mcTreeHandler.TREE.currentIndex; 3581 var res = mcTreeHandler.TREE.builderView.getResourceAtIndex(curIdx); 3582 var curPar = mcTreeHandler.getParentResource(curIdx); 3583 var p_source = window.top.bitsObjectMng.DataSource.getProperty(curPar, "source"); 3584 var transferData = aEvent.dataTransfer; 3585 transferData.setData("moz/rdfitem", res.Value); 3586 } catch (ex) { 3587 _dump("mcTreeRdfRebuildItem.onDragStart():" + ex); 3588 } 3589 }, 3590 onDropEvents: function(aEvent) { 3591 switch (aEvent.type) { 3592 case "dragenter": 3593 case "dragover": 3594 aEvent.preventDefault(); 3595 break; 3596 case "drop": 3597 mcTreeDNDHandler.setDataTransfer(aEvent); 3598 aEvent.preventDefault(); 3599 break; 3600 } 3601 }, 3217 3602 }; 3218 3603 3219 3604 ///////////////////////////////////////////////////////////////////// 3220 3605 var mcItemView = { 3221 get _bitsItemView(){ return bitsItemView; }, 3222 get _bitsItemViewToolbar(){ return document.getElementById("bitsItemViewToolbar"); }, 3223 get modAlt(){ return this._bitsItemView.modAlt; }, 3224 get modShift(){ return this._bitsItemView.modShift; }, 3225 get modCtrl(){ return this._bitsItemView.modCtrl; }, 3226 get modMeta(){ return this._bitsItemView.modMeta; }, 3227 get isChecked(){ return this._bitsItemView.isChecked; }, 3228 get object(){ return this._bitsItemView.object; }, 3229 get TREE(){ return this._bitsItemView.TREE; }, 3230 get POPUP(){ return document.getElementById("mcPopupFolder"); }, 3231 get CONTEXTMENU(){ return document.getElementById("mcPopupFolderItemViewMenu"); }, 3232 get FAVICON_POPUP(){ return document.getElementById("mcPopupFolderItemViewFaviconMenupopup"); }, 3233 get ITEM_POPUP(){ return document.getElementById("mcPopupFolderItemViewItemMenupopup"); }, 3234 get idMENUITEM(){ return "mcPopupFolderItem_"; }, 3235 init : function(aEvent){ 3236 this._bitsItemView.init(aEvent); 3237 if(this._bitsItemView.isChecked){ 3238 this.CONTEXTMENU.removeAttribute("hidden"); 3239 if(this._bitsItemViewToolbar && mcTreeViewModeService.BUTTON) this._bitsItemViewToolbar.appendChild(mcTreeViewModeService.BUTTON); 3240 this.initMenu(aEvent); 3241 var contextmenu_mode = nsPreferences.copyUnicharPref("wiredmarker.contextmenu.mode"); 3242 if(contextmenu_mode != "legacy"){ 3243 this.POPUP.addEventListener("popupshowing", this.popupMenu, false); 3244 this.FAVICON_POPUP.addEventListener("command", this.commandMenuFavicon, false); 3245 this.ITEM_POPUP.addEventListener("command", this.commandMenuItem, false); 3246 } 3247 }else{ 3248 this.CONTEXTMENU.setAttribute("hidden","true"); 3249 } 3250 }, 3251 initMenu : function(aEvent){ 3252 var contextmenu_mode = nsPreferences.copyUnicharPref("wiredmarker.contextmenu.mode"); 3253 if(contextmenu_mode == "legacy"){ 3254 if(this._bitsItemView.VTTB) this._bitsItemView.VTTB.removeAttribute("hidden"); 3255 }else{ 3256 if(this._bitsItemView.VTTB) this._bitsItemView.VTTB.setAttribute("hidden","true"); 3257 if(this._bitsItemView.VTTB && this.FAVICON_POPUP && !this.FAVICON_POPUP.hasChildNodes()){ 3258 var menuitems = this._bitsItemView.VTTB.getElementsByTagName("menuitem"); 3259 for(var i=0;i<menuitems.length;i++){ 3260 var menuitem = document.createElement("menuitem"); 3261 menuitem.setAttribute("type","radio"); 3262 menuitem.setAttribute("label",menuitems[i].getAttribute("label")); 3263 menuitem.setAttribute("id",this.idMENUITEM + menuitems[i].id); 3264 menuitem.setAttribute("target_id",menuitems[i].id); 3265 this.FAVICON_POPUP.appendChild(menuitem); 3266 } 3267 } 3268 if(this._bitsItemView.TREE && this.ITEM_POPUP && !this.ITEM_POPUP.hasChildNodes()){ 3269 var treecols = this._bitsItemView.TREE.getElementsByTagName("treecol"); 3270 for(var i=0;i<treecols.length;i++){ 3271 if(treecols[i].hasAttribute("ignoreincolumnpicker") && treecols[i].getAttribute("ignoreincolumnpicker") == "true") continue; 3272 var menuitem = document.createElement("menuitem"); 3273 menuitem.setAttribute("type","checkbox"); 3274 menuitem.setAttribute("label",treecols[i].getAttribute("label")); 3275 menuitem.setAttribute("id",this.idMENUITEM + treecols[i].id); 3276 menuitem.setAttribute("target_id",treecols[i].id); 3277 this.ITEM_POPUP.appendChild(menuitem); 3278 } 3279 } 3280 } 3281 }, 3282 getElementById : function(id){ 3283 return document.getElementById(this.idMENUITEM + id); 3284 }, 3285 popupMenu : function(aEvent){ 3286 mcItemView._popupMenu(aEvent); 3287 }, 3288 _popupMenu : function(aEvent){ 3289 if(this._bitsItemView.VTTB && this.FAVICON_POPUP && this.FAVICON_POPUP.hasChildNodes()){ 3290 var menuitems = this._bitsItemView.VTTB.getElementsByTagName("menuitem"); 3291 for(var i=0;i<menuitems.length;i++){ 3292 if(!menuitems[i].hasAttribute("checked") || menuitems[i].getAttribute("checked") == "false") continue; 3293 try{ 3294 this.getElementById(menuitems[i].id).setAttribute("checked","true"); 3295 }catch(e){} 3296 break; 3297 } 3298 } 3299 if(this._bitsItemView.TREE && this.ITEM_POPUP && this.ITEM_POPUP.hasChildNodes()){ 3300 var treecols = this._bitsItemView.TREE.getElementsByTagName("treecol"); 3301 for(var i=0;i<treecols.length;i++){ 3302 try{ 3303 if(treecols[i].hasAttribute("hidden") && treecols[i].getAttribute("hidden") == "true"){ 3304 this.getElementById(treecols[i].id).removeAttribute("checked"); 3305 }else{ 3306 this.getElementById(treecols[i].id).setAttribute("checked","true"); 3307 } 3308 }catch(e){} 3309 } 3310 } 3311 }, 3312 commandMenuFavicon : function(aEvent){ 3313 mcItemView._commandMenuFavicon(aEvent); 3314 }, 3315 _commandMenuFavicon : function(aEvent){ 3316 if(!aEvent.target.id.match(new RegExp("^"+this.idMENUITEM+"(.+$)"))) return; 3317 var id = aEvent.target.getAttribute("target_id"); 3318 var menuitem = this._bitsItemView.VTTB.ownerDocument.getElementById(id); 3319 if(menuitem){ 3320 menuitem.setAttribute("checked","true"); 3321 this._bitsItemView.onViewTypePopupCommand({target : menuitem }); 3322 } 3323 }, 3324 commandMenuItem : function(aEvent){ 3325 mcItemView._commandMenuItem(aEvent); 3326 }, 3327 _commandMenuItem : function(aEvent){ 3328 if(!aEvent.target.id.match(new RegExp("^"+this.idMENUITEM+"(.+$)"))) return; 3329 var id = aEvent.target.getAttribute("target_id"); 3330 var treecol = this._bitsItemView.TREE.ownerDocument.getElementById(id); 3331 if(treecol){ 3332 if(aEvent.target.hasAttribute("checked")){ 3333 treecol.removeAttribute("hidden"); 3334 }else{ 3335 treecol.setAttribute("hidden","true"); 3336 } 3337 } 3338 }, 3339 done : function(aEvent){ 3340 this._bitsItemView.done(aEvent); 3341 if(this._bitsItemView.isChecked){ 3342 var contextmenu_mode = nsPreferences.copyUnicharPref("wiredmarker.contextmenu.mode"); 3343 if(contextmenu_mode != "legacy"){ 3344 this.POPUP.removeEventListener("popupshowing", this.popupMenu, false); 3345 this.FAVICON_POPUP.removeEventListener("command", this.commandMenuFavicon, false); 3346 this.ITEM_POPUP.removeEventListener("command", this.commandMenuItem, false); 3347 } 3348 } 3349 }, 3350 disp : function(){ 3351 this._bitsItemView.disp(); 3352 }, 3353 onButtonClick : function(aEvent){ 3354 this._bitsItemView.onButtonClick(aEvent); 3355 }, 3356 onTreeClick : function(aEvent){ 3357 var aRes = mcTreeHandler.resource; 3358 if(aRes){ 3359 var fid = mcTreeHandler.DataSource.getProperty(aRes, "id"); 3360 var dbtype = mcTreeHandler.DataSource.getProperty(aRes, "dbtype"); 3361 var viewmode = mcTreeViewModeService.viewmode; 3362 this._bitsItemView.onTreeClick({viewmode:viewmode,fid:fid,dbtype:dbtype,res:aRes}); 3363 }else{ 3364 this._bitsItemView.onTreeClick(); 3365 } 3366 }, 3367 setSelection : function(aOID,aDBTYPE){ 3368 this._bitsItemView.setSelection(aOID,aDBTYPE); 3369 }, 3370 mergeObject : function(srcRes,dstRes){ 3371 var src_title; 3372 var dst_title; 3373 if(srcRes) src_title = mcTreeHandler.DataSource.getProperty(srcRes, "title"); 3374 if(dstRes) dst_title = mcTreeHandler.DataSource.getProperty(dstRes, "title"); 3375 if(src_title != dst_title) return 0; 3376 var fid = mcTreeHandler.DataSource.getProperty(dstRes, "id"); 3377 var dbtype = mcTreeHandler.DataSource.getProperty(dstRes, "dbtype"); 3378 return this._bitsItemView.mergeObject({fid:fid,dbtype:dbtype}); 3379 }, 3380 copyObject : function(aRes){ 3381 var fid = mcTreeHandler.DataSource.getProperty(aRes, "id"); 3382 var dbtype = mcTreeHandler.DataSource.getProperty(aRes, "dbtype"); 3383 var style = mcTreeHandler.DataSource.getProperty(aRes, "style"); 3384 this._bitsItemView.copyObject({fid:fid,dbtype:dbtype,fid_style:style}); 3606 get _bitsItemView() { 3607 return bitsItemView; 3608 }, 3609 get _bitsItemViewToolbar() { 3610 return document.getElementById("bitsItemViewToolbar"); 3611 }, 3612 get modAlt() { 3613 return this._bitsItemView.modAlt; 3614 }, 3615 get modShift() { 3616 return this._bitsItemView.modShift; 3617 }, 3618 get modCtrl() { 3619 return this._bitsItemView.modCtrl; 3620 }, 3621 get modMeta() { 3622 return this._bitsItemView.modMeta; 3623 }, 3624 get isChecked() { 3625 return this._bitsItemView.isChecked; 3626 }, 3627 get object() { 3628 return this._bitsItemView.object; 3629 }, 3630 get TREE() { 3631 return this._bitsItemView.TREE; 3632 }, 3633 get POPUP() { 3634 return document.getElementById("mcPopupFolder"); 3635 }, 3636 get CONTEXTMENU() { 3637 return document.getElementById("mcPopupFolderItemViewMenu"); 3638 }, 3639 get FAVICON_POPUP() { 3640 return document.getElementById("mcPopupFolderItemViewFaviconMenupopup"); 3641 }, 3642 get ITEM_POPUP() { 3643 return document.getElementById("mcPopupFolderItemViewItemMenupopup"); 3644 }, 3645 get idMENUITEM() { 3646 return "mcPopupFolderItem_"; 3647 }, 3648 init: function(aEvent) { 3649 this._bitsItemView.init(aEvent); 3650 if (this._bitsItemView.isChecked) { 3651 this.CONTEXTMENU.removeAttribute("hidden"); 3652 if (this._bitsItemViewToolbar && mcTreeViewModeService.BUTTON) 3653 this._bitsItemViewToolbar.appendChild(mcTreeViewModeService.BUTTON); 3654 this.initMenu(aEvent); 3655 var contextmenu_mode = nsPreferences.copyUnicharPref("wiredmarker.contextmenu.mode"); 3656 if (contextmenu_mode != "legacy") { 3657 this.POPUP.addEventListener("popupshowing", this.popupMenu, false); 3658 this.FAVICON_POPUP.addEventListener("command", this.commandMenuFavicon, false); 3659 this.ITEM_POPUP.addEventListener("command", this.commandMenuItem, false); 3660 } 3661 } else { 3662 this.CONTEXTMENU.setAttribute("hidden", "true"); 3663 } 3664 }, 3665 initMenu: function(aEvent) { 3666 var contextmenu_mode = nsPreferences.copyUnicharPref("wiredmarker.contextmenu.mode"); 3667 if (contextmenu_mode == "legacy") { 3668 if (this._bitsItemView.VTTB) 3669 this._bitsItemView.VTTB.removeAttribute("hidden"); 3670 } else { 3671 if (this._bitsItemView.VTTB) 3672 this._bitsItemView.VTTB.setAttribute("hidden", "true"); 3673 if (this._bitsItemView.VTTB && this.FAVICON_POPUP && !this.FAVICON_POPUP.hasChildNodes()) { 3674 var menuitems = this._bitsItemView.VTTB.getElementsByTagName("menuitem"); 3675 for (var i = 0; i < menuitems.length; i++) { 3676 var menuitem = document.createElement("menuitem"); 3677 menuitem.setAttribute("type", "radio"); 3678 menuitem.setAttribute("label", menuitems[i].getAttribute("label")); 3679 menuitem.setAttribute("id", this.idMENUITEM + menuitems[i].id); 3680 menuitem.setAttribute("target_id", menuitems[i].id); 3681 this.FAVICON_POPUP.appendChild(menuitem); 3682 } 3683 } 3684 if (this._bitsItemView.TREE && this.ITEM_POPUP && !this.ITEM_POPUP.hasChildNodes()) { 3685 var treecols = this._bitsItemView.TREE.getElementsByTagName("treecol"); 3686 for (var i = 0; i < treecols.length; i++) { 3687 if (treecols[i].hasAttribute("ignoreincolumnpicker") && treecols[i].getAttribute("ignoreincolumnpicker") == "true") 3688 continue; 3689 var menuitem = document.createElement("menuitem"); 3690 menuitem.setAttribute("type", "checkbox"); 3691 menuitem.setAttribute("label", treecols[i].getAttribute("label")); 3692 menuitem.setAttribute("id", this.idMENUITEM + treecols[i].id); 3693 menuitem.setAttribute("target_id", treecols[i].id); 3694 this.ITEM_POPUP.appendChild(menuitem); 3695 } 3696 } 3697 } 3698 }, 3699 getElementById: function(id) { 3700 return document.getElementById(this.idMENUITEM + id); 3701 }, 3702 popupMenu: function(aEvent) { 3703 mcItemView._popupMenu(aEvent); 3704 }, 3705 _popupMenu: function(aEvent) { 3706 if (this._bitsItemView.VTTB && this.FAVICON_POPUP && this.FAVICON_POPUP.hasChildNodes()) { 3707 var menuitems = this._bitsItemView.VTTB.getElementsByTagName("menuitem"); 3708 for (var i = 0; i < menuitems.length; i++) { 3709 if (!menuitems[i].hasAttribute("checked") || menuitems[i].getAttribute("checked") == "false") 3710 continue; 3711 try { 3712 this.getElementById(menuitems[i].id).setAttribute("checked", "true"); 3713 } catch (e) { 3714 } 3715 break; 3716 } 3717 } 3718 if (this._bitsItemView.TREE && this.ITEM_POPUP && this.ITEM_POPUP.hasChildNodes()) { 3719 var treecols = this._bitsItemView.TREE.getElementsByTagName("treecol"); 3720 for (var i = 0; i < treecols.length; i++) { 3721 try { 3722 if (treecols[i].hasAttribute("hidden") && treecols[i].getAttribute("hidden") == "true") { 3723 this.getElementById(treecols[i].id).removeAttribute("checked"); 3724 } else { 3725 this.getElementById(treecols[i].id).setAttribute("checked", "true"); 3726 } 3727 } catch (e) { 3728 } 3729 } 3730 } 3731 }, 3732 commandMenuFavicon: function(aEvent) { 3733 mcItemView._commandMenuFavicon(aEvent); 3734 }, 3735 _commandMenuFavicon: function(aEvent) { 3736 if (!aEvent.target.id.match(new RegExp("^" + this.idMENUITEM + "(.+$)"))) 3737 return; 3738 var id = aEvent.target.getAttribute("target_id"); 3739 var menuitem = this._bitsItemView.VTTB.ownerDocument.getElementById(id); 3740 if (menuitem) { 3741 menuitem.setAttribute("checked", "true"); 3742 this._bitsItemView.onViewTypePopupCommand({target: menuitem}); 3743 } 3744 }, 3745 commandMenuItem: function(aEvent) { 3746 mcItemView._commandMenuItem(aEvent); 3747 }, 3748 _commandMenuItem: function(aEvent) { 3749 if (!aEvent.target.id.match(new RegExp("^" + this.idMENUITEM + "(.+$)"))) 3750 return; 3751 var id = aEvent.target.getAttribute("target_id"); 3752 var treecol = this._bitsItemView.TREE.ownerDocument.getElementById(id); 3753 if (treecol) { 3754 if (aEvent.target.hasAttribute("checked")) { 3755 treecol.removeAttribute("hidden"); 3756 } else { 3757 treecol.setAttribute("hidden", "true"); 3758 } 3759 } 3760 }, 3761 done: function(aEvent) { 3762 this._bitsItemView.done(aEvent); 3763 if (this._bitsItemView.isChecked) { 3764 var contextmenu_mode = nsPreferences.copyUnicharPref("wiredmarker.contextmenu.mode"); 3765 if (contextmenu_mode != "legacy") { 3766 this.POPUP.removeEventListener("popupshowing", this.popupMenu, false); 3767 this.FAVICON_POPUP.removeEventListener("command", this.commandMenuFavicon, false); 3768 this.ITEM_POPUP.removeEventListener("command", this.commandMenuItem, false); 3769 } 3770 } 3771 }, 3772 disp: function() { 3773 this._bitsItemView.disp(); 3774 }, 3775 onButtonClick: function(aEvent) { 3776 this._bitsItemView.onButtonClick(aEvent); 3777 }, 3778 onTreeClick: function(aEvent) { 3779 var aRes = mcTreeHandler.resource; 3780 if (aRes) { 3781 var fid = mcTreeHandler.DataSource.getProperty(aRes, "id"); 3782 var dbtype = mcTreeHandler.DataSource.getProperty(aRes, "dbtype"); 3783 var viewmode = mcTreeViewModeService.viewmode; 3784 this._bitsItemView.onTreeClick({viewmode: viewmode, fid: fid, dbtype: dbtype, res: aRes}); 3785 } else { 3786 this._bitsItemView.onTreeClick(); 3787 } 3788 }, 3789 setSelection: function(aOID, aDBTYPE) { 3790 this._bitsItemView.setSelection(aOID, aDBTYPE); 3791 }, 3792 mergeObject: function(srcRes, dstRes) { 3793 var src_title; 3794 var dst_title; 3795 if (srcRes) 3796 src_title = mcTreeHandler.DataSource.getProperty(srcRes, "title"); 3797 if (dstRes) 3798 dst_title = mcTreeHandler.DataSource.getProperty(dstRes, "title"); 3799 if (src_title != dst_title) 3800 return 0; 3801 var fid = mcTreeHandler.DataSource.getProperty(dstRes, "id"); 3802 var dbtype = mcTreeHandler.DataSource.getProperty(dstRes, "dbtype"); 3803 return this._bitsItemView.mergeObject({fid: fid, dbtype: dbtype}); 3804 }, 3805 copyObject: function(aRes) { 3806 var fid = mcTreeHandler.DataSource.getProperty(aRes, "id"); 3807 var dbtype = mcTreeHandler.DataSource.getProperty(aRes, "dbtype"); 3808 var style = mcTreeHandler.DataSource.getProperty(aRes, "style"); 3809 this._bitsItemView.copyObject({fid: fid, dbtype: dbtype, fid_style: style}); 3385 3810 3386 3387 moveObject : function(aRes,aModShift){3388 3389 3390 3391 3392 var rtn = this._bitsItemView.moveObject({fid:fid,dbtype:dbtype,fid_style:style},aModShift);3393 if(srcRes){3394 setTimeout(function(){3395 3396 3397 3398 mcItemView._bitsItemView.onTreeClick({viewmode:viewmode,fid:fid,dbtype:dbtype,res:srcRes});3399 },0);3400 3811 }, 3812 moveObject: function(aRes, aModShift) { 3813 var srcRes = mcTreeHandler.resource; 3814 var fid = mcTreeHandler.DataSource.getProperty(aRes, "id"); 3815 var dbtype = mcTreeHandler.DataSource.getProperty(aRes, "dbtype"); 3816 var style = mcTreeHandler.DataSource.getProperty(aRes, "style"); 3817 var rtn = this._bitsItemView.moveObject({fid: fid, dbtype: dbtype, fid_style: style}, aModShift); 3818 if (srcRes) { 3819 setTimeout(function() { 3820 var fid = mcTreeHandler.DataSource.getProperty(srcRes, "id"); 3821 var dbtype = mcTreeHandler.DataSource.getProperty(srcRes, "dbtype"); 3822 var viewmode = mcTreeViewModeService.viewmode; 3823 mcItemView._bitsItemView.onTreeClick({viewmode: viewmode, fid: fid, dbtype: dbtype, res: srcRes}); 3824 }, 0); 3825 } 3401 3826 3402 3403 refresh : function(){3404 3405 3827 }, 3828 refresh: function() { 3829 this._bitsItemView.refresh(); 3830 } 3406 3831 }; 3407 3832 … … 3409 3834 ///////////////////////////////////////////////////////////////////// 3410 3835 var mcDatabaseUpdate = { 3411 _rebuild_time: 0,3412 _rebuild: false,3413 3414 get gBrowser() { return window.top.bitsObjectMng.getBrowser();}, 3415 3416 init : function(aEvent){3417 3418 3419 3420 3421 rebuild : function(aEvent){ 3422 if(!mcDatabaseUpdate._rebuild)return;3423 3836 _rebuild_time: 0, 3837 _rebuild: false, 3838 get gBrowser() { 3839 return window.top.bitsObjectMng.getBrowser(); 3840 }, 3841 init: function(aEvent) { 3842 mcDatabaseUpdate._rebuild_time = parseInt(window.top.bitsObjectMng.Common.getTimeStamp()); 3843 mcDatabaseUpdate._rebuild = false; 3844 }, 3845 rebuild: function(aEvent) { 3846 if (!mcDatabaseUpdate._rebuild) 3847 return; 3848 mcTreeViewModeService.rebuild(); 3424 3849 // mcDatabaseUpdate.gBrowser.reload(); 3425 3426 3850 mcDatabaseUpdate._rebuild = false; 3851 }, 3427 3852 }; 3428 3853 3429 3854 ///////////////////////////////////////////////////////////////////// 3430 3855 var mcDatabaseObserver = { 3431 timerid: null,3432 domain: 'wiredmarker', //"objectmng.xxx"ãšããååã®èšå®ãå€æŽãããå Žåå3856 timerid: null, 3857 domain: 'wiredmarker', //"objectmng.xxx"ãšããååã®èšå®ãå€æŽãããå Žåå 3433 3858 šãŠã§åŠçãè¡ã 3434 observe : function(aSubject, aTopic, aPrefstring){ 3435 try{ 3436 if(aTopic == 'nsPref:changed'){ 3437 switch(aPrefstring){ 3438 case "wiredmarker.last_update": 3439 var inittime = window.top.bitsObjectMng.DataSource.inittime; 3440 var value = nsPreferences.copyUnicharPref(aPrefstring,""); 3441 var arr = value.split("\t"); 3442 if(inittime != arr[2]){ 3443 if(mcDatabaseObserver.timerid) clearTimeout(mcDatabaseObserver.timerid); 3444 mcDatabaseObserver.timerid = setTimeout(function(){ mcDatabaseObserver.timerid=null; mcDatabaseUpdate._rebuild = true; }, 1000); 3445 } 3446 window.top.bitsAutocacheService.refresh(); 3447 bitsTreeDate.refresh(); 3448 window.top.bitsTreeListService.reload(); 3449 setTimeout(function(){ bitsSearchAcross.search(); },1000); 3450 break; 3451 case "wiredmarker.rebuild_addon_msg": 3452 setTimeout( 3453 function(){ 3454 if(!mcDatabaseUpdate._rebuild){ 3455 mcDatabaseUpdate._rebuild = true; 3456 mcDatabaseUpdate.rebuild(); 3457 } 3458 if(mcItemView.isChecked) mcItemView.refresh(); 3459 },0); 3460 window.top.bitsAutocacheService.refresh(); 3461 break; 3462 case "wiredmarker.shortcut.tree_disp": 3463 mcTreeViewModeService.showShortcutKey(); 3464 break; 3465 case "wiredmarker.contextmenu.mode": 3466 mcItemView.initMenu(); 3467 break; 3468 default: 3469 break; 3470 } 3471 } 3472 }catch(ex){ 3473 window.top.bitsObjectMng.Common.alert("mcDatabaseObserver:"+ex); 3474 } 3475 } 3859 observe: function(aSubject, aTopic, aPrefstring) { 3860 try { 3861 if (aTopic == 'nsPref:changed') { 3862 switch (aPrefstring) { 3863 case "wiredmarker.last_update": 3864 var inittime = window.top.bitsObjectMng.DataSource.inittime; 3865 var value = nsPreferences.copyUnicharPref(aPrefstring, ""); 3866 var arr = value.split("\t"); 3867 if (inittime != arr[2]) { 3868 if (mcDatabaseObserver.timerid) 3869 clearTimeout(mcDatabaseObserver.timerid); 3870 mcDatabaseObserver.timerid = setTimeout(function() { 3871 mcDatabaseObserver.timerid = null; 3872 mcDatabaseUpdate._rebuild = true; 3873 }, 1000); 3874 } 3875 window.top.bitsAutocacheService.refresh(); 3876 bitsTreeDate.refresh(); 3877 window.top.bitsTreeListService.reload(); 3878 setTimeout(function() { 3879 bitsSearchAcross.search(); 3880 }, 1000); 3881 break; 3882 case "wiredmarker.rebuild_addon_msg": 3883 setTimeout( 3884 function() { 3885 if (!mcDatabaseUpdate._rebuild) { 3886 mcDatabaseUpdate._rebuild = true; 3887 mcDatabaseUpdate.rebuild(); 3888 } 3889 if (mcItemView.isChecked) 3890 mcItemView.refresh(); 3891 }, 0); 3892 window.top.bitsAutocacheService.refresh(); 3893 break; 3894 case "wiredmarker.shortcut.tree_disp": 3895 mcTreeViewModeService.showShortcutKey(); 3896 break; 3897 case "wiredmarker.contextmenu.mode": 3898 mcItemView.initMenu(); 3899 break; 3900 default: 3901 break; 3902 } 3903 } 3904 } catch (ex) { 3905 window.top.bitsObjectMng.Common.alert("mcDatabaseObserver:" + ex); 3906 } 3907 } 3476 3908 }; 3477 3909 3478 3910 ///////////////////////////////////////////////////////////////////// 3479 function showConsole() {3480 3911 function showConsole() { 3912 window.open("chrome://global/content/console.xul", "_blank", "chrome,extrachrome,menubar,resizable,scrollbars,status,toolbar"); 3481 3913 } 3482 3914 … … 3484 3916 // JavaScript ã³ã³ãœãŒã«ã«ããã¹ãã衚瀺ãã 3485 3917 ///////////////////////////////////////////////////////////////////// 3486 function _dump(aString){ 3487 if(nsPreferences.getBoolPref("wiredmarker.debug", false)) window.dump(aString+"\n"); 3918 function _dump(aString) { 3919 if (nsPreferences.getBoolPref("wiredmarker.debug", false)) 3920 window.dump(aString + "\n"); 3488 3921 } 3489 function _dump2(aString){ 3490 if(!nsPreferences.getBoolPref("wiredmarker.debug", false)) return; 3491 var dumpString = new String(aString); 3492 var aConsoleService = Components.classes["@mozilla.org/consoleservice;1"].getService(Components.interfaces.nsIConsoleService); 3493 aConsoleService.logStringMessage(dumpString); 3494 window.dump(aString+"\n"); 3922 function _dump2(aString) { 3923 if (!nsPreferences.getBoolPref("wiredmarker.debug", false)) 3924 return; 3925 var dumpString = new String(aString); 3926 var aConsoleService = Components.classes["@mozilla.org/consoleservice;1"].getService(Components.interfaces.nsIConsoleService); 3927 aConsoleService.logStringMessage(dumpString); 3928 window.dump(aString + "\n"); 3495 3929 }
Note: See TracChangeset
for help on using the changeset viewer.