16 if (typeof Debug ==
'undefined')
17 alert(
'ERROR: Debug is undefined! Must include Debug.js before DesktopIcons.js');
19 if (typeof SimpleContextMenu ==
'undefined')
20 Debug.log(
'ERROR: SimpleContextMenu is undefined! Must include SimpleContextMenu.js before DesktopIcons.js',Debug.HIGH_PRIORITY);
21 if (typeof MultiSelectBox ==
'undefined')
22 Debug.log(
'ERROR: MultiSelectBox is undefined! Must include MultiSelectBox.js before DesktopIcons.js',Debug.HIGH_PRIORITY);
23 if (typeof DesktopContent ==
'undefined')
24 Debug.log(
'ERROR: DesktopContent is undefined! Must include DesktopContent.js before DesktopIcons.js',Debug.HIGH_PRIORITY);
27 if (typeof Desktop ==
'undefined')
28 Debug.log(
'ERROR: Desktop is undefined! Must include Desktop.js before DesktopIcons.js',Debug.HIGH_PRIORITY);
37 Desktop.createIcons =
function(userPermissions, z) {
38 if(
false === (
this instanceof Desktop.createIcons)) {
41 return new Desktop.createIcons(userPermissions, z);
51 var _defaultIconsMargin = 50;
52 var _defaultIconWidth = 64;
53 var _defaultIconHeight = 64;
54 var _defaultIconTextWidth = 90;
55 var _defaultIconTextHeight = 32;
62 var _deepClickTimer = 0;
64 var _folders = [{},[]];
70 var _openFolderPath =
"";
71 var _openFolderElement;
73 var _iconNameToPathMap = {};
80 this.folders = _folders;
81 this.deepClickTimer = _deepClickTimer;
82 this.iconNameToPathMap = _iconNameToPathMap;
89 var _redrawIcons =
function() {
91 _iconsElement.style.left = Desktop.desktop.getDesktopContentX()+_defaultIconsMargin+
"px";
92 _iconsElement.style.top = Desktop.desktop.getDesktopContentY()+_defaultIconsMargin+
"px";
93 _iconsElement.style.width = Desktop.desktop.getDesktopContentWidth()-_defaultIconsMargin-_defaultIconsMargin+
"px";
94 _iconsElement.style.height = Desktop.desktop.getDesktopContentHeight()-_defaultIconsMargin-_defaultIconsMargin+
"px";
102 this.redrawIcons = _redrawIcons;
105 this.resetWithPermissions =
function(permissions) {
106 Debug.log(
"Desktop resetWithPermissions " + permissions,Debug.LOW_PRIORITY);
108 _permissions = permissions;
112 if(!Desktop.isWizardMode())
114 Desktop.XMLHttpRequest(
"Request?RequestType=getDesktopIcons",
"",
120 Debug.log(
"OtsWizardConfiguration");
121 Desktop.XMLHttpRequest(
"requestIcons",
"sequence=" +
122 Desktop.desktop.security, iconRequestHandler);
123 if(!_permissions) _permissions = 1;
131 var iconRequestHandler =
function(req) {
134 Desktop.desktop.icons.folders = [{},[]];
135 Desktop.desktop.icons.iconNameToPathMap = {} ;
137 _iconsElement.innerHTML =
"";
142 if(!Desktop.isWizardMode())
146 if((err = Desktop.getXMLValue(req,
"Error")) && err !=
"")
148 Debug.log(
"Error: " + err, Debug.HIGH_PRIORITY);
152 iconArray = Desktop.getXMLValue(req,
"iconList");
154 iconArray = iconArray.split(
",");
158 iconArray = req.responseText.split(
",");
161 Debug.log(
"icon Array split: " + iconArray);
193 var numberOfIconFields = 7;
194 for(var i=0;i<(iconArray.length);i+=numberOfIconFields)
196 if(_permissions >= iconArray[i+3])
197 Desktop.desktop.icons.addIcon(iconArray[i],iconArray[i+1],iconArray[i+5],iconArray[i+2]|0,iconArray[i+4],iconArray[i+6]);
205 this.addIcon =
function(subtext, altText, linkurl, uniqueWin, picfn, folderPath) {
214 var i = linkurl.indexOf(
"urn:xdaq-application:lid=") + (
"urn:xdaq-application:lid=").length;
215 var isAllNumbers =
true;
216 for(i;i<linkurl.length;++i)
220 if(linkurl[i] <
"0" || linkurl[i] >
"9")
222 isAllNumbers =
false;
231 Debug.log(
"An error occurred while trying to parse the window url. " +
232 "The window path seems to be invalid: " + e, Debug.HIGH_PRIORITY);
236 this.iconNameToPathMap[subtext] = [linkurl,uniqueWin];
238 var iconContainer = document.createElement(
"div");
239 iconContainer.setAttribute(
"class",
"DesktopIcons-iconContainer");
251 var folderSplit = folderPath.split(
'/');
254 var folders = this.folders;
255 for(var i=0;i<folderSplit.length;++i)
257 if(folderSplit[i] ==
"")
continue;
259 if(folderPtr === undefined)
263 if(folderPtr[0][folderSplit[i]] === undefined)
266 folderPtr[0][folderSplit[i]] = [{},[]];
268 if(folderPtr == folders &&
269 rootFolderIndex === undefined)
270 rootFolderIndex = folderSplit[i];
273 folderPtr = folderPtr[0][folderSplit[i]];
277 if(folderPtr !== undefined)
279 Debug.log(
"folderPtr.length = " + folderPtr.length);
282 folderPtr[1].push([subtext, altText, linkurl, uniqueWin, picfn]);
283 console.log(folders);
287 if(rootFolderIndex !== undefined)
290 Debug.log(
"folderPath = " + folderPath);
291 Debug.log(
"rootFolderIndex = " + rootFolderIndex);
294 subtext = rootFolderIndex;
298 picfn =
"icon-Folder.png";
310 link = document.createElement(
"a");
311 link.setAttribute(
"class",
"DesktopIcons-iconLink");
312 link.title = subtext;
315 if(linkurl ==
"folder")
318 link.addEventListener(
"click",
function(e) {
320 e.clientX-
this.parentNode.parentNode.offsetLeft,
321 e.clientY-
this.parentNode.parentNode.offsetTop,
327 link.addEventListener(
"click",
function(e) {
328 Desktop.desktop.addWindow(subtext,
"",linkurl,uniqueWin);
332 div = document.createElement(
"div");
333 div.setAttribute(
"class",
"DesktopIcons-iconDiv");
334 div.style.width = _defaultIconWidth +
"px";
335 div.style.height = _defaultIconHeight +
"px";
336 div.style.marginLeft = (_defaultIconTextWidth-_defaultIconWidth-2)/2 +
"px";
339 if(picfn !=
"0" && picfn !=
"DEFAULT" && picfn !=
"")
342 div.style.backgroundImage =
"url(/WebPath/images/iconImages/" + picfn+
")";
344 div.style.backgroundImage =
"url(" + picfn+
")";
346 var div2 = document.createElement(
"div");
347 div2.setAttribute(
"class",
"DesktopIcons-iconDiv");
348 div2.style.width = _defaultIconWidth +
"px";
349 div2.style.height = _defaultIconHeight +
"px";
350 div2.style.marginLeft = (-1) +
"px";
351 div2.style.marginTop = (-1) +
"px";
352 div.appendChild(div2);
355 div.innerHTML =
"<table width='100%' height='100%'><td width='100%' height='100%' valign='middle' align='center'>"+
356 altText+
"</td></table>";
359 link.appendChild(div);
360 iconContainer.appendChild(link);
363 link = document.createElement(
"a");
364 link.setAttribute(
"class",
"DesktopIcons-iconLink");
365 link.title = subtext;
367 if(linkurl ==
"folder")
370 link.addEventListener(
"click",
function(e) {
372 e.clientX-
this.parentNode.parentNode.offsetLeft,
373 e.clientY-
this.parentNode.parentNode.offsetTop,
379 link.addEventListener(
"click",
function(e) {
380 Desktop.desktop.addWindow(subtext,
"",linkurl,uniqueWin);
385 div = document.createElement(
"div");
386 div.setAttribute(
"class",
"DesktopIcons-iconSubText");
387 div.style.width = _defaultIconTextWidth +
"px";
388 div.style.height = _defaultIconTextHeight +
"px";
389 div.innerHTML = subtext;
391 link.appendChild(div);
392 iconContainer.appendChild(link);
394 if(linkurl !=
"folder")
399 iconContainer.addEventListener(
"mouseup",
function(event) {
402 window.clearTimeout(_deepClickTimer);
407 var deepClickHandler =
function(event) {
408 event.cancelBubble =
true;
409 event.preventDefault();
410 _deepClickTimer = window.setTimeout(
function() {
412 Debug.log(
"Create Icon Menu");
414 "Open and Maximize Window",
415 "Open in New Browser Tab",
416 "Open and Tile All Windows"
418 var menuItemHandlers = [
419 "Desktop.desktop.addWindow(\""+ subtext +
"\",\"" +
""
420 +
"\",\"" + linkurl +
"\","+uniqueWin+
",2);",
421 "Desktop.openNewBrowserTab(\""+ subtext +
"\",\"" +
""
422 +
"\",\"" + linkurl +
"\","+uniqueWin+
");",
423 "Desktop.desktop.addWindow(\""+ subtext +
"\",\"" +
""
424 +
"\",\"" + linkurl +
"\","+uniqueWin+
",1);",
426 Debug.log(
"createEditTableMenu()");
427 SimpleContextMenu.createMenu(
430 "DesktopIconContextMenu",
431 event.pageX-1,event.pageY-1,
432 Desktop.desktop.dashboard.getDefaultDashboardColor(),
447 iconContainer.addEventListener(
"mousedown", deepClickHandler);
450 _iconsElement.appendChild(iconContainer);
455 if(_numOfIcons > 1) {
456 var cdArr = _iconsElement.getElementsByClassName(
"iconsClearDiv");
458 while(cdArr.length) cdArr[0].parentNode.removeChild(cdArr[0]);
460 var newLine = Math.ceil((-1 + Math.sqrt(_numOfIcons*8+1))/2);
461 var newLineOff = newLine;
463 var currChild = _iconsElement.childNodes[0];
464 for(var i=0;i<_numOfIcons;++i) {
466 div = document.createElement(
"div");
467 div.setAttribute(
"id",
"clearDiv");
468 div.setAttribute(
"class",
"iconsClearDiv");
469 _iconsElement.insertBefore(div,currChild);
470 newLine += --newLineOff;
472 currChild = currChild.nextSibling;
483 this.openFolder =
function(x,y,folderName) {
487 var div = document.createElement(
"div");
488 div.setAttribute(
"class",
"DesktopIcons-folderDiv");
489 div.style.padding =
"0 5px 5px 12px";
490 div.style.backgroundColor = DesktopContent.getDefaultWindowColor();
491 div.style.position =
"absolute";
492 div.style.width = (300) +
"px";
493 div.style.left = (x) +
"px";
494 div.style.top = (y) +
"px";
496 div.onmouseup =
function(event) {
event.stopPropagation();};
497 this.iconsElement.appendChild(div);
498 _openFolderElement = div;
500 div = document.createElement(
"div");
502 div.style.height = 250 +
"px";
503 div.style.position =
"relative";
504 _openFolderElement.appendChild(div);
505 _openFolderElement = div;
507 this.openSubFolder(folderName);
512 this.openSubFolder =
function(folderName) {
517 if(folderName.indexOf(
"../") >= 0)
519 var folderSplit = _openFolderPath.split(
'/');
522 for(var i=0;i<folderSplit.length;++i)
523 if(folderSplit[i] !=
"") ++fullDepth;
524 var backPathCount = 1;
525 while(folderName.indexOf(
"../",backPathCount*3) >= 0) ++backPathCount;
527 Debug.log(
"fullDepth " + fullDepth);
528 Debug.log(
"backPathCount " + backPathCount);
530 fullDepth -= backPathCount;
531 _openFolderPtr = this.folders;
532 _openFolderPath =
"/";
534 for(var i=0,backPathCount=0;backPathCount<fullDepth && i<folderSplit.length;++i)
535 if(folderSplit[i] !=
"")
537 _openFolderPtr = _openFolderPtr[0][folderSplit[i]];
538 _openFolderPath += folderSplit[i] +
"/";
542 Debug.log(
"_openFolderPath " + _openFolderPath);
543 Debug.log(
"folderName " + folderName);
545 else if(folderName !=
".")
547 _openFolderPath +=
"/" + folderName;
549 _openFolderPtr = _openFolderPtr[0][folderName];
551 _openFolderPtr = this.folders[0][folderName];
554 Debug.log(
"_openFolderPath = " + _openFolderPath);
555 console.log(_openFolderPtr);
557 if(!_openFolderPtr) {Debug.log(
"Should never happen??!");
return;}
560 var noMultiSelect =
true;
561 var maintainPreviousSelections =
false;
573 var subfolders = Object.keys(_openFolderPtr[0]);
574 for(var i=0;i<subfolders.length;++i)
576 vals.push(subfolders[i]);
577 types.push(
"folder");
579 imgURLs.push(
"/WebPath/images/iconImages/" +
584 for(var i=0;i<_openFolderPtr[1].length;++i)
586 vals.push(_openFolderPtr[1][i][0]);
590 if(_openFolderPtr[1][i][4] !=
"0" &&
591 _openFolderPtr[1][i][4] !=
"DEFAULT" &&
592 _openFolderPtr[1][i][4] !=
"")
594 imgURLs.push(
"/WebPath/images/iconImages/" +
595 _openFolderPtr[1][i][4]);
598 imgURLs.push(
"=" + _openFolderPtr[1][i][1]);
603 var pathSplit = _openFolderPath.split(
"/");
610 for(var i=0;i<pathSplit.length;++i)
611 if(pathSplit[i] !=
"") ++folderDepth;
612 Debug.log(
"folderDepth " + folderDepth);
614 var subfolderCount = 0;
615 for(var i=0;i<pathSplit.length;++i)
617 if(pathSplit[i] ==
"")
continue;
620 for(var j=0;j<folderDepth-i;++j)
622 if(navPath ==
"") navPath =
".";
625 Debug.log(
"navPath " + navPath);
629 str +=
"<a href='#' onclick='Desktop.desktop.icons.openSubFolder(\"" +
631 pathSplit[i] +
"</a>/";
638 MultiSelectBox.createSelectBox(_openFolderElement,
639 "DesktopFolderMultiSelectBox",
642 "Desktop.desktop.icons.clickFolderContents",
643 noMultiSelect,0,imgURLs,
644 "Desktop.desktop.icons.mouseDownFolderContents",
645 "Desktop.desktop.icons.mouseUpFolderContents");
646 MultiSelectBox.initMySelectBoxes(!maintainPreviousSelections);
650 this.closeFolder =
function() {
654 if(_openFolderElement)
655 _openFolderElement.parentNode.parentNode.removeChild(_openFolderElement.parentNode);
659 Debug.log(
"Ignoring close folder error: " + e);
661 _openFolderElement = 0;
662 _openFolderPath =
"";
663 _openFolderPtr = undefined;
667 this.clickFolderContents =
function(el) {
669 var i = MultiSelectBox.getSelectedIndex(el);
670 var selArr = MultiSelectBox.getSelectionArray(el);
671 var val = el.textContent;
672 var type = el.getAttribute(
"type-value");
673 var key = el.getAttribute(
"key-value")|0;
676 MultiSelectBox.dbg(
"Chosen element index:",i,
685 var target = _openFolderPtr[1][key];
687 Desktop.desktop.addWindow(target[0],
"",target[2],target[3]);
691 this.openSubFolder(val);
696 this.mouseUpFolderContents =
function(el,event) {
697 if(this.deepClickTimer)
699 window.clearTimeout(this.deepClickTimer);
700 this.deepClickTimer = 0;
707 this.mouseDownFolderContents =
function(el,event) {
708 var i = MultiSelectBox.getSelectedIndex(el);
709 var selArr = MultiSelectBox.getSelectionArray(el);
710 var val = el.textContent;
711 var type = el.getAttribute(
"type-value");
712 var key = el.getAttribute(
"key-value")|0;
714 MultiSelectBox.dbg(
"mouseDownFolderContents Chosen element index:",i,
719 if(type !=
"icon")
return;
723 var target = _openFolderPtr[1][key];
731 event.cancelBubble =
true;
732 event.preventDefault();
733 this.deepClickTimer = window.setTimeout(
function() {
735 Debug.log(
"Create Icon Menu");
737 "Open and Maximize Window",
738 "Open in New Browser Tab",
739 "Open and Tile All Windows"
741 var menuItemHandlers = [
742 "Desktop.desktop.addWindow(\""+ target[0] +
"\",\"" +
""
743 +
"\",\"" + target[2] +
"\","+target[3]+
",2);",
744 "Desktop.openNewBrowserTab(\""+ target[0] +
"\",\"" +
""
745 +
"\",\"" + target[2] +
"\","+target[3]+
");",
746 "Desktop.desktop.addWindow(\""+ target[0] +
"\",\"" +
""
747 +
"\",\"" + target[2] +
"\","+target[3]+
",1);",
749 Debug.log(
"createEditTableMenu()");
750 SimpleContextMenu.createMenu(
753 "DesktopIconContextMenu",
754 event.pageX-1,event.pageY-1,
755 Desktop.desktop.dashboard.getDefaultDashboardColor(),
767 this.iconsElement = _iconsElement = document.createElement(
"div");
768 this.iconsElement.setAttribute(
"class",
"DesktopIcons");
769 this.iconsElement.setAttribute(
"id",
"DesktopIcons");
770 this.iconsElement.style.position =
"absolute";
771 this.iconsElement.style.zIndex = z;
775 Debug.log(
"Desktop Icons created",Debug.LOW_PRIORITY);