Author: ralfbecker
New Revision: 55213
URL: http://svn.stylite.de/viewvc/egroupware?rev=55213&view=rev
Log:
- switching minifying of javascript to use Grunt and Uglify (instead of doing it on the fly with php on every host)
- generating now a couple of bundles: api, et2, mail, calendar, jdots, pixelegg and mobile
- developers need to update minified files whenever a javascript file changes: grunt uglify[:(api|et2|mail|calendar|jdots|pixelegg|mobile)]
- minified files also contains a map file allowing to debug with them
Added:
trunk/jdots/js/fw_jdots.min.js (with props)
trunk/jdots/js/fw_jdots.min.js.map
trunk/jdots/js/fw_mobile.min.js (with props)
trunk/jdots/js/fw_mobile.min.js.map
trunk/mail/js/app.min.js (with props)
trunk/mail/js/app.min.js.map
trunk/phpgwapi/js/framework/fw_classes.js
- copied unchanged from r55202, trunk/jdots/js/egw_fw_classes.js
trunk/pixelegg/js/fw_pixelegg.min.js (with props)
trunk/pixelegg/js/fw_pixelegg.min.js.map
Removed:
trunk/jdots/js/egw_fw_classes.js
Modified:
trunk/egroupware/Gruntfile.js
trunk/egroupware/updateGruntfile.php
trunk/jdots/js/fw_jdots.js
trunk/jdots/js/fw_mobile.js
trunk/mail/inc/class.mail_zpush.inc.php
trunk/phpgwapi/inc/class.egw_framework.inc.php
trunk/phpgwapi/inc/class.egw_include_mgr.inc.php
trunk/phpgwapi/js/framework/fw_desktop.js
trunk/phpgwapi/js/jsapi/egw_files.js
trunk/pixelegg/js/fw_pixelegg.js
— trunk/egroupware/Gruntfile.js (original)
+++ trunk/egroupware/Gruntfile.js Tue Mar 1 21:45:31 2016
@@ -68,7 +68,6 @@
“phpgwapi/js/jsapi/egw_message.js”,
“phpgwapi/js/es6-promise.min.js”,
“phpgwapi/js/jsapi/app_base.js”,
-
"phpgwapi\/js\/jsapi\/egw.js",
"phpgwapi\/js\/dhtmlxtree\/codebase\/dhtmlxcommon.js",
"phpgwapi\/js\/dhtmlxtree\/sources\/dhtmlxtree.js",
"phpgwapi\/js\/dhtmlxtree\/sources\/ext\/dhtmlxtree_json.js",
@@ -188,12 +187,63 @@
},
mail: {
files: {
-
"calendar\/js\/app.min.js": [
-
"calendar\/js\/et2_widget_owner.js",
-
"calendar\/js\/et2_widget_view.js",
-
"calendar\/js\/et2_widget_timegrid.js",
-
"calendar\/js\/et2_widget_event.js",
-
"calendar\/js\/et2_widget_daycol.js",
-
"calendar\/js\/et2_widget_planner_row.js",
-
"calendar\/js\/et2_widget_planner.js",
-
"calendar\/js\/app.js"
-
]
-
}
-
},
-
jdots: {
-
files: {
-
"jdots\/js\/fw_jdots.min.js": [
-
"phpgwapi\/js\/framework\/fw_base.js",
-
"phpgwapi\/js\/framework\/fw_browser.js",
-
"phpgwapi\/js\/jquery\/mousewheel\/mousewheel.js",
-
"phpgwapi\/js\/framework\/fw_ui.js",
-
"phpgwapi\/js\/framework\/fw_classes.js",
-
"phpgwapi\/js\/framework\/fw_desktop.js",
-
"jdots\/js\/fw_jdots.js"
-
]
-
}
-
},
-
mobile: {
-
files: {
-
"jdots\/js\/fw_mobile.min.js": [
-
"phpgwapi\/js\/jquery\/fastclick\/lib\/fastclick.js",
-
"phpgwapi\/js\/framework\/fw_base.js",
-
"phpgwapi\/js\/framework\/fw_browser.js",
-
"phpgwapi\/js\/jquery\/mousewheel\/mousewheel.js",
-
"phpgwapi\/js\/framework\/fw_ui.js",
-
"phpgwapi\/js\/framework\/fw_classes.js",
-
"jdots\/js\/fw_mobile.js"
-
]
-
}
-
},
-
pixelegg: {
-
files: {
-
"pixelegg\/js\/fw_pixelegg.min.js": [
-
"phpgwapi\/js\/framework\/fw_base.js",
-
"phpgwapi\/js\/framework\/fw_browser.js",
-
"phpgwapi\/js\/jquery\/mousewheel\/mousewheel.js",
-
"phpgwapi\/js\/framework\/fw_ui.js",
-
"phpgwapi\/js\/framework\/fw_classes.js",
-
"phpgwapi\/js\/framework\/fw_desktop.js",
-
"pixelegg\/js\/slider.js",
-
"pixelegg\/js\/fw_pixelegg.js"
-
]
}
}
}
— trunk/egroupware/updateGruntfile.php (original)
+++ trunk/egroupware/updateGruntfile.php Tue Mar 1 21:45:31 2016
@@ -45,6 +45,12 @@
if ($path[0] == ‘/’) $path = substr($path, 1);
});
- // phpgwapi/js/jsapi/egw.js loaded via own tag, and we must not load it twice!
- if ($name == ‘api’ && ($key = array_search(‘phpgwapi/js/jsapi/egw.js’, $files)))
- {
-
unset($files[$key]);
- }
- //var_dump($name, $files);
if (isset($uglify[$name]))
{
@@ -53,11 +59,14 @@
}
elseif (isset($uglify[$append = substr($name, 0, -1)]))
{
-
reset($uglify[$append]['files']);
-
list($target) = each($uglify[$append]['files']);
$uglify[$append]['files'][$target] = array_merge($uglify[$append]['files'][$target], array_values($files));
}
- else // create new bundle using last file as target
{
-
$target = str_replace('.js', '.min.js', end($files));
-
$uglify[$name]['files'][$target] = array_values($files);
}
}
— trunk/jdots/js/fw_jdots.js (original)
+++ trunk/jdots/js/fw_jdots.js Tue Mar 1 21:45:31 2016
@@ -8,12 +8,14 @@
-
@description Create jdots framework
*/
-“use strict”;
/*egw:uses
jquery.jquery;
framework.fw_desktop;
*/
+
(function(window){
- “use strict”;
- /**
- jdots framework object defenition
- here we can add framework methods and also override fw_desktop methods if it is neccessary
— trunk/jdots/js/fw_jdots.min.js (added)
+++ trunk/jdots/js/fw_jdots.min.js Tue Mar 1 21:45:31 2016
@@ -1,0 +1,6 @@
+/! build Tue Mar 01 2016 21:27:42 /
+
+function egw_fw_ui_tab(_parent,_contHeaderDiv,_contDiv,_icon,_callback,_closeCallback,_tag,_pos){this.parent=_parent,this.contHeaderDiv=_contHeaderDiv,this.contDiv=_contDiv,this.title="",this.tag=_tag,this.closeable=!0,this.callback=_callback,this.closeCallback=_closeCallback,this.position=_pos,this.headerDiv=document.createElement(“span”),this.headerDiv._position=_pos,$j(this.headerDiv).addClass(“egw_fw_ui_tab_header”),this.headerDiv._callbackObject=new egw_fw_class_callback(this,_callback),$j(this.headerDiv).click(function(){this._callbackObject.call(this)}),$j(this.headerDiv).hover(function(){$j(this).hasClass(“egw_fw_ui_tab_header_active”)||$j(this).addClass(“egw_fw_ui_tab_header_hover”)},function(){$j(this).removeClass(“egw_fw_ui_tab_header_hover”)});var tab=this.headerDiv;$j(this.headerDiv).droppable({tolerance:“pointer”,over:function(){tab._callbackObject.call(tab)}}),this.closeButton=document.createElement(“span”),this.closeButton._callbackObject=new egw_fw_class_callback(th
is,_closeCallback),$j(this.closeButton).addClass(“egw_fw_ui_tab_close_button”),$j(this.closeButton).click(function(){return this._callbackObject.context.closeable?(this._callbackObject.call(this),!1):!0}),$j(this.headerDiv).append(this.closeButton);var icon=egw.image_element(_icon);$j(icon).addClass(“egw_fw_ui_tab_icon”),$j(this.headerDiv).append(icon),this.headerH1=document.createElement(“h1”),this.setTitle(""),$j(this.headerDiv).append(this.headerH1),$j(this.headerDiv).append(this.closeButton),this.contentDiv=document.createElement(“div”),$j(this.contentDiv).addClass(“egw_fw_ui_tab_content”),$j(this.contentDiv).hide();var _this=this,$_children=$j(this.contHeaderDiv).children(),_cnt=$_children.size();_cnt>0&&_pos>-1?$_children.each(function(i){return _pos<=this._position?($j(this).before(_this.headerDiv),!1):i==_cnt-1?($j(this).after(_this.headerDiv),!1):void 0}):$j(this.contHeaderDiv).append(this.headerDiv),$j(this.contDiv).append(this.contentDiv)}function egw_fw_ui_tabs(_contDiv)
{this.contDiv=_contDiv,this.contHeaderDiv=document.createElement(“div”),$j(this.contHeaderDiv).addClass(“egw_fw_ui_tabs_header”),$j(this.contDiv).append(this.contHeaderDiv),this.appHeaderContainer=$j(document.createElement(“div”)),this.appHeaderContainer.addClass(“egw_fw_ui_app_header_container”),$j(this.contDiv).append(this.appHeaderContainer),this.appHeader=$j(document.createElement(“div”)),this.appHeader.addClass(“egw_fw_ui_app_header”),this.appHeader.hide(),this.appHeaderContainer.append(this.appHeader),this.tabs=Array(),this.activeTab=null,this.tabHistory=Array()}function egw_fw_ui_category(_contDiv,_name,_title,_content,_callback,_animationCallback,_tag){this.contDiv=_contDiv,this.catName=_name,this.callback=_callback,this.animationCallback=_animationCallback,this.tag=_tag,this.headerDiv=document.createElement(“div”),$j(this.headerDiv).addClass(“egw_fw_ui_category”);var entryH1=document.createElement(“h1”);$j(entryH1).append(_title),$j(this.headerDiv).append(entryH1),this.cont
entDiv=document.createElement(“div”),this.contentDiv._parent=this,$j(this.contentDiv).addClass(“egw_fw_ui_category_content”),$j(this.contentDiv).append(_content),$j(this.contentDiv).hide(),this.headerDiv._parent=this,$j(this.headerDiv).click(function(){$j(this).hasClass(“egw_fw_ui_category_active”)?this._parent.close(!1):this._parent.open(!1)}),$j(this.contDiv).append(this.headerDiv),$j(this.contDiv).append(this.contentDiv)}function egw_fw_ui_scrollarea(_contDiv){this.startScrollSpeed=50,this.endScrollSpeed=250,this.scrollSpeedAccel=75,this.timerInterval=.04,this.contDiv=_contDiv,this.contHeight=0,this.boxHeight=0,this.scrollPos=0,this.buttonScrollOffs=0,this.maxScrollPos=0,this.buttonsVisible=!0,this.mouseOver=!1,this.scrollTime=0,this.btnUpEnabled=!0,this.btnDownEnabled=!0,this.scrollDiv=document.createElement(“div”),this.scrollDiv.style.position=“relative”,$j(this.scrollDiv).addClass(“egw_fw_ui_scrollarea”);var self=this;$j(this.scrollDiv).on(“mousewheel”,function(e,delta){var no
scroll=!1;(“OPTION”==e.target.tagName||“SELECT”==e.target.tagName||e.target.getAttribute(“class”)&&e.target.getAttribute(“class”).match(/egw_tutorial/gi))&&(noscroll=!0),delta&&!noscroll&&(e.stopPropagation(),self.scrollDelta(30-delta),self.contHeight!=this.scrollHeight&&self.update())}),this.outerDiv=document.createElement(“div”),$j(this.outerDiv).addClass(“egw_fw_ui_scrollarea_outerdiv”),$j(this.outerDiv).append(this.scrollDiv),$j(this.contDiv).children().appendTo(this.scrollDiv),$j(this.contDiv).append(this.outerDiv),this.contentDiv=this.scrollDiv,this.btnUp=document.createElement(“span”),$j(this.btnUp).addClass(“egw_fw_ui_scrollarea_button”),$j(this.btnUp).addClass(“egw_fw_ui_scrollarea_button_up”),$j(this.btnUp).hide(),this.btnUp._parent=this,$j(this.btnUp).mouseenter(function(){this._parent.mouseOverToggle(!0,-1),$j(this).addClass(“egw_fw_ui_scrollarea_button_hover”)}),$j(this.btnUp).click(function(){this._parent.setScrollPos(0)}),$j(this.btnUp).mouseleave(function(){this._pa
rent.mouseOverToggle(!1,-1),$j(this).removeClass(“egw_fw_ui_scrollarea_button_hover”)}),$j(this.outerDiv).prepend(this.btnUp),this.btnDown=document.createElement(“span”),$j(this.btnDown).addClass(“egw_fw_ui_scrollarea_button”),$j(this.btnDown).addClass(“egw_fw_ui_scrollarea_button_down”),$j(this.btnDown).hide(),this.btnDown._parent=this,$j(this.btnDown).mouseenter(function(){this._parent.mouseOverToggle(!0,1),$j(this).addClass(“egw_fw_ui_scrollarea_button_hover”)}),$j(this.btnDown).click(function(){this._parent.setScrollPos(this._parent.maxScrollPos)}),$j(this.btnDown).mouseleave(function(){this._parent.mouseOverToggle(!1,1),$j(this).removeClass(“egw_fw_ui_scrollarea_button_hover”)}),$j(this.outerDiv).prepend(this.btnDown),this.update()}function egw_fw_ui_splitter(_contDiv,_orientation,_resizeCallback,_constraints,_tag){if(this.tag=_tag,this.contDiv=_contDiv,this.orientation=_orientation,this.resizeCallback=_resizeCallback,this.startPos=0,this.constraints=[{size:0,minsize:0,maxsize:
0},{size:0,minsize:0,maxsize:0}],_constraints.constructor==Array)for(var i=0;2>i;i++)“undefined”!=typeof _constraints[i]&&(“undefined”!=typeof _constraints[i].size&&(this.constraints[i].size=_constraints[i].size),“undefined”!=typeof _constraints[i].minsize&&(this.constraints[i].minsize=_constraints[i].minsize),“undefined”!=typeof _constraints[i].maxsize&&(this.constraints[i].maxsize=_constraints[i].maxsize));this.splitterDiv=document.createElement(“div”),this.splitterDiv._parent=this,$j(this.splitterDiv).addClass(“egw_fw_ui_splitter”);var dragoptions={opacity:.7,helper:“clone”,start:function(event,ui){return this._parent.dragStartHandler.call(this._parent,event,ui)},drag:function(event,ui){return this._parent.dragHandler.call(this._parent,event,ui)},stop:function(event,ui){return this._parent.dragStopHandler.call(this._parent,event,ui)},containment:“document”,appendTo:“body”,axis:“y”,iframeFix:!0,zIndex:1e4};switch(this.orientation){case EGW_SPLITTER_HORIZONTAL:dragoptions.axis=“y”,
$j(this.splitterDiv).addClass(“egw_fw_ui_splitter_horizontal”);break;case EGW_SPLITTER_VERTICAL:dragoptions.axis=“x”,$j(this.splitterDiv).addClass(“egw_fw_ui_splitter_vertical”)}$j(this.splitterDiv).draggable(dragoptions),$j(this.splitterDiv).mouseenter(function(){$j(this).addClass(“egw_fw_ui_splitter_hover”)}),$j(this.splitterDiv).mouseleave(function(){$j(this).removeClass(“egw_fw_ui_splitter_hover”)}),$j(this.contDiv).append(this.splitterDiv)}function egw_fw_ui_toggleSidebar(_contentDiv,_toggleCallback,_callbackContext){var self=this;this.toggleCallback=_toggleCallback,this.toggleDiv=$j(document.createElement(“div”)).attr({id:“egw_fw_toggler”}).click(function(){self.onToggle(_callbackContext)});$j(document.createElement(“span”)).addClass(“et2_clickable”).appendTo(this.toggleDiv);“1”===egw.preference(“audio_effect”,“common”)&&(this.toggleAudio=$j(document.createElement(“audio”)).attr({src:“data:audio/mp3;base64,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
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/+9YAYAAAAABLAAAAAAAACWAAAAAAAAEsAAAAAAAAJYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//vWAGAAAAAASwAAAAAAAAlgAAAAAAABLAAAAAAAACWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/71gBgAAAAAEsAAAAAAAAJYAAAAAAAASwAAAAAAAAlgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/+9YAYAAAAABLAAAAAAAACWAAAAAAAAEsAAAAAAAAJYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//vWAGAAAAAASwAAAAAAAAlgAAAAAAABLAAAAAAAACWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/71gBgAAAAAEsAAAAAAAAJYAAAAAAAASwAAAAAAAAlgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/+9YAYAAAAABLAAAAAAAACWAAAAAAAAEsAAAAAAAAJYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//vWAGAAAAAASwAAAAAAAAlgAAAAAAABLAAAAAAAACWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/71gBgAAAAAEsAAAAAAAAJYAAAAAAAASwAAAAAAAAlgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAA=”}).appendTo(this.toggleDiv)),this.contDiv=$j(_contentDiv),this.contDiv.prepend(this.toggleDiv)}function egw_fw_class_application(_parentFw,_appName,_displayName,_icon,_indexUrl,_sideboxWidth,_baseUrl,_internalName){this.appName=_appName,this.internalName=_internalName,this.displayName=_displayName,this.icon=_icon,this.indexUrl=_indexUrl,this.sidebo
x_md5="",this.hasPrerequisites,this.baseUrl=_baseUrl,this.website_title="",this.app_header="",this.sideboxWidth=_sideboxWidth,
+this.parentFw=_parentFw,this.hasSideboxMenuContent=!1,this.sidemenuEntry=null,this.tab=null,this.browser=null}function egw_fw_getMenuaction(_fun){return egw_fw_class_application.prototype.getMenuaction.call(null,_fun)}function egw_fw_class_callback(_context,_proc){this.context=_context,this.proc=_proc}var fw_base=function(){“use strict”;return Class.extend({init:function(_sidemenuId,_tabsId,_webserverUrl,_sideboxSizeCallback){this.sidemenuDiv=document.getElementById(_sidemenuId),this.tabsDiv=document.getElementById(_tabsId),this.webserverUrl=_webserverUrl,this.sideboxSizeCallback=_sideboxSizeCallback,window.egw_webserverUrl=_webserverUrl,this.serializedTabState="",this.notifyTabChangeEnabled=!1,this.sidemenuUi=null,this.tabsUi=null,this.applications=new Object,this.activeApp=null,$j(window).resize(function(){window.framework.resizeHandler()}),window.egw_alertHandler=this.alertHandler,window.egw_appWindow=this.egw_appWindow,window.egw_appWindowOpen=this.egw_appWindowOpen,window.egw_g
etAppName=this.egw_getAppName},loadApplications:function(apps){this.sidemenuUi.clean(),this.tabsUi.clean();for(var defaultApp=null,restore=new Object,restore_count=0,mkRestoreEntry=function(_app,_pos,_url,_active){return{app:_app,position:_pos,url:_url,active:_active}},i=0;i<apps.length;i++){var app=apps[i],baseUrl=!1;“string”==typeof app.baseUrl&&(baseUrl=app.baseUrl);var internalName=app.name;if(“string”==typeof app.internalName&&(internalName=app.internalName),this.appData=new egw_fw_class_application(this,app.name,app.title,app.icon,app.url,app.sideboxwidth,baseUrl,internalName),app.noNavbar||(this.appData.sidemenuEntry=this.sidemenuUi.addEntry(this.appData.displayName,this.appData.icon,this.applicationClickCallback,this.appData,app.name)),app.isDefault&&app.isDefault===!0&&0===restore_count&&(defaultApp=this.appData),“undefined”!=typeof app.opened&&app.opened!==!1){defaultApp=null;var url=null;“undefined”!=typeof app.openOnce&&app.openOnce&&(url=app.openOnce),restore[this.appDa
ta.appName]=mkRestoreEntry(this.appData,app.opened,url,app.active?1:0),restore_count+=1}this.applications[this.appData.appName]=this.appData}return defaultApp&&0===restore_count&&(restore[defaultApp.appName]=mkRestoreEntry(defaultApp,0,null,1)),restore},applicationTabNavigate:function(_app,_url,_hidden,_pos){“undefined”==typeof _pos&&(_pos=-1),this.createApplicationTab(_app,_pos);var deferred=new jQuery.Deferred;if(“undefined”==typeof _url||null==_url)_url=_app.indexUrl;else if(!(null==_app.browser||this.applications[_app.appName].app_refresh||null!=_app.browser.iframe||_url!=_app.browser.currentLocation||_app.browser.currentLocation.match(/&load=[^&]+/g)&&“admin”===_app.appName))return egw_refresh("",_app.appName),_app.tab&&this.setActiveApp(_app),deferred.resolve(),deferred.promise();if(null==_app.browser){var callback=new egw_fw_class_callback(this,this.getIFrameHeight);_app.browser=new fw_browser(_app,callback),_app.tab.setContent(_app.browser.baseDiv)}return"undefined"!=typeof
_hidden&&_hidden?this.notifyTabChange(deferred):(deferred=_app.browser.browse(_url),this.setActiveApp(_app)),deferred.promise()},getIFrameHeight:function(_iframe){var height=($j(this.tabsUi.appHeaderContainer),$j(this.sidemenuDiv).height()-this.tabsUi.appHeaderContainer.outerHeight());return height},setSidebox:function(_app,_data,_md5){if(“string”==typeof _app&&(_app=this.getApplicationByName(_app)),null!=_app&&_app.sidebox_md5!=_md5&&null!=_app.sidemenuEntry){if(null!=_data){for(var contDiv=document.createElement(“div”),contJS="",i=0;i<_data.length;i++){for(var catContent="",j=0;j<_data[i].entries.length;j++){if(this.html=new Object,this.html.html=_data[i].entries[j].lang_item,this.html.js="",egw_seperateJavaScript(this.html),contJS+=this.html.js,_data[i].entries[j].icon_or_star&&(catContent+=’
’),""==_data[i].entries[j].item_link)catContent+=this.html.
html;else{var link=_data[i].entries[j].item_link;link&&(catContent+=’<a href="’+link+(_data[i].entries[j].target?’" target="’+_data[i].entries[j].target:"")+’">’+this.html.html+"")}_data[i].entries[j].icon_or_star&&(catContent+="
")}if(""!=catContent){var categoryUi=new egw_fw_ui_category(contDiv,_data[i].menu_name,_data[i].title,catContent,this.categoryOpenCloseCallback,this.categoryAnimationCallback,app),opened=egw.preference("jdots_sidebox"+_data[i].menu_name,_app.appName);“undefined”==typeof opened&&(opened=_data[i].opened),opened&&categoryUi.open(!0)}}_data.length<=0&&_app.sidemenuEntry.hideAjaxLoader();for(var forms=$j(“form”,contDiv).toArray(),i=0;i<forms.length;++i){var form=forms[i];if(0==form.action.indexOf(“javascript:”)){var action=form.action.match(/(’([^’])/)[0].substr(2);form.action=action,form.target=“egw_app_iframe_”+this.parseAppFromUrl(action).appName}}_app.sidemenuEntry.setContent(contDiv),_app.sidebox_md5=_md5,$j(contDiv).append(contJS)}if(_app.hasS
ideboxMenuContent=!0,_app==_app.parentFw.activeApp&&(_app.sideboxWidth!==!1&&this.sideboxSizeCallback(_app.sideboxWidth),_app.sidemenuEntry.parent.open(_app.sidemenuEntry),“object”==typeof app[app.appName])){var sidebox=$j("#favorite_sidebox"+_app.appName,this.sidemenuDiv),currentAppName=_app.appName;sidebox.children().sortable({items:‘li:not([data-id$=“add”])’,placeholder:“ui-fav-sortable-placeholder”,update:function(event,ui){var favSortedList=jQuery(this).sortable(“toArray”,{attribute:“data-id”});egw().set_preference(currentAppName,“fav_sort_pref”,favSortedList)}}),sidebox.length&&app[_app.appName]._init_sidebox.call(app[_app.appName],sidebox)}}},notifyTabChange:function(deferred){if(this.activeApp){var browser=this.activeApp.browser;browser&&window.setTimeout(function(){browser.callResizeHandler(),browser.iframe&&browser.iframe.contentWindow?browser.iframe.contentWindow.focus():window.focus(),deferred&&deferred.resolve()},100)}this.notifyTabChangeEnabled&&this.storeTabsStatus(
)},storeTabsStatus:function(){var data=this.assembleTabList(),serialized=egw.jsonEncode(data);serialized!=this.serializedTabState&&(this.serializedTabState=serialized,egw.jsonq(“home.jdots_framework.ajax_tab_changed_state”,[data]))},categoryOpenCloseCallback:function(opened){egw.set_preference(this.tag.appName,"jdots_sidebox"+this.catName,_opened)},categoryAnimationCallback:function(){},assembleTabList:function(){for(var result=[],i=0;i<this.tabsUi.tabs.length;i++){var tab=this.tabsUi.tabs[i];result[i]={appName:tab.tag.appName,active:tab==this.tabsUi.activeTab}}return result},createApplicationTab:function(_app,_pos){“undefined”==typeof _pos&&(_pos=-1),null==_app.tab&&(_app.tab=this.tabsUi.addTab(_app.icon,this.tabClickCallback,this.tabCloseClickCallback,_app,_pos),_app.tab.setTitle(_app.displayName),this.tabsUi.setCloseable(this.tabsUi.tabs.length>1))},applicationClickCallback:function(_sender){this.tag.parentFw.applicationTabNavigate(this.tag,this.tag.indexUrl)},tabClickCallback:
function(_sender){this.tag.parentFw.setActiveApp(this.tag)},tabCloseClickCallback:function(_sender){var app=this.tag,tabsUi=this.parent;tabsUi.tabs.length>1&&(app.browser.blank(),this.tag.parentFw.notifyTabChangeEnabled=!1,tabsUi.removeTab(this),app.tab=null,app.browser=null,app.sidemenuEntry&&app.sidemenuEntry.hideAjaxLoader(),app.parentFw.setActiveApp(tabsUi.activeTab.tag),this.tag.parentFw.notifyTabChangeEnabled=!0,this.tag.parentFw.notifyTabChange()),tabsUi.setCloseable(tabsUi.tabs.length>1),this.tag.parentFw.resizeHandler()},parseAppFromUrl:function(_url){var _app=null,matches=url.match(/menuaction=([a-z0-9-]+)./i)||_url.match(//([^/]+)/[^/]+.php/i);return matches&&(_app=this.getApplicationByName(matches[1])),_app},getApplicationByName:function(_name){return"undefined"!=typeof this.applications[_name]?this.applications[_name]:null},setWebsiteTitle:function(_app,_title,_header){“string”==typeof _app&&(_app=this.getApplicationByName(_app)),_app&&(_app.website_title=_title
,_header&&_header!=egw.lang(_app.appName)?_app.app_header=_header:_app.app_header="",_app==this.activeApp&&this.refreshAppTitle())},alertHandler:function(_message,_details){_details?alert("Error:\n “+_message+”\n\nDetails:\n "+_details):alert(_message)},callManual:function(referer){“undefined”==typeof referer&&this.activeApp&&“manual”!=this.activeApp.appName&&(referer=this.activeApp.indexUrl,this.activeApp.browser.iframe&&this.activeApp.browser.iframe.contentWindow.location&&(referer=this.activeApp.browser.iframe.contentWindow.location.href)),“undefined”!=typeof referer&&this.lin