{"version":3,"sources":["../../../../../../plugins/flow/web_external/js/templates.js","../../../../../../plugins/flow/web_external/js/util.js","../../../../../../plugins/flow/web_external/js/models/DatasetModel.js","../../../../../../plugins/flow/web_external/js/collections/DatasetCollection.js","../../../../../../plugins/flow/web_external/js/ItemsView.js","../../../../../../plugins/flow/web_external/js/SVGView.js","../../../../../../plugins/flow/web_external/js/plugins/dendrogram.js","../../../../../../plugins/flow/web_external/js/plugins/edgebundling.js","../../../../../../plugins/flow/web_external/js/plugins/graph.js","../../../../../../plugins/flow/web_external/js/plugins/image.js","../../../../../../plugins/flow/web_external/js/plugins/interactiveheatmap.js","../../../../../../plugins/flow/web_external/js/plugins/nodelink.js","../../../../../../plugins/flow/web_external/js/plugins/scatterplot.js","../../../../../../plugins/flow/web_external/js/plugins/scatterplotmatrix.js","../../../../../../plugins/flow/web_external/js/plugins/spaceMap.js","../../../../../../plugins/flow/web_external/js/plugins/string.js","../../../../../../plugins/flow/web_external/js/plugins/table.js","../../../../../../plugins/flow/web_external/js/plugins/tablelink.js","../../../../../../plugins/flow/web_external/js/plugins/tanglegram.js","../../../../../../plugins/flow/web_external/js/plugins/timeline.js","../../../../../../plugins/flow/web_external/js/plugins/timelineVega.js","../../../../../../plugins/flow/web_external/js/plugins/treeHeatmap.js","../../../../../../plugins/flow/web_external/js/views/AnalysisManagementView.js","../../../../../../plugins/flow/web_external/js/views/AnalysisSetupView.js","../../../../../../plugins/flow/web_external/js/views/CollectionView.js","../../../../../../plugins/flow/web_external/js/views/CollectionsView.js","../../../../../../plugins/flow/web_external/js/views/DatasetManagementView.js","../../../../../../plugins/flow/web_external/js/views/InputView.js","../../../../../../plugins/flow/web_external/js/views/InputsView.js","../../../../../../plugins/flow/web_external/js/views/ItemOptionView.js","../../../../../../plugins/flow/web_external/js/views/StringOptionView.js","../../../../../../plugins/flow/web_external/js/views/VariableEditView.js","../../../../../../plugins/flow/web_external/js/views/VariableView.js","../../../../../../plugins/flow/web_external/js/views/VariablesView.js","../../../../../../plugins/flow/web_external/js/views/VisualizationManagementView.js","../../../../../../plugins/flow/web_external/js/views/WorkflowConnectionView.js","../../../../../../plugins/flow/web_external/js/views/WorkflowStepView.js","../../../../../../plugins/flow/web_external/js/views/WorkflowView.js","../../../../../../plugins/flow/web_external/js/app.js"],"names":["this","template","locals","buf","jade_mixins","jade_interp","locals_","model","push","jade","cls","get","escape","join","params","title","attr","noText","yesText","analysis","$$obj","outputs","length","$index","$$l","output","name","type","description","call","prompt","choices","choice","connectionPath","step","edit","portShape","color","visualization","isOutput","isInput","isTask","editClass","editCursor","editIcon","portOffset","task","inputs","index","input","inputScale","outputScale","$","_","atob","Backbone","d3","girder","Uint8Array","window","flow","events","clone","Events","saveLocation","webFormat","table","tree","string","number","image","r","geometry","validatorNiceName","validator","format","resolveEntities","entities","done","isFunction","isEmpty","bootstrapAlert","size","first","values","html","templates","keys","modal","on","off","click","val","resolveTypeFormats","typeFormats","object","map","resolveExtensions","extensions","setDisplay","mode","forEach","d","select","classed","getTypeFormatsFromExtension","extension","filter","validators","has","contains","getExtensionsFromTypeFormat","typeFormat","isUndefined","pluck","flatten","ext","undefined","getFormatStringsFromType","retrieveDatasetAsFormat","dataset","dataIsURI","uri","byteCharacters","byteNumbers","byteArray","i","id","set","data","apiRoot","currentUser","Model","JSON","stringify","charCodeAt","restRequest","path","contentType","processData","error","bind","converted","performAnalysis","analysisId","bindings","result","console","log","responseText","lineInput","extend","initialValue","yesClass","focus","keyup","event","keyCode","confirmCallback","accessor","spec","func","field","fieldMap","split","obj","slice","value","hasOwnProperty","_accessor","accessorify","out","isArray","isObject","girderUpload","folderId","itemToOverwrite","success","file","bindEvents","arguments","response","statusText","files","collections","FileCollection","altUrl","models","updateContents","fetch","folder","FolderModel","_id","FileModel","uploadToFolder","message","timeout","text","removeClass","addClass","show","setTimeout","alert","girderItemInput","itemId","url","location","origin","method","headers","Girder-Token","DatasetModel","ItemModel","attribute","attributes","prototype","DatasetCollection","ItemCollection","ItemsView","View","initialize","options","listenTo","collection","add","remove","reset","itemViews","itemView","itemOptions","matches","item","match","each","key","view","$el","append","render","cid","empty","SVGView","nameSpace","_ensureElement","el","attrs","className","document","createElementNS","setElement","tangelo","selection","moveToFront","parentNode","appendChild","toggleExpand","collapse","getChildren","_children","getID","_treeID","findSource","parent","_treeNew","findSink","_treeOld","widget","label","margin","top","right","bottom","left","width","height","duration","distance","nodeColor","labelSize","lineWidth","lineColor","lineStyle","nodeSize","expanded","orientation","walk","f","root","all","children","that","c","_create","svg","element","group","_update","_destroy","_transition","transition","resize","sw","sh","layout","cluster","line","enter","exit","nodes","vert","rotString","tmp","h","ml","mt","mr","mb","x0","x","y0","y","_dist","child","xscale","scale","linear","domain","max","range","selectAll","links","target","diagonal","l","interpolate","source","Error","s","t","style","sinkNode","sourceNode","apply","jQuery","div","chart","edgebundling","datum","fn","graph","parse","nodelink","nodeLabel","linkDistance","indexOf","heatmap","rows","columnHeaders","fields","nodeCharge","nodeOpacity","nodeId","linkSource","linkTarget","linkOpacity","nodeX","nodeY","dynamicLabels","colorScale","category10","force","_setOptions","_super","nodeIdMap","xScale","extent","yScale","charge","degree","outgoing","incoming","sort","a","b","descending","sizeScale","sqrt","start","link","node","drag","_tick","resume","nodeLabels","_nodeLabels","count","visited","labels","visit","dd","Math","abs","_reduceLabels","prefixTree","word","maxCount","maxWord","words","subtree","next","vg","scatterplot","dt","opt","renderer","row","isNumber","NaN","orig","update","matrix","unavailable","plugin","required","constraints","gravity","fixed","showPoints","showConstraints","showLinks","mapConfig","mapOptions","legends","disabled","create","dataNodes","nodeEnter","oldNodes","constraintsOrdered","padding","axis","xRange","yRange","linexConstraints","lineyConstraints","xTypes","yTypes","xConstraints","yConstraints","mapOpacity","yPosition","xPosition","constraint","strength","span","num","_paired","xConstraint","yConstraint","j","xOrdinal","yOrdinal","styleAxis","ind1","ind2","distances","val1","val2","nodeMap","constrain","orient","min","dx","dy","ordinal","rangePoints","mapX","mapY","ascending","clusters","clusterSize","ceil","floor","sum","constraintNode","clusterNode","newX","oldConstrain","newY","isString","linkStrength","theta","find","css","saveButton","saveChanges","csv","nextSibling","delay","queue","header","body","headerSet","tablelink","linkMap","filteredNodes","filteredNodeMap","filteredLinks","String","app","stop_vtkweb","vtkweb","terminate","tree1","tree2","args","protocol","host","launch","argstring","viewport","callback","warn","applyTransition","xTicks","yTicks","main","plot","xaxis","yaxis","_x","_y","axisPadding","xAcc","yAcc","time","Date","nice","isNaN","ticks","defined","styleLine","timelineVega","date","yy","ace","Blob","FileReader","URL","workflow","AnalysisManagementView","click #show-script","hide","editor","workflowView","click #edit","setReadOnly","$cursorLayer","opacity","editable","change #mode","getSession","setMode","click #save","info","curWorkflow","serialize","steps","connections","script","getValue","replace","inputVariables","toJSON","outputVariables","_sendMetadata","once","change","savedVersion","save","click .delete-analysis","change #analysis","changeAnalysis","analyses","click #setup","analysisSetupView","click .add-input-variable","inputVariableEditView","click .add-output-variable","outputVariableEditView","click #analysis-new","createAnalysis","click #workflow-new","click #add-workstep","addStep","click #add-workvis","vis","visualizations","click #analysis-download","blob","filename","anchor","createObjectURL","change #analysis-files","upload","click #analysis-upload","settings","datasets","presets","AnalysisSetupView","setTheme","setHighlightActiveLine","setHighlightGutterLine","setShowPrintMargin","setFontSize","onbeforeunload","e","analysesView","ItemOptionView","workstepsView","workvisView","Collection","VariableEditView","inputVariablesView","VariablesView","VariableView","editView","outputVariablesView","saveLocationChange","destroy","checkCanEdit","desc","WorkflowView","setValue","clearSelection","reader","onload","readAsText","addMetadata","toggleClass","select2","placeholder","click .run","inputsView","taskBindings","taskId","checkTaskResult","eventSource","EventSource","cookie","addEventListener","close","click #show-output","click #close-analysis-setup","InputsView","idPrefix","isEqual","showInputInfo","outputsDescription","status","outputMessage","outputIdToName","outputId","outputName","findWhere","_visualizations","meta","preset","CollectionView","tagName","click .save-location","trigger","active","click .active-state","click .delete","confirm","CollectionsView","DatasetManagementView","defaultViews","change .datasets","click .dataset-quick-view","viewName","visualizationsView","click a.resolve-data-type","preventDefault","last","resolveDataTypeFormat","click .dataset-save","fullyQualifiedFilename","allowableExtensions","noop","click .dataset-download","parts","nameWithExtension","click .dataset-delete","change #g-files","click #upload","dragenter #upload","stopPropagation","originalEvent","dataTransfer","dropEffect","dragleave #upload","dragover #upload","drop #upload","datasetsView","updateDataset","omit","valid","canQuickView","formatString","selected","webkitURL","InputView","typeMetadata","inputMode","json","array","coordinate","parentView","containers","addButton","componentsList","container","viewIndex","splice","appendTo","domainArray","StringOptionView","opts","registerChangeEvents","addChangeEvent","triggerChangeEvent","referredInputView","findReferredInputView","referredInput","inputView","parseFloat","variableProperties","default","constant","columnNamesInput","properties","workflowInput","workflowOutput","workflowTask","click .update","list","trim","localeCompare","pick","click .edit","VisualizationManagementView","change .visualizations","click .show-visualization","loadInputs","click .add-to-presets","click .save","click .show-preset","presetsView","changeVisualization","bindAll","loadInputsArray","inputsViews","optionsArray","inputViews","addOption","coordOptions","longitude","latitude","inner","inputName","newDataValue","saveModifiedData","convertedOptions","found","inputIndex","visualizationInputs","datasetIndex","WorkflowConnectionView","mouseover .connection","mouseout .connection","click .connection","workflowConnection","WorkflowStepView","click .delete-step","click .edit-step","click .refresh-step","d1","d2","updated","mouseenter .step","mouseleave .step","click .output","outputPort","outputStep","outputIndex","outputPos","inputStep","inputPos","click .input","inputPort","mouseup .input","checkConnectionComplete","move","rename","wrapText","reverse","lineNumber","lineHeight","tspan","pop","getComputedTextLength","behavior","conn","dragPort","startConnectionDrag","sourceEvent","updateConnectionDrag","endConnectionDrag","removeTooltips","workflowStep","tooltip","newSteps","newConnections","inName","input_step","outName","output_step","stepsView","connectionsView","girderId","modified","dist","delta","offset","inPos","outPos","dragOutput","dragOutputIndex","dragConnection","existing","App","visualizationDescriptors","components","click #login","click #logout","logout","click #register","click .new-collection","isPublic","is","CollectionModel","public","parentType","parentId","responseJSON","timer","fetchCurrentUser","user","UserModel","token","clearTimeout","controlPanel","collectionForFolder","CollectionCollection","pageLimit","collectionVisibilityChange","loginDialog","registerDialog","login","loginView","views","LoginView","registerView","RegisterView","folders","FolderCollection","analysisFolder","dataFolder","visualizationFolder","where"],"mappings":"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","file":"app.min.js","sourcesContent":["this[\"jade\"] = this[\"jade\"] || {};\nthis[\"jade\"][\"templates\"] = this[\"jade\"][\"templates\"] || {};\n\nthis[\"jade\"][\"templates\"][\"collection\"] = function template(locals) {\nvar buf = [];\nvar jade_mixins = {};\nvar jade_interp;\nvar locals_ = (locals || {}),model = locals_.model;\nbuf.push(\"
  0 ? \"\" : \"hidden\"\n ]], [null,null,null,true])) + \"> \" + (jade.escape(null == (jade_interp = model.get('name')) ? \"\" : jade_interp)) + \" 1 ? \"\" : \"hidden\"\n ]], [null,null,null,true])) + \">
\");;return buf.join(\"\");\n};\n\nthis[\"jade\"][\"templates\"][\"lineInput\"] = function template(locals) {\nvar buf = [];\nvar jade_mixins = {};\nvar jade_interp;\nvar locals_ = (locals || {}),params = locals_.params;\nbuf.push(\"

\" + (jade.escape((jade_interp = params.title) == null ? '' : jade_interp)) + \"

\" + (jade.escape((jade_interp = params.noText) == null ? '' : jade_interp)) + \"\" + (jade.escape((jade_interp = params.yesText) == null ? '' : jade_interp)) + \"
\");;return buf.join(\"\");\n};\n\nthis[\"jade\"][\"templates\"][\"outputsDescription\"] = function template(locals) {\nvar buf = [];\nvar jade_mixins = {};\nvar jade_interp;\nvar locals_ = (locals || {}),analysis = locals_.analysis;\nbuf.push(\"Outputs\");\n// iterate analysis.outputs\n;(function(){\n var $$obj = analysis.outputs;\n if ('number' == typeof $$obj.length) {\n\n for (var $index = 0, $$l = $$obj.length; $index < $$l; $index++) {\n var output = $$obj[$index];\n\nbuf.push(\"
\" + (jade.escape(null == (jade_interp = output.name) ? \"\" : jade_interp)) + \"[\" + (jade.escape((jade_interp = output.type) == null ? '' : jade_interp)) + \"] \" + (jade.escape((jade_interp = output.description) == null ? '' : jade_interp)) + \"
\");\n }\n\n } else {\n var $$l = 0;\n for (var $index in $$obj) {\n $$l++; var output = $$obj[$index];\n\nbuf.push(\"
\" + (jade.escape(null == (jade_interp = output.name) ? \"\" : jade_interp)) + \"[\" + (jade.escape((jade_interp = output.type) == null ? '' : jade_interp)) + \"] \" + (jade.escape((jade_interp = output.description) == null ? '' : jade_interp)) + \"
\");\n }\n\n }\n}).call(this);\n;return buf.join(\"\");\n};\n\nthis[\"jade\"][\"templates\"][\"prompt\"] = function template(locals) {\nvar buf = [];\nvar jade_mixins = {};\nvar jade_interp;\nvar locals_ = (locals || {}),prompt = locals_.prompt,choices = locals_.choices;\nbuf.push(\"

\" + (jade.escape((jade_interp = prompt) == null ? '' : jade_interp)) + \"

\");;return buf.join(\"\");\n};\n\nthis[\"jade\"][\"templates\"][\"workflow\"] = function template(locals) {\nvar buf = [];\nvar jade_mixins = {};\nvar jade_interp;\n\nbuf.push(\"\");;return buf.join(\"\");\n};\n\nthis[\"jade\"][\"templates\"][\"workflowConnection\"] = function template(locals) {\nvar buf = [];\nvar jade_mixins = {};\nvar jade_interp;\nvar locals_ = (locals || {}),connectionPath = locals_.connectionPath;\nbuf.push(\"\");;return buf.join(\"\");\n};\n\nthis[\"jade\"][\"templates\"][\"workflowStep\"] = function template(locals) {\nvar buf = [];\nvar jade_mixins = {};\nvar jade_interp;\nvar locals_ = (locals || {}),step = locals_.step,edit = locals_.edit,portShape = locals_.portShape;\nvar color;\nif (step.visualization) {\ncolor = 'lightgreen';\n} else if (step.isOutput || step.isInput) {\ncolor = 'lightblue';\n} else {\ncolor = 'whitesmoke';\n}\nvar isTask = !step.visualization && !step.isOutput && !step.isInput;\nvar editClass = isTask ? 'refresh-step' : '';\nvar editCursor = isTask ? 'pointer' : '';\nvar editIcon = isTask ? '\\u27f3' : '';\nvar portOffset = 20;\nbuf.push(\"\" + (jade.escape(null == (jade_interp = step.name) ? \"\" : jade_interp)) + \"\");\nif ( edit)\n{\nbuf.push(\"X✎\" + (jade.escape(null == (jade_interp = editIcon) ? \"\" : jade_interp)) + \"\");\n}\nbuf.push(\"\");\n// iterate step.task.inputs\n;(function(){\n var $$obj = step.task.inputs;\n if ('number' == typeof $$obj.length) {\n\n for (var index = 0, $$l = $$obj.length; index < $$l; index++) {\n var input = $$obj[index];\n\nbuf.push(\"\");\n }\n\n } else {\n var $$l = 0;\n for (var index in $$obj) {\n $$l++; var input = $$obj[index];\n\nbuf.push(\"\");\n }\n\n }\n}).call(this);\n\nbuf.push(\"\");\n// iterate step.task.inputs\n;(function(){\n var $$obj = step.task.inputs;\n if ('number' == typeof $$obj.length) {\n\n for (var index = 0, $$l = $$obj.length; index < $$l; index++) {\n var input = $$obj[index];\n\nbuf.push(\"\");\n }\n\n } else {\n var $$l = 0;\n for (var index in $$obj) {\n $$l++; var input = $$obj[index];\n\nbuf.push(\"\");\n }\n\n }\n}).call(this);\n\nbuf.push(\"\");\n// iterate step.task.outputs\n;(function(){\n var $$obj = step.task.outputs;\n if ('number' == typeof $$obj.length) {\n\n for (var index = 0, $$l = $$obj.length; index < $$l; index++) {\n var output = $$obj[index];\n\nbuf.push(\"\");\n }\n\n } else {\n var $$l = 0;\n for (var index in $$obj) {\n $$l++; var output = $$obj[index];\n\nbuf.push(\"\");\n }\n\n }\n}).call(this);\n\nbuf.push(\"\");\n// iterate step.task.outputs\n;(function(){\n var $$obj = step.task.outputs;\n if ('number' == typeof $$obj.length) {\n\n for (var index = 0, $$l = $$obj.length; index < $$l; index++) {\n var output = $$obj[index];\n\nbuf.push(\"\");\n }\n\n } else {\n var $$l = 0;\n for (var index in $$obj) {\n $$l++; var output = $$obj[index];\n\nbuf.push(\"\");\n }\n\n }\n}).call(this);\n\nbuf.push(\"\");;return buf.join(\"\");\n};","(function ($, _, atob, Backbone, d3, girder, Uint8Array) {\n 'use strict';\n\n window.flow = {\n events: _.clone(Backbone.Events),\n\n saveLocation: null,\n\n webFormat: {\n table: 'rows',\n tree: 'nested',\n string: 'text',\n number: 'number',\n image: 'png.base64',\n r: 'serialized',\n geometry: 'vtkpolydata.serialized'\n },\n\n validatorNiceName: function (validator) {\n return validator.type + ':' + validator.format;\n },\n\n // entities should be key val\n // with the key being a UI friendly string\n // val being the actual object - which is passed to done\n resolveEntities: function (entities, done) {\n done = (_.isFunction(done)) ? done : function () {};\n\n if (_.isEmpty(entities)) {\n this.bootstrapAlert(\"danger\", \"files are unsupported.\", 15);\n } else if (_.size(entities) == 1) {\n done(_.first(_.values(entities)));\n } else {\n $('#th-dialog-container').html(jade.templates.prompt({\n prompt: 'What type of data is this?',\n choices: _.keys(entities)\n })).modal();\n\n $('#th-dialog-container').on('shown.bs.modal', function () {\n $('#th-dialog-container').off('shown');\n });\n\n $('#th-dialog-container .th-confirm-button').click(function () {\n $('#th-dialog-container').modal('hide');\n done(entities[$('#prompt-choice').val()]);\n });\n }\n },\n\n resolveTypeFormats: function (typeFormats, done) {\n this.resolveEntities(_.object(_.map(typeFormats, flow.validatorNiceName),\n typeFormats), done);\n },\n\n resolveExtensions: function (extensions, done) {\n this.resolveEntities(_.object(extensions, extensions), done);\n },\n\n setDisplay: function (mode) {\n [\"intro\", \"vis\", \"editor\"].forEach(function (d) {\n d3.select(\"#\" + d).classed(\"hidden\", mode !== d);\n });\n },\n\n // @todo should this be renamed? It actually returns \"validators\"\n // Given an extension, like \"csv\", return the types/formats\n // that can be associated with it\n getTypeFormatsFromExtension: function (extension) {\n return _.filter(this.validators, function (validator) {\n return (_.has(validator, 'validator') &&\n _.has(validator.validator, 'extensions') &&\n _.contains(validator.validator.extensions, extension));\n });\n },\n\n // Returns the extensions a given type/format could be stored as.\n // Both parameters are optional, so called with 0 arguments would\n // return all extensions registered to any type/format.\n getExtensionsFromTypeFormat: function (type, format) {\n var typeFormats = _.filter(this.validators, function (typeFormat) {\n return ((_.isUndefined(type) || typeFormat.type === type) &&\n (_.isUndefined(format) || typeFormat.format === format));\n }),\n validators = _.pluck(typeFormats, 'validator'),\n extensions = _.filter(_.flatten(_.pluck(validators, 'extensions')),\n function (ext) {\n return ext !== undefined;\n });\n\n return extensions;\n },\n\n /**\n * Given a type, return all formats that can be stored on disk (in other words, have\n * at least 1 extension).\n **/\n getFormatStringsFromType: function (type) {\n return _.pluck(_.filter(this.validators, function (typeFormat) {\n return (typeFormat.type === type &&\n _.has(typeFormat, 'validator') &&\n _.has(typeFormat.validator, 'extensions') &&\n _.size(typeFormat.validator.extensions) > 0);\n }), 'format');\n },\n\n // Converts a dataset (either a Girder-backed dataset or dataset\n // stored in the browser) into another format and returns the result\n // to the done function.\n retrieveDatasetAsFormat: function (dataset, type, format, dataIsURI, done) {\n var uri,\n byteCharacters,\n byteNumbers,\n byteArray,\n i;\n dataset.id = dataset.get('_id');\n\n if (dataIsURI && dataset.id) {\n dataset.set({\n data: girder.apiRoot + '/item/' + dataset.id + '/flow/' + type + '/' + dataset.get('format') + '/' + format\n });\n if (girder.currentUser) {\n dataset.set({data: dataset.get('data') + '?token=' + girder.currentUser.get('token')});\n }\n done(null, dataset);\n return;\n }\n if (dataset.has('data')) {\n if (dataset.get('format') === format) {\n done(null, dataset);\n return;\n }\n if (dataset.get('type') === 'table' && dataset.get('format') === 'rows') {\n dataset = new Backbone.Model({type: 'table', format: 'rows.json', data: JSON.stringify(dataset.get('data'))});\n }\n if (dataset.get('type') === 'tree' && dataset.get('format') === 'nested') {\n dataset = new Backbone.Model({type: 'tree', format: 'nested.json', data: JSON.stringify(dataset.get('data'))});\n }\n if (dataset.get('type') === 'number' && dataset.get('format') === 'number') {\n dataset = new Backbone.Model({type: 'number', format: 'json', data: JSON.stringify(dataset.get('data'))});\n }\n if (dataset.get('format') === format) {\n done(null, dataset);\n return;\n }\n if (dataset.get('type') === 'image' && dataset.get('format') === 'png.base64' && format === 'png') {\n byteCharacters = atob(dataset.get('data'));\n byteNumbers = [];\n byteNumbers.length = byteCharacters.length;\n for (i = 0; i < byteCharacters.length; i += 1) {\n byteNumbers[i] = byteCharacters.charCodeAt(i);\n }\n byteArray = new Uint8Array(byteNumbers);\n done(null, new Backbone.Model({type: 'image', format: 'png', data: byteArray}));\n return;\n }\n uri = 'item/flow/' + type + '/' + dataset.get('format') + '/' + format;\n\n girder.restRequest({\n path: uri,\n type: 'POST',\n data: dataset.get('data'),\n contentType: false,\n processData: false,\n error: null\n }).done(_.bind(function (converted) {\n done(null, new Backbone.Model(converted));\n }, this)).error(_.bind(function (error) {\n done(error);\n }, this));\n } else {\n uri = 'item/' + dataset.id + '/flow/' + type + '/' + dataset.get('format') + '/' + format;\n girder.restRequest({\n path: uri,\n error: null\n }).done(_.bind(function (converted) {\n done(null, new Backbone.Model(converted));\n }, this)).error(_.bind(function (error) {\n done(error);\n }, this));\n }\n },\n\n // Run an analysis.\n performAnalysis: function (analysisId, inputs, outputs, done) {\n var bindings = {inputs: inputs, outputs: outputs};\n girder.restRequest({\n path: 'item/' + analysisId + '/flow',\n type: 'POST',\n data: JSON.stringify(bindings),\n contentType: 'application/json',\n error: null\n }).done(_.bind(function (result) {\n done(null, result);\n }), this).error(_.bind(function (error) {\n console.log(\"Error encountered: \" + error.responseText);\n done(error);\n }, this));\n },\n\n lineInput: function (params) {\n params = _.extend({\n title: 'Enter a name',\n initialValue: 'Untitled',\n yesText: 'Save',\n yesClass: 'btn-primary',\n noText: 'Cancel'\n }, params);\n\n $('#th-dialog-container').html(jade.templates.lineInput({\n params: params\n })).modal();\n\n $('#th-dialog-container').on('shown.bs.modal', function () {\n $('#th-dialog-container .th-line-input').focus().select();\n $('#th-dialog-container').off('shown');\n });\n\n $(\"#th-dialog-container .th-line-input\").keyup(function (event) {\n if (event.keyCode === 13) {\n $(\"#th-dialog-container .th-confirm-button\").click();\n }\n });\n\n $('#th-dialog-container .th-confirm-button').click(function () {\n $('#th-dialog-container').modal('hide');\n params.confirmCallback($('#th-dialog-container .th-line-input').val());\n });\n },\n\n accessor: function (spec) {\n var func,\n field,\n fieldMap = {};\n\n if (spec.field !== undefined) {\n func = function (d) {\n var path = spec.field.split('.'),\n obj = d;\n path.slice(0, -1).forEach(function (field) {\n if (obj[field] !== undefined) {\n obj = obj[field];\n }\n });\n return obj[path[path.length - 1]];\n };\n } else if (spec.value !== undefined) {\n func = function (d) { return spec.value; };\n } else if (spec.object !== undefined) {\n for (field in spec.object) {\n if (spec.object.hasOwnProperty(field) && field !== '_accessor') {\n fieldMap[field] = window.flow.accessor(spec.object[field]);\n }\n }\n func = function (d) {\n var value = {}, field;\n for (field in fieldMap) {\n if (fieldMap.hasOwnProperty(field)) {\n value[field] = fieldMap[field](d);\n }\n }\n return value;\n };\n }\n\n func.spec = spec;\n spec._accessor = true;\n return func;\n },\n\n accessorify: function (spec) {\n var out,\n field;\n\n if (_.isArray(spec)) {\n out = [];\n spec.forEach(function (d) {\n out.push(window.flow.accessorify(d));\n });\n } else if (_.isFunction(spec)) {\n out = spec;\n } else if (_.isObject(spec)) {\n if (spec._accessor) {\n out = window.flow.accessor(spec);\n } else {\n out = {};\n for (field in spec) {\n if (spec.hasOwnProperty(field)) {\n out[field] = window.flow.accessorify(spec[field]);\n }\n }\n }\n } else {\n out = spec;\n }\n return out;\n },\n\n girderUpload: function (data, name, folderId, itemToOverwrite, success, error) {\n success = success || function () {};\n error = error || function () {};\n\n var file, bindEvents = function (file) {\n file.on('g:upload.complete', function () {\n success(arguments);\n window.flow.bootstrapAlert(\"success\", \"Upload complete!\", 5);\n }).on('g:upload.error', function () {\n }).on('g:upload.error g:upload.errorStarting', function () {\n error(arguments);\n window.flow.bootstrapAlert(\"danger\", \"Upload failed: \" + arguments[0].response.statusText);\n });\n return file;\n };\n\n if (itemToOverwrite) {\n // We have the dataset's itemid, but we need its fileid.\n var files = new girder.collections.FileCollection();\n files.altUrl = 'item/' + itemToOverwrite + '/files';\n\n files.on('g:changed', function () {\n file = bindEvents(files.models[0]);\n file.updateContents(data);\n }).fetch();\n } else {\n var folder = new girder.models.FolderModel({_id: folderId});\n file = bindEvents(new girder.models.FileModel());\n file.uploadToFolder(folder, data, name);\n }\n\n return file;\n },\n\n // Display a bootstrap-style alert message to the user.\n // Type should be success, info, warning, or danger.\n // Timeout is how long the alert should be display. Defaults to 5 seconds.\n // If timeout is false, the alert persists.\n bootstrapAlert: function (type, message, timeout) {\n if (timeout !== false) {\n timeout = typeof timeout !== 'undefined' ? timeout : 5;\n timeout *= 1000; // convert to milliseconds\n }\n\n $('#alert_placeholder').html('
');\n $('#alert_message').text(message);\n $('#alert_placeholder').removeClass(\"hidden\");\n $('#alert').on('closed.bs.alert', function () {\n $('#alert_placeholder').addClass(\"hidden\");\n });\n $('#alert_placeholder').show();\n\n if (timeout !== false) {\n window.setTimeout(function () {\n $('#alert').alert('close');\n }, timeout);\n }\n },\n\n girderItemInput: function (itemId) {\n return {\n mode: 'http',\n url: window.location.origin + girder.apiRoot + '/item/' + itemId + '/download',\n method: 'GET',\n headers: girder.currentUser ? {\n 'Girder-Token': girder.currentUser.get('token')\n } : {}\n };\n }\n };\n\n}(window.$, window._, window.atob, window.Backbone, window.d3, window.girder, window.Uint8Array));\n","(function (flow, girder) {\n \"use strict\";\n\n flow.DatasetModel = girder.models.ItemModel.extend({\n get: function (attribute) {\n // Revert to meta/flow/attribute if possible\n if ((!_.has(this.attributes, attribute) &&\n _.has(this.attributes, 'meta') &&\n _.has(this.get('meta'), 'flow'))) {\n return this.get('meta').flow[attribute];\n }\n\n return girder.models.ItemModel.prototype.get.call(this, attribute);\n }\n });\n}(window.flow, window.girder));\n","(function (flow, _, girder) {\n \"use strict\";\n\n flow.DatasetCollection = girder.collections.ItemCollection.extend({\n model: flow.DatasetModel\n });\n}(window.flow, window._, window.girder));\n","(function (flow, _, Backbone) {\n \"use strict\";\n\n // Generic view of a collection that creates and manages\n // views for items based on the constructor passed as itemView.\n // An optional filter sets key/value pairs that must be matched\n // in models in the collection for it to be displayed in the\n // view, which is useful for example in selecting all datasets\n // of a certain type. The itemOptions option specifies additional\n // constructor options to be passed to generated itemView views.\n flow.ItemsView = Backbone.View.extend({\n initialize: function (options) {\n this.filter = options.filter;\n this.listenTo(this.collection, 'add', this.add);\n this.listenTo(this.collection, 'remove', this.remove);\n this.listenTo(this.collection, 'reset', this.reset);\n this.itemViews = {};\n if (!options.itemView) {\n console.error(\"Error: itemView required\");\n return;\n }\n this.itemView = options.itemView;\n this.itemOptions = options.itemOptions;\n this.collection.forEach(_.bind(this.add, this));\n },\n\n matches: function (item) {\n var match = true;\n _.each(this.filter, function (value, key) {\n if (value !== item.get(key)) {\n match = false;\n }\n });\n return match;\n },\n\n add: function (item) {\n if (this.matches(item)) {\n var view = new this.itemView(_.extend({model: item}, this.itemOptions));\n this.$el.append(view.$el);\n view.render();\n this.itemViews[item.cid] = view;\n }\n },\n\n remove: function (item) {\n if (this.itemViews[item.cid]) {\n this.itemViews[item.cid].$el.remove();\n delete this.itemViews[item.cid];\n }\n },\n\n reset: function () {\n this.$el.empty();\n\n _.each(this.collection.models, function (item) {\n this.add(item);\n }, this);\n }\n });\n}(window.flow, window._, window.Backbone));\n","(function (flow, $, Backbone) {\n \"use strict\";\n\n flow.SVGView = Backbone.View.extend({\n nameSpace: \"http://www.w3.org/2000/svg\",\n _ensureElement: function () {\n if (!this.el) {\n var attrs = _.extend({}, _.result(this, 'attributes'));\n if (this.id) {\n attrs.id = _.result(this, 'id');\n }\n if (this.className) {\n attrs['class'] = _.result(this, 'className');\n }\n var $el = $(window.document.createElementNS(_.result(this, 'nameSpace'), _.result(this, 'tagName'))).attr(attrs);\n this.setElement($el, false);\n } else {\n this.setElement(_.result(this, 'el'), false);\n }\n }\n });\n\n})(window.flow, window.$, window.Backbone);\n","(function (tangelo, $, d3) {\n \"use strict\";\n\n if (!d3.selection.prototype.moveToFront) {\n d3.selection.prototype.moveToFront = function () {\n return this.each(function () {\n this.parentNode.appendChild(this);\n });\n };\n }\n\n var _id = 0,\n toggleExpand = function (d) {\n d.collapse = !d.collapse;\n },\n getChildren = function (d) {\n if (!d.collapse) {\n return d._children;\n }\n return [];\n },\n getID = function (d) {\n if (!d._treeID) {\n _id += 1;\n d._treeID = _id;\n }\n return d._treeID;\n };\n\n function findSource(d) {\n if (!d.parent || !d._treeNew) {\n return d;\n }\n return findSource(d.parent);\n }\n\n function findSink(d) {\n if (!d.parent || !d._treeOld) {\n return d;\n }\n return findSink(d.parent);\n }\n\n $.widget(\"tangelo.dendrogram\", {\n options: {\n // accessor to the node label\n label: tangelo.accessor({value: \"\"}),\n // accessor to a unique node id\n id: getID,\n // margin spacing\n margin: {\n top: 25,\n right: 25,\n bottom: 50,\n left: 25\n },\n // graph size in pixels or null to use the element size\n width: null,\n height: null,\n // transition duration\n duration: 750,\n // the tree root\n data: {},\n // accessor to distance\n distance: tangelo.accessor({value: 1}),\n // accessor to node colors\n nodeColor: tangelo.accessor({value: \"lightsteelblue\"}),\n // accessor to font size of the labels\n labelSize: tangelo.accessor({value: \"14px\"}),\n // accessor to line stroke width\n lineWidth: tangelo.accessor({value: 1}),\n // accessor to line stroke color\n lineColor: tangelo.accessor({value: \"black\"}),\n // line style: curved or axisAligned\n lineStyle: \"curved\",\n // accessor to node circle radius\n nodeSize: tangelo.accessor({value: 5}),\n // event callbacks\n on: {\n click: function () {\n return true;\n }\n },\n // accessor telling if the given node should be expanded\n // or collapsed\n expanded: function (d) {\n return !d.collapse;\n },\n // graph orientation: \"vertical\" or \"horizontal\"\n orientation: \"vertical\"\n },\n walk: function (f, root, all) {\n // call the function \"f\" on all nodes starting from root\n // root defaults to the tree root\n // if all === true, then traverse all nodes, not just the visible nodes\n var children, that = this;\n root = root || this.options.data;\n f(root);\n children = all ? root._children : root.children;\n children.forEach(function (c) {\n if (c) { // make sure we don't end up in an infinite loop\n that.walk(f, c, all);\n }\n });\n },\n _create: function () {\n this.svg = d3.select(this.element.get(0)).append(\"svg\");\n this.group = this.svg.append(\"g\");\n this._update();\n },\n _destroy: function () {\n this.svg.remove();\n },\n _transition: function (selection) {\n // helper function to apply a transition to the\n // selection if duration is truthy\n if (this.options.duration) {\n selection = selection.transition()\n .duration(this.options.duration);\n }\n return selection;\n },\n resize: function () {\n // resize the svg, temporarily turns of transitions\n // then calls update\n var duration = this.options.duration;\n this.options.duration = null;\n this._update();\n this.options.duration = duration;\n },\n _update: function () {\n var that = this, width, height, sw, sh,\n tree = d3.layout.cluster(),\n line,\n id = tangelo.accessor(this.options.id),\n selection, enter, exit, nodes, vert = this.options.orientation === \"vertical\",\n rotString = \"\", tmp, h,\n ml = this.options.margin.left, mt = this.options.margin.top,\n mr = this.options.margin.right, mb = this.options.margin.bottom;\n\n // get the total size of the content\n width = (this.options.width || this.element.width());\n height = (this.options.height || this.element.height());\n sw = width;\n sh = height;\n\n if (!vert) {\n // for horizontal layout, we apply a rotation\n // to the main svg group\n h = height - mb;\n tmp = width;\n width = height;\n height = tmp;\n rotString = \"translate(\" + ml + \",\" + h + \") \" + \"rotate(-90) \";\n mt = this.options.margin.right;\n mb = this.options.margin.left;\n ml = this.options.margin.top;\n mr = this.options.margin.bottom;\n } else {\n rotString = \"translate(\" + ml + \",\" + mt + \")\";\n }\n\n // set the svg size\n this.svg.attr(\"width\", sw)\n .attr(\"height\", sh);\n\n // get size without margins\n width -= ml + mr;\n height -= mt + mb;\n\n // apply rotations/translations\n this.group.attr(\"transform\", rotString);\n\n // save the old children array and positions for all nodes\n this.walk(function (d) {\n d._children = (d._children || d.children) || [];\n d.x0 = d.x === undefined ? width / 2 : d.x;\n d.y0 = d.y === undefined ? height / 2 : d.y;\n }, this.options.data, true);\n\n // set the graph size and children accessor\n tree.size([width, height])\n .children(getChildren);\n\n console.log(this.options.data);\n this.options.data._dist = 0;\n this.walk(function (d) {\n d._children.forEach(function (child) {\n child._dist = d._dist + that.options.distance(child);\n console.log(child._dist);\n });\n }, this.options.data, true);\n\n nodes = tree(this.options.data);\n\n var xscale = d3.scale.linear().domain([0, d3.max(nodes, function (d) { return d._dist; })]).range([0, height - 100]);\n\n this.options.data.y = 0;\n this.options.data.y0 = 0;\n this.walk(function (d) {\n d._children.forEach(function (child) {\n child.y = xscale(child._dist);\n child.y0 = d.y;\n });\n }, this.options.data, true);\n\n console.log(nodes);\n\n // select the node links\n selection = this.group.selectAll(\".line\")\n .data(tree.links(nodes), function (d) {\n return id(d.target);\n });\n\n enter = selection.enter();\n exit = selection.exit();\n\n // Reset flags that keep track of which nodes\n // are new in this selection, and which are\n // being removed. These flags determine the\n // source and sink values for transition effects.\n selection.each(function (d) {\n d.target._treeOld = false;\n d.target._treeNew = false;\n });\n exit.each(function (d) {\n d.target._treeOld = true;\n });\n\n // create the line generator according to the line style\n if (this.options.lineStyle === \"curved\") {\n line = d3.svg.diagonal();\n } else if (this.options.lineStyle === \"axisAligned\") {\n line = function (obj) {\n var l = d3.svg.line().interpolate(\"step-after\")\n .x(tangelo.accessor({field: \"x\"}))\n .y(tangelo.accessor({field: \"y\"}));\n return l([obj.source, obj.target]);\n };\n } else {\n throw new Error(\"illegal option for lineStyle: \" + this.options.lineStyle);\n }\n\n // append new paths\n enter.append(\"path\")\n .attr(\"class\", \"line tree\")\n .each(function (d) {\n d.target._treeNew = true;\n })\n .attr(\"d\", function (d) {\n var s = findSource(d.target),\n t = {x: s.x0, y: s.y0};\n return line({\n source: t,\n target: t\n });\n })\n .style(\"stroke-opacity\", 1e-6)\n .style(\"stroke\", this.options.lineColor)\n .style(\"stroke-width\", this.options.lineWidth)\n .style(\"fill\", \"none\");\n\n exit = this._transition(exit);\n exit\n .attr(\"d\", function (d) {\n var s = findSink(d.target);\n return line({\n source: s,\n target: s\n });\n })\n .style(\"stroke-opacity\", 1e-6)\n .remove();\n\n selection = this._transition(selection);\n selection\n .attr(\"d\", line)\n .style(\"stroke-opacity\", 1)\n .style(\"stroke\", this.options.lineColor)\n .style(\"stroke-width\", this.options.lineWidth);\n\n // determine if we need to rotate the labels or not\n // according to the tree orientation\n rotString = \"\";\n if (!vert) {\n rotString = \"rotate(90)\";\n }\n\n // select the node labels\n selection = this.group.selectAll(\".label\")\n .data(nodes, id);\n enter = selection.enter();\n exit = selection.exit();\n\n enter.append(\"text\")\n .attr(\"class\", \"label tree\")\n .attr(\"dx\", 5)\n .attr(\"transform\", function (d) {\n var s = findSource(d);\n return \"translate(\" + s.x0 + \",\" + s.y0 + \")\" + rotString;\n })\n .attr(\"text-anchor\", \"left\")\n .attr(\"font-size\", this.options.labelSize)\n .style(\"fill-opacity\", 1e-6)\n .text(this.options.label);\n\n exit = this._transition(exit);\n exit\n .attr(\"transform\", function (d) {\n var s = findSink(d);\n return \"translate(\" + s.x + \",\" + s.y + \")\" + rotString;\n })\n .style(\"fill-opacity\", 1e-6)\n .attr(\"font-size\", this.options.labelSize)\n .text(this.options.label)\n .remove();\n\n selection = this._transition(selection);\n selection\n .attr(\"transform\", function (d) {\n return \"translate(\" + d.x + \",\" + d.y + \")\" + rotString;\n })\n .attr(\"font-size\", this.options.labelSize)\n .style(\"fill-opacity\", 1)\n .text(this.options.label);\n\n // select the nodes\n selection = this.group.selectAll(\".node\")\n .data(nodes, id);\n\n enter = selection.enter();\n exit = selection.exit();\n\n enter.append(\"circle\")\n .attr(\"class\", \"node tree\")\n .attr(\"cx\", function (d) {\n return findSource(d).x0;\n })\n .attr(\"cy\", function (d) {\n return findSource(d).y0;\n })\n .attr(\"r\", this.options.nodeSize)\n .style(\"fill\", this.options.nodeColor)\n .style(\"fill-opacity\", 1e-6)\n .style(\"stroke-opacity\", 1e-6)\n .on(\"click\", function (d) {\n that.options.sinkNode = {value: d};\n that.options.sourceNode = {value: d};\n if (that.options.on.click.apply(this, arguments)) {\n toggleExpand.apply(this, arguments);\n }\n that._update();\n });\n\n exit = this._transition(exit);\n exit\n .attr(\"cx\", function (d) {\n return findSink(d).x;\n })\n .attr(\"cy\", function (d) {\n return findSink(d).y;\n })\n .attr(\"r\", this.options.nodeSize)\n .style(\"fill-opacity\", 1e-6)\n .style(\"stroke-opacity\", 1e-6)\n .remove();\n\n // bring the nodes in front of the links\n selection.moveToFront();\n selection = this._transition(selection);\n selection\n .attr(\"cx\", function (d) {\n return d.x;\n })\n .attr(\"cy\", function (d) {\n return d.y;\n })\n .attr(\"r\", this.options.nodeSize)\n .style(\"fill-opacity\", 0.5)\n .style(\"stroke-opacity\", 0.5)\n .style(\"fill\", this.options.nodeColor);\n }\n });\n}(window.tangelo, window.jQuery, window.d3));\n","(function (tangelo, $, d3) {\n \"use strict\";\n\n if (!($ && $.widget && d3)) {\n return;\n }\n\n $.widget(\"tangelo.edgebundling\", {\n options: {\n data: null\n },\n\n _create: function () {\n var div = $('
');\n this.element.append(div);\n this._update();\n },\n\n _update: function () {\n var chart = d3.chart.edgebundling(),\n data = this.options.data;\n d3.select('#edgebundle')\n .datum(data)\n .call(chart);\n }\n });\n}(window.tangelo, window.jQuery, window.d3));\n","(function ($) {\n \"use strict\";\n\n $.fn.graph = function (spec) {\n var that = this[0];\n spec.data = JSON.parse(spec.data);\n\n return $(that).nodelink({\n data: {\n nodes: spec.data.nodes,\n links: spec.data.links\n },\n nodeLabel: function (d) { return d.id; },\n linkDistance: 75\n });\n };\n\n}(window.jQuery));\n","(function ($, d3) {\n \"use strict\";\n\n $.fn.image = function (options) {\n var data = options.data;\n if (options.data.indexOf(\"data:image/png;base64,\") !== 0) {\n data = \"data:image/png;base64,\" + options.data;\n }\n d3.select(this.get(0)).append(\"img\")\n .attr(\"src\", data);\n };\n\n}(window.$, window.d3));\n","(function (tangelo, $, d3) {\n \"use strict\";\n\n if (!($ && $.widget && d3)) {\n return;\n }\n\n $.widget(\"tangelo.interactiveheatmap\", {\n options: {\n data: null\n },\n\n _create: function () {\n var div = $('
');\n this.element.append(div);\n this._update();\n },\n\n _update: function () {\n var heatmap = d3.chart.heatmap(),\n data = this.options.data.rows,\n columnHeaders = this.options.data.fields;\n\n d3.select(\"#heatmap\")\n .datum(data)\n .call(heatmap, columnHeaders);\n }\n });\n}(window.tangelo, window.jQuery, window.d3));\n","(function (tangelo, $, d3) {\n \"use strict\";\n\n $.widget(\"tangelo.nodelink\", {\n options: {\n nodeCharge: tangelo.accessor({value: -130}),\n nodeColor: tangelo.accessor({value: \"steelblue\"}),\n nodeSize: tangelo.accessor({value: 10}),\n nodeLabel: tangelo.accessor({value: \"\"}),\n nodeOpacity: tangelo.accessor({value: 1}),\n nodeId: tangelo.accessor({index: true}),\n linkSource: tangelo.accessor({field: \"source\"}),\n linkTarget: tangelo.accessor({field: \"target\"}),\n linkDistance: tangelo.accessor({value: 30}),\n linkOpacity: tangelo.accessor({value: 0.2}),\n nodeX: tangelo.accessor(),\n nodeY: tangelo.accessor(),\n width: 1000,\n height: 1000,\n dynamicLabels: false,\n data: null\n },\n\n _create: function () {\n this.colorScale = d3.scale.category10();\n\n this.force = d3.layout.force();\n\n this.svg = d3.select(this.element.get(0))\n .append(\"svg\");\n\n this._update();\n },\n\n _setOptions: function (options) {\n this._super(options);\n this._update();\n },\n\n _update: function () {\n var that = this,\n nodeIdMap = {};\n\n if (this.options.nodeX && !this.options.nodeX.undefined) {\n this.xScale = d3.scale.linear()\n .domain(d3.extent(this.options.data.nodes, this.options.nodeX))\n .range([50, this.options.width - 100]);\n }\n\n if (this.options.nodeY && !this.options.nodeY.undefined) {\n this.yScale = d3.scale.linear()\n .domain(d3.extent(this.options.data.nodes, this.options.nodeY))\n .range([this.options.height - 100, 50]);\n }\n\n this.force.linkDistance(this.options.linkDistance)\n .charge(this.options.nodeCharge)\n .size([this.options.width, this.options.height]);\n\n this.options.data.nodes.forEach(function (d, i) {\n nodeIdMap[that.options.nodeId(d, i)] = d;\n d.degree = 0;\n d.outgoing = [];\n d.incoming = [];\n });\n\n this.options.data.links.forEach(function (d, i) {\n d.source = nodeIdMap[that.options.linkSource(d, i)];\n d.target = nodeIdMap[that.options.linkTarget(d, i)];\n d.source.degree += 1;\n d.target.degree += 1;\n d.source.outgoing.push(d.target);\n d.target.incoming.push(d.source);\n });\n\n this.options.data.nodes.sort(function (a, b) {\n return d3.descending(a.degree, b.degree);\n });\n\n this.sizeScale = d3.scale.sqrt()\n .domain(d3.extent(this.options.data.nodes, that.options.nodeSize))\n .range([5, 15]);\n\n this.force.size([this.options.width, this.options.height])\n .nodes(this.options.data.nodes)\n .links(this.options.data.links)\n .start();\n\n this.link = this.svg.selectAll(\".link\")\n .data(this.options.data.links);\n\n this.link.enter()\n .append(\"line\")\n .classed(\"link\", true)\n .style(\"opacity\", this.options.linkOpacity)\n .style(\"stroke\", \"black\")\n .style(\"stroke-width\", 1);\n\n this.node = this.svg.selectAll(\".node\")\n .data(this.options.data.nodes);\n\n this.node.enter()\n .append(\"circle\")\n .classed(\"node\", true)\n .call(this.force.drag)\n .append(\"title\");\n\n this.node\n .attr(\"r\", function (d, i) {\n return that.sizeScale(that.options.nodeSize(d, i));\n })\n .style(\"fill\", function (d, i) {\n return that.colorScale(that.options.nodeColor(d, i));\n })\n .style(\"opacity\", this.options.nodeOpacity);\n\n this.node.selectAll(\"title\")\n .text(this.options.nodeLabel);\n\n if (!that.options.dynamicLabels) {\n this.label = this.svg.selectAll(\"text\")\n .data(this.options.data.nodes);\n\n this.label.enter().append(\"text\")\n .text(this.options.nodeLabel);\n }\n\n this.force.on(\"tick\", function () {\n that._tick(that);\n });\n\n this.force.resume();\n },\n\n _tick: function () {\n var that = this,\n nodeLabels;\n\n if (this.options.nodeX && !that.options.nodeX.undefined) {\n that.options.data.nodes.forEach(function (d, i) {\n d.x = that.xScale(that.options.nodeX(d, i));\n });\n }\n\n if (this.options.nodeY && !that.options.nodeY.undefined) {\n that.options.data.nodes.forEach(function (d, i) {\n d.y = that.yScale(that.options.nodeY(d, i));\n });\n }\n\n if (that.options.dynamicLabels) {\n nodeLabels = that._nodeLabels();\n\n that.svg.selectAll(\"text\").remove();\n that.svg.selectAll(\"text\")\n .data(nodeLabels)\n .enter().append(\"text\")\n .attr(\"x\", function (d) {\n return d.x;\n })\n .attr(\"y\", function (d) {\n return d.y;\n })\n .style(\"font-size\", function (d) {\n return d.count + 8;\n })\n .text(function (d) {\n return d.label;\n });\n } else {\n that.label.attr(\"x\", function (d) {\n return d.x;\n })\n .attr(\"y\", function (d) {\n return d.y;\n });\n }\n\n that.link.attr(\"x1\", function (d) {\n return d.source.x;\n })\n .attr(\"y1\", function (d) {\n return d.source.y;\n })\n .attr(\"x2\", function (d) {\n return d.target.x;\n })\n .attr(\"y2\", function (d) {\n return d.target.y;\n });\n\n that.node.attr(\"cx\", function (d) {\n return d.x;\n })\n .attr(\"cy\", function (d) {\n return d.y;\n });\n },\n\n // Compute a list of objects of the form:\n // {\n // count: 5 /* The number of nodes represented */\n // label: \"hi\" /* A reduced label representing all nodes */\n // x: 10\n // y: 20 /* The x,y location to draw the label */\n // }\n // This will be a reduced set of the original node data.\n _nodeLabels: function () {\n var that = this,\n nodeLabels = [];\n\n that.options.data.nodes.forEach(function (d) {\n d.visited = false;\n });\n\n // Walk the graph, collecting connected nodes\n // close to the starting node to collapse into\n // a single label.\n that.options.data.nodes.forEach(function (d, i) {\n var count = 0,\n labels = [],\n label;\n\n function visit(dd) {\n if (dd.visited) {\n return;\n }\n\n if (Math.abs(dd.x - d.x) < 50 &&\n Math.abs(dd.y - d.y) < 50) {\n count += 1;\n labels.push(that.options.nodeLabel(dd, i));\n dd.visited = true;\n dd.incoming.forEach(visit);\n dd.outgoing.forEach(visit);\n }\n }\n visit(d);\n\n if (count > 1) {\n label = that._reduceLabels(labels);\n nodeLabels.push({count: count, label: label, x: d.x, y: d.y});\n }\n });\n return nodeLabels;\n },\n\n // Reduce a collection of labels into a single label\n // using a frequent sequence of starting words.\n _reduceLabels: function (labels) {\n var label = \"\",\n prefixTree = {},\n word,\n maxCount,\n maxWord;\n\n // Build prefix tree\n labels.forEach(function (d) {\n var words, subtree = prefixTree;\n words = d.split(\" \");\n while (words.length > 0) {\n if (!subtree[words[0]]) {\n subtree[words[0]] = {count: 0, next: {}};\n }\n subtree[words[0]].count += 1;\n subtree = subtree[words[0]].next;\n words = words.slice(1);\n }\n });\n\n // Traverse prefix tree for most common prefix\n while (true) {\n maxCount = 0;\n maxWord = 0;\n for (word in prefixTree) {\n if (prefixTree.hasOwnProperty(word)) {\n if (prefixTree[word].count > maxCount) {\n maxCount = prefixTree[word].count;\n maxWord = word;\n }\n }\n }\n if (maxCount < 2) {\n break;\n }\n label += \" \" + maxWord;\n prefixTree = prefixTree[maxWord].next;\n }\n\n return label;\n }\n });\n}(window.tangelo, window.jQuery, window.d3));\n","(function ($, tangelo, vg) {\n \"use strict\";\n\n $.fn.scatterplot = function (spec) {\n var y = tangelo.accessor(spec.y),\n x = tangelo.accessor(spec.x),\n data = spec.data,\n dt = [],\n opt = {\n data: {table: dt},\n renderer: \"svg\",\n el: this[0]\n },\n that = this[0];\n\n data.forEach(function (row) {\n dt.push({\n x: _.isNumber(x(row)) ? x(row) : NaN,\n y: _.isNumber(y(row)) ? y(row) : NaN,\n orig: row\n });\n });\n\n function resize() {\n vg.parse.spec(\"static/built/plugins/flow/extras/scatterplot.json\", function (chart) {\n console.log($(that).width() + \",\" + $(that).height());\n if ($(that).width() > 0 && $(that).height() > 0) {\n chart(opt).width($(that).width() - 70).height($(that).height() - 70).update();\n }\n });\n }\n $(window).resize(resize);\n resize();\n\n return that;\n };\n\n}(window.jQuery, window.tangelo, window.vg));\n","(function (tangelo, $, d3) {\n \"use strict\";\n\n if (!($ && $.widget && d3)) {\n return;\n }\n\n $.widget(\"tangelo.scatterplotmatrix\", {\n options: {\n data: null,\n y: null\n },\n\n _create: function () {\n var div = $('
');\n this.element.append(div);\n this._update();\n },\n\n _update: function () {\n var matrix = d3.scatterplot.matrix(),\n data = this.options.data.rows,\n y = this.options.y.field;\n d3.select(\"#matrix\")\n .datum(data)\n .call(matrix, y);\n }\n });\n}(window.tangelo, window.jQuery, window.d3));\n","/*jslint browser: true, nomen: true */\n\n(function (_, tangelo, $, d3) {\n 'use strict';\n\n if (!(_ && $ && $.widget && d3)) {\n $.fn.nodelink = tangelo.unavailable({\n plugin: 'nodelink',\n required: ['Underscore', 'JQuery', 'JQuery UI', 'd3']\n });\n return;\n }\n\n $.widget('tangelo.spaceMap', {\n options: {\n data: [],\n constraints: [],\n linkDistance: 0,\n charge: -30,\n gravity: 0.1,\n label: tangelo.accessor({value: ''}),\n width: $(window).width(),\n height: $(window).height(),\n color: tangelo.accessor({value: '#999'}),\n size: tangelo.accessor({value: 5}),\n fixed: tangelo.accessor({value: false}),\n showPoints: true,\n showConstraints: false,\n showLinks: true,\n layout: true,\n click: null\n },\n\n _create: function () {\n var options,\n mapConfig,\n mapOptions,\n that = this;\n\n this.force = d3.layout.force();\n\n this.svg = d3.select(this.element.get(0)).append('svg')\n .attr('width', '100%')\n .attr('height', '100%');\n this.legends = this.svg.append('g');\n\n options = $.extend(true, {}, this.options);\n options.data = this.options.data;\n delete options.disabled;\n delete options.create;\n this._setOptions(options);\n this._update();\n },\n\n _update: function () {\n var that = this,\n dataNodes = [],\n colorScale,\n nodeEnter,\n oldNodes = this.nodes,\n i,\n constraintsOrdered,\n padding = 80,\n axis,\n xRange = [padding, that.options.width - padding],\n yRange = [that.options.height - padding, padding],\n linexConstraints,\n lineyConstraints,\n xTypes = ['x', 'ordinalx', 'xy'],\n yTypes = ['y', 'ordinaly', 'xy'],\n xConstraints = [],\n yConstraints = [];\n\n if (!this.svg) {\n return;\n }\n\n this.nodes = [];\n this.links = [];\n this.mapOpacity = 0;\n\n this.options.data.forEach(function (d) {\n var node = {data: d};\n that.nodes.push(node);\n dataNodes.push(node);\n });\n\n // Take care of spreading out linex and liney dimensions\n linexConstraints = this.options.constraints.filter(function (d) { return d.type === 'linex'; });\n lineyConstraints = this.options.constraints.filter(function (d) { return d.type === 'liney'; });\n linexConstraints.forEach(function (d, i) {\n d.yPosition = yRange[0] + (i + 1) / linexConstraints.length * (yRange[1] - yRange[0]);\n });\n lineyConstraints.forEach(function (d, i) {\n d.xPosition = xRange[0] + (i + 1) / lineyConstraints.length * (xRange[1] - xRange[0]);\n });\n\n // Take care of multiple x and y dimensions\n this.options.constraints.forEach(function (constraint) {\n if (!_.isNumber(constraint.strength)) {\n constraint.strength = 1;\n }\n if (xTypes.indexOf(constraint.type) !== -1) {\n xConstraints.push(constraint);\n }\n if (yTypes.indexOf(constraint.type) !== -1) {\n yConstraints.push(constraint);\n }\n });\n xConstraints.forEach(function (constraint, i) {\n var span = xRange[1] - xRange[0],\n num = xConstraints.length;\n constraint.xRange = [xRange[0] + i * span / num, xRange[0] + (i + 1) * span / num - padding];\n });\n yConstraints.forEach(function (constraint, i) {\n var span = yRange[1] - yRange[0],\n num = yConstraints.length;\n constraint.yRange = [yRange[0] + i * span / num, yRange[0] + (i + 1) * span / num + padding];\n });\n\n // Now turn x,y pairs into xy\n constraintsOrdered = [];\n if (xConstraints.length > 0 && yConstraints.length > 0) {\n dataNodes.forEach(function (node) {\n node.data._paired = {};\n });\n xConstraints.forEach(function (xConstraint, i) {\n yConstraints.forEach(function (yConstraint, j) {\n constraintsOrdered.push({\n type: 'xy',\n accessor: tangelo.accessor({field: '_paired._' + i + '_' + j}),\n xRange: xConstraint.xRange,\n xOrdinal: xConstraint.type === 'ordinalx',\n yRange: yConstraint.yRange,\n yOrdinal: yConstraint.type === 'ordinaly',\n strength: xConstraint.strength * yConstraint.strength,\n xConstraint: xConstraint,\n yConstraint: yConstraint\n });\n dataNodes.forEach(function (node) {\n var d = node.data;\n d._paired['_' + i + '_' + j] = {\n x: xConstraint.accessor(d),\n y: yConstraint.accessor(d)\n };\n });\n });\n });\n this.options.constraints.forEach(function (constraint) {\n if (constraint.type !== 'binx' &&\n constraint.type !== 'biny' &&\n xTypes.indexOf(constraint.type) === -1 &&\n yTypes.indexOf(constraint.type) === -1) {\n\n constraintsOrdered.push(constraint);\n }\n });\n } else {\n this.options.constraints.forEach(function (constraint) {\n if (constraint.type !== 'binx' && constraint.type !== 'biny') {\n constraintsOrdered.push(constraint);\n }\n });\n }\n\n // Put binx and biny last, since they modify constraint functions\n this.options.constraints.forEach(function (constraint) {\n if (constraint.type === 'binx' || constraint.type === 'biny') {\n constraintsOrdered.push(constraint);\n }\n });\n\n this.legends.selectAll('*').remove();\n\n function styleAxis(a) {\n a.style('shape-rendering', 'crispEdges');\n a.selectAll('line, path')\n .style('fill', 'none')\n .style('stroke', '#000');\n }\n\n constraintsOrdered.forEach(function (constraint, i) {\n var scale, xScale, yScale, ind1, ind2, distances, val1, val2;\n\n constraint.nodeMap = {};\n constraint.index = i;\n\n if (constraint.type === 'x') {\n scale = d3.scale.linear()\n .domain(d3.extent(that.options.data, constraint.accessor))\n .range(constraint.xRange);\n constraint.sizeScale = d3.scale.sqrt()\n .domain(d3.extent(that.options.data, constraint.accessor))\n .range([2, 20]);\n constraint.constrain = function (d) {\n d.x = scale(constraint.accessor(d.data));\n };\n axis = d3.svg.axis().orient('top').scale(scale);\n that.legends.append('g').attr('transform', 'translate(0,20)').call(axis).call(styleAxis);\n } else if (constraint.type === 'y') {\n scale = d3.scale.linear()\n .domain(d3.extent(that.options.data, constraint.accessor))\n .range(constraint.yRange);\n constraint.sizeScale = d3.scale.sqrt()\n .domain(d3.extent(that.options.data, constraint.accessor))\n .range([2, 20]);\n constraint.constrain = function (d) {\n d.y = scale(constraint.accessor(d.data));\n };\n axis = d3.svg.axis().orient('left').scale(scale);\n that.legends.append('g').attr('transform', 'translate(20,0)').call(axis).call(styleAxis);\n } else if (constraint.type === 'linex') {\n scale = d3.scale.linear()\n .domain(d3.extent(that.options.data, constraint.accessor))\n .range(xRange);\n constraint.sizeScale = d3.scale.sqrt()\n .domain(d3.extent(that.options.data, constraint.accessor))\n .range([2, 20]);\n constraint.constrain = function (d) {\n d.x = scale(constraint.accessor(d.data));\n d.y = constraint.yPosition;\n };\n axis = d3.svg.axis().orient('top').scale(scale);\n that.legends.append('g').attr('transform', 'translate(0,' + constraint.yPosition + ')').call(axis).call(styleAxis);\n } else if (constraint.type === 'liney') {\n scale = d3.scale.linear()\n .domain(d3.extent(that.options.data, constraint.accessor))\n .range(yRange);\n constraint.sizeScale = d3.scale.sqrt()\n .domain(d3.extent(that.options.data, constraint.accessor))\n .range([2, 20]);\n constraint.constrain = function (d) {\n d.x = constraint.xPosition;\n d.y = scale(constraint.accessor(d.data));\n };\n axis = d3.svg.axis().orient('left').scale(scale);\n that.legends.append('g').attr('transform', 'translate(' + constraint.xPosition + ',0)').call(axis).call(styleAxis);\n } else if (constraint.type === 'radius') {\n scale = d3.scale.linear()\n .domain(d3.extent(that.options.data, constraint.accessor))\n .range([0, Math.min(that.options.height / 2 - padding, that.options.width / 2 - padding)]);\n constraint.sizeScale = d3.scale.sqrt()\n .domain(d3.extent(that.options.data, constraint.accessor))\n .range([2, 20]);\n constraint.constrain = function (d) {\n var dx = d.x - that.options.width / 2,\n dy = d.y - that.options.height / 2,\n distance = Math.sqrt(dx * dx + dy * dy),\n r = scale(constraint.accessor(d.data));\n if (distance > 0) {\n d.x = r * dx / distance + that.options.width / 2;\n d.y = r * dy / distance + that.options.height / 2;\n } else {\n d.x = r + that.options.width / 2;\n d.y = that.options.height / 2;\n }\n };\n } else if (constraint.type === 'ordinalx') {\n scale = d3.scale.ordinal()\n .domain(that.options.data.map(constraint.accessor))\n .rangePoints(constraint.xRange, 1);\n constraint.sizeScale = d3.scale.ordinal()\n .domain(that.options.data.map(constraint.accessor))\n .rangePoints([2, 20], 1);\n constraint.constrain = function (d) {\n d.x = scale(constraint.accessor(d.data));\n };\n axis = d3.svg.axis().orient('top').scale(scale);\n that.legends.append('g').attr('transform', 'translate(0,20)').call(axis).call(styleAxis);\n } else if (constraint.type === 'ordinaly') {\n scale = d3.scale.ordinal()\n .domain(that.options.data.map(constraint.accessor))\n .rangePoints(constraint.yRange, 1);\n constraint.sizeScale = d3.scale.ordinal()\n .domain(that.options.data.map(constraint.accessor))\n .rangePoints([2, 20], 1);\n constraint.constrain = function (d) {\n d.y = scale(constraint.accessor(d.data));\n };\n axis = d3.svg.axis().orient('left').scale(scale);\n that.legends.append('g').attr('transform', 'translate(20,0)').call(axis).call(styleAxis);\n } else if (constraint.type === 'xy') {\n if (constraint.xOrdinal) {\n xScale = d3.scale.ordinal()\n .domain(that.options.data.map(function (d) {\n return constraint.accessor(d).x;\n }))\n .rangePoints(constraint.xRange, 1);\n } else {\n xScale = d3.scale.linear()\n .domain(d3.extent(that.options.data, function (d) {\n return constraint.accessor(d).x;\n }))\n .range(constraint.xRange);\n }\n if (constraint.yOrdinal) {\n yScale = d3.scale.ordinal()\n .domain(that.options.data.map(function (d) {\n return constraint.accessor(d).y;\n }))\n .rangePoints(constraint.yRange, 1);\n } else {\n yScale = d3.scale.linear()\n .domain(d3.extent(that.options.data, function (d) {\n return constraint.accessor(d).y;\n }))\n .range(constraint.yRange);\n }\n constraint.constrain = function (d) {\n d.x = xScale(constraint.accessor(d.data).x);\n d.y = yScale(constraint.accessor(d.data).y);\n };\n constraint.sizeScale = function (d) { return 4; };\n axis = d3.svg.axis().orient('top').scale(xScale);\n that.legends.append('g').attr('transform', 'translate(0,60)').call(axis).call(styleAxis);\n that.legends.append('text')\n .attr('x', (xScale.range()[xScale.range().length - 1] + xScale.range()[0]) / 2)\n .attr('y', 20)\n .text(constraint.xConstraint.name);\n axis = d3.svg.axis().orient('left').scale(yScale);\n that.legends.append('g').attr('transform', 'translate(60,0)').call(axis).call(styleAxis);\n that.legends.append('text')\n .attr('transform', 'translate(' + 20 + ',' + (yScale.range()[xScale.range().length - 1] + yScale.range()[0]) / 2 + ')rotate(-90)')\n .text(constraint.yConstraint.name);\n } else if (constraint.type === 'map') {\n that.mapOpacity = Math.max(that.mapOpacity, constraint.strength);\n constraint.constrain = function (d) {\n d.x = d.mapX;\n d.y = d.mapY;\n };\n } else if (constraint.type === 'link') {\n constraint.constrain = function () {};\n constraint.sizeScale = d3.scale.sqrt()\n .domain(d3.extent(that.options.data, constraint.accessor))\n .range([2, 20]);\n } else if (constraint.type === 'link-closest') {\n constraint.constrain = function () {};\n constraint.sizeScale = d3.scale.sqrt()\n .domain(d3.extent(that.options.data, constraint.accessor))\n .range([2, 20]);\n distances = [];\n for (ind1 = 0; ind1 < dataNodes.length; ind1 += 1) {\n val1 = constraint.accessor(dataNodes[ind1].data);\n for (ind2 = ind1 + 1; ind2 < dataNodes.length; ind2 += 1) {\n val2 = constraint.accessor(dataNodes[ind2].data);\n distances.push([ind1, ind2, Math.abs(val1 - val2)]);\n }\n }\n distances.sort(function (a, b) { return d3.ascending(a[2], b[2]); });\n for (ind1 = 0; ind1 < dataNodes.length; ind1 += 1) {\n that.links.push({source: dataNodes[distances[ind1][0]], target: dataNodes[distances[ind1][1]], constraint: constraint});\n }\n return;\n } else if (constraint.type === 'link-bin') {\n (function () {\n var index = [], clusters = [], clusterSize;\n constraint.constrain = function () {};\n constraint.sizeScale = d3.scale.sqrt()\n .domain(d3.extent(that.options.data, constraint.accessor))\n .range([2, 20]);\n\n dataNodes.forEach(function (d, i) {\n index.push({index: i, value: constraint.accessor(d.data)});\n });\n index.sort(function (a, b) { return d3.ascending(a.value, b.value); });\n clusterSize = Math.ceil(dataNodes.length / 10);\n index.forEach(function (d, i) {\n var cluster = Math.floor(i / clusterSize);\n while (cluster >= clusters.length) {\n clusters.push({sum: 0, count: 0});\n }\n clusters[cluster].sum += d.value;\n clusters[cluster].count += 1;\n });\n clusters.forEach(function (d, i) {\n var value = d.sum / d.count;\n constraint.nodeMap[i] = {value: value, constraintNode: true, constraint: constraint};\n that.nodes.push(constraint.nodeMap[i]);\n });\n index.forEach(function (d, i) {\n var clusterNode = constraint.nodeMap[Math.floor(i / clusterSize)];\n that.links.push({source: dataNodes[d.index], target: clusterNode, constraint: constraint});\n });\n }());\n return;\n } else if (constraint.type === 'binx') {\n scale = d3.scale.ordinal()\n .domain(d3.set(that.options.data.map(constraint.accessor)).values())\n .rangePoints(xRange, 1);\n constraint.constrain = function (d) {\n var newX = d.x;\n newX /= scale.domain().length;\n newX += scale(constraint.accessor(d.data)) - that.options.width / scale.domain().length / 2;\n d.x = constraint.strength * newX + (1 - constraint.strength) * d.x;\n };\n that.nodes.forEach(function (d) {\n var oldConstrain;\n if (d.constraintNode && (d.constraint.type === 'ordinalx' || d.constraint.type === 'x' || d.constraint.type === 'xy' || d.constraint.type === 'linex' || d.constraint.type === 'liney')) {\n oldConstrain = d.constraint.constrain;\n d.constraint = {type: d.constraint.type, accessor: d.constraint.accessor, strength: d.constraint.strength};\n d.constraint.constrain = function (d) {\n oldConstrain(d);\n constraint.constrain(d);\n };\n }\n });\n axis = d3.svg.axis().orient('top').scale(scale);\n that.legends.append('g').attr('transform', 'translate(0,20)').call(axis).call(styleAxis);\n return;\n } else if (constraint.type === 'biny') {\n scale = d3.scale.ordinal()\n .domain(d3.set(that.options.data.map(constraint.accessor)).values())\n .rangePoints(yRange, 1);\n constraint.constrain = function (d) {\n var newY = d.y;\n newY /= scale.domain().length;\n newY += scale(constraint.accessor(d.data)) - that.options.height / scale.domain().length / 2;\n d.y = constraint.strength * newY + (1 - constraint.strength) * d.y;\n };\n that.nodes.forEach(function (d) {\n var oldConstrain;\n if (d.constraintNode && (d.constraint.type === 'ordinaly' || d.constraint.type === 'y' || d.constraint.type === 'xy' || d.constraint.type === 'linex' || d.constraint.type === 'liney')) {\n oldConstrain = d.constraint.constrain;\n d.constraint = {type: d.constraint.type, accessor: d.constraint.accessor, strength: d.constraint.strength};\n d.constraint.constrain = function (d) {\n oldConstrain(d);\n constraint.constrain(d);\n };\n }\n });\n axis = d3.svg.axis().orient('left').scale(scale);\n that.legends.append('g').attr('transform', 'translate(20,0)').call(axis).call(styleAxis);\n return;\n }\n dataNodes.forEach(function (node) {\n var values = constraint.accessor(node.data),\n i,\n distances,\n value,\n constraintNode;\n if (!_.isArray(values)) {\n values = [values];\n }\n for (i = 0; i < values.length; i += 1) {\n value = values[i];\n if (!_.isString(value)) {\n value = JSON.stringify(value);\n }\n if (constraint.type === 'link') {\n if (!constraint.nodeMap[value]) {\n constraint.nodeMap[value] = {data: node.data, value: value, constraintNode: true, constraint: constraint};\n that.nodes.push(constraint.nodeMap[value]);\n }\n that.links.push({source: node, target: constraint.nodeMap[value], constraint: constraint});\n } else {\n constraintNode = {data: node.data, value: value, constraintNode: true, constraint: constraint};\n that.nodes.push(constraintNode);\n that.links.push({source: node, target: constraintNode, constraint: constraint});\n }\n }\n });\n });\n\n // Copy over x,y locations from old nodes\n if (oldNodes) {\n for (i = 0; i < this.nodes.length && i < oldNodes.length; i += 1) {\n this.nodes[i].x = oldNodes[i].x;\n this.nodes[i].y = oldNodes[i].y;\n }\n }\n\n // Set fixed flags\n this.nodes.forEach(function (d) {\n if (!d.constraintNode) {\n d.fixed = that.options.fixed(d.data);\n }\n });\n\n this.force\n .linkDistance(this.options.linkDistance)\n .linkStrength(function (link) {\n return link.constraint.strength;\n })\n .charge(this.options.charge)\n .gravity(this.options.gravity)\n .theta(0.1)\n .size([this.options.width, 0.75 * this.options.height])\n .nodes(this.nodes)\n .links(this.links)\n .start();\n\n this.svg.selectAll('.link').remove();\n this.svg.selectAll('.node').remove();\n\n this.link = this.svg.selectAll('.link')\n .data(this.links);\n\n colorScale = d3.scale.category10();\n\n this.link.enter()\n .append('line')\n .classed('link', true)\n .style('opacity', function (d) { return d.constraint.strength / 2; })\n .style('stroke', function (d) { return colorScale(d.constraint ? d.constraint.index : -1); })\n .style('stroke-width', that.options.showLinks ? 1 : 0);\n\n this.node = this.svg.selectAll('.node')\n .data(this.nodes);\n\n nodeEnter = this.node.enter()\n .append('g')\n .classed('node', true)\n .call(this.force.drag);\n nodeEnter.append('circle')\n .style('stroke', '#999')\n .style('stroke-width', 1);\n nodeEnter.append('text')\n .style('fill', 'black')\n .text(function (d) {\n if (d.constraint) {\n if (that.options.showConstraints === true && (\n d.constraint.type === 'link' ||\n d.constraint.type === 'link-bin' ||\n d.constraint.type === 'link-all' ||\n d.constraint.type === 'ordinalx' ||\n d.constraint.type === 'ordinaly')) {\n if (_.isNumber(d.value)) {\n console.log(d3.format('.2r')(d.value));\n return d.constraint.name + ' ' + d3.format('.2r')(d.value);\n }\n return d.value;\n }\n return '';\n }\n return that.options.label(d);\n });\n\n this.node\n .style('opacity', function (d) { return d.constraint ? d.constraint.strength : 1; })\n .on('click', function (d) {\n if (!d.constraint) {\n that.options.click(d.data);\n }\n });\n\n this.node.selectAll('circle')\n .attr('r', function (d) { return d.constraintNode ? (that.options.showConstraints ? d.constraint.sizeScale(d.value) : 0) : (that.options.showPoints ? that.options.size(d.data) : 0); })\n .style('fill', function (d) { return d.constraint ? colorScale(d.constraint.index) : that.options.color(d.data); });\n\n this.force.on('tick', function () { that._tick.call(that); });\n this.force.resume();\n },\n\n _tick: function () {\n var that = this;\n\n $(this.element.get(0)).find('img').css('opacity', this.mapOpacity);\n\n that.nodes.forEach(function (node) {\n if (node.constraint) {\n node.constraint.constrain(node);\n }\n });\n\n that.link\n // .filter(function (d) { return !that.options.fixed(d.source.data); })\n .attr('x1', function (d) { return d.source.x; })\n .attr('y1', function (d) { return d.source.y; });\n that.link\n // .filter(function (d) { return !that.options.fixed(d.target.data); })\n .attr('x2', function (d) { return d.target.x; })\n .attr('y2', function (d) { return d.target.y; });\n\n that.node\n // .filter(function (d) { return !that.options.fixed(d.data); })\n .attr('transform', function (d) { return 'translate(' + d.x + ',' + d.y + ')'; });\n }\n });\n}(window._, window.tangelo, window.jQuery, window.d3));\n","(function ($, d3) {\n \"use strict\";\n\n $.fn.string = function (options) {\n var data = options.data;\n d3.select(this.get(0)).append(\"pre\")\n .text(options.data);\n };\n\n}(window.$, window.d3));\n","(function (tangelo, $) {\n \"use strict\";\n\n if (!($ && $.widget)) {\n return;\n }\n\n $.widget(\"tangelo.table\", {\n options: {\n data: null\n },\n\n _create: function () {\n var that = this, saveButton;\n\n if ('saveChanges' in this.options && this.options.saveChanges) {\n\n // create editable table\n this.table = $('
');\n\n // create save button\n saveButton = $('');\n saveButton.click(function () {\n // grab the current table data and format it as CSV\n var csv = $(this.nextSibling).map(function () {\n return $(this).find('tr').map(function () {\n return $(this).find('th,td').map(function () {\n return $(this).html();\n }).get().join(',');\n }).get().join('\\n');\n }).get().join();\n\n // trigger the save event\n if ('saveChanges' in that.options && that.options.saveChanges) {\n that.options.saveChanges('data', csv);\n }\n\n // give the user some visual feedback\n $(this).removeClass(\"btn-primary\");\n $(this).text(\"Saved!\");\n $(this).addClass(\"btn-success\").delay(3000).queue(function (next) {\n $(this).removeClass(\"btn-success\");\n $(this).addClass(\"btn-primary\");\n $(this).text(\"Save\");\n next();\n });\n\n });\n this.element.append(saveButton);\n } else {\n // Read-only mode.\n this.table = $('
');\n }\n this.element.append(this.table);\n this._update();\n },\n\n _update: function () {\n var header = \"\",\n body = \"\",\n headerSet = false,\n fields = this.options.data.fields,\n rows = this.options.data.rows || this.options.data;\n\n this.table.empty();\n\n if (fields) {\n $.each(fields, function (index, value) {\n header += \"\" + value + \"\";\n });\n $.each(rows, function (index, value) {\n if (index >= 200) {\n return;\n }\n var row = \"\";\n $.each(fields, function (index, field) {\n row += \"\" + value[field] + \"\";\n });\n row += \"\";\n body += row;\n });\n } else {\n $.each(rows, function (key, value) {\n if (key >= 200) {\n return;\n }\n var row = \"\";\n $.each(value, function (key, value) {\n row += \"\" + value + \"\";\n if (!headerSet) {\n header += \"\" + key + \"\";\n }\n });\n headerSet = true;\n row += \"\";\n body += row;\n });\n }\n header += \"\";\n body += \"\";\n this.table.append(header);\n this.table.append(body);\n }\n });\n}(window.tangelo, window.jQuery));\n","(function ($, d3, tangelo, vg) {\n \"use strict\";\n\n $.fn.tablelink = function (spec) {\n var nodes = [],\n links = [],\n nodeMap = {},\n linkMap = {},\n source = tangelo.accessor({field: spec.source}),\n target = tangelo.accessor({field: spec.target}),\n that = this[0],\n filteredNodes = [],\n filteredNodeMap = {},\n filteredLinks = [];\n\n spec.data.rows.forEach(function (link) {\n var s = String(source(link)),\n t = String(target(link));\n if (!nodeMap[s]) {\n nodeMap[s] = {id: s, degree: 0, type: spec.source};\n nodes.push(nodeMap[s]);\n }\n if (!nodeMap[t]) {\n nodeMap[t] = {id: t, degree: 0, type: spec.target};\n nodes.push(nodeMap[t]);\n }\n nodeMap[s].degree += 1;\n nodeMap[t].degree += 1;\n if (!linkMap[s]) {\n linkMap[s] = {};\n }\n if (!linkMap[s][t]) {\n linkMap[s][t] = {source: s, target: t, count: 0};\n links.push(linkMap[s][t]);\n }\n linkMap[s][t].count += 1;\n });\n\n links.sort(function (a, b) { return d3.descending(a.count, b.count); });\n // filteredLinks = links.slice(0, 200);\n filteredLinks = links;\n\n filteredLinks.forEach(function (link) {\n if (!filteredNodeMap[link.source]) {\n filteredNodeMap[link.source] = nodeMap[link.source];\n filteredNodes.push(nodeMap[link.source]);\n }\n if (!filteredNodeMap[link.target]) {\n filteredNodeMap[link.target] = nodeMap[link.target];\n filteredNodes.push(nodeMap[link.target]);\n }\n });\n\n return $(that).nodelink({\n data: {nodes: filteredNodes, links: filteredLinks},\n nodeId: function (d) { return d.id; },\n nodeSize: function (d) { return d.degree; },\n nodeLabel: function (d) { return d.id; },\n nodeColor: function (d) { return d.type; },\n nodeCharge: -300,\n linkSource: function (d) { return d.source; },\n linkTarget: function (d) { return d.target; },\n linkOpacity: function (d) { return d.count; },\n linkDistance: 75\n });\n };\n\n}(window.jQuery, window.d3, window.tangelo, window.vg));\n","(function (tangelo, $) {\n \"use strict\";\n\n var app = {key: null};\n\n function stop_vtkweb() {\n if (app.key) {\n tangelo.vtkweb.terminate(app.key);\n app.key = null;\n }\n }\n\n // When the page is closed, make sure to close any processes\n // that were running.\n $(window).on('unload', stop_vtkweb);\n $(window).bind('beforeunload', stop_vtkweb);\n\n if (!($ && $.widget)) {\n return;\n }\n\n $.widget(\"tangelo.tanglegram\", {\n options: {\n tree1: null,\n tree2: null,\n table: null\n },\n\n _create: function () {\n this.div = $('
');\n this.element.append(this.div);\n this._update();\n },\n\n _update: function () {\n stop_vtkweb();\n this.div.empty();\n\n var width = $(window).width(), height = $(window).height(),\n args = \"--width \" + width;\n args += \" --height \" + height;\n args += \" --tree1 \" + this.options.tree1;\n args += \" --tree2 \" + this.options.tree2;\n args += \" --table \" + this.options.table;\n args += \" --baseURL \" + window.location.protocol + \"//\" + window.location.host;\n\n tangelo.vtkweb.launch({\n url: \"vtk_tanglegram.py\",\n argstring: args,\n viewport: \"#viewport\",\n callback: function (key, error) {\n if (error) {\n console.warn(\"error!\");\n console.warn(error);\n return;\n }\n app.key = key;\n }\n });\n }\n });\n}(window.tangelo, window.jQuery));\n","(function (tangelo, $, d3) {\n \"use strict\";\n\n function applyTransition(s, t) {\n if (t) {\n s = s.transition(t);\n }\n return s;\n }\n\n $.widget(\"tangelo.timeline\", {\n options: {\n data: [],\n x: tangelo.accessor({field: \"time\"}),\n y: tangelo.accessor({field: \"value\"}),\n margin: {\n top: 10,\n bottom: 30,\n left: 30,\n right: 30\n },\n transition: 0,\n width: null,\n height: null,\n xTicks: 10,\n yTicks: 10\n },\n\n _create: function () {\n this.svg = d3.select(this.element.get(0)).append(\"svg\").attr(\"class\", \"timeline\");\n this.main = this.svg.append(\"g\");\n this.plot = this.main.append(\"g\").attr(\"class\", \"plot\");\n\n this.xaxis = this.main.append(\"g\")\n .style(\"font-family\", \"sans-serif\")\n .style(\"font-size\", \"11px\");\n\n this.yaxis = this.main.append(\"g\")\n .style(\"font-family\", \"sans-serif\")\n .style(\"font-size\", \"11px\");\n\n this.path = this.plot.append(\"path\")\n .style(\"fill\", \"none\")\n .style(\"stroke\", \"steelblue\")\n .style(\"stroke-width\", \"1.5px\");\n\n this._x = null;\n this._y = null;\n $(window).resize(this._update.bind(this));\n this._update();\n },\n\n _setOptions: function (options) {\n this._super(options);\n this._update();\n },\n\n _update: function () {\n var that = this,\n axisPadding = 15,\n margin = this.options.margin,\n xAcc = tangelo.accessor(this.options.x),\n yAcc = tangelo.accessor(this.options.y),\n width = (this.options.width || this.element.width()) -\n margin.left - margin.right - axisPadding,\n height = (this.options.height || this.element.height()) -\n margin.top - margin.bottom - axisPadding,\n data = this.options.data,\n xaxis,\n yaxis,\n line;\n\n this._x = d3.time.scale()\n .domain(d3.extent(data, function (d) {\n return new Date(xAcc(d));\n }))\n .range([0, width])\n .nice();\n this._y = d3.scale.linear()\n .domain(d3.extent(data, function (d) {\n var val = yAcc(d);\n if (_.isNumber(val) && !isNaN(val)) {\n return val;\n }\n return undefined;\n }))\n .range([height, 0])\n .nice();\n\n xaxis = d3.svg.axis()\n .scale(this._x)\n .orient(\"bottom\");\n xaxis.ticks(this.options.xTicks);\n yaxis = d3.svg.axis()\n .scale(this._y)\n .orient(\"left\");\n yaxis.ticks(this.options.yTicks);\n\n line = d3.svg.line()\n .x(function (d) {\n return that._x(new Date(xAcc(d)));\n })\n .y(function (d) {\n return that._y(yAcc(d));\n })\n .defined(function (d) {\n var val = that._y(yAcc(d));\n return _.isNumber(val) && !isNaN(val);\n });\n\n // resize svg\n this.svg\n .attr(\"width\", width + margin.left + margin.right + axisPadding)\n .attr(\"height\", height + margin.top + margin.bottom + axisPadding);\n this.main\n .attr(\"transform\", \"translate(\" + (margin.left + axisPadding) + \",\" + margin.top + \")\");\n\n // generate axes\n applyTransition(this.xaxis, this.options.transition)\n .attr(\"transform\", \"translate(0,\" + height + \")\")\n .call(xaxis);\n applyTransition(this.yaxis, this.options.transition)\n .call(yaxis);\n\n function styleLine(selection) {\n selection\n .style(\"fill\", \"none\")\n .style(\"stroke\", \"black\")\n .style(\"stroke-width\", \"1px\")\n .style(\"shape-rendering\", \"crispEdges\");\n }\n\n this.xaxis.selectAll(\"path\").call(styleLine);\n this.xaxis.selectAll(\"line\").call(styleLine);\n this.yaxis.selectAll(\"path\").call(styleLine);\n this.yaxis.selectAll(\"line\").call(styleLine);\n\n // generate the plot\n applyTransition(this.path, this.options.transition)\n .attr(\"d\", line(this.options.data));\n },\n\n xScale: function () {\n return this._x;\n },\n\n yScale: function () {\n return this._y;\n }\n });\n}(window.tangelo, window.jQuery, window.d3));\n","(function ($, tangelo, vg) {\n \"use strict\";\n\n $.fn.timelineVega = function (spec) {\n var y,\n date = tangelo.accessor({field: spec.date}),\n data = spec.data,\n dt = [],\n opt = {\n data: {table: dt},\n renderer: \"svg\",\n el: this[0]\n },\n that = this[0];\n\n spec.y = _.isArray(spec.y) ? spec.y : [spec.y];\n y = [];\n spec.y.forEach(function (row) {\n var accessor = tangelo.accessor({field: row}, undefined);\n accessor.field = row.field;\n y.push(accessor);\n });\n data.rows.forEach(function (row) {\n y.forEach(function (yy) {\n dt.push({\n date: new Date(date(row)),\n group: yy.field,\n y: _.isNumber(yy(row)) ? yy(row) : NaN,\n orig: row\n });\n });\n });\n\n function resize() {\n vg.parse.spec(\"static/built/plugins/flow/extras/timeline.json\", function (chart) {\n console.log($(that).width() + \",\" + $(that).height());\n if ($(that).width() > 0 && $(that).height() > 0) {\n chart(opt).width($(that).width() - 70).height($(that).height() - 70).update();\n }\n });\n }\n $(window).resize(resize);\n resize();\n\n return that;\n };\n\n}(window.jQuery, window.tangelo, window.vg));\n","(function (tangelo, $) {\n \"use strict\";\n\n var app = {key: null};\n\n function stop_vtkweb() {\n if (app.key) {\n tangelo.vtkweb.terminate(app.key);\n app.key = null;\n }\n }\n\n // When the page is closed, make sure to close any processes\n // that were running.\n $(window).on('unload', stop_vtkweb);\n $(window).bind('beforeunload', stop_vtkweb);\n\n if (!($ && $.widget)) {\n return;\n }\n\n $.widget(\"tangelo.treeHeatmap\", {\n options: {\n table: null,\n tree: null\n },\n\n _create: function () {\n this.div = $('
');\n this.element.append(this.div);\n this._update();\n },\n\n _update: function () {\n stop_vtkweb();\n this.div.empty();\n\n var width = $(window).width(), height = $(window).height(),\n args = \"--width \" + width;\n args += \" --height \" + height;\n args += \" --table \" + this.options.table;\n args += \" --tree \" + this.options.tree;\n args += \" --baseURL \" + window.location.protocol + \"//\" + window.location.host;\n\n tangelo.vtkweb.launch({\n url: \"vtk_tree_heatmap.py\",\n argstring: args,\n viewport: \"#viewport\",\n callback: function (key, error) {\n if (error) {\n console.warn(\"error!\");\n console.warn(error);\n return;\n }\n app.key = key;\n }\n });\n }\n });\n}(window.tangelo, window.jQuery));\n","(function (flow, $, _, ace, Backbone, Blob, d3, FileReader, girder, tangelo, URL, workflow) {\n \"use strict\";\n\n // The view for selecting, running, and editing analyses\n flow.AnalysisManagementView = Backbone.View.extend({\n\n events: {\n 'click #show-script': function () {\n var hide = d3.select(\"#show-script\").classed(\"active\");\n flow.setDisplay(hide ? \"vis\" : \"editor\");\n this.editor.resize();\n d3.select(\"#show-script-icon\").classed(\"icon-eye\", hide);\n d3.select(\"#show-script-icon\").classed(\"icon-eye-close\", !hide);\n d3.select(\"#show-script-text\").text(hide ? \"Show script\" : \"Hide script\");\n\n if (this.workflowView) {\n this.workflowView.render();\n }\n },\n\n 'click #edit': function () {\n var edit = d3.select(\"#edit\").classed(\"active\");\n this.editor.setReadOnly(edit);\n this.editor.renderer.$cursorLayer.element.style.opacity = edit ? 0 : 1;\n if (this.workflowView) {\n this.workflowView.editable(!edit);\n }\n d3.selectAll(\".edit-controls\").classed(\"hidden\", edit);\n },\n\n 'change #mode': function () {\n if (this.analysis) {\n this.analysis.get('meta').analysis.mode = $(\"#mode\").val();\n this.editor.getSession().setMode(\"ace/mode/\" + this.analysis.get('meta').analysis.mode);\n }\n },\n\n 'click #save': function () {\n var info, curWorkflow;\n if (this.analysis) {\n $(\"#save\").addClass(\"disabled\");\n info = this.analysis.get('meta').analysis;\n info.name = this.$(\".analysis-edit-name\").val();\n info.description = this.$('#analysis-edit-description').val();\n if (info.mode === \"workflow\") {\n curWorkflow = this.workflowView.serialize();\n info.inputs = curWorkflow.inputs;\n info.outputs = curWorkflow.outputs;\n info.steps = curWorkflow.steps;\n info.connections = curWorkflow.connections;\n } else {\n info.script = this.editor.getValue().replace(/(?:\\r\\n|\\r)/g, '\\n');\n info.inputs = this.inputVariables.toJSON();\n info.outputs = this.outputVariables.toJSON();\n }\n\n this.analysis._sendMetadata(this.analysis.get('meta'), _.bind(function () {\n this.analysis.set({name: info.name}).once('g:saved', function () {\n $(\"#analysis\").change();\n $(\"#save\").removeClass(\"disabled\");\n this.editor.savedVersion = this.analysis.get('meta').analysis.script;\n flow.bootstrapAlert(\"success\", info.name + \" saved!\");\n }, this).once('g:error', function (error) {\n flow.bootstrapAlert(\"danger\", \"Failed to save \" + info.name + \": \" + error.statusText, 30);\n }).save();\n }, this), function (error) {\n flow.bootstrapAlert(\"danger\", \"Failed to save \" + info.name + \": \" + error, 30);\n });\n }\n },\n\n 'click .delete-analysis': function () {\n $('#confirm-delete').modal('show');\n },\n\n 'change #analysis': function () {\n this.changeAnalysis(this.analyses.get($(\"#analysis\").val()));\n },\n\n 'click #setup': function () {\n if (this.analysis) {\n this.analysisSetupView.model = this.analysis;\n this.analysisSetupView.render();\n }\n },\n\n 'click .add-input-variable': function () {\n var model = new Backbone.Model();\n this.inputVariableEditView.model = model;\n this.inputVariables.add(model);\n this.inputVariableEditView.render();\n },\n\n 'click .add-output-variable': function () {\n var model = new Backbone.Model();\n this.outputVariableEditView.model = model;\n this.outputVariables.add(model);\n this.outputVariableEditView.render();\n },\n\n 'click #analysis-new': function () {\n var analysis = {\n name: $(\"#analysis-name\").val(),\n inputs: [],\n outputs: [],\n mode: \"python\",\n script: \"\"\n };\n this.createAnalysis(analysis);\n },\n\n 'click #workflow-new': function () {\n var analysis = {\n name: $(\"#analysis-name\").val(),\n inputs: [],\n outputs: [],\n mode: \"workflow\",\n steps: [],\n connections: []\n };\n this.createAnalysis(analysis);\n },\n\n 'click #add-workstep': function () {\n var analysis = this.analyses.get($(\"#workstep\").val());\n this.workflowView.addStep(analysis.get(\"meta\").analysis, analysis.id, analysis.get(\"updated\"));\n },\n\n 'click #add-workvis': function () {\n var vis = this.visualizations.get($(\"#workvis\").val());\n this.workflowView.addStep(vis.get(\"meta\").visualization);\n },\n\n 'click #analysis-download': function () {\n var blob = new Blob([JSON.stringify(this.analysis.get('meta').analysis, null, \" \")]),\n filename = this.analysis.get('meta').analysis.name + '.json',\n anchor = $('');\n $(\"body\").append(anchor);\n anchor[0].click();\n },\n\n 'change #analysis-files': function () {\n var files = $('#analysis-files')[0].files;\n _.each(files, function (file) {\n this.upload(file);\n }, this);\n },\n\n 'click #analysis-upload': function () {\n $('#analysis-files').click();\n }\n\n },\n\n initialize: function (settings) {\n this.analysis = null;\n this.datasets = settings.datasets;\n this.visualizations = settings.visualizations;\n this.presets = settings.presets;\n this.analysisSetupView = new flow.AnalysisSetupView({\n el: $('#analysis-setup-dialog'),\n model: this.analysis,\n datasets: this.datasets,\n visualizations: this.visualizations,\n presets: this.presets\n });\n\n this.editor = ace.edit(\"code-editor\");\n this.editor.setTheme(\"ace/theme/chrome\");\n this.editor.setHighlightActiveLine(false);\n this.editor.setHighlightGutterLine(false);\n this.editor.setShowPrintMargin(false);\n this.editor.setReadOnly(true);\n this.editor.setFontSize(14);\n this.editor.renderer.$cursorLayer.element.style.opacity = 0;\n\n // 'input' instead of 'change' because it's behind a timeout so\n // it gets fired less frequently.\n this.editor.on('input', _.bind(function () {\n if (this.editor.savedVersion !== this.editor.getValue()) {\n $(\"#save\").addClass(\"btn-primary\");\n if (window.onbeforeunload === null) {\n window.onbeforeunload = function (e) {\n return \"You have unsaved changes in the editor.\";\n };\n }\n } else {\n window.onbeforeunload = null;\n $(\"#save\").removeClass(\"btn-primary\");\n }\n }, this));\n\n this.workflowView = null;\n\n this.analyses = settings.analyses;\n this.analysesView = new flow.ItemsView({el: this.$('#analysis'), itemView: flow.ItemOptionView, collection: this.analyses});\n this.analysesView.render();\n\n this.workstepsView = new flow.ItemsView({el: this.$('#workstep'), itemView: flow.ItemOptionView, collection: this.analyses});\n this.workstepsView.render();\n\n this.workvisView = new flow.ItemsView({el: this.$('#workvis'), itemView: flow.ItemOptionView, collection: this.visualizations});\n this.workvisView.render();\n\n this.inputVariables = new Backbone.Collection();\n this.outputVariables = new Backbone.Collection();\n this.inputVariableEditView = new flow.VariableEditView({el: $('#input-variable-edit-dialog'), mode: 'input'});\n this.inputVariablesView = new flow.VariablesView({\n el: this.$('.input-variables'),\n itemView: flow.VariableView,\n itemOptions: {editView: this.inputVariableEditView, collection: this.inputVariables},\n collection: this.inputVariables\n });\n this.outputVariableEditView = new flow.VariableEditView({el: $('#output-variable-edit-dialog'), mode: 'output'});\n this.outputVariablesView = new flow.VariablesView({\n el: this.$('.output-variables'),\n itemView: flow.VariableView,\n itemOptions: {editView: this.outputVariableEditView, collection: this.outputVariables},\n collection: this.outputVariables\n });\n\n // Once the first analysis is added, make it the active analysis\n this.analyses.on('add', _.bind(function (item) {\n if (!this.analysis) {\n this.changeAnalysis(item);\n }\n }, this));\n\n flow.events.on('flow:change-save-location', this.saveLocationChange, this);\n\n $('.really-delete-analysis').click(_.bind(function () {\n if (this.analysis) {\n this.analysis.once('g:deleted', function () {\n this.analyses.remove(this.analysis);\n // Trigger recreating the analysis UI\n $(\"#analysis\").change();\n $('#confirm-delete').modal('hide');\n }, this).destroy();\n }\n }, this));\n },\n\n changeAnalysis: function (analysis) {\n var checkCanEdit = function () {\n if (!this.analysis.get('collection') || this.analysis.get('collection').get('_accessLevel') > 0) {\n d3.select(\"#edit\").classed(\"hidden\", false);\n d3.selectAll(\".edit-controls\").classed(\"hidden\", !d3.select(\"#edit\").classed(\"active\"));\n }\n };\n\n if (this.analysis) {\n this.analysis.off('change:collection', null, this);\n }\n\n this.analysis = analysis;\n if (this.analysis) {\n this.$('.description-container').removeClass('hide');\n var desc = analysis.get('meta').analysis.description || '';\n this.$('#analysis-description').text(desc);\n this.$('#analysis-edit-description').val(desc);\n\n if (this.analysis.get('meta').analysis.mode === \"workflow\") {\n d3.select(\"#code-editor\").classed(\"hidden\", true);\n d3.select(\"#workflow-editor\").classed(\"hidden\", false);\n d3.selectAll(\".analysis-edit-controls\").classed(\"hidden\", true);\n d3.selectAll(\".workflow-edit-controls\").classed(\"hidden\", false);\n this.workflowView = new flow.WorkflowView({el: '#workflow-editor', model: new Backbone.Model($.extend(true, {}, this.analysis.get('meta').analysis))});\n this.workflowView.editable(d3.select(\"#edit\").classed(\"active\"));\n this.workflowView.render();\n } else {\n d3.select(\"#code-editor\").classed(\"hidden\", false);\n d3.select(\"#workflow-editor\").classed(\"hidden\", true);\n d3.selectAll(\".analysis-edit-controls\").classed(\"hidden\", false);\n d3.selectAll(\".workflow-edit-controls\").classed(\"hidden\", true);\n\n // So we can detect whether or not the text was changed.\n this.editor.savedVersion = this.analysis.get('meta').analysis.script;\n this.editor.setValue(this.analysis.get('meta').analysis.script);\n this.editor.clearSelection();\n this.$('#mode').val(this.analysis.get('meta').analysis.mode);\n this.$('#mode').change();\n this.inputVariables.set(this.analysis.get('meta').analysis.inputs);\n this.outputVariables.set(this.analysis.get('meta').analysis.outputs);\n }\n this.$('.analysis-edit-name').val(this.analysis.get('meta').analysis.name);\n\n this.analysis.on('change:collection', checkCanEdit, this);\n _.bind(checkCanEdit, this)();\n } else {\n this.editor.savedVersion = '';\n this.editor.setValue('');\n this.inputVariables.set([]);\n this.outputVariables.set([]);\n this.$('.description-container').addClass('hide');\n }\n },\n\n upload: function (file) {\n var reader = new FileReader();\n\n reader.onload = _.bind(function (e) {\n this.createAnalysis(JSON.parse(e.target.result));\n }, this);\n\n reader.readAsText(file);\n },\n\n createAnalysis: function (analysis) {\n var item = new girder.models.ItemModel({\n name: analysis.name,\n folderId: flow.saveLocation.get('analysisFolder')\n });\n\n item.once('g:saved', function () {\n item.addMetadata('analysis', analysis, _.bind(function () {\n item.id = item.get('_id');\n this.analyses.add(item);\n $(\"#analysis\").val(item.cid).change();\n $(\"#analysis-name\").val(\"\");\n }, this), function (error) {\n // TODO report error\n });\n }, this).once('g:error', function (error) {\n console.log(error);\n }).save();\n },\n\n saveLocationChange: function () {\n this.$('#new-analysis-form').toggleClass('hidden', flow.saveLocation === null);\n },\n\n render: function () {\n this.$('#analysis').select2({\n placeholder: 'Select an analysis',\n width: '100%'\n });\n }\n\n });\n}(window.flow, window.$, window._, window.ace, window.Backbone, window.Blob, window.d3, window.FileReader, window.girder, window.tangelo, window.URL, window.workflow));\n","(function (flow, $, _, Backbone, console, d3, girder) {\n \"use strict\";\n\n flow.AnalysisSetupView = Backbone.View.extend({\n\n events: {\n 'click .run': function () {\n var inputs, outputs = {};\n\n d3.select('.run')\n .classed('btn-primary', false)\n .classed('btn-default', true)\n .attr('disabled', true);\n\n $('#analysis-output').empty();\n\n inputs = this.inputsView.values();\n\n this.model.get('meta').analysis.outputs.forEach(_.bind(function (output) {\n var id = output.id || output.name;\n outputs[id] = {type: output.type, format: flow.webFormat[output.type]};\n }, this));\n this.taskBindings = {inputs: inputs, outputs: outputs};\n\n d3.select('.success-message').classed('hidden', true);\n d3.select('.error-message').classed('hidden', true);\n d3.select('.info-message').classed('hidden', false).text('Running analysis ...');\n\n flow.performAnalysis(this.model.get('_id'), inputs, outputs,\n _.bind(function (error, result) {\n if (error) {\n console.log(error);\n d3.select('.run')\n .classed('btn-primary', true)\n .classed('btn-default', false)\n .attr('disabled', null);\n d3.select('.success-message').classed('hidden', true);\n d3.select('.error-message').classed('hidden', false).text('Error: See console for details.');\n d3.select('.info-message').classed('hidden', true);\n return;\n }\n if (result.error) {\n d3.select('.run')\n .classed('btn-primary', true)\n .classed('btn-default', false)\n .attr('disabled', null);\n d3.select('.success-message').classed('hidden', true);\n d3.select('.error-message').classed('hidden', false).html('Error:\\n' + result.message);\n d3.select('.info-message').classed('hidden', true);\n return;\n }\n this.taskId = result._id;\n setTimeout(_.bind(this.checkTaskResult, this), 1000);\n\n // Stream console output from this analysis.\n this.eventSource = new window.EventSource(\n girder.apiRoot + '/item/' + this.model.get('_id') + '/flow/' +\n this.taskId + '/output?token=' +\n girder.cookie.find('girderToken'));\n\n this.eventSource.addEventListener('log', _.bind(function (e) {\n $('#analysis-output').text($('#analysis-output').text() + e.data);\n }, this));\n this.eventSource.addEventListener('eof', _.bind(function (e) {\n console.log('Shutting down stream.');\n this.eventSource.close();\n }, this));\n this.eventSource.addEventListener('past-end', _.bind(function (e) {\n console.error('Should already be closed!');\n console.log(e);\n }, this));\n }, this));\n },\n\n 'click #show-output': function () {\n var hide = d3.select(\"#show-output\").classed(\"active\");\n d3.select('#analysis-output').classed(\"hidden\", hide);\n d3.select(\"#show-output-icon\").classed(\"icon-eye\", hide);\n d3.select(\"#show-output-icon\").classed(\"icon-eye-close\", !hide);\n d3.select(\"#show-output-text\").text(hide ? \"Show output log\" : \"Hide output log\");\n },\n\n 'click #close-analysis-setup': function () {\n $('#analysis-output').empty();\n }\n },\n\n initialize: function (settings) {\n this.datasets = settings.datasets;\n this.visualizations = settings.visualizations;\n this.presets = settings.presets;\n this.inputsView = new flow.InputsView({\n collection: new Backbone.Collection(),\n idPrefix: 'input-',\n el: this.$('.inputs'),\n datasets: this.datasets\n });\n },\n\n render: function () {\n var analysis = this.model.get('meta').analysis;\n\n // Deep comparison\n if (!_.isEqual(this.inputsView.inputs, this.model.get('meta').analysis.inputs)) {\n // Deep copy\n this.inputsView.inputs = $.map(this.model.get('meta').analysis.inputs, function (value) {\n return $.extend(true, {}, value);\n });\n this.inputsView.collection.set([]);\n this.inputsView.collection.set(this.model.get('meta').analysis.inputs);\n }\n this.inputsView.render({\n showInputInfo: true\n });\n\n this.$('.analysis-setup-title').text(analysis.name);\n this.$('.analysis-setup-description').text(analysis.description);\n this.$('.analysis-setup-outputs-container').html(jade.templates.outputsDescription({\n analysis: analysis\n }));\n this.$('.success-message').addClass('hidden');\n this.$('.info-message').addClass('hidden');\n this.$('.error-message').addClass('hidden');\n this.$el.modal('show');\n return this;\n },\n\n checkTaskResult: function () {\n girder.restRequest({\n path: 'item/' + this.model.get('_id') + '/flow/' + this.taskId + '/status',\n error: null\n }).done(_.bind(function (result) {\n console.log(result.status);\n\n if (result.status === 'SUCCESS') {\n girder.restRequest({\n path: 'item/' + this.model.get('_id') + '/flow/' + this.taskId + '/result',\n error: null\n }).done(_.bind(function (data) {\n var result = data.result,\n outputMessage = '';\n d3.select('.run')\n .classed('btn-primary', true)\n .classed('btn-default', false)\n .attr('disabled', null);\n d3.select('.error-message').classed('hidden', true);\n d3.select('.info-message').classed('hidden', true);\n d3.select('.success-message').classed('hidden', false).html('Success! Produced the following outputs: ' + outputMessage);\n console.log(data);\n }, this)).error(_.bind(function (error) {\n // TODO report error\n }, this));\n } else if (result.status === 'FAILURE') {\n d3.select('.run')\n .classed('btn-primary', true)\n .classed('btn-default', false)\n .attr('disabled', null);\n console.log(result);\n d3.select('.success-message').classed('hidden', true);\n d3.select('.info-message').classed('hidden', true);\n d3.select('.error-message').classed('hidden', false).html('Operation Failed.\\n' + result.message);\n } else {\n setTimeout(_.bind(this.checkTaskResult, this), 1000);\n }\n }, this)).error(_.bind(function (error) {\n // TODO report error\n }, this));\n }\n });\n\n}(window.flow, window.$, window._, window.Backbone, window.console, window.d3, window.girder));\n","(function (flow, $, d3, Backbone) {\n \"use strict\";\n\n // View for displaying a collection that enables\n // setting it as active and/or the save location\n // for analyses and datasets\n flow.CollectionView = Backbone.View.extend({\n tagName: 'li',\n className: 'list-group-item',\n\n events: {\n 'click .save-location': function () {\n if (this.model.get('_accessLevel') > 0) {\n if (flow.saveLocation) {\n flow.saveLocation.set({saveLocation: false});\n }\n flow.saveLocation = this.model;\n flow.events.trigger('flow:change-save-location');\n this.model.set({active: true, saveLocation: true});\n }\n },\n 'click .active-state': function () {\n this.model.set({active: !this.model.get('active')});\n if (!this.model.get('active')) {\n this.model.set({saveLocation: false});\n if (flow.saveLocation === this.model) {\n flow.saveLocation = null;\n flow.events.trigger('flow:change-save-location');\n }\n }\n },\n 'click .delete': function () {\n girder.confirm({\n text: 'All data and analyses in this collection will be deleted forever. Continue?',\n yesText: 'Delete',\n confirmCallback: _.bind(function () {\n this.model.once('g:deleted', function () {\n this.model.set({active: false});\n this.model.set({saveLocation: false});\n if (flow.saveLocation === this.model) {\n flow.saveLocation = null;\n flow.events.trigger('flow:change-save-location');\n }\n this.collection.fetch({}, true);\n }, this).destroy();\n }, this)\n });\n }\n },\n\n initialize: function (settings) {\n this.collection = settings.collection;\n this.model.on('change', this.render, this);\n },\n\n render: function () {\n this.$el.html(jade.templates.collection({\n model: this.model\n }));\n return this;\n }\n });\n\n}(window.flow, window.$, window.d3, window.Backbone));\n","(function (flow) {\n \"use strict\";\n\n // View for displaying the set of collections and enabling\n // setting active collections and the save location\n flow.CollectionsView = flow.ItemsView.extend({\n add: function (item) {\n item.set('active', false);\n item.set('saveLocation', false);\n item.on('change:active', function () {\n this.trigger('flow:change-active', item);\n }, this);\n flow.ItemsView.prototype.add.apply(this, arguments);\n }\n });\n\n}(window.flow));\n","(function (flow, $, _, Backbone, Blob, d3, FileReader, girder, URL) {\n \"use strict\";\n\n // The view for managing data saving and downloading\n flow.DatasetManagementView = Backbone.View.extend({\n defaultViews: {\n table: \"table\",\n string: \"string\",\n tree: \"dendrogram\",\n image: \"image\",\n graph: \"graph\"\n },\n\n events: {\n 'change .datasets': 'updateDataset',\n\n 'click .dataset-quick-view': function () {\n var dataset = this.datasets.get(this.$('.datasets').val()),\n viewName = this.defaultViews[dataset.get('type')],\n vis = window.app.visualizationsView.visualizations.findWhere({name: viewName});\n $('#visualization-management .visualizations').val(vis.cid).change();\n $('#visualization-management .inputs select').first().val(dataset.cid);\n $('#visualization-management .show-visualization').click();\n },\n\n 'click a.resolve-data-type': function (e) {\n e.preventDefault();\n var dataset = this.dataset,\n extension = _.last(dataset.get('name').split('.')),\n typeFormats = flow.getTypeFormatsFromExtension(extension);\n\n flow.resolveTypeFormats(typeFormats, _.bind(this.resolveDataTypeFormat, this));\n },\n\n 'click .dataset-save': function () {\n var name = this.$('.dataset-name').val(),\n format = this.$('.dataset-format-select').val(),\n dataset = this.datasets.get(this.$('.datasets').val());\n flow.retrieveDatasetAsFormat(dataset, dataset.get('type'), format, false, _.bind(function (error, converted) {\n function fullyQualifiedFilename(name) {\n /**\n * Determine the extension needed to save the file. If it has no extension or the extension isn't allowed\n * for that data type/format, append the first allowable extension.\n **/\n var allowableExtensions = flow.getExtensionsFromTypeFormat(dataset.get('type'), format);\n\n if (name.indexOf('.') === -1 || !_.contains(allowableExtensions, _.last(name.split('.')))) {\n name += '.' + _.first(allowableExtensions);\n }\n\n return name;\n }\n\n var blob = new Blob([converted.get('data')]),\n file = flow.girderUpload(blob, fullyQualifiedFilename(name), flow.saveLocation.get('dataFolder'), false, function () {\n // Save type/format on the item for retrievel later\n // These get set directly on the dataset model\n var item = new girder.models.ItemModel({\n _id: file.get('itemId')\n }).fetch();\n\n // _.noop Can be undefined with girder/girder#1057\n item.addMetadata('flow', {\n type: dataset.get('type'),\n format: format\n }, _.noop, function () {\n window.flow.bootstrapAlert(\"danger\", \"Failed to set metadata on item\");\n });\n\n dataset.set({id: file.get('itemId')});\n });\n dataset.set({collection: flow.saveLocation});\n }, this));\n },\n\n 'click .dataset-download': function () {\n var name = this.$('.dataset-name').val(),\n format = this.$('.dataset-format-select').val(),\n dataset = this.datasets.get(this.$('.datasets').val());\n flow.retrieveDatasetAsFormat(dataset, dataset.get('type'), format, false, _.bind(function (error, converted) {\n if (error) {\n console.log(error.responseText);\n console.log(error.statusText);\n return;\n }\n var blob = new Blob([converted.get('data')]),\n extension = _.first(flow.getExtensionsFromTypeFormat(dataset.get('type'), format)),\n parts = name.split('.'),\n nameWithExtension = parts[parts.length - 1] === extension ? name : name + '.' + extension,\n anchor = $('');\n $('body').append(anchor);\n anchor[0].click();\n }, this));\n },\n\n 'click .dataset-delete': function () {\n var dataset = this.datasets.get(this.$('.datasets').val());\n if (!dataset) {\n return;\n }\n if (dataset.get('collection')) {\n dataset.once('g:deleted', function () {\n this.$('.dataset-name').val('');\n this.datasets.remove(dataset);\n this.$('.datasets').change();\n this.$('.dataset-name').val('');\n flow.bootstrapAlert(\"success\", dataset.get('name') + \" successfully deleted!\", 5);\n }, this).once('g:error', function () {\n flow.bootstrapAlert(\"danger\", \"You do not have permission to delete this item.\", 5);\n }).destroy();\n } else {\n this.datasets.remove(dataset);\n this.$('.datasets').change();\n this.$('.dataset-name').val('');\n }\n },\n\n 'change #g-files': function () {\n var files = $('#g-files')[0].files;\n _.each(files, function (file) {\n this.upload(file);\n }, this);\n },\n\n 'click #upload': function () {\n $('#g-files').click();\n },\n\n 'dragenter #upload': function (e) {\n e.stopPropagation();\n e.preventDefault();\n e.originalEvent.dataTransfer.dropEffect = 'copy';\n d3.select('#upload')\n .classed('btn-success', true)\n .classed('btn-primary', false)\n .html(' Drop files here');\n },\n\n 'dragleave #upload': function (e) {\n e.stopPropagation();\n e.preventDefault();\n d3.select('#upload')\n .classed('btn-success', false)\n .classed('btn-primary', true)\n .html(' Browse or drop files');\n },\n\n 'dragover #upload': function (e) {\n e.preventDefault();\n },\n\n 'drop #upload': function (e) {\n var files = e.originalEvent.dataTransfer.files;\n e.stopPropagation();\n e.preventDefault();\n d3.select('#upload')\n .classed('btn-success', false)\n .classed('btn-primary', true)\n .html(' Browse or drop files');\n _.each(files, function (file) {\n this.upload(file);\n }, this);\n }\n },\n\n initialize: function (settings) {\n this.datasets = settings.datasets;\n this.datasetsView = new flow.ItemsView({el: this.$('.datasets'), itemView: flow.ItemOptionView, collection: this.datasets});\n this.datasetsView.render();\n flow.events.on('flow:change-save-location', this.saveLocationChange, this);\n this.saveLocationChange();\n\n // Once the first dataset is added, make it the active dataset\n this.datasets.on('add', _.bind(function (dataset) {\n if (!this.dataset) {\n this.updateDataset();\n }\n }, this));\n },\n\n resolveDataTypeFormat: function (typeFormat) {\n typeFormat = _.omit(typeFormat, 'validator');\n var item = new girder.models.ItemModel({\n _id: this.dataset.get('_id')\n }).fetch();\n\n // Update the item metadata\n item.addMetadata('flow', typeFormat, _.bind(function () {\n this.dataset.set('meta', {\n flow: typeFormat\n });\n\n $('a.resolve-data-type').remove();\n this.updateDataset();\n }, this), function () {\n window.flow.bootstrapAlert(\"danger\", \"Failed to set metadata on item\");\n });\n },\n\n upload: function (file) {\n var reader = new FileReader();\n\n reader.onload = _.bind(function (e) {\n var dataset = {\n name: file.name,\n data: e.target.result\n },\n extension = _.last(file.name.split('.')),\n typeFormats = flow.getTypeFormatsFromExtension(extension);\n\n if (_.isEmpty(typeFormats)) {\n flow.bootstrapAlert(\"danger\", extension + \" files are unsupported.\", 15);\n } else {\n flow.resolveTypeFormats(typeFormats, _.bind(function (typeFormat) {\n _.extend(dataset, typeFormat);\n dataset = new Backbone.Model(dataset);\n this.datasets.add(dataset);\n flow.bootstrapAlert(\n \"success\",\n file.name + \"(\" + typeFormat.type + \") loaded successfully!\",\n 5);\n }, this));\n }\n }, this);\n\n reader.readAsText(file);\n },\n\n updateDataset: function () {\n var options, valid, format, canQuickView;\n this.dataset = this.datasets.get(this.$('.datasets').val());\n format = this.dataset.get(\"format\");\n\n if (this.dataset) {\n // If we don't know the format, don't let them download it\n valid = this.dataset.get('type') !== undefined && this.dataset.get('format') !== undefined;\n canQuickView = valid && _.has(this.defaultViews, this.dataset.get('type'));\n\n this.$('a.resolve-data-type').remove();\n this.$('.dataset-save-form').toggleClass('hidden', !valid);\n $('#dataset-management button.dataset-quick-view').attr('disabled', !canQuickView);\n\n // If it's valid then populate select boxes,\n // if it's not, attempt to auto-resolve (only 1 extension) and fill it in on the fly\n // otherwise, give the user a message forcing them to resolve (more than 1 applicable extension).\n if (valid) {\n this.$('.dataset-name').val(this.dataset.get('name'));\n $('.dataset-format-select').empty();\n _.each(flow.getFormatStringsFromType(this.dataset.get('type')), function (formatString) {\n var selected = (format == formatString) ? 'selected=\"selected\"' : '';\n $('.dataset-format-select')\n .append('');\n });\n } else {\n var typeFormats = flow.getTypeFormatsFromExtension(_.last(this.dataset.get('name').split('.')));\n\n if (_.size(typeFormats) === 1) {\n this.resolveDataTypeFormat(_.first(typeFormats));\n } else {\n this.$('.form-inline:last')\n .append('' + 'Flow can\\'t tell what type of data this is, resolve?' + '');\n }\n }\n }\n },\n\n saveLocationChange: function () {\n this.$('.dataset-save').toggleClass('hidden', flow.saveLocation === null);\n }\n });\n\n}(window.flow, window.$, window._, window.Backbone, window.Blob, window.d3, window.FileReader, window.girder, window.URL || window.webkitURL));\n","(function (flow, $, Backbone, d3, tangelo) {\n \"use strict\";\n\n // The view for a setting a single input to an analysis or\n // visualization based on its type\n flow.InputView = Backbone.View.extend({\n typeMetadata: {\n table: {inputMode: \"dataset\"},\n tree: {inputMode: \"dataset\"},\n image: {inputMode: \"dataset\"},\n r: {inputMode: \"dataset\"},\n string: {inputMode: \"line\"},\n number: {inputMode: \"line\"},\n json: {inputMode: \"line\"},\n geometry: {inputMode: \"dataset\"},\n accessor: {inputMode: \"line\"},\n array: {inputMode: \"array\"},\n coordinate: {inputMode: \"line\"},\n graph: {inputMode: \"dataset\"}\n },\n\n initialize: function (settings) {\n var div;\n\n if (this.model.get('constant')) {\n $(this.el).addClass('hidden');\n }\n\n this.datasets = settings.datasets;\n this.parentView = settings.parentView;\n this.idPrefix = settings.idPrefix || '';\n this.inputMode = this.model.get('inputMode');\n if (!this.inputMode) {\n this.inputMode = this.typeMetadata[this.model.get('type')].inputMode;\n }\n\n div = d3.select(this.el).append('div')\n .classed('form-group input-form-group', true);\n div.append('label')\n .attr('for', this.idPrefix + this.model.get('name'))\n .text(this.model.get('name')).append('span').classed('input-type-label', true);\n if (this.model.get('type') === 'array') {\n this.view = [];\n this.containers = [];\n this.addButton = div.append('button')\n .attr('class', 'indent btn btn-default');\n this.addButton.append('span').attr('class', 'glyphicon icon-plus');\n this.componentsList = d3.select(this.el).append('div').classed('indent', true);\n this.addButton.on('click', _.bind(function (d) {\n var container = this.componentsList.append('div');\n\n container.append('button').attr('class', 'btn btn-default')\n .on('click', _.bind(function (d) {\n var viewIndex = this.containers.indexOf(container);\n this.view.splice(viewIndex, 1);\n this.containers.splice(viewIndex, 1)[0].remove();\n }, this))\n .append('span').attr('class', 'glyphicon icon-trash');\n\n this.containers.push(container);\n this.view.push(new flow.InputsView({\n collection: new Backbone.Collection(this.model.get('components')),\n el: container[0],\n datasets: this.datasets,\n parentView: this\n }).render());\n }, this));\n } else if (this.model.get('type') === 'coordinate') {\n this.view = new flow.InputsView({\n collection: new Backbone.Collection([\n {\n name: \"latitude\",\n type: \"accessor\",\n domain: this.model.get('domain')\n },\n {\n name: \"longitude\",\n type: \"accessor\",\n domain: this.model.get('domain')\n }\n ]),\n el: div.node(),\n datasets: this.datasets,\n parentView: this\n }).render();\n } else if (this.inputMode === 'dataset') {\n this.view = new flow.ItemsView({\n el: $('').appendTo(div.node()),\n collection: this.domainArray,\n itemView: flow.StringOptionView\n });\n if (this.model.get('default')) {\n this.view.$el.val(this.model.get('default').data);\n }\n } else {\n this.view = div.append('input')\n .classed('form-control', true)\n .attr('type', 'text')\n .attr('id', this.idPrefix + this.model.get('name'));\n this.view = $(this.view.node());\n if (this.model.get('default')) {\n if (this.model.get('type') === 'json' && this.model.get('default').format === 'inline') {\n this.view.val(JSON.stringify(this.model.get('default').data));\n } else {\n this.view.val(this.model.get('default').data);\n }\n }\n }\n }\n div.append('div').attr('class', 'input-description help-block');\n },\n\n render: function () {\n return this;\n },\n\n showInputInfo: function () {\n var description = this.model.get('description');\n if (description) {\n this.$('.input-description').text(description);\n }\n this.$('.input-type-label').text('[' + this.model.get('type') + ']');\n }\n });\n\n}(window.flow, window.$, window.Backbone, window.d3, window.tangelo));\n","(function (flow, _, tangelo) {\n \"use strict\";\n\n // The view representing the form for a set of inputs to populate\n // for an analysis or visualization\n flow.InputsView = flow.ItemsView.extend({\n initialize: function (settings) {\n this.datasets = settings.datasets;\n this.parentView = settings.parentView;\n flow.ItemsView.prototype.initialize.apply(\n this,\n [\n _.extend(\n settings,\n {\n itemView: flow.InputView,\n itemOptions: {\n datasets: settings.datasets,\n parentView: this\n }\n }\n )\n ]\n );\n },\n\n render: function (opts) {\n opts = opts || {};\n var registerChangeEvents = _.bind(function (view) {\n // For fancy domains such as column names, we need changes in an input dataset\n // dropdown to trigger pulling the data in a certain format (like column headers)\n // as the domain of another input\n view.collection.forEach(_.bind(this.addChangeEvent, this));\n\n // Trigger a change event on each dataset dropdown so dependent inputs\n // can be initially populated\n view.collection.forEach(_.bind(view.triggerChangeEvent, view));\n\n // If there is a parent view, add change events up the chain\n if (view.parentView && view.parentView.parentView) {\n registerChangeEvents(view.parentView.parentView);\n }\n }, this);\n\n registerChangeEvents(this);\n\n if (opts.showInputInfo) {\n _.each(this.itemViews, function (itemView) {\n itemView.showInputInfo();\n });\n }\n return this;\n },\n\n addChangeEvent: function (input) {\n var referredInputView,\n findReferredInputView = _.bind(function (view) {\n var referredInput = view.collection.findWhere({id: input.get('domain').input});\n if (!referredInput) {\n referredInput = view.collection.findWhere({name: input.get('domain').input});\n }\n if (!referredInput && view.parentView && view.parentView.parentView) {\n return findReferredInputView(view.parentView.parentView);\n }\n if (!referredInput) {\n return;\n }\n return view.itemViews[referredInput.cid];\n }, this);\n\n if (input.get('type') === 'string' || input.get('type') === 'accessor' || input.get('type') === 'number' || input.get('type') === 'json') {\n if (input.get('domain') && (_.isObject(input.get('domain')) && !_.isArray(input.get('domain')))) {\n referredInputView = findReferredInputView(this);\n if (!referredInputView) {\n flow.bootstrapAlert(\"danger\", \"Error initializing input '\" + input.get('name') + \"'\", 30);\n return;\n }\n referredInputView.$el.change(_.bind(function () {\n var dataset = this.datasets.get(referredInputView.view.$el.val());\n flow.retrieveDatasetAsFormat(dataset, referredInputView.model.get('type'), input.get('domain').format, false, _.bind(function (error, dataset) {\n if (!this.itemViews[input.cid]) {\n return;\n }\n var value = this.itemViews[input.cid].view.$el.val();\n if (value === null && input.get('default')) {\n value = input.get('default').data;\n }\n dataset.get('data').sort();\n this.itemViews[input.cid].view.collection.set(dataset.get('data'));\n this.itemViews[input.cid].view.$el.val(value);\n }, this));\n }, this));\n }\n }\n },\n\n triggerChangeEvent: function (input) {\n if (this.itemViews[input.cid] && this.itemViews[input.cid].inputMode === \"dataset\") {\n this.itemViews[input.cid].$el.change();\n }\n },\n\n values: function () {\n var result = {};\n _.each(this.itemViews, _.bind(function (inputView) {\n var input = inputView.model,\n\n // Sometimes the view is a Backbone view, sometimes it is a plain control\n value = inputView.view.$el ? inputView.view.$el.val() : inputView.view.val(),\n dataset,\n id = input.get('id') || input.get('name');\n\n if (_.contains(['table',\n 'graph',\n 'tree',\n 'image',\n 'r'], input.get('type'))) {\n dataset = this.datasets.get(value);\n result[id] = dataset.toJSON();\n if (dataset.get('_id')) {\n result[id] = _.extend(result[id], flow.girderItemInput(dataset.get('_id')));\n }\n } else if (input.get('type') === 'string') {\n result[id] = {type: input.get('type'), format: 'text', data: value};\n } else if (input.get('type') === 'number') {\n result[id] = {type: input.get('type'), format: 'number', data: parseFloat(value)};\n }\n }, this));\n return result;\n }\n });\n\n}(window.flow, window._, window.tangelo));\n","(function (flow, Backbone) {\n \"use strict\";\n\n // An