| <!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="bodydiv"> |
| |
| <table style="width: 100%;"> |
| <tr> |
| <td><h2><span id="h1"></span><span id="userNameHeader"></span></h2></td> |
| <td style="vertical-align: middle; text-align: right;"><span id="saveStatus" style="font-weight: bold; color: #808080;">Saved</span></td> |
| </tr> |
| </table> |
| |
| <table style="width: 100%;"> |
| <tr> |
| <th class="thl thr" style="padding-top: 4px; padding-bottom: 4px; padding-left: 2px; padding-right: 2px; ">Account</th> |
| </tr> |
| </table> |
| |
| <form id="userForm"> |
| <table style="width: 100%;"> |
| <tr><tr><td><b>Photo:</b></td></tr> |
| <tr><td><img id="userimg" style="width: 50px; height: 50px; vertical-align: top;"></td></tr> |
| <tr><tr><td style="padding-top: 6px;"><b>Name:</b></td></tr> |
| <tr><td><input type="text" id="userTitle" size="30" placeholder="Enter your name" style="width: 300px;"/></td></tr> |
| <tr><tr><td style="padding-top: 6px;"><b>Description:</b></td></tr> |
| <tr><td><textarea id="userDescription" cols="40" rows="3" placeholder="Enter a short description of yourself" style="width: 300px;"></textarea></td></tr> |
| </table> |
| |
| <br/> |
| <table style="width: 100%;"> |
| <tr> |
| <th class="thl thr" style="padding-top: 4px; padding-bottom: 4px; padding-left: 2px; padding-right: 2px; ">Calendar</th> |
| </tr> |
| </table> |
| |
| <table> |
| <tr><td style="padding-right: 2px;"><input type="text" id="sched1" size="10" placeholder="Schedule" style="width: 80px;"/></td><td><input type="text" id="service1" size="2048" placeholder="Service URL" style="width: 200px;"/></td></tr> |
| <tr><td style="padding-right: 2px;"><input type="text" id="sched2" size="10" placeholder="Schedule" style="width: 80px;"/></td><td><input type="text" id="service2" size="2048" placeholder="Service URL" style="width: 200px;"/></td></tr> |
| <tr><td style="padding-right: 2px;"><input type="text" id="sched3" size="10" placeholder="Schedule" style="width: 80px;"/></td><td><input type="text" id="service3" size="2048" placeholder="Service URL" style="width: 200px;"/></td></tr> |
| <tr><td style="padding-right: 2px;"><input type="text" id="sched4" size="10" placeholder="Schedule" style="width: 80px;"/></td><td><input type="text" id="service4" size="2048" placeholder="Service URL" style="width: 200px;"/></td></tr> |
| <tr><td style="padding-right: 2px;"><input type="text" id="sched5" size="10" placeholder="Schedule" style="width: 80px;"/></td><td><input type="text" id="service5" size="2048" placeholder="Service URL" style="width: 200px;"/></td></tr> |
| </table> |
| <br/> |
| |
| <table style="width: 100%;"> |
| <tr> |
| <th class="thl thr" style="padding-top: 4px; padding-bottom: 4px; padding-left: 2px; padding-right: 2px; ">Key chain</th> |
| </tr> |
| </table> |
| |
| <table> |
| <tr><td style="padding-right: 2px;"><input type="text" id="name1" size="10" placeholder="Key name" style="width: 80px;"/></td><td><input type="text" id="value1" size="2048" placeholder="Key value" style="width: 200px;"/></td></tr> |
| <tr><td style="padding-right: 2px;"><input type="text" id="name2" size="10" placeholder="Key name" style="width: 80px;"/></td><td><input type="text" id="value2" size="2048" placeholder="Key value" style="width: 200px;"/></td></tr> |
| <tr><td style="padding-right: 2px;"><input type="text" id="name3" size="10" placeholder="Key name" style="width: 80px;"/></td><td><input type="text" id="value3" size="2048" placeholder="Key value" style="width: 200px;"/></td></tr> |
| <tr><td style="padding-right: 2px;"><input type="text" id="name4" size="10" placeholder="Key name" style="width: 80px;"/></td><td><input type="text" id="value4" size="2048" placeholder="Key value" style="width: 200px;"/></td></tr> |
| <tr><td style="padding-right: 2px;"><input type="text" id="name5" size="10" placeholder="Key name" style="width: 80px;"/></td><td><input type="text" id="value5" size="2048" placeholder="Key value" style="width: 200px;"/></td></tr> |
| <tr><td style="padding-right: 2px;"><input type="text" id="name6" size="10" placeholder="Key name" style="width: 80px;"/></td><td><input type="text" id="value6" size="2048" placeholder="Key value" style="width: 200px;"/></td></tr> |
| <tr><td style="padding-right: 2px;"><input type="text" id="name7" size="10" placeholder="Key name" style="width: 80px;"/></td><td><input type="text" id="value7" size="2048" placeholder="Key value" style="width: 200px;"/></td></tr> |
| <tr><td style="padding-right: 2px;"><input type="text" id="name8" size="10" placeholder="Key name" style="width: 80px;"/></td><td><input type="text" id="value8" size="2048" placeholder="Key value" style="width: 200px;"/></td></tr> |
| <tr><td style="padding-right: 2px;"><input type="text" id="name9" size="10" placeholder="Key name" style="width: 80px;"/></td><td><input type="text" id="value9" size="2048" placeholder="Key value" style="width: 200px;"/></td></tr> |
| <tr><td style="padding-right: 2px;"><input type="text" id="name10" size="10" placeholder="Key name" style="width: 80px;"/></td><td><input type="text" id="value10" size="2048" placeholder="Key value" style="width: 200px;"/></td></tr> |
| </table> |
| </form> |
| |
| <script type="text/javascript"> |
| |
| // Init service references |
| var editWidget = sca.component("EditWidget"); |
| var user= sca.defun(sca.reference(editWidget, "user"), "id"); |
| var accounts = sca.reference(editWidget, "accounts"); |
| |
| // Set page titles |
| document.title = ui.windowtitle(location.hostname) + ' - Account'; |
| |
| // Set images |
| $('userimg').src = ui.b64img(appcache.get('/public/user.b64')); |
| |
| /** |
| * The current account entry and corresponding saved XML content. |
| */ |
| var username; |
| var accountentry; |
| var savedaccountentryxml = ''; |
| |
| /** |
| * Get and display the user's account. |
| */ |
| function getaccount(name) { |
| return accounts.get(name, function(doc) { |
| |
| // Stop now if we didn't get an account |
| if (doc == null) |
| return false; |
| |
| accountentry = doc != null? car(elementsToValues(atom.readATOMEntry(mklist(doc)))) : mklist("'entry", mklist("'title", ''), mklist("'id", name)); |
| username = cadr(assoc("'id", cdr(accountentry))); |
| var title = cadr(assoc("'title", cdr(accountentry))); |
| $('userNameHeader').innerHTML = username; |
| $('userTitle').value = title; |
| |
| var content = cadr(assoc("'content", cdr(accountentry))); |
| var acct = isNil(content)? mklist() : cdr(content); |
| |
| var desc = assoc("'description", acct); |
| $('userDescription').innerHTML = isNil(desc) || isNil(cdr(desc))? '' : cadr(desc); |
| |
| var cal = assoc("'calendar", acct); |
| reduce(function(i, evt) { |
| var sched = assoc("'@schedule", evt); |
| var svc = assoc("'@service", evt); |
| $('sched' + i).value = isNil(sched)? '' : cadr(sched); |
| $('service' + i).value = isNil(svc)? '' : cadr(svc); |
| return i + 1; |
| }, 1, isNil(cal)? mklist() : cadr(cadr(cal))); |
| |
| var keys = assoc("'keys", acct); |
| reduce(function(i, key) { |
| var kn = assoc("'@name", key); |
| var kv = assoc("'@value", key); |
| $('name' + i).value = isNil(kn)? '' : cadr(kn); |
| $('value' + i).value = isNil(kv)? '' : cadr(kv); |
| return i + 1; |
| }, 1, isNil(keys)? mklist() : cadr(cadr(keys))); |
| |
| savedaccountentryxml = car(atom.writeATOMEntry(valuesToElements(mklist(accountentry)))); |
| return true; |
| }); |
| } |
| |
| /** |
| * Save the user's account. |
| */ |
| function save(entryxml) { |
| if (isNil(username)) |
| return false; |
| $('saveStatus').innerHTML = 'Saving'; |
| savedaccountentryxml = entryxml; |
| accounts.put(username, savedaccountentryxml, function(e) { |
| if (!e) |
| $('saveStatus').innerHTML = 'Saved'; |
| }); |
| return true; |
| } |
| |
| /** |
| * Handle a change event |
| */ |
| function onaccountchange() { |
| var title = $('userTitle').value; |
| var desc = $('userDescription').value; |
| var cal = map(function(i) { |
| var sched = $('sched' + i).value; |
| var svc = $('service' + i).value; |
| return mklist("'event", mklist("'@schedule", sched), mklist("'@service", svc)); |
| }, range(1, 6)); |
| var keys = map(function(i) { |
| var kn = $('name' + i).value; |
| var kv = $('value' + i).value; |
| return mklist("'key", mklist("'@name", kn), mklist("'@value", kv)); |
| }, range(1, 11)); |
| |
| var accountentry = mklist("'entry", mklist("'title", title != ''? title : username), mklist("'id", username), |
| mklist("'content", mklist("'account", mklist("'description", desc), cons("'keys", keys), cons("'calendar", cal)))); |
| var entryxml = car(atom.writeATOMEntry(valuesToElements(mklist(accountentry)))); |
| if (savedaccountentryxml == entryxml) |
| return false; |
| |
| $('saveStatus').innerHTML = 'Modified'; |
| return save(entryxml); |
| } |
| |
| $('userTitle').onchange = onaccountchange; |
| $('userDescription').onchange = onaccountchange; |
| map(function(i) { |
| $('sched' + i).onchange = onaccountchange; |
| $('service' + i).onchange = onaccountchange; |
| return true; |
| }, range(1, 6)); |
| map(function(i) { |
| $('name' + i).onchange = onaccountchange; |
| $('value' + i).onchange = onaccountchange; |
| return true; |
| }, range(1, 11)); |
| |
| /** |
| * Handle a form submit event. |
| */ |
| $('userForm').onsubmit = function() { |
| onaccountchange(); |
| return false; |
| }; |
| |
| // Get the user's account |
| getaccount(); |
| |
| </script> |
| |
| </div> |