Refactor and simplify edit app, and optimize app resource loading and caching.
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@1188045 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
1f29c4ef13
commit
0f3b340da7
54 changed files with 4293 additions and 3748 deletions
1
sca-cpp/trunk/.gitignore
vendored
1
sca-cpp/trunk/.gitignore
vendored
|
@ -59,6 +59,7 @@ config.status
|
|||
*config.js
|
||||
all.js
|
||||
intro*.png
|
||||
intro*.b64
|
||||
depcomp
|
||||
install-sh
|
||||
ltmain.sh
|
||||
|
|
|
@ -20,7 +20,7 @@ if WANT_PYTHON
|
|||
moddir = $(prefix)/modules/edit
|
||||
dist_mod_SCRIPTS = start stop ssl-start mkapplinks
|
||||
|
||||
nobase_dist_mod_DATA = edit.composite *.py htdocs/*.html htdocs/*.js htdocs/*.cmf htdocs/*.ico htdocs/*.png htdocs/*.txt htdocs/account/*.html htdocs/create/*.html htdocs/clone/*.html htdocs/data/*.html htdocs/app/*.html htdocs/store/*.html htdocs/stats/*.html htdocs/graph/*.html htdocs/graph/*.js htdocs/page/*.html htdocs/page/*.js htdocs/login/*.html htdocs/logout/*.html htdocs/public/*.html htdocs/public/*.png palettes/*/palette.composite apps/*/app.composite apps/*/app.stats apps/*/htdocs/app.html dashboards/*/user.apps store/*/store.apps
|
||||
EXTRA_DIST = edit.composite *.py htdocs/*.html htdocs/*.js htdocs/*.cmf htdocs/*.ico htdocs/*.png htdocs/*.txt htdocs/account/*.html htdocs/create/*.html htdocs/clone/*.html htdocs/data/*.html htdocs/app/*.html htdocs/store/*.html htdocs/stats/*.html htdocs/graph/*.html htdocs/graph/*.js htdocs/page/*.html htdocs/page/*.js htdocs/login/*.html htdocs/logout/*.html htdocs/public/*.html htdocs/public/*.png palettes/*/palette.composite apps/*/app.composite apps/*/app.stats apps/*/htdocs/app.html dashboards/*/user.apps store/*/store.apps
|
||||
nobase_dist_mod_DATA = edit.composite *.py htdocs/*.html htdocs/*.js htdocs/*.cmf htdocs/*.ico htdocs/home/*.png htdocs/home/*.b64 htdocs/*.txt htdocs/account/*.html htdocs/create/*.html htdocs/clone/*.html htdocs/app/*.html htdocs/store/*.html htdocs/stats/*.html htdocs/graph/*.html htdocs/home/*.html htdocs/page/*.html htdocs/login/*.html htdocs/logout/*.html htdocs/notauth/*.html htdocs/notfound/*.html htdocs/oops/*.html htdocs/public/*.html htdocs/public/*.png htdocs/public/*.b64 palettes/*/palette.composite apps/*/app.composite apps/*/app.stats apps/*/htdocs/app.html dashboards/*/user.apps store/*/store.apps
|
||||
EXTRA_DIST = edit.composite *.py htdocs/*.html htdocs/*.js htdocs/*.cmf htdocs/*.ico htdocs/home/*.png htdocs/home/*.b64 htdocs/*.txt htdocs/account/*.html htdocs/create/*.html htdocs/clone/*.html htdocs/app/*.html htdocs/store/*.html htdocs/stats/*.html htdocs/graph/*.html htdocs/home/*.html htdocs/page/*.html htdocs/login/*.html htdocs/logout/*.html htdocs/notauth/*.html htdocs/notfound/*.html htdocs/oops/*.html htdocs/public/*.html htdocs/public/*.png htdocs/public/*.b64 palettes/*/palette.composite apps/*/app.composite apps/*/app.stats apps/*/htdocs/app.html dashboards/*/user.apps store/*/store.apps
|
||||
|
||||
endif
|
||||
|
|
|
@ -22,7 +22,7 @@ from util import *
|
|||
def accountid(user):
|
||||
return ("'" + user.id(), "'user.account")
|
||||
|
||||
# Get the user's account
|
||||
# Get the current user's account
|
||||
def get(id, user, cache):
|
||||
account = cache.get(accountid(user))
|
||||
if isNil(account):
|
||||
|
|
|
@ -17,26 +17,8 @@
|
|||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
-->
|
||||
<html manifest="/cache-manifest.cmf">
|
||||
<head>
|
||||
<title>Account</title>
|
||||
<meta name="viewport" content="width=device-width, user-scalable=no, initial-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"/>
|
||||
<link rel="stylesheet" type="text/css" href="/ui-min.css"/>
|
||||
<script type="text/javascript" src="/all-min.js"></script>
|
||||
<script type="text/javascript" src="/menu.js"></script>
|
||||
</head>
|
||||
<body class="delayed" onload="ui.onload();" onbeforeunload="ui.onbeforeunload();">
|
||||
<div id="bodydiv" class="bodydiv">
|
||||
|
||||
<div id="headdiv" class="hsection">
|
||||
<script type="text/javascript" src="/headconfig.js"></script>
|
||||
</div>
|
||||
|
||||
<div id="menu"></div>
|
||||
|
||||
<table style="width: 100%;">
|
||||
<tr>
|
||||
<td><h2><span id="h1"></span><span id="userNameHeader"></span></h2></td>
|
||||
|
@ -53,7 +35,7 @@
|
|||
<form id="userForm">
|
||||
<table style="width: 100%;">
|
||||
<tr><tr><td><b>Photo:</b></td></tr>
|
||||
<tr><td><img src="/public/app.png" style="width: 50px; height: 50px; vertical-align: top;"></td></tr>
|
||||
<tr><td><img id="userimg" style="width: 50px; height: 50px; vertical-align: top;"></td></tr>
|
||||
<tr><tr><td style="padding-top: 6px;"><b>Name:</b></td></tr>
|
||||
<tr><td><input type="text" id="userTitle" size="30" placeholder="Enter your name" style="width: 300px;"/></td></tr>
|
||||
<tr><tr><td style="padding-top: 6px;"><b>Description:</b></td></tr>
|
||||
|
@ -97,29 +79,22 @@
|
|||
</form>
|
||||
|
||||
<script type="text/javascript">
|
||||
ui.initbody();
|
||||
|
||||
// Init service references
|
||||
var editWidget = sca.component("EditWidget");
|
||||
var user= sca.defun(sca.reference(editWidget, "user"), "id");
|
||||
var accounts = sca.reference(editWidget, "accounts");
|
||||
|
||||
// Get the user name
|
||||
var username = '';
|
||||
try {
|
||||
username = user.id()
|
||||
} catch(e) {}
|
||||
|
||||
// Set page titles
|
||||
document.title = windowtitle(window.location.hostname) + ' - Account - ' + username;
|
||||
$('userNameHeader').innerHTML = username;
|
||||
document.title = ui.windowtitle(location.hostname) + ' - Account';
|
||||
|
||||
// Load the menu bar
|
||||
displaymenu();
|
||||
// Set images
|
||||
$('userimg').src = ui.b64img(appcache.get('/public/user.b64'));
|
||||
|
||||
/**
|
||||
* The current account entry and corresponding saved XML content.
|
||||
*/
|
||||
var username;
|
||||
var accountentry;
|
||||
var savedaccountentryxml = '';
|
||||
|
||||
|
@ -134,7 +109,9 @@ function getaccount(name) {
|
|||
return false;
|
||||
|
||||
accountentry = doc != null? car(elementsToValues(atom.readATOMEntry(mklist(doc)))) : mklist("'entry", mklist("'title", ''), mklist("'id", name));
|
||||
username = cadr(assoc("'id", cdr(accountentry)));
|
||||
var title = cadr(assoc("'title", cdr(accountentry)));
|
||||
$('userNameHeader').innerHTML = username;
|
||||
$('userTitle').value = title;
|
||||
|
||||
var content = cadr(assoc("'content", cdr(accountentry)));
|
||||
|
@ -170,6 +147,8 @@ function getaccount(name) {
|
|||
* Save the user's account.
|
||||
*/
|
||||
function save(entryxml) {
|
||||
if (isNil(username))
|
||||
return false;
|
||||
$('saveStatus').innerHTML = 'Saving';
|
||||
savedaccountentryxml = entryxml;
|
||||
accounts.put(username, savedaccountentryxml, function(e) {
|
||||
|
@ -228,14 +207,8 @@ $('userForm').onsubmit = function() {
|
|||
};
|
||||
|
||||
// Get the user's account
|
||||
getaccount(username);
|
||||
getaccount();
|
||||
|
||||
</script>
|
||||
|
||||
<div id="footdiv" class="fsection">
|
||||
<script type="text/javascript" src="/footconfig.js"></script>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
|
|
|
@ -1,25 +1,17 @@
|
|||
CACHE MANIFEST
|
||||
|
||||
# Common resources
|
||||
/all-min.js
|
||||
/ui-min.css
|
||||
# Version 5
|
||||
|
||||
# App resources
|
||||
/
|
||||
/data/index.html
|
||||
/favicon.ico
|
||||
/footconfig.js
|
||||
/frame.html
|
||||
/headconfig.js
|
||||
/public/app.png
|
||||
/notauth/
|
||||
/notfound/
|
||||
/notyet/
|
||||
/oops/
|
||||
/public/iframe.html
|
||||
/public/img.png
|
||||
/public/notauth.html
|
||||
/public/notfound.html
|
||||
/public/notyet.html
|
||||
/public/oops.html
|
||||
/public/touchicon.png
|
||||
/robots.txt
|
||||
|
||||
NETWORK:
|
||||
*
|
||||
|
|
|
@ -1,31 +0,0 @@
|
|||
<!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"/>
|
||||
<meta name="apple-mobile-web-app-capable" content="yes"/>
|
||||
<meta name="apple-mobile-web-app-status-bar-style" content="black"/>
|
||||
<link rel="stylesheet" type="text/css" href="/ui-min.css"/>
|
||||
</head>
|
||||
<body>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -23,36 +23,77 @@
|
|||
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0"/>
|
||||
<meta name="apple-mobile-web-app-capable" content="yes"/>
|
||||
<meta name="apple-mobile-web-app-status-bar-style" content="black"/>
|
||||
<script type="text/javascript">
|
||||
document.title = window.location.hostname.split('.')[0];
|
||||
</script>
|
||||
<link rel="apple-touch-icon" href="/public/touchicon.png"/>
|
||||
<link rel="stylesheet" type="text/css" href="/ui-min.css"/>
|
||||
<script type="text/javascript" src="/all-min.js"></script>
|
||||
</head>
|
||||
<body class="delayed" onload="ui.onload();" onbeforeunload="ui.onbeforeunload();">
|
||||
<div id="bodydiv" class="bodydiv">
|
||||
|
||||
<div id="headdiv" class="hsection">
|
||||
<script type="text/javascript" src="/headconfig.js"></script>
|
||||
</div>
|
||||
|
||||
<div id="app">
|
||||
<iframe id="appframe" style="position: relative; height: 5000px; width: 100%;" scrolling="no" frameborder="0" src="/frame.html"></iframe>
|
||||
</div>
|
||||
|
||||
<div id="appbuffer" style="visibility: hidden">
|
||||
</div>
|
||||
|
||||
<base href="/"/>
|
||||
<script type="text/javascript">
|
||||
ui.initbody();
|
||||
|
||||
window.appcache = {};
|
||||
|
||||
/**
|
||||
* The main app div.
|
||||
* Get and cache a resource.
|
||||
*/
|
||||
var appdiv = $('app');
|
||||
var appframe = $('appframe');
|
||||
var appbody;
|
||||
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 err', u, 'X-Login');
|
||||
return null;
|
||||
} else if (http.responseText == '' || http.getResponseHeader("Content-Type") == null) {
|
||||
if (log) log('http err', u, 'No-Content');
|
||||
return null;
|
||||
}
|
||||
localStorage.setItem(u, http.responseText);
|
||||
return http.responseText;
|
||||
}
|
||||
if (log) log('http err', u, http.status, http.statusText);
|
||||
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')));
|
||||
})();
|
||||
|
||||
</script>
|
||||
</head>
|
||||
<body class="delayed" onload="onload();">
|
||||
<div id="mainbodydiv" class="mainbodydiv">
|
||||
|
||||
<div id="headdiv" class="hsection">
|
||||
<script type="text/javascript">
|
||||
(function() {
|
||||
$('headdiv').appendChild(ui.declareScript(appcache.get('/headconfig.js')));
|
||||
})();
|
||||
</script>
|
||||
</div>
|
||||
|
||||
<div id="content">
|
||||
</div>
|
||||
|
||||
<script type="text/javascript">
|
||||
|
||||
// Set the document title
|
||||
document.title = location.hostname.split('.')[0];
|
||||
|
||||
/**
|
||||
* The main page div.
|
||||
*/
|
||||
var contentdiv = $('content');
|
||||
|
||||
/**
|
||||
* Start, stop, timer, animation and location components.
|
||||
|
@ -63,6 +104,59 @@ var timercomp = sca.httpclient('timer', '/timer');
|
|||
var animationcomp = sca.httpclient('animation', '/animation');
|
||||
var locationcomp = sca.httpclient('location', '/location');
|
||||
|
||||
/**
|
||||
* Pre-fetch app resources.
|
||||
*/
|
||||
var appresources = [
|
||||
['/all-min.js'],
|
||||
['/app.html'],
|
||||
['/ui-min.css'],
|
||||
['/footconfig.js'],
|
||||
['/headconfig.js'],
|
||||
];
|
||||
|
||||
/**
|
||||
* Handle application cache events.
|
||||
*/
|
||||
applicationCache.addEventListener('checking', function(e) {
|
||||
//log('appcache checking', e);
|
||||
}, false);
|
||||
applicationCache.addEventListener('error', function(e) {
|
||||
//log('appcache error', e);
|
||||
}, false);
|
||||
applicationCache.addEventListener('noupdate', function(e) {
|
||||
//log('appcache noupdate', e);
|
||||
}, false);
|
||||
applicationCache.addEventListener('downloading', function(e) {
|
||||
//log('appcache downloading', e);
|
||||
}, false);
|
||||
applicationCache.addEventListener('progress', function(e) {
|
||||
//log('appcache progress', e);
|
||||
}, false);
|
||||
applicationCache.addEventListener('updateready', function(e) {
|
||||
//log('appcache updateready', e);
|
||||
applicationCache.swapCache();
|
||||
//log('appcache swapped', e);
|
||||
}, false);
|
||||
applicationCache.addEventListener('cached', function(e) {
|
||||
//log('appcache cached', e);
|
||||
map(function(res) {
|
||||
appcache.get(res[0]);
|
||||
}, appresources);
|
||||
}, false);
|
||||
|
||||
/**
|
||||
* Handle network offline/online events.
|
||||
*/
|
||||
window.addEventListener('offline', function(e) {
|
||||
//log('going offline');
|
||||
}, false);
|
||||
window.addEventListener('online', function(e) {
|
||||
//log('going online');
|
||||
}, false);
|
||||
|
||||
//log(navigator.onLine? 'online' : 'offline');
|
||||
|
||||
/**
|
||||
* Find a named value in a tree of elements. The value name is given
|
||||
* as a list of ids.
|
||||
|
@ -172,12 +266,12 @@ function setwidgetvalue(e, dv) {
|
|||
|
||||
// Define the stylesheet
|
||||
if (s != '') {
|
||||
var esheet = appframe.contentDocument.getElementById('style_' + e.id);
|
||||
var esheet = contentdiv.getElementById('style_' + e.id);
|
||||
if (isNil(esheet)) {
|
||||
var nesheet = document.createElement('style');
|
||||
nesheet.id = 'style_' + e.id;
|
||||
nesheet.type = 'text/css';
|
||||
appframe.contentDocument.getElementsByTagName('head')[0].appendChild(nesheet);
|
||||
contentdiv.getElementsByTagName('head')[0].appendChild(nesheet);
|
||||
nesheet.innerHTML = s;
|
||||
} else {
|
||||
esheet.innerHTML = s;
|
||||
|
@ -294,7 +388,7 @@ function updatepage(l) {
|
|||
return e;
|
||||
}
|
||||
|
||||
map(updatewidget, filter(function(e) { return !isNil(e.id) && e.id.substring(0, 5) != 'page:'; }, nodeList(ui.elementByID(appbody, 'page').childNodes)));
|
||||
map(updatewidget, filter(function(e) { return !isNil(e.id) && e.id.substring(0, 5) != 'page:'; }, nodeList(ui.elementByID(contentdiv, 'page').childNodes)));
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -474,16 +568,10 @@ function getpagedata() {
|
|||
}
|
||||
|
||||
// Get the component app data
|
||||
var doc = getdoc(startcomp, 'start', window.location.search);
|
||||
|
||||
// Prepare app HTML page
|
||||
appbody = appframe.contentDocument.body;
|
||||
var appbufferbody = $('appbufferframe').contentDocument.body;
|
||||
appbody.innerHTML = appbufferbody.innerHTML;
|
||||
appbufferbody.innerHTML = '';
|
||||
var doc = getdoc(startcomp, 'start', location.search);
|
||||
|
||||
// Setup the widgets
|
||||
map(setupwidget, filter(function(e) { return !isNil(e.id); }, nodeList(ui.elementByID(appbody, 'page').childNodes)));
|
||||
map(setupwidget, filter(function(e) { return !isNil(e.id); }, nodeList(ui.elementByID(contentdiv, 'page').childNodes)));
|
||||
|
||||
// Display data on the page
|
||||
displaypage(doc);
|
||||
|
@ -513,7 +601,7 @@ function compquery() {
|
|||
return append(nodeList(n.childNodes), reduce(append, mklist(), map(childrenList, nodeList(n.childNodes))));
|
||||
}
|
||||
|
||||
var args = map(queryarg, filter(function(e) { return !isNil(e.id) && !isNil(inputvalue(e)); }, childrenList(ui.elementByID(appbody, 'page'))));
|
||||
var args = map(queryarg, filter(function(e) { return !isNil(e.id) && !isNil(inputvalue(e)); }, childrenList(ui.elementByID(contentdiv, 'page'))));
|
||||
|
||||
// Append current location properties if known
|
||||
if (!isNil(geoposition)) {
|
||||
|
@ -677,12 +765,35 @@ function setupLocationHandler() {
|
|||
return true;
|
||||
}
|
||||
|
||||
// Load the app frame
|
||||
$('appbuffer').innerHTML = '<iframe id="appbufferframe" style="position: relative; height: 5000px; width: 100%;" scrolling="no" frameborder="0" src="app.html" onload="getpagedata()"></iframe>';
|
||||
// Load the app page
|
||||
var appcontent = appcache.get('/app.html');
|
||||
contentdiv.innerHTML = appcontent;
|
||||
|
||||
// Merge in the app data
|
||||
getpagedata();
|
||||
|
||||
/**
|
||||
* Document load post processing.
|
||||
*/
|
||||
function onload() {
|
||||
//log('onload');
|
||||
|
||||
// Show the page
|
||||
document.body.style.visibility = 'visible';
|
||||
|
||||
// Scroll to the top and hide the address bar
|
||||
window.scrollTo(0, 0);
|
||||
return true;
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
<div id="footdiv" class="fsection">
|
||||
<script type="text/javascript" src="/footconfig.js"></script>
|
||||
<script type="text/javascript">
|
||||
(function() {
|
||||
$('footdiv').appendChild(ui.declareScript(appcache.get('/footconfig.js')));
|
||||
})();
|
||||
</script>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
|
|
@ -1,39 +1,17 @@
|
|||
CACHE MANIFEST
|
||||
|
||||
# Version 2
|
||||
|
||||
# Common resources
|
||||
/all-min.js
|
||||
/ui-min.css
|
||||
# Version 5
|
||||
|
||||
# App resources
|
||||
/
|
||||
/account/
|
||||
/app/
|
||||
/clone/
|
||||
/data/
|
||||
/create/
|
||||
/favicon.ico
|
||||
/footconfig.js
|
||||
/graph/graph.js
|
||||
/graph/
|
||||
/headconfig.js
|
||||
/home.png
|
||||
/menu.js
|
||||
/page/
|
||||
/page/page.js
|
||||
/public/app.png
|
||||
/public/grid72.png
|
||||
/notauth/
|
||||
/notfound/
|
||||
/notyet/
|
||||
/oops/
|
||||
/public/iframe.html
|
||||
/public/img.png
|
||||
/public/notauth.html
|
||||
/public/notfound.html
|
||||
/public/notyet.html
|
||||
/public/oops.html
|
||||
/public/touchicon.png
|
||||
/robots.txt
|
||||
/stats/
|
||||
/store/
|
||||
|
||||
NETWORK:
|
||||
*
|
||||
|
|
|
@ -17,26 +17,8 @@
|
|||
* 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"/>
|
||||
<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"/>
|
||||
<link rel="stylesheet" type="text/css" href="/ui-min.css"/>
|
||||
<script type="text/javascript" src="/all-min.js"></script>
|
||||
<script type="text/javascript" src="/menu.js"></script>
|
||||
</head>
|
||||
<body class="delayed" onload="ui.onload();" onbeforeunload="ui.onbeforeunload();">
|
||||
<div id="bodydiv" class="bodydiv">
|
||||
|
||||
<div id="headdiv" class="hsection">
|
||||
<script type="text/javascript" src="/headconfig.js"></script>
|
||||
</div>
|
||||
|
||||
<div id="menu"></div>
|
||||
|
||||
<table style="width: 100%;">
|
||||
<tr>
|
||||
<td><h2><span id="h1"></span><span id="appNameHeader"></span></h2></td>
|
||||
|
@ -54,7 +36,7 @@
|
|||
<tr><td><b>New App Name:</b></td></tr>
|
||||
<tr><td><input type="text" id="appName" size="15" autocapitalize="off" placeholder="Your app name"/> <span id="appDomain"></span></td></tr>
|
||||
<tr><tr><td style="padding-top: 6px;"><b>App Icon:</b></td></tr>
|
||||
<tr><td><img src="/public/app.png" style="width: 50px; height: 50px; vertical-align: top;"></td></tr>
|
||||
<tr><td><img id="appimg" style="width: 50px; height: 50px; vertical-align: top;"></td></tr>
|
||||
<tr><tr><td style="padding-top: 6px;"><b>Sharing:</b></td></tr>
|
||||
<tr><td><input type="checkbox" value="shared"/><span>Shared</span></td></tr>
|
||||
<tr><tr><td style="padding-top: 6px;"><b>App Title:</b></td></tr>
|
||||
|
@ -69,20 +51,17 @@
|
|||
</form>
|
||||
|
||||
<script type="text/javascript">
|
||||
ui.initbody();
|
||||
|
||||
// Get the app name
|
||||
var appname = ui.fragmentParams()['app'];
|
||||
if (isNil(appname))
|
||||
window.open('/', '_self');
|
||||
var appname = ui.fragmentParams(location)['app'];
|
||||
|
||||
/**
|
||||
* Return the link to an app.
|
||||
*/
|
||||
function applink(appname) {
|
||||
var protocol = window.location.protocol;
|
||||
var host = window.location.hostname;
|
||||
var port = ':' + window.location.port;
|
||||
var protocol = location.protocol;
|
||||
var host = location.hostname;
|
||||
var port = ':' + location.port;
|
||||
if (port == ':80' || port == ':443' || port == ':')
|
||||
port = '';
|
||||
var link = protocol + '//' + appname + '.' + host + port + '/';
|
||||
|
@ -91,17 +70,17 @@ function applink(appname) {
|
|||
|
||||
// Set page titles
|
||||
var tclone = isNil(config.clone)? 'Clone' : config.clone;
|
||||
document.title = windowtitle(window.location.hostname) + ' - ' + tclone + ' - ' + appname;
|
||||
document.title = ui.windowtitle(location.hostname) + ' - ' + tclone + ' - ' + appname;
|
||||
$('appNameHeader').innerHTML = '<a href=\"' + applink(appname) + '\" target=\"' + '_blank' + '\">' + appname + '</a>';
|
||||
$('th').innerHTML = tclone + ' this App';
|
||||
$('cloneAppOKButton').value = tclone;
|
||||
$('cloneAppOKButton').title = tclone + ' this app';
|
||||
|
||||
// Load the menu bar
|
||||
displaymenu();
|
||||
// Set images
|
||||
$('appimg').src = ui.b64img(appcache.get('/public/app.b64'));
|
||||
|
||||
// Init form
|
||||
$('appDomain').innerHTML = '.' + window.location.hostname;
|
||||
$('appDomain').innerHTML = '.' + location.hostname;
|
||||
|
||||
// Init service references
|
||||
var editWidget = sca.component("EditWidget");
|
||||
|
@ -152,7 +131,7 @@ $('cloneAppForm').onsubmit = function() {
|
|||
return false;
|
||||
|
||||
// Open it in the page editor
|
||||
ui.navigate('/page/#app=' + name, '_self');
|
||||
ui.navigate('/#view=page&app=' + name, '_view');
|
||||
return false;
|
||||
});
|
||||
return false;
|
||||
|
@ -162,18 +141,12 @@ $('cloneAppForm').onsubmit = function() {
|
|||
* Cancel cloning an app.
|
||||
*/
|
||||
$('cloneAppCancelButton').onclick = function() {
|
||||
ui.navigate('/stats/#app=' + appname, '_self');
|
||||
history.back();
|
||||
};
|
||||
|
||||
// Get the current app
|
||||
getapp(appname);
|
||||
|
||||
</script>
|
||||
|
||||
<div id="footdiv" class="fsection">
|
||||
<script type="text/javascript" src="/footconfig.js"></script>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
|
|
|
@ -17,26 +17,8 @@
|
|||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
-->
|
||||
<html manifest="/cache-manifest.cmf">
|
||||
<head>
|
||||
<title>Create App</title>
|
||||
<meta name="viewport" content="width=device-width, user-scalable=no, initial-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"/>
|
||||
<link rel="stylesheet" type="text/css" href="/ui-min.css"/>
|
||||
<script type="text/javascript" src="/all-min.js"></script>
|
||||
<script type="text/javascript" src="/menu.js"></script>
|
||||
</head>
|
||||
<body class="delayed" onload="ui.onload();" onbeforeunload="ui.onbeforeunload();">
|
||||
<div id="bodydiv" class="bodydiv">
|
||||
|
||||
<div id="headdiv" class="hsection">
|
||||
<script type="text/javascript" src="/headconfig.js"></script>
|
||||
</div>
|
||||
|
||||
<div id="menu"></div>
|
||||
|
||||
<table style="width: 100%;">
|
||||
<tr><td><h2><span id="h1"></span></h2></td></tr>
|
||||
</table>
|
||||
|
@ -52,7 +34,7 @@
|
|||
<tr><td><b>App Name:</b></td></tr>
|
||||
<tr><td><input type="text" id="appName" size="15" autocapitalize="off" placeholder="Your app name"/> <span id="appDomain"></span></td></tr>
|
||||
<tr><tr><td style="padding-top: 6px;"><b>App Icon:</b></td></tr>
|
||||
<tr><td><img src="/public/app.png" style="width: 50px; height: 50px; vertical-align: top;"></td></tr>
|
||||
<tr><td><img id="appimg" style="width: 50px; height: 50px; vertical-align: top;"></td></tr>
|
||||
<tr><tr><td style="padding-top: 6px;"><b>Sharing:</b></td></tr>
|
||||
<tr><td><input type="checkbox" value="shared"/><span>Shared</span></td></tr>
|
||||
<tr><tr><td style="padding-top: 6px;"><b>App Title:</b></td></tr>
|
||||
|
@ -67,17 +49,16 @@
|
|||
</form>
|
||||
|
||||
<script type="text/javascript">
|
||||
ui.initbody();
|
||||
|
||||
// Set page titles
|
||||
document.title = windowtitle(window.location.hostname) + ' - Create App';
|
||||
$('h1').innerHTML = hometitle(window.location.hostname);
|
||||
document.title = ui.windowtitle(location.hostname) + ' - Create App';
|
||||
$('h1').innerHTML = ui.hometitle(location.hostname);
|
||||
|
||||
// Load the menu bar
|
||||
displaymenu();
|
||||
// Set images
|
||||
$('appimg').src = ui.b64img(appcache.get('/public/app.b64'));
|
||||
|
||||
// Init form
|
||||
$('appDomain').innerHTML = '.' + window.location.hostname;
|
||||
$('appDomain').innerHTML = '.' + location.hostname;
|
||||
|
||||
// Init service references
|
||||
var editWidget = sca.component("EditWidget");
|
||||
|
@ -101,7 +82,7 @@ $('createAppForm').onsubmit = function() {
|
|||
return false;
|
||||
|
||||
// Open it in the page editor
|
||||
ui.navigate('/page/#app=' + name, '_self');
|
||||
ui.navigate('/#view=page&app=' + name, '_view');
|
||||
return false;
|
||||
});
|
||||
return false;
|
||||
|
@ -111,15 +92,9 @@ $('createAppForm').onsubmit = function() {
|
|||
* Cancel creating an app.
|
||||
*/
|
||||
$('createAppCancelButton').onclick = function() {
|
||||
return ui.navigate('/store/', '_self');
|
||||
history.back();
|
||||
};
|
||||
|
||||
</script>
|
||||
|
||||
<div id="footdiv" class="fsection">
|
||||
<script type="text/javascript" src="/footconfig.js"></script>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
|
|
|
@ -1,105 +0,0 @@
|
|||
<!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>View</title>
|
||||
<script type="text/javascript">
|
||||
var cn = window.location.search.substring(1).split('=')[1];
|
||||
document.title = 'View - ' + window.location.hostname.split('.')[0] + '/' + cn;
|
||||
</script>
|
||||
<meta name="viewport" content="width=device-width, user-scalable=no, initial-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"/>
|
||||
<link rel="stylesheet" type="text/css" href="/ui-min.css">
|
||||
<script type="text/javascript" src="/all-min.js"></script>
|
||||
</head>
|
||||
<body class="delayed" onload="ui.onload();" onbeforeunload="ui.onbeforeunload();">
|
||||
|
||||
<div id="bodydiv" style="position: absolute; top: 0px; left: 0px; right: 0px;">
|
||||
<div id="compLinkHeader" style="margin-top: 4px; margin-bottom: 4px;"></div>
|
||||
<div id="datadiv" style="position: relative; left: 0px; right: 0px;">
|
||||
</div>
|
||||
|
||||
<script type="text/javascript">
|
||||
ui.initbody();
|
||||
|
||||
// Get the component name
|
||||
var cname = ui.fragmentParams()['component'];
|
||||
|
||||
/**
|
||||
* The current component.
|
||||
*/
|
||||
var comp = sca.component(cname);
|
||||
|
||||
/**
|
||||
* Display an HTML element.
|
||||
*/
|
||||
function display(e) {
|
||||
$('datadiv').innerHTML = e;
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert data to an HTML table.
|
||||
*/
|
||||
function datatable(e) {
|
||||
return ui.datatable(e);
|
||||
}
|
||||
|
||||
/**
|
||||
* Wrap a document in an HTML table.
|
||||
*/
|
||||
function mkdoctable(doc) {
|
||||
var tr = '<tr><td class="datatdl">' + 'value' + '</td>' + '<td class="datatdr">' + doc + '</td></tr>';
|
||||
return '<table class="datatable ' + (window.name == 'previewFrame'? ' databg' : '') + '" style="width: 100%;">' + tr + '</table>';
|
||||
}
|
||||
|
||||
/**
|
||||
* Get and display the contents of the current component.
|
||||
*/
|
||||
function getdata() {
|
||||
return comp.getnocache('', function(doc) {
|
||||
|
||||
// Stop now if we didn't the doc
|
||||
if (doc == null)
|
||||
return false;
|
||||
|
||||
if (json.isJSON(mklist(doc)))
|
||||
return display(datatable(json.readJSON(mklist(doc))));
|
||||
|
||||
if (atom.isATOMEntry(mklist(doc)))
|
||||
return display(datatable(atom.readATOMEntry(mklist(doc))));
|
||||
|
||||
if (atom.isATOMFeed(mklist(doc)))
|
||||
return display(datatable(atom.readATOMFeed(mklist(doc))));
|
||||
|
||||
return display(mkdoctable('<iframe style="width: 100%; height: 5000px;" scrolling="no" frameborder="0" src="' + comp.uri + '"/>'));
|
||||
});
|
||||
}
|
||||
|
||||
getdata();
|
||||
</script>
|
||||
|
||||
<div id="footdiv" class="fsection">
|
||||
<script type="text/javascript" src="/footconfig.js"></script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
1
sca-cpp/trunk/modules/edit/htdocs/home/home.b64
Normal file
1
sca-cpp/trunk/modules/edit/htdocs/home/home.b64
Normal file
File diff suppressed because one or more lines are too long
Before Width: | Height: | Size: 9.4 KiB After Width: | Height: | Size: 9.4 KiB |
|
@ -17,48 +17,47 @@
|
|||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
-->
|
||||
<html manifest="/cache-manifest.cmf">
|
||||
<head>
|
||||
<title>Oops</title>
|
||||
<meta name="viewport" content="width=device-width user-scalable=no initial-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="stylesheet" type="text/css" href="/ui-min.css"/>
|
||||
<script type="text/javascript" src="/all-min.js"></script>
|
||||
<script type="text/javascript" src="/menu.js"></script>
|
||||
</head>
|
||||
<body class="delayed" onload="ui.onload();" onbeforeunload="ui.onbeforeunload();">
|
||||
<div id="bodydiv" class="bodydiv">
|
||||
|
||||
<div id="headdiv" class="hsection">
|
||||
<script type="text/javascript" src="/headconfig.js"></script>
|
||||
</div>
|
||||
|
||||
<div id="menu"></div>
|
||||
|
||||
<table style="width: 100%;">
|
||||
<tr><td><h2><span id="h1"></span></h2></td></tr>
|
||||
</table>
|
||||
|
||||
<div style="margin-left: auto; margin-right: auto; text-align: center;">
|
||||
<div class="hd2">Oops, something went wrong...</div>
|
||||
|
||||
<div id="maintitle" style="font-size: 150%;"></div>
|
||||
|
||||
<div id="maindiagram"><div id="diagram" style="width: 320px; height: 280px; padding: 0px; margin: 0px auto;"></div></div>
|
||||
|
||||
<input type="button" class="greenbutton" style="font-size: 150%; font-weight: bold; font-style: italic; padding: 10px;" id="getstarted" title="Get Started" value="Get Started"/>
|
||||
|
||||
<br/><br/>
|
||||
<div>Requires Safari 5+, Chrome 11+, Firefox 4+, IE 9+</div>
|
||||
|
||||
</div>
|
||||
|
||||
<script type="text/javascript">
|
||||
ui.initbody();
|
||||
|
||||
// Set page title
|
||||
$('h1').innerHTML = hometitle(window.location.hostname);
|
||||
// Set page titles
|
||||
document.title = ui.windowtitle(location.hostname);
|
||||
$('h1').innerHTML = ui.hometitle(location.hostname);
|
||||
|
||||
$('maintitle').innerHTML = isNil(config.maintitle)? 'Simple App Builder' : config.maintitle;
|
||||
$('getstarted').onclick = function() {
|
||||
return ui.navigate('/#view=store', '_view');
|
||||
};
|
||||
|
||||
// Display the main diagram
|
||||
var diagram = $('diagram');
|
||||
diagram.style.background = 'url(\'' + ui.b64img(appcache.get('/home/home.b64')) + '\')';
|
||||
var bgpos = 0;
|
||||
setInterval(function() {
|
||||
bgpos = bgpos -280;
|
||||
if (bgpos == -2800)
|
||||
bgpos = 0;
|
||||
diagram.style.backgroundPosition = '0px ' + ui.pixpos(bgpos);
|
||||
}, 2000);
|
||||
|
||||
// Load the menu bar
|
||||
if (!issubdomain(window.location.hostname))
|
||||
displaymenu();
|
||||
</script>
|
||||
|
||||
<div id="footdiv" class="fsection">
|
||||
<script type="text/javascript" src="/footconfig.js"></script>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -19,78 +19,417 @@
|
|||
-->
|
||||
<html manifest="/cache-manifest.cmf">
|
||||
<head>
|
||||
<title>Home</title>
|
||||
<title></title>
|
||||
<meta name="viewport" content="width=device-width, user-scalable=no, initial-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"/>
|
||||
<link rel="stylesheet" type="text/css" href="/ui-min.css"/>
|
||||
<script type="text/javascript" src="/all-min.js"></script>
|
||||
<script type="text/javascript" src="/menu.js"></script>
|
||||
<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 err', u, 'X-Login');
|
||||
return null;
|
||||
} else if (http.responseText == '' || http.getResponseHeader("Content-Type") == null) {
|
||||
if (log) log('http err', u, 'No-Content');
|
||||
return null;
|
||||
}
|
||||
localStorage.setItem(u, http.responseText);
|
||||
return http.responseText;
|
||||
}
|
||||
if (log) log('http err', u, http.status, http.statusText);
|
||||
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')));
|
||||
})();
|
||||
|
||||
</script>
|
||||
</head>
|
||||
<body class="delayed" onload="ui.onload();" onbeforeunload="ui.onbeforeunload();">
|
||||
<div id="bodydiv" class="bodydiv">
|
||||
<body class="delayed" onload="onload();">
|
||||
<div id="mainbodydiv" class="mainbodydiv" style="overflow: visible;">
|
||||
|
||||
<div id="headdiv" class="hsection">
|
||||
<script type="text/javascript" src="/headconfig.js"></script>
|
||||
<script type="text/javascript">
|
||||
(function() {
|
||||
$('headdiv').appendChild(ui.declareScript(appcache.get('/headconfig.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">> </span></td></tr></table>
|
||||
</td></tr></table>
|
||||
</div>
|
||||
|
||||
<div id="menu"></div>
|
||||
|
||||
<table style="width: 100%;">
|
||||
<tr><td><h2><span id="h1"></span></h2></td></tr>
|
||||
</table>
|
||||
|
||||
<div style="margin-left: auto; margin-right: auto; text-align: center;">
|
||||
|
||||
<div id="maintitle" style="font-size: 150%;"></div>
|
||||
|
||||
<div id="maindiagram"><div id="diagram" style="width: 320px; height: 280px; background: url(home.png); padding: 0px; margin: 0px auto;"></div></div>
|
||||
|
||||
<input type="button" class="greenbutton" style="font-size: 150%; font-weight: bold; font-style: italic; padding: 10px;" id="getstarted" title="Get Started" value="Get Started"/>
|
||||
|
||||
<br/><br/>
|
||||
<div>Requires Safari 5+, Chrome 11+, Firefox 4+, IE 9+</div>
|
||||
|
||||
<div id="content" class="bodydiv" style="overflow: visible;">
|
||||
<div id="viewcontainer"></div>
|
||||
</div>
|
||||
|
||||
<script type="text/javascript">
|
||||
|
||||
// On mobile devices, redirect to the last visited page
|
||||
if (ui.isMobile() && (document.referrer == null || document.referrer == '')) {
|
||||
var last = ui.lastvisited();
|
||||
if (!isNil(last) && last != document.location)
|
||||
window.open(last, '_self');
|
||||
// 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'],
|
||||
['/footconfig.js'],
|
||||
['/graph/', 'flip'],
|
||||
['/headconfig.js'],
|
||||
['/home/', 'right'],
|
||||
['/home/home.b64'],
|
||||
['/page/', 'flip'],
|
||||
['/public/app.b64'],
|
||||
['/public/grid72.b64'],
|
||||
['/public/iframe.html'],
|
||||
['/public/img.b64'],
|
||||
['/public/user.b64'],
|
||||
['/stats/', 'flip'],
|
||||
['/store/', 'left']
|
||||
];
|
||||
|
||||
/**
|
||||
* Handle application cache events.
|
||||
*/
|
||||
applicationCache.addEventListener('checking', function(e) {
|
||||
//log('appcache checking', e);
|
||||
}, false);
|
||||
applicationCache.addEventListener('error', function(e) {
|
||||
//log('appcache error', e);
|
||||
}, false);
|
||||
applicationCache.addEventListener('noupdate', function(e) {
|
||||
//log('appcache noupdate', e);
|
||||
}, false);
|
||||
applicationCache.addEventListener('downloading', function(e) {
|
||||
//log('appcache downloading', e);
|
||||
}, false);
|
||||
applicationCache.addEventListener('progress', function(e) {
|
||||
//log('appcache progress', e);
|
||||
}, false);
|
||||
applicationCache.addEventListener('updateready', function(e) {
|
||||
//log('appcache updateready', e);
|
||||
applicationCache.swapCache();
|
||||
//log('appcache swapped', e);
|
||||
}, false);
|
||||
applicationCache.addEventListener('cached', function(e) {
|
||||
//log('appcache cached', e);
|
||||
map(function(res) {
|
||||
appcache.get(res[0]);
|
||||
}, appresources);
|
||||
}, false);
|
||||
|
||||
/**
|
||||
* Handle network offline/online events.
|
||||
*/
|
||||
window.addEventListener('offline', function(e) {
|
||||
//log('going offline');
|
||||
}, false);
|
||||
window.addEventListener('online', function(e) {
|
||||
//log('going 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;
|
||||
}
|
||||
|
||||
// Init and display this page
|
||||
ui.initbody();
|
||||
/**
|
||||
* Create a new view div.
|
||||
*/
|
||||
function mkviewdiv(cname) {
|
||||
var vdiv = document.createElement('div');
|
||||
vdiv.className = cname;
|
||||
if (!ui.isMobile())
|
||||
return vdiv;
|
||||
|
||||
// Set page titles
|
||||
document.title = windowtitle(window.location.hostname);
|
||||
$('h1').innerHTML = hometitle(window.location.hostname);
|
||||
// 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;
|
||||
}
|
||||
|
||||
// Display the menu bar
|
||||
displaymenu();
|
||||
/**
|
||||
* Return the last visited location.
|
||||
*/
|
||||
function lastvisited() {
|
||||
var loc = localStorage.getItem('ui.lastvisited')
|
||||
if (!isNil(loc))
|
||||
return loc;
|
||||
return '' + location;
|
||||
}
|
||||
|
||||
$('maintitle').innerHTML = isNil(config.maintitle)? 'Simple App Builder' : config.maintitle;
|
||||
$('getstarted').onclick = function() {
|
||||
return ui.navigate('/store/', '_self');
|
||||
/**
|
||||
* 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.menu('Sign out', '/logout/', '_self', false)));
|
||||
}
|
||||
|
||||
/**
|
||||
* 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;
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle navigations.
|
||||
*/
|
||||
window.onnavigate = function(url) {
|
||||
//log('onnavigate', url);
|
||||
|
||||
// Add url to the history
|
||||
if (url != ui.pathandparams(location)) {
|
||||
history.pushState(null, null, url);
|
||||
var f = ui.fragment(url);
|
||||
if (f != '' && f != location.hash) {
|
||||
location.hash = f;
|
||||
//log('hash', f);
|
||||
}
|
||||
//log('pushstate', history.length);
|
||||
}
|
||||
|
||||
// Show the specified view
|
||||
if (url == viewurl)
|
||||
return true;
|
||||
return showview(url);
|
||||
};
|
||||
|
||||
// Display the main diagram
|
||||
var diagram = $('diagram');
|
||||
var bgpos = 0;
|
||||
setInterval(function() {
|
||||
bgpos = bgpos -280;
|
||||
if (bgpos == -2800)
|
||||
bgpos = 0;
|
||||
diagram.style.backgroundPosition = '0px ' + ui.pixpos(bgpos);
|
||||
}, 2000);
|
||||
/**
|
||||
* Handle history.
|
||||
*/
|
||||
window.addEventListener('popstate', function(e) {
|
||||
//log('popstate', 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);
|
||||
|
||||
/**
|
||||
* Document load post processing.
|
||||
*/
|
||||
function onload() {
|
||||
//log('onload', history.length);
|
||||
var furl = ui.fragment(location);
|
||||
url = location.pathname + (furl == ''? '' : '#' + furl);
|
||||
|
||||
// Show the current view
|
||||
if (url == viewurl)
|
||||
return true;
|
||||
return showview(url);
|
||||
}
|
||||
|
||||
// Show the last visited view
|
||||
//if (ui.isMobile() && (document.referrer == null || document.referrer == '')) {
|
||||
//log('show lastvisited');
|
||||
//showview(lastvisited());
|
||||
//} else
|
||||
//showview('/');
|
||||
|
||||
</script>
|
||||
|
||||
<div id="footdiv" class="fsection">
|
||||
<script type="text/javascript" src="/footconfig.js"></script>
|
||||
<script type="text/javascript">
|
||||
(function() {
|
||||
$('footdiv').appendChild(ui.declareScript(appcache.get('/footconfig.js')));
|
||||
})();
|
||||
</script>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
|
|
@ -17,17 +17,17 @@
|
|||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
-->
|
||||
<html manifest="/cache-manifest.cmf">
|
||||
<html>
|
||||
<head>
|
||||
<title>Sign in</title>
|
||||
<meta name="viewport" content="width=device-width, user-scalable=no, initial-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="/login/"/>
|
||||
<link rel="stylesheet" type="text/css" href="/ui-min.css"/>
|
||||
<script type="text/javascript" src="/all-min.js"></script>
|
||||
</head>
|
||||
<body class="delayed" onload="ui.onload();" onbeforeunload="ui.onbeforeunload();">
|
||||
<body class="delayed" onload="onload();">
|
||||
<div id="bodydiv" class="bodydiv">
|
||||
|
||||
<h1>Sign in</h1>
|
||||
|
@ -44,8 +44,6 @@
|
|||
</form>
|
||||
|
||||
<script type="text/javascript">
|
||||
ui.initbody();
|
||||
|
||||
function queryParams() {
|
||||
qp = new Array();
|
||||
qs = window.location.search.substring(1).split('&');
|
||||
|
@ -71,11 +69,22 @@ function oauthReferrer() {
|
|||
}
|
||||
|
||||
function submitSignin() {
|
||||
var reset = 'TuscanyOpenAuth=;expires=' + new Date(1970,01,01).toGMTString() + ';domain=.' + domainname(window.location.hostname) + ';path=/;secure=TRUE';
|
||||
var reset = 'TuscanyOpenAuth=;expires=' + new Date(1970,01,01).toGMTString() + ';domain=.' + domainname(window.location.hostname) + ';path=/';
|
||||
document.cookie = reset;
|
||||
document.formSignin.httpd_location.value = oauthReferrer();
|
||||
document.formSignin.submit();
|
||||
}
|
||||
|
||||
function onload() {
|
||||
// Show the page
|
||||
document.body.style.visibility = 'visible';
|
||||
|
||||
// Scroll to the top and hide the address bar
|
||||
window.scrollTo(0, 1);
|
||||
window.scrollTo(0, 0);
|
||||
return true;
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
</div>
|
||||
|
|
|
@ -17,17 +17,17 @@
|
|||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
-->
|
||||
<html manifest="/cache-manifest.cmf">
|
||||
<html>
|
||||
<head>
|
||||
<title>Sign out</title>
|
||||
<meta name="viewport" content="width=device-width, user-scalable=no, initial-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="/logout/"/>
|
||||
<link rel="stylesheet" type="text/css" href="/ui-min.css"/>
|
||||
<script type="text/javascript" src="/all-min.js"></script>
|
||||
</head>
|
||||
<body class="delayed" onload="ui.onload();" onbeforeunload="ui.onbeforeunload();">
|
||||
<body class="delayed" onload="onload();">
|
||||
<div id="bodydiv" class="bodydiv">
|
||||
|
||||
<h1>Sign out</h1>
|
||||
|
@ -37,16 +37,25 @@
|
|||
</form>
|
||||
|
||||
<script type="text/javascript">
|
||||
ui.initbody();
|
||||
|
||||
function submitSignout() {
|
||||
// Clear session cookie and local storage
|
||||
var reset = 'TuscanyOpenAuth=; expires=' + new Date(1970,01,01).toGMTString() + '; domain=.' + domainname(window.location.hostname) + '; path=/; secure; version=1';
|
||||
var reset = 'TuscanyOpenAuth=; expires=' + new Date(1970,01,01).toGMTString() + '; domain=.' + domainname(window.location.hostname) + '; path=/';
|
||||
document.cookie = reset;
|
||||
localStorage.clear();
|
||||
document.signout.submit();
|
||||
return true;
|
||||
}
|
||||
|
||||
function onload() {
|
||||
// Show the page
|
||||
document.body.style.visibility = 'visible';
|
||||
|
||||
// Scroll to the top and hide the address bar
|
||||
window.scrollTo(0, 1);
|
||||
window.scrollTo(0, 0);
|
||||
return true;
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
</div>
|
||||
|
|
|
@ -1,53 +0,0 @@
|
|||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
var editWidget = sca.component("EditWidget");
|
||||
var user= sca.defun(sca.reference(editWidget, "user"), "id");
|
||||
|
||||
/**
|
||||
* Display the current signed in user.
|
||||
*/
|
||||
function userMenu() {
|
||||
function UserMenu() {
|
||||
this.content = function() {
|
||||
var u = user.id()
|
||||
return '<span>' + u + '</span>';
|
||||
};
|
||||
}
|
||||
return new UserMenu();
|
||||
}
|
||||
|
||||
/**
|
||||
* Display the menu bar.
|
||||
*/
|
||||
function displaymenu() {
|
||||
var mdiv = $('menu');
|
||||
var name = ui.fragmentParams()['app'];
|
||||
|
||||
mdiv.innerHTML = ui.menubar(
|
||||
append(mklist(ui.menu('Home', '/'), ui.menu('Store', '/store/')),
|
||||
(isNil(name) || name == 'undefined')?
|
||||
mklist() :
|
||||
mklist(
|
||||
ui.menu('Stats', '/stats/#app=' + name),
|
||||
ui.menu('Page', '/page/#app=' + name),
|
||||
ui.menu(isNil(config.compose)? 'Composition' : config.compose, '/graph/#app=' + name))),
|
||||
mklist(ui.menu('Account', '/account/'), ui.menu('Sign out', '/logout/')));
|
||||
}
|
||||
|
143
sca-cpp/trunk/modules/edit/htdocs/notauth/index.html
Normal file
143
sca-cpp/trunk/modules/edit/htdocs/notauth/index.html
Normal file
|
@ -0,0 +1,143 @@
|
|||
<!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>
|
||||
<head>
|
||||
<title>Sorry</title>
|
||||
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, target-densitydpi=devicedpi"/>
|
||||
<meta name="apple-mobile-web-app-capable" content="yes"/>
|
||||
<meta name="apple-mobile-web-app-status-bar-style" content="black"/>
|
||||
<base href="/notauth/"/>
|
||||
<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 err', u, 'X-Login');
|
||||
return null;
|
||||
} else if (http.responseText == '' || http.getResponseHeader("Content-Type") == null) {
|
||||
if (log) log('http err', u, 'No-Content');
|
||||
return null;
|
||||
}
|
||||
localStorage.setItem(u, http.responseText);
|
||||
return http.responseText;
|
||||
}
|
||||
if (log) log('http err', u, http.status, http.statusText);
|
||||
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')));
|
||||
})();
|
||||
|
||||
</script>
|
||||
</head>
|
||||
<body class="delayed" onload="onload();">
|
||||
<div id="bodydiv" class="mainbodydiv">
|
||||
|
||||
<div id="headdiv" class="hsection">
|
||||
<script type="text/javascript">
|
||||
(function() {
|
||||
$('headdiv').appendChild(ui.declareScript(appcache.get('/headconfig.js')));
|
||||
})();
|
||||
</script>
|
||||
</div>
|
||||
|
||||
<div id="menu"></div>
|
||||
|
||||
<div id="content" class="viewloaded3d">
|
||||
|
||||
<table style="width: 100%;">
|
||||
<tr><td><h2><span id="h1"></span></h2></td></tr>
|
||||
</table>
|
||||
|
||||
<div style="margin-left: auto; margin-right: auto; text-align: center;">
|
||||
<div class="hd2">Sorry, you're not authorized to view this page.</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<script type="text/javascript">
|
||||
|
||||
// Set page title
|
||||
$('h1').innerHTML = ui.hometitle(location.hostname);
|
||||
|
||||
// Init div variables
|
||||
var mdiv = $('menu');
|
||||
var cdiv = $('content');
|
||||
|
||||
/**
|
||||
* Build and show the menu bar.
|
||||
*/
|
||||
function showmenu(mdiv) {
|
||||
mdiv.innerHTML = ui.menubar(
|
||||
mklist(ui.menu('Home', '/', '_view', false), ui.menu('Store', '/#view=store', '_view', false)),
|
||||
mklist(ui.menu('Account', '/#view=account', '_view', false), ui.menu('Sign out', '/logout/', '_self', false)));
|
||||
}
|
||||
|
||||
showmenu($('menu'));
|
||||
cdiv.style.top = ui.pixpos(mdiv.offsetTop + mdiv.offsetHeight);
|
||||
|
||||
/**
|
||||
* Load post processing.
|
||||
*/
|
||||
function onload() {
|
||||
// Show the page
|
||||
document.body.style.visibility = 'visible';
|
||||
|
||||
// Scroll to the top and hide the address bar
|
||||
window.scrollTo(0, 0);
|
||||
return true;
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
<div id="footdiv" class="fsection">
|
||||
<script type="text/javascript">
|
||||
(function() {
|
||||
$('footdiv').appendChild(ui.declareScript(appcache.get('/footconfig.js')));
|
||||
})();
|
||||
</script>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
144
sca-cpp/trunk/modules/edit/htdocs/notfound/index.html
Normal file
144
sca-cpp/trunk/modules/edit/htdocs/notfound/index.html
Normal file
|
@ -0,0 +1,144 @@
|
|||
<!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>
|
||||
<head>
|
||||
<title>Page not found</title>
|
||||
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, target-densitydpi=devicedpi"/>
|
||||
<meta name="apple-mobile-web-app-capable" content="yes"/>
|
||||
<meta name="apple-mobile-web-app-status-bar-style" content="black"/>
|
||||
<base href="/notfound/"/>
|
||||
<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 err', u, 'X-Login');
|
||||
return null;
|
||||
} else if (http.responseText == '' || http.getResponseHeader("Content-Type") == null) {
|
||||
if (log) log('http err', u, 'No-Content');
|
||||
return null;
|
||||
}
|
||||
localStorage.setItem(u, http.responseText);
|
||||
return http.responseText;
|
||||
}
|
||||
if (log) log('http err', u, http.status, http.statusText);
|
||||
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')));
|
||||
})();
|
||||
|
||||
</script>
|
||||
</head>
|
||||
<body class="delayed" onload="onload();">
|
||||
<div id="bodydiv" class="mainbodydiv">
|
||||
|
||||
<div id="headdiv" class="hsection">
|
||||
<script type="text/javascript">
|
||||
(function() {
|
||||
$('headdiv').appendChild(ui.declareScript(appcache.get('/headconfig.js')));
|
||||
})();
|
||||
</script>
|
||||
</div>
|
||||
|
||||
<div id="menu"></div>
|
||||
|
||||
<div id="content" class="viewloaded3d">
|
||||
|
||||
<table style="width: 100%;">
|
||||
<tr><td><h2><span id="h1"></span></h2></td></tr>
|
||||
</table>
|
||||
|
||||
<div style="margin-left: auto; margin-right: auto; text-align: center;">
|
||||
<div class="hd2">Sorry, that page was not found.</div>
|
||||
<div>You may have clicked an expired link or mistyped the address.</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<script type="text/javascript">
|
||||
|
||||
// Set page title
|
||||
$('h1').innerHTML = ui.hometitle(location.hostname);
|
||||
|
||||
// Init div variables
|
||||
var mdiv = $('menu');
|
||||
var cdiv = $('content');
|
||||
|
||||
/**
|
||||
* Build and show the menu bar.
|
||||
*/
|
||||
function showmenu(mdiv) {
|
||||
mdiv.innerHTML = ui.menubar(
|
||||
mklist(ui.menu('Home', '/', '_view', false), ui.menu('Store', '/#view=store', '_view', false)),
|
||||
mklist(ui.menu('Account', '/#view=account', '_view', false), ui.menu('Sign out', '/logout/', '_self', false)));
|
||||
}
|
||||
|
||||
showmenu(mdiv);
|
||||
div.style.top = ui.pixpos(mdiv.offsetTop + mdiv.offsetHeight);
|
||||
|
||||
/**
|
||||
* Load post processing.
|
||||
*/
|
||||
function onload() {
|
||||
// Show the page
|
||||
document.body.style.visibility = 'visible';
|
||||
|
||||
// Scroll to the top and hide the address bar
|
||||
window.scrollTo(0, 0);
|
||||
return true;
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
<div id="footdiv" class="fsection">
|
||||
<script type="text/javascript">
|
||||
(function() {
|
||||
$('footdiv').appendChild(ui.declareScript(appcache.get('/footconfig.js')));
|
||||
})();
|
||||
</script>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
144
sca-cpp/trunk/modules/edit/htdocs/notyet/index.html
Normal file
144
sca-cpp/trunk/modules/edit/htdocs/notyet/index.html
Normal file
|
@ -0,0 +1,144 @@
|
|||
<!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>
|
||||
<head>
|
||||
<title>Page not found</title>
|
||||
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, target-densitydpi=devicedpi"/>
|
||||
<meta name="apple-mobile-web-app-capable" content="yes"/>
|
||||
<meta name="apple-mobile-web-app-status-bar-style" content="black"/>
|
||||
<base href="/notyet/"/>
|
||||
<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 err', u, 'X-Login');
|
||||
return null;
|
||||
} else if (http.responseText == '' || http.getResponseHeader("Content-Type") == null) {
|
||||
if (log) log('http err', u, 'No-Content');
|
||||
return null;
|
||||
}
|
||||
localStorage.setItem(u, http.responseText);
|
||||
return http.responseText;
|
||||
}
|
||||
if (log) log('http err', u, http.status, http.statusText);
|
||||
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')));
|
||||
})();
|
||||
|
||||
</script>
|
||||
</head>
|
||||
<body class="delayed" onload="onload();">
|
||||
<div id="bodydiv" class="mainbodydiv">
|
||||
|
||||
<div id="headdiv" class="hsection">
|
||||
<script type="text/javascript">
|
||||
(function() {
|
||||
$('headdiv').appendChild(ui.declareScript(appcache.get('/headconfig.js')));
|
||||
})();
|
||||
</script>
|
||||
</div>
|
||||
|
||||
<div id="menu"></div>
|
||||
|
||||
<div id="content" class="viewloaded3d">
|
||||
|
||||
<table style="width: 100%;">
|
||||
<tr><td><h2><span id="h1"></span></h2></td></tr>
|
||||
</table>
|
||||
|
||||
<div style="margin-left: auto; margin-right: auto; text-align: center;">
|
||||
<div class="hd2">Sorry, that page is still under construction.</div>
|
||||
<div>Please check back later.</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<script type="text/javascript">
|
||||
|
||||
// Set page title
|
||||
$('h1').innerHTML = ui.hometitle(location.hostname);
|
||||
|
||||
// Init div variables
|
||||
var mdiv = $('menu');
|
||||
var cdiv = $('content');
|
||||
|
||||
/**
|
||||
* Build and show the menu bar.
|
||||
*/
|
||||
function showmenu(mdiv) {
|
||||
mdiv.innerHTML = ui.menubar(
|
||||
mklist(ui.menu('Home', '/', '_view', false), ui.menu('Store', '/#view=store', '_view', false)),
|
||||
mklist(ui.menu('Account', '/#view=account', '_view', false), ui.menu('Sign out', '/logout/', '_self', false)));
|
||||
}
|
||||
|
||||
showmenu($('menu'));
|
||||
cdiv.style.top = ui.pixpos(mdiv.offsetTop + mdiv.offsetHeight);
|
||||
|
||||
/**
|
||||
* Load post processing.
|
||||
*/
|
||||
function onload() {
|
||||
// Show the page
|
||||
document.body.style.visibility = 'visible';
|
||||
|
||||
// Scroll to the top and hide the address bar
|
||||
window.scrollTo(0, 0);
|
||||
return true;
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
<div id="footdiv" class="fsection">
|
||||
<script type="text/javascript">
|
||||
(function() {
|
||||
$('footdiv').appendChild(ui.declareScript(appcache.get('/footconfig.js')));
|
||||
})();
|
||||
</script>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
143
sca-cpp/trunk/modules/edit/htdocs/oops/index.html
Normal file
143
sca-cpp/trunk/modules/edit/htdocs/oops/index.html
Normal file
|
@ -0,0 +1,143 @@
|
|||
<!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>
|
||||
<head>
|
||||
<title>Oops</title>
|
||||
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, target-densitydpi=devicedpi"/>
|
||||
<meta name="apple-mobile-web-app-capable" content="yes"/>
|
||||
<meta name="apple-mobile-web-app-status-bar-style" content="black"/>
|
||||
<base href="/oops/"/>
|
||||
<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 err', u, 'X-Login');
|
||||
return null;
|
||||
} else if (http.responseText == '' || http.getResponseHeader("Content-Type") == null) {
|
||||
if (log) log('http err', u, 'No-Content');
|
||||
return null;
|
||||
}
|
||||
localStorage.setItem(u, http.responseText);
|
||||
return http.responseText;
|
||||
}
|
||||
if (log) log('http err', u, http.status, http.statusText);
|
||||
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')));
|
||||
})();
|
||||
|
||||
</script>
|
||||
</head>
|
||||
<body class="delayed" onload="onload();">
|
||||
<div id="bodydiv" class="mainbodydiv">
|
||||
|
||||
<div id="headdiv" class="hsection">
|
||||
<script type="text/javascript">
|
||||
(function() {
|
||||
$('headdiv').appendChild(ui.declareScript(appcache.get('/headconfig.js')));
|
||||
})();
|
||||
</script>
|
||||
</div>
|
||||
|
||||
<div id="menu"></div>
|
||||
|
||||
<div id="content" class="viewloaded3d">
|
||||
|
||||
<table style="width: 100%;">
|
||||
<tr><td><h2><span id="h1"></span></h2></td></tr>
|
||||
</table>
|
||||
|
||||
<div style="margin-left: auto; margin-right: auto; text-align: center;">
|
||||
<div class="hd2">Oops, something went wrong...</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<script type="text/javascript">
|
||||
|
||||
// Set page title
|
||||
$('h1').innerHTML = ui.hometitle(location.hostname);
|
||||
|
||||
// Init div variables
|
||||
var mdiv = $('menu');
|
||||
var cdiv = $('content');
|
||||
|
||||
/**
|
||||
* Build and show the menu bar.
|
||||
*/
|
||||
function showmenu(mdiv) {
|
||||
mdiv.innerHTML = ui.menubar(
|
||||
mklist(ui.menu('Home', '/', '_view', false), ui.menu('Store', '/#view=store', '_view', false)),
|
||||
mklist(ui.menu('Account', '/#view=account', '_view', false), ui.menu('Sign out', '/logout/', '_self', false)));
|
||||
}
|
||||
|
||||
showmenu($('menu'));
|
||||
cdiv.style.top = ui.pixpos(mdiv.offsetTop + mdiv.offsetHeight);
|
||||
|
||||
/**
|
||||
* Load post processing.
|
||||
*/
|
||||
function onload() {
|
||||
// Show the page
|
||||
document.body.style.visibility = 'visible';
|
||||
|
||||
// Scroll to the top and hide the address bar
|
||||
window.scrollTo(0, 0);
|
||||
return true;
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
<div id="footdiv" class="fsection">
|
||||
<script type="text/javascript">
|
||||
(function() {
|
||||
$('footdiv').appendChild(ui.declareScript(appcache.get('/footconfig.js')));
|
||||
})();
|
||||
</script>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -17,33 +17,8 @@
|
|||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
-->
|
||||
<html manifest="/cache-manifest.cmf">
|
||||
<head>
|
||||
<title>Page</title>
|
||||
<meta name="viewport" content="width=device-width, user-scalable=no, initial-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"/>
|
||||
<link rel="stylesheet" type="text/css" href="/ui-min.css"/>
|
||||
<script type="text/javascript" src="/all-min.js"></script>
|
||||
<script type="text/javascript" src="/menu.js"></script>
|
||||
<script type="text/javascript" src="page.js"></script>
|
||||
</head>
|
||||
<body class="delayed" onload="ui.onload();" onbeforeunload="ui.onbeforeunload();">
|
||||
<div id="bodydiv" class="bodydiv" style="overflow: visible;">
|
||||
|
||||
<div id="headdiv" class="hsection">
|
||||
<script type="text/javascript" src="/headconfig.js"></script>
|
||||
</div>
|
||||
|
||||
<div id="menubackground" style="position: absolute; top: 0px; left: 0px; z-index: -1; width: 2500px;">
|
||||
<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"> </span></td></tr></table>
|
||||
</td></tr></table>
|
||||
</div>
|
||||
|
||||
<div id="menu"></div>
|
||||
|
||||
<table style="width: 100%;">
|
||||
<tr>
|
||||
<td><h2><span id="appNameHeader"></span></h2></td>
|
||||
|
@ -59,10 +34,6 @@
|
|||
|
||||
<table id="widgetValueTable" style="width: 100%;">
|
||||
<tr>
|
||||
<td class="thr thl" style="padding-left: 2px; padding-right: 2px; vertical-align: top; width: 100%;">
|
||||
<input id="widgetValue" type="text" value="" title="Widget value" autocapitalize="off" placeholder="Value" style="position: relative; width: 100%;"/>
|
||||
</td>
|
||||
|
||||
<td class="thl thr" style="text-align: right; padding-right: 2px; vertical-align: top;">
|
||||
<span id="deleteWidgetButton" title="Delete a Widget" class="graybutton" style="font-weight: bold; font-size: 16px; color: #808080; display: inline-block; width: 24px; height: 20px; padding-top: 0px; padding-bottom: 0px; text-align: center; margin-left: 0px; margin-right: 0px;">-</span>
|
||||
|
||||
|
@ -72,13 +43,17 @@
|
|||
|
||||
<span id="playPageButton" title="View page" class="graybutton" style="font-weight: bold; font-size: 16px; display: inline-block; width: 24px; height: 20px; padding-top: 0px; padding-bottom: 0px; middle; text-align: center; margin-left: 0px; margin-right: 0px;">></span>
|
||||
</td>
|
||||
|
||||
<td class="thl thr" style="padding-left: 2px; padding-right: 2px; vertical-align: top; width: 100%;">
|
||||
<input id="widgetValue" type="text" value="" title="Widget value" autocapitalize="off" placeholder="Value" style="position: relative; visibility: hidden; width: 100%;"/>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<div id="contentdiv" style="margin-top: 4px; width: 2500px">
|
||||
<div id="contentdiv" style="margin-top: 4px; width: 2500px;">
|
||||
<div id="editdiv" style="visibility: visible; position: relative; top: 0px; left: -2500px; width: 2500px; height: 5000px;">
|
||||
|
||||
<div style="position: relative; left: 2500px; top: 0px; right: 0px; height: 5000px; border:1px; border-style: solid; border-color: #a2bae7; background: url(/public/grid72.png);"></div>
|
||||
<div style="position: relative; left: 2500px; top: 0px; right: 0px; height: 5000px; border:1px; border-style: solid; border-color: #a2bae7;"><span id="editgrid"></span></div>
|
||||
<div class="guide" style="position: absolute; left: 2500px; top: 0px; width: 320px; height: 460px;"></div>
|
||||
<div class="guide" style="position: absolute; left: 2500px; top: 0px; width: 480px; height: 300px;"></div>
|
||||
<div class="guide" style="position: absolute; left: 2500px; top: 0px; width: 768px; height: 911px;"></div>
|
||||
|
@ -101,7 +76,7 @@
|
|||
<span class="link" id="palette:link" style="position: absolute; left: 0px; top: 340px;"><a href="/"><span>link</span></a></span>
|
||||
<span class="text" id="palette:text" style="position: absolute; left: 0px; top: 370px;"><span>text</span></span>
|
||||
<span class="iframe fakeframe" id="palette:iframe" style="position: absolute; left: 0px; top: 400px; width: 200px;"><a href="/public/iframe.html"><span class="fakeframe"><span>frame ...</span></span></a></span>
|
||||
<span class="img" id="palette:img" style="position: absolute; left: 0px; top: 430px;"><img src="/public/img.png"/></span>
|
||||
<span class="img" id="palette:img" style="position: absolute; left: 0px; top: 430px;"><img id="imgimg"/></span>
|
||||
</div>
|
||||
|
||||
<div id="playdiv" style="visibility: hidden; position: absolute; top: 0px; left: 0px; width: 2500px; height: 5000px;">
|
||||
|
@ -112,20 +87,17 @@
|
|||
<div id="buffer" style="visibility: hidden; width: 0px; height: 0px"></div>
|
||||
|
||||
<script type="text/javascript">
|
||||
ui.initbody();
|
||||
|
||||
// Get the app name
|
||||
var appname = ui.fragmentParams()['app'];
|
||||
if (isNil(appname))
|
||||
window.open('/', '_self');
|
||||
var appname = ui.fragmentParams(location)['app'];
|
||||
|
||||
/**
|
||||
* Return the link to an app.
|
||||
*/
|
||||
function applink(appname) {
|
||||
var protocol = window.location.protocol;
|
||||
var host = window.location.hostname;
|
||||
var port = ':' + window.location.port;
|
||||
var protocol = location.protocol;
|
||||
var host = location.hostname;
|
||||
var port = ':' + location.port;
|
||||
if (port == ':80' || port == ':443' || port == ':')
|
||||
port = '';
|
||||
var link = protocol + '//' + appname + '.' + host + port + '/';
|
||||
|
@ -133,12 +105,9 @@ function applink(appname) {
|
|||
}
|
||||
|
||||
// Set page titles
|
||||
document.title = windowtitle(window.location.hostname) + ' - Page - ' + appname;
|
||||
document.title = ui.windowtitle(location.hostname) + ' - Page - ' + appname;
|
||||
$('appNameHeader').innerHTML = '<a href=\"' + applink(appname) + '\" target=\"' + '_blank' + '\">' + appname + '</a>';
|
||||
|
||||
// Load the menu bar
|
||||
displaymenu();
|
||||
|
||||
/**
|
||||
* Page editor area, widget value field, add, delete and play page buttons.
|
||||
*/
|
||||
|
@ -152,6 +121,10 @@ var wdelete = $('deleteWidgetButton');
|
|||
var wcopy = $('copyWidgetButton');
|
||||
var pplay = $('playPageButton');
|
||||
|
||||
// Set images
|
||||
$('editgrid').parentNode.style.background = 'url(\'' + ui.b64img(appcache.get('/public/grid72.b64')) + '\')';
|
||||
$('imgimg').src = ui.b64img(appcache.get('/public/img.b64'));
|
||||
|
||||
// Position edit and play divs inside the content div
|
||||
ediv.style.position = 'absolute';
|
||||
ediv.style.top = cdiv.offsetTop + 'px';
|
||||
|
@ -159,10 +132,6 @@ pdiv.style.position = 'absolute';
|
|||
pdiv.style.top = cdiv.offsetTop + 'px';
|
||||
|
||||
// Position background divs
|
||||
var mbackground = $('menubackground');
|
||||
var menudiv = $('menu');
|
||||
mbackground.style.top = ui.pixpos(menudiv.offsetTop);
|
||||
|
||||
var wvbackground = $('widgetValueBackground');
|
||||
var wvtable = $('widgetValueTable');
|
||||
wvbackground.style.top = ui.pixpos(wvtable.offsetTop);
|
||||
|
@ -183,6 +152,569 @@ window.onresize = resizeFields;
|
|||
var editWidget = sca.component("EditWidget");
|
||||
var pages = sca.reference(editWidget, "pages");
|
||||
|
||||
/**
|
||||
* Page editing functions.
|
||||
*/
|
||||
var page = {};
|
||||
|
||||
/**
|
||||
* Default positions and sizes.
|
||||
*/
|
||||
page.palcx = 2500;
|
||||
|
||||
/**
|
||||
* Init a page editor. Works with all browsers except IE.
|
||||
*/
|
||||
page.edit = function(elem, wvalue, wadd, wcopy, wdelete, onchange, onselect) {
|
||||
|
||||
// Track element dragging and selection
|
||||
page.dragging = null;
|
||||
page.selected = null;
|
||||
wvalue.disabled = true;
|
||||
wvalue.style.visibility = 'hidden';
|
||||
wcopy.disabled = true;
|
||||
wdelete.disabled = true;
|
||||
|
||||
// Trigger widget select and page change events
|
||||
page.onpagechange = onchange;
|
||||
page.onwidgetselect = onselect;
|
||||
|
||||
/**
|
||||
* Handle a mouse down event.
|
||||
*/
|
||||
elem.onmousedown = function(e) {
|
||||
|
||||
// On mouse controlled devices, engage the click component selection
|
||||
// logic right away
|
||||
if (typeof e.touches == 'undefined')
|
||||
elem.onclick(e);
|
||||
|
||||
// Find a draggable element
|
||||
var dragging = page.draggable(e.target, elem);
|
||||
if (dragging == null || dragging != page.selected)
|
||||
return true;
|
||||
page.dragging = dragging;
|
||||
|
||||
// Remember mouse position
|
||||
var pos = typeof e.touches != "undefined"? e.touches[0] : e;
|
||||
page.dragX = pos.screenX;
|
||||
page.dragY = pos.screenY;
|
||||
|
||||
if (e.preventDefault)
|
||||
e.preventDefault();
|
||||
else
|
||||
e.returnValue = false;
|
||||
return true;
|
||||
};
|
||||
|
||||
// Support touch devices
|
||||
elem.ontouchstart = elem.onmousedown;
|
||||
|
||||
/**
|
||||
* Handle a mouse up event.
|
||||
*/
|
||||
elem.onmouseup = function(e) {
|
||||
if (page.dragging == null)
|
||||
return true;
|
||||
|
||||
// Snap to grid
|
||||
var newX = page.gridsnap(ui.numpos(page.dragging.style.left));
|
||||
var newY = page.gridsnap(ui.numpos(page.dragging.style.top));
|
||||
page.dragging.style.left = ui.pixpos(newX);
|
||||
page.dragging.style.top = ui.pixpos(newY);
|
||||
page.dragging.cover.style.left = ui.pixpos(newX);
|
||||
page.dragging.cover.style.top = ui.pixpos(newY);
|
||||
|
||||
// Fixup widget style
|
||||
page.fixupwidget(page.dragging);
|
||||
|
||||
// Forget dragged element
|
||||
page.dragging = null;
|
||||
|
||||
// Trigger page change event
|
||||
page.onpagechange(false);
|
||||
return true;
|
||||
};
|
||||
|
||||
// Support touch devices
|
||||
elem.ontouchend = elem.onmouseup;
|
||||
|
||||
/**
|
||||
* Handle a mouse move event.
|
||||
*/
|
||||
window.onmousemove = function(e) {
|
||||
if (page.dragging == null)
|
||||
return true;
|
||||
|
||||
// Get the mouse position
|
||||
var pos = typeof e.touches != "undefined"? e.touches[0] : e;
|
||||
if (pos.screenX == page.dragX && pos.screenY == page.dragY)
|
||||
return true;
|
||||
|
||||
// Compute position of dragged element
|
||||
var curX = ui.numpos(page.dragging.style.left);
|
||||
var curY = ui.numpos(page.dragging.style.top);
|
||||
var newX = curX + (pos.screenX - page.dragX);
|
||||
var newY = curY + (pos.screenY - page.dragY);
|
||||
if (newX >= page.palcx)
|
||||
page.dragX = pos.screenX;
|
||||
else
|
||||
newX = page.palcx;
|
||||
if (newY >= 0)
|
||||
page.dragY = pos.screenY;
|
||||
else
|
||||
newY = 0;
|
||||
|
||||
// Move the dragged element
|
||||
page.dragging.style.left = ui.pixpos(newX);
|
||||
page.dragging.style.top = ui.pixpos(newY);
|
||||
page.dragging.cover.style.left = ui.pixpos(newX);
|
||||
page.dragging.cover.style.top = ui.pixpos(newY);
|
||||
return true;
|
||||
};
|
||||
|
||||
// Support touch devices
|
||||
elem.ontouchmove = window.onmousemove;
|
||||
|
||||
/**
|
||||
* Handle a mouse click event.
|
||||
*/
|
||||
elem.onclick = function(e) {
|
||||
|
||||
// Find selected element
|
||||
var selected = page.draggable(e.target, elem);
|
||||
if (selected == null) {
|
||||
if (page.selected != null) {
|
||||
|
||||
// Reset current selection
|
||||
page.widgetselect(page.selected, false, wvalue, wcopy, wdelete);
|
||||
page.selected = null;
|
||||
|
||||
// Trigger widget select event
|
||||
page.onwidgetselect(null);
|
||||
}
|
||||
|
||||
// Dismiss the palette
|
||||
if (ui.numpos(elem.style.left) != (page.palcx * -1))
|
||||
elem.style.left = ui.pixpos(page.palcx * -1);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// Deselect the previously selected element
|
||||
page.widgetselect(page.selected, false, wvalue, wcopy, wdelete);
|
||||
|
||||
// Clone element dragged from palette
|
||||
if (selected.id.substring(0, 8) == 'palette:') {
|
||||
page.selected = page.clone(selected);
|
||||
|
||||
// Move into the editing area and hide the palette
|
||||
page.selected.style.left = ui.pixpos(ui.numpos(page.selected.style.left) + page.palcx);
|
||||
page.selected.cover.style.left = ui.pixpos(ui.numpos(page.selected.cover.style.left) + page.palcx);
|
||||
elem.style.left = ui.pixpos(page.palcx * -1);
|
||||
|
||||
// Bring it to the top
|
||||
page.bringtotop(page.selected);
|
||||
|
||||
// Trigger page change event
|
||||
page.onpagechange(true);
|
||||
|
||||
} else {
|
||||
|
||||
// Bring selected element to the top
|
||||
page.selected = selected;
|
||||
page.bringtotop(page.selected);
|
||||
}
|
||||
|
||||
// Select the element
|
||||
page.widgetselect(page.selected, true, wvalue, wcopy, wdelete);
|
||||
|
||||
// Trigger widget select event
|
||||
page.onwidgetselect(page.selected);
|
||||
|
||||
return true;
|
||||
};
|
||||
|
||||
/**
|
||||
* Handle field on change events.
|
||||
*/
|
||||
wvalue.onchange = wvalue.onblur = function() {
|
||||
if (page.selected == null)
|
||||
return false;
|
||||
page.settext(page.selected, wvalue.value);
|
||||
page.selected.cover.style.width = ui.pixpos(page.selected.clientWidth + 4);
|
||||
page.selected.cover.style.height = ui.pixpos(page.selected.clientHeight + 4);
|
||||
|
||||
// Trigger page change event
|
||||
page.onpagechange(true);
|
||||
return false;
|
||||
};
|
||||
|
||||
// Handle add widget event.
|
||||
wadd.onclick = function() {
|
||||
|
||||
// Show the palette
|
||||
elem.style.left = ui.pixpos(0);
|
||||
return false;
|
||||
};
|
||||
|
||||
// Handle delete event.
|
||||
wdelete.onclick = function() {
|
||||
if (page.selected == null)
|
||||
return false;
|
||||
|
||||
// Reset current selection
|
||||
page.widgetselect(page.selected, false, wvalue, wcopy, wdelete);
|
||||
|
||||
// Remove selected widget
|
||||
page.selected.parentNode.removeChild(page.selected);
|
||||
page.selected.cover.parentNode.removeChild(page.selected.cover);
|
||||
page.selected = null;
|
||||
|
||||
// Trigger widget select event
|
||||
page.onwidgetselect(null);
|
||||
|
||||
// Trigger page change event
|
||||
page.onpagechange(true);
|
||||
return false;
|
||||
};
|
||||
|
||||
// Handle copy event.
|
||||
wcopy.onclick = function() {
|
||||
if (page.selected == null)
|
||||
return false;
|
||||
if (page.selected.id.substring(0, 8) == 'palette:')
|
||||
return false;
|
||||
|
||||
// Reset current selection
|
||||
page.widgetselect(page.selected, false, wvalue, wcopy, wdelete);
|
||||
|
||||
// Clone selected widget
|
||||
page.selected = page.clone(page.selected);
|
||||
|
||||
// Move 10 pixels down right
|
||||
page.selected.style.left = ui.pixpos(ui.numpos(page.selected.style.left) + 10);
|
||||
page.selected.style.top = ui.pixpos(ui.numpos(page.selected.style.top) + 10);
|
||||
page.selected.cover.style.left = ui.pixpos(ui.numpos(page.selected.cover.style.left) + 10);
|
||||
page.selected.cover.style.top = ui.pixpos(ui.numpos(page.selected.cover.style.top) + 10);
|
||||
|
||||
// Bring it to the top
|
||||
page.bringtotop(page.selected);
|
||||
|
||||
// Select the element
|
||||
page.widgetselect(page.selected, true, wvalue, wcopy, wdelete);
|
||||
|
||||
// Trigger widget select event
|
||||
page.onwidgetselect(page.selected);
|
||||
|
||||
// Trigger page change event
|
||||
page.onpagechange(true);
|
||||
return false;
|
||||
};
|
||||
|
||||
// Cover child elements with span elements to prevent
|
||||
// any input events to reach them
|
||||
map(page.cover, nodeList(elem.childNodes));
|
||||
|
||||
return elem;
|
||||
};
|
||||
|
||||
/**
|
||||
* Return the text of a widget.
|
||||
*/
|
||||
page.text = function(e) {
|
||||
function formula(e) {
|
||||
var f = e.id;
|
||||
if (f.substring(0, 5) != 'page:')
|
||||
return '=' + f;
|
||||
return '';
|
||||
}
|
||||
|
||||
function constant(e, f) {
|
||||
if (e.className == 'h1' || e.className == 'h2' || e.className == 'text' || e.className == 'section') {
|
||||
var t = car(childElements(e)).innerHTML;
|
||||
return t == f? '' : t;
|
||||
}
|
||||
if (e.className == 'button' || e.className == 'checkbox') {
|
||||
var t = car(childElements(e)).value;
|
||||
return t == f? '' : t;
|
||||
}
|
||||
if (e.className == 'entry' || e.className == 'password') {
|
||||
var t = car(childElements(e)).defaultValue;
|
||||
return t == f? '' : t;
|
||||
}
|
||||
if (e.className == 'select') {
|
||||
var t = car(childElements(car(childElements(e)))).value;
|
||||
return t == f? '' : t;
|
||||
}
|
||||
if (e.className == 'link') {
|
||||
var lhr = car(childElements(e)).href;
|
||||
var hr = lhr.substring(0, 5) == 'link:'? lhr.substring(5) : '';
|
||||
var t = car(childElements(car(childElements(e)))).innerHTML;
|
||||
return t == f? hr : (t == hr? hr : (t == ''? hr : hr + ',' + t));
|
||||
}
|
||||
if (e.className == 'img') {
|
||||
var src = car(childElements(e)).src;
|
||||
return src == location.href? '' : src;
|
||||
}
|
||||
if (e.className == 'iframe') {
|
||||
var hr = car(childElements(e)).href;
|
||||
return hr == location.href? '' : hr;
|
||||
}
|
||||
if (e.className == 'list')
|
||||
return '';
|
||||
if (e.className == 'table')
|
||||
return '';
|
||||
return '';
|
||||
}
|
||||
|
||||
var f = formula(e);
|
||||
var c = constant(e, f);
|
||||
return f == ''? c : (c == ''? f : f + ',' + c);
|
||||
};
|
||||
|
||||
/**
|
||||
* Return true if a widget has editable text.
|
||||
*/
|
||||
page.hastext = function(e) {
|
||||
if (e.className == 'h1' || e.className == 'h2' || e.className == 'text' || e.className == 'section')
|
||||
return true;
|
||||
if (e.className == 'button' || e.className == 'checkbox')
|
||||
return true;
|
||||
if (e.className == 'entry' || e.className == 'password')
|
||||
return true;
|
||||
if (e.className == 'select')
|
||||
return false;
|
||||
if (e.className == 'link')
|
||||
return true;
|
||||
if (e.className == 'img')
|
||||
return true;
|
||||
if (e.className == 'iframe')
|
||||
return true;
|
||||
if (e.className == 'list')
|
||||
return false;
|
||||
if (e.className == 'table')
|
||||
return false;
|
||||
return false;
|
||||
};
|
||||
|
||||
/**
|
||||
* Set the text of a widget.
|
||||
*/
|
||||
page.settext = function(e, t) {
|
||||
function formula(t) {
|
||||
if (t.length > 1 && t.substring(0, 1) == '=')
|
||||
return car(t.split(','));
|
||||
return '';
|
||||
}
|
||||
|
||||
function constant(t) {
|
||||
return t.length > 1 && t.substring(0, 1) == '='? cdr(t.split(',')) : t.split(',');
|
||||
}
|
||||
|
||||
var f = formula(t);
|
||||
var c = constant(t);
|
||||
|
||||
e.id = f != ''? f.substring(1) : ('page:' + e.className);
|
||||
|
||||
if (e.className == 'h1' || e.className == 'h2' || e.className == 'text' || e.className == 'section') {
|
||||
car(childElements(e)).innerHTML = isNil(c)? f : car(c);
|
||||
return t;
|
||||
}
|
||||
if (e.className == 'button' || e.className == 'entry' || e.className == 'password') {
|
||||
car(childElements(e)).defaultValue = isNil(c)? f : car(c);
|
||||
return t;
|
||||
}
|
||||
if (e.className == 'checkbox') {
|
||||
car(childElements(e)).value = isNil(c)? f : car(c);
|
||||
map(function(n) { if (n.nodeName == "SPAN") n.innerHTML = isNil(c)? f : car(c); return n; }, nodeList(e.childNodes));
|
||||
return t;
|
||||
}
|
||||
if (e.className == 'select') {
|
||||
var ce = car(childElements(car(childElements(e))));
|
||||
ce.value = isNil(c)? f : car(c);
|
||||
ce.innerHTML = isNil(c)? f : car(c);
|
||||
return t;
|
||||
}
|
||||
if (e.className == 'list') {
|
||||
e.innerHTML = '<table class="datatable" style="width: 100%;;"><tr><td class="datatd">' + (isNil(c)? f : car(c)) + '</td></tr><tr><td class="datatd">...</td></tr></table>';
|
||||
return t;
|
||||
}
|
||||
if (e.className == 'table') {
|
||||
e.innerHTML = '<table class="datatable" style="width: 100%;"><tr><td class="datatdl">' + (isNil(c)? f : car(c)) + '</td><td class="datatdr">...</td></tr><tr><td class="datatdl">...</td><td class="datatdr">...</td></tr></table>';
|
||||
return t;
|
||||
}
|
||||
if (e.className == 'link') {
|
||||
var ce = car(childElements(e));
|
||||
ce.href = isNil(c)? 'link:/index.html' : ('link:' + car(c));
|
||||
car(childElements(ce)).innerHTML = isNil(c)? (f != ''? f : '/index.html') : isNil(cdr(c))? (f != ''? f : car(c)) : cadr(c);
|
||||
return t;
|
||||
}
|
||||
if (e.className == 'img') {
|
||||
car(childElements(e)).src = isNil(c)? '/public/img.png' : car(c);
|
||||
return t;
|
||||
}
|
||||
if (e.className == 'iframe') {
|
||||
car(childElements(e)).href = isNil(c)? '/public/iframe.html' : car(c);
|
||||
return t;
|
||||
}
|
||||
return '';
|
||||
};
|
||||
|
||||
/**
|
||||
* Initial fixup of a widget.
|
||||
*/
|
||||
page.fixupwidget = function(e) {
|
||||
if (e.className == 'iframe') {
|
||||
var f = car(childElements(e));
|
||||
//e.innerHTML = '<iframe src="' + f.href + '" frameborder="no" scrolling="no"></iframe>';
|
||||
return e;
|
||||
}
|
||||
if (e.className == 'section') {
|
||||
e.style.width = '100%';
|
||||
return e;
|
||||
}
|
||||
if (e.className == 'list') {
|
||||
e.style.width = '100%';
|
||||
car(childElements(e)).style.width = '100%';
|
||||
return e;
|
||||
}
|
||||
if (e.className == 'table') {
|
||||
e.style.width = '100%';
|
||||
car(childElements(e)).style.width = '100%';
|
||||
return e;
|
||||
}
|
||||
if (e.className == 'img') {
|
||||
var i = car(childElements(e));
|
||||
if (i.src != '' && i.src.substring(0, 5) == 'data:')
|
||||
i.src = '/public/img.png';
|
||||
return e;
|
||||
}
|
||||
return e;
|
||||
}
|
||||
|
||||
/**
|
||||
* Find a draggable element in a hierarchy of elements.
|
||||
*/
|
||||
page.draggable = function(n, e) {
|
||||
if (n == e)
|
||||
return null;
|
||||
if (n.id != '')
|
||||
return n;
|
||||
if (n.covered)
|
||||
return n.covered;
|
||||
return page.draggable(n.parentNode, e);
|
||||
}
|
||||
|
||||
/**
|
||||
* Align a pos along a 9pixel grid.
|
||||
*/
|
||||
page.gridsnap = function(x) {
|
||||
return Math.round(x / 9) * 9;
|
||||
}
|
||||
|
||||
/**
|
||||
* Bring an element and its parent to the top.
|
||||
*/
|
||||
page.bringtotop = function(n) {
|
||||
n.parentNode.appendChild(n);
|
||||
n.cover.parentNode.appendChild(n.cover);
|
||||
}
|
||||
|
||||
/**
|
||||
* Draw widget selection.
|
||||
*/
|
||||
page.widgetselect = function(n, s, wvalue, wcopy, wdelete) {
|
||||
if (isNil(n) || !s) {
|
||||
// Clear the widget value field
|
||||
wvalue.value = '';
|
||||
wvalue.disabled = true;
|
||||
wvalue.style.visibility = 'hidden';
|
||||
wcopy.disabled = true;
|
||||
wdelete.disabled = true;
|
||||
|
||||
// Clear the widget outline
|
||||
if (!isNil(n))
|
||||
n.cover.style.borderWidth = '0px';
|
||||
return true;
|
||||
}
|
||||
|
||||
// Update the widget value field
|
||||
wvalue.value = page.text(n);
|
||||
wvalue.disabled = false;
|
||||
wvalue.style.visibility = 'visible';
|
||||
wcopy.disabled = false;
|
||||
wdelete.disabled = false;
|
||||
|
||||
// Outline the widget
|
||||
n.cover.style.borderWidth = '2px';
|
||||
return true;
|
||||
};
|
||||
|
||||
/**
|
||||
* Cover a page element with a <span> element to prevent
|
||||
* any input events to reach it.
|
||||
*/
|
||||
page.cover = function(e) {
|
||||
if (e.id == '' || isNil(e.style))
|
||||
return e;
|
||||
var cover = document.createElement('div');
|
||||
cover.style.position = 'absolute';
|
||||
cover.style.left = ui.pixpos(ui.numpos(e.style.left) - 2);
|
||||
cover.style.top = ui.pixpos(ui.numpos(e.style.top) - 2);
|
||||
cover.style.width = ui.pixpos(e.clientWidth + 4);
|
||||
cover.style.height = ui.pixpos(e.clientHeight + 4);
|
||||
cover.style.visibility = 'inherit';
|
||||
cover.style.borderStyle = 'solid';
|
||||
cover.style.borderWidth = '0px';
|
||||
cover.style.borderColor = '#598edd';
|
||||
cover.style.padding = '0px';
|
||||
cover.style.margin = '0px';
|
||||
cover.covered = e;
|
||||
e.cover = cover;
|
||||
e.parentNode.appendChild(cover);
|
||||
return e;
|
||||
}
|
||||
|
||||
/**
|
||||
* Clone a palette element.
|
||||
*/
|
||||
page.clone = function(e) {
|
||||
|
||||
/**
|
||||
* Clone an element's HTML.
|
||||
*/
|
||||
function mkclone(e) {
|
||||
var ne = document.createElement('span');
|
||||
|
||||
// Skip the palette: prefix
|
||||
ne.id = 'page:' + e.id.substr(8);
|
||||
|
||||
// Copy the class and HTML content
|
||||
ne.className = e.className;
|
||||
ne.innerHTML = e.innerHTML;
|
||||
|
||||
// Fixup the widget style
|
||||
page.fixupwidget(ne);
|
||||
|
||||
return ne;
|
||||
}
|
||||
|
||||
/**
|
||||
* Clone an element's position.
|
||||
*/
|
||||
function posclone(ne, e) {
|
||||
ne.style.position = 'absolute';
|
||||
ne.style.left = ui.pixpos(ui.numpos(e.style.left));
|
||||
ne.style.top = ui.pixpos(ui.numpos(e.style.top));
|
||||
e.parentNode.appendChild(ne);
|
||||
page.cover(ne);
|
||||
return ne;
|
||||
}
|
||||
|
||||
return posclone(mkclone(e), e);
|
||||
};
|
||||
|
||||
/**
|
||||
* Return the page in an ATOM entry.
|
||||
*/
|
||||
|
@ -372,21 +904,6 @@ function onpagechange(prop) {
|
|||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the link to a component value.
|
||||
*/
|
||||
function compvaluelink(appname, cname) {
|
||||
if (cname == '' || isNil(cname))
|
||||
return '';
|
||||
var protocol = window.location.protocol;
|
||||
var host = window.location.hostname;
|
||||
var port = ':' + window.location.port;
|
||||
if (port == ':80' || port == ':443' || port == ':')
|
||||
port = '';
|
||||
var link = protocol + '//' + appname + '.' + host + port + '/data/#component=' + cname;
|
||||
return link;
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle a widget select event.
|
||||
*/
|
||||
|
@ -394,14 +911,13 @@ function onwidgetselect(w) {
|
|||
if (w == widget)
|
||||
return true;
|
||||
widget = w;
|
||||
var link = compvaluelink(appname, isNil(w)? '' : w.id);
|
||||
|
||||
function updateButton(b, v) {
|
||||
b.style.color = v? '#000000' : '#808080';
|
||||
}
|
||||
|
||||
updateButton(wdelete, link != '');
|
||||
updateButton(wcopy, link != '');
|
||||
updateButton(wdelete, !isNil(w));
|
||||
updateButton(wcopy, !isNil(w));
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -415,12 +931,14 @@ function playpage() {
|
|||
page.selected = null;
|
||||
wvalue.value = applink(appname);
|
||||
pplay.innerHTML = '<';
|
||||
ediv.style.visibility = 'hidden'
|
||||
evisible = false;
|
||||
pdiv.style.visibility = 'visible';
|
||||
pdiv.innerHTML = '';
|
||||
pdiv.innerHTML = '<iframe id="playappframe" style="position: relative; height: 5000px; width: 2500px; border: 0px;" scrolling="no" frameborder="0" src="' +
|
||||
applink(appname) + '"></iframe>';
|
||||
setTimeout(function() {
|
||||
ediv.style.visibility = 'hidden'
|
||||
}, 0);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -431,12 +949,14 @@ function showedit() {
|
|||
if (evisible)
|
||||
return true;
|
||||
pplay.innerHTML = '>';
|
||||
pdiv.style.visibility = 'hidden';
|
||||
pdiv.innerHTML = '';
|
||||
ediv.style.visibility = 'visible'
|
||||
evisible = true;
|
||||
page.widgetselect(widget, true, wvalue, wcopy, wdelete);
|
||||
page.selected = widget;
|
||||
setTimeout(function() {
|
||||
pdiv.style.visibility = 'hidden';
|
||||
pdiv.innerHTML = '';
|
||||
}, 0);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -454,13 +974,7 @@ page.edit(ediv, wvalue, wadd, wcopy, wdelete, onpagechange, onwidgetselect);
|
|||
|
||||
// Get and display the current app page
|
||||
getpage(appname, ediv);
|
||||
|
||||
</script>
|
||||
|
||||
<div id="footdiv" class="fsection">
|
||||
<script type="text/javascript" src="/footconfig.js"></script>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
|
|
|
@ -1,573 +0,0 @@
|
|||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Page editing functions.
|
||||
*/
|
||||
var page = {};
|
||||
|
||||
/**
|
||||
* Default positions and sizes.
|
||||
*/
|
||||
var palcx = 2500;
|
||||
|
||||
/**
|
||||
* Init a page editor. Works with all browsers except IE.
|
||||
*/
|
||||
page.edit = function(elem, wvalue, wadd, wcopy, wdelete, onchange, onselect) {
|
||||
|
||||
// Track element dragging and selection
|
||||
page.dragging = null;
|
||||
page.selected = null;
|
||||
wvalue.disabled = true;
|
||||
wcopy.disabled = true;
|
||||
wdelete.disabled = true;
|
||||
|
||||
// Trigger widget select and page change events
|
||||
page.onpagechange = onchange;
|
||||
page.onwidgetselect = onselect;
|
||||
|
||||
/**
|
||||
* Handle a mouse down event.
|
||||
*/
|
||||
elem.onmousedown = function(e) {
|
||||
|
||||
// On mouse controlled devices, engage the click component selection
|
||||
// logic right away
|
||||
if (typeof e.touches == 'undefined')
|
||||
elem.onclick(e);
|
||||
|
||||
// Find a draggable element
|
||||
var dragging = page.draggable(e.target, elem);
|
||||
if (dragging == null || dragging != page.selected)
|
||||
return true;
|
||||
page.dragging = dragging;
|
||||
|
||||
// Remember mouse position
|
||||
var pos = typeof e.touches != "undefined"? e.touches[0] : e;
|
||||
page.dragX = pos.screenX;
|
||||
page.dragY = pos.screenY;
|
||||
|
||||
if (e.preventDefault)
|
||||
e.preventDefault();
|
||||
else
|
||||
e.returnValue = false;
|
||||
return true;
|
||||
};
|
||||
|
||||
// Support touch devices
|
||||
elem.ontouchstart = elem.onmousedown;
|
||||
|
||||
/**
|
||||
* Handle a mouse up event.
|
||||
*/
|
||||
elem.onmouseup = function(e) {
|
||||
if (page.dragging == null)
|
||||
return true;
|
||||
|
||||
// Snap to grid
|
||||
var newX = page.gridsnap(ui.numpos(page.dragging.style.left));
|
||||
var newY = page.gridsnap(ui.numpos(page.dragging.style.top));
|
||||
page.dragging.style.left = ui.pixpos(newX);
|
||||
page.dragging.style.top = ui.pixpos(newY);
|
||||
page.dragging.cover.style.left = ui.pixpos(newX);
|
||||
page.dragging.cover.style.top = ui.pixpos(newY);
|
||||
|
||||
// Fixup widget style
|
||||
page.fixupwidget(page.dragging);
|
||||
|
||||
// Forget dragged element
|
||||
page.dragging = null;
|
||||
|
||||
// Trigger page change event
|
||||
page.onpagechange(false);
|
||||
return true;
|
||||
};
|
||||
|
||||
// Support touch devices
|
||||
elem.ontouchend = elem.onmouseup;
|
||||
|
||||
/**
|
||||
* Handle a mouse move event.
|
||||
*/
|
||||
window.onmousemove = function(e) {
|
||||
if (page.dragging == null)
|
||||
return true;
|
||||
|
||||
// Get the mouse position
|
||||
var pos = typeof e.touches != "undefined"? e.touches[0] : e;
|
||||
if (pos.screenX == page.dragX && pos.screenY == page.dragY)
|
||||
return true;
|
||||
|
||||
// Compute position of dragged element
|
||||
var curX = ui.numpos(page.dragging.style.left);
|
||||
var curY = ui.numpos(page.dragging.style.top);
|
||||
var newX = curX + (pos.screenX - page.dragX);
|
||||
var newY = curY + (pos.screenY - page.dragY);
|
||||
if (newX >= palcx)
|
||||
page.dragX = pos.screenX;
|
||||
else
|
||||
newX = palcx;
|
||||
if (newY >= 0)
|
||||
page.dragY = pos.screenY;
|
||||
else
|
||||
newY = 0;
|
||||
|
||||
// Move the dragged element
|
||||
page.dragging.style.left = ui.pixpos(newX);
|
||||
page.dragging.style.top = ui.pixpos(newY);
|
||||
page.dragging.cover.style.left = ui.pixpos(newX);
|
||||
page.dragging.cover.style.top = ui.pixpos(newY);
|
||||
return true;
|
||||
};
|
||||
|
||||
// Support touch devices
|
||||
elem.ontouchmove = window.onmousemove;
|
||||
|
||||
/**
|
||||
* Handle a mouse click event.
|
||||
*/
|
||||
elem.onclick = function(e) {
|
||||
|
||||
// Find selected element
|
||||
var selected = page.draggable(e.target, elem);
|
||||
if (selected == null) {
|
||||
if (page.selected != null) {
|
||||
|
||||
// Reset current selection
|
||||
page.widgetselect(page.selected, false, wvalue, wcopy, wdelete);
|
||||
page.selected = null;
|
||||
|
||||
// Trigger widget select event
|
||||
page.onwidgetselect(null);
|
||||
}
|
||||
|
||||
// Dismiss the palette
|
||||
if (ui.numpos(elem.style.left) != (palcx * -1))
|
||||
elem.style.left = ui.pixpos(palcx * -1);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// Deselect the previously selected element
|
||||
page.widgetselect(page.selected, false, wvalue, wcopy, wdelete);
|
||||
|
||||
// Clone element dragged from palette
|
||||
if (selected.id.substring(0, 8) == 'palette:') {
|
||||
page.selected = page.clone(selected);
|
||||
|
||||
// Move into the editing area and hide the palette
|
||||
page.selected.style.left = ui.pixpos(ui.numpos(page.selected.style.left) + palcx);
|
||||
page.selected.cover.style.left = ui.pixpos(ui.numpos(page.selected.cover.style.left) + palcx);
|
||||
elem.style.left = ui.pixpos(palcx * -1);
|
||||
|
||||
// Bring it to the top
|
||||
page.bringtotop(page.selected);
|
||||
|
||||
// Trigger page change event
|
||||
page.onpagechange(true);
|
||||
|
||||
} else {
|
||||
|
||||
// Bring selected element to the top
|
||||
page.selected = selected;
|
||||
page.bringtotop(page.selected);
|
||||
}
|
||||
|
||||
// Select the element
|
||||
page.widgetselect(page.selected, true, wvalue, wcopy, wdelete);
|
||||
|
||||
// Trigger widget select event
|
||||
page.onwidgetselect(page.selected);
|
||||
|
||||
return true;
|
||||
};
|
||||
|
||||
/**
|
||||
* Handle field on change events.
|
||||
*/
|
||||
wvalue.onchange = wvalue.onblur = function() {
|
||||
if (page.selected == null)
|
||||
return false;
|
||||
page.settext(page.selected, wvalue.value);
|
||||
page.selected.cover.style.width = ui.pixpos(page.selected.clientWidth + 4);
|
||||
page.selected.cover.style.height = ui.pixpos(page.selected.clientHeight + 4);
|
||||
|
||||
// Trigger page change event
|
||||
page.onpagechange(true);
|
||||
return false;
|
||||
};
|
||||
|
||||
// Handle add widget event.
|
||||
wadd.onclick = function() {
|
||||
|
||||
// Show the palette
|
||||
elem.style.left = ui.pixpos(0);
|
||||
return false;
|
||||
};
|
||||
|
||||
// Handle delete event.
|
||||
wdelete.onclick = function() {
|
||||
if (page.selected == null)
|
||||
return false;
|
||||
|
||||
// Reset current selection
|
||||
page.widgetselect(page.selected, false, wvalue, wcopy, wdelete);
|
||||
|
||||
// Remove selected widget
|
||||
page.selected.parentNode.removeChild(page.selected);
|
||||
page.selected.cover.parentNode.removeChild(page.selected.cover);
|
||||
page.selected = null;
|
||||
|
||||
// Trigger widget select event
|
||||
page.onwidgetselect(null);
|
||||
|
||||
// Trigger page change event
|
||||
page.onpagechange(true);
|
||||
return false;
|
||||
};
|
||||
|
||||
// Handle copy event.
|
||||
wcopy.onclick = function() {
|
||||
if (page.selected == null)
|
||||
return false;
|
||||
if (page.selected.id.substring(0, 8) == 'palette:')
|
||||
return false;
|
||||
|
||||
// Reset current selection
|
||||
page.widgetselect(page.selected, false, wvalue, wcopy, wdelete);
|
||||
|
||||
// Clone selected widget
|
||||
page.selected = page.clone(page.selected);
|
||||
|
||||
// Move 10 pixels down right
|
||||
page.selected.style.left = ui.pixpos(ui.numpos(page.selected.style.left) + 10);
|
||||
page.selected.style.top = ui.pixpos(ui.numpos(page.selected.style.top) + 10);
|
||||
page.selected.cover.style.left = ui.pixpos(ui.numpos(page.selected.cover.style.left) + 10);
|
||||
page.selected.cover.style.top = ui.pixpos(ui.numpos(page.selected.cover.style.top) + 10);
|
||||
|
||||
// Bring it to the top
|
||||
page.bringtotop(page.selected);
|
||||
|
||||
// Select the element
|
||||
page.widgetselect(page.selected, true, wvalue, wcopy, wdelete);
|
||||
|
||||
// Trigger widget select event
|
||||
page.onwidgetselect(page.selected);
|
||||
|
||||
// Trigger page change event
|
||||
page.onpagechange(true);
|
||||
return false;
|
||||
};
|
||||
|
||||
// Cover child elements with span elements to prevent
|
||||
// any input events to reach them
|
||||
map(page.cover, nodeList(elem.childNodes));
|
||||
|
||||
return elem;
|
||||
};
|
||||
|
||||
/**
|
||||
* Return the text of a widget.
|
||||
*/
|
||||
page.text = function(e) {
|
||||
function formula(e) {
|
||||
var f = e.id;
|
||||
if (f.substring(0, 5) != 'page:')
|
||||
return '=' + f;
|
||||
return '';
|
||||
}
|
||||
|
||||
function constant(e, f) {
|
||||
if (e.className == 'h1' || e.className == 'h2' || e.className == 'text' || e.className == 'section') {
|
||||
var t = car(childElements(e)).innerHTML;
|
||||
return t == f? '' : t;
|
||||
}
|
||||
if (e.className == 'button' || e.className == 'checkbox') {
|
||||
var t = car(childElements(e)).value;
|
||||
return t == f? '' : t;
|
||||
}
|
||||
if (e.className == 'entry' || e.className == 'password') {
|
||||
var t = car(childElements(e)).defaultValue;
|
||||
return t == f? '' : t;
|
||||
}
|
||||
if (e.className == 'select') {
|
||||
var t = car(childElements(car(childElements(e)))).value;
|
||||
return t == f? '' : t;
|
||||
}
|
||||
if (e.className == 'link') {
|
||||
var lhr = car(childElements(e)).href;
|
||||
var hr = lhr.substring(0, 5) == 'link:'? lhr.substring(5) : '';
|
||||
var t = car(childElements(car(childElements(e)))).innerHTML;
|
||||
return t == f? hr : (t == hr? hr : (t == ''? hr : hr + ',' + t));
|
||||
}
|
||||
if (e.className == 'img') {
|
||||
var src = car(childElements(e)).src;
|
||||
return src == window.location.href? '' : src;
|
||||
}
|
||||
if (e.className == 'iframe') {
|
||||
var hr = car(childElements(e)).href;
|
||||
return hr == window.location.href? '' : hr;
|
||||
}
|
||||
if (e.className == 'list')
|
||||
return '';
|
||||
if (e.className == 'table')
|
||||
return '';
|
||||
return '';
|
||||
}
|
||||
|
||||
var f = formula(e);
|
||||
var c = constant(e, f);
|
||||
return f == ''? c : (c == ''? f : f + ',' + c);
|
||||
};
|
||||
|
||||
/**
|
||||
* Return true if a widget has editable text.
|
||||
*/
|
||||
page.hastext = function(e) {
|
||||
if (e.className == 'h1' || e.className == 'h2' || e.className == 'text' || e.className == 'section')
|
||||
return true;
|
||||
if (e.className == 'button' || e.className == 'checkbox')
|
||||
return true;
|
||||
if (e.className == 'entry' || e.className == 'password')
|
||||
return true;
|
||||
if (e.className == 'select')
|
||||
return false;
|
||||
if (e.className == 'link')
|
||||
return true;
|
||||
if (e.className == 'img')
|
||||
return true;
|
||||
if (e.className == 'iframe')
|
||||
return true;
|
||||
if (e.className == 'list')
|
||||
return false;
|
||||
if (e.className == 'table')
|
||||
return false;
|
||||
return false;
|
||||
};
|
||||
|
||||
/**
|
||||
* Set the text of a widget.
|
||||
*/
|
||||
page.settext = function(e, t) {
|
||||
function formula(t) {
|
||||
if (t.length > 1 && t.substring(0, 1) == '=')
|
||||
return car(t.split(','));
|
||||
return '';
|
||||
}
|
||||
|
||||
function constant(t) {
|
||||
return t.length > 1 && t.substring(0, 1) == '='? cdr(t.split(',')) : t.split(',');
|
||||
}
|
||||
|
||||
var f = formula(t);
|
||||
var c = constant(t);
|
||||
|
||||
e.id = f != ''? f.substring(1) : ('page:' + e.className);
|
||||
|
||||
if (e.className == 'h1' || e.className == 'h2' || e.className == 'text' || e.className == 'section') {
|
||||
car(childElements(e)).innerHTML = isNil(c)? f : car(c);
|
||||
return t;
|
||||
}
|
||||
if (e.className == 'button' || e.className == 'entry' || e.className == 'password') {
|
||||
car(childElements(e)).defaultValue = isNil(c)? f : car(c);
|
||||
return t;
|
||||
}
|
||||
if (e.className == 'checkbox') {
|
||||
car(childElements(e)).value = isNil(c)? f : car(c);
|
||||
map(function(n) { if (n.nodeName == "SPAN") n.innerHTML = isNil(c)? f : car(c); return n; }, nodeList(e.childNodes));
|
||||
return t;
|
||||
}
|
||||
if (e.className == 'select') {
|
||||
var ce = car(childElements(car(childElements(e))));
|
||||
ce.value = isNil(c)? f : car(c);
|
||||
ce.innerHTML = isNil(c)? f : car(c);
|
||||
return t;
|
||||
}
|
||||
if (e.className == 'list') {
|
||||
e.innerHTML = '<table class="datatable" style="width: 100%;;"><tr><td class="datatd">' + (isNil(c)? f : car(c)) + '</td></tr><tr><td class="datatd">...</td></tr></table>';
|
||||
return t;
|
||||
}
|
||||
if (e.className == 'table') {
|
||||
e.innerHTML = '<table class="datatable" style="width: 100%;"><tr><td class="datatdl">' + (isNil(c)? f : car(c)) + '</td><td class="datatdr">...</td></tr><tr><td class="datatdl">...</td><td class="datatdr">...</td></tr></table>';
|
||||
return t;
|
||||
}
|
||||
if (e.className == 'link') {
|
||||
var ce = car(childElements(e));
|
||||
ce.href = isNil(c)? 'link:/index.html' : ('link:' + car(c));
|
||||
car(childElements(ce)).innerHTML = isNil(c)? (f != ''? f : '/index.html') : isNil(cdr(c))? (f != ''? f : car(c)) : cadr(c);
|
||||
return t;
|
||||
}
|
||||
if (e.className == 'img') {
|
||||
car(childElements(e)).src = isNil(c)? '/public/img.png' : car(c);
|
||||
return t;
|
||||
}
|
||||
if (e.className == 'iframe') {
|
||||
car(childElements(e)).href = isNil(c)? '/public/iframe.html' : car(c);
|
||||
return t;
|
||||
}
|
||||
return '';
|
||||
};
|
||||
|
||||
/**
|
||||
* Initial fixup of a widget.
|
||||
*/
|
||||
page.fixupwidget = function(e) {
|
||||
if (e.className == 'iframe') {
|
||||
var f = car(childElements(e));
|
||||
//e.innerHTML = '<iframe src="' + f.href + '" frameborder="no" scrolling="no"></iframe>';
|
||||
return e;
|
||||
}
|
||||
if (e.className == 'section') {
|
||||
e.style.width = '100%';
|
||||
return e;
|
||||
}
|
||||
if (e.className == 'list') {
|
||||
e.style.width = '100%';
|
||||
car(childElements(e)).style.width = '100%';
|
||||
return e;
|
||||
}
|
||||
if (e.className == 'table') {
|
||||
e.style.width = '100%';
|
||||
car(childElements(e)).style.width = '100%';
|
||||
return e;
|
||||
}
|
||||
return e;
|
||||
}
|
||||
|
||||
/**
|
||||
* Find a draggable element in a hierarchy of elements.
|
||||
*/
|
||||
page.draggable = function(n, e) {
|
||||
if (n == e)
|
||||
return null;
|
||||
if (n.id != '')
|
||||
return n;
|
||||
if (n.covered)
|
||||
return n.covered;
|
||||
return page.draggable(n.parentNode, e);
|
||||
}
|
||||
|
||||
/**
|
||||
* Align a pos along a 9pixel grid.
|
||||
*/
|
||||
page.gridsnap = function(x) {
|
||||
return Math.round(x / 9) * 9;
|
||||
}
|
||||
|
||||
/**
|
||||
* Bring an element and its parent to the top.
|
||||
*/
|
||||
page.bringtotop = function(n) {
|
||||
n.parentNode.appendChild(n);
|
||||
n.cover.parentNode.appendChild(n.cover);
|
||||
}
|
||||
|
||||
/**
|
||||
* Draw widget selection.
|
||||
*/
|
||||
page.widgetselect = function(n, s, wvalue, wcopy, wdelete) {
|
||||
if (isNil(n) || !s) {
|
||||
// Clear the widget value field
|
||||
wvalue.value = '';
|
||||
wvalue.disabled = true;
|
||||
wcopy.disabled = true;
|
||||
wdelete.disabled = true;
|
||||
|
||||
// Clear the widget outline
|
||||
if (!isNil(n))
|
||||
n.cover.style.borderWidth = '0px';
|
||||
return true;
|
||||
}
|
||||
|
||||
// Update the widget value field
|
||||
wvalue.value = page.text(n);
|
||||
wvalue.disabled = false;
|
||||
wcopy.disabled = false;
|
||||
wdelete.disabled = false;
|
||||
|
||||
// Outline the widget
|
||||
n.cover.style.borderWidth = '2px';
|
||||
return true;
|
||||
};
|
||||
|
||||
/**
|
||||
* Cover a page element with a <span> element to prevent
|
||||
* any input events to reach it.
|
||||
*/
|
||||
page.cover = function(e) {
|
||||
if (e.id == '' || isNil(e.style))
|
||||
return e;
|
||||
var cover = document.createElement('div');
|
||||
cover.style.position = 'absolute';
|
||||
cover.style.left = ui.pixpos(ui.numpos(e.style.left) - 2);
|
||||
cover.style.top = ui.pixpos(ui.numpos(e.style.top) - 2);
|
||||
cover.style.width = ui.pixpos(e.clientWidth + 4);
|
||||
cover.style.height = ui.pixpos(e.clientHeight + 4);
|
||||
cover.style.visibility = 'inherit';
|
||||
cover.style.borderStyle = 'solid';
|
||||
cover.style.borderWidth = '0px';
|
||||
cover.style.borderColor = '#598edd';
|
||||
cover.style.padding = '0px';
|
||||
cover.style.margin = '0px';
|
||||
cover.covered = e;
|
||||
e.cover = cover;
|
||||
e.parentNode.appendChild(cover);
|
||||
return e;
|
||||
}
|
||||
|
||||
/**
|
||||
* Clone a palette element.
|
||||
*/
|
||||
page.clone = function(e) {
|
||||
|
||||
/**
|
||||
* Clone an element's HTML.
|
||||
*/
|
||||
function mkclone(e) {
|
||||
var ne = document.createElement('span');
|
||||
|
||||
// Skip the palette: prefix
|
||||
ne.id = 'page:' + e.id.substr(8);
|
||||
|
||||
// Copy the class and HTML content
|
||||
ne.className = e.className;
|
||||
ne.innerHTML = e.innerHTML;
|
||||
|
||||
// Fixup the widget style
|
||||
page.fixupwidget(ne);
|
||||
|
||||
return ne;
|
||||
}
|
||||
|
||||
/**
|
||||
* Clone an element's position.
|
||||
*/
|
||||
function posclone(ne, e) {
|
||||
ne.style.position = 'absolute';
|
||||
ne.style.left = ui.pixpos(ui.numpos(e.style.left));
|
||||
ne.style.top = ui.pixpos(ui.numpos(e.style.top));
|
||||
e.parentNode.appendChild(ne);
|
||||
page.cover(ne);
|
||||
return ne;
|
||||
}
|
||||
|
||||
return posclone(mkclone(e), e);
|
||||
};
|
||||
|
1
sca-cpp/trunk/modules/edit/htdocs/public/app.b64
Normal file
1
sca-cpp/trunk/modules/edit/htdocs/public/app.b64
Normal file
|
@ -0,0 +1 @@
|
|||
iVBORw0KGgoAAAANSUhEUgAAADIAAAAyAgMAAABjUWAiAAAABGdBTUEAALGPC/xhBQAAAAxQTFRFyN+N+dR1/PCI////6HjE5gAAADJJREFUKM9j+I8EPjBQifeBAQSY6coLBYN6inhaq0Bg6SDn/f//akB466ExTS6P2ukMAKumzarJO/66AAAAAElFTkSuQmCC
|
1
sca-cpp/trunk/modules/edit/htdocs/public/delete.b64
Normal file
1
sca-cpp/trunk/modules/edit/htdocs/public/delete.b64
Normal file
|
@ -0,0 +1 @@
|
|||
iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAYAAADE6YVjAAAAAXNSR0IArs4c6QAAAAZiS0dEANAAPwBBXloXjQAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sEFhQaKzNh4PgAAAMKSURBVEjHxZZPTBNBFMa/maVbWjcUi0YiIHIoNBADTUgsqCWgUUFjwkk5CXLUBKIc9KIXjx64oMSDoiggGC8koImCGDWYkADRIiQQgikWCq0WoXW33R0PpYjSLeWP8btN3sv85s17894QrKNeIBng8gFmJSDZgGIAqJeBjQCkH5AHioGZaHsQNUMP+ByKYB0ByVjvIAxsUkHcrRJI9pggXYBWB1pLQUqxQSlg3X4o9WWAqArpAhL04JoIYMQmxQCPD3JlGbCwBtIFaPXgWrcC+AtUEY6Ihg060NrtACyf3KgDrQ2v6e8kbzwH0URBSnvA56xAKIJ1kRzNbS2ZNhYssjodVj41VbPaxqemaqxOh9XGgkXmtpbMyKDQvqQXSKbg2iKGzfPE0v8uV7BYDIuDg95B66FhJkmM8DyxfHifK+TlGRaHhryDBwuHmSSxyBUnn6Ohh6aSQElin86U26XZWVGwWAxZD5tMAGBufmAS8vIMkssl2s+Uj6gBQuLySS/oTQpyONr9GmxHhAMvnltovJZ+73vjTiyyJSmipHw8WTrkfd33Y52385arAr1EAF00R3HqixRwu38mnT61O35/uh4AJq7Ujc0/affEUGsCDfWi9TXX3uEOeDwBABCnp/3OO42uGPuAgQLUG4urueVRlsZo1ACANiVFZ7rTkBFjMXtpqJtGV9q1q3uNJ47vlpd88kTt5VEWCLLk6gtpeyrP74qheY5wlaB6AhSqOSUUFOzIun8vh8RxZKKmZvRrw20X0WjkxCKbceexo0Z3Z+d8wDUXVIeQdgrIA6rFl5DAmVsfZ1MtT+faO5zOxrtzADB1/Ybj28tX85wgxOU8e5pN9XqqHos8QIuBGQY2GTEPD5tM8en79P7x8aWxqurx1bbPZytGRYfDrzOZBHPzA5PanCkGZki4d3GQG7DNksFdLIFkpwBQAsmugHVvJ0AB6w5PypW79EOpZ4BnOwAM8Pih1P/R6gGgDBB9kCu3Clo1GcU1kGXQgg9yxWavTgHrXp6IC///t/Iv/l2/AGa0Qa2X0eC0AAAAAElFTkSuQmCC
|
1
sca-cpp/trunk/modules/edit/htdocs/public/grid72.b64
Normal file
1
sca-cpp/trunk/modules/edit/htdocs/public/grid72.b64
Normal file
|
@ -0,0 +1 @@
|
|||
iVBORw0KGgoAAAANSUhEUgAAAEgAAABIAgMAAAAog1vUAAAABGdBTUEAALGPC/xhBQAAAAlQTFRFwuD84/T+////fj9v9QAAACxJREFUOMtjWLUqa9WsVctWrYQxVjAMCqFQdBDCMOrUUaeOOnXUqYPPqZgAABmg/C7pJC7lAAAAAElFTkSuQmCC
|
|
@ -17,13 +17,8 @@
|
|||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
-->
|
||||
<html manifest="/cache-manifest.cmf">
|
||||
<html>
|
||||
<head>
|
||||
<title>frame</title>
|
||||
<meta name="viewport" content="width=device-width user-scalable=no initial-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="stylesheet" type="text/css" href="/ui-min.css"/>
|
||||
</head>
|
||||
<body style="margin:3px; padding: 0px; background-color: #dcdcdc;">
|
||||
|
||||
|
|
1
sca-cpp/trunk/modules/edit/htdocs/public/img.b64
Normal file
1
sca-cpp/trunk/modules/edit/htdocs/public/img.b64
Normal file
|
@ -0,0 +1 @@
|
|||
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAABGdBTUEAALGPC/xhBQAAAIRQTFRFwdt/w9yEw9+MxN2GxN6NxN+Oxd2Mxd6Nxt6Lx96Lx96Nx9+NyN6MyN+MyN+N8u2I8+2I+NBq+NFr+NFt+NFu+NJz+NN0+dR1+dR3+dZw+dh4+9Fy+9Nz++5++++B+++F/NNz/PCH/PCI/PGW/PKc/fKd/vzp/vzq/v7+/v/z/9Jx////nQZfHwAAAIxJREFUOMtj0CYAGKiiQANdUAPdBAZmFMCIYQUzHwrgpKECblYwYEJ2LYoCHi0FMBCEAmF0E3hkxFGABJICXnYWFhY2aVE4EENTwCWgCARKCCCFoUAJFQw9BYycnBz8eBSA04cqPhNAQIX+CiSFhIRE8CiQ10ROMNgUqKNnHGU5FCCrhqZAg7Z5Ey8AALiBh6brcmloAAAAAElFTkSuQmCC
|
|
@ -1,79 +0,0 @@
|
|||
<!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>Sorry</title>
|
||||
<meta name="viewport" content="width=device-width user-scalable=no initial-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="stylesheet" type="text/css" href="/ui-min.css"/>
|
||||
<script type="text/javascript" src="/all-min.js"></script>
|
||||
<script type="text/javascript" src="/menu.js"></script>
|
||||
</head>
|
||||
<body class="delayed" onload="ui.onload();" onbeforeunload="ui.onbeforeunload();">
|
||||
<div id="bodydiv" class="bodydiv">
|
||||
|
||||
<div id="headdiv" class="hsection">
|
||||
<script type="text/javascript" src="/headconfig.js"></script>
|
||||
</div>
|
||||
|
||||
<div id="menu"></div>
|
||||
|
||||
<table style="width: 100%;">
|
||||
<tr><td><h2><span id="h1"></span></h2></td></tr>
|
||||
</table>
|
||||
|
||||
<div style="margin-left: auto; margin-right: auto; text-align: center;">
|
||||
<div class="hd2">Sorry, you're not authorized to view this page.</div>
|
||||
</div>
|
||||
|
||||
<form name="signout" action="/public/notauth.html" method="GET">
|
||||
</form>
|
||||
|
||||
<script type="text/javascript">
|
||||
ui.initbody();
|
||||
|
||||
// Set page title
|
||||
$('h1').innerHTML = hometitle(window.location.hostname);
|
||||
|
||||
// Load the menu bar
|
||||
if (!issubdomain(window.location.hostname))
|
||||
displaymenu();
|
||||
|
||||
// Sign out
|
||||
if (window.top.location.pathname != '/public/notauth.html') {
|
||||
function submitSignout() {
|
||||
var reset = 'TuscanyOpenAuth=;expires=' + new Date(1970,01,01).toGMTString() + ';domain=.' + domainname(window.location.hostname) + ';path=/;secure=TRUE';
|
||||
document.cookie = reset;
|
||||
document.signout.submit();
|
||||
return true;
|
||||
}
|
||||
|
||||
submitSignout();
|
||||
}
|
||||
</script>
|
||||
|
||||
<div id="footdiv" class="fsection">
|
||||
<script type="text/javascript" src="/footconfig.js"></script>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -1,65 +0,0 @@
|
|||
<!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>Page not found</title>
|
||||
<meta name="viewport" content="width=device-width user-scalable=no initial-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="stylesheet" type="text/css" href="/ui-min.css"/>
|
||||
<script type="text/javascript" src="/all-min.js"></script>
|
||||
<script type="text/javascript" src="/menu.js"></script>
|
||||
</head>
|
||||
<body class="delayed">
|
||||
<div id="bodydiv" class="bodydiv" onload="ui.onload();" onbeforeunload="ui.onbeforeunload();">
|
||||
|
||||
<div id="headdiv" class="hsection">
|
||||
<script type="text/javascript" src="/headconfig.js"></script>
|
||||
</div>
|
||||
|
||||
<div id="menu"></div>
|
||||
|
||||
<table style="width: 100%;">
|
||||
<tr><td><h2><span id="h1"></span></h2></td></tr>
|
||||
</table>
|
||||
|
||||
<div style="margin-left: auto; margin-right: auto; text-align: center;">
|
||||
<div class="hd2">Sorry, that page was not found.</div>
|
||||
<div>You may have clicked an expired link or mistyped the address.</div>
|
||||
</div>
|
||||
|
||||
<script type="text/javascript">
|
||||
ui.initbody();
|
||||
|
||||
// Set page title
|
||||
$('h1').innerHTML = hometitle(window.location.hostname);
|
||||
|
||||
// Load the menu bar
|
||||
if (!issubdomain(window.location.hostname))
|
||||
displaymenu();
|
||||
</script>
|
||||
|
||||
<div id="footdiv" class="fsection">
|
||||
<script type="text/javascript" src="/footconfig.js"></script>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -1,64 +0,0 @@
|
|||
<!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>Page not found</title>
|
||||
<meta name="viewport" content="width=device-width user-scalable=no initial-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="stylesheet" type="text/css" href="/ui-min.css"/>
|
||||
<script type="text/javascript" src="/all-min.js"></script>
|
||||
<script type="text/javascript" src="/menu.js"></script>
|
||||
</head>
|
||||
<body class="delayed" onload="ui.onload();" onbeforeunload="ui.onbeforeunload();">
|
||||
<div id="bodydiv" class="bodydiv">
|
||||
|
||||
<div id="headdiv" class="hsection">
|
||||
<script type="text/javascript" src="/headconfig.js"></script>
|
||||
</div>
|
||||
<div id="menu"></div>
|
||||
|
||||
<table style="width: 100%;">
|
||||
<tr><td><h2><span id="h1"></span></h2></td></tr>
|
||||
</table>
|
||||
|
||||
<div style="margin-left: auto; margin-right: auto; text-align: center;">
|
||||
<div class="hd2">Sorry, that page is still under construction.</div>
|
||||
<div>Please check back later.</div>
|
||||
</div>
|
||||
|
||||
<script type="text/javascript">
|
||||
ui.initbody();
|
||||
|
||||
// Set page title
|
||||
$('h1').innerHTML = hometitle(window.location.hostname);
|
||||
|
||||
// Load the menu bar
|
||||
if (!issubdomain(window.location.hostname))
|
||||
displaymenu();
|
||||
</script>
|
||||
|
||||
<div id="footdiv" class="fsection">
|
||||
<script type="text/javascript" src="/footconfig.js"></script>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
1
sca-cpp/trunk/modules/edit/htdocs/public/touchicon.b64
Normal file
1
sca-cpp/trunk/modules/edit/htdocs/public/touchicon.b64
Normal file
|
@ -0,0 +1 @@
|
|||
iVBORw0KGgoAAAANSUhEUgAAADkAAAA5CAIAAAADehTSAAAAAXNSR0IArs4c6QAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sDGxMkCJXGmL8AAAHwSURBVGje7ZpNbhNBEIXf625sCzA/QUhkg8SGiGxZcpDcgRux5hLkEjkE7BAS9gIyk+muxyZIsSeOG09bsXHX0p4pfVNdP8/loSTsiTnsj1XWyrrMutVSG+ic/ftNqe1mIMtSjsPUu9EQJ6H/UdvNLr59cgwFWaM1p8dnLx6dFGYF6RhIXzLVGIChB3VX8Fg0DWrPqqyHxTq4MUnKKEEBoNvIN4uxiqTkofUXpgZKsqtMx3Djpb45lNWAxxbfXf6wtdH9+vkKBLLGrFLz4M1HTk+K5gAIgBCVcaTI1gOK/acazqqbw2PdYzE7tdyh9AFJTL0zNDIJMInAZpKPzBzmIZuUnjoa9QQkOBHAyWbigYDaTslybg/59f7Q4+003pqwhqcbqjLH9H2OXw0Ksl6XsWB/a39lhf1rz8vOnKoHKmtlrayVtbLuuc6SFK1Z2hEZkBwAv1us4zA9PT7rDX3v9dPiOeBxT/uY0A+qd6Pbl2Sax/kXDN9LlcrXO3Rk9k/QWluVtbIe2O5toBGwFum3bLH/pEso7RarrPNHH/D8JbBIpsjJqx2Lq3Xu2Xv61yvXJzf6/b3nK2Htyu8WB9P/XltF/wfVllgFxet9azGL+bjMD5IUYbPSMktwT8hRSdalkizcufKcs77vUlkr61bsD5lbwtgOKPT2AAAAAElFTkSuQmCC
|
1
sca-cpp/trunk/modules/edit/htdocs/public/user.b64
Normal file
1
sca-cpp/trunk/modules/edit/htdocs/public/user.b64
Normal file
|
@ -0,0 +1 @@
|
|||
iVBORw0KGgoAAAANSUhEUgAAADIAAAAyAgMAAABjUWAiAAAABGdBTUEAALGPC/xhBQAAAAxQTFRFyN+N+dR1/PCI////6HjE5gAAADJJREFUKM9j+I8EPjBQifeBAQSY6coLBYN6inhaq0Bg6SDn/f//akB466ExTS6P2ukMAKumzarJO/66AAAAAElFTkSuQmCC
|
BIN
sca-cpp/trunk/modules/edit/htdocs/public/user.png
Normal file
BIN
sca-cpp/trunk/modules/edit/htdocs/public/user.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 147 B |
|
@ -17,26 +17,8 @@
|
|||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
-->
|
||||
<html manifest="/cache-manifest.cmf">
|
||||
<head>
|
||||
<title>Stats</title>
|
||||
<meta name="viewport" content="width=device-width, user-scalable=no, initial-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"/>
|
||||
<link rel="stylesheet" type="text/css" href="/ui-min.css"/>
|
||||
<script type="text/javascript" src="/all-min.js"></script>
|
||||
<script type="text/javascript" src="/menu.js"></script>
|
||||
</head>
|
||||
<body class="delayed" onload="ui.onload();" onbeforeunload="ui.onbeforeunload();">
|
||||
<div id="bodydiv" class="bodydiv">
|
||||
|
||||
<div id="headdiv" class="hsection">
|
||||
<script type="text/javascript" src="/headconfig.js"></script>
|
||||
</div>
|
||||
|
||||
<div id="menu"></div>
|
||||
|
||||
<table style="width: 100%;">
|
||||
<tr>
|
||||
<td><h2><span id="h1"></span><span id="appNameHeader"></span></h2></td>
|
||||
|
@ -57,7 +39,7 @@
|
|||
<form id="appForm">
|
||||
<table style="width: 100%;">
|
||||
<tr><tr><td><b>App Icon:</b></td></tr>
|
||||
<tr><td><img src="/public/app.png" style="width: 50px; height: 50px; vertical-align: top;"></td></tr>
|
||||
<tr><td><img id="appimg" style="width: 50px; height: 50px; vertical-align: top;"></td></tr>
|
||||
<tr><tr><td style="padding-top: 6px;"><b>Sharing:</b></td></tr>
|
||||
<tr><td><input type="checkbox" value="shared"/><span>Shared</span></td></tr>
|
||||
<tr><tr><td style="padding-top: 6px;"><b>App Title:</b></td></tr>
|
||||
|
@ -70,20 +52,17 @@
|
|||
</form>
|
||||
|
||||
<script type="text/javascript">
|
||||
ui.initbody();
|
||||
|
||||
// Get the app name
|
||||
var appname = ui.fragmentParams()['app'];
|
||||
if (isNil(appname))
|
||||
window.open('/', '_self');
|
||||
var appname = ui.fragmentParams(location)['app'];
|
||||
|
||||
/**
|
||||
* Return the link to an app.
|
||||
*/
|
||||
function applink(appname) {
|
||||
var protocol = window.location.protocol;
|
||||
var host = window.location.hostname;
|
||||
var port = ':' + window.location.port;
|
||||
var protocol = location.protocol;
|
||||
var host = location.hostname;
|
||||
var port = ':' + location.port;
|
||||
if (port == ':80' || port == ':443' || port == ':')
|
||||
port = '';
|
||||
var link = protocol + '//' + appname + '.' + host + port + '/';
|
||||
|
@ -91,14 +70,14 @@ function applink(appname) {
|
|||
}
|
||||
|
||||
// Set page titles
|
||||
document.title = windowtitle(window.location.hostname) + ' - Stats - ' + appname;
|
||||
document.title = ui.windowtitle(location.hostname) + ' - Stats - ' + appname;
|
||||
$('appNameHeader').innerHTML = '<a href=\"' + applink(appname) + '\" target=\"' + '_blank' + '\">' + appname + '</a>';
|
||||
var tclone = isNil(config.clone)? 'Clone' : config.clone;
|
||||
$('cloneApp').value = tclone;
|
||||
$('cloneApp').title = tclone + ' this app';
|
||||
|
||||
// Load the menu bar
|
||||
displaymenu();
|
||||
// Set images
|
||||
$('appimg').src = ui.b64img(appcache.get('/public/app.b64'));
|
||||
|
||||
// Init service references
|
||||
var editWidget = sca.component("EditWidget");
|
||||
|
@ -176,18 +155,12 @@ $('appForm').onsubmit = function() {
|
|||
* Handle Clone button event.
|
||||
*/
|
||||
$('cloneApp').onclick = function() {
|
||||
return ui.navigate('/clone/#app=' + appname, '_self');
|
||||
return ui.navigate('/#view=clone&app=' + appname, '_view');
|
||||
}
|
||||
|
||||
// Get the current app
|
||||
getapp(appname);
|
||||
|
||||
</script>
|
||||
|
||||
<div id="footdiv" class="fsection">
|
||||
<script type="text/javascript" src="/footconfig.js"></script>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
|
|
|
@ -17,26 +17,8 @@
|
|||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
-->
|
||||
<html manifest="/cache-manifest.cmf">
|
||||
<head>
|
||||
<title>Store</title>
|
||||
<meta name="viewport" content="width=device-width, user-scalable=no, initial-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"/>
|
||||
<link rel="stylesheet" type="text/css" href="/ui-min.css"/>
|
||||
<script type="text/javascript" src="/all-min.js"></script>
|
||||
<script type="text/javascript" src="/menu.js"></script>
|
||||
</head>
|
||||
<body class="delayed" onload="ui.onload();" onbeforeunload="ui.onbeforeunload();">
|
||||
<div id="bodydiv" class="bodydiv">
|
||||
|
||||
<div id="headdiv" class="hsection">
|
||||
<script type="text/javascript" src="/headconfig.js"></script>
|
||||
</div>
|
||||
|
||||
<div id="menu"></div>
|
||||
|
||||
<table style="width: 100%;">
|
||||
<tr><td><h2><span id="h1"></span></h2></td></tr>
|
||||
</table>
|
||||
|
@ -46,17 +28,13 @@
|
|||
<div id="apps"></div>
|
||||
|
||||
<script type="text/javascript">
|
||||
ui.initbody();
|
||||
|
||||
// Set page titles
|
||||
document.title = windowtitle(window.location.hostname) + ' - Store';
|
||||
$('h1').innerHTML = hometitle(window.location.hostname);
|
||||
|
||||
// Display the menu bar
|
||||
displaymenu();
|
||||
document.title = ui.windowtitle(location.hostname) + ' - Store';
|
||||
$('h1').innerHTML = ui.hometitle(location.hostname);
|
||||
|
||||
// Get the store category
|
||||
var category = ui.fragmentParams()['category'];
|
||||
var category = ui.fragmentParams(location)['category'];
|
||||
if (isNil(category))
|
||||
category = 'myapps';
|
||||
|
||||
|
@ -64,18 +42,18 @@ if (isNil(category))
|
|||
* Build store menu bar
|
||||
*/
|
||||
function catmenu() {
|
||||
function catmenuitem(name, cat) {
|
||||
function catmenuitem(name, cat, idx) {
|
||||
var c = cat == category? 'smenu' : 'amenu';
|
||||
return '<th class="thl thr" style="width: 10px; padding-top: 4px; padding-bottom: 4px; padding-right: 6px;">'
|
||||
+ ui.ahref('/store/#category=' + cat, '_reload', '<span class="' + c + '">' + name + '</span>') + '</th>';
|
||||
+ ui.ahref('/#view=store&category=' + cat + '&idx=' + idx, '_view', '<span class="' + c + '">' + name + '</span>') + '</th>';
|
||||
}
|
||||
|
||||
var m = '<table style="width: 100%; margin-bottom: 2px;"><tr>';
|
||||
m += catmenuitem('My Apps', 'myapps');
|
||||
m += catmenuitem('New', 'new');
|
||||
m += catmenuitem('Top', 'top');
|
||||
m += catmenuitem('Featured', 'featured');
|
||||
m += catmenuitem('All', 'all');
|
||||
m += catmenuitem('My Apps', 'myapps', '1');
|
||||
m += catmenuitem('New', 'new', '2');
|
||||
m += catmenuitem('Top', 'top', '3');
|
||||
m += catmenuitem('Featured', 'featured', '4');
|
||||
m += catmenuitem('All', 'all', '5');
|
||||
if (category == 'myapps') {
|
||||
m += '<th class="thl thr" style="width: 100%; padding-top: 0px; padding-bottom: 0px; padding-right: 0px; text-align: right;">';
|
||||
m += '<input type="button" class="graybutton" id="createApp" title="Create a new app" style="font-weight: bold; margin-top: 0px; margin-bottom: 0px; height: 24px;" Value="New App"/>';
|
||||
|
@ -100,9 +78,9 @@ var dashboards = sca.reference(editWidget, "dashboards");
|
|||
* Return the link to an app.
|
||||
*/
|
||||
function applink(appname) {
|
||||
var protocol = window.location.protocol;
|
||||
var host = window.location.hostname;
|
||||
var port = ':' + window.location.port;
|
||||
var protocol = location.protocol;
|
||||
var host = location.hostname;
|
||||
var port = ':' + location.port;
|
||||
if (port == ':80' || port == ':443' || port == ':')
|
||||
port = '';
|
||||
var link = protocol + '//' + appname + '.' + host + port + '/';
|
||||
|
@ -113,14 +91,14 @@ function applink(appname) {
|
|||
* Edit an app.
|
||||
*/
|
||||
function editApp(appname) {
|
||||
return ui.navigate('/page/#app=' + appname, '_self');
|
||||
return ui.navigate('/#view=page&app=' + appname, '_view');
|
||||
}
|
||||
|
||||
/**
|
||||
* View an app.
|
||||
*/
|
||||
function viewApp(appname) {
|
||||
return ui.navigate('/stats/#app=' + appname, '_self');
|
||||
return ui.navigate('/#view=stats&app=' + appname, '_view');
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -128,7 +106,7 @@ function viewApp(appname) {
|
|||
*/
|
||||
if (category == 'myapps') {
|
||||
$('createApp').onclick = function() {
|
||||
return ui.navigate('/create/', '_self');
|
||||
return ui.navigate('/#view=create', '_view');
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -136,6 +114,7 @@ if (category == 'myapps') {
|
|||
* Get and display list of apps.
|
||||
*/
|
||||
function getapps(category) {
|
||||
//log('category', category);
|
||||
function display(doc) {
|
||||
|
||||
// Stop now if we didn't get the apps
|
||||
|
@ -147,6 +126,8 @@ function getapps(category) {
|
|||
var aentries = assoc("'entry", cdr(feed));
|
||||
var entries = isNil(aentries)? mklist() : isList(car(cadr(aentries)))? cadr(aentries) : mklist(cdr(aentries));
|
||||
|
||||
var appimg = ui.b64img(appcache.get('/public/app.b64'));
|
||||
|
||||
function displayentries(entries) {
|
||||
if (isNil(entries))
|
||||
return apps;
|
||||
|
@ -159,7 +140,7 @@ function getapps(category) {
|
|||
apps += '<div class="box" style="width: 150px; display: inline-block; border: 1px; border-style: solid; border-color: #dcdcdc; border-collapse: collapse; margin: 2px; padding: 2px; vertical-align: top;">'
|
||||
apps += '<table><tr>';
|
||||
apps += '<td>';
|
||||
apps += '<div>' + ui.ahref('/stats/#app=' + name, '_self', '<img src="/public/app.png" width="50" height="50" style="height: 50px; width: 50px; vertical-align: top; margin: 0px; padding: 0px;"></img>') + '</div>';
|
||||
apps += '<div>' + ui.ahref('/#view=stats&app=' + name, '_view', '<img src="' + appimg + '" width="50" height="50" style="height: 50px; width: 50px; vertical-align: top; margin: 0px; padding: 0px;"></img>') + '</div>';
|
||||
apps += '</td>';
|
||||
apps += '<td class="tdw">';
|
||||
apps += '<div style="font-weight: bold">' + ui.ahref(applink(name), '_blank', name) + '</div>';
|
||||
|
@ -186,13 +167,7 @@ function getapps(category) {
|
|||
|
||||
// Get and display the list of apps
|
||||
getapps(category);
|
||||
|
||||
</script>
|
||||
|
||||
<div id="footdiv" class="fsection">
|
||||
<script type="text/javascript" src="/footconfig.js"></script>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
|
|
|
@ -51,18 +51,18 @@ jsprefix=`echo "import os; print os.path.realpath('$here/../js')" | python`
|
|||
# Configure error pages
|
||||
cat >>tmp/conf/svhost-ssl.conf <<EOF
|
||||
# Error pages
|
||||
ErrorDocument 404 /public/notfound.html
|
||||
ErrorDocument 401 /public/notauth.html
|
||||
ErrorDocument 500 /public/oops.html
|
||||
ErrorDocument 404 /notfound/
|
||||
ErrorDocument 401 /notauth/
|
||||
ErrorDocument 500 /oops/
|
||||
|
||||
EOF
|
||||
|
||||
# Configure app home pages
|
||||
cat >>tmp/conf/dvhost-ssl.conf <<EOF
|
||||
# App error pages
|
||||
ErrorDocument 404 /public/notfound.html
|
||||
ErrorDocument 401 /public/notauth.html
|
||||
ErrorDocument 500 /public/oops.html
|
||||
ErrorDocument 404 /notfound/
|
||||
ErrorDocument 401 /notauth/
|
||||
ErrorDocument 500 /oops/
|
||||
|
||||
# Redirect www to main home page
|
||||
RewriteEngine on
|
||||
|
@ -101,7 +101,8 @@ EOF
|
|||
# Configure main aliases
|
||||
cat >>tmp/conf/httpd.conf <<EOF
|
||||
|
||||
Alias /home.png $here/htdocs/home.png
|
||||
Alias /home/home.png $here/htdocs/home/home.png
|
||||
Alias /home/home.b64 $here/htdocs/home/home.b64
|
||||
|
||||
EOF
|
||||
|
||||
|
@ -120,7 +121,10 @@ Alias /headconfig.js $here/htdocs/headconfig.js
|
|||
Alias /index.html $here/htdocs/app/index.html
|
||||
Alias /login $here/htdocs/login
|
||||
Alias /logout $here/htdocs/logout
|
||||
Alias /menu.js $here/htdocs/menu.js
|
||||
Alias /notauth $here/htdocs/notauth
|
||||
Alias /notfound $here/htdocs/notfound
|
||||
Alias /notyet $here/htdocs/notyet
|
||||
Alias /oops $here/htdocs/oops
|
||||
Alias /public $here/htdocs/public
|
||||
Alias /robots.txt $here/htdocs/robots.txt
|
||||
|
||||
|
|
|
@ -35,18 +35,18 @@ jsprefix=`echo "import os; print os.path.realpath('$here/../js')" | python`
|
|||
# Configure error pages
|
||||
cat >>tmp/conf/svhost.conf <<EOF
|
||||
# Error pages
|
||||
ErrorDocument 404 /public/notfound.html
|
||||
ErrorDocument 401 /public/notauth.html
|
||||
ErrorDocument 500 /public/oops.html
|
||||
ErrorDocument 404 /notfound/
|
||||
ErrorDocument 401 /notauth/
|
||||
ErrorDocument 500 /oops/
|
||||
|
||||
EOF
|
||||
|
||||
# Configure app home pages
|
||||
cat >>tmp/conf/dvhost.conf <<EOF
|
||||
# App error pages
|
||||
ErrorDocument 404 /public/notfound.html
|
||||
ErrorDocument 401 /public/notauth.html
|
||||
ErrorDocument 500 /public/oops.html
|
||||
ErrorDocument 404 /notfound/
|
||||
ErrorDocument 401 /notauth/
|
||||
ErrorDocument 500 /oops/
|
||||
|
||||
# Redirect www to main home page
|
||||
RewriteEngine on
|
||||
|
@ -70,6 +70,14 @@ SCAVirtualComposite app.composite
|
|||
|
||||
EOF
|
||||
|
||||
# Configure main aliases
|
||||
cat >>tmp/conf/httpd.conf <<EOF
|
||||
|
||||
Alias /home/home.png $here/htdocs/home/home.png
|
||||
Alias /home/home.b64 $here/htdocs/home/home.b64
|
||||
|
||||
EOF
|
||||
|
||||
# Create app links and sub-directories if needed
|
||||
./mkapplinks
|
||||
|
||||
|
@ -85,7 +93,10 @@ Alias /headconfig.js $here/htdocs/headconfig.js
|
|||
Alias /index.html $here/htdocs/app/index.html
|
||||
Alias /login $here/htdocs/login
|
||||
Alias /logout $here/htdocs/logout
|
||||
Alias /menu.js $here/htdocs/menu.js
|
||||
Alias /notauth $here/htdocs/notauth
|
||||
Alias /notfound $here/htdocs/notfound
|
||||
Alias /notyet $here/htdocs/notyet
|
||||
Alias /oops $here/htdocs/oops
|
||||
Alias /public $here/htdocs/public
|
||||
Alias /robots.txt $here/htdocs/robots.txt
|
||||
|
||||
|
|
|
@ -546,7 +546,7 @@ text/directory
|
|||
text/enriched
|
||||
text/html html htm
|
||||
text/parityfec
|
||||
text/plain asc txt
|
||||
text/plain asc txt b64
|
||||
text/prs.lines.tag
|
||||
text/rfc822-headers
|
||||
text/richtext rtx
|
||||
|
|
|
@ -284,6 +284,11 @@ cat >$root/conf/vhost.conf <<EOF
|
|||
# Virtual host configuration
|
||||
UseCanonicalName Off
|
||||
|
||||
# Enable HTTP reverse proxy
|
||||
ProxyRequests Off
|
||||
ProxyPreserveHost Off
|
||||
ProxyStatus On
|
||||
|
||||
EOF
|
||||
|
||||
cat >$root/conf/svhost.conf <<EOF
|
||||
|
|
|
@ -129,6 +129,18 @@ SSLRequire %{SSL_CIPHER_USEKEYSIZE} >= 128
|
|||
LogFormat "[%{%a %b %d %H:%M:%S %Y}t] [sslaccess] %h %l %u %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\" \"%{SSL_CLIENT_I_DN}x\" \"%{SSL_CLIENT_S_DN}x\" \"%{cookie}n\" %A %V %D %I %O" sslcombined
|
||||
CustomLog $root/logs/ssl_access_log sslcombined
|
||||
|
||||
# Enable HTTPS reverse proxy
|
||||
ProxyRequests Off
|
||||
ProxyPreserveHost Off
|
||||
ProxyStatus On
|
||||
SSLProxyEngine on
|
||||
SSLProxyCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
|
||||
|
||||
# Verify server certificates
|
||||
SSLProxyVerify require
|
||||
SSLProxyVerifyDepth 1
|
||||
SSLProxyCheckPeerCN Off
|
||||
|
||||
EOF
|
||||
|
||||
proxycert="server"
|
||||
|
@ -144,8 +156,12 @@ Include conf/vhost-ssl.conf
|
|||
# Declare SSL certificates used in this virtual host
|
||||
SSLCACertificateFile "$root/cert/ca.crt"
|
||||
SSLCertificateChainFile "$root/cert/ca.crt"
|
||||
SSLCertificateFile "$root/cert/server.crt"
|
||||
SSLCertificateKeyFile "$root/cert/server.key"
|
||||
SSLCertificateFile "$root/cert/vhost.crt"
|
||||
SSLCertificateKeyFile "$root/cert/vhost.key"
|
||||
|
||||
# Declare proxy SSL client certificates
|
||||
SSLProxyCACertificateFile "$root/cert/ca.crt"
|
||||
SSLProxyMachineCertificateFile "$root/cert/$proxycert.pem"
|
||||
|
||||
EOF
|
||||
|
||||
|
|
|
@ -199,6 +199,7 @@ static int checkAuthn(request_rec *r) {
|
|||
if (!dc.enabled)
|
||||
return DECLINED;
|
||||
const char* atype = ap_auth_type(r);
|
||||
debug(atype, "modopenauth::checkAuthn::auth_type");
|
||||
if (atype == NULL || strcasecmp(atype, "Open"))
|
||||
return DECLINED;
|
||||
|
||||
|
|
|
@ -24,11 +24,6 @@ root=`echo "import os; print os.path.realpath('$1')" | python`
|
|||
|
||||
cat >>$root/conf/vhost.conf <<EOF
|
||||
# Generated by: proxy-conf $*
|
||||
# Enable HTTP reverse proxy
|
||||
ProxyRequests Off
|
||||
ProxyPreserveHost On
|
||||
ProxyStatus On
|
||||
|
||||
# Enable load balancing
|
||||
ProxyPass / balancer://cluster/
|
||||
|
||||
|
|
|
@ -24,17 +24,6 @@ root=`echo "import os; print os.path.realpath('$1')" | python`
|
|||
|
||||
cat >>$root/conf/vhost-ssl.conf <<EOF
|
||||
# Generated by: proxy-ssl-conf $*
|
||||
# Enable HTTPS reverse proxy
|
||||
ProxyRequests Off
|
||||
ProxyPreserveHost On
|
||||
ProxyStatus On
|
||||
SSLProxyEngine on
|
||||
SSLProxyCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
|
||||
|
||||
# Verify server certificates
|
||||
SSLProxyVerify require
|
||||
SSLProxyVerifyDepth 1
|
||||
|
||||
# Enable load balancing
|
||||
ProxyPass /balancer-manager !
|
||||
ProxyPass / balancer://sslcluster/
|
||||
|
@ -63,7 +52,6 @@ EOF
|
|||
|
||||
cat >>$root/conf/dvhost-ssl.conf <<EOF
|
||||
# Generated by: proxy-ssl-conf $*
|
||||
|
||||
# Declare proxy SSL client certificates
|
||||
SSLProxyCACertificateFile "$root/cert/ca.crt"
|
||||
SSLProxyMachineCertificateFile "$root/cert/proxy.pem"
|
||||
|
|
120
sca-cpp/trunk/modules/js/htdocs/all-min.js
vendored
120
sca-cpp/trunk/modules/js/htdocs/all-min.js
vendored
|
@ -1,3 +1,21 @@
|
|||
/*
|
||||
* 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.
|
||||
*/
|
||||
function cons(car,cdr){var a=new Array();a.push(car);return a.concat(cdr);}
|
||||
function car(l){return l[0];}
|
||||
function first(l){return l[0];}
|
||||
|
@ -66,10 +84,6 @@ function properties(o){var a=new Array();for(p in o)
|
|||
a.push(p);return a;}
|
||||
function domainname(host){var h=reverse(host.split('.'));return reverse(mklist(car(h),cadr(h))).join('.');}
|
||||
function issubdomain(host){return host.split('.').length>2;}
|
||||
function hometitle(host){if(!isNil(config.hometitle))
|
||||
return config.hometitle;var h=reverse(host.split('.'));var d=isNil(cdr(h))?car(h):cadr(h);return d.substr(0,1).toUpperCase()+d.substr(1);}
|
||||
function windowtitle(host){if(!isNil(config.windowtitle))
|
||||
return config.windowtitle;var h=reverse(host.split('.'));var d=isNil(cdr(h))?car(h):cadr(h);return d.substr(0,1).toUpperCase()+d.substr(1);}
|
||||
function format(){var i=0;var s='';for(a in arguments){s=i==0?arguments[a]:s.replace('{'+a+'}',arguments[a]);i++;}
|
||||
return s;}
|
||||
function setcar(l,v){l[0]=v;return l;}
|
||||
|
@ -231,56 +245,34 @@ return t;return bindingsTarget(scdl.bindings(l));}
|
|||
var turi=targetURI();if(isNil(turi))
|
||||
return turi;return car(tokens(turi));};scdl.properties=function(l){return namedElementChildren("'property",l);};scdl.propertyValue=function(l){if(!elementHasValue(l))
|
||||
return'';return elementValue(l);};scdl.nameToElementAssoc=function(l){if(isNil(l))
|
||||
return l;return cons(mklist(scdl.name(car(l)),car(l)),scdl.nameToElementAssoc(cdr(l)));};var ui={};ui.ahref=function(loc,target,html){if(target=='_blank')
|
||||
return'<a href="'+loc+'" target="_blank">'+html+'</a>';return'<a href="javascript:void(0)" onclick="ui.navigate(\''+loc+'\', \''+target+'\');">'+html+'</a>';};ui.menu=function(name,href,target){function Menu(n,h,t){this.name=n;this.href=h;this.target=isNil(t)?'_parent':t;this.content=function(){function complete(uri){var h=uri.indexOf('#');if(h!=-1)
|
||||
return complete(uri.substr(0,h));var q=uri.indexOf('?');if(q!=-1)
|
||||
return complete(uri.substr(0,q));if(uri.match('.*\.html$'))
|
||||
return uri;if(uri.match('.*/$'))
|
||||
return uri+'index.html';return uri+'/index.html';}
|
||||
if(complete(this.href)!=complete(window.top.location.pathname))
|
||||
return ui.ahref(this.href,this.target,'<span class="tbaramenu">'+this.name+'</span>');return ui.ahref(this.href,this.target,'<span class="tbarsmenu">'+this.name+'</span>');};}
|
||||
return new Menu(name,href,target);};ui.menubar=function(left,right){var bar='<table cellpadding="0" cellspacing="0" width="100%" class="tbar"><tr>'+'<td class="dtbar"><table border="0" cellspacing="0" cellpadding="0"><tr>';for(i in left)
|
||||
return l;return cons(mklist(scdl.name(car(l)),car(l)),scdl.nameToElementAssoc(cdr(l)));};var ui={};ui.elementByID=function(node,id){if(node.skipNode==true)
|
||||
return null;for(var i in node.childNodes){var child=node.childNodes[i];if(child.id==id)
|
||||
return child;var gchild=ui.elementByID(child,id);if(gchild!=null)
|
||||
return gchild;}
|
||||
return null;};function $(id){if(id==document)
|
||||
return document;return ui.elementByID($(document),id);};ui.query=function(url){var u=''+url;var q=u.indexOf('?');return q>=0?u.substring(q+1):'';};ui.fragment=function(url){var u=''+url;var h=u.indexOf('#');return h>=0?u.substring(h+1):'';};ui.pathandparams=function(url){var u=''+url;var ds=u.indexOf('//');var u2=ds>0?u.substring(ds+2):u;var s=u2.indexOf('/');return s>0?u2.substring(s):'';};ui.queryParams=function(url){var qp=new Array();var qs=ui.query(url).split('&');for(var i=0;i<qs.length;i++){var e=qs[i].indexOf('=');if(e>0)
|
||||
qp[qs[i].substring(0,e)]=unescape(qs[i].substring(e+1));}
|
||||
return qp;};ui.fragmentParams=function(url){var qp=new Array();var qs=ui.fragment(url).split('&');for(var i=0;i<qs.length;i++){var e=qs[i].indexOf('=');if(e>0)
|
||||
qp[qs[i].substring(0,e)]=unescape(qs[i].substring(e+1));}
|
||||
return qp;};ui.b64img=function(b64){return'data:image/png;base64,'+b64;};ui.declareCSS=function(s){var e=document.createElement('style');e.type='text/css';e.textContent=s;return e;};ui.declareScript=function(s){var e=document.createElement('script');e.type='text/javascript';e.text=s;return e;};ui.innerScripts=function(e){return map(function(s){return s.text;},nodeList(e.getElementsByTagName('script')));};ui.evalScript=function(s){return eval('(function() {\n'+s+'\n})();');};ui.includeScript=function(s){log('include',s);return eval(s);};ui.mobiledetected=false;ui.mobile=false;ui.isMobile=function(){if(ui.mobiledetected)
|
||||
return ui.mobile;var ua=navigator.userAgent;if(ua.match(/iPhone/i)||ua.match(/iPad/i)||ua.match(/Android/i)||ua.match(/Blackberry/i)||ua.match(/WebOs/i))
|
||||
ui.mobile=true;ui.mobiledetected=true;return ui.mobile;};ui.hometitle=function(host){if(!isNil(window.top.config.hometitle))
|
||||
return window.top.config.hometitle;var h=reverse(host.split('.'));var d=isNil(cdr(h))?car(h):cadr(h);return d.substr(0,1).toUpperCase()+d.substr(1);};ui.windowtitle=function(host){if(!isNil(window.top.config.windowtitle))
|
||||
return window.top.config.windowtitle;var h=reverse(host.split('.'));var d=isNil(cdr(h))?car(h):cadr(h);return d.substr(0,1).toUpperCase()+d.substr(1);};ui.numpos=function(p){return p==''?0:Number(p.substr(0,p.length-2));};ui.pixpos=function(p){return p+'px';};ui.onorientationchange=function(){window.location.reload();return true;}
|
||||
ui.navigate=function(url,win){log('navigate',url,win);if(win=='_blank')
|
||||
return window.top.open(url,win);if(win=='_self')
|
||||
return window.top.open(url,win);if(win=='_reload'){window.top.location=url;return window.top.location.reload();}
|
||||
if(win=='_view'){if(!window.top.onnavigate)
|
||||
return window.top.open(url,'_self');return window.top.onnavigate(url);}
|
||||
return window.top.open(url,win);}
|
||||
ui.ahref=function(loc,target,html){if(target=='_blank')
|
||||
return'<a href="'+loc+'" target="_blank">'+html+'</a>';return'<a href="javascript:void(0)" onclick="ui.navigate(\''+loc+'\', \''+target+'\');">'+html+'</a>';};ui.menu=function(name,href,target,hilight){function Menu(){this.content=function(){if(hilight)
|
||||
return ui.ahref(href,target,'<span class="tbarsmenu">'+name+'</span>');return ui.ahref(href,target,'<span class="tbaramenu">'+name+'</span>');};}
|
||||
return new Menu();};ui.menubar=function(left,right){var bar='<table cellpadding="0" cellspacing="0" width="100%" class="tbar"><tr>'+'<td class="dtbar"><table border="0" cellspacing="0" cellpadding="0"><tr>';for(i in left)
|
||||
bar=bar+'<td class="ltbar">'+left[i].content()+'</td>'
|
||||
bar=bar+'</tr></table></td>'+'<td class="dtbar"><table border="0" cellpadding="0" cellspacing="0" align="right"><tr>';for(i in right)
|
||||
bar=bar+'<td class="'+(i==0?'dtbar':'rtbar')+'">'+right[i].content()+'</td>'
|
||||
bar=bar+'</tr></table></td></tr></table>';return bar;};ui.selectSuggestion=function(node,value){for(;;){node=node.parentNode;if(node.tagName.toLowerCase()=='div')
|
||||
break;}
|
||||
node.selectSuggestion(value);};ui.hilightSuggestion=function(node,over){if(over)
|
||||
node.className='suggestHilighted';node.className='suggestItem';};ui.suggest=function(input,suggestFunction){input.suggest=suggestFunction;input.selectSuggestion=function(value){this.hideSuggestDiv();this.value=value;}
|
||||
input.hideSuggestDiv=function(){if(this.suggestDiv!=null){this.suggestDiv.style.visibility='hidden';}}
|
||||
input.showSuggestDiv=function(){if(this.suggestDiv==null){this.suggestDiv=document.createElement('div');this.suggestDiv.input=this;this.suggestDiv.className='suggest';input.parentNode.insertBefore(this.suggestDiv,input);this.suggestDiv.style.visibility='hidden';this.suggestDiv.style.zIndex='99';this.suggestDiv.selectSuggestion=function(value){this.input.selectSuggestion(value);}}
|
||||
var values=this.suggest();var items='';for(var i=0;i<values.length;i++){if(values[i].indexOf(this.value)==-1)
|
||||
continue;if(items.length==0)
|
||||
items+='<table class="suggestTable">';items+='<tr><td class="suggestItem" '+'onmouseover="ui.hilightSuggestion(this, true)" onmouseout="ui.hilightSuggestion(this, false)" '+'onmousedown="ui.selectSuggestion(this, \''+values[i]+'\')">'+values[i]+'</td></tr>';}
|
||||
if(items.length!=0)
|
||||
items+='</table>';this.suggestDiv.innerHTML=items;if(items.length!=0){var node=input;var left=0;var top=0;for(;;){left+=node.offsetLeft;top+=node.offsetTop;node=node.offsetParent;if(node.tagName.toLowerCase()=='body')
|
||||
break;}
|
||||
this.suggestDiv.style.left=left;this.suggestDiv.style.top=top+input.offsetHeight;this.suggestDiv.style.visibility='visible';}else
|
||||
this.suggestDiv.style.visibility='hidden';}
|
||||
input.onkeydown=function(event){this.showSuggestDiv();};input.onkeyup=function(event){this.showSuggestDiv();};input.onmousedown=function(event){this.showSuggestDiv();};input.onblur=function(event){setTimeout(function(){input.hideSuggestDiv();},50);};};ui.elementByID=function(node,id){for(var i in node.childNodes){var child=node.childNodes[i];if(child.id==id)
|
||||
return child;var gchild=ui.elementByID(child,id);if(gchild!=null)
|
||||
return gchild;}
|
||||
return null;};function $(id){if(id==document){if(!isNil(document.widget))
|
||||
return document.widget;return document;}
|
||||
return ui.elementByID($(document),id);};ui.queryParams=function(){var qp=new Array();var qs=window.location.search.substring(1).split('&');for(var i=0;i<qs.length;i++){var e=qs[i].indexOf('=');if(e>0)
|
||||
qp[qs[i].substring(0,e)]=unescape(qs[i].substring(e+1));}
|
||||
return qp;};ui.fragmentParams=function(){var qp=new Array();var qs=window.location.hash.substring(1).split('&');for(var i=0;i<qs.length;i++){var e=qs[i].indexOf('=');if(e>0)
|
||||
qp[qs[i].substring(0,e)]=unescape(qs[i].substring(e+1));}
|
||||
return qp;};ui.mobiledetected=false;ui.mobile=false;ui.isMobile=function(){if(ui.mobiledetected)
|
||||
return ui.mobile;var ua=navigator.userAgent;if(ua.match(/iPhone/i)||ua.match(/iPad/i)||ua.match(/Android/i)||ua.match(/Blackberry/i)||ua.match(/WebOs/i))
|
||||
ui.mobile=true;ui.mobiledetected=true;return ui.mobile;};ui.pagetransitions=false;ui.initbody=function(){if(ui.isMobile()){if(ui.pagetransitions){var bdiv=$('bodydiv');if(!isNil(bdiv)){bdiv.className='bodydivloading';}}
|
||||
document.body.onorientationchange=ui.onorientationchange;}
|
||||
return true;}
|
||||
ui.onorientationchange=function(){window.open(window.location,'_self');return true;}
|
||||
ui.onload=function(){var path=document.location.pathname;if(path.indexOf('/login/')!=0&&path.indexOf('/logout/')!=0)
|
||||
localStorage.setItem('ui.lastvisited',''+document.location);document.body.style.visibility='visible';if(ui.pagetransitions&&ui.isMobile()){setTimeout(function(){var bdiv=$('bodydiv');if(!isNil(bdiv)){function transitionend(e){bdiv.removeEventListener('webkitTransitionEnd',transitionend,false);bdiv.removeEventListener('transitionend',transitionend,false);bdiv.className='bodydiv';};bdiv.addEventListener('webkitTransitionEnd',transitionend,false);bdiv.addEventListener('transitionend',transitionend,false);bdiv.className='bodydivloaded';}},0);}
|
||||
return true;};ui.navigate=function(url,win){function opendoc(url,win){if(win=='_reload'){window.location=url;return window.location.reload();}
|
||||
return window.open(url,win);}
|
||||
if(ui.pagetransitions&&ui.isMobile()&&win!='_blank'){var bdiv=$('bodydiv');if(!isNil(bdiv)){function transitionend(e){bdiv.removeEventListener('webkitTransitionEnd',transitionend,false);bdiv.removeEventListener('transitionend',transitionend,false);return opendoc(url,win);};bdiv.addEventListener('webkitTransitionEnd',transitionend,false);bdiv.addEventListener('transitionend',transitionend,false);bdiv.className='bodydivunloaded';return true;}}
|
||||
return opendoc(url,win);}
|
||||
ui.onbeforeunload=function(){if(ui.pagetransitions&&ui.isMobile()){var bdiv=$('bodydiv');if(!isNil(bdiv))
|
||||
bdiv.className='bodydivunloaded';}};ui.lastvisited=function(){return localStorage.getItem('ui.lastvisited');}
|
||||
ui.numpos=function(p){return p==''?0:Number(p.substr(0,p.length-2));};ui.pixpos=function(p){return p+'px';};ui.datatable=function(l){function indent(i){if(i==0)
|
||||
bar=bar+'</tr></table></td></tr></table>';return bar;};ui.datatable=function(l){function indent(i){if(i==0)
|
||||
return'';return' '+indent(i-1);}
|
||||
function rows(l,i){if(isNil(l))
|
||||
return'';var e=car(l);if(!isList(e))
|
||||
|
@ -296,7 +288,21 @@ return rows(expandElementValues("'value",l),i);if(elementHasValue(e)){var v=elem
|
|||
return rows(expandElementValues(elementName(e),v),i)+rows(cdr(l),i);}
|
||||
return rows(elementChildren(e),i+1)+rows(cdr(l),i);}
|
||||
return'<table class="datatable '+(window.name=='dataFrame'?' databg':'')+'" style="width: 100%;">'+rows(l,0)+'</table>';}
|
||||
var JSONClient={};JSONClient.escapeJSONChar=function(c){if(c=="\""||c=="\\")return"\\"+c;if(c=="\b")return"\\b";if(c=="\f")return"\\f";if(c=="\n")return"\\n";if(c=="\r")return"\\r";if(c=="\t")return"\\t";var hex=c.charCodeAt(0).toString(16);if(hex.length==1)return"\\u000"+hex;if(hex.length==2)return"\\u00"+hex;if(hex.length==3)return"\\u0"+hex;return"\\u"+hex;};JSONClient.escapeJSONString=function(s){var parts=s.split("");for(var i=0;i<parts.length;i++){var c=parts[i];if(c=='"'||c=='\\'||c.charCodeAt(0)<32||c.charCodeAt(0)>=128)
|
||||
ui.selectSuggestion=function(node,value){for(;;){node=node.parentNode;if(node.tagName.toLowerCase()=='div')
|
||||
break;}
|
||||
node.selectSuggestion(value);};ui.hilightSuggestion=function(node,over){if(over)
|
||||
node.className='suggestHilighted';node.className='suggestItem';};ui.suggest=function(input,suggestFunction){input.suggest=suggestFunction;input.selectSuggestion=function(value){this.hideSuggestDiv();this.value=value;}
|
||||
input.hideSuggestDiv=function(){if(this.suggestDiv!=null){this.suggestDiv.style.visibility='hidden';}}
|
||||
input.showSuggestDiv=function(){if(this.suggestDiv==null){this.suggestDiv=document.createElement('div');this.suggestDiv.input=this;this.suggestDiv.className='suggest';input.parentNode.insertBefore(this.suggestDiv,input);this.suggestDiv.style.visibility='hidden';this.suggestDiv.style.zIndex='99';this.suggestDiv.selectSuggestion=function(value){this.input.selectSuggestion(value);}}
|
||||
var values=this.suggest();var items='';for(var i=0;i<values.length;i++){if(values[i].indexOf(this.value)==-1)
|
||||
continue;if(items.length==0)
|
||||
items+='<table class="suggestTable">';items+='<tr><td class="suggestItem" '+'onmouseover="ui.hilightSuggestion(this, true)" onmouseout="ui.hilightSuggestion(this, false)" '+'onmousedown="ui.selectSuggestion(this, \''+values[i]+'\')">'+values[i]+'</td></tr>';}
|
||||
if(items.length!=0)
|
||||
items+='</table>';this.suggestDiv.innerHTML=items;if(items.length!=0){var node=input;var left=0;var top=0;for(;;){left+=node.offsetLeft;top+=node.offsetTop;node=node.offsetParent;if(node.tagName.toLowerCase()=='body')
|
||||
break;}
|
||||
this.suggestDiv.style.left=left;this.suggestDiv.style.top=top+input.offsetHeight;this.suggestDiv.style.visibility='visible';}else
|
||||
this.suggestDiv.style.visibility='hidden';}
|
||||
input.onkeydown=function(event){this.showSuggestDiv();};input.onkeyup=function(event){this.showSuggestDiv();};input.onmousedown=function(event){this.showSuggestDiv();};input.onblur=function(event){setTimeout(function(){input.hideSuggestDiv();},50);};};var JSONClient={};JSONClient.escapeJSONChar=function(c){if(c=="\""||c=="\\")return"\\"+c;if(c=="\b")return"\\b";if(c=="\f")return"\\f";if(c=="\n")return"\\n";if(c=="\r")return"\\r";if(c=="\t")return"\\t";var hex=c.charCodeAt(0).toString(16);if(hex.length==1)return"\\u000"+hex;if(hex.length==2)return"\\u00"+hex;if(hex.length==3)return"\\u0"+hex;return"\\u"+hex;};JSONClient.escapeJSONString=function(s){var parts=s.split("");for(var i=0;i<parts.length;i++){var c=parts[i];if(c=='"'||c=='\\'||c.charCodeAt(0)<32||c.charCodeAt(0)>=128)
|
||||
parts[i]=JSONClient.escapeJSONChar(parts[i]);}
|
||||
return"\""+parts.join("")+"\"";};JSONClient.toJSON=function(o){if(o==null)
|
||||
return"null";if(o.constructor==String)
|
||||
|
@ -308,7 +314,7 @@ v.push(JSONClient.toJSON(o[i]));return"["+v.join(", ")+"]";}
|
|||
var v=[];for(attr in o){if(o[attr]==null)
|
||||
v.push("\""+attr+"\": null");else if(typeof o[attr]=="function");else
|
||||
v.push(JSONClient.escapeJSONString(attr)+": "+JSONClient.toJSON(o[attr]));}
|
||||
return"{"+v.join(", ")+"}";};function HTTPBindingClient(name,uri){this.name=name;this.uri=uri;this.apply=this.createApplyMethod();}
|
||||
return"{"+v.join(", ")+"}";};function HTTPBindingClient(name,uri,domain){this.name=name;this.domain=domain;this.uri=uri;this.apply=this.createApplyMethod();}
|
||||
HTTPBindingClient.jsonrpcID=1;HTTPBindingClient.prototype.createApplyMethod=function(){var fn=function(){var methodName=arguments[0];var args=[];for(var i=1;i<arguments.length;i++)
|
||||
args.push(arguments[i]);var cb=null;if(typeof args[args.length-1]=="function")
|
||||
cb=args.pop();var req=HTTPBindingClient.makeJSONRequest(methodName,args,cb);return fn.client.jsonApply(req);};fn.client=this;return fn;};HTTPBindingClient.makeJSONRequest=function(methodName,args,cb){var req={};req.id=HTTPBindingClient.jsonrpcID++;if(cb)
|
||||
|
@ -320,14 +326,14 @@ HTTPBindingClient.charset=httpCharset(http);var obj;eval("obj = "+http.responseT
|
|||
throw new HTTPBindingClient.Exception(obj.error.code,obj.error.msg);var res=obj.result;return res;};HTTPBindingClient.prototype.jsonApply=function(req){var http=HTTPBindingClient.getHTTPRequest();var hascb=req.cb?true:false;http.open("POST",this.uri,hascb);http.setRequestHeader("Content-Type","application/json-rpc");if(hascb){http.onreadystatechange=function(){if(http.readyState==4){if(http.status==200){var res=null;try{res=HTTPBindingClient.jsonResult(http);try{req.cb(res);}catch(cbe){}}catch(e){try{req.cb(null,e);}catch(cbe){}}}else
|
||||
try{req.cb(null,HTTPBindingClient.Exception(http.status,http.statusText));}catch(cbe){}}};http.send(req.data);return req.id;}
|
||||
http.send(req.data);if(http.status==200)
|
||||
return HTTPBindingClient.jsonResult(http);throw new HTTPBindingClient.Exception(http.status,http.statusText);};HTTPBindingClient.prototype.get=function(id,cb){var u=this.uri+'/'+id;var hascb=cb?true:false;var item=localStorage.getItem(u);if(item!=null&&item!=''){if(!hascb)
|
||||
return HTTPBindingClient.jsonResult(http);throw new HTTPBindingClient.Exception(http.status,http.statusText);};HTTPBindingClient.prototype.get=function(id,cb){var u=id?(this.uri?this.uri+'/'+id:id):this.uri;var hascb=cb?true:false;var item=localStorage.getItem(u);if(item!=null&&item!=''){if(!hascb)
|
||||
return item;try{cb(item);}catch(cbe){}}
|
||||
var http=HTTPBindingClient.getHTTPRequest();http.open("GET",u,hascb);if(hascb){http.onreadystatechange=function(){if(http.readyState==4){if(http.status==200){if(http.getResponseHeader("X-Login")!=null){try{cb(null,new HTTPBindingClient.Exception(403,'X-Login'));}catch(cbe){}}else if(http.responseText==''||http.getResponseHeader("Content-Type")==null){try{cb(null,new HTTPBindingClient.Exception(403,'No-Content'));}catch(cbe){}}else{if(item==null||http.responseText!=item){if(http.responseText!=null){localStorage.setItem(u,http.responseText);}
|
||||
try{cb(http.responseText);}catch(cbe){}}}}
|
||||
else{if(item==null){try{cb(null,new HTTPBindingClient.Exception(http.status,http.statusText));}catch(cbe){}}}}};http.send(null);return true;}
|
||||
http.send(null);if(http.status==200){if(http.getResponseHeader("X-Login")!=null){throw new HTTPBindingClient.Exception(403,'X-Login');}else if(http.responseText==''||http.getResponseHeader("Content-Type")==null){throw new HTTPBindingClient.Exception(403,'No-Content');}
|
||||
return http.responseText;}
|
||||
throw new HTTPBindingClient.Exception(http.status,http.statusText);};HTTPBindingClient.prototype.getnocache=function(id,cb){var u=this.uri+'/'+id;var hascb=cb?true:false;var http=HTTPBindingClient.getHTTPRequest();http.open("GET",u,hascb);if(hascb){http.onreadystatechange=function(){if(http.readyState==4){if(http.status==200){if(http.getResponseHeader("X-Login")!=null){try{return cb(null,new HTTPBindingClient.Exception(403,'X-Login'));}catch(cbe){}}else if(http.responseText==''||http.getResponseHeader("Content-Type")==null){try{return cb(null,new HTTPBindingClient.Exception(403,'No-Content'));}catch(cbe){}}else{try{cb(http.responseText);}catch(cbe){}}}else{try{cb(null,new HTTPBindingClient.Exception(http.status,http.statusText));}catch(cbe){}}}};http.send(null);return true;}
|
||||
throw new HTTPBindingClient.Exception(http.status,http.statusText);};HTTPBindingClient.prototype.getnocache=function(id,cb){var u=id?(this.uri?this.uri+'/'+id:id):this.uri;var hascb=cb?true:false;var http=HTTPBindingClient.getHTTPRequest();http.open("GET",u,hascb);if(hascb){http.onreadystatechange=function(){if(http.readyState==4){if(http.status==200){if(http.getResponseHeader("X-Login")!=null){try{return cb(null,new HTTPBindingClient.Exception(403,'X-Login'));}catch(cbe){}}else if(http.responseText==''||http.getResponseHeader("Content-Type")==null){try{return cb(null,new HTTPBindingClient.Exception(403,'No-Content'));}catch(cbe){}}else{try{cb(http.responseText);}catch(cbe){}}}else{try{cb(null,new HTTPBindingClient.Exception(http.status,http.statusText));}catch(cbe){}}}};http.send(null);return true;}
|
||||
http.send(null);if(http.status==200){if(http.getResponseHeader("X-Login")!=null){throw new HTTPBindingClient.Exception(403,'X-Login');}else if(http.responseText==''||http.getResponseHeader("Content-Type")==null){throw new HTTPBindingClient.Exception(403,'No-Content');}
|
||||
return http.responseText;}
|
||||
throw new HTTPBindingClient.Exception(http.status,http.statusText);};HTTPBindingClient.prototype.post=function(entry,cb){var http=HTTPBindingClient.getHTTPRequest();var hascb=cb?true:false;http.open("POST",this.uri,hascb);http.setRequestHeader("Content-Type","application/atom+xml");if(hascb){http.onreadystatechange=function(){if(http.readyState==4){if(http.status==201){try{cb(http.responseText);}catch(cbe){}}
|
||||
|
@ -341,7 +347,9 @@ http.send(null);if(http.status==200)
|
|||
return true;throw new HTTPBindingClient.Exception(http.status,http.statusText);};HTTPBindingClient.Exception=function(code,message){this.name="HTTPBindingClientException";this.code=code;this.message=message;};HTTPBindingClient.Exception.prototype=new Error();HTTPBindingClient.Exception.prototype.toString=function(){return this.name+": "+this.message;};HTTPBindingClient.msxmlNames=["MSXML2.XMLHTTP.5.0","MSXML2.XMLHTTP.4.0","MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP","Microsoft.XMLHTTP"];HTTPBindingClient.getHTTPRequest=function(){if(HTTPBindingClient.httpFactory)
|
||||
return HTTPBindingClient.httpFactory();try{HTTPBindingClient.httpFactory=function(){return new XMLHttpRequest();};return HTTPBindingClient.httpFactory();}catch(e){}
|
||||
for(var i=0;i<HTTPBindingClient.msxmlNames.length;i++){try{HTTPBindingClient.httpFactory=function(){return new ActiveXObject(HTTPBindingClient.msxmlNames[i]);};return HTTPBindingClient.httpFactory();}catch(e){}}
|
||||
HTTPBindingClient.httpFactory=null;throw new HTTPBindingClient.Exception(0,"Can't create XMLHttpRequest object");};var sca={};sca.httpclient=function(name,uri){return new HTTPBindingClient(name,uri);};sca.component=function(name){return new HTTPBindingClient(name,'/components/'+name);};sca.reference=function(comp,rname){return new HTTPBindingClient(comp.name+'/'+rname,"/references/"+comp.name+"/"+rname);};sca.defun=function(ref){function defapply(name){return function(){var args=new Array();args[0]=name;for(i=0,n=arguments.length;i<n;i++)
|
||||
HTTPBindingClient.httpFactory=null;throw new HTTPBindingClient.Exception(0,"Can't create XMLHttpRequest object");};var sca={};sca.httpclient=function(name,uri,domain){return new HTTPBindingClient(name,uri,domain);};sca.component=function(name,domain){if(!domain)
|
||||
return new HTTPBindingClient(name,'/c/'+name,domain);return new HTTPBindingClient(name,'/a/'+domain+'/c/'+name,domain);};sca.reference=function(comp,rname){if(!comp.domain)
|
||||
return new HTTPBindingClient(comp.name+'/'+rname,'/r/'+comp.name+'/'+rname,comp.domain);return new HTTPBindingClient(comp.name+'/'+rname,'/a/'+comp.domain+'/r/'+comp.name+'/'+rname,comp.domain);};sca.defun=function(ref){function defapply(name){return function(){var args=new Array();args[0]=name;for(i=0,n=arguments.length;i<n;i++)
|
||||
args[i+1]=arguments[i];return this.apply.apply(this,args);};}
|
||||
for(f=1;f<arguments.length;f++){var fn=arguments[f];ref[fn]=defapply(fn);}
|
||||
return ref;};
|
|
@ -102,8 +102,9 @@ JSONClient.toJSON = function(o) {
|
|||
/**
|
||||
* Construct an HTTPBindingClient.
|
||||
*/
|
||||
function HTTPBindingClient(name, uri) {
|
||||
function HTTPBindingClient(name, uri, domain) {
|
||||
this.name = name;
|
||||
this.domain = domain;
|
||||
this.uri = uri;
|
||||
this.apply = this.createApplyMethod();
|
||||
}
|
||||
|
@ -230,10 +231,10 @@ HTTPBindingClient.prototype.jsonApply = function(req) {
|
|||
|
||||
|
||||
/**
|
||||
* REST ATOMPub GET method.
|
||||
* REST GET method.
|
||||
*/
|
||||
HTTPBindingClient.prototype.get = function(id, cb) {
|
||||
var u = this.uri + '/' + id;
|
||||
var u = id? (this.uri? this.uri + '/' + id : id) : this.uri;
|
||||
var hascb = cb? true : false;
|
||||
|
||||
// Get from local storage first
|
||||
|
@ -321,10 +322,10 @@ HTTPBindingClient.prototype.get = function(id, cb) {
|
|||
};
|
||||
|
||||
/**
|
||||
* REST ATOMPub GET method, does not use the local cache.
|
||||
* REST GET method, does not use the local cache.
|
||||
*/
|
||||
HTTPBindingClient.prototype.getnocache = function(id, cb) {
|
||||
var u = this.uri + '/' + id;
|
||||
var u = id? (this.uri? this.uri + '/' + id : id) : this.uri;
|
||||
var hascb = cb? true : false;
|
||||
|
||||
// Connect to the service
|
||||
|
@ -386,7 +387,7 @@ HTTPBindingClient.prototype.getnocache = function(id, cb) {
|
|||
};
|
||||
|
||||
/**
|
||||
* REST ATOMPub POST method.
|
||||
* REST POST method.
|
||||
*/
|
||||
HTTPBindingClient.prototype.post = function (entry, cb) {
|
||||
|
||||
|
@ -426,7 +427,7 @@ HTTPBindingClient.prototype.post = function (entry, cb) {
|
|||
};
|
||||
|
||||
/**
|
||||
* REST ATOMPub PUT method.
|
||||
* REST PUT method.
|
||||
*/
|
||||
HTTPBindingClient.prototype.put = function (id, entry, cb) {
|
||||
var u = this.uri + '/' + id;
|
||||
|
@ -470,7 +471,7 @@ HTTPBindingClient.prototype.put = function (id, entry, cb) {
|
|||
};
|
||||
|
||||
/**
|
||||
* REST ATOMPub DELETE method.
|
||||
* REST DELETE method.
|
||||
*/
|
||||
HTTPBindingClient.prototype.del = function (id, cb) {
|
||||
var u = this.uri + '/' + id;
|
||||
|
@ -569,22 +570,26 @@ var sca = {};
|
|||
/**
|
||||
* Return an HTTP client proxy.
|
||||
*/
|
||||
sca.httpclient = function(name, uri) {
|
||||
return new HTTPBindingClient(name, uri);
|
||||
sca.httpclient = function(name, uri, domain) {
|
||||
return new HTTPBindingClient(name, uri, domain);
|
||||
};
|
||||
|
||||
/**
|
||||
* Return a component proxy.
|
||||
*/
|
||||
sca.component = function(name) {
|
||||
return new HTTPBindingClient(name, '/components/' + name);
|
||||
sca.component = function(name, domain) {
|
||||
if (!domain)
|
||||
return new HTTPBindingClient(name, '/c/' + name, domain);
|
||||
return new HTTPBindingClient(name, '/a/' + domain + '/c/' + name, domain);
|
||||
};
|
||||
|
||||
/**
|
||||
* Return a reference proxy.
|
||||
*/
|
||||
sca.reference = function(comp, rname) {
|
||||
return new HTTPBindingClient(comp.name + '/' + rname, "/references/" + comp.name + "/" + rname);
|
||||
if (!comp.domain)
|
||||
return new HTTPBindingClient(comp.name + '/' + rname, '/r/' + comp.name + '/' + rname, comp.domain);
|
||||
return new HTTPBindingClient(comp.name + '/' + rname, '/a/' + comp.domain + '/r/' + comp.name + '/' + rname, comp.domain);
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
41
sca-cpp/trunk/modules/js/htdocs/ui-min.css
vendored
41
sca-cpp/trunk/modules/js/htdocs/ui-min.css
vendored
|
@ -1,10 +1,38 @@
|
|||
body{margin-top:0px;margin-bottom:2px;margin-left:2px;margin-right:2px;font-family:"Helvetica Neue", Helvetica;font-style:normal;font-variant:normal;font-size:13px;-webkit-text-size-adjust:none;-webkit-touch-callout:none;-webkit-user-select:none;}
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
body{margin-top:0px;margin-bottom:2px;margin-left:2px;margin-right:2px;font-family:"Helvetica Neue", Helvetica;font-style:normal;font-variant:normal;font-size:13px;-webkit-text-size-adjust:none;-webkit-touch-callout:none;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-user-select:none;}
|
||||
.delayed{visibility:hidden;}
|
||||
.devicewidth{position:absolute;top:0px;left:0px;width:100%;height:5000px;overflow:hidden;}
|
||||
.mainbodydiv{position:absolute;top:0px;left:0px;width:100%;height:5000px;overflow:hidden;}
|
||||
.bodydiv{position:absolute;top:0px;left:0px;width:100%;height:5000px;overflow:hidden;}
|
||||
.bodydivloading{position:absolute;top:0px;left:0px;width:100%;height:5000px;overflow:hidden;-webkit-transform:translate(100%, 0px);-webkit-backface-visibility:hidden;-moz-transform:translate(100%, 0px);-ms-transform:translate(100%, 0px);transform:translate(100%, 0px);}
|
||||
.bodydivloaded{-webkit-transition:-webkit-transform 0.4s linear;-moz-transition:-moz-transform 0.4s linear;-ms-transition:-ms-transform 0.4s linear;transition:transform 0.4s linear;position:absolute;top:0px;left:0px;width:100%;height:5000px;overflow:hidden;-webkit-transform:translate3d(0px, 0px, 0px);-webkit-backface-visibility:hidden;-moz-transform:translate(0px, 0px);-ms-transform:translate(0px, 0px);transform:translate(0px, 0px);}
|
||||
.bodydivunloaded{-webkit-transition:-webkit-transform 0.4s linear;-moz-transition:-moz-transform 0.4s linear;-ms-transition:-ms-transform 0.4s linear;transition:transform 0.4s linear;position:absolute;top:0px;left:0px;width:100%;height:5000px;overflow:hidden;-webkit-transform:translate3d(-100%, 0px, 0px);-webkit-backface-visibility:hidden;-moz-transform:translate(-100%, 0px);-ms-transform:translate(-100%, 0px);transform:translate(-100%, 0px);}
|
||||
.viewcontainer3dm{-webkit-perspective:1000;}
|
||||
.viewcontainer3d{}
|
||||
.leftviewloading3dm{position:absolute;top:0px;left:0px;width:100%;height:5000px;overflow:visible;-webkit-transform:translate3d(100%, 0px, 0) rotateY(0deg);-webkit-backface-visibility:hidden;background-color:#ffffff;-moz-transform:translate(100%, 0px);-ms-transform:translate(100%, 0px);transform:translate(100%, 0px);}
|
||||
.rightviewloading3dm{position:absolute;top:0px;left:0px;width:100%;height:5000px;overflow:visible;-webkit-transform:translate3d(-100%, 0px, 0) rotateY(0deg);-webkit-backface-visibility:hidden;background-color:#ffffff;-moz-transform:translate(-100%, 0px);-ms-transform:translate(-100%, 0px);transform:translate(-100%, 0px);}
|
||||
.flipviewloading3dm{position:absolute;top:0px;left:0px;width:100%;height:5000px;overflow:visible;-webkit-transform:translate3d(0px, 0px, 0) rotateY(180deg);-webkit-backface-visibility:hidden;background-color:#ffffff;-moz-transform:translate(100%, 0px);-ms-transform:translate(100%, 0px);transform:translate(100%, 0px);}
|
||||
.viewloading3d{position:absolute;top:0px;left:0px;width:100%;height:5000px;overflow:visible;visibility:hidden;-webkit-transform:translate3d(100%, 0px, 0) rotateY(0deg);-webkit-backface-visibility:hidden;background-color:#ffffff;-moz-transform:translate(100%, 0px);-ms-transform:translate(100%, 0px);transform:translate(100%, 0px);}
|
||||
.viewloaded3dm{position:absolute;top:0px;left:0px;width:100%;height:5000px;overflow:visible;-webkit-transition:-webkit-transform 0.5s ease-in-out;-moz-transition:-moz-transform 0.5s ease-in-out;-ms-transition:-ms-transform 0.5s ease-in-out;transition:transform 0.5s ease-in-out;-webkit-transform:translate3d(0px, 0px, 0) rotateY(0deg);-webkit-backface-visibility:hidden;background-color:#ffffff;-moz-transform:translate(0px, 0px);-ms-transform:translate(0px, 0px);transform:translate(0px, 0px);}
|
||||
.viewloaded3d{position:absolute;top:0px;left:0px;width:100%;height:5000px;overflow:visible;-webkit-transform:translate3d(0px, 0px, 0) rotateY(0deg);-webkit-backface-visibility:hidden;background-color:#ffffff;-moz-transform:translate(0px, 0px);-ms-transform:translate(0px, 0px);transform:translate(0px, 0px);}
|
||||
.viewunloading3dm{position:absolute;top:0px;left:0px;width:100%;height:5000px;overflow:visible;-webkit-transform:translate3d(0px, 0px, 0) rotateY(0deg);-webkit-backface-visibility:hidden;background-color:#ffffff;-moz-transform:translate(0px, 0px);-ms-transform:translate(0px, 0px);transform:translate(0px, 0px);}
|
||||
.leftviewunloaded3dm{position:absolute;top:0px;left:0px;width:100%;height:5000px;overflow:visible;-webkit-transition:-webkit-transform 0.5s ease-in-out;-moz-transition:-moz-transform 0.5s ease-in-out;-ms-transition:-ms-transform 0.5s ease-in-out;transition:transform 0.5s ease-in-out;-webkit-transform:translate3d(-100%, 0px, 0px) rotateY(0deg);-webkit-backface-visibility:hidden;background-color:#ffffff;-moz-transform:translate(-100%, 0px);-ms-transform:translate(-100%, 0px);transform:translate(-100%, 0px);}
|
||||
.rightviewunloaded3dm{position:absolute;top:0px;left:0px;width:100%;height:5000px;overflow:visible;-webkit-transition:-webkit-transform 0.5s ease-in-out;-moz-transition:-moz-transform 0.5s ease-in-out;-ms-transition:-ms-transform 0.5s ease-in-out;transition:transform 0.5s ease-in-out;-webkit-transform:translate3d(100%, 0px, 0) rotateY(0deg);-webkit-backface-visibility:hidden;background-color:#ffffff;-moz-transform:translate(100%, 0px);-ms-transform:translate(100%, 0px);transform:translate(100%, 0px);}
|
||||
.flipviewunloaded3dm{position:absolute;top:0px;left:0px;width:100%;height:5000px;overflow:visible;-webkit-transition:-webkit-transform 0.5s ease-in-out;-moz-transition:-moz-transform 0.5s ease-in-out;-ms-transition:-ms-transform 0.5s ease-in-out;transition:transform 0.5s ease-in-out;-webkit-transform:translate3d(0px, 0px, 0) rotateY(-180deg);-webkit-backface-visibility:hidden;background-color:#ffffff;-moz-transform:translate(0px, 0px);-ms-transform:translate(0px, 0px);transform:translate(0px, 0px);}
|
||||
table{border:0px;border-collapse:collapse;border-color:#a2bae7;border-style:solid;font-family:"Helvetica Neue", Helvetica;font-style:normal;font-variant:normal;font-size:13px;overflow:visible;}
|
||||
.trb{border-bottom:1px;border-bottom-style:solid;border-color:#dcdcdc;}
|
||||
th{font-weight:bold;background-color:#d4e6fc;color:#000000;height:18px;text-align:left;padding-left:2px;padding-right:8px;padding-top:0px;padding-bottom:0px;vertical-align:middle;white-space:nowrap;border-top:1px;border-bottom:1px;border-left:1px;border-right:1px;border-style:solid;border-top-color:#a2bae7;border-bottom-color:#d1d3d4;border-left-color:#a2bae7;border-right-color:#a2bae7;overflow:hidden;}
|
||||
|
@ -21,6 +49,7 @@ td{padding-left:2px;padding-top:2px;padding-right:8px;white-space:nowrap;vertica
|
|||
.tdw{padding-left:2px;padding-top:2px;padding-right:8px;white-space:normal;vertical-align:middle;}
|
||||
.datatd{border-top:1px;border-bottom:1px;border-style:solid;border-color:#dcdcdc;width:10px;vertical-align:middle;}
|
||||
.datatdl{border-right:1px;border-top:1px;border-bottom:1px;border-style:solid;border-color:#dcdcdc;width:10px;vertical-align:middle;}
|
||||
.datatdltop{border-right:1px;border-top:1px;border-bottom:1px;border-style:solid;border-color:#dcdcdc;width:10px;vertical-align:top;}
|
||||
.datatdr{border-left:1px;border-top:1px;border-bottom:1px;border-style:solid;border-color:#dcdcdc;vertical-align:middle;}
|
||||
.datatable{border-top:1px;border-bottom:1px;border-style:solid;border-color:#dcdcdc;overflow:visible;}
|
||||
.databg{opacity:.6;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=60)";filter:alpha(opacity=60);}
|
||||
|
@ -51,8 +80,8 @@ img{border:0px;}
|
|||
.ltbar{padding-left:2px;padding-right:6px;padding-top:3px;padding-bottom:4px;white-space:nowrap;vertical-align:middle;}
|
||||
.dtbar{padding-left:0px;padding-right:0px;padding-top:3px;padding-bottom:4px;white-space:nowrap;vertical-align:middle;text-align:right;}
|
||||
.rtbar{padding-left:6px;padding-right:2px;padding-top:3px;padding-bottom:4px;white-space:nowrap;vertical-align:middle;text-align:right;}
|
||||
.tbaramenu{color:#cccccc;text-decoration:none;white-space:nowrap;}
|
||||
.tbarsmenu{font-weight:bold;color:#ffffff;text-decoration:none;white-space:nowrap;}
|
||||
.tbaramenu{color:#cccccc;text-decoration:none;white-space:nowrap;vertical-align:middle;}
|
||||
.tbarsmenu{font-weight:bold;color:#ffffff;text-decoration:none;white-space:nowrap;vertical-align:middle;}
|
||||
.suggest{background-color:#d4e6fc;color:#598edd;border-top:1px;border-bottom:1px;border-left:1px;border-right:1px;border-style:solid;border-top-color:#a2bae7;border-bottom-color:#d1d3d4;border-left-color:#d1d3d4;border-right-color:#d1d3d4;position:absolute;overflow:auto;overflow-x:hidden;padding:0px;margin:0px;cursor:default;}
|
||||
.suggestTable{border:0px;border-collapse:separate;padding-left:5px;padding-right:5px;padding-top:2px;padding-bottom:2px;margin:0px;}
|
||||
.suggestItem{padding-left:2px;padding-top:0px;padding-bottom:0px;padding-right:2px;vertical-align:middle;background-color:#d4e6fc;color:#598edd;}
|
||||
|
|
|
@ -22,6 +22,7 @@ margin-top: 0px; margin-bottom: 2px; margin-left: 2px; margin-right: 2px;
|
|||
font-family: "Helvetica Neue", Helvetica; font-style: normal; font-variant: normal; font-size: 13px;
|
||||
-webkit-text-size-adjust: none;
|
||||
-webkit-touch-callout: none;
|
||||
-webkit-tap-highlight-color: rgba(0,0,0,0);
|
||||
-webkit-user-select: none;
|
||||
}
|
||||
|
||||
|
@ -33,42 +34,128 @@ visibility: hidden;
|
|||
position: absolute; top: 0px; left: 0px; width: 100%; height: 5000px; overflow: hidden;
|
||||
}
|
||||
|
||||
.mainbodydiv {
|
||||
position: absolute; top: 0px; left: 0px; width: 100%; height: 5000px; overflow: hidden;
|
||||
}
|
||||
|
||||
.bodydiv {
|
||||
position: absolute; top: 0px; left: 0px; width: 100%; height: 5000px; overflow: hidden;
|
||||
}
|
||||
|
||||
.bodydivloading {
|
||||
position: absolute; top: 0px; left: 0px; width: 100%; height: 5000px; overflow: hidden;
|
||||
-webkit-transform: translate(100%, 0px); -webkit-backface-visibility: hidden;
|
||||
.viewcontainer3dm {
|
||||
-webkit-perspective: 1000;
|
||||
}
|
||||
|
||||
.viewcontainer3d {
|
||||
}
|
||||
|
||||
.leftviewloading3dm {
|
||||
position: absolute; top: 0px; left: 0px; width: 100%; height: 5000px; overflow: visible;
|
||||
-webkit-transform: translate3d(100%, 0px, 0) rotateY(0deg);
|
||||
-webkit-backface-visibility: hidden; background-color: #ffffff;
|
||||
-moz-transform: translate(100%, 0px);
|
||||
-ms-transform: translate(100%, 0px);
|
||||
transform: translate(100%, 0px);
|
||||
}
|
||||
|
||||
.bodydivloaded {
|
||||
-webkit-transition: -webkit-transform 0.4s linear;
|
||||
-moz-transition: -moz-transform 0.4s linear;
|
||||
-ms-transition: -ms-transform 0.4s linear;
|
||||
transition: transform 0.4s linear;
|
||||
position: absolute; top: 0px; left: 0px; width: 100%; height: 5000px; overflow: hidden;
|
||||
-webkit-transform: translate3d(0px, 0px, 0px); -webkit-backface-visibility: hidden;
|
||||
.rightviewloading3dm {
|
||||
position: absolute; top: 0px; left: 0px; width: 100%; height: 5000px; overflow: visible;
|
||||
-webkit-transform: translate3d(-100%, 0px, 0) rotateY(0deg);
|
||||
-webkit-backface-visibility: hidden; background-color: #ffffff;
|
||||
-moz-transform: translate(-100%, 0px);
|
||||
-ms-transform: translate(-100%, 0px);
|
||||
transform: translate(-100%, 0px);
|
||||
}
|
||||
|
||||
.flipviewloading3dm {
|
||||
position: absolute; top: 0px; left: 0px; width: 100%; height: 5000px; overflow: visible;
|
||||
-webkit-transform: translate3d(0px, 0px, 0) rotateY(180deg);
|
||||
-webkit-backface-visibility: hidden; background-color: #ffffff;
|
||||
-moz-transform: translate(100%, 0px);
|
||||
-ms-transform: translate(100%, 0px);
|
||||
transform: translate(100%, 0px);
|
||||
}
|
||||
|
||||
.viewloading3d {
|
||||
position: absolute; top: 0px; left: 0px; width: 100%; height: 5000px; overflow: visible;
|
||||
visibility: hidden;
|
||||
-webkit-transform: translate3d(100%, 0px, 0) rotateY(0deg);
|
||||
-webkit-backface-visibility: hidden; background-color: #ffffff;
|
||||
-moz-transform: translate(100%, 0px);
|
||||
-ms-transform: translate(100%, 0px);
|
||||
transform: translate(100%, 0px);
|
||||
}
|
||||
|
||||
.viewloaded3dm {
|
||||
position: absolute; top: 0px; left: 0px; width: 100%; height: 5000px; overflow: visible;
|
||||
-webkit-transition: -webkit-transform 0.5s ease-in-out;
|
||||
-moz-transition: -moz-transform 0.5s ease-in-out;
|
||||
-ms-transition: -ms-transform 0.5s ease-in-out;
|
||||
transition: transform 0.5s ease-in-out;
|
||||
-webkit-transform: translate3d(0px, 0px, 0) rotateY(0deg);
|
||||
-webkit-backface-visibility: hidden; background-color: #ffffff;
|
||||
-moz-transform: translate(0px, 0px);
|
||||
-ms-transform: translate(0px, 0px);
|
||||
transform: translate(0px, 0px);
|
||||
}
|
||||
|
||||
.bodydivunloaded {
|
||||
-webkit-transition: -webkit-transform 0.4s linear;
|
||||
-moz-transition: -moz-transform 0.4s linear;
|
||||
-ms-transition: -ms-transform 0.4s linear;
|
||||
transition: transform 0.4s linear;
|
||||
position: absolute; top: 0px; left: 0px; width: 100%; height: 5000px; overflow: hidden;
|
||||
-webkit-transform: translate3d(-100%, 0px, 0px); -webkit-backface-visibility: hidden;
|
||||
.viewloaded3d {
|
||||
position: absolute; top: 0px; left: 0px; width: 100%; height: 5000px; overflow: visible;
|
||||
-webkit-transform: translate3d(0px, 0px, 0) rotateY(0deg);
|
||||
-webkit-backface-visibility: hidden; background-color: #ffffff;
|
||||
-moz-transform: translate(0px, 0px);
|
||||
-ms-transform: translate(0px, 0px);
|
||||
transform: translate(0px, 0px);
|
||||
}
|
||||
|
||||
.viewunloading3dm {
|
||||
position: absolute; top: 0px; left: 0px; width: 100%; height: 5000px; overflow: visible;
|
||||
-webkit-transform: translate3d(0px, 0px, 0) rotateY(0deg);
|
||||
-webkit-backface-visibility: hidden; background-color: #ffffff;
|
||||
-moz-transform: translate(0px, 0px);
|
||||
-ms-transform: translate(0px, 0px);
|
||||
transform: translate(0px, 0px);
|
||||
}
|
||||
|
||||
.leftviewunloaded3dm {
|
||||
position: absolute; top: 0px; left: 0px; width: 100%; height: 5000px; overflow: visible;
|
||||
-webkit-transition: -webkit-transform 0.5s ease-in-out;
|
||||
-moz-transition: -moz-transform 0.5s ease-in-out;
|
||||
-ms-transition: -ms-transform 0.5s ease-in-out;
|
||||
transition: transform 0.5s ease-in-out;
|
||||
-webkit-transform: translate3d(-100%, 0px, 0px) rotateY(0deg);
|
||||
-webkit-backface-visibility: hidden; background-color: #ffffff;
|
||||
-moz-transform: translate(-100%, 0px);
|
||||
-ms-transform: translate(-100%, 0px);
|
||||
transform: translate(-100%, 0px);
|
||||
}
|
||||
|
||||
.rightviewunloaded3dm {
|
||||
position: absolute; top: 0px; left: 0px; width: 100%; height: 5000px; overflow: visible;
|
||||
-webkit-transition: -webkit-transform 0.5s ease-in-out;
|
||||
-moz-transition: -moz-transform 0.5s ease-in-out;
|
||||
-ms-transition: -ms-transform 0.5s ease-in-out;
|
||||
transition: transform 0.5s ease-in-out;
|
||||
-webkit-transform: translate3d(100%, 0px, 0) rotateY(0deg);
|
||||
-webkit-backface-visibility: hidden; background-color: #ffffff;
|
||||
-moz-transform: translate(100%, 0px);
|
||||
-ms-transform: translate(100%, 0px);
|
||||
transform: translate(100%, 0px);
|
||||
}
|
||||
|
||||
.flipviewunloaded3dm {
|
||||
position: absolute; top: 0px; left: 0px; width: 100%; height: 5000px; overflow: visible;
|
||||
-webkit-transition: -webkit-transform 0.5s ease-in-out;
|
||||
-moz-transition: -moz-transform 0.5s ease-in-out;
|
||||
-ms-transition: -ms-transform 0.5s ease-in-out;
|
||||
transition: transform 0.5s ease-in-out;
|
||||
-webkit-transform: translate3d(0px, 0px, 0) rotateY(-180deg);
|
||||
-webkit-backface-visibility: hidden; background-color: #ffffff;
|
||||
-moz-transform: translate(0px, 0px);
|
||||
-ms-transform: translate(0px, 0px);
|
||||
transform: translate(0px, 0px);
|
||||
}
|
||||
|
||||
table {
|
||||
border: 0px; border-collapse: collapse; border-color: #a2bae7; border-style: solid;
|
||||
font-family: "Helvetica Neue", Helvetica; font-style: normal; font-variant: normal; font-size: 13px;
|
||||
|
@ -143,6 +230,10 @@ border-top: 1px; border-bottom: 1px; border-style: solid; border-color: #dcdcdc;
|
|||
border-right: 1px; border-top: 1px; border-bottom: 1px; border-style: solid; border-color: #dcdcdc; width: 10px; vertical-align: middle;
|
||||
}
|
||||
|
||||
.datatdltop {
|
||||
border-right: 1px; border-top: 1px; border-bottom: 1px; border-style: solid; border-color: #dcdcdc; width: 10px; vertical-align: top;
|
||||
}
|
||||
|
||||
.datatdr {
|
||||
border-left: 1px; border-top: 1px; border-bottom: 1px; border-style: solid; border-color: #dcdcdc; vertical-align: middle;
|
||||
}
|
||||
|
@ -335,11 +426,11 @@ padding-left: 6px; padding-right: 2px; padding-top: 3px; padding-bottom: 4px; wh
|
|||
}
|
||||
|
||||
.tbaramenu {
|
||||
color: #cccccc; text-decoration: none; white-space: nowrap;
|
||||
color: #cccccc; text-decoration: none; white-space: nowrap; vertical-align: middle;
|
||||
}
|
||||
|
||||
.tbarsmenu {
|
||||
font-weight: bold; color: #ffffff; text-decoration: none; white-space: nowrap;
|
||||
font-weight: bold; color: #ffffff; text-decoration: none; white-space: nowrap; vertical-align: middle;
|
||||
}
|
||||
|
||||
.suggest {
|
||||
|
|
|
@ -23,6 +23,227 @@
|
|||
|
||||
var ui = {};
|
||||
|
||||
/**
|
||||
* Return a child element of a node with the given id.
|
||||
*/
|
||||
ui.elementByID = function(node, id) {
|
||||
if (node.skipNode == true)
|
||||
return null;
|
||||
for (var i in node.childNodes) {
|
||||
var child = node.childNodes[i];
|
||||
if (child.id == id)
|
||||
return child;
|
||||
var gchild = ui.elementByID(child, id);
|
||||
if (gchild != null)
|
||||
return gchild;
|
||||
}
|
||||
return null;
|
||||
};
|
||||
|
||||
/**
|
||||
* Return the current document, or a child element with the given id.
|
||||
*/
|
||||
function $(id) {
|
||||
if (id == document)
|
||||
return document;
|
||||
return ui.elementByID($(document), id);
|
||||
};
|
||||
|
||||
/**
|
||||
* Return the query string of a URL.
|
||||
*/
|
||||
ui.query = function(url) {
|
||||
var u = '' + url;
|
||||
var q = u.indexOf('?');
|
||||
return q >= 0? u.substring(q + 1) : '';
|
||||
};
|
||||
|
||||
/**
|
||||
* Return the fragment part of a URL.
|
||||
*/
|
||||
ui.fragment = function(url) {
|
||||
var u = '' + url;
|
||||
var h = u.indexOf('#');
|
||||
return h >= 0? u.substring(h + 1) : '';
|
||||
};
|
||||
|
||||
/**
|
||||
* Return the path and parameters of a URL.
|
||||
*/
|
||||
ui.pathandparams = function(url) {
|
||||
var u = '' + url;
|
||||
var ds = u.indexOf('//');
|
||||
var u2 = ds > 0? u.substring(ds + 2) : u;
|
||||
var s = u2.indexOf('/');
|
||||
return s > 0? u2.substring(s) : '';
|
||||
};
|
||||
|
||||
/**
|
||||
* Return a dictionary of query parameters in a URL.
|
||||
*/
|
||||
ui.queryParams = function(url) {
|
||||
var qp = new Array();
|
||||
var qs = ui.query(url).split('&');
|
||||
for (var i = 0; i < qs.length; i++) {
|
||||
var e = qs[i].indexOf('=');
|
||||
if (e > 0)
|
||||
qp[qs[i].substring(0, e)] = unescape(qs[i].substring(e + 1));
|
||||
}
|
||||
return qp;
|
||||
};
|
||||
|
||||
/**
|
||||
* Return a dictionary of fragment parameters in a URL.
|
||||
*/
|
||||
ui.fragmentParams = function(url) {
|
||||
var qp = new Array();
|
||||
var qs = ui.fragment(url).split('&');
|
||||
for (var i = 0; i < qs.length; i++) {
|
||||
var e = qs[i].indexOf('=');
|
||||
if (e > 0)
|
||||
qp[qs[i].substring(0, e)] = unescape(qs[i].substring(e + 1));
|
||||
}
|
||||
return qp;
|
||||
};
|
||||
|
||||
/**
|
||||
* Convert a base64-encoded image to a data URL.
|
||||
*/
|
||||
ui.b64img = function(b64) {
|
||||
return 'data:image/png;base64,' + b64;
|
||||
};
|
||||
|
||||
/**
|
||||
* Declare a CSS stylesheet.
|
||||
*/
|
||||
ui.declareCSS = function(s) {
|
||||
var e = document.createElement('style');
|
||||
e.type = 'text/css';
|
||||
e.textContent = s;
|
||||
return e;
|
||||
};
|
||||
|
||||
/**
|
||||
* Declare a script.
|
||||
*/
|
||||
ui.declareScript = function(s) {
|
||||
var e = document.createElement('script');
|
||||
e.type = 'text/javascript';
|
||||
e.text = s;
|
||||
return e;
|
||||
};
|
||||
|
||||
/**
|
||||
* Return the scripts elements under a given element.
|
||||
*/
|
||||
ui.innerScripts = function(e) {
|
||||
return map(function(s) { return s.text; }, nodeList(e.getElementsByTagName('script')));
|
||||
};
|
||||
|
||||
/**
|
||||
* Evaluate a script.
|
||||
*/
|
||||
ui.evalScript = function(s) {
|
||||
return eval('(function() {\n' + s + '\n})();');
|
||||
};
|
||||
|
||||
/**
|
||||
* Include a script.
|
||||
*/
|
||||
ui.includeScript = function(s) {
|
||||
log('include', s);
|
||||
return eval(s);
|
||||
};
|
||||
|
||||
/**
|
||||
* Return true if the client is a mobile device.
|
||||
*/
|
||||
ui.mobiledetected = false;
|
||||
ui.mobile = false;
|
||||
ui.isMobile = function() {
|
||||
if (ui.mobiledetected)
|
||||
return ui.mobile;
|
||||
var ua = navigator.userAgent;
|
||||
if (ua.match(/iPhone/i) || ua.match(/iPad/i) || ua.match(/Android/i) || ua.match(/Blackberry/i) || ua.match(/WebOs/i))
|
||||
ui.mobile = true;
|
||||
ui.mobiledetected = true;
|
||||
return ui.mobile;
|
||||
};
|
||||
|
||||
/**
|
||||
* Convert a host name to a home page title.
|
||||
*/
|
||||
ui.hometitle = function(host) {
|
||||
if (!isNil(window.top.config.hometitle))
|
||||
return window.top.config.hometitle;
|
||||
var h = reverse(host.split('.'));
|
||||
var d = isNil(cdr(h))? car(h) : cadr(h);
|
||||
return d.substr(0, 1).toUpperCase() + d.substr(1);
|
||||
};
|
||||
|
||||
/**
|
||||
* Convert a host name to a window title.
|
||||
*/
|
||||
ui.windowtitle = function(host) {
|
||||
if (!isNil(window.top.config.windowtitle))
|
||||
return window.top.config.windowtitle;
|
||||
var h = reverse(host.split('.'));
|
||||
var d = isNil(cdr(h))? car(h) : cadr(h);
|
||||
return d.substr(0, 1).toUpperCase() + d.substr(1);
|
||||
};
|
||||
|
||||
/**
|
||||
* Convert a CSS position to a numeric position.
|
||||
*/
|
||||
ui.numpos = function(p) {
|
||||
return p == ''? 0 : Number(p.substr(0, p.length - 2));
|
||||
};
|
||||
|
||||
/**
|
||||
* Convert a numeric position to a CSS pixel position.
|
||||
*/
|
||||
ui.pixpos = function(p) {
|
||||
return p + 'px';
|
||||
};
|
||||
|
||||
/**
|
||||
* Reload the current document when orientation changes.
|
||||
*/
|
||||
ui.onorientationchange = function() {
|
||||
window.location.reload();
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Navigate to a new document.
|
||||
*/
|
||||
ui.navigate = function(url, win) {
|
||||
log('navigate', url, win);
|
||||
|
||||
// Open a new window
|
||||
if (win == '_blank')
|
||||
return window.top.open(url, win);
|
||||
|
||||
// Open a new document in the current window
|
||||
if (win == '_self')
|
||||
return window.top.open(url, win);
|
||||
|
||||
// Reload the current window
|
||||
if (win == '_reload') {
|
||||
window.top.location = url;
|
||||
return window.top.location.reload();
|
||||
}
|
||||
|
||||
// Let the current top window handle the navigation
|
||||
if (win == '_view') {
|
||||
if (!window.top.onnavigate)
|
||||
return window.top.open(url, '_self');
|
||||
return window.top.onnavigate(url);
|
||||
}
|
||||
|
||||
return window.top.open(url, win);
|
||||
}
|
||||
|
||||
/**
|
||||
* Build a portable <a href> tag.
|
||||
*/
|
||||
|
@ -35,33 +256,15 @@ ui.ahref = function(loc, target, html) {
|
|||
/**
|
||||
* Build a menu bar.
|
||||
*/
|
||||
ui.menu = function(name, href, target) {
|
||||
function Menu(n, h, t) {
|
||||
this.name = n;
|
||||
this.href = h;
|
||||
this.target = isNil(t)? '_parent' : t;
|
||||
|
||||
ui.menu = function(name, href, target, hilight) {
|
||||
function Menu() {
|
||||
this.content = function() {
|
||||
function complete(uri) {
|
||||
var h = uri.indexOf('#');
|
||||
if (h != -1)
|
||||
return complete(uri.substr(0, h));
|
||||
var q = uri.indexOf('?');
|
||||
if (q != -1)
|
||||
return complete(uri.substr(0, q));
|
||||
if (uri.match('.*\.html$'))
|
||||
return uri;
|
||||
if (uri.match('.*/$'))
|
||||
return uri + 'index.html';
|
||||
return uri + '/index.html';
|
||||
}
|
||||
|
||||
if (complete(this.href) != complete(window.top.location.pathname))
|
||||
return ui.ahref(this.href, this.target, '<span class="tbaramenu">' + this.name + '</span>');
|
||||
return ui.ahref(this.href, this.target, '<span class="tbarsmenu">' + this.name + '</span>');
|
||||
if (hilight)
|
||||
return ui.ahref(href, target, '<span class="tbarsmenu">' + name + '</span>');
|
||||
return ui.ahref(href, target, '<span class="tbaramenu">' + name + '</span>');
|
||||
};
|
||||
}
|
||||
return new Menu(name, href, target);
|
||||
return new Menu();
|
||||
};
|
||||
|
||||
ui.menubar = function(left, right) {
|
||||
|
@ -79,6 +282,88 @@ ui.menubar = function(left, right) {
|
|||
return bar;
|
||||
};
|
||||
|
||||
/**
|
||||
* Convert a list of elements to an HTML table.
|
||||
*/
|
||||
ui.datatable = function(l) {
|
||||
|
||||
function indent(i) {
|
||||
if (i == 0)
|
||||
return '';
|
||||
return ' ' + indent(i - 1);
|
||||
}
|
||||
|
||||
function rows(l, i) {
|
||||
if (isNil(l))
|
||||
return '';
|
||||
var e = car(l);
|
||||
|
||||
// Convert a list of simple values into a list of name value pairs
|
||||
if (!isList(e))
|
||||
return rows(expandElementValues("'value", l), i);
|
||||
|
||||
// Convert a list of complex values into a list of name value pairs
|
||||
if (isList(car(e)))
|
||||
return rows(expandElementValues("'value", l), i);
|
||||
|
||||
// Generate table row for a simple element value
|
||||
if (elementHasValue(e)) {
|
||||
var v = elementValue(e);
|
||||
if (!isList(v)) {
|
||||
return '<tr><td class="datatdl">' + indent(i) + elementName(e).slice(1) + '</td>' +
|
||||
'<td class="datatdr tdw">' + (v != null? v : '') + '</td></tr>' +
|
||||
rows(cdr(l), i);
|
||||
}
|
||||
|
||||
return rows(expandElementValues(elementName(e), v), i) + rows(cdr(l), i);
|
||||
}
|
||||
|
||||
// Generate table row for an element with children
|
||||
return '<tr><td class="datatdl">' + indent(i) + elementName(e).slice(1) + '</td>' +
|
||||
'<td class="datatdr tdw">' + '</td></tr>' +
|
||||
rows(elementChildren(e), i + 1) +
|
||||
rows(cdr(l), i);
|
||||
}
|
||||
|
||||
return '<table class="datatable ' + (window.name == 'dataFrame'? ' databg' : '') + '" style="width: 100%;">' + rows(l, 0) + '</table>';
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert a list of elements to an HTML single column table.
|
||||
*/
|
||||
ui.datalist = function(l) {
|
||||
|
||||
function rows(l, i) {
|
||||
if (isNil(l))
|
||||
return '';
|
||||
var e = car(l);
|
||||
|
||||
// Convert a list of simple values into a list of name value pairs
|
||||
if (!isList(e))
|
||||
return rows(expandElementValues("'value", l), i);
|
||||
|
||||
// Convert a list of complex values into a list of name value pairs
|
||||
if (isList(car(e)))
|
||||
return rows(expandElementValues("'value", l), i);
|
||||
|
||||
// Generate table row for a simple element value
|
||||
if (elementHasValue(e)) {
|
||||
var v = elementValue(e);
|
||||
if (!isList(v)) {
|
||||
return '<tr><td class="datatd tdw">' + (v != null? v : '') + '</td></tr>' +
|
||||
rows(cdr(l), i);
|
||||
}
|
||||
|
||||
return rows(expandElementValues(elementName(e), v), i) + rows(cdr(l), i);
|
||||
}
|
||||
|
||||
// Generate rows for an element's children
|
||||
return rows(elementChildren(e), i + 1) + rows(cdr(l), i);
|
||||
}
|
||||
|
||||
return '<table class="datatable ' + (window.name == 'dataFrame'? ' databg' : '') + '" style="width: 100%;">' + rows(l, 0) + '</table>';
|
||||
}
|
||||
|
||||
/**
|
||||
* Autocomplete / suggest support for input fields
|
||||
* To use it declare a 'suggest' function as follows:
|
||||
|
@ -181,295 +466,3 @@ ui.suggest = function(input, suggestFunction) {
|
|||
};
|
||||
};
|
||||
|
||||
/**
|
||||
* Return a child element of a node with the given id.
|
||||
*/
|
||||
ui.elementByID = function(node, id) {
|
||||
for (var i in node.childNodes) {
|
||||
var child = node.childNodes[i];
|
||||
if (child.id == id)
|
||||
return child;
|
||||
var gchild = ui.elementByID(child, id);
|
||||
if (gchild != null)
|
||||
return gchild;
|
||||
}
|
||||
return null;
|
||||
};
|
||||
|
||||
/**
|
||||
* Return the current document, or a child element with the given id.
|
||||
*/
|
||||
function $(id) {
|
||||
if (id == document) {
|
||||
if (!isNil(document.widget))
|
||||
return document.widget;
|
||||
return document;
|
||||
}
|
||||
return ui.elementByID($(document), id);
|
||||
};
|
||||
|
||||
/**
|
||||
* Return a dictionary of the query parameters.
|
||||
*/
|
||||
ui.queryParams = function() {
|
||||
var qp = new Array();
|
||||
var qs = window.location.search.substring(1).split('&');
|
||||
for (var i = 0; i < qs.length; i++) {
|
||||
var e = qs[i].indexOf('=');
|
||||
if (e > 0)
|
||||
qp[qs[i].substring(0, e)] = unescape(qs[i].substring(e + 1));
|
||||
}
|
||||
return qp;
|
||||
};
|
||||
|
||||
/**
|
||||
* Return a dictionary of the fragment parameters.
|
||||
*/
|
||||
ui.fragmentParams = function() {
|
||||
var qp = new Array();
|
||||
var qs = window.location.hash.substring(1).split('&');
|
||||
for (var i = 0; i < qs.length; i++) {
|
||||
var e = qs[i].indexOf('=');
|
||||
if (e > 0)
|
||||
qp[qs[i].substring(0, e)] = unescape(qs[i].substring(e + 1));
|
||||
}
|
||||
return qp;
|
||||
};
|
||||
|
||||
/**
|
||||
* Return true if the client is a mobile device.
|
||||
*/
|
||||
ui.mobiledetected = false;
|
||||
ui.mobile = false;
|
||||
ui.isMobile = function() {
|
||||
if (ui.mobiledetected)
|
||||
return ui.mobile;
|
||||
var ua = navigator.userAgent;
|
||||
if (ua.match(/iPhone/i) || ua.match(/iPad/i) || ua.match(/Android/i) || ua.match(/Blackberry/i) || ua.match(/WebOs/i))
|
||||
ui.mobile = true;
|
||||
ui.mobiledetected = true;
|
||||
return ui.mobile;
|
||||
};
|
||||
|
||||
/**
|
||||
* Initialize a document's body.
|
||||
*/
|
||||
ui.pagetransitions = false;
|
||||
|
||||
ui.initbody = function() {
|
||||
if (ui.isMobile()) {
|
||||
//log('init', window.location);
|
||||
|
||||
// Position the main body div off screen
|
||||
if (ui.pagetransitions) {
|
||||
var bdiv = $('bodydiv');
|
||||
if (!isNil(bdiv)) {
|
||||
bdiv.className = 'bodydivloading';
|
||||
}
|
||||
}
|
||||
|
||||
// Install orientation handler
|
||||
document.body.onorientationchange = ui.onorientationchange;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Reload the current document when orientation changes.
|
||||
*/
|
||||
ui.onorientationchange = function() {
|
||||
window.open(window.location, '_self');
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Post process a document after it's loaded.
|
||||
*/
|
||||
ui.onload = function() {
|
||||
|
||||
// Save the current page location in local storage
|
||||
// (except for login and logout pages)
|
||||
var path = document.location.pathname;
|
||||
if (path.indexOf('/login/') != 0 && path.indexOf('/logout/') != 0)
|
||||
localStorage.setItem('ui.lastvisited', '' + document.location);
|
||||
|
||||
// Make the document body visible
|
||||
//log('visible', $('bodydiv').className);
|
||||
document.body.style.visibility = 'visible';
|
||||
|
||||
if (ui.pagetransitions && ui.isMobile()) {
|
||||
//log('onload', window.location);
|
||||
|
||||
// Slide the main body div in
|
||||
setTimeout(function() {
|
||||
var bdiv = $('bodydiv');
|
||||
if (!isNil(bdiv)) {
|
||||
function transitionend(e) {
|
||||
bdiv.removeEventListener('webkitTransitionEnd', transitionend, false);
|
||||
bdiv.removeEventListener('transitionend', transitionend, false);
|
||||
bdiv.className = 'bodydiv';
|
||||
//log('loadtransitionend', window.location);
|
||||
};
|
||||
bdiv.addEventListener('webkitTransitionEnd', transitionend, false);
|
||||
bdiv.addEventListener('transitionend', transitionend, false);
|
||||
//log('loadtransitionstart', window.location);
|
||||
bdiv.className = 'bodydivloaded';
|
||||
}
|
||||
}, 0);
|
||||
}
|
||||
return true;
|
||||
};
|
||||
|
||||
/**
|
||||
* Navigate to a new document.
|
||||
*/
|
||||
ui.navigate = function(url, win) {
|
||||
|
||||
function opendoc(url, win) {
|
||||
if (win == '_reload') {
|
||||
window.location = url;
|
||||
return window.location.reload();
|
||||
}
|
||||
return window.open(url, win);
|
||||
}
|
||||
|
||||
if (ui.pagetransitions && ui.isMobile() && win != '_blank') {
|
||||
|
||||
// Slide the main body div out, then open the new document
|
||||
var bdiv = $('bodydiv');
|
||||
if (!isNil(bdiv)) {
|
||||
function transitionend(e) {
|
||||
bdiv.removeEventListener('webkitTransitionEnd', transitionend, false);
|
||||
bdiv.removeEventListener('transitionend', transitionend, false);
|
||||
//log('navigatetransitionend', window.location);
|
||||
return opendoc(url, win);
|
||||
};
|
||||
bdiv.addEventListener('webkitTransitionEnd', transitionend, false);
|
||||
bdiv.addEventListener('transitionend', transitionend, false);
|
||||
//log('navigatetransitionstart', window.location);
|
||||
bdiv.className = 'bodydivunloaded';
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return opendoc(url, win);
|
||||
}
|
||||
|
||||
/**
|
||||
* Pre process a document just before it's unloaded.
|
||||
*/
|
||||
ui.onbeforeunload = function() {
|
||||
|
||||
if (ui.pagetransitions && ui.isMobile()) {
|
||||
|
||||
// Slide the main body div out
|
||||
var bdiv = $('bodydiv');
|
||||
if (!isNil(bdiv))
|
||||
bdiv.className = 'bodydivunloaded';
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Return the last visited page.
|
||||
*/
|
||||
ui.lastvisited = function() {
|
||||
return localStorage.getItem('ui.lastvisited');
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert a CSS position to a numeric position.
|
||||
*/
|
||||
ui.numpos = function(p) {
|
||||
return p == ''? 0 : Number(p.substr(0, p.length - 2));
|
||||
};
|
||||
|
||||
/**
|
||||
* Convert a numeric position to a CSS pixel position.
|
||||
*/
|
||||
ui.pixpos = function(p) {
|
||||
return p + 'px';
|
||||
};
|
||||
|
||||
/**
|
||||
* Convert a list of elements to an HTML table.
|
||||
*/
|
||||
ui.datatable = function(l) {
|
||||
|
||||
function indent(i) {
|
||||
if (i == 0)
|
||||
return '';
|
||||
return ' ' + indent(i - 1);
|
||||
}
|
||||
|
||||
function rows(l, i) {
|
||||
if (isNil(l))
|
||||
return '';
|
||||
var e = car(l);
|
||||
|
||||
// Convert a list of simple values into a list of name value pairs
|
||||
if (!isList(e))
|
||||
return rows(expandElementValues("'value", l), i);
|
||||
|
||||
// Convert a list of complex values into a list of name value pairs
|
||||
if (isList(car(e)))
|
||||
return rows(expandElementValues("'value", l), i);
|
||||
|
||||
// Generate table row for a simple element value
|
||||
if (elementHasValue(e)) {
|
||||
var v = elementValue(e);
|
||||
if (!isList(v)) {
|
||||
return '<tr><td class="datatdl">' + indent(i) + elementName(e).slice(1) + '</td>' +
|
||||
'<td class="datatdr tdw">' + (v != null? v : '') + '</td></tr>' +
|
||||
rows(cdr(l), i);
|
||||
}
|
||||
|
||||
return rows(expandElementValues(elementName(e), v), i) + rows(cdr(l), i);
|
||||
}
|
||||
|
||||
// Generate table row for an element with children
|
||||
return '<tr><td class="datatdl">' + indent(i) + elementName(e).slice(1) + '</td>' +
|
||||
'<td class="datatdr tdw">' + '</td></tr>' +
|
||||
rows(elementChildren(e), i + 1) +
|
||||
rows(cdr(l), i);
|
||||
}
|
||||
|
||||
return '<table class="datatable ' + (window.name == 'dataFrame'? ' databg' : '') + '" style="width: 100%;">' + rows(l, 0) + '</table>';
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert a list of elements to an HTML single column table.
|
||||
*/
|
||||
ui.datalist = function(l) {
|
||||
|
||||
function rows(l, i) {
|
||||
if (isNil(l))
|
||||
return '';
|
||||
var e = car(l);
|
||||
|
||||
// Convert a list of simple values into a list of name value pairs
|
||||
if (!isList(e))
|
||||
return rows(expandElementValues("'value", l), i);
|
||||
|
||||
// Convert a list of complex values into a list of name value pairs
|
||||
if (isList(car(e)))
|
||||
return rows(expandElementValues("'value", l), i);
|
||||
|
||||
// Generate table row for a simple element value
|
||||
if (elementHasValue(e)) {
|
||||
var v = elementValue(e);
|
||||
if (!isList(v)) {
|
||||
return '<tr><td class="datatd tdw">' + (v != null? v : '') + '</td></tr>' +
|
||||
rows(cdr(l), i);
|
||||
}
|
||||
|
||||
return rows(expandElementValues(elementName(e), v), i) + rows(cdr(l), i);
|
||||
}
|
||||
|
||||
// Generate rows for an element's children
|
||||
return rows(elementChildren(e), i + 1) + rows(cdr(l), i);
|
||||
}
|
||||
|
||||
return '<table class="datatable ' + (window.name == 'dataFrame'? ' databg' : '') + '" style="width: 100%;">' + rows(l, 0) + '</table>';
|
||||
}
|
||||
|
||||
|
|
|
@ -326,28 +326,6 @@ function issubdomain(host) {
|
|||
return host.split('.').length > 2;
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert a host name to a home page title.
|
||||
*/
|
||||
function hometitle(host) {
|
||||
if (!isNil(config.hometitle))
|
||||
return config.hometitle;
|
||||
var h = reverse(host.split('.'));
|
||||
var d = isNil(cdr(h))? car(h) : cadr(h);
|
||||
return d.substr(0, 1).toUpperCase() + d.substr(1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert a host name to a window title.
|
||||
*/
|
||||
function windowtitle(host) {
|
||||
if (!isNil(config.windowtitle))
|
||||
return config.windowtitle;
|
||||
var h = reverse(host.split('.'));
|
||||
var d = isNil(cdr(h))? car(h) : cadr(h);
|
||||
return d.substr(0, 1).toUpperCase() + d.substr(1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Format a string like Python format.
|
||||
*/
|
||||
|
|
|
@ -185,6 +185,38 @@ int translateService(const ServerConf& sc, request_rec *r) {
|
|||
return OK;
|
||||
}
|
||||
|
||||
/**
|
||||
* Route an /apps/app-name/... request to the target app domain.
|
||||
*/
|
||||
int translateDomain(request_rec *r) {
|
||||
httpdDebugRequest(r, "modwiring::translateDomain::input");
|
||||
debug(r->uri, "modwiring::translateDomain::uri");
|
||||
|
||||
// Extract the requested app name
|
||||
const list<value> apath(pathValues(r->uri));
|
||||
if (isNil(cdr(apath)))
|
||||
return HTTP_NOT_FOUND;
|
||||
|
||||
// Compute the target uri in the target app domain
|
||||
ostringstream turi;
|
||||
turi << httpd::scheme(r) << "://" << string(cadr(apath)) << "." << httpd::hostName(r) << ":" << httpd::port(r) << string(path(cddr(apath))) << (r->args != NULL? string("?") + r->args : string(""));
|
||||
debug(str(turi), "modwiring::translateDomain::appuri");
|
||||
|
||||
// Route to an absolute target URI using mod_proxy or an HTTP client redirect
|
||||
if (useModProxy) {
|
||||
r->filename = apr_pstrdup(r->pool, c_str(string("proxy:") + str(turi)));
|
||||
debug(r->filename, "modwiring::translateDomain::filename");
|
||||
r->proxyreq = PROXYREQ_REVERSE;
|
||||
r->handler = "proxy-server";
|
||||
apr_table_setn(r->notes, "proxy-nocanon", "1");
|
||||
return OK;
|
||||
}
|
||||
|
||||
debug(str(turi), "modwiring::translateDomain::location");
|
||||
r->handler = "mod_tuscany_wiring";
|
||||
return httpd::externalRedirect(str(turi), r);
|
||||
}
|
||||
|
||||
/**
|
||||
* Read the components declared in a composite.
|
||||
*/
|
||||
|
@ -315,6 +347,10 @@ int translate(request_rec *r) {
|
|||
// Create a scoped memory pool
|
||||
gc_scoped_pool pool(r->pool);
|
||||
|
||||
// Translate an app domain request
|
||||
if (!strncmp(r->uri, "/apps/", 6) || !strncmp(r->uri, "/a/", 3))
|
||||
return translateDomain(r);
|
||||
|
||||
// Get the server configuration
|
||||
const ServerConf& sc = httpd::serverConf<ServerConf>(r, &mod_tuscany_wiring);
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue