blob: d50b4926403f353afa286f672b6c09931a539de6 [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="body">
<div id="viewcontent" class="viewcontent">
<div id="apps"></div>
<br/>
</div>
<script type="text/javascript">
(function searchbody() {
/**
* Setup page layout.
*/
(function layout() {
document.title = config.windowtitle() + ' - Apps';
if (!ui.isMobile())
$('viewcontent').className = 'viewcontent flatscrollbars';
$('viewhead').innerHTML = '<form id="searchForm">' +
'<span style="position: absolute; top: 0px; left: 2px; right: 70px; padding: 0px; background: transparent;"><input type="text" id="searchQuery" value="" class="flatentry" title="Search" autocapitalize="off" placeholder="Search for apps" style="position: absolute; left: 0px; top: 4px; width: 100%;"></span>' +
'<input type="submit" id="searchButton" title="Search" class="bluebutton search" style="position: absolute; top: 4px; right: 2px; width: 60px; background-position: center center; background-repeat: no-repeat; background-image: url(\'' + ui.b64png(appcache.get('/public/search.b64')) + '\');" value=" "/>' +
'</form>';
$('viewcontent').appendChild(ui.declareCSS(
'.ratings { ' +
'background: url(\'' + ui.b64png(appcache.get('/public/ratings.b64')) + '\'); ' +
'margin-top: 6px; width: 50px; height: 14px; display: inline-block; ' +
' }'));
})();
/**
* Get the requested search query.
*/
var query = ui.fragmentParams(location)['q'];
/**
* Initialize service references.
*/
var editorComp = sca.component("Editor");
var search = sca.reference(editorComp, "search");
var icons = sca.reference(editorComp, "icons");
/**
* Edit an app.
*/
function editapp(appname) {
return ui.navigate('/#view=page&app=' + appname, '_view');
}
/**
* View an app.
*/
function viewapp(appname) {
return ui.navigate('/#view=info&app=' + appname, '_view');
}
/**
* Get and display an app icon.
*/
function geticon(appname) {
if (isNull(appname))
return false;
return icons.get(appname, function(doc) {
// Stop now if we didn't get an icon
if (doc == null)
return false;
var iconentry = car(elementsToValues(atom.readATOMEntry(mklist(doc))));
var content = assoc("'content", iconentry);
var icon = assoc("'icon", content);
var img = assoc("'image", icon);
if (!isNull(img)) {
var appimg = $('search_app_img_' + appname);
if (!isNull(appimg))
appimg.src = cadr(img);
}
return true;
});
return true;
}
/**
* Get and display list of apps.
*/
function getapps(query) {
workingstatus(true);
showstatus('Searching');
function display(doc) {
// Stop now if we didn't get the apps
if (doc == null) {
errorstatus('Not available');
workingstatus(false);
return false;
}
var feed = car(elementsToValues(atom.readATOMFeed(mklist(doc))));
var aentries = assoc("'entry", feed);
var entries = isNull(aentries)? mklist() : isList(car(cadr(aentries)))? cadr(aentries) : mklist(cdr(aentries));
var defappimg = ui.b64png(appcache.get('/public/app.b64'));
var apps = '<div>';
var icons = mklist();
(function displayentries(entries) {
if (isNull(entries))
return apps;
var entry = car(entries);
var title = cadr(assoc("'title", entry))
var name = cadr(assoc("'id", entry));
var author = cadr(assoc("'author", entry));
var updated = xmldatetime(cadr(assoc("'updated", entry))).toLocaleDateString();
var aratings = assoc("'info", assoc("'content", entry));
var ar = assoc("'rating", aratings);
var ar1 = assoc("'rating1", aratings);
var ar2 = assoc("'rating2", aratings);
var ar3 = assoc("'rating3", aratings);
var ar4 = assoc("'rating4", aratings);
var rating = isNull(ar)? 0 : Number(cadr(ar));
var reviews = (isNull(ar1)? 0 : Number(cadr(ar1))) + (isNull(ar2)? 0 : Number(cadr(ar2))) + (isNull(ar3)? 0 : Number(cadr(ar3))) + (isNull(ar4)? 0 : Number(cadr(ar4)));
apps += '<div class="box">'
apps += '<div class="appicon">'
apps += ui.href('appicon_' + name, '/#view=info&app=' + name, '_view', '<img id="search_app_img_' + name + '" src="' + defappimg + '" width="50" height="50"></img>');
//apps += '<br/><input type="button" class="lightbutton" value="Run" onclick="ui.navigate(\'/' + name + '/\', \'_blank\');"/>';
apps += '</div>'
apps += '<div class="appdetails">';
apps += '<span class="apptitle">' + ui.href('search_app_title_' + name, '/#view=info&app=' + name, '_view', name) + '</span>';
apps += '<br/><span>' + 'by&nbsp;' + author.split('@')[0] + '</span>';
var ratingy = -20 * (4 - Math.floor(rating));
apps += '<br/><span class="ratings" style="background-position: 0px ' + ratingy + 'px;">&nbsp;</span>';
apps += '<br/><span style="font-size: 10px;">' + reviews + (reviews > 1? ' ratings' : ' rating') + '</span>';
/*apps += '<br/><span>' + updated + '</span>';*/
apps += '</div>';
apps += '</div>';
icons = cons(name, icons);
return displayentries(cdr(entries));
})(entries);
apps += '</div>';
$('apps').innerHTML = apps;
ui.unmemo$('search_app_');
(function displayicons(icons) {
if (isNull(icons))
return true;
geticon(car(icons));
return displayicons(cdr(icons));
})(reverse(icons));
onlinestatus();
workingstatus(false);
}
return search.get('?q=' + query, display);
}
/**
* Handle search form submit.
*/
$('searchForm').onsubmit = function() {
if ($('searchQuery').value.trim() == '')
return false;
if (ui.isMobile())
$('searchQuery').blur();
//getapps($('searchQuery').value.trim());
ui.navigate('/#view=search&q=' + $('searchQuery').value.trim(), '_view');
return false;
};
if(query && query != '') {
$('searchQuery').value = query;
getapps(query);
}
})();
</script>
</div>