json-object-editor
Version:
JOE the Json Object Editor | Platform Edition
346 lines (300 loc) • 19.1 kB
HTML
<html id="modern">
<head>
<meta charset="utf-8" >
<meta name="theme-color" content="#eeeeee" >
<meta name='viewport' content='initial-scale=1.0, user-scalable=no' >
<title> ${this.webconfig.name} > ${APPNAME} </title>
<script src="/JsonObjectEditor/js/libs/adapter-latest.js"></script>
<link rel="shortcut icon" href="/JsonObjectEditor/favicon.ico" type="image/x-icon">
<link rel="icon" href="/JsonObjectEditor/favicon.ico" type="image/x-icon">
<link rel="icon" sizes="192x192" href="/JsonObjectEditor/img/ico/android-icon-192x192.png">
<link rel="apple-touch-icon" sizes="144x144" href="/JsonObjectEditor/img/ico/android-icon-144x144.png" />
<meta name="joe-notes" content="template.html template" >
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="mobile-web-app-capable" content="yes">
<link rel="stylesheet" href="${JOEPATH}js/plugins/c3/c3.min.css"/>
<link rel="stylesheet" href="${JOEPATH}capp/capp.css"/>
<link href="/JsonObjectEditor/css/joe.css" rel="stylesheet" type="text/css"/>
<!--manifest.json-->
<link rel="manifest" href="/manifest.json">
<!--this.settings.joe_icons-->
${this.settings.joe_icons}
<!--<script src="${JOEPATH}_joeinclude.js"></script>-->
<script type="text/javascript" src="/JsonObjectEditor/js/libs/jquery-1.11.3.min.js"></script>
<script type="text/javascript" src="/JsonObjectEditor/js/libs/jquery-ui.min.js"></script>
<script type="text/javascript" src="/JsonObjectEditor/js/libs/jquery.ui.touch-punch.min.js"></script>
<script type="text/javascript" src="/JsonObjectEditor/js/libs/moment.min.js"></script>
<script type="text/javascript" src="/JsonObjectEditor/js/libs/hammer.min.208.js"></script>
<script type="text/javascript" src="/JsonObjectEditor/js/libs/craydent-1.9.2.min.js"></script>
<!--<script src="/socket.io/socket.io.js"></script>-->
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.2.0/socket.io.js"></script>
<script>
var __jsc = {};
__jsc.PORT = ${this.webconfig.PORT};
__jsc.port = ${this.webconfig.port};
__jsc.socketPort = ${this.webconfig.socketPort};
__jsc.sitesPort = ${this.webconfig.sitesPort};
__jsc.httpsPort = ${this.webconfig.httpsPort};
__jsc.hostname = ('${this.webconfig.hostname}' != 'localhost')?'${this.webconfig.hostname}':location.hostname;
__jsc.memory = {
heapTotal:${this.STATS.memory.current.heapTotal},
free:${this.STATS.memory.freemem},
total:${this.STATS.memory.totalmem}
};
__jsc.startDate = '${STARTDATE}';
var __jsu = {};
__jsu.name = '${this.USER.name}';
__jsu.schemas = '${this.USER.schemas}'.split(',');
__jsu.items = ('${this.USER.items}' && '${this.USER.items}'.split(','))||[];
__jsu.role = '${this.USER.role}';
var s = 'script';
// var fs = '<'+s+' src="//'+location.hostname+($l.protocol == "https:" ? '${this.webconfig.httpsPort}' : ':${this.webconfig.socketPort}')+'/socket.io/socket.io.js"></'+s+'>';
// document.write(fs);
//document.write('<'+s+' src="http://'+location.hostname+':${this.webconfig.socketPort}/socket.io/socket.io.js"></'+s+'>');
var JACmode = $GET('JAC')||false;
</script>
<!--<script id="ieScript">
window.navigatorIsIE = false;
if(window.navigator.userAgent.indexOf('Trident') != -1 || window.navigator.userAgent.indexOf('MSIE') != -1){
navigatorIsIE = true;
}
if(navigatorIsIE){
document.write('<script type="text/javascript" src="/JsonObjectEditor/js/joe_es5.js"></script><script type="text/javascript" src="${JOEPATH}es5-build/capp/capp.js"></script>');
}else{
document.write('<script type="text/javascript" src="/JsonObjectEditor/js/joe.js"></script>'+
'<script type="text/javascript" src="${JOEPATH}/capp/capp.js"></script>');
}
alert(window.navigatorIsIE);
</script>-->
<script type="text/javascript" src="/JsonObjectEditor/js/joe.js"></script>
<script type="text/javascript" src="/JsonObjectEditor/js/plugins/tinymce.min.js"></script>
<script type="text/javascript" src="/JsonObjectEditor/js/ace/ace.js"></script>
<script src="${JOEPATH}js/plugins/c3/c3.min.js"></script>
<script src="${JOEPATH}js/plugins/c3/d3.v3.min.js"></script>
<script src="${JOEPATH}capp/capp.js"></script>
<style>
iframe.site-view {
width: 250%;
height: 300px;
display: block;
transform: scale(0.4);
transform-origin: 0 0;
margin: 0;
padding: 0;
border: none;
}
body{
background:#0099aa;
}
</style>
${this.settings.dashboard_head}
<style id="user-styles">
${this.USER.styles}
</style>
</head>
<body>
<capp-wrapper class="left-panel">
<capp-body>
<capp-panel class="capp-bg-dark" id="joePanelMenu">
<!--<capp-button class="capp-panel-toggle">
<capp-button-icon><-></capp-button-icon>
<capp-button-label>expand / contract</capp-button-label>
</capp-button>-->
<capp-button id="dashboardbtn" onclick="_joe.closeButtonAction();" class="selected">
<capp-button-icon title="Dashboard">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 -20 360 360"><g data-name="paper square"><path d="M20 60V260H300V60.1ZM36.2 234.9a10 10 0 1 1 10-10A10 10 0 0 1 36.2 234.9Zm0-33.5a10 10 0 1 1 10-10A10 10 0 0 1 36.2 201.4Zm0-33.5a10 10 0 1 1 10-10A10 10 0 0 1 36.2 167.9Zm0-33.5a10 10 0 1 1 10-10A10 10 0 0 1 36.2 134.4Zm0-33.5a10 10 0 1 1 10-10A10 10 0 0 1 36.2 100.9ZM295 255H54V81l241 0.1Z"/></g><path d="M239.5 207.6a9.9 9.9 0 0 0 19.8 0A89.1 89.1 0 0 0 243.7 157c-4.3 4.9-8.9 10.2-13.6 15.5A69.4 69.4 0 0 1 239.5 207.6Z"/><path d="M169.7 117.9A89.8 89.8 0 0 0 80 207.6a9.9 9.9 0 0 0 19.8 0 69.8 69.8 0 0 1 108.7-58l17.9-11.4A89.3 89.3 0 0 0 169.7 117.9Z"/><path d="M260 126.4S163.6 187.1 156.6 193a16.5 16.5 0 0 0 21.5 25.1C185 212.2 260 126.4 260 126.4Z"/><circle cx="169.2" cy="156.9" r="8.9"/><circle cx="132.8" cy="172" r="8.9"/><circle cx="117.8" cy="208.3" r="8.9"/><circle cx="220.6" cy="208.3" r="8.9"/></svg>
<svg-label>dashboard</svg-label></capp-button-icon>
<capp-button-label>Dashboard</capp-button-label>
</capp-button>
<!--<capp-button id="searchbtn" onclick="_joe.quickFind();">
<capp-button-icon title="QuickFind (alt+f)"><svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="-8 -8 80 80">
<title>search</title><g id="Search"><polygon points="10.84 46.25 23.81 34.47 29.5 40.76 16.54 52.54 10.84 46.25 10.84 46.25"/><path d="M38.17,12a14.45,14.45,0,1,1-13.65,9.72A14.42,14.42,0,0,1,38.17,12m0,3.92a10.55,10.55,0,1,0,3.44.58h0a10.49,10.49,0,0,0-3.44-.58Z"/></g></svg><svg-label>search</svg-label></capp-button-icon>
<capp-button-label>QuickFind</capp-button-label>
</capp-button>-->
<capp-button onclick="_joe.quickAdd(false);">
<capp-button-icon title="QuickCreate (alt+n)">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="-5 -5 50 50"><title>plus</title>
<g id="Layer_2" data-name="Layer 2"><polygon class="cls-1" points="28 22.33 22.45 22.33 22.45 28 17.62 28 17.62 22.33 12 22.33 12 17.5 17.62 17.5 17.62 12 22.45 12 22.45 17.5 28 17.5 28 22.33"/></g></svg>
<svg-label>add</svg-label>
</capp-button-icon>
<capp-button-label>QuickAdd</capp-button-label>
</capp-button>
</capp-panel>
<capp-view id="joeHolder"></capp-view>
<capp-dashboard style="margin-left:50px;">
</capp-dashboard>
</capp-body>
<capp-header class="capp-retro" ondblclick="openFullscreen()">
<capp-header-bonus ></capp-header-bonus>
<capp-joe-icon onclick="capp.special.joeicon();" ondblclick="$('capp-panel').toggleClass('capp-bg-light').toggleClass('capp-bg-dark');">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="-18 -10 148 148"><g><path d="M28.47,66.15v9.76q0,5.09.43,5.92a2.73,2.73,0,0,0,1.86,1.47A16,16,0,0,0,35,83.7l1.68,0q.55,0,.94,0,4.27,0,4.27,2.74,0,3.17-4.51,3.88a84.32,84.32,0,0,1-11.13.51q-6.78,0-9.6-2.63T13.82,79.2V66.93a10.3,10.3,0,0,0-.88-5,5.71,5.71,0,0,0-3.55-2.21A3.53,3.53,0,0,1,6.73,56a3.49,3.49,0,0,1,2.66-3.72A5.89,5.89,0,0,0,12.94,50a10.18,10.18,0,0,0,.88-5V32.76q0-6.27,2.82-8.9t9.6-2.62a73.16,73.16,0,0,1,11.83.63,5.29,5.29,0,0,1,2.8,1.35,3.24,3.24,0,0,1,1,2.37q0,2.74-4.27,2.74h-.94l-1.76,0q-3.64,0-5,.78a3.09,3.09,0,0,0-1.37,2.7q0,.63,0,4.31v9.72q-.08,7.09-3.8,9.44a.71.71,0,0,0-.31.59q0,.55,1.33,1.65a7.23,7.23,0,0,1,2.08,3.35A17.35,17.35,0,0,1,28.47,66.15Z"/><path class="cls-1" d="M56.14,35.43a9.17,9.17,0,0,1,9.13,9.13,9,9,0,0,1-2.78,6.78,9.38,9.38,0,0,1-12.93,0,9,9,0,0,1-2.78-6.78,8.47,8.47,0,0,1,2.35-6.07A9.16,9.16,0,0,1,56.14,35.43Zm0,22.65a9.17,9.17,0,0,1,9.13,9.13A9,9,0,0,1,62.48,74a9.38,9.38,0,0,1-12.93,0,9,9,0,0,1-2.78-6.78,8.48,8.48,0,0,1,2.35-6.07A9.16,9.16,0,0,1,56.14,58.08Z"/><path class="cls-1" d="M83.53,45.81V36.09q0-5.09-.43-5.92a2.73,2.73,0,0,0-1.86-1.47A16,16,0,0,0,77,28.3l-1.69,0H74.4q-4.27,0-4.27-2.74,0-3.17,4.51-3.84a84.9,84.9,0,0,1,11.13-.51q6.78,0,9.6,2.63t2.82,8.9v12.3a10.18,10.18,0,0,0,.88,5,5.89,5.89,0,0,0,3.55,2.23A3.49,3.49,0,0,1,105.27,56a3.5,3.5,0,0,1-1.84,3.37,11.14,11.14,0,0,1-1.92.67,4.49,4.49,0,0,0-2.82,2.63,12.74,12.74,0,0,0-.51,4.27V79.2q0,6.31-2.82,8.93t-9.6,2.63a72.82,72.82,0,0,1-11.83-.63,5.29,5.29,0,0,1-2.8-1.35,3.28,3.28,0,0,1-1-2.41q0-2.74,4.27-2.74.51,0,2.7.08a12.45,12.45,0,0,0,5-.78,2.3,2.3,0,0,0,1.2-1.59,38.42,38.42,0,0,0,.22-5.43V66.15a15.81,15.81,0,0,1,.84-5.74,8.53,8.53,0,0,1,3-3.66.71.71,0,0,0,.31-.59q0-.55-1.33-1.65a7.22,7.22,0,0,1-2.08-3.35A17.5,17.5,0,0,1,83.53,45.81Z"/></g></svg>
</capp-joe-icon>
<!--<capp-app-title><joe-subtext>${this.webconfig.name}</joe-subtext>${APPNAME}</capp-app-title>-->
<!--<capp-button onclick="_joe.quickAdd(false);">
<capp-button-icon title="QuickCreate (alt+n)">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="-5 -5 50 50"><title>plus</title>
<g id="Layer_2" data-name="Layer 2"><polygon class="cls-1" points="28 22.33 22.45 22.33 22.45 28 17.62 28 17.62 22.33 12 22.33 12 17.5 17.62 17.5 17.62 12 22.45 12 22.45 17.5 28 17.5 28 22.33"/></g></svg>
<svg-label>add</svg-label>
</capp-button-icon>
<capp-button-label>QuickAdd</capp-button-label>
</capp-button>-->
<capp-menu id="cappUserMenu" class='fright'><capp-menu-label id="cappUser">User</capp-menu-label>
<capp-menu-panel class="right-side">
<capp-menu-option onclick="goJoe(_joe.search(_joe.User._id)[0],{schema:'user'});">my profile</capp-menu-option>
<capp-menu-option onclick="__logout();">logout</capp-menu-option>
<capp-menu-option onclick="_joe.Error.show()">view errors</capp-menu-option>
<capp-menu-option id="window_size"></capp-menu-option>
<capp-menu-option onclick="openFullscreen();">fullscreen</capp-menu-option>
</capp-menu-panel>
</capp-menu>
<capp-menu id="cappJACMenu" class='fright' style="display:none;"><capp-menu-label id="cappJAC"><svg xmlns="http://www.w3.org/2000/svg" viewBox="-16 -16 144 144" style="width: 50px;height: 45px; margin: 0 -10px;"><defs></defs><title>JAC</title><g style=""><path d="M28,66.15v9.76q0,5.09.43,5.92a2.73,2.73,0,0,0,1.86,1.47,16,16,0,0,0,4.21.41l1.68,0q.55,0,.94,0,4.27,0,4.27,2.74,0,3.17-4.51,3.88a84.32,84.32,0,0,1-11.13.51q-6.78,0-9.6-2.63T13.32,79.2V66.93a10.3,10.3,0,0,0-.88-5,5.71,5.71,0,0,0-3.55-2.21A3.53,3.53,0,0,1,6.23,56a3.49,3.49,0,0,1,2.66-3.72A5.89,5.89,0,0,0,12.44,50a10.18,10.18,0,0,0,.88-5V32.76q0-6.27,2.82-8.9t9.6-2.62a73.16,73.16,0,0,1,11.83.63,5.29,5.29,0,0,1,2.8,1.35,3.24,3.24,0,0,1,1,2.37q0,2.74-4.27,2.74h-.94l-1.76,0q-3.64,0-5,.78A3.09,3.09,0,0,0,28,31.78q0,.63,0,4.31v9.72q-.08,7.09-3.8,9.44a.71.71,0,0,0-.31.59q0,.55,1.33,1.65a7.23,7.23,0,0,1,2.08,3.35A17.35,17.35,0,0,1,28,66.15Z"></path><path d="M83,45.81V36.09q0-5.09-.43-5.92a2.73,2.73,0,0,0-1.86-1.47,16,16,0,0,0-4.21-.41l-1.69,0H73.9q-4.27,0-4.27-2.74,0-3.17,4.51-3.84a84.9,84.9,0,0,1,11.13-.51q6.78,0,9.6,2.63t2.82,8.9v12.3a10.18,10.18,0,0,0,.88,5,5.89,5.89,0,0,0,3.55,2.23A3.49,3.49,0,0,1,104.77,56a3.5,3.5,0,0,1-1.84,3.37A11.14,11.14,0,0,1,101,60a4.49,4.49,0,0,0-2.82,2.63,12.74,12.74,0,0,0-.51,4.27V79.2q0,6.31-2.82,8.93t-9.6,2.63a72.82,72.82,0,0,1-11.83-.63,5.29,5.29,0,0,1-2.8-1.35,3.28,3.28,0,0,1-1-2.41q0-2.74,4.27-2.74.51,0,2.7.08a12.45,12.45,0,0,0,5-.78,2.3,2.3,0,0,0,1.2-1.59A38.42,38.42,0,0,0,83,75.91V66.15a15.81,15.81,0,0,1,.84-5.74,8.53,8.53,0,0,1,3-3.66.71.71,0,0,0,.31-.59q0-.55-1.33-1.65a7.22,7.22,0,0,1-2.08-3.35A17.5,17.5,0,0,1,83,45.81Z"></path><path d="M56.12,30.43a9.17,9.17,0,0,1,9.13,9.13,9,9,0,0,1-2.78,6.78,9.38,9.38,0,0,1-12.93,0,9,9,0,0,1-2.78-6.78,8.47,8.47,0,0,1,2.35-6.07A9.16,9.16,0,0,1,56.12,30.43Z"></path><path d="M56.12,63.08a9.17,9.17,0,0,1,9.13,9.13A9,9,0,0,1,62.47,79a9.38,9.38,0,0,1-12.93,0,9,9,0,0,1-2.78-6.78,8.48,8.48,0,0,1,2.35-6.07A9.16,9.16,0,0,1,56.12,63.08Z"></path><path d="M81.57,56.12a9.17,9.17,0,0,1-9.13,9.13,9,9,0,0,1-6.78-2.78,9.38,9.38,0,0,1,0-12.93,9,9,0,0,1,6.78-2.78,8.47,8.47,0,0,1,6.07,2.35A9.16,9.16,0,0,1,81.57,56.12Z"></path><path d="M48.92,56.12a9.17,9.17,0,0,1-9.13,9.13A9,9,0,0,1,33,62.47a9.38,9.38,0,0,1,0-12.93,9,9,0,0,1,6.78-2.78,8.48,8.48,0,0,1,6.07,2.35A9.16,9.16,0,0,1,48.92,56.12Z"></path></g></svg></capp-menu-label>
<capp-menu-panel class="right-side">
<capp-menu-option onclick="window.close(); if(confirm('go back to JAC')){window.open('mobile/close');}">back to JAC</capp-menu-option>
<capp-menu-option onclick="location.reload()">refresh</capp-menu-option>
</capp-menu-panel>
</capp-menu>
<capp-button id="searchbtn" class="fright" onclick="_joe.quickFind();">
<capp-button-icon title="QuickFind (alt+f)"><svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="-8 -8 80 80">
<title>search</title><g id="Search"><polygon points="10.84 46.25 23.81 34.47 29.5 40.76 16.54 52.54 10.84 46.25 10.84 46.25"/><path d="M38.17,12a14.45,14.45,0,1,1-13.65,9.72A14.42,14.42,0,0,1,38.17,12m0,3.92a10.55,10.55,0,1,0,3.44.58h0a10.49,10.49,0,0,0-3.44-.58Z"/></g></svg><svg-label>search</svg-label></capp-button-icon>
<capp-button-label>QuickFind</capp-button-label>
</capp-button>
<!--<capp-button class='fright' onclick="alert(JSON.stringify(_joe.User,'','\n'));" id="cappUser">User</capp-button>-->
</capp-header>
<capp-popup id="confirm">
<capp-popup-close onclick="capp.Popup.toggle('confirm');"> X </capp-popup-close>
<capp-title>Title</capp-title>
<capp-content>Content</capp-content>
</capp-popup>
</capp-wrapper>
<script>
function openFullscreen() {
var elem = document.documentElement;
if (elem.requestFullscreen) {
elem.requestFullscreen();
} else if (elem.webkitRequestFullscreen) { /* Safari */
elem.webkitRequestFullscreen();
} else if (elem.msRequestFullscreen) { /* IE11 */
elem.msRequestFullscreen();
}
}
if($c.isMobile()){
$('#window_size').html(window.innerWidth +' x '+ window.innerHeight);
}
else{ $('#window_size').remove();}
var __collectionNames = $.unique("${ALL_COLLECTIONS}".split(',').sort());
var __appCollections = "${COLLECTIONS}".split(',');
var __defaultSchemas = "${DEFAULT_SCHEMAS}".split(',');
var __pluginNames = $.unique("${PLUGINS}".split(',').sort());
var APPINFO = ${APPINFO};
unstringifyFunctions(APPINFO);
$c.DEBUG_MODE = location.hostname == "localhost";
var capp_items=[
];
if(typeof APPINFO.dashboard == "function"){
APPINFO.dashboard = APPINFO.dashboard();
}
$.fn.isInViewport = function() {
var elementTop = $(this).offset().top;
var elementBottom = elementTop + $(this).outerHeight();
var viewportTop = $(window).scrollTop();
var viewportBottom = viewportTop + $(window).height();
return elementBottom > viewportTop && elementTop < viewportBottom;
};
var sl = false, goog = false;
var socketUrl = '/';
if(__jsc.port != __jsc.socketPort){
socketUrl = `http://${location.hostname}:${__jsc.socketPort}/`;
}
var JOE = new JsonObjectEditor({
localStorage:false,//$GET('local') || !$c.isMobile(),
container:'#joeHolder',
useHashlink:true,
useBackButton:true,
socket:socketUrl,
onServerLoadComplete:function(){
if(APPINFO && APPINFO.onServerLoadComplete){
var c = new Benchmarker();
APPINFO.onServerLoadComplete();
logit('ledgers updated in '+c.stop()+' secs');
}
capp.Reload.all();
//_joe.Google && _joe.Google.authorize();
if(!$c.isMobile()){
capp.special.joeicon(true);
}
},
onServerUpdate:function(){
capp.Reload.all();
},
documentTitle:function(a,b){
if(_joe.current.object ||_joe.current.list){
return _joe.current.title;
}
return APPINFO.title;
},
onPanelHide:function(joestate){
if(!_joe.current.schema){
$('capp-button.selected').removeClass('selected');
$('capp-button#dashboardbtn').addClass('selected');
if(!$c.isMobile()){
capp.special.joeicon(true);
}
}
},
onPanelShow:function(joestate,details){
var container = $('capp-body > capp-panel'),scrollTo;
/*logit(joestate);*/
capp.special.joeicon(false);
if(joestate.schema){
var selector = '#'+joestate.schema+'SchemaBtn';
$('capp-button.selected').removeClass('selected');
$(selector).addClass('selected').parents('capp-menu').addClass('expanded');
scrollTo = $(selector);
}else if(joestate.title == "Search Results"){
$('capp-button.selected').removeClass('selected');
$('capp-button#searchbtn').addClass('selected');
//scrollTo = $('capp-button#searchbtn');
}
if(scrollTo && scrollTo[0] && !scrollTo.isInViewport()){
container.scrollTop(
scrollTo.offset().top - container.offset().top + container.scrollTop()
);
}
if(details.time){
$('#showCounter').remove();
var warningcount = (details.warnings||[]).length;
$('#cappUserMenu capp-menu-panel').append('<capp-menu-option id="showCounter" onclick="showJOEWarnings()">'+details.time+'s ['+warningcount+']</capp-menu-option>');
}
}
});
var capp = new CraydentApp(true,capp_items.concat(APPINFO.dashboard));
JOE.init();
//capp.init();
var capp_apps = '${USERAPPS}'.split(',') || [];
var caobj = ${USERAPPSOBJ};
var all_apps = '${APPS}'.split(',') || [];
capp.Menu.addFromApps(caobj,'<joe-subtext>${this.webconfig.name}</joe-subtext>${APPNAME}');
//capp.Button.add('Docs',null,'window.open(\'/JsonObjectEditor/docs.html\')','capp-header');
JOE.SERVER.User.get();
JOE.SERVER.loadSchemas('${COLLECTIONS}');
JOE.SERVER.loadDatasets('${COLLECTIONS}');
function __logout(){
$COOKIE('_j_user',null,{delete:true,path:'/'});
$COOKIE('_j_token',null,{delete:true,path:'/'});
$.ajax({
url:location.href.replace(location.hostname,'logout:password@'+location.hostname),
error:function(){alert('logged out'); location.reload();},
})
}
function checkGoogleAuth(){
_joe.Data.setting && _joe.Google && _joe.Google.authorize();
}
if(JACmode){
$('#cappJACMenu').show();
}
</script>
<script src="${JOEPATH}js/joe-ai.js"></script>
<!-- <script src="https://apis.google.com/js/client.js?onload=checkGoogleAuth"></script> -->
</body>
</html>