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())
144 iconArray = Desktop.getXMLValue(req,
"iconList");
146 iconArray = iconArray.split(
",");
150 iconArray = req.responseText.split(
",");
153 Debug.log(
"icon Array split: " + iconArray);
185 var numberOfIconFields = 7;
186 for(var i=0;i<(iconArray.length);i+=numberOfIconFields)
188 if(_permissions >= iconArray[i+3])
189 Desktop.desktop.icons.addIcon(iconArray[i],iconArray[i+1],iconArray[i+5],iconArray[i+2]|0,iconArray[i+4],iconArray[i+6]);
197 this.addIcon =
function(subtext, altText, linkurl, uniqueWin, picfn, folderPath) {
206 var i = linkurl.indexOf(
"urn:xdaq-application:lid=") + (
"urn:xdaq-application:lid=").length;
207 var isAllNumbers =
true;
208 for(i;i<linkurl.length;++i)
212 if(linkurl[i] <
"0" || linkurl[i] >
"9")
214 isAllNumbers =
false;
223 Debug.log(
"An error occurred while trying to parse the window url. " +
224 "The window path seems to be invalid: " + e, Debug.HIGH_PRIORITY);
228 this.iconNameToPathMap[subtext] = [linkurl,uniqueWin];
230 var iconContainer = document.createElement(
"div");
231 iconContainer.setAttribute(
"class",
"DesktopIcons-iconContainer");
243 var folderSplit = folderPath.split(
'/');
246 var folders = this.folders;
247 for(var i=0;i<folderSplit.length;++i)
249 if(folderSplit[i] ==
"")
continue;
251 if(folderPtr === undefined)
255 if(folderPtr[0][folderSplit[i]] === undefined)
258 folderPtr[0][folderSplit[i]] = [{},[]];
260 if(folderPtr == folders &&
261 rootFolderIndex === undefined)
262 rootFolderIndex = folderSplit[i];
265 folderPtr = folderPtr[0][folderSplit[i]];
269 if(folderPtr !== undefined)
271 Debug.log(
"folderPtr.length = " + folderPtr.length);
274 folderPtr[1].push([subtext, altText, linkurl, uniqueWin, picfn]);
275 console.log(folders);
279 if(rootFolderIndex !== undefined)
282 Debug.log(
"folderPath = " + folderPath);
283 Debug.log(
"rootFolderIndex = " + rootFolderIndex);
286 subtext = rootFolderIndex;
290 picfn =
"icon-Folder.png";
302 link = document.createElement(
"a");
303 link.setAttribute(
"class",
"DesktopIcons-iconLink");
304 link.title = subtext;
307 if(linkurl ==
"folder")
310 link.addEventListener(
"click",
function(e) {
312 e.clientX-
this.parentNode.parentNode.offsetLeft,
313 e.clientY-
this.parentNode.parentNode.offsetTop,
319 link.addEventListener(
"click",
function(e) {
320 Desktop.desktop.addWindow(subtext,
"",linkurl,uniqueWin);
324 div = document.createElement(
"div");
325 div.setAttribute(
"class",
"DesktopIcons-iconDiv");
326 div.style.width = _defaultIconWidth +
"px";
327 div.style.height = _defaultIconHeight +
"px";
328 div.style.marginLeft = (_defaultIconTextWidth-_defaultIconWidth-2)/2 +
"px";
331 if(picfn !=
"0" && picfn !=
"DEFAULT" && picfn !=
"")
334 div.style.backgroundImage =
"url(/WebPath/images/iconImages/" + picfn+
")";
336 div.style.backgroundImage =
"url(" + picfn+
")";
338 var div2 = document.createElement(
"div");
339 div2.setAttribute(
"class",
"DesktopIcons-iconDiv");
340 div2.style.width = _defaultIconWidth +
"px";
341 div2.style.height = _defaultIconHeight +
"px";
342 div2.style.marginLeft = (-1) +
"px";
343 div2.style.marginTop = (-1) +
"px";
344 div.appendChild(div2);
347 div.innerHTML =
"<table width='100%' height='100%'><td width='100%' height='100%' valign='middle' align='center'>"+
348 altText+
"</td></table>";
351 link.appendChild(div);
352 iconContainer.appendChild(link);
355 link = document.createElement(
"a");
356 link.setAttribute(
"class",
"DesktopIcons-iconLink");
357 link.title = subtext;
359 if(linkurl ==
"folder")
362 link.addEventListener(
"click",
function(e) {
364 e.clientX-
this.parentNode.parentNode.offsetLeft,
365 e.clientY-
this.parentNode.parentNode.offsetTop,
371 link.addEventListener(
"click",
function(e) {
372 Desktop.desktop.addWindow(subtext,
"",linkurl,uniqueWin);
377 div = document.createElement(
"div");
378 div.setAttribute(
"class",
"DesktopIcons-iconSubText");
379 div.style.width = _defaultIconTextWidth +
"px";
380 div.style.height = _defaultIconTextHeight +
"px";
381 div.innerHTML = subtext;
383 link.appendChild(div);
384 iconContainer.appendChild(link);
386 if(linkurl !=
"folder")
391 iconContainer.addEventListener(
"mouseup",
function(event) {
394 window.clearTimeout(_deepClickTimer);
399 var deepClickHandler =
function(event) {
400 event.cancelBubble =
true;
401 event.preventDefault();
402 _deepClickTimer = window.setTimeout(
function() {
404 Debug.log(
"Create Icon Menu");
406 "Open and Maximize Window",
407 "Open in New Browser Tab",
408 "Open and Tile All Windows"
410 var menuItemHandlers = [
411 "Desktop.desktop.addWindow(\""+ subtext +
"\",\"" +
""
412 +
"\",\"" + linkurl +
"\","+uniqueWin+
",2);",
413 "Desktop.openNewBrowserTab(\""+ subtext +
"\",\"" +
""
414 +
"\",\"" + linkurl +
"\","+uniqueWin+
");",
415 "Desktop.desktop.addWindow(\""+ subtext +
"\",\"" +
""
416 +
"\",\"" + linkurl +
"\","+uniqueWin+
",1);",
418 Debug.log(
"createEditTableMenu()");
419 SimpleContextMenu.createMenu(
422 "DesktopIconContextMenu",
423 event.pageX-1,event.pageY-1,
424 Desktop.desktop.dashboard.getDefaultDashboardColor(),
439 iconContainer.addEventListener(
"mousedown", deepClickHandler);
442 _iconsElement.appendChild(iconContainer);
447 if(_numOfIcons > 1) {
448 var cdArr = _iconsElement.getElementsByClassName(
"iconsClearDiv");
450 while(cdArr.length) cdArr[0].parentNode.removeChild(cdArr[0]);
452 var newLine = Math.ceil((-1 + Math.sqrt(_numOfIcons*8+1))/2);
453 var newLineOff = newLine;
455 var currChild = _iconsElement.childNodes[0];
456 for(var i=0;i<_numOfIcons;++i) {
458 div = document.createElement(
"div");
459 div.setAttribute(
"id",
"clearDiv");
460 div.setAttribute(
"class",
"iconsClearDiv");
461 _iconsElement.insertBefore(div,currChild);
462 newLine += --newLineOff;
464 currChild = currChild.nextSibling;
475 this.openFolder =
function(x,y,folderName) {
479 var div = document.createElement(
"div");
480 div.setAttribute(
"class",
"DesktopIcons-folderDiv");
481 div.style.padding =
"0 5px 5px 12px";
482 div.style.backgroundColor = DesktopContent.getDefaultWindowColor();
483 div.style.position =
"absolute";
484 div.style.width = (300) +
"px";
485 div.style.left = (x) +
"px";
486 div.style.top = (y) +
"px";
488 div.onmouseup =
function(event) {
event.stopPropagation();};
489 this.iconsElement.appendChild(div);
490 _openFolderElement = div;
492 div = document.createElement(
"div");
494 div.style.height = 250 +
"px";
495 div.style.position =
"relative";
496 _openFolderElement.appendChild(div);
497 _openFolderElement = div;
499 this.openSubFolder(folderName);
504 this.openSubFolder =
function(folderName) {
509 if(folderName.indexOf(
"../") >= 0)
511 var folderSplit = _openFolderPath.split(
'/');
514 for(var i=0;i<folderSplit.length;++i)
515 if(folderSplit[i] !=
"") ++fullDepth;
516 var backPathCount = 1;
517 while(folderName.indexOf(
"../",backPathCount*3) >= 0) ++backPathCount;
519 Debug.log(
"fullDepth " + fullDepth);
520 Debug.log(
"backPathCount " + backPathCount);
522 fullDepth -= backPathCount;
523 _openFolderPtr = this.folders;
524 _openFolderPath =
"/";
526 for(var i=0,backPathCount=0;backPathCount<fullDepth && i<folderSplit.length;++i)
527 if(folderSplit[i] !=
"")
529 _openFolderPtr = _openFolderPtr[0][folderSplit[i]];
530 _openFolderPath += folderSplit[i] +
"/";
534 Debug.log(
"_openFolderPath " + _openFolderPath);
535 Debug.log(
"folderName " + folderName);
537 else if(folderName !=
".")
539 _openFolderPath +=
"/" + folderName;
541 _openFolderPtr = _openFolderPtr[0][folderName];
543 _openFolderPtr = this.folders[0][folderName];
546 Debug.log(
"_openFolderPath = " + _openFolderPath);
547 console.log(_openFolderPtr);
549 if(!_openFolderPtr) {Debug.log(
"Should never happen??!");
return;}
552 var noMultiSelect =
true;
553 var maintainPreviousSelections =
false;
565 var subfolders = Object.keys(_openFolderPtr[0]);
566 for(var i=0;i<subfolders.length;++i)
568 vals.push(subfolders[i]);
569 types.push(
"folder");
571 imgURLs.push(
"/WebPath/images/iconImages/" +
576 for(var i=0;i<_openFolderPtr[1].length;++i)
578 vals.push(_openFolderPtr[1][i][0]);
582 if(_openFolderPtr[1][i][4] !=
"0" &&
583 _openFolderPtr[1][i][4] !=
"DEFAULT" &&
584 _openFolderPtr[1][i][4] !=
"")
586 imgURLs.push(
"/WebPath/images/iconImages/" +
587 _openFolderPtr[1][i][4]);
590 imgURLs.push(
"=" + _openFolderPtr[1][i][1]);
595 var pathSplit = _openFolderPath.split(
"/");
602 for(var i=0;i<pathSplit.length;++i)
603 if(pathSplit[i] !=
"") ++folderDepth;
604 Debug.log(
"folderDepth " + folderDepth);
606 var subfolderCount = 0;
607 for(var i=0;i<pathSplit.length;++i)
609 if(pathSplit[i] ==
"")
continue;
612 for(var j=0;j<folderDepth-i;++j)
614 if(navPath ==
"") navPath =
".";
617 Debug.log(
"navPath " + navPath);
621 str +=
"<a href='#' onclick='Desktop.desktop.icons.openSubFolder(\"" +
623 pathSplit[i] +
"</a>/";
630 MultiSelectBox.createSelectBox(_openFolderElement,
631 "DesktopFolderMultiSelectBox",
634 "Desktop.desktop.icons.clickFolderContents",
635 noMultiSelect,0,imgURLs,
636 "Desktop.desktop.icons.mouseDownFolderContents",
637 "Desktop.desktop.icons.mouseUpFolderContents");
638 MultiSelectBox.initMySelectBoxes(!maintainPreviousSelections);
642 this.closeFolder =
function() {
646 if(_openFolderElement)
647 _openFolderElement.parentNode.parentNode.removeChild(_openFolderElement.parentNode);
651 Debug.log(
"Ignoring close folder error: " + e);
653 _openFolderElement = 0;
654 _openFolderPath =
"";
655 _openFolderPtr = undefined;
659 this.clickFolderContents =
function(el) {
661 var i = MultiSelectBox.getSelectedIndex(el);
662 var selArr = MultiSelectBox.getSelectionArray(el);
663 var val = el.textContent;
664 var type = el.getAttribute(
"type-value");
665 var key = el.getAttribute(
"key-value")|0;
668 MultiSelectBox.dbg(
"Chosen element index:",i,
677 var target = _openFolderPtr[1][key];
679 Desktop.desktop.addWindow(target[0],
"",target[2],target[3]);
683 this.openSubFolder(val);
688 this.mouseUpFolderContents =
function(el,event) {
689 if(this.deepClickTimer)
691 window.clearTimeout(this.deepClickTimer);
692 this.deepClickTimer = 0;
699 this.mouseDownFolderContents =
function(el,event) {
700 var i = MultiSelectBox.getSelectedIndex(el);
701 var selArr = MultiSelectBox.getSelectionArray(el);
702 var val = el.textContent;
703 var type = el.getAttribute(
"type-value");
704 var key = el.getAttribute(
"key-value")|0;
706 MultiSelectBox.dbg(
"mouseDownFolderContents Chosen element index:",i,
711 if(type !=
"icon")
return;
715 var target = _openFolderPtr[1][key];
723 event.cancelBubble =
true;
724 event.preventDefault();
725 this.deepClickTimer = window.setTimeout(
function() {
727 Debug.log(
"Create Icon Menu");
729 "Open and Maximize Window",
730 "Open in New Browser Tab",
731 "Open and Tile All Windows"
733 var menuItemHandlers = [
734 "Desktop.desktop.addWindow(\""+ target[0] +
"\",\"" +
""
735 +
"\",\"" + target[2] +
"\","+target[3]+
",2);",
736 "Desktop.openNewBrowserTab(\""+ target[0] +
"\",\"" +
""
737 +
"\",\"" + target[2] +
"\","+target[3]+
");",
738 "Desktop.desktop.addWindow(\""+ target[0] +
"\",\"" +
""
739 +
"\",\"" + target[2] +
"\","+target[3]+
",1);",
741 Debug.log(
"createEditTableMenu()");
742 SimpleContextMenu.createMenu(
745 "DesktopIconContextMenu",
746 event.pageX-1,event.pageY-1,
747 Desktop.desktop.dashboard.getDefaultDashboardColor(),
759 this.iconsElement = _iconsElement = document.createElement(
"div");
760 this.iconsElement.setAttribute(
"class",
"DesktopIcons");
761 this.iconsElement.setAttribute(
"id",
"DesktopIcons");
762 this.iconsElement.style.position =
"absolute";
763 this.iconsElement.style.zIndex = z;
767 Debug.log(
"Desktop Icons created",Debug.LOW_PRIORITY);