1<!doctype html> 2<html ng-app="app" ng-controller="AppCtrl" lang="en" xmlns="http://www.w3.org/1999/html"> 3<head> 4 <base href="/"> <!-- needed for html5 pretty urls --> 5 <meta charset="utf-8"> 6 <title ng-bind-html="pageTitle()">CiteAs</title> 7 <meta name="viewport" content="initial-scale=1" /> 8 9 10 11 <meta name="citation_title" content="{{ productMetadata.title }}" ng-if="productMetadata && productMetadata.title"> 12 <meta name="citation_publication_date" content="{{ productMetadata.year }}" ng-if="productMetadata && productMetadata.year"> 13 <meta name="citation_journal_title" content="{{ productMetadata['container-title'] }}" ng-if="productMetadata && productMetadata['container-title']"> 14 15 <meta name="citation_author" content="{{ author.family }}" ng-repeat="author in productMetadata.author" ng-if="productMetadata && productMetadata.author"> 16 17 18 19 <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700,400italic"> 20 <link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/angular_material/1.1.0-rc4/angular-material.min.css"> 21 <link href="//maxcdn.bootstrapcdn.com/font-awesome/4.6.0/css/font-awesome.min.css" rel="stylesheet"> 22 <link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/angular_material/1.1.0-rc4/angular-material.min.css"> 23 <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous"> 24 25 <link href="/static/main.css" rel="stylesheet"> 26 <!--<link rel="icon" type="image/ico" href="/static/img/favicon.ico" /> --> 27 28</head> 29 30 31 32<body ng-cloak class="template-{{ global.template }}"> 33<div class="nav"> 34 35 <a href="/" class="main-logo template-{{ global.template }}"> 36 <img src="static/img/citeas-logo.png" alt=""> 37 </a> 38 39 <div class="spacer"></div> 40 41 <div class="links"> 42 <a href="about">About</a> 43 <a href="api">API</a> 44 </div> 45</div> 46<div class="main-view container-fluid" ng-view></div> 47
48<script type="text/ng-template" id="step-info.tpl.html"> 49 <md-dialog> 50 <md-toolbar> 51 <div class="md-toolbar-tools"> 52 <h2>{{ stepInfo.subject }}</h2> 53 <span flex></span> 54 <md-button class="md-icon-button" ng-click="cancel()"> 55 <i class="fa fa-times"></i> 56 </md-button> 57 </div> 58 </md-toolbar> 59 60 <md-dialog-content> 61 <div class="md-dialog-content"> 62 <p class="intro"> 63 {{ stepInfo.step_intro }} 64 </p> 65 <p class="more"> 66 {{ stepInfo.step_more }} 67 </p> 68 <div class="more-resources" ng-show="stepInfo.step_links.length"> 69 <h3>Additional resources:</h3> 70 <ul> 71 <li ng-repeat="link in stepInfo.step_links"> 72 <a href="{{ link[1] }}">{{ link[0] }}</a> 73 </li> 74 </ul> 75 </div> 76 77 78 </div> 79 </md-dialog-content> 80 81 82 83 </md-dialog> 84 85</script>
85 86 87 88 89 90<!-- Angular and Angular-ecosystem dependencies -->
91<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>
vendor: 1 bytes, line 91
91
92<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular-animate.min.js"></script>
vendor: 1 bytes, line 92
92
93<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular-route.min.js"></script>
vendor: 1 bytes, line 93
93
94<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular-aria.min.js"></script>
vendor: 1 bytes, line 94
94
95<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular-messages.min.js"></script>
vendor: 1 bytes, line 95
95
96<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.0-rc.0/angular-resource.min.js"></script>
vendor: 1 bytes, line 96
96
97<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.0-rc.0/angular-sanitize.min.js"></script>
vendor: 1 bytes, line 97
97
98<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.8/angular-animate.min.js"></script>
vendor: 1 bytes, line 98
98
99<script src="https://ajax.googleapis.com/ajax/libs/angular_material/1.1.0-rc4/angular-material.min.js"></script>
vendor: 1 bytes, line 99
99
100<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular-cookies.js"></script>
100 101 102<!-- externally hosted libs outside the Angular ecosystem -->
103<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.2/underscore-min.js"></script>
vendor: 1 bytes, line 103
103
104<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.12.0/moment.min.js"></script>
104 105 106 107<!-- inlined scripts --> 108<!-- ng-progress (progressbar) -->
109<script>angular.module("ngProgress.provider",["ngProgress.directive"]).service("ngProgress",function(){"use strict";return["$document","$window","$compile","$rootScope","$timeout",function(a,b,c,d,e){this.autoStyle=!0,this.count=0,this.height="3px",this.$scope=d.$new(),this.color="#1565C0",this.parent=a.find("body")[0],this.count=0,this.progressbarEl=c("<ng-progress></ng-progress>")(this.$scope),this.parent.appendChild(this.progressbarEl[0]),this.$scope.count=this.count,void 0!==this.height&&this.progressbarEl.eq(0).children().css("height",this.height),void 0!==this.color&&(this.progressbarEl.eq(0).children().css("background-color",this.color),this.progressbarEl.eq(0).children().css("color",this.color)),this.intervalCounterId=0,this.start=function(){this.show();var a=this;clearInterval(this.intervalCounterId),this.intervalCounterId=setInterval(function(){isNaN(a.count)?(clearInterval(a.intervalCounterId),a.count=0,a.hide()):(a.remaining=100-a.count,a.count=a.count+.15*Math.pow(1-Math.sqrt(a.remaining),2),a.updateCount(a.count))},200)},this.updateCount=function(a){this.$scope.count=a,this.$scope.$$phase||this.$scope.$apply()},this.setHeight=function(a){return void 0!==a&&(this.height=a,this.$scope.height=this.height,this.$scope.$$phase||this.$scope.$apply()),this.height},this.setColor=function(a){return void 0!==a&&(this.color=a,this.$scope.color=this.color,this.$scope.$$phase||this.$scope.$apply()),this.color},this.hide=function(){this.progressbarEl.children().css("opacity","0");var a=this;a.animate(function(){a.progressbarEl.children().css("width","0%"),a.animate(function(){a.show()},500)},500)},this.show=function(){var a=this;a.animate(function(){a.progressbarEl.children().css("opacity","1")},100)},this.animate=function(a,b){void 0!==this.animation&&e.cancel(this.animation),this.animation=e(a,b)},this.status=function(){return this.count},this.stop=function(){clearInterval(this.intervalCounterId)},this.set=function(a){return this.show(),this.updateCount(a),this.count=a,clearInterval(this.intervalCounterId),this.count},this.css=function(a){return this.progressbarEl.children().css(a)},this.reset=function(){return clearInterval(this.intervalCounterId),this.count=0,this.updateCount(this.count),0},this.complete=function(){this.count=100,this.updateCount(this.count);var a=this;return clearInterval(this.intervalCounterId),e(function(){a.hide(),e(function(){a.count=0,a.updateCount(a.count)},500)},1e3),this.count},this.setParent=function(a){if(null===a||void 0===a)throw new Error("Provide a valid parent of type HTMLElement");null!==this.parent&&void 0!==this.parent&&this.parent.removeChild(this.progressbarEl[0]),this.parent=a,this.parent.appendChild(this.progressbarEl[0])},this.getDomElement=function(){return this.progressbarEl},this.setAbsolute=function(){this.progressbarEl.css("position","absolute")}}]}).factory("ngProgressFactory",["$injector","ngProgress",function(a,b){var c={createInstance:function(){return a.instantiate(b)}};return c}]),angular.module("ngProgress.directive",[]).directive("ngProgress",["$window","$rootScope",function(a,b){var c={replace:!0,restrict:"E",link:function(a,b,c,d){a.$watch("count",function(c){(void 0!==c||null!==c)&&(a.counter=c,b.eq(0).children().css("width",c+"%"))}),a.$watch("color",function(c){(void 0!==c||null!==c)&&(a.color=c,b.eq(0).children().css("background-color",c),b.eq(0).children().css("color",c))}),a.$watch("height",function(c){(void 0!==c||null!==c)&&(a.height=c,b.eq(0).children().css("height",c))})},template:'<div id="ngProgress-container"><div id="ngProgress"></div></div>'};return c}]),angular.module("ngProgress",["ngProgress.directive","ngProgress.provider"]);</script>
vendor: 1 bytes, line 109
109
vendor: 5,446 bytes, lines 110-256
110<script> 111 112//download.js v4.2, by dandavis; 2008-2016. [CCBY2] see http://danml.com/download.html for tests/usage 113// v1 landed a FF+Chrome compat way of downloading strings to local un-named files, upgraded to use a hidden frame and optional mime 114// v2 added named files via a[download], msSaveBlob, IE (10+) support, and window.URL support for larger+faster saves than dataURLs 115// v3 added dataURL and Blob Input, bind-toggle arity, and legacy dataURL fallback was improved with force-download mime and base64 support. 3.1 improved safari handling. 116// v4 adds AMD/UMD, commonJS, and plain browser support 117// v4.1 adds url download capability via solo URL argument (same domain/CORS only) 118// v4.2 adds semantic variable names, long (over 2MB) dataURL support, and hidden by default temp anchors 119// https://github.com/rndme/download 120 121(function (root, factory) { 122 if (typeof define === 'function' && define.amd) { 123 // AMD. Register as an anonymous module. 124 define([], factory); 125 } else if (typeof exports === 'object') { 126 // Node. Does not work with strict CommonJS, but 127 // only CommonJS-like environments that support module.exports, 128 // like Node. 129 module.exports = factory(); 130 } else { 131 // Browser globals (root is window) 132 root.download = factory(); 133 } 134}(this, function () { 135 136 return function download(data, strFileName, strMimeType) { 137 138 var self = window, // this script is only for browsers anyway... 139 defaultMime = "application/octet-stream", // this default mime also triggers iframe downloads 140 mimeType = strMimeType || defaultMime, 141 payload = data, 142 url = !strFileName && !strMimeType && payload, 143 anchor = document.createElement("a"), 144 toString = function(a){return String(a);}, 145 myBlob = (self.Blob || self.MozBlob || self.WebKitBlob || toString), 146 fileName = strFileName || "download", 147 blob, 148 reader; 149 myBlob= myBlob.call ? myBlob.bind(self) : Blob ; 150 151 if(String(this)==="true"){ //reverse arguments, allowing download.bind(true, "text/xml", "export.xml") to act as a callback 152 payload=[payload, mimeType]; 153 mimeType=payload[0]; 154 payload=payload[1]; 155 } 156 157 158 if(url && url.length< 2048){ // if no filename and no mime, assume a url was passed as the only argument 159 fileName = url.split("/").pop().split("?")[0]; 160 anchor.href = url; // assign href prop to temp anchor 161 if(anchor.href.indexOf(url) !== -1){ // if the browser determines that it's a potentially valid url path: 162 var ajax=new XMLHttpRequest(); 163 ajax.open( "GET", url, true); 164 ajax.responseType = 'blob'; 165 ajax.onload= function(e){ 166 download(e.target.response, fileName, defaultMime); 167 }; 168 setTimeout(function(){ ajax.send();}, 0); // allows setting custom ajax headers using the return: 169 return ajax; 170 } // end if valid url? 171 } // end if url? 172 173 174 //go ahead and download dataURLs right away 175 if(/^data\:[\w+\-]+\/[\w+\-]+[,;]/.test(payload)){ 176 177 if(payload.length > (1024*1024*1.999) && myBlob !== toString ){ 178 payload=dataUrlToBlob(payload); 179 mimeType=payload.type || defaultMime; 180 }else{ 181 return navigator.msSaveBlob ? // IE10 can't do a[download], only Blobs: 182 navigator.msSaveBlob(dataUrlToBlob(payload), fileName) : 183 saver(payload) ; // everyone else can save dataURLs un-processed 184 } 185 186 }//end if dataURL passed? 187 188 blob = payload instanceof myBlob ? 189 payload : 190 new myBlob([payload], {type: mimeType}) ; 191 192 193 function dataUrlToBlob(strUrl) { 194 var parts= strUrl.split(/[:;,]/), 195 type= parts[1], 196 decoder= parts[2] == "base64" ? atob : decodeURIComponent, 197 binData= decoder( parts.pop() ), 198 mx= binData.length, 199 i= 0, 200 uiArr= new Uint8Array(mx); 201 202 for(i;i<mx;++i) uiArr[i]= binData.charCodeAt(i); 203 204 return new myBlob([uiArr], {type: type}); 205 } 206 207 function saver(url, winMode){ 208 209 if ('download' in anchor) { //html5 A[download] 210 anchor.href = url; 211 anchor.setAttribute("download", fileName); 212 anchor.className = "download-js-link"; 213 anchor.innerHTML = "downloading..."; 214 anchor.style.display = "none"; 215 document.body.appendChild(anchor); 216 setTimeout(function() { 217 anchor.click(); 218 document.body.removeChild(anchor); 219 if(winMode===true){setTimeout(function(){ self.URL.revokeObjectURL(anchor.href);}, 250 );} 220 }, 66); 221 return true; 222 } 223 224 // handle non-a[download] safari as best we can: 225 if(/(Version)\/(\d+)\.(\d+)(?:\.(\d+))?.*Safari\//.test(navigator.userAgent)) { 226 url=url.replace(/^data:([\w\/\-\+]+)/, defaultMime); 227 if(!window.open(url)){ // popup blocked, offer direct download: 228 if(confirm("Displaying New Document\n\nUse Save As... to download, then click back to return to this page.")){ location.href=url; } 229 } 230 return true; 231 } 232 233 //do iframe dataURL download (old ch+FF): 234 var f = document.createElement("iframe"); 235 document.body.appendChild(f); 236 237 if(!winMode){ // force a mime that will download: 238 url="data:"+url.replace(/^data:([\w\/\-\+]+)/, defaultMime); 239 } 240 f.src=url; 241 setTimeout(function(){ document.body.removeChild(f); }, 333); 242 243 }//end saver 244 245 246 247 248 if (navigator.msSaveBlob) { // IE10+ : (has Blob, but not a[download] or URL) 249 return navigator.msSaveBlob(blob, fileName); 250 } 251 252 if(self.URL){ // simple fast and modern way using Blob and URL: 253 saver(self.URL.createObjectURL(blob), true); 254 }else{ 255 // handle non-Blob()+non-URL browsers: 256 if(typeof blob === "string" || blob.constructor===toString ){
257 try{ 258 return saver( "data:" + mimeType + ";base64," + self.btoa(blob) ); 259 }catch(y){ 260 return saver( "data:" + mimeType + "," + encodeURIComponent(blob) ); 261 } 262 } 263 264 // Blob but not URL support: 265 reader=new FileReader(); 266 reader.onload=function(e){ 267 saver(this.result); 268 }; 269 reader.readAsDataURL(blob); 270 } 271 return true; 272 }; /* end download() */ 273})); 274 275 276</script>
276 277 278 279<!-- our actual app -->
280<script type="text/javascript" src="/static/ti.js"></script>
vendor: 1 bytes, line 280
280
281<script src="//angular-ui.github.io/bootstrap/ui-bootstrap-tpls-2.5.0.js"></script>
vendor: 1 bytes, line 281
281
282<script src="//localhost:35728/livereload.js"></script>
282 283</body>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.