
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@1444660 13f79535-47bb-0310-9956-ffa450edef68
174 lines
5.2 KiB
HTML
174 lines
5.2 KiB
HTML
<!DOCTYPE html>
|
|
<!--
|
|
* Licensed to the Apache Software Foundation (ASF) under one
|
|
* or more contributor license agreements. See the NOTICE file
|
|
* distributed with this work for additional information
|
|
* regarding copyright ownership. The ASF licenses this file
|
|
* to you under the Apache License, Version 2.0 (the
|
|
* "License"); you may not use this file except in compliance
|
|
* with the License. You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing,
|
|
* software distributed under the License is distributed on an
|
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
* KIND, either express or implied. See the License for the
|
|
* specific language governing permissions and limitations
|
|
* under the License.
|
|
-->
|
|
<div id="bodydiv" class="body">
|
|
|
|
<div id="viewform" class="viewform">
|
|
|
|
<form id="cloneAppForm">
|
|
<table style="width: 100%;">
|
|
<tr><td class="label">New URL:</td></tr>
|
|
<tr><td><span id="hostname" class="readentry"></span><input type="text" id="appName" class="flatentry" size="18" autocapitalize="off" placeholder="New app name"/></td></tr>
|
|
<tr><td style="padding-top: 20px;">
|
|
<input id="cloneAppOKButton" type="submit" class="bluebutton" style="font-weight: bold;" value="Clone" title="Clone this app"/>
|
|
<input id="cloneAppCancelButton" type="button" class="graybutton" value="Cancel"/>
|
|
</td></tr>
|
|
</table>
|
|
</form>
|
|
<br/>
|
|
|
|
</div>
|
|
|
|
<script type="text/javascript">
|
|
(function clonebody() {
|
|
|
|
/**
|
|
* Get the app name.
|
|
*/
|
|
var appname = ui.fragmentParams(location)['app'];
|
|
|
|
/**
|
|
* Setup page layout.
|
|
*/
|
|
(function layout() {
|
|
document.title = config.windowtitle() + ' - ' + config.clone() + ' - ' + appname;
|
|
$('viewhead').innerHTML = '<span class="smenu">' + config.clone() + ' ' + appname + '</span>';
|
|
if (!ui.isMobile())
|
|
$('viewform').className = 'viewform flatscrollbars';
|
|
$('hostname').innerHTML = window.location.hostname + '/';
|
|
$('cloneAppOKButton').value = config.clone();
|
|
$('cloneAppOKButton').title = config.clone() + ' this app';
|
|
})();
|
|
|
|
/**
|
|
* Initialize service references.
|
|
*/
|
|
var editorComp = sca.component("Editor");
|
|
var apps = sca.reference(editorComp, "apps");
|
|
|
|
/**
|
|
* The current app entry and corresponding saved XML content.
|
|
*/
|
|
var appentry;
|
|
var savedappxml = '';
|
|
|
|
/**
|
|
* Get and display the requested app.
|
|
*/
|
|
(function getapp() {
|
|
if (isNull(appname))
|
|
return false;
|
|
workingstatus(true);
|
|
showstatus('Loading');
|
|
|
|
return apps.get(appname, function(doc) {
|
|
|
|
// Stop now if we didn't get the app
|
|
if (doc == null) {
|
|
errorstatus('Couldn\'t get the app info');
|
|
workingstatus(false);
|
|
return false;
|
|
}
|
|
|
|
appentry = doc != null? car(elementsToValues(atom.readATOMEntry(mklist(doc)))) : mklist("'entry", mklist("'title", ''), mklist("'id", appname));
|
|
var content = cadr(assoc("'content", appentry));
|
|
savedappxml = car(atom.writeATOMEntry(valuesToElements(mklist(appentry))));
|
|
|
|
onlinestatus();
|
|
workingstatus(false);
|
|
return true;
|
|
});
|
|
})();
|
|
|
|
/**
|
|
* Save an app.
|
|
*/
|
|
function saveapp(name, entryxml) {
|
|
workingstatus(true);
|
|
showstatus('Saving');
|
|
|
|
savedappxml = entryxml;
|
|
apps.put(name, savedappxml, function(e) {
|
|
if (e) {
|
|
if (e.code && e.code == 404) {
|
|
errorstatus('App name is taken, please pick another name');
|
|
workingstatus(false);
|
|
return false;
|
|
}
|
|
showstatus('Local copy');
|
|
workingstatus(false);
|
|
return false;
|
|
}
|
|
showstatus('Saved');
|
|
workingstatus(false);
|
|
|
|
// Open the app in the page editor
|
|
ui.navigate('/#view=info&app=' + name, '_view');
|
|
return false;
|
|
});
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Clone an app.
|
|
*/
|
|
$('cloneAppForm').onsubmit = function() {
|
|
|
|
// Validate app name
|
|
var name = $('appName').value;
|
|
if (name.length < 3 || name.length > 10) {
|
|
errorstatus('App name must be between 3 and 10 characters');
|
|
return false;
|
|
}
|
|
name = name.toLowerCase();
|
|
var anum = name.split('').reduce(function(p, c, i, a) { return p && ((c >= 'a' && c <= 'z') || (c >= '0' && c<= '9')); }, true);
|
|
if (!anum) {
|
|
errorstatus('App name is taken, please pick another name');
|
|
return false;
|
|
}
|
|
if (name.charAt(0) < 'a' || name.charAt(0) > 'z') {
|
|
errorstatus('App name must start with a letter');
|
|
return false;
|
|
}
|
|
|
|
// Check reserved app names
|
|
var reserved = mklist('account', 'app', 'cache', 'clone', 'create', 'delete', 'graph', 'home', 'login', 'new', 'page', 'proxy', 'public', 'private', 'info', 'store');
|
|
if (!isNull(assoc(name, map(function(r) { return mklist(r, r); }, reserved)))) {
|
|
errorstatus('App name is taken, please pick another name');
|
|
return false;
|
|
}
|
|
|
|
// Clone the app
|
|
showstatus('Modified');
|
|
appentry = mklist("'entry", mklist("'title", name), mklist("'id", appname), mklist("'author", username));
|
|
var entryxml = car(atom.writeATOMEntry(valuesToElements(mklist(appentry))));
|
|
return saveapp(name, entryxml);
|
|
};
|
|
|
|
/**
|
|
* Cancel cloning an app.
|
|
*/
|
|
ui.onclick($('cloneAppCancelButton'), function(e) {
|
|
history.back();
|
|
});
|
|
|
|
})();
|
|
</script>
|
|
|
|
</div>
|