| 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} |