diff options
author | V.Krishn <vkrishn4@gmail.com> | 2016-07-12 03:50:11 +0530 |
---|---|---|
committer | V.Krishn <vkrishn4@gmail.com> | 2016-07-12 03:50:11 +0530 |
commit | b4d7161963a4370604aa1e7abc92dec00a5d1826 (patch) | |
tree | a7befaff98d6461aa41ee0b213c446429b8ef319 | |
parent | 6859dc5cfbb0b2ea9f49cf518d00dd816afa0d42 (diff) | |
download | aports-ui-master.tar.bz2 |
-rw-r--r-- | flagged.html | 42 | ||||
-rw-r--r-- | public/js/aports.api.js | 32 | ||||
-rw-r--r-- | public/js/aports.flagged.js | 187 |
3 files changed, 248 insertions, 13 deletions
diff --git a/flagged.html b/flagged.html new file mode 100644 index 0000000..3f1b6f7 --- /dev/null +++ b/flagged.html @@ -0,0 +1,42 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> + <title>Alpine Linux aports viewer</title> + <link rel="stylesheet" href="public/lib/bootstrap/3.3.5/css/bootstrap.min.css"> + <link rel="stylesheet" href="public/css/aports.api.css"> + </head> + <body> + <div class="container"> + <div class="page-header"><h3><a href='flagged.html'>Search for packages</a></h3></div> + + <div class="panel-body"> + <form class="form-inline" role="form" id="search"> + <div class="form-group"> + <div class="input-group"> + <input type="text" class="form-control" id="origin" name="origin" value="" placeholder="Origin" autofocus> + <span data-toggle="tooltip" class="input-group-addon cursor-pointer" title="Use _ as wildcards">?</span> + </div> + </div> + + </form> + </div> + </div> + + <!-- jQuery (necessary for Bootstrap's JavaScript plugins) --> + <script src="public/lib/jquery/1.11.3/jquery.min.js"></script> + <!-- Latest compiled and minified JavaScript --> + <script src="public/lib/bootstrap/3.3.5/js/bootstrap.min.js"></script> + + <script src="public/lib/util/urlparser.js"></script> + <script src="public/lib/util/dt/date.format.js"></script> + <script src="public/lib/twbs-pagination/1.2.5/jquery.twbsPagination.min.js"></script> + + <script src="public/js/aports.api.js"></script> + <script src="public/js/aports.flagged.js"></script> + + </body> +</html> diff --git a/public/js/aports.api.js b/public/js/aports.api.js index 3d17750..c0bc01d 100644 --- a/public/js/aports.api.js +++ b/public/js/aports.api.js @@ -26,7 +26,13 @@ contents = {}; contents.tblHdrs = ['File', 'Package', 'Branch', 'Repository', 'Architecture']; contents.fields = ['file', 'package', 'branch', 'repo', 'arch']; contents.class = 'contents'; + flagged = {}; +flagged.tblHdrs = ['Origin', 'Version', 'New version', 'Branch', 'Repository', + 'Maintainer', 'Flag date', 'Message']; +flagged.fields = ['origin', 'version', 'new_version', + 'branch', 'repo', 'maintainer', 'flag_date', 'message']; +flagged.class = 'flagged'; meta = {}; meta.stats = ['count', 'total-pages', 'per-page', 'total-count', @@ -34,7 +40,7 @@ meta.stats = ['count', 'total-pages', 'per-page', 'total-count', link = {}; link.fields = ['self', 'first', 'next', 'last']; -app = {} +app = {}; app.urlDef = config.api.baseurl+'/packages'; app.resource = app.resDef = '/search/packages'; app.url = (window.location).toString().split(/\?/) @@ -43,12 +49,12 @@ if(app.url.length > 1) { app.res_ = app.url[1].split(/\&/); app.resource = (app.url[1][0] == '/') ? app.res_[0] : app.resDef; if((app.url[1][0] == '/')) app.res_.shift(); -} +}; app.query = (app.res_ && app.res_.length > 0) ? ''+app.res_.join('&') : ''; for (a in config.api.resources) { if(config.api.resources[a] == app.resource) { break; } -} -temp = {} +}; +temp = {}; asyncReq = function(url, callback, callback2) { var request = $.ajax({ @@ -63,7 +69,7 @@ temp = {} success: callback2 }); return request; - } + }; fmtData = function(data, field, type) { if(data[field] == null) return ''; @@ -92,16 +98,16 @@ temp = {} var url_ = app.baseurl + '?' + buildReq(u_, v_, packages.fields); return makeElm( 'a', data[field], {'title':'', 'href':url_} ) } - } + }; if('meta' == type) { - } + }; if('links' == type) { var text = field; //if ('last' == field) { text = '>>' } //if ('next' == field) { text = '>' } //if ('first' == field) { text = '<<' } return '<a title="'+'" href="'+data[field]+'">'+text+'</a>' - } + }; return data[field]; }; @@ -125,7 +131,7 @@ temp = {} } }); }, 600); - } + }; makeTblRow = function(data, fields, cls, elm, elmWrap) { var items = []; @@ -136,7 +142,7 @@ temp = {} val = fields[n]; } if(elm) items.push(makeElm(elm, val, {})); - } + }; var val = "\n"+items.join( "\n" ); if(elmWrap != '') return makeElm( elmWrap, val, {'class':cls} ); return val; @@ -166,7 +172,7 @@ temp = {} var req_ = items.join("&"); url_ = (url_) ? url_+'&' : ''; return url_+req_; - } + }; fmtDate = function(epoch, fmt) { fmt = fmt ? fmt : "ddd, mmm dS, yyyy, h:MM TT"; @@ -179,7 +185,7 @@ temp = {} titleCase = function(string) { if(string) return string.charAt(0).toUpperCase() + string.slice(1); - } + }; // converted function cntrl:humanBytes(bytes) found here // https://github.com/clandmeter/aports-turbo/blob/master/controller.lua @@ -190,7 +196,7 @@ temp = {} var result = bytes/Math.pow(1024, factor); var r = Math.floor(result * mult + 0.5) / mult; return r.toString()+' ' + size[factor]; - } + }; /*]]>*/ diff --git a/public/js/aports.flagged.js b/public/js/aports.flagged.js new file mode 100644 index 0000000..0f623f3 --- /dev/null +++ b/public/js/aports.flagged.js @@ -0,0 +1,187 @@ +/*<![CDATA[*/ + +/** + * Copyright (c) 2016 V.Krishn (vkrishn@insteps.net) + * + * This file is part of "Aports UI"; + * ---- + * + * + */ + + fmtData = function(data, field, type) { + if(data[field] == null) return ''; + if('data' == type) { + if('version' == field) { + return makeElm( 'span', data[field], {'class': 'version text-danger'} ); + } + if('maintainer' == field) { return data[field].split(/\</)[0] } + if('origin' == field) { + var u_ = ['']; + var v_ = { 'name': data[field], 'branch': data['branch'], + 'arch': data['arch'], 'repo': data['repo'] }; + var url_ = app.baseurl.replace(/flagged/, 'packages') + + '?' + buildReq(u_, v_, packages.fields); + return makeElm( 'a', data[field], {'title':'', 'href':url_} ) + } + if('flag_date' == field) { return fmtDate(data[field], "yyyy-mm-dd HH:MM:ss") } + if('message' == field) { // TODO + var f_ = data['fid']; + var m_ = data['message_']; + var s_ = makeElm( 'span', '', {'class': 'glyphicon glyphicon-comment'} ); + var s_ = makeElm( 'a', s_, {'title':'Message', 'href':'#', 'class': 'text-muted'} ); + return s_; + } + + + }; + if('included' == type) { + }; + return data[field]; + }; + + set_flagged = function(data) { + var included = []; + $.each( data.included, function( key, val ) { + included[val.id] = val['attributes']; + }); + + //----- data.data ----- + var items = []; var fids = []; + var h = makeTblRow('', flagged.tblHdrs, 'data', 'th', 'tr'); + $.each( data.data, function( key, val ) { + var fid = val['attributes'].fid; + var incs = included[fid]; + val['attributes'].new_version = incs.new_version; + val['attributes'].flag_date = incs.created; + val['attributes'].message = '**'; + val['attributes'].message_ = incs.message; + items.push(makeTblRow(val['attributes'], flagged.fields, 'data', 'td', 'tr')); + //if(val['attributes'].fid) fids[val['attributes'].fid] = ''; + }); +/* + //set flagged items data + var fids_ = []; for(a in fids) { fids_.push(a); } + url_ = config.api.baseurl+'/flagged/fid/'+fids_.join(','); + asyncReq(url_, 'callback', set_flagged_by_fids); +*/ + var tbl = "\n" + h + "\n" + items.join( "\n" ); + $( "<table/>", { + "id": "flagged", + "class": "flagged packages sortable", + //"class": "table table-striped table-bordered table-condensed", + html: tbl + }).appendTo( "body .container" ); + //setTimeout(function() { sortables_init(); }, 1600); +// flagged_ = document.getElementById('flagged'); +// flagged_.onmouseover = flaggedOver; + + //----- data.links ----- + var links = []; + links.push( makeTblRow(data.links, link.fields, 'links', 'td', 'tr') ); + var tbl = links.join( "\n" ); + $( "<div/>", { + "id": "api-active-pager", + "class": "packages flagged page-pager", + html: "\n" + }).appendTo( "body .container" ); + makePgn(data); + + //----- data.meta ----- + var stats = []; + var h = makeTblRow('', meta.stats, 'meta', 'th', 'tr'); + stats.push( makeTblRow(data.meta, meta.stats, 'meta', 'td', 'tr') ); + var tbl = "\n" + h + "\n" + stats.join( "\n" ); + $( "<table/>", { + "class": "packages flagged meta", + html: tbl + }).appendTo( "body .container" ); + + //----- data.meta.search ----- + var stats = []; var f = []; + for (a in data.meta.search) f.push(a); + var h = makeTblRow('', f, 'meta', 'th', 'tr'); + stats.push( makeTblRow(data.meta.search, f, 'meta', 'td', 'tr') ); + var tbl = "\n" + h + "\n" + stats.join( "\n" ); + $( "<table/>", { + "class": "packages flagged meta-search", + html: tbl + }).appendTo( "body .container" ); + + }; +/* + set_flagged_by_fids = function(data) { + //----- data.data ----- + flagged.onpage = []; + $.each( data.data, function( key, val ) { + if(val.id) flagged.onpage[val.id] = fmtDate(val['attributes'].created, "yyyy-mm-dd HH:MM:ss"); + }); + }; +*/ + flaggedOver = function(e) { + e.preventDefault(); obj = e.target; + if(obj.tagName != 'A') return; + if( ! $(obj).hasClass('text-danger') ) return; + var fid = parseInt((/[\d]+$/i).exec(obj.className)); + obj.title = 'Flagged: '+flagged.onpage[fid]; + } + + set_categories = function(data) { + //----- data.data ----- + var items = []; + items.push(makeElm('option', '', {}) ); + $.each( data.data.branch, function( key, val ) { + items.push(makeElm('option', val, {}) ); + }); + var opt1 = (makeElm('select', items.join( "\n" ), { + 'name':'branch', 'data-placeholder':'Branch', + 'class':'form-control chosen-select', 'id':'branch' + })); + var items = []; + items.push(makeElm('option', '', {}) ); + $.each( data.data.repo, function( key, val ) { + items.push(makeElm('option', val, {}) ); + }); + var opt2 = (makeElm('select', items.join( "\n" ), { + 'name':'repo', 'data-placeholder':'Repository', + 'class':'form-control chosen-select', 'id':'repo' + })); + attr = {'class': 'form-group'} + var html = "\n"+(makeElm('div', opt1, attr)) + +"\n"+(makeElm('div', opt2, attr)) + $( html ).appendTo( "body #search" ); + }; + + set_maintainer_names = function(data) { + //----- data.data ----- + var items = []; + items.push(makeElm('option', '', {}) ); + $.each( data.data, function( key, val ) { + items.push( makeTblRow(val['attributes'], ['name'], 'data', 'option', '') ); + }); + var opt4 = (makeElm('select', items.join( "\n" ), { + 'name':'maintainer', 'data-placeholder':'Branch', + 'class':'form-control chosen-select', 'id':'maintainer' + })); + var btn = (makeElm('button', 'Search', { + 'type':'submit', 'class':'btn btn-primary' + })); + attr = {'class': 'form-group'}; + var html = "\n"+(makeElm('div', opt4, attr))+"\n"+btn; + $( html ).appendTo( "body #search" ); + }; + + query = (app.query) ? '&'+app.query : ''; + url = config.api.baseurl+'/packages/flagged'+''+query; + asyncReq(url, 'callback', set_flagged); + + url = config.api.baseurl+'/categories'; + asyncReq(url, 'callback', set_categories); + + url = config.api.baseurl+'/maintainer/names'; + asyncReq(url, 'callback', set_maintainer_names); + + +/*]]>*/ + + |