blob: 7fef6c1d134616bcef900fe4543a643edf40bff1 [file] [log] [blame]
<!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>