summaryrefslogtreecommitdiffstats
path: root/sca-cpp/trunk/hosting/server/htdocs/index.html
diff options
context:
space:
mode:
Diffstat (limited to 'sca-cpp/trunk/hosting/server/htdocs/index.html')
-rw-r--r--sca-cpp/trunk/hosting/server/htdocs/index.html525
1 files changed, 525 insertions, 0 deletions
diff --git a/sca-cpp/trunk/hosting/server/htdocs/index.html b/sca-cpp/trunk/hosting/server/htdocs/index.html
new file mode 100644
index 0000000000..3bc1529dbb
--- /dev/null
+++ b/sca-cpp/trunk/hosting/server/htdocs/index.html
@@ -0,0 +1,525 @@
+<!DOCTYPE html>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<html manifest="/cache-manifest.cmf">
+<head>
+<title></title>
+<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0"/>
+<meta name="apple-mobile-web-app-capable" content="yes"/>
+<meta name="apple-mobile-web-app-status-bar-style" content="black"/>
+<link rel="apple-touch-icon" href="/public/touchicon.png"/>
+<base href="/"/>
+<script type="text/javascript">
+
+window.appcache = {};
+
+/**
+ * Get and cache a resource.
+ */
+appcache.get = function(uri) {
+ var h = uri.indexOf('#');
+ var u = h == -1? uri : uri.substring(0, h);
+
+ // Get resource from local storage first
+ var item = localStorage.getItem(u);
+ if (item != null && item != '')
+ return item;
+
+ // Get resource from network
+ var http = new XMLHttpRequest();
+ http.open("GET", u, false);
+ http.send(null);
+ if (http.status == 200) {
+ if (http.getResponseHeader("X-Login") != null) {
+ if (log) log('http error', u, 'X-Login');
+ // Redirect to login page if not signed in
+ document.location = '/login/';
+ return null;
+ } else if (http.responseText == '' || http.getResponseHeader("Content-Type") == null) {
+ if (log) log('http error', u, 'No-Content');
+ return null;
+ }
+ localStorage.setItem(u, http.responseText);
+ return http.responseText;
+ }
+ if (log) log('http error', u, http.status, http.statusText);
+ // Redirect to login page if not signed in
+ if (http.status == 403)
+ document.location = '/login/';
+ return null;
+};
+
+// Load Javascript and CSS
+(function() {
+ var bootjs = document.createElement('script');
+ bootjs.type = 'text/javascript';
+ bootjs.text = appcache.get('/all-min.js');
+ document.head.appendChild(bootjs);
+ document.head.appendChild(ui.declareCSS(appcache.get('/ui-min.css')));
+})();
+
+// Redirect to login page if not signed in
+if (document.location.protocol == 'https:' && !ui.signedin())
+ document.location = '/login/';
+
+</script>
+</head>
+<body class="delayed" onload="onload();">
+<div id="mainbodydiv" class="mainbodydiv" style="overflow: visible;">
+
+<div id="headdiv" class="hsection">
+<script type="text/javascript">
+(function() {
+$('headdiv').appendChild(ui.declareScript(appcache.get('/config-min.js')));
+})();
+</script>
+</div>
+
+<div id="menubackground" style="position: absolute; top: 0px; left: 0px; z-index: -1; width: 100%; visibility: hidden;">
+<table cellpadding="0" cellspacing="0" width="100%" class="tbar"><tr><td class="dtbar">
+<table border="0" cellspacing="0" cellpadding="0"><tr><td class="ltbar"><span class="tbarsmenu">>&nbsp</span></td></tr></table>
+</td></tr></table>
+</div>
+
+<div id="menu"></div>
+
+<div id="content" class="bodydiv" style="overflow: visible;">
+<div id="viewcontainer"></div>
+</div>
+
+<script type="text/javascript">
+
+// Set page titles
+document.title = ui.windowtitle(location.hostname);
+
+// Init div variables
+var bdiv = $('mainbodydiv');
+var mdiv = $('menu');
+var cdiv = $('content');
+var mbgdiv = $('menubackground');
+mbgdiv.style.top = ui.pixpos(mdiv.offsetTop);
+var vcontainer = $('viewcontainer');
+vcontainer.className = ui.isMobile()? 'viewcontainer3dm' : 'viewcontainer3d';
+
+/**
+ * Pre-fetch app resources.
+ */
+var appresources = [
+ ['/all-min.js'],
+ ['/ui-min.css'],
+ ['/account/', 'flip'],
+ ['/clone/', 'flip'],
+ ['/create/', 'flip'],
+ ['/graph/', 'flip'],
+ ['/config-min.js'],
+ ['/home/', 'right'],
+ ['/home/home.b64'],
+ ['/page/', 'flip'],
+ ['/public/app.b64'],
+ ['/public/config-min.js'],
+ ['/public/grid72.b64'],
+ ['/public/iframe-min.html'],
+ ['/public/img.b64'],
+ ['/public/user.b64'],
+ ['/stats/', 'flip'],
+ ['/store/', 'left']
+];
+
+/**
+ * Handle application cache events.
+ */
+applicationCache.addEventListener('checking', function(e) {
+ //log('appcache checking', e);
+ showStatus('Checking');
+}, false);
+applicationCache.addEventListener('error', function(e) {
+ //log('appcache error', e);
+ showStatus(defaultStatus());
+}, false);
+applicationCache.addEventListener('noupdate', function(e) {
+ //log('appcache noupdate', e);
+ showStatus(defaultStatus());
+}, false);
+applicationCache.addEventListener('downloading', function(e) {
+ //log('appcache downloading', e);
+ showStatus('Updating');
+}, false);
+applicationCache.addEventListener('progress', function(e) {
+ //log('appcache progress', e);
+ showStatus('Updating');
+}, false);
+applicationCache.addEventListener('updateready', function(e) {
+ //log('appcache updateready', e);
+ applicationCache.swapCache();
+ showStatus(defaultStatus());
+ //log('appcache swapped', e);
+}, false);
+applicationCache.addEventListener('cached', function(e) {
+ //log('appcache cached', e);
+ map(function(res) {
+ showStatus('Updating');
+ appcache.get(res[0]);
+ }, appresources);
+ showStatus(defaultStatus());
+}, false);
+
+/**
+ * Handle network offline/online events.
+ */
+window.addEventListener('offline', function(e) {
+ //log('going offline');
+ showStatus('Offline');
+}, false);
+window.addEventListener('online', function(e) {
+ //log('going online');
+ showStatus('Online');
+}, false);
+
+//log(navigator.onLine? 'online' : 'offline');
+
+/**
+ * Handle view transitions.
+ */
+
+// Keep track of the current view url and uri
+var viewurl = '';
+var viewuri = '';
+var viewidx = '';
+var viewdiv;
+
+/**
+ * Record which transitions should be applied to each resource.
+ */
+var apptransitions = {};
+map(function(res) {
+ if (res.length > 1)
+ apptransitions[res[0]] = res[1];
+}, appresources);
+
+/**
+ * Return the transition that should be applied to a resource.
+ */
+function viewtransition(uri) {
+ var t = apptransitions[uri];
+ return isNil(t)? 'left' : t;
+}
+
+/**
+ * Create a new view div.
+ */
+function mkviewdiv(cname) {
+ var vdiv = document.createElement('div');
+ vdiv.className = cname;
+ if (!ui.isMobile())
+ return vdiv;
+
+ // Handle view transition end
+ function viewdivtransitionend(e) {
+ if (e.target.className == 'leftviewunloaded3dm' || e.target.className == 'rightviewunloaded3dm' || e.target.className == 'flipviewunloaded3dm')
+ e.target.parentNode.removeChild(e.target);
+ }
+ vdiv.addEventListener('webkitTransitionEnd', viewdivtransitionend, false);
+ vdiv.addEventListener('transitionend', viewdivtransitionend, false);
+ return vdiv;
+}
+
+/**
+ * Return the last visited location.
+ */
+function lastvisited() {
+ return localStorage.getItem('ui.lastvisited')
+}
+
+/**
+ * Build and show the menu bar.
+ */
+function showmenu(mdiv, view, appname) {
+ mdiv.innerHTML = ui.menubar(
+ append(mklist(ui.menu('Home', '/', '_view', view == 'home'), ui.menu('Store', '/#view=store', '_view', view === 'store')),
+ (isNil(appname) || appname == 'undefined')?
+ mklist() :
+ mklist(
+ ui.menu('Stats', '/#view=stats&app=' + appname, '_view', view == 'stats'),
+ ui.menu('Page', '/#view=page&app=' + appname, '_view', view == 'page'),
+ ui.menu(isNil(config.compose)? 'Composition' : config.compose, '/#view=graph&app=' + appname, '_view', view == 'graph'))),
+ mklist(
+ ui.menu('Account', '/#view=account', '_view', view == 'account'),
+ ui.signedin()? ui.menufunc('Sign out', 'logout();', false) : ui.menu('Sign in', '/login/', '_self', false)));
+}
+
+/**
+ * Show a status message.
+ */
+function showStatus(s) {
+ var sdiv = $('status');
+ if (isNil(sdiv))
+ return s;
+ sdiv.innerHTML = s;
+ return s;
+}
+
+/**
+ * Return the default status message.
+ */
+function defaultStatus() {
+ return navigator.onLine? 'Online' : 'Offline';
+}
+
+/**
+ * Show a view.
+ */
+function showview(url) {
+ //log('showview', url);
+
+ // Save last visited location
+ localStorage.setItem('ui.lastvisited', url);
+
+ // Determine the view to show
+ var params = ui.fragmentParams(url);
+ var view = isNil(params['view'])? 'home' : params['view'];;
+ var uri = '/' + view + '/';
+ var idx = isNil(params['idx'])? '1' : params['idx'];
+
+ // Determine the transition to use
+ var vt = viewtransition(uri);
+ var ovt = viewtransition(viewuri);
+ var vtransition;
+ if (ovt == 'flip')
+ vtransition = 'flip';
+ else if (uri == viewuri && (vt == 'left' || vt == 'right'))
+ vtransition = idx >= viewidx? 'left' : 'right';
+ else
+ vtransition = vt;
+
+ // Track current view url and uri
+ viewurl = url;
+ viewuri = uri;
+ viewidx = idx;
+
+ // Show the menu bar
+ var appname = params['app'];
+ showmenu(mdiv, view, appname);
+ cdiv.style.top = ui.pixpos(mdiv.offsetTop + mdiv.offsetHeight);
+
+ // Scroll to the top and hide the address bar
+ window.scrollTo(0, 0);
+
+ // Compute the viewport size
+ var iswide = view == 'graph' || view == 'page';
+ var vwidth = iswide? '2500px' : '100%';
+ mbgdiv.style.visibility = iswide? 'visible' : 'hidden';
+ mbgdiv.style.width = vwidth;
+
+ // Start to unload the front view and create a new view
+ if (ui.isMobile()) {
+ // Prepare current view for transition out
+ var ovdiv = viewdiv;
+ if (!isNil(ovdiv)) {
+ ovdiv.skipNode = true;
+ ovdiv.className = 'viewunloading3dm';
+ }
+
+ // Load the requested doc into a new view
+ var vdiv = mkviewdiv(vtransition + 'viewloading3dm');
+ vcontainer.appendChild(vdiv);
+ var vdoc = appcache.get(uri);
+ vdiv.innerHTML = vdoc;
+ map(ui.evalScript, ui.innerScripts(vdiv));
+
+ // Show the document
+ if (document.body.style.visibility != 'visible')
+ document.body.style.visibility = 'visible';
+
+ setTimeout(function() {
+ // Transition the old view out
+ if (!isNil(ovdiv))
+ ovdiv.className = vtransition + 'viewunloaded3dm';
+
+ // Transition the new view in
+ vdiv.className = 'viewloaded3dm';
+ }, 0);
+ } else {
+ // Prepare current view for transition out
+ var ovdiv = viewdiv;
+ if (!isNil(ovdiv))
+ ovdiv.skipNode = true;
+
+ // Load the requested doc into the view
+ var vdiv = mkviewdiv('viewloading3d');
+ vcontainer.appendChild(vdiv);
+ var vdoc = appcache.get(uri);
+ vdiv.innerHTML = vdoc;
+ map(ui.evalScript, ui.innerScripts(vdiv));
+
+ // Show the document
+ if (document.body.style.visibility != 'visible')
+ document.body.style.visibility = 'visible';
+
+ setTimeout(function() {
+ // Transition the new view in
+ vdiv.className = 'viewloaded3d';
+
+ // Transition the old view out
+ if (!isNil(ovdiv))
+ ovdiv.parentNode.removeChild(ovdiv);
+ }, 0);
+ }
+
+ // Track the current visible view
+ viewdiv = vdiv;
+
+ return true;
+}
+
+/**
+ * Update the browser window location.
+ */
+function updatelocation(url) {
+ //log('updatelocation', url);
+
+ // Add url to the history if necessary
+ if (url != ui.pathandparams(location)) {
+ history.pushState(null, null, url);
+ //log('pushstate', history.length);
+
+ // Update the location hash if necessary
+ var f = ui.fragment(url);
+ if (f != '' && f != location.hash) {
+ location.hash = f;
+ //log('hash', f);
+ }
+ }
+ return url;
+}
+
+/**
+ * Handle navigations.
+ */
+window.onnavigate = function(url) {
+ //log('onnavigate', url);
+
+ updatelocation(url);
+
+ // Show the specified view
+ if (url == viewurl)
+ return true;
+ return showview(url);
+};
+
+/**
+ * Handle login redirect.
+ */
+window.onloginredirect = function(e) {
+ document.location = '/login/';
+};
+
+/**
+ * Log the current user out.
+ */
+function logout() {
+ // Clear session cookie and user-specific local storage entries
+ var reset = 'TuscanyOpenAuth=; expires=' + new Date(1970,01,01).toGMTString() + '; domain=.' + domainname(window.location.hostname) + '; path=/';
+ document.cookie = reset;
+ localStorage.removeItem('/r/EditWidget/accounts');
+ localStorage.removeItem('/r/EditWidget/dashboards');
+ //localStorage.clear();
+ document.location = '/login/';
+ return true;
+}
+
+/**
+ * Handle history.
+ */
+window.addEventListener('popstate', function(e) {
+ //log('onpopstate', history.length);
+ var furl = ui.fragment(location);
+ var url = location.pathname + (furl == ''? '' : '#' + furl);
+
+ // Show the current view
+ if (url == viewurl)
+ return true;
+ return showview(url);
+
+}, false);
+
+window.addEventListener('hashchange', function(e) {
+ //log('onhashchange');
+ var furl = ui.fragment(location);
+ var url = location.pathname + (furl == ''? '' : '#' + furl);
+
+ // Show the current view
+ if (url == viewurl)
+ return true;
+ return showview(url);
+
+}, false);
+
+/**
+ * Handle orientation change.
+ */
+document.body.onorientationchange = function(e) {
+ //log('onorientationchange');
+
+ // Scroll to the top and hide the address bar
+ window.scrollTo(0, 0);
+
+ return true;
+};
+
+/**
+ * Document load post processing.
+ */
+function onload() {
+ //log('onload', history.length);
+ var furl = ui.fragment(location);
+
+ // Show the view specified in the given url fragment
+ if (furl != '') {
+ var url = location.pathname + '#' + furl;
+ if (url == viewurl)
+ return true;
+ return showview(url);
+ }
+
+ // Show the last visited view
+ if (ui.isMobile() && (document.referrer == null || document.referrer == '')) {
+ //log('show lastvisited');
+ var lv = lastvisited();
+ var url = isNil(lv)? location.pathname : lv;
+ updatelocation(url);
+ if (url == viewurl)
+ return true;
+ return showview(url);
+ }
+
+ // Show the main home view
+ var url = location.pathname;
+ if (url == viewurl)
+ return true;
+ return showview(url);
+}
+
+</script>
+
+<div id="footdiv" class="fsection">
+</div>
+
+</div>
+</body>
+</html>