| <!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="createAppForm"> |
| <table style="width: 100%;"> |
| <tr><td class="label">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="createAppOKButton" type="submit" class="bluebutton" style="font-weight: bold;" value="Create" title="Create the app"/> |
| <input id="createAppCancelButton" type="button" class="graybutton" value="Cancel"/> |
| </td></tr> |
| </table> |
| </form> |
| <br/> |
| |
| </div> |
| |
| <script type="text/javascript"> |
| (function createbody() { |
| |
| /** |
| * Setup page layout. |
| */ |
| (function layout() { |
| document.title = config.windowtitle() + ' - New App'; |
| $('viewhead').innerHTML = '<span class="smenu">New App</span>'; |
| if (!ui.isMobile()) |
| $('viewform').className = 'viewform flatscrollbars'; |
| $('hostname').innerHTML = window.location.hostname + '/'; |
| })(); |
| |
| /** |
| * 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 = ''; |
| |
| /** |
| * 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) { |
| alert('name taken'); |
| 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; |
| } |
| |
| /** |
| * Create an app. |
| */ |
| $('createAppForm').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 can only use numbers and letters'); |
| 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)))) { |
| alert('invalid name'); |
| errorstatus('App name is taken, please pick another name'); |
| return false; |
| } |
| |
| // Clone the 'new' app template |
| showstatus('Modified'); |
| appentry = mklist("'entry", mklist("'title", name), mklist("'id", 'new'), mklist("'author", username)); |
| var entryxml = car(atom.writeATOMEntry(valuesToElements(mklist(appentry)))); |
| return saveapp(name, entryxml); |
| }; |
| |
| /** |
| * Cancel creating an app. |
| */ |
| ui.onclick($('createAppCancelButton'), function(e) { |
| history.back(); |
| }); |
| |
| /** |
| * Show the status. |
| */ |
| onlinestatus(); |
| |
| })(); |
| </script> |
| |
| </div> |