summaryrefslogtreecommitdiffstats
path: root/sca-cpp/trunk/hosting/server
diff options
context:
space:
mode:
Diffstat (limited to 'sca-cpp/trunk/hosting/server')
-rw-r--r--sca-cpp/trunk/hosting/server/htdocs/account/index.html40
-rw-r--r--sca-cpp/trunk/hosting/server/htdocs/app/cache-template.cmf (renamed from sca-cpp/trunk/hosting/server/htdocs/app/cache-manifest.cmf)2
-rw-r--r--sca-cpp/trunk/hosting/server/htdocs/app/index.html55
-rw-r--r--sca-cpp/trunk/hosting/server/htdocs/cache-template.cmf (renamed from sca-cpp/trunk/hosting/server/htdocs/cache-manifest.cmf)2
-rw-r--r--sca-cpp/trunk/hosting/server/htdocs/clone/index.html36
-rw-r--r--sca-cpp/trunk/hosting/server/htdocs/config.js32
-rw-r--r--sca-cpp/trunk/hosting/server/htdocs/create/index.html25
-rw-r--r--sca-cpp/trunk/hosting/server/htdocs/delete/index.html32
-rw-r--r--sca-cpp/trunk/hosting/server/htdocs/graph/index.html43
-rw-r--r--sca-cpp/trunk/hosting/server/htdocs/home/index.html21
-rw-r--r--sca-cpp/trunk/hosting/server/htdocs/index.html261
-rw-r--r--sca-cpp/trunk/hosting/server/htdocs/login/index.html169
-rw-r--r--sca-cpp/trunk/hosting/server/htdocs/page/index.html38
-rw-r--r--sca-cpp/trunk/hosting/server/htdocs/proxy/public/oops/index.html64
-rw-r--r--sca-cpp/trunk/hosting/server/htdocs/public/config.js22
-rw-r--r--sca-cpp/trunk/hosting/server/htdocs/public/notauth/index.html66
-rw-r--r--sca-cpp/trunk/hosting/server/htdocs/public/notfound/index.html64
-rw-r--r--sca-cpp/trunk/hosting/server/htdocs/public/notyet/index.html64
-rw-r--r--sca-cpp/trunk/hosting/server/htdocs/public/oops/index.html64
-rw-r--r--sca-cpp/trunk/hosting/server/htdocs/stats/index.html32
-rw-r--r--sca-cpp/trunk/hosting/server/htdocs/store/index.html85
-rwxr-xr-xsca-cpp/trunk/hosting/server/logic-test28
-rwxr-xr-xsca-cpp/trunk/hosting/server/proxy-start164
-rwxr-xr-xsca-cpp/trunk/hosting/server/server-test13
-rwxr-xr-xsca-cpp/trunk/hosting/server/ssl-proxy-start252
-rwxr-xr-xsca-cpp/trunk/hosting/server/start25
-rwxr-xr-xsca-cpp/trunk/hosting/server/stop1
27 files changed, 1288 insertions, 412 deletions
diff --git a/sca-cpp/trunk/hosting/server/htdocs/account/index.html b/sca-cpp/trunk/hosting/server/htdocs/account/index.html
index dce34d2ef3..a0c2e78c31 100644
--- a/sca-cpp/trunk/hosting/server/htdocs/account/index.html
+++ b/sca-cpp/trunk/hosting/server/htdocs/account/index.html
@@ -27,7 +27,7 @@
<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" class="flatentry" size="30" placeholder="Enter your name" style="width: 300px;"/></td></tr>
-<tr><tr><td style="padding-top: 6px;"><b>Description:</b></td></tr>
+<tr><tr><td style="padding-top: 6px;"><b>About Me:</b></td></tr>
<tr><td><textarea id="userDescription" class="flatentry" cols="40" rows="3" placeholder="Enter a short description of yourself" style="width: 300px;"></textarea></td></tr>
</table>
@@ -70,17 +70,24 @@
</div>
<script type="text/javascript">
+(function() {
-// Init service references
-var editWidget = sca.component("EditWidget");
-var user= sca.defun(sca.reference(editWidget, "user"));
-var accounts = sca.reference(editWidget, "accounts");
+/**
+ * Init service references.
+ */
+var editorComp = sca.component("Editor");
+var user= sca.defun(sca.reference(editorComp, "user"));
+var accounts = sca.reference(editorComp, "accounts");
-// Set page titles
-document.title = ui.windowtitle(location.hostname) + ' - Account';
-$('viewhead').innerHTML = '<span class="smenu">' + username + '</span>';
+/**
+ * Set page titles.
+ */
+document.title = config.windowtitle() + ' - Account';
+$('viewhead').innerHTML = '<span class="cmenu">' + username + '</span>';
-// Set images
+/**
+ * Set images.
+ */
$('userimg').src = ui.b64img(appcache.get('/public/user.b64'));
/**
@@ -95,18 +102,16 @@ var savedaccountentryxml = '';
function getaccount() {
showStatus('Loading');
- return accounts.get(name, function(doc) {
+ return accounts.get('', function(doc) {
// Stop now if we didn't get an account
if (doc == null) {
- showError('App not available');
+ showError('Account info not available');
return false;
}
- showStatus(defaultStatus());
+ showOnlineStatus();
accountentry = car(elementsToValues(atom.readATOMEntry(mklist(doc))));
- //username = cadr(assoc("'id", cdr(accountentry)));
- $('userNameHeader').innerHTML = username;
$('userTitle').value = cadr(assoc("'title", cdr(accountentry)));
var content = cadr(assoc("'content", cdr(accountentry)));
@@ -146,7 +151,7 @@ function save(entryxml) {
return false;
showStatus('Saving');
savedaccountentryxml = entryxml;
- accounts.put(username, savedaccountentryxml, function(e) {
+ accounts.put('', savedaccountentryxml, function(e) {
if (e) {
showStatus('Local copy');
return false;
@@ -206,9 +211,12 @@ $('userForm').onsubmit = function() {
return false;
};
-// Get the user's account
+/**
+ * Get the user's account.
+ */
getaccount();
+})();
</script>
</div>
diff --git a/sca-cpp/trunk/hosting/server/htdocs/app/cache-manifest.cmf b/sca-cpp/trunk/hosting/server/htdocs/app/cache-template.cmf
index 6ea53970aa..5881cf83dd 100644
--- a/sca-cpp/trunk/hosting/server/htdocs/app/cache-manifest.cmf
+++ b/sca-cpp/trunk/hosting/server/htdocs/app/cache-template.cmf
@@ -1,6 +1,6 @@
CACHE MANIFEST
-# Version 5
+# Version SHA1
# App resources
/favicon.ico
diff --git a/sca-cpp/trunk/hosting/server/htdocs/app/index.html b/sca-cpp/trunk/hosting/server/htdocs/app/index.html
index 30bd1d9999..cddf4fb477 100644
--- a/sca-cpp/trunk/hosting/server/htdocs/app/index.html
+++ b/sca-cpp/trunk/hosting/server/htdocs/app/index.html
@@ -26,6 +26,7 @@
<link rel="apple-touch-icon" href="/public/touchicon.png"/>
<base href="/"/>
<script type="text/javascript">
+(function() {
window.appcache = {};
@@ -50,50 +51,60 @@ appcache.get = function(uri) {
http.send(null);
if (http.status == 200) {
if (http.getResponseHeader("X-Login") != null) {
- if (debug) debug('http error', u, 'X-Login');
+ if (window.debug) debug('http error', u, 'X-Login');
// Redirect to login page if not signed in
document.location = '/login/';
return null;
} else if (http.responseText == '' || http.getResponseHeader("Content-Type") == null) {
- if (debug) debug('http error', u, 'No-Content');
+ if (window.debug) debug('http error', u, 'No-Content');
return null;
}
try { ls.setItem(u, http.responseText); } catch(e) {}
return http.responseText;
}
- if (debug) debug('http error', u, http.status, http.statusText);
+ if (window.debug) debug('http error', u, http.status, http.statusText);
// Redirect to login page if not signed in
if (http.status == 403)
document.location = '/login/';
return null;
};
-// Load Javascript and CSS
-(function() {
- var bootjs = document.createElement('script');
- bootjs.type = 'text/javascript';
- bootjs.text = appcache.get('/all-min.js');
- document.head.appendChild(bootjs);
- document.head.appendChild(ui.declareCSS(appcache.get('/ui-min.css')));
})();
-</script>
+/**
+ * Load Javascript and CSS.
+ */
+(function() {
-<script type="text/javascript">
+var bootjs = document.createElement('script');
+bootjs.type = 'text/javascript';
+bootjs.text = appcache.get('/all-min.js');
+document.head.appendChild(bootjs);
+document.head.appendChild(ui.declareCSS(appcache.get('/ui-min.css')));
+
+})();
+
+/**
+ * Redirect to login page if not signed in.
+ */
+(function() {
-// Redirect to login page if not signed in
if (document.location.protocol == 'https:' && !hasauthcookie())
document.location = '/login/';
+})();
+
</script>
</head>
-<body class="delayed" onload="onload();">
+<body class="delayed">
<div id="mainbodydiv" class="mainbodydiv">
<div id="headdiv" class="hsection">
<script type="text/javascript">
(function() {
+
$('headdiv').appendChild(ui.declareScript(appcache.get('/config-min.js')));
+
})();
</script>
</div>
@@ -102,13 +113,16 @@ $('headdiv').appendChild(ui.declareScript(appcache.get('/config-min.js')));
</div>
<script type="text/javascript">
+(function() {
/**
* Get the app name
*/
var appname = location.pathname.split('/')[1];
-// Set page title
+/**
+ * Set page title.
+ */
document.title = appname;
/**
@@ -125,9 +139,9 @@ var apppage = null;
/**
* Initialize the app HTTP clients.
*/
-var appWidget = sca.component('AppWidget');
-var pagecomp = sca.reference(appWidget, 'pages');
-var composcomp = sca.reference(appWidget, 'composites');
+var appComp = sca.component('App');
+var pagecomp = sca.reference(appComp, 'pages');
+var composcomp = sca.reference(appComp, 'composites');
var startcomp = sca.httpclient('start', '/' + appname + '/start');
var stopcomp = sca.httpclient('stop', '/' + appname + '/stop');
var timercomp = sca.httpclient('timer', '/' + appname + '/timer');
@@ -964,7 +978,7 @@ function getappcomposite(appname) {
}
/**
- * Document load post processing.
+ * Initialize the document.
*/
function onload() {
//debug('onload');
@@ -984,6 +998,9 @@ function onload() {
return true;
}
+onload();
+
+})();
</script>
<div id="footdiv" class="fsection">
diff --git a/sca-cpp/trunk/hosting/server/htdocs/cache-manifest.cmf b/sca-cpp/trunk/hosting/server/htdocs/cache-template.cmf
index e2c44def89..8d9aa26f7d 100644
--- a/sca-cpp/trunk/hosting/server/htdocs/cache-manifest.cmf
+++ b/sca-cpp/trunk/hosting/server/htdocs/cache-template.cmf
@@ -1,6 +1,6 @@
CACHE MANIFEST
-# Version 6
+# Version SHA1
# App resources
/
diff --git a/sca-cpp/trunk/hosting/server/htdocs/clone/index.html b/sca-cpp/trunk/hosting/server/htdocs/clone/index.html
index f5557efcd3..0a2f7733bc 100644
--- a/sca-cpp/trunk/hosting/server/htdocs/clone/index.html
+++ b/sca-cpp/trunk/hosting/server/htdocs/clone/index.html
@@ -41,22 +41,31 @@
</div>
<script type="text/javascript">
+(function() {
-// Get the app name
+/**
+ * Get the app name.
+ */
var appname = ui.fragmentParams(location)['app'];
-// Set page titles
-document.title = ui.windowtitle(location.hostname) + ' - ' + config.clone + ' - ' + appname;
-$('viewhead').innerHTML = '<span class="smenu">' + config.clone + ' ' + appname + '</span>';
-$('cloneAppOKButton').value = config.clone;
-$('cloneAppOKButton').title = config.clone + ' this app';
+/**
+ * Set page titles.
+ */
+document.title = config.windowtitle() + ' - ' + config.clone() + ' - ' + appname;
+$('viewhead').innerHTML = '<span class="smenu">' + config.clone() + ' ' + appname + '</span>';
+$('cloneAppOKButton').value = config.clone();
+$('cloneAppOKButton').title = config.clone() + ' this app';
-// Set images
+/**
+ * Set images.
+ */
$('appimg').src = ui.b64img(appcache.get('/public/app.b64'));
-// Init service references
-var editWidget = sca.component("EditWidget");
-var apps = sca.reference(editWidget, "apps");
+/**
+ * Init service references.
+ */
+var editorComp = sca.component("Editor");
+var apps = sca.reference(editorComp, "apps");
/**
* The current app entry and corresponding saved XML content.
@@ -79,7 +88,7 @@ function getapp(name) {
showError('App not available');
return false;
}
- showStatus(defaultStatus());
+ showOnlineStatus();
appentry = doc != null? car(elementsToValues(atom.readATOMEntry(mklist(doc)))) : mklist("'entry", mklist("'title", ''), mklist("'id", name));
$('appTitle').value = cadr(assoc("'title", cdr(appentry)));
@@ -137,9 +146,12 @@ $('cloneAppCancelButton').onclick = function() {
history.back();
};
-// Get the current app
+/**
+ * Get the current app.
+ */
getapp(appname);
+})();
</script>
</div>
diff --git a/sca-cpp/trunk/hosting/server/htdocs/config.js b/sca-cpp/trunk/hosting/server/htdocs/config.js
index de1d1410cd..70d3ea1195 100644
--- a/sca-cpp/trunk/hosting/server/htdocs/config.js
+++ b/sca-cpp/trunk/hosting/server/htdocs/config.js
@@ -23,9 +23,31 @@ if (isNil(config))
/**
* UI configuration.
*/
-config.windowtitle = 'App Builder'
-config.pagetitle = '<span style="font-weight: bold;">App Builder</span>';
-config.hometitle = '<br/><span style="font-weight: bold;">Create SCA Composite Apps</span><br/><br/>';
-config.clone = 'Clone';
-config.logic = 'Logic';
+config.windowtitle = function() {
+ return 'App Builder';
+};
+
+config.pagetitle = function() {
+ return '<span style="font-weight: bold;">App Builder</span>';
+};
+
+config.hometitle = function() {
+ return '<br/><span style="font-weight: bold;">Create SCA Composite Apps</span><br/><br/>';
+};
+
+config.clone = function() {
+ return 'Clone';
+};
+
+config.logic = function() {
+ return 'Logic';
+};
+
+config.viewfoot = function() {
+ return ui.menubar(mklist(ui.menu('menuabout', 'About', '/', '_view', 'note')), mklist());
+};
+
+config.appresources = function() {
+ return mklist();
+};
diff --git a/sca-cpp/trunk/hosting/server/htdocs/create/index.html b/sca-cpp/trunk/hosting/server/htdocs/create/index.html
index 825587627b..d8d2b30f3c 100644
--- a/sca-cpp/trunk/hosting/server/htdocs/create/index.html
+++ b/sca-cpp/trunk/hosting/server/htdocs/create/index.html
@@ -41,17 +41,24 @@
</div>
<script type="text/javascript">
+(function() {
-// Set page titles
-document.title = ui.windowtitle(location.hostname) + ' - Create App';
+/**
+ * Set page titles.
+ */
+document.title = config.windowtitle() + ' - Create App';
$('viewhead').innerHTML = '<span class="smenu">Create an App</span>';
-// Set images
+/**
+ * Set images.
+ */
$('appimg').src = ui.b64img(appcache.get('/public/app.b64'));
-// Init service references
-var editWidget = sca.component("EditWidget");
-var apps = sca.reference(editWidget, "apps");
+/**
+ * Init service references.
+ */
+var editorComp = sca.component("Editor");
+var apps = sca.reference(editorComp, "apps");
/**
* The current app entry and corresponding saved XML content.
@@ -105,8 +112,12 @@ $('createAppCancelButton').onclick = function() {
history.back();
};
-showStatus(defaultStatus());
+/**
+ * Show the status.
+ */
+showOnlineStatus();
+})();
</script>
</div>
diff --git a/sca-cpp/trunk/hosting/server/htdocs/delete/index.html b/sca-cpp/trunk/hosting/server/htdocs/delete/index.html
index 75869a4f28..5a668af401 100644
--- a/sca-cpp/trunk/hosting/server/htdocs/delete/index.html
+++ b/sca-cpp/trunk/hosting/server/htdocs/delete/index.html
@@ -43,20 +43,29 @@
</div>
<script type="text/javascript">
+(function() {
-// Get the app name
+/**
+ * Get the app name.
+ */
var appname = ui.fragmentParams(location)['app'];
-// Set page titles
-document.title = ui.windowtitle(location.hostname) + ' - ' + 'Delete' + ' - ' + appname;
+/**
+ * Set page titles.
+ */
+document.title = config.windowtitle() + ' - ' + 'Delete' + ' - ' + appname;
$('viewhead').innerHTML = '<span class="smenu">Delete ' + appname + '</span>';
-// Set images
+/**
+ * Set images.
+ */
$('appimg').src = ui.b64img(appcache.get('/public/app.b64'));
-// Init service references
-var editWidget = sca.component("EditWidget");
-var apps = sca.reference(editWidget, "apps");
+/**
+ * Init service references.
+ */
+var editorComp = sca.component("Editor");
+var apps = sca.reference(editorComp, "apps");
/**
* The current app entry and corresponding saved XML content.
@@ -78,7 +87,7 @@ function getapp(name) {
showError('App not available');
return false;
}
- showStatus(defaultStatus());
+ showOnlineStatus();
appentry = doc != null? car(elementsToValues(atom.readATOMEntry(mklist(doc)))) : mklist("'entry", mklist("'title", ''), mklist("'id", name));
$('appTitle').value = cadr(assoc("'title", cdr(appentry)));
@@ -103,7 +112,7 @@ $('deleteAppForm').onsubmit = function() {
showStatus('Local copy');
return false;
}
- showStatus(defaultStatus());
+ showOnlineStatus();
// Return to the app store
ui.navigate('/#view=store', '_view');
@@ -119,9 +128,12 @@ $('deleteAppCancelButton').onclick = function() {
history.back();
};
-// Get the current app
+/**
+ * Get the current app.
+ */
getapp(appname);
+})();
</script>
</div>
diff --git a/sca-cpp/trunk/hosting/server/htdocs/graph/index.html b/sca-cpp/trunk/hosting/server/htdocs/graph/index.html
index 6f73aec5ec..d360336375 100644
--- a/sca-cpp/trunk/hosting/server/htdocs/graph/index.html
+++ b/sca-cpp/trunk/hosting/server/htdocs/graph/index.html
@@ -25,8 +25,11 @@
</div>
<script type="text/javascript">
+(function() {
-// Get the app name
+/**
+ * Get the current app name.
+ */
var appname = ui.fragmentParams(location)['app'];
var ispalette = false;
if (isNil(appname)) {
@@ -37,10 +40,14 @@ if (isNil(appname)) {
ispalette = true;
}
-// Set page title
-document.title = ui.windowtitle(location.hostname) + ' - ' + config.logic + ' - ' + appname;
+/**
+ * Set page title.
+ */
+document.title = config.windowtitle() + ' - ' + config.logic() + ' - ' + appname;
-// Set header div
+/**
+ * Set header div.
+ */
$('viewhead').innerHTML = '<span id="appTitle" class="cmenu">' + appname + '</span>' +
'<input type="button" id="deleteCompButton" title="Delete a component" class="graybutton redbutton plusminus" style="position: absolute; top: 4px; left: 5px;" disabled="true" value="-"/>' +
'<span style="position: absolute; top: 0px; left: 45px; right: 115px; padding: 0px; background: transparent;"><input id="compValue" type="text" value="" class="flatentry" title="Component value" autocapitalize="off" placeholder="Value" style="position: absolute; left: 0px; top: 4px; width: 100%; visibility: hidden;" readonly="readonly"/></span>' +
@@ -66,13 +73,12 @@ var cdelete = $('deleteCompButton');
var ccopy = $('copyCompButton');
var cplay = $('playCompButton');
-// Init componnent references
-var editWidget = sca.component("EditWidget");
-var palettes = sca.reference(editWidget, "palettes");
-var composites = sca.reference(editWidget, ispalette? "palettes" : "composites");
-
-// Setup remote log
-//rconsole = sca.defun(sca.reference(editWidget, "log"), "log");
+/**
+ * Init componnent references.
+ */
+var editorComp = sca.component("Editor");
+var palettes = sca.reference(editorComp, "palettes");
+var composites = sca.reference(editorComp, ispalette? "palettes" : "composites");
/**
* Composite rendering functions.
@@ -1843,7 +1849,7 @@ function getapp(name, g) {
author = elementValue(namedElementChild("'author", composentry));
editable = author == username;
cadd.disabled = !editable;
- showStatus(editable? defaultStatus() : 'Read only');
+ showStatus(editable? onlineStatus() : 'Read only');
return true;
});
}
@@ -2058,10 +2064,14 @@ cplay.onclick = function() {
return showdata(gcomp);
}
-// Create editor graph area
+/**
+ * Create editor graph area.
+ */
graph.mkedit(graphdiv, graph.mkpath().move(-2500,0), atitle, cvalue, cadd, ccopy, cdelete, oncomposchange, oncompselect);
-// Install the palettes
+/**
+ * Install the palettes.
+ */
var bg = graph.mkgroup(graph.mkpath());
var pos = graph.mkpath().move(0, 0);
bpalette = installpalette('control', pos.rmove(5,2), graphdiv, bg, spalette, gpalettes);
@@ -2079,9 +2089,12 @@ installpalette('logic', pos.rmove(0, 28), graphdiv, bg, spalette, gpalettes);
installpalette('math', pos.rmove(0, 28), graphdiv, bg, spalette, gpalettes);
installpalette('python', pos.rmove(0, 28), graphdiv, bg, spalette, gpalettes);
-// Get and display the current app
+/**
+ * Get and display the current app.
+ */
getapp(appname, graphdiv);
+})();
</script>
</div>
diff --git a/sca-cpp/trunk/hosting/server/htdocs/home/index.html b/sca-cpp/trunk/hosting/server/htdocs/home/index.html
index 914eb1df00..130c05fda0 100644
--- a/sca-cpp/trunk/hosting/server/htdocs/home/index.html
+++ b/sca-cpp/trunk/hosting/server/htdocs/home/index.html
@@ -37,17 +37,22 @@
</div>
<script type="text/javascript">
+(function() {
-// Set page titles
-document.title = ui.windowtitle(location.hostname);
-$('viewhead').innerHTML = '<span class="bcmenu">' + config.pagetitle + '</span>';
-$('hometitle').innerHTML = config.hometitle;
+/**
+ * Set page titles.
+ */
+document.title = config.windowtitle();
+$('viewhead').innerHTML = '<span class="bcmenu">' + config.pagetitle() + '</span>';
+$('hometitle').innerHTML = config.hometitle();
$('getstarted').onclick = function() {
return ui.navigate('/#view=store', '_view');
};
-// Display animation
+/**
+ * Display animation.
+ */
var anim = $('homeanimation');
if (!isNil(anim)) {
anim.style.background = 'url(\'' + ui.b64img(appcache.get('/home/home.b64')) + '\')';
@@ -60,8 +65,12 @@ if (!isNil(anim)) {
}, 2000);
}
-showStatus(defaultStatus());
+/**
+ * Show the status.
+ */
+showOnlineStatus();
+})();
</script>
</div>
diff --git a/sca-cpp/trunk/hosting/server/htdocs/index.html b/sca-cpp/trunk/hosting/server/htdocs/index.html
index b46141919d..e3e046136d 100644
--- a/sca-cpp/trunk/hosting/server/htdocs/index.html
+++ b/sca-cpp/trunk/hosting/server/htdocs/index.html
@@ -26,6 +26,7 @@
<link rel="apple-touch-icon" href="/public/touchicon.png"/>
<base href="/"/>
<script type="text/javascript">
+(function() {
window.appcache = {};
@@ -44,59 +45,77 @@ appcache.get = function(uri) {
return item;
// Get resource from network
+ //if (window.debug) debug('appcache.get', u);
var http = new XMLHttpRequest();
http.open("GET", u, false);
http.setRequestHeader("Accept", "*/*");
http.send(null);
if (http.status == 200) {
if (http.getResponseHeader("X-Login") != null) {
- if (debug) debug('http error', u, 'X-Login');
+ if (window.debug) debug('http error', u, 'X-Login');
// Redirect to login page if not signed in
document.location = '/login/';
return null;
} else if (http.responseText == '' || http.getResponseHeader("Content-Type") == null) {
- if (debug) debug('http error', u, 'No-Content');
+ if (window.debug) debug('http error', u, 'No-Content');
return null;
}
try { ls.setItem(u, http.responseText); } catch(e) {}
return http.responseText;
}
- if (debug) debug('http error', u, http.status, http.statusText);
+ if (window.debug) debug('http error', u, http.status, http.statusText);
// Redirect to login page if not signed in
if (http.status == 403)
document.location = '/login/';
return null;
};
-// Load Javascript and CSS
+appcache.remove = function(uri) {
+ var h = uri.indexOf('#');
+ var u = h == -1? uri : uri.substring(0, h);
+ var ls = window.lstorage || localStorage;
+ try { ls.removeItem(u); } catch(e) {}
+ return true;
+};
+
+})();
+
+/**
+ * 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')));
- // Disable cache for testing
- lstorage.enabled = false;
+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')));
+
+// Disable cache for testing
+//lstorage.enabled = false;
})();
-</script>
-<script type="text/javascript">
+/**
+ * Redirect to login page if not signed in.
+ */
+(function() {
-// Redirect to login page if not signed in
if (document.location.protocol == 'https:' && !hasauthcookie())
document.location = '/login/';
+})();
</script>
</head>
-<body class="delayed" onload="onload();">
+<body class="delayed">
<div id="mainbodydiv" class="mainbody">
<div id="headdiv" class="hsection">
<script type="text/javascript">
(function() {
+
$('headdiv').appendChild(ui.declareScript(appcache.get('/config-min.js')));
+
})();
</script>
</div>
@@ -109,28 +128,45 @@ $('headdiv').appendChild(ui.declareScript(appcache.get('/config-min.js')));
<div id="viewcontainer"></div>
+<div id="viewfootbackground" class="viewfootbackground fixed"></div>
+<div id="viewfoot" class="viewfoot fixed"></div>
+<div id="status" class="status fixed" style="visibility: hidden;"></div>
+
<script type="text/javascript">
+(function() {
-// Init service references
-var editWidget = sca.component("EditWidget");
-var user= sca.defun(sca.reference(editWidget, "user"));
-var accounts = sca.reference(editWidget, "accounts");
+/**
+ * Init service references.
+ */
+var editorComp = sca.component("Editor");
+var user= sca.defun(sca.reference(editorComp, "user"));
+var accounts = sca.reference(editorComp, "accounts");
-// Set page title
-document.title = ui.windowtitle(location.hostname);
+/**
+ * Set page title.
+ */
+document.title = config.windowtitle();
-// Init div variables
+/**
+ * Init div variables.
+ */
var bdiv = $('mainbodydiv');
var mdiv = $('menu');
var hdiv = $('viewhead');
var vcontainer = $('viewcontainer');
vcontainer.className = ui.isMobile()? 'viewcontainer3dm' : 'viewcontainer3d';
+var fdiv = $('viewfoot');
/**
* The current user name and account entry.
*/
-var username;
-var accountentry;
+window.username = 'anonymous';
+
+/**
+ * The current store category.
+ */
+var storecat = 'top';
+var storeidx = 0;
/**
* Pre-fetch app resources.
@@ -138,26 +174,66 @@ var accountentry;
var appresources = [
['/all-min.js'],
['/ui-min.css'],
- ['/account/', '9'],
- ['/clone/', '3'],
- ['/create/', '2'],
- ['/delete/', '3'],
- ['/graph/', '5'],
+ ['/account/', 9],
+ ['/clone/', 3],
+ ['/create/', 2],
+ ['/delete/', 3],
+ ['/graph/', 5],
['/config-min.js'],
- ['/home/', '0'],
+ ['/home/', 0],
['/home/home.b64'],
- ['/page/', '4'],
+ ['/page/', 4],
['/public/app.b64'],
['/public/config-min.js'],
['/public/grid72.b64'],
['/public/iframe-min.html'],
['/public/img.b64'],
['/public/user.b64'],
- ['/stats/', '2'],
- ['/store/', '1']
+ ['/stats/', 2],
+ ['/store/', 1]
];
/**
+ * Show a status message.
+ */
+window.showStatus = function(s, c) {
+ //debug('status', s);
+ var sdiv = $('status');
+ if (isNil(sdiv))
+ return s;
+ sdiv.innerHTML = '<span class="' + (c? c : 'okstatus') + '">' + s + '</span>';
+ sdiv.className = 'status fixed';
+ sdiv.style.visibility = 'visible';
+
+ function divtransitionend(e) {
+ e.target.style.visibility = 'hidden';
+ e.target.className = 'status fixed';
+ }
+ if (!sdiv.addedTransitionEnd) {
+ sdiv.addEventListener('webkitTransitionEnd', divtransitionend, false);
+ sdiv.addEventListener('transitionend', divtransitionend, false);
+ sdiv.addedTransitionEnd = true;
+ }
+ sdiv.className = 'statusout3 fixed';
+ return s;
+}
+
+/**
+ * Show an error message.
+ */
+window.showError = function(s) {
+ //debug('error', s);
+ return showStatus(s, 'errorstatus');
+}
+
+/**
+ * Show the online/offline status.
+ */
+window.showOnlineStatus = function() {
+ return navigator.onLine? showStatus('Online') : showError('Offline');
+}
+
+/**
* Handle application cache events.
*/
applicationCache.addEventListener('checking', function(e) {
@@ -166,11 +242,11 @@ applicationCache.addEventListener('checking', function(e) {
}, false);
applicationCache.addEventListener('error', function(e) {
//debug('appcache error', e);
- showStatus(defaultStatus());
+ showOnlineStatus();
}, false);
applicationCache.addEventListener('noupdate', function(e) {
//debug('appcache noupdate', e);
- showStatus(defaultStatus());
+ showOnlineStatus();
}, false);
applicationCache.addEventListener('downloading', function(e) {
//debug('appcache downloading', e);
@@ -185,16 +261,27 @@ applicationCache.addEventListener('updateready', function(e) {
try {
applicationCache.swapCache();
} catch(e) {}
- showStatus(defaultStatus());
+ showOnlineStatus();
//debug('appcache swapped', e);
+
+ // Update offline resources in local storage and reload the page
+ map(function(res) {
+ showStatus('Updating');
+ appcache.remove(res[0]);
+ appcache.get(res[0]);
+ }, append(appresources, config.appresources()));
+ window.location.reload();
}, false);
applicationCache.addEventListener('cached', function(e) {
//debug('appcache cached', e);
+ showOnlineStatus();
+
+ // Install offline resources in local storage
map(function(res) {
- showStatus('Updating');
+ showStatus('Installing');
+ appcache.remove(res[0]);
appcache.get(res[0]);
- }, appresources);
- showStatus(defaultStatus());
+ }, append(appresources, config.appresources()));
}, false);
/**
@@ -214,11 +301,9 @@ window.addEventListener('online', function(e) {
/**
* Handle view transitions.
*/
-
-// Keep track of the current view url and uri
var viewurl = '';
var viewuri = '';
-var viewidx = '';
+var viewidx = 0;
var viewdiv;
/**
@@ -228,7 +313,7 @@ var apptransitions = {};
map(function(res) {
if (res.length > 1)
apptransitions[res[0]] = res[1];
-}, appresources);
+}, append(appresources, config.appresources()));
/**
* Return the transition that should be applied to a resource.
@@ -266,7 +351,9 @@ function mkviewdiv(cname) {
* Return the last visited location.
*/
function lastvisited() {
- return lstorage.getItem('ui.lastvisited');
+ if (username != lstorage.getItem('ui.lastvisit.user'))
+ return null;
+ return lstorage.getItem('ui.lastvisit.url');
}
/**
@@ -274,49 +361,22 @@ function lastvisited() {
*/
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')),
+ append(mklist(ui.menu('menuhome', 'Home', '/', '_view', view == 'home'),
+ ui.menu('menustore', 'Store', '/#view=store&category=' + storecat + '&idx=' + storeidx, '_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(config.logic, '/#view=graph&app=' + appname, '_view', view == 'graph'),
- ui.menu('<span class="greentext" style="font-weight: bold">Run!</span>', '/' + appname + '/', '_blank', false))),
+ ui.menu('menustats', 'Stats', '/#view=stats&app=' + appname, '_view', view == 'stats'),
+ ui.menu('menupage', 'Page', '/#view=page&app=' + appname, '_view', view == 'page'),
+ ui.menu('menulogic', config.logic(), '/#view=graph&app=' + appname, '_view', view == 'graph'),
+ ui.menu('menurun', '<span class="greentext" style="font-weight: bold">Run!</span>', '/' + appname + '/', '_blank', false))),
(isNil(appname) || appname == 'undefined')? mklist(
- hasauthcookie()? ui.menufunc('Sign out', 'logout();', false) : ui.menu('Sign in', '/login/', '_self', false),
- ui.menu('Account', '/#view=account', '_view', view == 'account')) :
+ hasauthcookie()? ui.menufunc('menusignout', 'Sign out', 'return logout();', false) : ui.menu('menusignin', 'Sign in', '/login/', '_self', false),
+ ui.menu('menuaccount', 'Account', '/#view=account', '_view', view == 'account')) :
mklist());
-}
-/**
- * Show a status message.
- */
-function showStatus(s) {
- var sdiv = $('status');
- if (isNil(sdiv))
- return s;
- sdiv.style.color = '#808080'
- sdiv.innerHTML = s;
- return s;
-}
-
-/**
- * Show an error message.
- */
-function showError(s) {
- var sdiv = $('status');
- if (isNil(sdiv))
- return s;
- sdiv.style.color = '#dd4b39'
- sdiv.innerHTML = s;
- return s;
-}
-
-/**
- * Return the default status message.
- */
-function defaultStatus() {
- return navigator.onLine? 'Online' : 'Offline';
+ if (fdiv.innerHTML == '')
+ fdiv.innerHTML = config.viewfoot();
}
/**
@@ -326,12 +386,10 @@ function getaccount() {
var doc = accounts.get();
// Stop now if we didn't get an account
- if (doc == null) {
- username = 'anonymous';
+ if (doc == null)
return false;
- }
- accountentry = car(elementsToValues(atom.readATOMEntry(mklist(doc))));
+ var accountentry = car(elementsToValues(atom.readATOMEntry(mklist(doc))));
username = cadr(assoc("'id", cdr(accountentry)));
return true;
}
@@ -343,13 +401,20 @@ function showview(url) {
//debug('showview', url);
// Save last visited location
- lstorage.setItem('ui.lastvisited', url);
+ lstorage.setItem('ui.lastvisit.user', username);
+ lstorage.setItem('ui.lastvisit.url', 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'];
+ var idx = isNil(params['idx'])? 0 : parseInt(params['idx']);
+
+ // Track store category view
+ if (view == 'store') {
+ storecat = isNil(params['category'])? 'top' : params['category'];
+ storeidx = idx;
+ }
// Determine the transition to use
var vtransition = uri == viewuri? (idx >= viewidx? 'left' : 'right') : viewtransition(viewuri, uri);
@@ -424,7 +489,7 @@ function showview(url) {
// Track the current visible view
viewdiv = vdiv;
-
+
return true;
}
@@ -455,6 +520,7 @@ function updatelocation(url) {
window.onnavigate = function(url) {
//debug('onnavigate', url);
+ // Update the browser window location
updatelocation(url);
// Show the specified view
@@ -473,13 +539,13 @@ window.onloginredirect = function(e) {
/**
* Log the current user out.
*/
-function logout() {
+window.logout = function() {
// Clear session cookie and user-specific local storage entries
clearauthcookie();
- lstorage.removeItem('/r/EditWidget/accounts');
- lstorage.removeItem('/r/EditWidget/dashboards');
+ lstorage.removeItem('/r/Editor/accounts');
+ lstorage.removeItem('/r/Editor/dashboards');
document.location = '/login/';
- return true;
+ return false;
}
/**
@@ -523,7 +589,7 @@ document.body.onorientationchange = function(e) {
};
/**
- * Document load post processing.
+ * Initialize the document.
*/
function onload() {
//debug('onload', history.length);
@@ -542,8 +608,10 @@ function onload() {
}
// Show the last visited view
- if (ui.isMobile() && (document.referrer == null || document.referrer == '')) {
- //debug('show lastvisited');
+ if (ui.isMobile() && (document.referrer == null || document.referrer == '' ||
+ document.referrer.indexOf('//' + location.hostname + '/login/') != -1 ||
+ document.referrer.indexOf('//accounts.google.com/ServiceLogin') != -1 ||
+ document.referrer.indexOf('//www.facebook.com/login.php') != -1)) {
var lv = lastvisited();
var url = isNil(lv)? location.pathname : lv;
updatelocation(url);
@@ -559,6 +627,9 @@ function onload() {
return showview(url);
}
+onload();
+
+})();
</script>
<div id="footdiv" class="fsection">
diff --git a/sca-cpp/trunk/hosting/server/htdocs/login/index.html b/sca-cpp/trunk/hosting/server/htdocs/login/index.html
index f9fa9f6f2f..bf09339927 100644
--- a/sca-cpp/trunk/hosting/server/htdocs/login/index.html
+++ b/sca-cpp/trunk/hosting/server/htdocs/login/index.html
@@ -25,6 +25,7 @@
<meta name="apple-mobile-web-app-status-bar-style" content="black"/>
<base href="/login/"/>
<script type="text/javascript">
+(function() {
window.appcache = {};
@@ -49,37 +50,45 @@ appcache.get = function(uri) {
http.send(null);
if (http.status == 200) {
if (http.getResponseHeader("X-Login") != null) {
- if (debug) debug('http error', u, 'X-Login');
+ if (window.debug) debug('http error', u, 'X-Login');
return null;
} else if (http.responseText == '' || http.getResponseHeader("Content-Type") == null) {
- if (debug) debug('http error', u, 'No-Content');
+ if (window.debug) debug('http error', u, 'No-Content');
return null;
}
try { ls.setItem(u, http.responseText); } catch(e) {}
return http.responseText;
}
- if (debug) debug('http error', u, http.status, http.statusText);
+ if (window.debug) debug('http error', u, http.status, http.statusText);
return null;
};
-// Load Javascript and CSS
+})();
+
+/**
+ * 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')));
+
+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();">
+<body class="delayed"">
<div id="mainbodydiv" class="bodydiv">
<div id="headdiv" class="hsection">
<script type="text/javascript">
(function() {
+
$('headdiv').appendChild(ui.declareScript(appcache.get('/public/config-min.js')));
+
})();
</script>
</div>
@@ -96,22 +105,31 @@ $('headdiv').appendChild(ui.declareScript(appcache.get('/public/config-min.js'))
<div id="view">
<div id="viewcontent" class="viewcontent" style="margin-left: auto; margin-right: auto; text-align: center;">
-<form name="facebookOAuth2Form" style="width: 100%;">
-<p style="font-size: 16px;">Sign in with your <span style="font-weight: bold;">Facebook</span> account</p>
-<p><input type="button" value="Sign in" class="graybutton bluebutton" style="font-size: 16px; line-height: 16px; padding: 6px; height: 32px" onclick="submitOAuth2Signin(withFacebook)"/></p>
+<br/>
+<form id="formSignin" name="formSignin" method="POST" action="/login/dologin" style="width: 100%;">
+<table style="width: 100%;">
+<tr><td><span id="loginprompt" style="font-size: 16px;"></span></tr></td>
+<tr><td><input type="text" class="flatentry" name="httpd_username" value="" placeholder="User id"/></td></tr>
+<tr><td><input type="password" class="flatentry" name="httpd_password" value="" placeholder="Password"/></td></tr>
+<tr><td><input type="submit" class="graybutton bluebutton" style="font-size: 16px; line-height: 16px; padding: 6px; height: 32px" value="Sign in"/></td></tr>
+</table>
+<input type="hidden" name="httpd_location" value="/"/>
</form>
+<br/>
-<form name="googleOAuth2Form" style="width: 100%;">
-<p style="font-size: 16px;">Sign in with your <span style="font-weight: bold;" >Google</span> account</p>
-<p><input type="button" value="Sign in" class="graybutton bluebutton" style="font-size: 16px; line-height: 16px; padding: 6px; height: 32px" onclick="submitOAuth2Signin(withGoogleOAuth)"/></p>
+<form name="facebookOAuth2Form" style="width: 100%;">
+<table style="width: 100%;">
+<tr><td><span style="font-size: 16px;">Sign in with your <span style="font-weight: bold;">Facebook</span> account</span></td></tr>
+<tr><td><input type="button" id="facebookOAuth2Signin" value="Sign in" class="graybutton bluebutton" style="font-size: 16px; line-height: 16px; padding: 6px; height: 32px"/></td></tr>
+</table>
</form>
+<br/>
-<form name="formSignin" method="POST" action="/login/dologin" onsubmit="submitFormSignin()" style="width: 100%;">
-<p id="loginprompt" style="font-size: 16px;"></p>
-<p><input type="text" class="flatentry" name="httpd_username" value="" placeholder="User id"/></p>
-<p><input type="password" class="flatentry" name="httpd_password" value="" placeholder="Password"/></p>
-<p><input type="submit" class="graybutton bluebutton" style="font-size: 16px; line-height: 16px; padding: 6px; height: 32px" value="Sign in"/></p>
-<input type="hidden" name="httpd_location" value="/"/>
+<form name="googleOAuth2Form" style="width: 100%;">
+<table style="width: 100%;">
+<tr><td><span style="font-size: 16px;">Sign in with your <span style="font-weight: bold;" >Google</span> account</span></td></tr>
+<tr><td><input type="button" id="googleOAuth2Signin" value="Sign in" class="graybutton bluebutton" style="font-size: 16px; line-height: 16px; padding: 6px; height: 32px"/></td></tr>
+</table>
</form>
<br/>
@@ -129,31 +147,75 @@ $('headdiv').appendChild(ui.declareScript(appcache.get('/public/config-min.js'))
</div>
</div>
+<div id="viewfootbackground" class="viewfootbackground fixed"></div>
+<div id="viewfoot" class="viewfoot fixed"></div>
+<div id="status" class="status fixed" style="visibility: hidden;"></div>
+
<script type="text/javascript">
+(function() {
-// Init div variables
+/**
+ * Init div variables.
+ */
var mbdiv = $('menubackground');
var mdiv = $('menu');
var hdiv = $('viewhead');
var hbdiv = $('viewheadbackground');
$('viewcontainer').className = ui.isMobile()? 'viewcontainer3d' : 'viewcontainer3dm';
$('view').className = ui.isMobile()? 'viewloaded3d' : 'viewloaded3dm';
-$('loginprompt').innerHTML = config.loginprompt;
+$('loginprompt').innerHTML = config.loginprompt();
+var fdiv = $('viewfoot');
-// Set page titles
-document.title = ui.windowtitle(location.hostname) + ' - Sign in';
-$('viewhead').innerHTML = '<span class="bcmenu">' + config.pagetitle + '</span>';
+/**
+ * Set page titles.
+ */
+document.title = config.windowtitle() + ' - Sign in';
+$('viewhead').innerHTML = '<span class="bcmenu">' + config.pagetitle() + '</span>';
/**
* Build and show the menu bar.
*/
function showmenu(mdiv) {
- mdiv.innerHTML = ui.menubar(mklist(ui.menu('Home', '/', '_self', false)), mklist(ui.menu('Sign in', '/login/', '_self', true)));
+ mdiv.innerHTML = ui.menubar(mklist(ui.menu('menuhome', 'Home', '/', '_self', false)), mklist());
+ fdiv.innerHTML = config.viewfoot();
}
showmenu(mdiv);
/**
+ * Show a status message.
+ */
+window.showStatus = function(s, c) {
+ //debug('status', s);
+ var sdiv = $('status');
+ if (isNil(sdiv))
+ return s;
+ sdiv.innerHTML = '<span class="' + (c? c : 'okstatus') + '">' + s + '</span>';
+ sdiv.className = 'status fixed';
+ sdiv.style.visibility = 'visible';
+
+ function divtransitionend(e) {
+ e.target.style.visibility = 'hidden';
+ e.target.className = 'status fixed';
+ }
+ if (!sdiv.addedTransitionEnd) {
+ sdiv.addEventListener('webkitTransitionEnd', divtransitionend, false);
+ sdiv.addEventListener('transitionend', divtransitionend, false);
+ sdiv.addedTransitionEnd = true;
+ }
+ sdiv.className = 'statusout3 fixed';
+ return s;
+}
+
+/**
+ * Show an error message.
+ */
+window.showError = function(s) {
+ //debug('error', s);
+ return showStatus(s, 'errorstatus');
+}
+
+/**
* Parse the query parameeters.
*/
function queryParams() {
@@ -168,6 +230,18 @@ function queryParams() {
}
/**
+ * Show login status.
+ */
+function showLoginStatus() {
+ var a = queryParams()['openauth_attempt'];
+ debug('a', a);
+ if (typeof(a) != 'undefined' && a == '1')
+ showError('Incorrect email or password, please try again');
+}
+
+showLoginStatus();
+
+/**
* Return the referrer URL.
*/
function openauthReferrer() {
@@ -181,31 +255,13 @@ function openauthReferrer() {
}
/**
- * Signin with OpenID.
- */
-/*
-function submitOpenIDSignin(w) {
- clearauthcookie();
- lstorage.removeItem('/r/EditWidget/accounts');
- lstorage.removeItem('/r/EditWidget/dashboards');
- document.openIDSignin.openid_identifier.value = w();
- document.openIDSignin.action = openauthReferrer();
- document.openIDSignin.submit();
-}
-
-function withGoogleOpenID() {
- return 'https://www.google.com/accounts/o8/id';
-}
-*/
-
-/**
* Signin with OAuth 2.0.
*/
function submitOAuth2Signin(w) {
parms = w();
clearauthcookie();
- lstorage.removeItem('/r/EditWidget/accounts');
- lstorage.removeItem('/r/EditWidget/dashboards');
+ lstorage.removeItem('/r/Editor/accounts');
+ lstorage.removeItem('/r/Editor/dashboards');
document.oauth2Signin.oauth2_authorize.value = parms[0];
document.oauth2Signin.oauth2_access_token.value = parms[1];
document.oauth2Signin.oauth2_client_id.value = parms[2];
@@ -222,11 +278,19 @@ function withFacebook() {
return parms;
}
-function withGoogleOAuth() {
+function withGoogle() {
var parms = ['https://accounts.google.com/o/oauth2/auth', 'https://accounts.google.com/o/oauth2/token', 'google.com', 'https://www.googleapis.com/oauth2/v1/userinfo', 'https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile', ''];
return parms;
}
+$('facebookOAuth2Signin').onclick = function() {
+ return submitOAuth2Signin(withFacebook);
+};
+
+$('googleOAuth2Signin').onclick = function() {
+ return submitOAuth2Signin(withGoogle);
+};
+
/**
* Signin with a userid and password.
*/
@@ -236,6 +300,8 @@ function submitFormSignin() {
document.formSignin.submit();
}
+$('formSignin').onsubmit = submitFormSignin;
+
/**
* Handle orientation change.
*/
@@ -250,7 +316,7 @@ document.body.onorientationchange = function(e) {
};
/**
- * Load post processing.
+ * Initialize the document.
*/
function onload() {
//debug('onload');
@@ -261,6 +327,9 @@ function onload() {
return true;
}
+onload();
+
+})();
</script>
</div>
diff --git a/sca-cpp/trunk/hosting/server/htdocs/page/index.html b/sca-cpp/trunk/hosting/server/htdocs/page/index.html
index 215383c76c..6a6e042c74 100644
--- a/sca-cpp/trunk/hosting/server/htdocs/page/index.html
+++ b/sca-cpp/trunk/hosting/server/htdocs/page/index.html
@@ -71,8 +71,11 @@
<div id="buffer" style="visibility: hidden; width: 0px; height: 0px"></div>
<script type="text/javascript">
+(function() {
-// Get the app name
+/**
+ * Get the current app name.
+ */
var appname = ui.fragmentParams(location)['app'];
/**
@@ -88,10 +91,14 @@ function applink(appname) {
return link;
}
-// Set page titles
-document.title = ui.windowtitle(location.hostname) + ' - Page - ' + appname;
+/**
+ * Set page titles.
+ */
+document.title = config.windowtitle() + ' - Page - ' + appname;
-// Set header div
+/**
+ * Set header div.
+ */
$('viewhead').innerHTML = '<span id="appTitle" class="cmenu">' + appname + '</span>' +
'<input type="button" id="deleteWidgetButton" title="Delete a Widget" class="graybutton redbutton plusminus" style="position: absolute; top: 4px; left: 5px;" disabled="true" value="-"/>' +
'<span style="position: absolute; top: 0px; left: 45px; right: 115px; padding: 0px; background: transparent;"><input id="widgetValue" type="text" value="" class="flatentry" title="Widget value" autocapitalize="off" placeholder="Value" style="position: absolute; left: 0px; top: 4px; width: 100%; visibility: hidden;" readonly="readonly"/></span>' +
@@ -120,12 +127,16 @@ var wvalue = $('widgetValue');
var atitle = $('appTitle');
var pplay = $('playPageButton');
-// Set images
+/**
+ * Set images.
+ */
$('imgimg').src = ui.b64img(appcache.get('/public/img.b64'));
-// Init component references
-var editWidget = sca.component('EditWidget');
-var pages = sca.reference(editWidget, 'pages');
+/**
+ * Init component references.
+ */
+var editorComp = sca.component('Editor');
+var pages = sca.reference(editorComp, 'pages');
/**
* Page editing functions.
@@ -868,7 +879,7 @@ function getpage(name, pagediv) {
author = elementValue(namedElementChild("'author", pageentry));
editable = author == username;
wadd.disabled = !editable;
- showStatus(editable? defaultStatus() : 'Read only');
+ showStatus(editable? onlineStatus() : 'Read only');
return true;
});
@@ -1054,12 +1065,17 @@ pplay.onclick = function() {
return playpage();
}
-// Initialize the page editor
+/**
+ * Initialize the page editor.
+ */
page.mkedit(pagediv, atitle, wvalue, wadd, wcopy, wdelete, onpagechange, onselectwidget);
-// Get and display the current app page
+/**
+ * Get and display the current app page.
+ */
getpage(appname, pagediv);
+})();
</script>
</div>
diff --git a/sca-cpp/trunk/hosting/server/htdocs/proxy/public/oops/index.html b/sca-cpp/trunk/hosting/server/htdocs/proxy/public/oops/index.html
index 9c795bf843..b1d118d59a 100644
--- a/sca-cpp/trunk/hosting/server/htdocs/proxy/public/oops/index.html
+++ b/sca-cpp/trunk/hosting/server/htdocs/proxy/public/oops/index.html
@@ -25,6 +25,7 @@
<meta name="apple-mobile-web-app-status-bar-style" content="black"/>
<base href="/proxy/public/oops/"/>
<script type="text/javascript">
+(function() {
window.appcache = {};
@@ -49,37 +50,45 @@ appcache.get = function(uri) {
http.send(null);
if (http.status == 200) {
if (http.getResponseHeader("X-Login") != null) {
- if (debug) debug('http error', u, 'X-Login');
+ if (window.debug) debug('http error', u, 'X-Login');
return null;
} else if (http.responseText == '' || http.getResponseHeader("Content-Type") == null) {
- if (debug) debug('http error', u, 'No-Content');
+ if (window.debug) debug('http error', u, 'No-Content');
return null;
}
try { ls.setItem(u, http.responseText); } catch(e) {}
return http.responseText;
}
- if (debug) debug('http error', u, http.status, http.statusText);
+ if (window.debug) debug('http error', u, http.status, http.statusText);
return null;
};
-// Load Javascript and CSS
+})();
+
+/**
+ * Load Javascript and CSS.
+ */
(function() {
- var bootjs = document.createElement('script');
- bootjs.type = 'text/javascript';
- bootjs.text = appcache.get('/proxy/all-min.js');
- document.head.appendChild(bootjs);
- document.head.appendChild(ui.declareCSS(appcache.get('/proxy/ui-min.css')));
+
+var bootjs = document.createElement('script');
+bootjs.type = 'text/javascript';
+bootjs.text = appcache.get('/proxy/all-min.js');
+document.head.appendChild(bootjs);
+document.head.appendChild(ui.declareCSS(appcache.get('/proxy/ui-min.css')));
+
})();
</script>
</head>
-<body class="delayed" onload="onload();">
+<body class="delayed">
<div id="mainbodydiv" class="mainbodydiv">
<div id="headdiv" class="hsection">
<script type="text/javascript">
(function() {
+
$('headdiv').appendChild(ui.declareScript(appcache.get('/proxy/public/config-min.js')));
+
})();
</script>
</div>
@@ -101,25 +110,35 @@ $('headdiv').appendChild(ui.declareScript(appcache.get('/proxy/public/config-min
</div>
</div>
+<div id="viewfootbackground" class="viewfootbackground fixed"></div>
+<div id="viewfoot" class="viewfoot fixed"></div>
+
<script type="text/javascript">
+(function() {
-// Init div variables
+/**
+ * Init div variables.
+ */
var mdiv = $('menu');
var hdiv = $('viewhead');
$('viewcontainer').className = ui.isMobile()? 'viewcontainer3d' : 'viewcontainer3dm';
$('view').className = ui.isMobile()? 'viewloaded3d' : 'viewloaded3dm';
+var fdiv = $('viewfoot');
-// Set page title
-document.title = ui.windowtitle(location.hostname) + ' - Oops';
-$('viewhead').innerHTML = '<span class="bcmenu">' + config.pagetitle + '</span>';
+/**
+ * Set page title.
+ */
+document.title = config.windowtitle() + ' - Oops';
+$('viewhead').innerHTML = '<span class="bcmenu">' + config.pagetitle() + '</span>';
/**
* Build and show the menu bar.
*/
function showmenu(mdiv) {
mdiv.innerHTML = ui.menubar(
- mklist(ui.menu('Home', '/', '_view', false)),
- mklist(hasauthcookie()? ui.menufunc('Sign out', 'logout();', false) : ui.menu('Sign in', '/login/', '_self', false)));
+ mklist(ui.menu('menuhome', 'Home', '/', '_self', false)),
+ mklist(hasauthcookie()? ui.menufunc('menusignout', 'Sign out', 'return logout();', false) : ui.menu('menusignin', 'Sign in', '/login/', '_self', false)));
+ fdiv.innerHTML = config.viewfoot();
}
showmenu(mdiv);
@@ -127,13 +146,13 @@ showmenu(mdiv);
/**
* Log the current user out.
*/
-function logout() {
+window.logout = function() {
// Clear session cookie and user-specific local storage entries
clearauthcookie();
- lstorage.removeItem('/r/EditWidget/accounts');
- lstorage.removeItem('/r/EditWidget/dashboards');
+ lstorage.removeItem('/r/Editor/accounts');
+ lstorage.removeItem('/r/Editor/dashboards');
document.location = '/login/';
- return true;
+ return false;
}
/**
@@ -150,7 +169,7 @@ document.body.onorientationchange = function(e) {
};
/**
- * Load post processing.
+ * Initialize the document.
*/
function onload() {
//debug('onload');
@@ -161,6 +180,9 @@ function onload() {
return true;
}
+onload();
+
+})();
</script>
<div id="footdiv" class="fsection">
diff --git a/sca-cpp/trunk/hosting/server/htdocs/public/config.js b/sca-cpp/trunk/hosting/server/htdocs/public/config.js
index 41a3bf6771..54818f4810 100644
--- a/sca-cpp/trunk/hosting/server/htdocs/public/config.js
+++ b/sca-cpp/trunk/hosting/server/htdocs/public/config.js
@@ -23,7 +23,23 @@ if (isNil(config))
/**
* UI configuration.
*/
-config.windowtitle = 'App Builder'
-config.pagetitle = '<span style="font-weight: bold;">App Builder</span>';
-config.loginprompt = '<span>Sign in with your userid and password</span>';
+config.windowtitle = function() {
+ return 'App Builder';
+};
+
+config.pagetitle = function() {
+ return '<span style="font-weight: bold;">App Builder</span>';
+};
+
+config.loginprompt = function() {
+ return '<span>Sign in with your userid and password</span>';
+};
+
+config.viewfoot = function() {
+ return ui.menubar(mklist(ui.menu('menuabout', 'About', '/', '_view', 'note')), mklist());
+};
+
+config.appresources = function() {
+ return mklist();
+};
diff --git a/sca-cpp/trunk/hosting/server/htdocs/public/notauth/index.html b/sca-cpp/trunk/hosting/server/htdocs/public/notauth/index.html
index 959c6be327..89852393bf 100644
--- a/sca-cpp/trunk/hosting/server/htdocs/public/notauth/index.html
+++ b/sca-cpp/trunk/hosting/server/htdocs/public/notauth/index.html
@@ -25,6 +25,7 @@
<meta name="apple-mobile-web-app-status-bar-style" content="black"/>
<base href="/public/notauth/"/>
<script type="text/javascript">
+(function() {
window.appcache = {};
@@ -49,37 +50,45 @@ appcache.get = function(uri) {
http.send(null);
if (http.status == 200) {
if (http.getResponseHeader("X-Login") != null) {
- if (debug) debug('http error', u, 'X-Login');
+ if (window.debug) debug('http error', u, 'X-Login');
return null;
} else if (http.responseText == '' || http.getResponseHeader("Content-Type") == null) {
- if (debug) debug('http error', u, 'No-Content');
+ if (window.debug) debug('http error', u, 'No-Content');
return null;
}
try { ls.setItem(u, http.responseText); } catch(e) {}
return http.responseText;
}
- if (debug) debug('http error', u, http.status, http.statusText);
+ if (window.debug) debug('http error', u, http.status, http.statusText);
return null;
};
-// Load Javascript and CSS
+})();
+
+/**
+ * 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')));
+
+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();">
+<body class="delayed">
<div id="mainbodydiv" class="mainbodydiv">
<div id="headdiv" class="hsection">
<script type="text/javascript">
(function() {
+
$('headdiv').appendChild(ui.declareScript(appcache.get('/public/config-min.js')));
+
})();
</script>
</div>
@@ -101,26 +110,36 @@ $('headdiv').appendChild(ui.declareScript(appcache.get('/public/config-min.js'))
</div>
</div>
+<div id="viewfootbackground" class="viewfootbackground fixed"></div>
+<div id="viewfoot" class="viewfoot fixed"></div>
+
<script type="text/javascript">
+(function() {
-// Init div variables
+/**
+ * Init div variables.
+ */
var mdiv = $('menu');
var hdiv = $('viewhead');
-$('viewhead').innerHTML = '<span class="bcmenu">' + config.pagetitle + '</span>';
+$('viewhead').innerHTML = '<span class="bcmenu">' + config.pagetitle() + '</span>';
$('viewcontainer').className = ui.isMobile()? 'viewcontainer3d' : 'viewcontainer3dm';
$('view').className = ui.isMobile()? 'viewloaded3d' : 'viewloaded3dm';
+var fdiv = $('viewfoot');
-// Set page title
-document.title = ui.windowtitle(location.hostname) + ' - Sorry';
-$('viewhead').innerHTML = '<span class="bcmenu">' + config.pagetitle + '</span>';
+/**
+ * Set page title.
+ */
+document.title = config.windowtitle() + ' - Sorry';
+$('viewhead').innerHTML = '<span class="bcmenu">' + config.pagetitle() + '</span>';
/**
* Build and show the menu bar.
*/
function showmenu(mdiv) {
mdiv.innerHTML = ui.menubar(
- mklist(ui.menu('Home', '/', '_view', false)),
- mklist(hasauthcookie()? ui.menufunc('Sign out', 'logout();', false) : ui.menu('Sign in', '/login/', '_self', false)));
+ mklist(ui.menu('menuhome', 'Home', '/', '_self', false)),
+ mklist(hasauthcookie()? ui.menufunc('menusignout', 'Sign out', 'return logout();', false) : ui.menu('menusignin', 'Sign in', '/login/', '_self', false)));
+ fdiv.innerHTML = config.viewfoot();
}
showmenu(mdiv);
@@ -128,13 +147,13 @@ showmenu(mdiv);
/**
* Log the current user out.
*/
-function logout() {
+window.logout = function() {
// Clear session cookie and user-specific local storage entries
clearauthcookie();
- lstorage.removeItem('/r/EditWidget/accounts');
- lstorage.removeItem('/r/EditWidget/dashboards');
+ lstorage.removeItem('/r/Editor/accounts');
+ lstorage.removeItem('/r/Editor/dashboards');
document.location = '/login/';
- return true;
+ return false;
}
/**
@@ -152,7 +171,7 @@ document.body.onorientationchange = function(e) {
};
/**
- * Load post processing.
+ * Initialize the document.
*/
function onload() {
//debug('onload');
@@ -163,6 +182,9 @@ function onload() {
return true;
}
+onload();
+
+})();
</script>
<div id="footdiv" class="fsection">
diff --git a/sca-cpp/trunk/hosting/server/htdocs/public/notfound/index.html b/sca-cpp/trunk/hosting/server/htdocs/public/notfound/index.html
index f2e4f6695a..8f0d486854 100644
--- a/sca-cpp/trunk/hosting/server/htdocs/public/notfound/index.html
+++ b/sca-cpp/trunk/hosting/server/htdocs/public/notfound/index.html
@@ -25,6 +25,7 @@
<meta name="apple-mobile-web-app-status-bar-style" content="black"/>
<base href="/public/notfound/"/>
<script type="text/javascript">
+(function() {
window.appcache = {};
@@ -49,37 +50,45 @@ appcache.get = function(uri) {
http.send(null);
if (http.status == 200) {
if (http.getResponseHeader("X-Login") != null) {
- if (debug) debug('http error', u, 'X-Login');
+ if (window.debug) debug('http error', u, 'X-Login');
return null;
} else if (http.responseText == '' || http.getResponseHeader("Content-Type") == null) {
- if (debug) debug('http error', u, 'No-Content');
+ if (window.debug) debug('http error', u, 'No-Content');
return null;
}
try { ls.setItem(u, http.responseText); } catch(e) {}
return http.responseText;
}
- if (debug) debug('http error', u, http.status, http.statusText);
+ if (window.debug) debug('http error', u, http.status, http.statusText);
return null;
};
-// Load Javascript and CSS
+})();
+
+/**
+ * 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')));
+
+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();">
+<body class="delayed">
<div id="mainbodydiv" class="mainbodydiv">
<div id="headdiv" class="hsection">
<script type="text/javascript">
(function() {
+
$('headdiv').appendChild(ui.declareScript(appcache.get('/public/config-min.js')));
+
})();
</script>
</div>
@@ -102,25 +111,35 @@ $('headdiv').appendChild(ui.declareScript(appcache.get('/public/config-min.js'))
</div>
</div>
+<div id="viewfootbackground" class="viewfootbackground fixed"></div>
+<div id="viewfoot" class="viewfoot fixed"></div>
+
<script type="text/javascript">
+(function() {
-// Init div variables
+/**
+ * Init div variables.
+ */
var mdiv = $('menu');
var hdiv = $('viewhead');
$('viewcontainer').className = ui.isMobile()? 'viewcontainer3d' : 'viewcontainer3dm';
$('view').className = ui.isMobile()? 'viewloaded3d' : 'viewloaded3dm';
+var fdiv = $('viewfoot');
-// Set page title
-document.title = ui.windowtitle(location.hostname) + ' - Page not found';
-$('viewhead').innerHTML = '<span class="bcmenu">' + config.pagetitle + '</span>';
+/**
+ * Set page title.
+ */
+document.title = config.windowtitle() + ' - Page not found';
+$('viewhead').innerHTML = '<span class="bcmenu">' + config.pagetitle() + '</span>';
/**
* Build and show the menu bar.
*/
function showmenu(mdiv) {
mdiv.innerHTML = ui.menubar(
- mklist(ui.menu('Home', '/', '_view', false)),
- mklist(hasauthcookie()? ui.menufunc('Sign out', 'logout();', false) : ui.menu('Sign in', '/login/', '_self', false)));
+ mklist(ui.menu('menuhome', 'Home', '/', '_self', false)),
+ mklist(hasauthcookie()? ui.menufunc('menusignout', 'Sign out', 'return logout();', false) : ui.menu('menusignin', 'Sign in', '/login/', '_self', false)));
+ fdiv.innerHTML = config.viewfoot();
}
showmenu(mdiv);
@@ -128,13 +147,13 @@ showmenu(mdiv);
/**
* Log the current user out.
*/
-function logout() {
+window.logout = function() {
// Clear session cookie and user-specific local storage entries
clearauthcookie();
- lstorage.removeItem('/r/EditWidget/accounts');
- lstorage.removeItem('/r/EditWidget/dashboards');
+ lstorage.removeItem('/r/Editor/accounts');
+ lstorage.removeItem('/r/Editor/dashboards');
document.location = '/login/';
- return true;
+ return false;
}
/**
@@ -151,7 +170,7 @@ document.body.onorientationchange = function(e) {
};
/**
- * Load post processing.
+ * Initialize the document.
*/
function onload() {
//debug('onload');
@@ -162,6 +181,9 @@ function onload() {
return true;
}
+onload();
+
+})();
</script>
<div id="footdiv" class="fsection">
diff --git a/sca-cpp/trunk/hosting/server/htdocs/public/notyet/index.html b/sca-cpp/trunk/hosting/server/htdocs/public/notyet/index.html
index 24f738ec09..e43a992f38 100644
--- a/sca-cpp/trunk/hosting/server/htdocs/public/notyet/index.html
+++ b/sca-cpp/trunk/hosting/server/htdocs/public/notyet/index.html
@@ -25,6 +25,7 @@
<meta name="apple-mobile-web-app-status-bar-style" content="black"/>
<base href="/public/notyet/"/>
<script type="text/javascript">
+(function() {
window.appcache = {};
@@ -49,37 +50,45 @@ appcache.get = function(uri) {
http.send(null);
if (http.status == 200) {
if (http.getResponseHeader("X-Login") != null) {
- if (debug) debug('http error', u, 'X-Login');
+ if (window.debug) debug('http error', u, 'X-Login');
return null;
} else if (http.responseText == '' || http.getResponseHeader("Content-Type") == null) {
- if (debug) debug('http error', u, 'No-Content');
+ if (window.debug) debug('http error', u, 'No-Content');
return null;
}
try { ls.setItem(u, http.responseText); } catch(e) {}
return http.responseText;
}
- if (debug) debug('http error', u, http.status, http.statusText);
+ if (window.debug) debug('http error', u, http.status, http.statusText);
return null;
};
-// Load Javascript and CSS
+})();
+
+/**
+ * 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')));
+
+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();">
+<body class="delayed">
<div id="mainbodydiv" class="mainbodydiv">
<div id="headdiv" class="hsection">
<script type="text/javascript">
(function() {
+
$('headdiv').appendChild(ui.declareScript(appcache.get('/public/config-min.js')));
+
})();
</script>
</div>
@@ -102,25 +111,35 @@ $('headdiv').appendChild(ui.declareScript(appcache.get('/public/config-min.js'))
</div>
</div>
+<div id="viewfootbackground" class="viewfootbackground fixed"></div>
+<div id="viewfoot" class="viewfoot fixed"></div>
+
<script type="text/javascript">
+(function() {
-// Init div variables
+/**
+ * Init div variables.
+ */
var mdiv = $('menu');
var hdiv = $('viewhead');
$('viewcontainer').className = ui.isMobile()? 'viewcontainer3d' : 'viewcontainer3dm';
$('view').className = ui.isMobile()? 'viewloaded3d' : 'viewloaded3dm';
+var fdiv = $('viewfoot');
-// Set page title
-document.title = ui.windowtitle(location.hostname) + ' - Page not found';
-$('viewhead').innerHTML = '<span class="bcmenu">' + config.pagetitle + '</span>';
+/**
+ * Set page title.
+ */
+document.title = config.windowtitle() + ' - Page not found';
+$('viewhead').innerHTML = '<span class="bcmenu">' + config.pagetitle() + '</span>';
/**
* Build and show the menu bar.
*/
function showmenu(mdiv) {
mdiv.innerHTML = ui.menubar(
- mklist(ui.menu('Home', '/', '_view', false)),
- mklist(hasauthcookie()? ui.menufunc('Sign out', 'logout();', false) : ui.menu('Sign in', '/login/', '_self', false)));
+ mklist(ui.menu('menuhome', 'Home', '/', '_self', false)),
+ mklist(hasauthcookie()? ui.menufunc('menusignout', 'Sign out', 'return logout();', false) : ui.menu('menusignin', 'Sign in', '/login/', '_self', false)));
+ fdiv.innerHTML = config.viewfoot();
}
showmenu(mdiv);
@@ -128,13 +147,13 @@ showmenu(mdiv);
/**
* Log the current user out.
*/
-function logout() {
+window.logout = function() {
// Clear session cookie and user-specific local storage entries
clearauthcookie();
- lstorage.removeItem('/r/EditWidget/accounts');
- lstorage.removeItem('/r/EditWidget/dashboards');
+ lstorage.removeItem('/r/Editor/accounts');
+ lstorage.removeItem('/r/Editor/dashboards');
document.location = '/login/';
- return true;
+ return false;
}
/**
@@ -151,7 +170,7 @@ document.body.onorientationchange = function(e) {
};
/**
- * Load post processing.
+ * Initialize the document.
*/
function onload() {
//debug('onload');
@@ -162,6 +181,9 @@ function onload() {
return true;
}
+onload();
+
+})();
</script>
<div id="footdiv" class="fsection">
diff --git a/sca-cpp/trunk/hosting/server/htdocs/public/oops/index.html b/sca-cpp/trunk/hosting/server/htdocs/public/oops/index.html
index ea190f4ec9..cc97c5362e 100644
--- a/sca-cpp/trunk/hosting/server/htdocs/public/oops/index.html
+++ b/sca-cpp/trunk/hosting/server/htdocs/public/oops/index.html
@@ -25,6 +25,7 @@
<meta name="apple-mobile-web-app-status-bar-style" content="black"/>
<base href="/public/oops/"/>
<script type="text/javascript">
+(function() {
window.appcache = {};
@@ -49,37 +50,45 @@ appcache.get = function(uri) {
http.send(null);
if (http.status == 200) {
if (http.getResponseHeader("X-Login") != null) {
- if (debug) debug('http error', u, 'X-Login');
+ if (window.debug) debug('http error', u, 'X-Login');
return null;
} else if (http.responseText == '' || http.getResponseHeader("Content-Type") == null) {
- if (debug) debug('http error', u, 'No-Content');
+ if (window.debug) debug('http error', u, 'No-Content');
return null;
}
try { ls.setItem(u, http.responseText); } catch(e) {}
return http.responseText;
}
- if (debug) debug('http error', u, http.status, http.statusText);
+ if (window.debug) debug('http error', u, http.status, http.statusText);
return null;
};
-// Load Javascript and CSS
+})();
+
+/**
+ * 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')));
+
+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();">
+<body class="delayed">
<div id="mainbodydiv" class="mainbodydiv">
<div id="headdiv" class="hsection">
<script type="text/javascript">
(function() {
+
$('headdiv').appendChild(ui.declareScript(appcache.get('/public/config-min.js')));
+
})();
</script>
</div>
@@ -101,25 +110,35 @@ $('headdiv').appendChild(ui.declareScript(appcache.get('/public/config-min.js'))
</div>
</div>
+<div id="viewfootbackground" class="viewfootbackground fixed"></div>
+<div id="viewfoot" class="viewfoot fixed"></div>
+
<script type="text/javascript">
+(function() {
-// Init div variables
+/**
+ * Init div variables.
+ */
var mdiv = $('menu');
var hdiv = $('viewhead');
$('viewcontainer').className = ui.isMobile()? 'viewcontainer3d' : 'viewcontainer3dm';
$('view').className = ui.isMobile()? 'viewloaded3d' : 'viewloaded3dm';
+var fdiv = $('viewfoot');
-// Set page title
-document.title = ui.windowtitle(location.hostname) + ' - Oops';
-$('viewhead').innerHTML = '<span class="bcmenu">' + config.pagetitle + '</span>';
+/**
+ * Set page title.
+ */
+document.title = config.windowtitle() + ' - Oops';
+$('viewhead').innerHTML = '<span class="bcmenu">' + config.pagetitle() + '</span>';
/**
* Build and show the menu bar.
*/
function showmenu(mdiv) {
mdiv.innerHTML = ui.menubar(
- mklist(ui.menu('Home', '/', '_view', false)),
- mklist(hasauthcookie()? ui.menufunc('Sign out', 'logout();', false) : ui.menu('Sign in', '/login/', '_self', false)));
+ mklist(ui.menu('menuhome', 'Home', '/', '_self', false)),
+ mklist(hasauthcookie()? ui.menufunc('menusignout', 'Sign out', 'return logout();', false) : ui.menu('menusignin', 'Sign in', '/login/', '_self', false)));
+ fdiv.innerHTML = config.viewfoot();
}
showmenu(mdiv);
@@ -127,13 +146,13 @@ showmenu(mdiv);
/**
* Log the current user out.
*/
-function logout() {
+window.logout = function() {
// Clear session cookie and user-specific local storage entries
clearauthcookie();
- lstorage.removeItem('/r/EditWidget/accounts');
- lstorage.removeItem('/r/EditWidget/dashboards');
+ lstorage.removeItem('/r/Editor/accounts');
+ lstorage.removeItem('/r/Editor/dashboards');
document.location = '/login/';
- return true;
+ return false;
}
/**
@@ -150,7 +169,7 @@ document.body.onorientationchange = function(e) {
};
/**
- * Load post processing.
+ * Initialize the document.
*/
function onload() {
//debug('onload');
@@ -161,6 +180,9 @@ function onload() {
return true;
}
+onload();
+
+})();
</script>
<div id="footdiv" class="fsection">
diff --git a/sca-cpp/trunk/hosting/server/htdocs/stats/index.html b/sca-cpp/trunk/hosting/server/htdocs/stats/index.html
index 1dd12de1f3..7c3d9a6434 100644
--- a/sca-cpp/trunk/hosting/server/htdocs/stats/index.html
+++ b/sca-cpp/trunk/hosting/server/htdocs/stats/index.html
@@ -39,22 +39,31 @@
</div>
<script type="text/javascript">
+(function() {
-// Get the app name
+/**
+ * Get the app name.
+ */
var appname = ui.fragmentParams(location)['app'];
-// Set page titles
-document.title = ui.windowtitle(location.hostname) + ' - Stats - ' + appname;
+/**
+ * Set page titles.
+ */
+document.title = config.windowtitle() + ' - Stats - ' + appname;
$('viewhead').innerHTML = '<span id="appname" class="cmenu">' + appname + '</span>' +
'<input type="button" class="graybutton redbutton plusminus" style="position: absolute; top: 4px; left: 5px;" id="deleteApp" value="-" title="Delete the app" disabled="true"/>' +
-'<input type="button" class="graybutton bluebutton" style="position: absolute; top: 4px; right: 5px;" id="cloneApp" value="'+ config.clone +'" title="' + config.clone + ' this app"/>';
+'<input type="button" class="graybutton bluebutton" style="position: absolute; top: 4px; right: 5px;" id="cloneApp" value="'+ config.clone() +'" title="' + config.clone() + ' this app"/>';
-// Set images
+/**
+ * Set images.
+ */
$('appimg').src = ui.b64img(appcache.get('/public/app.b64'));
-// Init service references
-var editWidget = sca.component("EditWidget");
-var apps = sca.reference(editWidget, "apps");
+/**
+ * Init service references.
+ */
+var editorComp = sca.component("Editor");
+var apps = sca.reference(editorComp, "apps");
/**
* The current app entry, author and saved XML content.
@@ -97,7 +106,7 @@ function getapp(name) {
$('deleteApp').onclick = function() {
return ui.navigate('/#view=delete&app=' + appname, '_view');
}
- showStatus(defaultStatus());
+ showOnlineStatus();
} else {
$('appTitle').placeholder = '';
$('appDescription').placeholder = '';
@@ -159,9 +168,12 @@ $('cloneApp').onclick = function() {
return ui.navigate('/#view=clone&app=' + appname, '_view');
}
-// Get the current app
+/**
+ * Get the current app.
+ */
getapp(appname);
+})();
</script>
</div>
diff --git a/sca-cpp/trunk/hosting/server/htdocs/store/index.html b/sca-cpp/trunk/hosting/server/htdocs/store/index.html
index 471229d9d5..1264007fe3 100644
--- a/sca-cpp/trunk/hosting/server/htdocs/store/index.html
+++ b/sca-cpp/trunk/hosting/server/htdocs/store/index.html
@@ -22,43 +22,67 @@
<div id="apps" class="viewcontent"></div>
<script type="text/javascript">
+(function() {
-// Set page titles
-document.title = ui.windowtitle(location.hostname) + ' - Store';
+/**
+ * Set page titles.
+ */
+document.title = config.windowtitle() + ' - Store';
+
+/**
+ * The store categories
+ */
+var categories = [
+ //['Featured', 'featured', 1],
+ ['Top', 'top', 2],
+ ['New', 'new', 3],
+ ['Search', 'all', 4],
+ ['My Apps', 'myapps', 5]
+];
-// Get the store category
-var category = ui.fragmentParams(location)['category'];
-if (isNil(category))
- category = 'top';
+/**
+ * Find a store category.
+ */
+function findcategory(name) {
+ if (isNil(name))
+ return findcategory('top');
+ var f = filter(function(c) { return cadr(c) == name }, categories);
+ if (isNil(f))
+ return findcategory('top');
+ return car(f);
+}
/**
- * Build store menu bar
+ * Get the current store category.
+ */
+var catname = cadr(findcategory(ui.fragmentParams(location)['category']));
+
+/**
+ * Build the store menu bar
*/
function catmenu() {
function catmenuitem(name, cat, idx) {
- var c = cat == category? 'smenu' : 'amenu';
- return '<span>' + ui.ahref('/#view=store&category=' + cat + '&idx=' + idx, '_view', '<span class="' + c + '">' + name + '</span>') + '</span>';
+ var c = cat == catname? 'smenu' : 'amenu';
+ return '<span>' + ui.href('storecat_' + cat, '/#view=store&category=' + cat + '&idx=' + idx, '_view', '<span class="' + c + '">' + name + '</span>') + '</span>';
}
var m = '';
- //m += catmenuitem('Featured', 'featured', '1');
- m += catmenuitem('Top', 'top', '2');
- m += catmenuitem('New', 'new', '3');
- m += catmenuitem('Search', 'all', '4');
- m += catmenuitem('My Apps', 'myapps', '5');
+ map(function(c) { m += catmenuitem(car(c), cadr(c), caddr(c)); }, categories);
m += '<span class="rmenu"><input type="button" class="graybutton bluebutton" id="createApp" title="Create a new app" Value="Create"/></span>';
return m;
}
-// Build store menu bar
+/**
+ * Build the store menu bar.
+ */
$('viewhead').innerHTML = catmenu();
/**
- * Service references.
+ * Init service references.
*/
-var editWidget = sca.component("EditWidget");
-var store = sca.reference(editWidget, "store");
-var dashboards = sca.reference(editWidget, "dashboards");
+var editorComp = sca.component("Editor");
+var store = sca.reference(editorComp, "store");
+var dashboards = sca.reference(editorComp, "dashboards");
/**
* Edit an app.
@@ -84,8 +108,8 @@ $('createApp').onclick = function() {
/**
* Get and display list of apps.
*/
-function getapps(category) {
- //debug('category', category);
+function getapps(catname) {
+ //debug('catname', catname);
showStatus('Loading');
function display(doc) {
@@ -95,7 +119,7 @@ function getapps(category) {
showError('App not available');
return false;
}
- showStatus(defaultStatus());
+ showOnlineStatus();
var apps = '<div>';
var feed = car(elementsToValues(atom.readATOMFeed(mklist(doc))));
@@ -114,10 +138,10 @@ function getapps(category) {
var updated = cadr(assoc("'updated", entry));
apps += '<div class="box">'
- apps += '<span class="appicon">' + ui.ahref('/#view=stats&app=' + name, '_view', '<img src="' + appimg + '" width="50" height="50"></img>') + '</span>';
+ apps += '<span class="appicon">' + ui.href('appicon_' + name, '/#view=stats&app=' + name, '_view', '<img src="' + appimg + '" width="50" height="50"></img>') + '</span>';
apps += '<span>'
- apps += '<span class="apptitle">' + ui.ahref('/#view=stats&app=' + name, '_view', name) + '</span>';
- if (category != 'myapps')
+ apps += '<span class="apptitle">' + ui.href('apptitle_' + name, '/#view=stats&app=' + name, '_view', name) + '</span>';
+ if (catname != 'myapps')
apps += '<br/><span>' + 'by&nbsp;' + author.split('@')[0] + '</span>';
apps += '</span>';
apps += '</div>';
@@ -130,14 +154,17 @@ function getapps(category) {
$('apps').innerHTML = apps;
}
- if (category == 'myapps')
+ if (catname == 'myapps')
return dashboards.get('', display);
- return store.get(category, display);
+ return store.get(catname, display);
}
-// Get and display the list of apps
-getapps(category);
+/**
+ * Get and display the list of apps.
+ */
+getapps(catname);
+})();
</script>
</div>
diff --git a/sca-cpp/trunk/hosting/server/logic-test b/sca-cpp/trunk/hosting/server/logic-test
new file mode 100755
index 0000000000..d4767e858f
--- /dev/null
+++ b/sca-cpp/trunk/hosting/server/logic-test
@@ -0,0 +1,28 @@
+#!/bin/sh
+
+# 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.
+
+# Run Python test cases
+here=`echo "import os; print os.path.realpath('$0')" | python`; here=`dirname $here`
+python_prefix=`cat $here/../../modules/python/python.prefix`
+export LD_LIBRARY_PATH=$python_prefix/lib:$LD_LIBRARY_PATH
+
+$python_prefix/bin/python test.py 2>/dev/null
+rc=$?
+
+exit $rc
diff --git a/sca-cpp/trunk/hosting/server/proxy-start b/sca-cpp/trunk/hosting/server/proxy-start
new file mode 100755
index 0000000000..f06de9fc01
--- /dev/null
+++ b/sca-cpp/trunk/hosting/server/proxy-start
@@ -0,0 +1,164 @@
+#!/bin/sh
+
+# 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.
+
+# For this module to work, add the www.example.com domain to your /etc/hosts as
+# follows:
+# 127.0.0.1 www.example.com
+
+here=`echo "import os; print os.path.realpath('$0')" | python`; here=`dirname $here`
+
+# Configure and start logging
+if [ -x ../../components/log/scribe-cat ]; then
+ ../../components/log/scribed-central-conf tmp
+ ../../components/log/scribed-client-conf tmp localhost
+ ../../components/log/scribed-central-start tmp
+ ../../components/log/scribed-client-start tmp
+fi
+
+# Start memcached
+../../components/cache/memcached-start tmp 11211
+../../components/cache/memcached-start tmp 11212
+
+# Configure server
+../../modules/http/httpd-conf tmp www.example.com 9090 htdocs
+../../modules/http/httpd-event-conf tmp
+
+# Configure Python component support
+../../modules/server/server-conf tmp
+../../modules/python/python-conf tmp
+
+# Configure server log streaming
+if [ -x ../../components/log/scribe-cat ]; then
+ cat >tmp/conf/log.conf <<EOF
+# Generated by: proxy-start $*
+LogLevel notice
+ErrorLog "|$here/../../components/log/scribe-cat localhost server"
+CustomLog "|$here/../../components/log/scribe-cat localhost server" combined
+
+EOF
+
+fi
+#../../modules/http/httpd-loglevel-conf tmp debug
+
+# Configure error pages
+cat >>tmp/conf/svhost.conf <<EOF
+# Generated by: proxy-start $*
+# Error pages
+ErrorDocument 404 /public/notfound/
+ErrorDocument 401 /public/notauth/
+ErrorDocument 403 /public/notauth/
+ErrorDocument 400 /public/oops/
+ErrorDocument 405 /public/oops/
+ErrorDocument 500 /public/oops/
+ErrorDocument 502 /public/oops/
+ErrorDocument 503 /public/oops/
+
+EOF
+
+# Configure SCA contributions
+cat >>tmp/conf/httpd.conf <<EOF
+# Generated by: proxy-start $*
+# Configure SCA Composite
+SCAContribution $here/
+SCAComposite server.composite
+
+# Configure SCA Composite for mass dynamic virtual Hosting
+#SCAVirtualContribution $here/data/apps/
+#SCAVirtualComposite app.composite
+SCAVirtualContributor Composites
+
+# Configure SCA wiring timeout
+SCAWiringTimeout 10
+
+EOF
+
+# Configure resource aliases
+cat >>tmp/conf/httpd.conf <<EOF
+# Generated by: proxy-start $*
+Alias /home/home.png $here/htdocs/home/home.png
+Alias /home/home.b64 $here/htdocs/home/home.b64
+Alias /proxy/public/config.js $here/htdocs/public/config.js
+Alias /proxy/public/config-min.js $here/public/config-min.js
+
+EOF
+
+# Configure app resource aliases
+cat >>tmp/conf/svhost.conf <<EOF
+# Generated by: proxy-start $*
+# Map /v/<app-name>/<path> to htdocs/app/<path>
+AliasMatch /v/([^/]+)(.*)$ $here/htdocs/app\$2
+
+EOF
+
+# Start server
+../../modules/http/httpd-start tmp
+
+# Clear document cache
+rm -rf tmp/proxy/cache
+
+# Configure proxy balancer
+../../modules/http/httpd-conf tmp/proxy www.example.com 8090 tmp/htdocs
+../../modules/http/alt-host-conf tmp/proxy ww1.example.com
+../../modules/http/alt-host-conf tmp/proxy ww2.example.com
+../../modules/http/proxy-conf tmp/proxy
+../../modules/js/js-conf tmp/proxy
+../../modules/http/httpd-event-conf tmp/proxy
+#../../modules/http/cache-conf tmp/proxy
+
+# Configure proxy balancer members
+../../modules/http/proxy-member-conf tmp/proxy localhost 9090
+
+# Configure proxy log streaming
+if [ -x ../../components/log/scribe-cat ]; then
+ cat >tmp/proxy/conf/log.conf <<EOF
+# Generated by: proxy-start $*
+ErrorLog "|$here/../../components/log/scribe-cat www.example.com proxy"
+CustomLog "|$here/../../components/log/scribe-cat www.example.com access" combined
+
+EOF
+
+fi
+#../../modules/http/httpd-loglevel-conf tmp/proxy debug
+
+# Configure resource aliases
+cat >>tmp/proxy/conf/httpd.conf <<EOF
+# Generated by: proxy-start $*
+Alias /proxy/public/config.js $here/htdocs/public/config.js
+Alias /proxy/public/config-min.js $here/htdocs/public/config-min.js
+
+EOF
+
+# Configure error pages
+cat >>tmp/proxy/conf/vhost.conf <<EOF
+# Generated by: proxy-start $*
+# Error pages
+ErrorDocument 404 /proxy/public/oops/
+ErrorDocument 401 /proxy/public/oops/
+ErrorDocument 403 /proxy/public/oops/
+ErrorDocument 400 /proxy/public/oops/
+ErrorDocument 405 /proxy/public/oops/
+ErrorDocument 500 /proxy/public/oops/
+ErrorDocument 502 /proxy/public/oops/
+ErrorDocument 503 /proxy/public/oops/
+
+EOF
+
+# Start proxy balancer
+../../modules/http/httpd-start tmp/proxy
+
diff --git a/sca-cpp/trunk/hosting/server/server-test b/sca-cpp/trunk/hosting/server/server-test
index d4767e858f..4d4d06f338 100755
--- a/sca-cpp/trunk/hosting/server/server-test
+++ b/sca-cpp/trunk/hosting/server/server-test
@@ -17,12 +17,15 @@
# specific language governing permissions and limitations
# under the License.
-# Run Python test cases
-here=`echo "import os; print os.path.realpath('$0')" | python`; here=`dirname $here`
-python_prefix=`cat $here/../../modules/python/python.prefix`
-export LD_LIBRARY_PATH=$python_prefix/lib:$LD_LIBRARY_PATH
+# Setup
+./ssl-proxy-start
+sleep 2
-$python_prefix/bin/python test.py 2>/dev/null
+# Test
+./client-test 2>/dev/null
rc=$?
+# Cleanup
+./stop
+sleep 2
exit $rc
diff --git a/sca-cpp/trunk/hosting/server/ssl-proxy-start b/sca-cpp/trunk/hosting/server/ssl-proxy-start
new file mode 100755
index 0000000000..e38f54055b
--- /dev/null
+++ b/sca-cpp/trunk/hosting/server/ssl-proxy-start
@@ -0,0 +1,252 @@
+#!/bin/sh
+
+# 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.
+
+# For this module to work, add the www.example.com domain to your /etc/hosts as
+# follows:
+# 127.0.0.1 www.example.com
+
+here=`echo "import os; print os.path.realpath('$0')" | python`; here=`dirname $here`
+
+# Configure and start logging
+if [ -x ../../components/log/scribe-cat ]; then
+ ../../components/log/scribed-central-conf tmp
+ ../../components/log/scribed-client-conf tmp localhost
+ ../../components/log/scribed-central-start tmp
+ ../../components/log/scribed-client-start tmp
+fi
+
+# Start memcached
+../../components/cache/memcached-start tmp 11211
+../../components/cache/memcached-start tmp 11212
+
+# Configure server
+../../modules/http/httpd-conf tmp www.example.com 9090 htdocs
+../../modules/http/httpd-event-conf tmp
+
+# Configure HTTP basic auth
+../../modules/http/basic-auth-conf tmp component
+
+# Configure OAuth authentication
+# Configure your OAuth app keys here
+../../modules/oauth/oauth-conf tmp component
+../../modules/oauth/oauth-memcached-conf tmp localhost 11212
+../../modules/oauth/oauth2-appkey-conf tmp facebook.com 12345 67890
+../../modules/oauth/oauth2-appkey-conf tmp google.com 12345 67890
+
+# Configure form-based authentication
+../../modules/http/open-auth-conf tmp component 80b67f38-b79e-4a72-bb5c-22c69fb00820
+
+# Configure authorized admins
+../../modules/http/passwd-auth-conf tmp admin admin
+
+# Configure Python component support
+../../modules/server/server-conf tmp
+../../modules/python/python-conf tmp
+
+# Configure server log streaming
+if [ -x ../../components/log/scribe-cat ]; then
+ cat >tmp/conf/log.conf <<EOF
+# Generated by: ssl-proxy-start $*
+LogLevel notice
+ErrorLog "|$here/../../components/log/scribe-cat localhost server"
+CustomLog "|$here/../../components/log/scribe-cat localhost server" combined
+
+EOF
+
+fi
+../../modules/http/httpd-loglevel-conf tmp debug
+
+# Configure error pages
+cat >>tmp/conf/svhost.conf <<EOF
+# Generated by: ssl-proxy-start $*
+# Error pages
+ErrorDocument 404 /public/notfound/
+ErrorDocument 401 /public/notauth/
+ErrorDocument 403 /public/notauth/
+ErrorDocument 400 /public/oops/
+ErrorDocument 405 /public/oops/
+ErrorDocument 500 /public/oops/
+ErrorDocument 502 /public/oops/
+ErrorDocument 503 /public/oops/
+
+EOF
+
+# Configure SCA contributions
+cat >>tmp/conf/httpd.conf <<EOF
+# Generated by: ssl-proxy-start $*
+# Configure SCA Composite
+SCAContribution $here/
+SCAComposite server.composite
+
+# Configure SCA Composite for mass dynamic virtual Hosting
+SCAVirtualContributor Composites
+
+# Configure SCA Authenticator component
+SCAAuthenticator Authenticator
+
+# Configure SCA wiring timeout
+SCAWiringTimeout 10
+
+EOF
+
+# Configure resource aliases
+cat >>tmp/conf/httpd.conf <<EOF
+# Generated by: ssl-proxy-start $*
+Alias /home/home.png $here/htdocs/home/home.png
+Alias /home/home.b64 $here/htdocs/home/home.b64
+Alias /proxy/public/config.js $here/htdocs/public/config.js
+Alias /proxy/public/config-min.js $here/public/config-min.js
+
+EOF
+
+# Configure app resource aliases
+cat >>tmp/conf/svhost-ssl.conf <<EOF
+# Generated by: ssl-proxy-start $*
+# Map /v/<app-name>/<path> to htdocs/app/<path>
+AliasMatch /v/([^/]+)(.*)$ $here/htdocs/app\$2
+
+EOF
+
+# Configure admin access to server status and info
+cat >tmp/conf/adminauth.conf <<EOF
+# Generated by: ssl-proxy-start $*
+# Allow the server admin to view the server status and info
+<Location /server-status>
+AuthType None
+Require all granted
+</Location>
+
+<Location /server-info>
+AuthType None
+Require all granted
+</Location>
+
+EOF
+
+# Configure admin access to components
+cat >>tmp/conf/locauth-ssl.conf <<EOF
+# Generated by: ssl-proxy-start $*
+# Allow the server admin to access all components
+<Location /c>
+Require user admin
+</Location>
+<Location /r>
+Require user admin
+</Location>
+<Location /r/Editor>
+Require valid-user
+</Location>
+<Location /r/App>
+Require valid-user
+</Location>
+EOF
+
+# Start server
+../../modules/http/httpd-start tmp
+sleep 2
+
+# Configure authorized users
+./put-auth tmp admin admin admin admin
+./put-auth tmp admin admin john john
+./put-auth tmp admin admin jane jane
+# Configure the email addresses associated with your OAuth ids here
+./put-auth tmp admin admin /oauth1/john@example.com password
+./put-auth tmp admin admin /oauth2/jane@example.com password
+
+# Clear document cache
+rm -rf tmp/proxy/cache
+
+# Create SSL certificates
+../../modules/http/ssl-ca-conf tmp/proxy www.example.com
+../../modules/http/ssl-cert-conf tmp/proxy www.example.com server
+
+# Configure proxy balancer
+../../modules/http/httpd-conf tmp/proxy www.example.com 8090 tmp/htdocs
+../../modules/http/alt-host-conf tmp/proxy ww1.example.com
+../../modules/http/alt-host-conf tmp/proxy ww2.example.com
+../../modules/http/proxy-conf tmp/proxy
+../../modules/js/js-conf tmp/proxy
+../../modules/http/httpd-event-conf tmp/proxy
+#../../modules/http/cache-conf tmp/proxy
+../../modules/http/httpd-ssl-conf tmp/proxy 8453
+../../modules/http/proxy-ssl-conf tmp/proxy
+#../../modules/http/cache-ssl-conf tmp/proxy
+
+# Configure password authentication
+../../modules/http/basic-auth-conf tmp/proxy file /balancer-manager
+../../modules/http/basic-auth-conf tmp/proxy file /server-status
+../../modules/http/passwd-auth-conf tmp/proxy file admin admin
+
+# Configure mod-security
+../../modules/http/mod-security-conf tmp/proxy
+#../../modules/http/mod-security-audit-conf tmp/proxy
+
+# Configure proxy balancer members
+../../modules/http/proxy-ssl-nossl-member-conf tmp/proxy localhost 9090
+
+# Configure proxy log streaming
+if [ -x ../../components/log/scribe-cat ]; then
+ cat >tmp/proxy/conf/log.conf <<EOF
+# Generated by: ssl-proxy-start $*
+ErrorLog "|$here/../../components/log/scribe-cat www.example.com proxy"
+CustomLog "|$here/../../components/log/scribe-cat www.example.com access" combined
+
+EOF
+
+ cat >tmp/proxy/conf/log-ssl.conf <<EOF
+# Generated by: ssl-proxy-start $*
+CustomLog "|$here/../../components/log/scribe-cat www.example.com access" sslcombined
+
+EOF
+
+# cat >tmp/proxy/conf/mod-security-audit-log.conf <<EOF
+## Generated by: start $*
+#SecAuditLog "|$here/../../components/log/scribe-cat $host secaudit secaudit"
+#
+#EOF
+
+fi
+../../modules/http/httpd-loglevel-conf tmp/proxy debug
+
+# Configure resource aliases
+cat >>tmp/proxy/conf/httpd.conf <<EOF
+# Generated by: ssl-proxy-start $*
+Alias /proxy/public/config.js $here/htdocs/public/config.js
+Alias /proxy/public/config-min.js $here/htdocs/public/config-min.js
+
+EOF
+
+# Configure error pages
+cat >>tmp/proxy/conf/vhost-ssl.conf <<EOF
+# Generated by: ssl-proxy-start $*
+# Error pages
+ErrorDocument 404 /proxy/public/oops/
+ErrorDocument 401 /proxy/public/oops/
+ErrorDocument 403 /proxy/public/oops/
+ErrorDocument 400 /proxy/public/oops/
+ErrorDocument 405 /proxy/public/oops/
+ErrorDocument 500 /proxy/public/oops/
+ErrorDocument 502 /proxy/public/oops/
+ErrorDocument 503 /proxy/public/oops/
+
+EOF
+
+# Start proxy balancer
+../../modules/http/httpd-start tmp/proxy
+
diff --git a/sca-cpp/trunk/hosting/server/start b/sca-cpp/trunk/hosting/server/start
index 5675e851f8..d4443cb250 100755
--- a/sca-cpp/trunk/hosting/server/start
+++ b/sca-cpp/trunk/hosting/server/start
@@ -22,7 +22,6 @@
# 127.0.0.1 www.example.com
here=`echo "import os; print os.path.realpath('$0')" | python`; here=`dirname $here`
-jsprefix=`echo "import os; print os.path.realpath('$here/../../modules/js')" | python`
host=`hostname`
# Configure and start logging
@@ -37,9 +36,15 @@ fi
../../components/cache/memcached-start tmp 11211
../../components/cache/memcached-start tmp 11212
+# Clear document cache
+rm -rf tmp/cache
+
# Configure server
../../modules/http/httpd-conf tmp www.example.com 8090 htdocs
+../../modules/http/alt-host-conf tmp ww1.example.com
+../../modules/http/alt-host-conf tmp ww2.example.com
../../modules/http/httpd-event-conf tmp
+#../../modules/http/cache-conf tmp
# Configure Python component support
../../modules/server/server-conf tmp
@@ -64,6 +69,7 @@ CustomLog $here/tmp/logs/access_log combined
EOF
fi
+#../../modules/http/httpd-loglevel-conf tmp debug
# Configure error pages
cat >>tmp/conf/svhost.conf <<EOF
@@ -72,8 +78,11 @@ cat >>tmp/conf/svhost.conf <<EOF
ErrorDocument 404 /public/notfound/
ErrorDocument 401 /public/notauth/
ErrorDocument 403 /public/notauth/
-ErrorDocument 500 /public/oops/
+ErrorDocument 400 /public/oops/
ErrorDocument 405 /public/oops/
+ErrorDocument 500 /public/oops/
+ErrorDocument 502 /public/oops/
+ErrorDocument 503 /public/oops/
EOF
@@ -89,6 +98,9 @@ SCAComposite server.composite
#SCAVirtualComposite app.composite
SCAVirtualContributor Composites
+# Configure SCA wiring timeout
+SCAWiringTimeout 10
+
EOF
# Configure resource aliases
@@ -101,14 +113,6 @@ Alias /proxy/public/config-min.js $here/public/config-min.js
EOF
-# Create app implementation resource links
-if [ ! -e "nuvem" ]; then
- ln -s "../../../nuvem/nuvem-parallel/nuvem" "nuvem"
-fi
-if [ ! -e "lib" ]; then
- ln -s "../../components" "lib"
-fi
-
# Configure app resource aliases
cat >>tmp/conf/svhost.conf <<EOF
# Generated by: start $*
@@ -118,6 +122,5 @@ AliasMatch /v/([^/]+)(.*)$ $here/htdocs/app\$2
EOF
# Start server
-#../../modules/http/httpd-loglevel-conf tmp debug
../../modules/http/httpd-start tmp
diff --git a/sca-cpp/trunk/hosting/server/stop b/sca-cpp/trunk/hosting/server/stop
index e1fd92705c..82ecd101ef 100755
--- a/sca-cpp/trunk/hosting/server/stop
+++ b/sca-cpp/trunk/hosting/server/stop
@@ -17,6 +17,7 @@
# specific language governing permissions and limitations
# under the License.
+../../modules/http/httpd-stop tmp/proxy
../../modules/http/httpd-stop tmp
../../components/cache/memcached-stop tmp 11211