views/util.pug (168 lines of code) (raw):

mixin hyperlevel(obj, name) - var value = obj[name]; span.nobr.icn(class="l" + value.charAt(0),title=value) = value mixin hyperscopes(obj, name) - var value = obj[name]; each s in value span.icn(class=s.Resolution,class=s.State,class=s['Resolution-Reason']?s['Resolution-Reason'].replace(/\s/g,''):null, title=[s['Planned-Release'],s.State,s.Resolution,s['Resolution-Reason']].join(' - ')) = s['Planned-Release'] span.extra | = s.Resolution ? s.Resolution : s.State if s['Resolution-Reason'] | = s['Resolution-Reason'] mixin iconCVSS(obj,name) if obj - var vect=["accessVector","accessComplexity", "authentication","attackVector","attackComplexity","privilegesRequired","userInteraction","scope","confidentialityImpact","integrityImpact","availabilityImpact"] each v in vect if obj[v] b.icn.lbl(class=obj[v],for=v,title=v + ': ' + obj[v])=obj[v][0] mixin hyperCVSS(obj,name) - var value = obj[name] - var s = parseFloat(value) if isNaN(s) || s<0 || s>10 =value else if s == 0 b.rnd.tag-s.NONE=value else if value <= 3.9 b.rnd.tag-s.LOW=value else if value <= 6.9 b.rnd.tag-s.MEDIUM=value else if value <= 8.9 b.rnd.tag-s.HIGH= value else if value <=10 b.rnd.tag-s.CRITICAL=value else =value mixin hypersize(obj, name) if(obj[name]) = (function(a,b,c,d,e){return (b=Math,c=b.log,d=1024,e=c(a)/c(d)|0,a/b.pow(d,e)).toFixed(2)+' '+(e?'KMGTPEZY'[--e]+'B':'Bytes')})(obj[name]) mixin hyperdate(obj, name) - var v = false; - var value = obj[name]; - if (value instanceof Date) { v = value;} else { - var timestamp = Date.parse(value); - v = isNaN(timestamp) ? false : new Date(timestamp) - } if v - var nowt = Date.now(); - var vtime = v.getTime(); - var delta = nowt-vtime; - var hidet = ''; - if (Math.abs(delta) > 43000000) { hidet = 'hid';} - var cl = "date y"+ (nowt > vtime ? Math.floor(Math.log2((delta/31536000000)+1)*2) : 'f tag-s'); span.nobr(class=cl, title=v.toString()) = v.toISOString().slice(0,10) span.nobr(class=hidet) | = v.toLocaleTimeString("de-US", {hour:"2-digit", minute:"2-digit"}) else = obj[name] mixin hyperLink(value, url, mid, suffix, target, cls, onclick) a(class=cls,href=(url?url:'') + encodeURIComponent(mid) + (suffix ? suffix : ''),target=target,onclick=onclick)=value mixin hyperVal(obj, name) - var value = (obj !== Object(obj) || Array.isArray(obj))? obj : obj[name]; if value instanceof Date || name == 'date' || name == 'updatedAt' || name == 'createdAt' +hyperdate(obj, name) else case name when 'size' +hypersize(obj, name) when 'level' +hyperlevel(obj, name) when 'CVSS' +hyperCVSS(obj, name) when 'scopes' +hyperscopes(obj, name) default if fields && fields[name] - var cls = fields[name].class ? fields[name].class : ''; - var onlick = fields[name].onclick ? fields[name].onclick : false; if fields[name].xref && fields[name].xref.class - cls = cls + obj[fields[name].xref.class] if Array.isArray(fields[name].links) && (value != '') each hv, hi in fields[name].links +hyperLink(value,hv.href,value,hv.hrefSuffix,hv.target ? hv.target: (hv.href && hv.href.startsWith('http')?"_blank":false),hv.class,hv.onclick) else if fields[name].href != undefined - var href = fields[name].href; - var hrefSuffix = fields[name].hrefSuffix; - var target = (fields[name].target ? fields[name].target : (href && href.startsWith('http')?"_blank":false)) if fields[name].xref && fields[name].xref.href //- href = href + obj[fields[name].xref.href] + (hrefSuffix? hrefSuffix:''); +hyperLink(value,href,obj[fields[name].xref.href],hrefSuffix,target,cls,onclick) //-a(target=target class=cls href=href onclick=onclick)=value else if Array.isArray(value) each v, i in value +hyperVal(v,name) //- ahref = href+v; //- a(target=(ahref.startsWith('http')?"_blank":false) class=cls, href=ahref)=v | else //- href = href+(value ? value : '')+ (hrefSuffix? hrefSuffix:''); +hyperLink(value,href, value, hrefSuffix,target,cls,onclick) //a(target=target class=cls href=href onclick=onclick)=value else if Array.isArray(value) each v, i in value +hyperVal(v, name) | else if (typeof value === 'string') && value.match(/^[a-zA-Z0-9\-_]{1,30}$/) || typeof value === 'boolean' if(fields[name].icons && fields[name].icons[value]) - cls = (cls ? cls + ' ' : '')+ 'vgi-'+fields[name].icons[value] else - cls = (cls ? cls + ' ' : '')+ value span(class=cls title=value onclick=onlick)=value else =value mixin table(docs, columns, showCheckboxes, id) - tTime = new Date() if !docs || docs.length == 0 p b No items found! else table.tbl.wht.sortable(id=id) if fields colgroup if showCheckboxes col each column in columns col(class=fields[column]? fields[column].class:'') thead.hig tr if showCheckboxes th(data-sort-method='none') input(type='checkbox',onClick='var cs = document.getElementsByClassName("rowCheck");for(c=0;c<cs.length;c++){cs[c].checked=this.checked}') each column in columns if pages > 1 th.sortth.nobr.pointer label.block.pointer(for='sort'+column,class=(query ? (query['sort'] == column ? 'sortup': (query['sort'] == "-" + column ? 'sortdown' : '')): null))=column else case column when 'CVSS' th.pointer(data-sort-method='number') CVSS default th=column tbody each doc, i in docs - rowCount ++ tr if showCheckboxes td.rowCheckLabel label.rowCheckLabel input.rowCheck(type='checkbox', name=columns[0],value=doc[columns[0]]) each column in columns td(class=column) +hyperVal(doc, column) mixin tablesort script(src=conf.basedir + 'js/tablesort.min.js') script. var tables = document.getElementsByClassName('sortable') for (var i = 0; i < tables.length; i++) { new Tablesort(tables[i]); } mixin asis(x) |!{x}