1 |
- {"version":3,"sources":["yasr.min.js"],"names":["e","exports","module","define","amd","f","window","global","self","YASR","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"./main.js",2,"S","$","jQuery","d","document","h","drag","tables","count","ID","PX","SIGNATURE","I","parseInt","M","Math","ie","navigator","userAgent","indexOf","sessionStorage","append","init","tb","options","disable","destroy","id","attr","p","postbackSafe","is","addClass","before","opt","g","c","w","width","gc","prev","marginLeft","css","marginRight","cs","cellSpacing","currentStyle","borderSpacing","b","border","borderLeftWidth","createGrips","removeClass","remove","th","find","cg","ln","memento","each","this","lastChild","push","removeAttr","bind","onGripMouseDown","gripInnerHtml","hoverCursor","data","syncGrips","not","m","aux","flush","split","eq","left","offset","outerWidth","height","headerOnly","outerHeight","syncCols","isOver","inc","x","c2","w2","onGripDrag","originalEvent","touches","pageX","ox","mw","minWidth","max","position","min","liveDrag","cb","onDrag","currentTarget","onGripDragOver","unbind","draggingClass","onResize","dragCursor","round","fn","extend","colResizable","defaults","jquery","undefined",3,"RegExp","escape","replace","csv","separator","delimiter","headers","hooks","castToScalar","value","state","hasDot","isNaN","test","parseFloat","integer","parsers","parse","endOfEntry","start","rowNum","entry","colNum","onParseEntry","hookVal","end","exit","endOfValue","onParseValue","hook","escSeparator","escDelimiter","match","matchSrc","source","m0","splitLines","endOfLine","entries","prevChar","substr","parseEntry","toArray","callback","config","toArrays","toObjects","lines","headerOptions","headerLine","len","object","j","fromArrays","arrays","escaper","experimental","output","fromObjects2CSV","objects","csvEntry2Array","csv2Array","csv2Dictionary",4,"EventEmitter","_events","_maxListeners","isFunction","arg","isNumber","isObject","isUndefined","prototype","defaultMaxListeners","setMaxListeners","TypeError","emit","type","er","handler","args","listeners","error","arguments","Array","apply","slice","addListener","listener","newListener","warned","console","trace","on","once","removeListener","fired","list","splice","removeAllListeners","key","ret","listenerCount","emitter",5,"mod","CodeMirror","findMatchingBracket","cm","where","strict","line","getLineHandle","pos","ch","matching","text","charAt","dir","style","getTokenTypeAt","Pos","found","scanForBracket","from","to","forward","maxScanLen","maxScanLineLength","maxScanLines","stack","re","bracketRegex","lineEnd","lastLine","firstLine","lineNo","getLine","pop","matchBrackets","autoclear","maxHighlightLen","maxHighlightLineLength","marks","ranges","listSelections","empty","head","markText","className","ie_lt8","focused","display","input","focus","clear","operation","setTimeout","doMatchBrackets","currentlyHighlighted","documentMode","(",")","[","]","{","}","defineOption","val","old","Init","off","defineExtension","codemirror",6,"registerHelper","findOpening","openCh","at","pass","lineText","lastIndexOf","tokenType","startCh","startToken","endToken","endCh","outer","nextOpen","nextClose","hasImport","getTokenAt","string","semi","has","next","clipPos","hasInclude",7,"doFold","force","getRange","allowFolded","range","finder","minSize","findMarksAt","__isFold","cleared","getOption","myWidget","makeWidget","myRange","e_preventDefault","replacedWith","clearOnEnter","signal","widget","createTextNode","createElement","appendChild","name","editorOptions","foldOptions","defaultOptions","newFoldFunction","rangeFinder","commands","toggleFold","foldCode","getCursor","fold","unfold","foldAll","unfoldAll","funcs","helpers","getHelpers","cur","auto","minFoldSize","scanUp",8,"State","parseOptions","opts","gutter","indicatorOpen","indicatorFolded","isFolded","marker","spec","elt","cloneNode","updateFoldInfo","foldGutter","foldOption","func","eachLine","mark","setGutterMarker","updateInViewport","vp","getViewport","onGutterClick","onChange","clearTimeout","changeUpdate","foldOnChangeTimeSpan","onViewportChange","updateViewportTimeSpan","onFold","clearGutter","./foldcode",9,"cmp","Iter","tagAt","iter","nextLine","prevLine","toTagEnd","gt","lastSlash","selfClose","toTagStart","lt","xmlTagStart","lastIndex","exec","index","toNextTag","toPrevTag","findMatchingClose","tag","startLine","findMatchingOpen","endLine","nameStartChar","nameChar","openTag","close","findMatchingTag","here","open","findEnclosingTag","scanForClosingTag",10,"defineMode","parserConfig","readRegexp","stream","escaped","inSet","tp","cont","content","tokenBase","tokenize","tokenString","eat","eatWhile","tokenComment","skipToEnd","lastType","isOperatorChar","current","tokenQuasi","wordRE","word","known","keywords","propertyIsEnumerable","quote","jsonldMode","peek","isJsonldKeyword","maybeEnd","findFatArrow","fatArrowAt","arrow","depth","sawSomething","bracket","brackets","JSLexical","indented","column","align","info","inScope","varname","v","localVars","cx","context","vars","parseJS","cc","marked","lexical","hasOwnProperty","combinator","jsonMode","expression","statement","lex","register","inList","globalVars","pushcontext","defaultVars","popcontext","pushlex","result","indent","poplex","expect","wanted","exp","vardef","block","maybeelse","functiondef","forspec","maybelabel","funarg","afterModule","afterExport","afterImport","expressionInner","expressionNoComma","noComma","body","arrowBodyNoComma","arrowBody","commasep","pattern","maybeop","maybeoperatorNoComma","maybeoperatorComma","atomicTypes","maybeexpressionNoComma","maybeexpression","comprehension","arrayLiteral","contCommasep","objprop","quasi","me","expr","property","continueQuasi","getterSetter","afterprop","what","proceed","maybetype","isTS","typedef","maybeAssign","vardefCont","proppattern","_type","forspec1","forspec2","formaybeinof","forspec3","classNameAfter","classBody","classGetterSetter","maybeFrom","importSpec","maybeArrayComprehension","isContinuedStatement","textAfter","indentUnit","statementIndent","jsonld","json","typescript","wordCharacters","kw","A","B","C","operator","atom","jsKeywords","if","while","with","else","do","try","finally","return","break","continue","new","delete","throw","debugger","var","const","let","function","catch","for","switch","case","default","in","typeof","instanceof","true","false","null","NaN","Infinity","class","super","yield","export","import","extends","tsKeywords","interface","constructor","public","private","protected","static","number","bool","any","variable","regexp","jsonld-keyword","startState","basecolumn","token","sol","indentation","eatSpace","Pass","firstChar","closing","doubleIndentSwitch","electricInput","blockCommentStart","blockCommentEnd","lineComment","helperType","defineMIME",11,"inText","chain","parser","inBlock","doctype","inTag","ok","baseState","tagName","tagStart","inAttribute","stringStartCol","closure","eol","isInAttribute","terminator","Context","startOfLine","Kludges","doNotIndent","noIndent","popContext","maybePopContext","nextTagName","parentTagName","contextGrabbers","tagNameState","closeTagNameState","setStyle","attrState","implicitlyClosed","closeState","closeStateErr","_stream","attrEqState","autoSelfClosers","attrValueState","allowMissing","attrContinuedState","allowUnquoted","multilineTagIndentFactor","multilineTagIndentPastTag","htmlMode","area","base","br","col","command","embed","frame","hr","img","keygen","link","meta","param","track","wbr","menuitem","dd","li","optgroup","option","rp","rt","tbody","td","tfoot","tr","dt","address","article","aside","blockquote","div","dl","fieldset","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","menu","nav","ol","pre","section","table","ul","thead","caseFold","alignCDATA","fullLine","tagAfter","grabbers","configuration","mimeModes",12,"callWithJQuery","pivotModule","pivotUtilities","d3_renderers","Treemap","pivotData","addToTree","color","ref","rowKey","tree","treemap","localeStrings","d3","children","path","child","newChild","shift","getRowKeys","getAggregator","scale","category10","layout","size","sticky","select","datum","selectAll","padding","nodes","enter","y","dx","dy",13,"makeGoogleChart","chartType","extraOptions","agg","base1","colKey","colKeys","dataArray","dataTable","fullAggName","groupByTitle","hAxisTitle","len1","numCharsInHAxis","row","rowKeys","title","tree2","vAxisTitle","wrapper","vs","by","gchart","innerWidth","innerHeight","getColKeys","aggregatorName","valAttrs","join","results","unshift","format","google","visualization","DataTable","addColumn","colAttrs","rowAttrs","role","addRows","isNumeric","toPrecision","toFixed","arrayToDataTable","hAxis","slantedText","vAxis","tooltip","textStyle","fontName","fontSize","minValue","legend","chartArea","ChartWrapper","draw","editor","ChartEditor","events","getChartWrapper","openDialog","gchart_renderers","Line Chart","Bar Chart","Stacked Bar Chart","isStacked","Area Chart","Scatter Chart",14,"win","isLocalStorageNameSupported","localStorageName","err","ieKeyFix","forbiddenCharsRegex","storage","store","doc","scriptTag","disabled","version","set","get","defaultVal","transact","transactionFn","getAll","forEach","serialize","JSON","stringify","deserialize","setItem","getItem","removeItem","documentElement","addBehavior","storageOwner","storageContainer","ActiveXObject","write","frames","withIEStorage","storeFunction","load","removeChild","setAttribute","save","getAttribute","removeAttribute","attributes","XMLDocument","testKey","enabled","Function",15,"description","main","repository","url","licenses","author","maintainers","email","bugs","homepage","dependencies","readme","readmeFilename","_id","_from",16,"log","svg","yasgui-utils","nestedExists","obj","../package.json","./storage.js","./svg.js",17,"times","day","month","year","root","XMLSerializer","serializeToString","time","Date","getTime","removeAll","filter",18,"parent","svgString","el","getElement","DOMParser","dom","parseFromString","svgContainer",19,"license","devDependencies","bootstrap-sass","browserify","browserify-shim","browserify-transform-tools","exorcist","gulp","gulp-autoprefixer","gulp-bump","gulp-concat","gulp-connect","gulp-cssimport","gulp-embedlr","gulp-filter","gulp-git","gulp-html-replace","gulp-jsvalidate","gulp-livereload","gulp-minify-css","gulp-notify","gulp-rename","gulp-sass","gulp-sourcemaps","gulp-streamify","gulp-tag-version","gulp-uglify","node-sass","require-dir","run-sequence","vinyl-buffer","vinyl-source-stream","vinyl-transform","watchify","web","datatables","pivottable","jquery-ui","transform","optionalShim","../../lib/codemirror","jquery-ui/sortable",20,"lineBreak","variables","querySolutions","bindings","createHeader","addValueToString","csvString","createBody","addQuerySolutionToString","querySolution","needToQuoteString","needQuoting",21,"yasr","container","appendTo","resultsContainer","booleanVal","getBoolean","imgId","textVal","canHandleResults","hideFromSelection","getPriority","YASR-boolean","./imgs.js",22,"useGoogleCharts","outputPlugins","drawOutputSelector","drawDownloadIcon","getUsedPrefixes","persistency","prefix","closest","outputSelector","maxSize",23,"$container","getTryBtn","$tryBtn","tryQueryLink","click","blur","getException","$header","status","statusText","responseText","corsMessage",24,"GoogleTypeException","foundTypes","varName","toString","toHtml",25,"loadingMain","loadingFailed","loader","loadScript","timeout","maxTimeout","startTime","checkAndWait","googleLoad","packages","script","readyState","onreadystatechange","onload","src",26,"utils","chartWrapper","initEditor","tmp","getDataTable","setDataTable","chartConfig","toJSON","containerId","setOption","updateHeader","priority","getPersistentSettings","motionChartState","setPersistentSettings","persSettings","getVariables","getDownloadInfo","svgEl","getContent","outerHTML","clone","html","filename","contentType","buttonTitle","$table","tableToCsv","getEmbedHtml","htmlString","doDraw","wrapperId","jsonResults","getAsJson","getGoogleTypeForBindings","warn","usedPrefixes","binding","columnId","castGoogleType","getColumnType","addRow","getChartType","motionChart","getChart","getState","persistencyId","./exceptions.js","./gChartLoader.js","./utils.js",27,"cross","check","unsorted","sortDesc","sortAsc","download","move","fullscreen","smallscreen",28,"./tableToCsv.js",29,"addRowToString","rowArray","$el","rowspans","totalColCount","rowId","$tr","htmlColId","actualColId","rowSpan","$cell","colspan","rowspan",30,"queryResults","getPersistencyId","postfix","plugins","pluginName","downloadIcon","embedButton","outputPlugin","prop","fill","show","hide","selectedOutput","selectedOutputPriority","unsupportedOutputs","tryOutput","disableOutputs","outputToDraw","outputs","outputName","somethingDrawn","setResponse","dataOrJqXhr","textStatus","jqXhrOrErrorString","exception","resultsId","getOriginalResponseAsString","getAsStoreObject","$toggableWarning","$toggableWarningClose","$toggableWarningMsg","warning","prependTo","blobDownloadSupported","checkBlobDownloadSupported","windowUrl","URL","webkitURL","mozURL","msURL","Blob","embedBtn","drawHeader","btnGroup","plugin","button","stringToUrl","blob","createObjectURL","currentPlugin","downloadInfo","downloadUrl","downloadMockLink","href","fireClick","drawFullscreenButton","drawSmallscreenButton","drawEmbedButton","event","embedLink","stopPropagation","popup","prePopup","$this","mouseup","positions","top","persistentId","settings","fromStorage","deprId","isArray","registerOutput","./boolean.js","./defaults.js","./error.js","./gchart.js","./jquery/extendJquery.js","./parsers/wrapper.js","./pivot.js","./rawResponse.js","./table.js",31,"queryResponse","./dlv.js",32,"detectType","getBindings","rowIt","colIt","detectedType","isBoolean","varsFetched","../../lib/jquery.csv-0.71.js",33,34,35,"xml","tsv","origResponse","errorString","toLowerCase","getResponseHeader","ct","trim","response","getParserFromContentType","doLuckyGuess","getOriginalResponse","responseString","getType","arg1","arg2","arg3","getOriginalContentType","./csv.js","./json.js","./tsv.js","./xml.js",36,"parseHead","node","headNodeIt","childNodes","headNode","nodeName","parseResults","resultIt","resultNode","jsonResult","bindingIt","bindingNode","bindingInfIt","bindingInf","innerHTML","dataType","datatype","parseBoolean","mainXml","parseXML","isXMLDoc",37,"yUtils","imgs","pivotUI","useD3Chart","renderers","$pivotWrapper","mergeLabelPostfix","getShownVariables","mergeLabelsWithUris","shownVariables","substring","formatForPivot","rowObj","uriToPrefixed","validatePivotTableOptions","pivotOptions","keepColsAndRows","cols","pivotOptionse","rows","rendererName","onRefresh","pivotObj","pivotTable","vals","openGchartBtn","dblclick","originalRefresh","pivot","icon","replaceWith","prepend","newSettings","YASR-rawResponse","../node_modules/pivottable/dist/d3_renderers.js","../node_modules/pivottable/dist/gchart_renderers.js",38,"cmOptions","mode","refresh","readOnly","lineNumbers","lineWrapping","gutters","codemirror/addon/edit/matchbrackets.js","codemirror/addon/fold/brace-fold.js","codemirror/addon/fold/foldcode.js","codemirror/addon/fold/foldgutter.js","codemirror/addon/fold/xml-fold.js","codemirror/mode/javascript/javascript.js","codemirror/mode/xml/xml.js",39,"yutils","tableLengthPersistencyId","tableLength","getRows","colId","sparqlVar","getCellContent","addEvents","drawSvgIcons","callbacks","handlers","delegate","onCellClick","onCellMouseEnter","tdEl","fetchTitlesFromPreflabel","addPrefLabel","onCellMouseLeave","dataTableConfig","datatable","columns","getColumns","pLength","pageLength","sortings","sorting","sorting_asc","sorting_desc","svgDiv","formatLiteral","literalBinding","stringRepresentation","escapeHtmlEntities","xmlSchemaNs","visibleString","postFix","addEmptyTitle","encodeURIComponent","success","label","fail","includeVariable","variableToCheck","visible","autoWidth","order","lengthMenu","lengthChange","pagingType","drawCallback","oSettings","aiDisplay","aoData","nTr","activePaginateButton","nTableWrapper","columnDefs","orderable","targets","YASR-table","jquery-datatables","../lib/colResizable-1.4.js","./bindingsToCsv.js",40,"unescaped","prefixes","uri","getGoogleTypeForBinding","types","typeCount","googleType","Number","date","parseXmlSchemaDate","$els","dispatchEvent","oEvent","createEvent","initMouseEvent","fireEvent","dateString"],"mappings":"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","file":"yasr.min.js","sourcesContent":["!function(e){if(\"object\"==typeof exports&&\"undefined\"!=typeof module)module.exports=e();else if(\"function\"==typeof define&&define.amd)define([],e);else{var f;\"undefined\"!=typeof window?f=window:\"undefined\"!=typeof global?f=global:\"undefined\"!=typeof self&&(f=self),f.YASR=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){\n//this is the entry-point for browserify.\n//the current browserify version does not support require-ing js files which are used as entry-point\n//this way, we can still require our main.js file\nmodule.exports = require('./main.js');\n},{\"./main.js\":30}],2:[function(require,module,exports){\n/**\n _ _____ _ _ _ \n | | __ \\ (_) | | | | \n ___ ___ | | |__) |___ ___ _ ______ _| |__ | | ___ \n / __/ _ \\| | _ // _ \\/ __| |_ / _` | '_ \\| |/ _ \\\n | (_| (_) | | | \\ \\ __/\\__ \\ |/ / (_| | |_) | | __/\n \\___\\___/|_|_| \\_\\___||___/_/___\\__,_|_.__/|_|\\___|\n\t \n\tv 1.4 - a jQuery plugin by Alvaro Prieto Lauroba\n\t\n\tLicences: MIT & GPL\n\tFeel free to use or modify this plugin as far as my full name is kept\t\n\t\n\tIf you are going to use this plugin in production environments it is \n\tstrongly recomended to use its minified version: colResizable.min.js\n\n*/\n\nvar $ = (function(){try{return require('jquery')}catch(e){return window.jQuery}})();\t\n\tvar d = $(document); \t\t//window object\n\tvar h = $(\"head\");\t\t\t//head object\n\tvar drag = null;\t\t\t//reference to the current grip that is being dragged\n\tvar tables = [];\t\t\t//array of the already processed tables (table.id as key)\n\tvar\tcount = 0;\t\t\t\t//internal count to create unique IDs when needed.\t\n\t\n\t//common strings for minification\t(in the minified version there are plenty more)\n\tvar ID = \"id\";\t\n\tvar PX = \"px\";\n\tvar SIGNATURE =\"JColResizer\";\n\t\n\t//shortcuts\n\tvar I = parseInt;\n\tvar M = Math;\n\tvar ie = navigator.userAgent.indexOf('Trident/4.0')>0;\n\tvar S;\n\ttry{S = sessionStorage;}catch(e){}\t//Firefox crashes when executed as local file system\n\t\n\t//append required CSS rules \n\th.append(\"<style type='text/css'> .JColResizer{table-layout:fixed;} .JColResizer td, .JColResizer th{overflow:hidden;padding-left:0!important; padding-right:0!important;} .JCLRgrips{ height:0px; position:relative;} .JCLRgrip{margin-left:-5px; position:absolute; z-index:5; } .JCLRgrip .JColResizer{position:absolute;background-color:red;filter:alpha(opacity=1);opacity:0;width:10px;height:100%;top:0px} .JCLRLastGrip{position:absolute; width:1px; } .JCLRgripDrag{ border-left:1px dotted black;\t}</style>\");\n\n\t\n\t/**\n\t * Function to allow column resizing for table objects. It is the starting point to apply the plugin.\n\t * @param {DOM node} tb - refrence to the DOM table object to be enhanced\n\t * @param {Object} options\t- some customization values\n\t */\n\tvar init = function( tb, options){\t\n\t\tvar t = $(tb);\t\t\t\t\t\t\t\t\t\t//the table object is wrapped\n\t\tif(options.disable) return destroy(t);\t\t\t\t//the user is asking to destroy a previously colResized table\n\t\tvar\tid = t.id = t.attr(ID) || SIGNATURE+count++;\t//its id is obtained, if null new one is generated\t\t\n\t\tt.p = options.postbackSafe; \t\t\t\t\t\t//shortcut to detect postback safe \t\t\n\t\tif(!t.is(\"table\") || tables[id]) return; \t\t\t//if the object is not a table or if it was already processed then it is ignored.\n\t\tt.addClass(SIGNATURE).attr(ID, id).before('<div class=\"JCLRgrips\"/>');\t//the grips container object is added. Signature class forces table rendering in fixed-layout mode to prevent column's min-width\n\t\tt.opt = options; t.g = []; t.c = []; t.w = t.width(); t.gc = t.prev();\t//t.c and t.g are arrays of columns and grips respectively\t\t\t\t\n\t\tif(options.marginLeft) t.gc.css(\"marginLeft\", options.marginLeft); \t//if the table contains margins, it must be specified\n\t\tif(options.marginRight) t.gc.css(\"marginRight\", options.marginRight); \t//since there is no (direct) way to obtain margin values in its original units (%, em, ...)\n\t\tt.cs = I(ie? tb.cellSpacing || tb.currentStyle.borderSpacing :t.css('border-spacing'))||2;\t//table cellspacing (not even jQuery is fully cross-browser)\n\t\tt.b = I(ie? tb.border || tb.currentStyle.borderLeftWidth :t.css('border-left-width'))||1;\t//outer border width (again cross-browser isues)\n\t\t// if(!(tb.style.width || tb.width)) t.width(t.width()); //I am not an IE fan at all, but it is a pitty that only IE has the currentStyle attribute working as expected. For this reason I can not check easily if the table has an explicit width or if it is rendered as \"auto\"\n\t\ttables[id] = t; \t//the table object is stored using its id as key\t\n\t\tcreateGrips(t);\t\t//grips are created\n\t\n\t};\n\n\n\t/**\n\t * This function allows to remove any enhancements performed by this plugin on a previously processed table.\n\t * @param {jQuery ref} t - table object\n\t */\n\tvar destroy = function(t){\n\t\tvar id=t.attr(ID), t=tables[id];\t\t//its table object is found\n\t\tif(!t||!t.is(\"table\")) return;\t\t\t//if none, then it wasnt processed\t \n\t\tt.removeClass(SIGNATURE).gc.remove();\t//class and grips are removed\n\t\tdelete tables[id];\t\t\t\t\t\t//clean up data\n\t};\n\n\n\t/**\n\t * Function to create all the grips associated with the table given by parameters \n\t * @param {jQuery ref} t - table object\n\t */\n\tvar createGrips = function(t){\t\n\t\n\t\tvar th = t.find(\">thead>tr>th,>thead>tr>td\");\t//if table headers are specified in its semantically correct tag, are obtained\n\t\tif(!th.length) th = t.find(\">tbody>tr:first>th,>tr:first>th,>tbody>tr:first>td, >tr:first>td\");\t //but headers can also be included in different ways\n\t\tt.cg = t.find(\"col\"); \t\t\t\t\t\t//a table can also contain a colgroup with col elements\t\t\n\t\tt.ln = th.length;\t\t\t\t\t\t\t//table length is stored\t\n\t\tif(t.p && S && S[t.id])memento(t,th);\t\t//if 'postbackSafe' is enabled and there is data for the current table, its coloumn layout is restored\n\t\tth.each(function(i){\t\t\t\t\t\t//iterate through the table column headers\t\t\t\n\t\t\tvar c = $(this); \t\t\t\t\t\t//jquery wrap for the current column\t\t\t\n\t\t\tvar g = $(t.gc.append('<div class=\"JCLRgrip\"></div>')[0].lastChild); //add the visual node to be used as grip\n\t\t\tg.t = t; g.i = i; g.c = c;\tc.w =c.width();\t\t//some values are stored in the grip's node data\n\t\t\tt.g.push(g); t.c.push(c);\t\t\t\t\t\t//the current grip and column are added to its table object\n\t\t\tc.width(c.w).removeAttr(\"width\");\t\t\t\t//the width of the column is converted into pixel-based measurements\n\t\t\tif (i < t.ln-1) {\n\t\t\t\tg.bind('touchstart mousedown', onGripMouseDown).append(t.opt.gripInnerHtml).append('<div class=\"'+SIGNATURE+'\" style=\"cursor:'+t.opt.hoverCursor+'\"></div>'); //bind the mousedown event to start dragging \n\t\t\t} else g.addClass(\"JCLRLastGrip\").removeClass(\"JCLRgrip\");\t//the last grip is used only to store data\t\t\t\n\t\t\tg.data(SIGNATURE, {i:i, t:t.attr(ID)});\t\t\t\t\t\t//grip index and its table name are stored in the HTML \t\t\t\t\t\t\t\t\t\t\t\t\n\t\t}); \t\n\t\tt.cg.removeAttr(\"width\");\t//remove the width attribute from elements in the colgroup (in any)\n\t\tsyncGrips(t); \t\t\t\t//the grips are positioned according to the current table layout\t\t\t\n\t\t//there is a small problem, some cells in the table could contain dimension values interfering with the \n\t\t//width value set by this plugin. Those values are removed\n\t\tt.find('td, th').not(th).not('table th, table td').each(function(){ \n\t\t\t$(this).removeAttr('width');\t//the width attribute is removed from all table cells which are not nested in other tables and dont belong to the header\n\t\t});\t\t\n\n\t\t\n\t};\n\t\n\n\t/**\n\t * Function to allow the persistence of columns dimensions after a browser postback. It is based in\n\t * the HTML5 sessionStorage object, which can be emulated for older browsers using sessionstorage.js\n\t * @param {jQuery ref} t - table object\n\t * @param {jQuery ref} th - reference to the first row elements (only set in deserialization)\n\t */\n\tvar memento = function(t, th){ \n\t\tvar w,m=0,i=0,aux =[];\n\t\tif(th){\t\t\t\t\t\t\t\t\t\t//in deserialization mode (after a postback)\n\t\t\tt.cg.removeAttr(\"width\");\n\t\t\tif(t.opt.flush){ S[t.id] =\"\"; return;} \t//if flush is activated, stored data is removed\n\t\t\tw = S[t.id].split(\";\");\t\t\t\t\t//column widths is obtained\n\t\t\tfor(;i<t.ln;i++){\t\t\t\t\t\t//for each column\n\t\t\t\taux.push(100*w[i]/w[t.ln]+\"%\"); \t//width is stored in an array since it will be required again a couple of lines ahead\n\t\t\t\tth.eq(i).css(\"width\", aux[i] ); \t//each column width in % is resotred\n\t\t\t}\t\t\t\n\t\t\tfor(i=0;i<t.ln;i++)\n\t\t\t\tt.cg.eq(i).css(\"width\", aux[i]);\t//this code is required in order to create an inline CSS rule with higher precedence than an existing CSS class in the \"col\" elements\n\t\t}else{\t\t\t\t\t\t\t//in serialization mode (after resizing a column)\n\t\t\tS[t.id] =\"\";\t\t\t\t//clean up previous data\n\t\t\tfor(;i < t.c.length; i++){\t\t//iterate through columns\n\t\t\t\n\t\t\t\tw = t.c[i].width();\t\t//width is obtained\n\t\t\t\tS[t.id] += w+\";\";\t\t//width is appended to the sessionStorage object using ID as key\n\t\t\t\tm+=w;\t\t\t\t\t//carriage is updated to obtain the full size used by columns\n\t\t\t}\n\t\t\tS[t.id]+=m;\t\t\t\t\t//the last item of the serialized string is the table's active area (width), \n\t\t\t\t\t\t\t\t\t\t//to be able to obtain % width value of each columns while deserializing\n\t\t}\t\n\t};\n\t\n\t\n\t/**\n\t * Function that places each grip in the correct position according to the current table layout\t * \n\t * @param {jQuery ref} t - table object\n\t */\n\tvar syncGrips = function (t){\t\n\t\tt.gc.width(t.w);\t\t\t//the grip's container width is updated\t\t\t\t\n\t\tfor(var i=0; i<t.ln; i++){\t//for each column\n\t\t\tvar c = t.c[i]; \t\t\t\n\t\t\tt.g[i].css({\t\t\t//height and position of the grip is updated according to the table layout\n\t\t\t\tleft: c.offset().left - t.offset().left + c.outerWidth(false) + t.cs / 2 + PX,\n\t\t\t\theight: t.opt.headerOnly? t.c[0].outerHeight(false) : t.outerHeight(false)\t\t\t\t\n\t\t\t});\t\t\t\n\t\t} \t\n\t};\n\t\n\t\n\t\n\t/**\n\t* This function updates column's width according to the horizontal position increment of the grip being\n\t* dragged. The function can be called while dragging if liveDragging is enabled and also from the onGripDragOver\n\t* event handler to synchronize grip's position with their related columns.\n\t* @param {jQuery ref} t - table object\n\t* @param {nunmber} i - index of the grip being dragged\n\t* @param {bool} isOver - to identify when the function is being called from the onGripDragOver event\t\n\t*/\n\tvar syncCols = function(t,i,isOver){\n\t\tvar inc = drag.x-drag.l, c = t.c[i], c2 = t.c[i+1]; \t\t\t\n\t\tvar w = c.w + inc;\tvar w2= c2.w- inc;\t//their new width is obtained\t\t\t\t\t\n\t\tc.width( w + PX);\tc2.width(w2 + PX);\t//and set\t\n\t\tt.cg.eq(i).width( w + PX); t.cg.eq(i+1).width( w2 + PX);\n\t\tif(isOver){c.w=w; c2.w=w2;}\n\t};\n\n\t\n\t/**\n\t * Event handler used while dragging a grip. It checks if the next grip's position is valid and updates it. \n\t * @param {event} e - mousemove event binded to the window object\n\t */\n\tvar onGripDrag = function(e){\t\n\t\tif(!drag) return; var t = drag.t;\t\t//table object reference \n\t\t\n\t\tif (e.originalEvent.touches) {\n\t\t\tvar x = e.originalEvent.touches[0].pageX - drag.ox + drag.l;\t\t//next position according to horizontal mouse position increment\n\t\t} else {\n\t\t\tvar x = e.pageX - drag.ox + drag.l;\t\t//next position according to horizontal mouse position increment\n\t\t}\n\t\t\n\t\t\n\t\t\t\n\t\tvar mw = t.opt.minWidth, i = drag.i ;\t//cell's min width\n\t\tvar l = t.cs*1.5 + mw + t.b;\n\n\t\tvar max = i == t.ln-1? t.w-l: t.g[i+1].position().left-t.cs-mw; //max position according to the contiguous cells\n\t\tvar min = i? t.g[i-1].position().left+t.cs+mw: l;\t\t\t\t//min position according to the contiguous cells\n\t\t\n\t\tx = M.max(min, M.min(max, x));\t\t\t\t\t\t//apply boundings\t\t\n\t\tdrag.x = x;\t drag.css(\"left\", x + PX); \t\t\t//apply position increment\t\t\n\t\t\t\n\t\tif(t.opt.liveDrag){ \t\t\t\t\t\t\t\t//if liveDrag is enabled\n\t\t\tsyncCols(t,i); syncGrips(t);\t\t\t\t\t//columns and grips are synchronized\n\t\t\tvar cb = t.opt.onDrag;\t\t\t\t\t\t\t//check if there is an onDrag callback\n\t\t\tif (cb) { e.currentTarget = t[0]; cb(e); }\t\t//if any, it is fired\t\t\t\n\t\t}\n\t\t\n\t\treturn false; \t//prevent text selection\t\t\t\t\n\t};\n\t\n\n\t/**\n\t * Event handler fired when the dragging is over, updating table layout\n\t */\n\tvar onGripDragOver = function(e){\t\n\t\t\n\t\td.unbind('touchend.'+SIGNATURE+' mouseup.'+SIGNATURE).unbind('touchmove.'+SIGNATURE+' mousemove.'+SIGNATURE);\n\t\t$(\"head :last-child\").remove(); \t\t\t\t//remove the dragging cursor style\t\n\t\tif(!drag) return;\n\t\tdrag.removeClass(drag.t.opt.draggingClass);\t\t//remove the grip's dragging css-class\n\t\tvar t = drag.t;\n\t\tvar cb = t.opt.onResize; \t\t\t//get some values\t\n\t\tif(drag.x){ \t\t\t\t\t\t\t\t\t//only if the column width has been changed\n\t\t\tsyncCols(t,drag.i, true);\tsyncGrips(t);\t//the columns and grips are updated\n\t\t\tif (cb) { e.currentTarget = t[0]; cb(e); }\t//if there is a callback function, it is fired\n\t\t}\n\t\tif(t.p && S) memento(t); \t\t\t\t\t\t//if postbackSafe is enabled and there is sessionStorage support, the new layout is serialized and stored\n\t\tdrag = null;\t\t\t\t\t\t\t\t\t//since the grip's dragging is over\t\t\t\t\t\t\t\t\t\n\t};\t\n\t\n\n\t/**\n\t * Event handler fired when the grip's dragging is about to start. Its main goal is to set up events \n\t * and store some values used while dragging.\n\t * @param {event} e - grip's mousedown event\n\t */\n\tvar onGripMouseDown = function(e){\n\t\tvar o = $(this).data(SIGNATURE);\t\t\t//retrieve grip's data\n\t\tvar t = tables[o.t], g = t.g[o.i];\t\t\t//shortcuts for the table and grip objects\n\t\tif (e.originalEvent.touches) {\n\t\t\tg.ox = e.originalEvent.touches[0].pageX;\n\t\t} else {\n\t\t\tg.ox = e.pageX;\t//the initial position is kept\n\t\t}\n\t\tg.l = g.position().left;\n\t\td.bind('touchmove.'+SIGNATURE+' mousemove.'+SIGNATURE, onGripDrag).bind('touchend.'+SIGNATURE+' mouseup.'+SIGNATURE,onGripDragOver);\t//mousemove and mouseup events are bound\n\t\th.append(\"<style type='text/css'>*{cursor:\"+ t.opt.dragCursor +\"!important}</style>\"); \t//change the mouse cursor\n\t\tg.addClass(t.opt.draggingClass); \t//add the dragging class (to allow some visual feedback)\t\t\t\t\n\t\tdrag = g;\t\t\t\t\t\t\t//the current grip is stored as the current dragging object\n\t\tif(t.c[o.i].l) for(var i=0,c; i<t.ln; i++){ c=t.c[i]; c.l = false; c.w= c.width(); } \t//if the colum is locked (after browser resize), then c.w must be updated\t\t\n\t\treturn false; \t//prevent text selection\n\t};\n\t\n\t/**\n\t * Event handler fired when the browser is resized. The main purpose of this function is to update\n\t * table layout according to the browser's size synchronizing related grips \n\t */\n\tvar onResize = function(){\n\t\tfor(t in tables){\t\t\n\t\t\tvar t = tables[t], i, mw=0;\t\t\t\t\n\t\t\tt.removeClass(SIGNATURE);\t\t\t\t\t\t//firefox doesnt like layout-fixed in some cases\n\t\t\tif (t.w != t.width()) {\t\t\t\t\t\t\t//if the the table's width has changed\n\t\t\t\tt.w = t.width();\t\t\t\t\t\t\t//its new value is kept\n\t\t\t\tfor(i=0; i<t.ln; i++) mw+= t.c[i].w;\t\t//the active cells area is obtained\n\t\t\t\t//cell rendering is not as trivial as it might seem, and it is slightly different for\n\t\t\t\t//each browser. In the begining i had a big switch for each browser, but since the code\n\t\t\t\t//was extremelly ugly now I use a different approach with several reflows. This works \n\t\t\t\t//pretty well but it's a bit slower. For now, lets keep things simple... \n\t\t\t\tfor(i=0; i<t.ln; i++) t.c[i].css(\"width\", M.round(1000*t.c[i].w/mw)/10 + \"%\").l=true; \n\t\t\t\t//c.l locks the column, telling us that its c.w is outdated\t\t\t\t\t\t\t\t\t\n\t\t\t}\n\t\t\tsyncGrips(t.addClass(SIGNATURE));\n\t\t}\n\t};\t\t\n\n\n\t//bind resize event, to update grips position \n\t$(window).bind('resize.'+SIGNATURE, onResize); \n\n\n\t/**\n\t * The plugin is added to the jQuery library\n\t * @param {Object} options - an object containg some basic customization values \n\t */\n $.fn.extend({ \n colResizable: function(options) { \n var defaults = {\n\t\t\t\n\t\t\t\t//attributes:\n draggingClass: 'JCLRgripDrag',\t//css-class used when a grip is being dragged (for visual feedback purposes)\n\t\t\t\tgripInnerHtml: '',\t\t\t\t//if it is required to use a custom grip it can be done using some custom HTML\t\t\t\t\n\t\t\t\tliveDrag: false,\t\t\t\t//enables table-layout updaing while dragging\t\t\t\n\t\t\t\tminWidth: 15, \t\t\t\t\t//minimum width value in pixels allowed for a column \n\t\t\t\theaderOnly: false,\t\t\t\t//specifies that the size of the the column resizing anchors will be bounded to the size of the first row \n\t\t\t\thoverCursor: \"e-resize\", \t\t//cursor to be used on grip hover\n\t\t\t\tdragCursor: \"e-resize\", \t\t//cursor to be used while dragging\n\t\t\t\tpostbackSafe: false, \t\t\t//when it is enabled, table layout can persist after postback. It requires browsers with sessionStorage support (it can be emulated with sessionStorage.js). Some browsers ony \n\t\t\t\tflush: false, \t\t\t\t\t//when postbakSafe is enabled, and it is required to prevent layout restoration after postback, 'flush' will remove its associated layout data \n\t\t\t\tmarginLeft: null,\t\t\t\t//in case the table contains any margins, colResizable needs to know the values used, e.g. \"10%\", \"15em\", \"5px\" ...\n\t\t\t\tmarginRight: null, \t\t\t\t//in case the table contains any margins, colResizable needs to know the values used, e.g. \"10%\", \"15em\", \"5px\" ...\n\t\t\t\tdisable: false,\t\t\t\t\t//disables all the enhancements performed in a previously colResized table\t\n\t\t\t\t\n\t\t\t\t//events:\n\t\t\t\tonDrag: null, \t\t\t\t\t//callback function to be fired during the column resizing process if liveDrag is enabled\n\t\t\t\tonResize: null\t\t\t\t\t//callback function fired when the dragging process is over\n }\t\t\t\n\t\t\tvar options = $.extend(defaults, options);\t\t\t\n return this.each(function() {\t\t\t\t\n \tinit( this, options); \n });\n }\n });\n\n\n},{\"jquery\":undefined}],3:[function(require,module,exports){\n/**\n * jQuery-csv (jQuery Plugin)\n * version: 0.71 (2012-11-19)\n *\n * This document is licensed as free software under the terms of the\n * MIT License: http://www.opensource.org/licenses/mit-license.php\n *\n * Acknowledgements:\n * The original design and influence to implement this library as a jquery\n * plugin is influenced by jquery-json (http://code.google.com/p/jquery-json/).\n * If you're looking to use native JSON.Stringify but want additional backwards\n * compatibility for browsers that don't support it, I highly recommend you\n * check it out.\n *\n * A special thanks goes out to rwk@acm.org for providing a lot of valuable\n * feedback to the project including the core for the new FSM\n * (Finite State Machine) parsers. If you're looking for a stable TSV parser\n * be sure to take a look at jquery-tsv (http://code.google.com/p/jquery-tsv/).\n\n * For legal purposes I'll include the \"NO WARRANTY EXPRESSED OR IMPLIED.\n * USE AT YOUR OWN RISK.\". Which, in 'layman's terms' means, by using this\n * library you are accepting responsibility if it breaks your code.\n *\n * Legal jargon aside, I will do my best to provide a useful and stable core\n * that can effectively be built on.\n *\n * Copyrighted 2012 by Evan Plaice.\n */\n\nRegExp.escape= function(s) {\n return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n};\n\n 'use strict'\n var $ = (function(){try{return require('jquery')}catch(e){return window.jQuery}})();\n /**\n * jQuery.csv.defaults\n * Encapsulates the method paramater defaults for the CSV plugin module.\n */\n\n $.csv = {\n defaults: {\n separator:',',\n delimiter:'\"',\n headers:true\n },\n\n hooks: {\n castToScalar: function(value, state) {\n var hasDot = /\\./;\n if (isNaN(value)) {\n return value;\n } else {\n if (hasDot.test(value)) {\n return parseFloat(value);\n } else {\n var integer = parseInt(value);\n if(isNaN(integer)) {\n return null;\n } else {\n return integer;\n }\n }\n }\n }\n },\n\n parsers: {\n parse: function(csv, options) {\n // cache settings\n var separator = options.separator;\n var delimiter = options.delimiter;\n\n // set initial state if it's missing\n if(!options.state.rowNum) {\n options.state.rowNum = 1;\n }\n if(!options.state.colNum) {\n options.state.colNum = 1;\n }\n\n // clear initial state\n var data = [];\n var entry = [];\n var state = 0;\n var value = ''\n var exit = false;\n\n function endOfEntry() {\n // reset the state\n state = 0;\n value = '';\n\n // if 'start' hasn't been met, don't output\n if(options.start && options.state.rowNum < options.start) {\n // update global state\n entry = [];\n options.state.rowNum++;\n options.state.colNum = 1;\n return;\n }\n \n if(options.onParseEntry === undefined) {\n // onParseEntry hook not set\n data.push(entry);\n } else {\n var hookVal = options.onParseEntry(entry, options.state); // onParseEntry Hook\n // false skips the row, configurable through a hook\n if(hookVal !== false) {\n data.push(hookVal);\n }\n }\n //console.log('entry:' + entry);\n \n // cleanup\n entry = [];\n\n // if 'end' is met, stop parsing\n if(options.end && options.state.rowNum >= options.end) {\n exit = true;\n }\n \n // update global state\n options.state.rowNum++;\n options.state.colNum = 1;\n }\n\n function endOfValue() {\n if(options.onParseValue === undefined) {\n // onParseValue hook not set\n entry.push(value);\n } else {\n var hook = options.onParseValue(value, options.state); // onParseValue Hook\n // false skips the row, configurable through a hook\n if(hook !== false) {\n entry.push(hook);\n }\n }\n //console.log('value:' + value);\n // reset the state\n value = '';\n state = 0;\n // update global state\n options.state.colNum++;\n }\n\n // escape regex-specific control chars\n var escSeparator = RegExp.escape(separator);\n var escDelimiter = RegExp.escape(delimiter);\n\n // compile the regEx str using the custom delimiter/separator\n var match = /(D|S|\\n|\\r|[^DS\\r\\n]+)/;\n var matchSrc = match.source;\n matchSrc = matchSrc.replace(/S/g, escSeparator);\n matchSrc = matchSrc.replace(/D/g, escDelimiter);\n match = RegExp(matchSrc, 'gm');\n\n // put on your fancy pants...\n // process control chars individually, use look-ahead on non-control chars\n csv.replace(match, function (m0) {\n if(exit) {\n return;\n }\n switch (state) {\n // the start of a value\n case 0:\n // null last value\n if (m0 === separator) {\n value += '';\n endOfValue();\n break;\n }\n // opening delimiter\n if (m0 === delimiter) {\n state = 1;\n break;\n }\n // null last value\n if (m0 === '\\n') {\n endOfValue();\n endOfEntry();\n break;\n }\n // phantom carriage return\n if (/^\\r$/.test(m0)) {\n break;\n }\n // un-delimited value\n value += m0;\n state = 3;\n break;\n\n // delimited input\n case 1:\n // second delimiter? check further\n if (m0 === delimiter) {\n state = 2;\n break;\n }\n // delimited data\n value += m0;\n state = 1;\n break;\n\n // delimiter found in delimited input\n case 2:\n // escaped delimiter?\n if (m0 === delimiter) {\n value += m0;\n state = 1;\n break;\n }\n // null value\n if (m0 === separator) {\n endOfValue();\n break;\n }\n // end of entry\n if (m0 === '\\n') {\n endOfValue();\n endOfEntry();\n break;\n }\n // phantom carriage return\n if (/^\\r$/.test(m0)) {\n break;\n }\n // broken paser?\n throw new Error('CSVDataError: Illegal State [Row:' + options.state.rowNum + '][Col:' + options.state.colNum + ']');\n\n // un-delimited input\n case 3:\n // null last value\n if (m0 === separator) {\n endOfValue();\n break;\n }\n // end of entry\n if (m0 === '\\n') {\n endOfValue();\n endOfEntry();\n break;\n }\n // phantom carriage return\n if (/^\\r$/.test(m0)) {\n break;\n }\n if (m0 === delimiter) {\n // non-compliant data\n throw new Error('CSVDataError: Illegal Quote [Row:' + options.state.rowNum + '][Col:' + options.state.colNum + ']');\n }\n // broken parser?\n throw new Error('CSVDataError: Illegal Data [Row:' + options.state.rowNum + '][Col:' + options.state.colNum + ']');\n default:\n // shenanigans\n throw new Error('CSVDataError: Unknown State [Row:' + options.state.rowNum + '][Col:' + options.state.colNum + ']');\n }\n //console.log('val:' + m0 + ' state:' + state);\n });\n\n // submit the last entry\n // ignore null last line\n if(entry.length !== 0) {\n endOfValue();\n endOfEntry();\n }\n\n return data;\n },\n\n // a csv-specific line splitter\n splitLines: function(csv, options) {\n // cache settings\n var separator = options.separator;\n var delimiter = options.delimiter;\n\n // set initial state if it's missing\n if(!options.state.rowNum) {\n options.state.rowNum = 1;\n }\n\n // clear initial state\n var entries = [];\n var state = 0;\n var entry = '';\n var exit = false;\n\n function endOfLine() { \n // reset the state\n state = 0;\n \n // if 'start' hasn't been met, don't output\n if(options.start && options.state.rowNum < options.start) {\n // update global state\n entry = '';\n options.state.rowNum++;\n return;\n }\n \n if(options.onParseEntry === undefined) {\n // onParseEntry hook not set\n entries.push(entry);\n } else {\n var hookVal = options.onParseEntry(entry, options.state); // onParseEntry Hook\n // false skips the row, configurable through a hook\n if(hookVal !== false) {\n entries.push(hookVal);\n }\n }\n\n // cleanup\n entry = '';\n\n // if 'end' is met, stop parsing\n if(options.end && options.state.rowNum >= options.end) {\n exit = true;\n }\n \n // update global state\n options.state.rowNum++;\n }\n\n // escape regex-specific control chars\n var escSeparator = RegExp.escape(separator);\n var escDelimiter = RegExp.escape(delimiter);\n\n // compile the regEx str using the custom delimiter/separator\n var match = /(D|S|\\n|\\r|[^DS\\r\\n]+)/;\n var matchSrc = match.source;\n matchSrc = matchSrc.replace(/S/g, escSeparator);\n matchSrc = matchSrc.replace(/D/g, escDelimiter);\n match = RegExp(matchSrc, 'gm');\n \n // put on your fancy pants...\n // process control chars individually, use look-ahead on non-control chars\n csv.replace(match, function (m0) {\n if(exit) {\n return;\n }\n switch (state) {\n // the start of a value/entry\n case 0:\n // null value\n if (m0 === separator) {\n entry += m0;\n state = 0;\n break;\n }\n // opening delimiter\n if (m0 === delimiter) {\n entry += m0;\n state = 1;\n break;\n }\n // end of line\n if (m0 === '\\n') {\n endOfLine();\n break;\n }\n // phantom carriage return\n if (/^\\r$/.test(m0)) {\n break;\n }\n // un-delimit value\n entry += m0;\n state = 3;\n break;\n\n // delimited input\n case 1:\n // second delimiter? check further\n if (m0 === delimiter) {\n entry += m0;\n state = 2;\n break;\n }\n // delimited data\n entry += m0;\n state = 1;\n break;\n\n // delimiter found in delimited input\n case 2:\n // escaped delimiter?\n var prevChar = entry.substr(entry.length - 1);\n if (m0 === delimiter && prevChar === delimiter) {\n entry += m0;\n state = 1;\n break;\n }\n // end of value\n if (m0 === separator) {\n entry += m0;\n state = 0;\n break;\n }\n // end of line\n if (m0 === '\\n') {\n endOfLine();\n break;\n }\n // phantom carriage return\n if (m0 === '\\r') {\n break;\n }\n // broken paser?\n throw new Error('CSVDataError: Illegal state [Row:' + options.state.rowNum + ']');\n\n // un-delimited input\n case 3:\n // null value\n if (m0 === separator) {\n entry += m0;\n state = 0;\n break;\n }\n // end of line\n if (m0 === '\\n') {\n endOfLine();\n break;\n }\n // phantom carriage return\n if (m0 === '\\r') {\n break;\n }\n // non-compliant data\n if (m0 === delimiter) {\n throw new Error('CSVDataError: Illegal quote [Row:' + options.state.rowNum + ']');\n }\n // broken parser?\n throw new Error('CSVDataError: Illegal state [Row:' + options.state.rowNum + ']');\n default:\n // shenanigans\n throw new Error('CSVDataError: Unknown state [Row:' + options.state.rowNum + ']');\n }\n //console.log('val:' + m0 + ' state:' + state);\n });\n\n // submit the last entry\n // ignore null last line\n if(entry !== '') {\n endOfLine();\n }\n\n return entries;\n },\n\n // a csv entry parser\n parseEntry: function(csv, options) {\n // cache settings\n var separator = options.separator;\n var delimiter = options.delimiter;\n \n // set initial state if it's missing\n if(!options.state.rowNum) {\n options.state.rowNum = 1;\n }\n if(!options.state.colNum) {\n options.state.colNum = 1;\n }\n\n // clear initial state\n var entry = [];\n var state = 0;\n var value = '';\n\n function endOfValue() {\n if(options.onParseValue === undefined) {\n // onParseValue hook not set\n entry.push(value);\n } else {\n var hook = options.onParseValue(value, options.state); // onParseValue Hook\n // false skips the value, configurable through a hook\n if(hook !== false) {\n entry.push(hook);\n }\n }\n // reset the state\n value = '';\n state = 0;\n // update global state\n options.state.colNum++;\n }\n\n // checked for a cached regEx first\n if(!options.match) {\n // escape regex-specific control chars\n var escSeparator = RegExp.escape(separator);\n var escDelimiter = RegExp.escape(delimiter);\n \n // compile the regEx str using the custom delimiter/separator\n var match = /(D|S|\\n|\\r|[^DS\\r\\n]+)/;\n var matchSrc = match.source;\n matchSrc = matchSrc.replace(/S/g, escSeparator);\n matchSrc = matchSrc.replace(/D/g, escDelimiter);\n options.match = RegExp(matchSrc, 'gm');\n }\n\n // put on your fancy pants...\n // process control chars individually, use look-ahead on non-control chars\n csv.replace(options.match, function (m0) {\n switch (state) {\n // the start of a value\n case 0:\n // null last value\n if (m0 === separator) {\n value += '';\n endOfValue();\n break;\n }\n // opening delimiter\n if (m0 === delimiter) {\n state = 1;\n break;\n }\n // skip un-delimited new-lines\n if (m0 === '\\n' || m0 === '\\r') {\n break;\n }\n // un-delimited value\n value += m0;\n state = 3;\n break;\n\n // delimited input\n case 1:\n // second delimiter? check further\n if (m0 === delimiter) {\n state = 2;\n break;\n }\n // delimited data\n value += m0;\n state = 1;\n break;\n\n // delimiter found in delimited input\n case 2:\n // escaped delimiter?\n if (m0 === delimiter) {\n value += m0;\n state = 1;\n break;\n }\n // null value\n if (m0 === separator) {\n endOfValue();\n break;\n }\n // skip un-delimited new-lines\n if (m0 === '\\n' || m0 === '\\r') {\n break;\n }\n // broken paser?\n throw new Error('CSVDataError: Illegal State [Row:' + options.state.rowNum + '][Col:' + options.state.colNum + ']');\n\n // un-delimited input\n case 3:\n // null last value\n if (m0 === separator) {\n endOfValue();\n break;\n }\n // skip un-delimited new-lines\n if (m0 === '\\n' || m0 === '\\r') {\n break;\n }\n // non-compliant data\n if (m0 === delimiter) {\n throw new Error('CSVDataError: Illegal Quote [Row:' + options.state.rowNum + '][Col:' + options.state.colNum + ']');\n }\n // broken parser?\n throw new Error('CSVDataError: Illegal Data [Row:' + options.state.rowNum + '][Col:' + options.state.colNum + ']');\n default:\n // shenanigans\n throw new Error('CSVDataError: Unknown State [Row:' + options.state.rowNum + '][Col:' + options.state.colNum + ']');\n }\n //console.log('val:' + m0 + ' state:' + state);\n });\n\n // submit the last value\n endOfValue();\n\n return entry;\n }\n },\n\n /**\n * $.csv.toArray(csv)\n * Converts a CSV entry string to a javascript array.\n *\n * @param {Array} csv The string containing the CSV data.\n * @param {Object} [options] An object containing user-defined options.\n * @param {Character} [separator] An override for the separator character. Defaults to a comma(,).\n * @param {Character} [delimiter] An override for the delimiter character. Defaults to a double-quote(\").\n *\n * This method deals with simple CSV strings only. It's useful if you only\n * need to parse a single entry. If you need to parse more than one line,\n * use $.csv2Array instead.\n */\n toArray: function(csv, options, callback) {\n var options = (options !== undefined ? options : {});\n var config = {};\n config.callback = ((callback !== undefined && typeof(callback) === 'function') ? callback : false);\n config.separator = 'separator' in options ? options.separator : $.csv.defaults.separator;\n config.delimiter = 'delimiter' in options ? options.delimiter : $.csv.defaults.delimiter;\n var state = (options.state !== undefined ? options.state : {});\n\n // setup\n var options = {\n delimiter: config.delimiter,\n separator: config.separator,\n onParseEntry: options.onParseEntry,\n onParseValue: options.onParseValue,\n state: state\n }\n\n var entry = $.csv.parsers.parseEntry(csv, options);\n\n // push the value to a callback if one is defined\n if(!config.callback) {\n return entry;\n } else {\n config.callback('', entry);\n }\n },\n\n /**\n * $.csv.toArrays(csv)\n * Converts a CSV string to a javascript array.\n *\n * @param {String} csv The string containing the raw CSV data.\n * @param {Object} [options] An object containing user-defined options.\n * @param {Character} [separator] An override for the separator character. Defaults to a comma(,).\n * @param {Character} [delimiter] An override for the delimiter character. Defaults to a double-quote(\").\n *\n * This method deals with multi-line CSV. The breakdown is simple. The first\n * dimension of the array represents the line (or entry/row) while the second\n * dimension contains the values (or values/columns).\n */\n toArrays: function(csv, options, callback) {\n var options = (options !== undefined ? options : {});\n var config = {};\n config.callback = ((callback !== undefined && typeof(callback) === 'function') ? callback : false);\n config.separator = 'separator' in options ? options.separator : $.csv.defaults.separator;\n config.delimiter = 'delimiter' in options ? options.delimiter : $.csv.defaults.delimiter;\n \n // setup\n var data = [];\n var options = {\n delimiter: config.delimiter,\n separator: config.separator,\n onParseEntry: options.onParseEntry,\n onParseValue: options.onParseValue,\n start: options.start,\n end: options.end,\n state: {\n rowNum: 1,\n colNum: 1\n }\n };\n\n // break the data down to lines\n data = $.csv.parsers.parse(csv, options);\n\n // push the value to a callback if one is defined\n if(!config.callback) {\n return data;\n } else {\n config.callback('', data);\n }\n },\n\n /**\n * $.csv.toObjects(csv)\n * Converts a CSV string to a javascript object.\n * @param {String} csv The string containing the raw CSV data.\n * @param {Object} [options] An object containing user-defined options.\n * @param {Character} [separator] An override for the separator character. Defaults to a comma(,).\n * @param {Character} [delimiter] An override for the delimiter character. Defaults to a double-quote(\").\n * @param {Boolean} [headers] Indicates whether the data contains a header line. Defaults to true.\n *\n * This method deals with multi-line CSV strings. Where the headers line is\n * used as the key for each value per entry.\n */\n toObjects: function(csv, options, callback) {\n var options = (options !== undefined ? options : {});\n var config = {};\n config.callback = ((callback !== undefined && typeof(callback) === 'function') ? callback : false);\n config.separator = 'separator' in options ? options.separator : $.csv.defaults.separator;\n config.delimiter = 'delimiter' in options ? options.delimiter : $.csv.defaults.delimiter;\n config.headers = 'headers' in options ? options.headers : $.csv.defaults.headers;\n options.start = 'start' in options ? options.start : 1;\n \n // account for headers\n if(config.headers) {\n options.start++;\n }\n if(options.end && config.headers) {\n options.end++;\n }\n \n // setup\n var lines = [];\n var data = [];\n \n var options = {\n delimiter: config.delimiter,\n separator: config.separator,\n onParseEntry: options.onParseEntry,\n onParseValue: options.onParseValue,\n start: options.start,\n end: options.end,\n state: {\n rowNum: 1,\n colNum: 1\n },\n match: false\n };\n\n // fetch the headers\n var headerOptions = {\n delimiter: config.delimiter,\n separator: config.separator,\n start: 1,\n end: 1,\n state: {\n rowNum:1,\n colNum:1\n }\n }\n var headerLine = $.csv.parsers.splitLines(csv, headerOptions);\n var headers = $.csv.toArray(headerLine[0], options);\n\n // fetch the data\n var lines = $.csv.parsers.splitLines(csv, options);\n \n // reset the state for re-use\n options.state.colNum = 1;\n if(headers){\n options.state.rowNum = 2;\n } else {\n options.state.rowNum = 1;\n }\n \n // convert data to objects\n for(var i=0, len=lines.length; i<len; i++) {\n var entry = $.csv.toArray(lines[i], options);\n var object = {};\n for(var j in headers) {\n object[headers[j]] = entry[j];\n }\n data.push(object);\n \n // update row state\n options.state.rowNum++;\n }\n\n // push the value to a callback if one is defined\n if(!config.callback) {\n return data;\n } else {\n config.callback('', data);\n }\n },\n\n /**\n * $.csv.fromArrays(arrays)\n * Converts a javascript array to a CSV String.\n *\n * @param {Array} array An array containing an array of CSV entries.\n * @param {Object} [options] An object containing user-defined options.\n * @param {Character} [separator] An override for the separator character. Defaults to a comma(,).\n * @param {Character} [delimiter] An override for the delimiter character. Defaults to a double-quote(\").\n *\n * This method generates a CSV file from an array of arrays (representing entries).\n */\n fromArrays: function(arrays, options, callback) {\n var options = (options !== undefined ? options : {});\n var config = {};\n config.callback = ((callback !== undefined && typeof(callback) === 'function') ? callback : false);\n config.separator = 'separator' in options ? options.separator : $.csv.defaults.separator;\n config.delimiter = 'delimiter' in options ? options.delimiter : $.csv.defaults.delimiter;\n config.escaper = 'escaper' in options ? options.escaper : $.csv.defaults.escaper;\n config.experimental = 'experimental' in options ? options.experimental : false;\n\n if(!config.experimental) {\n throw new Error('not implemented');\n }\n\n var output = [];\n for(i in arrays) {\n output.push(arrays[i]);\n }\n\n // push the value to a callback if one is defined\n if(!config.callback) {\n return output;\n } else {\n config.callback('', output);\n }\n },\n\n /**\n * $.csv.fromObjects(objects)\n * Converts a javascript dictionary to a CSV string.\n * @param {Object} objects An array of objects containing the data.\n * @param {Object} [options] An object containing user-defined options.\n * @param {Character} [separator] An override for the separator character. Defaults to a comma(,).\n * @param {Character} [delimiter] An override for the delimiter character. Defaults to a double-quote(\").\n *\n * This method generates a CSV file from an array of objects (name:value pairs).\n * It starts by detecting the headers and adding them as the first line of\n * the CSV file, followed by a structured dump of the data.\n */\n fromObjects2CSV: function(objects, options, callback) {\n var options = (options !== undefined ? options : {});\n var config = {};\n config.callback = ((callback !== undefined && typeof(callback) === 'function') ? callback : false);\n config.separator = 'separator' in options ? options.separator : $.csv.defaults.separator;\n config.delimiter = 'delimiter' in options ? options.delimiter : $.csv.defaults.delimiter;\n config.experimental = 'experimental' in options ? options.experimental : false;\n\n if(!config.experimental) {\n throw new Error('not implemented');\n }\n\n var output = [];\n for(i in objects) {\n output.push(arrays[i]);\n }\n\n // push the value to a callback if one is defined\n if(!config.callback) {\n return output;\n } else {\n config.callback('', output);\n }\n }\n };\n\n // Maintenance code to maintain backward-compatibility\n // Will be removed in release 1.0\n $.csvEntry2Array = $.csv.toArray;\n $.csv2Array = $.csv.toArrays;\n $.csv2Dictionary = $.csv.toObjects;\n\n\n\n},{\"jquery\":undefined}],4:[function(require,module,exports){\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nfunction EventEmitter() {\n this._events = this._events || {};\n this._maxListeners = this._maxListeners || undefined;\n}\nmodule.exports = EventEmitter;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nEventEmitter.defaultMaxListeners = 10;\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function(n) {\n if (!isNumber(n) || n < 0 || isNaN(n))\n throw TypeError('n must be a positive number');\n this._maxListeners = n;\n return this;\n};\n\nEventEmitter.prototype.emit = function(type) {\n var er, handler, len, args, i, listeners;\n\n if (!this._events)\n this._events = {};\n\n // If there is no 'error' event listener then throw.\n if (type === 'error') {\n if (!this._events.error ||\n (isObject(this._events.error) && !this._events.error.length)) {\n er = arguments[1];\n if (er instanceof Error) {\n throw er; // Unhandled 'error' event\n }\n throw TypeError('Uncaught, unspecified \"error\" event.');\n }\n }\n\n handler = this._events[type];\n\n if (isUndefined(handler))\n return false;\n\n if (isFunction(handler)) {\n switch (arguments.length) {\n // fast cases\n case 1:\n handler.call(this);\n break;\n case 2:\n handler.call(this, arguments[1]);\n break;\n case 3:\n handler.call(this, arguments[1], arguments[2]);\n break;\n // slower\n default:\n len = arguments.length;\n args = new Array(len - 1);\n for (i = 1; i < len; i++)\n args[i - 1] = arguments[i];\n handler.apply(this, args);\n }\n } else if (isObject(handler)) {\n len = arguments.length;\n args = new Array(len - 1);\n for (i = 1; i < len; i++)\n args[i - 1] = arguments[i];\n\n listeners = handler.slice();\n len = listeners.length;\n for (i = 0; i < len; i++)\n listeners[i].apply(this, args);\n }\n\n return true;\n};\n\nEventEmitter.prototype.addListener = function(type, listener) {\n var m;\n\n if (!isFunction(listener))\n throw TypeError('listener must be a function');\n\n if (!this._events)\n this._events = {};\n\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (this._events.newListener)\n this.emit('newListener', type,\n isFunction(listener.listener) ?\n listener.listener : listener);\n\n if (!this._events[type])\n // Optimize the case of one listener. Don't need the extra array object.\n this._events[type] = listener;\n else if (isObject(this._events[type]))\n // If we've already got an array, just append.\n this._events[type].push(listener);\n else\n // Adding the second element, need to change to array.\n this._events[type] = [this._events[type], listener];\n\n // Check for listener leak\n if (isObject(this._events[type]) && !this._events[type].warned) {\n var m;\n if (!isUndefined(this._maxListeners)) {\n m = this._maxListeners;\n } else {\n m = EventEmitter.defaultMaxListeners;\n }\n\n if (m && m > 0 && this._events[type].length > m) {\n this._events[type].warned = true;\n console.error('(node) warning: possible EventEmitter memory ' +\n 'leak detected. %d listeners added. ' +\n 'Use emitter.setMaxListeners() to increase limit.',\n this._events[type].length);\n if (typeof console.trace === 'function') {\n // not supported in IE 10\n console.trace();\n }\n }\n }\n\n return this;\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.once = function(type, listener) {\n if (!isFunction(listener))\n throw TypeError('listener must be a function');\n\n var fired = false;\n\n function g() {\n this.removeListener(type, g);\n\n if (!fired) {\n fired = true;\n listener.apply(this, arguments);\n }\n }\n\n g.listener = listener;\n this.on(type, g);\n\n return this;\n};\n\n// emits a 'removeListener' event iff the listener was removed\nEventEmitter.prototype.removeListener = function(type, listener) {\n var list, position, length, i;\n\n if (!isFunction(listener))\n throw TypeError('listener must be a function');\n\n if (!this._events || !this._events[type])\n return this;\n\n list = this._events[type];\n length = list.length;\n position = -1;\n\n if (list === listener ||\n (isFunction(list.listener) && list.listener === listener)) {\n delete this._events[type];\n if (this._events.removeListener)\n this.emit('removeListener', type, listener);\n\n } else if (isObject(list)) {\n for (i = length; i-- > 0;) {\n if (list[i] === listener ||\n (list[i].listener && list[i].listener === listener)) {\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (list.length === 1) {\n list.length = 0;\n delete this._events[type];\n } else {\n list.splice(position, 1);\n }\n\n if (this._events.removeListener)\n this.emit('removeListener', type, listener);\n }\n\n return this;\n};\n\nEventEmitter.prototype.removeAllListeners = function(type) {\n var key, listeners;\n\n if (!this._events)\n return this;\n\n // not listening for removeListener, no need to emit\n if (!this._events.removeListener) {\n if (arguments.length === 0)\n this._events = {};\n else if (this._events[type])\n delete this._events[type];\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n for (key in this._events) {\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = {};\n return this;\n }\n\n listeners = this._events[type];\n\n if (isFunction(listeners)) {\n this.removeListener(type, listeners);\n } else {\n // LIFO order\n while (listeners.length)\n this.removeListener(type, listeners[listeners.length - 1]);\n }\n delete this._events[type];\n\n return this;\n};\n\nEventEmitter.prototype.listeners = function(type) {\n var ret;\n if (!this._events || !this._events[type])\n ret = [];\n else if (isFunction(this._events[type]))\n ret = [this._events[type]];\n else\n ret = this._events[type].slice();\n return ret;\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n var ret;\n if (!emitter._events || !emitter._events[type])\n ret = 0;\n else if (isFunction(emitter._events[type]))\n ret = 1;\n else\n ret = emitter._events[type].length;\n return ret;\n};\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\n\n},{}],5:[function(require,module,exports){\n// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod((function(){try{return require('codemirror')}catch(e){return window.CodeMirror}})());\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n var ie_lt8 = /MSIE \\d/.test(navigator.userAgent) &&\n (document.documentMode == null || document.documentMode < 8);\n\n var Pos = CodeMirror.Pos;\n\n var matching = {\"(\": \")>\", \")\": \"(<\", \"[\": \"]>\", \"]\": \"[<\", \"{\": \"}>\", \"}\": \"{<\"};\n\n function findMatchingBracket(cm, where, strict, config) {\n var line = cm.getLineHandle(where.line), pos = where.ch - 1;\n var match = (pos >= 0 && matching[line.text.charAt(pos)]) || matching[line.text.charAt(++pos)];\n if (!match) return null;\n var dir = match.charAt(1) == \">\" ? 1 : -1;\n if (strict && (dir > 0) != (pos == where.ch)) return null;\n var style = cm.getTokenTypeAt(Pos(where.line, pos + 1));\n\n var found = scanForBracket(cm, Pos(where.line, pos + (dir > 0 ? 1 : 0)), dir, style || null, config);\n if (found == null) return null;\n return {from: Pos(where.line, pos), to: found && found.pos,\n match: found && found.ch == match.charAt(0), forward: dir > 0};\n }\n\n // bracketRegex is used to specify which type of bracket to scan\n // should be a regexp, e.g. /[[\\]]/\n //\n // Note: If \"where\" is on an open bracket, then this bracket is ignored.\n //\n // Returns false when no bracket was found, null when it reached\n // maxScanLines and gave up\n function scanForBracket(cm, where, dir, style, config) {\n var maxScanLen = (config && config.maxScanLineLength) || 10000;\n var maxScanLines = (config && config.maxScanLines) || 1000;\n\n var stack = [];\n var re = config && config.bracketRegex ? config.bracketRegex : /[(){}[\\]]/;\n var lineEnd = dir > 0 ? Math.min(where.line + maxScanLines, cm.lastLine() + 1)\n : Math.max(cm.firstLine() - 1, where.line - maxScanLines);\n for (var lineNo = where.line; lineNo != lineEnd; lineNo += dir) {\n var line = cm.getLine(lineNo);\n if (!line) continue;\n var pos = dir > 0 ? 0 : line.length - 1, end = dir > 0 ? line.length : -1;\n if (line.length > maxScanLen) continue;\n if (lineNo == where.line) pos = where.ch - (dir < 0 ? 1 : 0);\n for (; pos != end; pos += dir) {\n var ch = line.charAt(pos);\n if (re.test(ch) && (style === undefined || cm.getTokenTypeAt(Pos(lineNo, pos + 1)) == style)) {\n var match = matching[ch];\n if ((match.charAt(1) == \">\") == (dir > 0)) stack.push(ch);\n else if (!stack.length) return {pos: Pos(lineNo, pos), ch: ch};\n else stack.pop();\n }\n }\n }\n return lineNo - dir == (dir > 0 ? cm.lastLine() : cm.firstLine()) ? false : null;\n }\n\n function matchBrackets(cm, autoclear, config) {\n // Disable brace matching in long lines, since it'll cause hugely slow updates\n var maxHighlightLen = cm.state.matchBrackets.maxHighlightLineLength || 1000;\n var marks = [], ranges = cm.listSelections();\n for (var i = 0; i < ranges.length; i++) {\n var match = ranges[i].empty() && findMatchingBracket(cm, ranges[i].head, false, config);\n if (match && cm.getLine(match.from.line).length <= maxHighlightLen) {\n var style = match.match ? \"CodeMirror-matchingbracket\" : \"CodeMirror-nonmatchingbracket\";\n marks.push(cm.markText(match.from, Pos(match.from.line, match.from.ch + 1), {className: style}));\n if (match.to && cm.getLine(match.to.line).length <= maxHighlightLen)\n marks.push(cm.markText(match.to, Pos(match.to.line, match.to.ch + 1), {className: style}));\n }\n }\n\n if (marks.length) {\n // Kludge to work around the IE bug from issue #1193, where text\n // input stops going to the textare whever this fires.\n if (ie_lt8 && cm.state.focused) cm.display.input.focus();\n\n var clear = function() {\n cm.operation(function() {\n for (var i = 0; i < marks.length; i++) marks[i].clear();\n });\n };\n if (autoclear) setTimeout(clear, 800);\n else return clear;\n }\n }\n\n var currentlyHighlighted = null;\n function doMatchBrackets(cm) {\n cm.operation(function() {\n if (currentlyHighlighted) {currentlyHighlighted(); currentlyHighlighted = null;}\n currentlyHighlighted = matchBrackets(cm, false, cm.state.matchBrackets);\n });\n }\n\n CodeMirror.defineOption(\"matchBrackets\", false, function(cm, val, old) {\n if (old && old != CodeMirror.Init)\n cm.off(\"cursorActivity\", doMatchBrackets);\n if (val) {\n cm.state.matchBrackets = typeof val == \"object\" ? val : {};\n cm.on(\"cursorActivity\", doMatchBrackets);\n }\n });\n\n CodeMirror.defineExtension(\"matchBrackets\", function() {matchBrackets(this, true);});\n CodeMirror.defineExtension(\"findMatchingBracket\", function(pos, strict, config){\n return findMatchingBracket(this, pos, strict, config);\n });\n CodeMirror.defineExtension(\"scanForBracket\", function(pos, dir, style, config){\n return scanForBracket(this, pos, dir, style, config);\n });\n});\n\n},{\"codemirror\":undefined}],6:[function(require,module,exports){\n// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod((function(){try{return require('codemirror')}catch(e){return window.CodeMirror}})());\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nCodeMirror.registerHelper(\"fold\", \"brace\", function(cm, start) {\n var line = start.line, lineText = cm.getLine(line);\n var startCh, tokenType;\n\n function findOpening(openCh) {\n for (var at = start.ch, pass = 0;;) {\n var found = at <= 0 ? -1 : lineText.lastIndexOf(openCh, at - 1);\n if (found == -1) {\n if (pass == 1) break;\n pass = 1;\n at = lineText.length;\n continue;\n }\n if (pass == 1 && found < start.ch) break;\n tokenType = cm.getTokenTypeAt(CodeMirror.Pos(line, found + 1));\n if (!/^(comment|string)/.test(tokenType)) return found + 1;\n at = found - 1;\n }\n }\n\n var startToken = \"{\", endToken = \"}\", startCh = findOpening(\"{\");\n if (startCh == null) {\n startToken = \"[\", endToken = \"]\";\n startCh = findOpening(\"[\");\n }\n\n if (startCh == null) return;\n var count = 1, lastLine = cm.lastLine(), end, endCh;\n outer: for (var i = line; i <= lastLine; ++i) {\n var text = cm.getLine(i), pos = i == line ? startCh : 0;\n for (;;) {\n var nextOpen = text.indexOf(startToken, pos), nextClose = text.indexOf(endToken, pos);\n if (nextOpen < 0) nextOpen = text.length;\n if (nextClose < 0) nextClose = text.length;\n pos = Math.min(nextOpen, nextClose);\n if (pos == text.length) break;\n if (cm.getTokenTypeAt(CodeMirror.Pos(i, pos + 1)) == tokenType) {\n if (pos == nextOpen) ++count;\n else if (!--count) { end = i; endCh = pos; break outer; }\n }\n ++pos;\n }\n }\n if (end == null || line == end && endCh == startCh) return;\n return {from: CodeMirror.Pos(line, startCh),\n to: CodeMirror.Pos(end, endCh)};\n});\n\nCodeMirror.registerHelper(\"fold\", \"import\", function(cm, start) {\n function hasImport(line) {\n if (line < cm.firstLine() || line > cm.lastLine()) return null;\n var start = cm.getTokenAt(CodeMirror.Pos(line, 1));\n if (!/\\S/.test(start.string)) start = cm.getTokenAt(CodeMirror.Pos(line, start.end + 1));\n if (start.type != \"keyword\" || start.string != \"import\") return null;\n // Now find closing semicolon, return its position\n for (var i = line, e = Math.min(cm.lastLine(), line + 10); i <= e; ++i) {\n var text = cm.getLine(i), semi = text.indexOf(\";\");\n if (semi != -1) return {startCh: start.end, end: CodeMirror.Pos(i, semi)};\n }\n }\n\n var start = start.line, has = hasImport(start), prev;\n if (!has || hasImport(start - 1) || ((prev = hasImport(start - 2)) && prev.end.line == start - 1))\n return null;\n for (var end = has.end;;) {\n var next = hasImport(end.line + 1);\n if (next == null) break;\n end = next.end;\n }\n return {from: cm.clipPos(CodeMirror.Pos(start, has.startCh + 1)), to: end};\n});\n\nCodeMirror.registerHelper(\"fold\", \"include\", function(cm, start) {\n function hasInclude(line) {\n if (line < cm.firstLine() || line > cm.lastLine()) return null;\n var start = cm.getTokenAt(CodeMirror.Pos(line, 1));\n if (!/\\S/.test(start.string)) start = cm.getTokenAt(CodeMirror.Pos(line, start.end + 1));\n if (start.type == \"meta\" && start.string.slice(0, 8) == \"#include\") return start.start + 8;\n }\n\n var start = start.line, has = hasInclude(start);\n if (has == null || hasInclude(start - 1) != null) return null;\n for (var end = start;;) {\n var next = hasInclude(end + 1);\n if (next == null) break;\n ++end;\n }\n return {from: CodeMirror.Pos(start, has + 1),\n to: cm.clipPos(CodeMirror.Pos(end))};\n});\n\n});\n\n},{\"codemirror\":undefined}],7:[function(require,module,exports){\n// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod((function(){try{return require('codemirror')}catch(e){return window.CodeMirror}})());\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n \"use strict\";\n\n function doFold(cm, pos, options, force) {\n if (options && options.call) {\n var finder = options;\n options = null;\n } else {\n var finder = getOption(cm, options, \"rangeFinder\");\n }\n if (typeof pos == \"number\") pos = CodeMirror.Pos(pos, 0);\n var minSize = getOption(cm, options, \"minFoldSize\");\n\n function getRange(allowFolded) {\n var range = finder(cm, pos);\n if (!range || range.to.line - range.from.line < minSize) return null;\n var marks = cm.findMarksAt(range.from);\n for (var i = 0; i < marks.length; ++i) {\n if (marks[i].__isFold && force !== \"fold\") {\n if (!allowFolded) return null;\n range.cleared = true;\n marks[i].clear();\n }\n }\n return range;\n }\n\n var range = getRange(true);\n if (getOption(cm, options, \"scanUp\")) while (!range && pos.line > cm.firstLine()) {\n pos = CodeMirror.Pos(pos.line - 1, 0);\n range = getRange(false);\n }\n if (!range || range.cleared || force === \"unfold\") return;\n\n var myWidget = makeWidget(cm, options);\n CodeMirror.on(myWidget, \"mousedown\", function(e) {\n myRange.clear();\n CodeMirror.e_preventDefault(e);\n });\n var myRange = cm.markText(range.from, range.to, {\n replacedWith: myWidget,\n clearOnEnter: true,\n __isFold: true\n });\n myRange.on(\"clear\", function(from, to) {\n CodeMirror.signal(cm, \"unfold\", cm, from, to);\n });\n CodeMirror.signal(cm, \"fold\", cm, range.from, range.to);\n }\n\n function makeWidget(cm, options) {\n var widget = getOption(cm, options, \"widget\");\n if (typeof widget == \"string\") {\n var text = document.createTextNode(widget);\n widget = document.createElement(\"span\");\n widget.appendChild(text);\n widget.className = \"CodeMirror-foldmarker\";\n }\n return widget;\n }\n\n // Clumsy backwards-compatible interface\n CodeMirror.newFoldFunction = function(rangeFinder, widget) {\n return function(cm, pos) { doFold(cm, pos, {rangeFinder: rangeFinder, widget: widget}); };\n };\n\n // New-style interface\n CodeMirror.defineExtension(\"foldCode\", function(pos, options, force) {\n doFold(this, pos, options, force);\n });\n\n CodeMirror.defineExtension(\"isFolded\", function(pos) {\n var marks = this.findMarksAt(pos);\n for (var i = 0; i < marks.length; ++i)\n if (marks[i].__isFold) return true;\n });\n\n CodeMirror.commands.toggleFold = function(cm) {\n cm.foldCode(cm.getCursor());\n };\n CodeMirror.commands.fold = function(cm) {\n cm.foldCode(cm.getCursor(), null, \"fold\");\n };\n CodeMirror.commands.unfold = function(cm) {\n cm.foldCode(cm.getCursor(), null, \"unfold\");\n };\n CodeMirror.commands.foldAll = function(cm) {\n cm.operation(function() {\n for (var i = cm.firstLine(), e = cm.lastLine(); i <= e; i++)\n cm.foldCode(CodeMirror.Pos(i, 0), null, \"fold\");\n });\n };\n CodeMirror.commands.unfoldAll = function(cm) {\n cm.operation(function() {\n for (var i = cm.firstLine(), e = cm.lastLine(); i <= e; i++)\n cm.foldCode(CodeMirror.Pos(i, 0), null, \"unfold\");\n });\n };\n\n CodeMirror.registerHelper(\"fold\", \"combine\", function() {\n var funcs = Array.prototype.slice.call(arguments, 0);\n return function(cm, start) {\n for (var i = 0; i < funcs.length; ++i) {\n var found = funcs[i](cm, start);\n if (found) return found;\n }\n };\n });\n\n CodeMirror.registerHelper(\"fold\", \"auto\", function(cm, start) {\n var helpers = cm.getHelpers(start, \"fold\");\n for (var i = 0; i < helpers.length; i++) {\n var cur = helpers[i](cm, start);\n if (cur) return cur;\n }\n });\n\n var defaultOptions = {\n rangeFinder: CodeMirror.fold.auto,\n widget: \"\\u2194\",\n minFoldSize: 0,\n scanUp: false\n };\n\n CodeMirror.defineOption(\"foldOptions\", null);\n\n function getOption(cm, options, name) {\n if (options && options[name] !== undefined)\n return options[name];\n var editorOptions = cm.options.foldOptions;\n if (editorOptions && editorOptions[name] !== undefined)\n return editorOptions[name];\n return defaultOptions[name];\n }\n\n CodeMirror.defineExtension(\"foldOption\", function(options, name) {\n return getOption(this, options, name);\n });\n});\n\n},{\"codemirror\":undefined}],8:[function(require,module,exports){\n// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod((function(){try{return require('codemirror')}catch(e){return window.CodeMirror}})(), require(\"./foldcode\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\", \"./foldcode\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n \"use strict\";\n\n CodeMirror.defineOption(\"foldGutter\", false, function(cm, val, old) {\n if (old && old != CodeMirror.Init) {\n cm.clearGutter(cm.state.foldGutter.options.gutter);\n cm.state.foldGutter = null;\n cm.off(\"gutterClick\", onGutterClick);\n cm.off(\"change\", onChange);\n cm.off(\"viewportChange\", onViewportChange);\n cm.off(\"fold\", onFold);\n cm.off(\"unfold\", onFold);\n cm.off(\"swapDoc\", updateInViewport);\n }\n if (val) {\n cm.state.foldGutter = new State(parseOptions(val));\n updateInViewport(cm);\n cm.on(\"gutterClick\", onGutterClick);\n cm.on(\"change\", onChange);\n cm.on(\"viewportChange\", onViewportChange);\n cm.on(\"fold\", onFold);\n cm.on(\"unfold\", onFold);\n cm.on(\"swapDoc\", updateInViewport);\n }\n });\n\n var Pos = CodeMirror.Pos;\n\n function State(options) {\n this.options = options;\n this.from = this.to = 0;\n }\n\n function parseOptions(opts) {\n if (opts === true) opts = {};\n if (opts.gutter == null) opts.gutter = \"CodeMirror-foldgutter\";\n if (opts.indicatorOpen == null) opts.indicatorOpen = \"CodeMirror-foldgutter-open\";\n if (opts.indicatorFolded == null) opts.indicatorFolded = \"CodeMirror-foldgutter-folded\";\n return opts;\n }\n\n function isFolded(cm, line) {\n var marks = cm.findMarksAt(Pos(line));\n for (var i = 0; i < marks.length; ++i)\n if (marks[i].__isFold && marks[i].find().from.line == line) return true;\n }\n\n function marker(spec) {\n if (typeof spec == \"string\") {\n var elt = document.createElement(\"div\");\n elt.className = spec + \" CodeMirror-guttermarker-subtle\";\n return elt;\n } else {\n return spec.cloneNode(true);\n }\n }\n\n function updateFoldInfo(cm, from, to) {\n var opts = cm.state.foldGutter.options, cur = from;\n var minSize = cm.foldOption(opts, \"minFoldSize\");\n var func = cm.foldOption(opts, \"rangeFinder\");\n cm.eachLine(from, to, function(line) {\n var mark = null;\n if (isFolded(cm, cur)) {\n mark = marker(opts.indicatorFolded);\n } else {\n var pos = Pos(cur, 0);\n var range = func && func(cm, pos);\n if (range && range.to.line - range.from.line >= minSize)\n mark = marker(opts.indicatorOpen);\n }\n cm.setGutterMarker(line, opts.gutter, mark);\n ++cur;\n });\n }\n\n function updateInViewport(cm) {\n var vp = cm.getViewport(), state = cm.state.foldGutter;\n if (!state) return;\n cm.operation(function() {\n updateFoldInfo(cm, vp.from, vp.to);\n });\n state.from = vp.from; state.to = vp.to;\n }\n\n function onGutterClick(cm, line, gutter) {\n var state = cm.state.foldGutter;\n if (!state) return;\n var opts = state.options;\n if (gutter != opts.gutter) return;\n cm.foldCode(Pos(line, 0), opts.rangeFinder);\n }\n\n function onChange(cm) {\n var state = cm.state.foldGutter;\n if (!state) return;\n var opts = state.options;\n state.from = state.to = 0;\n clearTimeout(state.changeUpdate);\n state.changeUpdate = setTimeout(function() { updateInViewport(cm); }, opts.foldOnChangeTimeSpan || 600);\n }\n\n function onViewportChange(cm) {\n var state = cm.state.foldGutter;\n if (!state) return;\n var opts = state.options;\n clearTimeout(state.changeUpdate);\n state.changeUpdate = setTimeout(function() {\n var vp = cm.getViewport();\n if (state.from == state.to || vp.from - state.to > 20 || state.from - vp.to > 20) {\n updateInViewport(cm);\n } else {\n cm.operation(function() {\n if (vp.from < state.from) {\n updateFoldInfo(cm, vp.from, state.from);\n state.from = vp.from;\n }\n if (vp.to > state.to) {\n updateFoldInfo(cm, state.to, vp.to);\n state.to = vp.to;\n }\n });\n }\n }, opts.updateViewportTimeSpan || 400);\n }\n\n function onFold(cm, from) {\n var state = cm.state.foldGutter;\n if (!state) return;\n var line = from.line;\n if (line >= state.from && line < state.to)\n updateFoldInfo(cm, line, line + 1);\n }\n});\n\n},{\"./foldcode\":7,\"codemirror\":undefined}],9:[function(require,module,exports){\n// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod((function(){try{return require('codemirror')}catch(e){return window.CodeMirror}})());\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n \"use strict\";\n\n var Pos = CodeMirror.Pos;\n function cmp(a, b) { return a.line - b.line || a.ch - b.ch; }\n\n var nameStartChar = \"A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\";\n var nameChar = nameStartChar + \"\\-\\:\\.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040\";\n var xmlTagStart = new RegExp(\"<(/?)([\" + nameStartChar + \"][\" + nameChar + \"]*)\", \"g\");\n\n function Iter(cm, line, ch, range) {\n this.line = line; this.ch = ch;\n this.cm = cm; this.text = cm.getLine(line);\n this.min = range ? range.from : cm.firstLine();\n this.max = range ? range.to - 1 : cm.lastLine();\n }\n\n function tagAt(iter, ch) {\n var type = iter.cm.getTokenTypeAt(Pos(iter.line, ch));\n return type && /\\btag\\b/.test(type);\n }\n\n function nextLine(iter) {\n if (iter.line >= iter.max) return;\n iter.ch = 0;\n iter.text = iter.cm.getLine(++iter.line);\n return true;\n }\n function prevLine(iter) {\n if (iter.line <= iter.min) return;\n iter.text = iter.cm.getLine(--iter.line);\n iter.ch = iter.text.length;\n return true;\n }\n\n function toTagEnd(iter) {\n for (;;) {\n var gt = iter.text.indexOf(\">\", iter.ch);\n if (gt == -1) { if (nextLine(iter)) continue; else return; }\n if (!tagAt(iter, gt + 1)) { iter.ch = gt + 1; continue; }\n var lastSlash = iter.text.lastIndexOf(\"/\", gt);\n var selfClose = lastSlash > -1 && !/\\S/.test(iter.text.slice(lastSlash + 1, gt));\n iter.ch = gt + 1;\n return selfClose ? \"selfClose\" : \"regular\";\n }\n }\n function toTagStart(iter) {\n for (;;) {\n var lt = iter.ch ? iter.text.lastIndexOf(\"<\", iter.ch - 1) : -1;\n if (lt == -1) { if (prevLine(iter)) continue; else return; }\n if (!tagAt(iter, lt + 1)) { iter.ch = lt; continue; }\n xmlTagStart.lastIndex = lt;\n iter.ch = lt;\n var match = xmlTagStart.exec(iter.text);\n if (match && match.index == lt) return match;\n }\n }\n\n function toNextTag(iter) {\n for (;;) {\n xmlTagStart.lastIndex = iter.ch;\n var found = xmlTagStart.exec(iter.text);\n if (!found) { if (nextLine(iter)) continue; else return; }\n if (!tagAt(iter, found.index + 1)) { iter.ch = found.index + 1; continue; }\n iter.ch = found.index + found[0].length;\n return found;\n }\n }\n function toPrevTag(iter) {\n for (;;) {\n var gt = iter.ch ? iter.text.lastIndexOf(\">\", iter.ch - 1) : -1;\n if (gt == -1) { if (prevLine(iter)) continue; else return; }\n if (!tagAt(iter, gt + 1)) { iter.ch = gt; continue; }\n var lastSlash = iter.text.lastIndexOf(\"/\", gt);\n var selfClose = lastSlash > -1 && !/\\S/.test(iter.text.slice(lastSlash + 1, gt));\n iter.ch = gt + 1;\n return selfClose ? \"selfClose\" : \"regular\";\n }\n }\n\n function findMatchingClose(iter, tag) {\n var stack = [];\n for (;;) {\n var next = toNextTag(iter), end, startLine = iter.line, startCh = iter.ch - (next ? next[0].length : 0);\n if (!next || !(end = toTagEnd(iter))) return;\n if (end == \"selfClose\") continue;\n if (next[1]) { // closing tag\n for (var i = stack.length - 1; i >= 0; --i) if (stack[i] == next[2]) {\n stack.length = i;\n break;\n }\n if (i < 0 && (!tag || tag == next[2])) return {\n tag: next[2],\n from: Pos(startLine, startCh),\n to: Pos(iter.line, iter.ch)\n };\n } else { // opening tag\n stack.push(next[2]);\n }\n }\n }\n function findMatchingOpen(iter, tag) {\n var stack = [];\n for (;;) {\n var prev = toPrevTag(iter);\n if (!prev) return;\n if (prev == \"selfClose\") { toTagStart(iter); continue; }\n var endLine = iter.line, endCh = iter.ch;\n var start = toTagStart(iter);\n if (!start) return;\n if (start[1]) { // closing tag\n stack.push(start[2]);\n } else { // opening tag\n for (var i = stack.length - 1; i >= 0; --i) if (stack[i] == start[2]) {\n stack.length = i;\n break;\n }\n if (i < 0 && (!tag || tag == start[2])) return {\n tag: start[2],\n from: Pos(iter.line, iter.ch),\n to: Pos(endLine, endCh)\n };\n }\n }\n }\n\n CodeMirror.registerHelper(\"fold\", \"xml\", function(cm, start) {\n var iter = new Iter(cm, start.line, 0);\n for (;;) {\n var openTag = toNextTag(iter), end;\n if (!openTag || iter.line != start.line || !(end = toTagEnd(iter))) return;\n if (!openTag[1] && end != \"selfClose\") {\n var start = Pos(iter.line, iter.ch);\n var close = findMatchingClose(iter, openTag[2]);\n return close && {from: start, to: close.from};\n }\n }\n });\n CodeMirror.findMatchingTag = function(cm, pos, range) {\n var iter = new Iter(cm, pos.line, pos.ch, range);\n if (iter.text.indexOf(\">\") == -1 && iter.text.indexOf(\"<\") == -1) return;\n var end = toTagEnd(iter), to = end && Pos(iter.line, iter.ch);\n var start = end && toTagStart(iter);\n if (!end || !start || cmp(iter, pos) > 0) return;\n var here = {from: Pos(iter.line, iter.ch), to: to, tag: start[2]};\n if (end == \"selfClose\") return {open: here, close: null, at: \"open\"};\n\n if (start[1]) { // closing tag\n return {open: findMatchingOpen(iter, start[2]), close: here, at: \"close\"};\n } else { // opening tag\n iter = new Iter(cm, to.line, to.ch, range);\n return {open: here, close: findMatchingClose(iter, start[2]), at: \"open\"};\n }\n };\n\n CodeMirror.findEnclosingTag = function(cm, pos, range) {\n var iter = new Iter(cm, pos.line, pos.ch, range);\n for (;;) {\n var open = findMatchingOpen(iter);\n if (!open) break;\n var forward = new Iter(cm, pos.line, pos.ch, range);\n var close = findMatchingClose(forward, open.tag);\n if (close) return {open: open, close: close};\n }\n };\n\n // Used by addon/edit/closetag.js\n CodeMirror.scanForClosingTag = function(cm, pos, name, end) {\n var iter = new Iter(cm, pos.line, pos.ch, end ? {from: 0, to: end} : null);\n return findMatchingClose(iter, name);\n };\n});\n\n},{\"codemirror\":undefined}],10:[function(require,module,exports){\n// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n\n// TODO actually recognize syntax of TypeScript constructs\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod((function(){try{return require('codemirror')}catch(e){return window.CodeMirror}})());\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nCodeMirror.defineMode(\"javascript\", function(config, parserConfig) {\n var indentUnit = config.indentUnit;\n var statementIndent = parserConfig.statementIndent;\n var jsonldMode = parserConfig.jsonld;\n var jsonMode = parserConfig.json || jsonldMode;\n var isTS = parserConfig.typescript;\n var wordRE = parserConfig.wordCharacters || /[\\w$\\xa1-\\uffff]/;\n\n // Tokenizer\n\n var keywords = function(){\n function kw(type) {return {type: type, style: \"keyword\"};}\n var A = kw(\"keyword a\"), B = kw(\"keyword b\"), C = kw(\"keyword c\");\n var operator = kw(\"operator\"), atom = {type: \"atom\", style: \"atom\"};\n\n var jsKeywords = {\n \"if\": kw(\"if\"), \"while\": A, \"with\": A, \"else\": B, \"do\": B, \"try\": B, \"finally\": B,\n \"return\": C, \"break\": C, \"continue\": C, \"new\": C, \"delete\": C, \"throw\": C, \"debugger\": C,\n \"var\": kw(\"var\"), \"const\": kw(\"var\"), \"let\": kw(\"var\"),\n \"function\": kw(\"function\"), \"catch\": kw(\"catch\"),\n \"for\": kw(\"for\"), \"switch\": kw(\"switch\"), \"case\": kw(\"case\"), \"default\": kw(\"default\"),\n \"in\": operator, \"typeof\": operator, \"instanceof\": operator,\n \"true\": atom, \"false\": atom, \"null\": atom, \"undefined\": atom, \"NaN\": atom, \"Infinity\": atom,\n \"this\": kw(\"this\"), \"module\": kw(\"module\"), \"class\": kw(\"class\"), \"super\": kw(\"atom\"),\n \"yield\": C, \"export\": kw(\"export\"), \"import\": kw(\"import\"), \"extends\": C\n };\n\n // Extend the 'normal' keywords with the TypeScript language extensions\n if (isTS) {\n var type = {type: \"variable\", style: \"variable-3\"};\n var tsKeywords = {\n // object-like things\n \"interface\": kw(\"interface\"),\n \"extends\": kw(\"extends\"),\n \"constructor\": kw(\"constructor\"),\n\n // scope modifiers\n \"public\": kw(\"public\"),\n \"private\": kw(\"private\"),\n \"protected\": kw(\"protected\"),\n \"static\": kw(\"static\"),\n\n // types\n \"string\": type, \"number\": type, \"bool\": type, \"any\": type\n };\n\n for (var attr in tsKeywords) {\n jsKeywords[attr] = tsKeywords[attr];\n }\n }\n\n return jsKeywords;\n }();\n\n var isOperatorChar = /[+\\-*&%=<>!?|~^]/;\n var isJsonldKeyword = /^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)\"/;\n\n function readRegexp(stream) {\n var escaped = false, next, inSet = false;\n while ((next = stream.next()) != null) {\n if (!escaped) {\n if (next == \"/\" && !inSet) return;\n if (next == \"[\") inSet = true;\n else if (inSet && next == \"]\") inSet = false;\n }\n escaped = !escaped && next == \"\\\\\";\n }\n }\n\n // Used as scratch variables to communicate multiple values without\n // consing up tons of objects.\n var type, content;\n function ret(tp, style, cont) {\n type = tp; content = cont;\n return style;\n }\n function tokenBase(stream, state) {\n var ch = stream.next();\n if (ch == '\"' || ch == \"'\") {\n state.tokenize = tokenString(ch);\n return state.tokenize(stream, state);\n } else if (ch == \".\" && stream.match(/^\\d+(?:[eE][+\\-]?\\d+)?/)) {\n return ret(\"number\", \"number\");\n } else if (ch == \".\" && stream.match(\"..\")) {\n return ret(\"spread\", \"meta\");\n } else if (/[\\[\\]{}\\(\\),;\\:\\.]/.test(ch)) {\n return ret(ch);\n } else if (ch == \"=\" && stream.eat(\">\")) {\n return ret(\"=>\", \"operator\");\n } else if (ch == \"0\" && stream.eat(/x/i)) {\n stream.eatWhile(/[\\da-f]/i);\n return ret(\"number\", \"number\");\n } else if (/\\d/.test(ch)) {\n stream.match(/^\\d*(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/);\n return ret(\"number\", \"number\");\n } else if (ch == \"/\") {\n if (stream.eat(\"*\")) {\n state.tokenize = tokenComment;\n return tokenComment(stream, state);\n } else if (stream.eat(\"/\")) {\n stream.skipToEnd();\n return ret(\"comment\", \"comment\");\n } else if (state.lastType == \"operator\" || state.lastType == \"keyword c\" ||\n state.lastType == \"sof\" || /^[\\[{}\\(,;:]$/.test(state.lastType)) {\n readRegexp(stream);\n stream.match(/^\\b(([gimyu])(?![gimyu]*\\2))+\\b/);\n return ret(\"regexp\", \"string-2\");\n } else {\n stream.eatWhile(isOperatorChar);\n return ret(\"operator\", \"operator\", stream.current());\n }\n } else if (ch == \"`\") {\n state.tokenize = tokenQuasi;\n return tokenQuasi(stream, state);\n } else if (ch == \"#\") {\n stream.skipToEnd();\n return ret(\"error\", \"error\");\n } else if (isOperatorChar.test(ch)) {\n stream.eatWhile(isOperatorChar);\n return ret(\"operator\", \"operator\", stream.current());\n } else if (wordRE.test(ch)) {\n stream.eatWhile(wordRE);\n var word = stream.current(), known = keywords.propertyIsEnumerable(word) && keywords[word];\n return (known && state.lastType != \".\") ? ret(known.type, known.style, word) :\n ret(\"variable\", \"variable\", word);\n }\n }\n\n function tokenString(quote) {\n return function(stream, state) {\n var escaped = false, next;\n if (jsonldMode && stream.peek() == \"@\" && stream.match(isJsonldKeyword)){\n state.tokenize = tokenBase;\n return ret(\"jsonld-keyword\", \"meta\");\n }\n while ((next = stream.next()) != null) {\n if (next == quote && !escaped) break;\n escaped = !escaped && next == \"\\\\\";\n }\n if (!escaped) state.tokenize = tokenBase;\n return ret(\"string\", \"string\");\n };\n }\n\n function tokenComment(stream, state) {\n var maybeEnd = false, ch;\n while (ch = stream.next()) {\n if (ch == \"/\" && maybeEnd) {\n state.tokenize = tokenBase;\n break;\n }\n maybeEnd = (ch == \"*\");\n }\n return ret(\"comment\", \"comment\");\n }\n\n function tokenQuasi(stream, state) {\n var escaped = false, next;\n while ((next = stream.next()) != null) {\n if (!escaped && (next == \"`\" || next == \"$\" && stream.eat(\"{\"))) {\n state.tokenize = tokenBase;\n break;\n }\n escaped = !escaped && next == \"\\\\\";\n }\n return ret(\"quasi\", \"string-2\", stream.current());\n }\n\n var brackets = \"([{}])\";\n // This is a crude lookahead trick to try and notice that we're\n // parsing the argument patterns for a fat-arrow function before we\n // actually hit the arrow token. It only works if the arrow is on\n // the same line as the arguments and there's no strange noise\n // (comments) in between. Fallback is to only notice when we hit the\n // arrow, and not declare the arguments as locals for the arrow\n // body.\n function findFatArrow(stream, state) {\n if (state.fatArrowAt) state.fatArrowAt = null;\n var arrow = stream.string.indexOf(\"=>\", stream.start);\n if (arrow < 0) return;\n\n var depth = 0, sawSomething = false;\n for (var pos = arrow - 1; pos >= 0; --pos) {\n var ch = stream.string.charAt(pos);\n var bracket = brackets.indexOf(ch);\n if (bracket >= 0 && bracket < 3) {\n if (!depth) { ++pos; break; }\n if (--depth == 0) break;\n } else if (bracket >= 3 && bracket < 6) {\n ++depth;\n } else if (wordRE.test(ch)) {\n sawSomething = true;\n } else if (/[\"'\\/]/.test(ch)) {\n return;\n } else if (sawSomething && !depth) {\n ++pos;\n break;\n }\n }\n if (sawSomething && !depth) state.fatArrowAt = pos;\n }\n\n // Parser\n\n var atomicTypes = {\"atom\": true, \"number\": true, \"variable\": true, \"string\": true, \"regexp\": true, \"this\": true, \"jsonld-keyword\": true};\n\n function JSLexical(indented, column, type, align, prev, info) {\n this.indented = indented;\n this.column = column;\n this.type = type;\n this.prev = prev;\n this.info = info;\n if (align != null) this.align = align;\n }\n\n function inScope(state, varname) {\n for (var v = state.localVars; v; v = v.next)\n if (v.name == varname) return true;\n for (var cx = state.context; cx; cx = cx.prev) {\n for (var v = cx.vars; v; v = v.next)\n if (v.name == varname) return true;\n }\n }\n\n function parseJS(state, style, type, content, stream) {\n var cc = state.cc;\n // Communicate our context to the combinators.\n // (Less wasteful than consing up a hundred closures on every call.)\n cx.state = state; cx.stream = stream; cx.marked = null, cx.cc = cc; cx.style = style;\n\n if (!state.lexical.hasOwnProperty(\"align\"))\n state.lexical.align = true;\n\n while(true) {\n var combinator = cc.length ? cc.pop() : jsonMode ? expression : statement;\n if (combinator(type, content)) {\n while(cc.length && cc[cc.length - 1].lex)\n cc.pop()();\n if (cx.marked) return cx.marked;\n if (type == \"variable\" && inScope(state, content)) return \"variable-2\";\n return style;\n }\n }\n }\n\n // Combinator utils\n\n var cx = {state: null, column: null, marked: null, cc: null};\n function pass() {\n for (var i = arguments.length - 1; i >= 0; i--) cx.cc.push(arguments[i]);\n }\n function cont() {\n pass.apply(null, arguments);\n return true;\n }\n function register(varname) {\n function inList(list) {\n for (var v = list; v; v = v.next)\n if (v.name == varname) return true;\n return false;\n }\n var state = cx.state;\n if (state.context) {\n cx.marked = \"def\";\n if (inList(state.localVars)) return;\n state.localVars = {name: varname, next: state.localVars};\n } else {\n if (inList(state.globalVars)) return;\n if (parserConfig.globalVars)\n state.globalVars = {name: varname, next: state.globalVars};\n }\n }\n\n // Combinators\n\n var defaultVars = {name: \"this\", next: {name: \"arguments\"}};\n function pushcontext() {\n cx.state.context = {prev: cx.state.context, vars: cx.state.localVars};\n cx.state.localVars = defaultVars;\n }\n function popcontext() {\n cx.state.localVars = cx.state.context.vars;\n cx.state.context = cx.state.context.prev;\n }\n function pushlex(type, info) {\n var result = function() {\n var state = cx.state, indent = state.indented;\n if (state.lexical.type == \"stat\") indent = state.lexical.indented;\n else for (var outer = state.lexical; outer && outer.type == \")\" && outer.align; outer = outer.prev)\n indent = outer.indented;\n state.lexical = new JSLexical(indent, cx.stream.column(), type, null, state.lexical, info);\n };\n result.lex = true;\n return result;\n }\n function poplex() {\n var state = cx.state;\n if (state.lexical.prev) {\n if (state.lexical.type == \")\")\n state.indented = state.lexical.indented;\n state.lexical = state.lexical.prev;\n }\n }\n poplex.lex = true;\n\n function expect(wanted) {\n function exp(type) {\n if (type == wanted) return cont();\n else if (wanted == \";\") return pass();\n else return cont(exp);\n };\n return exp;\n }\n\n function statement(type, value) {\n if (type == \"var\") return cont(pushlex(\"vardef\", value.length), vardef, expect(\";\"), poplex);\n if (type == \"keyword a\") return cont(pushlex(\"form\"), expression, statement, poplex);\n if (type == \"keyword b\") return cont(pushlex(\"form\"), statement, poplex);\n if (type == \"{\") return cont(pushlex(\"}\"), block, poplex);\n if (type == \";\") return cont();\n if (type == \"if\") {\n if (cx.state.lexical.info == \"else\" && cx.state.cc[cx.state.cc.length - 1] == poplex)\n cx.state.cc.pop()();\n return cont(pushlex(\"form\"), expression, statement, poplex, maybeelse);\n }\n if (type == \"function\") return cont(functiondef);\n if (type == \"for\") return cont(pushlex(\"form\"), forspec, statement, poplex);\n if (type == \"variable\") return cont(pushlex(\"stat\"), maybelabel);\n if (type == \"switch\") return cont(pushlex(\"form\"), expression, pushlex(\"}\", \"switch\"), expect(\"{\"),\n block, poplex, poplex);\n if (type == \"case\") return cont(expression, expect(\":\"));\n if (type == \"default\") return cont(expect(\":\"));\n if (type == \"catch\") return cont(pushlex(\"form\"), pushcontext, expect(\"(\"), funarg, expect(\")\"),\n statement, poplex, popcontext);\n if (type == \"module\") return cont(pushlex(\"form\"), pushcontext, afterModule, popcontext, poplex);\n if (type == \"class\") return cont(pushlex(\"form\"), className, poplex);\n if (type == \"export\") return cont(pushlex(\"form\"), afterExport, poplex);\n if (type == \"import\") return cont(pushlex(\"form\"), afterImport, poplex);\n return pass(pushlex(\"stat\"), expression, expect(\";\"), poplex);\n }\n function expression(type) {\n return expressionInner(type, false);\n }\n function expressionNoComma(type) {\n return expressionInner(type, true);\n }\n function expressionInner(type, noComma) {\n if (cx.state.fatArrowAt == cx.stream.start) {\n var body = noComma ? arrowBodyNoComma : arrowBody;\n if (type == \"(\") return cont(pushcontext, pushlex(\")\"), commasep(pattern, \")\"), poplex, expect(\"=>\"), body, popcontext);\n else if (type == \"variable\") return pass(pushcontext, pattern, expect(\"=>\"), body, popcontext);\n }\n\n var maybeop = noComma ? maybeoperatorNoComma : maybeoperatorComma;\n if (atomicTypes.hasOwnProperty(type)) return cont(maybeop);\n if (type == \"function\") return cont(functiondef, maybeop);\n if (type == \"keyword c\") return cont(noComma ? maybeexpressionNoComma : maybeexpression);\n if (type == \"(\") return cont(pushlex(\")\"), maybeexpression, comprehension, expect(\")\"), poplex, maybeop);\n if (type == \"operator\" || type == \"spread\") return cont(noComma ? expressionNoComma : expression);\n if (type == \"[\") return cont(pushlex(\"]\"), arrayLiteral, poplex, maybeop);\n if (type == \"{\") return contCommasep(objprop, \"}\", null, maybeop);\n if (type == \"quasi\") { return pass(quasi, maybeop); }\n return cont();\n }\n function maybeexpression(type) {\n if (type.match(/[;\\}\\)\\],]/)) return pass();\n return pass(expression);\n }\n function maybeexpressionNoComma(type) {\n if (type.match(/[;\\}\\)\\],]/)) return pass();\n return pass(expressionNoComma);\n }\n\n function maybeoperatorComma(type, value) {\n if (type == \",\") return cont(expression);\n return maybeoperatorNoComma(type, value, false);\n }\n function maybeoperatorNoComma(type, value, noComma) {\n var me = noComma == false ? maybeoperatorComma : maybeoperatorNoComma;\n var expr = noComma == false ? expression : expressionNoComma;\n if (type == \"=>\") return cont(pushcontext, noComma ? arrowBodyNoComma : arrowBody, popcontext);\n if (type == \"operator\") {\n if (/\\+\\+|--/.test(value)) return cont(me);\n if (value == \"?\") return cont(expression, expect(\":\"), expr);\n return cont(expr);\n }\n if (type == \"quasi\") { return pass(quasi, me); }\n if (type == \";\") return;\n if (type == \"(\") return contCommasep(expressionNoComma, \")\", \"call\", me);\n if (type == \".\") return cont(property, me);\n if (type == \"[\") return cont(pushlex(\"]\"), maybeexpression, expect(\"]\"), poplex, me);\n }\n function quasi(type, value) {\n if (type != \"quasi\") return pass();\n if (value.slice(value.length - 2) != \"${\") return cont(quasi);\n return cont(expression, continueQuasi);\n }\n function continueQuasi(type) {\n if (type == \"}\") {\n cx.marked = \"string-2\";\n cx.state.tokenize = tokenQuasi;\n return cont(quasi);\n }\n }\n function arrowBody(type) {\n findFatArrow(cx.stream, cx.state);\n return pass(type == \"{\" ? statement : expression);\n }\n function arrowBodyNoComma(type) {\n findFatArrow(cx.stream, cx.state);\n return pass(type == \"{\" ? statement : expressionNoComma);\n }\n function maybelabel(type) {\n if (type == \":\") return cont(poplex, statement);\n return pass(maybeoperatorComma, expect(\";\"), poplex);\n }\n function property(type) {\n if (type == \"variable\") {cx.marked = \"property\"; return cont();}\n }\n function objprop(type, value) {\n if (type == \"variable\" || cx.style == \"keyword\") {\n cx.marked = \"property\";\n if (value == \"get\" || value == \"set\") return cont(getterSetter);\n return cont(afterprop);\n } else if (type == \"number\" || type == \"string\") {\n cx.marked = jsonldMode ? \"property\" : (cx.style + \" property\");\n return cont(afterprop);\n } else if (type == \"jsonld-keyword\") {\n return cont(afterprop);\n } else if (type == \"[\") {\n return cont(expression, expect(\"]\"), afterprop);\n }\n }\n function getterSetter(type) {\n if (type != \"variable\") return pass(afterprop);\n cx.marked = \"property\";\n return cont(functiondef);\n }\n function afterprop(type) {\n if (type == \":\") return cont(expressionNoComma);\n if (type == \"(\") return pass(functiondef);\n }\n function commasep(what, end) {\n function proceed(type) {\n if (type == \",\") {\n var lex = cx.state.lexical;\n if (lex.info == \"call\") lex.pos = (lex.pos || 0) + 1;\n return cont(what, proceed);\n }\n if (type == end) return cont();\n return cont(expect(end));\n }\n return function(type) {\n if (type == end) return cont();\n return pass(what, proceed);\n };\n }\n function contCommasep(what, end, info) {\n for (var i = 3; i < arguments.length; i++)\n cx.cc.push(arguments[i]);\n return cont(pushlex(end, info), commasep(what, end), poplex);\n }\n function block(type) {\n if (type == \"}\") return cont();\n return pass(statement, block);\n }\n function maybetype(type) {\n if (isTS && type == \":\") return cont(typedef);\n }\n function typedef(type) {\n if (type == \"variable\"){cx.marked = \"variable-3\"; return cont();}\n }\n function vardef() {\n return pass(pattern, maybetype, maybeAssign, vardefCont);\n }\n function pattern(type, value) {\n if (type == \"variable\") { register(value); return cont(); }\n if (type == \"[\") return contCommasep(pattern, \"]\");\n if (type == \"{\") return contCommasep(proppattern, \"}\");\n }\n function proppattern(type, value) {\n if (type == \"variable\" && !cx.stream.match(/^\\s*:/, false)) {\n register(value);\n return cont(maybeAssign);\n }\n if (type == \"variable\") cx.marked = \"property\";\n return cont(expect(\":\"), pattern, maybeAssign);\n }\n function maybeAssign(_type, value) {\n if (value == \"=\") return cont(expressionNoComma);\n }\n function vardefCont(type) {\n if (type == \",\") return cont(vardef);\n }\n function maybeelse(type, value) {\n if (type == \"keyword b\" && value == \"else\") return cont(pushlex(\"form\", \"else\"), statement, poplex);\n }\n function forspec(type) {\n if (type == \"(\") return cont(pushlex(\")\"), forspec1, expect(\")\"), poplex);\n }\n function forspec1(type) {\n if (type == \"var\") return cont(vardef, expect(\";\"), forspec2);\n if (type == \";\") return cont(forspec2);\n if (type == \"variable\") return cont(formaybeinof);\n return pass(expression, expect(\";\"), forspec2);\n }\n function formaybeinof(_type, value) {\n if (value == \"in\" || value == \"of\") { cx.marked = \"keyword\"; return cont(expression); }\n return cont(maybeoperatorComma, forspec2);\n }\n function forspec2(type, value) {\n if (type == \";\") return cont(forspec3);\n if (value == \"in\" || value == \"of\") { cx.marked = \"keyword\"; return cont(expression); }\n return pass(expression, expect(\";\"), forspec3);\n }\n function forspec3(type) {\n if (type != \")\") cont(expression);\n }\n function functiondef(type, value) {\n if (value == \"*\") {cx.marked = \"keyword\"; return cont(functiondef);}\n if (type == \"variable\") {register(value); return cont(functiondef);}\n if (type == \"(\") return cont(pushcontext, pushlex(\")\"), commasep(funarg, \")\"), poplex, statement, popcontext);\n }\n function funarg(type) {\n if (type == \"spread\") return cont(funarg);\n return pass(pattern, maybetype);\n }\n function className(type, value) {\n if (type == \"variable\") {register(value); return cont(classNameAfter);}\n }\n function classNameAfter(type, value) {\n if (value == \"extends\") return cont(expression, classNameAfter);\n if (type == \"{\") return cont(pushlex(\"}\"), classBody, poplex);\n }\n function classBody(type, value) {\n if (type == \"variable\" || cx.style == \"keyword\") {\n cx.marked = \"property\";\n if (value == \"get\" || value == \"set\") return cont(classGetterSetter, functiondef, classBody);\n return cont(functiondef, classBody);\n }\n if (value == \"*\") {\n cx.marked = \"keyword\";\n return cont(classBody);\n }\n if (type == \";\") return cont(classBody);\n if (type == \"}\") return cont();\n }\n function classGetterSetter(type) {\n if (type != \"variable\") return pass();\n cx.marked = \"property\";\n return cont();\n }\n function afterModule(type, value) {\n if (type == \"string\") return cont(statement);\n if (type == \"variable\") { register(value); return cont(maybeFrom); }\n }\n function afterExport(_type, value) {\n if (value == \"*\") { cx.marked = \"keyword\"; return cont(maybeFrom, expect(\";\")); }\n if (value == \"default\") { cx.marked = \"keyword\"; return cont(expression, expect(\";\")); }\n return pass(statement);\n }\n function afterImport(type) {\n if (type == \"string\") return cont();\n return pass(importSpec, maybeFrom);\n }\n function importSpec(type, value) {\n if (type == \"{\") return contCommasep(importSpec, \"}\");\n if (type == \"variable\") register(value);\n return cont();\n }\n function maybeFrom(_type, value) {\n if (value == \"from\") { cx.marked = \"keyword\"; return cont(expression); }\n }\n function arrayLiteral(type) {\n if (type == \"]\") return cont();\n return pass(expressionNoComma, maybeArrayComprehension);\n }\n function maybeArrayComprehension(type) {\n if (type == \"for\") return pass(comprehension, expect(\"]\"));\n if (type == \",\") return cont(commasep(maybeexpressionNoComma, \"]\"));\n return pass(commasep(expressionNoComma, \"]\"));\n }\n function comprehension(type) {\n if (type == \"for\") return cont(forspec, comprehension);\n if (type == \"if\") return cont(expression, comprehension);\n }\n\n function isContinuedStatement(state, textAfter) {\n return state.lastType == \"operator\" || state.lastType == \",\" ||\n isOperatorChar.test(textAfter.charAt(0)) ||\n /[,.]/.test(textAfter.charAt(0));\n }\n\n // Interface\n\n return {\n startState: function(basecolumn) {\n var state = {\n tokenize: tokenBase,\n lastType: \"sof\",\n cc: [],\n lexical: new JSLexical((basecolumn || 0) - indentUnit, 0, \"block\", false),\n localVars: parserConfig.localVars,\n context: parserConfig.localVars && {vars: parserConfig.localVars},\n indented: 0\n };\n if (parserConfig.globalVars && typeof parserConfig.globalVars == \"object\")\n state.globalVars = parserConfig.globalVars;\n return state;\n },\n\n token: function(stream, state) {\n if (stream.sol()) {\n if (!state.lexical.hasOwnProperty(\"align\"))\n state.lexical.align = false;\n state.indented = stream.indentation();\n findFatArrow(stream, state);\n }\n if (state.tokenize != tokenComment && stream.eatSpace()) return null;\n var style = state.tokenize(stream, state);\n if (type == \"comment\") return style;\n state.lastType = type == \"operator\" && (content == \"++\" || content == \"--\") ? \"incdec\" : type;\n return parseJS(state, style, type, content, stream);\n },\n\n indent: function(state, textAfter) {\n if (state.tokenize == tokenComment) return CodeMirror.Pass;\n if (state.tokenize != tokenBase) return 0;\n var firstChar = textAfter && textAfter.charAt(0), lexical = state.lexical;\n // Kludge to prevent 'maybelse' from blocking lexical scope pops\n if (!/^\\s*else\\b/.test(textAfter)) for (var i = state.cc.length - 1; i >= 0; --i) {\n var c = state.cc[i];\n if (c == poplex) lexical = lexical.prev;\n else if (c != maybeelse) break;\n }\n if (lexical.type == \"stat\" && firstChar == \"}\") lexical = lexical.prev;\n if (statementIndent && lexical.type == \")\" && lexical.prev.type == \"stat\")\n lexical = lexical.prev;\n var type = lexical.type, closing = firstChar == type;\n\n if (type == \"vardef\") return lexical.indented + (state.lastType == \"operator\" || state.lastType == \",\" ? lexical.info + 1 : 0);\n else if (type == \"form\" && firstChar == \"{\") return lexical.indented;\n else if (type == \"form\") return lexical.indented + indentUnit;\n else if (type == \"stat\")\n return lexical.indented + (isContinuedStatement(state, textAfter) ? statementIndent || indentUnit : 0);\n else if (lexical.info == \"switch\" && !closing && parserConfig.doubleIndentSwitch != false)\n return lexical.indented + (/^(?:case|default)\\b/.test(textAfter) ? indentUnit : 2 * indentUnit);\n else if (lexical.align) return lexical.column + (closing ? 0 : 1);\n else return lexical.indented + (closing ? 0 : indentUnit);\n },\n\n electricInput: /^\\s*(?:case .*?:|default:|\\{|\\})$/,\n blockCommentStart: jsonMode ? null : \"/*\",\n blockCommentEnd: jsonMode ? null : \"*/\",\n lineComment: jsonMode ? null : \"//\",\n fold: \"brace\",\n\n helperType: jsonMode ? \"json\" : \"javascript\",\n jsonldMode: jsonldMode,\n jsonMode: jsonMode\n };\n});\n\nCodeMirror.registerHelper(\"wordChars\", \"javascript\", /[\\w$]/);\n\nCodeMirror.defineMIME(\"text/javascript\", \"javascript\");\nCodeMirror.defineMIME(\"text/ecmascript\", \"javascript\");\nCodeMirror.defineMIME(\"application/javascript\", \"javascript\");\nCodeMirror.defineMIME(\"application/x-javascript\", \"javascript\");\nCodeMirror.defineMIME(\"application/ecmascript\", \"javascript\");\nCodeMirror.defineMIME(\"application/json\", {name: \"javascript\", json: true});\nCodeMirror.defineMIME(\"application/x-json\", {name: \"javascript\", json: true});\nCodeMirror.defineMIME(\"application/ld+json\", {name: \"javascript\", jsonld: true});\nCodeMirror.defineMIME(\"text/typescript\", { name: \"javascript\", typescript: true });\nCodeMirror.defineMIME(\"application/typescript\", { name: \"javascript\", typescript: true });\n\n});\n\n},{\"codemirror\":undefined}],11:[function(require,module,exports){\n// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod((function(){try{return require('codemirror')}catch(e){return window.CodeMirror}})());\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nCodeMirror.defineMode(\"xml\", function(config, parserConfig) {\n var indentUnit = config.indentUnit;\n var multilineTagIndentFactor = parserConfig.multilineTagIndentFactor || 1;\n var multilineTagIndentPastTag = parserConfig.multilineTagIndentPastTag;\n if (multilineTagIndentPastTag == null) multilineTagIndentPastTag = true;\n\n var Kludges = parserConfig.htmlMode ? {\n autoSelfClosers: {'area': true, 'base': true, 'br': true, 'col': true, 'command': true,\n 'embed': true, 'frame': true, 'hr': true, 'img': true, 'input': true,\n 'keygen': true, 'link': true, 'meta': true, 'param': true, 'source': true,\n 'track': true, 'wbr': true, 'menuitem': true},\n implicitlyClosed: {'dd': true, 'li': true, 'optgroup': true, 'option': true, 'p': true,\n 'rp': true, 'rt': true, 'tbody': true, 'td': true, 'tfoot': true,\n 'th': true, 'tr': true},\n contextGrabbers: {\n 'dd': {'dd': true, 'dt': true},\n 'dt': {'dd': true, 'dt': true},\n 'li': {'li': true},\n 'option': {'option': true, 'optgroup': true},\n 'optgroup': {'optgroup': true},\n 'p': {'address': true, 'article': true, 'aside': true, 'blockquote': true, 'dir': true,\n 'div': true, 'dl': true, 'fieldset': true, 'footer': true, 'form': true,\n 'h1': true, 'h2': true, 'h3': true, 'h4': true, 'h5': true, 'h6': true,\n 'header': true, 'hgroup': true, 'hr': true, 'menu': true, 'nav': true, 'ol': true,\n 'p': true, 'pre': true, 'section': true, 'table': true, 'ul': true},\n 'rp': {'rp': true, 'rt': true},\n 'rt': {'rp': true, 'rt': true},\n 'tbody': {'tbody': true, 'tfoot': true},\n 'td': {'td': true, 'th': true},\n 'tfoot': {'tbody': true},\n 'th': {'td': true, 'th': true},\n 'thead': {'tbody': true, 'tfoot': true},\n 'tr': {'tr': true}\n },\n doNotIndent: {\"pre\": true},\n allowUnquoted: true,\n allowMissing: true,\n caseFold: true\n } : {\n autoSelfClosers: {},\n implicitlyClosed: {},\n contextGrabbers: {},\n doNotIndent: {},\n allowUnquoted: false,\n allowMissing: false,\n caseFold: false\n };\n var alignCDATA = parserConfig.alignCDATA;\n\n // Return variables for tokenizers\n var type, setStyle;\n\n function inText(stream, state) {\n function chain(parser) {\n state.tokenize = parser;\n return parser(stream, state);\n }\n\n var ch = stream.next();\n if (ch == \"<\") {\n if (stream.eat(\"!\")) {\n if (stream.eat(\"[\")) {\n if (stream.match(\"CDATA[\")) return chain(inBlock(\"atom\", \"]]>\"));\n else return null;\n } else if (stream.match(\"--\")) {\n return chain(inBlock(\"comment\", \"-->\"));\n } else if (stream.match(\"DOCTYPE\", true, true)) {\n stream.eatWhile(/[\\w\\._\\-]/);\n return chain(doctype(1));\n } else {\n return null;\n }\n } else if (stream.eat(\"?\")) {\n stream.eatWhile(/[\\w\\._\\-]/);\n state.tokenize = inBlock(\"meta\", \"?>\");\n return \"meta\";\n } else {\n type = stream.eat(\"/\") ? \"closeTag\" : \"openTag\";\n state.tokenize = inTag;\n return \"tag bracket\";\n }\n } else if (ch == \"&\") {\n var ok;\n if (stream.eat(\"#\")) {\n if (stream.eat(\"x\")) {\n ok = stream.eatWhile(/[a-fA-F\\d]/) && stream.eat(\";\");\n } else {\n ok = stream.eatWhile(/[\\d]/) && stream.eat(\";\");\n }\n } else {\n ok = stream.eatWhile(/[\\w\\.\\-:]/) && stream.eat(\";\");\n }\n return ok ? \"atom\" : \"error\";\n } else {\n stream.eatWhile(/[^&<]/);\n return null;\n }\n }\n\n function inTag(stream, state) {\n var ch = stream.next();\n if (ch == \">\" || (ch == \"/\" && stream.eat(\">\"))) {\n state.tokenize = inText;\n type = ch == \">\" ? \"endTag\" : \"selfcloseTag\";\n return \"tag bracket\";\n } else if (ch == \"=\") {\n type = \"equals\";\n return null;\n } else if (ch == \"<\") {\n state.tokenize = inText;\n state.state = baseState;\n state.tagName = state.tagStart = null;\n var next = state.tokenize(stream, state);\n return next ? next + \" tag error\" : \"tag error\";\n } else if (/[\\'\\\"]/.test(ch)) {\n state.tokenize = inAttribute(ch);\n state.stringStartCol = stream.column();\n return state.tokenize(stream, state);\n } else {\n stream.match(/^[^\\s\\u00a0=<>\\\"\\']*[^\\s\\u00a0=<>\\\"\\'\\/]/);\n return \"word\";\n }\n }\n\n function inAttribute(quote) {\n var closure = function(stream, state) {\n while (!stream.eol()) {\n if (stream.next() == quote) {\n state.tokenize = inTag;\n break;\n }\n }\n return \"string\";\n };\n closure.isInAttribute = true;\n return closure;\n }\n\n function inBlock(style, terminator) {\n return function(stream, state) {\n while (!stream.eol()) {\n if (stream.match(terminator)) {\n state.tokenize = inText;\n break;\n }\n stream.next();\n }\n return style;\n };\n }\n function doctype(depth) {\n return function(stream, state) {\n var ch;\n while ((ch = stream.next()) != null) {\n if (ch == \"<\") {\n state.tokenize = doctype(depth + 1);\n return state.tokenize(stream, state);\n } else if (ch == \">\") {\n if (depth == 1) {\n state.tokenize = inText;\n break;\n } else {\n state.tokenize = doctype(depth - 1);\n return state.tokenize(stream, state);\n }\n }\n }\n return \"meta\";\n };\n }\n\n function Context(state, tagName, startOfLine) {\n this.prev = state.context;\n this.tagName = tagName;\n this.indent = state.indented;\n this.startOfLine = startOfLine;\n if (Kludges.doNotIndent.hasOwnProperty(tagName) || (state.context && state.context.noIndent))\n this.noIndent = true;\n }\n function popContext(state) {\n if (state.context) state.context = state.context.prev;\n }\n function maybePopContext(state, nextTagName) {\n var parentTagName;\n while (true) {\n if (!state.context) {\n return;\n }\n parentTagName = state.context.tagName;\n if (!Kludges.contextGrabbers.hasOwnProperty(parentTagName) ||\n !Kludges.contextGrabbers[parentTagName].hasOwnProperty(nextTagName)) {\n return;\n }\n popContext(state);\n }\n }\n\n function baseState(type, stream, state) {\n if (type == \"openTag\") {\n state.tagStart = stream.column();\n return tagNameState;\n } else if (type == \"closeTag\") {\n return closeTagNameState;\n } else {\n return baseState;\n }\n }\n function tagNameState(type, stream, state) {\n if (type == \"word\") {\n state.tagName = stream.current();\n setStyle = \"tag\";\n return attrState;\n } else {\n setStyle = \"error\";\n return tagNameState;\n }\n }\n function closeTagNameState(type, stream, state) {\n if (type == \"word\") {\n var tagName = stream.current();\n if (state.context && state.context.tagName != tagName &&\n Kludges.implicitlyClosed.hasOwnProperty(state.context.tagName))\n popContext(state);\n if (state.context && state.context.tagName == tagName) {\n setStyle = \"tag\";\n return closeState;\n } else {\n setStyle = \"tag error\";\n return closeStateErr;\n }\n } else {\n setStyle = \"error\";\n return closeStateErr;\n }\n }\n\n function closeState(type, _stream, state) {\n if (type != \"endTag\") {\n setStyle = \"error\";\n return closeState;\n }\n popContext(state);\n return baseState;\n }\n function closeStateErr(type, stream, state) {\n setStyle = \"error\";\n return closeState(type, stream, state);\n }\n\n function attrState(type, _stream, state) {\n if (type == \"word\") {\n setStyle = \"attribute\";\n return attrEqState;\n } else if (type == \"endTag\" || type == \"selfcloseTag\") {\n var tagName = state.tagName, tagStart = state.tagStart;\n state.tagName = state.tagStart = null;\n if (type == \"selfcloseTag\" ||\n Kludges.autoSelfClosers.hasOwnProperty(tagName)) {\n maybePopContext(state, tagName);\n } else {\n maybePopContext(state, tagName);\n state.context = new Context(state, tagName, tagStart == state.indented);\n }\n return baseState;\n }\n setStyle = \"error\";\n return attrState;\n }\n function attrEqState(type, stream, state) {\n if (type == \"equals\") return attrValueState;\n if (!Kludges.allowMissing) setStyle = \"error\";\n return attrState(type, stream, state);\n }\n function attrValueState(type, stream, state) {\n if (type == \"string\") return attrContinuedState;\n if (type == \"word\" && Kludges.allowUnquoted) {setStyle = \"string\"; return attrState;}\n setStyle = \"error\";\n return attrState(type, stream, state);\n }\n function attrContinuedState(type, stream, state) {\n if (type == \"string\") return attrContinuedState;\n return attrState(type, stream, state);\n }\n\n return {\n startState: function() {\n return {tokenize: inText,\n state: baseState,\n indented: 0,\n tagName: null, tagStart: null,\n context: null};\n },\n\n token: function(stream, state) {\n if (!state.tagName && stream.sol())\n state.indented = stream.indentation();\n\n if (stream.eatSpace()) return null;\n type = null;\n var style = state.tokenize(stream, state);\n if ((style || type) && style != \"comment\") {\n setStyle = null;\n state.state = state.state(type || style, stream, state);\n if (setStyle)\n style = setStyle == \"error\" ? style + \" error\" : setStyle;\n }\n return style;\n },\n\n indent: function(state, textAfter, fullLine) {\n var context = state.context;\n // Indent multi-line strings (e.g. css).\n if (state.tokenize.isInAttribute) {\n if (state.tagStart == state.indented)\n return state.stringStartCol + 1;\n else\n return state.indented + indentUnit;\n }\n if (context && context.noIndent) return CodeMirror.Pass;\n if (state.tokenize != inTag && state.tokenize != inText)\n return fullLine ? fullLine.match(/^(\\s*)/)[0].length : 0;\n // Indent the starts of attribute names.\n if (state.tagName) {\n if (multilineTagIndentPastTag)\n return state.tagStart + state.tagName.length + 2;\n else\n return state.tagStart + indentUnit * multilineTagIndentFactor;\n }\n if (alignCDATA && /<!\\[CDATA\\[/.test(textAfter)) return 0;\n var tagAfter = textAfter && /^<(\\/)?([\\w_:\\.-]*)/.exec(textAfter);\n if (tagAfter && tagAfter[1]) { // Closing tag spotted\n while (context) {\n if (context.tagName == tagAfter[2]) {\n context = context.prev;\n break;\n } else if (Kludges.implicitlyClosed.hasOwnProperty(context.tagName)) {\n context = context.prev;\n } else {\n break;\n }\n }\n } else if (tagAfter) { // Opening tag spotted\n while (context) {\n var grabbers = Kludges.contextGrabbers[context.tagName];\n if (grabbers && grabbers.hasOwnProperty(tagAfter[2]))\n context = context.prev;\n else\n break;\n }\n }\n while (context && !context.startOfLine)\n context = context.prev;\n if (context) return context.indent + indentUnit;\n else return 0;\n },\n\n electricInput: /<\\/[\\s\\w:]+>$/,\n blockCommentStart: \"<!--\",\n blockCommentEnd: \"-->\",\n\n configuration: parserConfig.htmlMode ? \"html\" : \"xml\",\n helperType: parserConfig.htmlMode ? \"html\" : \"xml\"\n };\n});\n\nCodeMirror.defineMIME(\"text/xml\", \"xml\");\nCodeMirror.defineMIME(\"application/xml\", \"xml\");\nif (!CodeMirror.mimeModes.hasOwnProperty(\"text/html\"))\n CodeMirror.defineMIME(\"text/html\", {name: \"xml\", htmlMode: true});\n\n});\n\n},{\"codemirror\":undefined}],12:[function(require,module,exports){\n(function() {\n var callWithJQuery;\n\n callWithJQuery = function(pivotModule) {\n if (typeof exports === \"object\" && typeof module === \"object\") {\n return pivotModule((function(){try{return require('jquery')}catch(e){return window.jQuery}})());\n } else if (typeof define === \"function\" && define.amd) {\n return define([\"jquery\"], pivotModule);\n } else {\n return pivotModule(jQuery);\n }\n };\n\n callWithJQuery(function($) {\n return $.pivotUtilities.d3_renderers = {\n Treemap: function(pivotData, opts) {\n var addToTree, color, defaults, height, i, len, ref, result, rowKey, tree, treemap, value, width;\n defaults = {\n localeStrings: {},\n d3: {\n width: function() {\n return $(window).width() / 1.4;\n },\n height: function() {\n return $(window).height() / 1.4;\n }\n }\n };\n opts = $.extend(defaults, opts);\n result = $(\"<div>\").css({\n width: \"100%\",\n height: \"100%\"\n });\n tree = {\n name: \"All\",\n children: []\n };\n addToTree = function(tree, path, value) {\n var child, i, len, newChild, ref, x;\n if (path.length === 0) {\n tree.value = value;\n return;\n }\n if (tree.children == null) {\n tree.children = [];\n }\n x = path.shift();\n ref = tree.children;\n for (i = 0, len = ref.length; i < len; i++) {\n child = ref[i];\n if (!(child.name === x)) {\n continue;\n }\n addToTree(child, path, value);\n return;\n }\n newChild = {\n name: x\n };\n addToTree(newChild, path, value);\n return tree.children.push(newChild);\n };\n ref = pivotData.getRowKeys();\n for (i = 0, len = ref.length; i < len; i++) {\n rowKey = ref[i];\n value = pivotData.getAggregator(rowKey, []).value();\n if (value != null) {\n addToTree(tree, rowKey, value);\n }\n }\n color = d3.scale.category10();\n width = opts.d3.width();\n height = opts.d3.height();\n treemap = d3.layout.treemap().size([width, height]).sticky(true).value(function(d) {\n return d.size;\n });\n d3.select(result[0]).append(\"div\").style(\"position\", \"relative\").style(\"width\", width + \"px\").style(\"height\", height + \"px\").datum(tree).selectAll(\".node\").data(treemap.padding([15, 0, 0, 0]).value(function(d) {\n return d.value;\n }).nodes).enter().append(\"div\").attr(\"class\", \"node\").style(\"background\", function(d) {\n if (d.children != null) {\n return \"lightgrey\";\n } else {\n return color(d.name);\n }\n }).text(function(d) {\n return d.name;\n }).call(function() {\n this.style(\"left\", function(d) {\n return d.x + \"px\";\n }).style(\"top\", function(d) {\n return d.y + \"px\";\n }).style(\"width\", function(d) {\n return Math.max(0, d.dx - 1) + \"px\";\n }).style(\"height\", function(d) {\n return Math.max(0, d.dy - 1) + \"px\";\n });\n });\n return result;\n }\n };\n });\n\n}).call(this);\n\n\n},{\"jquery\":undefined}],13:[function(require,module,exports){\n(function() {\n var callWithJQuery;\n\n callWithJQuery = function(pivotModule) {\n if (typeof exports === \"object\" && typeof module === \"object\") {\n return pivotModule((function(){try{return require('jquery')}catch(e){return window.jQuery}})());\n } else if (typeof define === \"function\" && define.amd) {\n return define([\"jquery\"], pivotModule);\n } else {\n return pivotModule(jQuery);\n }\n };\n\n callWithJQuery(function($) {\n var makeGoogleChart;\n makeGoogleChart = function(chartType, extraOptions) {\n return function(pivotData, opts) {\n var agg, base, base1, colKey, colKeys, dataArray, dataTable, defaults, fullAggName, groupByTitle, h, hAxisTitle, headers, i, j, len, len1, numCharsInHAxis, options, ref, result, row, rowKey, rowKeys, title, tree2, vAxisTitle, val, wrapper, x, y;\n defaults = {\n localeStrings: {\n vs: \"vs\",\n by: \"by\"\n },\n gchart: {}\n };\n opts = $.extend(true, defaults, opts);\n if ((base = opts.gchart).width == null) {\n base.width = window.innerWidth / 1.4;\n }\n if ((base1 = opts.gchart).height == null) {\n base1.height = window.innerHeight / 1.4;\n }\n rowKeys = pivotData.getRowKeys();\n if (rowKeys.length === 0) {\n rowKeys.push([]);\n }\n colKeys = pivotData.getColKeys();\n if (colKeys.length === 0) {\n colKeys.push([]);\n }\n fullAggName = pivotData.aggregatorName;\n if (pivotData.valAttrs.length) {\n fullAggName += \"(\" + (pivotData.valAttrs.join(\", \")) + \")\";\n }\n headers = (function() {\n var i, len, results;\n results = [];\n for (i = 0, len = rowKeys.length; i < len; i++) {\n h = rowKeys[i];\n results.push(h.join(\"-\"));\n }\n return results;\n })();\n headers.unshift(\"\");\n numCharsInHAxis = 0;\n if (chartType === \"ScatterChart\") {\n dataArray = [];\n ref = pivotData.tree;\n for (y in ref) {\n tree2 = ref[y];\n for (x in tree2) {\n agg = tree2[x];\n dataArray.push([parseFloat(x), parseFloat(y), fullAggName + \": \\n\" + agg.format(agg.value())]);\n }\n }\n dataTable = new google.visualization.DataTable();\n dataTable.addColumn('number', pivotData.colAttrs.join(\"-\"));\n dataTable.addColumn('number', pivotData.rowAttrs.join(\"-\"));\n dataTable.addColumn({\n type: \"string\",\n role: \"tooltip\"\n });\n dataTable.addRows(dataArray);\n hAxisTitle = pivotData.colAttrs.join(\"-\");\n vAxisTitle = pivotData.rowAttrs.join(\"-\");\n title = \"\";\n } else {\n dataArray = [headers];\n for (i = 0, len = colKeys.length; i < len; i++) {\n colKey = colKeys[i];\n row = [colKey.join(\"-\")];\n numCharsInHAxis += row[0].length;\n for (j = 0, len1 = rowKeys.length; j < len1; j++) {\n rowKey = rowKeys[j];\n agg = pivotData.getAggregator(rowKey, colKey);\n if (agg.value() != null) {\n val = agg.value();\n if ($.isNumeric(val)) {\n if (val < 1) {\n row.push(parseFloat(val.toPrecision(3)));\n } else {\n row.push(parseFloat(val.toFixed(3)));\n }\n } else {\n row.push(val);\n }\n } else {\n row.push(null);\n }\n }\n dataArray.push(row);\n }\n dataTable = google.visualization.arrayToDataTable(dataArray);\n title = vAxisTitle = fullAggName;\n hAxisTitle = pivotData.colAttrs.join(\"-\");\n if (hAxisTitle !== \"\") {\n title += \" \" + opts.localeStrings.vs + \" \" + hAxisTitle;\n }\n groupByTitle = pivotData.rowAttrs.join(\"-\");\n if (groupByTitle !== \"\") {\n title += \" \" + opts.localeStrings.by + \" \" + groupByTitle;\n }\n }\n options = {\n title: title,\n hAxis: {\n title: hAxisTitle,\n slantedText: numCharsInHAxis > 50\n },\n vAxis: {\n title: vAxisTitle\n },\n tooltip: {\n textStyle: {\n fontName: 'Arial',\n fontSize: 12\n }\n }\n };\n if (chartType === \"ColumnChart\") {\n options.vAxis.minValue = 0;\n }\n if (chartType === \"ScatterChart\") {\n options.legend = {\n position: \"none\"\n };\n options.chartArea = {\n 'width': '80%',\n 'height': '80%'\n };\n } else if (dataArray[0].length === 2 && dataArray[0][1] === \"\") {\n options.legend = {\n position: \"none\"\n };\n }\n $.extend(options, opts.gchart, extraOptions);\n result = $(\"<div>\").css({\n width: \"100%\",\n height: \"100%\"\n });\n wrapper = new google.visualization.ChartWrapper({\n dataTable: dataTable,\n chartType: chartType,\n options: options\n });\n wrapper.draw(result[0]);\n result.bind(\"dblclick\", function() {\n var editor;\n editor = new google.visualization.ChartEditor();\n google.visualization.events.addListener(editor, 'ok', function() {\n return editor.getChartWrapper().draw(result[0]);\n });\n return editor.openDialog(wrapper);\n });\n return result;\n };\n };\n return $.pivotUtilities.gchart_renderers = {\n \"Line Chart\": makeGoogleChart(\"LineChart\"),\n \"Bar Chart\": makeGoogleChart(\"ColumnChart\"),\n \"Stacked Bar Chart\": makeGoogleChart(\"ColumnChart\", {\n isStacked: true\n }),\n \"Area Chart\": makeGoogleChart(\"AreaChart\", {\n isStacked: true\n }),\n \"Scatter Chart\": makeGoogleChart(\"ScatterChart\")\n };\n });\n\n}).call(this);\n\n\n},{\"jquery\":undefined}],14:[function(require,module,exports){\n;(function(win){\n\tvar store = {},\n\t\tdoc = win.document,\n\t\tlocalStorageName = 'localStorage',\n\t\tscriptTag = 'script',\n\t\tstorage\n\n\tstore.disabled = false\n\tstore.version = '1.3.17'\n\tstore.set = function(key, value) {}\n\tstore.get = function(key, defaultVal) {}\n\tstore.has = function(key) { return store.get(key) !== undefined }\n\tstore.remove = function(key) {}\n\tstore.clear = function() {}\n\tstore.transact = function(key, defaultVal, transactionFn) {\n\t\tif (transactionFn == null) {\n\t\t\ttransactionFn = defaultVal\n\t\t\tdefaultVal = null\n\t\t}\n\t\tif (defaultVal == null) {\n\t\t\tdefaultVal = {}\n\t\t}\n\t\tvar val = store.get(key, defaultVal)\n\t\ttransactionFn(val)\n\t\tstore.set(key, val)\n\t}\n\tstore.getAll = function() {}\n\tstore.forEach = function() {}\n\n\tstore.serialize = function(value) {\n\t\treturn JSON.stringify(value)\n\t}\n\tstore.deserialize = function(value) {\n\t\tif (typeof value != 'string') { return undefined }\n\t\ttry { return JSON.parse(value) }\n\t\tcatch(e) { return value || undefined }\n\t}\n\n\t// Functions to encapsulate questionable FireFox 3.6.13 behavior\n\t// when about.config::dom.storage.enabled === false\n\t// See https://github.com/marcuswestin/store.js/issues#issue/13\n\tfunction isLocalStorageNameSupported() {\n\t\ttry { return (localStorageName in win && win[localStorageName]) }\n\t\tcatch(err) { return false }\n\t}\n\n\tif (isLocalStorageNameSupported()) {\n\t\tstorage = win[localStorageName]\n\t\tstore.set = function(key, val) {\n\t\t\tif (val === undefined) { return store.remove(key) }\n\t\t\tstorage.setItem(key, store.serialize(val))\n\t\t\treturn val\n\t\t}\n\t\tstore.get = function(key, defaultVal) {\n\t\t\tvar val = store.deserialize(storage.getItem(key))\n\t\t\treturn (val === undefined ? defaultVal : val)\n\t\t}\n\t\tstore.remove = function(key) { storage.removeItem(key) }\n\t\tstore.clear = function() { storage.clear() }\n\t\tstore.getAll = function() {\n\t\t\tvar ret = {}\n\t\t\tstore.forEach(function(key, val) {\n\t\t\t\tret[key] = val\n\t\t\t})\n\t\t\treturn ret\n\t\t}\n\t\tstore.forEach = function(callback) {\n\t\t\tfor (var i=0; i<storage.length; i++) {\n\t\t\t\tvar key = storage.key(i)\n\t\t\t\tcallback(key, store.get(key))\n\t\t\t}\n\t\t}\n\t} else if (doc.documentElement.addBehavior) {\n\t\tvar storageOwner,\n\t\t\tstorageContainer\n\t\t// Since #userData storage applies only to specific paths, we need to\n\t\t// somehow link our data to a specific path. We choose /favicon.ico\n\t\t// as a pretty safe option, since all browsers already make a request to\n\t\t// this URL anyway and being a 404 will not hurt us here. We wrap an\n\t\t// iframe pointing to the favicon in an ActiveXObject(htmlfile) object\n\t\t// (see: http://msdn.microsoft.com/en-us/library/aa752574(v=VS.85).aspx)\n\t\t// since the iframe access rules appear to allow direct access and\n\t\t// manipulation of the document element, even for a 404 page. This\n\t\t// document can be used instead of the current document (which would\n\t\t// have been limited to the current path) to perform #userData storage.\n\t\ttry {\n\t\t\tstorageContainer = new ActiveXObject('htmlfile')\n\t\t\tstorageContainer.open()\n\t\t\tstorageContainer.write('<'+scriptTag+'>document.w=window</'+scriptTag+'><iframe src=\"/favicon.ico\"></iframe>')\n\t\t\tstorageContainer.close()\n\t\t\tstorageOwner = storageContainer.w.frames[0].document\n\t\t\tstorage = storageOwner.createElement('div')\n\t\t} catch(e) {\n\t\t\t// somehow ActiveXObject instantiation failed (perhaps some special\n\t\t\t// security settings or otherwse), fall back to per-path storage\n\t\t\tstorage = doc.createElement('div')\n\t\t\tstorageOwner = doc.body\n\t\t}\n\t\tvar withIEStorage = function(storeFunction) {\n\t\t\treturn function() {\n\t\t\t\tvar args = Array.prototype.slice.call(arguments, 0)\n\t\t\t\targs.unshift(storage)\n\t\t\t\t// See http://msdn.microsoft.com/en-us/library/ms531081(v=VS.85).aspx\n\t\t\t\t// and http://msdn.microsoft.com/en-us/library/ms531424(v=VS.85).aspx\n\t\t\t\tstorageOwner.appendChild(storage)\n\t\t\t\tstorage.addBehavior('#default#userData')\n\t\t\t\tstorage.load(localStorageName)\n\t\t\t\tvar result = storeFunction.apply(store, args)\n\t\t\t\tstorageOwner.removeChild(storage)\n\t\t\t\treturn result\n\t\t\t}\n\t\t}\n\n\t\t// In IE7, keys cannot start with a digit or contain certain chars.\n\t\t// See https://github.com/marcuswestin/store.js/issues/40\n\t\t// See https://github.com/marcuswestin/store.js/issues/83\n\t\tvar forbiddenCharsRegex = new RegExp(\"[!\\\"#$%&'()*+,/\\\\\\\\:;<=>?@[\\\\]^`{|}~]\", \"g\")\n\t\tfunction ieKeyFix(key) {\n\t\t\treturn key.replace(/^d/, '___$&').replace(forbiddenCharsRegex, '___')\n\t\t}\n\t\tstore.set = withIEStorage(function(storage, key, val) {\n\t\t\tkey = ieKeyFix(key)\n\t\t\tif (val === undefined) { return store.remove(key) }\n\t\t\tstorage.setAttribute(key, store.serialize(val))\n\t\t\tstorage.save(localStorageName)\n\t\t\treturn val\n\t\t})\n\t\tstore.get = withIEStorage(function(storage, key, defaultVal) {\n\t\t\tkey = ieKeyFix(key)\n\t\t\tvar val = store.deserialize(storage.getAttribute(key))\n\t\t\treturn (val === undefined ? defaultVal : val)\n\t\t})\n\t\tstore.remove = withIEStorage(function(storage, key) {\n\t\t\tkey = ieKeyFix(key)\n\t\t\tstorage.removeAttribute(key)\n\t\t\tstorage.save(localStorageName)\n\t\t})\n\t\tstore.clear = withIEStorage(function(storage) {\n\t\t\tvar attributes = storage.XMLDocument.documentElement.attributes\n\t\t\tstorage.load(localStorageName)\n\t\t\tfor (var i=0, attr; attr=attributes[i]; i++) {\n\t\t\t\tstorage.removeAttribute(attr.name)\n\t\t\t}\n\t\t\tstorage.save(localStorageName)\n\t\t})\n\t\tstore.getAll = function(storage) {\n\t\t\tvar ret = {}\n\t\t\tstore.forEach(function(key, val) {\n\t\t\t\tret[key] = val\n\t\t\t})\n\t\t\treturn ret\n\t\t}\n\t\tstore.forEach = withIEStorage(function(storage, callback) {\n\t\t\tvar attributes = storage.XMLDocument.documentElement.attributes\n\t\t\tfor (var i=0, attr; attr=attributes[i]; ++i) {\n\t\t\t\tcallback(attr.name, store.deserialize(storage.getAttribute(attr.name)))\n\t\t\t}\n\t\t})\n\t}\n\n\ttry {\n\t\tvar testKey = '__storejs__'\n\t\tstore.set(testKey, testKey)\n\t\tif (store.get(testKey) != testKey) { store.disabled = true }\n\t\tstore.remove(testKey)\n\t} catch(e) {\n\t\tstore.disabled = true\n\t}\n\tstore.enabled = !store.disabled\n\n\tif (typeof module != 'undefined' && module.exports && this.module !== module) { module.exports = store }\n\telse if (typeof define === 'function' && define.amd) { define(store) }\n\telse { win.store = store }\n\n})(Function('return this')());\n\n},{}],15:[function(require,module,exports){\nmodule.exports={\n \"name\": \"yasgui-utils\",\n \"version\": \"1.6.0\",\n \"description\": \"Utils for YASGUI libs\",\n \"main\": \"src/main.js\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git://github.com/YASGUI/Utils.git\"\n },\n \"licenses\": [\n {\n \"type\": \"MIT\",\n \"url\": \"http://yasgui.github.io/license.txt\"\n }\n ],\n \"author\": {\n \"name\": \"Laurens Rietveld\"\n },\n \"maintainers\": [\n {\n \"name\": \"Laurens Rietveld\",\n \"email\": \"laurens.rietveld@gmail.com\",\n \"url\": \"http://laurensrietveld.nl\"\n }\n ],\n \"bugs\": {\n \"url\": \"https://github.com/YASGUI/Utils/issues\"\n },\n \"homepage\": \"https://github.com/YASGUI/Utils\",\n \"dependencies\": {\n \"store\": \"^1.3.14\"\n },\n \"readme\": \"A simple utils repo for the YASGUI tools\\n\",\n \"readmeFilename\": \"README.md\",\n \"_id\": \"yasgui-utils@1.6.0\",\n \"_from\": \"yasgui-utils@>=1.4.1 <2.0.0\"\n}\n\n},{}],16:[function(require,module,exports){\nwindow.console = window.console || {\"log\":function(){}};//make sure any console statements don't break IE\nmodule.exports = {\n\tstorage: require(\"./storage.js\"),\n\tsvg: require(\"./svg.js\"),\n\tversion: {\n\t\t\"yasgui-utils\" : require(\"../package.json\").version,\n\t},\n\tnestedExists : function(obj) {\n\t\tvar args = Array.prototype.slice.call(arguments, 1);\n\n\t\tfor (var i = 0; i < args.length; i++) {\n\t\t\tif (!obj || !obj.hasOwnProperty(args[i])) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tobj = obj[args[i]];\n\t\t}\n\t\treturn true;\n\t}\n};\n\n},{\"../package.json\":15,\"./storage.js\":17,\"./svg.js\":18}],17:[function(require,module,exports){\nvar store = require(\"store\");\nvar times = {\n\tday: function() {\n\t\treturn 1000 * 3600 * 24;//millis to day\n\t},\n\tmonth: function() {\n\t\ttimes.day() * 30;\n\t},\n\tyear: function() {\n\t\ttimes.month() * 12;\n\t}\n};\n\nvar root = module.exports = {\n\tset : function(key, val, exp) {\n if (!store.enabled) return;//this is probably in private mode. Don't run, as we might get Js errors\n\t\tif (key && val !== undefined) {\n\t\t\tif (typeof exp == \"string\") {\n\t\t\t\texp = times[exp]();\n\t\t\t}\n\t\t\t//try to store string for dom objects (e.g. XML result). Otherwise, we might get a circular reference error when stringifying this\n\t\t\tif (val.documentElement) val = new XMLSerializer().serializeToString(val.documentElement);\n\t\t\tstore.set(key, {\n\t\t\t\tval : val,\n\t\t\t\texp : exp,\n\t\t\t\ttime : new Date().getTime()\n\t\t\t});\n\t\t}\n\t},\n\tremove: function(key) {\n\t\tif (!store.enabled) return;//this is probably in private mode. Don't run, as we might get Js errors\n\t\tif (key) store.remove(key)\n\t},\n\tremoveAll: function(filter) {\n\t\tif (!store.enabled) return;//this is probably in private mode. Don't run, as we might get Js errors\n\t\tif (typeof filter === 'function') {\n\t\t\tfor (var key in store.getAll()) {\n\t\t\t\tif (filter(key, root.get(key))) root.remove(key);\n\t\t\t}\n\t\t}\n\t},\n\tget : function(key) {\n if (!store.enabled) return null;//this is probably in private mode. Don't run, as we might get Js errors\n\t\tif (key) {\n\t\t\tvar info = store.get(key);\n\t\t\tif (!info) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (info.exp && new Date().getTime() - info.time > info.exp) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn info.val;\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t}\n\n};\n\n},{\"store\":14}],18:[function(require,module,exports){\nmodule.exports = {\n\tdraw: function(parent, svgString) {\n\t\tif (!parent) return;\n\t\tvar el = module.exports.getElement(svgString);\n\t\tif (el) {\n\t\t\tif (parent.append) {\n\t\t\t\tparent.append(el);\n\t\t\t} else {\n\t\t\t\t//regular dom doc\n\t\t\t\tparent.appendChild(el);\n\t\t\t}\n\t\t}\n\t},\n\tgetElement: function(svgString) {\n\t\tif (svgString && svgString.indexOf(\"<svg\") == 0) {\n\t\t\t//no style passed via config. guess own styles\n\t\t\tvar parser = new DOMParser();\n\t\t\tvar dom = parser.parseFromString(svgString, \"text/xml\");\n\t\t\tvar svg = dom.documentElement;\n\t\t\t\n\t\t\tvar svgContainer = document.createElement(\"div\");\n\t\t\tsvgContainer.className = 'svgImg';\n\t\t\tsvgContainer.appendChild(svg);\n\t\t\treturn svgContainer;\n\t\t}\n\t\treturn false;\n\t}\n};\n},{}],19:[function(require,module,exports){\nmodule.exports={\n \"name\": \"yasgui-yasr\",\n \"description\": \"Yet Another SPARQL Resultset GUI\",\n \"version\": \"2.6.5\",\n \"main\": \"src/main.js\",\n \"license\": \"MIT\",\n \"author\": \"Laurens Rietveld\",\n \"homepage\": \"http://yasr.yasgui.org\",\n \"devDependencies\": {\n \"bootstrap-sass\": \"^3.3.1\",\n \"browserify\": \"^6.1.0\",\n \"browserify-shim\": \"^3.8.1\",\n \"browserify-transform-tools\": \"^1.2.1\",\n \"exorcist\": \"^0.1.6\",\n \"gulp\": \"~3.6.0\",\n \"gulp-autoprefixer\": \"^3.0.2\",\n \"gulp-bump\": \"^0.1.11\",\n \"gulp-concat\": \"^2.4.1\",\n \"gulp-connect\": \"^2.0.5\",\n \"gulp-cssimport\": \"^1.3.1\",\n \"gulp-embedlr\": \"^0.5.2\",\n \"gulp-filter\": \"^1.0.2\",\n \"gulp-git\": \"^0.5.2\",\n \"gulp-html-replace\": \"^1.4.1\",\n \"gulp-jsvalidate\": \"^0.2.0\",\n \"gulp-livereload\": \"^1.3.1\",\n \"gulp-minify-css\": \"0.3.11\",\n \"gulp-notify\": \"^2.0.1\",\n \"gulp-rename\": \"^1.2.0\",\n \"gulp-sass\": \"^2.0.4\",\n \"gulp-sourcemaps\": \"^1.2.8\",\n \"gulp-streamify\": \"0.0.5\",\n \"gulp-tag-version\": \"^1.1.0\",\n \"gulp-uglify\": \"^1.0.1\",\n \"node-sass\": \"^3.4.0\",\n \"require-dir\": \"^0.1.0\",\n \"run-sequence\": \"^1.0.1\",\n \"vinyl-buffer\": \"^1.0.0\",\n \"vinyl-source-stream\": \"~0.1.1\",\n \"vinyl-transform\": \"0.0.1\",\n \"watchify\": \"^0.6.4\"\n },\n \"bugs\": \"https://github.com/YASGUI/YASR/issues/\",\n \"keywords\": [\n \"JavaScript\",\n \"SPARQL\",\n \"Editor\",\n \"Semantic Web\",\n \"Linked Data\"\n ],\n \"maintainers\": [\n {\n \"name\": \"Laurens Rietveld\",\n \"email\": \"laurens.rietveld@gmail.com\",\n \"web\": \"http://laurensrietveld.nl\"\n }\n ],\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/YASGUI/YASR.git\"\n },\n \"dependencies\": {\n \"jquery\": \">=1.11.3\",\n \"datatables\": \"^1.10.7\",\n \"codemirror\": \"^4.7.0\",\n \"yasgui-utils\": \"^1.4.1\",\n \"pivottable\": \"^1.2.2\",\n \"jquery-ui\": \"^1.10.5\",\n \"d3\": \"^3.4.13\"\n },\n \"browserify-shim\": {\n \"google\": \"global:google\"\n },\n \"browserify\": {\n \"transform\": [\n \"browserify-shim\"\n ]\n },\n \"optionalShim\": {\n \"codemirror\": {\n \"require\": \"codemirror\",\n \"global\": \"CodeMirror\"\n },\n \"jquery\": {\n \"require\": \"jquery\",\n \"global\": \"jQuery\"\n },\n \"../../lib/codemirror\": {\n \"require\": \"codemirror\",\n \"global\": \"CodeMirror\"\n },\n \"datatables\": {\n \"require\": \"datatables\",\n \"global\": \"jQuery\"\n },\n \"d3\": {\n \"require\": \"d3\",\n \"global\": \"d3\"\n },\n \"jquery-ui/sortable\": {\n \"require\": \"jquery-ui/sortable\",\n \"global\": \"jQuery\"\n },\n \"pivottable\": {\n \"require\": \"pivottable\",\n \"global\": \"jQuery\"\n }\n }\n}\n\n},{}],20:[function(require,module,exports){\n'use strict';\nmodule.exports = function(result) {\n\tvar quote = \"\\\"\";\n\tvar delimiter = \",\";\n\tvar lineBreak = \"\\n\";\n\n\tvar variables = result.head.vars;\n\n\tvar querySolutions = result.results.bindings;\n\n\n\n\tvar createHeader = function() {\n\t\tfor (var i = 0; i < variables.length; i++) {\n\t\t\taddValueToString(variables[i]);\n\t\t}\n\t\tcsvString += lineBreak;\n\t};\n\n\tvar createBody = function() {\n\t\tfor (var i = 0; i < querySolutions.length; i++) {\n\t\t\taddQuerySolutionToString(querySolutions[i]);\n\t\t\tcsvString += lineBreak;\n\t\t}\n\t};\n\n\tvar addQuerySolutionToString = function(querySolution) {\n\t\tfor (var i = 0; i < variables.length; i++) {\n\t\t\tvar variable = variables[i];\n\t\t\tif (querySolution.hasOwnProperty(variable)) {\n\t\t\t\taddValueToString(querySolution[variable][\"value\"]);\n\t\t\t} else {\n\t\t\t\taddValueToString(\"\");\n\t\t\t}\n\t\t}\n\t};\n\tvar addValueToString = function(value) {\n\t\t//Quotes in the string need to be escaped\n\t\tvalue.replace(quote, quote + quote);\n\t\tif (needToQuoteString(value)) {\n\t\t\tvalue = quote + value + quote;\n\t\t}\n\t\tcsvString += \" \" + value + \" \" + delimiter;\n\t};\n\n\tvar needToQuoteString = function(value) {\n\t\t//quote when it contains whitespace or the delimiter\n\t\tvar needQuoting = false;\n\t\tif (value.match(\"[\\\\w|\" + delimiter + \"|\" + quote + \"]\")) {\n\t\t\tneedQuoting = true;\n\t\t}\n\t\treturn needQuoting;\n\t};\n\n\tvar csvString = \"\";\n\tcreateHeader();\n\tcreateBody();\n\treturn csvString;\n};\n},{}],21:[function(require,module,exports){\n'use strict';\nvar $ = (function(){try{return require('jquery')}catch(e){return window.jQuery}})();\n\n/**\n * Constructor of plugin which displays boolean info\n * \n * @param yasr {object}\n * @param parent {DOM element}\n * @param options {object}\n * @class YASR.plugins.boolean\n * @return yasr-boolean (doc)\n * \n */\nvar root = module.exports = function(yasr) {\n\tvar container = $(\"<div class='booleanResult'></div>\");\n\tvar draw = function() {\n\t\tcontainer.empty().appendTo(yasr.resultsContainer);\n\t\tvar booleanVal = yasr.results.getBoolean();\n\n\t\tvar imgId = null;\n\t\tvar textVal = null;\n\t\tif (booleanVal === true) {\n\t\t\timgId = \"check\";\n\t\t\ttextVal = \"True\";\n\t\t} else if (booleanVal === false) {\n\t\t\timgId = \"cross\";\n\t\t\ttextVal = \"False\";\n\t\t} else {\n\t\t\tcontainer.width(\"140\");\n\t\t\ttextVal = \"Could not find boolean value in response\";\n\t\t}\n\n\t\t//add icon\n\t\tif (imgId) require(\"yasgui-utils\").svg.draw(container, require('./imgs.js')[imgId]);\n\n\t\t$(\"<span></span>\").text(textVal).appendTo(container);\n\t};\n\n\n\tvar canHandleResults = function() {\n\t\treturn yasr.results.getBoolean && (yasr.results.getBoolean() === true || yasr.results.getBoolean() == false);\n\t};\n\n\n\n\treturn {\n\t\tname: null, //don't need to set this: we don't show it in the selection widget anyway, so don't need a human-friendly name\n\t\tdraw: draw,\n\t\thideFromSelection: true,\n\t\tgetPriority: 10,\n\t\tcanHandleResults: canHandleResults\n\t}\n};\n\n\nroot.version = {\n\t\"YASR-boolean\": require(\"../package.json\").version,\n\t\"jquery\": $.fn.jquery,\n};\n},{\"../package.json\":19,\"./imgs.js\":27,\"jquery\":undefined,\"yasgui-utils\":16}],22:[function(require,module,exports){\n'use strict';\nvar $ = (function(){try{return require('jquery')}catch(e){return window.jQuery}})();\nmodule.exports = {\n\t/**\n\t * key of default plugin to use\n\t * @property output\n\t * @type string\n\t * @default \"table\"\n\t */\n\toutput: \"table\",\n\tuseGoogleCharts: true,\n\toutputPlugins: [\"table\", \"error\", \"boolean\", \"rawResponse\", \"pivot\", \"gchart\"],\n\n\t/**\n\t * Draw the output selector widget\n\t * \n\t * @property drawOutputSelector\n\t * @type boolean\n\t * @default true\n\t */\n\tdrawOutputSelector: true,\n\n\t/**\n\t * Draw download icon. This issues html5 download functionality to 'download' files created on the client-side.\n\t * This allows the user to download results already queried for, such as a CSV when a table is shown, or the original response when the raw response output is selected\n\t * \n\t * @property drawDownloadIcon\n\t * @type boolean\n\t * @default true\n\t */\n\tdrawDownloadIcon: true,\n\n\n\tgetUsedPrefixes: null,\n\t/**\n\t * Make certain settings and values of YASR persistent. Setting a key\n\t * to null, will disable persistancy: nothing is stored between browser\n\t * sessions Setting the values to a string (or a function which returns a\n\t * string), will store the query in localstorage using the specified string.\n\t * By default, the ID is dynamically generated by finding the nearest DOM element with an \"id\" set,\n\t * to avoid collissions when using multiple YASR items on one page\n\t * \n\t * @property persistency\n\t * @type object\n\t */\n\tpersistency: {\n\t\tprefix: function(yasr) {\n\t\t\treturn \"yasr_\" + $(yasr.container).closest('[id]').attr('id') + \"_\";\n\t\t},\n\t\t/**\n\t\t * Persistency setting for the selected output\n\t\t * \n\t\t * @property persistency.outputSelector\n\t\t * @type string|function\n\t\t * @default function (determine unique id)\n\t\t */\n\t\toutputSelector: function(yasr) {\n\t\t\treturn \"selector\";\n\t\t},\n\t\t/**\n\t\t * Persistency setting for query results.\n\t\t * \n\t\t * @property persistency.results\n\t\t * @type object\n\t\t */\n\t\tresults: {\n\t\t\t/**\n\t\t\t * Get the key to store results in\n\t\t\t * \n\t\t\t * @property persistency.results.id\n\t\t\t * @type string|function\n\t\t\t * @default function (determine unique id)\n\t\t\t */\n\t\t\tid: function(yasr) {\n\t\t\t\treturn \"results_\" + $(yasr.container).closest('[id]').attr('id');\n\t\t\t},\n\t\t\tkey: 'results',\n\t\t\t/**\n\t\t\t * The result set might too large to fit in local storage. \n\t\t\t * It is impossible to detect how large the local storage is.\n\t\t\t * Therefore, we do not store all results in local storage, depending on a max number of characters in the SPARQL result serialization.\n\t\t\t * Set this function conservitavely. (especially when using multiple YASR instances on one page)\n\t\t\t * \n\t\t\t * @property persistency.results.maxSize\n\t\t\t * @type int\n\t\t\t * @default 100000\n\t\t\t */\n\t\t\tmaxSize: 100000 //char count\n\t\t}\n\n\t},\n\n\n};\n},{\"jquery\":undefined}],23:[function(require,module,exports){\n'use strict';\nvar $ = (function(){try{return require('jquery')}catch(e){return window.jQuery}})();\n\n/**\n * Constructor of plugin which displays SPARQL errors\n * \n * @param yasr {object}\n * @param parent {DOM element}\n * @param options {object}\n * @class YASR.plugins.boolean\n * @return yasr-erro (doc)\n * \n */\nvar root = module.exports = function(yasr) {\n\tvar $container = $(\"<div class='errorResult'></div>\");\n\tvar options = $.extend(true, {}, root.defaults);\n\n\tvar getTryBtn = function() {\n\t\tvar $tryBtn = null;\n\t\tif (options.tryQueryLink) {\n\t\t\tvar link = options.tryQueryLink();\n\t\t\t$tryBtn = $('<button>', {\n\t\t\t\t\tclass: 'yasr_btn yasr_tryQuery'\n\t\t\t\t})\n\t\t\t\t.text('Try query in new browser window')\n\t\t\t\t.click(function() {\n\t\t\t\t\twindow.open(link, '_blank');\n\t\t\t\t\t$(this).blur();\n\t\t\t\t})\n\t\t}\n\t\treturn $tryBtn;\n\t}\n\n\tvar draw = function() {\n\t\tvar error = yasr.results.getException();\n\t\t$container.empty().appendTo(yasr.resultsContainer);\n\t\tvar $header = $(\"<div>\", {\n\t\t\tclass: 'errorHeader'\n\t\t}).appendTo($container);\n\n\t\tif (error.status !== 0) {\n\t\t\tvar statusText = 'Error';\n\t\t\tif (error.statusText && error.statusText.length < 100) {\n\t\t\t\t//use a max: otherwise the alert span will look ugly\n\t\t\t\tstatusText = error.statusText;\n\t\t\t}\n\t\t\tstatusText += ' (#' + error.status + ')';\n\n\t\t\t$header\n\t\t\t\t.append(\n\t\t\t\t\t$(\"<span>\", {\n\t\t\t\t\t\tclass: 'exception'\n\t\t\t\t\t})\n\t\t\t\t\t.text(statusText)\n\t\t\t\t)\n\t\t\t\t.append(getTryBtn());\n\n\t\t\tvar responseText = null;\n\t\t\tif (error.responseText) {\n\t\t\t\tresponseText = error.responseText;\n\t\t\t} else if (typeof error == \"string\") {\n\t\t\t\t//for backwards compatability (when creating the error string was done externally\n\t\t\t\tresponseText = error;\n\t\t\t}\n\t\t\tif (responseText) $container.append($(\"<pre>\").text(responseText));\n\t\t} else {\n\t\t\t$header.append(getTryBtn());\n\t\t\t//cors disabled, wrong url, or endpoint down\n\t\t\t$container\n\t\t\t\t.append(\n\t\t\t\t\t$('<div>', {\n\t\t\t\t\t\tclass: 'corsMessage'\n\t\t\t\t\t})\n\t\t\t\t\t.append(options.corsMessage)\n\t\t\t\t);\n\t\t}\n\n\t};\n\n\n\tvar canHandleResults = function(yasr) {\n\t\treturn yasr.results.getException() || false;\n\t};\n\n\treturn {\n\t\tname: null, //don't need to set this: we don't show it in the selection widget anyway, so don't need a human-friendly name\n\t\tdraw: draw,\n\t\tgetPriority: 20,\n\t\thideFromSelection: true,\n\t\tcanHandleResults: canHandleResults,\n\t}\n};\n\n/**\n * Defaults for error plugin\n * \n * @type object\n * @attribute YASR.plugins.error.defaults\n */\nroot.defaults = {\n\tcorsMessage: 'Unable to get response from endpoint',\n\ttryQueryLink: null,\n};\n},{\"jquery\":undefined}],24:[function(require,module,exports){\nmodule.exports = {\n\tGoogleTypeException: function(foundTypes, varName) {\n\t\tthis.foundTypes = foundTypes;\n\t\tthis.varName = varName;\n\t\tthis.toString = function() {\n\t\t\tvar string = 'Conflicting data types found for variable ' + this.varName + '. Assuming all values of this variable are \"string\".';\n\t\t\tstring += ' To avoid this issue, cast the values in your SPARQL query to the intended xsd datatype';\n\n\t\t\treturn string;\n\t\t};\n\t\tthis.toHtml = function() {\n\t\t\tvar string = 'Conflicting data types found for variable <i>' + this.varName + '</i>. Assuming all values of this variable are \"string\".';\n\t\t\tstring += ' As a result, several Google Charts will not render values of this particular variable.';\n\t\t\tstring += ' To avoid this issue, cast the values in your SPARQL query to the intended xsd datatype';\n\n\t\t\treturn string;\n\t\t};\n\t}\n}\n},{}],25:[function(require,module,exports){\n(function (global){\nvar EventEmitter = require('events').EventEmitter,\n\t$ = (function(){try{return require('jquery')}catch(e){return window.jQuery}})();\n//cannot package google loader via browserify....\nvar loadingMain = false;\nvar loadingFailed = false;\nvar loader = function() {\n\tEventEmitter.call(this);\n\tvar mod = this;\n\tthis.init = function() {\n\t\tif (!loadingFailed && !(typeof window !== \"undefined\" ? window.google : typeof global !== \"undefined\" ? global.google : null) && !loadingMain) { //not initiated yet, not currently loading, and has not failed the previous time\n\t\t\tloadingMain = true;\n\t\t\t/**\n\t\t\t * It is extremely difficult to catch script loader errors (see http://www.html5rocks.com/en/tutorials/speed/script-loading/)\n\t\t\t * Existing libraries either ignore several browsers (e.g. jquery 2.x), or use ugly hacks (timeouts or something)\n\t\t\t * So, we use our own custom ugly hack (yes, timeouts)\n\t\t\t */\n\t\t\tloadScript('//google.com/jsapi', function() {\n\t\t\t\tloadingMain = false;\n\t\t\t\tmod.emit('initDone');\n\t\t\t});\n\n\t\t\tvar timeout = 100; //ms\n\t\t\tvar maxTimeout = 6000; //so 6 sec max\n\t\t\tvar startTime = +new Date();\n\t\t\tvar checkAndWait = function() {\n\t\t\t\tif (!(typeof window !== \"undefined\" ? window.google : typeof global !== \"undefined\" ? global.google : null)) {\n\t\t\t\t\tif ((+new Date() - startTime) > maxTimeout) {\n\t\t\t\t\t\t//ok, we've waited long enough. Obviously we could not load the googleloader...\n\t\t\t\t\t\tloadingFailed = true;\n\t\t\t\t\t\tloadingMain = false;\n\t\t\t\t\t\tmod.emit('initError');\n\n\t\t\t\t\t\t//TODO: clear initDone callbacks. they won't fire anymore anyway\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsetTimeout(checkAndWait, timeout);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t//TODO: clear initFailed callbacks. they won't fire anymore anyway\n\t\t\t\t}\n\t\t\t}\n\t\t\tcheckAndWait();\n\t\t} else {\n\t\t\tif ((typeof window !== \"undefined\" ? window.google : typeof global !== \"undefined\" ? global.google : null)) {\n\t\t\t\t//already loaded! everything is fine\n\t\t\t\tmod.emit('initDone');\n\t\t\t} else if (loadingFailed) {\n\t\t\t\tmod.emit('initError')\n\t\t\t} else {\n\t\t\t\t//hmmm, should never get here\n\t\t\t}\n\n\t\t}\n\t}\n\tthis.googleLoad = function() {\n\n\t\tvar load = function() {\n\t\t\t(typeof window !== \"undefined\" ? window.google : typeof global !== \"undefined\" ? global.google : null).load(\"visualization\", \"1\", {\n\t\t\t\tpackages: [\"corechart\", \"charteditor\"],\n\t\t\t\tcallback: function() {\n\t\t\t\t\tmod.emit('done')\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t\tif (loadingMain) {\n\t\t\tmod.once('initDone', load);\n\t\t\tmod.once('initError', function() {\n\t\t\t\tmod.emit('error', 'Could not load google loader')\n\t\t\t});\n\t\t} else if ((typeof window !== \"undefined\" ? window.google : typeof global !== \"undefined\" ? global.google : null)) {\n\t\t\t//google loader is there. use it\n\t\t\tload();\n\t\t} else if (loadingFailed) {\n\t\t\tmod.emit('error', 'Could not load google loader');\n\t\t} else {\n\t\t\t//not loading, no loading error, and not loaded. it must not have been initialized yet. Do that\n\t\t\tmod.once('initDone', load);\n\t\t\tmod.once('initError', function() {\n\t\t\t\tmod.emit('error', 'Could not load google loader')\n\t\t\t});\n\t\t}\n\t};\n}\n\n\nvar loadScript = function(url, callback) {\n\tvar script = document.createElement(\"script\")\n\tscript.type = \"text/javascript\";\n\n\tif (script.readyState) { //IE\n\t\tscript.onreadystatechange = function() {\n\t\t\tif (script.readyState == \"loaded\" ||\n\t\t\t\tscript.readyState == \"complete\") {\n\t\t\t\tscript.onreadystatechange = null;\n\t\t\t\tcallback();\n\t\t\t}\n\t\t};\n\t} else { //Others\n\t\tscript.onload = function() {\n\t\t\tcallback();\n\t\t};\n\t}\n\n\tscript.src = url;\n\tdocument.body.appendChild(script);\n}\nloader.prototype = new EventEmitter;\nmodule.exports = new loader();\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"events\":4,\"jquery\":undefined}],26:[function(require,module,exports){\n(function (global){\n'use strict';\n/**\n * todo: chart height as option\n * \n */\nvar $ = (function(){try{return require('jquery')}catch(e){return window.jQuery}})(),\n\tutils = require('./utils.js'),\n\tyUtils = require('yasgui-utils');\n\nvar root = module.exports = function(yasr) {\n\n\tvar options = $.extend(true, {}, root.defaults);\n\tvar id = yasr.container.closest('[id]').attr('id');\n\n\tvar chartWrapper = null;\n\tvar editor = null;\n\n\tvar initEditor = function(callback) {\n\t\tvar google = (typeof window !== \"undefined\" ? window.google : typeof global !== \"undefined\" ? global.google : null);\n\t\teditor = new google.visualization.ChartEditor();\n\t\tgoogle.visualization.events.addListener(editor, 'ok', function() {\n\t\t\tvar tmp;\n\t\t\tchartWrapper = editor.getChartWrapper();\n\t\t\ttmp = chartWrapper.getDataTable();\n\t\t\tchartWrapper.setDataTable(null);\n\t\t\t//ugly: need to parse json string to json obj again, as google chart does not provide access to object directly\n\t\t\toptions.chartConfig = JSON.parse(chartWrapper.toJSON());\n\t\t\t//remove container ID though, for portability\n\t\t\tif (options.chartConfig.containerId) delete options.chartConfig['containerId'];\n\t\t\tyasr.store();\n\t\t\tchartWrapper.setDataTable(tmp);\n\t\t\tchartWrapper.setOption(\"width\", options.width);\n\t\t\tchartWrapper.setOption(\"height\", options.height);\n\t\t\tchartWrapper.draw();\n\t\t\tyasr.updateHeader();\n\t\t});\n\t\tif (callback) callback();\n\t};\n\n\treturn {\n\t\tname: \"Google Chart\",\n\t\thideFromSelection: false,\n\t\tpriority: 7,\n\t\toptions: options,\n\t\tgetPersistentSettings: function() {\n\t\t\treturn {\n\t\t\t\tchartConfig: options.chartConfig,\n\t\t\t\tmotionChartState: options.motionChartState\n\t\t\t}\n\t\t},\n\t\tsetPersistentSettings: function(persSettings) {\n\t\t\tif (persSettings['chartConfig']) options.chartConfig = persSettings['chartConfig'];\n\t\t\tif (persSettings['motionChartState']) options.motionChartState = persSettings['motionChartState'];\n\t\t},\n\t\tcanHandleResults: function(yasr) {\n\t\t\tvar results, variables;\n\t\t\treturn (results = yasr.results) != null && (variables = results.getVariables()) && variables.length > 0;\n\t\t},\n\t\tgetDownloadInfo: function() {\n\t\t\tif (!yasr.results) return null;\n\t\t\tvar svgEl = yasr.resultsContainer.find('svg');\n\t\t\tif (svgEl.length > 0) {\n\t\t\t\treturn {\n\t\t\t\t\tgetContent: function() {\n\t\t\t\t\t\tif (svgEl[0].outerHTML) {\n\t\t\t\t\t\t\treturn svgEl[0].outerHTML;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t//outerHTML not supported. use workaround\n\t\t\t\t\t\t\treturn $('<div>').append(svgEl.clone()).html();\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tfilename: \"queryResults.svg\",\n\t\t\t\t\tcontentType: \"image/svg+xml\",\n\t\t\t\t\tbuttonTitle: \"Download SVG Image\"\n\t\t\t\t};\n\t\t\t}\n\t\t\t//ok, not a svg. is it a table?\n\t\t\tvar $table = yasr.resultsContainer.find('.google-visualization-table-table');\n\t\t\tif ($table.length > 0) {\n\t\t\t\treturn {\n\t\t\t\t\tgetContent: function() {\n\t\t\t\t\t\treturn $table.tableToCsv();\n\t\t\t\t\t},\n\t\t\t\t\tfilename: \"queryResults.csv\",\n\t\t\t\t\tcontentType: \"text/csv\",\n\t\t\t\t\tbuttonTitle: \"Download as CSV\"\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\t\tgetEmbedHtml: function() {\n\t\t\tif (!yasr.results) return null;\n\n\t\t\tvar svgEl = yasr.resultsContainer.find('svg')\n\t\t\t\t.clone() //create clone, as we'd like to remove height/width attributes\n\t\t\t\t.removeAttr('height').removeAttr('width')\n\t\t\t\t.css('height', '').css('width', '');\n\t\t\tif (svgEl.length == 0) return null;\n\n\t\t\tvar htmlString = svgEl[0].outerHTML;\n\t\t\tif (!htmlString) {\n\t\t\t\t//outerHTML not supported. use workaround\n\t\t\t\thtmlString = $('<div>').append(svgEl.clone()).html();\n\t\t\t}\n\t\t\t//wrap in div, so users can more easily tune width/height\n\t\t\t//don't use jquery, so we can easily influence indentation\n\t\t\treturn '<div style=\"width: 800px; height: 600px;\">\\n' + htmlString + '\\n</div>';\n\t\t},\n\t\tdraw: function() {\n\t\t\tvar doDraw = function() {\n\t\t\t\t//clear previous results (if any)\n\t\t\t\tyasr.resultsContainer.empty();\n\t\t\t\tvar wrapperId = id + '_gchartWrapper';\n\n\t\t\t\tyasr.resultsContainer.append(\n\t\t\t\t\t$('<button>', {\n\t\t\t\t\t\tclass: 'openGchartBtn yasr_btn'\n\t\t\t\t\t})\n\t\t\t\t\t.text('Chart Config')\n\t\t\t\t\t.click(function() {\n\t\t\t\t\t\teditor.openDialog(chartWrapper);\n\t\t\t\t\t})\n\t\t\t\t).append(\n\t\t\t\t\t$('<div>', {\n\t\t\t\t\t\tid: wrapperId,\n\t\t\t\t\t\tclass: 'gchartWrapper'\n\t\t\t\t\t})\n\t\t\t\t);\n\t\t\t\tvar dataTable = new google.visualization.DataTable();\n\t\t\t\tvar jsonResults = yasr.results.getAsJson();\n\n\t\t\t\tjsonResults.head.vars.forEach(function(variable) {\n\t\t\t\t\tvar type = 'string';\n\t\t\t\t\ttry {\n\t\t\t\t\t\ttype = utils.getGoogleTypeForBindings(jsonResults.results.bindings, variable);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tif (e instanceof require('./exceptions.js').GoogleTypeException) {\n\t\t\t\t\t\t\tyasr.warn(e.toHtml())\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthrow e;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataTable.addColumn(type, variable);\n\t\t\t\t});\n\t\t\t\tvar usedPrefixes = null;\n\t\t\t\tif (yasr.options.getUsedPrefixes) {\n\t\t\t\t\tusedPrefixes = (typeof yasr.options.getUsedPrefixes == \"function\" ? yasr.options.getUsedPrefixes(yasr) : yasr.options.getUsedPrefixes);\n\t\t\t\t}\n\t\t\t\tjsonResults.results.bindings.forEach(function(binding) {\n\t\t\t\t\tvar row = [];\n\t\t\t\t\tjsonResults.head.vars.forEach(function(variable, columnId) {\n\t\t\t\t\t\trow.push(utils.castGoogleType(binding[variable], usedPrefixes, dataTable.getColumnType(columnId)));\n\t\t\t\t\t})\n\t\t\t\t\tdataTable.addRow(row);\n\t\t\t\t});\n\n\t\t\t\tif (options.chartConfig && options.chartConfig.chartType) {\n\t\t\t\t\toptions.chartConfig.containerId = wrapperId;\n\t\t\t\t\tchartWrapper = new google.visualization.ChartWrapper(options.chartConfig);\n\t\t\t\t\tif (chartWrapper.getChartType() === \"MotionChart\" && options.motionChartState) {\n\t\t\t\t\t\tchartWrapper.setOption(\"state\", options.motionChartState);\n\t\t\t\t\t\tgoogle.visualization.events.addListener(chartWrapper, 'ready', function() {\n\t\t\t\t\t\t\tvar motionChart;\n\t\t\t\t\t\t\tmotionChart = chartWrapper.getChart();\n\t\t\t\t\t\t\tgoogle.visualization.events.addListener(motionChart, 'statechange', function() {\n\t\t\t\t\t\t\t\toptions.motionChartState = motionChart.getState();\n\t\t\t\t\t\t\t\tyasr.store();\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tchartWrapper.setDataTable(dataTable);\n\t\t\t\t} else {\n\t\t\t\t\tchartWrapper = new google.visualization.ChartWrapper({\n\t\t\t\t\t\tchartType: 'Table',\n\t\t\t\t\t\tdataTable: dataTable,\n\t\t\t\t\t\tcontainerId: wrapperId\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tchartWrapper.setOption(\"width\", options.width);\n\t\t\t\tchartWrapper.setOption(\"height\", options.height);\n\t\t\t\tchartWrapper.draw();\n\t\t\t\tgoogle.visualization.events.addListener(chartWrapper, 'ready', yasr.updateHeader);\n\t\t\t}\n\n\t\t\tif (!(typeof window !== \"undefined\" ? window.google : typeof global !== \"undefined\" ? global.google : null) || !(typeof window !== \"undefined\" ? window.google : typeof global !== \"undefined\" ? global.google : null).visualization || !editor) {\n\t\t\t\trequire('./gChartLoader.js')\n\t\t\t\t\t.on('done', function() {\n\t\t\t\t\t\tinitEditor();\n\t\t\t\t\t\tdoDraw();\n\t\t\t\t\t})\n\t\t\t\t\t.on('error', function() {\n\t\t\t\t\t\t//TODO: disable or something?\n\t\t\t\t\t})\n\t\t\t\t\t.googleLoad();\n\t\t\t} else {\n\t\t\t\t//everything (editor as well) is already initialized\n\t\t\t\tdoDraw();\n\t\t\t}\n\t\t}\n\t};\n};\nroot.defaults = {\n\theight: \"100%\",\n\twidth: \"100%\",\n\tpersistencyId: 'gchart',\n\tchartConfig: null,\n\tmotionChartState: null\n};\n\nfunction deepEq$(x, y, type) {\n\tvar toString = {}.toString,\n\t\thasOwnProperty = {}.hasOwnProperty,\n\t\thas = function(obj, key) {\n\t\t\treturn hasOwnProperty.call(obj, key);\n\t\t};\n\tvar first = true;\n\treturn eq(x, y, []);\n\n\tfunction eq(a, b, stack) {\n\t\tvar className, length, size, result, alength, blength, r, key, ref, sizeB;\n\t\tif (a == null || b == null) {\n\t\t\treturn a === b;\n\t\t}\n\t\tif (a.__placeholder__ || b.__placeholder__) {\n\t\t\treturn true;\n\t\t}\n\t\tif (a === b) {\n\t\t\treturn a !== 0 || 1 / a == 1 / b;\n\t\t}\n\t\tclassName = toString.call(a);\n\t\tif (toString.call(b) != className) {\n\t\t\treturn false;\n\t\t}\n\t\tswitch (className) {\n\t\t\tcase '[object String]':\n\t\t\t\treturn a == String(b);\n\t\t\tcase '[object Number]':\n\t\t\t\treturn a != +a ? b != +b : (a == 0 ? 1 / a == 1 / b : a == +b);\n\t\t\tcase '[object Date]':\n\t\t\tcase '[object Boolean]':\n\t\t\t\treturn +a == +b;\n\t\t\tcase '[object RegExp]':\n\t\t\t\treturn a.source == b.source &&\n\t\t\t\t\ta.global == b.global &&\n\t\t\t\t\ta.multiline == b.multiline &&\n\t\t\t\t\ta.ignoreCase == b.ignoreCase;\n\t\t}\n\t\tif (typeof a != 'object' || typeof b != 'object') {\n\t\t\treturn false;\n\t\t}\n\t\tlength = stack.length;\n\t\twhile (length--) {\n\t\t\tif (stack[length] == a) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\tstack.push(a);\n\t\tsize = 0;\n\t\tresult = true;\n\t\tif (className == '[object Array]') {\n\t\t\talength = a.length;\n\t\t\tblength = b.length;\n\t\t\tif (first) {\n\t\t\t\tswitch (type) {\n\t\t\t\t\tcase '===':\n\t\t\t\t\t\tresult = alength === blength;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase '<==':\n\t\t\t\t\t\tresult = alength <= blength;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase '<<=':\n\t\t\t\t\t\tresult = alength < blength;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tsize = alength;\n\t\t\t\tfirst = false;\n\t\t\t} else {\n\t\t\t\tresult = alength === blength;\n\t\t\t\tsize = alength;\n\t\t\t}\n\t\t\tif (result) {\n\t\t\t\twhile (size--) {\n\t\t\t\t\tif (!(result = size in a == size in b && eq(a[size], b[size], stack))) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif ('constructor' in a != 'constructor' in b || a.constructor != b.constructor) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tfor (key in a) {\n\t\t\t\tif (has(a, key)) {\n\t\t\t\t\tsize++;\n\t\t\t\t\tif (!(result = has(b, key) && eq(a[key], b[key], stack))) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (result) {\n\t\t\t\tsizeB = 0;\n\t\t\t\tfor (key in b) {\n\t\t\t\t\tif (has(b, key)) {\n\t\t\t\t\t\t++sizeB;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (first) {\n\t\t\t\t\tif (type === '<<=') {\n\t\t\t\t\t\tresult = size < sizeB;\n\t\t\t\t\t} else if (type === '<==') {\n\t\t\t\t\t\tresult = size <= sizeB\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult = size === sizeB;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tfirst = false;\n\t\t\t\t\tresult = size === sizeB;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tstack.pop();\n\t\treturn result;\n\t}\n}\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"./exceptions.js\":24,\"./gChartLoader.js\":25,\"./utils.js\":40,\"jquery\":undefined,\"yasgui-utils\":16}],27:[function(require,module,exports){\n'use strict';\nmodule.exports = {\n\tcross: '<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" version=\"1.1\" x=\"0px\" y=\"0px\" width=\"30px\" height=\"30px\" viewBox=\"0 0 100 100\" enable-background=\"new 0 0 100 100\" xml:space=\"preserve\"><g>\t<path d=\"M83.288,88.13c-2.114,2.112-5.575,2.112-7.689,0L53.659,66.188c-2.114-2.112-5.573-2.112-7.687,0L24.251,87.907 c-2.113,2.114-5.571,2.114-7.686,0l-4.693-4.691c-2.114-2.114-2.114-5.573,0-7.688l21.719-21.721c2.113-2.114,2.113-5.573,0-7.686 L11.872,24.4c-2.114-2.113-2.114-5.571,0-7.686l4.842-4.842c2.113-2.114,5.571-2.114,7.686,0L46.12,33.591 c2.114,2.114,5.572,2.114,7.688,0l21.721-21.719c2.114-2.114,5.573-2.114,7.687,0l4.695,4.695c2.111,2.113,2.111,5.571-0.003,7.686 L66.188,45.973c-2.112,2.114-2.112,5.573,0,7.686L88.13,75.602c2.112,2.111,2.112,5.572,0,7.687L83.288,88.13z\"/></g></svg>',\n\tcheck: '<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" version=\"1.1\" x=\"0px\" y=\"0px\" width=\"30px\" height=\"30px\" viewBox=\"0 0 100 100\" enable-background=\"new 0 0 100 100\" xml:space=\"preserve\"><path fill=\"#000000\" d=\"M14.301,49.982l22.606,17.047L84.361,4.903c2.614-3.733,7.76-4.64,11.493-2.026l0.627,0.462 c3.732,2.614,4.64,7.758,2.025,11.492l-51.783,79.77c-1.955,2.791-3.896,3.762-7.301,3.988c-3.405,0.225-5.464-1.039-7.508-3.084 L2.447,61.814c-3.263-3.262-3.263-8.553,0-11.814l0.041-0.019C5.75,46.718,11.039,46.718,14.301,49.982z\"/></svg>',\n\tunsorted: '<svg xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:svg=\"http://www.w3.org/2000/svg\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:sodipodi=\"http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd\" xmlns:inkscape=\"http://www.inkscape.org/namespaces/inkscape\" version=\"1.1\" id=\"Layer_1\" x=\"0px\" y=\"0px\" width=\"100%\" height=\"100%\" viewBox=\"0 0 54.552711 113.78478\" enable-background=\"new 0 0 100 100\" xml:space=\"preserve\"><g id=\"g5\" transform=\"matrix(-0.70522156,-0.70898699,-0.70898699,0.70522156,97.988199,55.081205)\"><path style=\"fill:#000000\" inkscape:connector-curvature=\"0\" id=\"path7\" d=\"M 57.911,66.915 45.808,55.063 42.904,52.238 31.661,41.25 31.435,41.083 31.131,40.775 30.794,40.523 30.486,40.3 30.069,40.05 29.815,39.911 29.285,39.659 29.089,39.576 28.474,39.326 28.363,39.297 H 28.336 L 27.665,39.128 27.526,39.1 26.94,38.99 26.714,38.961 26.212,38.934 h -0.31 -0.444 l -0.339,0.027 c -1.45,0.139 -2.876,0.671 -4.11,1.564 l -0.223,0.141 -0.279,0.25 -0.335,0.308 -0.054,0.029 -0.171,0.194 -0.334,0.364 -0.224,0.279 -0.25,0.336 -0.225,0.362 -0.192,0.308 -0.197,0.421 -0.142,0.279 -0.193,0.477 -0.084,0.222 -12.441,38.414 c -0.814,2.458 -0.313,5.029 1.115,6.988 v 0.026 l 0.418,0.532 0.17,0.165 0.251,0.281 0.084,0.079 0.283,0.281 0.25,0.194 0.474,0.367 0.083,0.053 c 2.015,1.371 4.641,1.874 7.131,1.094 L 55.228,80.776 c 4.303,-1.342 6.679,-5.814 5.308,-10.006 -0.387,-1.259 -1.086,-2.35 -1.979,-3.215 l -0.368,-0.337 -0.278,-0.303 z m -6.318,5.896 0.079,0.114 -37.369,11.57 11.854,-36.538 10.565,10.317 2.876,2.825 11.995,11.712 z\" /></g><path style=\"fill:#000000\" inkscape:connector-curvature=\"0\" id=\"path7-9\" d=\"m 8.8748339,52.571766 16.9382111,-0.222584 4.050851,-0.06665 15.719154,-0.222166 0.27778,-0.04246 0.43276,0.0017 0.41632,-0.06121 0.37532,-0.0611 0.47132,-0.119342 0.27767,-0.08206 0.55244,-0.198047 0.19707,-0.08043 0.61095,-0.259721 0.0988,-0.05825 0.019,-0.01914 0.59303,-0.356548 0.11787,-0.0788 0.49125,-0.337892 0.17994,-0.139779 0.37317,-0.336871 0.21862,-0.219786 0.31311,-0.31479 0.21993,-0.259387 c 0.92402,-1.126057 1.55249,-2.512251 1.78961,-4.016904 l 0.0573,-0.25754 0.0195,-0.374113 0.0179,-0.454719 0.0175,-0.05874 -0.0169,-0.258049 -0.0225,-0.493503 -0.0398,-0.355569 -0.0619,-0.414201 -0.098,-0.414812 -0.083,-0.353334 L 53.23955,41.1484 53.14185,40.850967 52.93977,40.377742 52.84157,40.161628 34.38021,4.2507375 C 33.211567,1.9401875 31.035446,0.48226552 28.639484,0.11316952 l -0.01843,-0.01834 -0.671963,-0.07882 -0.236871,0.0042 L 27.335984,-4.7826577e-7 27.220736,0.00379952 l -0.398804,0.0025 -0.313848,0.04043 -0.594474,0.07724 -0.09611,0.02147 C 23.424549,0.60716252 21.216017,2.1142355 20.013025,4.4296865 L 0.93967491,40.894479 c -2.08310801,3.997178 -0.588125,8.835482 3.35080799,10.819749 1.165535,0.613495 2.43199,0.88731 3.675026,0.864202 l 0.49845,-0.02325 0.410875,0.01658 z M 9.1502369,43.934401 9.0136999,43.910011 27.164145,9.2564625 44.70942,43.42818 l -14.765289,0.214677 -4.031106,0.0468 -16.7627881,0.244744 z\" /></svg>',\n\tsortDesc: '<svg xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:svg=\"http://www.w3.org/2000/svg\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:sodipodi=\"http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd\" xmlns:inkscape=\"http://www.inkscape.org/namespaces/inkscape\" version=\"1.1\" id=\"Layer_1\" x=\"0px\" y=\"0px\" width=\"100%\" height=\"100%\" viewBox=\"0 0 54.552711 113.78478\" enable-background=\"new 0 0 100 100\" xml:space=\"preserve\"><g id=\"g5\" transform=\"matrix(-0.70522156,-0.70898699,-0.70898699,0.70522156,97.988199,55.081205)\"><path style=\"fill:#000000\" inkscape:connector-curvature=\"0\" id=\"path7\" d=\"M 57.911,66.915 45.808,55.063 42.904,52.238 31.661,41.25 31.435,41.083 31.131,40.775 30.794,40.523 30.486,40.3 30.069,40.05 29.815,39.911 29.285,39.659 29.089,39.576 28.474,39.326 28.363,39.297 H 28.336 L 27.665,39.128 27.526,39.1 26.94,38.99 26.714,38.961 26.212,38.934 h -0.31 -0.444 l -0.339,0.027 c -1.45,0.139 -2.876,0.671 -4.11,1.564 l -0.223,0.141 -0.279,0.25 -0.335,0.308 -0.054,0.029 -0.171,0.194 -0.334,0.364 -0.224,0.279 -0.25,0.336 -0.225,0.362 -0.192,0.308 -0.197,0.421 -0.142,0.279 -0.193,0.477 -0.084,0.222 -12.441,38.414 c -0.814,2.458 -0.313,5.029 1.115,6.988 v 0.026 l 0.418,0.532 0.17,0.165 0.251,0.281 0.084,0.079 0.283,0.281 0.25,0.194 0.474,0.367 0.083,0.053 c 2.015,1.371 4.641,1.874 7.131,1.094 L 55.228,80.776 c 4.303,-1.342 6.679,-5.814 5.308,-10.006 -0.387,-1.259 -1.086,-2.35 -1.979,-3.215 l -0.368,-0.337 -0.278,-0.303 z m -6.318,5.896 0.079,0.114 -37.369,11.57 11.854,-36.538 10.565,10.317 2.876,2.825 11.995,11.712 z\" /></g><path style=\"fill:#000000\" inkscape:connector-curvature=\"0\" id=\"path9\" d=\"m 27.813273,0.12823506 0.09753,0.02006 c 2.39093,0.458209 4.599455,1.96811104 5.80244,4.28639004 L 52.785897,40.894525 c 2.088044,4.002139 0.590949,8.836902 -3.348692,10.821875 -1.329078,0.688721 -2.766603,0.943695 -4.133174,0.841768 l -0.454018,0.02 L 27.910392,52.354171 23.855313,52.281851 8.14393,52.061827 7.862608,52.021477 7.429856,52.021738 7.014241,51.959818 6.638216,51.900838 6.164776,51.779369 5.889216,51.699439 5.338907,51.500691 5.139719,51.419551 4.545064,51.145023 4.430618,51.105123 4.410168,51.084563 3.817138,50.730843 3.693615,50.647783 3.207314,50.310611 3.028071,50.174369 2.652795,49.833957 2.433471,49.613462 2.140099,49.318523 1.901127,49.041407 C 0.97781,47.916059 0.347935,46.528448 0.11153,45.021676 L 0.05352,44.766255 0.05172,44.371683 0.01894,43.936017 0,43.877277 0.01836,43.62206 0.03666,43.122889 0.0765,42.765905 0.13912,42.352413 0.23568,41.940425 0.32288,41.588517 0.481021,41.151945 0.579391,40.853806 0.77369,40.381268 0.876097,40.162336 19.338869,4.2542801 c 1.172169,-2.308419 3.34759,-3.76846504 5.740829,-4.17716604 l 0.01975,0.01985 0.69605,-0.09573 0.218437,0.0225 0.490791,-0.02132 0.39809,0.0046 0.315972,0.03973 0.594462,0.08149 z\" /></svg>',\n\tsortAsc: '<svg xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:svg=\"http://www.w3.org/2000/svg\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:sodipodi=\"http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd\" xmlns:inkscape=\"http://www.inkscape.org/namespaces/inkscape\" version=\"1.1\" id=\"Layer_1\" x=\"0px\" y=\"0px\" width=\"100%\" height=\"100%\" viewBox=\"0 0 54.552711 113.78478\" enable-background=\"new 0 0 100 100\" xml:space=\"preserve\"><g id=\"g5\" transform=\"matrix(-0.70522156,0.70898699,-0.70898699,-0.70522156,97.988199,58.704807)\"><path style=\"fill:#000000\" inkscape:connector-curvature=\"0\" id=\"path7\" d=\"M 57.911,66.915 45.808,55.063 42.904,52.238 31.661,41.25 31.435,41.083 31.131,40.775 30.794,40.523 30.486,40.3 30.069,40.05 29.815,39.911 29.285,39.659 29.089,39.576 28.474,39.326 28.363,39.297 H 28.336 L 27.665,39.128 27.526,39.1 26.94,38.99 26.714,38.961 26.212,38.934 h -0.31 -0.444 l -0.339,0.027 c -1.45,0.139 -2.876,0.671 -4.11,1.564 l -0.223,0.141 -0.279,0.25 -0.335,0.308 -0.054,0.029 -0.171,0.194 -0.334,0.364 -0.224,0.279 -0.25,0.336 -0.225,0.362 -0.192,0.308 -0.197,0.421 -0.142,0.279 -0.193,0.477 -0.084,0.222 -12.441,38.414 c -0.814,2.458 -0.313,5.029 1.115,6.988 v 0.026 l 0.418,0.532 0.17,0.165 0.251,0.281 0.084,0.079 0.283,0.281 0.25,0.194 0.474,0.367 0.083,0.053 c 2.015,1.371 4.641,1.874 7.131,1.094 L 55.228,80.776 c 4.303,-1.342 6.679,-5.814 5.308,-10.006 -0.387,-1.259 -1.086,-2.35 -1.979,-3.215 l -0.368,-0.337 -0.278,-0.303 z m -6.318,5.896 0.079,0.114 -37.369,11.57 11.854,-36.538 10.565,10.317 2.876,2.825 11.995,11.712 z\" /></g><path style=\"fill:#000000\" inkscape:connector-curvature=\"0\" id=\"path9\" d=\"m 27.813273,113.65778 0.09753,-0.0201 c 2.39093,-0.45821 4.599455,-1.96811 5.80244,-4.28639 L 52.785897,72.891487 c 2.088044,-4.002139 0.590949,-8.836902 -3.348692,-10.821875 -1.329078,-0.688721 -2.766603,-0.943695 -4.133174,-0.841768 l -0.454018,-0.02 -16.939621,0.223997 -4.055079,0.07232 -15.711383,0.220024 -0.281322,0.04035 -0.432752,-2.61e-4 -0.415615,0.06192 -0.376025,0.05898 -0.47344,0.121469 -0.27556,0.07993 -0.550309,0.198748 -0.199188,0.08114 -0.594655,0.274528 -0.114446,0.0399 -0.02045,0.02056 -0.59303,0.35372 -0.123523,0.08306 -0.486301,0.337172 -0.179243,0.136242 -0.375276,0.340412 -0.219324,0.220495 -0.293372,0.294939 -0.238972,0.277116 C 0.97781,65.869953 0.347935,67.257564 0.11153,68.764336 L 0.05352,69.019757 0.05172,69.414329 0.01894,69.849995 0,69.908735 l 0.01836,0.255217 0.0183,0.499171 0.03984,0.356984 0.06262,0.413492 0.09656,0.411988 0.0872,0.351908 0.158141,0.436572 0.09837,0.298139 0.194299,0.472538 0.102407,0.218932 18.462772,35.908054 c 1.172169,2.30842 3.34759,3.76847 5.740829,4.17717 l 0.01975,-0.0199 0.69605,0.0957 0.218437,-0.0225 0.490791,0.0213 0.39809,-0.005 0.315972,-0.0397 0.594462,-0.0815 z\" /></svg>',\n\tdownload: '<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" version=\"1.1\" baseProfile=\"tiny\" x=\"0px\" y=\"0px\" width=\"100%\" height=\"100%\" viewBox=\"0 0 100 100\" xml:space=\"preserve\"><g id=\"Captions\"></g><g id=\"Your_Icon\">\t<path fill-rule=\"evenodd\" fill=\"#000000\" d=\"M88,84v-2c0-2.961-0.859-4-4-4H16c-2.961,0-4,0.98-4,4v2c0,3.102,1.039,4,4,4h68 C87.02,88,88,87.039,88,84z M58,12H42c-5,0-6,0.941-6,6v22H16l34,34l34-34H64V18C64,12.941,62.939,12,58,12z\"/></g></svg>',\n\tmove: '<svg xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:svg=\"http://www.w3.org/2000/svg\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:sodipodi=\"http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd\" xmlns:inkscape=\"http://www.inkscape.org/namespaces/inkscape\" version=\"1.1\" id=\"Layer_1\" x=\"0px\" y=\"0px\" width=\"100%\" height=\"100%\" viewBox=\"5 -10 74.074074 100\" enable-background=\"new 0 0 100 100\" xml:space=\"preserve\" inkscape:version=\"0.48.4 r9939\" sodipodi:docname=\"noun_11656_cc.svg\"><metadata ><rdf:RDF><cc:Work rdf:about=\"\"><dc:format>image/svg+xml</dc:format><dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\" /></cc:Work></rdf:RDF></metadata><defs /><sodipodi:namedview pagecolor=\"#ffffff\" bordercolor=\"#666666\" borderopacity=\"1\" objecttolerance=\"10\" gridtolerance=\"10\" guidetolerance=\"10\" inkscape:pageopacity=\"0\" inkscape:pageshadow=\"2\" inkscape:window-width=\"753\" inkscape:window-height=\"480\" showgrid=\"false\" fit-margin-top=\"0\" fit-margin-left=\"0\" fit-margin-right=\"0\" fit-margin-bottom=\"0\" inkscape:zoom=\"2.36\" inkscape:cx=\"44.101509\" inkscape:cy=\"31.481481\" inkscape:window-x=\"287\" inkscape:window-y=\"249\" inkscape:window-maximized=\"0\" inkscape:current-layer=\"Layer_1\" /><polygon points=\"33,83 50,100 67,83 54,83 54,17 67,17 50,0 33,17 46,17 46,83 \" transform=\"translate(-7.962963,-10)\" /><polygon points=\"83,67 100,50 83,33 83,46 17,46 17,33 0,50 17,67 17,54 83,54 \" transform=\"translate(-7.962963,-10)\" /></svg>',\n\tfullscreen: '<svg xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:svg=\"http://www.w3.org/2000/svg\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:sodipodi=\"http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd\" xmlns:inkscape=\"http://www.inkscape.org/namespaces/inkscape\" version=\"1.1\" x=\"0px\" y=\"0px\" width=\"100%\" height=\"100%\" viewBox=\"5 -10 74.074074 100\" enable-background=\"new 0 0 100 100\" xml:space=\"preserve\" inkscape:version=\"0.48.4 r9939\" sodipodi:docname=\"noun_2186_cc.svg\"><metadata ><rdf:RDF><cc:Work rdf:about=\"\"><dc:format>image/svg+xml</dc:format><dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\" /></cc:Work></rdf:RDF></metadata><defs /><sodipodi:namedview pagecolor=\"#ffffff\" bordercolor=\"#666666\" borderopacity=\"1\" objecttolerance=\"10\" gridtolerance=\"10\" guidetolerance=\"10\" inkscape:pageopacity=\"0\" inkscape:pageshadow=\"2\" inkscape:window-width=\"640\" inkscape:window-height=\"480\" showgrid=\"false\" fit-margin-top=\"0\" fit-margin-left=\"0\" fit-margin-right=\"0\" fit-margin-bottom=\"0\" inkscape:zoom=\"2.36\" inkscape:cx=\"44.101509\" inkscape:cy=\"31.481481\" inkscape:window-x=\"65\" inkscape:window-y=\"24\" inkscape:window-maximized=\"0\" inkscape:current-layer=\"Layer_1\" /><path d=\"m -7.962963,-10 v 38.889 l 16.667,-16.667 16.667,16.667 5.555,-5.555 -16.667,-16.667 16.667,-16.667 h -38.889 z\" inkscape:connector-curvature=\"0\" style=\"fill:#010101\" /><path d=\"m 92.037037,-10 v 38.889 l -16.667,-16.667 -16.666,16.667 -5.556,-5.555 16.666,-16.667 -16.666,-16.667 h 38.889 z\" inkscape:connector-curvature=\"0\" style=\"fill:#010101\" /><path d=\"M -7.962963,90 V 51.111 l 16.667,16.666 16.667,-16.666 5.555,5.556 -16.667,16.666 16.667,16.667 h -38.889 z\" inkscape:connector-curvature=\"0\" style=\"fill:#010101\" /><path d=\"M 92.037037,90 V 51.111 l -16.667,16.666 -16.666,-16.666 -5.556,5.556 16.666,16.666 -16.666,16.667 h 38.889 z\" inkscape:connector-curvature=\"0\" style=\"fill:#010101\" /></svg>',\n\tsmallscreen: '<svg xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:svg=\"http://www.w3.org/2000/svg\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:sodipodi=\"http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd\" xmlns:inkscape=\"http://www.inkscape.org/namespaces/inkscape\" version=\"1.1\" x=\"0px\" y=\"0px\" width=\"100%\" height=\"100%\" viewBox=\"5 -10 74.074074 100\" enable-background=\"new 0 0 100 100\" xml:space=\"preserve\" inkscape:version=\"0.48.4 r9939\" sodipodi:docname=\"noun_2186_cc.svg\"><metadata ><rdf:RDF><cc:Work rdf:about=\"\"><dc:format>image/svg+xml</dc:format><dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\" /></cc:Work></rdf:RDF></metadata><defs /><sodipodi:namedview pagecolor=\"#ffffff\" bordercolor=\"#666666\" borderopacity=\"1\" objecttolerance=\"10\" gridtolerance=\"10\" guidetolerance=\"10\" inkscape:pageopacity=\"0\" inkscape:pageshadow=\"2\" inkscape:window-width=\"1855\" inkscape:window-height=\"1056\" showgrid=\"false\" fit-margin-top=\"0\" fit-margin-left=\"0\" fit-margin-right=\"0\" fit-margin-bottom=\"0\" inkscape:zoom=\"2.36\" inkscape:cx=\"44.101509\" inkscape:cy=\"31.481481\" inkscape:window-x=\"65\" inkscape:window-y=\"24\" inkscape:window-maximized=\"1\" inkscape:current-layer=\"Layer_1\" /><path d=\"m 30.926037,28.889 0,-38.889 -16.667,16.667 -16.667,-16.667 -5.555,5.555 16.667,16.667 -16.667,16.667 38.889,0 z\" inkscape:connector-curvature=\"0\" style=\"fill:#010101\" /><path d=\"m 53.148037,28.889 0,-38.889 16.667,16.667 16.666,-16.667 5.556,5.555 -16.666,16.667 16.666,16.667 -38.889,0 z\" inkscape:connector-curvature=\"0\" style=\"fill:#010101\" /><path d=\"m 30.926037,51.111 0,38.889 -16.667,-16.666 -16.667,16.666 -5.555,-5.556 16.667,-16.666 -16.667,-16.667 38.889,0 z\" inkscape:connector-curvature=\"0\" style=\"fill:#010101\" /><path d=\"m 53.148037,51.111 0,38.889 16.667,-16.666 16.666,16.666 5.556,-5.556 -16.666,-16.666 16.666,-16.667 -38.889,0 z\" inkscape:connector-curvature=\"0\" style=\"fill:#010101\" /></svg>',\n};\n},{}],28:[function(require,module,exports){\nrequire('./tableToCsv.js');\n},{\"./tableToCsv.js\":29}],29:[function(require,module,exports){\n'use strict';\nvar $ = (function(){try{return require('jquery')}catch(e){return window.jQuery}})();\n\n\n$.fn.tableToCsv = function(config) {\n\tvar csvString = \"\";\n\tconfig = $.extend({\n\t\tquote: \"\\\"\",\n\t\tdelimiter: \",\",\n\t\tlineBreak: \"\\n\",\n\t}, config)\n\n\n\n\n\tvar needToQuoteString = function(value) {\n\t\t//quote when it contains whitespace or the delimiter\n\t\tvar needQuoting = false;\n\t\tif (value.match(\"[\\\\w|\" + config.delimiter + \"|\" + config.quote + \"]\")) {\n\t\t\tneedQuoting = true;\n\t\t}\n\t\treturn needQuoting;\n\t};\n\tvar addValueToString = function(value) {\n\t\t//Quotes in the string need to be escaped\n\t\tvalue.replace(config.quote, config.quote + config.quote);\n\t\tif (needToQuoteString(value)) {\n\t\t\tvalue = config.quote + value + config.quote;\n\t\t}\n\t\tcsvString += \" \" + value + \" \" + config.delimiter;\n\t};\n\n\tvar addRowToString = function(rowArray) {\n\t\trowArray.forEach(function(val) {\n\t\t\taddValueToString(val);\n\t\t});\n\t\tcsvString += config.lineBreak;\n\t}\n\n\tvar tableArrays = [];\n\tvar $el = $(this);\n\tvar rowspans = {};\n\n\n\n\tvar totalColCount = 0;\n\t$el.find('tr:first *').each(function() {\n\t\tif ($(this).attr('colspan')) {\n\t\t\ttotalColCount += +$(this).attr('colspan');\n\t\t} else {\n\t\t\ttotalColCount++;\n\t\t}\n\t});\n\n\t$el.find('tr').each(function(rowId, tr) {\n\t\tvar $tr = $(tr);\n\t\tvar rowArray = []\n\n\t\tvar htmlColId = 0;\n\t\tvar actualColId = 0;\n\t\twhile (actualColId < totalColCount) {\n\t\t\tif (rowspans[actualColId]) {\n\t\t\t\trowArray.push(rowspans[actualColId].text);\n\t\t\t\trowspans[actualColId].rowSpan--;\n\t\t\t\tif (!rowspans[actualColId].rowSpan) rowspans[actualColId] = null;\n\t\t\t\tactualColId++;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tvar $cell = $tr.find(':nth-child(' + (htmlColId + 1) + ')');\n\t\t\tif (!$cell) break;\n\t\t\tvar colspan = $cell.attr('colspan') || 1;\n\t\t\tvar rowspan = $cell.attr('rowspan') || 1;\n\n\t\t\tfor (var i = 0; i < colspan; i++) {\n\t\t\t\trowArray.push($cell.text());\n\t\t\t\tif (rowspan > 1) {\n\t\t\t\t\trowspans[actualColId] = {\n\t\t\t\t\t\trowSpan: rowspan - 1,\n\t\t\t\t\t\ttext: $cell.text(),\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tactualColId++;\n\t\t\t}\n\t\t\thtmlColId++;\n\t\t}\n\t\taddRowToString(rowArray);\n\n\n\t})\n\n\treturn csvString;\n}\n\n},{\"jquery\":undefined}],30:[function(require,module,exports){\n'use strict';\nvar $ = (function(){try{return require('jquery')}catch(e){return window.jQuery}})(),\n\tEventEmitter = require('events').EventEmitter,\n\tutils = require(\"yasgui-utils\");\nconsole = console || {\n\t\"log\": function() {}\n}; //make sure any console statements don't break in IE\n\nrequire('./jquery/extendJquery.js');\n\n\n/**\n * Main YASR constructor\n *\n * @constructor\n * @param {DOM-Element} parent element to append editor to.\n * @param {object} settings\n * @class YASR\n * @return {doc} YASR document\n */\nvar YASR = function(parent, options, queryResults) {\n\tEventEmitter.call(this);\n\tvar yasr = this;\n\t// console.log(EventEmitter.call(this));\n\n\t// var yasr = {};\n\t// EventEmitter.call(yasr);\n\tyasr.options = $.extend(true, {}, module.exports.defaults, options);\n\t//the recursive copy does merge (overwrite) array values how we want it to. Do this manually\n\tif (options && options.outputPlugins) yasr.options.outputPlugins = options.outputPlugins;\n\n\tyasr.container = $(\"<div class='yasr'></div>\").appendTo(parent);\n\tyasr.header = $(\"<div class='yasr_header'></div>\").appendTo(yasr.container);\n\tyasr.resultsContainer = $(\"<div class='yasr_results'></div>\").appendTo(yasr.container);\n\tyasr.storage = utils.storage;\n\n\tvar prefix = null;\n\tyasr.getPersistencyId = function(postfix) {\n\t\tif (prefix === null) {\n\t\t\t//instantiate prefix\n\t\t\tif (yasr.options.persistency && yasr.options.persistency.prefix) {\n\t\t\t\tprefix = (typeof yasr.options.persistency.prefix == 'string' ? yasr.options.persistency.prefix : yasr.options.persistency.prefix(yasr));\n\t\t\t} else {\n\t\t\t\tprefix = false;\n\t\t\t}\n\t\t}\n\t\tif (prefix && postfix != null) {\n\t\t\treturn prefix + (typeof postfix == 'string' ? postfix : postfix(yasr));\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t};\n\n\tif (yasr.options.useGoogleCharts) {\n\t\t//pre-load google-loader\n\t\trequire('./gChartLoader.js')\n\t\t\t.once('initError', function() {\n\t\t\t\tyasr.options.useGoogleCharts = false\n\t\t\t})\n\t\t\t.init();\n\t}\n\n\t//first initialize plugins\n\tyasr.plugins = {};\n\tfor (var pluginName in module.exports.plugins) {\n\t\tif (!yasr.options.useGoogleCharts && pluginName == \"gchart\") continue;\n\t\tyasr.plugins[pluginName] = new module.exports.plugins[pluginName](yasr);\n\t}\n\n\n\tyasr.updateHeader = function() {\n\t\tvar downloadIcon = yasr.header.find(\".yasr_downloadIcon\")\n\t\t\t.removeAttr(\"title\"); //and remove previous titles\n\t\tvar embedButton = yasr.header.find(\".yasr_embedBtn\");\n\t\tvar outputPlugin = yasr.plugins[yasr.options.output];\n\t\tif (outputPlugin) {\n\n\t\t\t//Manage download link\n\t\t\tvar info = (outputPlugin.getDownloadInfo ? outputPlugin.getDownloadInfo() : null);\n\t\t\tif (info) {\n\t\t\t\tif (info.buttonTitle) downloadIcon.attr('title', info.buttonTitle);\n\t\t\t\tdownloadIcon.prop(\"disabled\", false);\n\t\t\t\tdownloadIcon.find(\"path\").each(function() {\n\t\t\t\t\tthis.style.fill = \"black\";\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tdownloadIcon.prop(\"disabled\", true).prop(\"title\", \"Download not supported for this result representation\");\n\t\t\t\tdownloadIcon.find(\"path\").each(function() {\n\t\t\t\t\tthis.style.fill = \"gray\";\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t//Manage embed button\n\t\t\tvar link = null;\n\t\t\tif (outputPlugin.getEmbedHtml) link = outputPlugin.getEmbedHtml();\n\t\t\tif (link && link.length > 0) {\n\t\t\t\tembedButton.show();\n\t\t\t} else {\n\t\t\t\tembedButton.hide();\n\t\t\t}\n\t\t}\n\t};\n\tyasr.draw = function(output) {\n\t\tif (!yasr.results) return false;\n\t\tif (!output) output = yasr.options.output;\n\n\n\t\t//ah, our default output does not take our current results. Try to autodetect\n\t\tvar selectedOutput = null;\n\t\tvar selectedOutputPriority = -1;\n\t\tvar unsupportedOutputs = [];\n\t\tfor (var tryOutput in yasr.plugins) {\n\t\t\tif (yasr.plugins[tryOutput].canHandleResults(yasr)) {\n\t\t\t\tvar priority = yasr.plugins[tryOutput].getPriority;\n\t\t\t\tif (typeof priority == \"function\") priority = priority(yasr);\n\t\t\t\tif (priority != null && priority != undefined && priority > selectedOutputPriority) {\n\t\t\t\t\tselectedOutputPriority = priority;\n\t\t\t\t\tselectedOutput = tryOutput;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tunsupportedOutputs.push(tryOutput);\n\t\t\t}\n\t\t}\n\t\tdisableOutputs(unsupportedOutputs);\n\t\tvar outputToDraw = null;\n\t\tif (output in yasr.plugins && yasr.plugins[output].canHandleResults(yasr)) {\n\t\t\toutputToDraw = output;\n\t\t} else if (selectedOutput) {\n\t\t\toutputToDraw = selectedOutput;\n\t\t}\n\n\t\tif (outputToDraw) {\n\t\t\t$(yasr.resultsContainer).empty();\n\t\t\tyasr.emit('draw', yasr, yasr.plugins[outputToDraw]);\n\t\t\tyasr.plugins[outputToDraw].draw();\n\t\t\tyasr.emit('drawn', yasr, yasr.plugins[outputToDraw]);\n\t\t\tyasr.updateHeader();\n\t\t\treturn true;\n\t\t} else {\n\t\t\tyasr.updateHeader();\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tvar disableOutputs = function(outputs) {\n\t\t//first enable everything.\n\t\tyasr.header.find('.yasr_btnGroup .yasr_btn').removeClass('disabled');\n\n\n\t\t//now disable the outputs passed as param\n\t\toutputs.forEach(function(outputName) {\n\t\t\tyasr.header.find('.yasr_btnGroup .select_' + outputName).addClass('disabled');\n\t\t});\n\n\t};\n\tyasr.somethingDrawn = function() {\n\t\treturn !yasr.resultsContainer.is(\":empty\");\n\t};\n\n\tyasr.setResponse = function(dataOrJqXhr, textStatus, jqXhrOrErrorString) {\n\t\ttry {\n\t\t\tyasr.results = require(\"./parsers/wrapper.js\")(dataOrJqXhr, textStatus, jqXhrOrErrorString);\n\t\t} catch (exception) {\n\t\t\tyasr.results = {\n\t\t\t\tgetException: function() {\n\t\t\t\t\treturn exception\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\tyasr.draw();\n\n\t\t//store if needed\n\t\tvar resultsId = yasr.getPersistencyId(yasr.options.persistency.results.key);\n\t\tif (resultsId) {\n\t\t\tif (yasr.results.getOriginalResponseAsString && yasr.results.getOriginalResponseAsString().length < yasr.options.persistency.results.maxSize) {\n\t\t\t\tutils.storage.set(resultsId, yasr.results.getAsStoreObject(), \"month\");\n\t\t\t} else {\n\t\t\t\t//remove old string\n\t\t\t\tutils.storage.remove(resultsId);\n\t\t\t}\n\t\t}\n\t};\n\tvar $toggableWarning = null;\n\tvar $toggableWarningClose = null;\n\tvar $toggableWarningMsg = null;\n\tyasr.warn = function(warning) {\n\t\tif (!$toggableWarning) {\n\t\t\t//first time instantiation\n\t\t\t$toggableWarning = $('<div>', {\n\t\t\t\tclass: 'toggableWarning'\n\t\t\t}).prependTo(yasr.container).hide();\n\t\t\t$toggableWarningClose = $('<span>', {\n\t\t\t\t\tclass: 'toggleWarning'\n\t\t\t\t})\n\t\t\t\t.html('×')\n\t\t\t\t.click(function() {\n\t\t\t\t\t$toggableWarning.hide(400);\n\t\t\t\t})\n\t\t\t\t.appendTo($toggableWarning);\n\t\t\t$toggableWarningMsg = $('<span>', {\n\t\t\t\tclass: 'toggableMsg'\n\t\t\t}).appendTo($toggableWarning);\n\t\t}\n\t\t$toggableWarningMsg.empty();\n\t\tif (warning instanceof $) {\n\t\t\t$toggableWarningMsg.append(warning);\n\t\t} else {\n\t\t\t$toggableWarningMsg.html(warning);\n\t\t}\n\t\t$toggableWarning.show(400);\n\t};\n\n\tvar blobDownloadSupported = null;\n\tvar checkBlobDownloadSupported = function() {\n\t\tif (blobDownloadSupported === null) {\n\t\t\tvar windowUrl = window.URL || window.webkitURL || window.mozURL || window.msURL;\n\t\t\tblobDownloadSupported = windowUrl && Blob;\n\t\t}\n\t\treturn blobDownloadSupported;\n\t};\n\tvar embedBtn = null;\n\tvar drawHeader = function(yasr) {\n\t\tvar drawOutputSelector = function() {\n\t\t\tvar btnGroup = $('<div class=\"yasr_btnGroup\"></div>');\n\t\t\t$.each(yasr.options.outputPlugins, function(i, pluginName) {\n\t\t\t\tvar plugin = yasr.plugins[pluginName];\n\t\t\t\tif (!plugin) return; //plugin not loaded\n\n\t\t\t\tif (plugin.hideFromSelection) return;\n\t\t\t\tvar name = plugin.name || pluginName;\n\t\t\t\tvar button = $(\"<button class='yasr_btn'></button>\")\n\t\t\t\t\t.text(name)\n\t\t\t\t\t.addClass(\"select_\" + pluginName)\n\t\t\t\t\t.click(function() {\n\t\t\t\t\t\t//update buttons\n\t\t\t\t\t\tbtnGroup.find(\"button.selected\").removeClass(\"selected\");\n\t\t\t\t\t\t$(this).addClass(\"selected\");\n\t\t\t\t\t\t//set and draw output\n\t\t\t\t\t\tyasr.options.output = pluginName;\n\n\t\t\t\t\t\t//store if needed\n\t\t\t\t\t\tyasr.store();\n\n\t\t\t\t\t\t//close warning if there is any\n\t\t\t\t\t\tif ($toggableWarning) $toggableWarning.hide(400);\n\n\t\t\t\t\t\tyasr.draw();\n\t\t\t\t\t})\n\t\t\t\t\t.appendTo(btnGroup);\n\t\t\t\tif (yasr.options.output == pluginName) button.addClass(\"selected\");\n\t\t\t});\n\n\t\t\tif (btnGroup.children().length > 1) yasr.header.append(btnGroup);\n\t\t};\n\t\tvar drawDownloadIcon = function() {\n\t\t\tvar stringToUrl = function(string, contentType) {\n\t\t\t\tvar url = null;\n\t\t\t\tvar windowUrl = window.URL || window.webkitURL || window.mozURL || window.msURL;\n\t\t\t\tif (windowUrl && Blob) {\n\t\t\t\t\tvar blob = new Blob([string], {\n\t\t\t\t\t\ttype: contentType\n\t\t\t\t\t});\n\t\t\t\t\turl = windowUrl.createObjectURL(blob);\n\t\t\t\t}\n\t\t\t\treturn url;\n\t\t\t};\n\t\t\tvar button = $(\"<button class='yasr_btn yasr_downloadIcon btn_icon'></button>\")\n\t\t\t\t.append(require(\"yasgui-utils\").svg.getElement(require('./imgs.js').download))\n\t\t\t\t.click(function() {\n\t\t\t\t\tvar currentPlugin = yasr.plugins[yasr.options.output];\n\t\t\t\t\tif (currentPlugin && currentPlugin.getDownloadInfo) {\n\t\t\t\t\t\tvar downloadInfo = currentPlugin.getDownloadInfo();\n\t\t\t\t\t\tvar downloadUrl = stringToUrl(downloadInfo.getContent(), (downloadInfo.contentType ? downloadInfo.contentType : \"text/plain\"));\n\t\t\t\t\t\tvar downloadMockLink = $(\"<a></a>\", {\n\t\t\t\t\t\t\thref: downloadUrl,\n\t\t\t\t\t\t\tdownload: downloadInfo.filename\n\t\t\t\t\t\t});\n\t\t\t\t\t\trequire('./utils.js').fireClick(downloadMockLink);\n\t\t\t\t\t\t//\t\t\t\t\t\tdownloadMockLink[0].click();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\tyasr.header.append(button);\n\t\t};\n\t\tvar drawFullscreenButton = function() {\n\t\t\tvar button = $(\"<button class='yasr_btn btn_fullscreen btn_icon'></button>\")\n\t\t\t\t.append(require(\"yasgui-utils\").svg.getElement(require('./imgs.js').fullscreen))\n\t\t\t\t.click(function() {\n\t\t\t\t\tyasr.container.addClass('yasr_fullscreen');\n\t\t\t\t});\n\t\t\tyasr.header.append(button);\n\t\t};\n\t\tvar drawSmallscreenButton = function() {\n\t\t\tvar button = $(\"<button class='yasr_btn btn_smallscreen btn_icon'></button>\")\n\t\t\t\t.append(require(\"yasgui-utils\").svg.getElement(require('./imgs.js').smallscreen))\n\t\t\t\t.click(function() {\n\t\t\t\t\tyasr.container.removeClass('yasr_fullscreen');\n\t\t\t\t});\n\t\t\tyasr.header.append(button);\n\t\t};\n\t\tvar drawEmbedButton = function() {\n\t\t\tembedBtn = $(\"<button>\", {\n\t\t\t\t\tclass: 'yasr_btn yasr_embedBtn',\n\t\t\t\t\ttitle: 'Get HTML snippet to embed results on a web page'\n\t\t\t\t})\n\t\t\t\t.text('</>')\n\t\t\t\t.click(function(event) {\n\t\t\t\t\tvar currentPlugin = yasr.plugins[yasr.options.output];\n\t\t\t\t\tif (currentPlugin && currentPlugin.getEmbedHtml) {\n\t\t\t\t\t\tvar embedLink = currentPlugin.getEmbedHtml();\n\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\tvar popup = $(\"<div class='yasr_embedPopup'></div>\").appendTo(yasr.header);\n\t\t\t\t\t\t$('html').click(function() {\n\t\t\t\t\t\t\tif (popup) popup.remove();\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tpopup.click(function(event) {\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t\t//dont close when clicking on popup\n\t\t\t\t\t\t});\n\t\t\t\t\t\tvar prePopup = $(\"<textarea>\").val(embedLink);\n\t\t\t\t\t\tprePopup.focus(function() {\n\t\t\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\t\t\t$this.select();\n\n\t\t\t\t\t\t\t// Work around Chrome's little problem\n\t\t\t\t\t\t\t$this.mouseup(function() {\n\t\t\t\t\t\t\t\t// Prevent further mouseup intervention\n\t\t\t\t\t\t\t\t$this.unbind(\"mouseup\");\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tpopup.empty().append(prePopup);\n\t\t\t\t\t\tvar positions = embedBtn.position();\n\t\t\t\t\t\tvar top = (positions.top + embedBtn.outerHeight()) + 'px';\n\t\t\t\t\t\tvar left = Math.max(((positions.left + embedBtn.outerWidth()) - popup.outerWidth()), 0) + 'px';\n\n\t\t\t\t\t\tpopup.css(\"top\", top).css(\"left\", left);\n\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\tyasr.header.append(embedBtn);\n\t\t};\n\t\tdrawFullscreenButton();\n\t\tdrawSmallscreenButton();\n\t\tif (yasr.options.drawOutputSelector) drawOutputSelector();\n\t\tif (yasr.options.drawDownloadIcon && checkBlobDownloadSupported()) drawDownloadIcon(); //only draw when it's supported\n\t\tdrawEmbedButton();\n\t};\n\n\tvar persistentId = null;\n\t//store persistent options (not results though. store these separately, as they are too large)\n\tyasr.store = function() {\n\t\tif (!persistentId) persistentId = yasr.getPersistencyId('main');\n\t\tif (persistentId) {\n\t\t\tutils.storage.set(persistentId, yasr.getPersistentSettings());\n\t\t}\n\t};\n\n\n\tyasr.load = function() {\n\t\tif (!persistentId) persistentId = yasr.getPersistencyId('main');\n\t\tyasr.setPersistentSettings(utils.storage.get(persistentId));\n\t};\n\n\n\tyasr.setPersistentSettings = function(settings) {\n\t\tif (settings) {\n\t\t\tif (settings.output) {\n\t\t\t\tyasr.options.output = settings.output;\n\t\t\t}\n\t\t\tfor (var pluginName in settings.plugins) {\n\t\t\t\tif (yasr.plugins[pluginName] && yasr.plugins[pluginName].setPersistentSettings) {\n\t\t\t\t\tyasr.plugins[pluginName].setPersistentSettings(settings.plugins[pluginName]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tyasr.getPersistentSettings = function() {\n\t\tvar settings = {\n\t\t\toutput: yasr.options.output,\n\t\t\tplugins: {}\n\t\t};\n\t\tfor (var pluginName in yasr.plugins) {\n\t\t\tif (yasr.plugins[pluginName].getPersistentSettings) {\n\t\t\t\tsettings.plugins[pluginName] = yasr.plugins[pluginName].getPersistentSettings();\n\t\t\t}\n\t\t}\n\t\treturn settings;\n\t}\n\n\n\t/**\n\t * postprocess\n\t */\n\tyasr.load();\n\tdrawHeader(yasr);\n\tif (!queryResults && yasr.options.persistency && yasr.options.persistency.results) {\n\t\tvar resultsId = yasr.getPersistencyId(yasr.options.persistency.results.key)\n\t\tvar fromStorage;\n\t\tif (resultsId) {\n\t\t\tfromStorage = utils.storage.get(resultsId);\n\t\t}\n\n\n\t\tif (!fromStorage && yasr.options.persistency.results.id) {\n\t\t\t//deprecated! But keep for backwards compatability\n\t\t\t//if results are stored under old ID. Fetch the results, and delete that key (results can be large, and clutter space)\n\t\t\t//setting the results, will automatically store it under the new key, so we don't have to worry about that here\n\t\t\tvar deprId = (typeof yasr.options.persistency.results.id == \"string\" ? yasr.options.persistency.results.id : yasr.options.persistency.results.id(yasr));\n\t\t\tif (deprId) {\n\t\t\t\tfromStorage = utils.storage.get(deprId);\n\t\t\t\tif (fromStorage) utils.storage.remove(deprId);\n\t\t\t}\n\t\t}\n\t\tif (fromStorage) {\n\t\t\tif ($.isArray(fromStorage)) {\n\t\t\t\tyasr.setResponse.apply(this, fromStorage);\n\t\t\t} else {\n\t\t\t\tyasr.setResponse(fromStorage);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (queryResults) {\n\t\tyasr.setResponse(queryResults);\n\t}\n\tyasr.updateHeader();\n\n\n\treturn yasr;\n};\n\nYASR.prototype = new EventEmitter;\nmodule.exports = function(parent, options, queryResults) {\n\treturn new YASR(parent, options, queryResults);\n}\n\n\nmodule.exports.plugins = {};\nmodule.exports.registerOutput = function(name, constructor) {\n\tmodule.exports.plugins[name] = constructor;\n};\n\n\n\n\n/**\n * The default options of YASR. Either change the default options by setting YASR.defaults, or by\n * passing your own options as second argument to the YASR constructor\n *\n * @attribute YASR.defaults\n */\nmodule.exports.defaults = require('./defaults.js');\nmodule.exports.version = {\n\t\"YASR\": require(\"../package.json\").version,\n\t\"jquery\": $.fn.jquery,\n\t\"yasgui-utils\": require(\"yasgui-utils\").version\n};\nmodule.exports.$ = $;\n\n\n\n//put these in a try-catch. When using the unbundled version, and when some dependencies are missing, then YASR as a whole will still function\ntry {\n\tmodule.exports.registerOutput('boolean', require(\"./boolean.js\"))\n} catch (e) {};\ntry {\n\tmodule.exports.registerOutput('rawResponse', require(\"./rawResponse.js\"))\n} catch (e) {};\ntry {\n\tmodule.exports.registerOutput('table', require(\"./table.js\"))\n} catch (e) {};\ntry {\n\tmodule.exports.registerOutput('error', require(\"./error.js\"))\n} catch (e) {};\ntry {\n\tmodule.exports.registerOutput('pivot', require(\"./pivot.js\"))\n} catch (e) {};\ntry {\n\tmodule.exports.registerOutput('gchart', require(\"./gchart.js\"))\n} catch (e) {};\n\n},{\"../package.json\":19,\"./boolean.js\":21,\"./defaults.js\":22,\"./error.js\":23,\"./gChartLoader.js\":25,\"./gchart.js\":26,\"./imgs.js\":27,\"./jquery/extendJquery.js\":28,\"./parsers/wrapper.js\":35,\"./pivot.js\":37,\"./rawResponse.js\":38,\"./table.js\":39,\"./utils.js\":40,\"events\":4,\"jquery\":undefined,\"yasgui-utils\":16}],31:[function(require,module,exports){\n'use strict';\nvar $ = (function(){try{return require('jquery')}catch(e){return window.jQuery}})();\nvar root = module.exports = function(queryResponse) {\n\treturn require(\"./dlv.js\")(queryResponse, \",\");\n};\n},{\"./dlv.js\":32,\"jquery\":undefined}],32:[function(require,module,exports){\n'use strict';\nvar $ = (function(){try{return require('jquery')}catch(e){return window.jQuery}})();\nrequire(\"../../lib/jquery.csv-0.71.js\");\nvar root = module.exports = function(queryResponse, separator) {\n\tvar json = {};\n\tvar arrays = $.csv.toArrays(queryResponse, {\n\t\tseparator: separator\n\t});\n\tvar detectType = function(value) {\n\t\tif (value.indexOf(\"http\") == 0) {\n\t\t\treturn \"uri\";\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t};\n\n\tvar getBoolean = function() {\n\t\tif (arrays.length == 2 && arrays[0].length == 1 && arrays[1].length == 1 && arrays[0][0] == \"boolean\" && (arrays[1][0] == \"1\" || arrays[1][0] == \"0\")) {\n\t\t\tjson.boolean = (arrays[1][0] == \"1\" ? true : false);\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t};\n\n\tvar getVariables = function() {\n\t\tif (arrays.length > 0 && arrays[0].length > 0) {\n\t\t\tjson.head = {\n\t\t\t\tvars: arrays[0]\n\t\t\t};\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t};\n\n\tvar getBindings = function() {\n\t\tif (arrays.length > 1) {\n\t\t\tjson.results = {\n\t\t\t\tbindings: []\n\t\t\t};\n\t\t\tfor (var rowIt = 1; rowIt < arrays.length; rowIt++) {\n\t\t\t\tvar binding = {};\n\t\t\t\tfor (var colIt = 0; colIt < arrays[rowIt].length; colIt++) {\n\t\t\t\t\tvar varName = json.head.vars[colIt];\n\t\t\t\t\tif (varName) {\n\t\t\t\t\t\tvar value = arrays[rowIt][colIt];\n\t\t\t\t\t\tvar detectedType = detectType(value);\n\t\t\t\t\t\tbinding[varName] = {\n\t\t\t\t\t\t\tvalue: value\n\t\t\t\t\t\t};\n\t\t\t\t\t\tif (detectedType) binding[varName].type = detectedType;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tjson.results.bindings.push(binding);\n\t\t\t}\n\t\t\tjson.head = {\n\t\t\t\tvars: arrays[0]\n\t\t\t};\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t};\n\tvar isBoolean = getBoolean();\n\tif (!isBoolean) {\n\t\tvar varsFetched = getVariables();\n\t\tif (varsFetched) getBindings();\n\t}\n\n\treturn json;\n};\n},{\"../../lib/jquery.csv-0.71.js\":3,\"jquery\":undefined}],33:[function(require,module,exports){\n'use strict';\nvar $ = (function(){try{return require('jquery')}catch(e){return window.jQuery}})();\nvar root = module.exports = function(queryResponse) {\n\n\tif (typeof queryResponse == \"string\") {\n\t\ttry {\n\t\t\treturn JSON.parse(queryResponse);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t}\n\tif (typeof queryResponse == \"object\" && queryResponse.constructor === {}.constructor) {\n\t\treturn queryResponse;\n\t}\n\treturn false;\n\n};\n},{\"jquery\":undefined}],34:[function(require,module,exports){\n'use strict';\nvar $ = (function(){try{return require('jquery')}catch(e){return window.jQuery}})();\nvar root = module.exports = function(queryResponse) {\n\treturn require(\"./dlv.js\")(queryResponse, \"\\t\");\n};\n},{\"./dlv.js\":32,\"jquery\":undefined}],35:[function(require,module,exports){\n'use strict';\nvar $ = (function(){try{return require('jquery')}catch(e){return window.jQuery}})();\n\n/**\n * arg1 can be:\n * - a string (an exception, or e.g. a csv result string)\n * - an object (e.g. xml or json object)\n * - an object with exception key (contains solely a string to display)\n * - a jqXHR object (when this function is used as 'fail' callback for jquery)\n * arg2 can be:\n * - the textstatus of the response\n * arg3 can be:\n * - a jqXHR object (when this function is used as 'done/success' callback for jquery)\n * - an 'errorThrown' string (\n */\nvar root = module.exports = function(dataOrJqXhr, textStatus, jqXhrOrErrorString) {\n\tvar parsers = {\n\t\txml: require(\"./xml.js\"),\n\t\tjson: require(\"./json.js\"),\n\t\ttsv: require(\"./tsv.js\"),\n\t\tcsv: require(\"./csv.js\")\n\t};\n\tvar contentType = null;\n\tvar origResponse = null;\n\tvar json = null;\n\tvar type = null; //json, xml, csv, or tsv\n\tvar exception = null;\n\n\tvar init = function() {\n\t\tif (typeof dataOrJqXhr == \"object\") {\n\t\t\t/**\n\t\t\t * Extract exception info (if there is any)\n\t\t\t */\n\t\t\tif (dataOrJqXhr.exception) {\n\t\t\t\t//this object just has this exception string, nothing more. (here for backwards compatability)\n\t\t\t\texception = dataOrJqXhr.exception;\n\t\t\t} else if (dataOrJqXhr.status != undefined && (dataOrJqXhr.status >= 300 || dataOrJqXhr.status === 0)) {\n\t\t\t\t//this is an exception, and jquery response\n\t\t\t\texception = {\n\t\t\t\t\tstatus: dataOrJqXhr.status\n\t\t\t\t};\n\t\t\t\tif (typeof jqXhrOrErrorString == \"string\") exception.errorString = jqXhrOrErrorString;\n\t\t\t\tif (dataOrJqXhr.responseText) exception.responseText = dataOrJqXhr.responseText;\n\t\t\t\tif (dataOrJqXhr.statusText) exception.statusText = dataOrJqXhr.statusText;\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Extract content type info (if there is any)\n\t\t\t */\n\t\t\tif (dataOrJqXhr.contentType) {\n\t\t\t\t//this is not a jqXhr object, but a manually generated object (mostly for backwards compatability)\n\t\t\t\tcontentType = dataOrJqXhr.contentType.toLowerCase();\n\t\t\t} else if (dataOrJqXhr.getResponseHeader && dataOrJqXhr.getResponseHeader(\"content-type\")) {\n\t\t\t\tvar ct = dataOrJqXhr.getResponseHeader(\"content-type\").trim().toLowerCase();\n\t\t\t\tif (ct.length > 0) contentType = ct;\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * extract original response\n\t\t\t */\n\t\t\tif (dataOrJqXhr.response) {\n\t\t\t\t//this is not a jqXhr object, but a manually generated object (mostly for backwards compatability)\n\t\t\t\torigResponse = dataOrJqXhr.response;\n\t\t\t} else if (!textStatus && !jqXhrOrErrorString) {\n\t\t\t\t//not called from jquery, as these other arguments are undefined.\n\t\t\t\t//so, we can only assume the current object is a proper response (e.g. xml or json) object\n\t\t\t\torigResponse = dataOrJqXhr;\n\t\t\t}\n\t\t}\n\t\tif (!exception && !origResponse) {\n\t\t\t//if this is called via a jquery complete callback, we should fetch the result for the jqXHR object\n\t\t\tif (dataOrJqXhr.responseText) {\n\t\t\t\torigResponse = dataOrJqXhr.responseText;\n\t\t\t} else {\n\t\t\t\t//if all else fails, assume first arg to be data object\n\t\t\t\t//(which should be the case for most situations)\n\t\t\t\torigResponse = dataOrJqXhr;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar getAsJson = function() {\n\t\tif (json) return json;\n\t\tif (json === false || exception) return false; //already tried parsing this, and failed. do not try again... \n\t\tvar getParserFromContentType = function() {\n\t\t\tif (contentType) {\n\t\t\t\tif (contentType.indexOf(\"json\") > -1) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tjson = parsers.json(origResponse);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\texception = e;\n\t\t\t\t\t}\n\t\t\t\t\ttype = \"json\";\n\t\t\t\t} else if (contentType.indexOf(\"xml\") > -1) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tjson = parsers.xml(origResponse);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\texception = e;\n\t\t\t\t\t}\n\t\t\t\t\ttype = \"xml\";\n\t\t\t\t} else if (contentType.indexOf(\"csv\") > -1) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tjson = parsers.csv(origResponse);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\texception = e;\n\t\t\t\t\t}\n\t\t\t\t\ttype = \"csv\";\n\t\t\t\t} else if (contentType.indexOf(\"tab-separated\") > -1) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tjson = parsers.tsv(origResponse);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\texception = e;\n\t\t\t\t\t}\n\t\t\t\t\ttype = \"tsv\";\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\n\t\tvar doLuckyGuess = function() {\n\t\t\tjson = parsers.json(origResponse);\n\t\t\tif (json) {\n\t\t\t\ttype = \"json\";\n\t\t\t} else {\n\t\t\t\ttry {\n\t\t\t\t\tjson = parsers.xml(origResponse);\n\t\t\t\t\tif (json) type = \"xml\";\n\t\t\t\t} catch (err) {};\n\t\t\t}\n\t\t};\n\n\n\t\tgetParserFromContentType();\n\t\tif (!json) {\n\t\t\tdoLuckyGuess();\n\t\t}\n\t\tif (!json) json = false; //explicitly set to false, so we don't try to parse this thing again..\n\t\treturn json;\n\t};\n\n\n\tvar getVariables = function() {\n\t\tvar json = getAsJson();\n\t\tif (json && \"head\" in json) {\n\t\t\treturn json.head.vars;\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t};\n\n\tvar getBindings = function() {\n\t\tvar json = getAsJson();\n\t\tif (json && \"results\" in json) {\n\t\t\treturn json.results.bindings;\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t};\n\n\tvar getBoolean = function() {\n\t\tvar json = getAsJson();\n\t\tif (json && \"boolean\" in json) {\n\t\t\treturn json.boolean;\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t};\n\tvar getOriginalResponse = function() {\n\t\treturn origResponse;\n\t};\n\tvar getOriginalResponseAsString = function() {\n\t\tvar responseString = \"\";\n\t\tif (typeof origResponse == \"string\") {\n\t\t\tresponseString = origResponse;\n\t\t} else if (type == \"json\") {\n\t\t\tresponseString = JSON.stringify(origResponse, undefined, 2); //prettifies as well\n\t\t} else if (type == \"xml\") {\n\t\t\tresponseString = new XMLSerializer().serializeToString(origResponse);\n\t\t}\n\t\treturn responseString;\n\t};\n\tvar getException = function() {\n\t\treturn exception;\n\t};\n\tvar getType = function() {\n\t\tif (type == null) getAsJson(); //detects type as well\n\t\treturn type;\n\t};\n\n\t//process the input parameters in such a way that we can store it in local storage (i.e., no function)\n\t//and, make sure we can easily pass it on back to this wrapper function when loading it again from storage\n\tvar getAsStoreObject = function() {\n\t\tvar storeArray = [];\n\t\tvar arg1 = {};\n\t\tif (dataOrJqXhr.status) {\n\t\t\t//jqXhr object\n\t\t\targ1.status = dataOrJqXhr.status;\n\t\t\targ1.responseText = dataOrJqXhr.responseText;\n\t\t\targ1.statusText = dataOrJqXhr.statusText;\n\t\t\targ1.contentType = contentType; //this is a function in a jqXhr object (problem for storing). but this wrapper will read it as string as well\n\t\t} else {\n\t\t\t//the other instances of this param (whether it is a json, xml, or exception object), we can normally store\n\t\t\targ1 = dataOrJqXhr;\n\t\t}\n\n\n\t\tvar arg2 = textStatus;\n\t\tvar arg3 = undefined;\n\t\tif (typeof jqXhrOrErrorString == \"string\") arg3 = jqXhrOrErrorString;\n\n\t\treturn [arg1, arg2, arg3];\n\t};\n\n\n\n\tinit();\n\tjson = getAsJson();\n\n\treturn {\n\t\tgetAsStoreObject: getAsStoreObject,\n\t\tgetAsJson: getAsJson,\n\t\tgetOriginalResponse: getOriginalResponse,\n\t\tgetOriginalResponseAsString: getOriginalResponseAsString,\n\t\tgetOriginalContentType: function() {\n\t\t\treturn contentType;\n\t\t},\n\t\tgetVariables: getVariables,\n\t\tgetBindings: getBindings,\n\t\tgetBoolean: getBoolean,\n\t\tgetType: getType,\n\t\tgetException: getException\n\t};\n};\n},{\"./csv.js\":31,\"./json.js\":33,\"./tsv.js\":34,\"./xml.js\":36,\"jquery\":undefined}],36:[function(require,module,exports){\n'use strict';\nvar $ = (function(){try{return require('jquery')}catch(e){return window.jQuery}})();\nvar root = module.exports = function(xml) {\n\n\n\n\t/**\n\t * head\n\t */\n\tvar parseHead = function(node) {\n\t\tjson.head = {};\n\t\tfor (var headNodeIt = 0; headNodeIt < node.childNodes.length; headNodeIt++) {\n\t\t\tvar headNode = node.childNodes[headNodeIt];\n\t\t\tif (headNode.nodeName == \"variable\") {\n\t\t\t\tif (!json.head.vars) json.head.vars = [];\n\t\t\t\tvar name = headNode.getAttribute(\"name\");\n\t\t\t\tif (name) json.head.vars.push(name);\n\t\t\t}\n\t\t}\n\t};\n\n\tvar parseResults = function(node) {\n\t\tjson.results = {};\n\t\tjson.results.bindings = [];\n\t\tfor (var resultIt = 0; resultIt < node.childNodes.length; resultIt++) {\n\t\t\tvar resultNode = node.childNodes[resultIt];\n\t\t\tvar jsonResult = null;\n\n\t\t\tfor (var bindingIt = 0; bindingIt < resultNode.childNodes.length; bindingIt++) {\n\t\t\t\tvar bindingNode = resultNode.childNodes[bindingIt];\n\t\t\t\tif (bindingNode.nodeName == \"binding\") {\n\t\t\t\t\tvar varName = bindingNode.getAttribute(\"name\");\n\t\t\t\t\tif (varName) {\n\t\t\t\t\t\tjsonResult = jsonResult || {};\n\t\t\t\t\t\tjsonResult[varName] = {};\n\t\t\t\t\t\tfor (var bindingInfIt = 0; bindingInfIt < bindingNode.childNodes.length; bindingInfIt++) {\n\t\t\t\t\t\t\tvar bindingInf = bindingNode.childNodes[bindingInfIt];\n\t\t\t\t\t\t\tvar type = bindingInf.nodeName;\n\t\t\t\t\t\t\tif (type == \"#text\") continue;\n\t\t\t\t\t\t\tjsonResult[varName].type = type;\n\t\t\t\t\t\t\tjsonResult[varName].value = bindingInf.innerHTML;\n\t\t\t\t\t\t\tvar dataType = bindingInf.getAttribute(\"datatype\");\n\t\t\t\t\t\t\tif (dataType) jsonResult[varName].datatype = dataType;\n\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (jsonResult) json.results.bindings.push(jsonResult);\n\t\t}\n\t};\n\n\tvar parseBoolean = function(node) {\n\t\tif (node.innerHTML == \"true\") {\n\t\t\tjson.boolean = true;\n\t\t} else {\n\t\t\tjson.boolean = false;\n\t\t}\n\t};\n\tvar mainXml = null;\n\tif (typeof xml == \"string\") {\n\t\tmainXml = $.parseXML(xml);\n\t} else if ($.isXMLDoc(xml)) {\n\t\tmainXml = xml;\n\t}\n\tvar xml = null;\n\tif (mainXml.childNodes.length > 0) {\n\t\t//enter the main 'sparql' node\n\t\txml = mainXml.childNodes[0];\n\t} else {\n\t\treturn null;\n\t}\n\tvar json = {};\n\n\n\tfor (var i = 0; i < xml.childNodes.length; i++) {\n\t\tvar node = xml.childNodes[i];\n\t\tif (node.nodeName == \"head\") parseHead(node);\n\t\tif (node.nodeName == \"results\") parseResults(node);\n\t\tif (node.nodeName == \"boolean\") parseBoolean(node);\n\t}\n\n\treturn json;\n};\n},{\"jquery\":undefined}],37:[function(require,module,exports){\n'use strict';\nvar $ = (function(){try{return require('jquery')}catch(e){return window.jQuery}})(),\n\tutils = require('./utils.js'),\n\tyUtils = require('yasgui-utils'),\n\timgs = require('./imgs.js');\n(function(){try{return require('jquery-ui/sortable')}catch(e){return window.jQuery}})();\n(function(){try{return require('pivottable')}catch(e){return window.jQuery}})();\n\nif (!$.fn.pivotUI) throw new Error(\"Pivot lib not loaded\");\nvar root = module.exports = function(yasr) {\n\tvar plugin = {};\n\tvar options = $.extend(true, {}, root.defaults);\n\n\tif (options.useD3Chart) {\n\t\ttry {\n\t\t\tvar d3 = (function(){try{return require('d3')}catch(e){return window.d3}})();\n\t\t\tif (d3) require('../node_modules/pivottable/dist/d3_renderers.js');\n\t\t} catch (e) {\n\t\t\t//do nothing. just make sure we don't use this renderer\n\t\t}\n\t\tif ($.pivotUtilities.d3_renderers) $.extend(true, $.pivotUtilities.renderers, $.pivotUtilities.d3_renderers);\n\t}\n\n\n\n\tvar $pivotWrapper;\n\tvar mergeLabelPostfix = null;\n\tvar getShownVariables = function() {\n\t\tvar variables = yasr.results.getVariables();\n\t\tif (!options.mergeLabelsWithUris) return variables;\n\t\tvar shownVariables = [];\n\n\t\tmergeLabelPostfix = (typeof options.mergeLabelsWithUris == \"string\" ? options.mergeLabelsWithUris : \"Label\");\n\t\tvariables.forEach(function(variable) {\n\t\t\tif (variable.indexOf(mergeLabelPostfix, variable.length - mergeLabelPostfix.length) !== -1) {\n\t\t\t\t//this one ends with a postfix\n\t\t\t\tif (variables.indexOf(variable.substring(0, variable.length - mergeLabelPostfix.length)) >= 0) {\n\t\t\t\t\t//we have a shorter version of this variable. So, do not include the ..<postfix> variable in the table\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tshownVariables.push(variable);\n\t\t});\n\t\treturn shownVariables;\n\t};\n\n\tvar formatForPivot = function(callback) {\n\n\t\tvar vars = getShownVariables();\n\t\tvar usedPrefixes = null;\n\t\tif (yasr.options.getUsedPrefixes) {\n\t\t\tusedPrefixes = (typeof yasr.options.getUsedPrefixes == \"function\" ? yasr.options.getUsedPrefixes(yasr) : yasr.options.getUsedPrefixes);\n\t\t}\n\t\tyasr.results.getBindings().forEach(function(binding) {\n\t\t\tvar rowObj = {};\n\t\t\tvars.forEach(function(variable) {\n\t\t\t\tif (variable in binding) {\n\t\t\t\t\tvar val = binding[variable].value;\n\t\t\t\t\tif (mergeLabelPostfix && binding[variable + mergeLabelPostfix]) {\n\t\t\t\t\t\tval = binding[variable + mergeLabelPostfix].value;\n\t\t\t\t\t} else if (binding[variable].type == \"uri\") {\n\t\t\t\t\t\tval = utils.uriToPrefixed(usedPrefixes, val);\n\t\t\t\t\t}\n\t\t\t\t\trowObj[variable] = val;\n\t\t\t\t} else {\n\t\t\t\t\trowObj[variable] = null;\n\t\t\t\t}\n\t\t\t});\n\t\t\tcallback(rowObj);\n\t\t});\n\t}\n\n\n\tvar validatePivotTableOptions = function(pivotOptions) {\n\t\t//validate settings. we may have different variables, or renderers might be gone\n\t\tif (pivotOptions) {\n\t\t\tif (yasr.results) {\n\t\t\t\tvar vars = yasr.results.getVariables();\n\t\t\t\tvar keepColsAndRows = true;\n\t\t\t\tpivotOptions.cols.forEach(function(variable) {\n\t\t\t\t\tif (vars.indexOf(variable) < 0) keepColsAndRows = false;\n\t\t\t\t});\n\t\t\t\tif (keepColsAndRows) {\n\t\t\t\t\tpivotOptionse.rows.forEach(function(variable) {\n\t\t\t\t\t\tif (vars.indexOf(variable) < 0) keepColsAndRows = false;\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (!keepColsAndRows) {\n\t\t\t\t\tpivotOptions.cols = [];\n\t\t\t\t\tpivotOptions.rows = [];\n\t\t\t\t}\n\t\t\t\tif (!$.pivotUtilities.renderers[settings.rendererName]) delete pivotOptions.rendererName;\n\t\t\t}\n\t\t} else {\n\t\t\tpivotOptions = {};\n\t\t}\n\t\treturn pivotOptions;\n\t};\n\tvar draw = function() {\n\t\tvar doDraw = function() {\n\t\t\tvar onRefresh = function(pivotObj) {\n\t\t\t\toptions.pivotTable.cols = pivotObj.cols;\n\t\t\t\toptions.pivotTable.rows = pivotObj.rows;\n\t\t\t\toptions.pivotTable.rendererName = pivotObj.rendererName;\n\t\t\t\toptions.pivotTable.aggregatorName = pivotObj.aggregatorName;\n\t\t\t\toptions.pivotTable.vals = pivotObj.vals;\n\t\t\t\tyasr.store();\n\n\t\t\t\tif (pivotObj.rendererName.toLowerCase().indexOf(' chart') >= 0) {\n\t\t\t\t\topenGchartBtn.show();\n\t\t\t\t} else {\n\t\t\t\t\topenGchartBtn.hide();\n\t\t\t\t}\n\t\t\t\tyasr.updateHeader();\n\t\t\t};\n\n\n\t\t\tvar openGchartBtn = $('<button>', {\n\t\t\t\t\tclass: 'openPivotGchart yasr_btn'\n\t\t\t\t})\n\t\t\t\t.text('Chart Config')\n\t\t\t\t.click(function() {\n\t\t\t\t\t$pivotWrapper.find('div[dir=\"ltr\"]').dblclick();\n\t\t\t\t}).appendTo(yasr.resultsContainer);\n\t\t\t$pivotWrapper = $('<div>', {\n\t\t\t\tclass: 'pivotTable'\n\t\t\t}).appendTo($(yasr.resultsContainer));\n\n\t\t\toptions.pivotTable.onRefresh = (function() {\n\t\t\t\tvar originalRefresh = options.pivotTable.onRefresh;\n\t\t\t\treturn function(pivotObj) {\n\t\t\t\t\tonRefresh(pivotObj);\n\t\t\t\t\tif (originalRefresh) originalRefresh(pivotObj);\n\t\t\t\t};\n\t\t\t})();\n\n\t\t\twindow.pivot = $pivotWrapper.pivotUI(formatForPivot, options.pivotTable);\n\n\t\t\t/**\n\t\t\t * post process\n\t\t\t */\n\t\t\t//use 'move' handler for variables. This removes the 'filter' button though. Might want to re-enable this in the future\n\t\t\tvar icon = $(yUtils.svg.getElement(imgs.move));\n\t\t\t$pivotWrapper.find('.pvtTriangle').replaceWith(icon);\n\n\t\t\t//add headers to selector rows\n\t\t\t$('.pvtCols').prepend($('<div>', {\n\t\t\t\tclass: 'containerHeader'\n\t\t\t}).text(\"Columns\"));\n\t\t\t$('.pvtRows').prepend($('<div>', {\n\t\t\t\tclass: 'containerHeader'\n\t\t\t}).text(\"Rows\"));\n\t\t\t$('.pvtUnused').prepend($('<div>', {\n\t\t\t\tclass: 'containerHeader'\n\t\t\t}).text(\"Available Variables\"));\n\t\t\t$('.pvtVals').prepend($('<div>', {\n\t\t\t\tclass: 'containerHeader'\n\t\t\t}).text(\"Cells\"));\n\n\t\t\t//hmmm, directly after the callback finishes (i.e., directly after this line), the svg is draw.\n\t\t\t//just use a short timeout to update the header\n\t\t\tsetTimeout(yasr.updateHeader, 400);\n\t\t}\n\n\t\tif (yasr.options.useGoogleCharts && options.useGoogleCharts && !$.pivotUtilities.gchart_renderers) {\n\t\t\trequire('./gChartLoader.js')\n\t\t\t\t.on('done', function() {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trequire('../node_modules/pivottable/dist/gchart_renderers.js');\n\t\t\t\t\t\t$.extend(true, $.pivotUtilities.renderers, $.pivotUtilities.gchart_renderers);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t//hmm, still something went wrong. forget about it;\n\t\t\t\t\t\toptions.useGoogleCharts = false;\n\t\t\t\t\t}\n\t\t\t\t\tdoDraw();\n\t\t\t\t})\n\t\t\t\t.on('error', function() {\n\t\t\t\t\tconsole.log('could not load gchart');\n\t\t\t\t\toptions.useGoogleCharts = false;\n\t\t\t\t\tdoDraw();\n\t\t\t\t})\n\t\t\t\t.googleLoad();\n\t\t} else {\n\t\t\t//everything is already loaded. just draw\n\t\t\tdoDraw();\n\t\t}\n\t};\n\tvar canHandleResults = function() {\n\t\treturn yasr.results && yasr.results.getVariables && yasr.results.getVariables() && yasr.results.getVariables().length > 0;\n\t};\n\n\tvar getDownloadInfo = function() {\n\t\tif (!yasr.results) return null;\n\t\tvar svgEl = yasr.resultsContainer.find('.pvtRendererArea svg');\n\t\tif (svgEl.length > 0) {\n\n\t\t\treturn {\n\t\t\t\tgetContent: function() {\n\t\t\t\t\tif (svgEl[0].outerHTML) {\n\t\t\t\t\t\treturn svgEl[0].outerHTML;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t//outerHTML not supported. use workaround\n\t\t\t\t\t\treturn $('<div>').append(svgEl.clone()).html();\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tfilename: \"queryResults.svg\",\n\t\t\t\tcontentType: \"image/svg+xml\",\n\t\t\t\tbuttonTitle: \"Download SVG Image\"\n\t\t\t};\n\t\t}\n\n\t\t//ok, not a svg. is it a table?\n\t\tvar $table = yasr.resultsContainer.find('.pvtRendererArea table');\n\t\tif ($table.length > 0) {\n\t\t\treturn {\n\t\t\t\tgetContent: function() {\n\t\t\t\t\treturn $table.tableToCsv();\n\t\t\t\t},\n\t\t\t\tfilename: \"queryResults.csv\",\n\t\t\t\tcontentType: \"text/csv\",\n\t\t\t\tbuttonTitle: \"Download as CSV\"\n\t\t\t};\n\t\t}\n\n\t};\n\tvar getEmbedHtml = function() {\n\t\tif (!yasr.results) return null;\n\n\t\tvar svgEl = yasr.resultsContainer.find('.pvtRendererArea svg')\n\t\t\t.clone() //create clone, as we'd like to remove height/width attributes\n\t\t\t.removeAttr('height').removeAttr('width')\n\t\t\t.css('height', '').css('width', '');\n\t\tif (svgEl.length == 0) return null;\n\n\t\tvar htmlString = svgEl[0].outerHTML;\n\t\tif (!htmlString) {\n\t\t\t//outerHTML not supported. use workaround\n\t\t\thtmlString = $('<div>').append(svgEl.clone()).html();\n\t\t}\n\t\t//wrap in div, so users can more easily tune width/height\n\t\t//don't use jquery, so we can easily influence indentation\n\t\treturn '<div style=\"width: 800px; height: 600px;\">\\n' + htmlString + '\\n</div>';\n\t};\n\treturn {\n\t\tgetPersistentSettings: function() {\n\t\t\treturn {\n\t\t\t\tpivotTable: options.pivotTable\n\t\t\t};\n\t\t},\n\t\tsetPersistentSettings: function(newSettings) {\n\t\t\tif (newSettings.pivotTable) {\n\t\t\t\toptions.pivotTable = validatePivotTableOptions(newSettings.pivotTable);\n\t\t\t}\n\n\t\t},\n\t\tgetDownloadInfo: getDownloadInfo,\n\t\tgetEmbedHtml: getEmbedHtml,\n\t\toptions: options,\n\t\tdraw: draw,\n\t\tname: \"Pivot Table\",\n\t\tcanHandleResults: canHandleResults,\n\t\tgetPriority: 4,\n\t}\n};\n\n\n\nroot.defaults = {\n\tmergeLabelsWithUris: false,\n\tuseGoogleCharts: true,\n\tuseD3Chart: true,\n\tpersistencyId: 'pivot',\n\tpivotTable: {}\n};\n\nroot.version = {\n\t\"YASR-rawResponse\": require(\"../package.json\").version,\n\t\"jquery\": $.fn.jquery,\n};\n},{\"../node_modules/pivottable/dist/d3_renderers.js\":12,\"../node_modules/pivottable/dist/gchart_renderers.js\":13,\"../package.json\":19,\"./gChartLoader.js\":25,\"./imgs.js\":27,\"./utils.js\":40,\"d3\":undefined,\"jquery\":undefined,\"jquery-ui/sortable\":undefined,\"pivottable\":undefined,\"yasgui-utils\":16}],38:[function(require,module,exports){\n'use strict';\nvar $ = (function(){try{return require('jquery')}catch(e){return window.jQuery}})(),\n\tCodeMirror = (function(){try{return require('codemirror')}catch(e){return window.CodeMirror}})();\n\nrequire('codemirror/addon/fold/foldcode.js');\nrequire('codemirror/addon/fold/foldgutter.js');\nrequire('codemirror/addon/fold/xml-fold.js');\nrequire('codemirror/addon/fold/brace-fold.js');\n\nrequire('codemirror/addon/edit/matchbrackets.js');\nrequire('codemirror/mode/xml/xml.js');\nrequire('codemirror/mode/javascript/javascript.js');\n\nvar root = module.exports = function(yasr) {\n\tvar plugin = {};\n\tvar options = $.extend(true, {}, root.defaults);\n\tvar cm = null;\n\tvar draw = function() {\n\t\tvar cmOptions = options.CodeMirror;\n\t\tcmOptions.value = yasr.results.getOriginalResponseAsString();\n\n\t\tvar mode = yasr.results.getType();\n\t\tif (mode) {\n\t\t\tif (mode == \"json\") {\n\t\t\t\tmode = {\n\t\t\t\t\tname: \"javascript\",\n\t\t\t\t\tjson: true\n\t\t\t\t};\n\t\t\t}\n\t\t\tcmOptions.mode = mode;\n\t\t}\n\n\t\tcm = CodeMirror(yasr.resultsContainer.get()[0], cmOptions);\n\n\t\t//CM has some issues with folding and unfolding (blank parts in the codemirror area, which are only filled after clicking it)\n\t\t//so, refresh cm after folding/unfolding\n\t\tcm.on('fold', function() {\n\t\t\tcm.refresh();\n\t\t});\n\t\tcm.on('unfold', function() {\n\t\t\tcm.refresh();\n\t\t});\n\n\t};\n\tvar canHandleResults = function() {\n\t\tif (!yasr.results) return false;\n\t\tif (!yasr.results.getOriginalResponseAsString) return false;\n\t\tvar response = yasr.results.getOriginalResponseAsString();\n\t\tif ((!response || response.length == 0) && yasr.results.getException()) return false; //in this case, show exception instead, as we have nothing to show anyway\n\t\treturn true;\n\t};\n\n\tvar getDownloadInfo = function() {\n\t\tif (!yasr.results) return null;\n\t\tvar contentType = yasr.results.getOriginalContentType();\n\t\tvar type = yasr.results.getType();\n\t\treturn {\n\t\t\tgetContent: function() {\n\t\t\t\treturn yasr.results.getOriginalResponse();\n\t\t\t},\n\t\t\tfilename: \"queryResults\" + (type ? \".\" + type : \"\"),\n\t\t\tcontentType: (contentType ? contentType : \"text/plain\"),\n\t\t\tbuttonTitle: \"Download raw response\"\n\t\t};\n\t};\n\n\treturn {\n\t\tdraw: draw,\n\t\tname: \"Raw Response\",\n\t\tcanHandleResults: canHandleResults,\n\t\tgetPriority: 2,\n\t\tgetDownloadInfo: getDownloadInfo,\n\n\t}\n};\n\n\n\nroot.defaults = {\n\tCodeMirror: {\n\t\treadOnly: true,\n\t\tlineNumbers: true,\n\t\tlineWrapping: true,\n\t\tfoldGutter: true,\n\t\tgutters: [\"CodeMirror-linenumbers\", \"CodeMirror-foldgutter\"]\n\t}\n};\n\nroot.version = {\n\t\"YASR-rawResponse\": require(\"../package.json\").version,\n\t\"jquery\": $.fn.jquery,\n\t\"CodeMirror\": CodeMirror.version\n};\n},{\"../package.json\":19,\"codemirror\":undefined,\"codemirror/addon/edit/matchbrackets.js\":5,\"codemirror/addon/fold/brace-fold.js\":6,\"codemirror/addon/fold/foldcode.js\":7,\"codemirror/addon/fold/foldgutter.js\":8,\"codemirror/addon/fold/xml-fold.js\":9,\"codemirror/mode/javascript/javascript.js\":10,\"codemirror/mode/xml/xml.js\":11,\"jquery\":undefined}],39:[function(require,module,exports){\n'use strict';\nvar $ = (function(){try{return require('jquery')}catch(e){return window.jQuery}})(),\n\tyutils = require(\"yasgui-utils\"),\n\tutils = require('./utils.js'),\n\timgs = require('./imgs.js');\n(function(){try{return require('datatables')}catch(e){return window.jQuery}})();\nrequire(\"../lib/colResizable-1.4.js\");\n\n\n\n/**\n * Constructor of plugin which displays results as a table\n * \n * @param yasr {object}\n * @param parent {DOM element}\n * @param options {object}\n * @class YASR.plugins.table\n * @return yasr-table (doc)\n * \n */\nvar root = module.exports = function(yasr) {\n\tvar table = null;\n\tvar plugin = {\n\t\tname: \"Table\",\n\t\tgetPriority: 10,\n\t};\n\tvar options = plugin.options = $.extend(true, {}, root.defaults);\n\tvar tableLengthPersistencyId = (options.persistency ? yasr.getPersistencyId(options.persistency.tableLength) : null);\n\n\tvar getRows = function() {\n\t\tvar rows = [];\n\t\tvar bindings = yasr.results.getBindings();\n\t\tvar vars = yasr.results.getVariables();\n\t\tvar usedPrefixes = null;\n\t\tif (yasr.options.getUsedPrefixes) {\n\t\t\tusedPrefixes = (typeof yasr.options.getUsedPrefixes == \"function\" ? yasr.options.getUsedPrefixes(yasr) : yasr.options.getUsedPrefixes);\n\t\t}\n\t\tfor (var rowId = 0; rowId < bindings.length; rowId++) {\n\t\t\tvar row = [];\n\t\t\trow.push(\"\"); //row numbers\n\t\t\tvar binding = bindings[rowId];\n\t\t\tfor (var colId = 0; colId < vars.length; colId++) {\n\t\t\t\tvar sparqlVar = vars[colId];\n\t\t\t\tif (sparqlVar in binding) {\n\t\t\t\t\tif (options.getCellContent) {\n\t\t\t\t\t\trow.push(options.getCellContent(yasr, plugin, binding, sparqlVar, {\n\t\t\t\t\t\t\t'rowId': rowId,\n\t\t\t\t\t\t\t'colId': colId,\n\t\t\t\t\t\t\t'usedPrefixes': usedPrefixes\n\t\t\t\t\t\t}));\n\t\t\t\t\t} else {\n\t\t\t\t\t\trow.push(\"\");\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\trow.push(\"\");\n\t\t\t\t}\n\t\t\t}\n\t\t\trows.push(row);\n\t\t}\n\t\treturn rows;\n\t};\n\n\tvar eventId = yasr.getPersistencyId('eventId') || \"yasr_\" + $(yasr.container).closest('[id]').attr('id');\n\tvar addEvents = function() {\n\t\ttable.on('order.dt', function() {\n\t\t\tdrawSvgIcons();\n\t\t});\n\t\tif (tableLengthPersistencyId) {\n\t\t\ttable.on('length.dt', function(e, settings, len) {\n\t\t\t\tyutils.storage.set(tableLengthPersistencyId, len, \"month\");\n\t\t\t});\n\t\t}\n\t\t$.extend(true, options.callbacks, options.handlers);\n\t\ttable.delegate(\"td\", \"click\", function(event) {\n\t\t\tif (options.callbacks && options.callbacks.onCellClick) {\n\t\t\t\tvar result = options.callbacks.onCellClick(this, event);\n\t\t\t\tif (result === false) return false;\n\t\t\t}\n\t\t}).delegate(\"td\", 'mouseenter', function(event) {\n\t\t\tif (options.callbacks && options.callbacks.onCellMouseEnter) {\n\t\t\t\toptions.callbacks.onCellMouseEnter(this, event);\n\t\t\t}\n\t\t\tvar tdEl = $(this);\n\t\t\tif (options.fetchTitlesFromPreflabel && tdEl.attr(\"title\") === undefined && tdEl.text().trim().indexOf(\"http\") == 0) {\n\t\t\t\taddPrefLabel(tdEl);\n\t\t\t}\n\t\t}).delegate(\"td\", 'mouseleave', function(event) {\n\t\t\tif (options.callbacks && options.callbacks.onCellMouseLeave) {\n\t\t\t\toptions.callbacks.onCellMouseLeave(this, event);\n\n\t\t\t}\n\t\t});\n\t};\n\n\tplugin.draw = function() {\n\t\ttable = $('<table cellpadding=\"0\" cellspacing=\"0\" border=\"0\" class=\"resultsTable\"></table>');\n\t\t$(yasr.resultsContainer).html(table);\n\n\t\tvar dataTableConfig = options.datatable;\n\t\tdataTableConfig.data = getRows();\n\t\tdataTableConfig.columns = options.getColumns(yasr, plugin);\n\n\t\t//fetch stored datatables length value\n\t\tvar pLength = yutils.storage.get(tableLengthPersistencyId);\n\t\tif (pLength) dataTableConfig.pageLength = pLength;\n\n\n\n\t\ttable.DataTable($.extend(true, {}, dataTableConfig)); //make copy. datatables adds properties for backwards compatability reasons, and don't want this cluttering our own \n\n\n\t\tdrawSvgIcons();\n\n\t\taddEvents();\n\n\t\t//finally, make the columns dragable:\n\t\ttable.colResizable();\n\t};\n\n\tvar drawSvgIcons = function() {\n\t\tvar sortings = {\n\t\t\t\"sorting\": \"unsorted\",\n\t\t\t\"sorting_asc\": \"sortAsc\",\n\t\t\t\"sorting_desc\": \"sortDesc\"\n\t\t};\n\t\ttable.find(\".sortIcons\").remove();\n\t\tfor (var sorting in sortings) {\n\t\t\tvar svgDiv = $(\"<div class='sortIcons'></div>\");\n\t\t\tyutils.svg.draw(svgDiv, imgs[sortings[sorting]]);\n\t\t\ttable.find(\"th.\" + sorting).append(svgDiv);\n\t\t}\n\t};\n\t/**\n\t * Check whether this plugin can handler the current results\n\t * \n\t * @property canHandleResults\n\t * @type function\n\t * @default If resultset contains variables in the resultset, return true\n\t */\n\tplugin.canHandleResults = function() {\n\t\treturn yasr.results && yasr.results.getVariables && yasr.results.getVariables() && yasr.results.getVariables().length > 0;\n\t};\n\n\n\tplugin.getDownloadInfo = function() {\n\t\tif (!yasr.results) return null;\n\t\treturn {\n\t\t\tgetContent: function() {\n\t\t\t\treturn require(\"./bindingsToCsv.js\")(yasr.results.getAsJson());\n\t\t\t},\n\t\t\tfilename: \"queryResults.csv\",\n\t\t\tcontentType: \"text/csv\",\n\t\t\tbuttonTitle: \"Download as CSV\"\n\t\t};\n\t};\n\n\n\treturn plugin;\n};\n\n\nvar formatLiteral = function(yasr, plugin, literalBinding) {\n\tvar stringRepresentation = utils.escapeHtmlEntities(literalBinding.value);\n\tif (literalBinding[\"xml:lang\"]) {\n\t\tstringRepresentation = '\"' + stringRepresentation + '\"<sup>@' + literalBinding[\"xml:lang\"] + '</sup>';\n\t} else if (literalBinding.datatype) {\n\t\tvar xmlSchemaNs = \"http://www.w3.org/2001/XMLSchema#\";\n\t\tvar dataType = literalBinding.datatype;\n\t\tif (dataType.indexOf(xmlSchemaNs) === 0) {\n\t\t\tdataType = \"xsd:\" + dataType.substring(xmlSchemaNs.length);\n\t\t} else {\n\t\t\tdataType = \"<\" + dataType + \">\";\n\t\t}\n\n\t\tstringRepresentation = '\"' + stringRepresentation + '\"<sup>^^' + dataType + '</sup>';\n\t}\n\treturn stringRepresentation;\n};\nvar getCellContent = function(yasr, plugin, bindings, sparqlVar, context) {\n\tvar binding = bindings[sparqlVar];\n\tvar value = null;\n\tif (binding.type == \"uri\") {\n\t\tvar title = null;\n\t\tvar href = binding.value;\n\t\tvar visibleString = href;\n\t\tif (context.usedPrefixes) {\n\t\t\tfor (var prefix in context.usedPrefixes) {\n\t\t\t\tif (visibleString.indexOf(context.usedPrefixes[prefix]) == 0) {\n\t\t\t\t\tvisibleString = prefix + ':' + href.substring(context.usedPrefixes[prefix].length);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (plugin.options.mergeLabelsWithUris) {\n\t\t\tvar postFix = (typeof plugin.options.mergeLabelsWithUris == \"string\" ? plugin.options.mergeLabelsWithUris : \"Label\");\n\t\t\tif (bindings[sparqlVar + postFix]) {\n\t\t\t\tvisibleString = formatLiteral(yasr, plugin, bindings[sparqlVar + postFix]);\n\t\t\t\ttitle = href;\n\t\t\t}\n\t\t}\n\t\tvalue = \"<a \" + (title ? \"title='\" + href + \"' \" : \"\") + \"class='uri' target='_blank' href='\" + href + \"'>\" + visibleString + \"</a>\";\n\t} else {\n\t\tvalue = \"<span class='nonUri'>\" + formatLiteral(yasr, plugin, binding) + \"</span>\";\n\t}\n\treturn \"<div>\" + value + \"</div>\";\n};\n\n\n\n\n\n\nvar addPrefLabel = function(td) {\n\tvar addEmptyTitle = function() {\n\t\ttd.attr(\"title\", \"\"); //this avoids trying to fetch the label again on next hover\n\t};\n\t$.get(\"http://preflabel.org/api/v1/label/\" + encodeURIComponent(td.text()) + \"?silent=true\")\n\t\t.success(function(data) {\n\t\t\tif (typeof data == \"object\" && data.label) {\n\t\t\t\ttd.attr(\"title\", data.label);\n\t\t\t} else if (typeof data == \"string\" && data.length > 0) {\n\t\t\t\ttd.attr(\"title\", data);\n\t\t\t} else {\n\t\t\t\taddEmptyTitle();\n\t\t\t}\n\n\t\t})\n\t\t.fail(addEmptyTitle);\n};\n\nvar openCellUriInNewWindow = function(cell) {\n\tif (cell.className.indexOf(\"uri\") >= 0) {\n\t\twindow.open(this.innerHTML);\n\t}\n};\n\n/**\n * Defaults for table plugin\n * \n * @type object\n * @attribute YASR.plugins.table.defaults\n */\nroot.defaults = {\n\n\t/**\n\t * Draw the cell content, from a given binding\n\t * \n\t * @property drawCellContent\n\t * @param binding {object}\n\t * @type function\n\t * @return string\n\t * @default YASR.plugins.table.getFormattedValueFromBinding\n\t */\n\tgetCellContent: getCellContent,\n\n\tpersistency: {\n\t\ttableLength: \"tableLength\",\n\t},\n\n\tgetColumns: function(yasr, plugin) {\n\t\tvar includeVariable = function(variableToCheck) {\n\t\t\tif (!plugin.options.mergeLabelsWithUris) return true;\n\t\t\tvar postFix = (typeof plugin.options.mergeLabelsWithUris == \"string\" ? plugin.options.mergeLabelsWithUris : \"Label\");\n\t\t\tif (variableToCheck.indexOf(postFix, variableToCheck.length - postFix.length) !== -1) {\n\t\t\t\t//this one ends with a postfix\n\t\t\t\tif (yasr.results.getVariables().indexOf(variableToCheck.substring(0, variableToCheck.length - postFix.length)) >= 0) {\n\t\t\t\t\t//we have a shorter version of this variable. So, do not include the ..<postfix> variable in the table\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t};\n\n\t\tvar cols = [];\n\t\tcols.push({\n\t\t\t\"title\": \"\"\n\t\t}); //row numbers column\n\t\tyasr.results.getVariables().forEach(function(variable) {\n\t\t\tcols.push({\n\t\t\t\t\"title\": \"<span>\" + variable + \"</span>\",\n\t\t\t\t\"visible\": includeVariable(variable)\n\t\t\t});\n\t\t});\n\t\treturn cols;\n\t},\n\t/**\n\t * Try to fetch the label representation for each URI, using the preflabel.org services. (fetching occurs when hovering over the cell)\n\t * \n\t * @property fetchTitlesFromPreflabel\n\t * @type boolean\n\t * @default true\n\t */\n\tfetchTitlesFromPreflabel: true,\n\n\tmergeLabelsWithUris: false,\n\t/**\n\t * Set a number of handlers for the table\n\t * \n\t * @property handlers\n\t * @type object\n\t */\n\tcallbacks: {\n\t\t/**\n\t\t * Mouse-enter-cell event\n\t\t * \n\t\t * @property handlers.onCellMouseEnter\n\t\t * @type function\n\t\t * @param td-element\n\t\t * @default null\n\t\t */\n\t\tonCellMouseEnter: null,\n\t\t/**\n\t\t * Mouse-leave-cell event\n\t\t * \n\t\t * @property handlers.onCellMouseLeave\n\t\t * @type function\n\t\t * @param td-element\n\t\t * @default null\n\t\t */\n\t\tonCellMouseLeave: null,\n\t\t/**\n\t\t * Cell clicked event\n\t\t * \n\t\t * @property handlers.onCellClick\n\t\t * @type function\n\t\t * @param td-element\n\t\t * @default null\n\t\t */\n\t\tonCellClick: null\n\t},\n\t/**\n\t * This plugin uses the datatables jquery plugin (See datatables.net). For any datatables specific defaults, change this object. \n\t * See the datatables reference for more information\n\t * \n\t * @property datatable\n\t * @type object\n\t */\n\tdatatable: {\n\t\t\"autoWidth\": false,\n\t\t\"dom\": '<\"dtTopHeader\"ilf>rtip',\n\t\t\"order\": [], //disable initial sorting\n\t\t\"pageLength\": 50, //default page length\n\t\t\"lengthMenu\": [\n\t\t\t[10, 50, 100, 1000, -1],\n\t\t\t[10, 50, 100, 1000, \"All\"]\n\t\t], //possible page lengths\n\t\t\"lengthChange\": true, //allow changing page length\n\t\t\"pagingType\": \"full_numbers\", //how to show the pagination options\n\t\t\"drawCallback\": function(oSettings) {\n\t\t\t//trick to show row numbers\n\t\t\tfor (var i = 0; i < oSettings.aiDisplay.length; i++) {\n\t\t\t\t$('td:eq(0)', oSettings.aoData[oSettings.aiDisplay[i]].nTr).html(i + 1);\n\t\t\t}\n\n\t\t\t//Hide pagination when we have a single page\n\t\t\tvar activePaginateButton = false;\n\t\t\t$(oSettings.nTableWrapper).find(\".paginate_button\").each(function() {\n\t\t\t\tif ($(this).attr(\"class\").indexOf(\"current\") == -1 && $(this).attr(\"class\").indexOf(\"disabled\") == -1) {\n\t\t\t\t\tactivePaginateButton = true;\n\t\t\t\t}\n\t\t\t});\n\t\t\tif (activePaginateButton) {\n\t\t\t\t$(oSettings.nTableWrapper).find(\".dataTables_paginate\").show();\n\t\t\t} else {\n\t\t\t\t$(oSettings.nTableWrapper).find(\".dataTables_paginate\").hide();\n\t\t\t}\n\t\t},\n\t\t\"columnDefs\": [{\n\t\t\t\t\"width\": \"32px\",\n\t\t\t\t\"orderable\": false,\n\t\t\t\t\"targets\": 0\n\t\t\t} //disable row sorting for first col\n\t\t],\n\t},\n};\n\nroot.version = {\n\t\"YASR-table\": require(\"../package.json\").version,\n\t\"jquery\": $.fn.jquery,\n\t\"jquery-datatables\": $.fn.DataTable.version\n};\n},{\"../lib/colResizable-1.4.js\":2,\"../package.json\":19,\"./bindingsToCsv.js\":20,\"./imgs.js\":27,\"./utils.js\":40,\"datatables\":undefined,\"jquery\":undefined,\"yasgui-utils\":16}],40:[function(require,module,exports){\n'use strict';\nvar $ = (function(){try{return require('jquery')}catch(e){return window.jQuery}})(),\n\tGoogleTypeException = require('./exceptions.js').GoogleTypeException;\n\nmodule.exports = {\n\tescapeHtmlEntities: function(unescaped) {\n\t\t//taken from http://stackoverflow.com/questions/5499078/fastest-method-to-escape-html-tags-as-html-entities\n\t\treturn unescaped.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');\n\t},\n\turiToPrefixed: function(prefixes, uri) {\n\t\tif (prefixes) {\n\t\t\tfor (var prefix in prefixes) {\n\t\t\t\tif (uri.indexOf(prefixes[prefix]) == 0) {\n\t\t\t\t\turi = prefix + ':' + uri.substring(prefixes[prefix].length);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn uri;\n\t},\n\tgetGoogleTypeForBinding: function(binding) {\n\t\tif (binding == null) return null;\n\t\tif (binding.type != null && (binding.type === 'typed-literal' || binding.type === 'literal')) {\n\t\t\tswitch (binding.datatype) {\n\t\t\t\tcase 'http://www.w3.org/2001/XMLSchema#double':\n\t\t\t\tcase 'http://www.w3.org/2001/XMLSchema#float':\n\t\t\t\tcase 'http://www.w3.org/2001/XMLSchema#decimal':\n\t\t\t\tcase 'http://www.w3.org/2001/XMLSchema#int':\n\t\t\t\tcase 'http://www.w3.org/2001/XMLSchema#integer':\n\t\t\t\tcase 'http://www.w3.org/2001/XMLSchema#long':\n\t\t\t\tcase 'http://www.w3.org/2001/XMLSchema#gYearMonth':\n\t\t\t\tcase 'http://www.w3.org/2001/XMLSchema#gYear':\n\t\t\t\tcase 'http://www.w3.org/2001/XMLSchema#gMonthDay':\n\t\t\t\tcase 'http://www.w3.org/2001/XMLSchema#gDay':\n\t\t\t\tcase 'http://www.w3.org/2001/XMLSchema#gMonth':\n\t\t\t\t\treturn \"number\";\n\t\t\t\tcase 'http://www.w3.org/2001/XMLSchema#date':\n\t\t\t\t\treturn \"date\";\n\t\t\t\tcase 'http://www.w3.org/2001/XMLSchema#dateTime':\n\t\t\t\t\treturn \"datetime\";\n\t\t\t\tcase 'http://www.w3.org/2001/XMLSchema#time':\n\t\t\t\t\treturn \"timeofday\";\n\t\t\t\tdefault:\n\t\t\t\t\treturn \"string\";\n\t\t\t}\n\t\t} else {\n\t\t\treturn \"string\";\n\t\t}\n\t},\n\tgetGoogleTypeForBindings: function(bindings, varName) {\n\t\tvar types = {};\n\t\tvar typeCount = 0;\n\t\tbindings.forEach(function(binding) {\n\t\t\tvar type = module.exports.getGoogleTypeForBinding(binding[varName]);\n\t\t\tif (type != null) {\n\t\t\t\tif (!(type in types)) {\n\t\t\t\t\ttypes[type] = 0;\n\t\t\t\t\ttypeCount++;\n\t\t\t\t}\n\t\t\t\ttypes[type]++;\n\t\t\t}\n\t\t});\n\t\tif (typeCount == 0) {\n\t\t\treturn 'string';\n\t\t} else if (typeCount == 1) {\n\t\t\tfor (var type in types) {\n\t\t\t\treturn type; //just return this one\n\t\t\t}\n\t\t} else {\n\t\t\t//we have conflicting types. Throw error\n\t\t\tthrow new GoogleTypeException(types, varName);\n\t\t}\n\t},\n\n\tcastGoogleType: function(binding, prefixes, googleType) {\n\t\tif (binding == null) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (googleType != 'string' && binding.type != null && (binding.type === 'typed-literal' || binding.type === 'literal')) {\n\t\t\tswitch (binding.datatype) {\n\t\t\t\tcase 'http://www.w3.org/2001/XMLSchema#float':\n\t\t\t\tcase 'http://www.w3.org/2001/XMLSchema#decimal':\n\t\t\t\tcase 'http://www.w3.org/2001/XMLSchema#int':\n\t\t\t\tcase 'http://www.w3.org/2001/XMLSchema#integer':\n\t\t\t\tcase 'http://www.w3.org/2001/XMLSchema#long':\n\t\t\t\tcase 'http://www.w3.org/2001/XMLSchema#gYearMonth':\n\t\t\t\tcase 'http://www.w3.org/2001/XMLSchema#gYear':\n\t\t\t\tcase 'http://www.w3.org/2001/XMLSchema#gMonthDay':\n\t\t\t\tcase 'http://www.w3.org/2001/XMLSchema#gDay':\n\t\t\t\tcase 'http://www.w3.org/2001/XMLSchema#gMonth':\n\t\t\t\t\treturn Number(binding.value);\n\t\t\t\tcase 'http://www.w3.org/2001/XMLSchema#double':\n\t\t\t\t\treturn Number(parseFloat(binding.value));\n\t\t\t\tcase 'http://www.w3.org/2001/XMLSchema#date':\n\t\t\t\t\t//grrr, the date function does not parse -any- date (including most xsd dates!)\n\t\t\t\t\t//datetime and time seem to be fine though.\n\t\t\t\t\t//so, first try our custom parser. if that does not work, try the regular date parser anyway\n\t\t\t\t\tvar date = parseXmlSchemaDate(binding.value);\n\t\t\t\t\tif (date) return date;\n\t\t\t\tcase 'http://www.w3.org/2001/XMLSchema#dateTime':\n\t\t\t\tcase 'http://www.w3.org/2001/XMLSchema#time':\n\t\t\t\t\treturn new Date(binding.value);\n\t\t\t\tdefault:\n\t\t\t\t\treturn binding.value;\n\t\t\t}\n\t\t} else {\n\t\t\tif (binding.type = 'uri') {\n\t\t\t\treturn module.exports.uriToPrefixed(prefixes, binding.value);\n\t\t\t} else {\n\t\t\t\treturn binding.value;\n\t\t\t}\n\t\t}\n\t},\n\tfireClick: function($els) {\n\t\tif (!$els)\n\t\t\treturn;\n\t\t$els.each(function(i, el) {\n\t\t\tvar $el = $(el);\n\t\t\tif (document.dispatchEvent) { // W3C\n\t\t\t\tvar oEvent = document.createEvent(\"MouseEvents\");\n\t\t\t\toEvent.initMouseEvent(\"click\", true, true, window, 1, 1, 1, 1, 1,\n\t\t\t\t\tfalse, false, false, false, 0, $el[0]);\n\t\t\t\t$el[0].dispatchEvent(oEvent);\n\t\t\t} else if (document.fireEvent) { // IE\n\t\t\t\t$el[0].click();\n\t\t\t}\n\t\t});\n\t}\n};\n//There are no PROPER xml schema to js date parsers\n//A few libraries exist: moment, jsdate, Xdate, but none of them parse valid xml schema dates (e.g. 1999-11-05+02:00).\n//And: I'm not going to write one myself\n//There are other hacky solutions (regular expressions based on trial/error) such as http://stackoverflow.com/questions/2731579/convert-an-xml-schema-date-string-to-a-javascript-date\n//But if we're doing hacky stuff, I at least want to do it MYSELF!\nvar parseXmlSchemaDate = function(dateString) {\n\t//change +02:00 to Z+02:00 (something which is parseable by js date)\n\tvar date = new Date(dateString.replace(/(\\d)([\\+-]\\d{2}:\\d{2})/, '$1Z$2'));\n\tif (isNaN(date)) return null;\n\treturn date;\n};\n\n},{\"./exceptions.js\":24,\"jquery\":undefined}]},{},[1])(1)\n});\n\n\n"],"sourceRoot":"/source/"}
|