Copy disabled (too large)
Download .txt
Showing preview only (54,945K chars total). Download the full file to get everything.
Repository: sgsinclair/Voyant
Branch: master
Commit: 4067dc15dbec
Files: 1397
Total size: 51.7 MB
Directory structure:
gitextract_bhf_y8o4/
├── .gitignore
├── LICENSE.txt
├── README.md
├── pom.xml
└── src/
└── main/
├── java/
│ └── org/
│ └── voyanttools/
│ └── voyant/
│ ├── FlexibleParametersFactory.java
│ ├── HttpParametersDecoder.java
│ ├── JSCacher.java
│ ├── Localizer.java
│ ├── SpyralAuth.java
│ ├── Trombone.java
│ ├── Voyant.java
│ └── XslTransformer.java
├── resources/
│ ├── .gitignore
│ ├── oauth.properties
│ └── org/
│ └── voyanttools/
│ └── voyant/
│ └── voyant-js.txt
└── webapp/
├── .gitignore
├── META-INF/
│ └── MANIFEST.MF
├── WEB-INF/
│ ├── jetty-web.xml
│ └── web.xml
├── app/
│ ├── Promise.js
│ ├── VoyantApp.js
│ ├── VoyantCorpusApp.js
│ ├── VoyantCorpusToolsetApp.js
│ ├── VoyantDefaultApp.js
│ ├── VoyantDocumentToolsetApp.js
│ ├── VoyantNotebookApp.js
│ ├── VoyantToolApp.js
│ ├── data/
│ │ ├── model/
│ │ │ ├── AnalysisToken.js
│ │ │ ├── Context.js
│ │ │ ├── Corpus.js
│ │ │ ├── CorpusCollocate.js
│ │ │ ├── CorpusFacet.js
│ │ │ ├── CorpusNgram.js
│ │ │ ├── CorpusTerm.js
│ │ │ ├── Dimension.js
│ │ │ ├── Document.js
│ │ │ ├── DocumentEntity.js
│ │ │ ├── DocumentQueryMatch.js
│ │ │ ├── DocumentTerm.js
│ │ │ ├── PrincipalComponent.js
│ │ │ ├── RelatedTerm.js
│ │ │ ├── StatisticalAnalysis.js
│ │ │ ├── TermCorrelation.js
│ │ │ └── Token.js
│ │ ├── store/
│ │ │ ├── CAAnalysis.js
│ │ │ ├── Contexts.js
│ │ │ ├── CorpusCollocates.js
│ │ │ ├── CorpusFacets.js
│ │ │ ├── CorpusNgrams.js
│ │ │ ├── CorpusTerms.js
│ │ │ ├── DocSimAnalysis.js
│ │ │ ├── DocumentEntities.js
│ │ │ ├── DocumentQueryMatches.js
│ │ │ ├── DocumentTerms.js
│ │ │ ├── Documents.js
│ │ │ ├── NotebookFacets.js
│ │ │ ├── PCAAnalysis.js
│ │ │ ├── RelatedTerms.js
│ │ │ ├── TSNEAnalysis.js
│ │ │ ├── TermCorrelations.js
│ │ │ ├── Tokens.js
│ │ │ └── VoyantStore.js
│ │ └── util/
│ │ ├── Geonames.js
│ │ ├── NetworkGraph.js
│ │ └── Table.js
│ ├── notebook/
│ │ ├── Catalogue.js
│ │ ├── Notebook.js
│ │ ├── Notebook.old.js
│ │ ├── editor/
│ │ │ ├── CodeEditor.js
│ │ │ ├── CodeEditorWrapper.js
│ │ │ ├── EditorWrapper.js
│ │ │ ├── TextEditor.js
│ │ │ ├── TextEditorWrapper.js
│ │ │ └── button/
│ │ │ ├── Add.js
│ │ │ ├── Counter.js
│ │ │ ├── Edit.js
│ │ │ ├── Export.js
│ │ │ ├── Metadata.js
│ │ │ ├── MoveDown.js
│ │ │ ├── MoveUp.js
│ │ │ ├── Movement.js
│ │ │ ├── Remove.js
│ │ │ ├── Run.js
│ │ │ ├── RunAll.js
│ │ │ └── RunUntil.js
│ │ ├── storage/
│ │ │ ├── github/
│ │ │ │ ├── FileSaver.js
│ │ │ │ ├── GitHubDialogs.js
│ │ │ │ ├── OctokitWrapper.js
│ │ │ │ └── ReposBrowser.js
│ │ │ └── voyant/
│ │ │ └── StorageDialogs.js
│ │ └── util/
│ │ ├── Embed.js
│ │ └── Show.js
│ ├── panel/
│ │ ├── Bubblelines.js
│ │ ├── BubblelinesSet.js
│ │ ├── Bubbles.js
│ │ ├── Catalogue.js
│ │ ├── Cirrus.js
│ │ ├── CollocatesGraph.js
│ │ ├── CollocatesSet.js
│ │ ├── Contexts.js
│ │ ├── CorpusCollocates.js
│ │ ├── CorpusCreator.js
│ │ ├── CorpusSet.js
│ │ ├── CorpusTermSummary.js
│ │ ├── CorpusTerms.js
│ │ ├── Correlations.js
│ │ ├── CustomSet.js
│ │ ├── DocumentTerms.js
│ │ ├── Documents.js
│ │ ├── DocumentsFinder.js
│ │ ├── DreamScape.js
│ │ ├── Embedder.js
│ │ ├── Fountain.js
│ │ ├── Knots.js
│ │ ├── Loom.js
│ │ ├── Mandala.js
│ │ ├── MicroOcp.js
│ │ ├── MicroSearch.js
│ │ ├── NoTool.js
│ │ ├── Panel.js
│ │ ├── Phrases.js
│ │ ├── Reader.js
│ │ ├── RezoViz.js
│ │ ├── ScatterPlot.js
│ │ ├── ScatterSet.js
│ │ ├── SimpleDocReader.js
│ │ ├── StreamGraph.js
│ │ ├── Subset.js
│ │ ├── Summary.js
│ │ ├── TermsBerry.js
│ │ ├── TermsRadio.js
│ │ ├── TextualArc.js
│ │ ├── TopicContexts.js
│ │ ├── Topics.js
│ │ ├── Trends.js
│ │ ├── Veliza.js
│ │ ├── Via.js
│ │ ├── VoyantFooter.js
│ │ ├── VoyantHeader.js
│ │ ├── VoyantTabPanel.js
│ │ ├── WordTree.js
│ │ └── WordWall.js
│ ├── util/
│ │ ├── Api.js
│ │ ├── Assignable.js
│ │ ├── Colors.js
│ │ ├── Deferrable.js
│ │ ├── DetailedError.js
│ │ ├── DiacriticsRemover.js
│ │ ├── Downloadable.js
│ │ ├── Localization.js
│ │ ├── ResponseError.js
│ │ ├── SparkLine.js
│ │ ├── Storage.js
│ │ ├── Toolable.js
│ │ ├── Transferable.js
│ │ └── Variants.js
│ └── widget/
│ ├── CategoriesBuilder.js
│ ├── CodeEditor.js
│ ├── ColorPaletteOption.js
│ ├── CorpusDocumentSelector.js
│ ├── CorpusSelector.js
│ ├── DocumentSelector.js
│ ├── DownloadFileFormat.js
│ ├── DownloadFilenameBuilder.js
│ ├── DownloadOptions.js
│ ├── Facet.js
│ ├── FontFamilyOption.js
│ ├── ListEditor.js
│ ├── LiveSearchGrid.js
│ ├── ProgressMonitor.js
│ ├── QuerySearchField.js
│ ├── ReaderGraph.js
│ ├── StopListOption.js
│ ├── TotalPropertyStatus.js
│ ├── VoyantChart.js
│ ├── VoyantNetworkGraph.js
│ └── VoyantTableTransform.js
├── builder/
│ ├── Builder.js
│ ├── TableGrid.js
│ ├── css/
│ │ └── builder.css
│ └── index.jsp
├── catalogue/
│ └── index.jsp
├── dream/
│ ├── dream.panel.js
│ └── index.jsp
├── dtoc/
│ ├── annotator/
│ │ ├── dtoc.annotator.auth.js
│ │ ├── dtoc.annotator.css
│ │ └── dtoc.annotator.old.js
│ ├── css/
│ │ ├── custom.css
│ │ ├── default.css
│ │ ├── dtc.css
│ │ └── tei.css
│ ├── dtoc.app.js
│ ├── dtoc.docmodel.js
│ ├── dtoc.index.js
│ ├── dtoc.markup.curator.js
│ ├── dtoc.markup.js
│ ├── dtoc.markup.loader.js
│ ├── dtoc.reader.iframe.js
│ ├── dtoc.reader.js
│ ├── dtoc.stats.js
│ ├── dtoc.toc.js
│ ├── dtoc.tooltip.js
│ ├── index.jsp
│ └── wgxpath/
│ └── wgxpath.install.js
├── index.jsp
├── jsduck.bat
├── jsduck.sh
├── microocp/
│ └── index.jsp
├── pblit/
│ └── index.jsp
├── resources/
│ ├── ace/
│ │ └── 1.4.12/
│ │ └── src-min-noconflict/
│ │ ├── ace.js
│ │ ├── ext-beautify.js
│ │ ├── ext-code_lens.js
│ │ ├── ext-elastic_tabstops_lite.js
│ │ ├── ext-emmet.js
│ │ ├── ext-error_marker.js
│ │ ├── ext-keybinding_menu.js
│ │ ├── ext-language_tools.js
│ │ ├── ext-linking.js
│ │ ├── ext-modelist.js
│ │ ├── ext-options.js
│ │ ├── ext-prompt.js
│ │ ├── ext-rtl.js
│ │ ├── ext-searchbox.js
│ │ ├── ext-settings_menu.js
│ │ ├── ext-spellcheck.js
│ │ ├── ext-split.js
│ │ ├── ext-static_highlight.js
│ │ ├── ext-statusbar.js
│ │ ├── ext-tern.js
│ │ ├── ext-textarea.js
│ │ ├── ext-themelist.js
│ │ ├── ext-whitespace.js
│ │ ├── keybinding-emacs.js
│ │ ├── keybinding-sublime.js
│ │ ├── keybinding-vim.js
│ │ ├── keybinding-vscode.js
│ │ ├── mode-abap.js
│ │ ├── mode-abc.js
│ │ ├── mode-actionscript.js
│ │ ├── mode-ada.js
│ │ ├── mode-alda.js
│ │ ├── mode-apache_conf.js
│ │ ├── mode-apex.js
│ │ ├── mode-applescript.js
│ │ ├── mode-aql.js
│ │ ├── mode-asciidoc.js
│ │ ├── mode-asl.js
│ │ ├── mode-assembly_x86.js
│ │ ├── mode-autohotkey.js
│ │ ├── mode-batchfile.js
│ │ ├── mode-c9search.js
│ │ ├── mode-c_cpp.js
│ │ ├── mode-cirru.js
│ │ ├── mode-clojure.js
│ │ ├── mode-cobol.js
│ │ ├── mode-coffee.js
│ │ ├── mode-coldfusion.js
│ │ ├── mode-crystal.js
│ │ ├── mode-csharp.js
│ │ ├── mode-csound_document.js
│ │ ├── mode-csound_orchestra.js
│ │ ├── mode-csound_score.js
│ │ ├── mode-csp.js
│ │ ├── mode-css.js
│ │ ├── mode-curly.js
│ │ ├── mode-d.js
│ │ ├── mode-dart.js
│ │ ├── mode-diff.js
│ │ ├── mode-django.js
│ │ ├── mode-dockerfile.js
│ │ ├── mode-dot.js
│ │ ├── mode-drools.js
│ │ ├── mode-edifact.js
│ │ ├── mode-eiffel.js
│ │ ├── mode-ejs.js
│ │ ├── mode-elixir.js
│ │ ├── mode-elm.js
│ │ ├── mode-erlang.js
│ │ ├── mode-forth.js
│ │ ├── mode-fortran.js
│ │ ├── mode-fsharp.js
│ │ ├── mode-fsl.js
│ │ ├── mode-ftl.js
│ │ ├── mode-gcode.js
│ │ ├── mode-gherkin.js
│ │ ├── mode-gitignore.js
│ │ ├── mode-glsl.js
│ │ ├── mode-gobstones.js
│ │ ├── mode-golang.js
│ │ ├── mode-graphqlschema.js
│ │ ├── mode-groovy.js
│ │ ├── mode-haml.js
│ │ ├── mode-handlebars.js
│ │ ├── mode-haskell.js
│ │ ├── mode-haskell_cabal.js
│ │ ├── mode-haxe.js
│ │ ├── mode-hjson.js
│ │ ├── mode-html.js
│ │ ├── mode-html_elixir.js
│ │ ├── mode-html_ruby.js
│ │ ├── mode-ini.js
│ │ ├── mode-io.js
│ │ ├── mode-jack.js
│ │ ├── mode-jade.js
│ │ ├── mode-java.js
│ │ ├── mode-javascript.js
│ │ ├── mode-json.js
│ │ ├── mode-json5.js
│ │ ├── mode-jsoniq.js
│ │ ├── mode-jsp.js
│ │ ├── mode-jssm.js
│ │ ├── mode-jsx.js
│ │ ├── mode-julia.js
│ │ ├── mode-kotlin.js
│ │ ├── mode-latex.js
│ │ ├── mode-less.js
│ │ ├── mode-liquid.js
│ │ ├── mode-lisp.js
│ │ ├── mode-livescript.js
│ │ ├── mode-logiql.js
│ │ ├── mode-logtalk.js
│ │ ├── mode-lsl.js
│ │ ├── mode-lua.js
│ │ ├── mode-luapage.js
│ │ ├── mode-lucene.js
│ │ ├── mode-makefile.js
│ │ ├── mode-markdown.js
│ │ ├── mode-mask.js
│ │ ├── mode-matlab.js
│ │ ├── mode-maze.js
│ │ ├── mode-mediawiki.js
│ │ ├── mode-mel.js
│ │ ├── mode-mixal.js
│ │ ├── mode-mushcode.js
│ │ ├── mode-mysql.js
│ │ ├── mode-nginx.js
│ │ ├── mode-nim.js
│ │ ├── mode-nix.js
│ │ ├── mode-nsis.js
│ │ ├── mode-nunjucks.js
│ │ ├── mode-objectivec.js
│ │ ├── mode-ocaml.js
│ │ ├── mode-pascal.js
│ │ ├── mode-perl.js
│ │ ├── mode-perl6.js
│ │ ├── mode-pgsql.js
│ │ ├── mode-php.js
│ │ ├── mode-php_laravel_blade.js
│ │ ├── mode-pig.js
│ │ ├── mode-plain_text.js
│ │ ├── mode-powershell.js
│ │ ├── mode-praat.js
│ │ ├── mode-prisma.js
│ │ ├── mode-prolog.js
│ │ ├── mode-properties.js
│ │ ├── mode-protobuf.js
│ │ ├── mode-puppet.js
│ │ ├── mode-python.js
│ │ ├── mode-qml.js
│ │ ├── mode-r.js
│ │ ├── mode-razor.js
│ │ ├── mode-rdoc.js
│ │ ├── mode-red.js
│ │ ├── mode-redshift.js
│ │ ├── mode-rhtml.js
│ │ ├── mode-rst.js
│ │ ├── mode-ruby.js
│ │ ├── mode-rust.js
│ │ ├── mode-sass.js
│ │ ├── mode-scad.js
│ │ ├── mode-scala.js
│ │ ├── mode-scheme.js
│ │ ├── mode-scss.js
│ │ ├── mode-sh.js
│ │ ├── mode-sjs.js
│ │ ├── mode-slim.js
│ │ ├── mode-smarty.js
│ │ ├── mode-snippets.js
│ │ ├── mode-soy_template.js
│ │ ├── mode-space.js
│ │ ├── mode-sparql.js
│ │ ├── mode-sql.js
│ │ ├── mode-sqlserver.js
│ │ ├── mode-stylus.js
│ │ ├── mode-svg.js
│ │ ├── mode-swift.js
│ │ ├── mode-tcl.js
│ │ ├── mode-terraform.js
│ │ ├── mode-tex.js
│ │ ├── mode-text.js
│ │ ├── mode-textile.js
│ │ ├── mode-toml.js
│ │ ├── mode-tsx.js
│ │ ├── mode-turtle.js
│ │ ├── mode-twig.js
│ │ ├── mode-typescript.js
│ │ ├── mode-vala.js
│ │ ├── mode-vbscript.js
│ │ ├── mode-velocity.js
│ │ ├── mode-verilog.js
│ │ ├── mode-vhdl.js
│ │ ├── mode-visualforce.js
│ │ ├── mode-wollok.js
│ │ ├── mode-xml.js
│ │ ├── mode-xquery.js
│ │ ├── mode-yaml.js
│ │ ├── mode-zeek.js
│ │ ├── snippets/
│ │ │ ├── abap.js
│ │ │ ├── abc.js
│ │ │ ├── actionscript.js
│ │ │ ├── ada.js
│ │ │ ├── alda.js
│ │ │ ├── apache_conf.js
│ │ │ ├── apex.js
│ │ │ ├── applescript.js
│ │ │ ├── aql.js
│ │ │ ├── asciidoc.js
│ │ │ ├── asl.js
│ │ │ ├── assembly_x86.js
│ │ │ ├── autohotkey.js
│ │ │ ├── batchfile.js
│ │ │ ├── c9search.js
│ │ │ ├── c_cpp.js
│ │ │ ├── cirru.js
│ │ │ ├── clojure.js
│ │ │ ├── cobol.js
│ │ │ ├── coffee.js
│ │ │ ├── coldfusion.js
│ │ │ ├── crystal.js
│ │ │ ├── csharp.js
│ │ │ ├── csound_document.js
│ │ │ ├── csound_orchestra.js
│ │ │ ├── csound_score.js
│ │ │ ├── csp.js
│ │ │ ├── css.js
│ │ │ ├── curly.js
│ │ │ ├── d.js
│ │ │ ├── dart.js
│ │ │ ├── diff.js
│ │ │ ├── django.js
│ │ │ ├── dockerfile.js
│ │ │ ├── dot.js
│ │ │ ├── drools.js
│ │ │ ├── edifact.js
│ │ │ ├── eiffel.js
│ │ │ ├── ejs.js
│ │ │ ├── elixir.js
│ │ │ ├── elm.js
│ │ │ ├── erlang.js
│ │ │ ├── forth.js
│ │ │ ├── fortran.js
│ │ │ ├── fsharp.js
│ │ │ ├── fsl.js
│ │ │ ├── ftl.js
│ │ │ ├── gcode.js
│ │ │ ├── gherkin.js
│ │ │ ├── gitignore.js
│ │ │ ├── glsl.js
│ │ │ ├── gobstones.js
│ │ │ ├── golang.js
│ │ │ ├── graphqlschema.js
│ │ │ ├── groovy.js
│ │ │ ├── haml.js
│ │ │ ├── handlebars.js
│ │ │ ├── haskell.js
│ │ │ ├── haskell_cabal.js
│ │ │ ├── haxe.js
│ │ │ ├── hjson.js
│ │ │ ├── html.js
│ │ │ ├── html_elixir.js
│ │ │ ├── html_ruby.js
│ │ │ ├── ini.js
│ │ │ ├── io.js
│ │ │ ├── jack.js
│ │ │ ├── jade.js
│ │ │ ├── java.js
│ │ │ ├── javascript.js
│ │ │ ├── json.js
│ │ │ ├── json5.js
│ │ │ ├── jsoniq.js
│ │ │ ├── jsp.js
│ │ │ ├── jssm.js
│ │ │ ├── jsx.js
│ │ │ ├── julia.js
│ │ │ ├── kotlin.js
│ │ │ ├── latex.js
│ │ │ ├── less.js
│ │ │ ├── liquid.js
│ │ │ ├── lisp.js
│ │ │ ├── livescript.js
│ │ │ ├── logiql.js
│ │ │ ├── logtalk.js
│ │ │ ├── lsl.js
│ │ │ ├── lua.js
│ │ │ ├── luapage.js
│ │ │ ├── lucene.js
│ │ │ ├── makefile.js
│ │ │ ├── markdown.js
│ │ │ ├── mask.js
│ │ │ ├── matlab.js
│ │ │ ├── maze.js
│ │ │ ├── mediawiki.js
│ │ │ ├── mel.js
│ │ │ ├── mixal.js
│ │ │ ├── mushcode.js
│ │ │ ├── mysql.js
│ │ │ ├── nginx.js
│ │ │ ├── nim.js
│ │ │ ├── nix.js
│ │ │ ├── nsis.js
│ │ │ ├── nunjucks.js
│ │ │ ├── objectivec.js
│ │ │ ├── ocaml.js
│ │ │ ├── pascal.js
│ │ │ ├── perl.js
│ │ │ ├── perl6.js
│ │ │ ├── pgsql.js
│ │ │ ├── php.js
│ │ │ ├── php_laravel_blade.js
│ │ │ ├── pig.js
│ │ │ ├── plain_text.js
│ │ │ ├── powershell.js
│ │ │ ├── praat.js
│ │ │ ├── prisma.js
│ │ │ ├── prolog.js
│ │ │ ├── properties.js
│ │ │ ├── protobuf.js
│ │ │ ├── puppet.js
│ │ │ ├── python.js
│ │ │ ├── qml.js
│ │ │ ├── r.js
│ │ │ ├── razor.js
│ │ │ ├── rdoc.js
│ │ │ ├── red.js
│ │ │ ├── redshift.js
│ │ │ ├── rhtml.js
│ │ │ ├── rst.js
│ │ │ ├── ruby.js
│ │ │ ├── rust.js
│ │ │ ├── sass.js
│ │ │ ├── scad.js
│ │ │ ├── scala.js
│ │ │ ├── scheme.js
│ │ │ ├── scss.js
│ │ │ ├── sh.js
│ │ │ ├── sjs.js
│ │ │ ├── slim.js
│ │ │ ├── smarty.js
│ │ │ ├── snippets.js
│ │ │ ├── soy_template.js
│ │ │ ├── space.js
│ │ │ ├── sparql.js
│ │ │ ├── sql.js
│ │ │ ├── sqlserver.js
│ │ │ ├── stylus.js
│ │ │ ├── svg.js
│ │ │ ├── swift.js
│ │ │ ├── tcl.js
│ │ │ ├── terraform.js
│ │ │ ├── tex.js
│ │ │ ├── text.js
│ │ │ ├── textile.js
│ │ │ ├── toml.js
│ │ │ ├── tsx.js
│ │ │ ├── turtle.js
│ │ │ ├── twig.js
│ │ │ ├── typescript.js
│ │ │ ├── vala.js
│ │ │ ├── vbscript.js
│ │ │ ├── velocity.js
│ │ │ ├── verilog.js
│ │ │ ├── vhdl.js
│ │ │ ├── visualforce.js
│ │ │ ├── wollok.js
│ │ │ ├── xml.js
│ │ │ ├── xquery.js
│ │ │ ├── yaml.js
│ │ │ └── zeek.js
│ │ ├── theme-ambiance.js
│ │ ├── theme-chaos.js
│ │ ├── theme-chrome.js
│ │ ├── theme-clouds.js
│ │ ├── theme-clouds_midnight.js
│ │ ├── theme-cobalt.js
│ │ ├── theme-crimson_editor.js
│ │ ├── theme-dawn.js
│ │ ├── theme-dracula.js
│ │ ├── theme-dreamweaver.js
│ │ ├── theme-eclipse.js
│ │ ├── theme-github.js
│ │ ├── theme-gob.js
│ │ ├── theme-gruvbox.js
│ │ ├── theme-idle_fingers.js
│ │ ├── theme-iplastic.js
│ │ ├── theme-katzenmilch.js
│ │ ├── theme-kr_theme.js
│ │ ├── theme-kuroir.js
│ │ ├── theme-merbivore.js
│ │ ├── theme-merbivore_soft.js
│ │ ├── theme-mono_industrial.js
│ │ ├── theme-monokai.js
│ │ ├── theme-nord_dark.js
│ │ ├── theme-pastel_on_dark.js
│ │ ├── theme-solarized_dark.js
│ │ ├── theme-solarized_light.js
│ │ ├── theme-sqlserver.js
│ │ ├── theme-terminal.js
│ │ ├── theme-textmate.js
│ │ ├── theme-tomorrow.js
│ │ ├── theme-tomorrow_night.js
│ │ ├── theme-tomorrow_night_blue.js
│ │ ├── theme-tomorrow_night_bright.js
│ │ ├── theme-tomorrow_night_eighties.js
│ │ ├── theme-twilight.js
│ │ ├── theme-vibrant_ink.js
│ │ ├── theme-xcode.js
│ │ ├── worker-base.js
│ │ ├── worker-coffee.js
│ │ ├── worker-css.js
│ │ ├── worker-html.js
│ │ ├── worker-javascript.js
│ │ ├── worker-json.js
│ │ ├── worker-lua.js
│ │ ├── worker-php.js
│ │ ├── worker-tern.js
│ │ ├── worker-xml.js
│ │ └── worker-xquery.js
│ ├── bubblelines/
│ │ └── Bubblelines.js
│ ├── cirrus/
│ │ ├── flash/
│ │ │ └── Cirrus.swf
│ │ └── html5/
│ │ ├── Cirrus.js
│ │ ├── Word.js
│ │ ├── WordController.js
│ │ └── d3.layout.cloud.js
│ ├── ckeditor/
│ │ └── ckeditor4.15.0/
│ │ ├── CHANGES.md
│ │ ├── LICENSE.md
│ │ ├── README.md
│ │ ├── adapters/
│ │ │ └── jquery.js
│ │ ├── build-config.js
│ │ ├── ckeditor.js
│ │ ├── config.js
│ │ ├── contents.css
│ │ ├── lang/
│ │ │ ├── af.js
│ │ │ ├── ar.js
│ │ │ ├── az.js
│ │ │ ├── bg.js
│ │ │ ├── bn.js
│ │ │ ├── bs.js
│ │ │ ├── ca.js
│ │ │ ├── cs.js
│ │ │ ├── cy.js
│ │ │ ├── da.js
│ │ │ ├── de-ch.js
│ │ │ ├── de.js
│ │ │ ├── el.js
│ │ │ ├── en-au.js
│ │ │ ├── en-ca.js
│ │ │ ├── en-gb.js
│ │ │ ├── en.js
│ │ │ ├── eo.js
│ │ │ ├── es-mx.js
│ │ │ ├── es.js
│ │ │ ├── et.js
│ │ │ ├── eu.js
│ │ │ ├── fa.js
│ │ │ ├── fi.js
│ │ │ ├── fo.js
│ │ │ ├── fr-ca.js
│ │ │ ├── fr.js
│ │ │ ├── gl.js
│ │ │ ├── gu.js
│ │ │ ├── he.js
│ │ │ ├── hi.js
│ │ │ ├── hr.js
│ │ │ ├── hu.js
│ │ │ ├── id.js
│ │ │ ├── is.js
│ │ │ ├── it.js
│ │ │ ├── ja.js
│ │ │ ├── ka.js
│ │ │ ├── km.js
│ │ │ ├── ko.js
│ │ │ ├── ku.js
│ │ │ ├── lt.js
│ │ │ ├── lv.js
│ │ │ ├── mk.js
│ │ │ ├── mn.js
│ │ │ ├── ms.js
│ │ │ ├── nb.js
│ │ │ ├── nl.js
│ │ │ ├── no.js
│ │ │ ├── oc.js
│ │ │ ├── pl.js
│ │ │ ├── pt-br.js
│ │ │ ├── pt.js
│ │ │ ├── ro.js
│ │ │ ├── ru.js
│ │ │ ├── si.js
│ │ │ ├── sk.js
│ │ │ ├── sl.js
│ │ │ ├── sq.js
│ │ │ ├── sr-latn.js
│ │ │ ├── sr.js
│ │ │ ├── sv.js
│ │ │ ├── th.js
│ │ │ ├── tr.js
│ │ │ ├── tt.js
│ │ │ ├── ug.js
│ │ │ ├── uk.js
│ │ │ ├── vi.js
│ │ │ ├── zh-cn.js
│ │ │ └── zh.js
│ │ ├── plugins/
│ │ │ ├── a11yhelp/
│ │ │ │ └── dialogs/
│ │ │ │ ├── a11yhelp.js
│ │ │ │ └── lang/
│ │ │ │ ├── _translationstatus.txt
│ │ │ │ ├── af.js
│ │ │ │ ├── ar.js
│ │ │ │ ├── az.js
│ │ │ │ ├── bg.js
│ │ │ │ ├── ca.js
│ │ │ │ ├── cs.js
│ │ │ │ ├── cy.js
│ │ │ │ ├── da.js
│ │ │ │ ├── de-ch.js
│ │ │ │ ├── de.js
│ │ │ │ ├── el.js
│ │ │ │ ├── en-au.js
│ │ │ │ ├── en-gb.js
│ │ │ │ ├── en.js
│ │ │ │ ├── eo.js
│ │ │ │ ├── es-mx.js
│ │ │ │ ├── es.js
│ │ │ │ ├── et.js
│ │ │ │ ├── eu.js
│ │ │ │ ├── fa.js
│ │ │ │ ├── fi.js
│ │ │ │ ├── fo.js
│ │ │ │ ├── fr-ca.js
│ │ │ │ ├── fr.js
│ │ │ │ ├── gl.js
│ │ │ │ ├── gu.js
│ │ │ │ ├── he.js
│ │ │ │ ├── hi.js
│ │ │ │ ├── hr.js
│ │ │ │ ├── hu.js
│ │ │ │ ├── id.js
│ │ │ │ ├── it.js
│ │ │ │ ├── ja.js
│ │ │ │ ├── km.js
│ │ │ │ ├── ko.js
│ │ │ │ ├── ku.js
│ │ │ │ ├── lt.js
│ │ │ │ ├── lv.js
│ │ │ │ ├── mk.js
│ │ │ │ ├── mn.js
│ │ │ │ ├── nb.js
│ │ │ │ ├── nl.js
│ │ │ │ ├── no.js
│ │ │ │ ├── oc.js
│ │ │ │ ├── pl.js
│ │ │ │ ├── pt-br.js
│ │ │ │ ├── pt.js
│ │ │ │ ├── ro.js
│ │ │ │ ├── ru.js
│ │ │ │ ├── si.js
│ │ │ │ ├── sk.js
│ │ │ │ ├── sl.js
│ │ │ │ ├── sq.js
│ │ │ │ ├── sr-latn.js
│ │ │ │ ├── sr.js
│ │ │ │ ├── sv.js
│ │ │ │ ├── th.js
│ │ │ │ ├── tr.js
│ │ │ │ ├── tt.js
│ │ │ │ ├── ug.js
│ │ │ │ ├── uk.js
│ │ │ │ ├── vi.js
│ │ │ │ ├── zh-cn.js
│ │ │ │ └── zh.js
│ │ │ ├── about/
│ │ │ │ └── dialogs/
│ │ │ │ └── about.js
│ │ │ ├── clipboard/
│ │ │ │ └── dialogs/
│ │ │ │ └── paste.js
│ │ │ ├── colorbutton/
│ │ │ │ ├── lang/
│ │ │ │ │ ├── af.js
│ │ │ │ │ ├── ar.js
│ │ │ │ │ ├── az.js
│ │ │ │ │ ├── bg.js
│ │ │ │ │ ├── bn.js
│ │ │ │ │ ├── bs.js
│ │ │ │ │ ├── ca.js
│ │ │ │ │ ├── cs.js
│ │ │ │ │ ├── cy.js
│ │ │ │ │ ├── da.js
│ │ │ │ │ ├── de-ch.js
│ │ │ │ │ ├── de.js
│ │ │ │ │ ├── el.js
│ │ │ │ │ ├── en-au.js
│ │ │ │ │ ├── en-ca.js
│ │ │ │ │ ├── en-gb.js
│ │ │ │ │ ├── en.js
│ │ │ │ │ ├── eo.js
│ │ │ │ │ ├── es-mx.js
│ │ │ │ │ ├── es.js
│ │ │ │ │ ├── et.js
│ │ │ │ │ ├── eu.js
│ │ │ │ │ ├── fa.js
│ │ │ │ │ ├── fi.js
│ │ │ │ │ ├── fo.js
│ │ │ │ │ ├── fr-ca.js
│ │ │ │ │ ├── fr.js
│ │ │ │ │ ├── gl.js
│ │ │ │ │ ├── gu.js
│ │ │ │ │ ├── he.js
│ │ │ │ │ ├── hi.js
│ │ │ │ │ ├── hr.js
│ │ │ │ │ ├── hu.js
│ │ │ │ │ ├── id.js
│ │ │ │ │ ├── is.js
│ │ │ │ │ ├── it.js
│ │ │ │ │ ├── ja.js
│ │ │ │ │ ├── ka.js
│ │ │ │ │ ├── km.js
│ │ │ │ │ ├── ko.js
│ │ │ │ │ ├── ku.js
│ │ │ │ │ ├── lt.js
│ │ │ │ │ ├── lv.js
│ │ │ │ │ ├── mk.js
│ │ │ │ │ ├── mn.js
│ │ │ │ │ ├── ms.js
│ │ │ │ │ ├── nb.js
│ │ │ │ │ ├── nl.js
│ │ │ │ │ ├── no.js
│ │ │ │ │ ├── oc.js
│ │ │ │ │ ├── pl.js
│ │ │ │ │ ├── pt-br.js
│ │ │ │ │ ├── pt.js
│ │ │ │ │ ├── ro.js
│ │ │ │ │ ├── ru.js
│ │ │ │ │ ├── si.js
│ │ │ │ │ ├── sk.js
│ │ │ │ │ ├── sl.js
│ │ │ │ │ ├── sq.js
│ │ │ │ │ ├── sr-latn.js
│ │ │ │ │ ├── sr.js
│ │ │ │ │ ├── sv.js
│ │ │ │ │ ├── th.js
│ │ │ │ │ ├── tr.js
│ │ │ │ │ ├── tt.js
│ │ │ │ │ ├── ug.js
│ │ │ │ │ ├── uk.js
│ │ │ │ │ ├── vi.js
│ │ │ │ │ ├── zh-cn.js
│ │ │ │ │ └── zh.js
│ │ │ │ └── plugin.js
│ │ │ ├── dialog/
│ │ │ │ ├── dialogDefinition.js
│ │ │ │ └── styles/
│ │ │ │ └── dialog.css
│ │ │ ├── image/
│ │ │ │ └── dialogs/
│ │ │ │ └── image.js
│ │ │ ├── justify/
│ │ │ │ └── plugin.js
│ │ │ ├── link/
│ │ │ │ └── dialogs/
│ │ │ │ ├── anchor.js
│ │ │ │ └── link.js
│ │ │ ├── panelbutton/
│ │ │ │ └── plugin.js
│ │ │ ├── pastefromgdocs/
│ │ │ │ └── filter/
│ │ │ │ └── default.js
│ │ │ ├── pastefromword/
│ │ │ │ └── filter/
│ │ │ │ └── default.js
│ │ │ ├── pastetools/
│ │ │ │ └── filter/
│ │ │ │ ├── common.js
│ │ │ │ └── image.js
│ │ │ ├── scayt/
│ │ │ │ ├── CHANGELOG.md
│ │ │ │ ├── LICENSE.md
│ │ │ │ ├── README.md
│ │ │ │ ├── dialogs/
│ │ │ │ │ ├── dialog.css
│ │ │ │ │ ├── options.js
│ │ │ │ │ └── toolbar.css
│ │ │ │ └── skins/
│ │ │ │ └── moono-lisa/
│ │ │ │ └── scayt.css
│ │ │ ├── sourcedialog/
│ │ │ │ ├── dialogs/
│ │ │ │ │ └── sourcedialog.js
│ │ │ │ ├── lang/
│ │ │ │ │ ├── af.js
│ │ │ │ │ ├── ar.js
│ │ │ │ │ ├── az.js
│ │ │ │ │ ├── bg.js
│ │ │ │ │ ├── bn.js
│ │ │ │ │ ├── bs.js
│ │ │ │ │ ├── ca.js
│ │ │ │ │ ├── cs.js
│ │ │ │ │ ├── cy.js
│ │ │ │ │ ├── da.js
│ │ │ │ │ ├── de-ch.js
│ │ │ │ │ ├── de.js
│ │ │ │ │ ├── el.js
│ │ │ │ │ ├── en-au.js
│ │ │ │ │ ├── en-ca.js
│ │ │ │ │ ├── en-gb.js
│ │ │ │ │ ├── en.js
│ │ │ │ │ ├── eo.js
│ │ │ │ │ ├── es-mx.js
│ │ │ │ │ ├── es.js
│ │ │ │ │ ├── et.js
│ │ │ │ │ ├── eu.js
│ │ │ │ │ ├── fa.js
│ │ │ │ │ ├── fi.js
│ │ │ │ │ ├── fo.js
│ │ │ │ │ ├── fr-ca.js
│ │ │ │ │ ├── fr.js
│ │ │ │ │ ├── gl.js
│ │ │ │ │ ├── gu.js
│ │ │ │ │ ├── he.js
│ │ │ │ │ ├── hi.js
│ │ │ │ │ ├── hr.js
│ │ │ │ │ ├── hu.js
│ │ │ │ │ ├── id.js
│ │ │ │ │ ├── is.js
│ │ │ │ │ ├── it.js
│ │ │ │ │ ├── ja.js
│ │ │ │ │ ├── ka.js
│ │ │ │ │ ├── km.js
│ │ │ │ │ ├── ko.js
│ │ │ │ │ ├── ku.js
│ │ │ │ │ ├── lt.js
│ │ │ │ │ ├── lv.js
│ │ │ │ │ ├── mn.js
│ │ │ │ │ ├── ms.js
│ │ │ │ │ ├── nb.js
│ │ │ │ │ ├── nl.js
│ │ │ │ │ ├── no.js
│ │ │ │ │ ├── oc.js
│ │ │ │ │ ├── pl.js
│ │ │ │ │ ├── pt-br.js
│ │ │ │ │ ├── pt.js
│ │ │ │ │ ├── ro.js
│ │ │ │ │ ├── ru.js
│ │ │ │ │ ├── si.js
│ │ │ │ │ ├── sk.js
│ │ │ │ │ ├── sl.js
│ │ │ │ │ ├── sq.js
│ │ │ │ │ ├── sr-latn.js
│ │ │ │ │ ├── sr.js
│ │ │ │ │ ├── sv.js
│ │ │ │ │ ├── th.js
│ │ │ │ │ ├── tr.js
│ │ │ │ │ ├── tt.js
│ │ │ │ │ ├── ug.js
│ │ │ │ │ ├── uk.js
│ │ │ │ │ ├── vi.js
│ │ │ │ │ ├── zh-cn.js
│ │ │ │ │ └── zh.js
│ │ │ │ ├── plugin.js
│ │ │ │ └── samples/
│ │ │ │ └── sourcedialog.html
│ │ │ ├── specialchar/
│ │ │ │ └── dialogs/
│ │ │ │ ├── lang/
│ │ │ │ │ ├── _translationstatus.txt
│ │ │ │ │ ├── af.js
│ │ │ │ │ ├── ar.js
│ │ │ │ │ ├── az.js
│ │ │ │ │ ├── bg.js
│ │ │ │ │ ├── ca.js
│ │ │ │ │ ├── cs.js
│ │ │ │ │ ├── cy.js
│ │ │ │ │ ├── da.js
│ │ │ │ │ ├── de-ch.js
│ │ │ │ │ ├── de.js
│ │ │ │ │ ├── el.js
│ │ │ │ │ ├── en-au.js
│ │ │ │ │ ├── en-ca.js
│ │ │ │ │ ├── en-gb.js
│ │ │ │ │ ├── en.js
│ │ │ │ │ ├── eo.js
│ │ │ │ │ ├── es-mx.js
│ │ │ │ │ ├── es.js
│ │ │ │ │ ├── et.js
│ │ │ │ │ ├── eu.js
│ │ │ │ │ ├── fa.js
│ │ │ │ │ ├── fi.js
│ │ │ │ │ ├── fr-ca.js
│ │ │ │ │ ├── fr.js
│ │ │ │ │ ├── gl.js
│ │ │ │ │ ├── he.js
│ │ │ │ │ ├── hr.js
│ │ │ │ │ ├── hu.js
│ │ │ │ │ ├── id.js
│ │ │ │ │ ├── it.js
│ │ │ │ │ ├── ja.js
│ │ │ │ │ ├── km.js
│ │ │ │ │ ├── ko.js
│ │ │ │ │ ├── ku.js
│ │ │ │ │ ├── lt.js
│ │ │ │ │ ├── lv.js
│ │ │ │ │ ├── nb.js
│ │ │ │ │ ├── nl.js
│ │ │ │ │ ├── no.js
│ │ │ │ │ ├── oc.js
│ │ │ │ │ ├── pl.js
│ │ │ │ │ ├── pt-br.js
│ │ │ │ │ ├── pt.js
│ │ │ │ │ ├── ro.js
│ │ │ │ │ ├── ru.js
│ │ │ │ │ ├── si.js
│ │ │ │ │ ├── sk.js
│ │ │ │ │ ├── sl.js
│ │ │ │ │ ├── sq.js
│ │ │ │ │ ├── sr-latn.js
│ │ │ │ │ ├── sr.js
│ │ │ │ │ ├── sv.js
│ │ │ │ │ ├── th.js
│ │ │ │ │ ├── tr.js
│ │ │ │ │ ├── tt.js
│ │ │ │ │ ├── ug.js
│ │ │ │ │ ├── uk.js
│ │ │ │ │ ├── vi.js
│ │ │ │ │ ├── zh-cn.js
│ │ │ │ │ └── zh.js
│ │ │ │ └── specialchar.js
│ │ │ ├── stopediting/
│ │ │ │ ├── lang/
│ │ │ │ │ ├── en.js
│ │ │ │ │ └── fr.js
│ │ │ │ └── plugin.js
│ │ │ ├── table/
│ │ │ │ └── dialogs/
│ │ │ │ └── table.js
│ │ │ ├── tableselection/
│ │ │ │ └── styles/
│ │ │ │ └── tableselection.css
│ │ │ ├── tabletools/
│ │ │ │ └── dialogs/
│ │ │ │ └── tableCell.js
│ │ │ └── wsc/
│ │ │ ├── LICENSE.md
│ │ │ ├── README.md
│ │ │ ├── dialogs/
│ │ │ │ ├── ciframe.html
│ │ │ │ ├── tmpFrameset.html
│ │ │ │ ├── wsc.css
│ │ │ │ ├── wsc.js
│ │ │ │ └── wsc_ie.js
│ │ │ └── skins/
│ │ │ └── moono-lisa/
│ │ │ └── wsc.css
│ │ ├── samples/
│ │ │ ├── css/
│ │ │ │ └── samples.css
│ │ │ ├── index.html
│ │ │ ├── js/
│ │ │ │ ├── sample.js
│ │ │ │ └── sf.js
│ │ │ ├── old/
│ │ │ │ ├── ajax.html
│ │ │ │ ├── api.html
│ │ │ │ ├── appendto.html
│ │ │ │ ├── assets/
│ │ │ │ │ ├── outputxhtml/
│ │ │ │ │ │ └── outputxhtml.css
│ │ │ │ │ ├── posteddata.php
│ │ │ │ │ └── uilanguages/
│ │ │ │ │ └── languages.js
│ │ │ │ ├── datafiltering.html
│ │ │ │ ├── dialog/
│ │ │ │ │ ├── assets/
│ │ │ │ │ │ └── my_dialog.js
│ │ │ │ │ └── dialog.html
│ │ │ │ ├── divreplace.html
│ │ │ │ ├── enterkey/
│ │ │ │ │ └── enterkey.html
│ │ │ │ ├── htmlwriter/
│ │ │ │ │ ├── assets/
│ │ │ │ │ │ └── outputforflash/
│ │ │ │ │ │ ├── outputforflash.fla
│ │ │ │ │ │ ├── outputforflash.swf
│ │ │ │ │ │ └── swfobject.js
│ │ │ │ │ ├── outputforflash.html
│ │ │ │ │ └── outputhtml.html
│ │ │ │ ├── index.html
│ │ │ │ ├── inlineall.html
│ │ │ │ ├── inlinebycode.html
│ │ │ │ ├── inlinetextarea.html
│ │ │ │ ├── jquery.html
│ │ │ │ ├── magicline/
│ │ │ │ │ └── magicline.html
│ │ │ │ ├── readonly.html
│ │ │ │ ├── replacebyclass.html
│ │ │ │ ├── replacebycode.html
│ │ │ │ ├── sample.css
│ │ │ │ ├── sample.js
│ │ │ │ ├── sample_posteddata.php
│ │ │ │ ├── tabindex.html
│ │ │ │ ├── toolbar/
│ │ │ │ │ └── toolbar.html
│ │ │ │ ├── uicolor.html
│ │ │ │ ├── uilanguages.html
│ │ │ │ ├── wysiwygarea/
│ │ │ │ │ └── fullpage.html
│ │ │ │ └── xhtmlstyle.html
│ │ │ └── toolbarconfigurator/
│ │ │ ├── css/
│ │ │ │ └── fontello.css
│ │ │ ├── font/
│ │ │ │ ├── LICENSE.txt
│ │ │ │ └── config.json
│ │ │ ├── index.html
│ │ │ ├── js/
│ │ │ │ ├── abstracttoolbarmodifier.js
│ │ │ │ ├── fulltoolbareditor.js
│ │ │ │ ├── toolbarmodifier.js
│ │ │ │ └── toolbartextmodifier.js
│ │ │ └── lib/
│ │ │ └── codemirror/
│ │ │ ├── LICENSE
│ │ │ ├── codemirror.css
│ │ │ ├── codemirror.js
│ │ │ ├── javascript.js
│ │ │ ├── neo.css
│ │ │ ├── show-hint.css
│ │ │ └── show-hint.js
│ │ ├── skins/
│ │ │ └── moono-lisa/
│ │ │ ├── dialog.css
│ │ │ ├── dialog_ie.css
│ │ │ ├── dialog_ie8.css
│ │ │ ├── dialog_iequirks.css
│ │ │ ├── editor.css
│ │ │ ├── editor_gecko.css
│ │ │ ├── editor_ie.css
│ │ │ ├── editor_ie8.css
│ │ │ ├── editor_iequirks.css
│ │ │ └── readme.md
│ │ ├── styles.js
│ │ └── vendor/
│ │ └── promise.js
│ ├── css/
│ │ ├── fonts/
│ │ │ └── lato/
│ │ │ └── OFL.txt
│ │ └── styles.css
│ ├── d3/
│ │ ├── WordWallWorker.js
│ │ ├── current/
│ │ │ └── d3.js
│ │ └── fisheye.js
│ ├── doubletree/
│ │ ├── DoubleTree.js
│ │ ├── Trie.js
│ │ └── doubletree.css
│ ├── dreamscape/
│ │ ├── arc.js
│ │ ├── cities3.json
│ │ ├── cities4.json
│ │ └── datafile.json
│ ├── ext/
│ │ ├── 6.2.0/
│ │ │ ├── LICENSE
│ │ │ ├── charts-all-rtl.css
│ │ │ ├── charts-all.css
│ │ │ ├── charts.js
│ │ │ ├── examples/
│ │ │ │ └── style.css
│ │ │ ├── ext-all-rtl.js
│ │ │ ├── ext-all.js
│ │ │ ├── theme-crisp/
│ │ │ │ ├── resources/
│ │ │ │ │ ├── Readme.md
│ │ │ │ │ ├── ext/
│ │ │ │ │ │ └── ext-watermark/
│ │ │ │ │ │ ├── Read Me.txt
│ │ │ │ │ │ ├── demo-files/
│ │ │ │ │ │ │ ├── demo.css
│ │ │ │ │ │ │ └── demo.js
│ │ │ │ │ │ ├── demo.html
│ │ │ │ │ │ ├── selection.json
│ │ │ │ │ │ └── style.css
│ │ │ │ │ ├── theme-base/
│ │ │ │ │ │ └── Readme.md
│ │ │ │ │ ├── theme-crisp-all-rtl.css
│ │ │ │ │ ├── theme-crisp-all-rtl_1.css
│ │ │ │ │ ├── theme-crisp-all-rtl_2.css
│ │ │ │ │ ├── theme-crisp-all.css
│ │ │ │ │ ├── theme-crisp-all_1.css
│ │ │ │ │ ├── theme-crisp-all_2.css
│ │ │ │ │ ├── theme-neptune/
│ │ │ │ │ │ └── Readme.md
│ │ │ │ │ ├── theme-neutral/
│ │ │ │ │ │ └── Readme.md
│ │ │ │ │ ├── ux-all-debug.css
│ │ │ │ │ └── ux-all-rtl-debug.css
│ │ │ │ ├── theme-crisp-debug.js
│ │ │ │ └── theme-crisp.js
│ │ │ └── ux.js
│ │ └── current-overrides.js
│ ├── fontawesome/
│ │ └── 4.4.0/
│ │ ├── font-awesome-all-debug.css
│ │ ├── font-awesome-all-rtl-debug.css
│ │ ├── font-awesome-all-rtl.css
│ │ ├── font-awesome-all.css
│ │ └── fonts/
│ │ └── FontAwesome.otf
│ ├── highcharts/
│ │ └── 8/
│ │ ├── highcharts-more.js
│ │ ├── highcharts-more.src.js
│ │ ├── highcharts.css
│ │ ├── highcharts.js
│ │ ├── highcharts.src.js
│ │ └── modules/
│ │ ├── accessibility.js
│ │ ├── annotations-advanced.js
│ │ ├── annotations.js
│ │ ├── arrow-symbols.js
│ │ ├── boost-canvas.js
│ │ ├── boost.js
│ │ ├── broken-axis.js
│ │ ├── bullet.js
│ │ ├── coloraxis.js
│ │ ├── current-date-indicator.js
│ │ ├── cylinder.js
│ │ ├── data.js
│ │ ├── datagrouping.js
│ │ ├── debugger.js
│ │ ├── dependency-wheel.js
│ │ ├── dotplot.js
│ │ ├── drag-panes.js
│ │ ├── draggable-points.js
│ │ ├── drilldown.js
│ │ ├── dumbbell.js
│ │ ├── export-data.js
│ │ ├── exporting.js
│ │ ├── full-screen.js
│ │ ├── funnel.js
│ │ ├── funnel3d.js
│ │ ├── gantt.js
│ │ ├── grid-axis.js
│ │ ├── heatmap.js
│ │ ├── histogram-bellcurve.js
│ │ ├── item-series.js
│ │ ├── lollipop.js
│ │ ├── map-parser.js
│ │ ├── map.js
│ │ ├── marker-clusters.js
│ │ ├── networkgraph.js
│ │ ├── no-data-to-display.js
│ │ ├── offline-exporting.js
│ │ ├── oldie-polyfills.js
│ │ ├── oldie.js
│ │ ├── organization.js
│ │ ├── overlapping-datalabels.js
│ │ ├── parallel-coordinates.js
│ │ ├── pareto.js
│ │ ├── pathfinder.js
│ │ ├── pattern-fill.js
│ │ ├── price-indicator.js
│ │ ├── pyramid3d.js
│ │ ├── sankey.js
│ │ ├── series-label.js
│ │ ├── solid-gauge.js
│ │ ├── sonification.js
│ │ ├── static-scale.js
│ │ ├── stock-tools.js
│ │ ├── stock.js
│ │ ├── streamgraph.js
│ │ ├── sunburst.js
│ │ ├── tilemap.js
│ │ ├── timeline.js
│ │ ├── treegrid.js
│ │ ├── treemap.js
│ │ ├── variable-pie.js
│ │ ├── variwide.js
│ │ ├── vector.js
│ │ ├── venn.js
│ │ ├── windbarb.js
│ │ ├── wordcloud.js
│ │ └── xrange.js
│ ├── html/
│ │ ├── 404.html
│ │ └── 505.html
│ ├── jquery/
│ │ └── current/
│ │ ├── index.html
│ │ ├── jquery-ui.css
│ │ ├── jquery-ui.js
│ │ ├── jquery-ui.structure.css
│ │ └── jquery-ui.theme.css
│ ├── jsp/
│ │ ├── head_body.jsp
│ │ ├── html_head.jsp
│ │ ├── load_js.jsp
│ │ ├── post_app.jsp
│ │ └── pre_app.jsp
│ ├── knots/
│ │ └── Knots.js
│ ├── octokitrest/
│ │ └── octokit-rest-17.10.0.js
│ ├── openlayers/
│ │ └── ol.js
│ ├── q/
│ │ └── current/
│ │ └── q.js
│ ├── spectrum/
│ │ ├── spectrum.css
│ │ └── spectrum.js
│ ├── spyral/
│ │ ├── babel.config.js
│ │ ├── build/
│ │ │ └── spyral.js
│ │ ├── css/
│ │ │ └── spyral.css
│ │ ├── jsdoc-tern-template/
│ │ │ └── publish.js
│ │ ├── jsdoc.config.json
│ │ ├── notebooks/
│ │ │ ├── alta
│ │ │ ├── alta-create.html
│ │ │ ├── alta-create.json
│ │ │ ├── alta-scale.json
│ │ │ ├── alta-smaller.html
│ │ │ ├── alta-smaller.json
│ │ │ ├── alta-start.html
│ │ │ ├── alta-start.json
│ │ │ ├── alta-table.html
│ │ │ ├── alta-tables.json
│ │ │ ├── alta.html
│ │ │ ├── alta.json
│ │ │ └── tmp-ca.json
│ │ ├── package.json
│ │ ├── rollup.config.js
│ │ ├── src/
│ │ │ ├── index.js
│ │ │ ├── metadata.js
│ │ │ └── notebook.js
│ │ └── src-jsduck/
│ │ ├── jsdocs.py
│ │ └── spyral.js
│ ├── swfobject/
│ │ └── swfobject.js
│ ├── termsradio/
│ │ └── TermsRadio.js
│ ├── twic/
│ │ └── current/
│ │ ├── css/
│ │ │ └── twic.css
│ │ ├── data/
│ │ │ └── input/
│ │ │ └── json/
│ │ │ ├── twic_corpusinfo.json
│ │ │ └── twic_corpusmap.json
│ │ ├── js/
│ │ │ ├── twic.js
│ │ │ ├── twic_datashape.js
│ │ │ ├── twic_level.js
│ │ │ └── twic_panel.js
│ │ └── lib/
│ │ ├── class_syntax.js
│ │ ├── svg_helper_functions.js
│ │ └── textFlow.js
│ ├── visjs/
│ │ ├── vis.css
│ │ └── vis.js
│ ├── voyant/
│ │ └── current/
│ │ ├── bubbles/
│ │ │ └── bubbles.pjs
│ │ ├── docs/
│ │ │ ├── en/
│ │ │ │ ├── config.json
│ │ │ │ ├── guides/
│ │ │ │ │ ├── info/
│ │ │ │ │ │ ├── about/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── gallery/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ └── mirrors/
│ │ │ │ │ │ └── README.md
│ │ │ │ │ ├── tools/
│ │ │ │ │ │ ├── README.md
│ │ │ │ │ │ ├── bubblelines/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── bubbles/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── catalogue/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── cirrus/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── collocatesgraph/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── contexts/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── corpuscollocates/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── corpusterms/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── correlations/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── documents/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── documentterms/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── dreamscape/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── knots/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── mandala/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── microsearch/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── phrases/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── reader/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── rezoviz/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── scatterplot/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── streamgraph/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── summary/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── termsberry/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── termsradio/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── textualarc/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── topics/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── trends/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── veliza/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── via/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ └── wordtree/
│ │ │ │ │ │ └── README.md
│ │ │ │ │ └── ui/
│ │ │ │ │ ├── categories/
│ │ │ │ │ │ └── README.md
│ │ │ │ │ ├── corpuscreator/
│ │ │ │ │ │ └── README.md
│ │ │ │ │ ├── embedding/
│ │ │ │ │ │ └── README.md
│ │ │ │ │ ├── grids/
│ │ │ │ │ │ └── README.md
│ │ │ │ │ ├── languages/
│ │ │ │ │ │ └── README.md
│ │ │ │ │ ├── modifyingcorpus/
│ │ │ │ │ │ └── README.md
│ │ │ │ │ ├── new/
│ │ │ │ │ │ └── README.md
│ │ │ │ │ ├── palette/
│ │ │ │ │ │ └── README.md
│ │ │ │ │ ├── search/
│ │ │ │ │ │ └── README.md
│ │ │ │ │ ├── skins/
│ │ │ │ │ │ └── README.md
│ │ │ │ │ ├── start/
│ │ │ │ │ │ └── README.md
│ │ │ │ │ ├── stopwords/
│ │ │ │ │ │ └── README.md
│ │ │ │ │ └── tutorial/
│ │ │ │ │ └── README.md
│ │ │ │ ├── guides.json
│ │ │ │ └── welcome.html
│ │ │ ├── it/
│ │ │ │ ├── config.json
│ │ │ │ ├── guides/
│ │ │ │ │ ├── about/
│ │ │ │ │ │ └── README.md
│ │ │ │ │ ├── tools/
│ │ │ │ │ │ ├── README.md
│ │ │ │ │ │ ├── bubblelines/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── bubbles/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── catalogue/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── cirrus/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── collocatesgraph/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── contexts/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── corpuscollocates/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── corpusterms/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── documents/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── documentterms/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── knots/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── mandala/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── microsearch/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── phrases/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── reader/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── scatterplot/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── streamgraph/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── summary/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── termsradio/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── textualarc/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── trends/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ └── wordtree/
│ │ │ │ │ │ └── README.md
│ │ │ │ │ └── ui/
│ │ │ │ │ ├── corpuscreator/
│ │ │ │ │ │ └── README.md
│ │ │ │ │ ├── embedding/
│ │ │ │ │ │ └── README.md
│ │ │ │ │ ├── grids/
│ │ │ │ │ │ └── README.md
│ │ │ │ │ ├── modifyingcorpus/
│ │ │ │ │ │ └── README.md
│ │ │ │ │ ├── new/
│ │ │ │ │ │ └── README.md
│ │ │ │ │ ├── search/
│ │ │ │ │ │ └── README.md
│ │ │ │ │ ├── skins/
│ │ │ │ │ │ └── README.md
│ │ │ │ │ ├── start/
│ │ │ │ │ │ └── README.md
│ │ │ │ │ └── stopwords/
│ │ │ │ │ └── README.md
│ │ │ │ ├── guides.json
│ │ │ │ └── welcome.html
│ │ │ ├── mirrors.html
│ │ │ └── template-min/
│ │ │ ├── README.md
│ │ │ ├── app-0c945a27f43452df695771ddb60b3d14.js
│ │ │ ├── eg-iframe.html
│ │ │ ├── extjs/
│ │ │ │ └── ext-all.js
│ │ │ ├── index-template.html
│ │ │ ├── index.php
│ │ │ ├── mobile-redirect.js
│ │ │ ├── print-template.html
│ │ │ ├── resources/
│ │ │ │ ├── css/
│ │ │ │ │ └── app-4689d2a5522dcd3c9e9923ca59c33f27.css
│ │ │ │ └── prettify/
│ │ │ │ ├── prettify.css
│ │ │ │ └── prettify.js
│ │ │ └── template.html
│ │ ├── langs.html
│ │ ├── localization.tsv
│ │ ├── servers.json
│ │ ├── voyant-locale-ar.js
│ │ ├── voyant-locale-bs.js
│ │ ├── voyant-locale-cz.js
│ │ ├── voyant-locale-de.js
│ │ ├── voyant-locale-en.js
│ │ ├── voyant-locale-es.js
│ │ ├── voyant-locale-fr.js
│ │ ├── voyant-locale-he.js
│ │ ├── voyant-locale-hr.js
│ │ ├── voyant-locale-it.js
│ │ ├── voyant-locale-ja.js
│ │ ├── voyant-locale-pt.js
│ │ ├── voyant-locale-sr.js
│ │ ├── voyant-locale.jsp
│ │ ├── voyant.js
│ │ ├── voyant.jsp
│ │ └── voyant.min.map.js
│ ├── xml/
│ │ └── hamlet.xml
│ └── xsl/
│ ├── contexts2tsv.xsl
│ ├── corpuscollocates2tsv.xsl
│ ├── corpusentities2tsv.xsl
│ ├── corpusterms2tsv.xsl
│ ├── correlations2tsv.xsl
│ ├── docTokens2idsAndText.xsl
│ ├── docTokens2lemmas.xsl
│ ├── docTokens2plainText.xsl
│ ├── docTokens2spans.xsl
│ ├── docTokens2text.xsl
│ ├── docTokens2textPlusTokenIds.xsl
│ ├── docTokens2words.xsl
│ ├── docTokensPlusStructure2html.xsl
│ ├── docTokensPlusStructureDToC.xsl
│ ├── documents2tsv.xsl
│ ├── documentterms2tsv.xsl
│ └── phrases2tsv.xsl
├── spyral/
│ ├── cookie/
│ │ └── index.jsp
│ ├── index.jsp
│ └── oauth/
│ └── index.jsp
└── tool/
└── index.jsp
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitignore
================================================
#################
## Eclipse
#################
.project
.metadata
bin/
tmp/
work/
*.DS_Store
*.tmp
*.bak
*.swp
*~.nib
local.properties
.classpath
.tomcatplugin
.settings/
/target
src/main/webapp/WEB-INF/classes
src/main/webapp/WEB-INF/lib
src/main/webapp/.\#webclasspath
src/main/webapp/resources/spyral/node_modules
src/main/resources/oath.properties
/.pydevproject
.vscode/
================================================
FILE: LICENSE.txt
================================================
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<http://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<http://www.gnu.org/philosophy/why-not-lgpl.html>.
================================================
FILE: README.md
================================================
#### With the passing of Stéfan Sinclair, this repository has been archived. ####
#### Please see [voyanttools/Voyant](https://github.com/voyanttools/Voyant) for future development. ####
Voyant Tools
======
Voyant Tools is a web-based text analysis, reading and visualization environment. Developed by a small team of digital humanities scholars led by [Stéfan Sinclair ](http://stefansinclair.name/) and [Geoffrey Rockwell](http://geoffreyrockwell.com/), Voyant Tools is designed for a very wide range of applications and users, from students to researchers and journalists to market analysts. It strives to balance user-friendliness with a range of analytic and interpretive functions.
# Features
Some of the important features of Voyant Tools include:
* importing documents in various formats (plain text, HTML, XML, PDF, RTF, MS Word, ODF, etc.)
* several tools for studying term frequencies and distributions within documents and within a collection of documents (a corpus)
* a full-text reader that support very large texts and includes interactive features
* interaction between the the tools that facilitates navigation and exploration at diffent scales (from "close reading" to "distant reading")
* a mechanism for bookmarking and sharing instances of Voyant Tools (specific texts and tools) through persistent URLs
* access to a [hosted version of Voyant Tools](http://Voyant-tools.org/) or a [downloadable standalone version](http://github.com/sgsinclair/VoyantServer)
* Voyant Tools is free and open source (GPLv3)
# Documentation
The GitHub-hosted repository is oriented toward development of Voyant Tools, including bug and issue tracking. Help with using the interface is available from the [Voyant Tools Documentation](http://docs.voyant-tools.org) site.
# Contributing
There are many ways of contributing to the development of Voyant Tools:
* use it and let us know ([@VoyantTools](http://twitter.com/VoyantTools)), having people use it is our reward :)
* if appropriate, please consider citing it
* if you find a bug, identify an issue or have requests, submit a [GitHub ticket](https://github.com/sgsinclair/Voyant/issues) (or [tweet](http://twitter.com/VoyantTools))
* if you're a developer, see instructions for setting up a development environment and consider submitting a patch or pull request
# License
Voyant Tools is an open-source project and the code is available through [GitHub](http://github.com/sgsinclair/Voyant). The code is under a [GPL3 license](http://www.gnu.org/licenses/gpl-3.0.en.html) and the content of the web application is under a [Creative Commons By Attribution license](https://creativecommons.org/licenses/by/4.0/).
# Voyant Tools 2.0
The currently available version of [Voyant Tools](http://voyant-tools.org/) is 2.0. It isa complete rewrite that is focused on better performance and scalability, as well as improved functionality (such as more powerful search). Voyant 3.0 is expected by 2020.
## Releases
For a somewhat more detailed overview of releases please see [VoyantServer releases](https://github.com/sgsinclair/VoyantServer/releases)
## Known Issues
* several skins and tools are not yet implemented
* Voyant slows down as the index grows
## Road Map
* new architecture to better support distributed indices (multiple users)
* update code to latest version of Lucene
* integrate some language-specific functionality such as part-of-speech tagging
* add functionality for word groups
* resume development of Spyral (Voyant Notebooks)
# Credits
================================================
FILE: pom.xml
================================================
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.voyant-tools</groupId>
<artifactId>Voyant</artifactId>
<packaging>war</packaging>
<name>Voyant</name>
<version>2.0.0-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
<build>
<sourceDirectory>${basedir}/src/main/java</sourceDirectory>
<outputDirectory>${basedir}/src/main/webapp/WEB-INF/classes</outputDirectory>
<resources>
<resource>
<directory>${basedir}/src/main/java</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
<!-- make sure we grab the Voyant JS file liste -->
<resource>
<directory>${basedir}/src/main/resources</directory>
</resource>
</resources>
<plugins>
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<phase>install</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${basedir}/src/main/webapp/WEB-INF/lib</outputDirectory>
<includeScope>runtime</includeScope>
<!-- we have to skip trombone to ensure that we're using compiled
classes from project -->
<excludeArtifactIds>trombone</excludeArtifactIds>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<!-- http://maven.apache.org/plugins/maven-war-plugin/overlays.html -->
<artifactId>maven-war-plugin</artifactId>
<configuration>
<outputDirectory>${basedir}/target</outputDirectory>
<webappDirectory>${basedir}/src/main/webapp</webappDirectory>
<warSourceDirectory>${basedir}/src/main/webapp</warSourceDirectory>
</configuration>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.voyant-tools</groupId>
<artifactId>trombone</artifactId>
<version>5.2.0-SNAPSHOT</version>
</dependency>
<!-- <dependency> <groupId>caja</groupId> <artifactId>caja</artifactId>
<version>r5127</version> <scope>compile</scope> </dependency> -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>3.0-alpha-1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>com.google.javascript</groupId>
<artifactId>closure-compiler</artifactId>
<version>v20190929</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.4</version>
</dependency>
</dependencies>
<repositories>
<repository>
<id>maven2-repository.java.net</id>
<name>Java.net Repository for Maven</name>
<url>http://download.java.net/maven/2/</url>
<layout>default</layout>
</repository>
<repository>
<id>caja</id>
<name>Google Caja</name>
<url>http://google-caja.googlecode.com/svn/maven</url>
</repository>
<repository>
<id>trombone-mvn-repo</id>
<url>https://raw.github.com/sgsinclair/trombone/mvn-repo/</url>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
</repository>
</repositories>
</project>
================================================
FILE: src/main/java/org/voyanttools/voyant/FlexibleParametersFactory.java
================================================
package org.voyanttools.voyant;
import static java.security.AccessController.doPrivileged;
import java.io.File;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.http.NameValuePair;
import org.apache.http.client.utils.URLEncodedUtils;
import org.voyanttools.trombone.input.source.InputSourcesBuilder;
import org.voyanttools.trombone.util.FlexibleParameters;
import sun.security.action.GetPropertyAction;
/**
* This is a utility class for instantiating {@link FlexibleParameters} from {@link HttpServletRequest}s.
* @author Stéfan Sinclair, Cyril Briquet
*/
public class FlexibleParametersFactory {
private String build;
private String version;
public FlexibleParametersFactory(ServletContext servlet) {
this.build = servlet.getInitParameter("build");
this.version = servlet.getInitParameter("version");
}
/**
* Get an instance of {@link FlexibleParameters} from the {@link HttpServletRequest}.
*
* <p>This method handles simple forms as wells as multipart forms with file uploads.</p>
* @param request
* @return {@link FlexibleParameters} instance
* @throws Exception
*/
public FlexibleParameters getInstance(HttpServletRequest request) throws Exception {
return getInstance(request, false);
}
/**
* Get an instance of {@link FlexibleParameters} from the {@link HttpServletRequest}.
*
* <p>This method handles simple forms as wells as multipart forms with file uploads.</p>
* @param request
* @return {@link FlexibleParameters} instance
* @throws Exception
*/
@SuppressWarnings("unchecked")
public FlexibleParameters getInstance(HttpServletRequest request, boolean allowLocalFileSystemAccess) throws Exception {
if (request == null) {
throw new NullPointerException("illegal request");
}
final FlexibleParameters parameters = new FlexibleParameters();
parameters.setParameter("VOYANT_VERSION", version!=null ? version : "");
parameters.setParameter("VOYANT_BUILD", build!=null ? build : "");
parameters.setParameter("VOYANT_REMOTE_ID", request.getHeader("X-FORWARDED-FOR")!=null ? request.getHeader("X-FORWARDED-FOR") : request.getRemoteAddr());
final HttpParametersDecoder parametersDecoder = new HttpParametersDecoder(parameters);
if (ServletFileUpload.isMultipartContent(request) && !(request instanceof Voyant.PostedInputRequestWrapper)) {
final List<FileItem> items = getRequestItems(request);
Path tmpPath = Paths.get(Paths.get(doPrivileged(new GetPropertyAction("java.io.tmpdir"))).toString(), "tmp.voyant.uploads");
if (!Files.exists(tmpPath)) {
Files.createDirectory(tmpPath);
}
for (FileItem item : items) {
if (item.isFormField()) { // normal form field
parametersDecoder.decodeParameter(item.getFieldName(), item.getString(), allowLocalFileSystemAccess);
}
else { // file form field: this is uploaded, therefore the local access check can be bypassed
Path path = Files.createTempDirectory(tmpPath, "tmp.voyant.uploads");
File file = new File(path.toFile(), item.getName());
item.write(file);
parametersDecoder.decodeParameter("upload", file.toString(), true);
}
}
}
else {
if (request.getMethod().equals("GET")) {
// I couldn't for the life of me convince a GET request to use the specified character encoding (tried req.setCharacterEncoding() etc.)
// so we'll not use the simpler request.getParameterMap() and instead parse the query string ourselves
String queryString = request.getQueryString();
if (queryString!=null) {
List<NameValuePair> pairs = URLEncodedUtils.parse(request.getQueryString(), Charset.forName("UTF-8"));
for (NameValuePair pair : pairs) {
if (pair.getName().equals("_dc")==false) { // ignore the EXTJS param for GET requests
parametersDecoder.decodeParameters(pair.getName(), new String[]{pair.getValue()}, allowLocalFileSystemAccess);
}
}
}
}
else {
for (Map.Entry<String, String[]> param : ((Map<String, String[]>) request.getParameterMap()).entrySet()) {
parametersDecoder.decodeParameters(param.getKey(), param.getValue(), allowLocalFileSystemAccess || (request instanceof Voyant.PostedInputRequestWrapper && param.getKey().equals("upload")));
}
}
}
// check to see if this instance allows new input
if (System.getProperty("org.voyanttools.server.allowinput", "true").equals("false") && InputSourcesBuilder.hasParameterSources(parameters)) {
throw new IllegalArgumentException("This server has been configured to refuse new input.");
}
return parameters;
}
private static List<FileItem> getRequestItems(HttpServletRequest request) throws FileUploadException {
if (request == null) {
throw new NullPointerException("illegal request");
}
final DiskFileItemFactory factory = new DiskFileItemFactory();
final ServletFileUpload upload = new ServletFileUpload(factory);
final List<FileItem> items = upload.parseRequest(request);
return items;
}
}
================================================
FILE: src/main/java/org/voyanttools/voyant/HttpParametersDecoder.java
================================================
package org.voyanttools.voyant;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.regex.Pattern;
import org.voyanttools.trombone.util.FlexibleParameters;
/**
* This is a utility class for decoding HTTP parameters intended to configure the behavior of a Trombone {@link Controller}.
* @author Stéfan Sinclair, Cyril Briquet
*/
public class HttpParametersDecoder {
private static final Pattern VALID_URL_PATTERN = Pattern.compile("^((https?|ftp)://|([\\w-]+\\.)+[\\w-]+($|/))");
private final FlexibleParameters parameters;
public HttpParametersDecoder(FlexibleParameters parameters) {
if (parameters == null) {
throw new NullPointerException("illegal properties");
}
this.parameters = parameters;
}
public synchronized void decodeParameter(String key, String value, boolean allowLocalFileSystemAccess) {
if (key == null) {
throw new NullPointerException("illegal key");
}
if (value == null) {
throw new NullPointerException("illegal value");
}
decodeParameters(key, new String[] { value }, allowLocalFileSystemAccess);
}
public synchronized void decodeParameters(String key, String[] values, boolean allowLocalFileSystemAccess) {
if (key == null) {
throw new NullPointerException("illegal key");
}
if (values == null) {
throw new NullPointerException("illegal values");
}
// let's strip the brackets that indicate an array
if (key.endsWith("[]") && key.length()>2) {key = key.substring(0, key.length()-2);}
if (key.equals("uri")) {
decodeURIParameters(key, values);
}
else if (key.equals("input")) {
decodeInlineParameters(key, values);
}
else if (key.equals("file") || key.equals("directory") || key.equals("upload")) {
if (allowLocalFileSystemAccess) {
addParameter(key, values);
}
}
else {
addParameter(key, values);
}
}
private synchronized void decodeURIParameters(String key, String[] values) {
if (key == null) {
throw new NullPointerException("illegal key");
}
if (values == null) {
throw new NullPointerException("illegal values");
}
final Set<String> uris = new HashSet<String>();
for (String uri : values) {
if (uri.trim().startsWith("file:")) {
throw new IllegalArgumentException("file:// protocol is not supported");
}
else {
uris.add(uri);
}
}
if (uris.isEmpty() == false) {
addParameter(key, uris.toArray(values));
}
}
private synchronized void decodeInlineParameters(String key, String[] values) {
if (key == null) {
throw new NullPointerException("illegal key");
}
if (values == null) {
throw new NullPointerException("illegal values");
}
final List<String> uris = new ArrayList<String>();
final List<String> strings = new ArrayList<String>();
for (String input : values) {
input = input.trim();
if (input.length() == 0) {
continue;
}
if (VALID_URL_PATTERN.matcher(input).find()) { // inline URI or URIs
for (String uri : input.split("\n+")) {
uri = uri.trim();
if (VALID_URL_PATTERN.matcher(uri).find()) {
if (uri.startsWith("http") || uri.startsWith("ftp")) {
uris.add(uri);
}
else {
uris.add("http://" + uri); // the protocol is probably http anyways ;)
}
}
}
}
else { // inline text chunk
strings.add(input);
}
}
if (uris.isEmpty() == false) {
addParameter("uri", uris.toArray(new String[0]));
}
if (strings.isEmpty() == false) {
addParameter("string", strings.toArray(new String[0]));
}
}
private synchronized void addParameter(String key, String[] values) {
if (key == null) {
throw new NullPointerException("illegal key");
}
if (values == null) {
throw new NullPointerException("illegal values");
}
/*
final String[] decodedValues = new String[values.length];
for (int y = 0 ; y < decodedValues.length ; ++y) {
try {
decodedValues[y] = URLDecoder.decode(values[y], "UTF-8");
}
catch (UnsupportedEncodingException e) {
throw new IllegalStateException(e.getMessage(), e);
}
}
*/
this.parameters.addParameter(key, values);
}
}
================================================
FILE: src/main/java/org/voyanttools/voyant/JSCacher.java
================================================
package org.voyanttools.voyant;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import com.google.javascript.jscomp.CompilationLevel;
import com.google.javascript.jscomp.Compiler;
import com.google.javascript.jscomp.CompilerOptions;
import com.google.javascript.jscomp.Result;
import com.google.javascript.jscomp.SourceFile;
import com.google.javascript.jscomp.SourceMap;
import com.google.javascript.jscomp.SourceMap.PrefixLocationMapping;
/**
* @author Andrew MacDonald and Stéfan Sinclair
*/
public class JSCacher {
final static String ENCODING = "UTF-8";
final static String CACHED_FILENAME = "voyant.js";
final static String CACHED_FILENAME_MINIFIED = "voyant.min.js";
final static String SOURCE_MAP_FILENAME = "voyant.min.map.js";
// Closure options
final static int SUMMARY_DETAIL_LEVEL = 1;
public static void sendCache(HttpServletRequest request, HttpServletResponse response) throws IOException {
response.setCharacterEncoding(ENCODING);
// TODO add config for this?
boolean doSourceMap = true;
File basePath = new File(request.getSession().getServletContext().getRealPath("/"));
String debug = request.getParameter("debug");
File cachedFile = new File(basePath, "/resources/voyant/current/"+CACHED_FILENAME);
File cachedFileMinified = new File(basePath, "/resources/voyant/current/"+CACHED_FILENAME_MINIFIED);
File sourceMapFile = new File(basePath, "/resources/voyant/current/"+SOURCE_MAP_FILENAME);
if (debug!=null && debug.equals("true") && cachedFile.canWrite() && cachedFileMinified.canWrite() && sourceMapFile.canWrite()) {
long lastModifiedCachedFile = cachedFile.lastModified();
List<File> files = getCacheableFiles(basePath);
// look for any file that's been updated since last cache
boolean needsUpdate = false;
for (File file : files) {
if (file.lastModified() > lastModifiedCachedFile) {
needsUpdate = true;
break;
}
}
if (needsUpdate) {
List<SourceFile> sourceFiles = new ArrayList<SourceFile>();
String header = "/* This file created by JSCacher. Last modified: "+new Date().toString()+" */\n";
String footer = doSourceMap ? "\n//# sourceMappingURL=" + SOURCE_MAP_FILENAME : "";
StringBuffer cache = new StringBuffer(header);
for (File file : files) {
String s = FileUtils.readFileToString(file, Charset.forName(ENCODING));
cache.append(s).append("\n"); // assuming UTF-8
sourceFiles.add(SourceFile.fromFile(file.getPath()));
}
// non-minified version
FileUtils.writeStringToFile(cachedFile, cache.toString(), Charset.forName(ENCODING));
// minified version
Compiler compiler = new Compiler();
CompilerOptions options = new CompilerOptions();
List<String> tags = new ArrayList<String>();
tags.add("cfg");
tags.add("exports");
tags.add("choices");
tags.add("distinguishingFldsArray");
tags.add("undistinguishedRoot");
options.setExtraAnnotationNames(tags);
options.setStrictModeInput(false); // needed to avoid error on "arguments.callee.caller"
options.setSummaryDetailLevel(SUMMARY_DETAIL_LEVEL);
options.setLanguageIn(CompilerOptions.LanguageMode.ECMASCRIPT_2019);
options.setLanguageOut(CompilerOptions.LanguageMode.ECMASCRIPT5);
if (doSourceMap) {
options.setSourceMapOutputPath(SOURCE_MAP_FILENAME);
options.setSourceMapFormat(SourceMap.Format.V3);
options.setSourceMapIncludeSourcesContent(true);
List<PrefixLocationMapping> prefixes = new ArrayList<>();
String baseLocation = basePath.toString().replaceAll("\\\\", "/");
prefixes.add(new PrefixLocationMapping(baseLocation, ""));
options.setSourceMapLocationMappings(prefixes);
}
CompilationLevel.SIMPLE_OPTIMIZATIONS.setOptionsForCompilationLevel(options);
Result result = compiler.compile(new ArrayList<SourceFile>(), sourceFiles, options);
cache.setLength(0);
cache.append(header);
cache.append(compiler.toSource());
cache.append(footer);
FileUtils.writeStringToFile(cachedFileMinified, cache.toString(), Charset.forName(ENCODING));
// source map
if (doSourceMap && result.sourceMap != null) {
StringBuilder sourceMap = new StringBuilder();
result.sourceMap.appendTo(sourceMap, SOURCE_MAP_FILENAME);
FileUtils.writeStringToFile(sourceMapFile, sourceMap.toString(), Charset.forName(ENCODING));
}
}
response.sendRedirect(CACHED_FILENAME);
}
else {
response.sendRedirect(CACHED_FILENAME_MINIFIED);
}
}
private static List<File> getCacheableFiles(File basePath) throws IOException {
InputStream is = org.voyanttools.voyant.JSCacher.class.getResourceAsStream("voyant-js.txt");
List<String> lines = IOUtils.readLines(is, Charset.forName(ENCODING));
is.close();
List<File> files = new ArrayList<File>();
for (String jsFile : lines) {
if (jsFile.trim().startsWith("#") || jsFile.trim().isEmpty()) {continue;}
File f = new File(basePath, jsFile);
if (f.exists()) {files.add(f);}
else {
throw new IOException("File does not exist:"+f);
}
}
return files;
}
}
================================================
FILE: src/main/java/org/voyanttools/voyant/Localizer.java
================================================
package org.voyanttools.voyant;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.StringUtils;
public class Localizer {
public static void sendCache(HttpServletRequest request, HttpServletResponse response) throws IOException {
response.setCharacterEncoding("UTF-8");
File basePath = new File(request.getSession().getServletContext().getRealPath("/"), "/resources/voyant/current");
String lang = request.getParameter("lang");
if (lang==null || lang.isEmpty()) {lang="en";}
File cachedFile = new File(basePath, "voyant-locale-"+lang+".js");
File sourceFile = new File(basePath, "localization.tsv");
if (!cachedFile.exists() || sourceFile.lastModified()>cachedFile.lastModified()) {
update(lang, sourceFile, cachedFile);
}
response.sendRedirect(cachedFile.getName());
}
private static void update(String lang, File sourceFile, File cachedFile) throws IOException {
List<String> lines = FileUtils.readLines(sourceFile, "UTF-8");
String header = lines.get(0);
int pos = header.indexOf("("+lang+")");
if (pos==-1) {
throw new IllegalArgumentException("Unable to find language: "+lang);
}
int column = StringUtils.countMatches(header.substring(0, pos), "\t");
int english = 3;
lines.remove(0);
Map<String, Map<String, String>> locationsMap = new HashMap<String, Map<String, String>>();
for (String line : lines) {
String[] cells = line.split("\t");
if (cells.length < 4 || cells[0].isEmpty() || cells[1].isEmpty() || cells[2].isEmpty() || cells[3].isEmpty()) {continue;}
String location = cells[1];
if (locationsMap.containsKey(location)==false) {
locationsMap.put(location, new HashMap<String, String>());
}
locationsMap.get(location).put(cells[2], cells.length>column && cells[column].isEmpty()==false ? cells[column] : cells[english]);
}
StringBuilder sb = new StringBuilder("Voyant.util.Localization.LANGUAGE='").append(lang).append("'\n");
for (Map.Entry<String, Map<String, String>> locationEntry : locationsMap.entrySet()) {
sb.append("Ext.apply(").append(locationEntry.getKey()).append(".i18n, {\n");
for (Map.Entry<String, String> classEntry : locationEntry.getValue().entrySet()) {
sb.append("\"").append(classEntry.getKey()).append("\":\"").append(classEntry.getValue().replace("\"", "\\\"")).append("\",\n");
}
sb.setLength(sb.length()-2);
sb.append("});\n");
}
FileUtils.writeStringToFile(cachedFile, sb.toString(), "UTF-8");
}
}
================================================
FILE: src/main/java/org/voyanttools/voyant/SpyralAuth.java
================================================
package org.voyanttools.voyant;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import java.nio.charset.StandardCharsets;
import java.util.Properties;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.io.IOUtils;
public class SpyralAuth extends HttpServlet {
private static final long serialVersionUID = 1048044723303994604L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {
doRequest(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {
doRequest(req, resp);
}
private void doRequest(HttpServletRequest req, HttpServletResponse resp) throws IOException {
Properties oauthprops = new Properties();
String propfile = this.getInitParameter("oauthprops");
oauthprops.load(getClass().getClassLoader().getResourceAsStream(propfile));
String clientId = (String) oauthprops.get("clientId");
String clientSecret = (String) oauthprops.get("clientSecret");
String oauthCallbackRedirect = (String) oauthprops.get("oauthCallbackRedirect");
String code = req.getParameter("code");
String charset = StandardCharsets.UTF_8.name();
String tokenURL = "https://github.com/login/oauth/access_token?code="+code+"&client_id="+clientId+"&client_secret="+clientSecret;
URL url = new URL(tokenURL);
URLConnection connection = url.openConnection();
connection.setDoOutput(true);
connection.setRequestProperty("Accept-Charset", charset);
InputStream is = null;
try {
is = connection.getInputStream();
String respString = IOUtils.toString(is, charset);
Pattern pattern = Pattern.compile("(access_token=)(\\w+)");
Matcher matcher = pattern.matcher(respString);
if (matcher.find()) {
String accessToken = matcher.group(2);
Cookie cookie = new Cookie("access-token", accessToken);
cookie.setPath("/");
resp.addCookie(cookie);
resp.sendRedirect(oauthCallbackRedirect);
}
} finally {
if (is != null) {
is.close();
}
}
}
}
================================================
FILE: src/main/java/org/voyanttools/voyant/Trombone.java
================================================
package org.voyanttools.voyant;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.io.StringReader;
import java.io.StringWriter;
import java.io.Writer;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.text.DateFormat;
import java.util.Calendar;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.xml.transform.Source;
import javax.xml.transform.TransformerException;
import javax.xml.transform.stream.StreamSource;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.voyanttools.trombone.Controller;
import org.voyanttools.trombone.model.Corpus;
import org.voyanttools.trombone.model.CorpusAccess;
import org.voyanttools.trombone.results.ResultsOutputFormat;
import org.voyanttools.trombone.storage.Storage;
import org.voyanttools.trombone.storage.file.FileStorage;
import org.voyanttools.trombone.storage.memory.MemoryStorage;
import org.voyanttools.trombone.tool.corpus.CorpusManager;
import org.voyanttools.trombone.util.FlexibleParameters;
/**
* @author Stéfan Sinclair, Cyril Briquet
*/
public class Trombone extends HttpServlet {
private static final long serialVersionUID = 392155275393370320L;
private final Set<String> hiddenParameters = new HashSet<String>();
private Storage storage;
private FlexibleParametersFactory flexibleParametersFactory;
public Trombone() throws IOException {
this.storage = null;
String storage = System.getProperty("org.voyanttools.server.storage", "file-per-corpus").toLowerCase();
if (storage.equals("memory")) {
this.storage = new MemoryStorage();
} else {
FlexibleParameters parameters = new FlexibleParameters();
parameters.setParameter("storage", storage);
this.storage = new FileStorage(parameters);
}
}
@Override
public void init() {
this.flexibleParametersFactory = new FlexibleParametersFactory(this.getServletContext());
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {
doRequest(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {
doRequest(req, resp);
}
private void doRequest(HttpServletRequest req, HttpServletResponse resp) throws IOException {
if (req == null) {
throw new NullPointerException("illegal servlet request");
}
if (resp == null) {
throw new NullPointerException("illegal servlet response");
}
final FlexibleParameters parameters = getFlexibleParameters(req);
// append accessIP in case it's needed
parameters.setParameter("accessIP", req.getRemoteAddr());
if (parameters.containsKey("corpus")) {
String id = parameters.getParameterValue("corpus");
// check for password, for now just setting the session value (error will be raised later if needed)
if (parameters.containsKey("passwordForSession")) {
String password = parameters.getParameterValue("passwordForSession");
Corpus corpus = CorpusManager.getCorpus(storage, new FlexibleParameters(new String[]{"corpus="+id}));
FlexibleParameters newParams = parameters.clone();
newParams.setParameter("password", password);
CorpusAccess corpusAccess = corpus.getValidatedCorpusAccess(newParams);
if (corpusAccess==CorpusAccess.ADMIN || corpusAccess==CorpusAccess.ACCESS) {
req.getSession().setAttribute("password-"+id, password);
}
resp.setContentType("text/plain");
resp.getWriter().write(corpusAccess.name());
return;
}
else if (parameters.containsKey("passwordForSessionRemove")) {
HttpSession session = req.getSession();
session.removeAttribute("password-"+id);
return;
}
// see if we have a session-stored password
else {
HttpSession session = req.getSession();
String password = (String) session.getAttribute("password-"+id);
if (password!=null) {
password = password.trim();
if (password.isEmpty()==false) {
parameters.setParameter("password", password);
}
}
}
}
if (parameters == null) {
return;
}
try {
doRequest(parameters, req, resp);
this.log(generateLogMessageForSuccessfulRequest(parameters, req));
}
catch (Exception e) {
this.log("ERROR: "+e.getLocalizedMessage(), e);
this.log(generateLogMessageForFailedRequest(parameters, this.hiddenParameters));
resp.setStatus(500);
try {
final PrintWriter writer = resp.getWriter();
String message = e.getMessage();
if (message!=null && message.isEmpty()==false) {
writer.write(e.getMessage()+"\n");
}
e.printStackTrace(writer);
}
catch (IOException ioe) {
this.log("ERROR: Unable to write results", ioe);
}
}
}
private FlexibleParameters getFlexibleParameters(HttpServletRequest req) {
if (req == null) {
throw new NullPointerException("illegal servlet request");
}
try {
return this.flexibleParametersFactory.getInstance(req);
}
catch (Exception e) {
this.log("ERROR: Unable to create parameters", e);
this.log(generateLogMessageForUnprocessableParameters(((Map<String, String[]>) req.getParameterMap()).entrySet(), this.hiddenParameters));
return null;
}
}
private void doRequest(FlexibleParameters parameters, HttpServletRequest req, HttpServletResponse resp) throws IOException, TransformerException {
if (parameters == null) {
throw new NullPointerException("illegal parameters");
}
if (req == null) {
throw new NullPointerException("illegal servlet request");
}
if (resp == null) {
throw new NullPointerException("illegal servlet response");
}
resp.setContentType(ResultsOutputFormat.getResultsOutputFormat(parameters.getParameterValue("outputFormat", "json")).getContentType());
if (parameters.containsKey("fetchData")) {
URL url;
URLConnection c;
try {
url = new URL(parameters.getParameterValue("fetchData").replaceAll(" ", "+"));
System.out.println(url);
c = url.openConnection();
// StringBuilder sb = new StringBuilder();
// BufferedReader in = new BufferedReader(new InputStreamReader(c.getInputStream()));
// String inputLine;
// while ((inputLine = in.readLine()) != null) {
// sb.append(inputLine);
// }
// in.close();
// System.out.println(sb.toString());
}
catch (MalformedURLException e) {
throw new IllegalArgumentException("Attempt to use a malformed URL: "+parameters.getParameterValue("fetchJSON"), e);
}
c.addRequestProperty("User-Agent", "Mozilla/4.0 (compatible; Trombone)");
InputStream is = null;
try {
is = c.getInputStream();
c.setReadTimeout(60000);
resp.setContentType(c.getContentType());
// if (parameters.containsKey("format")) {
// String format = parameters.getParameterValue("format").toUpperCase();
// if (format.equals("XML")) {
// resp.setContentType("application/xml;charset=UTF-8");
// } else if (format.equals("JSON")) {
// resp.setContentType("application/json;charset=UTF-8");
// }
// }
IOUtils.copy(is, resp.getWriter());
resp.flushBuffer();
}
finally {
if (is!=null) {
is.close();
}
}
}
else if (parameters.containsKey("fetchJSON")) {
URL url;
URLConnection c;
try {
url = new URL(parameters.getParameterValue("fetchJSON").replaceAll(" ", "+"));
System.out.println(url);
c = url.openConnection();
c.setReadTimeout(0);
}
catch (MalformedURLException e) {
throw new IllegalArgumentException("Attempt to use a malformed URL: "+parameters.getParameterValue("fetchJSON"), e);
}
c.addRequestProperty("User-Agent", "Mozilla/4.0 (compatible; Trombone)");
// c.setReadTimeout(readTimeoutMilliseconds);
// c.setConnectTimeout(connectTimeoutMilliseconds);
InputStream is = null;
try {
is = c.getInputStream();
//application/json
resp.setContentType("application/json;charset=UTF-8");
IOUtils.copy(is, resp.getWriter());
resp.flushBuffer();
}
finally {
if (is!=null) {
is.close();
}
}
}
else if (parameters.containsKey("template")) {
parameters.setParameter("outputFormat", "xml"); // we need xml for transformation
final Writer xmlResultsWriter = new StringWriter();
runTromboneController(parameters, xmlResultsWriter);
Source xml = new StreamSource(new StringReader(xmlResultsWriter.toString()));
Source xslt = XslTransformer.getTemplateSource(parameters.getParameterValue("template"), this.getServletConfig().getServletContext());
FlexibleParameters xslParameters = new FlexibleParameters();
xslParameters.setParameter("tromboneUrl", req.getRequestURL().toString());
for (Map.Entry<String, String[]> param : ((Map<String, String[]>) req.getParameterMap()).entrySet()) {
if (this.hiddenParameters.contains(param.getKey()) == true) { // skip hidden parameter
continue;
}
xslParameters.setParameter(param.getKey(), param.getValue());
}
XslTransformer.transform(xslParameters, xml, xslt, resp.getWriter());
}
else if (parameters.getParameterValue("outputFormat", "").toUpperCase().equals("ZIP")) {
resp.setHeader("Content-Disposition", "filename=" + parameters.getParameterValue("zipFilename", "VoyantCorpusDownload.zip"));
OutputStream outputStream = resp.getOutputStream();
final Controller controller = new Controller(storage, parameters);
try {
controller.run(outputStream);
}
catch (Exception e) {
this.log("ERROR: "+e.getLocalizedMessage(), e);
this.log(generateLogMessageForFailedRequest(parameters, this.hiddenParameters));
resp.setStatus(500);
resp.sendError(500, "Unable to produce ZIP file.\n"+e.getMessage());
}
outputStream.flush();
outputStream.close();
}
else {
// we set a permissive control to data to allow calls from elsewhere – this may need to be monitored
resp.setHeader("Access-Control-Allow-Origin", "*");
Writer writer = resp.getWriter();
runTromboneController(parameters, resp.getWriter());
writer.flush();
writer.close();
}
}
private void runTromboneController(FlexibleParameters parameters, Writer writer) throws IOException {
if (parameters == null) {
throw new NullPointerException("illegal parameters");
}
if (writer == null) {
throw new NullPointerException("illegal writer");
}
// intercept to see if we have a notebook in resources
if (parameters.getParameterValue("tool", "").equals("notebook.NotebookManager") && parameters.getParameterValue("action", "").equals("load") && parameters.getParameterValue("id","").trim().isEmpty()==false) {
File file = new File(getServletContext().getRealPath("/resources/spyral/notebooks"), parameters.getParameterValue("id")+".html");
if (file.exists()) {
String string = FileUtils.readFileToString(file);
parameters.setParameter("data", string);
parameters.removeParameter("id"); // we can't overwrite this, so make sure to remove it
}
}
final Controller controller = new Controller(storage, parameters, writer);
controller.run();
}
private String getTemplatePath(FlexibleParameters parameters) {
if (parameters == null) {
throw new NullPointerException("illegal parameters");
}
String templatePath = parameters.getParameterValue("template");
if (templatePath.contains("/") == false) {
templatePath = getServletContext().getRealPath("/resources/xsl/"+templatePath);
}
if (templatePath.endsWith(".xsl") == false) {
templatePath += ".xsl";
}
return templatePath;
}
private static String generateLogMessageForUnprocessableParameters(Set<Map.Entry<String, String[]>> rawParameters, Set<String> hiddenParameters) {
if (rawParameters == null) {
throw new NullPointerException("illegal parameters");
}
if (rawParameters.isEmpty()) {
return "(No parameters specified.)";
}
else {
final StringBuilder sb = new StringBuilder("Parameters:\n");
for (Map.Entry<String, String[]> param : rawParameters) {
appendRequestParameter(sb.append("\t"), param.getKey(), param.getValue(), hiddenParameters);
}
return sb.toString();
}
}
private static String generateLogMessageForSuccessfulRequest(FlexibleParameters parameters, HttpServletRequest req) {
if (parameters == null) {
throw new NullPointerException("illegal parameters");
}
if (req == null) {
throw new NullPointerException("illegal servlet request");
}
final StringBuilder sb = new StringBuilder("TOOL: ");
if (parameters.containsKey("tool") == true) {
final String[] tools = parameters.getParameterValues("tool");
for (int i=0, len=tools.length ; i < len ; i++) {
sb.append(tools[i]);
if (i+1 < len) {
sb.append(",");
}
}
}
else {
sb.append("CorpusSummary");
}
if (parameters.containsKey("corpus")) {
sb.append("; CORPUS: ").append(parameters.getParameterValue("corpus"));
}
final Calendar now = Calendar.getInstance();
sb.append("; TIME: ").append(DateFormat.getInstance().format(now.getTime())).append(" (").append(now.getTimeInMillis()).append(")");
sb.append("; REQUEST: ").append(req.getRemoteHost()).append(" (").append(req.getRemoteAddr()).append(")");
return sb.toString();
}
private static String generateLogMessageForFailedRequest(FlexibleParameters parameters, Set<String> hiddenParameters) {
if (parameters == null) {
throw new NullPointerException("illegal parameters");
}
final StringBuilder sb = new StringBuilder("Parameters:\n");
for (String key : parameters.getKeys()) {
appendRequestParameter(sb.append("\t"), key, parameters.getParameterValues(key), hiddenParameters);
}
return sb.toString();
}
private static void appendRequestParameter(StringBuilder sb, String key, String[] values, Set<String> hiddenParameters) {
if (sb == null) {
throw new NullPointerException("illegal StringBuilder");
}
if (key == null) {
throw new NullPointerException("illegal key");
}
if (values == null) {
throw new NullPointerException("illegal values");
}
if (hiddenParameters == null) {
throw new NullPointerException("illegal hidden parameters");
}
sb.append(key).append(": ");
if (hiddenParameters.contains(key) == true) { // bail if we shouldn't show this
sb.append(" (hidden)");
}
else if (values.length == 1) { // 1 key, 1 value
sb.append(cleanParameterValue(values[0]));
}
else { // 1 key, multiple values
sb.append("[");
for (int i=0, len=values.length, mlen=values.length-1 ; i < len ; i++) {
sb.append(cleanParameterValue(values[i]));
if (i < mlen) {
sb.append("; ");
}
}
sb.append("]");
}
sb.append("\n");
}
private static String cleanParameterValue(String parameterValue) {
if (parameterValue == null) {
throw new NullPointerException("illegal value");
}
parameterValue = parameterValue.replaceAll("\\s+", " ");
if (parameterValue.length() > 100) {
parameterValue = parameterValue.substring(0, 100) + "…";
}
return parameterValue;
}
public static boolean hasVoyantServerResource(String resource) {
return Files.exists(getVoyantServerResourcePath(resource));
}
public static String getVoyantServerResource(String resource) throws IOException {
return new String(Files.readAllBytes(getVoyantServerResourcePath(resource)), Charset.forName("UTF-8"));
}
private static Path getVoyantServerResourcePath(String resource) {
// make file from resource to get filename only (avoid traversal vulnerability)
return Paths.get(System.getProperty("java.io.tmpdir"), "voyant-server", new File(resource).getName());
}
}
================================================
FILE: src/main/java/org/voyanttools/voyant/Voyant.java
================================================
package org.voyanttools.voyant;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.Calendar;
import java.util.Collections;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;
import javax.xml.transform.TransformerException;
import org.json.simple.JSONObject;
import org.json.simple.JSONValue;
import org.voyanttools.trombone.util.FlexibleParameters;
/**
* @author Stéfan Sinclair
*/
public class Voyant {
/**
* Pre-process the request. At the moment this will look if there's a referer,
* and if so but no input or corpus parameters are provided, it will redirect
* to the same URL but with the referer as input.
* @param request
* @param response
* @return true if preProcessing has resulted in a redirect
* @throws Exception
*/
public static boolean preProcess(HttpServletRequest request, HttpServletResponse response) throws Exception {
final String method = request.getMethod();
if (method==null) {return false;}
final FlexibleParametersFactory flexibleParametersFactory = new FlexibleParametersFactory(request.getSession().getServletContext());
final FlexibleParameters params = flexibleParametersFactory.getInstance(request);
// if we have a POST request, we need to create the corpus before redirecting
if (method.equals("POST") && request.getParameter("noRedirect") == null) {
return handlePostAndRedirect(request, response, params);
}
// if we have a GET request, we need to check for a useReferer parameter
else if (method.equals("GET")) {
return handleRefererAndRedirect(request, response, params);
}
return false;
}
public static String getBaseUrlString(HttpServletRequest request) {
StringBuilder sb = new StringBuilder("//").append(request.getServerName());
int serverPort = request.getServerPort();
if (serverPort!=80 && serverPort!=443) {
sb.append(":").append(serverPort);
}
String contextPath = request.getContextPath();
if (contextPath.isEmpty()==false) {
sb.append(contextPath);
}
sb.append("/");
return sb.toString();
}
/**
* The only time we should be here is when we have a post method to Voyant that includes input and that
* needs to be processed to create a new corpus, and then redirect to the URL with the corpus.
* @param request
* @param response
* @param params
* @return
* @throws IOException
* @throws TransformerException
* @throws ServletException
*/
private static boolean handlePostAndRedirect(HttpServletRequest request,
HttpServletResponse response, FlexibleParameters params) throws IOException, TransformerException, ServletException {
PostedInputResponseWrapper postedInputResponseWrapper = new PostedInputResponseWrapper(response);
request.getRequestDispatcher("/trombone").include(new PostedInputRequestWrapper(request, params), postedInputResponseWrapper);
String responseString = postedInputResponseWrapper.toString();
JSONObject obj= (JSONObject) JSONValue.parse(responseString);
JSONObject builder = (JSONObject) obj.get("stepEnabledCorpusCreator");
String corpusId = (String) builder.get("storedId");
final StringBuilder uri = new StringBuilder("./?corpus=").append(corpusId);
response.sendRedirect(uri.toString());
return true;
}
private static boolean handleRefererAndRedirect(HttpServletRequest request,
HttpServletResponse response, FlexibleParameters params) throws IOException {
// only do this if we have a referer
String referer = request.getHeader("referer");
if ((referer == null) || (referer.isEmpty() == true)) {
return false;
}
// only continue if we have useReferer parameter
if (params.getParameterBooleanValue("useReferer") == false) {return false;}
if ((params.containsKey("input") == false) && (params.containsKey("corpus") == false)) {
params.removeParameter("useReferer");
if (params.getParameterBooleanValue("forceUpdate") == true) {
referer = referer + String.valueOf(Calendar.getInstance().getTimeInMillis());
}
params.addParameter("input", referer);
final StringBuilder uri = new StringBuilder("./?"); // hoping this works
uri.append(params.getAsQueryString());
response.sendRedirect(uri.toString());
return true;
}
return false;
}
static class PostedInputRequestWrapper extends HttpServletRequestWrapper {
private final String TOOL = "corpus.CorpusCreator";
private FlexibleParameters params;
private PostedInputRequestWrapper(HttpServletRequest request, FlexibleParameters params) {
super(request);
this.params = params;
}
@Override
public Map<String,String[]> getParameterMap() {
// we need to create a new map because some servlets provide an unmodifiable map
Map<String, String[]> map = new HashMap<String, String[]>();
Enumeration<String> e = getParameterNames();
while (e.hasMoreElements()) {
String name = e.nextElement();
map.put(name, getParameterValues(name));
}
return map;
}
@Override
public Enumeration<String> getParameterNames() {
Set<String> names = new HashSet<String>();
names.addAll(params.getKeys());
if (!names.contains("tool")) {names.add("tool");}
return Collections.enumeration(names);
}
@Override
public String getParameter(String name) {
return name.equals("tool") ? TOOL : params.getParameterValue(name);
}
@Override
public String[] getParameterValues(String name) {
return name.equals("tool") ? new String[]{getParameter("tool")} : params.getParameterValues(name);
}
}
private static class PostedInputResponseWrapper extends HttpServletResponseWrapper {
private StringWriter stringWriter;
private PrintWriter writer;
private PostedInputResponseWrapper(HttpServletResponse response) {
super(response);
stringWriter = new StringWriter();
writer = new PrintWriter(stringWriter);
}
@Override
public PrintWriter getWriter() {
return writer;
}
@Override
public String toString() {
// writer.flush();
writer.flush();
return stringWriter.toString();
}
}
}
================================================
FILE: src/main/java/org/voyanttools/voyant/XslTransformer.java
================================================
package org.voyanttools.voyant;
import java.io.File;
import java.io.Writer;
import javax.servlet.ServletContext;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
import org.voyanttools.trombone.util.FlexibleParameters;
/**
* @author Stéfan Sinclair, Cyril Briquet
*/
public class XslTransformer {
static void transform(Source xml, Source xslt, Writer writer) throws TransformerException {
transform(new FlexibleParameters(), xml, xslt, writer);
}
static void transform(FlexibleParameters parameters, Source xml, Source xslt, Writer writer) throws TransformerException {
System.setProperty("javax.xml.transform.TransformerFactory", "net.sf.saxon.TransformerFactoryImpl");
final TransformerFactory transformerFactory = TransformerFactory.newInstance();
final Transformer transformer = transformerFactory.newTransformer(xslt);
for (String key : parameters.getKeys()) {
final String[] vals = parameters.getParameterValues(key);
transformer.setParameter(key, vals.length == 1 ? vals[0] : vals);
}
transformer.transform(xml, new StreamResult(writer));
}
static Source getTemplatePath(String template, File defaultDirectory) {
String templatePath = template;
if (templatePath.contains("/") == false) {
templatePath = new File(defaultDirectory, templatePath).toString();
}
if (templatePath.endsWith(".xsl") == false) {
templatePath += ".xsl";
}
return new StreamSource(templatePath);
}
public static Source getTemplateSource(String template, ServletContext servletContext) {
String path = servletContext.getRealPath("/resources/xsl");
return getTemplatePath(template, new File(path));
}
}
================================================
FILE: src/main/resources/.gitignore
================================================
/oauth.properties
================================================
FILE: src/main/resources/oauth.properties
================================================
clientId=foo
clientSecret=bar
oauthCallback=http://localhost:8080/voyant/spyral/oauth/callback
oauthCallbackRedirect=http://localhost:8080/voyant/spyral/cookie
================================================
FILE: src/main/resources/org/voyanttools/voyant/voyant-js.txt
================================================
# BUBBLELINES
resources/bubblelines/Bubblelines.js
# KNOTS
resources/knots/Knots.js
# CIRRUS
resources/cirrus/html5/Cirrus.js
resources/cirrus/html5/Word.js
resources/cirrus/html5/WordController.js
# WORDTREE
resources/doubletree/DoubleTree.js
resources/doubletree/Trie.js
# TERMSRADIO
resources/termsradio/TermsRadio.js
# UTILS
app/util/Assignable.js
app/util/Api.js
app/util/Localization.js
app/util/Colors.js
app/util/Deferrable.js
app/util/DetailedError.js
app/util/ResponseError.js
app/util/SparkLine.js
app/util/Toolable.js
app/util/Transferable.js
app/util/Variants.js
app/util/Downloadable.js
app/util/Storage.js
app/util/DiacriticsRemover.js
app/notebook/util/Show.js
app/notebook/util/Embed.js
# MODELS
app/data/model/AnalysisToken.js
app/data/model/Context.js
app/data/model/CorpusFacet.js
app/data/model/CorpusCollocate.js
app/data/model/CorpusTerm.js
app/data/model/CorpusNgram.js
app/data/model/Dimension.js
app/data/model/Document.js
app/data/model/DocumentEntity.js
app/data/model/DocumentQueryMatch.js
app/data/model/DocumentTerm.js
app/data/model/PrincipalComponent.js
app/data/model/RelatedTerm.js
app/data/model/StatisticalAnalysis.js
app/data/model/Token.js
app/data/model/TermCorrelation.js
# STORES
app/data/store/VoyantStore.js
app/data/store/CAAnalysis.js
app/data/store/Contexts.js
app/data/store/CorpusCollocates.js
app/data/store/CorpusFacets.js
app/data/store/CorpusTerms.js
app/data/store/DocumentQueryMatches.js
app/data/store/DocumentTerms.js
app/data/store/DocumentEntities.js
app/data/store/Documents.js
app/data/store/PCAAnalysis.js
app/data/store/DocSimAnalysis.js
app/data/store/CorpusNgrams.js
app/data/store/RelatedTerms.js
app/data/store/TermCorrelations.js
app/data/store/Tokens.js
app/data/store/TSNEAnalysis.js
app/data/store/NotebookFacets.js
# TABLES
app/data/util/Table.js
app/data/util/NetworkGraph.js
app/data/util/Geonames.js
# CORPUS (here because store is needed)
app/data/model/Corpus.js
# WIDGETS
app/widget/CodeEditor.js
app/widget/CorpusSelector.js
app/widget/ListEditor.js
app/widget/StopListOption.js
app/widget/QuerySearchField.js
app/widget/TotalPropertyStatus.js
app/widget/DocumentSelector.js
app/widget/CorpusDocumentSelector.js
app/widget/DownloadFilenameBuilder.js
app/widget/DownloadFileFormat.js
app/widget/DownloadOptions.js
app/widget/FontFamilyOption.js
app/widget/ColorPaletteOption.js
app/widget/VoyantChart.js
app/widget/LiveSearchGrid.js
app/widget/ProgressMonitor.js
app/widget/VoyantTableTransform.js
app/widget/CategoriesBuilder.js
app/widget/VoyantNetworkGraph.js
app/widget/ReaderGraph.js
# PANELS
app/panel/Panel.js
app/panel/VoyantTabPanel.js
# we need facet after panel but before catalogue
app/widget/Facet.js
app/panel/Bubbles.js
app/panel/Bubblelines.js
app/panel/Catalogue.js
app/panel/Cirrus.js
app/panel/CollocatesGraph.js
app/panel/Contexts.js
app/panel/CorpusCollocates.js
app/panel/CorpusTermSummary.js
app/panel/Correlations.js
app/panel/CorpusCreator.js
app/panel/DreamScape.js
app/panel/Knots.js
app/panel/Phrases.js
app/panel/CorpusTerms.js
app/panel/DocumentTerms.js
app/panel/Documents.js
app/panel/DocumentsFinder.js
app/panel/Embedder.js
app/panel/Fountain.js
app/panel/RezoViz.js
app/panel/Loom.js
app/panel/MicroSearch.js
app/panel/Mandala.js
app/panel/MicroOcp.js
app/panel/Reader.js
app/panel/SimpleDocReader.js
app/panel/ScatterPlot.js
app/panel/StreamGraph.js
app/panel/Summary.js
app/panel/TextualArc.js
app/panel/TopicContexts.js
app/panel/TermsBerry.js
app/panel/TermsRadio.js
app/panel/Trends.js
app/panel/NoTool.js
app/panel/VoyantFooter.js
app/panel/VoyantHeader.js
app/panel/CorpusSet.js
app/panel/ScatterSet.js
app/panel/Subset.js
app/panel/CollocatesSet.js
app/panel/BubblelinesSet.js
app/panel/CustomSet.js
app/panel/Veliza.js
app/panel/WordTree.js
app/panel/WordWall.js
app/panel/Topics.js
app/panel/Via.js
# NOTEBOOKS
app/notebook/editor/button/Add.js
app/notebook/editor/button/Edit.js
app/notebook/editor/button/Export.js
app/notebook/editor/button/Counter.js
app/notebook/editor/button/MoveDown.js
app/notebook/editor/button/MoveUp.js
app/notebook/editor/button/Remove.js
app/notebook/editor/button/Metadata.js
app/notebook/editor/button/Movement.js
app/notebook/editor/button/Run.js
app/notebook/editor/button/RunAll.js
app/notebook/editor/button/RunUntil.js
app/notebook/editor/EditorWrapper.js
app/notebook/editor/CodeEditor.js
app/notebook/editor/CodeEditorWrapper.js
app/notebook/editor/TextEditor.js
app/notebook/editor/TextEditorWrapper.js
app/notebook/storage/github/OctokitWrapper.js
app/notebook/storage/github/ReposBrowser.js
app/notebook/storage/github/FileSaver.js
app/notebook/storage/github/GitHubDialogs.js
app/notebook/storage/voyant/StorageDialogs.js
app/notebook/Catalogue.js
app/notebook/Notebook.js
# APPS
app/VoyantApp.js
app/VoyantCorpusApp.js
app/VoyantCorpusToolsetApp.js
app/VoyantDefaultApp.js
app/VoyantDocumentToolsetApp.js
app/VoyantNotebookApp.js
app/VoyantToolApp.js
================================================
FILE: src/main/webapp/.gitignore
================================================
/docs
/json
.#webclasspath
================================================
FILE: src/main/webapp/META-INF/MANIFEST.MF
================================================
Manifest-Version: 1.0
Class-Path:
================================================
FILE: src/main/webapp/WEB-INF/jetty-web.xml
================================================
<Configure class="org.eclipse.jetty.webapp.WebAppContext">
<Set name="maxFormContentSize">100000000</Set> <!-- should be 100MB -->
</Configure>
================================================
FILE: src/main/webapp/WEB-INF/web.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<context-param>
<param-name>version</param-name>
<param-value>2.4</param-value>
</context-param>
<context-param>
<param-name>build</param-name>
<param-value>M55</param-value>
</context-param>
<servlet>
<servlet-name>tool</servlet-name>
<jsp-file>/tool/index.jsp</jsp-file>
</servlet>
<servlet-mapping>
<servlet-name>catalogue</servlet-name>
<url-pattern>/catalogue/*</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>catalogue</servlet-name>
<jsp-file>/catalogue/index.jsp</jsp-file>
</servlet>
<servlet-mapping>
<servlet-name>microocp</servlet-name>
<url-pattern>/microocp/*</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>microocp</servlet-name>
<jsp-file>/microocp/index.jsp</jsp-file>
</servlet>
<servlet-mapping>
<servlet-name>tool</servlet-name>
<url-pattern>/tool/*</url-pattern>
</servlet-mapping>
<!-- we changed from spiral to spyral, we'll redirect in spyral -->
<servlet-mapping>
<servlet-name>spiral</servlet-name>
<url-pattern>/spiral/*</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>spiral</servlet-name>
<jsp-file>/spyral/index.jsp</jsp-file>
</servlet>
<servlet-mapping>
<servlet-name>spyral-oauth</servlet-name>
<url-pattern>/spyral/oauth</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>spyral-oauth</servlet-name>
<jsp-file>/spyral/oauth/index.jsp</jsp-file>
<init-param>
<param-name>oauthprops</param-name>
<param-value>oauth.properties</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>spyral-oauth-callback</servlet-name>
<url-pattern>/spyral/oauth/callback</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>spyral-oauth-callback</servlet-name>
<servlet-class>org.voyanttools.voyant.SpyralAuth</servlet-class>
<init-param>
<param-name>oauthprops</param-name>
<param-value>oauth.properties</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>spyral-cookie</servlet-name>
<url-pattern>/spyral/cookie</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>spyral-cookie</servlet-name>
<jsp-file>/spyral/cookie/index.jsp</jsp-file>
</servlet>
<servlet-mapping>
<servlet-name>spyral</servlet-name>
<url-pattern>/spyral/*</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>spyral</servlet-name>
<jsp-file>/spyral/index.jsp</jsp-file>
</servlet>
<!-- this is to handle a bad URL in Hermeneutica the book -->
<servlet-mapping>
<servlet-name>collocatesgraph</servlet-name>
<url-pattern>/CollocatesGraph/*</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>collocatesgraph</servlet-name>
<jsp-file>/tool/index.jsp</jsp-file>
</servlet>
<!-- available from http://localhost:8080/trombone?param=...¶m=...¶m=... -->
<servlet>
<servlet-name>trombone</servlet-name>
<servlet-class>org.voyanttools.voyant.Trombone</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>trombone</servlet-name>
<url-pattern>/trombone</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- make sure that Javascript is sent as UTF-8 (Jetty does this but Tomcat doesn't) -->
<mime-mapping>
<extension>js</extension>
<mime-type>application/javascript;charset=UTF-8</mime-type>
</mime-mapping>
<!-- universally set encoding for UTF-8 (simpliflies jsp includes)-->
<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<page-encoding>UTF-8</page-encoding>
</jsp-property-group>
</jsp-config>
</web-app>
================================================
FILE: src/main/webapp/app/Promise.js
================================================
/*
Ext.promise.Deferred adapted from:
[DeftJS](https://github.com/deftjs/deftjs5)
Copyright (c) 2012-2014 [DeftJS Framework Contributors](http://deftjs.org)
Open source under the [MIT License](http://en.wikipedia.org/wiki/MIT_License).
*/
/**
* Promises represent a future value; i.e., a value that may not yet be available.
*
* Users should **not** create instances of this class directly. Instead user code should
* use `new {@link Ext.Promise}()` or `new {@link Ext.Deferred}()` to create and manage
* promises. If the browser supports the standard `Promise` constructor, this class will
* not be used by `Ext.Promise`. This class will always be used by `Ext.Deferred` in order
* to provide enhanced capabilities beyond standard promises.
*
* A Promise's `{@link #then then()}` method is used to specify onFulfilled and onRejected
* callbacks that will be notified when the future value becomes available. Those callbacks
* can subsequently transform the value that was resolved or the reason that was rejected.
* Each call to `then` returns a new Promise of that transformed value; i.e., a Promise
* that is resolved with the callback return value or rejected with any error thrown by
* the callback.
*
* ## Basic Usage
*
* this.companyService.loadCompanies().then(
* function (records) {
* // Do something with result.
* },
* function (error) {
* // Do something on failure.
* }).
* always(function () {
* // Do something whether call succeeded or failed
* });
*
* The above code uses the `Promise` returned from the `companyService.loadCompanies()`
* method and uses `then()` to attach success and failure handlers. Finally, an `always()`
* method call is chained onto the returned promise. This specifies a callback function
* that will run whether the underlying call succeeded or failed.
*
* See `{@link Ext.Deferred}` for an example of using the returned Promise.
*
* [1]: http://wiki.ecmascript.org/doku.php?id=harmony:specification_drafts#april_14_2015_rev_38_final_draft
*
* @since 6.0.0
*/
Ext.define('Ext.promise.Promise', function (ExtPromise) {
var Deferred;
return {
requires: [
'Ext.promise.Deferred'
],
statics: {
/**
* @property CancellationError
* @static
* The type of `Error` propagated by the `{@link #method-cancel}` method. If
* the browser provides a native `CancellationError` then that type is used. If
* not, a basic `Error` type is used.
*/
CancellationError: Ext.global.CancellationError || Error,
_ready: function () {
// Our requires are met, so we can cache Ext.promise.Deferred
Deferred = Ext.promise.Deferred;
},
/**
* Returns a new Promise that will only resolve once all the specified
* `promisesOrValues` have resolved.
*
* The resolution value will be an Array containing the resolution value of each
* of the `promisesOrValues`.
*
* The public API's to use instead of this method are `{@link Ext.Promise#all}`
* and `{@link Ext.Deferred#all}`.
*
* @param {Mixed[]/Ext.promise.Promise[]/Ext.promise.Promise} promisesOrValues An
* Array of values or Promises, or a Promise of an Array of values or Promises.
* @return {Ext.promise.Promise} A Promise of an Array of the resolved values.
*
* @static
* @private
*/
all: function (promisesOrValues) {
//<debug>
if (!(Ext.isArray(promisesOrValues) || ExtPromise.is(promisesOrValues))) {
Ext.raise('Invalid parameter: expected an Array or Promise of an Array.');
}
//</debug>
return ExtPromise.when(promisesOrValues).then(function (promisesOrValues) {
var deferred = new Deferred(),
remainingToResolve = promisesOrValues.length,
results = new Array(remainingToResolve),
index, promiseOrValue, resolve, i, len;
if (!remainingToResolve) {
deferred.resolve(results);
}
else {
resolve = function (item, index) {
return ExtPromise.when(item).then (function (value) {
results[index] = value;
if (!--remainingToResolve) {
deferred.resolve(results);
}
return value;
}, function (reason) {
return deferred.reject(reason);
});
};
for (index = i = 0, len = promisesOrValues.length; i < len; index = ++i) {
promiseOrValue = promisesOrValues[index];
if (index in promisesOrValues) {
resolve(promiseOrValue, index);
}
else {
remainingToResolve--;
}
}
}
return deferred.promise;
});
},
/**
* Determines whether the specified value is a Promise (including third-party
* untrusted Promises or then()-ables), based on the Promises/A specification
* feature test.
*
* @param {Mixed} value A potential Promise.
* @return {Boolean} `true` if the given value is a Promise, otherwise `false`.
* @static
* @private
*/
is: function (value) {
return (Ext.isObject(value) || Ext.isFunction(value)) &&
Ext.isFunction(value.then);
},
/**
* Rethrows the specified Error on the next turn of the event loop.
* @static
* @private
*/
rethrowError: function (error) {
Ext.asap(function () {
throw error;
});
},
/**
* Returns a new Promise that either
*
* * Resolves immediately for the specified value, or
* * Resolves or rejects when the specified promise (or third-party Promise or
* then()-able) is resolved or rejected.
*
* The public API's to use instead of this method are `{@link Ext.Promise#resolve}`
* and `{@link Ext.Deferred#resolved}`.
*
* @param {Mixed} promiseOrValue A Promise (or third-party Promise or then()-able)
* or value.
* @return {Ext.Promise} A Promise of the specified Promise or value.
*
* @static
* @private
*/
when: function (value) {
var deferred = new Ext.promise.Deferred();
deferred.resolve(value);
return deferred.promise;
}
},
/**
* @property {Ext.promise.Deferred} Reference to this promise's
* `{@link Ext.promise.Deferred Deferred}` instance.
*
* @readonly
* @private
*/
owner: null,
/**
* NOTE: {@link Ext.promise.Deferred Deferreds} are the mechanism used to create new
* Promises.
* @param {Ext.promise.Deferred} owner The owning `Deferred` instance.
*
* @private
*/
constructor: function (owner) {
this.owner = owner;
},
/**
* Attaches onFulfilled and onRejected callbacks that will be notified when the future
* value becomes available.
*
* Those callbacks can subsequently transform the value that was fulfilled or the error
* that was rejected. Each call to `then` returns a new Promise of that transformed
* value; i.e., a Promise that is fulfilled with the callback return value or rejected
* with any error thrown by the callback.
*
* @param {Function} onFulfilled Optional callback to execute to transform a
* fulfillment value.
* @param {Function} onRejected Optional callback to execute to transform a rejection
* reason.
* @param {Function} onProgress Optional callback function to be called with progress
* updates.
* @param {Object} scope Optional scope for the callback(s).
* @return {Ext.promise.Promise} Promise that is fulfilled with the callback return
* value or rejected with any error thrown by the callback.
*/
then: function (onFulfilled, onRejected, onProgress, scope) {
var ref;
if (arguments.length === 1 && Ext.isObject(arguments[0])) {
ref = arguments[0];
onFulfilled = ref.success;
onRejected = ref.failure;
onProgress = ref.progress;
scope = ref.scope;
}
if (scope) {
if (onFulfilled) {
onFulfilled = Ext.Function.bind(onFulfilled, scope);
}
if (onRejected) {
onRejected = Ext.Function.bind(onRejected, scope);
}
if (onProgress) {
onProgress = Ext.Function.bind(onProgress, scope);
}
}
return this.owner.then(onFulfilled, onRejected, onProgress);
},
/**
* Attaches an onRejected callback that will be notified if this Promise is rejected.
*
* The callback can subsequently transform the reason that was rejected. Each call to
* `otherwise` returns a new Promise of that transformed value; i.e., a Promise that
* is resolved with the original resolved value, or resolved with the callback return
* value or rejected with any error thrown by the callback.
*
* @param {Function} onRejected Callback to execute to transform a rejection reason.
* @param {Object} scope Optional scope for the callback.
* @return {Ext.promise.Promise} Promise of the transformed future value.
*/
otherwise: function (onRejected, scope) {
var ref;
if (arguments.length === 1 && Ext.isObject(arguments[0])) {
ref = arguments[0];
onRejected = ref.fn;
scope = ref.scope;
}
if (scope != null) {
onRejected = Ext.Function.bind(onRejected, scope);
}
return this.owner.then(null, onRejected);
},
/**
* Attaches an onCompleted callback that will be notified when this Promise is completed.
*
* Similar to `finally` in `try... catch... finally`.
*
* NOTE: The specified callback does not affect the resulting Promise's outcome; any
* return value is ignored and any Error is rethrown.
*
* @param {Function} onCompleted Callback to execute when the Promise is resolved or
* rejected.
* @param {Object} scope Optional scope for the callback.
* @return {Ext.promise.Promise} A new "pass-through" Promise that is resolved with
* the original value or rejected with the original reason.
*/
always: function (onCompleted, scope) {
var ref;
if (arguments.length === 1 && Ext.isObject(arguments[0])) {
ref = arguments[0];
onCompleted = ref.fn;
scope = ref.scope;
}
if (scope != null) {
onCompleted = Ext.Function.bind(onCompleted, scope);
}
return this.owner.then(function (value) {
debugger
try {
onCompleted();
}
catch (e) {
ExtPromise.rethrowError(e);
}
return value;
}, function (reason) {
try {
onCompleted();
}
catch (e) {
ExtPromise.rethrowError(e);
}
throw reason;
});
},
/**
* Terminates a Promise chain, ensuring that unhandled rejections will be rethrown as
* Errors.
*
* One of the pitfalls of interacting with Promise-based APIs is the tendency for
* important errors to be silently swallowed unless an explicit rejection handler is
* specified.
*
* For example:
*
* promise.then(function () {
* // logic in your callback throws an error and it is interpreted as a
* // rejection. throw new Error("Boom!");
* });
*
* // The Error was not handled by the Promise chain and is silently swallowed.
*
* This problem can be addressed by terminating the Promise chain with the done()
* method:
*
* promise.then(function () {
* // logic in your callback throws an error and it is interpreted as a
* // rejection. throw new Error("Boom!");
* }).done();
*
* // The Error was not handled by the Promise chain and is rethrown by done() on
* // the next tick.
*
* The `done()` method ensures that any unhandled rejections are rethrown as Errors.
*/
done: function () {
this.owner.then(null, ExtPromise.rethrowError);
},
/**
* Cancels this Promise if it is still pending, triggering a rejection with a
* `{@link #CancellationError}` that will propagate to any Promises originating from
* this Promise.
*
* NOTE: Cancellation only propagates to Promises that branch from the target Promise.
* It does not traverse back up to parent branches, as this would reject nodes from
* which other Promises may have branched, causing unintended side-effects.
*
* @param {Error} reason Cancellation reason.
*/
cancel: function (reason) {
if (reason == null) {
reason = null;
}
this.owner.reject(new this.self.CancellationError(reason));
},
/**
* Logs the resolution or rejection of this Promise with the specified category and
* optional identifier. Messages are logged via all registered custom logger functions.
*
* @param {String} identifier An optional identifier to incorporate into the
* resulting log entry.
*
* @return {Ext.promise.Promise} A new "pass-through" Promise that is resolved with
* the original value or rejected with the original reason.
*/
log: function (identifier) {
if (identifier == null) {
identifier = '';
}
return this._owner.then(function (value) {
Ext.log("" + (identifier || 'Promise') + " resolved with value: " + value);
return value;
}, function (reason) {
Ext.log("" + (identifier || 'Promise') + " rejected with reason: " + reason);
throw reason;
});
}
}},
function (ExtPromise) {
ExtPromise._ready();
});
================================================
FILE: src/main/webapp/app/VoyantApp.js
================================================
Ext.define('Voyant.VoyantApp', {
extend: 'Ext.app.Application',
mixins: ['Voyant.util.Deferrable','Voyant.util.Localization','Voyant.util.Api','Voyant.util.Colors'],
requires: ['Voyant.util.ResponseError'],
name: 'VoyantApp',
statics: {
i18n: {
},
api: {
palette: 'default',
categories: 'auto',
lang: undefined,
debug: undefined
}
},
config: {
baseUrl: undefined,
tromboneUrl: undefined,
categoriesManager: undefined
},
constructor: function(config) {
this.setBaseUrl(this.config.baseUrl);
// set the Trombone URL from the baseURL // TODO: maybe allow this to be overridden
this.setTromboneUrl(this.config.baseUrl+'trombone');
// set the application for the Corpus so that we can use a simple constructor
Voyant.application = this;
this.mixins['Voyant.util.Api'].constructor.apply(this, arguments);
this.mixins['Voyant.util.Colors'].constructor.apply(this, arguments);
this.setCategoriesManager(new Spyral.Categories());
// inheritance/mixin hack
// var catProps = Object.getOwnPropertyNames(categories).concat(Object.getOwnPropertyNames(Object.getPrototypeOf(categories)));
// catProps.forEach(function(propName) {
// if (this[propName] === undefined) {
// if (typeof categories[propName] === 'function') {
// this[propName] = categories[propName].bind(this);
// } else {
// this[propName] = categories[propName];
// }
// }
// }, this)
this.getCategoriesManager().addFeature('color');
this.getCategoriesManager().addFeature('font', '"Palatino Linotype", "Book Antiqua", Palatino, serif');
// call the parent constructor
this.callParent(arguments);
// override Voyant.util.Colors methods to add palette api param
var _getColor = this.getColor;
this.getColor = function(index, returnHex) {
return _getColor.apply(this, [this.getApiParam('palette'), index, returnHex]);
}
var _getColorForTerm = this.getColorForTerm;
this.getColorForTerm = function(term, returnHex) {
return _getColorForTerm.apply(this, [this.getApiParam('palette'), term, returnHex]);
}
},
getBaseUrl: function() {
var baseUrl = this.callParent();
return baseUrl.indexOf("//")==0 ? location.protocol+baseUrl : baseUrl;
},
getBaseUrlFull: function() {
return window.location.origin+this.getBaseUrl(); // maybe doesn't work in all browsers?
},
getRelativeUrl: function() {
var url = window.location.pathname.substring(this.getBaseUrl().length);
var relative = "";
for (var i=0, len=url.split("/").length-1; i<len; i++) {
relative+="../"
}
return relative;
},
getTools: function() {
return [{type: 'maximize'},{type: 'help'}]
},
launch: function() {
Ext.tip.QuickTipManager.init();
Ext.apply(Ext.tip.QuickTipManager.getQuickTip(), {
showDelay: 50 // shorten the delay before showing
});
this.callParent(arguments);
},
tromboneCall: function(config) {
var config = config ? config : {};
Ext.applyIf(config, {
url: this.getTromboneUrl()
});
if (!config.success && !config.failure && !config.callback) {
Ext.applyIf(config, {
url: this.getTromboneUrl(),
scope: this,
callback: function(response, success, options) {
this.dispatchEvent(config.tool+"Loaded", response, success, options)
}
});
};
Ext.Ajax.request(config);
},
getViewport: function() {
return Ext.ComponentQuery.query('viewport')[0];
},
dispatchEvent: function(eventName, src) {
var viewport = this.getViewport();
var panels = viewport.query("panel,chart");
var isHeard = false;
// tell the app
if (this.hasListener && this.hasListener(eventName)) {
this.fireEvent.apply(this, arguments);
isHeard = true
}
// tell the panels, except the current one
for (var i=0; i<panels.length; i++) {
if (panels[i].hasListener && panels[i].hasListener(eventName)) {
if (src && src.getId && panels[i].getId && src.getId()==panels[i].getId()) {
continue; // don't send to self
}
isHeard = true;
panels[i].fireEvent.apply(panels[i], arguments);
}
}
if (!isHeard) {
// let the application know that we have an unhandledEvent
var args = ["unhandledEvent", src, eventName];
for (var i=2; i<arguments.length; i++) {args.push(arguments[i])}
this.fireEvent.apply(this, args);
}
},
showResponseError: function(config, response) {
this.showError(Ext.create("Voyant.util.ResponseError", {msg: (Ext.isString(config) ? config : config.msg), response: response}))
},
showError: function(config, response) {
if (config instanceof Voyant.util.ResponseError) {
config = {
message: config.getMsg()+"<p class='error'>\n"+config.getError()+" … "+
"<a href='#' onclick=\"window.open('').document.write(unescape('<pre>"+escape(config.getDetails())+"</pre>')); return false;\">more</a></p>"
}
} else if (config instanceof Ext.data.operation.Operation) {
return this.showError(Ext.create("Voyant.util.ResponseError", config.getError()))
} else {
if (Ext.isString(config)) {
config = {message: config}
} else if (Ext.isObject(config)) {
if (config.responseText) {
// rebundle as error (without nice message)
return this.showResponseError(config.statusText, config);
} else if (config.statusText) {
return this.showResponseError(config.statusText, config)
}
}
// maybe handle other forms
}
Ext.applyIf(config, {
title: this.localize("error"),
buttons: Ext.Msg.OK,
icon: Ext.MessageBox.ERROR,
autoScroll: true
})
Ext.Msg.show(config);
},
getToolConfigFromToolXtype: function(xtype) {
cls = Ext.ClassManager.getByAlias("widget."+xtype);
return {
xtype: xtype,
title: this._localizeClass(cls, "title"),
tooltip: { // this needs to be an object for compatibility (other configs can be changed)
text: this._localizeClass(cls, "helpTip")
},
glyph: cls && cls.glyph ? cls.glyph : 'xf12e@FontAwesome'
};
},
/**
* Opens a URL in a new window (handling the case when popup windows aren't allowed).
* @param {String} url The URL to open.
* @private
*/
openUrl: function(url) {
var win = window.open(url);
if (!win) { // popup blocked
Ext.Msg.show({
title: "Popup Blocked",
buttonText: {ok: "Close"},
icon: Ext.MessageBox.INFO,
message: "A popup window was blocked. <a href='"+url+"' target='_blank' class='link'>Click here</a> to open the new window.",
buttons: Ext.Msg.OK
});
}
}
});
================================================
FILE: src/main/webapp/app/VoyantCorpusApp.js
================================================
Ext.define('Voyant.VoyantCorpusApp', {
extend: 'Voyant.VoyantApp',
name: 'VoyantCorpusApp',
requires: ['Voyant.panel.CorpusSet','Voyant.data.model.Corpus','Voyant.panel.VoyantHeader', 'Voyant.panel.VoyantFooter', 'Voyant.panel.CorpusCreator', 'Voyant.panel.Cirrus', 'Voyant.panel.Summary', 'Voyant.panel.DreamScape', 'Voyant.panel.CorpusTerms', 'Voyant.panel.Reader', 'Voyant.panel.Documents', 'Voyant.panel.Trends', 'Voyant.panel.Contexts', 'Voyant.panel.DocumentTerms','Voyant.panel.CorpusCollocates','Voyant.panel.CollocatesGraph','Voyant.panel.Phrases','Voyant.panel.ScatterPlot','Voyant.panel.TopicContexts','Voyant.panel.TermsRadio','Voyant.panel.TermsBerry'],
statics: {
i18n: {
},
api: {
toolFlow: undefined
}
},
constructor: function() {
this.mixins['Voyant.util.Api'].constructor.apply(this, arguments);
this.callParent(arguments);
},
config: {
corpus: undefined,
corpusAccess: undefined,
moreTools: [{
i18n: 'moreToolsScaleCorpus',
glyph: 'xf065@FontAwesome',
items: ['cirrus','corpusterms','bubblelines','correlations','corpuscollocates','dreamscape','loom','mandala','microsearch','streamgraph','phrases','documents','summary','trends','scatterplot','termsradio','topics','veliza','wordtree']
},{
i18n: 'moreToolsScaleDocument',
glyph: 'xf066@FontAwesome',
items: ['bubbles','cirrus','contexts','documentterms','reader','textualarc','trends','knots','topics']
},{
i18n: 'moreToolsTypeViz',
glyph: 'xf06e@FontAwesome',
items: ['cirrus','bubblelines','bubbles','collocatesgraph','dreamscape','loom','knots','mandala','microsearch','streamgraph','scatterplot','textualarc','trends','termsberry','termsradio','wordtree']
},{
i18n: 'moreToolsTypeGrid',
glyph: 'xf0ce@FontAwesome',
items: ['corpusterms','corpuscollocates','correlations','phrases','contexts','documentterms','documents','topics']
},{
i18n: 'moreToolsTypeOther',
glyph: 'xf035@FontAwesome',
items: ['reader','summary','veliza']
}]
},
launch: function(config) {
this.callParent(arguments);
if (this.hasQueryToLoad()) {
var queryParams = Ext.Object.fromQueryString(document.location.search);
if (!queryParams.corpus && this.getCorpusId && this.getCorpusId()) {
queryParams.corpus = this.getCorpusId();
}
if (config && config.useCache) { // for large corpora
queryParams.useCache = config.useCache;
}
this.loadCorpusFromParams(queryParams);
if (queryParams.palette) {
if (queryParams.palette.indexOf(",")>-1) { // treat as inline
var palette = Ext.decode(queryParams.palette);
this.addColorPalette(queryParams.palette, palette);
} else {
this.loadColorPaletteForCorpus(queryParams.corpus, queryParams.palette);
}
}
} else {
var viewport = this.getViewport();
if (viewport) {
var corpuscreator = viewport.down("corpuscreator")
if (corpuscreator) {
var toast = corpuscreator.toastInfo({
html: this.localize('didYouKnowText'),
title: this.localize('didYouKnow'),
anchor: corpuscreator.down("textareafield"),
align: 'tr',
listeners: {
beforeclose: {
fn: function() {
this.getHeader().getTools().forEach(function(tool) {
if (tool.type=="gear" || tool.type=='help') {
tool.getEl().frame("#ff0000", 1, { duration: 3000 })
}
});
},
scope: corpuscreator
}
}
});
}
}
}
},
loadCorpusFromParams: function(params) {
var me = this;
var view = me.getViewport()
view.mask(this.localize("fetchingCorpus"));
if (params.archive) { // fix a few URLs we know about
if (Ext.isString(params.archive)) {params.archive=[params.archive]}
params.archive = params.archive.map(function(archive) {
return archive.replace('/blogs.sub.uni-hamburg.de/hup/lhn/', '/wikis.sub.uni-hamburg.de/lhn/index.php/')
.replace('/hup.sub.uni-hamburg.de/', '/wikis.sub.uni-hamburg.de/')
})
}
this.validateCorpusLoadParams(params);
new Voyant.data.model.Corpus(params).then(function(corpus) {
view.unmask();
me.setCorpus(corpus);
if (me.validateCorpusAccess()) {
me.dispatchEvent('loadedCorpus', this, corpus);
}
}).otherwise(function() {
view.unmask();
})
},
validateCorpusLoadParams: function(params) {
// leave untouched by default, this can be overridden
},
validateCorpusAccess: function() {
var me = this, view = me.getViewport(), corpus = this.getCorpus();
if (corpus && corpus.requiresPassword() && !me.getViewport().query("panel").every(function(panel) {
return !panel.isConsumptive
})) {
var noPasswordAccess = corpus.getNoPasswordAccess();
var passWin = Ext.create('Ext.window.Window', {
title: me.localize('passwordRequiredTitle'),
layout: 'fit',
items: {
padding: 10,
flex: 1,
width: 300,
layout: {
type: 'vbox',
align: 'stretch'
},
items: [
{
html: '<p>'+me.localize('passwordRequiredMessage')+'</p>' + (noPasswordAccess=='NONCONSUMPTIVE' ? '<p>'+me.localize('nonConsumptiveMessage')+"</p>" : "")+'</p>'
},{
xtype: 'textfield',
fieldLabel: me.localize('password')
}
],
bbar: {
// ui: 'footer',
layout: {pack: 'center'},
items: [{
text: me.localize('passwordValidateButton'),
ui: 'default',
handler: function() {
var password = passWin.query("textfield")[0].getValue().trim();
if (password.length==0) {
me.showError({
message: me.localize('noPasswordGiven')
})
return;
}
passWin.mask();
Ext.Ajax.request({
url: me.getTromboneUrl(),
params: {
corpus: corpus.getId(),
passwordForSession: password
},
method: 'POST',
success: function(result, request) {
passWin.unmask();
var access = result.responseText;
if (access=="ADMIN" || access=="ACCESS") {
passWin.close();
view.unmask();
me.setCorpusAccess(access);
me.dispatchEvent('loadedCorpus', this, corpus);
}
else {
me.showError({
message: me.localize('badPassword')
})
}
},
failure: function(result, request) {
passWin.unmask();
me.showError({
message: me.localize('passwordValidationError')
})
}
});
}
},{
text: me.localize('nonConsumptiveButton'),
hidden: corpus.getNoPasswordAccess()=='NONE',
handler: function() {
passWin.mask();
Ext.Ajax.request({
url: me.getTromboneUrl(),
params: {
corpus: corpus.getId(),
passwordForSessionRemove: true
},
method: 'POST',
callback: function(result, request) { // do this even if request fails
passWin.unmask();
passWin.close();
view.unmask();
me.dispatchEvent('loadedCorpus', me, corpus);
}
});
}
}]
}
}
}).show();
return false;
} else {
return true
}
},
hasQueryToLoad: function(params) {
if (!params) {
params = Ext.Object.fromQueryString(document.location.search);
}
return params.corpus || params.input || (this.getCorpusId && this.getCorpusId()); // TODO: should this include "archive" from V1?
},
loadColorPaletteForCorpus: function(corpusId, paletteId) {
Ext.Ajax.request({
url: this.getTromboneUrl(),
params: {
tool: 'resource.StoredResource',
retrieveResourceId: paletteId,
corpus: corpusId
},
success: function(response, req) {
var json = Ext.util.JSON.decode(response.responseText);
var value = json.storedResource.resource;
var palette = Ext.decode(value);
this.addColorPalette(paletteId, palette);
},
failure: function(response) {
this.setApiParam('palette', undefined);
},
scope: this
});
},
loadCategoryData: function(id) {
return this.getCategoriesManager().load(id, {
trombone: Voyant.application.getTromboneUrl()
});
},
saveCategoryData: function(data) {
return this.getCategoriesManager().save({}, {
trombone: Voyant.application.getTromboneUrl()
});
},
listeners: {
loadedCorpus: function(src, corpus) {
this.setCorpus(corpus);
// let's load the categories based on the corpus
if (this.getApiParam("categories")) {
this.loadCategoryData(this.getApiParam("categories")).then(function() {
// assign colors
for (var category in this.getCategoriesManager().getCategories()) {
var color = this.getCategoriesManager().getCategoryFeature(category, 'color');
if (color !== undefined) {
var rgb = this.hexToRgb(color);
var terms = this.getCategoriesManager().getCategoryTerms(category);
for (var i = 0; i < terms.length; i++) {
this.setColorForTerm(terms[i], rgb);
}
}
}
}.bind(this));
}
this.on("unhandledEvent", function(src, eventName, data) {
var url = this.getBaseUrl() + '?corpus='+corpus.getAliasOrId();
var api = this.getModifiedApiParams() || {}; // use application, not tool
delete api.view; // make sure we show default view
if (eventName=='termsClicked') {
// data can be a simple array of terms or an array of term objects
if (Ext.isArray(data) && "term" in data[0] && "docIndex" in data[0]) {
let termsObj = {};
let docIndObj = {};
data.forEach(function(datum) {
termsObj[datum.term]=true;
docIndObj[datum.docIndex]=true;
})
api.query=Object.keys(termsObj);
api.docIndex=Object.keys(docIndObj);
} else {
api.query=data;
}
}
else if (eventName=='documentsClicked') {
var docIndex = [];
if (data.forEach) {
data.forEach(function(doc) {
docIndex.push(doc.getIndex())
})
}
api.docIndex=docIndex
}
else if (eventName=='corpusTermsClicked') {
if (data.map) {
api.query = data.map(function(corpusTerm) {return corpusTerm.getTerm()});
}
}
else if (eventName=='documentTermsClicked') {
if (data.map) {
api.query = data.map(function(documentTerm) {return documentTerm.getTerm()});
api.docIndex = data.map(function(documentTerm) {return documentTerm.getDocIndex()});
}
}
else {
if (console) {console.warn("Unhandled event: "+eventName, data)}
return;
}
if (api.toolFlow) {
var toolFlow = Ext.Array.from(api.toolFlow.split(","));
api.view = toolFlow.shift();
if (toolFlow.length>0) {
api.toolFlow = toolFlow.join(",");
} else {
delete api.toolFlow
}
}
url += "&"+Ext.Object.toQueryString(api)
this.openUrl(url)
})
}
}
});
================================================
FILE: src/main/webapp/app/VoyantCorpusToolsetApp.js
================================================
Ext.define('Voyant.panel.DocumentClusters', {
extend: 'Ext.panel.Panel',
alias: 'widget.documentclusters',
title: "Document Clusters"
})
// extend: 'Ext.panel.Panel',
// alias: 'widget.rezoviz',
// title: "RezoViz"
//})
Ext.define('Voyant.VoyantCorpusToolsetApp', {
extend : 'Voyant.VoyantCorpusApp',
requires: ['Voyant.panel.Contexts','Voyant.panel.CollocatesGraph','Voyant.panel.Trends'],
name : 'VoyantCorpusToolsetApp',
launch: function() {
Ext.create('Ext.container.Viewport', {
layout: 'border',
items: [{
region: 'south',
xtype: 'voyantfooter'
}, {
xtype: 'tabpanel',
region: 'center',
split: true,
items: [{
xtype: 'cirrus',
collapsible: true
},{
xtype: 'corpusterms',
collapsible: true
},{
xtype: 'documents',
collapsible: true
},{
xtype: 'rezoviz',
collapsible: true
},{
xtype: 'trends',
collapsible: true
},{
xtype: 'documentclusters',
collapsible: true
}],
flex: 6
}]
});
this.callParent(arguments);
}
});
================================================
FILE: src/main/webapp/app/VoyantDefaultApp.js
================================================
Ext.define('Voyant.VoyantDefaultApp', {
extend : 'Voyant.VoyantCorpusApp',
mixins: ['Voyant.util.Api'],
name : 'VoyantDefaultApp',
constructor: function() {
this.mixins['Voyant.util.Api'].constructor.apply(this, arguments);
this.callParent(arguments);
},
statics: {
i18n: {
},
api: {
view: 'corpusset',
stopList: 'auto',
panels: undefined,
rtl: undefined
}
},
listeners: {
loadedCorpus: function(src, corpus) {
this.viewport.down('voyantheader').collapse();
this.viewport.down('#toolsContainer').setActiveItem(1);
var corpusId = this.getCorpusId && this.getCorpusId() ? this.getCorpusId() : undefined;
if (window.history.pushState && !corpusId) {
// add the corpusId to the url
var corpusId = corpus.getAliasOrId();
var queryParams = Ext.Object.fromQueryString(document.location.search);
var url = this.getBaseUrl()+'?corpus='+corpusId;
for (var key in queryParams) {
if (key !== 'corpus') {
var vals = Ext.isString(queryParams[key]) ? [queryParams[key]] : queryParams[key];
if (Ext.isArray(vals)) {
vals.forEach(function(val) {
url += '&'+key+'='+val;
})
}
}
}
window.history.pushState({
corpus: corpusId
}, 'Corpus: '+corpusId, url);
}
}
},
getViewComponent: function() {
return this.viewport.down('#toolsContainer-main')
},
launch: function() {
var queryParams = Ext.Object.fromQueryString(document.location.search) || {};
var view = this.getApiParam('view', 'CorpusSet');
var xtype = view.toLowerCase();
if (!Ext.ClassManager.getByAlias("widget."+xtype) || queryParams.noskin) {
Ext.Msg.show({
title: this.localize('noViewErrorTitle'),
message: new Ext.Template(this.localize(queryParams.noskin ? 'noViewKnownErrorTpl' : 'noViewErrorTpl')).apply({
view: queryParams.noskin ? queryParams.noskin : view,
additional: queryParams.noskin && queryParams.noskin == 'convert' ? this.localize(queryParams.noskin+'SkinMsg') : ''
}),
buttons: Ext.Msg.OK,
icon: Ext.Msg.ERROR
});
xtype = 'corpusset'; // switch to default view
}
var SPLIT_SIZE = 5;
this.viewport = Ext.create('Ext.container.Viewport', {
layout: 'border',
rtl: (this.getApiParam('rtl')!==undefined || Voyant.util.Localization.LANGUAGE=="ar" || Voyant.util.Localization.LANGUAGE=="he"),
items: [{
xtype: 'voyantheader',
region: 'north'
},{
region: 'south',
xtype: 'voyantfooter'
},{
region: 'center',
layout: 'card',
itemId: 'toolsContainer',
activeItem: 0,
items: [{
xtype : 'container',
layout: {
type: 'vbox',
pack: 'center',
align: 'center'
},
items: [{
xtype: 'corpuscreator'
},{
xtype: 'container',
width: 800,
html: "<div id='voyantIs' style='font-style: italic; text-align: center; margin-top: 10px;'><div>"+this.localize('voyantIs')+"</div>" + (this.localize('translatedBy').indexOf("English") == -1 ? "<div>"+this.localize('translatedBy')+"</div>" : "") +
(this.getCorpusCreatorText && this.getCorpusCreatorText().trim().length>0 ? "<div id='corpusCreatorText'>"+this.getCorpusCreatorText()+"</div>" : "")
}]
},{
layout: 'fit',
itemId: 'toolsContainer-main',
items: {
xtype: xtype
}
}]
}]
});
this.callParent(arguments);
}
});
================================================
FILE: src/main/webapp/app/VoyantDocumentToolsetApp.js
================================================
Ext.define('Voyant.panel.MoreLikeThis', {
extend: 'Ext.panel.Panel',
alias: 'widget.morelikethis',
title: "More Like this"
})
Ext.define('Voyant.VoyantDocumentToolsetApp', {
extend : 'Voyant.VoyantCorpusApp',
requires: ['Voyant.panel.Contexts','Voyant.panel.CollocatesGraph','Voyant.panel.Trends'],
name : 'VoyantDocumentToolsetApp',
launch: function() {
Ext.create('Ext.container.Viewport', {
layout: 'border',
items: [{
region: 'south',
xtype: 'voyantfooter'
}, {
xtype: 'tabpanel',
region: 'center',
split: true,
items: [{
xtype: 'cirrus',
collapsible: true
},{
xtype: 'documentterms',
collapsible: true
},{
xtype: 'contexts',
collapsible: true
},{
xtype: 'collocatesgraph',
collapsible: true
},{
xtype: 'trends',
collapsible: true
},{
xtype: 'morelikethis',
collapsible: true
}],
flex: 6
}]
});
this.callParent(arguments);
}
});
================================================
FILE: src/main/webapp/app/VoyantNotebookApp.js
================================================
Ext.define('Voyant.VoyantNotebookApp', {
extend : 'Voyant.VoyantApp',
requires: ['Voyant.panel.VoyantFooter','Voyant.notebook.Notebook','Voyant.data.model.Corpus','Voyant.notebook.util.Show'],
name : 'VoyantNotebookApp',
launch: function() {
Ext.create('Ext.container.Viewport', {
layout: 'border',
items: [{
xtype: 'notebook',
region: 'center'
},{
xtype: 'voyantfooter',
region: 'south'
}]
});
this.callParent(arguments);
}
});
================================================
FILE: src/main/webapp/app/VoyantToolApp.js
================================================
Ext.define('Voyant.VoyantToolApp', {
extend : 'Voyant.VoyantCorpusApp',
name : 'VoyantToolApp',
statics: {
api: {
minimal: undefined,
embeddedApiId: undefined
}
},
launch: function() {
var items = [], me = this;
if (!this.getApiParam('minimal')) {
items.push({
region: 'south',
xtype: 'voyantfooter'
})
};
items.push({
region: 'center',
layout: 'fit',
itemId: 'toolcontainer',
items: {
xtype: this.getApiParam('embeddedApiId') ? 'container' : this.getTool()
},
listeners: {
afterrender: function(container) {
if (me.getApiParam('embeddedApiId')) {
var dfd = me.getDeferred(this);
container.mask(this.localize('loadingConfiguration'));
Ext.Ajax.request({
url: me.getTromboneUrl(),
params: {
tool: 'resource.StoredResource',
retrieveResourceId: this.getApiParam('embeddedApiId')
}
}).then(function(response) {
dfd.resolve();
var json = Ext.util.JSON.decode(response.responseText);
var configString = decodeURIComponent(json.storedResource.resource);
var config = Ext.decode(configString);
var tool = Ext.create({xtype: me.getTool()});
tool.setApiParams(config);
container.unmask();
container.remove(container.down('container'));
container.add(tool);
if (config.corpus) {
me.loadCorpusFromParams(config);
}
}).otherwise(function(response) {
if (me.getTargetEl) {
Voyant.notebook.util.Show.TARGET = me.getTargetEl();
showError(response);
}
Voyant.application.showError(response);
dfd.reject();
})
}
},
scope: this
}
});
Ext.create('Ext.container.Viewport', {
layout: 'border',
items: items
});
this.callParent(arguments);
}
});
================================================
FILE: src/main/webapp/app/data/model/AnalysisToken.js
================================================
Ext.define('Voyant.data.model.AnalysisToken', {
extend: 'Ext.data.Model',
idProperty: 'term',
fields: [
{name: 'term'},
{name: 'rawFreq', type: 'int'},
{name: 'relativeFreq', type: 'number'},
{name: 'cluster', type: 'int'},
{name: 'clusterCenter', type: 'boolean'},
{name: 'vector'}
]
});
================================================
FILE: src/main/webapp/app/data/model/Context.js
================================================
Ext.define('Voyant.data.model.Context', {
extend: 'Ext.data.Model',
fields: [
{name: 'id'},
{name: 'docIndex', 'type': 'int'},
{name: 'position', 'type': 'int'},
{name: 'docId'},
{name: 'left'},
{name: 'keyword'},
{name: 'term'},
{name: 'right'}
],
getDocIndex: function() {return this.get("docIndex")},
getLeft: function() {return this.get("left")},
getMiddle: function() {return this.get("middle")},
getHighlightedMiddle: function() {return "<span class='keyword'>"+this.getMiddle()+"</span>"},
getRight: function() {return this.get("right")},
getPosition: function() {return this.get("position")},
getHighlightedContext: function() {return this.getLeft()+this.getHighlightedMiddle()+this.getRight();}
});
================================================
FILE: src/main/webapp/app/data/model/Corpus.js
================================================
/*
* @class Corpus
* Corpus is possibly the most important class since in most cases you'll first create/load a corpus and then
* interact with data derived from the corpus. In the simplest scenario you can create/load a corpus with a
* corpus ID, a text string, a URL, or an array of text strings or URLs (see the {@link #constructor} and
* {@link #input} config for a bit more information).
*
* new Corpus("austen"); // load an existing corpus
*
* new Corpus("Hello Voyant!"); // load a corpus with the specified text string
*
* new Corpus("http://hermeneuti.ca/"); // load a corpus with a URL
*
* It's important to understand that the constructor actually returns a promise for a corpus, since the corpus
* data is loaded asynchronously. All documented methods below handle the promise properly.
*
* new Corpus("Hello Voyant!").show(); // the show method is called when the promise is filled
*
* You can also handle the promise yourself using {@link Ext.promise.Promise#then then}.
*
* new Corpus("Hello Voyant!").then(function(corpus) {
* corpus.show(); // essentially the same as above (but more work:)
* });
*
* There are many parameters that can be specified when creating a corpus:
*
* - **sources**: {@link #corpus}, {@link #input}
* - **formats**:
* - **Text**: {@link #inputRemoveFrom}, {@link #inputRemoveFromAfter}, {@link #inputRemoveUntil}, {@link #inputRemoveUntilAfter}
* - **XML**: {@link #xmlAuthorXpath}, {@link #xmlCollectionXpath}, {@link #xmlContentXpath}, {@link #xmlExtraMetadataXpath}, {@link #xmlKeywordXpath}, {@link #xmlPubPlaceXpath}, {@link #xmlPublisherXpath}, {@link #xmlTitleXpath}
* - **Tables**: {@link #tableAuthor}, {@link #tableContent}, {@link #tableDocuments}, {@link #tableNoHeadersRow}, {@link #tableTitle}
* - **other**: {@link #inputFormat}, {@link #subTitle}, {@link #title}, {@link #tokenization}
*/
Ext.define('Voyant.data.model.Corpus', {
alternateClassName: ["Corpus"],
mixins: ['Voyant.notebook.util.Embed','Voyant.notebook.util.Show','Voyant.util.Transferable','Voyant.util.Localization','Voyant.util.Assignable'],
transferable: ['loadCorpusTerms','loadTokens','getPlainText','getText','getWords','getString','getLemmasArray'],
// transferable: ['getSize','getId','getDocument','getDocuments','getCorpusTerms','getDocumentsCount','getWordTokensCount','getWordTypesCount','getDocumentTerms'],
embeddable: ['Voyant.panel.Summary','Voyant.panel.Cirrus','Voyant.panel.Documents','Voyant.panel.CorpusTerms','Voyant.panel.Reader','Voyant.panel.Trends','Voyant.panel.TermsRadio','Voyant.panel.DocumentTerms','Voyant.panel.TermsBerry','Voyant.panel.CollocatesGraph','Voyant.panel.Contexts','Voyant.panel.WordTree','Voyant.panel.Veliza','Voyant.panel.ScatterPlot','Voyant.panel.Topics'],
requires: ['Voyant.util.ResponseError','Voyant.data.store.CorpusTerms','Voyant.data.store.Documents'/*,'Voyant.panel.Documents'*/],
extend: 'Ext.data.Model',
config: {
/**
* @cfg {String} corpus The ID of a previously created corpus.
*
* A corpus ID can be used to try to retrieve a corpus that has been previously created.
* Typically the corpus ID is used as a first string argument, with an optional second
* argument for other parameters (especially those to recreate the corpus if needed).
*
* new Corpus("goldbug");
*
* new Corpus("goldbug", {
* // if corpus ID "goldbug" isn't found, use the input
* input: "https://gist.githubusercontent.com/sgsinclair/84c9da05e9e142af30779cc91440e8c1/raw/goldbug.txt",
* inputRemoveUntil: 'THE GOLD-BUG',
* inputRemoveFrom: 'FOUR BEASTS IN ONE'
* });
*/
/**
* @cfg {String/String[]} input Input sources for the corpus.
*
* The input sources can be either normal text or URLs (starting with `http`).
*
* Typically input sources are specified as a string or an array in the first argument, with an optional second argument for other parameters.
*
* new Corpus("Hello Voyant!"); // one document with this string
*
* new Corpus(["Hello Voyant!", "How are you?"]); // two documents with these strings
*
* new Corpus("http://hermeneuti.ca/"); // one document from URL
*
* new Corpus(["http://hermeneuti.ca/", "https://en.wikipedia.org/wiki/Voyant_Tools"]); // two documents from URLs
*
* new Corpus("Hello Voyant!", "http://hermeneuti.ca/"]); // two documents, one from string and one from URL
*
* new Corpus("https://gist.githubusercontent.com/sgsinclair/84c9da05e9e142af30779cc91440e8c1/raw/goldbug.txt", {
* inputRemoveUntil: 'THE GOLD-BUG',
* inputRemoveFrom: 'FOUR BEASTS IN ONE'
* });
*
* // use a corpus ID but also specify an input source if the corpus can't be found
* new Corpus("goldbug", {
* input: "https://gist.githubusercontent.com/sgsinclair/84c9da05e9e142af30779cc91440e8c1/raw/goldbug.txt",
* inputRemoveUntil: 'THE GOLD-BUG',
* inputRemoveFrom: 'FOUR BEASTS IN ONE'
* });
*/
/**
* @cfg {String} inputFormat The input format of the corpus (the default is to auto-detect).
*
* The auto-detect format is usually reliable and inputFormat should only be used if the default
* behaviour isn't desired. Most of the relevant values are used for XML documents:
*
* - **DTOC**: Dynamic Table of Contexts XML format
* - **HTML**: Hypertext Markup Language
* - **RSS**: Really Simple Syndication XML format
* - **TEI**: Text Encoding Initiative XML format
* - **TEICORPUS**: Text Encoding Initiative Corpus XML format
* - **TEXT**: plain text
* - **XML**: treat the document as XML (sometimes overridding auto-detect of XML vocabularies like RSS and TEI)
*
* Other formats include **PDF**, **MSWORD**, **XLSX**, **RTF**, **ODT**, and **ZIP** (but again, these rarely need to be specified).
*/
/**
* @cfg {String} tableDocuments Determine what is a document in a table (the entire table, by row, by column); only used for table-based documents.
*
* Possible values are:
*
* - **undefined or blank** (default): the entire table is one document
* - **rows**: each row of the table is a separate document
* - **columns**: each column of the table is a separate document
*
* See also [Creating a Corpus Tokenization](#!/guide/corpuscreator-section-tables).
*/
/**
* @cfg {String} tableContent Determine how to extract body content from the table; only used for table-based documents.
*
* Columns are referred to by numbers, the first is column 1 (not 0).
* You can specify separate columns by using a comma or you can combined the contents of columns/cells by using a plus sign.
*
* Some examples:
*
* - **1**: use column 1
* - **1,2**: use columns 1 and 2 separately
* - **1+2,3**: combine columns 1 and two and use column 3 separately
*
* See also [Creating a Corpus Tokenization](#!/guide/corpuscreator-section-tables).
*/
/**
* @cfg {String} tableAuthor Determine how to extract the author from each document; only used for table-based documents.
*
* Columns are referred to by numbers, the first is column 1 (not 0).
* You can specify separate columns by using a comma or you can combined the contents of columns/cells by using a plus sign.
*
* Some examples:
*
* - **1**: use column 1
* - **1,2**: use columns 1 and 2 separately
* - **1+2,3**: combine columns 1 and two and use column 3 separately
*
* See also [Creating a Corpus Tokenization](#!/guide/corpuscreator-section-tables).
*/
/**
* @cfg {String} tableTitle Determine how to extract the title from each document; only used for table-based documents.
*
* Columns are referred to by numbers, the first is column 1 (not 0).
* You can specify separate columns by using a comma or you can combined the contents of columns/cells by using a plus sign.
*
* Some examples:
*
* - **1**: use column 1
* - **1,2**: use columns 1 and 2 separately
* - **1+2,3**: combine columns 1 and two and use column 3 separately
*
* See also [Creating a Corpus Tokenization](#!/guide/corpuscreator-section-tables).
*/
/**
* @cfg {String} tableContent Determine how to extract body content from the table; only used for table-based documents.
*
* Columns are referred to by numbers, the first is column 1 (not 0).
* You can specify separate columns by using a comma or you can combined the contents of columns/cells by using a plus sign.
*
* Some examples:
*
* - **1**: use column 1
* - **1,2**: use columns 1 and 2 separately
* - **1+2,3**: combine columns 1 and two and use column 3 separately
*
* See also [Creating a Corpus Tokenization](#!/guide/corpuscreator-section-tables).
*/
/**
* @cfg {String} tableNoHeadersRow Determine if the table has a first row of headers; only used for table-based documents.
*
* Provide a value of "true" if there is no header row, otherwise leave it blank or undefined (default).
*
* See also [Creating a Corpus Tokenization](#!/guide/corpuscreator-section-tables).
*/
/**
* @cfg {String} tokenization The tokenization strategy to use
*
* This should usually be undefined, unless specific behaviour is required. These are the valid values:
*
* - **undefined or blank**: use the default tokenization (which uses Unicode rules for word segmentation)
* - **wordBoundaries**: use any Unicode character word boundaries for tokenization
* - **whitespace**: tokenize by whitespace only (punctuation and other characters will be kept with words)
*
* See also [Creating a Corpus Tokenization](#!/guide/corpuscreator-section-tokenization).
*/
/**
* @cfg {String} xmlContentXpath The XPath expression that defines the location of document content (the body); only used for XML-based documents.
*
* new Corpus("<doc><head>Hello world!</head><body>This is Voyant!</body></doc>", {
* xmlContentXpath: "//body"
* }); // document would be: "This is Voyant!"
*
* See also [Creating a Corpus with XML](#!/guide/corpuscreator-section-xml).
*/
/**
* @cfg {String} xmlTitleXpath The XPath expression that defines the location of each document's title; only used for XML-based documents.
*
* new Corpus("<doc><title>Hello world!</title><body>This is Voyant!</body></doc>", {
* xmlTitleXpath: "//title"
* }); // title would be: "Hello world!"
*
* See also [Creating a Corpus with XML](#!/guide/corpuscreator-section-xml).
*/
/**
* @cfg {String} xmlAuthorXpath The XPath expression that defines the location of each document's author; only used for XML-based documents.
*
* new Corpus("<doc><author>Stéfan Sinclair</author><body>This is Voyant!</body></doc>", {
* xmlAuthorXpath: "//author"
* }); // author would be: "Stéfan Sinclair"
*
* See also [Creating a Corpus with XML](#!/guide/corpuscreator-section-xml).
*/
/**
* @cfg {String} xmlPubPlaceXpath The XPath expression that defines the location of each document's publication place; only used for XML-based documents.
*
* new Corpus("<doc><pubPlace>Montreal</pubPlace><body>This is Voyant!</body></doc>", {
* xmlPubPlaceXpath: "//pubPlace"
* }); // publication place would be: "Montreal"
*
* See also [Creating a Corpus with XML](#!/guide/corpuscreator-section-xml).
*/
/**
* @cfg {String} xmlPublisherXpath The XPath expression that defines the location of each document's publisher; only used for XML-based documents.
*
* new Corpus("<doc><publisher>The Owl</publisher><body>This is Voyant!</body></doc>", {
* xmlPublisherXpath: "//publisher"
* }); // publisher would be: "The Owl"
*
* See also [Creating a Corpus with XML](#!/guide/corpuscreator-section-xml).
*/
/**
* @cfg {String} xmlKeywordXpath The XPath expression that defines the location of each document's keywords; only used for XML-based documents.
*
* new Corpus("<doc><keyword>text analysis</keyword><body>This is Voyant!</body></doc>", {
* xmlKeywordXpath: "//keyword"
* }); // publisher would be: "text analysis"
*
* See also [Creating a Corpus with XML](#!/guide/corpuscreator-section-xml).
*/
/**
* @cfg {String} xmlCollectionXpath The XPath expression that defines the location of each document's collection name; only used for XML-based documents.
*
* new Corpus("<doc><collection>documentation</collection><body>This is Voyant!</body></doc>", {
* xmlCollectionXpath: "//collection"
* }); // publisher would be: "documentation"
*
* See also [Creating a Corpus with XML](#!/guide/corpuscreator-section-xml).
*/
/**
* @cfg {String} xmlGroupByXpath The XPath expression that defines the location of each document's collection name; only used for XML-based documents.
*
* new Corpus("<doc><sp s='Juliet'>Hello!</sp><sp s='Romeo'>Hi!</sp><sp s='Juliet'>Bye!</sp></doc>", {
* xmlDocumentsXPath: '//sp',
* xmlGroupByXpath: "//@s"
* }); // two docs: "Hello! Bye!" (Juliet) and "Hi!" (Romeo)
*
* See also [Creating a Corpus with XML](#!/guide/corpuscreator-section-xml).
*/
/**
* @cfg {String} xmlExtraMetadataXpath A value that defines the location of other metadata; only used for XML-based documents.
*
* new Corpus("<doc><tool>Voyant</tool><phase>1</phase><body>This is Voyant!</body></doc>", {
* xmlExtraMetadataXpath: "tool=//tool\nphase=//phase"
* }); // tool would be "Voyant" and phase would be "1"
*
* Note that `xmlExtraMetadataXpath` is a bit different from the other XPath expressions in that it's
* possible to define multiple values (each on its own line) in the form of name=xpath.
*
* See also [Creating a Corpus with XML](#!/guide/corpuscreator-section-xml).
*/
/**
* @cfg {String} xmlExtractorTemplate Pass the XML document through the XSL template located at the specified URL before extraction (this is ignored in XML-based documents).
*
* This is an advanced parameter that allows you to define a URL of an XSL template that can
* be called *before* text extraction (in other words, the other XML-based parameters apply
* after this template has been processed).
*/
/**
* @cfg {String} inputRemoveUntil Omit text up until the start of the matching regular expression (this is ignored in XML-based documents).
*
* new Corpus("Hello world! This is Voyant!", {
* inputRemoveUntil: "This"
* }); // document would be: "This is Voyant!"
*
* See also [Creating a Corpus with Text](#!/guide/corpuscreator-section-text).
*/
/**
* @cfg {String} inputRemoveUntilAfter Omit text up until the end of the matching regular expression (this is ignored in XML-based documents).
*
* new Corpus("Hello world! This is Voyant!", {
* inputRemoveUntilAfter: "world!"
* }); // document would be: "This is Voyant!"
*
* See also [Creating a Corpus with Text](#!/guide/corpuscreator-section-text).
*/
/**
* @cfg {String} inputRemoveFrom Omit text from the start of the matching regular expression (this is ignored in XML-based documents).
*
* new Corpus("Hello world! This is Voyant!", {
* inputRemoveFrom: "This"
* }); // document would be: "Hello world!"
*
* See also [Creating a Corpus with Text](#!/guide/corpuscreator-section-text).
*/
/**
* @cfg {String} inputRemoveFromAfter Omit text from the end of the matching regular expression (this is ignored in XML-based documents).
*
* new Corpus("Hello world! This is Voyant!", {
* inputRemoveFromAfter: "world!"
* }); // document would be: "Hello world!"
*
* See also [Creating a Corpus with Text](#!/guide/corpuscreator-section-text).
*/
/**
* @cfg {String} subTitle A sub-title for the corpus.
*
* This is currently not used, except in the Dynamic Table of Contexts skin. Still, it may be worth specifying a subtitle for later use.
*/
/**
* @cfg {String} title A title for the corpus.
*
* This is currently not used, except in the Dynamic Table of Contexts skin. Still, it may be worth specifying a title for later use.
*/
/**
* @cfg {String} curatorTsv a simple TSV of paths and labels for the DToC interface
*
* The DToC skin allows curation of XML tags and attributes in order to constrain the entries shown in the interface or to provide friendlier labels. This assumes plain text unicode input with one definition per line where the simple XPath expression is separated by a tab from a label.
*
* p paragraph
* ref[@target*="religion"] religion
*
* For more information see the DToC documentation on [Curating Tags](http://cwrc.ca/Documentation/public/index.html#DITA_Files-Various_Applications/DToC/CuratingTags.html)
*/
documentsStore: undefined
},
statics: {
i18n: {}
},
fields: [
{name: 'documentsCount', type: 'int'},
{name: 'lexicalTokensCount', type: 'int'},
{name: 'lexicalTypesCount', type: 'int'},
{name: 'createdTime', type: 'int'},
{name: 'createdDate', type: 'date', dateFormat: 'c'},
{name: 'title', type: 'string'},
{name: 'subTitle', type: 'string'},
{name: 'languagueCodes', type: 'string'}
],
/**
* Create a promise for a new Corpus with relevant data loaded.
*
* The typical usage in Spyral is to call {@link #assign} in a first code block:
*
* new Corpus("Hello Voyant!").assign("corpus");
*
* Then use the named variable in a subsequent code block:
*
* corpus.show();
*
* Alternatively, the returned promise can be chained with {@link Ext.promise.Promise#then then}
* and a function argument that receives the Corpus as an argument.
*
* var corpus;
* new Corpus("Hello Voyant!").then(function(data) {
* corpus = data;
* corpus.show();
* });
*
* The following scenarios are possible for the config argument:
*
* - a string that looks like a corpus ID (not a URL and no spaces): treated as a {@link #corpus} config
* - a string that doesn't look like a corpus ID: treated as an {@link #input} config
* - an array of strings: treated as an array of {@link #input} config values
* - an object: treated a normal config object
*
* As such, these two constructions do the same thing:
*
* new Corpus("Hello World!");
* new Corpus({input: "Hello World!"});
* @param {String|String[]|Object} source The source document(s) as a text string, a URL, an array of text strings and URLs, or a config object.
* @param {String|String[]|Object} [config] An additional config to use with the source.
* @returns {Ext.promise.Promise} *Important*: This doesn't immediately return a Corpus but a promise to return a Corpus when it's finished loading
* (you should normally chain the promise with {@link Ext.promise.Promise#then then} and provide a function that receives the
* Corpus as an argument, as per the example above).
*/
constructor : function(source, config) {
source = source || {};
config = config || {};
this.callParent([]); // only send config, not source
var dfd = Voyant.application.getDeferred(this);
if (Ext.isString(source)) { // a string could be a corpus ID or an input string (text or URL)
if (/\s/.test(source)==false && source.indexOf(":")==-1) { // looks like a corpus ID
Ext.apply(config, {
corpus: source
});
} else { // looks like input (text or URL)
Ext.apply(config, {
input: source
});
}
} else if (Ext.isArray(source)) { // assume we have an array of texts or URLs
Ext.apply(config, {
input: source
});
} else if (Ext.isObject(source)) { // copy the source to the config
Ext.apply(config, source);
} else {
Voyant.application.showError(this.localize("badDataTypeCorpus")+": ("+ (typeof source)+") "+source);
Ext.defer(function() {
dfd.reject(this.localize("badDataTypeCorpus")+": ("+ (typeof source)+") "+source)
}, 50, this);
return dfd.promise;
}
if (Ext.isObject(config)) {
if (!config.corpus && !config.input && !config.inlineData) {
Voyant.application.showError(this.localize("noCorpusOrInput")+": "+config);
Ext.defer(function() {
dfd.reject(this.localize("noCorpusOrInput")+": "+config)
}, 50, this);
return dfd.promise;
}
Ext.apply(config, {tool: 'corpus.CorpusMetadata'})
var me = this;
var promise = Ext.Ajax.request({
url: Voyant.application.getTromboneUrl(),
params: config
}).then(function(response) {
me.set(Ext.JSON.decode(response.responseText).corpus.metadata);
// removed calls to set title and subtitle which should now be in metadata
if (config.title || config.subTitle) {
me.set('title', config.title);
me.set('subTitle', config.subTitle);
} else {
// (removed calls for title and subtitle which should now be part of metadata
}
return me;
}, function(response){
Voyant.application.showResponseError(me.localize('failedCreateCorpus'), response);
}).then(function(corpus) {
if (corpus.getDocumentsCount()==0) {
Voyant.application.showError(me.localize("thisCorpus")+" "+me.localize("isEmpty")+".");
}
if (!('docsLimit' in config) || (config.docsLimit!==false && config.docsLimit>0)) {
me.getDocuments().load({
params: {
limit: ('docsLimit' in config) ? config.docsLimit : me.getDocumentsCount()
},
callback: function(records, operation, success) {
if (success) {
me.setDocumentsStore(this);
dfd.resolve(corpus)
} else {
dfd.reject(operation)
}
}
})
} else {
dfd.resolve(corpus)
}
})
return dfd.promise
} else {
Voyant.application.showError(this.localize("badDataTypeCorpus")+": ("+ (typeof config)+") "+config);
Ext.defer(function() {
dfd.reject(this.localize("badDataTypeCorpus")+": ("+ (typeof config)+") "+config)
}, 50, this);
return dfd.promise;
}
},
getId: function() {
// overrides the getId() function from the model to handle promises
return this.then ? Voyant.application.getDeferredNestedPromise(this, arguments) : this.get('id');
},
getAliasOrId: function() {
// overrides the getId() function from the model to handle promises
return this.then ? Voyant.application.getDeferredNestedPromise(this, arguments) : (this.get('alias') || this.get('id'));
},
/**
* Create a promise for {@link Voyant.data.store.CorpusTerms Corpus Terms}.
*
* The typical usage is to chain the returned promise with {@link Ext.promise.Promise#then then} and
* provide a function that receives the {@link Voyant.data.store.CorpusTerms Corpus Terms} as an argument.
*
* new Corpus("Hello Voyant!").loadCorpusTerms().then(function(corpusTerms) {
* corpusTerms.show();
* });
*
* @param {Number/Object} config
*
* - when this is a number, it's the maximum number of corpus terms to load (see {@link Voyant.data.store.CorpusTerms#limit})
* - otherwise this is a regular config object
*
* @returns {Ext.promise.Promise} *Important*: This doesn't immediately return corpus terms but a promise to return a corpus terms when they're finished loading
* (you should normally chain the promise with {@link Ext.promise.Promise#then then} and provide a function that receives the
* corpus terms as an argument, as per the example above).
*/
loadCorpusTerms: function(config) {
if (this.then) {
return Voyant.application.getDeferredNestedPromise(this, arguments);
} else {
var dfd = Voyant.application.getDeferred(this);
config = config || {};
if (Ext.isNumber(config)) {
config = {limit: config};
}
Ext.applyIf(config, {
limit: 0
})
var corpusTerms = this.getCorpusTerms();
corpusTerms.load({
params: config,
callback: function(records, operation, success) {
if (success) {
dfd.resolve(corpusTerms)
} else {
dfd.reject(operation)
}
}
})
return dfd.promise
}
},
/**
* Create a promise for {@link Voyant.data.store.Tokens Tokens}.
*
* The typical usage is to chain the returned promise with {@link Ext.promise.Promise#then then} and
* provide a function that receives the {@link Voyant.data.store.Tokens Tokens} as an argument.
*
* new Corpus("Hello Voyant!").loadTokens().then(function(tokens) {
* tokens.show();
* });
*
* @param {Number/Object} config
*
* - when this is a number, it's the maximum number of corpus terms to load (see {@link Voyant.data.store.CorpusTerms#limit})
* - otherwise this is a regular config object
* - **limit**: the maximum number of tokens to return (default is no limit)
* - **perDocLimit**: the maximum number of tokens to return per document
* - **start**: where to start (when pageing, default is 0)
* - **noOthers**: determine if only word tokens are returned (default is false)
* - **withPosLemmas**: try to populate pos (part-of-speech) tags and lemmas (only works in English for now)
* - **docIndex**: a comma-separated list of integers of document indices
* - **docId**: a comma-separated list of document IDs
* - **stopList**: the ID of an existing stopList resource or an array of words to skip
* - **whitelist**: the ID of an existing whitelist resource or an array of words to keep
*
*
* @returns {Ext.promise.Promise} *Important*: This doesn't immediately return tokens but a promise to return tokens when they're finished loading
* (you should normally chain the promise with {@link Ext.promise.Promise#then then} and provide a function that receives the
* tokens as an argument, as per the example above).
*/
loadTokens: function(config) {
if (this.then) {
return Voyant.application.getDeferredNestedPromise(this, arguments);
} else {
var dfd = Voyant.application.getDeferred(this);
config = config || {};
if (Ext.isNumber(config)) {
config = {limit: config};
}
Ext.applyIf(config, {
limit: 0
})
var tokens = this.getTokens();
tokens.load({
params: config,
callback: function(records, operation, success) {
if (success) {
dfd.resolve(tokens)
} else {
dfd.reject(operation)
}
}
})
return dfd.promise
}
},
getCorpusTerms: function(config) {
return Ext.create("Voyant.data.store.CorpusTerms", Ext.apply(config || {}, {corpus: this}));
},
getTokens: function(config) {
return Ext.create("Voyant.data.store.Tokens", Ext.apply(config || {}, {corpus: this}));
},
each: function(fn, scope) {
this.getDocuments().each(function(doc, i) {
fn.call(scope || doc, doc, i);
})
},
map: function(fn, scope) {
return this.getDocuments().getRange().map(function(doc, i) {
return fn.call(scope || doc, doc, i)
}, scope || this)
},
getCorpusCollocates: function(config) {
return Ext.create("Voyant.data.store.CorpusCollocates", Ext.apply(config || {}, {corpus: this}));
},
getDocumentQueryMatches: function(config) {
// not expected to be called before corpus is defined
return Ext.create("Voyant.data.store.DocumentQueryMatches", Ext.apply(config || {}, {corpus: this}));
},
getDocumentTerms: function(config) {
return Ext.create("Voyant.data.store.DocumentTerms", Ext.apply(config || {}, {corpus: this}));
},
getDocumentEntities: function(config) {
return Ext.create("Voyant.data.store.DocumentEntities", Ext.apply(config || {}, {corpus: this}));
},
loadContexts: function(config) {
if (this.then) {
return Voyant.application.getDeferredNestedPromise(this, arguments);
} else {
var dfd = Voyant.application.getDeferred(this);
config = config || {};
if (Ext.isNumber(config)) {
config = {limit: config};
}
Ext.applyIf(config, {
limit: 0
})
var contexts = this.getContexts();
contexts.load({
params: config,
callback: function(records, operation, success) {
if (success) {
dfd.resolve(contexts)
} else {
dfd.reject(operation)
}
}
})
return dfd.promise
}
},
getContexts: function(config) {
return Ext.create("Voyant.data.store.Contexts", Ext.apply(config || {}, {corpus: this}));
},
getDocuments: function(config) {
return this.getDocumentsStore() ? this.getDocumentsStore() : Ext.create("Voyant.data.store.Documents", Ext.apply(config || {}, {corpus: this}));
//this.then ? Voyant.application.getDeferredNestedPromise(this, arguments) : this.getDocumentsStore();
},
getDocument: function(config) {
if (this.getDocumentsStore()) {
if (config instanceof Voyant.data.model.Document) {
return config;
}
else if (Ext.isNumeric(config)) {
return this.getDocumentsStore().getAt(parseInt(config))
}
else if (Ext.isString(config)) {
return this.getDocumentsStore().getById(config)
}
}
return this.then ? Voyant.application.getDeferredNestedPromise(this, arguments) : this.getDocumentsStore().getDocument(config);
},
getDocumentsCount: function() {
return this.then ? Voyant.application.getDeferredNestedPromise(this, arguments) : this.get('documentsCount');
},
getWordTokensCount: function() {
return this.then ? Voyant.application.getDeferredNestedPromise(this, arguments) : this.get('lexicalTokensCount');
},
getWordTypesCount: function() {
return this.then ? Voyant.application.getDeferredNestedPromise(this, arguments) : this.get('lexicalTypesCount');
},
getCreatedTime: function() {
return this.then ? Voyant.application.getDeferredNestedPromise(this, arguments) : this.get('createdTime');
},
requiresPassword: function() {
var noPasswordAccess = this.getNoPasswordAccess();
return noPasswordAccess=='NONE' || noPasswordAccess=='NONCONSUMPTIVE';
},
getNoPasswordAccess: function() {
// overrides the getId() function from the model to handle promises
return this.then ? Voyant.application.getDeferredNestedPromise(this, arguments) : this.get('noPasswordAccess');
},
getTitle: function() {
return this.then ? Voyant.application.getDeferredNestedPromise(this, arguments) : this.get('title');
},
getSubTitle: function() {
return this.then ? Voyant.application.getDeferredNestedPromise(this, arguments) : this.get('subTitle');
},
getRelatedWords : function(config) {
return Ext.create("Voyant.data.store.RelatedTerms", Ext.apply(config || {}, {corpus: this}))
},
loadRelatedWords : function(config) {
var me = this;
if (this.then) {
return Voyant.application.getDeferredNestedPromise(this, arguments);
} else {
var dfd = Voyant.application.getDeferred(this);
config = config || {};
if (Ext.isNumber(config)) {
config = {limit: config};
}
Ext.applyIf(config, {
limit: 0
})
var relatedTerms = this.getRelatedWords();
relatedTerms.load({
params: config,
callback: function(records, operation, success) {
if (success) {
dfd.resolve(records)
} else {
dfd.reject(operation.error.response);
}
}
})
return dfd.promise
}
},
/**
* Create a promise for a text representation of all the document bodies in the corpus.
*
* This does NOT necessarily return the full original document, but rather the body or main
* content, as extracted by Voyant. You can also request a {@link #plainText} version with
* the tags stripped.
*
* The typical usage is to chain the returned promise with {@link Ext.promise.Promise#then then} and
* provide a function that receives the text as an argument.
*
* new Corpus("http://hermeneuti.ca").getText().then(function(text) {
* show(text.replace(/</g, "<")); // show the markup
* });
*
* @param {Number/Object} config
*
* - when this is a number, it's the maximum number of words to fetch (though there may be any number of other tokens, like punctuation and space (but no tags).
* - otherwise this is a regular config object that can contain the following:
* - `limit`: a limit on the total number of words (by default there's no limit)
* - `perDocLimit`: a limit on the number of words to fetch for each document (by default there's no limit)
* - `start`: start at this word index for each document
* - `stopList`: the ID of an existing stopList resource or an array of words to skip
* - `whitelist`: the ID of an existing whitelist resource or an array of words to keep
*
* @returns {Ext.promise.Promise} *Important*: This doesn't immediately return text but a promise to return text when it's finished loading
* (you should normally chain the promise with {@link Ext.promise.Promise#then then} and provide a function that receives the
* text as an argument, as per the example above).
*/
getText: function(config) {
if (this.then) {
return Voyant.application.getDeferredNestedPromise(this, arguments, this);
} else {
var dfd = Voyant.application.getDeferred(this);
config = config || {};
if (Ext.isNumber(config)) {
config = {limit: config}
} else if (Ext.isString(config)) {
config = {limit: parseInt(config)}
};
Ext.applyIf(config, {
limit: 0,
outputFormat: "text",
template: "docTokens2text"
});
Ext.apply(config, {
tool: 'corpus.DocumentTokens',
corpus: this.getAliasOrId()
});
Ext.Ajax.request({
url: Voyant.application.getTromboneUrl(),
params: config,
success: function(response, opts) {
var text = response.responseText.trim();
if (config.transformCase) {
if (config.transformCase.indexOf("lower")>-1) {
text = text.toLowerCase();
} else if (config.transformCase.indexOf("upper")>-1) {
text = text.toUpperCase();
}
}
dfd.resolve(text);
},
failure: function(response, opts) {
dfd.reject(response);
},
scope: this
})
return dfd.promise
}
},
/**
* Create a promise for a plain text representation of all the text in the corpus.
*
* The typical usage is to chain the returned promise with {@link Ext.promise.Promise#then then} and
* provide a function that receives the text as an argument.
*
* new Corpus("http://hermeneuti.ca").getPlainText().then(function(text) {
* show(text.trim().replace(/\s+/g, " ").substr(-150)); // show the end
* });
*
* @param {Number/Object} config
*
* - when this is a number, it's the maximum number of words to fetch (though there may be any number of other tokens, like punctuation and space (but no tags).
* - otherwise this is a regular config object – see {@link #getText} for more details.
*
* @returns {Ext.promise.Promise} *Important*: This doesn't immediately return text but a promise to return text when it's finished loading
* (you should normally chain the promise with {@link Ext.promise.Promise#then then} and provide a function that receives the
* text as an argument, as per the example above).
*/
getPlainText: function(config) {
if (this.then) {
return Voyant.application.getDeferredNestedPromise(this, arguments);
} else {
config = config || {};
if (Ext.isNumber(config)) {
config = {limit: config}
} else if (Ext.isString(config)) {
config = {limit: parseInt(config)}
}
Ext.apply(config, {
template: "docTokens2plainText"
});
return this.getText(config);
}
},
/**
* Create a promise for a string containing just the words from the corpus.
*
* The typical usage is to chain the returned promise with {@link Ext.promise.Promise#then then} and
* provide a function that receives the text as an argument.
*
* new Corpus("http://hermeneuti.ca").getWords().then(function(words) {
* show(words); // show the words
* });
*
* @param {Number/Object} config
*
* - when this is a number, it's the maximum number of words to fetch (though there may be any number of other tokens, like punctuation and space (but no tags).
* - otherwise this is a regular config object – see {@link #getText} for more details.
*
* @returns {Ext.promise.Promise} *Important*: This doesn't immediately return the words but a promise to return words when it's finished loading
* (you should normally chain the promise with {@link Ext.promise.Promise#then then} and provide a function that receives the
* words as a string argument, as per the example above).
*/
getWords: function(config) {
if (this.then) {
return Voyant.application.getDeferredNestedPromise(this, arguments);
} else {
config = config || {};
if (Ext.isNumber(config)) {
config = {limit: config}
} else if (Ext.isString(config)) {
config = {limit: parseInt(config)}
};
Ext.applyIf(config, {
template: "docTokens2words"
});
return this.getText(config);
}
},
/**
* Create a promise for a string containing just the words from the corpus.
*
* The typical usage is to chain the returned promise with {@link Ext.promise.Promise#then then} and
* provide a function that receives the text as an argument.
*
* new Corpus("http://hermeneuti.ca").getWords().then(function(words) {
* show(words); // show the words
* });
*
* @param {Number/Object} config
*
* - when this is a number, it's the maximum number of words to fetch (though there may be any number of other tokens, like punctuation and space (but no tags).
* - otherwise this is a regular config object – see {@link #getText} for more details.
*
* @returns {Ext.promise.Promise} *Important*: This doesn't immediately return the words but a promise to return words when it's finished loading
* (you should normally chain the promise with {@link Ext.promise.Promise#then then} and provide a function that receives the
* words as a string argument, as per the example above).
*/
getWordsArray: function(config) {
if (this.then) {
return Voyant.application.getDeferredNestedPromise(this, arguments);
} else {
var dfd = Voyant.application.getDeferred(this);
this.getWords(config).then(function(text) {
dfd.resolve(text.split(" "));
})
return dfd.promise
}
},
/**
* Create a promise for an array of lemmas from the corpus (only works for English).
*
* The typical usage is to chain the returned promise with {@link Ext.promise.Promise#then then} and
* provide a function that receives the lemmas as an argument.
*
* new Corpus("Hello world, I like Spyral notebooks!", {language: "en"}).getLemmasArray().then(function(lemmas) {
show(lemmas.join(", "))
* });
*
* @param {Number/Object} config
*
* - when this is a number, it's the maximum number of words to fetch (though there may be any number of other tokens, like punctuation and space (but no tags).
* - otherwise this is a regular config object – see {@link #getText} for more details.
*
* @returns {Ext.promise.Promise} *Important*: This doesn't immediately return the words but a promise to return words when it's finished loading
* (you should normally chain the promise with {@link Ext.promise.Promise#then then} and provide a function that receives the
* words as a string argument, as per the example above).
*/
getLemmasArray: function(config) {
config = config || {};
if (this.then) {
return Voyant.application.getDeferredNestedPromise(this, arguments);
} else {
var dfd = Voyant.application.getDeferred(this);
Ext.applyIf(config, {
template: "docTokens2lemmas",
withPosLemmas: true,
noOthers: true
})
this.getWords(config).then(function(text) {
var lemmas = text.split(" ").map(function(word) {return word.substring(0, word.indexOf("/"))})
dfd.resolve(lemmas);
})
return dfd.promise
}
},
/**
* Shows a one-line summary of this corpus.
*
* new Corpus("Hello World!").show(true);
*
* @method show
* @param {boolean} [withID] Includes the corpus ID in parentheses at the end, if true.
*/
/**
* @method embed
* Embed the current corpus in the specified tool.
*
* Because embed knows about promises, you don't need to handle promises when calling embed on a corpus.
*
* new Corpus("Hello Voyant!").embed(); // use summary as a default
* new Corpus("Hello Voyant!").embed("corpusterms"); // specify corpus terms tool
* new Corpus("Hello Voyant!").embed("cirrus", {width: "300px"}); // with config
*
* @param {String} [tool] Specify which tool to use for embedding this corpus.
* The following are recognized tool values: {@link Voyant.panel.Summary summary} (default), {@link Voyant.panel.Cirrus cirrus}, {@link Voyant.panel.Documents documents}, {@link Voyant.panel.CorpusTerms corpusterms}.
* @param {Object} [config] Additional configuration options to pass to the tool.
* In addition to the configuration options available from each tool listed in the tool param (see above), options include:
*
* - **width**: a CSS width value for the embedded tool (e.g. "500px", "80em", "50%")
* - **height**: a CSS height value for the embedded tool (e.g. "300px", "10em", "30%")
*/
getString: function(config) {
var size = this.getDocumentsCount();
var message = this.localize('thisCorpus');
if (size==0) {message += ' '+this.localize('isEmpty')+'.';}
else {
message+=' ';
if (size>1) {
message+=new Ext.XTemplate(this.localize('hasNdocuments')).apply({count: Ext.util.Format.number(size,"0,000")});
}
else {
message+=this.localize('has1document');
}
message+=' '+new Ext.XTemplate(this.localize('widthNwordsAndNTypes')).apply({words: Ext.util.Format.number(this.getWordTokensCount(),"0,000"), types: Ext.util.Format.number(this.getWordTypesCount(),"0,000")})+'.'
message+=" "+this.localize('created')+" ";
var createdDate = this.get('createdDate');
var now = new Date();
if (Ext.Array.each([
['year', Ext.Date.YEAR],
['month', Ext.Date.MONTH],
['day', Ext.Date.DAY],
['hour', Ext.Date.HOUR],
['minute', Ext.Date.MINUTE],
['second', Ext.Date.SECOND]
], function(time) {
if (Ext.Date.diff(createdDate, now, time[1])>(time[0]=='second' ? 1 : 0)) {
var count = Ext.Date.diff(createdDate, now, time[1]);
message+="<span class='info-tip' data-qtip='"+Ext.Date.format(createdDate, "Y-m-d, H:i:s")+"'>";
if (count==1) {message+=new Ext.XTemplate(this.localize(time[0]+'Ago')).apply({count: count, date: createdDate})}
else {message+=new Ext.XTemplate(this.localize(time[0]+'sAgo')).apply({count: count, date: createdDate})}
message+="</span>";
return false
}
}, this
)===true) { // if array returns true, none of the conditions matched, so say now
message+=this.localize('now');
}
message+='.';
message+='';
}
if (config===true) {message+=' ('+this.getId()+")";}
return message;
}
});
================================================
FILE: src/main/webapp/app/data/model/CorpusCollocate.js
================================================
Ext.define('Voyant.data.model.CorpusCollocate', {
extend: 'Ext.data.Model',
fields: [
{name: 'term'},
{name: 'rawFreq', type: 'int'},
{name: 'contextTerm'},
{name: 'contextTermRawFreq', type: 'int'}
],
getTerm: function() {return this.getKeyword()},
getRawFreq: function() {return this.getKeywordRawFreq()},
getKeyword: function() {return this.get('term');},
getKeywordRawFreq: function() {return this.get('rawFreq');},
getContextTerm: function() {return this.get('contextTerm');},
getContextTermRawFreq: function() {return this.get('contextTermRawFreq');}
});
================================================
FILE: src/main/webapp/app/data/model/CorpusFacet.js
================================================
Ext.define('Voyant.data.model.CorpusFacet', {
extend: 'Ext.data.Model',
idProperty: 'label',
fields: [
{name: 'facet'},
{name: 'label'},
{name: 'inDocumentsCount', type: 'int'}
],
getLabel: function() {
return this.get('label')
},
getFacet: function() {
return this.get('facet')
},
getInDocumentsCount: function() {
return this.get('inDocumentsCount')
}
});
================================================
FILE: src/main/webapp/app/data/model/CorpusNgram.js
================================================
Ext.define('Voyant.data.model.CorpusNgram', {
extend: 'Ext.data.Model',
fields: [
{name: 'term'},
{name: 'length', type: 'int'},
{name: 'rawFreq', type: 'int'},
{name: 'distributions'}
],
getTerm: function() {return this.get('term');}
});
================================================
FILE: src/main/webapp/app/data/model/CorpusTerm.js
================================================
/*
* Corpus Term
*/
Ext.define('Voyant.data.model.CorpusTerm', {
extend: 'Ext.data.Model',
idProperty: 'term', // should be unique
fields: [
{name: 'id'},
{name: 'rawFreq', type: 'int'},
{name: 'inDocumentsCount', type: 'int'},
{name: 'relativeFreq', type: 'float'},
{name: 'relativePeakedness', type: 'float'},
{name: 'relativeSkewness', type: 'float'},
{name: 'comparisonRelativeFreqDifference', type: 'float'},
{name: 'distributions'},
{name: 'typeTokenRatio-lexical', type: 'float', calculate: function(data) {
return data['typesCount-lexical']/data['tokensCount-lexical'];
}}
],
/**
* Get the term.
* @returns {String} Returns the term.
*/
getTerm: function() {
return this.get('term');
},
/**
* Get the term's raw frequency.
* @returns {Number} Returns the term's frequency.
*/
getRawFreq: function() {
return parseInt(this.get('rawFreq'));
},
getInDocumentsCount: function() {
return parseInt(this.get('inDocumentsCount'));
},
getDistributions: function() {
return this.get('distributions');
},
/**
* Show a one line summary of this term.
*/
show: function(config) {
show(this.getString(config))
},
getString: function() {
return this.getTerm()+": "+this.getRawFreq();
}
});
================================================
FILE: src/main/webapp/app/data/model/Dimension.js
================================================
Ext.define('Voyant.data.model.Dimension', {
extend: 'Ext.data.Model',
fields: [
{name: 'percentage', type: 'number'}
]
});
================================================
FILE: src/main/webapp/app/data/model/Document.js
================================================
Ext.define('Voyant.data.model.Document', {
extend: 'Ext.data.Model',
//requires: ['Voyant.data.store.DocumentTerms'],
fields: [
{name: 'corpus'},
{name: 'id'},
{name: 'author'},
{name: 'pubDate'},
{name: 'publisher'},
{name: 'pubPlace'},
{name: 'keyword'},
{name: 'collection'},
{name: 'index', type: 'int'},
{name: 'tokensCount-lexical', type: 'int'},
{name: 'typesCount-lexical', type: 'int'},
{name: 'typeTokenRatio-lexical', type: 'float', calculate: function(data) {
return data['typesCount-lexical']/data['tokensCount-lexical'];
}},
{name: 'lastTokenStartOffset-lexical', type: 'int'},
{name: 'title'},
{name: 'language', convert: function(data) {return Ext.isEmpty(data) ? '' : data;}},
{name: 'sentencesCount', type: 'int'},
{name: 'averageWordsPerSentence', type: 'float', calculate: function(data) {
return data['sentencesCount'] ? data['tokensCount-lexical'] / data['sentencesCount'] : 0;
}},
{name: 'css', type: 'string'}
],
getLexicalTokensCount: function() {
return this.get('tokensCount-lexical')
},
getLexicalTypeTokenRatio: function() {
return this.get('typeTokenRatio-lexical')
},
loadDocumentTerms: function(config) {
if (this.then) {
return Voyant.application.getDeferredNestedPromise(this, arguments);
} else {
var dfd = Voyant.application.getDeferred(this);
config = config || {};
if (Ext.isNumber(config)) {
config = {limit: config};
}
Ext.applyIf(config, {
limit: 0
})
var documentTerms = this.getDocumentTerms();
documentTerms.load({
params: config,
callback: function(records, operation, success) {
if (success) {
dfd.resolve(documentTerms)
} else {
dfd.reject(operation)
}
}
})
return dfd.promise
}
},
loadTokens: function(config) {
if (this.then) {
return Voyant.application.getDeferredNestedPromise(this, arguments);
} else {
var dfd = Voyant.application.getDeferred(this);
config = config || {};
if (Ext.isNumber(config)) {
config = {limit: config};
}
Ext.applyIf(config, {
limit: 0
})
var tokens = this.getTokens({});
tokens.load({
params: config,
callback: function(records, operation, success) {
if (success) {
dfd.resolve(tokens)
} else {
dfd.reject(operation)
}
}
})
return dfd.promise
}
},
getTokens: function(config) {
if (this.then) {
return Voyant.application.getDeferredNestedPromise(this, arguments);
} else {
config = config || {};
Ext.applyIf(config, {
proxy: {}
});
Ext.applyIf(config.proxy, {
extraParams: {}
})
Ext.applyIf(config.proxy.extraParams, {
docIndex: this.get('index')
})
Ext.apply(config, {
docId: this.get('id')
});
return this.get('corpus').getTokens(config);
}
},
getDocumentTerms: function(config) {
if (this.then) {
return Voyant.application.getDeferredNestedPromise(this, arguments);
} else {
config = config || {};
Ext.applyIf(config, {
proxy: {}
});
Ext.applyIf(config.proxy, {
extraParams: {}
})
Ext.applyIf(config.proxy.extraParams, {
docIndex: this.get('index')
})
if (config.corpus) {
return config.corpus.getDocumentTerms(config);
}
return this.get('corpus').getDocumentTerms(config); // FIXME: when does this happen?
}
},
getIndex: function() {
return this.get('index');
},
getId: function() {
return this.get('id');
},
getFullLabel: function()
gitextract_bhf_y8o4/
├── .gitignore
├── LICENSE.txt
├── README.md
├── pom.xml
└── src/
└── main/
├── java/
│ └── org/
│ └── voyanttools/
│ └── voyant/
│ ├── FlexibleParametersFactory.java
│ ├── HttpParametersDecoder.java
│ ├── JSCacher.java
│ ├── Localizer.java
│ ├── SpyralAuth.java
│ ├── Trombone.java
│ ├── Voyant.java
│ └── XslTransformer.java
├── resources/
│ ├── .gitignore
│ ├── oauth.properties
│ └── org/
│ └── voyanttools/
│ └── voyant/
│ └── voyant-js.txt
└── webapp/
├── .gitignore
├── META-INF/
│ └── MANIFEST.MF
├── WEB-INF/
│ ├── jetty-web.xml
│ └── web.xml
├── app/
│ ├── Promise.js
│ ├── VoyantApp.js
│ ├── VoyantCorpusApp.js
│ ├── VoyantCorpusToolsetApp.js
│ ├── VoyantDefaultApp.js
│ ├── VoyantDocumentToolsetApp.js
│ ├── VoyantNotebookApp.js
│ ├── VoyantToolApp.js
│ ├── data/
│ │ ├── model/
│ │ │ ├── AnalysisToken.js
│ │ │ ├── Context.js
│ │ │ ├── Corpus.js
│ │ │ ├── CorpusCollocate.js
│ │ │ ├── CorpusFacet.js
│ │ │ ├── CorpusNgram.js
│ │ │ ├── CorpusTerm.js
│ │ │ ├── Dimension.js
│ │ │ ├── Document.js
│ │ │ ├── DocumentEntity.js
│ │ │ ├── DocumentQueryMatch.js
│ │ │ ├── DocumentTerm.js
│ │ │ ├── PrincipalComponent.js
│ │ │ ├── RelatedTerm.js
│ │ │ ├── StatisticalAnalysis.js
│ │ │ ├── TermCorrelation.js
│ │ │ └── Token.js
│ │ ├── store/
│ │ │ ├── CAAnalysis.js
│ │ │ ├── Contexts.js
│ │ │ ├── CorpusCollocates.js
│ │ │ ├── CorpusFacets.js
│ │ │ ├── CorpusNgrams.js
│ │ │ ├── CorpusTerms.js
│ │ │ ├── DocSimAnalysis.js
│ │ │ ├── DocumentEntities.js
│ │ │ ├── DocumentQueryMatches.js
│ │ │ ├── DocumentTerms.js
│ │ │ ├── Documents.js
│ │ │ ├── NotebookFacets.js
│ │ │ ├── PCAAnalysis.js
│ │ │ ├── RelatedTerms.js
│ │ │ ├── TSNEAnalysis.js
│ │ │ ├── TermCorrelations.js
│ │ │ ├── Tokens.js
│ │ │ └── VoyantStore.js
│ │ └── util/
│ │ ├── Geonames.js
│ │ ├── NetworkGraph.js
│ │ └── Table.js
│ ├── notebook/
│ │ ├── Catalogue.js
│ │ ├── Notebook.js
│ │ ├── Notebook.old.js
│ │ ├── editor/
│ │ │ ├── CodeEditor.js
│ │ │ ├── CodeEditorWrapper.js
│ │ │ ├── EditorWrapper.js
│ │ │ ├── TextEditor.js
│ │ │ ├── TextEditorWrapper.js
│ │ │ └── button/
│ │ │ ├── Add.js
│ │ │ ├── Counter.js
│ │ │ ├── Edit.js
│ │ │ ├── Export.js
│ │ │ ├── Metadata.js
│ │ │ ├── MoveDown.js
│ │ │ ├── MoveUp.js
│ │ │ ├── Movement.js
│ │ │ ├── Remove.js
│ │ │ ├── Run.js
│ │ │ ├── RunAll.js
│ │ │ └── RunUntil.js
│ │ ├── storage/
│ │ │ ├── github/
│ │ │ │ ├── FileSaver.js
│ │ │ │ ├── GitHubDialogs.js
│ │ │ │ ├── OctokitWrapper.js
│ │ │ │ └── ReposBrowser.js
│ │ │ └── voyant/
│ │ │ └── StorageDialogs.js
│ │ └── util/
│ │ ├── Embed.js
│ │ └── Show.js
│ ├── panel/
│ │ ├── Bubblelines.js
│ │ ├── BubblelinesSet.js
│ │ ├── Bubbles.js
│ │ ├── Catalogue.js
│ │ ├── Cirrus.js
│ │ ├── CollocatesGraph.js
│ │ ├── CollocatesSet.js
│ │ ├── Contexts.js
│ │ ├── CorpusCollocates.js
│ │ ├── CorpusCreator.js
│ │ ├── CorpusSet.js
│ │ ├── CorpusTermSummary.js
│ │ ├── CorpusTerms.js
│ │ ├── Correlations.js
│ │ ├── CustomSet.js
│ │ ├── DocumentTerms.js
│ │ ├── Documents.js
│ │ ├── DocumentsFinder.js
│ │ ├── DreamScape.js
│ │ ├── Embedder.js
│ │ ├── Fountain.js
│ │ ├── Knots.js
│ │ ├── Loom.js
│ │ ├── Mandala.js
│ │ ├── MicroOcp.js
│ │ ├── MicroSearch.js
│ │ ├── NoTool.js
│ │ ├── Panel.js
│ │ ├── Phrases.js
│ │ ├── Reader.js
│ │ ├── RezoViz.js
│ │ ├── ScatterPlot.js
│ │ ├── ScatterSet.js
│ │ ├── SimpleDocReader.js
│ │ ├── StreamGraph.js
│ │ ├── Subset.js
│ │ ├── Summary.js
│ │ ├── TermsBerry.js
│ │ ├── TermsRadio.js
│ │ ├── TextualArc.js
│ │ ├── TopicContexts.js
│ │ ├── Topics.js
│ │ ├── Trends.js
│ │ ├── Veliza.js
│ │ ├── Via.js
│ │ ├── VoyantFooter.js
│ │ ├── VoyantHeader.js
│ │ ├── VoyantTabPanel.js
│ │ ├── WordTree.js
│ │ └── WordWall.js
│ ├── util/
│ │ ├── Api.js
│ │ ├── Assignable.js
│ │ ├── Colors.js
│ │ ├── Deferrable.js
│ │ ├── DetailedError.js
│ │ ├── DiacriticsRemover.js
│ │ ├── Downloadable.js
│ │ ├── Localization.js
│ │ ├── ResponseError.js
│ │ ├── SparkLine.js
│ │ ├── Storage.js
│ │ ├── Toolable.js
│ │ ├── Transferable.js
│ │ └── Variants.js
│ └── widget/
│ ├── CategoriesBuilder.js
│ ├── CodeEditor.js
│ ├── ColorPaletteOption.js
│ ├── CorpusDocumentSelector.js
│ ├── CorpusSelector.js
│ ├── DocumentSelector.js
│ ├── DownloadFileFormat.js
│ ├── DownloadFilenameBuilder.js
│ ├── DownloadOptions.js
│ ├── Facet.js
│ ├── FontFamilyOption.js
│ ├── ListEditor.js
│ ├── LiveSearchGrid.js
│ ├── ProgressMonitor.js
│ ├── QuerySearchField.js
│ ├── ReaderGraph.js
│ ├── StopListOption.js
│ ├── TotalPropertyStatus.js
│ ├── VoyantChart.js
│ ├── VoyantNetworkGraph.js
│ └── VoyantTableTransform.js
├── builder/
│ ├── Builder.js
│ ├── TableGrid.js
│ ├── css/
│ │ └── builder.css
│ └── index.jsp
├── catalogue/
│ └── index.jsp
├── dream/
│ ├── dream.panel.js
│ └── index.jsp
├── dtoc/
│ ├── annotator/
│ │ ├── dtoc.annotator.auth.js
│ │ ├── dtoc.annotator.css
│ │ └── dtoc.annotator.old.js
│ ├── css/
│ │ ├── custom.css
│ │ ├── default.css
│ │ ├── dtc.css
│ │ └── tei.css
│ ├── dtoc.app.js
│ ├── dtoc.docmodel.js
│ ├── dtoc.index.js
│ ├── dtoc.markup.curator.js
│ ├── dtoc.markup.js
│ ├── dtoc.markup.loader.js
│ ├── dtoc.reader.iframe.js
│ ├── dtoc.reader.js
│ ├── dtoc.stats.js
│ ├── dtoc.toc.js
│ ├── dtoc.tooltip.js
│ ├── index.jsp
│ └── wgxpath/
│ └── wgxpath.install.js
├── index.jsp
├── jsduck.bat
├── jsduck.sh
├── microocp/
│ └── index.jsp
├── pblit/
│ └── index.jsp
├── resources/
│ ├── ace/
│ │ └── 1.4.12/
│ │ └── src-min-noconflict/
│ │ ├── ace.js
│ │ ├── ext-beautify.js
│ │ ├── ext-code_lens.js
│ │ ├── ext-elastic_tabstops_lite.js
│ │ ├── ext-emmet.js
│ │ ├── ext-error_marker.js
│ │ ├── ext-keybinding_menu.js
│ │ ├── ext-language_tools.js
│ │ ├── ext-linking.js
│ │ ├── ext-modelist.js
│ │ ├── ext-options.js
│ │ ├── ext-prompt.js
│ │ ├── ext-rtl.js
│ │ ├── ext-searchbox.js
│ │ ├── ext-settings_menu.js
│ │ ├── ext-spellcheck.js
│ │ ├── ext-split.js
│ │ ├── ext-static_highlight.js
│ │ ├── ext-statusbar.js
│ │ ├── ext-tern.js
│ │ ├── ext-textarea.js
│ │ ├── ext-themelist.js
│ │ ├── ext-whitespace.js
│ │ ├── keybinding-emacs.js
│ │ ├── keybinding-sublime.js
│ │ ├── keybinding-vim.js
│ │ ├── keybinding-vscode.js
│ │ ├── mode-abap.js
│ │ ├── mode-abc.js
│ │ ├── mode-actionscript.js
│ │ ├── mode-ada.js
│ │ ├── mode-alda.js
│ │ ├── mode-apache_conf.js
│ │ ├── mode-apex.js
│ │ ├── mode-applescript.js
│ │ ├── mode-aql.js
│ │ ├── mode-asciidoc.js
│ │ ├── mode-asl.js
│ │ ├── mode-assembly_x86.js
│ │ ├── mode-autohotkey.js
│ │ ├── mode-batchfile.js
│ │ ├── mode-c9search.js
│ │ ├── mode-c_cpp.js
│ │ ├── mode-cirru.js
│ │ ├── mode-clojure.js
│ │ ├── mode-cobol.js
│ │ ├── mode-coffee.js
│ │ ├── mode-coldfusion.js
│ │ ├── mode-crystal.js
│ │ ├── mode-csharp.js
│ │ ├── mode-csound_document.js
│ │ ├── mode-csound_orchestra.js
│ │ ├── mode-csound_score.js
│ │ ├── mode-csp.js
│ │ ├── mode-css.js
│ │ ├── mode-curly.js
│ │ ├── mode-d.js
│ │ ├── mode-dart.js
│ │ ├── mode-diff.js
│ │ ├── mode-django.js
│ │ ├── mode-dockerfile.js
│ │ ├── mode-dot.js
│ │ ├── mode-drools.js
│ │ ├── mode-edifact.js
│ │ ├── mode-eiffel.js
│ │ ├── mode-ejs.js
│ │ ├── mode-elixir.js
│ │ ├── mode-elm.js
│ │ ├── mode-erlang.js
│ │ ├── mode-forth.js
│ │ ├── mode-fortran.js
│ │ ├── mode-fsharp.js
│ │ ├── mode-fsl.js
│ │ ├── mode-ftl.js
│ │ ├── mode-gcode.js
│ │ ├── mode-gherkin.js
│ │ ├── mode-gitignore.js
│ │ ├── mode-glsl.js
│ │ ├── mode-gobstones.js
│ │ ├── mode-golang.js
│ │ ├── mode-graphqlschema.js
│ │ ├── mode-groovy.js
│ │ ├── mode-haml.js
│ │ ├── mode-handlebars.js
│ │ ├── mode-haskell.js
│ │ ├── mode-haskell_cabal.js
│ │ ├── mode-haxe.js
│ │ ├── mode-hjson.js
│ │ ├── mode-html.js
│ │ ├── mode-html_elixir.js
│ │ ├── mode-html_ruby.js
│ │ ├── mode-ini.js
│ │ ├── mode-io.js
│ │ ├── mode-jack.js
│ │ ├── mode-jade.js
│ │ ├── mode-java.js
│ │ ├── mode-javascript.js
│ │ ├── mode-json.js
│ │ ├── mode-json5.js
│ │ ├── mode-jsoniq.js
│ │ ├── mode-jsp.js
│ │ ├── mode-jssm.js
│ │ ├── mode-jsx.js
│ │ ├── mode-julia.js
│ │ ├── mode-kotlin.js
│ │ ├── mode-latex.js
│ │ ├── mode-less.js
│ │ ├── mode-liquid.js
│ │ ├── mode-lisp.js
│ │ ├── mode-livescript.js
│ │ ├── mode-logiql.js
│ │ ├── mode-logtalk.js
│ │ ├── mode-lsl.js
│ │ ├── mode-lua.js
│ │ ├── mode-luapage.js
│ │ ├── mode-lucene.js
│ │ ├── mode-makefile.js
│ │ ├── mode-markdown.js
│ │ ├── mode-mask.js
│ │ ├── mode-matlab.js
│ │ ├── mode-maze.js
│ │ ├── mode-mediawiki.js
│ │ ├── mode-mel.js
│ │ ├── mode-mixal.js
│ │ ├── mode-mushcode.js
│ │ ├── mode-mysql.js
│ │ ├── mode-nginx.js
│ │ ├── mode-nim.js
│ │ ├── mode-nix.js
│ │ ├── mode-nsis.js
│ │ ├── mode-nunjucks.js
│ │ ├── mode-objectivec.js
│ │ ├── mode-ocaml.js
│ │ ├── mode-pascal.js
│ │ ├── mode-perl.js
│ │ ├── mode-perl6.js
│ │ ├── mode-pgsql.js
│ │ ├── mode-php.js
│ │ ├── mode-php_laravel_blade.js
│ │ ├── mode-pig.js
│ │ ├── mode-plain_text.js
│ │ ├── mode-powershell.js
│ │ ├── mode-praat.js
│ │ ├── mode-prisma.js
│ │ ├── mode-prolog.js
│ │ ├── mode-properties.js
│ │ ├── mode-protobuf.js
│ │ ├── mode-puppet.js
│ │ ├── mode-python.js
│ │ ├── mode-qml.js
│ │ ├── mode-r.js
│ │ ├── mode-razor.js
│ │ ├── mode-rdoc.js
│ │ ├── mode-red.js
│ │ ├── mode-redshift.js
│ │ ├── mode-rhtml.js
│ │ ├── mode-rst.js
│ │ ├── mode-ruby.js
│ │ ├── mode-rust.js
│ │ ├── mode-sass.js
│ │ ├── mode-scad.js
│ │ ├── mode-scala.js
│ │ ├── mode-scheme.js
│ │ ├── mode-scss.js
│ │ ├── mode-sh.js
│ │ ├── mode-sjs.js
│ │ ├── mode-slim.js
│ │ ├── mode-smarty.js
│ │ ├── mode-snippets.js
│ │ ├── mode-soy_template.js
│ │ ├── mode-space.js
│ │ ├── mode-sparql.js
│ │ ├── mode-sql.js
│ │ ├── mode-sqlserver.js
│ │ ├── mode-stylus.js
│ │ ├── mode-svg.js
│ │ ├── mode-swift.js
│ │ ├── mode-tcl.js
│ │ ├── mode-terraform.js
│ │ ├── mode-tex.js
│ │ ├── mode-text.js
│ │ ├── mode-textile.js
│ │ ├── mode-toml.js
│ │ ├── mode-tsx.js
│ │ ├── mode-turtle.js
│ │ ├── mode-twig.js
│ │ ├── mode-typescript.js
│ │ ├── mode-vala.js
│ │ ├── mode-vbscript.js
│ │ ├── mode-velocity.js
│ │ ├── mode-verilog.js
│ │ ├── mode-vhdl.js
│ │ ├── mode-visualforce.js
│ │ ├── mode-wollok.js
│ │ ├── mode-xml.js
│ │ ├── mode-xquery.js
│ │ ├── mode-yaml.js
│ │ ├── mode-zeek.js
│ │ ├── snippets/
│ │ │ ├── abap.js
│ │ │ ├── abc.js
│ │ │ ├── actionscript.js
│ │ │ ├── ada.js
│ │ │ ├── alda.js
│ │ │ ├── apache_conf.js
│ │ │ ├── apex.js
│ │ │ ├── applescript.js
│ │ │ ├── aql.js
│ │ │ ├── asciidoc.js
│ │ │ ├── asl.js
│ │ │ ├── assembly_x86.js
│ │ │ ├── autohotkey.js
│ │ │ ├── batchfile.js
│ │ │ ├── c9search.js
│ │ │ ├── c_cpp.js
│ │ │ ├── cirru.js
│ │ │ ├── clojure.js
│ │ │ ├── cobol.js
│ │ │ ├── coffee.js
│ │ │ ├── coldfusion.js
│ │ │ ├── crystal.js
│ │ │ ├── csharp.js
│ │ │ ├── csound_document.js
│ │ │ ├── csound_orchestra.js
│ │ │ ├── csound_score.js
│ │ │ ├── csp.js
│ │ │ ├── css.js
│ │ │ ├── curly.js
│ │ │ ├── d.js
│ │ │ ├── dart.js
│ │ │ ├── diff.js
│ │ │ ├── django.js
│ │ │ ├── dockerfile.js
│ │ │ ├── dot.js
│ │ │ ├── drools.js
│ │ │ ├── edifact.js
│ │ │ ├── eiffel.js
│ │ │ ├── ejs.js
│ │ │ ├── elixir.js
│ │ │ ├── elm.js
│ │ │ ├── erlang.js
│ │ │ ├── forth.js
│ │ │ ├── fortran.js
│ │ │ ├── fsharp.js
│ │ │ ├── fsl.js
│ │ │ ├── ftl.js
│ │ │ ├── gcode.js
│ │ │ ├── gherkin.js
│ │ │ ├── gitignore.js
│ │ │ ├── glsl.js
│ │ │ ├── gobstones.js
│ │ │ ├── golang.js
│ │ │ ├── graphqlschema.js
│ │ │ ├── groovy.js
│ │ │ ├── haml.js
│ │ │ ├── handlebars.js
│ │ │ ├── haskell.js
│ │ │ ├── haskell_cabal.js
│ │ │ ├── haxe.js
│ │ │ ├── hjson.js
│ │ │ ├── html.js
│ │ │ ├── html_elixir.js
│ │ │ ├── html_ruby.js
│ │ │ ├── ini.js
│ │ │ ├── io.js
│ │ │ ├── jack.js
│ │ │ ├── jade.js
│ │ │ ├── java.js
│ │ │ ├── javascript.js
│ │ │ ├── json.js
│ │ │ ├── json5.js
│ │ │ ├── jsoniq.js
│ │ │ ├── jsp.js
│ │ │ ├── jssm.js
│ │ │ ├── jsx.js
│ │ │ ├── julia.js
│ │ │ ├── kotlin.js
│ │ │ ├── latex.js
│ │ │ ├── less.js
│ │ │ ├── liquid.js
│ │ │ ├── lisp.js
│ │ │ ├── livescript.js
│ │ │ ├── logiql.js
│ │ │ ├── logtalk.js
│ │ │ ├── lsl.js
│ │ │ ├── lua.js
│ │ │ ├── luapage.js
│ │ │ ├── lucene.js
│ │ │ ├── makefile.js
│ │ │ ├── markdown.js
│ │ │ ├── mask.js
│ │ │ ├── matlab.js
│ │ │ ├── maze.js
│ │ │ ├── mediawiki.js
│ │ │ ├── mel.js
│ │ │ ├── mixal.js
│ │ │ ├── mushcode.js
│ │ │ ├── mysql.js
│ │ │ ├── nginx.js
│ │ │ ├── nim.js
│ │ │ ├── nix.js
│ │ │ ├── nsis.js
│ │ │ ├── nunjucks.js
│ │ │ ├── objectivec.js
│ │ │ ├── ocaml.js
│ │ │ ├── pascal.js
│ │ │ ├── perl.js
│ │ │ ├── perl6.js
│ │ │ ├── pgsql.js
│ │ │ ├── php.js
│ │ │ ├── php_laravel_blade.js
│ │ │ ├── pig.js
│ │ │ ├── plain_text.js
│ │ │ ├── powershell.js
│ │ │ ├── praat.js
│ │ │ ├── prisma.js
│ │ │ ├── prolog.js
│ │ │ ├── properties.js
│ │ │ ├── protobuf.js
│ │ │ ├── puppet.js
│ │ │ ├── python.js
│ │ │ ├── qml.js
│ │ │ ├── r.js
│ │ │ ├── razor.js
│ │ │ ├── rdoc.js
│ │ │ ├── red.js
│ │ │ ├── redshift.js
│ │ │ ├── rhtml.js
│ │ │ ├── rst.js
│ │ │ ├── ruby.js
│ │ │ ├── rust.js
│ │ │ ├── sass.js
│ │ │ ├── scad.js
│ │ │ ├── scala.js
│ │ │ ├── scheme.js
│ │ │ ├── scss.js
│ │ │ ├── sh.js
│ │ │ ├── sjs.js
│ │ │ ├── slim.js
│ │ │ ├── smarty.js
│ │ │ ├── snippets.js
│ │ │ ├── soy_template.js
│ │ │ ├── space.js
│ │ │ ├── sparql.js
│ │ │ ├── sql.js
│ │ │ ├── sqlserver.js
│ │ │ ├── stylus.js
│ │ │ ├── svg.js
│ │ │ ├── swift.js
│ │ │ ├── tcl.js
│ │ │ ├── terraform.js
│ │ │ ├── tex.js
│ │ │ ├── text.js
│ │ │ ├── textile.js
│ │ │ ├── toml.js
│ │ │ ├── tsx.js
│ │ │ ├── turtle.js
│ │ │ ├── twig.js
│ │ │ ├── typescript.js
│ │ │ ├── vala.js
│ │ │ ├── vbscript.js
│ │ │ ├── velocity.js
│ │ │ ├── verilog.js
│ │ │ ├── vhdl.js
│ │ │ ├── visualforce.js
│ │ │ ├── wollok.js
│ │ │ ├── xml.js
│ │ │ ├── xquery.js
│ │ │ ├── yaml.js
│ │ │ └── zeek.js
│ │ ├── theme-ambiance.js
│ │ ├── theme-chaos.js
│ │ ├── theme-chrome.js
│ │ ├── theme-clouds.js
│ │ ├── theme-clouds_midnight.js
│ │ ├── theme-cobalt.js
│ │ ├── theme-crimson_editor.js
│ │ ├── theme-dawn.js
│ │ ├── theme-dracula.js
│ │ ├── theme-dreamweaver.js
│ │ ├── theme-eclipse.js
│ │ ├── theme-github.js
│ │ ├── theme-gob.js
│ │ ├── theme-gruvbox.js
│ │ ├── theme-idle_fingers.js
│ │ ├── theme-iplastic.js
│ │ ├── theme-katzenmilch.js
│ │ ├── theme-kr_theme.js
│ │ ├── theme-kuroir.js
│ │ ├── theme-merbivore.js
│ │ ├── theme-merbivore_soft.js
│ │ ├── theme-mono_industrial.js
│ │ ├── theme-monokai.js
│ │ ├── theme-nord_dark.js
│ │ ├── theme-pastel_on_dark.js
│ │ ├── theme-solarized_dark.js
│ │ ├── theme-solarized_light.js
│ │ ├── theme-sqlserver.js
│ │ ├── theme-terminal.js
│ │ ├── theme-textmate.js
│ │ ├── theme-tomorrow.js
│ │ ├── theme-tomorrow_night.js
│ │ ├── theme-tomorrow_night_blue.js
│ │ ├── theme-tomorrow_night_bright.js
│ │ ├── theme-tomorrow_night_eighties.js
│ │ ├── theme-twilight.js
│ │ ├── theme-vibrant_ink.js
│ │ ├── theme-xcode.js
│ │ ├── worker-base.js
│ │ ├── worker-coffee.js
│ │ ├── worker-css.js
│ │ ├── worker-html.js
│ │ ├── worker-javascript.js
│ │ ├── worker-json.js
│ │ ├── worker-lua.js
│ │ ├── worker-php.js
│ │ ├── worker-tern.js
│ │ ├── worker-xml.js
│ │ └── worker-xquery.js
│ ├── bubblelines/
│ │ └── Bubblelines.js
│ ├── cirrus/
│ │ ├── flash/
│ │ │ └── Cirrus.swf
│ │ └── html5/
│ │ ├── Cirrus.js
│ │ ├── Word.js
│ │ ├── WordController.js
│ │ └── d3.layout.cloud.js
│ ├── ckeditor/
│ │ └── ckeditor4.15.0/
│ │ ├── CHANGES.md
│ │ ├── LICENSE.md
│ │ ├── README.md
│ │ ├── adapters/
│ │ │ └── jquery.js
│ │ ├── build-config.js
│ │ ├── ckeditor.js
│ │ ├── config.js
│ │ ├── contents.css
│ │ ├── lang/
│ │ │ ├── af.js
│ │ │ ├── ar.js
│ │ │ ├── az.js
│ │ │ ├── bg.js
│ │ │ ├── bn.js
│ │ │ ├── bs.js
│ │ │ ├── ca.js
│ │ │ ├── cs.js
│ │ │ ├── cy.js
│ │ │ ├── da.js
│ │ │ ├── de-ch.js
│ │ │ ├── de.js
│ │ │ ├── el.js
│ │ │ ├── en-au.js
│ │ │ ├── en-ca.js
│ │ │ ├── en-gb.js
│ │ │ ├── en.js
│ │ │ ├── eo.js
│ │ │ ├── es-mx.js
│ │ │ ├── es.js
│ │ │ ├── et.js
│ │ │ ├── eu.js
│ │ │ ├── fa.js
│ │ │ ├── fi.js
│ │ │ ├── fo.js
│ │ │ ├── fr-ca.js
│ │ │ ├── fr.js
│ │ │ ├── gl.js
│ │ │ ├── gu.js
│ │ │ ├── he.js
│ │ │ ├── hi.js
│ │ │ ├── hr.js
│ │ │ ├── hu.js
│ │ │ ├── id.js
│ │ │ ├── is.js
│ │ │ ├── it.js
│ │ │ ├── ja.js
│ │ │ ├── ka.js
│ │ │ ├── km.js
│ │ │ ├── ko.js
│ │ │ ├── ku.js
│ │ │ ├── lt.js
│ │ │ ├── lv.js
│ │ │ ├── mk.js
│ │ │ ├── mn.js
│ │ │ ├── ms.js
│ │ │ ├── nb.js
│ │ │ ├── nl.js
│ │ │ ├── no.js
│ │ │ ├── oc.js
│ │ │ ├── pl.js
│ │ │ ├── pt-br.js
│ │ │ ├── pt.js
│ │ │ ├── ro.js
│ │ │ ├── ru.js
│ │ │ ├── si.js
│ │ │ ├── sk.js
│ │ │ ├── sl.js
│ │ │ ├── sq.js
│ │ │ ├── sr-latn.js
│ │ │ ├── sr.js
│ │ │ ├── sv.js
│ │ │ ├── th.js
│ │ │ ├── tr.js
│ │ │ ├── tt.js
│ │ │ ├── ug.js
│ │ │ ├── uk.js
│ │ │ ├── vi.js
│ │ │ ├── zh-cn.js
│ │ │ └── zh.js
│ │ ├── plugins/
│ │ │ ├── a11yhelp/
│ │ │ │ └── dialogs/
│ │ │ │ ├── a11yhelp.js
│ │ │ │ └── lang/
│ │ │ │ ├── _translationstatus.txt
│ │ │ │ ├── af.js
│ │ │ │ ├── ar.js
│ │ │ │ ├── az.js
│ │ │ │ ├── bg.js
│ │ │ │ ├── ca.js
│ │ │ │ ├── cs.js
│ │ │ │ ├── cy.js
│ │ │ │ ├── da.js
│ │ │ │ ├── de-ch.js
│ │ │ │ ├── de.js
│ │ │ │ ├── el.js
│ │ │ │ ├── en-au.js
│ │ │ │ ├── en-gb.js
│ │ │ │ ├── en.js
│ │ │ │ ├── eo.js
│ │ │ │ ├── es-mx.js
│ │ │ │ ├── es.js
│ │ │ │ ├── et.js
│ │ │ │ ├── eu.js
│ │ │ │ ├── fa.js
│ │ │ │ ├── fi.js
│ │ │ │ ├── fo.js
│ │ │ │ ├── fr-ca.js
│ │ │ │ ├── fr.js
│ │ │ │ ├── gl.js
│ │ │ │ ├── gu.js
│ │ │ │ ├── he.js
│ │ │ │ ├── hi.js
│ │ │ │ ├── hr.js
│ │ │ │ ├── hu.js
│ │ │ │ ├── id.js
│ │ │ │ ├── it.js
│ │ │ │ ├── ja.js
│ │ │ │ ├── km.js
│ │ │ │ ├── ko.js
│ │ │ │ ├── ku.js
│ │ │ │ ├── lt.js
│ │ │ │ ├── lv.js
│ │ │ │ ├── mk.js
│ │ │ │ ├── mn.js
│ │ │ │ ├── nb.js
│ │ │ │ ├── nl.js
│ │ │ │ ├── no.js
│ │ │ │ ├── oc.js
│ │ │ │ ├── pl.js
│ │ │ │ ├── pt-br.js
│ │ │ │ ├── pt.js
│ │ │ │ ├── ro.js
│ │ │ │ ├── ru.js
│ │ │ │ ├── si.js
│ │ │ │ ├── sk.js
│ │ │ │ ├── sl.js
│ │ │ │ ├── sq.js
│ │ │ │ ├── sr-latn.js
│ │ │ │ ├── sr.js
│ │ │ │ ├── sv.js
│ │ │ │ ├── th.js
│ │ │ │ ├── tr.js
│ │ │ │ ├── tt.js
│ │ │ │ ├── ug.js
│ │ │ │ ├── uk.js
│ │ │ │ ├── vi.js
│ │ │ │ ├── zh-cn.js
│ │ │ │ └── zh.js
│ │ │ ├── about/
│ │ │ │ └── dialogs/
│ │ │ │ └── about.js
│ │ │ ├── clipboard/
│ │ │ │ └── dialogs/
│ │ │ │ └── paste.js
│ │ │ ├── colorbutton/
│ │ │ │ ├── lang/
│ │ │ │ │ ├── af.js
│ │ │ │ │ ├── ar.js
│ │ │ │ │ ├── az.js
│ │ │ │ │ ├── bg.js
│ │ │ │ │ ├── bn.js
│ │ │ │ │ ├── bs.js
│ │ │ │ │ ├── ca.js
│ │ │ │ │ ├── cs.js
│ │ │ │ │ ├── cy.js
│ │ │ │ │ ├── da.js
│ │ │ │ │ ├── de-ch.js
│ │ │ │ │ ├── de.js
│ │ │ │ │ ├── el.js
│ │ │ │ │ ├── en-au.js
│ │ │ │ │ ├── en-ca.js
│ │ │ │ │ ├── en-gb.js
│ │ │ │ │ ├── en.js
│ │ │ │ │ ├── eo.js
│ │ │ │ │ ├── es-mx.js
│ │ │ │ │ ├── es.js
│ │ │ │ │ ├── et.js
│ │ │ │ │ ├── eu.js
│ │ │ │ │ ├── fa.js
│ │ │ │ │ ├── fi.js
│ │ │ │ │ ├── fo.js
│ │ │ │ │ ├── fr-ca.js
│ │ │ │ │ ├── fr.js
│ │ │ │ │ ├── gl.js
│ │ │ │ │ ├── gu.js
│ │ │ │ │ ├── he.js
│ │ │ │ │ ├── hi.js
│ │ │ │ │ ├── hr.js
│ │ │ │ │ ├── hu.js
│ │ │ │ │ ├── id.js
│ │ │ │ │ ├── is.js
│ │ │ │ │ ├── it.js
│ │ │ │ │ ├── ja.js
│ │ │ │ │ ├── ka.js
│ │ │ │ │ ├── km.js
│ │ │ │ │ ├── ko.js
│ │ │ │ │ ├── ku.js
│ │ │ │ │ ├── lt.js
│ │ │ │ │ ├── lv.js
│ │ │ │ │ ├── mk.js
│ │ │ │ │ ├── mn.js
│ │ │ │ │ ├── ms.js
│ │ │ │ │ ├── nb.js
│ │ │ │ │ ├── nl.js
│ │ │ │ │ ├── no.js
│ │ │ │ │ ├── oc.js
│ │ │ │ │ ├── pl.js
│ │ │ │ │ ├── pt-br.js
│ │ │ │ │ ├── pt.js
│ │ │ │ │ ├── ro.js
│ │ │ │ │ ├── ru.js
│ │ │ │ │ ├── si.js
│ │ │ │ │ ├── sk.js
│ │ │ │ │ ├── sl.js
│ │ │ │ │ ├── sq.js
│ │ │ │ │ ├── sr-latn.js
│ │ │ │ │ ├── sr.js
│ │ │ │ │ ├── sv.js
│ │ │ │ │ ├── th.js
│ │ │ │ │ ├── tr.js
│ │ │ │ │ ├── tt.js
│ │ │ │ │ ├── ug.js
│ │ │ │ │ ├── uk.js
│ │ │ │ │ ├── vi.js
│ │ │ │ │ ├── zh-cn.js
│ │ │ │ │ └── zh.js
│ │ │ │ └── plugin.js
│ │ │ ├── dialog/
│ │ │ │ ├── dialogDefinition.js
│ │ │ │ └── styles/
│ │ │ │ └── dialog.css
│ │ │ ├── image/
│ │ │ │ └── dialogs/
│ │ │ │ └── image.js
│ │ │ ├── justify/
│ │ │ │ └── plugin.js
│ │ │ ├── link/
│ │ │ │ └── dialogs/
│ │ │ │ ├── anchor.js
│ │ │ │ └── link.js
│ │ │ ├── panelbutton/
│ │ │ │ └── plugin.js
│ │ │ ├── pastefromgdocs/
│ │ │ │ └── filter/
│ │ │ │ └── default.js
│ │ │ ├── pastefromword/
│ │ │ │ └── filter/
│ │ │ │ └── default.js
│ │ │ ├── pastetools/
│ │ │ │ └── filter/
│ │ │ │ ├── common.js
│ │ │ │ └── image.js
│ │ │ ├── scayt/
│ │ │ │ ├── CHANGELOG.md
│ │ │ │ ├── LICENSE.md
│ │ │ │ ├── README.md
│ │ │ │ ├── dialogs/
│ │ │ │ │ ├── dialog.css
│ │ │ │ │ ├── options.js
│ │ │ │ │ └── toolbar.css
│ │ │ │ └── skins/
│ │ │ │ └── moono-lisa/
│ │ │ │ └── scayt.css
│ │ │ ├── sourcedialog/
│ │ │ │ ├── dialogs/
│ │ │ │ │ └── sourcedialog.js
│ │ │ │ ├── lang/
│ │ │ │ │ ├── af.js
│ │ │ │ │ ├── ar.js
│ │ │ │ │ ├── az.js
│ │ │ │ │ ├── bg.js
│ │ │ │ │ ├── bn.js
│ │ │ │ │ ├── bs.js
│ │ │ │ │ ├── ca.js
│ │ │ │ │ ├── cs.js
│ │ │ │ │ ├── cy.js
│ │ │ │ │ ├── da.js
│ │ │ │ │ ├── de-ch.js
│ │ │ │ │ ├── de.js
│ │ │ │ │ ├── el.js
│ │ │ │ │ ├── en-au.js
│ │ │ │ │ ├── en-ca.js
│ │ │ │ │ ├── en-gb.js
│ │ │ │ │ ├── en.js
│ │ │ │ │ ├── eo.js
│ │ │ │ │ ├── es-mx.js
│ │ │ │ │ ├── es.js
│ │ │ │ │ ├── et.js
│ │ │ │ │ ├── eu.js
│ │ │ │ │ ├── fa.js
│ │ │ │ │ ├── fi.js
│ │ │ │ │ ├── fo.js
│ │ │ │ │ ├── fr-ca.js
│ │ │ │ │ ├── fr.js
│ │ │ │ │ ├── gl.js
│ │ │ │ │ ├── gu.js
│ │ │ │ │ ├── he.js
│ │ │ │ │ ├── hi.js
│ │ │ │ │ ├── hr.js
│ │ │ │ │ ├── hu.js
│ │ │ │ │ ├── id.js
│ │ │ │ │ ├── is.js
│ │ │ │ │ ├── it.js
│ │ │ │ │ ├── ja.js
│ │ │ │ │ ├── ka.js
│ │ │ │ │ ├── km.js
│ │ │ │ │ ├── ko.js
│ │ │ │ │ ├── ku.js
│ │ │ │ │ ├── lt.js
│ │ │ │ │ ├── lv.js
│ │ │ │ │ ├── mn.js
│ │ │ │ │ ├── ms.js
│ │ │ │ │ ├── nb.js
│ │ │ │ │ ├── nl.js
│ │ │ │ │ ├── no.js
│ │ │ │ │ ├── oc.js
│ │ │ │ │ ├── pl.js
│ │ │ │ │ ├── pt-br.js
│ │ │ │ │ ├── pt.js
│ │ │ │ │ ├── ro.js
│ │ │ │ │ ├── ru.js
│ │ │ │ │ ├── si.js
│ │ │ │ │ ├── sk.js
│ │ │ │ │ ├── sl.js
│ │ │ │ │ ├── sq.js
│ │ │ │ │ ├── sr-latn.js
│ │ │ │ │ ├── sr.js
│ │ │ │ │ ├── sv.js
│ │ │ │ │ ├── th.js
│ │ │ │ │ ├── tr.js
│ │ │ │ │ ├── tt.js
│ │ │ │ │ ├── ug.js
│ │ │ │ │ ├── uk.js
│ │ │ │ │ ├── vi.js
│ │ │ │ │ ├── zh-cn.js
│ │ │ │ │ └── zh.js
│ │ │ │ ├── plugin.js
│ │ │ │ └── samples/
│ │ │ │ └── sourcedialog.html
│ │ │ ├── specialchar/
│ │ │ │ └── dialogs/
│ │ │ │ ├── lang/
│ │ │ │ │ ├── _translationstatus.txt
│ │ │ │ │ ├── af.js
│ │ │ │ │ ├── ar.js
│ │ │ │ │ ├── az.js
│ │ │ │ │ ├── bg.js
│ │ │ │ │ ├── ca.js
│ │ │ │ │ ├── cs.js
│ │ │ │ │ ├── cy.js
│ │ │ │ │ ├── da.js
│ │ │ │ │ ├── de-ch.js
│ │ │ │ │ ├── de.js
│ │ │ │ │ ├── el.js
│ │ │ │ │ ├── en-au.js
│ │ │ │ │ ├── en-ca.js
│ │ │ │ │ ├── en-gb.js
│ │ │ │ │ ├── en.js
│ │ │ │ │ ├── eo.js
│ │ │ │ │ ├── es-mx.js
│ │ │ │ │ ├── es.js
│ │ │ │ │ ├── et.js
│ │ │ │ │ ├── eu.js
│ │ │ │ │ ├── fa.js
│ │ │ │ │ ├── fi.js
│ │ │ │ │ ├── fr-ca.js
│ │ │ │ │ ├── fr.js
│ │ │ │ │ ├── gl.js
│ │ │ │ │ ├── he.js
│ │ │ │ │ ├── hr.js
│ │ │ │ │ ├── hu.js
│ │ │ │ │ ├── id.js
│ │ │ │ │ ├── it.js
│ │ │ │ │ ├── ja.js
│ │ │ │ │ ├── km.js
│ │ │ │ │ ├── ko.js
│ │ │ │ │ ├── ku.js
│ │ │ │ │ ├── lt.js
│ │ │ │ │ ├── lv.js
│ │ │ │ │ ├── nb.js
│ │ │ │ │ ├── nl.js
│ │ │ │ │ ├── no.js
│ │ │ │ │ ├── oc.js
│ │ │ │ │ ├── pl.js
│ │ │ │ │ ├── pt-br.js
│ │ │ │ │ ├── pt.js
│ │ │ │ │ ├── ro.js
│ │ │ │ │ ├── ru.js
│ │ │ │ │ ├── si.js
│ │ │ │ │ ├── sk.js
│ │ │ │ │ ├── sl.js
│ │ │ │ │ ├── sq.js
│ │ │ │ │ ├── sr-latn.js
│ │ │ │ │ ├── sr.js
│ │ │ │ │ ├── sv.js
│ │ │ │ │ ├── th.js
│ │ │ │ │ ├── tr.js
│ │ │ │ │ ├── tt.js
│ │ │ │ │ ├── ug.js
│ │ │ │ │ ├── uk.js
│ │ │ │ │ ├── vi.js
│ │ │ │ │ ├── zh-cn.js
│ │ │ │ │ └── zh.js
│ │ │ │ └── specialchar.js
│ │ │ ├── stopediting/
│ │ │ │ ├── lang/
│ │ │ │ │ ├── en.js
│ │ │ │ │ └── fr.js
│ │ │ │ └── plugin.js
│ │ │ ├── table/
│ │ │ │ └── dialogs/
│ │ │ │ └── table.js
│ │ │ ├── tableselection/
│ │ │ │ └── styles/
│ │ │ │ └── tableselection.css
│ │ │ ├── tabletools/
│ │ │ │ └── dialogs/
│ │ │ │ └── tableCell.js
│ │ │ └── wsc/
│ │ │ ├── LICENSE.md
│ │ │ ├── README.md
│ │ │ ├── dialogs/
│ │ │ │ ├── ciframe.html
│ │ │ │ ├── tmpFrameset.html
│ │ │ │ ├── wsc.css
│ │ │ │ ├── wsc.js
│ │ │ │ └── wsc_ie.js
│ │ │ └── skins/
│ │ │ └── moono-lisa/
│ │ │ └── wsc.css
│ │ ├── samples/
│ │ │ ├── css/
│ │ │ │ └── samples.css
│ │ │ ├── index.html
│ │ │ ├── js/
│ │ │ │ ├── sample.js
│ │ │ │ └── sf.js
│ │ │ ├── old/
│ │ │ │ ├── ajax.html
│ │ │ │ ├── api.html
│ │ │ │ ├── appendto.html
│ │ │ │ ├── assets/
│ │ │ │ │ ├── outputxhtml/
│ │ │ │ │ │ └── outputxhtml.css
│ │ │ │ │ ├── posteddata.php
│ │ │ │ │ └── uilanguages/
│ │ │ │ │ └── languages.js
│ │ │ │ ├── datafiltering.html
│ │ │ │ ├── dialog/
│ │ │ │ │ ├── assets/
│ │ │ │ │ │ └── my_dialog.js
│ │ │ │ │ └── dialog.html
│ │ │ │ ├── divreplace.html
│ │ │ │ ├── enterkey/
│ │ │ │ │ └── enterkey.html
│ │ │ │ ├── htmlwriter/
│ │ │ │ │ ├── assets/
│ │ │ │ │ │ └── outputforflash/
│ │ │ │ │ │ ├── outputforflash.fla
│ │ │ │ │ │ ├── outputforflash.swf
│ │ │ │ │ │ └── swfobject.js
│ │ │ │ │ ├── outputforflash.html
│ │ │ │ │ └── outputhtml.html
│ │ │ │ ├── index.html
│ │ │ │ ├── inlineall.html
│ │ │ │ ├── inlinebycode.html
│ │ │ │ ├── inlinetextarea.html
│ │ │ │ ├── jquery.html
│ │ │ │ ├── magicline/
│ │ │ │ │ └── magicline.html
│ │ │ │ ├── readonly.html
│ │ │ │ ├── replacebyclass.html
│ │ │ │ ├── replacebycode.html
│ │ │ │ ├── sample.css
│ │ │ │ ├── sample.js
│ │ │ │ ├── sample_posteddata.php
│ │ │ │ ├── tabindex.html
│ │ │ │ ├── toolbar/
│ │ │ │ │ └── toolbar.html
│ │ │ │ ├── uicolor.html
│ │ │ │ ├── uilanguages.html
│ │ │ │ ├── wysiwygarea/
│ │ │ │ │ └── fullpage.html
│ │ │ │ └── xhtmlstyle.html
│ │ │ └── toolbarconfigurator/
│ │ │ ├── css/
│ │ │ │ └── fontello.css
│ │ │ ├── font/
│ │ │ │ ├── LICENSE.txt
│ │ │ │ └── config.json
│ │ │ ├── index.html
│ │ │ ├── js/
│ │ │ │ ├── abstracttoolbarmodifier.js
│ │ │ │ ├── fulltoolbareditor.js
│ │ │ │ ├── toolbarmodifier.js
│ │ │ │ └── toolbartextmodifier.js
│ │ │ └── lib/
│ │ │ └── codemirror/
│ │ │ ├── LICENSE
│ │ │ ├── codemirror.css
│ │ │ ├── codemirror.js
│ │ │ ├── javascript.js
│ │ │ ├── neo.css
│ │ │ ├── show-hint.css
│ │ │ └── show-hint.js
│ │ ├── skins/
│ │ │ └── moono-lisa/
│ │ │ ├── dialog.css
│ │ │ ├── dialog_ie.css
│ │ │ ├── dialog_ie8.css
│ │ │ ├── dialog_iequirks.css
│ │ │ ├── editor.css
│ │ │ ├── editor_gecko.css
│ │ │ ├── editor_ie.css
│ │ │ ├── editor_ie8.css
│ │ │ ├── editor_iequirks.css
│ │ │ └── readme.md
│ │ ├── styles.js
│ │ └── vendor/
│ │ └── promise.js
│ ├── css/
│ │ ├── fonts/
│ │ │ └── lato/
│ │ │ └── OFL.txt
│ │ └── styles.css
│ ├── d3/
│ │ ├── WordWallWorker.js
│ │ ├── current/
│ │ │ └── d3.js
│ │ └── fisheye.js
│ ├── doubletree/
│ │ ├── DoubleTree.js
│ │ ├── Trie.js
│ │ └── doubletree.css
│ ├── dreamscape/
│ │ ├── arc.js
│ │ ├── cities3.json
│ │ ├── cities4.json
│ │ └── datafile.json
│ ├── ext/
│ │ ├── 6.2.0/
│ │ │ ├── LICENSE
│ │ │ ├── charts-all-rtl.css
│ │ │ ├── charts-all.css
│ │ │ ├── charts.js
│ │ │ ├── examples/
│ │ │ │ └── style.css
│ │ │ ├── ext-all-rtl.js
│ │ │ ├── ext-all.js
│ │ │ ├── theme-crisp/
│ │ │ │ ├── resources/
│ │ │ │ │ ├── Readme.md
│ │ │ │ │ ├── ext/
│ │ │ │ │ │ └── ext-watermark/
│ │ │ │ │ │ ├── Read Me.txt
│ │ │ │ │ │ ├── demo-files/
│ │ │ │ │ │ │ ├── demo.css
│ │ │ │ │ │ │ └── demo.js
│ │ │ │ │ │ ├── demo.html
│ │ │ │ │ │ ├── selection.json
│ │ │ │ │ │ └── style.css
│ │ │ │ │ ├── theme-base/
│ │ │ │ │ │ └── Readme.md
│ │ │ │ │ ├── theme-crisp-all-rtl.css
│ │ │ │ │ ├── theme-crisp-all-rtl_1.css
│ │ │ │ │ ├── theme-crisp-all-rtl_2.css
│ │ │ │ │ ├── theme-crisp-all.css
│ │ │ │ │ ├── theme-crisp-all_1.css
│ │ │ │ │ ├── theme-crisp-all_2.css
│ │ │ │ │ ├── theme-neptune/
│ │ │ │ │ │ └── Readme.md
│ │ │ │ │ ├── theme-neutral/
│ │ │ │ │ │ └── Readme.md
│ │ │ │ │ ├── ux-all-debug.css
│ │ │ │ │ └── ux-all-rtl-debug.css
│ │ │ │ ├── theme-crisp-debug.js
│ │ │ │ └── theme-crisp.js
│ │ │ └── ux.js
│ │ └── current-overrides.js
│ ├── fontawesome/
│ │ └── 4.4.0/
│ │ ├── font-awesome-all-debug.css
│ │ ├── font-awesome-all-rtl-debug.css
│ │ ├── font-awesome-all-rtl.css
│ │ ├── font-awesome-all.css
│ │ └── fonts/
│ │ └── FontAwesome.otf
│ ├── highcharts/
│ │ └── 8/
│ │ ├── highcharts-more.js
│ │ ├── highcharts-more.src.js
│ │ ├── highcharts.css
│ │ ├── highcharts.js
│ │ ├── highcharts.src.js
│ │ └── modules/
│ │ ├── accessibility.js
│ │ ├── annotations-advanced.js
│ │ ├── annotations.js
│ │ ├── arrow-symbols.js
│ │ ├── boost-canvas.js
│ │ ├── boost.js
│ │ ├── broken-axis.js
│ │ ├── bullet.js
│ │ ├── coloraxis.js
│ │ ├── current-date-indicator.js
│ │ ├── cylinder.js
│ │ ├── data.js
│ │ ├── datagrouping.js
│ │ ├── debugger.js
│ │ ├── dependency-wheel.js
│ │ ├── dotplot.js
│ │ ├── drag-panes.js
│ │ ├── draggable-points.js
│ │ ├── drilldown.js
│ │ ├── dumbbell.js
│ │ ├── export-data.js
│ │ ├── exporting.js
│ │ ├── full-screen.js
│ │ ├── funnel.js
│ │ ├── funnel3d.js
│ │ ├── gantt.js
│ │ ├── grid-axis.js
│ │ ├── heatmap.js
│ │ ├── histogram-bellcurve.js
│ │ ├── item-series.js
│ │ ├── lollipop.js
│ │ ├── map-parser.js
│ │ ├── map.js
│ │ ├── marker-clusters.js
│ │ ├── networkgraph.js
│ │ ├── no-data-to-display.js
│ │ ├── offline-exporting.js
│ │ ├── oldie-polyfills.js
│ │ ├── oldie.js
│ │ ├── organization.js
│ │ ├── overlapping-datalabels.js
│ │ ├── parallel-coordinates.js
│ │ ├── pareto.js
│ │ ├── pathfinder.js
│ │ ├── pattern-fill.js
│ │ ├── price-indicator.js
│ │ ├── pyramid3d.js
│ │ ├── sankey.js
│ │ ├── series-label.js
│ │ ├── solid-gauge.js
│ │ ├── sonification.js
│ │ ├── static-scale.js
│ │ ├── stock-tools.js
│ │ ├── stock.js
│ │ ├── streamgraph.js
│ │ ├── sunburst.js
│ │ ├── tilemap.js
│ │ ├── timeline.js
│ │ ├── treegrid.js
│ │ ├── treemap.js
│ │ ├── variable-pie.js
│ │ ├── variwide.js
│ │ ├── vector.js
│ │ ├── venn.js
│ │ ├── windbarb.js
│ │ ├── wordcloud.js
│ │ └── xrange.js
│ ├── html/
│ │ ├── 404.html
│ │ └── 505.html
│ ├── jquery/
│ │ └── current/
│ │ ├── index.html
│ │ ├── jquery-ui.css
│ │ ├── jquery-ui.js
│ │ ├── jquery-ui.structure.css
│ │ └── jquery-ui.theme.css
│ ├── jsp/
│ │ ├── head_body.jsp
│ │ ├── html_head.jsp
│ │ ├── load_js.jsp
│ │ ├── post_app.jsp
│ │ └── pre_app.jsp
│ ├── knots/
│ │ └── Knots.js
│ ├── octokitrest/
│ │ └── octokit-rest-17.10.0.js
│ ├── openlayers/
│ │ └── ol.js
│ ├── q/
│ │ └── current/
│ │ └── q.js
│ ├── spectrum/
│ │ ├── spectrum.css
│ │ └── spectrum.js
│ ├── spyral/
│ │ ├── babel.config.js
│ │ ├── build/
│ │ │ └── spyral.js
│ │ ├── css/
│ │ │ └── spyral.css
│ │ ├── jsdoc-tern-template/
│ │ │ └── publish.js
│ │ ├── jsdoc.config.json
│ │ ├── notebooks/
│ │ │ ├── alta
│ │ │ ├── alta-create.html
│ │ │ ├── alta-create.json
│ │ │ ├── alta-scale.json
│ │ │ ├── alta-smaller.html
│ │ │ ├── alta-smaller.json
│ │ │ ├── alta-start.html
│ │ │ ├── alta-start.json
│ │ │ ├── alta-table.html
│ │ │ ├── alta-tables.json
│ │ │ ├── alta.html
│ │ │ ├── alta.json
│ │ │ └── tmp-ca.json
│ │ ├── package.json
│ │ ├── rollup.config.js
│ │ ├── src/
│ │ │ ├── index.js
│ │ │ ├── metadata.js
│ │ │ └── notebook.js
│ │ └── src-jsduck/
│ │ ├── jsdocs.py
│ │ └── spyral.js
│ ├── swfobject/
│ │ └── swfobject.js
│ ├── termsradio/
│ │ └── TermsRadio.js
│ ├── twic/
│ │ └── current/
│ │ ├── css/
│ │ │ └── twic.css
│ │ ├── data/
│ │ │ └── input/
│ │ │ └── json/
│ │ │ ├── twic_corpusinfo.json
│ │ │ └── twic_corpusmap.json
│ │ ├── js/
│ │ │ ├── twic.js
│ │ │ ├── twic_datashape.js
│ │ │ ├── twic_level.js
│ │ │ └── twic_panel.js
│ │ └── lib/
│ │ ├── class_syntax.js
│ │ ├── svg_helper_functions.js
│ │ └── textFlow.js
│ ├── visjs/
│ │ ├── vis.css
│ │ └── vis.js
│ ├── voyant/
│ │ └── current/
│ │ ├── bubbles/
│ │ │ └── bubbles.pjs
│ │ ├── docs/
│ │ │ ├── en/
│ │ │ │ ├── config.json
│ │ │ │ ├── guides/
│ │ │ │ │ ├── info/
│ │ │ │ │ │ ├── about/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── gallery/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ └── mirrors/
│ │ │ │ │ │ └── README.md
│ │ │ │ │ ├── tools/
│ │ │ │ │ │ ├── README.md
│ │ │ │ │ │ ├── bubblelines/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── bubbles/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── catalogue/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── cirrus/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── collocatesgraph/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── contexts/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── corpuscollocates/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── corpusterms/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── correlations/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── documents/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── documentterms/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── dreamscape/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── knots/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── mandala/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── microsearch/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── phrases/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── reader/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── rezoviz/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── scatterplot/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── streamgraph/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── summary/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── termsberry/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── termsradio/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── textualarc/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── topics/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── trends/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── veliza/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── via/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ └── wordtree/
│ │ │ │ │ │ └── README.md
│ │ │ │ │ └── ui/
│ │ │ │ │ ├── categories/
│ │ │ │ │ │ └── README.md
│ │ │ │ │ ├── corpuscreator/
│ │ │ │ │ │ └── README.md
│ │ │ │ │ ├── embedding/
│ │ │ │ │ │ └── README.md
│ │ │ │ │ ├── grids/
│ │ │ │ │ │ └── README.md
│ │ │ │ │ ├── languages/
│ │ │ │ │ │ └── README.md
│ │ │ │ │ ├── modifyingcorpus/
│ │ │ │ │ │ └── README.md
│ │ │ │ │ ├── new/
│ │ │ │ │ │ └── README.md
│ │ │ │ │ ├── palette/
│ │ │ │ │ │ └── README.md
│ │ │ │ │ ├── search/
│ │ │ │ │ │ └── README.md
│ │ │ │ │ ├── skins/
│ │ │ │ │ │ └── README.md
│ │ │ │ │ ├── start/
│ │ │ │ │ │ └── README.md
│ │ │ │ │ ├── stopwords/
│ │ │ │ │ │ └── README.md
│ │ │ │ │ └── tutorial/
│ │ │ │ │ └── README.md
│ │ │ │ ├── guides.json
│ │ │ │ └── welcome.html
│ │ │ ├── it/
│ │ │ │ ├── config.json
│ │ │ │ ├── guides/
│ │ │ │ │ ├── about/
│ │ │ │ │ │ └── README.md
│ │ │ │ │ ├── tools/
│ │ │ │ │ │ ├── README.md
│ │ │ │ │ │ ├── bubblelines/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── bubbles/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── catalogue/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── cirrus/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── collocatesgraph/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── contexts/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── corpuscollocates/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── corpusterms/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── documents/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── documentterms/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── knots/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── mandala/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── microsearch/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── phrases/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── reader/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── scatterplot/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── streamgraph/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── summary/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── termsradio/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── textualarc/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── trends/
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ └── wordtree/
│ │ │ │ │ │ └── README.md
│ │ │ │ │ └── ui/
│ │ │ │ │ ├── corpuscreator/
│ │ │ │ │ │ └── README.md
│ │ │ │ │ ├── embedding/
│ │ │ │ │ │ └── README.md
│ │ │ │ │ ├── grids/
│ │ │ │ │ │ └── README.md
│ │ │ │ │ ├── modifyingcorpus/
│ │ │ │ │ │ └── README.md
│ │ │ │ │ ├── new/
│ │ │ │ │ │ └── README.md
│ │ │ │ │ ├── search/
│ │ │ │ │ │ └── README.md
│ │ │ │ │ ├── skins/
│ │ │ │ │ │ └── README.md
│ │ │ │ │ ├── start/
│ │ │ │ │ │ └── README.md
│ │ │ │ │ └── stopwords/
│ │ │ │ │ └── README.md
│ │ │ │ ├── guides.json
│ │ │ │ └── welcome.html
│ │ │ ├── mirrors.html
│ │ │ └── template-min/
│ │ │ ├── README.md
│ │ │ ├── app-0c945a27f43452df695771ddb60b3d14.js
│ │ │ ├── eg-iframe.html
│ │ │ ├── extjs/
│ │ │ │ └── ext-all.js
│ │ │ ├── index-template.html
│ │ │ ├── index.php
│ │ │ ├── mobile-redirect.js
│ │ │ ├── print-template.html
│ │ │ ├── resources/
│ │ │ │ ├── css/
│ │ │ │ │ └── app-4689d2a5522dcd3c9e9923ca59c33f27.css
│ │ │ │ └── prettify/
│ │ │ │ ├── prettify.css
│ │ │ │ └── prettify.js
│ │ │ └── template.html
│ │ ├── langs.html
│ │ ├── localization.tsv
│ │ ├── servers.json
│ │ ├── voyant-locale-ar.js
│ │ ├── voyant-locale-bs.js
│ │ ├── voyant-locale-cz.js
│ │ ├── voyant-locale-de.js
│ │ ├── voyant-locale-en.js
│ │ ├── voyant-locale-es.js
│ │ ├── voyant-locale-fr.js
│ │ ├── voyant-locale-he.js
│ │ ├── voyant-locale-hr.js
│ │ ├── voyant-locale-it.js
│ │ ├── voyant-locale-ja.js
│ │ ├── voyant-locale-pt.js
│ │ ├── voyant-locale-sr.js
│ │ ├── voyant-locale.jsp
│ │ ├── voyant.js
│ │ ├── voyant.jsp
│ │ └── voyant.min.map.js
│ ├── xml/
│ │ └── hamlet.xml
│ └── xsl/
│ ├── contexts2tsv.xsl
│ ├── corpuscollocates2tsv.xsl
│ ├── corpusentities2tsv.xsl
│ ├── corpusterms2tsv.xsl
│ ├── correlations2tsv.xsl
│ ├── docTokens2idsAndText.xsl
│ ├── docTokens2lemmas.xsl
│ ├── docTokens2plainText.xsl
│ ├── docTokens2spans.xsl
│ ├── docTokens2text.xsl
│ ├── docTokens2textPlusTokenIds.xsl
│ ├── docTokens2words.xsl
│ ├── docTokensPlusStructure2html.xsl
│ ├── docTokensPlusStructureDToC.xsl
│ ├── documents2tsv.xsl
│ ├── documentterms2tsv.xsl
│ └── phrases2tsv.xsl
├── spyral/
│ ├── cookie/
│ │ └── index.jsp
│ ├── index.jsp
│ └── oauth/
│ └── index.jsp
└── tool/
└── index.jsp
Showing preview only (691K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (7609 symbols across 245 files)
FILE: src/main/java/org/voyanttools/voyant/FlexibleParametersFactory.java
class FlexibleParametersFactory (line 31) | public class FlexibleParametersFactory {
method FlexibleParametersFactory (line 36) | public FlexibleParametersFactory(ServletContext servlet) {
method getInstance (line 49) | public FlexibleParameters getInstance(HttpServletRequest request) thro...
method getInstance (line 63) | @SuppressWarnings("unchecked")
method getRequestItems (line 126) | private static List<FileItem> getRequestItems(HttpServletRequest reque...
FILE: src/main/java/org/voyanttools/voyant/HttpParametersDecoder.java
class HttpParametersDecoder (line 15) | public class HttpParametersDecoder {
method HttpParametersDecoder (line 21) | public HttpParametersDecoder(FlexibleParameters parameters) {
method decodeParameter (line 31) | public synchronized void decodeParameter(String key, String value, boo...
method decodeParameters (line 44) | public synchronized void decodeParameters(String key, String[] values,...
method decodeURIParameters (line 73) | private synchronized void decodeURIParameters(String key, String[] val...
method decodeInlineParameters (line 99) | private synchronized void decodeInlineParameters(String key, String[] ...
method addParameter (line 144) | private synchronized void addParameter(String key, String[] values) {
FILE: src/main/java/org/voyanttools/voyant/JSCacher.java
class JSCacher (line 29) | public class JSCacher {
method sendCache (line 39) | public static void sendCache(HttpServletRequest request, HttpServletRe...
method getCacheableFiles (line 141) | private static List<File> getCacheableFiles(File basePath) throws IOEx...
FILE: src/main/java/org/voyanttools/voyant/Localizer.java
class Localizer (line 15) | public class Localizer {
method sendCache (line 17) | public static void sendCache(HttpServletRequest request, HttpServletRe...
method update (line 35) | private static void update(String lang, File sourceFile, File cachedFi...
FILE: src/main/java/org/voyanttools/voyant/SpyralAuth.java
class SpyralAuth (line 20) | public class SpyralAuth extends HttpServlet {
method doGet (line 24) | @Override
method doPost (line 29) | @Override
method doRequest (line 34) | private void doRequest(HttpServletRequest req, HttpServletResponse res...
FILE: src/main/java/org/voyanttools/voyant/Trombone.java
class Trombone (line 51) | public class Trombone extends HttpServlet {
method Trombone (line 60) | public Trombone() throws IOException {
method init (line 72) | @Override
method doGet (line 77) | @Override
method doPost (line 84) | @Override
method doRequest (line 91) | private void doRequest(HttpServletRequest req, HttpServletResponse res...
method getFlexibleParameters (line 168) | private FlexibleParameters getFlexibleParameters(HttpServletRequest re...
method doRequest (line 185) | private void doRequest(FlexibleParameters parameters, HttpServletReque...
method runTromboneController (line 318) | private void runTromboneController(FlexibleParameters parameters, Writ...
method getTemplatePath (line 341) | private String getTemplatePath(FlexibleParameters parameters) {
method generateLogMessageForUnprocessableParameters (line 360) | private static String generateLogMessageForUnprocessableParameters(Set...
method generateLogMessageForSuccessfulRequest (line 379) | private static String generateLogMessageForSuccessfulRequest(FlexibleP...
method generateLogMessageForFailedRequest (line 414) | private static String generateLogMessageForFailedRequest(FlexibleParam...
method appendRequestParameter (line 430) | private static void appendRequestParameter(StringBuilder sb, String ke...
method cleanParameterValue (line 468) | private static String cleanParameterValue(String parameterValue) {
method hasVoyantServerResource (line 484) | public static boolean hasVoyantServerResource(String resource) {
method getVoyantServerResource (line 488) | public static String getVoyantServerResource(String resource) throws I...
method getVoyantServerResourcePath (line 492) | private static Path getVoyantServerResourcePath(String resource) {
FILE: src/main/java/org/voyanttools/voyant/Voyant.java
class Voyant (line 28) | public class Voyant {
method preProcess (line 39) | public static boolean preProcess(HttpServletRequest request, HttpServl...
method getBaseUrlString (line 60) | public static String getBaseUrlString(HttpServletRequest request) {
method handlePostAndRedirect (line 87) | private static boolean handlePostAndRedirect(HttpServletRequest request,
method handleRefererAndRedirect (line 104) | private static boolean handleRefererAndRedirect(HttpServletRequest req...
class PostedInputRequestWrapper (line 130) | static class PostedInputRequestWrapper extends HttpServletRequestWrapp...
method PostedInputRequestWrapper (line 133) | private PostedInputRequestWrapper(HttpServletRequest request, Flexib...
method getParameterMap (line 137) | @Override
method getParameterNames (line 148) | @Override
method getParameter (line 155) | @Override
method getParameterValues (line 159) | @Override
class PostedInputResponseWrapper (line 165) | private static class PostedInputResponseWrapper extends HttpServletRes...
method PostedInputResponseWrapper (line 168) | private PostedInputResponseWrapper(HttpServletResponse response) {
method getWriter (line 173) | @Override
method toString (line 177) | @Override
FILE: src/main/java/org/voyanttools/voyant/XslTransformer.java
class XslTransformer (line 19) | public class XslTransformer {
method transform (line 21) | static void transform(Source xml, Source xslt, Writer writer) throws T...
method transform (line 25) | static void transform(FlexibleParameters parameters, Source xml, Sourc...
method getTemplatePath (line 36) | static Source getTemplatePath(String template, File defaultDirectory) {
method getTemplateSource (line 51) | public static Source getTemplateSource(String template, ServletContext...
FILE: src/main/webapp/app/notebook/storage/github/GitHubDialogs.js
function postMessageHandler (line 51) | function postMessageHandler(event) {
FILE: src/main/webapp/app/notebook/storage/github/ReposBrowser.js
function parseContents (line 245) | function parseContents(content) {
FILE: src/main/webapp/app/panel/Cirrus.js
function loadFlash (line 376) | function loadFlash(component) {
FILE: src/main/webapp/app/panel/ScatterPlot.js
function doLoad (line 211) | function doLoad() {
function setCheckItemFromApi (line 502) | function setCheckItemFromApi(apiParamName) {
FILE: src/main/webapp/app/util/Toolable.js
function doGlobalUpdate (line 119) | function doGlobalUpdate(key, value) {
function jsonCollector (line 660) | function jsonCollector(row) {
function tsvCollector (line 694) | function tsvCollector(row) {
function htmlCollector (line 733) | function htmlCollector(row) {
FILE: src/main/webapp/app/widget/ReaderGraph.js
function getColor (line 145) | function getColor(index, alpha) {
function map (line 150) | function map(value, istart, istop, ostart, ostop) {
function addChart (line 154) | function addChart(docInfo) {
FILE: src/main/webapp/builder/TableGrid.js
function TableGrid (line 14) | function TableGrid(table) {
FILE: src/main/webapp/dtoc/annotator/dtoc.annotator.old.js
function focusHandler (line 147) | function focusHandler() {
function convertEntities (line 268) | function convertEntities(value) {
function onEditorShown (line 388) | function onEditorShown(editor, anno) {
function onViewerShown (line 399) | function onViewerShown(viewer, anno) {
function onAnnotationsLoaded (line 410) | function onAnnotationsLoaded(annos) {
function onAnnotationCreated (line 414) | function onAnnotationCreated(anno) {
function onAnnotationUpdated (line 419) | function onAnnotationUpdated(anno) {
function onAnnotationDeleted (line 423) | function onAnnotationDeleted(anno) {
function onAuthenticationFailed (line 429) | function onAuthenticationFailed() {
function initAnnotator (line 436) | function initAnnotator(uri) {
FILE: src/main/webapp/dtoc/dtoc.app.js
function doIndexCheck (line 66) | function doIndexCheck() {
FILE: src/main/webapp/dtoc/dtoc.index.js
function getTitle (line 389) | function getTitle(el) {
function doesRefDescendFromItem (line 415) | function doesRefDescendFromItem(extEl) {
FILE: src/main/webapp/dtoc/dtoc.markup.curator.js
function getDocument (line 221) | function getDocument(index) {
function doDispatch (line 303) | function doDispatch(data) {
FILE: src/main/webapp/dtoc/dtoc.markup.loader.js
function doLoad (line 13) | function doLoad(index) {
function getText (line 110) | function getText(tag) {
function getSurroundingText (line 117) | function getSurroundingText(tag) {
function getXPathResults (line 163) | function getXPathResults(xpath) {
function produceTagData (line 173) | function produceTagData(tags, label) {
FILE: src/main/webapp/dtoc/dtoc.reader.iframe.js
function doSelect (line 170) | function doSelect(range) {
FILE: src/main/webapp/dtoc/dtoc.reader.js
function doSelect (line 163) | function doSelect(range) {
function resizeImage (line 409) | function resizeImage(event, img) {
FILE: src/main/webapp/dtoc/dtoc.toc.js
function doTest (line 771) | function doTest(r) {
FILE: src/main/webapp/dtoc/wgxpath/wgxpath.install.js
function h (line 1) | function h(a){return function(){return this[a]}}
function l (line 1) | function l(a){return function(){return a}}
function aa (line 2) | function aa(a){var b=typeof a;if("object"==b)if(a){if(a instanceof Array...
function n (line 3) | function n(a){return"string"==typeof a}
function ba (line 3) | function ba(a,b,c){return a.call.apply(a.bind,arguments)}
function da (line 3) | function da(a,b,c){if(!a)throw Error();if(2<arguments.length){var d=Arra...
function q (line 4) | function q(a,b,c){q=Function.prototype.bind&&-1!=Function.prototype.bind...
function ea (line 4) | function ea(a,b){var c=Array.prototype.slice.call(arguments,1);return fu...
function r (line 5) | function r(a){var b=t;function c(){}c.prototype=b.prototype;a.u=b.protot...
function u (line 21) | function u(a,b,c){this.a=a;this.b=b||1;this.d=c||1}
function v (line 21) | function v(a,b){return-1!=a.indexOf(b)}
function ga (line 21) | function ga(a,b){return a<b?-1:a>b?1:0}
function ka (line 23) | function ka(a,b){var c;a:{c=a.length;for(var d=n(a)?a.split(""):a,e=0;e<...
function la (line 23) | function la(a){return w.concat.apply(w,arguments)}
function ma (line 23) | function ma(a,b,c){return 2>=arguments.length?w.slice.call(a,b):w.slice....
function na (line 23) | function na(a){var b=arguments.length;if(1==b&&"array"==aa(arguments[0])...
function B (line 23) | function B(){return v(A,"Edge")}
function ta (line 23) | function ta(){var a=A;if(ra)return/rv\:([^\);]+)(\)|;)/.exec(a);if(C&&B(...
function ua (line 23) | function ua(){var a=m.document;return a?a.documentMode:void 0}
function xa (line 25) | function xa(a){if(!wa[a]){for(var b=0,c=fa(String(va)).split("."),d=fa(S...
function ya (line 26) | function ya(a){return C&&(B()||za>=a)}
function E (line 58) | function E(a,b,c,d){this.a=a;this.nodeName=c;this.nodeValue=d;this.nodeT...
function Da (line 58) | function Da(a,b){var c=Ca&&"href"==b.nodeName?a.getAttribute(b.nodeName,...
function Ea (line 74) | function Ea(a){this.b=a;this.a=0}
function Fa (line 74) | function Fa(a){a=a.match(Ga);for(var b=0;b<a.length;b++)Ha.test(a[b])&&a...
function G (line 74) | function G(a,b){return a.b[a.a+(b||0)]}
function H (line 74) | function H(a){return a.b[a.a++]}
function Ia (line 74) | function Ia(a){return a.b.length<=a.a}
function Ja (line 74) | function Ja(a,b){if(a.contains&&1==b.nodeType)return a==b||a.contains(b)...
function Ka (line 75) | function Ka(a,b){if(a==b)return 0;if(a.compareDocumentPosition)return a....
function Ma (line 76) | function Ma(a,b){var c=a.parentNode;if(c==b)return-1;for(var d=b;d.paren...
function La (line 76) | function La(a,b){for(var c=b;c=c.previousSibling;)if(c==a)return-1;retur...
function I (line 92) | function I(a){var b=null,c=a.nodeType;1==c&&(b=a.textContent,b=void 0==b...
function J (line 93) | function J(a,b,c){if(null===b)return!0;try{if(!a.getAttribute)return!1}c...
function Na (line 93) | function Na(a,b,c,d,e){return(D?Oa:Pa).call(null,a,b,n(c)?c:null,n(d)?d:...
function Oa (line 94) | function Oa(a,b,c,d,e){if(a instanceof L||8==a.b||c&&null===a.b){var f=b...
function Pa (line 95) | function Pa(a,b,c,d,e){b.getElementsByName&&d&&"name"==c&&!C?(b=b.getEle...
function Sa (line 96) | function Sa(a,b,c,d,e){var f;if((a instanceof L||8==a.b||c&&null===a.b)&...
function Ta (line 96) | function Ta(a,b,c,d,e){for(b=b.firstChild;b;b=b.nextSibling)J(b,c,d)&&a....
function Ra (line 97) | function Ra(a,b,c,d,e){for(b=b.firstChild;b;b=b.nextSibling)J(b,c,d)&&a....
function Qa (line 97) | function Qa(a){if(a instanceof N){if(8==a.b)return"!";if(null===a.b)retu...
function K (line 113) | function K(){this.b=this.a=null;this.i=0}
function Ua (line 113) | function Ua(a){this.d=a;this.a=this.b=null}
function Va (line 113) | function Va(a,b){if(!a.a)return b;if(!b.a)return a;for(var c=a.a,d=b.a,e...
function Wa (line 113) | function Wa(a,b){var c=new Ua(b);c.a=a.a;a.b?a.a.b=c:a.a=a.b=c;a.a=c;a.i++}
function M (line 114) | function M(a,b){var c=new Ua(b);c.b=a.b;a.a?a.b.a=c:a.a=a.b=c;a.b=c;a.i++}
function Xa (line 114) | function Xa(a){return(a=a.a)?a.d:null}
function Ya (line 114) | function Ya(a){return(a=Xa(a))?I(a):""}
function O (line 114) | function O(a,b){return new Za(a,!!b)}
function Za (line 114) | function Za(a,b){this.d=a;this.b=(this.c=b)?a.b:a.a;this.a=null}
function P (line 114) | function P(a){var b=a.b;if(null==b)return null;var c=a.a=b;a.b=a.c?b.b:b...
function $a (line 130) | function $a(a){switch(a.nodeType){case 1:return ea(ab,a);case 9:return $...
function bb (line 130) | function bb(){return null}
function ab (line 130) | function ab(a,b){if(a.prefix==b)return a.namespaceURI||"http://www.w3.or...
function t (line 162) | function t(a){this.g=a;this.b=this.e=!1;this.d=null}
function Q (line 162) | function Q(a){return"\n "+a.toString().split("\n").join("\n ")}
function cb (line 162) | function cb(a,b){a.e=b}
function db (line 162) | function db(a,b){a.b=b}
function R (line 162) | function R(a,b){var c=a.a(b);return c instanceof K?+Ya(c):+c}
function S (line 162) | function S(a,b){var c=a.a(b);return c instanceof K?Ya(c):""+c}
function eb (line 162) | function eb(a,b){var c=a.a(b);return c instanceof K?!!c.i:!!c}
function fb (line 178) | function fb(a,b,c){t.call(this,a.g);this.c=a;this.f=b;this.k=c;this.e=b....
function hb (line 179) | function hb(a,b,c,d,e){b=b.a(d);c=c.a(d);var f;if(b instanceof K&&c inst...
function ib (line 180) | function ib(a,b,c,d){this.a=a;this.p=b;this.g=c;this.j=d}
function T (line 180) | function T(a,b,c,d){if(jb.hasOwnProperty(a))throw Error("Binary operator...
function kb (line 198) | function kb(a,b){if(b.a.length&&4!=a.g)throw Error("Primary expression m...
function mb (line 214) | function mb(a,b){if(b.length<a.o)throw Error("Function "+a.h+" expects a...
function nb (line 215) | function nb(a,b,c,d,e,f,g,k,p){this.h=a;this.g=b;this.e=c;this.r=d;this....
function U (line 216) | function U(a,b,c,d,e,f,g,k){if(ob.hasOwnProperty(a))throw Error("Functio...
function c (line 217) | function c(a){if(D){var b=e.all[a];if(b){if(b.nodeType&&a==b.id)return b...
function N (line 253) | function N(a,b){this.f=a;this.c=void 0!==b?b:null;this.b=null;switch(a){...
function pb (line 253) | function pb(a){return"comment"==a||"text"==a||"processing-instruction"==...
function qb (line 269) | function qb(a){t.call(this,3);this.c=a.substring(1,a.length-1)}
function L (line 285) | function L(a,b){this.h=a.toLowerCase();this.c=b?b.toLowerCase():"http://...
function rb (line 301) | function rb(a){t.call(this,1);this.c=a}
function sb (line 317) | function sb(a,b){t.call(this,a.g);this.f=a;this.c=b;this.e=a.e;this.b=a....
function ub (line 317) | function ub(){t.call(this,4)}
function vb (line 317) | function vb(){t.call(this,4)}
function wb (line 318) | function wb(a){return"/"==a||"//"==a}
function zb (line 335) | function zb(a,b){this.a=a;this.b=!!b}
function lb (line 336) | function lb(a,b,c){for(c=c||0;c<a.a.length;c++)for(var d=a.a[c],e=O(b),f...
function V (line 353) | function V(a,b,c,d){t.call(this,4);this.c=a;this.k=b;this.f=c||new zb([]...
function Cb (line 355) | function Cb(a,b,c,d){this.h=a;this.d=b;this.a=c;this.b=d}
function W (line 355) | function W(a,b,c,d){if(Db.hasOwnProperty(a))throw Error("Axis already cr...
function Gb (line 376) | function Gb(a){t.call(this,1);this.c=a;this.e=a.e;this.b=a.b}
function Hb (line 392) | function Hb(a){t.call(this,4);this.c=a;cb(this,ja(this.c,function(a){ret...
function Ib (line 408) | function Ib(a,b){this.a=a;this.b=b}
function Jb (line 408) | function Jb(a){for(var b,c=[];;){X(a,"Missing right hand side of binary ...
function X (line 408) | function X(a,b){if(Ia(a.a))throw Error(b);}
function Lb (line 408) | function Lb(a,b){var c=H(a.a);if(c!=b)throw Error("Bad token, expected: ...
function Mb (line 409) | function Mb(a){a=H(a.a);if(")"!=a)throw Error("Bad token: "+a);}
function Nb (line 409) | function Nb(a){a=H(a.a);if(2>a.length)throw Error("Unclosed literal stri...
function Ob (line 409) | function Ob(a){var b=H(a.a),c=b.indexOf(":");if(-1==c)return new L(b);va...
function Pb (line 410) | function Pb(a){var b,c=[],d;if(wb(G(a.a))){b=H(a.a);d=G(a.a);if("/"==b&&...
function Qb (line 412) | function Qb(a,b){var c,d,e;if("/"!=b&&"//"!=b)throw Error('Step op shoul...
function Rb (line 414) | function Rb(a){for(var b=[];"["==G(a.a);){H(a.a);X(a,"Missing predicate ...
function Kb (line 414) | function Kb(a){if("-"==G(a.a))return H(a.a),new Gb(Kb(a));var b=Pb(a);if...
function Sb (line 430) | function Sb(a,b){if(!a.length)throw Error("Empty XPath expression.");var...
function Y (line 431) | function Y(a,b){if(0==b)if(a instanceof K)b=4;else if("string"==typeof a...
function Tb (line 433) | function Tb(a){this.lookupNamespaceURI=$a(a)}
function Ub (line 434) | function Ub(a){a=a||m;var b=a.document;b.evaluate||(a.XPathResult=Y,b.ev...
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/ace.js
function o (line 1) | function o(n){var i=e;n&&(e[n]||(e[n]={}),i=e[n]);if(!i.define||!i.defin...
function a (line 1) | function a(){u=!1;try{document.createComment("").addEventListener("test"...
function f (line 1) | function f(){return u==undefined&&a(),u}
function l (line 1) | function l(e,t,n){this.elem=e,this.type=t,this.callback=n}
function d (line 1) | function d(e,t,n){var u=p(t);if(!i.isMac&&s){t.getModifierState&&(t.getM...
function v (line 1) | function v(){s=Object.create(null)}
function i (line 1) | function i(e){t&&t(e),n&&n(e),h(r,"mousemove",t),h(r,"mouseup",i),h(r,"d...
function p (line 1) | function p(e){t.getButton(e)!==0?u=0:e.detail>1?(u++,u>4&&(u=1)):u=1;if(...
function X (line 1) | function X(){x=!0,n.blur(),n.focus(),x=!1}
function $ (line 1) | function $(e){e.keyCode==27&&n.value.length<n.selectionStart&&(b||(T=n.v...
function K (line 1) | function K(){clearTimeout(J),J=setTimeout(function(){E&&(n.style.cssText...
function G (line 1) | function G(e,t,n){var r=null,i=!1;n.addEventListener("keydown",function(...
function o (line 1) | function o(e){e.$clickSelection=null;var t=e.editor;t.setDefaultHandler(...
function u (line 1) | function u(e,t,n,r){return Math.sqrt(Math.pow(n-e,2)+Math.pow(r-t,2))}
function a (line 1) | function a(e,t){if(e.start.row==e.end.row)var n=2*t.column-e.start.colum...
function s (line 1) | function s(e){this.isOpen=!1,this.$element=null,this.$parentNode=e}
function u (line 1) | function u(e){function l(){var r=u.getDocumentPosition().row,s=n.$annota...
function a (line 1) | function a(e){o.call(this,e)}
function f (line 1) | function f(e){function T(e,n){var r=Date.now(),i=!n||e.row!=n.row,s=!n||...
function l (line 1) | function l(e,t,n,r){return Math.sqrt(Math.pow(n-e,2)+Math.pow(r-t,2))}
function b (line 1) | function b(){var e=window.navigator&&window.navigator.clipboard,r=!1,i=f...
function w (line 1) | function w(){y||b();var e=t.selection.cursor,n=t.renderer.textToScreenCo...
function E (line 1) | function E(e){y&&(y.style.display="none"),t.off("input",E)}
function S (line 1) | function S(){l=null,clearTimeout(l);var e=t.selection.getRange(),r=e.con...
function x (line 1) | function x(){l=null,clearTimeout(l),t.selection.moveToPosition(p);var e=...
function T (line 1) | function T(){h+=60,c=setInterval(function(){h--<=0&&(clearInterval(c),c=...
function o (line 1) | function o(e){typeof console!="undefined"&&console.warn&&console.warn.ap...
function u (line 1) | function u(e,t){var n=new Error(e);n.data=t,typeof console=="object"&&co...
function l (line 1) | function l(r){if(!u||!u.document)return;a.packaged=r||e.packaged||n.pack...
function c (line 1) | function c(e){return e.replace(/-(.)/g,function(e,t){return t.toUpperCas...
function i (line 1) | function i(e){e.on("click",function(t){var n=t.getDocumentPosition(),i=e...
function F (line 1) | function F(e,t,n,r){var i=s?d:p,c=null,h=null,v=null,m=0,g=null,y=null,b...
function I (line 1) | function I(e,t,n){if(o<e)return;if(e==1&&s==m&&!f){n.reverse();return}va...
function q (line 1) | function q(e,t,n,r){var i=t[r],o,c,h,p;switch(i){case g:case y:u=!1;case...
function R (line 1) | function R(e){var t=e.charCodeAt(0),n=t>>8;return n==0?t>191?g:B[t]:n==5...
function U (line 1) | function U(e){return e>="\u064b"&&e<="\u0655"}
function i (line 1) | function i(s){var o=r[s];o.processed=!0;for(var u=0;u<o.length;u++){var ...
function w (line 1) | function w(e){for(var t=n;t<=r;t++)e(i.getLine(t),t)}
function r (line 1) | function r(e,t){throw console.log("Invalid Delta:",e),"Invalid Delta: "+t}
function i (line 1) | function i(e,t){return t.row>=0&&t.row<e.length&&t.column>=0&&t.column<=...
function s (line 1) | function s(e,t){t.action!="insert"&&t.action!="remove"&&r(t,"delta.actio...
function e (line 1) | function e(e,t,n){var r=n?e.column<=t.column:e.column<t.column;return e....
function t (line 1) | function t(t,n,r){var i=t.action=="insert",s=(i?1:-1)*(t.end.row-t.start...
function i (line 1) | function i(e,t){this.foldData=e,Array.isArray(t)?this.folds=t:t=this.fol...
function o (line 1) | function o(e,t){e.row-=t.row,e.row==0&&(e.column-=t.column)}
function u (line 1) | function u(e,t){o(e.start,t),o(e.end,t)}
function a (line 1) | function a(e,t){e.row==0&&(e.column+=t.column),e.row+=t.row}
function f (line 1) | function f(e,t){a(e.start,t),a(e.end,t)}
function u (line 1) | function u(){this.getFoldAt=function(e,t,n){var r=this.getFoldLine(e);if...
function s (line 1) | function s(){this.findMatchingBracket=function(e,t){if(e.column==0)retur...
function m (line 1) | function m(e){return e<4352?!1:e>=4352&&e<=4447||e>=4515&&e<=4519||e>=46...
function n (line 1) | function n(e){return t?e.action!=="insert":e.action==="insert"}
function g (line 1) | function g(){var t=0;if(m===0)return t;if(p)for(var n=0;n<e.length;n++){...
function y (line 1) | function y(t){var n=t-f;for(var r=f;r<t;r++){var i=e[r];if(i===12||i===2...
function u (line 1) | function u(e,t){function n(e){return/\w/.test(e)||t.regExp?"\\b":""}retu...
function o (line 1) | function o(e,t){this.platform=t||(i.isMac?"mac":"win"),this.commands={},...
function u (line 1) | function u(e,t){o.call(this,e,t),this.$singleCommand=!1}
function e (line 1) | function e(e){return typeof e=="object"&&e.bindKey&&e.bindKey.position||...
function o (line 1) | function o(e,t){return{win:e,mac:t}}
function i (line 1) | function i(e,t){for(var n=t;n--;){var r=e[n];if(r&&!r[0].ignore){while(n...
function a (line 1) | function a(e){var t=e.action=="insert",n=e.start,r=e.end,i=(r.row-n.row)...
function f (line 1) | function f(e){return{row:e.row,column:e.column}}
function l (line 1) | function l(e){return{start:f(e.start),end:f(e.end),action:e.action,lines...
function c (line 1) | function c(e){e=e||this;if(Array.isArray(e))return e.map(c).join("\n");v...
function h (line 1) | function h(e){return e.start.row+":"+e.start.column+"=>"+e.end.row+":"+e...
function p (line 1) | function p(e,t){var n=e.action=="insert",r=t.action=="insert";if(n&&r)if...
function d (line 1) | function d(e,t){for(var n=e.length;n--;)for(var r=0;r<t.length;r++)if(!p...
function v (line 1) | function v(e,t){var n=e.action=="insert",r=t.action=="insert";if(n&&r)o(...
function m (line 1) | function m(e,t,n){g(e.start,t.start,t.end,n),g(e.end,t.start,t.end,n)}
function g (line 1) | function g(e,t,n,r){e.row==(r==1?t:n).row&&(e.column+=r*(n.column-t.colu...
function y (line 1) | function y(e,t){var n=e.lines,r=e.end;e.end=f(t);var i=e.end.row-e.start...
function b (line 1) | function b(e,t){t=l(t);for(var n=e.length;n--;){var r=e[n];for(var i=0;i...
function w (line 1) | function w(e,t){for(var n=0;n<t.length;n++){var r=t[n];for(var i=0;i<r.l...
function f (line 1) | function f(e){var t=document.createTextNode("");e.appendChild(t);var n=r...
function e (line 1) | function e(e,t,n,r){return(e?1:0)|(t?2:0)|(n?4:0)|(r?8:0)}
function i (line 1) | function i(e,t,n){var i=0,s=0;while(s+e[i].value.length<t){s+=e[i].value...
function r (line 1) | function r(e,t,n){var r=e[1]*t[0]-e[0]*t[1];return[(-t[1]*n[0]+t[0]*n[1]...
function i (line 1) | function i(e,t){return[e[0]-t[0],e[1]-t[1]]}
function s (line 1) | function s(e,t){return[e[0]+t[0],e[1]+t[1]]}
function o (line 1) | function o(e,t){return[e*t[0],e*t[1]]}
function u (line 1) | function u(e){var t=e.getBoundingClientRect();return[t.left,t.top]}
function o (line 1) | function o(r){if(n.$themeId!=e)return t&&t();if(!r||!r.cssClass)throw ne...
function u (line 1) | function u(e){var t="importScripts('"+i.qualifyURL(e)+"');";try{return n...
function a (line 1) | function a(e){if(typeof Worker=="undefined")return{postMessage:function(...
function s (line 1) | function s(e,t){return e.row==t.row&&e.column==t.column}
function o (line 1) | function o(e){var t=e.domEvent,n=t.altKey,o=t.shiftKey,u=t.ctrlKey,a=e.g...
function h (line 1) | function h(e,t,n){return c.$options.wrap=!0,c.$options.needle=t,c.$optio...
function v (line 1) | function v(e,t){return e.row==t.row&&e.column==t.column}
function m (line 1) | function m(e){if(e.$multiselectOnSessionChange)return;e.$onAddRange=e.$o...
function g (line 1) | function g(e){function r(t){n&&(e.renderer.setMouseCursor(""),n=!1)}if(!...
function u (line 1) | function u(e){return a.stringRepeat(" ",e)}
function f (line 1) | function f(e){return e[2]?u(i)+e[2]+u(s-e[2].length+o)+e[4].replace(/^([...
function l (line 1) | function l(e){return e[2]?u(i+s-e[2].length)+e[2]+u(o)+e[4].replace(/^([...
function c (line 1) | function c(e){return e[2]?u(i)+e[2]+u(o)+e[4].replace(/^([=:])\s+/,"$1 "...
function i (line 1) | function i(e){this.session=e,this.session.widgetManager=this,this.sessio...
function o (line 1) | function o(e,t,n){var r=0,i=e.length-1;while(r<=i){var s=r+i>>1,o=n(t,e[...
function u (line 1) | function u(e,t,n){var r=e.getAnnotations().sort(s.comparePoints);if(!r.l...
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/ext-beautify.js
function i (line 1) | function i(e,t){return e.type.lastIndexOf(t+".xml")>-1}
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/ext-code_lens.js
function u (line 1) | function u(e){var t=e.$textLayer,n=t.$lenses;n&&n.forEach(function(e){e....
function a (line 1) | function a(e,t){var n=e&t.CHANGE_LINES||e&t.CHANGE_FULL||e&t.CHANGE_SCRO...
function f (line 1) | function f(e){if(!e.lineWidgets)return;var t=e.widgetManager;e.lineWidge...
function l (line 1) | function l(e){e.codeLensProviders=[],e.renderer.on("afterRender",a),e.$c...
function c (line 1) | function c(e){e.off("input",e.$updateLensesOnInput),e.renderer.off("afte...
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/ext-emmet.js
function h (line 1) | function h(e){var t=(new Date).toLocaleString("en-us",e);return t.length...
function e (line 1) | function e(e){return e=e.substr(1),/^\d+$/.test(e)?[{tabstopId:parseInt(...
function t (line 1) | function t(e){return"(?:[^\\\\"+e+"]|\\\\.)"}
function f (line 1) | function f(t){var n=e.indexOf(t,s+1);n!=-1&&(s=n)}
function f (line 1) | function f(e){var t=[];for(var n=0;n<e.length;n++){var r=e[n];if(typeof ...
function o (line 1) | function o(e){return e&&!/^\^?\(.*\)\$?$|^\\b$/.test(e)&&(e="(?:"+e+")")...
function u (line 1) | function u(e,t,n){return e=o(e),t=o(t),n?(e=t+e,e&&e[e.length-1]!="$"&&(...
function a (line 1) | function a(e){e.scope||(e.scope=t||"_"),t=e.scope,n[t]||(n[t]=[],r[t]={}...
function i (line 1) | function i(e){var i=r[e.scope||t];if(i&&i[e.name]){delete i[e.name];var ...
function l (line 1) | function l(){}
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/ext-keybinding_menu.js
function o (line 1) | function o(e){e.keyCode===27&&u()}
function u (line 1) | function u(){if(!i)return;document.removeEventListener("keydown",o),i.pa...
function a (line 1) | function a(e){s=e,e&&(i.style.pointerEvents="none",n.style.pointerEvents...
function i (line 1) | function i(t){if(!document.getElementById("kbshortcutmenu")){var n=e("./...
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/ext-language_tools.js
function h (line 1) | function h(e){var t=(new Date).toLocaleString("en-us",e);return t.length...
function e (line 1) | function e(e){return e=e.substr(1),/^\d+$/.test(e)?[{tabstopId:parseInt(...
function t (line 1) | function t(e){return"(?:[^\\\\"+e+"]|\\\\.)"}
function f (line 1) | function f(t){var n=e.indexOf(t,s+1);n!=-1&&(s=n)}
function f (line 1) | function f(e){var t=[];for(var n=0;n<e.length;n++){var r=e[n];if(typeof ...
function o (line 1) | function o(e){return e&&!/^\^?\(.*\)\$?$|^\\b$/.test(e)&&(e="(?:"+e+")")...
function u (line 1) | function u(e,t,n){return e=o(e),t=o(t),n?(e=t+e,e&&e[e.length-1]!="$"&&(...
function a (line 1) | function a(e){e.scope||(e.scope=t||"_"),t=e.scope,n[t]||(n[t]=[],r[t]={}...
function i (line 1) | function i(e){var i=r[e.scope||t];if(i&&i[e.name]){delete i[e.name];var ...
function s (line 1) | function s(e,n){e&&r.push({type:(t.className||"")+(n||""),value:e})}
function s (line 1) | function s(e,t){var n=e.getTextRange(r.fromPoints({row:0,column:0},t));r...
function o (line 1) | function o(e,t){var n=s(e,t),r=e.getValue().split(i),o=Object.create(nul...
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/ext-linking.js
function i (line 1) | function i(e){var n=e.editor,r=e.getAccelKey();if(r){var n=e.editor,i=e....
function s (line 1) | function s(e){var t=e.getAccelKey(),n=e.getButton();if(n==0&&t){var r=e....
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/ext-modelist.js
function i (line 1) | function i(e){var t=a.text,n=e.split(/[\/\\]/).pop();for(var i=0;i<r.len...
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/ext-options.js
function o (line 1) | function o(e){e.keyCode===27&&u()}
function u (line 1) | function u(){if(!i)return;document.removeEventListener("keydown",o),i.pa...
function a (line 1) | function a(e){s=e,e&&(i.style.pointerEvents="none",n.style.pointerEvents...
function i (line 1) | function i(e){var t=a.text,n=e.split(/[\/\\]/).pop();for(var i=0;i<r.len...
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/ext-prompt.js
function s (line 1) | function s(e,n){e&&r.push({type:(t.className||"")+(n||""),value:e})}
function h (line 1) | function h(e){var t=(new Date).toLocaleString("en-us",e);return t.length...
function e (line 1) | function e(e){return e=e.substr(1),/^\d+$/.test(e)?[{tabstopId:parseInt(...
function t (line 1) | function t(e){return"(?:[^\\\\"+e+"]|\\\\.)"}
function f (line 1) | function f(t){var n=e.indexOf(t,s+1);n!=-1&&(s=n)}
function f (line 1) | function f(e){var t=[];for(var n=0;n<e.length;n++){var r=e[n];if(typeof ...
function o (line 1) | function o(e){return e&&!/^\^?\(.*\)\$?$|^\\b$/.test(e)&&(e="(?:"+e+")")...
function u (line 1) | function u(e,t,n){return e=o(e),t=o(t),n?(e=t+e,e&&e[e.length-1]!="$"&&(...
function a (line 1) | function a(e){e.scope||(e.scope=t||"_"),t=e.scope,n[t]||(n[t]=[],r[t]={}...
function i (line 1) | function i(e){var i=r[e.scope||t];if(i&&i[e.name]){delete i[e.name];var ...
function o (line 1) | function o(e){e.keyCode===27&&u()}
function u (line 1) | function u(){if(!i)return;document.removeEventListener("keydown",o),i.pa...
function a (line 1) | function a(e){s=e,e&&(i.style.pointerEvents="none",n.style.pointerEvents...
function i (line 1) | function i(e){var t=a.text,n=e.split(/[\/\\]/).pop();for(var i=0;i<r.len...
function d (line 1) | function d(e,t,n,r){function b(){var e;m&&m.getCursorPosition().row>0?e=...
function n (line 1) | function n(e){return Array.isArray(e)||(e=[e]),e.map(function(e){var t=e...
function u (line 1) | function u(){var t=n[i++];if(!t)return;if(t[0]=="c"){var r=parseInt(t.sl...
function n (line 1) | function n(e){return(e||"").replace(/^./,function(e){return e.toUpperCas...
function r (line 1) | function r(t){var r=[],i={};return e.keyBinding.$handlers.forEach(functi...
function t (line 1) | function t(e,t){var n=JSON.parse(JSON.stringify(e)),r=new o(n);return r....
function n (line 1) | function n(e,t){if(!t||!t.length)return e;var n=[];t.forEach(function(e)...
function t (line 1) | function t(e,t){var n=JSON.parse(JSON.stringify(e)),r=new o(n);return r....
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/ext-rtl.js
function s (line 1) | function s(e,t){var n=t.getSelection().lead;t.session.$bidiHandler.isRtl...
function o (line 1) | function o(e){e.editor.session.$bidiHandler.isMoveLeftOperation=/gotolef...
function u (line 1) | function u(e,t){var n=t.session;n.$bidiHandler.currentRow=null;if(n.$bid...
function a (line 1) | function a(e,t){var n=t.session,r=n.$bidiHandler,i=t.$textLayer.$lines.c...
function f (line 1) | function f(e){function n(e){var t=e.element.style;t.direction=t.textAlig...
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/ext-settings_menu.js
function o (line 1) | function o(e){e.keyCode===27&&u()}
function u (line 1) | function u(){if(!i)return;document.removeEventListener("keydown",o),i.pa...
function a (line 1) | function a(e){s=e,e&&(i.style.pointerEvents="none",n.style.pointerEvents...
function i (line 1) | function i(e){var t=a.text,n=e.split(/[\/\\]/).pop();for(var i=0;i<r.len...
function s (line 1) | function s(e){if(!document.getElementById("ace_settingsmenu")){var t=new...
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/ext-static_highlight.js
function f (line 1) | function f(e){this.type=e,this.style={},this.textContent=""}
function c (line 1) | function c(){var r=h.renderSync(e,t,n,i,s);return u?u(r):r}
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/ext-statusbar.js
function n (line 1) | function n(e,n){e&&t.push(e,n||"|")}
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/ext-tern.js
function TabstopToken (line 21) | function TabstopToken(str, _, stack) {
function escape (line 27) | function escape(ch) {
function gotoNext (line 229) | function gotoNext(ch) {
function copyValue (line 284) | function copyValue(val) {
function wrapRegexp (line 463) | function wrapRegexp(src) {
function guardedRegexp (line 469) | function guardedRegexp(re, guard, opening) {
function addSnippet (line 484) | function addSnippet(s) {
function removeSnippet (line 529) | function removeSnippet(s) {
function getWordIndex (line 914) | function getWordIndex(doc, pos) {
function wordDistance (line 918) | function wordDistance(doc, pos) {
function resolveFilePath (line 2022) | function resolveFilePath(ts, name, cb) {
function getFile (line 2030) | function getFile(ts, name, cb) {
function findDoc (line 2036) | function findDoc(ts, doc, name) {
function toTernLoc (line 2051) | function toTernLoc(pos) {
function toAceLoc (line 2060) | function toAceLoc(pos) {
function buildRequest (line 2069) | function buildRequest(ts, doc, query, pos, forcePushChangedfile) {
function getFragmentAround (line 2132) | function getFragmentAround(data, start, end) {
function countColumn (line 2167) | function countColumn(string, end, tabSize, startIndex, startValue) {
function docValue (line 2178) | function docValue(ts, doc) {
function typeToIcon (line 2183) | function typeToIcon(type) {
function getCompletions (line 2193) | function getCompletions(ts, editor, session, pos, prefix, callback) {
function showType (line 2373) | function showType(ts, editor, pos, calledFromCursorActivity) {
function createInfoDataTip (line 2432) | function createInfoDataTip(data, includeType, activeArg) {
function parseJsDocParams (line 2688) | function parseJsDocParams(str) {
function findRefs (line 2769) | function findRefs(ts, editor, cb) {
function rename (line 2878) | function rename(ts, editor) {
function applyChanges (line 2935) | function applyChanges(ts, changes, cb) {
function isOnFunctionCall (line 2974) | function isOnFunctionCall(editor) {
function somethingIsSelected (line 2989) | function somethingIsSelected(editor) {
function getCusorPosForTooltip (line 2992) | function getCusorPosForTooltip(editor) {
function getCurrentToken (line 3002) | function getCurrentToken(editor) {
function getCallPos (line 3011) | function getCallPos(editor, pos) {
function isInCall (line 3096) | function isInCall(editor, pos) {
function updateArgHints (line 3105) | function updateArgHints(ts, editor) {
function showArgHints (line 3145) | function showArgHints(ts, editor, pos) {
function parseFnType (line 3177) | function parseFnType(text) {
function htmlEncode (line 3216) | function htmlEncode(string) {
function cmpPos (line 3226) | function cmpPos(a, b) {
function dialog (line 3231) | function dialog(cm, text, f) {
function elFromString (line 3234) | function elFromString(s) {
function elt (line 3243) | function elt(tagname, cls /*, ... elts*/ ) {
function closeAllTips (line 3253) | function closeAllTips(except) {
function tempTooltip (line 3264) | function tempTooltip(editor, content, timeout) {
function makeTooltip (line 3271) | function makeTooltip(x, y, content, editor, closeOnCusorActivity, fadeOu...
function moveTooltip (line 3324) | function moveTooltip(tip, x, y, editor) {
function remove (line 3333) | function remove(node) {
function fadeOut (line 3337) | function fadeOut(tooltip, timeout) {
function showError (line 3350) | function showError(ts, editor, msg, noPopup) {
function closeArgHints (line 3392) | function closeArgHints(ts) {
function jumpToDef (line 3398) | function jumpToDef(ts, editor) {
function moveTo (line 3438) | function moveTo(ts, curDoc, doc, start, end, doNotCloseTips) {
function jumpBack (line 3462) | function jumpBack(ts, editor) {
function findContext (line 3468) | function findContext(editor, data) {
function atInterestingExpression (line 3513) | function atInterestingExpression(editor) {
function sendDoc (line 3522) | function sendDoc(ts, doc) {
function inJavascriptMode (line 3534) | function inJavascriptMode(editor) {
function getCurrentMode (line 3537) | function getCurrentMode(editor) {
function startsWith (line 3555) | function startsWith(str, token) {
function trackChange (line 3558) | function trackChange(ts, doc, change) {
function loadExplicitVsRefs (line 3597) | function loadExplicitVsRefs(ts, editor) {
function WorkerServer (line 3703) | function WorkerServer(ts, workerClass) {
function getCompletionPrefix (line 3888) | function getCompletionPrefix(editor) {
function inner (line 3977) | function inner() {
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/ext-textarea.js
function a (line 1) | function a(e,t){for(var n in t)e.style[n]=t[n]}
function f (line 1) | function f(e,t){if(e.type!="textarea")throw new Error("Textarea required...
function l (line 1) | function l(t,n,r){s.loadScript(t,function(){e([n],r)})}
function c (line 1) | function c(e,t,n,r,i){function u(e){return e==="true"||e==1}var s=e.getS...
function h (line 1) | function h(e,n,i){function f(e,t,n,r){if(!n){e.push("<input type='checkb...
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/ext-whitespace.js
function c (line 1) | function c(e){var t=0;for(var r=e;r<n.length;r+=e)t+=n[r]||0;return t}
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/keybinding-emacs.js
function a (line 1) | function a(){}
function f (line 1) | function f(){}
function u (line 1) | function u(e){this.$iSearch=e}
function f (line 1) | function f(){this.$options={wrap:!1,skipCurrent:!1},this.$keyboardHandle...
function l (line 1) | function l(e){return e instanceof RegExp}
function c (line 1) | function c(e){var t=String(e),n=t.indexOf("/"),r=t.lastIndexOf("/");retu...
function h (line 1) | function h(e,t){try{return new RegExp(e,t)}catch(n){return e}}
function p (line 1) | function p(e){return h(e.expression,e.flags)}
function u (line 1) | function u(){var t=e.popEmacsMark();t&&e.moveCursorToPosition(t)}
function t (line 1) | function t(){var t=e.selection,n=t.getRange(),i=t.isBackwards()?n.end:n....
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/keybinding-sublime.js
function i (line 1) | function i(e,t,n){function f(e){return e?/\s/.test(e)?"s":e=="_"?"_":e.t...
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/keybinding-vim.js
function r (line 1) | function r(){function t(e){return typeof e!="object"?e+"":"line"in e?e.l...
function m (line 1) | function m(e){return{row:e.line,column:e.ch}}
function g (line 1) | function g(e){return new S(e.row,e.column)}
function T (line 1) | function T(e){e.setOption("disableInput",!0),e.setOption("showCursorWhen...
function N (line 1) | function N(e){e.setOption("disableInput",!1),e.off("cursorActivity",er),...
function C (line 1) | function C(e,t){this==v.keyMap.vim&&v.rmClass(e.getWrapperElement(),"cm-...
function k (line 1) | function k(e,t){this==v.keyMap.vim&&v.addClass(e.getWrapperElement(),"cm...
function L (line 1) | function L(e,t){if(!t)return undefined;if(this[e])return this[e];var n=M...
function M (line 1) | function M(e){if(e.charAt(0)=="'")return e.charAt(1);var t=e.split(/-(?!...
function _ (line 1) | function _(e){var t=e.state.vim;return t.onPasteFn||(t.onPasteFn=functio...
function B (line 1) | function B(e,t){var n=[];for(var r=e;r<e+t;r++)n.push(String.fromCharCod...
function U (line 1) | function U(e,t){return t>=e.firstLine()&&t<=e.lastLine()}
function z (line 1) | function z(e){return/^[a-z]$/.test(e)}
function W (line 1) | function W(e){return"()[]{}".indexOf(e)!=-1}
function X (line 1) | function X(e){return D.test(e)}
function V (line 1) | function V(e){return/^[A-Z]$/.test(e)}
function $ (line 1) | function $(e){return/^\s*$/.test(e)}
function J (line 1) | function J(e){return".?!".indexOf(e)!=-1}
function K (line 1) | function K(e,t){for(var n=0;n<t.length;n++)if(t[n]==e)return!0;return!1}
function G (line 1) | function G(e,t,n,r,i){if(t===undefined&&!i)throw Error("defaultValue is ...
function Y (line 1) | function Y(e,t,n,r){var i=Q[e];r=r||{};var s=r.scope;if(!i)return new Er...
function Z (line 1) | function Z(e,t,n){var r=Q[e];n=n||{};var i=n.scope;if(!r)return new Erro...
function nt (line 1) | function nt(){this.latestRegister=undefined,this.isPlaying=!1,this.isRec...
function rt (line 1) | function rt(e){return e.state.vim||(e.state.vim={inputState:new at,lastE...
function st (line 1) | function st(){it={searchQuery:null,searchIsReversed:!1,lastSubstituteRep...
function at (line 1) | function at(){this.prefixRepeat=[],this.motionRepeat=[],this.operator=nu...
function ft (line 1) | function ft(e,t){e.state.vim.inputState=new at,v.signal(e,"vim-command-d...
function lt (line 1) | function lt(e,t,n){this.clear(),this.keyBuffer=[e||""],this.insertModeCh...
function ct (line 1) | function ct(e,t){var n=it.registerController.registers;if(!e||e.length!=...
function ht (line 1) | function ht(e){this.registers=e,this.unnamedRegister=e['"']=new lt,e["."...
function pt (line 1) | function pt(){this.historyBuffer=[],this.iterator=0,this.initialPrefix=n...
function mt (line 1) | function mt(e,t){vt[e]=t}
function gt (line 1) | function gt(e,t){var n=[];for(var r=0;r<t;r++)n.push(e);return n}
function bt (line 1) | function bt(e,t){yt[e]=t}
function Et (line 1) | function Et(e,t){wt[e]=t}
function St (line 1) | function St(e,t,n){var r=Math.min(Math.max(e.firstLine(),t.line),e.lastL...
function xt (line 1) | function xt(e){var t={};for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);...
function Tt (line 1) | function Tt(e,t,n){return typeof t=="object"&&(n=t.ch,t=t.line),S(e.line...
function Nt (line 1) | function Nt(e,t,n,r){var i,s=[],o=[];for(var u=0;u<t.length;u++){var a=t...
function Ct (line 1) | function Ct(e,t){if(t.slice(-11)=="<character>"){var n=t.length-11,r=e.s...
function kt (line 1) | function kt(e){var t=/^.*(<[^>]+>)$/.exec(e),n=t?t[1]:e.slice(-1);if(n.l...
function Lt (line 1) | function Lt(e,t,n){return function(){for(var r=0;r<n;r++)t(e)}}
function At (line 1) | function At(e){return S(e.line,e.ch)}
function Ot (line 1) | function Ot(e,t){return e.ch==t.ch&&e.line==t.line}
function Mt (line 1) | function Mt(e,t){return e.line<t.line?!0:e.line==t.line&&e.ch<t.ch?!0:!1}
function _t (line 1) | function _t(e,t){return arguments.length>2&&(t=_t.apply(undefined,Array....
function Dt (line 1) | function Dt(e,t){return arguments.length>2&&(t=Dt.apply(undefined,Array....
function Pt (line 1) | function Pt(e,t,n){var r=Mt(e,t),i=Mt(t,n);return r&&i}
function Ht (line 1) | function Ht(e,t){return e.getLine(t).length}
function Bt (line 1) | function Bt(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}
function jt (line 1) | function jt(e){return e.replace(/([.?*+$\[\]\/\\(){}|\-])/g,"\\$1")}
function Ft (line 1) | function Ft(e,t,n){var r=Ht(e,t),i=(new Array(n-r+1)).join(" ");e.setCur...
function It (line 1) | function It(e,t){var n=[],r=e.listSelections(),i=At(e.clipPos(t)),s=!Ot(...
function qt (line 1) | function qt(e,t,n){var r=[];for(var i=0;i<n;i++){var s=Tt(t,i,0);r.push(...
function Rt (line 1) | function Rt(e,t,n){for(var r=0;r<e.length;r++){var i=n!="head"&&Ot(e[r]....
function Ut (line 1) | function Ut(e,t){var n=t.lastSelection,r=function(){var t=e.listSelectio...
function zt (line 1) | function zt(e,t){var n=t.sel.anchor,r=t.sel.head;t.lastPastedText&&(r=e....
function Wt (line 1) | function Wt(e,t,n){var r=e.state.vim.sel,i=r.head,s=r.anchor,o;return Mt...
function Xt (line 1) | function Xt(e,t,n){var r=e.state.vim;t=t||r.sel;var n=n||r.visualLine?"l...
function Vt (line 1) | function Vt(e,t,n,r){var i=At(t.head),s=At(t.anchor);if(n=="char"){var o...
function $t (line 1) | function $t(e){var t=e.getCursor("head");return e.getSelection().length=...
function Jt (line 1) | function Jt(e,t){var n=e.state.vim;t!==!1&&e.setCursor(St(e,n.sel.head))...
function Kt (line 1) | function Kt(e,t,n){var r=e.getRange(t,n);if(/\n\s*$/.test(r)){var i=r.sp...
function Qt (line 1) | function Qt(e,t,n){t.ch=0,n.ch=0,n.line++}
function Gt (line 1) | function Gt(e){if(!e)return 0;var t=e.search(/\S/);return t==-1?e.length:t}
function Yt (line 1) | function Yt(e,t,n,r,i){var s=$t(e),o=e.getLine(s.line),u=s.ch,a=i?P[0]:H...
function Zt (line 1) | function Zt(e,t,n){Ot(t,n)||it.jumpList.add(e,t,n)}
function en (line 1) | function en(e,t){it.lastCharacterSearch.increment=e,it.lastCharacterSear...
function rn (line 1) | function rn(e,t,n,r){var i=At(e.getCursor()),s=n?1:-1,o=n?e.lineCount():...
function sn (line 1) | function sn(e,t,n,r,i){var s=t.line,o=t.ch,u=e.getLine(s),a=n?1:-1,f=r?H...
function on (line 1) | function on(e,t,n,r,i,s){var o=At(t),u=[];(r&&!i||!r&&i)&&n++;var a=!r||...
function un (line 1) | function un(e,t,n,r){var i=e.getCursor(),s=i.ch,o;for(var u=0;u<t;u++){v...
function an (line 1) | function an(e,t){var n=e.getCursor().line;return St(e,S(n,t-1))}
function fn (line 1) | function fn(e,t,n,r){if(!K(n,q))return;t.marks[n]&&t.marks[n].clear(),t....
function ln (line 1) | function ln(e,t,n,r,i){var s;return r?(s=t.indexOf(n,e+1),s!=-1&&!i&&(s-...
function cn (line 1) | function cn(e,t,n,r,i){function c(t){return!/\S/.test(e.getLine(t))}func...
function hn (line 1) | function hn(e,t,n,r){function i(e,t){if(t.pos+t.dir<0||t.pos+t.dir>=t.li...
function pn (line 1) | function pn(e,t,n,r){var i=t,s,o,u={"(":/[()]/,")":/[()]/,"[":/[[\]]/,"]...
function dn (line 1) | function dn(e,t,n,r){var i=At(t),s=e.getLine(i.line),o=s.split(""),u,a,f...
function vn (line 1) | function vn(){}
function mn (line 1) | function mn(e){var t=e.state.vim;return t.searchState_||(t.searchState_=...
function gn (line 1) | function gn(e,t,n,r,i){e.openDialog?e.openDialog(t,r,{bottom:!0,value:i....
function yn (line 1) | function yn(e){return wn(e,"/")}
function bn (line 1) | function bn(e){return En(e,"/")}
function wn (line 1) | function wn(e,t){var n=En(e,t)||[];if(!n.length)return[];var r=[];if(n[0...
function En (line 1) | function En(e,t){t||(t="/");var n=!1,r=[];for(var i=0;i<e.length;i++){va...
function Sn (line 1) | function Sn(e){var t="|(){",n="}",r=!1,i=[];for(var s=-1;s<e.length;s++)...
function Tn (line 1) | function Tn(e){var t=!1,n=[];for(var r=-1;r<e.length;r++){var i=e.charAt...
function Cn (line 1) | function Cn(e){var t=new v.StringStream(e),n=[];while(!t.eol()){while(t....
function kn (line 1) | function kn(e,t,n){var r=it.registerController.getRegister("/");r.setTex...
function Ln (line 1) | function Ln(e,t){e.openNotification?e.openNotification('<span style="col...
function An (line 1) | function An(e,t){var n='<span style="font-family: monospace; white-space...
function Mn (line 1) | function Mn(e,t){var n=(t.prefix||"")+" "+(t.desc||""),r=An(t.prefix,t.d...
function _n (line 1) | function _n(e,t){if(e instanceof RegExp&&t instanceof RegExp){var n=["gl...
function Dn (line 1) | function Dn(e,t,n,r){if(!t)return;var i=mn(e),s=kn(t,!!n,!!r);if(!s)retu...
function Pn (line 1) | function Pn(e){if(e.source.charAt(0)=="^")var t=!0;return{token:function...
function Hn (line 1) | function Hn(e,t){var n=mn(e),r=n.getOverlay();if(!r||t!=r.query)r&&e.rem...
function Bn (line 1) | function Bn(e,t,n,r){return r===undefined&&(r=1),e.operation(function(){...
function jn (line 1) | function jn(e){var t=mn(e);e.removeOverlay(mn(e).getOverlay()),t.setOver...
function Fn (line 1) | function Fn(e,t,n){return typeof e!="number"&&(e=e.line),t instanceof Ar...
function In (line 1) | function In(e){var t=e.ace.renderer;return{top:t.getFirstFullyVisibleRow...
function qn (line 1) | function qn(e,t,n){if(n=="'"||n=="`")return it.jumpList.find(e,-1)||S(0,...
function Rn (line 1) | function Rn(e){var t=e.ace.session.$undoManager;if(t&&t.$lastDelta)retur...
function Xn (line 1) | function Xn(e,t,n,r,i,s,o,u,a){function c(){e.operation(function(){while...
function Vn (line 1) | function Vn(e){var t=e.state.vim,n=it.macroModeState,r=it.registerContro...
function $n (line 1) | function $n(e){b.unshift(e)}
function Jn (line 1) | function Jn(e,t,n,r,i){var s={keys:e,type:t};s[t]=n,s[t+"Args"]=r;for(va...
function Kn (line 1) | function Kn(e,t,n,r){var i=it.registerController.getRegister(r);if(r==":...
function Qn (line 1) | function Qn(e,t){if(e.isPlaying)return;var n=e.latestRegister,r=it.regis...
function Gn (line 1) | function Gn(e){if(e.isPlaying)return;var t=e.latestRegister,n=it.registe...
function Yn (line 1) | function Yn(e,t){if(e.isPlaying)return;var n=e.latestRegister,r=it.regis...
function Zn (line 1) | function Zn(e,t){var n=it.macroModeState,r=n.lastInsertModeChanges;if(!n...
function er (line 1) | function er(e){var t=e.state.vim;if(t.insertMode){var n=it.macroModeStat...
function tr (line 1) | function tr(e){var t=e.state.vim,n=St(e,At(t.sel.head)),r=Tt(n,0,1);t.fa...
function nr (line 1) | function nr(e,t,n){var r=e.getCursor("anchor"),i=e.getCursor("head");t.v...
function rr (line 1) | function rr(e){this.keyName=e}
function ir (line 1) | function ir(e){function i(){return n.maybeReset&&(n.changes=[],n.maybeRe...
function sr (line 1) | function sr(e,t,n,r){function u(){s?dt.processAction(e,t,t.lastEditActio...
function or (line 1) | function or(e,t,n){function r(t){return typeof t=="string"?v.commands[t]...
function ar (line 1) | function ar(e,t,n){t.length>1&&t[0]=="n"&&(t=t.replace("numpad","")),t=u...
function lr (line 1) | function lr(e){var t=new e.constructor;return Object.keys(e).forEach(fun...
function cr (line 1) | function cr(e,t,n){var r=!1,i=x.maybeInitVimState_(e),s=i.visualBlock||i...
function pr (line 1) | function pr(e,t){t.off("beforeEndOperation",pr);var n=t.state.cm.vimCmd;...
function e (line 1) | function e(e,t,n){var r=e.ace.container,i;return i=r.appendChild(documen...
function t (line 1) | function t(e,t){e.state.currentNotificationClose&&e.state.currentNotific...
function a (line 1) | function a(e){if(typeof e=="string")f.value=e;else{if(o)return;if(e&&e.t...
function a (line 1) | function a(){if(s)return;s=!0,clearTimeout(o),i.parentNode.removeChild(i)}
function s (line 1) | function s(s,o,u){function l(n){var r=++t%e,o=i[r];o&&o.clear(),i[r]=s.s...
function o (line 1) | function o(s,o){t+=o,t>n?t=n:t<r&&(t=r);var u=i[(e+t)%e];if(u&&!u.find()...
function u (line 1) | function u(e,n){var r=t,i=o(e,n);return t=r,i&&i.find()}
function r (line 1) | function r(e){return e?[e]:["normal","insert","visual"]}
function i (line 1) | function i(){var r=it.macroModeState;if(r.isRecording){if(t=="q")return ...
function s (line 1) | function s(){if(t=="<Esc>")return ft(e),r.visualMode?Jt(e):r.insertMode&...
function o (line 1) | function o(n){var r;while(n)r=/<\w+-.+?>|<\w+>|./.exec(n),t=r[0],n=n.sub...
function u (line 1) | function u(){if(s())return!0;var n=r.inputState.keyBuffer=r.inputState.k...
function a (line 1) | function a(){if(i()||s())return!0;var n=r.inputState.keyBuffer=r.inputSt...
function a (line 1) | function a(r,i,s){it.searchHistoryController.pushInput(r),it.searchHisto...
function f (line 1) | function f(t){e.scrollTo(u.left,u.top),a(t,!0,!0);var n=it.macroModeStat...
function l (line 1) | function l(t,n,i){var s=v.keyName(t),o,a;s=="Up"||s=="Down"?(o=s=="Up"?!...
function c (line 1) | function c(t,n,r){var i=v.keyName(t);i=="Esc"||i=="Ctrl-C"||i=="Ctrl-["|...
function r (line 1) | function r(t){it.exCommandHistoryController.pushInput(t),it.exCommandHis...
function i (line 1) | function i(t,n,r){var i=v.keyName(t),s,o;if(i=="Esc"||i=="Ctrl-C"||i=="C...
function u (line 1) | function u(){if(t.argString){var e=new v.StringStream(t.argString);e.eat...
function E (line 1) | function E(e,t){if(n){var i;i=e,e=t,t=i}r&&(e=e.toLowerCase(),t=t.toLowe...
function x (line 1) | function x(e,t){if(n){var i;i=e,e=t,t=i}return r&&(e[0]=e[0].toLowerCase...
function n (line 1) | function n(){var n=hr(t).insertMode;t.ace.renderer.setStyle("normal-mode...
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/mode-abap.js
function a (line 1) | function a(){this.HighlightRules=r,this.foldingRules=new i}
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/mode-apex.js
function t (line 1) | function t(t){return t.slice(-3)=="__c"?"support.function":e(t)}
function n (line 1) | function n(e,t){return{regex:e+(t.multiline?"":"(?=.)"),token:"string.st...
function r (line 1) | function r(){return[{token:"comment",regex:"\\/\\/(?=.)",next:[s.getTagR...
function a (line 1) | function a(){i.call(this),this.HighlightRules=s,this.foldingRules=new o,...
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/mode-asciidoc.js
function t (line 1) | function t(e){var t=/\w/.test(e)?"\\b":"(?:\\B|^)";return t+e+"[^"+e+"]....
function l (line 1) | function l(t){return f=e.getTokens(t)[0],f&&f.type}
function d (line 1) | function d(){var t=f.value.match(p);if(t)return t[0].length;var r=c.inde...
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/mode-c9search.js
function o (line 1) | function o(e,t){try{return new RegExp(e,t)}catch(n){}}
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/mode-coffee.js
function s (line 1) | function s(){var e="[$A-Za-z_\\x7f-\\uffff][$\\w\\x7f-\\uffff]*",t="this...
function l (line 1) | function l(){this.HighlightRules=r,this.$outdent=new i,this.foldingRules...
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/mode-coldfusion.js
function a (line 1) | function a(){var e=o.replace("\\d","\\d\\-"),t={onMatch:function(e,t,n){...
function f (line 1) | function f(e){return[{token:"comment",regex:/\/\*/,next:[i.getTagRule(),...
function u (line 1) | function u(e,t){return e&&e.type.lastIndexOf(t+".xml")>-1}
function l (line 1) | function l(e,t){return e.type.lastIndexOf(t+".xml")>-1}
function f (line 1) | function f(e,t){return e.type.lastIndexOf(t+".xml")>-1}
function l (line 1) | function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();whil...
function c (line 1) | function c(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();whil...
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/mode-csound_document.js
method next (line 1) | get next(){return Array.isArray(e.next)?e.next[e.next.length-1]:e.next}
method next (line 1) | set next(t){Array.isArray(e.next)||(e.next=t)}
method token (line 1) | get token(){return e.token}
function a (line 1) | function a(){var e=o.replace("\\d","\\d\\-"),t={onMatch:function(e,t,n){...
function f (line 1) | function f(e){return[{token:"comment",regex:/\/\*/,next:[i.getTagRule(),...
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/mode-csound_orchestra.js
method next (line 1) | get next(){return Array.isArray(e.next)?e.next[e.next.length-1]:e.next}
method next (line 1) | set next(t){Array.isArray(e.next)||(e.next=t)}
method token (line 1) | get token(){return e.token}
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/mode-csound_score.js
method next (line 1) | get next(){return Array.isArray(e.next)?e.next[e.next.length-1]:e.next}
method next (line 1) | set next(t){Array.isArray(e.next)||(e.next=t)}
method token (line 1) | get token(){return e.token}
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/mode-curly.js
function a (line 1) | function a(){var e=o.replace("\\d","\\d\\-"),t={onMatch:function(e,t,n){...
function f (line 1) | function f(e){return[{token:"comment",regex:/\/\*/,next:[i.getTagRule(),...
function u (line 1) | function u(e,t){return e&&e.type.lastIndexOf(t+".xml")>-1}
function l (line 1) | function l(e,t){return e.type.lastIndexOf(t+".xml")>-1}
function f (line 1) | function f(e,t){return e.type.lastIndexOf(t+".xml")>-1}
function l (line 1) | function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();whil...
function c (line 1) | function c(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();whil...
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/mode-django.js
function a (line 1) | function a(){var e=o.replace("\\d","\\d\\-"),t={onMatch:function(e,t,n){...
function f (line 1) | function f(e){return[{token:"comment",regex:/\/\*/,next:[i.getTagRule(),...
function u (line 1) | function u(e,t){return e&&e.type.lastIndexOf(t+".xml")>-1}
function l (line 1) | function l(e,t){return e.type.lastIndexOf(t+".xml")>-1}
function f (line 1) | function f(e,t){return e.type.lastIndexOf(t+".xml")>-1}
function l (line 1) | function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();whil...
function c (line 1) | function c(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();whil...
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/mode-ejs.js
function a (line 1) | function a(){var e=o.replace("\\d","\\d\\-"),t={onMatch:function(e,t,n){...
function f (line 1) | function f(e){return[{token:"comment",regex:/\/\*/,next:[i.getTagRule(),...
function u (line 1) | function u(e,t){return e&&e.type.lastIndexOf(t+".xml")>-1}
function l (line 1) | function l(e,t){return e.type.lastIndexOf(t+".xml")>-1}
function f (line 1) | function f(e,t){return e.type.lastIndexOf(t+".xml")>-1}
function l (line 1) | function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();whil...
function c (line 1) | function c(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();whil...
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/mode-ftl.js
function a (line 1) | function a(){var e=o.replace("\\d","\\d\\-"),t={onMatch:function(e,t,n){...
function f (line 1) | function f(e){return[{token:"comment",regex:/\/\*/,next:[i.getTagRule(),...
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/mode-gobstones.js
function a (line 1) | function a(){var e=o.replace("\\d","\\d\\-"),t={onMatch:function(e,t,n){...
function f (line 1) | function f(e){return[{token:"comment",regex:/\/\*/,next:[i.getTagRule(),...
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/mode-groovy.js
function a (line 1) | function a(){var e=o.replace("\\d","\\d\\-"),t={onMatch:function(e,t,n){...
function f (line 1) | function f(e){return[{token:"comment",regex:/\/\*/,next:[i.getTagRule(),...
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/mode-haml.js
function a (line 1) | function a(){var e=o.replace("\\d","\\d\\-"),t={onMatch:function(e,t,n){...
function f (line 1) | function f(e){return[{token:"comment",regex:/\/\*/,next:[i.getTagRule(),...
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/mode-handlebars.js
function a (line 1) | function a(){var e=o.replace("\\d","\\d\\-"),t={onMatch:function(e,t,n){...
function f (line 1) | function f(e){return[{token:"comment",regex:/\/\*/,next:[i.getTagRule(),...
function u (line 1) | function u(e,t){return e&&e.type.lastIndexOf(t+".xml")>-1}
function l (line 1) | function l(e,t){return e.type.lastIndexOf(t+".xml")>-1}
function f (line 1) | function f(e,t){return e.type.lastIndexOf(t+".xml")>-1}
function l (line 1) | function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();whil...
function c (line 1) | function c(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();whil...
function s (line 1) | function s(e,t){return t.splice(0,3),t.shift()||"start"}
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/mode-html.js
function a (line 1) | function a(){var e=o.replace("\\d","\\d\\-"),t={onMatch:function(e,t,n){...
function f (line 1) | function f(e){return[{token:"comment",regex:/\/\*/,next:[i.getTagRule(),...
function u (line 1) | function u(e,t){return e&&e.type.lastIndexOf(t+".xml")>-1}
function l (line 1) | function l(e,t){return e.type.lastIndexOf(t+".xml")>-1}
function f (line 1) | function f(e,t){return e.type.lastIndexOf(t+".xml")>-1}
function l (line 1) | function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();whil...
function c (line 1) | function c(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();whil...
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/mode-html_elixir.js
function a (line 1) | function a(){var e=o.replace("\\d","\\d\\-"),t={onMatch:function(e,t,n){...
function f (line 1) | function f(e){return[{token:"comment",regex:/\/\*/,next:[i.getTagRule(),...
function u (line 1) | function u(e,t){return e&&e.type.lastIndexOf(t+".xml")>-1}
function l (line 1) | function l(e,t){return e.type.lastIndexOf(t+".xml")>-1}
function f (line 1) | function f(e,t){return e.type.lastIndexOf(t+".xml")>-1}
function l (line 1) | function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();whil...
function c (line 1) | function c(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();whil...
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/mode-html_ruby.js
function a (line 1) | function a(){var e=o.replace("\\d","\\d\\-"),t={onMatch:function(e,t,n){...
function f (line 1) | function f(e){return[{token:"comment",regex:/\/\*/,next:[i.getTagRule(),...
function u (line 1) | function u(e,t){return e&&e.type.lastIndexOf(t+".xml")>-1}
function l (line 1) | function l(e,t){return e.type.lastIndexOf(t+".xml")>-1}
function f (line 1) | function f(e,t){return e.type.lastIndexOf(t+".xml")>-1}
function l (line 1) | function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();whil...
function c (line 1) | function c(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();whil...
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/mode-jade.js
function a (line 1) | function a(){var e=o.replace("\\d","\\d\\-"),t={onMatch:function(e,t,n){...
function f (line 1) | function f(e){return[{token:"comment",regex:/\/\*/,next:[i.getTagRule(),...
function s (line 1) | function s(){var e="[$A-Za-z_\\x7f-\\uffff][$\\w\\x7f-\\uffff]*",t="this...
function l (line 1) | function l(e,t){return{token:"entity.name.function.jade",regex:"^\\s*\\:...
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/mode-java.js
function a (line 1) | function a(){var e=o.replace("\\d","\\d\\-"),t={onMatch:function(e,t,n){...
function f (line 1) | function f(e){return[{token:"comment",regex:/\/\*/,next:[i.getTagRule(),...
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/mode-javascript.js
function a (line 1) | function a(){var e=o.replace("\\d","\\d\\-"),t={onMatch:function(e,t,n){...
function f (line 1) | function f(e){return[{token:"comment",regex:/\/\*/,next:[i.getTagRule(),...
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/mode-jsoniq.js
function o (line 1) | function o(u,a){if(!n[u]){if(!t[u]){var f=typeof e=="function"&&e;if(!a&...
function r (line 1) | function r(e,t){E=t,S=e,x=e.length,s(0,0,0)}
function s (line 1) | function s(e,t,n){m=t,g=t,y=e,b=t,w=n,N=n,E.reset(S)}
function o (line 1) | function o(){E.startNonterminal("EQName",g);switch(y){case 80:f(80);brea...
function u (line 1) | function u(){E.startNonterminal("FunctionName",g);switch(y){case 17:f(17...
function a (line 1) | function a(){E.startNonterminal("NCName",g);switch(y){case 28:f(28);brea...
function f (line 1) | function f(e){y==e?(l(),E.terminal(i.TOKEN[y],b,w>x?x:w),m=b,g=w,y=0):d(...
function l (line 1) | function l(){g!=b&&(m=g,g=b,E.whitespace(m,g))}
function c (line 1) | function c(e){var t;for(;;){t=C(e);if(t!=30)break}return t}
function h (line 1) | function h(e){y==0&&(y=c(e),b=T,w=N)}
function p (line 1) | function p(e){y==0&&(y=C(e),b=T,w=N)}
function d (line 1) | function d(e,t,r,i,s){throw new n.ParseException(e,t,r,i,s)}
function C (line 1) | function C(e){var t=!1;T=N;var n=N,r=i.INITIAL[e],s=0;for(var o=r&4095;o...
function u (line 1) | function u(e,t){return e&&e.type.lastIndexOf(t+".xml")>-1}
function a (line 1) | function a(e,t){var n=!0,r=e.type.split("."),i=t.split(".");return i.for...
function u (line 1) | function u(i){r&&t.removeMarker(r),o.row=n.row;if(e.pos.sc!==undefined&&...
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/mode-jsp.js
function a (line 1) | function a(){var e=o.replace("\\d","\\d\\-"),t={onMatch:function(e,t,n){...
function f (line 1) | function f(e){return[{token:"comment",regex:/\/\*/,next:[i.getTagRule(),...
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/mode-jsx.js
function f (line 1) | function f(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=n...
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/mode-liquid.js
function a (line 1) | function a(){var e=o.replace("\\d","\\d\\-"),t={onMatch:function(e,t,n){...
function f (line 1) | function f(e){return[{token:"comment",regex:/\/\*/,next:[i.getTagRule(),...
function u (line 1) | function u(e,t){return e&&e.type.lastIndexOf(t+".xml")>-1}
function l (line 1) | function l(e,t){return e.type.lastIndexOf(t+".xml")>-1}
function f (line 1) | function f(e,t){return e.type.lastIndexOf(t+".xml")>-1}
function l (line 1) | function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();whil...
function c (line 1) | function c(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();whil...
function a (line 1) | function a(e,t){return e&&e.type.lastIndexOf(t+".xml")>-1}
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/mode-livescript.js
function u (line 1) | function u(e,t){function n(){}return n.prototype=(e.superclass=t).protot...
function a (line 1) | function a(e,t){var n={}.hasOwnProperty;for(var r in t)n.call(t,r)&&(e[r...
function o (line 1) | function o(){var t;this.$tokenizer=new(e("../tokenizer").Tokenizer)(o.Ru...
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/mode-lsl.js
function s (line 1) | function s(){var e=this.createKeywordMapper({"constant.language.float.ls...
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/mode-lua.js
function n (line 1) | function n(t){var n=0;for(var r=0;r<t.length;r++){var i=t[r];i.type=="ke...
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/mode-luapage.js
function a (line 1) | function a(){var e=o.replace("\\d","\\d\\-"),t={onMatch:function(e,t,n){...
function f (line 1) | function f(e){return[{token:"comment",regex:/\/\*/,next:[i.getTagRule(),...
function u (line 1) | function u(e,t){return e&&e.type.lastIndexOf(t+".xml")>-1}
function l (line 1) | function l(e,t){return e.type.lastIndexOf(t+".xml")>-1}
function f (line 1) | function f(e,t){return e.type.lastIndexOf(t+".xml")>-1}
function l (line 1) | function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();whil...
function c (line 1) | function c(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();whil...
function n (line 1) | function n(t){var n=0;for(var r=0;r<t.length;r++){var i=t[r];i.type=="ke...
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/mode-markdown.js
function a (line 1) | function a(){var e=o.replace("\\d","\\d\\-"),t={onMatch:function(e,t,n){...
function f (line 1) | function f(e){return[{token:"comment",regex:/\/\*/,next:[i.getTagRule(),...
function u (line 1) | function u(e,t){return e&&e.type.lastIndexOf(t+".xml")>-1}
function l (line 1) | function l(e,t){return e.type.lastIndexOf(t+".xml")>-1}
function f (line 1) | function f(e,t){return e.type.lastIndexOf(t+".xml")>-1}
function l (line 1) | function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();whil...
function c (line 1) | function c(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();whil...
function l (line 1) | function l(t){return f=e.getTokens(t)[0],f&&f.type.lastIndexOf(c,0)===0}
function h (line 1) | function h(){var e=f.value[0];return e=="="?6:e=="-"?5:7-f.value.search(...
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/mode-mask.js
function a (line 1) | function a(){var e=o.replace("\\d","\\d\\-"),t={onMatch:function(e,t,n){...
function f (line 1) | function f(e){return[{token:"comment",regex:/\/\*/,next:[i.getTagRule(),...
function N (line 1) | function N(){function t(e,t,n){var r="js-"+e+"-",i=e==="block"?["start"]...
function k (line 1) | function k(e,t,n){var r,i,s;return arguments.length===4?(r=n,i=arguments...
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/mode-mysql.js
function i (line 1) | function i(e){var t=e.start,n=e.escape;return{token:"string.start",regex...
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/mode-nunjucks.js
function a (line 1) | function a(){var e=o.replace("\\d","\\d\\-"),t={onMatch:function(e,t,n){...
function f (line 1) | function f(e){return[{token:"comment",regex:/\/\*/,next:[i.getTagRule(),...
function u (line 1) | function u(e,t){return e&&e.type.lastIndexOf(t+".xml")>-1}
function l (line 1) | function l(e,t){return e.type.lastIndexOf(t+".xml")>-1}
function f (line 1) | function f(e,t){return e.type.lastIndexOf(t+".xml")>-1}
function l (line 1) | function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();whil...
function c (line 1) | function c(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();whil...
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/mode-pgsql.js
function a (line 1) | function a(){var e=o.replace("\\d","\\d\\-"),t={onMatch:function(e,t,n){...
function f (line 1) | function f(e){return[{token:"comment",regex:/\/\*/,next:[i.getTagRule(),...
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/mode-php.js
function a (line 1) | function a(){var e=o.replace("\\d","\\d\\-"),t={onMatch:function(e,t,n){...
function f (line 1) | function f(e){return[{token:"comment",regex:/\/\*/,next:[i.getTagRule(),...
function s (line 1) | function s(e,t){return e.type.lastIndexOf(t)>-1}
function u (line 1) | function u(e,t){return e&&e.type.lastIndexOf(t+".xml")>-1}
function l (line 1) | function l(e,t){return e.type.lastIndexOf(t+".xml")>-1}
function f (line 1) | function f(e,t){return e.type.lastIndexOf(t+".xml")>-1}
function l (line 1) | function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();whil...
function c (line 1) | function c(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();whil...
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/mode-php_laravel_blade.js
function a (line 1) | function a(){var e=o.replace("\\d","\\d\\-"),t={onMatch:function(e,t,n){...
function f (line 1) | function f(e){return[{token:"comment",regex:/\/\*/,next:[i.getTagRule(),...
function s (line 1) | function s(e,t){return e.type.lastIndexOf(t)>-1}
function u (line 1) | function u(e,t){return e&&e.type.lastIndexOf(t+".xml")>-1}
function l (line 1) | function l(e,t){return e.type.lastIndexOf(t+".xml")>-1}
function f (line 1) | function f(e,t){return e.type.lastIndexOf(t+".xml")>-1}
function l (line 1) | function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();whil...
function c (line 1) | function c(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();whil...
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/mode-razor.js
function a (line 1) | function a(){var e=o.replace("\\d","\\d\\-"),t={onMatch:function(e,t,n){...
function f (line 1) | function f(e){return[{token:"comment",regex:/\/\*/,next:[i.getTagRule(),...
function u (line 1) | function u(e,t){return e&&e.type.lastIndexOf(t+".xml")>-1}
function l (line 1) | function l(e,t){return e.type.lastIndexOf(t+".xml")>-1}
function f (line 1) | function f(e,t){return e.type.lastIndexOf(t+".xml")>-1}
function l (line 1) | function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();whil...
function c (line 1) | function c(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();whil...
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/mode-rhtml.js
function a (line 1) | function a(){var e=o.replace("\\d","\\d\\-"),t={onMatch:function(e,t,n){...
function f (line 1) | function f(e){return[{token:"comment",regex:/\/\*/,next:[i.getTagRule(),...
function u (line 1) | function u(e,t){return e&&e.type.lastIndexOf(t+".xml")>-1}
function l (line 1) | function l(e,t){return e.type.lastIndexOf(t+".xml")>-1}
function f (line 1) | function f(e,t){return e.type.lastIndexOf(t+".xml")>-1}
function l (line 1) | function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();whil...
function c (line 1) | function c(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();whil...
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/mode-scala.js
function a (line 1) | function a(){var e=o.replace("\\d","\\d\\-"),t={onMatch:function(e,t,n){...
function f (line 1) | function f(e){return[{token:"comment",regex:/\/\*/,next:[i.getTagRule(),...
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/mode-sjs.js
function a (line 1) | function a(){var e=o.replace("\\d","\\d\\-"),t={onMatch:function(e,t,n){...
function f (line 1) | function f(e){return[{token:"comment",regex:/\/\*/,next:[i.getTagRule(),...
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/mode-slim.js
function a (line 1) | function a(){var e=o.replace("\\d","\\d\\-"),t={onMatch:function(e,t,n){...
function f (line 1) | function f(e){return[{token:"comment",regex:/\/\*/,next:[i.getTagRule(),...
function u (line 1) | function u(e,t){return e&&e.type.lastIndexOf(t+".xml")>-1}
function l (line 1) | function l(e,t){return e.type.lastIndexOf(t+".xml")>-1}
function f (line 1) | function f(e,t){return e.type.lastIndexOf(t+".xml")>-1}
function l (line 1) | function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();whil...
function c (line 1) | function c(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();whil...
function l (line 1) | function l(t){return f=e.getTokens(t)[0],f&&f.type.lastIndexOf(c,0)===0}
function h (line 1) | function h(){var e=f.value[0];return e=="="?6:e=="-"?5:7-f.value.search(...
function s (line 1) | function s(){var e="[$A-Za-z_\\x7f-\\uffff][$\\w\\x7f-\\uffff]*",t="this...
function l (line 1) | function l(){this.HighlightRules=r,this.$outdent=new i,this.foldingRules...
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/mode-smarty.js
function a (line 1) | function a(){var e=o.replace("\\d","\\d\\-"),t={onMatch:function(e,t,n){...
function f (line 1) | function f(e){return[{token:"comment",regex:/\/\*/,next:[i.getTagRule(),...
function u (line 1) | function u(e,t){return e&&e.type.lastIndexOf(t+".xml")>-1}
function l (line 1) | function l(e,t){return e.type.lastIndexOf(t+".xml")>-1}
function f (line 1) | function f(e,t){return e.type.lastIndexOf(t+".xml")>-1}
function l (line 1) | function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();whil...
function c (line 1) | function c(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();whil...
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/mode-soy_template.js
function a (line 1) | function a(){var e=o.replace("\\d","\\d\\-"),t={onMatch:function(e,t,n){...
function f (line 1) | function f(e){return[{token:"comment",regex:/\/\*/,next:[i.getTagRule(),...
function u (line 1) | function u(e,t){return e&&e.type.lastIndexOf(t+".xml")>-1}
function l (line 1) | function l(e,t){return e.type.lastIndexOf(t+".xml")>-1}
function f (line 1) | function f(e,t){return e.type.lastIndexOf(t+".xml")>-1}
function l (line 1) | function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();whil...
function c (line 1) | function c(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();whil...
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/mode-svg.js
function u (line 1) | function u(e,t){return e&&e.type.lastIndexOf(t+".xml")>-1}
function l (line 1) | function l(e,t){return e.type.lastIndexOf(t+".xml")>-1}
function a (line 1) | function a(){var e=o.replace("\\d","\\d\\-"),t={onMatch:function(e,t,n){...
function f (line 1) | function f(e){return[{token:"comment",regex:/\/\*/,next:[i.getTagRule(),...
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/mode-swift.js
function t (line 1) | function t(e,t){var n=t.nestable||t.interpolation,r=t.interpolation&&t.i...
function n (line 1) | function n(){return[{token:"comment",regex:"\\/\\/(?=.)",next:[s.getTagR...
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/mode-tsx.js
function a (line 1) | function a(){var e=o.replace("\\d","\\d\\-"),t={onMatch:function(e,t,n){...
function f (line 1) | function f(e){return[{token:"comment",regex:/\/\*/,next:[i.getTagRule(),...
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/mode-twig.js
function a (line 1) | function a(){var e=o.replace("\\d","\\d\\-"),t={onMatch:function(e,t,n){...
function f (line 1) | function f(e){return[{token:"comment",regex:/\/\*/,next:[i.getTagRule(),...
function u (line 1) | function u(e,t){return e&&e.type.lastIndexOf(t+".xml")>-1}
function l (line 1) | function l(e,t){return e.type.lastIndexOf(t+".xml")>-1}
function f (line 1) | function f(e,t){return e.type.lastIndexOf(t+".xml")>-1}
function l (line 1) | function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();whil...
function c (line 1) | function c(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();whil...
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/mode-typescript.js
function a (line 1) | function a(){var e=o.replace("\\d","\\d\\-"),t={onMatch:function(e,t,n){...
function f (line 1) | function f(e){return[{token:"comment",regex:/\/\*/,next:[i.getTagRule(),...
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/mode-vbscript.js
function t (line 1) | function t(e,t,n){var r=0;for(var i=0;i<e.length;i++){var s=e[i];if(s.ty...
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/mode-velocity.js
function a (line 1) | function a(){var e=o.replace("\\d","\\d\\-"),t={onMatch:function(e,t,n){...
function f (line 1) | function f(e){return[{token:"comment",regex:/\/\*/,next:[i.getTagRule(),...
function u (line 1) | function u(e,t){return e&&e.type.lastIndexOf(t+".xml")>-1}
function l (line 1) | function l(e,t){return e.type.lastIndexOf(t+".xml")>-1}
function f (line 1) | function f(e,t){return e.type.lastIndexOf(t+".xml")>-1}
function l (line 1) | function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();whil...
function c (line 1) | function c(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();whil...
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/mode-visualforce.js
function a (line 1) | function a(){var e=o.replace("\\d","\\d\\-"),t={onMatch:function(e,t,n){...
function f (line 1) | function f(e){return[{token:"comment",regex:/\/\*/,next:[i.getTagRule(),...
function u (line 1) | function u(e,t){return e&&e.type.lastIndexOf(t+".xml")>-1}
function l (line 1) | function l(e,t){return e.type.lastIndexOf(t+".xml")>-1}
function f (line 1) | function f(e,t){return e.type.lastIndexOf(t+".xml")>-1}
function l (line 1) | function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();whil...
function c (line 1) | function c(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();whil...
function s (line 1) | function s(e){return{token:e.token+".start",regex:e.start,push:[{token:"...
function a (line 1) | function a(){i.call(this),this.HighlightRules=s,this.foldingRules=new u,...
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/mode-wollok.js
function a (line 1) | function a(){var e=o.replace("\\d","\\d\\-"),t={onMatch:function(e,t,n){...
function f (line 1) | function f(e){return[{token:"comment",regex:/\/\*/,next:[i.getTagRule(),...
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/mode-xml.js
function u (line 1) | function u(e,t){return e&&e.type.lastIndexOf(t+".xml")>-1}
function l (line 1) | function l(e,t){return e.type.lastIndexOf(t+".xml")>-1}
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/mode-xquery.js
function o (line 1) | function o(u,a){if(!n[u]){if(!t[u]){var f=typeof e=="function"&&e;if(!a&...
function r (line 1) | function r(e,t){E=t,S=e,x=e.length,s(0,0,0)}
function s (line 1) | function s(e,t,n){m=t,g=t,y=e,b=t,w=n,N=n,E.reset(S)}
function o (line 1) | function o(){E.startNonterminal("EQName",g);switch(y){case 77:f(77);brea...
function u (line 1) | function u(){E.startNonterminal("FunctionName",g);switch(y){case 14:f(14...
function a (line 1) | function a(){E.startNonterminal("NCName",g);switch(y){case 26:f(26);brea...
function f (line 1) | function f(e){y==e?(l(),E.terminal(i.TOKEN[y],b,w>x?x:w),m=b,g=w,y=0):d(...
function l (line 1) | function l(){g!=b&&(m=g,g=b,E.whitespace(m,g))}
function c (line 1) | function c(e){var t;for(;;){t=C(e);if(t!=28)break}return t}
function h (line 1) | function h(e){y==0&&(y=c(e),b=T,w=N)}
function p (line 1) | function p(e){y==0&&(y=C(e),b=T,w=N)}
function d (line 1) | function d(e,t,r,i,s){throw new n.ParseException(e,t,r,i,s)}
function C (line 1) | function C(e){var t=!1;T=N;var n=N,r=i.INITIAL[e],s=0;for(var o=r&4095;o...
function u (line 1) | function u(e,t){return e&&e.type.lastIndexOf(t+".xml")>-1}
function a (line 1) | function a(e,t){var n=!0,r=e.type.split("."),i=t.split(".");return i.for...
function u (line 1) | function u(i){r&&t.removeMarker(r),o.row=n.row;if(e.pos.sc!==undefined&&...
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/worker-base.js
function t (line 1) | function t(e,t){var n=e,r="";while(n){var i=t[n];if(typeof i=="string")r...
function r (line 1) | function r(e,t){throw console.log("Invalid Delta:",e),"Invalid Delta: "+t}
function i (line 1) | function i(e,t){return t.row>=0&&t.row<e.length&&t.column>=0&&t.column<=...
function s (line 1) | function s(e,t){t.action!="insert"&&t.action!="remove"&&r(t,"delta.actio...
function e (line 1) | function e(e,t,n){var r=n?e.column<=t.column:e.column<t.column;return e....
function t (line 1) | function t(t,n,r){var i=t.action=="insert",s=(i?1:-1)*(t.end.row-t.start...
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/worker-coffee.js
function t (line 1) | function t(e,t){var n=e,r="";while(n){var i=t[n];if(typeof i=="string")r...
function r (line 1) | function r(e,t){throw console.log("Invalid Delta:",e),"Invalid Delta: "+t}
function i (line 1) | function i(e,t){return t.row>=0&&t.row<e.length&&t.column>=0&&t.column<=...
function s (line 1) | function s(e,t){t.action!="insert"&&t.action!="remove"&&r(t,"delta.actio...
function e (line 1) | function e(e,t,n){var r=n?e.column<=t.column:e.column<t.column;return e....
function t (line 1) | function t(t,n,r){var i=t.action=="insert",s=(i?1:-1)*(t.end.row-t.start...
function define (line 1) | function define(e){module.exports=e()}
function _toArray (line 1) | function _toArray(e){return Array.isArray(e)?e:Array.from(e)}
function _possibleConstructorReturn (line 1) | function _possibleConstructorReturn(e,t){if(!e)throw new ReferenceError(...
function _inherits (line 1) | function _inherits(e,t){if("function"!=typeof t&&null!==t)throw new Type...
function _classCallCheck (line 1) | function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("...
function _toConsumableArray (line 1) | function _toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(...
function e (line 1) | function e(e,t){var n=[],r=!0,i=!1,s=void 0;try{for(var o=e[Symbol.itera...
function e (line 1) | function e(e,t){for(var n=0,r;n<t.length;n++)r=t[n],r.enumerable=r.enume...
function require (line 1) | function require(e){return require[e]}
function e (line 1) | function e(){_classCallCheck(this,e)}
function e (line 1) | function e(){_classCallCheck(this,e)}
function e (line 1) | function e(){this.yy={}}
function e (line 1) | function e(t,n,r,i){_classCallCheck(this,e);var s,o;this.parent=t,this.e...
function e (line 1) | function e(t,n){_classCallCheck(this,e);var r;this.code=""+n,this.type=(...
function e (line 1) | function e(){_classCallCheck(this,e)}
function t (line 1) | function t(e){_classCallCheck(this,t);var n=_possibleConstructorReturn(t...
function n (line 1) | function n(e){_classCallCheck(this,n);var t=_possibleConstructorReturn(t...
function t (line 1) | function t(e){_classCallCheck(this,t);var n=_possibleConstructorReturn(t...
function t (line 1) | function t(){return _classCallCheck(this,t),_possibleConstructorReturn(t...
function t (line 1) | function t(){return _classCallCheck(this,t),_possibleConstructorReturn(t...
function t (line 1) | function t(){return _classCallCheck(this,t),_possibleConstructorReturn(t...
function t (line 1) | function t(){return _classCallCheck(this,t),_possibleConstructorReturn(t...
function t (line 1) | function t(){return _classCallCheck(this,t),_possibleConstructorReturn(t...
function t (line 1) | function t(){return _classCallCheck(this,t),_possibleConstructorReturn(t...
function t (line 1) | function t(){return _classCallCheck(this,t),_possibleConstructorReturn(t...
function t (line 1) | function t(){return _classCallCheck(this,t),_possibleConstructorReturn(t...
function t (line 1) | function t(){return _classCallCheck(this,t),_possibleConstructorReturn(t...
function t (line 1) | function t(){return _classCallCheck(this,t),_possibleConstructorReturn(t...
function t (line 1) | function t(){return _classCallCheck(this,t),_possibleConstructorReturn(t...
function t (line 1) | function t(){return _classCallCheck(this,t),_possibleConstructorReturn(t...
function t (line 1) | function t(){return _classCallCheck(this,t),_possibleConstructorReturn(t...
function t (line 1) | function t(){return _classCallCheck(this,t),_possibleConstructorReturn(t...
function t (line 1) | function t(){return _classCallCheck(this,t),_possibleConstructorReturn(t...
function n (line 1) | function n(e){_classCallCheck(this,n);var t=_possibleConstructorReturn(t...
function t (line 1) | function t(){return _classCallCheck(this,t),_possibleConstructorReturn(t...
function t (line 1) | function t(){return _classCallCheck(this,t),_possibleConstructorReturn(t...
function t (line 1) | function t(e,n,r){var i=3<arguments.length&&void 0!==arguments[3]&&argum...
function n (line 1) | function n(e){var t=e.content,r=e.newLine,i=e.unshift;_classCallCheck(th...
function t (line 1) | function t(e){var n=e.content,r=e.newLine,i=e.unshift;_classCallCheck(th...
function t (line 1) | function t(e){var n=1<arguments.length&&void 0!==arguments[1]?arguments[...
function t (line 1) | function t(){return _classCallCheck(this,t),_possibleConstructorReturn(t...
function t (line 1) | function t(e){_classCallCheck(this,t);var n=_possibleConstructorReturn(t...
function t (line 1) | function t(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0...
function t (line 1) | function t(e,n,r){return _classCallCheck(this,t),n instanceof Et&&(n=new...
function t (line 1) | function t(e,n){_classCallCheck(this,t);var r=_possibleConstructorReturn...
function t (line 1) | function t(e,n){_classCallCheck(this,t);var r=_possibleConstructorReturn...
function t (line 1) | function t(e){_classCallCheck(this,t);var n=_possibleConstructorReturn(t...
function t (line 1) | function t(e,n,r){_classCallCheck(this,t);var i=_possibleConstructorRetu...
function t (line 1) | function t(e){_classCallCheck(this,t);var n=_possibleConstructorReturn(t...
function t (line 1) | function t(e){var n=1<arguments.length&&void 0!==arguments[1]&&arguments...
function n (line 1) | function n(e){var t=1<arguments.length&&void 0!==arguments[1]&&arguments...
function s (line 1) | function s(e,t){var n=2<arguments.length&&void 0!==arguments[2]?argument...
function t (line 1) | function t(e){var n=1<arguments.length&&void 0!==arguments[1]?arguments[...
function t (line 1) | function t(e,n){_classCallCheck(this,t);var r=_possibleConstructorReturn...
function t (line 1) | function t(){return _classCallCheck(this,t),_possibleConstructorReturn(t...
function t (line 1) | function t(e,n){_classCallCheck(this,t);var r=_possibleConstructorReturn...
function t (line 1) | function t(){return _classCallCheck(this,t),_possibleConstructorReturn(t...
function t (line 1) | function t(){return _classCallCheck(this,t),_possibleConstructorReturn(t...
function t (line 1) | function t(){return _classCallCheck(this,t),_possibleConstructorReturn(t...
function t (line 1) | function t(){return _classCallCheck(this,t),_possibleConstructorReturn(t...
function t (line 1) | function t(e){_classCallCheck(this,t);var n=_possibleConstructorReturn(t...
function t (line 1) | function t(){return _classCallCheck(this,t),_possibleConstructorReturn(t...
function t (line 1) | function t(){return _classCallCheck(this,t),_possibleConstructorReturn(t...
function t (line 1) | function t(e,n,r){_classCallCheck(this,t);var i=_possibleConstructorRetu...
function n (line 1) | function n(e,t){return _classCallCheck(this,n),_possibleConstructorRetur...
function t (line 1) | function t(){return _classCallCheck(this,t),_possibleConstructorReturn(t...
function t (line 1) | function t(){return _classCallCheck(this,t),_possibleConstructorReturn(t...
function t (line 1) | function t(e,n){return _classCallCheck(this,t),_possibleConstructorRetur...
function r (line 1) | function r(e,t,n){var i=3<arguments.length&&void 0!==arguments[3]?argume...
function t (line 1) | function t(e){_classCallCheck(this,t);var n=_possibleConstructorReturn(t...
function n (line 1) | function n(e,t,r,i){_classCallCheck(this,n);var s=_possibleConstructorRe...
function n (line 1) | function n(e,t,r){_classCallCheck(this,n);var i=_possibleConstructorRetu...
function t (line 1) | function t(e){_classCallCheck(this,t);var n=_possibleConstructorReturn(t...
function t (line 1) | function t(){return _classCallCheck(this,t),_possibleConstructorReturn(t...
function t (line 1) | function t(){return _classCallCheck(this,t),_possibleConstructorReturn(t...
function t (line 1) | function t(e,n){_classCallCheck(this,t);var r=_possibleConstructorReturn...
function s (line 1) | function s(e,t,r,i){var o;_classCallCheck(this,s);var u=_possibleConstru...
function t (line 1) | function t(e,n){_classCallCheck(this,t);var r=_possibleConstructorReturn...
function t (line 1) | function t(e,n,r,i){_classCallCheck(this,t);var s=_possibleConstructorRe...
function t (line 1) | function t(e){_classCallCheck(this,t);var n=_possibleConstructorReturn(t...
function n (line 1) | function n(e){var r=1<arguments.length&&void 0!==arguments[1]&&arguments...
function t (line 1) | function t(e){_classCallCheck(this,t);var n=_possibleConstructorReturn(t...
function t (line 1) | function t(e){_classCallCheck(this,t);var n=_possibleConstructorReturn(t...
function t (line 1) | function t(e,n){_classCallCheck(this,t);var r=_possibleConstructorReturn...
function t (line 1) | function t(e,n,r){_classCallCheck(this,t);var i=_possibleConstructorRetu...
function t (line 1) | function t(e,n){var r=2<arguments.length&&void 0!==arguments[2]?argument...
function e (line 1) | function e(t){_classCallCheck(this,e),this.line=t,this.columns=[]}
function e (line 1) | function e(){_classCallCheck(this,e),this.lines=[]}
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/worker-css.js
function t (line 1) | function t(e,t){var n=e,r="";while(n){var i=t[n];if(typeof i=="string")r...
function r (line 1) | function r(e,t){throw console.log("Invalid Delta:",e),"Invalid Delta: "+t}
function i (line 1) | function i(e,t){return t.row>=0&&t.row<e.length&&t.column>=0&&t.column<=...
function s (line 1) | function s(e,t){t.action!="insert"&&t.action!="remove"&&r(t,"delta.actio...
function e (line 1) | function e(e,t,n){var r=n?e.column<=t.column:e.column<t.column;return e....
function t (line 1) | function t(t,n,r){var i=t.action=="insert",s=(i?1:-1)*(t.end.row-t.start...
function objectToString (line 1) | function objectToString(e){return Object.prototype.toString.call(e)}
function clone (line 1) | function clone(e,t,n,r){function u(e,n){if(e===null)return null;if(n==0)...
function Reporter (line 1) | function Reporter(e,t){this.messages=[],this.stats=[],this.lines=e,this....
function e (line 1) | function e(){this._listeners={}}
function t (line 1) | function t(e){this._input=e.replace(/\n\r?/g,"\n"),this._line=1,this._co...
function n (line 1) | function n(e,t,n){this.col=n,this.line=t,this.message=e}
function r (line 1) | function r(e,t,n,r){this.col=n,this.line=t,this.text=e,this.type=r}
function i (line 1) | function i(e,n){this._reader=e?new t(e.toString()):null,this._token=null...
function Combinator (line 1) | function Combinator(e,t,n){SyntaxUnit.call(this,e,t,n,Parser.COMBINATOR_...
function MediaFeature (line 1) | function MediaFeature(e,t){SyntaxUnit.call(this,"("+e+(t!==null?":"+t:""...
function MediaQuery (line 1) | function MediaQuery(e,t,n,r,i){SyntaxUnit.call(this,(e?e+" ":"")+(t?t:""...
function Parser (line 1) | function Parser(e){EventTarget.call(this),this.options=e||{},this._token...
function PropertyName (line 1) | function PropertyName(e,t,n,r){SyntaxUnit.call(this,e,n,r,Parser.PROPERT...
function PropertyValue (line 1) | function PropertyValue(e,t,n){SyntaxUnit.call(this,e.join(" "),t,n,Parse...
function PropertyValueIterator (line 1) | function PropertyValueIterator(e){this._i=0,this._parts=e.parts,this._ma...
function PropertyValuePart (line 1) | function PropertyValuePart(text,line,col){SyntaxUnit.call(this,text,line...
function Selector (line 1) | function Selector(e,t,n){SyntaxUnit.call(this,e.join(" "),t,n,Parser.SEL...
function SelectorPart (line 1) | function SelectorPart(e,t,n,r,i){SyntaxUnit.call(this,n,r,i,Parser.SELEC...
function SelectorSubPart (line 1) | function SelectorSubPart(e,t,n,r){SyntaxUnit.call(this,e,n,r,Parser.SELE...
function Specificity (line 1) | function Specificity(e,t,n,r){this.a=e,this.b=t,this.c=n,this.d=r}
function isHexDigit (line 1) | function isHexDigit(e){return e!==null&&h.test(e)}
function isDigit (line 1) | function isDigit(e){return e!==null&&/\d/.test(e)}
function isWhitespace (line 1) | function isWhitespace(e){return e!==null&&/\s/.test(e)}
function isNewLine (line 1) | function isNewLine(e){return e!==null&&nl.test(e)}
function isNameStart (line 1) | function isNameStart(e){return e!==null&&/[a-z_\u0080-\uFFFF\\]/i.test(e)}
function isNameChar (line 1) | function isNameChar(e){return e!==null&&(isNameStart(e)||/[0-9\-\\]/.tes...
function isIdentStart (line 1) | function isIdentStart(e){return e!==null&&(isNameStart(e)||/\-\\/.test(e))}
function mix (line 1) | function mix(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n]);return e}
function TokenStream (line 1) | function TokenStream(e){TokenStreamBase.call(this,e,Tokens)}
function ValidationError (line 1) | function ValidationError(e,t,n){this.col=n,this.line=t,this.message=e}
function u (line 1) | function u(e){var t,n,r,a,f=e.elementName?e.elementName.text:"",l;f&&f.c...
function i (line 1) | function i(e,t){var r,i=e&&e.match(n),s=i&&i[1];return s&&(r={"true":2,"...
function u (line 1) | function u(){s={},o=!1}
function a (line 1) | function a(){var e,u;if(!o){if(s.height)for(e in i)i.hasOwnProperty(e)&&...
function s (line 1) | function s(e,s,o){i[e]&&(typeof r[e]!="string"||i[e].value.toLowerCase()...
function o (line 1) | function o(){i={}}
function u (line 1) | function u(){var e=i.display?i.display.value:null;if(e)switch(e){case"in...
function s (line 1) | function s(){r={}}
function o (line 1) | function o(){s={},r=null}
function i (line 1) | function i(e){e.selectors?r={line:e.line,col:e.col,selectors:e.selectors...
function s (line 1) | function s(){r&&r.outline&&(r.selectors.toString().toLowerCase().indexOf...
function r (line 1) | function r(e){var r,i,s,o,u,a,f,l,c,h,p,d=e.selectors;for(r=0,i=d.length...
function f (line 1) | function f(){u={}}
function l (line 1) | function l(e){var r,i,s,o;for(r in a)if(a.hasOwnProperty(r)){o=0;for(i=0...
function s (line 1) | function s(){r=!1,i="inherit"}
function o (line 1) | function o(){r&&i!=="ltr"&&t.report("Negative text-indent doesn't work w...
function o (line 1) | function o(){r={},i=1}
function u (line 1) | function u(){var e,i,o,u,a,f=[];for(e in r)s[e]&&f.push({actual:e,needed...
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/worker-html.js
function t (line 1) | function t(e,t){var n=e,r="";while(n){var i=t[n];if(typeof i=="string")r...
function r (line 1) | function r(e,t){throw console.log("Invalid Delta:",e),"Invalid Delta: "+t}
function i (line 1) | function i(e,t){return t.row>=0&&t.row<e.length&&t.column>=0&&t.column<=...
function s (line 1) | function s(e,t){t.action!="insert"&&t.action!="remove"&&r(t,"delta.actio...
function e (line 1) | function e(e,t,n){var r=n?e.column<=t.column:e.column<t.column;return e....
function t (line 1) | function t(t,n,r){var i=t.action=="insert",s=(i?1:-1)*(t.end.row-t.start...
function s (line 1) | function s(u,a){if(!n[u]){if(!t[u]){var f=typeof e=="function"&&e;if(!a&...
function r (line 1) | function r(e){if(e.namespaceURI==="http://www.w3.org/1999/xhtml")return ...
function i (line 1) | function i(e){return r(e)||e.namespaceURI==="http://www.w3.org/1999/xhtm...
function s (line 1) | function s(e){return e.namespaceURI==="http://www.w3.org/1999/xhtml"&&e....
function o (line 1) | function o(e){return e.namespaceURI==="http://www.w3.org/1999/xhtml"&&e....
function u (line 1) | function u(e){return e.namespaceURI==="http://www.w3.org/1999/xhtml"&&e....
function a (line 1) | function a(e){return r(e)||e.namespaceURI==="http://www.w3.org/1999/xhtm...
function f (line 1) | function f(e){return(e.namespaceURI!=="http://www.w3.org/1999/xhtml"||e....
function l (line 1) | function l(){this.elements=[],this.rootNode=null,this.headElement=null,t...
function o (line 1) | function o(e){return e>="0"&&e<="9"||e>="a"&&e<="z"||e>="A"&&e<="Z"}
function u (line 1) | function u(e){return e>="0"&&e<="9"||e>="a"&&e<="f"||e>="A"&&e<="F"}
function a (line 1) | function a(e){return e>="0"&&e<="9"}
function r (line 1) | function r(){this.data="",this.start=0,this.committed=0,this.eof=!1,this...
function i (line 1) | function i(e,t,n,r){this.localName=t,this.namespaceURI=e,this.attributes...
function s (line 1) | function s(e,t){for(var n=0;n<e.attributes.length;n++)if(e.attributes[n]...
function s (line 1) | function s(e){return e===" "||e==="\n"||e===" "||e==="\r"||e==="\f"}
function o (line 1) | function o(e){return e>="A"&&e<="Z"||e>="a"&&e<="z"}
function u (line 1) | function u(e){this._tokenHandler=e,this._state=u.DATA,this._inputStream=...
function n (line 1) | function n(e){var n=e.char();if(n===r.EOF)return t._emitToken({type:"EOF...
function a (line 1) | function a(e){var r=i.consumeEntity(e,t);return t.setState(n),t._emitTok...
function f (line 1) | function f(e){var n=e.char();if(n===r.EOF)return t._emitToken({type:"EOF...
function l (line 1) | function l(e){var n=i.consumeEntity(e,t);return t.setState(f),t._emitTok...
function c (line 1) | function c(e){var n=e.char();if(n===r.EOF)return t._emitToken({type:"EOF...
function h (line 1) | function h(e){var n=e.char();if(n===r.EOF)return t._emitToken({type:"EOF...
function p (line 1) | function p(e){var n=e.char();if(n===r.EOF)return t._emitToken({type:"EOF...
function d (line 1) | function d(e){var n=e.char();return n==="/"?(this._temporaryBuffer="",t....
function v (line 1) | function v(e){var n=e.char();return o(n)?(this._temporaryBuffer+=n,t.set...
function m (line 1) | function m(e){var r=t._currentToken&&t._currentToken.name===this._tempor...
function g (line 1) | function g(e){var n=e.char();return n==="/"?(this._temporaryBuffer="",t....
function y (line 1) | function y(e){var n=e.char();return o(n)?(this._temporaryBuffer+=n,t.set...
function b (line 1) | function b(e){var r=t._currentToken&&t._currentToken.name===this._tempor...
function w (line 1) | function w(e){var n=e.char();return n==="/"?(this._temporaryBuffer="",t....
function E (line 1) | function E(e){var n=e.char();return o(n)?(this._temporaryBuffer+=n,t.set...
function S (line 1) | function S(e){var n=t._currentToken&&t._currentToken.name===this._tempor...
function x (line 1) | function x(e){var n=e.char();return n==="-"?(t._emitToken({type:"Charact...
function T (line 1) | function T(e){var n=e.char();return n==="-"?(t._emitToken({type:"Charact...
function N (line 1) | function N(e){var i=e.char();if(i===r.EOF)e.unget(i),t.setState(n);else ...
function C (line 1) | function C(e){var i=e.char();return i===r.EOF?(e.unget(i),t.setState(n))...
function k (line 1) | function k(e){var i=e.char();return i===r.EOF?(t._parseError("eof-in-scr...
function L (line 1) | function L(e){var n=e.char();return n==="/"?(this._temporaryBuffer="",t....
function A (line 1) | function A(e){var n=e.char();return o(n)?(this._temporaryBuffer=n,t.setS...
function O (line 1) | function O(e){var r=t._currentToken&&t._currentToken.name===this._tempor...
function M (line 1) | function M(e){var n=e.char();return s(n)||n==="/"||n===">"?(t._emitToken...
function _ (line 1) | function _(e){var i=e.char();return i===r.EOF?(t._parseError("eof-in-scr...
function D (line 1) | function D(e){var i=e.char();return i===r.EOF?(t._parseError("eof-in-scr...
function P (line 1) | function P(e){var i=e.char();return i===r.EOF?(t._parseError("eof-in-scr...
function H (line 1) | function H(e){var n=e.char();return n==="/"?(t._emitToken({type:"Charact...
function B (line 1) | function B(e){var n=e.char();return s(n)||n==="/"||n===">"?(t._emitToken...
function j (line 1) | function j(e){var i=e.char();return i===r.EOF?(t._parseError("bare-less-...
function F (line 1) | function F(e){var i=e.char();return i===r.EOF?(t._parseError("expected-c...
function I (line 1) | function I(e){var i=e.char();return i===r.EOF?(t._parseError("eof-in-tag...
function q (line 1) | function q(e){var i=e.char();if(i===r.EOF)t._parseError("expected-attrib...
function R (line 1) | function R(e){var i=e.char(),u=!0,a=!1;i===r.EOF?(t._parseError("eof-in-...
function U (line 1) | function U(e){var i=e.char();if(i===r.EOF)t._parseError("expected-end-of...
function z (line 1) | function z(e){var i=e.char();if(i===r.EOF)t._parseError("expected-attrib...
function W (line 1) | function W(e){var i=e.char();if(i===r.EOF)t._parseError("eof-in-attribut...
function X (line 1) | function X(e){var i=e.char();return i===r.EOF?(t._parseError("eof-in-att...
function V (line 1) | function V(e){var i=e.char();if(i===r.EOF)t._parseError("eof-after-attri...
function $ (line 1) | function $(e){var n=i.consumeEntity(e,t,this._additionalAllowedCharacter...
function J (line 1) | function J(e){var i=e.char();return i===r.EOF?(t._parseError("eof-after-...
function K (line 1) | function K(e){var i=e.char();return i===r.EOF?(t._parseError("unexpected...
function Q (line 1) | function Q(e){var r=e.matchUntil(">");return r=r.replace(/\u0000/g,"\uff...
function G (line 1) | function G(e){var n=e.shift(2);if(n==="--")t._currentToken={type:"Commen...
function Y (line 1) | function Y(e){var r=e.matchUntil("]]>");return e.shift(3),r&&t._emitToke...
function Z (line 1) | function Z(e){var i=e.char();return i===r.EOF?(t._parseError("eof-in-com...
function et (line 1) | function et(e){var i=e.char();return i===r.EOF?(t._parseError("eof-in-co...
function tt (line 1) | function tt(e){var i=e.char();return i===r.EOF?(t._parseError("eof-in-co...
function nt (line 1) | function nt(e){var i=e.char();return i===r.EOF?(t._parseError("eof-in-co...
function rt (line 1) | function rt(e){var i=e.char();return i===r.EOF?(t._parseError("eof-in-co...
function it (line 1) | function it(e){var i=e.char();return i===r.EOF?(t._parseError("eof-in-co...
function st (line 1) | function st(e){var i=e.char();return i===r.EOF?(t._parseError("expected-...
function ot (line 1) | function ot(e){var i=e.char();return i===r.EOF?(t._parseError("expected-...
function ut (line 1) | function ut(e){var i=e.char();return i===r.EOF?(t._currentToken.forceQui...
function at (line 1) | function at(e){var i=e.char();if(i===r.EOF)t._currentToken.forceQuirks=!...
function ft (line 1) | function ft(e){var i=e.char();return i===r.EOF?(t._parseError("eof-in-do...
function lt (line 1) | function lt(e){var i=e.char();return i===r.EOF?(t._parseError("eof-in-do...
function ct (line 1) | function ct(e){var i=e.char();return i===r.EOF?(t._parseError("eof-in-do...
function ht (line 1) | function ht(e){var i=e.char();return i===r.EOF?(t._parseError("eof-in-do...
function pt (line 1) | function pt(e){var i=e.char();return i===r.EOF?(t._parseError("eof-in-do...
function dt (line 1) | function dt(e){var i=e.char();return i===r.EOF?(t._parseError("eof-in-do...
function vt (line 1) | function vt(e){var i=e.char();return i===r.EOF?(t._parseError("eof-in-do...
function mt (line 1) | function mt(e){var i=e.char();return i===r.EOF?(t._parseError("eof-in-do...
function gt (line 1) | function gt(e){var i=e.char();return i===r.EOF?(t._parseError("eof-in-do...
function yt (line 1) | function yt(e){var i=e.char();return i===r.EOF?(t._parseError("eof-in-do...
function bt (line 1) | function bt(e){var i=e.char();return i===r.EOF?(t._parseError("eof-in-do...
function wt (line 1) | function wt(e){var i=e.char();return i===r.EOF?(e.unget(i),t._emitCurren...
function c (line 1) | function c(e){return e===" "||e==="\n"||e===" "||e==="\r"||e==="\f"}
function h (line 1) | function h(e){return c(e)||e==="\ufffd"}
function p (line 1) | function p(e){for(var t=0;t<e.length;t++){var n=e[t];if(!c(n))return!1}r...
function d (line 1) | function d(e){for(var t=0;t<e.length;t++){var n=e[t];if(!h(n))return!1}r...
function v (line 1) | function v(e,t){for(var n=0;n<e.attributes.length;n++){var r=e.attribute...
function m (line 1) | function m(e){this.characters=e,this.current=0,this.end=this.characters....
function g (line 1) | function g(){this.tokenizer=null,this.errorHandler=null,this.scriptingEn...
function y (line 1) | function y(e,t){return e.replace(new RegExp("{[0-9a-z-]+}","gi"),functio...
function i (line 1) | function i(e){return e===r}
function o (line 1) | function o(){this.contentHandler=null,this._errorHandler=null,this._tree...
function s (line 1) | function s(){i.call(this)}
function o (line 1) | function o(e,t){for(var n=0;n<e.attributes.length;n++){var r=e.attribute...
function a (line 1) | function a(e){e?(this.columnNumber=e.columnNumber,this.lineNumber=e.line...
function f (line 1) | function f(e){a.call(this,e),this.lastChild=null,this._endLocator=null}
function l (line 1) | function l(e){f.call(this,e),this.nodeType=u.DOCUMENT}
function c (line 1) | function c(){f.call(this,new Locator),this.nodeType=u.DOCUMENT_FRAGMENT}
function h (line 1) | function h(e,t,n,r,i,s){f.call(this,e),this.uri=t,this.localName=n,this....
function p (line 1) | function p(e,t){a.call(this,e),this.data=t,this.nodeType=u.CHARACTERS}
function d (line 1) | function d(e,t){a.call(this,e),this.data=t,this.nodeType=u.IGNORABLE_WHI...
function v (line 1) | function v(e,t){a.call(this,e),this.data=t,this.nodeType=u.COMMENT}
function m (line 1) | function m(e){f.call(this,e),this.nodeType=u.CDATA}
function g (line 1) | function g(e){f.call(this),this.name=e,this.nodeType=u.ENTITY}
function y (line 1) | function y(e){a.call(this),this.name=e,this.nodeType=u.SKIPPED_ENTITY}
function b (line 1) | function b(e,t){a.call(this),this.target=e,this.data=t}
function w (line 1) | function w(e,t,n){f.call(this),this.name=e,this.publicIdentifier=t,this....
function r (line 1) | function r(e,t){this.contentHandler,this.lexicalHandler,this.locatorDele...
function i (line 1) | function i(){}
function u (line 1) | function u(e,t){return r.isUndefined(t)?""+t:r.isNumber(t)&&(isNaN(t)||!...
function a (line 1) | function a(e,t){return r.isString(e)?e.length<t?e:e.slice(0,t):e}
function f (line 1) | function f(e){return a(JSON.stringify(e.actual,u),128)+" "+e.operator+" ...
function l (line 1) | function l(e,t,n,r,i){throw new o.AssertionError({message:n,actual:e,exp...
function c (line 1) | function c(e,t){e||l(e,!0,t,"==",o.ok)}
function h (line 1) | function h(e,t){if(e===t)return!0;if(r.isBuffer(e)&&r.isBuffer(t)){if(e....
function p (line 1) | function p(e){return Object.prototype.toString.call(e)=="[object Argumen...
function d (line 1) | function d(e,t){if(r.isNullOrUndefined(e)||r.isNullOrUndefined(t))return...
function v (line 1) | function v(e,t){return!e||!t?!1:Object.prototype.toString.call(t)=="[obj...
function m (line 1) | function m(e,t,n,i){var s;r.isString(n)&&(i=n,n=null);try{t()}catch(o){s...
function u (line 1) | function u(e,t){var r={seen:[],stylize:f};return arguments.length>=3&&(r...
function a (line 1) | function a(e,t){var n=u.styles[t];return n?"["+u.colors[n][0]+"m"+e+"[...
function f (line 1) | function f(e,t){return e}
function l (line 1) | function l(e){var t={};return e.forEach(function(e,n){t[e]=!0}),t}
function c (line 1) | function c(e,t,r){if(e.customInspect&&t&&A(t.inspect)&&t.inspect!==n.ins...
function h (line 1) | function h(e,t){if(T(t))return e.stylize("undefined","undefined");if(S(t...
function p (line 1) | function p(e){return"["+Error.prototype.toString.call(e)+"]"}
function d (line 1) | function d(e,t,n,r,i){var s=[];for(var o=0,u=t.length;o<u;++o)H(t,String...
function v (line 1) | function v(e,t,n,r,i,s){var o,u,a;a=Object.getOwnPropertyDescriptor(t,i)...
function m (line 1) | function m(e,t,n){var r=0,i=e.reduce(function(e,t){return r++,t.indexOf(...
function g (line 1) | function g(e){return Array.isArray(e)}
function y (line 1) | function y(e){return typeof e=="boolean"}
function b (line 1) | function b(e){return e===null}
function w (line 1) | function w(e){return e==null}
function E (line 1) | function E(e){return typeof e=="number"}
function S (line 1) | function S(e){return typeof e=="string"}
function x (line 1) | function x(e){return typeof e=="symbol"}
function T (line 1) | function T(e){return e===void 0}
function N (line 1) | function N(e){return C(e)&&M(e)==="[object RegExp]"}
function C (line 1) | function C(e){return typeof e=="object"&&e!==null}
function k (line 1) | function k(e){return C(e)&&M(e)==="[object Date]"}
function L (line 1) | function L(e){return C(e)&&(M(e)==="[object Error]"||e instanceof Error)}
function A (line 1) | function A(e){return typeof e=="function"}
function O (line 1) | function O(e){return e===null||typeof e=="boolean"||typeof e=="number"||...
function M (line 1) | function M(e){return Object.prototype.toString.call(e)}
function _ (line 1) | function _(e){return e<10?"0"+e.toString(10):e.toString(10)}
function P (line 1) | function P(){var e=new Date,t=[_(e.getHours()),_(e.getMinutes()),_(e.get...
function H (line 1) | function H(e,t){return Object.prototype.hasOwnProperty.call(e,t)}
function o (line 1) | function o(){if(!s){if(t.throwDeprecation)throw new Error(i);t.traceDepr...
function r (line 1) | function r(){this._events=this._events||{},this._maxListeners=this._maxL...
function i (line 1) | function i(e){return typeof e=="function"}
function s (line 1) | function s(e){return typeof e=="number"}
function o (line 1) | function o(e){return typeof e=="object"&&e!==null}
function u (line 1) | function u(e){return e===void 0}
function r (line 1) | function r(){this.removeListener(e,r),n||(n=!0,t.apply(this,arguments))}
function i (line 1) | function i(){}
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/worker-javascript.js
function t (line 1) | function t(e,t){var n=e,r="";while(n){var i=t[n];if(typeof i=="string")r...
function r (line 1) | function r(e,t){throw console.log("Invalid Delta:",e),"Invalid Delta: "+t}
function i (line 1) | function i(e,t){return t.row>=0&&t.row<e.length&&t.column>=0&&t.column<=...
function s (line 1) | function s(e,t){t.action!="insert"&&t.action!="remove"&&r(t,"delta.actio...
function e (line 1) | function e(e,t,n){var r=n?e.column<=t.column:e.column<t.column;return e....
function t (line 1) | function t(t,n,r){var i=t.action=="insert",s=(i?1:-1)*(t.end.row-t.start...
function t (line 1) | function t(n,r,i){function o(u,a){if(!r[u]){if(!n[u]){var f=typeof e=="f...
function d (line 1) | function d(){}
function v (line 1) | function v(){u.log.apply(u,arguments)}
function m (line 1) | function m(){u.log.apply(u,arguments)}
function g (line 1) | function g(){u.warn.apply(u,arguments)}
function y (line 1) | function y(e){a[e]=s()}
function b (line 1) | function b(e){var t=a[e];if(!t)throw new Error("No such label: "+e);var ...
function w (line 1) | function w(){var e=new Error;e.name="Trace",e.message=r.format.apply(nul...
function E (line 1) | function E(e){u.log(r.inspect(e)+"\n")}
function S (line 1) | function S(e){if(!e){var t=o.call(arguments,1);i.ok(!1,r.format.apply(nu...
function r (line 1) | function r(){return(new Date).getTime()}
function W (line 1) | function W(e,t){return e.set(t[0],t[1]),e}
function X (line 1) | function X(e,t){return e.add(t),e}
function V (line 1) | function V(e,t){var n=-1,r=e?e.length:0;while(++n<r)if(t(e[n],n,e)===!1)...
function $ (line 1) | function $(e,t){var n=-1,r=t.length,i=e.length;while(++n<r)e[i+n]=t[n];r...
function J (line 1) | function J(e,t,n,r){var i=-1,s=e?e.length:0;r&&s&&(n=e[++i]);while(++i<s...
function K (line 1) | function K(e,t){var n=-1,r=Array(e);while(++n<e)r[n]=t(n);return r}
function Q (line 1) | function Q(e,t){return e==null?undefined:e[t]}
function G (line 1) | function G(e){var t=!1;if(e!=null&&typeof e.toString!="function")try{t=!...
function Y (line 1) | function Y(e){var t=-1,n=Array(e.size);return e.forEach(function(e,r){n[...
function Z (line 1) | function Z(e,t){return function(n){return e(t(n))}}
function et (line 1) | function et(e){var t=-1,n=Array(e.size);return e.forEach(function(e){n[+...
function Dt (line 1) | function Dt(e){var t=-1,n=e?e.length:0;this.clear();while(++t<n){var r=e...
function Pt (line 1) | function Pt(){this.__data__=Nt?Nt(null):{}}
function Ht (line 1) | function Ht(e){return this.has(e)&&delete this.__data__[e]}
function Bt (line 1) | function Bt(e){var t=this.__data__;if(Nt){var n=t[e];return n===i?undefi...
function jt (line 1) | function jt(e){var t=this.__data__;return Nt?t[e]!==undefined:ut.call(t,e)}
function Ft (line 1) | function Ft(e,t){var n=this.__data__;return n[e]=Nt&&t===undefined?i:t,t...
function It (line 1) | function It(e){var t=-1,n=e?e.length:0;this.clear();while(++t<n){var r=e...
function qt (line 1) | function qt(){this.__data__=[]}
function Rt (line 1) | function Rt(e){var t=this.__data__,n=on(t,e);if(n<0)return!1;var r=t.len...
function Ut (line 1) | function Ut(e){var t=this.__data__,n=on(t,e);return n<0?undefined:t[n][1]}
function zt (line 1) | function zt(e){return on(this.__data__,e)>-1}
function Wt (line 1) | function Wt(e,t){var n=this.__data__,r=on(n,e);return r<0?n.push([e,t]):...
function Xt (line 1) | function Xt(e){var t=-1,n=e?e.length:0;this.clear();while(++t<n){var r=e...
function Vt (line 1) | function Vt(){this.__data__={hash:new Dt,map:new(Et||It),string:new Dt}}
function $t (line 1) | function $t(e){return Cn(this,e)["delete"](e)}
function Jt (line 1) | function Jt(e){return Cn(this,e).get(e)}
function Kt (line 1) | function Kt(e){return Cn(this,e).has(e)}
function Qt (line 1) | function Qt(e,t){return Cn(this,e).set(e,t),this}
function Gt (line 1) | function Gt(e){this.__data__=new It(e)}
function Yt (line 1) | function Yt(){this.__data__=new It}
function Zt (line 1) | function Zt(e){return this.__data__["delete"](e)}
function en (line 1) | function en(e){return this.__data__.get(e)}
function tn (line 1) | function tn(e){return this.__data__.has(e)}
function nn (line 1) | function nn(e,t){var n=this.__data__;if(n instanceof It){var i=n.__data_...
function rn (line 1) | function rn(e,t){var n=Rn(e)||qn(e)?K(e.length,String):[],r=n.length,i=!...
function sn (line 1) | function sn(e,t,n){var r=e[t];if(!ut.call(e,t)||!In(r,n)||n===undefined&...
function on (line 1) | function on(e,t){var n=e.length;while(n--)if(In(e[n][0],t))return n;retu...
function un (line 1) | function un(e,t){return e&&xn(t,Kn(t),e)}
function an (line 1) | function an(e,t,n,r,i,s,u){var a;r&&(a=s?r(e,i,s,u):r(e));if(a!==undefin...
function fn (line 1) | function fn(e){return $n(e)?dt(e):{}}
function ln (line 1) | function ln(e,t,n){var r=t(e);return Rn(e)?r:$(r,n(e))}
function cn (line 1) | function cn(e){return at.call(e)}
function hn (line 1) | function hn(e){if(!$n(e)||Hn(e))return!1;var t=Xn(e)||G(e)?ft:H;return t...
function pn (line 1) | function pn(e){if(!Bn(e))return bt(e);var t=[];for(var n in Object(e))ut...
function dn (line 1) | function dn(e,t){if(t)return e.slice();var n=new e.constructor(e.length)...
function vn (line 1) | function vn(e){var t=new e.constructor(e.byteLength);return(new ht(t)).s...
function mn (line 1) | function mn(e,t){var n=t?vn(e.buffer):e.buffer;return new e.constructor(...
function gn (line 1) | function gn(e,t,n){var r=t?n(Y(e),!0):Y(e);return J(r,W,new e.constructor)}
function yn (line 1) | function yn(e){var t=new e.constructor(e.source,P.exec(e));return t.last...
function bn (line 1) | function bn(e,t,n){var r=t?n(et(e),!0):et(e);return J(r,X,new e.construc...
function wn (line 1) | function wn(e){return _t?Object(_t.call(e)):{}}
function En (line 1) | function En(e,t){var n=t?vn(e.buffer):e.buffer;return new e.constructor(...
function Sn (line 1) | function Sn(e,t){var n=-1,r=e.length;t||(t=Array(r));while(++n<r)t[n]=e[...
function xn (line 1) | function xn(e,t,n,r){n||(n={});var i=-1,s=t.length;while(++i<s){var o=t[...
function Tn (line 1) | function Tn(e,t){return xn(e,Ln(e),t)}
function Nn (line 1) | function Nn(e){return ln(e,Kn,Ln)}
function Cn (line 1) | function Cn(e,t){var n=e.__data__;return Pn(t)?n[typeof t=="string"?"str...
function kn (line 1) | function kn(e,t){var n=Q(e,t);return hn(n)?n:undefined}
function On (line 1) | function On(e){var t=e.length,n=e.constructor(t);return t&&typeof e[0]==...
function Mn (line 1) | function Mn(e){return typeof e.constructor=="function"&&!Bn(e)?fn(pt(e))...
function _n (line 1) | function _n(e,t,n,r){var i=e.constructor;switch(t){case S:return vn(e);c...
function Dn (line 1) | function Dn(e,t){return t=t==null?s:t,!!t&&(typeof e=="number"||B.test(e...
function Pn (line 1) | function Pn(e){var t=typeof e;return t=="string"||t=="number"||t=="symbo...
function Hn (line 1) | function Hn(e){return!!st&&st in e}
function Bn (line 1) | function Bn(e){var t=e&&e.constructor,n=typeof t=="function"&&t.prototyp...
function jn (line 1) | function jn(e){if(e!=null){try{return ot.call(e)}catch(t){}try{return e+...
function Fn (line 1) | function Fn(e){return an(e,!1,!0)}
function In (line 1) | function In(e,t){return e===t||e!==e&&t!==t}
function qn (line 1) | function qn(e){return zn(e)&&ut.call(e,"callee")&&(!vt.call(e,"callee")|...
function Un (line 1) | function Un(e){return e!=null&&Vn(e.length)&&!Xn(e)}
function zn (line 1) | function zn(e){return Jn(e)&&Un(e)}
function Xn (line 1) | function Xn(e){var t=$n(e)?at.call(e):"";return t==c||t==h}
function Vn (line 1) | function Vn(e){return typeof e=="number"&&e>-1&&e%1==0&&e<=s}
function $n (line 1) | function $n(e){var t=typeof e;return!!e&&(t=="object"||t=="function")}
function Jn (line 1) | function Jn(e){return!!e&&typeof e=="object"}
function Kn (line 1) | function Kn(e){return Un(e)?rn(e):pn(e)}
function Qn (line 1) | function Qn(){return[]}
function Gn (line 1) | function Gn(){return!1}
function y (line 1) | function y(e,t,n){var r=-1,i=e.length;t<0&&(t=-t>i?0:i+t),n=n>i?i:n,n<0&...
function b (line 1) | function b(e,t){return t=t==null?i:t,!!t&&(typeof e=="number"||d.test(e)...
function w (line 1) | function w(e,t,n){if(!C(n))return!1;var r=typeof t;return(r=="number"?x(...
function E (line 1) | function E(e,t,n){var r=e?e.length:0;return r?(n&&typeof n!="number"&&w(...
function S (line 1) | function S(e,t){return e===t||e!==e&&t!==t}
function x (line 1) | function x(e){return e!=null&&N(e.length)&&!T(e)}
function T (line 1) | function T(e){var t=C(e)?g.call(e):"";return t==u||t==a}
function N (line 1) | function N(e){return typeof e=="number"&&e>-1&&e%1==0&&e<=i}
function C (line 1) | function C(e){var t=typeof e;return!!e&&(t=="object"||t=="function")}
function k (line 1) | function k(e){return!!e&&typeof e=="object"}
function L (line 1) | function L(e){return typeof e=="symbol"||k(e)&&g.call(e)==f}
function A (line 1) | function A(e){if(!e)return e===0?e:0;e=M(e);if(e===r||e===-r){var t=e<0?...
function O (line 1) | function O(e){var t=A(e),n=t%1;return t===t?n?t-n:t:0}
function M (line 1) | function M(e){if(typeof e=="number")return e;if(L(e))return o;if(C(e)){v...
function v (line 1) | function v(e){if(e instanceof v)return e;if(!(this instanceof v))return ...
function g (line 1) | function g(e,t,n){if(t===void 0)return e;switch(n==null?3:n){case 1:retu...
function y (line 1) | function y(e,t,n){return e==null?Fn:wn(e)?g(e,t,n):yn(e)&&!gn(e)?zn(e):R...
function b (line 1) | function b(e,t){return y(e,t,Infinity)}
function w (line 1) | function w(e,t,n){return v.iteratee!==b?v.iteratee(e,t):y(e,t,n)}
function E (line 1) | function E(e,t){return t=t==null?e.length-1:+t,function(){var n=Math.max...
function S (line 1) | function S(e){if(!yn(e))return{};if(c)return c(e);d.prototype=e;var t=ne...
function x (line 1) | function x(e){return function(t){return t==null?void 0:t[e]}}
function T (line 1) | function T(e,t){return e!=null&&a.call(e,t)}
function N (line 1) | function N(e,t){var n=t.length;for(var r=0;r<n;r++){if(e==null)return vo...
function L (line 1) | function L(e){var t=k(e);return typeof t=="number"&&t>=0&&t<=C}
function A (line 1) | function A(e,t,n){t=g(t,n);var r,i;if(L(e))for(r=0,i=e.length;r<i;r++)t(...
function O (line 1) | function O(e,t,n){t=w(t,n);var r=!L(e)&&Xt(e),i=(r||e).length,s=Array(i)...
function M (line 1) | function M(e){var t=function(t,n,r,i){var s=!L(t)&&Xt(t),o=(s||t).length...
function P (line 1) | function P(e,t,n){var r=L(e)?bt:tn,i=r(e,t,n);if(i!==void 0&&i!==-1)retu...
function H (line 1) | function H(e,t,n){var r=[];return t=w(t,n),A(e,function(e,n,i){t(e,n,i)&...
function B (line 1) | function B(e,t,n){return H(e,jt(w(t)),n)}
function j (line 1) | function j(e,t,n){t=w(t,n);var r=!L(e)&&Xt(e),i=(r||e).length;for(var s=...
function F (line 1) | function F(e,t,n){t=w(t,n);var r=!L(e)&&Xt(e),i=(r||e).length;for(var s=...
function I (line 1) | function I(e,t,n,r){L(e)||(e=$t(e));if(typeof n!="number"||r)n=0;return ...
function R (line 1) | function R(e,t){return O(e,Rn(t))}
function U (line 1) | function U(e,t){return H(e,zn(t))}
function z (line 1) | function z(e,t){return P(e,zn(t))}
function W (line 1) | function W(e,t,n){var r=-Infinity,i=-Infinity,s,o;if(t==null||typeof t==...
function X (line 1) | function X(e,t,n){var r=Infinity,i=Infinity,s,o;if(t==null||typeof t=="n...
function V (line 1) | function V(e){return $(e,Infinity)}
function $ (line 1) | function $(e,t,n){if(t==null||n)return L(e)||(e=$t(e)),e[Xn(e.length-1)]...
function J (line 1) | function J(e,t,n){var r=0;return t=w(t,n),R(O(e,function(e,n,i){return{v...
function K (line 1) | function K(e,t){return function(n,r,i){var s=t?[[],[]]:{};return r=w(r,i...
function et (line 1) | function et(e){return e?gn(e)?o.call(e):En(e)?e.match(Z):L(e)?O(e,Fn):$t...
function tt (line 1) | function tt(e){return e==null?0:L(e)?e.length:Xt(e).length}
function rt (line 1) | function rt(e,t,n){return e==null||e.length<1?t==null?void 0:[]:t==null|...
function it (line 1) | function it(e,t,n){return o.call(e,0,Math.max(0,e.length-(t==null||n?1:t...
function st (line 1) | function st(e,t,n){return e==null||e.length<1?t==null?void 0:[]:t==null|...
function ot (line 1) | function ot(e,t,n){return o.call(e,t==null||n?1:t)}
function ut (line 1) | function ut(e){return H(e,Boolean)}
function at (line 1) | function at(e,t,n,r){r=r||[];var i=r.length;for(var s=0,o=k(e);s<o;s++){...
function ft (line 1) | function ft(e,t){return at(e,t,!1)}
function ct (line 1) | function ct(e,t,n,r){Pn(t)||(r=n,n=t,t=!1),n!=null&&(n=w(n,r));var i=[],...
function pt (line 1) | function pt(e){var t=[],n=arguments.length;for(var r=0,i=k(e);r<i;r++){v...
function vt (line 1) | function vt(e){var t=e&&W(e,k).length||0,n=Array(t);for(var r=0;r<t;r++)...
function gt (line 1) | function gt(e,t){var n={};for(var r=0,i=k(e);r<i;r++)t?n[e[r]]=t[r]:n[e[...
function yt (line 1) | function yt(e){return function(t,n,r){n=w(n,r);var i=k(t),s=e>0?0:i-1;fo...
function Et (line 1) | function Et(e,t,n,r){n=w(n,r,1);var i=n(t),s=0,o=k(e);while(s<o){var u=M...
function St (line 1) | function St(e,t,n){return function(r,i,s){var u=0,a=k(r);if(typeof s=="n...
function Nt (line 1) | function Nt(e,t,n){t==null&&(t=e||0,e=0),n||(n=t<e?-1:1);var r=Math.max(...
function Ct (line 1) | function Ct(e,t){if(t==null||t<1)return[];var n=[],r=0,i=e.length;while(...
function kt (line 1) | function kt(e,t,n,r,i){if(r instanceof t){var s=S(e.prototype),o=e.apply...
function Mt (line 1) | function Mt(e,t){var n=function(r){var i=n.cache,s=""+(t?t.apply(this,ar...
function Pt (line 1) | function Pt(e,t,n){var r,i,s,o,u=0;n||(n={});var a=function(){u=n.leadin...
function Ht (line 1) | function Ht(e,t,n){var r,i,s=function(t,n){r=null,n&&(i=e.apply(t,n))},o...
function Bt (line 1) | function Bt(e,t){return At(t,e)}
function jt (line 1) | function jt(e){return function(){return!e.apply(this,arguments)}}
function Ft (line 1) | function Ft(){var e=arguments,t=e.length-1;return function(){var n=t,r=e...
function It (line 1) | function It(e,t){return function(){if(--e<1)return t.apply(this,argument...
function qt (line 1) | function qt(e,t){var n;return function(){return--e>0&&(n=t.apply(this,ar...
function Wt (line 1) | function Wt(e,t){var n=zt.length,i=e.constructor,s=wn(i)&&i.prototype||r...
function Xt (line 1) | function Xt(e){if(!yn(e))return[];if(l)return l(e);var t=[];for(var n in...
function Vt (line 1) | function Vt(e){if(!yn(e))return[];var t=[];for(var n in e)t.push(n);retu...
function $t (line 1) | function $t(e){var t=Xt(e),n=t.length,r=Array(n);for(var i=0;i<n;i++)r[i...
function Jt (line 1) | function Jt(e,t,n){t=w(t,n);var r=Xt(e),i=r.length,s={};for(var o=0;o<i;...
function Kt (line 1) | function Kt(e){var t=Xt(e),n=t.length,r=Array(n);for(var i=0;i<n;i++)r[i...
function Qt (line 1) | function Qt(e){var t={},n=Xt(e);for(var r=0,i=n.length;r<i;r++)t[e[n[r]]...
function Gt (line 1) | function Gt(e){var t=[];for(var n in e)wn(e[n])&&t.push(n);return t.sort()}
function Yt (line 1) | function Yt(e,t){return function(n){var r=arguments.length;t&&(n=Object(...
function tn (line 1) | function tn(e,t,n){t=w(t,n);var r=Xt(e),i;for(var s=0,o=r.length;s<o;s++...
function nn (line 1) | function nn(e,t,n){return t in n}
function un (line 1) | function un(e,t){var n=S(e);return t&&en(n,t),n}
function an (line 1) | function an(e){return yn(e)?gn(e)?e.slice():Zt({},e):e}
function fn (line 1) | function fn(e,t){return t(e),e}
function ln (line 1) | function ln(e,t){var n=Xt(t),r=n.length;if(e==null)return!r;var i=Object...
function cn (line 1) | function cn(e,t,n,r){if(e===t)return e!==0||1/e===1/t;if(e==null||t==nul...
function hn (line 1) | function hn(e,t,n,r){e instanceof v&&(e=e._wrapped),t instanceof v&&(t=t...
function pn (line 1) | function pn(e,t){return cn(e,t)}
function dn (line 1) | function dn(e){return e==null?!0:L(e)&&(gn(e)||En(e)||bn(e))?e.length===...
function vn (line 1) | function vn(e){return!!e&&e.nodeType===1}
function mn (line 1) | function mn(e){return function(t){return u.call(t)==="[object "+e+"]"}}
function yn (line 1) | function yn(e){var t=typeof e;return t==="function"||t==="object"&&!!e}
function _n (line 1) | function _n(e){return!Cn(e)&&p(e)&&!h(parseFloat(e))}
function Dn (line 1) | function Dn(e){return Sn(e)&&h(e)}
function Pn (line 1) | function Pn(e){return e===!0||e===!1||u.call(e)==="[object Boolean]"}
function Hn (line 1) | function Hn(e){return e===null}
function Bn (line 1) | function Bn(e){return e===void 0}
function jn (line 1) | function jn(e,t){if(!gn(t))return T(e,t);var n=t.length;for(var r=0;r<n;...
function Fn (line 1) | function Fn(e){return e}
function In (line 1) | function In(e){return function(){return e}}
function qn (line 1) | function qn(){}
function Rn (line 1) | function Rn(e){return gn(e)?function(t){return N(t,e)}:x(e)}
function Un (line 1) | function Un(e){return e==null?function(){}:function(t){return gn(t)?N(e,...
function zn (line 1) | function zn(e){return e=en({},e),function(t){return ln(t,e)}}
function Wn (line 1) | function Wn(e,t,n){var r=Array(Math.max(0,e));t=g(t,n,1);for(var i=0;i<e...
function Xn (line 1) | function Xn(e,t){return t==null&&(t=e,e=0),e+Math.floor(Math.random()*(t...
function Kn (line 1) | function Kn(e){var t=function(t){return e[t]},n="(?:"+Xt(e).join("|")+")...
function Yn (line 1) | function Yn(e,t,n){gn(t)||(t=[t]);var r=t.length;if(!r)return wn(n)?n.ca...
function er (line 1) | function er(e){var t=++Zn+"";return e?e+t:t}
function or (line 1) | function or(e,t,n){!t&&n&&(t=n),t=on({},t,v.templateSettings);var r=RegE...
function ur (line 1) | function ur(e){var t=v(e);return t._chain=!0,t}
function ar (line 1) | function ar(e,t){return e._chain?v(t).chain():t}
function fr (line 1) | function fr(e){return A(Gt(e),function(t){var n=v[t]=e[t];v.prototype[t]...
function N (line 1) | function N(e,t,n){var i,s;return t?(i="",s=c.validNames):(i="unstable ",...
function C (line 1) | function C(e){return Object.prototype.toString.call(e)==="[object String]"}
function k (line 1) | function k(e,t){return e?!e.identifier||e.value!==t?!1:!0:!1}
function L (line 1) | function L(e,t){if(!t.reserved)return!1;var n=t.meta;if(n&&n.isFutureRes...
function A (line 1) | function A(e,t){return e.replace(/\{([^{}]*)\}/g,function(e,n){var r=t[n...
function O (line 1) | function O(e,t){Object.keys(t).forEach(function(n){if(r.has(v.blacklist,...
function M (line 1) | function M(){if(f.option.enforceall){for(var e in c.bool.enforcing)f.opt...
function D (line 1) | function D(){var e=null;M(),e=f.inferEsVersion(),e&&P("E059",f.tokens.ne...
function P (line 1) | function P(e,t,n,r){var i=Math.floor(t.line/f.lines.length*100),s=o.erro...
function H (line 1) | function H(){var e=f.ignoredLines;if(r.isEmpty(e))return;v.errors=r.reje...
function B (line 1) | function B(e,t,n,r,i,s){var u,a,l,c;if(/^W\d{3}$/.test(e)){if(f.ignored[...
function j (line 1) | function j(e,t,n,r,i,s,o){return B(e,{line:t,from:n},r,i,s,o)}
function F (line 1) | function F(e,t,n,r,i,s){B(e,t,n,r,i,s)}
function I (line 1) | function I(e,t,n,r,i,s,o){return F(e,{line:t,from:n},r,i,s,o)}
function q (line 1) | function q(e,t){v.internals.push({id:"(internal)",elem:e,token:t,code:t....
function R (line 1) | function R(e,t){var i=e.body.split(",").map(function(e){return e.trim()}...
function U (line 1) | function U(e){var t=e||0,n=y.length,r;if(t<n)return y[t];while(n<=t){r=b...
function z (line 1) | function z(){var e=0,t;do t=U(e++);while(t.id==="(endline)");return t}
function W (line 1) | function W(e,t){var n=f.tokens.next;e&&n.id!==e&&(t?n.id==="(end)"?F("E0...
function X (line 1) | function X(e){return e.first||e.right||e.left||e.id==="yield"||e.id==="a...
function V (line 1) | function V(e,t,n){return arguments.length<=1&&(t=f.tokens.curr,n=f.token...
function $ (line 1) | function $(e,t){var n,r=!1,i=!1,s=e&p.initial,o;e&=~p.initial,f.nameStac...
function J (line 1) | function J(e,t){return e.line===(t.startLine||t.line)}
function K (line 1) | function K(e,t){!f.option.laxbreak&&!J(e,t)&&B("W014",t,t.value)}
function Q (line 1) | function Q(e){e=e,J(e,f.tokens.next)||B("E022",e,e.value)}
function G (line 1) | function G(e){var t=f.tokens.prev,n=f.tokens.curr;e=e||{},J(t,n)||f.opti...
function Y (line 1) | function Y(e,t){var n=f.syntax[e];if(!n||typeof n!="object")f.syntax[e]=...
function Z (line 1) | function Z(e){var t=Y(e,0);return t.delim=!0,t}
function et (line 1) | function et(e,t){var n=Z(e);return n.identifier=n.reserved=!0,n.fud=t,n}
function tt (line 1) | function tt(e,t){var n=et(e,t);return n.block=!0,n}
function nt (line 1) | function nt(e){var t=e.id.charAt(0);if(t>="a"&&t<="z"||t>="A"&&t<="Z")e....
function rt (line 1) | function rt(e,t){var n=Y(e,150);return nt(n),n.nud=typeof t=="function"?...
function it (line 1) | function it(e,t){var n=Y(e,0);return n.type=e,n.nud=t,n}
function st (line 1) | function st(e,t){var n=it(e,t);return n.identifier=!0,n.reserved=!0,n}
function ot (line 1) | function ot(e,t){var n=it(e,f.syntax["(identifier)"].nud);return t=t||{}...
function ut (line 1) | function ut(e,t,n,r){var i=Y(e,n);return nt(i),i.infix=!0,i.led=function...
function at (line 1) | function at(e){var t=Y(e,42);return t.infix=!0,t.led=function(e,t){retur...
function ft (line 1) | function ft(e,t){var n=Y(e,100);return n.infix=!0,n.led=function(e,n){K(...
function lt (line 1) | function lt(e){return e.arity==="unary"&&e.id!=="++"&&e.id!=="--"}
function ht (line 1) | function ht(e,t,n){var i;return n.option.notypeof?!1:!e||!t?!1:(i=n.inES...
function pt (line 1) | function pt(e,t){var n=!1;return e.type==="this"&&t.funct["(context)"]==...
function dt (line 1) | function dt(e){function n(e){if(typeof e!="object")return;return e.right...
function vt (line 1) | function vt(e,t,n,r){var i=r&&r.allowDestructuring;n=n||t;if(f.option.fr...
function mt (line 1) | function mt(e,t){var n=ut(e,typeof t=="function"?t:function(e,t,n){retur...
function gt (line 1) | function gt(e,t,n){var r=Y(e,n);return nt(r),r.infix=!0,r.led=typeof t==...
function yt (line 1) | function yt(e){return Y(e,20).exps=!0,ut(e,function(e,t,n){return f.opti...
function bt (line 1) | function bt(e){var t=Y(e,150);return t.led=function(e,t){return f.option...
function wt (line 1) | function wt(e,t,n){if(!f.tokens.next.identifier)return;n||W();var r=f.to...
function Et (line 1) | function Et(e){if(!cn(f.tokens.next,"..."))return!1;f.inES6(!0)||B("W119...
function St (line 1) | function St(e,t){var n=wt(e,t,!1);if(n)return n;F("E030",f.tokens.next,f...
function xt (line 1) | function xt(e){var t=0,n;if(f.tokens.next.id!==";"||e.inBracelessBlock)r...
function Tt (line 1) | function Tt(e){if(f.tokens.next.id!==";"){if(f.tokens.next.isUnclosed)re...
function Nt (line 1) | function Nt(e){var t=g,n,r=f.tokens.next,i=!1;e|=p.initial;if(r.id===";"...
function Ct (line 1) | function Ct(e){var t=[],n;while(!f.tokens.next.reach&&f.tokens.next.id!=...
function kt (line 1) | function kt(){var e=f.tokens.next;while(f.tokens.next.id==="(string)"){v...
function Lt (line 1) | function Lt(e,t,n,r,i,s){var o,u=m,a=g,l,c,h;m=t,c=f.tokens.next;var d=f...
function At (line 1) | function At(e){E&&typeof E[e]!="boolean"&&B("W036",f.tokens.curr,e),type...
function _t (line 1) | function _t(e,t){var n=Object.create(null),r,i,s,o,u,a;f.tokens.next.val...
function Dt (line 1) | function Dt(e,t,n,r){r&&(f.inES6()||B("W119",f.tokens.curr,"function*","...
function Pt (line 1) | function Pt(e){var t=f.tokens.next,n=-1,r;do t.value==="("?e+=1:t.value=...
function Ht (line 1) | function Ht(e){var t={};t.exps=!0,f.funct["(comparray)"].stack();var n=!...
function Bt (line 1) | function Bt(){return!!f.funct["(method)"]}
function jt (line 1) | function jt(e,t){var n,r=!0;return typeof t=="object"?n=t:(r=t,n=wt(e,!0...
function Ft (line 1) | function Ft(e,t){function d(e){f.funct["(scope)"].addParam.apply(f.funct...
function It (line 1) | function It(e,t,n){var i={"(name)":e,"(breakage)":0,"(loopage)":0,"(isSt...
function qt (line 1) | function qt(e){return e["(global)"]&&!e["(verb)"]}
function Rt (line 1) | function Rt(e,t){function o(){if(f.tokens.curr.template&&f.tokens.curr.t...
function Ut (line 1) | function Ut(e,t){var n,r,i,s,o,u,a,l,c,h=f.option,v=f.ignored,m=e&p.preA...
function zt (line 1) | function zt(e){return{statementCount:0,nestedBlockDepth:-1,ComplexityCou...
function Wt (line 1) | function Wt(){f.funct["(metrics)"].ComplexityCount+=1}
function Xt (line 1) | function Xt(e){if(!e||e.paren)return;if(e.id===","){Xt(e.right);return}s...
function Vt (line 1) | function Vt(e){if(f.inES5())for(var t in e)e[t]&&e[t].setterToken&&!e[t]...
function $t (line 1) | function $t(e,t,n){if(cn(f.tokens.next,".")){var r=f.tokens.curr.id;W("....
function Jt (line 1) | function Jt(e,t){var n=t&&t.assignment;return e&=~p.noin,f.inES6()||B("W...
function Kt (line 1) | function Kt(e,t){var n,r,i=[],s=t&&t.openingParsed,o=t&&t.assignment,u=o...
function Qt (line 1) | function Qt(e,t){var n=t.first;if(!n)return;r.zip(e,Array.isArray(n)?n:[...
function Gt (line 1) | function Gt(e,t,n){var i=n&p.noin,s=n&p.export,o=e==="let",u=e==="const"...
function Zt (line 1) | function Zt(){return f.tokens.next.id==="("&&f.inMoz()}
function rn (line 1) | function rn(e,t){return e==="call"&&t["(async)"]?!1:e==="property"&&t["(...
function un (line 1) | function un(e,t,n,r,i,s){n.identifier&&(t=n.value);var o=t;r&&i&&(o="sta...
function an (line 1) | function an(e,t,n,r,i,s){var o=e==="get"?"getterToken":"setterToken",u=n...
function fn (line 1) | function fn(e){W("["),f.tokens.curr.delim=!0,f.tokens.curr.lbp=0,f.inES6...
function ln (line 1) | function ln(e,t){return e.type==="(punctuator)"?r.includes(t,e.value):!1}
function cn (line 1) | function cn(e,t){return e.type==="(punctuator)"&&e.value===t}
function hn (line 1) | function hn(e){var t=on();t.notJson?(!f.inES6()&&t.isDestAssign&&B("W104...
function dn (line 1) | function dn(){function e(){var e={},t=f.tokens.next;W("{");if(f.tokens.n...
function vn (line 1) | function vn(e,t,n){var r,i,s,o;for(i=0;i<e.length;i+=1){o=e[i],t.scope=o...
function i (line 1) | function i(){W("(");if(ln(f.tokens.next,["[","{"])){var t=Jt(e);r.each(t...
function i (line 1) | function i(e){var t=n.variables.filter(function(t){if(t.value===e)return...
function s (line 1) | function s(e){var t=n.variables.filter(function(t){if(t.value===e&&!t.un...
function M (line 1) | function M(e,t){if(!e)return;!Array.isArray(e)&&typeof e=="object"&&(e=O...
method isJSON (line 1) | get isJSON(){return f.jsonMode}
function v (line 1) | function v(e){return/^[0-9a-fA-F]+$/.test(e)}
function m (line 1) | function m(e){return e.length===1&&v(e)}
function g (line 1) | function g(){var e=[];return{push:function(t){e.push(t)},check:function(...
function y (line 1) | function y(e){var t=e;typeof t=="string"&&(t=t.replace(/\r\n/g,"\n").rep...
function a (line 1) | function a(e,t,n){var r=["jshint","jshint.unstable","jslint","members","...
function u (line 1) | function u(e){return l.indexOf(e)>-1}
function d (line 1) | function d(e){return u(e)||c.indexOf(e)>-1}
function b (line 1) | function b(e){return e.replace(/\\u([0-9a-fA-F]{4})/g,function(e,t){retu...
function f (line 1) | function f(e){return/^[0-9]$/.test(e)}
function l (line 1) | function l(e){return/^[0-7]$/.test(e)}
function c (line 1) | function c(e){return/^[01]$/.test(e)}
function h (line 1) | function h(e){return e==="$"||e==="_"||e==="\\"||e>="a"&&e<="z"||e>="A"&...
function r (line 1) | function r(){this._stack=[]}
function f (line 1) | function f(e){u={"(bindings)":Object.create(null),"(usages)":Object.crea...
function v (line 1) | function v(e,t){d.emit("warning",{code:e,token:t,data:r.slice(arguments,...
function m (line 1) | function m(e,t){d.emit("warning",{code:e,token:t,data:r.slice(arguments,...
function g (line 1) | function g(e){u["(usages)"][e]||(u["(usages)"][e]={"(modified)":[],"(rea...
function w (line 1) | function w(){if(u["(type)"]==="functionparams"){E();return}var e=u["(bin...
function E (line 1) | function E(){var t=u["(params)"];if(!t)return;var n=t.pop(),r;while(n){v...
function S (line 1) | function S(e){for(var t=a.length-1;t>=0;--t){var n=a[t]["(bindings)"];if...
function x (line 1) | function x(e){for(var t=a.length-1;t>=0;t--){var n=a[t];if(n["(usages)"]...
function T (line 1) | function T(t,n){if(e.option.shadow!=="outer")return;var r=l["(type)"]===...
function N (line 1) | function N(t,n,r){var i;e.option.latedef&&(i=t==="function"||t==="genera...
function i (line 1) | function i(e,t){if(e===t)return 0;var n=e.length,r=t.length;for(var i=0,...
function s (line 1) | function s(e){return n.Buffer&&typeof n.Buffer.isBuffer=="function"?n.Bu...
function l (line 1) | function l(e){return Object.prototype.toString.call(e)}
function c (line 1) | function c(e){return s(e)?!1:typeof n.ArrayBuffer!="function"?!1:typeof ...
function d (line 1) | function d(e){if(!o.isFunction(e))return;if(f)return e.name;var t=e.toSt...
function v (line 1) | function v(e,t){return typeof e=="string"?e.length<t?e:e.slice(0,t):e}
function m (line 1) | function m(e){if(f||!o.isFunction(e))return o.inspect(e);var t=d(e),n=t?...
function g (line 1) | function g(e){return v(m(e.actual),128)+" "+e.operator+" "+v(m(e.expecte...
function y (line 1) | function y(e,t,n,r,i){throw new h.AssertionError({message:n,actual:e,exp...
function b (line 1) | function b(e,t){e||y(e,!0,t,"==",h.ok)}
function w (line 1) | function w(e,t,n,r){if(e===t)return!0;if(s(e)&&s(t))return i(e,t)===0;if...
function E (line 1) | function E(e){return Object.prototype.toString.call(e)=="[object Argumen...
function S (line 1) | function S(e,t,n,r){if(e===null||e===undefined||t===null||t===undefined)...
function x (line 1) | function x(e,t,n){w(e,t,!0)&&y(e,t,n,"notDeepStrictEqual",x)}
function T (line 1) | function T(e,t){if(!e||!t)return!1;if(Object.prototype.toString.call(t)=...
function N (line 1) | function N(e){var t;try{e()}catch(n){t=n}return t}
function C (line 1) | function C(e,t,n,r){var i;if(typeof t!="function")throw new TypeError('"...
function k (line 1) | function k(e,t){e||y(e,!0,t,"==",k)}
function u (line 1) | function u(e,t){var r={seen:[],stylize:f};return arguments.length>=3&&(r...
function a (line 1) | function a(e,t){var n=u.styles[t];return n?"["+u.colors[n][0]+"m"+e+"[...
function f (line 1) | function f(e,t){return e}
function l (line 1) | function l(e){var t={};return e.forEach(function(e,n){t[e]=!0}),t}
function c (line 1) | function c(e,t,r){if(e.customInspect&&t&&A(t.inspect)&&t.inspect!==n.ins...
function h (line 1) | function h(e,t){if(T(t))return e.stylize("undefined","undefined");if(S(t...
function p (line 1) | function p(e){return"["+Error.prototype.toString.call(e)+"]"}
function d (line 1) | function d(e,t,n,r,i){var s=[];for(var o=0,u=t.length;o<u;++o)H(t,String...
function v (line 1) | function v(e,t,n,r,i,s){var o,u,a;a=Object.getOwnPropertyDescriptor(t,i)...
function m (line 1) | function m(e,t,n){var r=0,i=e.reduce(function(e,t){return r++,t.indexOf(...
function g (line 1) | function g(e){return Array.isArray(e)}
function y (line 1) | function y(e){return typeof e=="boolean"}
function b (line 1) | function b(e){return e===null}
function w (line 1) | function w(e){return e==null}
function E (line 1) | function E(e){return typeof e=="number"}
function S (line 1) | function S(e){return typeof e=="string"}
function x (line 1) | function x(e){return typeof e=="symbol"}
function T (line 1) | function T(e){return e===void 0}
function N (line 1) | function N(e){return C(e)&&M(e)==="[object RegExp]"}
function C (line 1) | function C(e){return typeof e=="object"&&e!==null}
function k (line 1) | function k(e){return C(e)&&M(e)==="[object Date]"}
function L (line 1) | function L(e){return C(e)&&(M(e)==="[object Error]"||e instanceof Error)}
function A (line 1) | function A(e){return typeof e=="function"}
function O (line 1) | function O(e){return e===null||typeof e=="boolean"||typeof e=="number"||...
function M (line 1) | function M(e){return Object.prototype.toString.call(e)}
function _ (line 1) | function _(e){return e<10?"0"+e.toString(10):e.toString(10)}
function P (line 1) | function P(){var e=new Date,t=[_(e.getHours()),_(e.getMinutes()),_(e.get...
function H (line 1) | function H(e,t){return Object.prototype.hasOwnProperty.call(e,t)}
function o (line 1) | function o(){if(!s){if(t.throwDeprecation)throw new Error(i);t.traceDepr...
function o (line 1) | function o(){if(!this._events||!Object.prototype.hasOwnProperty.call(thi...
function c (line 1) | function c(e){return e._maxListeners===undefined?o.defaultMaxListeners:e...
function h (line 1) | function h(e,t,n){if(t)e.call(n);else{var r=e.length,i=x(e,r);for(var s=...
function p (line 1) | function p(e,t,n,r){if(t)e.call(n,r);else{var i=e.length,s=x(e,i);for(va...
function d (line 1) | function d(e,t,n,r,i){if(t)e.call(n,r,i);else{var s=e.length,o=x(e,s);fo...
function v (line 1) | function v(e,t,n,r,i,s){if(t)e.call(n,r,i,s);else{var o=e.length,u=x(e,o...
function m (line 1) | function m(e,t,n,r){if(t)e.apply(n,r);else{var i=e.length,s=x(e,i);for(v...
function g (line 1) | function g(e,t,n,i){var s,o,u;if(typeof n!="function")throw new TypeErro...
function y (line 1) | function y(){if(!this.fired){this.target.removeListener(this.type,this.w...
function b (line 1) | function b(e,t,n){var r={fired:!1,wrapFn:undefined,target:e,type:t,liste...
function w (line 1) | function w(e,t,n){var r=e._events;if(!r)return[];var i=r[t];return i?typ...
function E (line 1) | function E(e){var t=this._events;if(t){var n=t[e];if(typeof n=="function...
function S (line 1) | function S(e,t){for(var n=t,r=n+1,i=e.length;r<i;n+=1,r+=1)e[n]=e[r];e.p...
function x (line 1) | function x(e,t){var n=new Array(t);for(var r=0;r<t;++r)n[r]=e[r];return n}
function T (line 1) | function T(e){var t=new Array(e.length);for(var n=0;n<t.length;++n)t[n]=...
function N (line 1) | function N(e){var t=function(){};return t.prototype=e,new t}
function C (line 1) | function C(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.ca...
function k (line 1) | function k(e){var t=this;return function(){return t.apply(e,arguments)}}
function o (line 1) | function o(e){if(e===null||e===undefined)throw new TypeError("Object.ass...
function u (line 1) | function u(){try{if(!Object.assign)return!1;var e=new String("abc");e[5]...
function o (line 1) | function o(){throw new Error("setTimeout has not been defined")}
function u (line 1) | function u(){throw new Error("clearTimeout has not been defined")}
function a (line 1) | function a(e){if(i===setTimeout)return setTimeout(e,0);if((i===o||!i)&&s...
function f (line 1) | function f(e){if(s===clearTimeout)return clearTimeout(e);if((s===u||!s)&...
function d (line 1) | function d(){if(!c||!h)return;c=!1,h.length?l=h.concat(l):p=-1,l.length&...
function v (line 1) | function v(){if(c)return;var e=a(d);c=!0;var t=l.length;while(t){h=l,l=[...
function m (line 1) | function m(e,t){this.fun=e,this.array=t}
function g (line 1) | function g(){}
function startRegex (line 1) | function startRegex(e){return RegExp("^("+e.join("|")+")")}
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/worker-json.js
function t (line 1) | function t(e,t){var n=e,r="";while(n){var i=t[n];if(typeof i=="string")r...
function r (line 1) | function r(e,t){throw console.log("Invalid Delta:",e),"Invalid Delta: "+t}
function i (line 1) | function i(e,t){return t.row>=0&&t.row<e.length&&t.column>=0&&t.column<=...
function s (line 1) | function s(e,t){t.action!="insert"&&t.action!="remove"&&r(t,"delta.actio...
function e (line 1) | function e(e,t,n){var r=n?e.column<=t.column:e.column<t.column;return e....
function t (line 1) | function t(t,n,r){var i=t.action=="insert",s=(i?1:-1)*(t.end.row-t.start...
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/worker-lua.js
function t (line 1) | function t(e,t){var n=e,r="";while(n){var i=t[n];if(typeof i=="string")r...
function r (line 1) | function r(e,t){throw console.log("Invalid Delta:",e),"Invalid Delta: "+t}
function i (line 1) | function i(e,t){return t.row>=0&&t.row<e.length&&t.column>=0&&t.column<=...
function s (line 1) | function s(e,t){t.action!="insert"&&t.action!="remove"&&r(t,"delta.actio...
function e (line 1) | function e(e,t,n){var r=n?e.column<=t.column:e.column<t.column;return e....
function t (line 1) | function t(t,n,r){var i=t.action=="insert",s=(i?1:-1)*(t.end.row-t.start...
function m (line 1) | function m(e){if(mt){var t=vt.pop();t.complete(),n.locations&&(e.loc=t.l...
function w (line 1) | function w(e,t,n){for(var r=0,i=e.length;r<i;r++)if(e[r][t]===n)return r...
function E (line 1) | function E(e){var t=g.call(arguments,1);return e=e.replace(/%(\d)/g,func...
function S (line 1) | function S(){var e=g.call(arguments),t={},n,r;for(var i=0,s=e.length;i<s...
function x (line 1) | function x(e){var t=E.apply(null,g.call(arguments,1)),n,r;throw"undefine...
function T (line 1) | function T(e,t){x(t,d.expectedToken,e,t.value)}
function N (line 1) | function N(e,t){"undefined"==typeof t&&(t=A.value);if("undefined"!=typeo...
function P (line 1) | function P(){H();while(45===t.charCodeAt(C)&&45===t.charCodeAt(C+1))X(),...
function H (line 1) | function H(){while(C<r){var e=t.charCodeAt(C);if(Q(e))C++;else{if(!G(e))...
function B (line 1) | function B(){var e,n;while(tt(t.charCodeAt(++C)));return e=t.slice(M,C),...
function j (line 1) | function j(e){return C+=e.length,{type:l,value:e,line:_,lineStart:D,rang...
function F (line 1) | function F(){return C+=3,{type:p,value:"...",line:_,lineStart:D,range:[M...
function I (line 1) | function I(){var e=t.charCodeAt(C++),n=C,i="",s;while(C<r){s=t.charCodeA...
function q (line 1) | function q(){var e=V();return!1===e&&x(k,d.expected,"[",k.value),{type:o...
function R (line 1) | function R(){var e=t.charAt(C),n=t.charAt(C+1),r="0"===e&&"xX".indexOf(n...
function U (line 1) | function U(){var e=0,n=1,r=1,i,s,o,u;u=C+=2,Z(t.charCodeAt(C))||x({},d.m...
function z (line 1) | function z(){while(Y(t.charCodeAt(C)))C++;if("."===t.charAt(C)){C++;whil...
function W (line 1) | function W(){var e=C;switch(t.charAt(C)){case"n":return C++,"\n";case"r"...
function X (line 1) | function X(){M=C,C+=2;var e=t.charAt(C),i="",s=!1,o=C,u=D,a=_;"["===e&&(...
function V (line 1) | function V(){var e=0,n="",i=!1,s,o;C++;while("="===t.charAt(C+e))e++;if(...
function $ (line 1) | function $(){L=k,k=A,A=P()}
function J (line 1) | function J(e){return e===k.value?($(),!0):!1}
function K (line 1) | function K(e){e===k.value?$():x(k,d.expected,e,k.value)}
function Q (line 1) | function Q(e){return 9===e||32===e||11===e||12===e}
function G (line 1) | function G(e){return 10===e||13===e}
function Y (line 1) | function Y(e){return e>=48&&e<=57}
function Z (line 1) | function Z(e){return e>=48&&e<=57||e>=97&&e<=102||e>=65&&e<=70}
function et (line 1) | function et(e){return e>=65&&e<=90||e>=97&&e<=122||95===e}
function tt (line 1) | function tt(e){return e>=65&&e<=90||e>=97&&e<=122||95===e||e>=48&&e<=57}
function nt (line 1) | function nt(e){switch(e.length){case 2:return"do"===e||"if"===e||"in"===...
function rt (line 1) | function rt(e){return l===e.type?"#-~".indexOf(e.value)>=0:u===e.type?"n...
function it (line 1) | function it(e){switch(e.type){case"CallExpression":case"TableCallExpress...
function st (line 1) | function st(e){if(s===e.type)return!0;if(u!==e.type)return!1;switch(e.va...
function ft (line 1) | function ft(){ot.push(Array.apply(null,ot[ut++]))}
function lt (line 1) | function lt(){ot.pop(),ut--}
function ct (line 1) | function ct(e){if(-1!==b(ot[ut],e))return;ot[ut].push(e)}
function ht (line 1) | function ht(e){ct(e.name),pt(e,!0)}
function pt (line 1) | function pt(e,t){!t&&-1===w(at,"name",e.name)&&at.push(e),e.isLocal=t}
function dt (line 1) | function dt(e){return-1!==b(ot[ut],e)}
function gt (line 1) | function gt(){return new yt(k)}
function yt (line 1) | function yt(e){n.locations&&(this.loc={start:{line:e.line,column:e.range...
function bt (line 1) | function bt(){mt&&vt.push(gt())}
function wt (line 1) | function wt(e){mt&&vt.push(e)}
function Et (line 1) | function Et(){$(),bt();var e=St();return s!==k.type&&N(k),mt&&!e.length&...
function St (line 1) | function St(e){var t=[],r;n.scope&&ft();while(!st(k)){if("return"===k.va...
function xt (line 1) | function xt(){bt();if(u===k.type)switch(k.value){case"local":return $(),...
function Tt (line 1) | function Tt(){var e=k.value,t=Ht();return n.scope&&(ct("::"+e+"::"),pt(t...
function Nt (line 1) | function Nt(){return m(v.breakStatement())}
function Ct (line 1) | function Ct(){var e=k.value,t=Ht();return n.scope&&(t.isLabel=dt("::"+e+...
function kt (line 1) | function kt(){var e=St();return K("end"),m(v.doStatement(e))}
function Lt (line 1) | function Lt(){var e=qt();K("do");var t=St();return K("end"),m(v.whileSta...
function At (line 1) | function At(){var e=St();K("until");var t=qt();return m(v.repeatStatemen...
function Ot (line 1) | function Ot(){var e=[];if("end"!==k.value){var t=It();null!=t&&e.push(t)...
function Mt (line 1) | function Mt(){var e=[],t,n,r;mt&&(r=vt[vt.length-1],vt.push(r)),t=qt(),K...
function _t (line 1) | function _t(){var e=Ht(),t;n.scope&&ht(e);if(J("=")){var r=qt();K(",");v...
function Dt (line 1) | function Dt(){var e;if(a===k.type){var t=[],r=[];do e=Ht(),t.push(e);whi...
function Pt (line 1) | function Pt(){var e=k,t,n;mt&&(n=gt()),t=zt();if(null==t)return N(k);if(...
function Ht (line 1) | function Ht(){bt();var e=k.value;return a!==k.type&&T("<name>",k),$(),m(...
function Bt (line 1) | function Bt(e,t){var r=[];K("(");if(!J(")"))for(;;)if(a===k.type){var i=...
function jt (line 1) | function jt(){var e,t,r;mt&&(r=gt()),e=Ht(),n.scope&&pt(e,!1);while(J("....
function Ft (line 1) | function Ft(){var e=[],t,n;for(;;){bt();if(l===k.type&&J("["))t=qt(),K("...
function It (line 1) | function It(){var e=Ut(0);return e}
function qt (line 1) | function qt(){var e=It();if(null!=e)return e;T("<expression>",k)}
function Rt (line 1) | function Rt(e){var t=e.charCodeAt(0),n=e.length;if(1===n)switch(t){case ...
function Ut (line 1) | function Ut(e){var t=k.value,n,r;mt&&(r=gt());if(rt(k)){bt(),$();var i=U...
function zt (line 1) | function zt(){var e,t,r,i;mt&&(r=gt());if(a===k.type)t=k.value,e=Ht(),n....
function Wt (line 1) | function Wt(e){if(l===k.type)switch(k.value){case"(":$();var t=[],n=It()...
function Xt (line 1) | function Xt(){var e=o|f|c|h|p,n=k.value,r=k.type,i;mt&&(i=gt());if(r&e){...
function Vt (line 1) | function Vt(s,o){return"undefined"==typeof o&&"object"==typeof s&&(o=s,s...
function $t (line 1) | function $t(n){return t+=String(n),r=t.length,e}
function Jt (line 1) | function Jt(e){"undefined"!=typeof e&&$t(e),r=t.length,mt=n.locations||n...
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/worker-php.js
function t (line 1) | function t(e,t){var n=e,r="";while(n){var i=t[n];if(typeof i=="string")r...
function r (line 1) | function r(e,t){throw console.log("Invalid Delta:",e),"Invalid Delta: "+t}
function i (line 1) | function i(e,t){return t.row>=0&&t.row<e.length&&t.column>=0&&t.column<=...
function s (line 1) | function s(e,t){t.action!="insert"&&t.action!="remove"&&r(t,"delta.actio...
function e (line 1) | function e(e,t,n){var r=n?e.column<=t.column:e.column<t.column;return e....
function t (line 1) | function t(t,n,r){var i=t.action=="insert",s=(i?1:-1)*(t.end.row-t.start...
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/worker-tern.js
function setDefs (line 100) | function setDefs(defs) {
function getDefFromName (line 119) | function getDefFromName(name) {
function debug (line 132) | function debug(message) {
function s (line 214) | function s(o, u) {
function parse (line 335) | function parse(input, options) {
function parseExpressionAt (line 342) | function parseExpressionAt(input, pos, options) {
function tokenizer (line 348) | function tokenizer(input, options) {
function parser (line 352) | function parser(options, input) {
function isInAstralSet (line 1433) | function isInAstralSet(code, set) {
function isIdentifierStart (line 1447) | function isIdentifierStart(code, astral) {
function isIdentifierChar (line 1469) | function isIdentifierChar(code, astral) {
function defineProperties (line 1502) | function defineProperties(target, props) {
function Position (line 1542) | function Position(line, col) {
function getLineInfo (line 1568) | function getLineInfo(input, offset) {
function getOptions (line 1995) | function getOptions(opts) {
function pushComment (line 2013) | function pushComment(options, array) {
function Parser (line 2145) | function Parser(options, input, startPos) {
function codePointToString (line 3577) | function codePointToString(code) {
function binop (line 3823) | function binop(name, prec) {
function kw (line 3931) | function kw(name) {
function isArray (line 4019) | function isArray(obj) {
function has (line 4023) | function has(obj, propName) {
function isNewLine (line 4044) | function isNewLine(code) {
function s (line 4085) | function s(o, u) {
function parse_dammit (line 4170) | function parse_dammit(input, options) {
function isDummy (line 4809) | function isDummy(node) {
function LooseParser (line 4903) | function LooseParser(input, options) {
function isSpace (line 5404) | function isSpace(ch) {
function s (line 5566) | function s(o, u) {
function simple (line 5651) | function simple(node, visitors, base, state) {
function ancestor (line 5661) | function ancestor(node, visitors, base, state) {
function recursive (line 5676) | function recursive(node, state, funcs, base) {
function makeTest (line 5683) | function makeTest(test) {
function findNodeAt (line 5706) | function findNodeAt(node, start, end, test, base, state) {
function findNodeAround (line 5724) | function findNodeAround(node, pos, test, base, state) {
function findNodeAfter (line 5745) | function findNodeAfter(node, pos, test, base, state) {
function findNodeBefore (line 5766) | function findNodeBefore(node, pos, test, base, state) {
function make (line 5781) | function make(funcs, base) {
function skipThrough (line 5789) | function skipThrough(node, st, c) {
function ignore (line 5793) | function ignore(_node, _st, _c) {}
function on (line 5970) | function on(type, f) {
function off (line 5975) | function off(type, f) {
function signal (line 5984) | function signal(type, a1, a2, a3, a4) {
function File (line 6076) | function File(name, parent) {
function updateText (line 6085) | function updateText(file, text, srv) {
function doRequest (line 6184) | function doRequest(srv, doc, c) {
function analyzeFile (line 6233) | function analyzeFile(srv, file) {
function ensureFile (line 6243) | function ensureFile(srv, name, parent, text) {
function fetchAll (line 6278) | function fetchAll(srv, c) {
function waitOnFetch (line 6306) | function waitOnFetch(srv, timeBudget, c) {
function analyzeAll (line 6316) | function analyzeAll(srv, timeBudget, c) {
function firstLine (line 6364) | function firstLine(str) {
function findMatchingPosition (line 6370) | function findMatchingPosition(line, file, near) {
function scopeDepth (line 6382) | function scopeDepth(s) {
function ternError (line 6387) | function ternError(msg) {
function resolveFile (line 6393) | function resolveFile(srv, localFiles, name) {
function astSize (line 6475) | function astSize(node) {
function parentDepth (line 6485) | function parentDepth(srv, parent) {
function budgetName (line 6494) | function budgetName(srv, file) {
function chargeOnBudget (line 6503) | function chargeOnBudget(srv, file) {
function isPosition (line 6515) | function isPosition(val) {
function invalidDoc (line 6520) | function invalidDoc(doc) {
function findLineStart (line 6544) | function findLineStart(file, line) {
function asLineChar (line 6580) | function asLineChar(file, pos) {
function clean (line 6616) | function clean(obj) {
function maybeSet (line 6621) | function maybeSet(obj, prop, val) {
function compareCompletions (line 6627) | function compareCompletions(a, b) {
function isStringAround (line 6638) | function isStringAround(node, start, end) {
function pointInProp (line 6642) | function pointInProp(objNode, point) {
function findCompletions (line 6651) | function findCompletions(srv, query, file) {
function findProperties (line 6787) | function findProperties(srv, query) {
function findExprOrThrow (line 6824) | function findExprOrThrow(file, query, wide) {
function ensureObj (line 6830) | function ensureObj(tp) {
function findExprType (line 6835) | function findExprType(srv, query, file, expr) {
function findTypeAt (line 6864) | function findTypeAt(srv, query, file) {
function findDocs (line 6891) | function findDocs(srv, query, file) {
function storeTypeDocs (line 6904) | function storeTypeDocs(type, out) {
function findDef (line 6951) | function findDef(srv, query, file) {
function findRefsToVariable (line 6987) | function findRefsToVariable(srv, query, file, expr, checkShadowing) {
function findRefsToProperty (line 7035) | function findRefsToProperty(srv, query, expr, prop) {
function findRefs (line 7061) | function findRefs(srv, query, file) {
function buildRename (line 7081) | function buildRename(srv, query, file) {
function listFiles (line 7103) | function listFiles(srv) {
function hop (line 7142) | function hop(obj, prop) {
function unwrapType (line 7153) | function unwrapType(type, self, args) {
function extractProp (line 7157) | function extractProp(type, prop) {
function computedFunc (line 7169) | function computedFunc(args, retType) {
function computedUnion (line 7177) | function computedUnion(types) {
function computedArray (line 7185) | function computedArray(inner) {
function parseType (line 7374) | function parseType(spec, name, base, forceNew) {
function addEffect (line 7386) | function addEffect(fn, handler, replaceRet) {
function emptyObj (line 7502) | function emptyObj(ctor) {
function isSimpleAnnotation (line 7509) | function isSimpleAnnotation(spec) {
function passOne (line 7516) | function passOne(base, spec, path) {
function passTwo (line 7542) | function passTwo(base, spec, path) {
function copyInfo (line 7579) | function copyInfo(spec, type) {
function runPasses (line 7586) | function runPasses(type, arg) {
function doLoadEnvironment (line 7592) | function doLoadEnvironment(data, scope) {
function extend (line 7805) | function extend(proto, props) {
function similarAVal (line 7977) | function similarAVal(a, b, depth) {
function similarType (line 7984) | function similarType(a, b, depth) {
function canonicalType (line 8034) | function canonicalType(types) {
function Constraint (line 8079) | function Constraint() {}
function withDisabledComputing (line 8131) | function withDisabledComputing(fn, body) {
function registerProp (line 8517) | function registerProp(prop, obj) {
function objsWithProp (line 8522) | function objsWithProp(prop) {
function withWorklist (line 8604) | function withWorklist(f) {
function maybeInstantiate (line 8645) | function maybeInstantiate(scope, score) {
function nodeSmallerThan (line 8651) | function nodeSmallerThan(node, n) {
function maybeTagAsInstantiated (line 8666) | function maybeTagAsInstantiated(node, scope) {
function setFunctionInstantiated (line 8678) | function setFunctionInstantiated(node, scope) {
function maybeTagAsGeneric (line 8712) | function maybeTagAsGeneric(scope) {
function addVar (line 8758) | function addVar(scope, nameNode) {
function propName (line 8802) | function propName(node, scope, c) {
function unopResultType (line 8810) | function unopResultType(op) {
function binopIsBoolean (line 8826) | function binopIsBoolean(op) {
function literalType (line 8842) | function literalType(node) {
function ret (line 8858) | function ret(f) {
function fill (line 8866) | function fill(f) {
function infer (line 9055) | function infer(node, scope, c, out, name) {
function runPasses (line 9114) | function runPasses(passes, pass) {
function makePredicate (line 9166) | function makePredicate(origins, start, end) {
function findByPropertyName (line 9228) | function findByPropertyName(name) {
function findType (line 9320) | function findType(node, scope) {
function c (line 9383) | function c(node, st, override) {
function isSpace (line 9557) | function isSpace(ch) {
function onOwnLine (line 9561) | function onOwnLine(text, pos) {
function flattenPath (line 9660) | function flattenPath(path) {
function resolveName (line 9670) | function resolveName(name, data) {
function getRequire (line 9692) | function getRequire(data) {
function getModuleInterface (line 9703) | function getModuleInterface(data, exports) {
function getExports (line 9711) | function getExports(data) {
function getInterface (line 9717) | function getInterface(name, data) {
function getKnownModule (line 9743) | function getKnownModule(name, data) {
function getModule (line 9747) | function getModule(name, data) {
function stripJSExt (line 9758) | function stripJSExt(f) {
function interf (line 9789) | function interf(name) {
function parseExprNode (line 9825) | function parseExprNode(node) {
function preCondenseReach (line 9860) | function preCondenseReach(state) {
function postLoadDef (line 9870) | function postLoadDef(data) {
function resolvePath (line 10033) | function resolvePath(base, path) {
function resolveModule (line 10044) | function resolveModule(server, name) {
function getModule (line 10049) | function getModule(data, name) {
function exportsFromScope (line 10053) | function exportsFromScope(scope) {
function buildWrappingScope (line 10061) | function buildWrappingScope(parent, origin, node) {
function resolvePath (line 10290) | function resolvePath(base, path) {
function relativePath (line 10300) | function relativePath(from, to) {
function getModule (line 10306) | function getModule(data, name) {
function buildWrappingScope (line 10312) | function buildWrappingScope(parent, origin, node) {
function resolveModule (line 10327) | function resolveModule(server, name, _parent) {
function normPath (line 10365) | function normPath(name) {
function resolveProjectPath (line 10369) | function resolveProjectPath(server, pth) {
function preCondenseReach (line 10408) | function preCondenseReach(state) {
function postLoadDef (line 10420) | function postLoadDef(data) {
function findTypeAt (line 10432) | function findTypeAt(_file, _pos, expr, type) {
function findCompletions (line 10494) | function findCompletions(file, query) {
function completeModuleName (line 10524) | function completeModuleName(query, file, word) {
function resolveModulePath (line 10566) | function resolveModulePath(name, currentFile) {
function maybeSet (line 10598) | function maybeSet(obj, prop, val) {
function describe (line 10605) | function describe(aval) {
function postParse (line 13367) | function postParse(ast, text) {
function isDefinePropertyCall (line 13388) | function isDefinePropertyCall(node) {
function postInfer (line 13392) | function postInfer(ast, scope) {
function postLoadDef (line 13434) | function postLoadDef(data) {
function interpretComments (line 13444) | function interpretComments(node, comments, scope, aval, type) {
function skipSpace (line 13471) | function skipSpace(str, pos) {
function isIdentifier (line 13476) | function isIdentifier(string) {
function parseLabelList (line 13483) | function parseLabelList(scope, str, pos, close) {
function parseType (line 13515) | function parseType(scope, str, pos) {
function parseTypeInner (line 13546) | function parseTypeInner(scope, str, pos) {
function maybeInstance (line 13660) | function maybeInstance(type, path) {
function parseTypeOuter (line 13668) | function parseTypeOuter(scope, str, pos) {
function jsdocInterpretComments (line 13679) | function jsdocInterpretComments(node, scope, aval, comments) {
function jsdocParseTypedefs (line 13719) | function jsdocParseTypedefs(text, scope) {
function propagateWithWeight (line 13731) | function propagateWithWeight(type, target) {
function applyType (line 13736) | function applyType(type, self, args, ret, node, aval) {
function postParse (line 13805) | function postParse(ast) {
function complete (line 13814) | function complete(file, query) {
function Injector (line 13865) | function Injector() {
function globalInclude (line 13899) | function globalInclude(name) {
function getInclude (line 13904) | function getInclude(mod, name) {
function applyWithInjection (line 13911) | function applyWithInjection(mod, fnType, node, asNew) {
function arrayNodeToStrings (line 13967) | function arrayNodeToStrings(node) {
function moduleProto (line 13976) | function moduleProto(cx) {
function declareMod (line 13981) | function declareMod(name, includes) {
function postParse (line 14035) | function postParse(ast, text) {
function postLoadDef (line 14052) | function postLoadDef(json) {
function preCondenseReach (line 14082) | function preCondenseReach(state) {
function postCondenseReach (line 14102) | function postCondenseReach(state) {
function initServer (line 14116) | function initServer(server) {
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/worker-xml.js
function t (line 1) | function t(e,t){var n=e,r="";while(n){var i=t[n];if(typeof i=="string")r...
function r (line 1) | function r(e,t){throw console.log("Invalid Delta:",e),"Invalid Delta: "+t}
function i (line 1) | function i(e,t){return t.row>=0&&t.row<e.length&&t.column>=0&&t.column<=...
function s (line 1) | function s(e,t){t.action!="insert"&&t.action!="remove"&&r(t,"delta.actio...
function e (line 1) | function e(e,t,n){var r=n?e.column<=t.column:e.column<t.column;return e....
function t (line 1) | function t(t,n,r){var i=t.action=="insert",s=(i?1:-1)*(t.end.row-t.start...
function d (line 1) | function d(){}
function v (line 1) | function v(e,t,n,r,i){function s(e){if(e>65535){e-=65536;var t=55296+(e>...
function m (line 1) | function m(e,t){return t.lineNumber=e.lineNumber,t.columnNumber=e.column...
function g (line 1) | function g(e,t,n,r,i){var s,d,v=++t,m=o;for(;;){var g=e.charAt(v);switch...
function y (line 1) | function y(e,t,n){var r=e.tagName,i=null,s=n[n.length-1].currentNSMap,o=...
function b (line 1) | function b(e,t,n,r,i){if(/^(?:script|textarea)$/i.test(n)){var s=e.index...
function w (line 1) | function w(e,t,n,r){var i=r[n];return i==null&&(i=r[n]=e.lastIndexOf("</...
function E (line 1) | function E(e,t){for(var n in e)t[n]=e[n]}
function S (line 1) | function S(e,t,n,r){var i=e.charAt(t+2);switch(i){case"-":if(e.charAt(t+...
function x (line 1) | function x(e,t,n){var r=e.indexOf("?>",t);if(r){var i=e.substring(t,r).m...
function T (line 1) | function T(e){}
function N (line 1) | function N(e,t){return e.__proto__=t,e}
function C (line 1) | function C(e,t){var n,r=[],i=/'[^']+'|"[^"]+"|[^\s<>\/=]+=?|(\/?\s*>|<)/...
function n (line 1) | function n(){}
function r (line 1) | function r(e,t){for(var n in e)t[n]=e[n]}
function i (line 1) | function i(e,t){var n=function(){},i=e.prototype;if(Object.create){var s...
function B (line 1) | function B(e,t){if(t instanceof Error)var n=t;else n=this,Error.call(thi...
function j (line 1) | function j(){}
function F (line 1) | function F(e,t){this._node=e,this._refresh=t,I(this)}
function I (line 1) | function I(e){var t=e._node._inc||e._node.ownerDocument._inc;if(e._inc!=...
function q (line 1) | function q(){}
function R (line 1) | function R(e,t){var n=e.length;while(n--)if(e[n]===t)return n}
function U (line 1) | function U(e,t,n,r){r?t[R(t,r)]=n:t[t.length++]=n;if(e){n.ownerElement=e...
function z (line 1) | function z(e,t,n){var r=R(t,n);if(!(r>=0))throw new B(L,new Error);var i...
function W (line 1) | function W(e){this._features={};if(e)for(var t in e)this._features=e[t]}
function X (line 1) | function X(){}
function V (line 1) | function V(e){return e=="<"&&"<"||e==">"&&">"||e=="&"&&"&"||e=...
function $ (line 1) | function $(e,t){if(t(e))return!0;if(e=e.firstChild)do if($(e,t))return!0...
function J (line 1) | function J(){}
function K (line 1) | function K(e,t,n){e&&e._inc++;var r=n.namespaceURI;r=="http://www.w3.org...
function Q (line 1) | function Q(e,t,n,r){e&&e._inc++;var i=n.namespaceURI;i=="http://www.w3.o...
function G (line 1) | function G(e,t,n){if(e&&e._inc){e._inc++;var r=t.childNodes;if(n)r[r.len...
function Y (line 1) | function Y(e,t){var n=t.previousSibling,r=t.nextSibling;return n?n.nextS...
function Z (line 1) | function Z(e,t,n){var r=t.parentNode;r&&r.removeChild(t);if(t.nodeType==...
function et (line 1) | function et(e,t){var n=t.parentNode;if(n){var r=e.lastChild;n.removeChil...
function tt (line 1) | function tt(){this._nsMap={}}
function nt (line 1) | function nt(){}
function rt (line 1) | function rt(){}
function it (line 1) | function it(){}
function st (line 1) | function st(){}
function ot (line 1) | function ot(){}
function ut (line 1) | function ut(){}
function at (line 1) | function at(){}
function ft (line 1) | function ft(){}
function lt (line 1) | function lt(){}
function ct (line 1) | function ct(){}
function ht (line 1) | function ht(){}
function pt (line 1) | function pt(){}
function dt (line 1) | function dt(e,t){switch(e.nodeType){case u:var n=e.attributes,r=n.length...
function vt (line 1) | function vt(e,t,n){var r;switch(t.nodeType){case u:r=t.cloneNode(!1),r.o...
function mt (line 1) | function mt(e,t,n){var r=new t.constructor;for(var i in t){var s=t[i];ty...
function gt (line 1) | function gt(e,t,n){e[t]=n}
function yt (line 1) | function yt(e){switch(e.nodeType){case 1:case 11:var t=[];e=e.firstChild...
function s (line 1) | function s(e){this.options=e||{locator:{}}}
function o (line 1) | function o(e,t,n){function s(t){var s=e[t];if(!s)if(i)s=e.length==2?func...
function u (line 1) | function u(){this.cdata=!1}
function a (line 1) | function a(e,t){t.lineNumber=e.lineNumber,t.columnNumber=e.columnNumber}
function f (line 1) | function f(e){if(e)return"\n@"+(e.systemId||"")+"#[line:"+e.lineNumber+"...
function l (line 1) | function l(e,t,n){return typeof e=="string"?e.substr(t,n):e.length>=t+n|...
function c (line 1) | function c(e,t){e.currentElement?e.currentElement.appendChild(t):e.docum...
FILE: src/main/webapp/resources/ace/1.4.12/src-min-noconflict/worker-xquery.js
function t (line 1) | function t(e,t){var n=e,r="";while(n){var i=t[n];if(typeof i=="string")r...
function r (line 1) | function r(e,t){throw console.log("Invalid Delta:",e),"Invalid Delta: "+t}
function i (line 1) | function i(e,t){return t.row>=0&&t.row<e.length&&t.column>=0&&t.column<=...
function s (line 1) | function s(e,t){t.action!="insert"&&t.action!="remove"&&r(t,"delta.actio...
function e (line 1) | function e(e,t,n){var r=n?e.column<=t.column:e.column<t.column;return e....
function t (line 1) | function t(t,n,r){var i=t.action=="insert",s=(i?1:-1)*(t.end.row-t.start...
function o (line 1) | function o(u,a){if(!n[u]){if(!t[u]){var f=typeof e=="function"&&e;if(!a&...
function s (line 1) | function s(e,t,n){n=n||i;var r=[];for(var s=t-1;s>=0;s--){if(!n.test(e[s...
function o (line 1) | function o(e,t){var n=0,r=e.length-1,i=Math.floor((r+n)/2);while(r>n&&i>...
function r (line 1) | function r(e,t){E=t,S=e,x=e.length,s(0,0,0)}
function s (line 1) | function s(e,t,n){m=t,g=t,y=e,b=t,w=n,N=n,E.reset(S)}
function o (line 1) | function o(){E.startNonterminal("EQName",g);switch(y){case 80:f(80);brea...
function u (line 1) | function u(){E.startNonterminal("FunctionName",g);switch(y){case 17:f(17...
function a (line 1) | function a(){E.startNonterminal("NCName",g);switch(y){case 28:f(28);brea...
function f (line 1) | function f(e){y==e?(l(),E.terminal(i.TOKEN[y],b,w>x?x:w),m=b,g=w,y=0):d(...
function l (line 1) | function l(){g!=b&&(m=g,g=b,E.whitespace(m,g))}
function c (line 1) | function c(e){var t;for(;;){t=C(e);if(t!=30)break}return t}
function h (line 1) | function h(e){y==0&&(y=c(e),b=T,w=N)}
function p (line 1) | function p(e){y==0&&(y=C(e),b=T,w=N)}
function d (line 1) | function d(e,t,r,i,s){throw new n.ParseException(e,t,r,i,s)}
function C (line 1) | function C(e){var t=!1;T=N;var n=N,r=i.INITIAL[e],s=0;for(var o=r&4095;o...
function r (line 1) | function r(e,t){E=t,S=e,x=e.length,s(0,0,0)}
function s (line 1) | function s(e,t,n){m=t,g=t,y=e,b=t,w=n,N=n,E.reset(S)}
function o (line 1) | function o(){E.startNonterminal("EQName",g);switch(y){case 77:f(77);brea...
function u (line 1) | function u(){E.startNonterminal("FunctionName",g);switch(y){case 14:f(14...
function a (line 1) | function a(){E.startNonterminal("NCName",g);switch(y){case 26:f(26);brea...
function f (line 1) | function f(e){y==e?(l(),E.terminal(i.TOKEN[y],b,w>x?x:w),m=b,g=w,y=0):d(...
function l (line 1) | function l(){g!=b&&(m=g,g=b,E.whitespace(m,g))}
function c (line 1) | function c(e){var t;for(;;){t=C(e);if(t!=28)break}return t}
function h (line 1) | function h(e){y==0&&(y=c(e),b=T,w=N)}
function p (line 1) | function p(e){y==0&&(y=C(e),b=T,w=N)}
function d (line 1) | function d(e,t,r,i,s){throw new n.ParseException(e,t,r,i,s)}
function C (line 1) | function C(e){var t=!1;T=N;var n=N,r=i.INITIAL[e],s=0;for(var o=r&4095;o...
function f (line 1) | function f(e){return{name:e,children:[],getParent:null,pos:{sl:0,sc:0,el...
function l (line 1) | function l(e){var t=f(e);r===null?(r=t,r.index=[],i=t):(t.getParent=i,i....
function c (line 1) | function c(){if(i.children.length>0){var e=i.children[0],s=null;for(var ...
function h (line 1) | function h(e,t,n){var r=n-o;i.value=s.substring(0,r),s=s.substring(r),o=...
function r (line 1) | function r(e,t){ic=t,ac=e,fc=e.length,s(0,0,0)}
function s (line 1) | function s(e,t,n){Xl=t,Vl=t,$l=e,Jl=t,Kl=n,Ql=0,cc=n,ec=-1,sc={},ic.rese...
function o (line 1) | function o(){ic.startNonterminal("Module",Vl);switch($l){case 170:ql(168...
function u (line 1) | function u(){ic.startNonterminal("VersionDecl",Vl),Pl(170),Il(120);switc...
function a (line 1) | function a(){ic.startNonterminal("LibraryModule",Vl),f(),Il(142),jl(),l(...
function f (line 1) | function f(){ic.startNonterminal("ModuleDecl",Vl),Pl(185),Il(64),Pl(187)...
function l (line 1) | function l(){ic.startNonterminal("Prolog",Vl);for(;;){Il(277);switch($l)...
function c (line 1) | function c(){ic.startNonterminal("Separator",Vl),Pl(54),ic.endNontermina...
function h (line 1) | function h(){ic.startNonterminal("Setter",Vl);switch($l){case 109:ql(194...
function p (line 1) | function p(){ic.startNonterminal("BoundarySpaceDecl",Vl),Pl(109),Il(36),...
function d (line 1) | function d(){ic.startNonterminal("DefaultCollationDecl",Vl),Pl(109),Il(4...
function v (line 1) | function v(){Hl(109),Il(49),Hl(110),Il(41),Hl(95),Il(15),Hl(7)}
function m (line 1) | function m(){ic.startNonterminal("BaseURIDecl",Vl),Pl(109),Il(35),Pl(84)...
function g (line 1) | function g(){ic.startNonterminal("ConstructionDecl",Vl),Pl(109),Il(44),P...
function y (line 1) | function y(){ic.startNonterminal("OrderingModeDecl",Vl),Pl(109),Il(71),P...
function b (line 1) | function b(){ic.startNonterminal("EmptyOrderDecl",Vl),Pl(109),Il(49),Pl(...
function w (line 1) | function w(){Hl(109),Il(49),Hl(110),Il(70),Hl(205),Il(52),Hl(124),Il(125...
function E (line 1) | function E(){ic.startNonterminal("CopyNamespacesDecl",Vl),Pl(109),Il(47)...
function S (line 1) | function S(){ic.startNonterminal("PreserveMode",Vl);switch($l){case 218:...
function x (line 1) | function x(){ic.startNonterminal("InheritMode",Vl);switch($l){case 159:P...
function T (line 1) | function T(){ic.startNonterminal("DecimalFormatDecl",Vl),Pl(109),Il(118)...
function N (line 1) | function N(){ic.startNonterminal("DFPropertyName",Vl);switch($l){case 10...
function C (line 1) | function C(){ic.startNonterminal("Import",Vl);switch($l){case 155:ql(130...
function k (line 1) | function k(){ic.startNonterminal("SchemaImport",Vl),Pl(155),Il(76),Pl(22...
function L (line 1) | function L(){ic.startNonterminal("SchemaPrefix",Vl);switch($l){case 187:...
function A (line 1) | function A(){ic.startNonterminal("ModuleImport",Vl),Pl(155),Il(63),Pl(18...
function O (line 1) | function O(){ic.startNonterminal("NamespaceDecl",Vl),Pl(109),Il(64),Pl(1...
function M (line 1) | function M(){ic.startNonterminal("DefaultNamespaceDecl",Vl),Pl(109),Il(4...
function _ (line 1) | function _(){Hl(109),Il(49),Hl(110),Il(119);switch($l){case 122:Hl(122);...
function D (line 1) | function D(){ic.startNonterminal("FTOptionDecl",Vl),Pl(109),Il(55),Pl(14...
function P (line 1) | function P(){ic.startNonterminal("AnnotatedDecl",Vl),Pl(109);for(;;){Il(...
function H (line 1) | function H(){ic.startNonterminal("CompatibilityAnnotation",Vl),Pl(263),i...
function B (line 1) | function B(){ic.startNonterminal("Annotation",Vl),Pl(33),Il(245),jl(),$a...
function j (line 1) | function j(){Hl(33),Il(245),Ja(),Il(193);if($l==35){Hl(35),Il(190),vi();...
function F (line 1) | function F(){ic.startNonterminal("VarDecl",Vl),Pl(268),Il(21),Pl(31),Il(...
function I (line 1) | function I(){ic.startNonterminal("VarValue",Vl),Wf(),ic.endNonterminal("...
function q (line 1) | function q(){ic.startNonterminal("VarDefaultValue",Vl),Wf(),ic.endNonter...
function R (line 1) | function R(){ic.startNonterminal("ContextItemDecl",Vl),Pl(109),Il(46),Pl...
function U (line 1) | function U(){ic.startNonterminal("ParamList",Vl),W();for(;;){Il(105);if(...
function z (line 1) | function z(){X();for(;;){Il(105);if($l!=42)break;Hl(42),Il(21),X()}}
function W (line 1) | function W(){ic.startNonterminal("Param",Vl),Pl(31),Il(245),jl(),$a(),Il...
function X (line 1) | function X(){Hl(31),Il(245),Ja(),Il(153),$l==80&&ks()}
function V (line 1) | function V(){ic.startNonterminal("FunctionBody",Vl),J(),ic.endNontermina...
function $ (line 1) | function $(){K()}
function J (line 1) | function J(){ic.startNonterminal("EnclosedExpr",Vl),Pl(281),Il(266),jl()...
function K (line 1) | function K(){Hl(281),Il(266),Y(),Hl(287)}
function Q (line 1) | function Q(){ic.startNonterminal("OptionDecl",Vl),Pl(109),Il(69),Pl(203)...
function G (line 1) | function G(){ic.startNonterminal("Expr",Vl),Wf();for(;;){if($l!=42)break...
function Y (line 1) | function Y(){Xf();for(;;){if($l!=42)break;Hl(42),Il(266),Xf()}}
function Z (line 1) | function Z(){ic.startNonterminal("FLWORExpr",Vl),tt();for(;;){Il(195);if...
function et (line 1) | function et(){nt();for(;;){Il(195);if($l==224)break;it()}sn()}
function tt (line 1) | function tt(){ic.startNonterminal("InitialClause",Vl);switch($l){case 13...
function nt (line 1) | function nt(){switch($l){case 139:ql(151);break;default:Wl=$l}switch(Wl)...
function rt (line 1) | function rt(){ic.startNonterminal("IntermediateClause",Vl);switch($l){ca...
function it (line 1) | function it(){switch($l){case 139:case 177:nt();break;case 272:qt();brea...
function st (line 1) | function st(){ic.startNonterminal("ForClause",Vl),Pl(139),Il(21),jl(),ut...
function ot (line 1) | function ot(){Hl(139),Il(21),at();for(;;){if($l!=42)break;Hl(42),Il(21),...
function ut (line 1) | function ut(){ic.startNonterminal("ForBinding",Vl),Pl(31),Il(245),jl(),T...
function at (line 1) | function at(){Hl(31),Il(245),Ni(),Il(182),$l==80&&ks(),Il(173),$l==73&&l...
function ft (line 1) | function ft(){ic.startNonterminal("AllowingEmpty",Vl),Pl(73),Il(52),Pl(1...
function lt (line 1) | function lt(){Hl(73),Il(52),Hl(124)}
function ct (line 1) | function ct(){ic.startNonterminal("PositionalVar",Vl),Pl(82),Il(21),Pl(3...
function ht (line 1) | function ht(){Hl(82),Il(21),Hl(31),Il(245),Ni()}
function pt (line 1) | function pt(){ic.startNonterminal("FTScoreVar",Vl),Pl(232),Il(21),Pl(31)...
function dt (line 1) | function dt(){Hl(232),Il(21),Hl(31),Il(245),Ni()}
function vt (line 1) | function vt(){ic.startNonterminal("LetClause",Vl),Pl(177),Il(100),jl(),g...
function mt (line 1) | function mt(){Hl(177),Il(100),yt();for(;;){if($l!=42)break;Hl(42),Il(100...
function gt (line 1) | function gt(){ic.startNonterminal("LetBinding",Vl);switch($l){case 31:Pl...
function yt (line 1) | function yt(){switch($l){case 31:Hl(31),Il(245),Ni(),Il(109),$l==80&&ks(...
function bt (line 1) | function bt(){ic.startNonterminal("WindowClause",Vl),Pl(139),Il(139);swi...
function wt (line 1) | function wt(){Hl(139),Il(139);switch($l){case 257:St();break;default:Tt()}}
function Et (line 1) | function Et(){ic.startNonterminal("TumblingWindowClause",Vl),Pl(257),Il(...
function St (line 1) | function St(){Hl(257),Il(88),Hl(275),Il(21),Hl(31),Il(245),Ni(),Il(114),...
function xt (line 1) | function xt(){ic.startNonterminal("SlidingWindowClause",Vl),Pl(239),Il(8...
function Tt (line 1) | function Tt(){Hl(239),Il(88),Hl(275),Il(21),Hl(31),Il(245),Ni(),Il(114),...
function Nt (line 1) | function Nt(){ic.startNonterminal("WindowStartCondition",Vl),Pl(242),Il(...
function Ct (line 1) | function Ct(){Hl(242),Il(181),Ot(),Il(86),Hl(271),Il(266),Xf()}
function kt (line 1) | function kt(){ic.startNonterminal("WindowEndCondition",Vl),$l==202&&Pl(2...
function Lt (line 1) | function Lt(){$l==202&&Hl(202),Il(53),Hl(127),Il(181),Ot(),Il(86),Hl(271...
function At (line 1) | function At(){ic.startNonterminal("WindowVars",Vl),$l==31&&(Pl(31),Il(24...
function Ot (line 1) | function Ot(){$l==31&&(Hl(31),Il(245),_t()),Il(174),$l==82&&ht(),Il(163)...
function Mt (line 1) | function Mt(){ic.startNonterminal("CurrentItem",Vl),$a(),ic.endNontermin...
function _t (line 1) | function _t(){Ja()}
function Dt (line 1) | function Dt(){ic.startNonterminal("PreviousItem",Vl),$a(),ic.endNontermi...
function Pt (line 1) | function Pt(){Ja()}
function Ht (line 1) | function Ht(){ic.startNonterminal("NextItem",Vl),$a(),ic.endNonterminal(...
function Bt (line 1) | function Bt(){Ja()}
function jt (line 1) | function jt(){ic.startNonterminal("CountClause",Vl),Pl(106),Il(21),Pl(31...
function Ft (line 1) | function Ft(){Hl(106),Il(21),Hl(31),Il(245),Ni()}
function It (line 1) | function It(){ic.startNonterminal("WhereClause",Vl),Pl(272),Il(266),jl()...
function qt (line 1) | function qt(){Hl(272),Il(266),Xf()}
function Rt (line 1) | function Rt(){ic.startNonterminal("GroupByClause",Vl),Pl(150),Il(37),Pl(...
function Ut (line 1) | function Ut(){Hl(150),Il(37),Hl(88),Il(266),Wt()}
function zt (line 1) | function zt(){ic.startNonterminal("GroupingSpecList",Vl),Xt();for(;;){Il...
function Wt (line 1) | function Wt(){Vt();for(;;){Il(198);if($l!=42)break;Hl(42),Il(266),Vt()}}
function Xt (line 1) | function Xt(){ic.startNonterminal("GroupingSpec",Vl);switch($l){case 31:...
function Vt (line 1) | function Vt(){switch($l){case 31:ql(245);break;default:Wl=$l}if(Wl==3103...
function $t (line 1) | function $t(){ic.startNonterminal("GroupingVariable",Vl),Pl(31),Il(245),...
function Jt (line 1) | function Jt(){Hl(31),Il(245),Ni()}
function Kt (line 1) | function Kt(){ic.startNonterminal("OrderByClause",Vl);switch($l){case 20...
function Qt (line 1) | function Qt(){switch($l){case 205:Hl(205),Il(37),Hl(88);break;default:Hl...
function Gt (line 1) | function Gt(){ic.startNonterminal("OrderSpecList",Vl),Zt();for(;;){Il(19...
function Yt (line 1) | function Yt(){en();for(;;){Il(198);if($l!=42)break;Hl(42),Il(266),en()}}
function Zt (line 1) | function Zt(){ic.startNonterminal("OrderSpec",Vl),Wf(),jl(),tn(),ic.endN...
function en (line 1) | function en(){Xf(),nn()}
function tn (line 1) | function tn(){ic.startNonterminal("OrderModifier",Vl);if($l==81||$l==114...
function nn (line 1) | function nn(){if($l==81||$l==114)switch($l){case 81:Hl(81);break;default...
function rn (line 1) | function rn(){ic.startNonterminal("ReturnClause",Vl),Pl(224),Il(266),jl(...
function sn (line 1) | function sn(){Hl(224),Il(266),Xf()}
function on (line 1) | function on(){ic.startNonterminal("QuantifiedExpr",Vl);switch($l){case 2...
function un (line 1) | function un(){switch($l){case 240:Hl(240);break;default:Hl(130)}Il(21),f...
function an (line 1) | function an(){ic.startNonterminal("QuantifiedVarDecl",Vl),Pl(31),Il(245)...
function fn (line 1) | function fn(){Hl(31),Il(245),Ni(),Il(114),$l==80&&ks(),Il(56),Hl(156),Il...
function ln (line 1) | function ln(){ic.startNonterminal("SwitchExpr",Vl),Pl(248),Il(22),Pl(35)...
function cn (line 1) | function cn(){Hl(248),Il(22),Hl(35),Il(266),Y(),Hl(38);for(;;){Il(38),pn...
function hn (line 1) | function hn(){ic.startNonterminal("SwitchCaseClause",Vl);for(;;){Pl(89),...
function pn (line 1) | function pn(){for(;;){Hl(89),Il(266),vn();if($l!=89)break}Hl(224),Il(266...
function dn (line 1) | function dn(){ic.startNonterminal("SwitchCaseOperand",Vl),Wf(),ic.endNon...
function vn (line 1) | function vn(){Xf()}
function mn (line 1) | function mn(){ic.startNonterminal("TypeswitchExpr",Vl),Pl(259),Il(22),Pl...
function gn (line 1) | function gn(){Hl(259),Il(22),Hl(35),Il(266),Y(),Hl(38);for(;;){Il(38),bn...
function yn (line 1) | function yn(){ic.startNonterminal("CaseClause",Vl),Pl(89),Il(257),$l==31...
function bn (line 1) | function bn(){Hl(89),Il(257),$l==31&&(Hl(31),Il(245),Ni(),Il(33),Hl(80))...
function wn (line 1) | function wn(){ic.startNonterminal("SequenceTypeUnion",Vl),Ls();for(;;){I...
function En (line 1) | function En(){As();for(;;){Il(138);if($l!=284)break;Hl(284),Il(253),As()}}
function Sn (line 1) | function Sn(){ic.startNonterminal("IfExpr",Vl),Pl(154),Il(22),Pl(35),Il(...
function xn (line 1) | function xn(){Hl(154),Il(22),Hl(35),Il(266),Y(),Hl(38),Il(80),Hl(250),Il...
function Tn (line 1) | function Tn(){ic.startNonterminal("TryCatchExpr",Vl),Cn();for(;;){Il(39)...
function Nn (line 1) | function Nn(){kn();for(;;){Il(39),Mn(),Il(207);if($l!=92)break}}
function Cn (line 1) | function Cn(){ic.startNonterminal("TryClause",Vl),Pl(256),Il(90),Pl(281)...
function kn (line 1) | function kn(){Hl(256),Il(90),Hl(281),Il(266),An(),Hl(287)}
function Ln (line 1) | function Ln(){ic.startNonterminal("TryTargetExpr",Vl),G(),ic.endNontermi...
function An (line 1) | function An(){Y()}
function On (line 1) | function On(){ic.startNonterminal("CatchClause",Vl),Pl(92),Il(248),jl(),...
function Mn (line 1) | function Mn(){Hl(92),Il(248),Dn(),Hl(281),Il(266),Y(),Hl(287)}
function _n (line 1) | function _n(){ic.startNonterminal("CatchErrorList",Vl),Yr();for(;;){Il(1...
function Dn (line 1) | function Dn(){Zr();for(;;){Il(140);if($l!=284)break;Hl(284),Il(248),Zr()}}
function Pn (line 1) | function Pn(){ic.startNonterminal("OrExpr",Vl),Bn();for(;;){if($l!=204)b...
function Hn (line 1) | function Hn(){jn();for(;;){if($l!=204)break;Hl(204),Il(266),jn()}}
function Bn (line 1) | function Bn(){ic.startNonterminal("AndExpr",Vl),Fn();for(;;){if($l!=76)b...
function jn (line 1) | function jn(){In();for(;;){if($l!=76)break;Hl(76),Il(266),In()}}
function Fn (line 1) | function Fn(){ic.startNonterminal("NotExpr",Vl),$l==196&&Pl(196),Il(265)...
function In (line 1) | function In(){$l==196&&Hl(196),Il(265),Rn()}
function qn (line 1) | function qn(){ic.startNonterminal("ComparisonExpr",Vl),Un();if($l==27||$...
function Rn (line 1) | function Rn(){zn();if($l==27||$l==55||$l==58||$l==59||$l==61||$l==62||$l...
function Un (line 1) | function Un(){ic.startNonterminal("FTContainsExpr",Vl),Wn(),$l==100&&(Pl...
function zn (line 1) | function zn(){Xn(),$l==100&&(Hl(100),Il(79),Hl(249),Il(177),uu(),$l==277...
function Wn (line 1) | function Wn(){ic.startNonterminal("StringConcatExpr",Vl),Vn();for(;;){if...
function Xn (line 1) | function Xn(){$n();for(;;){if($l!=285)break;Hl(285),Il(265),$n()}}
function Vn (line 1) | function Vn(){ic.startNonterminal("RangeExpr",Vl),Jn(),$l==253&&(Pl(253)...
function $n (line 1) | function $n(){Kn(),$l==253&&(Hl(253),Il(265),Kn())}
function Jn (line 1) | function Jn(){ic.startNonterminal("AdditiveExpr",Vl),Qn();for(;;){if($l!...
function Kn (line 1) | function Kn(){Gn();for(;;){if($l!=41&&$l!=43)break;switch($l){case 41:Hl...
function Qn (line 1) | function Qn(){ic.startNonterminal("MultiplicativeExpr",Vl),Yn();for(;;){...
function Gn (line 1) | function Gn(){Zn();for(;;){if($l!=39&&$l!=119&&$l!=153&&$l!=183)break;sw...
function Yn (line 1) | function Yn(){ic.startNonterminal("UnionExpr",Vl),er();for(;;){if($l!=26...
function Zn (line 1) | function Zn(){tr();for(;;){if($l!=260&&$l!=284)break;switch($l){case 260...
function er (line 1) | function er(){ic.startNonterminal("IntersectExceptExpr",Vl),nr();for(;;)...
function tr (line 1) | function tr(){rr();for(;;){Il(221);if($l!=132&&$l!=164)break;switch($l){...
function nr (line 1) | function nr(){ic.startNonterminal("InstanceofExpr",Vl),ir(),Il(222),$l==...
function rr (line 1) | function rr(){sr(),Il(222),$l==162&&(Hl(162),Il(67),Hl(200),Il(253),As())}
function ir (line 1) | function ir(){ic.startNonterminal("TreatExpr",Vl),or(),Il(223),$l==254&&...
function sr (line 1) | function sr(){ur(),Il(223),$l==254&&(Hl(254),Il(33),Hl(80),Il(253),As())}
function or (line 1) | function or(){ic.startNonterminal("CastableExpr",Vl),ar(),Il(224),$l==91...
function ur (line 1) | function ur(){fr(),Il(224),$l==91&&(Hl(91),Il(33),Hl(80),Il(245),Ns())}
function ar (line 1) | function ar(){ic.startNonterminal("CastExpr",Vl),lr(),Il(226),$l==90&&(P...
function fr (line 1) | function fr(){cr(),Il(226),$l==90&&(Hl(90),Il(33),Hl(80),Il(245),Ns())}
function lr (line 1) | function lr(){ic.startNonterminal("UnaryExpr",Vl);for(;;){Il(265);if($l!...
function cr (line 1) | function cr(){for(;;){Il(265);if($l!=41&&$l!=43)break;switch($l){case 43...
function hr (line 1) | function hr(){ic.startNonterminal("ValueExpr",Vl);switch($l){case 266:ql...
function pr (line 1) | function pr(){switch($l){case 266:ql(188);break;default:Wl=$l}switch(Wl)...
function dr (line 1) | function dr(){ic.startNonterminal("SimpleMapExpr",Vl),Or();for(;;){if($l...
function vr (line 1) | function vr(){Mr();for(;;){if($l!=26)break;Hl(26),Il(262),Mr()}}
function mr (line 1) | function mr(){ic.startNonterminal("GeneralComp",Vl);switch($l){case 61:P...
function gr (line 1) | function gr(){switch($l){case 61:Hl(61);break;case 27:Hl(27);break;case ...
function yr (line 1) | function yr(){ic.startNonterminal("ValueComp",Vl);switch($l){case 129:Pl...
function br (line 1) | function br(){switch($l){case 129:Hl(129);break;case 189:Hl(189);break;c...
function wr (line 1)
Copy disabled (too large)
Download .json
Condensed preview — 1397 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (57,271K chars).
[
{
"path": ".gitignore",
"chars": 403,
"preview": "#################\r\n## Eclipse\r\n#################\r\n\r\n.project\r\n.metadata\r\nbin/\r\ntmp/\r\nwork/\r\n*.DS_Store\r\n*.tmp\r\n*.bak\r\n*."
},
{
"path": "LICENSE.txt",
"chars": 35146,
"preview": " GNU GENERAL PUBLIC LICENSE\n Version 3, 29 June 2007\n\n Copyright (C) 2007 Free "
},
{
"path": "README.md",
"chars": 3523,
"preview": "#### With the passing of Stéfan Sinclair, this repository has been archived. ####\n#### Please see [voyanttools/Voyant](h"
},
{
"path": "pom.xml",
"chars": 4013,
"preview": "<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n\txmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n\txsi:schemaLoc"
},
{
"path": "src/main/java/org/voyanttools/voyant/FlexibleParametersFactory.java",
"chars": 5420,
"preview": "package org.voyanttools.voyant;\n\nimport static java.security.AccessController.doPrivileged;\n\nimport java.io.File;\nimport"
},
{
"path": "src/main/java/org/voyanttools/voyant/HttpParametersDecoder.java",
"chars": 4193,
"preview": "package org.voyanttools.voyant;\n\nimport java.util.ArrayList;\nimport java.util.HashSet;\nimport java.util.List;\nimport jav"
},
{
"path": "src/main/java/org/voyanttools/voyant/JSCacher.java",
"chars": 5691,
"preview": "package org.voyanttools.voyant;\n\nimport java.io.File;\nimport java.io.IOException;\nimport java.io.InputStream;\nimport jav"
},
{
"path": "src/main/java/org/voyanttools/voyant/Localizer.java",
"chars": 2691,
"preview": "package org.voyanttools.voyant;\n\nimport java.io.File;\nimport java.io.IOException;\nimport java.util.HashMap;\nimport java."
},
{
"path": "src/main/java/org/voyanttools/voyant/SpyralAuth.java",
"chars": 2371,
"preview": "package org.voyanttools.voyant;\n\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.net.URL;\nimport jav"
},
{
"path": "src/main/java/org/voyanttools/voyant/Trombone.java",
"chars": 16193,
"preview": "package org.voyanttools.voyant;\n\nimport java.io.BufferedReader;\nimport java.io.File;\nimport java.io.IOException;\nimport "
},
{
"path": "src/main/java/org/voyanttools/voyant/Voyant.java",
"chars": 6355,
"preview": "package org.voyanttools.voyant;\n\nimport java.io.IOException;\nimport java.io.PrintWriter;\nimport java.io.StringWriter;\nim"
},
{
"path": "src/main/java/org/voyanttools/voyant/XslTransformer.java",
"chars": 1870,
"preview": "package org.voyanttools.voyant;\n\nimport java.io.File;\nimport java.io.Writer;\n\nimport javax.servlet.ServletContext;\nimpor"
},
{
"path": "src/main/resources/.gitignore",
"chars": 18,
"preview": "/oauth.properties\n"
},
{
"path": "src/main/resources/oauth.properties",
"chars": 160,
"preview": "clientId=foo\nclientSecret=bar\noauthCallback=http://localhost:8080/voyant/spyral/oauth/callback\noauthCallbackRedirect=htt"
},
{
"path": "src/main/resources/org/voyanttools/voyant/voyant-js.txt",
"chars": 4932,
"preview": "# BUBBLELINES\nresources/bubblelines/Bubblelines.js\n\n# KNOTS\nresources/knots/Knots.js\n\n# CIRRUS\nresources/cirrus/html5/Ci"
},
{
"path": "src/main/webapp/.gitignore",
"chars": 27,
"preview": "/docs\n/json\n.#webclasspath\n"
},
{
"path": "src/main/webapp/META-INF/MANIFEST.MF",
"chars": 36,
"preview": "Manifest-Version: 1.0\nClass-Path: \n\n"
},
{
"path": "src/main/webapp/WEB-INF/jetty-web.xml",
"chars": 147,
"preview": "<Configure class=\"org.eclipse.jetty.webapp.WebAppContext\">\n <Set name=\"maxFormContentSize\">100000000</Set> <!-- shoul"
},
{
"path": "src/main/webapp/WEB-INF/web.xml",
"chars": 3994,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<web-app xmlns=\"http://java.sun.com/xml/ns/javaee\"\n\txmlns:xsi=\"http://www.w3.org/"
},
{
"path": "src/main/webapp/app/Promise.js",
"chars": 15350,
"preview": "/*\r\n Ext.promise.Deferred adapted from:\r\n [DeftJS](https://github.com/deftjs/deftjs5)\r\n Copyright (c) 2012-2014 [DeftJS "
},
{
"path": "src/main/webapp/app/VoyantApp.js",
"chars": 6737,
"preview": "Ext.define('Voyant.VoyantApp', {\n\t\n extend: 'Ext.app.Application',\n\tmixins: ['Voyant.util.Deferrable','Voyant.util.Lo"
},
{
"path": "src/main/webapp/app/VoyantCorpusApp.js",
"chars": 12621,
"preview": "Ext.define('Voyant.VoyantCorpusApp', {\n\t\n extend: 'Voyant.VoyantApp',\n \n name: 'VoyantCorpusApp',\n\n requires"
},
{
"path": "src/main/webapp/app/VoyantCorpusToolsetApp.js",
"chars": 1307,
"preview": "Ext.define('Voyant.panel.DocumentClusters', {\n\textend: 'Ext.panel.Panel',\n\talias: 'widget.documentclusters',\n\ttitle: \"Do"
},
{
"path": "src/main/webapp/app/VoyantDefaultApp.js",
"chars": 3528,
"preview": "Ext.define('Voyant.VoyantDefaultApp', {\n\textend : 'Voyant.VoyantCorpusApp',\n\tmixins: ['Voyant.util.Api'],\n\tname : 'Voyan"
},
{
"path": "src/main/webapp/app/VoyantDocumentToolsetApp.js",
"chars": 1221,
"preview": "Ext.define('Voyant.panel.MoreLikeThis', {\n\textend: 'Ext.panel.Panel',\n\talias: 'widget.morelikethis',\n\ttitle: \"More Like "
},
{
"path": "src/main/webapp/app/VoyantNotebookApp.js",
"chars": 496,
"preview": "Ext.define('Voyant.VoyantNotebookApp', {\n\textend : 'Voyant.VoyantApp',\n\trequires: ['Voyant.panel.VoyantFooter','Voyant.n"
},
{
"path": "src/main/webapp/app/VoyantToolApp.js",
"chars": 2184,
"preview": "Ext.define('Voyant.VoyantToolApp', {\n\textend : 'Voyant.VoyantCorpusApp',\n\tname : 'VoyantToolApp',\n\tstatics: {\n\t\tapi: {\n\t"
},
{
"path": "src/main/webapp/app/data/model/AnalysisToken.js",
"chars": 358,
"preview": "Ext.define('Voyant.data.model.AnalysisToken', {\n extend: 'Ext.data.Model',\n idProperty: 'term',\n fields: [\n "
},
{
"path": "src/main/webapp/app/data/model/Context.js",
"chars": 886,
"preview": "Ext.define('Voyant.data.model.Context', {\n extend: 'Ext.data.Model',\n fields: [\n {name: 'id'},\n "
},
{
"path": "src/main/webapp/app/data/model/Corpus.js",
"chars": 45984,
"preview": "/*\r\n * @class Corpus\r\n * Corpus is possibly the most important class since in most cases you'll first create/load a corp"
},
{
"path": "src/main/webapp/app/data/model/CorpusCollocate.js",
"chars": 653,
"preview": "Ext.define('Voyant.data.model.CorpusCollocate', {\n extend: 'Ext.data.Model',\n fields: [\n {name: 'term'"
},
{
"path": "src/main/webapp/app/data/model/CorpusFacet.js",
"chars": 442,
"preview": "Ext.define('Voyant.data.model.CorpusFacet', {\n extend: 'Ext.data.Model',\n idProperty: 'label',\n fields: [\n "
},
{
"path": "src/main/webapp/app/data/model/CorpusNgram.js",
"chars": 310,
"preview": "Ext.define('Voyant.data.model.CorpusNgram', {\n extend: 'Ext.data.Model',\n fields: [\n {name: 'term'},\n "
},
{
"path": "src/main/webapp/app/data/model/CorpusTerm.js",
"chars": 1435,
"preview": "/*\n * Corpus Term\n */\nExt.define('Voyant.data.model.CorpusTerm', {\n extend: 'Ext.data.Model',\n idProperty: 'term',"
},
{
"path": "src/main/webapp/app/data/model/Dimension.js",
"chars": 142,
"preview": "Ext.define('Voyant.data.model.Dimension', {\n extend: 'Ext.data.Model',\n fields: [\n {name: 'percentage', typ"
},
{
"path": "src/main/webapp/app/data/model/Document.js",
"chars": 8835,
"preview": "Ext.define('Voyant.data.model.Document', {\n extend: 'Ext.data.Model',\n //requires: ['Voyant.data.store.DocumentTer"
},
{
"path": "src/main/webapp/app/data/model/DocumentEntity.js",
"chars": 519,
"preview": "Ext.define('Voyant.data.model.DocumentEntity', {\n extend: 'Ext.data.Model',\n fields: [\n {name: 'term'}"
},
{
"path": "src/main/webapp/app/data/model/DocumentQueryMatch.js",
"chars": 426,
"preview": "Ext.define('Voyant.data.model.DocumentQueryMatch', {\n extend: 'Ext.data.Model',\n fields: [\n {name: 'id"
},
{
"path": "src/main/webapp/app/data/model/DocumentTerm.js",
"chars": 818,
"preview": "Ext.define('Voyant.data.model.DocumentTerm', {\n extend: 'Ext.data.Model',\n fields: [\n {name: 'id'},\n "
},
{
"path": "src/main/webapp/app/data/model/PrincipalComponent.js",
"chars": 183,
"preview": "Ext.define('Voyant.data.model.PrincipalComponent', {\n extend: 'Ext.data.Model',\n fields: [\n {name: 'eigenVa"
},
{
"path": "src/main/webapp/app/data/model/RelatedTerm.js",
"chars": 743,
"preview": "/*\n * Related Term\n */\nExt.define('Voyant.data.model.RelatedTerm', {\n extend: 'Ext.data.Model',\n fields: [\n "
},
{
"path": "src/main/webapp/app/data/model/StatisticalAnalysis.js",
"chars": 1229,
"preview": "Ext.define('Voyant.data.model.StatisticalAnalysis', {\n extend: 'Ext.data.Model',\n requires: ['Voyant.data.model.Pr"
},
{
"path": "src/main/webapp/app/data/model/TermCorrelation.js",
"chars": 1197,
"preview": "/*\n * Related Term\n */\nExt.define('Voyant.data.model.TermCorrelation', {\n extend: 'Ext.data.Model',\n fields: [\n "
},
{
"path": "src/main/webapp/app/data/model/Token.js",
"chars": 1598,
"preview": "Ext.define('Voyant.data.model.Token', {\n extend: 'Ext.data.Model',\n fields: [\n {name: 'id'},\n "
},
{
"path": "src/main/webapp/app/data/store/CAAnalysis.js",
"chars": 1157,
"preview": "Ext.define('Voyant.data.store.CAAnalysisMixin', {\n\tmixins: ['Voyant.data.store.VoyantStore'],\n\tembeddable: ['Voyant.pane"
},
{
"path": "src/main/webapp/app/data/store/Contexts.js",
"chars": 1041,
"preview": "Ext.define('Voyant.data.store.ContextsMixin', {\n\tmixins: ['Voyant.data.store.VoyantStore'],\n model: 'Voyant.data.mode"
},
{
"path": "src/main/webapp/app/data/store/CorpusCollocates.js",
"chars": 1107,
"preview": "Ext.define('Voyant.data.store.CorpusCollocatesMixin', {\n\tmixins: ['Voyant.data.store.VoyantStore'],\n model: 'Voyant.d"
},
{
"path": "src/main/webapp/app/data/store/CorpusFacets.js",
"chars": 1058,
"preview": "Ext.define('Voyant.data.store.CorpusFacetsMixin', {\n\tmixins: ['Voyant.data.store.VoyantStore'],\n model: Voyant.data.m"
},
{
"path": "src/main/webapp/app/data/store/CorpusNgrams.js",
"chars": 1060,
"preview": "Ext.define('Voyant.data.store.CorpusNgramsMixin', {\n\tmixins: ['Voyant.data.store.VoyantStore'],\n model: 'Voyant.data."
},
{
"path": "src/main/webapp/app/data/store/CorpusTerms.js",
"chars": 1923,
"preview": "Ext.define('Voyant.data.store.CorpusTermsMixin', {\n\tmixins: ['Voyant.data.store.VoyantStore'],\n model: Voyant.data.mo"
},
{
"path": "src/main/webapp/app/data/store/DocSimAnalysis.js",
"chars": 1145,
"preview": "Ext.define('Voyant.data.store.DocSimAnalysisMixin', {\n\tmixins: ['Voyant.data.store.VoyantStore'],\n model: 'Voyant.dat"
},
{
"path": "src/main/webapp/app/data/store/DocumentEntities.js",
"chars": 1105,
"preview": "Ext.define('Voyant.data.store.DocumentEntitiesMixin', {\n\tmixins: ['Voyant.data.store.VoyantStore'],\n model: 'Voyant.d"
},
{
"path": "src/main/webapp/app/data/store/DocumentQueryMatches.js",
"chars": 1177,
"preview": "Ext.define('Voyant.data.store.DocumentQueryMatchesMixin', {\n\tmixins: ['Voyant.data.store.VoyantStore'],\n model: 'Voya"
},
{
"path": "src/main/webapp/app/data/store/DocumentTerms.js",
"chars": 1070,
"preview": "Ext.define('Voyant.data.store.DocumentTermsMixin', {\n\tmixins: ['Voyant.data.store.VoyantStore'],\n model: 'Voyant.data"
},
{
"path": "src/main/webapp/app/data/store/Documents.js",
"chars": 1606,
"preview": "Ext.define('Voyant.data.store.DocumentsMixin', {\n\tmixins: ['Voyant.data.store.VoyantStore'],\n model: 'Voyant.data.mod"
},
{
"path": "src/main/webapp/app/data/store/NotebookFacets.js",
"chars": 1814,
"preview": "Ext.define('Voyant.data.model.NotebookFacet', {\n extend: 'Ext.data.Model',\n idProperty: 'label',\n fields: [\n "
},
{
"path": "src/main/webapp/app/data/store/PCAAnalysis.js",
"chars": 1143,
"preview": "Ext.define('Voyant.data.store.PCAAnalysisMixin', {\n\tmixins: ['Voyant.data.store.VoyantStore'],\n\tembeddable: ['Voyant.pan"
},
{
"path": "src/main/webapp/app/data/store/RelatedTerms.js",
"chars": 1061,
"preview": "Ext.define('Voyant.data.store.RelatedTermsMixin', {\n\tmixins: ['Voyant.data.store.VoyantStore'],\n model: 'Voyant.data."
},
{
"path": "src/main/webapp/app/data/store/TSNEAnalysis.js",
"chars": 1193,
"preview": "Ext.define('Voyant.data.store.TSNEAnalysisMixin', {\n\tmixins: ['Voyant.data.store.VoyantStore'],\n\tembeddable: ['Voyant.pa"
},
{
"path": "src/main/webapp/app/data/store/TermCorrelations.js",
"chars": 1165,
"preview": "Ext.define('Voyant.data.store.TermCorrelationsMixin', {\n\tmixins: ['Voyant.data.store.VoyantStore'],\n model: 'Voyant.d"
},
{
"path": "src/main/webapp/app/data/store/Tokens.js",
"chars": 1017,
"preview": "Ext.define('Voyant.data.store.TokensMixin', {\n\tmixins: ['Voyant.data.store.VoyantStore'],\n model: 'Voyant.data.model."
},
{
"path": "src/main/webapp/app/data/store/VoyantStore.js",
"chars": 4429,
"preview": "Ext.define('Voyant.data.store.VoyantStore', {\r\n\tmixins: ['Voyant.util.Localization','Voyant.notebook.util.Embed'],\r\n\tcon"
},
{
"path": "src/main/webapp/app/data/util/Geonames.js",
"chars": 5159,
"preview": "Ext.define('Voyant.data.util.Geonames', {\n mixins: ['Voyant.util.Localization'],\n statics: {\n \t\ti18n: {\n \t\t}"
},
{
"path": "src/main/webapp/app/data/util/NetworkGraph.js",
"chars": 2361,
"preview": "/*\n * @class NetworkGraph\n * \n * A NetworkGraph can facilitate working with network graph data structures, as well as\n *"
},
{
"path": "src/main/webapp/app/data/util/Table.js",
"chars": 13417,
"preview": "/*\n * @class VoyantTable\n * A VoyantTable can facilitate working with tabular data structures, as well as\n * displaying "
},
{
"path": "src/main/webapp/app/notebook/Catalogue.js",
"chars": 6925,
"preview": "Ext.define('Voyant.notebook.Catalogue', {\n\textend: 'Ext.Component',\n\trequires: ['Voyant.widget.Facet','Voyant.data.store"
},
{
"path": "src/main/webapp/app/notebook/Notebook.js",
"chars": 39174,
"preview": "/*\n * @class Notebook\n * A Spyral Notebook. This should never be instantiated directly.\n */\nExt.define('Voyant.notebook."
},
{
"path": "src/main/webapp/app/notebook/Notebook.old.js",
"chars": 51254,
"preview": "/*\n * @class Notebook\n * A Spyral Notebook. This should never be instantiated directly, but there are useful static meth"
},
{
"path": "src/main/webapp/app/notebook/editor/CodeEditor.js",
"chars": 5236,
"preview": "Ext.define(\"Voyant.notebook.editor.CodeEditor\", {\n\textend: \"Ext.Component\",\n\talias: \"widget.notebookcodeeditor\", \n\tmixin"
},
{
"path": "src/main/webapp/app/notebook/editor/CodeEditorWrapper.js",
"chars": 18492,
"preview": "Ext.define(\"Voyant.notebook.editor.CodeEditorWrapper\", {\n\textend: \"Voyant.notebook.editor.EditorWrapper\",\n\trequires: [\"V"
},
{
"path": "src/main/webapp/app/notebook/editor/EditorWrapper.js",
"chars": 1561,
"preview": "Ext.define(\"Voyant.notebook.editor.EditorWrapper\", {\n\textend: \"Ext.panel.Panel\",\n\tmixins: [\"Voyant.util.Localization\"],\n"
},
{
"path": "src/main/webapp/app/notebook/editor/TextEditor.js",
"chars": 3438,
"preview": "Ext.define(\"Voyant.notebook.editor.TextEditor\", {\n\textend: \"Ext.Component\",\n\tmixins: [\"Voyant.util.Localization\"],\n\talia"
},
{
"path": "src/main/webapp/app/notebook/editor/TextEditorWrapper.js",
"chars": 1100,
"preview": "Ext.define(\"Voyant.notebook.editor.TextEditorWrapper\", {\n\textend: \"Voyant.notebook.editor.EditorWrapper\",\n\trequires: [\"V"
},
{
"path": "src/main/webapp/app/notebook/editor/button/Add.js",
"chars": 553,
"preview": "Ext.define(\"Voyant.notebook.editor.button.Add\", {\n\textend: \"Ext.button.Button\",\n\tmixins: [\"Voyant.util.Localization\"],\n\t"
},
{
"path": "src/main/webapp/app/notebook/editor/button/Counter.js",
"chars": 688,
"preview": "Ext.define(\"Voyant.notebook.editor.button.Counter\", {\n\textend: \"Ext.toolbar.TextItem\",\n\tmixins: [\"Voyant.util.Localizati"
},
{
"path": "src/main/webapp/app/notebook/editor/button/Edit.js",
"chars": 527,
"preview": "Ext.define(\"Voyant.notebook.editor.button.Edit\", {\n\textend: \"Ext.button.Button\",\n\tmixins: [\"Voyant.util.Localization\"],\n"
},
{
"path": "src/main/webapp/app/notebook/editor/button/Export.js",
"chars": 2937,
"preview": "Ext.define(\"Voyant.notebook.editor.button.Export\", {\n\textend: \"Ext.button.Button\",\n\tmixins: [\"Voyant.util.Localization\"]"
},
{
"path": "src/main/webapp/app/notebook/editor/button/Metadata.js",
"chars": 568,
"preview": "Ext.define(\"Voyant.notebook.editor.button.Metadata\", {\n\textend: \"Ext.button.Button\",\n\tmixins: [\"Voyant.util.Localization"
},
{
"path": "src/main/webapp/app/notebook/editor/button/MoveDown.js",
"chars": 559,
"preview": "Ext.define(\"Voyant.notebook.editor.button.MoveDown\", {\n\textend: \"Ext.button.Button\",\n\tmixins: [\"Voyant.util.Localization"
},
{
"path": "src/main/webapp/app/notebook/editor/button/MoveUp.js",
"chars": 553,
"preview": "Ext.define(\"Voyant.notebook.editor.button.MoveUp\", {\n\textend: \"Ext.button.Button\",\n\tmixins: [\"Voyant.util.Localization\"]"
},
{
"path": "src/main/webapp/app/notebook/editor/button/Movement.js",
"chars": 674,
"preview": "Ext.define(\"Voyant.notebook.editor.button.Movement\", {\n\textend: \"Ext.button.Button\",\n\tmixins: [\"Voyant.util.Localization"
},
{
"path": "src/main/webapp/app/notebook/editor/button/Remove.js",
"chars": 821,
"preview": "Ext.define(\"Voyant.notebook.editor.button.Remove\", {\n\textend: \"Ext.button.Button\",\n\tmixins: [\"Voyant.util.Localization\"]"
},
{
"path": "src/main/webapp/app/notebook/editor/button/Run.js",
"chars": 349,
"preview": "Ext.define(\"Voyant.notebook.editor.button.Run\", {\n\textend: \"Ext.button.Button\",\n\tmixins: [\"Voyant.util.Localization\"],\n\t"
},
{
"path": "src/main/webapp/app/notebook/editor/button/RunAll.js",
"chars": 355,
"preview": "Ext.define(\"Voyant.notebook.editor.button.RunAll\", {\n\textend: \"Ext.button.Button\",\n\tmixins: [\"Voyant.util.Localization\"]"
},
{
"path": "src/main/webapp/app/notebook/editor/button/RunUntil.js",
"chars": 359,
"preview": "Ext.define(\"Voyant.notebook.editor.button.RunUntil\", {\n\textend: \"Ext.button.Button\",\n\tmixins: [\"Voyant.util.Localization"
},
{
"path": "src/main/webapp/app/notebook/storage/github/FileSaver.js",
"chars": 6304,
"preview": "Ext.define(\"Voyant.notebook.github.FileSaver\", {\n\textend: \"Ext.container.Container\",\n\txtype: \"githubfilesaver\",\n\tconfig:"
},
{
"path": "src/main/webapp/app/notebook/storage/github/GitHubDialogs.js",
"chars": 5513,
"preview": "Ext.define(\"Voyant.notebook.github.GitHubDialogs\", {\n\textend: \"Ext.Component\",\n\trequires: ['Voyant.notebook.github.Octok"
},
{
"path": "src/main/webapp/app/notebook/storage/github/OctokitWrapper.js",
"chars": 5015,
"preview": "Ext.define(\"Voyant.notebook.github.OctokitWrapper\", {\n\textend: \"Ext.Base\",\n\talias: \"octokitwrapper\",\n\n\toctokit: undefine"
},
{
"path": "src/main/webapp/app/notebook/storage/github/ReposBrowser.js",
"chars": 6304,
"preview": "Ext.define(\"Voyant.notebook.github.ReposBrowser\", {\n\textend: \"Ext.container.Container\",\n\txtype: \"githubreposbrowser\",\n\tc"
},
{
"path": "src/main/webapp/app/notebook/storage/voyant/StorageDialogs.js",
"chars": 5197,
"preview": "Ext.define(\"Voyant.notebook.StorageDialogs\", {\n\textend: \"Ext.Component\",\n\trequires: [],\n\talias: \"\",\n\tconfig: {\n\t\taccessC"
},
{
"path": "src/main/webapp/app/notebook/util/Embed.js",
"chars": 5429,
"preview": "Ext.define(\"Voyant.notebook.util.Embed\", {\n\ttransferable: ['embed'],\n\tembed: function() { // this is for instances\n\t\temb"
},
{
"path": "src/main/webapp/app/notebook/util/Show.js",
"chars": 3057,
"preview": "Ext.define(\"Voyant.notebook.util.Show\", {\n\ttransferable: ['show'],\n\t\n /**\n\t * Shows a one-line summary of this object"
},
{
"path": "src/main/webapp/app/panel/Bubblelines.js",
"chars": 15399,
"preview": "// assuming Bubblelines library is loaded by containing page (via voyant.jsp)\r\nExt.define('Voyant.panel.Bubblelines', {\r"
},
{
"path": "src/main/webapp/app/panel/BubblelinesSet.js",
"chars": 905,
"preview": "Ext.define('Voyant.panel.BubblelinesSet', {\n\textend: 'Ext.panel.Panel',\n requires: ['Voyant.panel.Bubblelines','Voyan"
},
{
"path": "src/main/webapp/app/panel/Bubbles.js",
"chars": 7013,
"preview": "// assuming Bubblelines library is loaded by containing page (via voyant.jsp)\nExt.define('Voyant.panel.Bubbles', {\n\texte"
},
{
"path": "src/main/webapp/app/panel/Catalogue.js",
"chars": 19716,
"preview": "Ext.define('Voyant.panel.Catalogue', {\n\textend: 'Ext.panel.Panel',\n\trequires: ['Voyant.widget.Facet'],\n\tmixins: ['Voyant"
},
{
"path": "src/main/webapp/app/panel/Cirrus.js",
"chars": 20743,
"preview": "// assuming Cirrus library is loaded by containing page (via voyant.jsp)\n/**\n * Cirrus tool, a wordcloud-like visuaizati"
},
{
"path": "src/main/webapp/app/panel/CollocatesGraph.js",
"chars": 27140,
"preview": "Ext.define('Voyant.panel.CollocatesGraph', {\n\textend: 'Ext.panel.Panel',\n\tmixins: ['Voyant.panel.Panel'],\n\talias: 'widge"
},
{
"path": "src/main/webapp/app/panel/CollocatesSet.js",
"chars": 1239,
"preview": "Ext.define('Voyant.panel.CollocatesSet', {\n\textend: 'Ext.panel.Panel',\n requires: ['Voyant.panel.ScatterPlot','Voyant"
},
{
"path": "src/main/webapp/app/panel/Contexts.js",
"chars": 11321,
"preview": "Ext.define('Voyant.panel.Contexts', {\n\textend: 'Ext.grid.Panel',\n\tmixins: ['Voyant.panel.Panel'],\n\trequires: ['Voyant.da"
},
{
"path": "src/main/webapp/app/panel/CorpusCollocates.js",
"chars": 7866,
"preview": "Ext.define('Voyant.panel.CorpusCollocates', {\n\textend: 'Ext.grid.Panel',\n\tmixins: ['Voyant.panel.Panel'],\n\talias: 'widge"
},
{
"path": "src/main/webapp/app/panel/CorpusCreator.js",
"chars": 30149,
"preview": "Ext.define('Voyant.panel.CorpusCreator', {\n\textend: 'Ext.form.Panel',\n\trequires: ['Ext.form.field.File'],\n\tmixins: ['Voy"
},
{
"path": "src/main/webapp/app/panel/CorpusSet.js",
"chars": 5541,
"preview": "Ext.define('Voyant.panel.CorpusSet', {\n\textend: 'Ext.panel.Panel',\n requires: ['Voyant.panel.VoyantTabPanel','Voyant."
},
{
"path": "src/main/webapp/app/panel/CorpusTermSummary.js",
"chars": 7768,
"preview": "Ext.define('Voyant.widget.CorpusTermSummary', {\n extend: 'Ext.panel.Panel',\n mixins: ['Voyant.panel.Panel'],\n a"
},
{
"path": "src/main/webapp/app/panel/CorpusTerms.js",
"chars": 8970,
"preview": "/**\n * Corpus Terms tool, a grid that shows the terms in the corpus.\n * \n * <iframe src=\"../?corpus=austen&view=corpuste"
},
{
"path": "src/main/webapp/app/panel/Correlations.js",
"chars": 5150,
"preview": "Ext.define('Voyant.panel.Correlations', {\n\textend: 'Ext.grid.Panel',\n\tmixins: ['Voyant.panel.Panel'],\n\talias: 'widget.co"
},
{
"path": "src/main/webapp/app/panel/CustomSet.js",
"chars": 9552,
"preview": "Ext.define('Voyant.panel.CustomSet', {\n\textend: 'Ext.panel.Panel',\n\tmixins: ['Voyant.panel.Panel'],\n alias: 'widget.c"
},
{
"path": "src/main/webapp/app/panel/DocumentTerms.js",
"chars": 7325,
"preview": "Ext.define('Voyant.panel.DocumentTerms', {\n\textend: 'Ext.grid.Panel',\n\tmixins: ['Voyant.panel.Panel'],\n\trequires: ['Voya"
},
{
"path": "src/main/webapp/app/panel/Documents.js",
"chars": 16250,
"preview": "Ext.define('Voyant.panel.Documents', {\n\textend: 'Ext.grid.Panel',\n\tmixins: ['Voyant.panel.Panel','Voyant.util.Downloadab"
},
{
"path": "src/main/webapp/app/panel/DocumentsFinder.js",
"chars": 10762,
"preview": "Ext.define('Voyant.panel.DocumentsFinder', {\n\textend: 'Ext.grid.Panel',\n\trequire: ['Voyant.data.store.DocumentQueryMatch"
},
{
"path": "src/main/webapp/app/panel/DreamScape.js",
"chars": 95386,
"preview": "Ext.define('Voyant.panel.DreamScape', {\n extend: 'Ext.Panel',\n xtype: 'dreamscape',\n mixins: ['Voyant.panel.Pan"
},
{
"path": "src/main/webapp/app/panel/Embedder.js",
"chars": 1297,
"preview": "Ext.define('Voyant.panel.Embedder', {\n\textend: 'Ext.Panel',\n\tmixins: ['Voyant.panel.Panel'],\n\talias: 'widget.embedder',\n"
},
{
"path": "src/main/webapp/app/panel/Fountain.js",
"chars": 10648,
"preview": "// assuming Bubblelines library is loaded by containing page (via voyant.jsp)\nExt.define('Voyant.panel.Fountain', {\n\text"
},
{
"path": "src/main/webapp/app/panel/Knots.js",
"chars": 19181,
"preview": "// assuming Knots library is loaded by containing page (via voyant.jsp)\r\nExt.define('Voyant.panel.Knots', {\r\n\textend: 'E"
},
{
"path": "src/main/webapp/app/panel/Loom.js",
"chars": 41485,
"preview": "Ext.define('Voyant.panel.Loom', {\n extend: 'Ext.panel.Panel',\n mixins: ['Voyant.panel.Panel'],\n alias: 'widget."
},
{
"path": "src/main/webapp/app/panel/Mandala.js",
"chars": 18837,
"preview": "Ext.define('Voyant.panel.Mandala', {\n\textend: 'Ext.panel.Panel',\n\tmixins: ['Voyant.panel.Panel'],\n\talias: 'widget.mandal"
},
{
"path": "src/main/webapp/app/panel/MicroOcp.js",
"chars": 10182,
"preview": "Ext.define('Voyant.panel.MicroOcp', {\n\textend: 'Ext.panel.Panel',\n\tmixins: ['Voyant.panel.Panel'],\n\talias: 'widget.micro"
},
{
"path": "src/main/webapp/app/panel/MicroSearch.js",
"chars": 6841,
"preview": "Ext.define('Voyant.panel.MicroSearch', {\n\textend: 'Ext.panel.Panel',\n\tmixins: ['Voyant.panel.Panel'],\n\talias: 'widget.mi"
},
{
"path": "src/main/webapp/app/panel/NoTool.js",
"chars": 3106,
"preview": "Ext.define('Voyant.panel.NoTool', {\n\textend: 'Ext.panel.Panel',\n\tmixins: ['Voyant.panel.Panel'],\n\talias: 'widget.notool'"
},
{
"path": "src/main/webapp/app/panel/Panel.js",
"chars": 5018,
"preview": "Ext.define('Voyant.panel.Panel', {\n\tmixins: ['Voyant.util.Localization','Voyant.util.Api','Voyant.util.Toolable','Voyant"
},
{
"path": "src/main/webapp/app/panel/Phrases.js",
"chars": 10875,
"preview": "Ext.define('Voyant.panel.Phrases', {\n\textend: 'Ext.grid.Panel',\n\tmixins: ['Voyant.panel.Panel'],\n\talias: 'widget.phrases"
},
{
"path": "src/main/webapp/app/panel/Reader.js",
"chars": 19887,
"preview": "Ext.define('Voyant.panel.Reader', {\n\textend: 'Ext.panel.Panel',\n\trequires: ['Voyant.data.store.Tokens'],\n\tmixins: ['Voya"
},
{
"path": "src/main/webapp/app/panel/RezoViz.js",
"chars": 12308,
"preview": "Ext.define('Voyant.panel.RezoViz', {\n\textend: 'Ext.panel.Panel',\n\tmixins: ['Voyant.panel.Panel'],\n\talias: 'widget.rezovi"
},
{
"path": "src/main/webapp/app/panel/ScatterPlot.js",
"chars": 40276,
"preview": "Ext.define('Voyant.panel.ScatterPlot', {\r\n\textend: 'Ext.panel.Panel',\r\n\tmixins: ['Voyant.panel.Panel'],\r\n\trequires: ['Ex"
},
{
"path": "src/main/webapp/app/panel/ScatterSet.js",
"chars": 958,
"preview": "Ext.define('Voyant.panel.ScatterSet', {\n\textend: 'Ext.panel.Panel',\n requires: ['Voyant.panel.ScatterPlot','Voyant.pa"
},
{
"path": "src/main/webapp/app/panel/SimpleDocReader.js",
"chars": 3695,
"preview": "Ext.define('Voyant.panel.SimpleDocReader', {\n\textend: 'Ext.panel.Panel',\n\tmixins: ['Voyant.panel.Panel'],\n\talias: 'widge"
},
{
"path": "src/main/webapp/app/panel/StreamGraph.js",
"chars": 13566,
"preview": "Ext.define('Voyant.panel.StreamGraph', {\n\textend: 'Ext.panel.Panel',\n\tmixins: ['Voyant.panel.Panel'],\n\talias: 'widget.st"
},
{
"path": "src/main/webapp/app/panel/Subset.js",
"chars": 8939,
"preview": "Ext.define('Voyant.panel.Subset', { \n\t\n\t\n\textend: 'Ext.panel.Panel',\n\tmixins: ['Voyant.panel.Panel','Voyant.util.Downloa"
},
{
"path": "src/main/webapp/app/panel/Summary.js",
"chars": 16400,
"preview": "/**\n * The Summary panel provides an overview of a corpus, and the content will\n * depend on whether the corpus includes"
},
{
"path": "src/main/webapp/app/panel/TermsBerry.js",
"chars": 19437,
"preview": "Ext.define('Voyant.panel.TermsBerry', {\r\n\textend: 'Ext.panel.Panel',\r\n\tmixins: ['Voyant.panel.Panel'],\r\n\talias: 'widget."
},
{
"path": "src/main/webapp/app/panel/TermsRadio.js",
"chars": 14247,
"preview": "/**\n * Terms Radio tool, a visualization for term distributions.\n * \n * <iframe src=\"../?corpus=austen&view=termsradio\" "
},
{
"path": "src/main/webapp/app/panel/TextualArc.js",
"chars": 19449,
"preview": "Ext.define('Voyant.panel.TextualArc', {\n\textend: 'Ext.panel.Panel',\n\tmixins: ['Voyant.panel.Panel'],\n\talias: 'widget.tex"
},
{
"path": "src/main/webapp/app/panel/TopicContexts.js",
"chars": 3744,
"preview": "\n// for mysterious reasons, Ext.require loads the scripts but produces a blank page, so use loadScript instead\n/*\nvar tw"
},
{
"path": "src/main/webapp/app/panel/Topics.js",
"chars": 20144,
"preview": "// heavy lifting for the LDA from https://github.com/mimno/jsLDA with tweaks to fit into a Voyant object scope\n\nExt.defi"
},
{
"path": "src/main/webapp/app/panel/Trends.js",
"chars": 27675,
"preview": "/**\n * Trends tool, a line graph that shows term distributions.\n * \n * <iframe src=\"../?corpus=austen&view=trends\" style"
},
{
"path": "src/main/webapp/app/panel/Veliza.js",
"chars": 7829,
"preview": "Ext.define('Voyant.panel.Veliza', {\n\textend: 'Ext.panel.Panel',\n\tmixins: ['Voyant.panel.Panel'],\n xtype: 'veliza',\n\ta"
},
{
"path": "src/main/webapp/app/panel/Via.js",
"chars": 3682,
"preview": "\n// assuming Cirrus library is loaded by containing page (via voyant.jsp)\nExt.define('Voyant.panel.Via', {\n\textend: 'Ext"
},
{
"path": "src/main/webapp/app/panel/VoyantFooter.js",
"chars": 1724,
"preview": "Ext.define('Voyant.panel.VoyantFooter', {\n\textend: 'Ext.container.Container',\n\tmixins: ['Voyant.panel.Panel'],\n\talias: '"
},
{
"path": "src/main/webapp/app/panel/VoyantHeader.js",
"chars": 1745,
"preview": "Ext.define('Voyant.panel.VoyantHeader', {\n\textend: 'Ext.Panel',\n\tmixins: ['Voyant.panel.Panel'],\n\talias: 'widget.voyanth"
},
{
"path": "src/main/webapp/app/panel/VoyantTabPanel.js",
"chars": 922,
"preview": "\nExt.define('Voyant.panel.VoyantTabPanel', {\n\textend: 'Ext.tab.Panel',\n\talias: 'widget.voyanttabpanel',\n\tmixins: ['Voyan"
},
{
"path": "src/main/webapp/app/panel/WordTree.js",
"chars": 10245,
"preview": "Ext.define('Voyant.panel.WordTree', {\n\textend: 'Ext.panel.Panel',\n\tmixins: ['Voyant.panel.Panel'],\n\talias: 'widget.wordt"
},
{
"path": "src/main/webapp/app/panel/WordWall.js",
"chars": 20512,
"preview": "Ext.define('Voyant.panel.WordWall', {\n extend: 'Ext.panel.Panel',\n mixins: ['Voyant.panel.Panel','Voyant.util.Diac"
},
{
"path": "src/main/webapp/app/util/Api.js",
"chars": 2789,
"preview": "Ext.define('Voyant.util.Api', {\n\tconstructor: function(config) {\n\t\tvar apis = [];\n\t\tif (!this.isApplication) {\n\t\t\tvar ap"
},
{
"path": "src/main/webapp/app/util/Assignable.js",
"chars": 1310,
"preview": "Ext.define('Voyant.util.Assignable', {\n transferable: ['assign'],\n /**\n * This is a convenience method for ass"
},
{
"path": "src/main/webapp/app/util/Colors.js",
"chars": 5357,
"preview": "/**\n * A utility for storing palettes and associations between terms and colors.\n */\nExt.define('Voyant.util.Colors', {\n"
},
{
"path": "src/main/webapp/app/util/Deferrable.js",
"chars": 1474,
"preview": "Ext.define('Voyant.util.Deferrable', {\n\tdeferredStack : [],\n\n\treleaseAllDeferred : function() {\n\t\tthis.deferredStack = ["
},
{
"path": "src/main/webapp/app/util/DetailedError.js",
"chars": 973,
"preview": "Ext.define(\"Voyant.util.DetailedError\", {\n\textend: \"Ext.Error\",\n\tmixins: ['Voyant.util.Localization'],\n\tconfig: {\n\t\tmsg:"
},
{
"path": "src/main/webapp/app/util/DiacriticsRemover.js",
"chars": 9988,
"preview": "/*\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance "
},
{
"path": "src/main/webapp/app/util/Downloadable.js",
"chars": 1759,
"preview": "Ext.define(\"Voyant.util.Downloadable\", {\n\tmixins: ['Voyant.util.Localization'],\n\tstatics: {\n\t\ti18n: {\n\t\t},\n\t\tapi: {\n\t\t\td"
},
{
"path": "src/main/webapp/app/util/Localization.js",
"chars": 5006,
"preview": "Ext.define('Voyant.util.Localization', {\n\tstatics: {\n\t\tDEFAULT_LANGUAGE: 'en',\n\t\tLANGUAGE: 'en',\n\t\ti18n: {\n\t\t}\n\t\t\n\t},\n\t\n"
},
{
"path": "src/main/webapp/app/util/ResponseError.js",
"chars": 554,
"preview": "Ext.define(\"Voyant.util.ResponseError\", {\n\textend: \"Voyant.util.DetailedError\",\n\tconfig: {\n\t\tresponse: undefined\n\t},\n\tco"
},
{
"path": "src/main/webapp/app/util/SparkLine.js",
"chars": 3003,
"preview": "Ext.define('Voyant.util.SparkLine', {\r\n\t/**\r\n\t * Gets a Google spark line.\r\n\t * \r\n\t * @param {Array} values An array of "
},
{
"path": "src/main/webapp/app/util/Storage.js",
"chars": 4315,
"preview": "Ext.define('Voyant.util.Storage', {\n\tMAX_LENGTH: 950000, // keep it under 1 megabyte\n\t\n\tstoreResource: function(id, data"
},
{
"path": "src/main/webapp/app/util/Toolable.js",
"chars": 32393,
"preview": "Ext.define('Voyant.util.Toolable', {\n\trequires: ['Voyant.util.Localization','Voyant.util.Api'],\n\tstatics: {\n\t\ti18n: {\n\t\t"
},
{
"path": "src/main/webapp/app/util/Transferable.js",
"chars": 433,
"preview": "Ext.define(\"Voyant.util.Transferable\", {\n\ttransferable: ['transfer'],\n\ttransfer: function(source, destination) {\n\t\tif (s"
},
{
"path": "src/main/webapp/app/util/Variants.js",
"chars": 581,
"preview": "Ext.define(\"Voyant.util.Variants\", {\n\textend: 'Ext.Base',\n\tconstructor: function(variants) {\n\t\tthis.variants = variants;"
},
{
"path": "src/main/webapp/app/widget/CategoriesBuilder.js",
"chars": 21237,
"preview": "Ext.define('Voyant.widget.CategoriesOption', {\r\n\textend: 'Ext.container.Container',\r\n\tmixins: ['Voyant.util.Localization"
},
{
"path": "src/main/webapp/app/widget/CodeEditor.js",
"chars": 1264,
"preview": "Ext.define('Voyant.widget.CodeEditor', {\n\textend: 'Ext.panel.Panel',\n mixins: ['Voyant.util.Localization','Voyant.uti"
},
{
"path": "src/main/webapp/app/widget/ColorPaletteOption.js",
"chars": 6715,
"preview": "Ext.define('Voyant.widget.ColorPaletteOption', {\n extend: 'Ext.container.Container',\n mixins: ['Voyant.util.Locali"
},
{
"path": "src/main/webapp/app/widget/CorpusDocumentSelector.js",
"chars": 1956,
"preview": "Ext.define('Voyant.widget.CorpusDocumentSelector', {\n extend: 'Ext.button.Button',\n mixins: ['Voyant.util.Localiza"
},
{
"path": "src/main/webapp/app/widget/CorpusSelector.js",
"chars": 1862,
"preview": "Ext.define('Voyant.widget.CorpusSelector', {\n extend: 'Ext.form.field.ComboBox',\n mixins: ['Voyant.util.Localizati"
},
{
"path": "src/main/webapp/app/widget/DocumentSelector.js",
"chars": 4817,
"preview": "Ext.define('Voyant.widget.DocumentSelector', {\r\n mixins: ['Voyant.util.Localization'],\r\n alias: 'widget.documentse"
},
{
"path": "src/main/webapp/app/widget/DownloadFileFormat.js",
"chars": 1510,
"preview": "Ext.define('Voyant.widget.DownloadFileFormat', {\n extend: 'Ext.form.CheckboxGroup', //'Ext.container.Container',\n "
},
{
"path": "src/main/webapp/app/widget/DownloadFilenameBuilder.js",
"chars": 2890,
"preview": "Ext.define('Voyant.widget.DownloadFilenameBuilder', {\n extend: 'Ext.form.FieldContainer', //'Ext.container.Container'"
},
{
"path": "src/main/webapp/app/widget/DownloadOptions.js",
"chars": 609,
"preview": "Ext.define('Voyant.widget.DownloadOptions', {\n extend: 'Ext.form.FieldSet',\n mixins: ['Voyant.util.Localization'],"
},
{
"path": "src/main/webapp/app/widget/Facet.js",
"chars": 2010,
"preview": "Ext.define('Voyant.widget.Facet', {\n\textend: 'Ext.grid.Panel',\n mixins: ['Voyant.panel.Panel'],\n alias: 'widget.fa"
},
{
"path": "src/main/webapp/app/widget/FontFamilyOption.js",
"chars": 2251,
"preview": "Ext.define('Voyant.widget.FontFamilyOption', {\n extend: 'Ext.container.Container',\n mixins: ['Voyant.util.Localiza"
},
{
"path": "src/main/webapp/app/widget/ListEditor.js",
"chars": 3442,
"preview": "Ext.define('Voyant.widget.ListEditor', {\n extend: 'Ext.container.Container',\n mixins: ['Voyant.util.Localization']"
},
{
"path": "src/main/webapp/app/widget/LiveSearchGrid.js",
"chars": 4081,
"preview": "Ext.define('Voyant.widget.LiveSearchGrid', {\n extend: 'Ext.grid.Panel',\n \n /**\n * @private\n * search va"
},
{
"path": "src/main/webapp/app/widget/ProgressMonitor.js",
"chars": 2610,
"preview": "Ext.define('Voyant.widget.ProgressMonitor', {\n\textend: \"Ext.Base\",\n\tmixins: ['Voyant.util.Localization'],\n\tmsgbox: undef"
},
{
"path": "src/main/webapp/app/widget/QuerySearchField.js",
"chars": 10217,
"preview": "Ext.define('Voyant.widget.QuerySearchField', {\n extend: 'Ext.form.field.Tag',\n mixins: ['Voyant.util.Localization'"
},
{
"path": "src/main/webapp/app/widget/ReaderGraph.js",
"chars": 13077,
"preview": "Ext.define('Voyant.widget.ReaderGraph', {\n extend: 'Ext.container.Container',\n mixins: ['Voyant.util.Localization'"
},
{
"path": "src/main/webapp/app/widget/StopListOption.js",
"chars": 5920,
"preview": "Ext.define('Voyant.widget.StopListOption', {\n extend: 'Ext.container.Container',\n mixins: ['Voyant.util.Localizati"
},
{
"path": "src/main/webapp/app/widget/TotalPropertyStatus.js",
"chars": 970,
"preview": "Ext.define('Voyant.widget.TotalPropertyStatus', {\n extend: 'Ext.Component',\n mixins: ['Voyant.util.Localization'],"
},
{
"path": "src/main/webapp/app/widget/VoyantChart.js",
"chars": 3674,
"preview": "Ext.define('Voyant.widget.VoyantChart', {\n extend: 'Ext.chart.CartesianChart',\n mixins: ['Voyant.util.Localization"
},
{
"path": "src/main/webapp/app/widget/VoyantNetworkGraph.js",
"chars": 20069,
"preview": "Ext.define('Voyant.widget.VoyantNetworkGraph', {\n extend: 'Ext.panel.Panel',\n mixins: ['Voyant.util.Localization',"
},
{
"path": "src/main/webapp/app/widget/VoyantTableTransform.js",
"chars": 5349,
"preview": "Ext.define('Voyant.widget.VoyantTableTransform', {\n\textend: 'Ext.panel.Panel',\n mixins: ['Voyant.util.Localization','"
},
{
"path": "src/main/webapp/builder/Builder.js",
"chars": 16178,
"preview": "Ext.define('Voyant.panel.Builder', {\r\n\textend: 'Ext.panel.Panel',\r\n\trequires: [],\r\n\tmixins: ['Voyant.panel.Panel'],\r\n\tal"
},
{
"path": "src/main/webapp/builder/TableGrid.js",
"chars": 17755,
"preview": "/**\n * TableGrid.js\n *\n * Copyright, Moxiecode Systems AB\n * Released under LGPL License.\n *\n * License: http://www.tiny"
},
{
"path": "src/main/webapp/builder/css/builder.css",
"chars": 930,
"preview": "#toolsList .listTool {\r\n\tpadding: 10px 5px;\r\n\tcursor: pointer;\r\n\tuser-select:none;-o-user-select:none;-ms-user-select:no"
},
{
"path": "src/main/webapp/builder/index.jsp",
"chars": 1290,
"preview": "<% request.setAttribute(\"title\", \"Voyant Tools - Skin Builder\"); %>\r\n<%@ include file=\"../resources/jsp/html_head.jsp\" %"
},
{
"path": "src/main/webapp/catalogue/index.jsp",
"chars": 1634,
"preview": "<%\n\nString query = request.getQueryString();\nString[] parts = request.getRequestURI().substring(request.getContextPath()"
},
{
"path": "src/main/webapp/dream/dream.panel.js",
"chars": 16026,
"preview": "Ext.define(\"Voyant.panel.Dream\", {\n\textend: \"Ext.panel.Panel\",\n\trequires: ['Voyant.data.store.DocumentQueryMatches','Voy"
},
{
"path": "src/main/webapp/dream/index.jsp",
"chars": 12772,
"preview": "<% request.setAttribute(\"title\", \"DREaM - Distant Reading Early Modernity\"); %>\n<%@ include file=\"../resources/jsp/html_"
},
{
"path": "src/main/webapp/dtoc/annotator/dtoc.annotator.auth.js",
"chars": 6995,
"preview": "/**\r\n * This class recreates the default Auth plugin, but adds custom events:\r\n * - authenticationSucceeded\r\n * - authen"
},
{
"path": "src/main/webapp/dtoc/annotator/dtoc.annotator.css",
"chars": 2760,
"preview": "#dtcAnnotator .row {\r\n\tfont-family: 'Nunito', Arial, sans-serif !important;\r\n\tfont-weight: 300;\r\n\tfont-size: 12px;\r\n\tcol"
},
{
"path": "src/main/webapp/dtoc/annotator/dtoc.annotator.old.js",
"chars": 18491,
"preview": "Ext.define('Voyant.panel.DToC.AnnotatorPanel', {\r\n\textend: 'Ext.panel.Panel',\r\n\trequires: [],\r\n\tmixins: ['Voyant.panel.P"
},
{
"path": "src/main/webapp/dtoc/css/custom.css",
"chars": 594,
"preview": "/* we'll also add custom styles here using js, for handling graphics, notes, and links */\n\n[dtocHighlight=index] {\n\tback"
},
{
"path": "src/main/webapp/dtoc/css/default.css",
"chars": 143,
"preview": "/* default styling for docs with none */\n:root {\n display: block;\n padding: 1em;\n}\n\n:root > * {\n display: block"
},
{
"path": "src/main/webapp/dtoc/css/dtc.css",
"chars": 10530,
"preview": "body {\r\n background-color: #ffffff !important;\r\n}\r\n\r\n@font-face {\r\n\tfont-family: 'Glypha Bold';\r\n\tsrc: url('../fonts/"
},
{
"path": "src/main/webapp/dtoc/css/tei.css",
"chars": 3235,
"preview": "/* tei overrides */\n\n:root {\n padding: 20px 50px;\n font-family: Georgia, serif;\n font-size: 18px;\n line-heig"
},
{
"path": "src/main/webapp/dtoc/dtoc.app.js",
"chars": 30513,
"preview": "Ext.define('VoyantDTOCApp', {\r\n\textend : 'Voyant.VoyantCorpusApp',\r\n\tmixins: ['Voyant.util.Storage'],\r\n\tname: 'VoyantDTO"
},
{
"path": "src/main/webapp/dtoc/dtoc.docmodel.js",
"chars": 17471,
"preview": "Ext.define('Voyant.panel.DToC.DocModel', {\r\n\textend: 'Ext.panel.Panel',\r\n\trequires: [],\r\n\tmixins: ['Voyant.panel.Panel']"
},
{
"path": "src/main/webapp/dtoc/dtoc.index.js",
"chars": 16696,
"preview": "Ext.define('Voyant.panel.DToC.Index', {\r\n\textend: 'Ext.tree.Panel',\r\n\trequires: [],\r\n\tmixins: ['Voyant.panel.Panel'],\r\n\t"
},
{
"path": "src/main/webapp/dtoc/dtoc.markup.curator.js",
"chars": 14283,
"preview": "Ext.define('Voyant.panel.DToC.MarkupCurator', {\r\n\textend: 'Ext.grid.Panel',\r\n\trequires: [],\r\n\tmixins: ['Voyant.panel.DTo"
},
{
"path": "src/main/webapp/dtoc/dtoc.markup.js",
"chars": 10874,
"preview": "Ext.define('Voyant.panel.DToC.MarkupBase', {\r\n\t\r\n\tmixins: ['Voyant.panel.DToC.MarkupLoader'],\r\n\tconstructor: function(co"
},
{
"path": "src/main/webapp/dtoc/dtoc.markup.loader.js",
"chars": 10941,
"preview": "// all the tag loading and parsing logic happens here\r\n// makes use of getCorpus(), getApplicationi(), MarkupBase.savedT"
},
{
"path": "src/main/webapp/dtoc/dtoc.reader.iframe.js",
"chars": 26310,
"preview": "Ext.define('Voyant.panel.DToC.Reader', {\n\textend: 'Ext.panel.Panel',\n\trequires: ['Ext.ux.IFrame'],\n\tmixins: ['Voyant.pan"
},
{
"path": "src/main/webapp/dtoc/dtoc.reader.js",
"chars": 23082,
"preview": "Ext.define('Voyant.panel.DToC.Reader', {\r\n\textend: 'Ext.panel.Panel',\r\n\trequires: [],\r\n\tmixins: ['Voyant.panel.Panel'],\r"
},
{
"path": "src/main/webapp/dtoc/dtoc.stats.js",
"chars": 9059,
"preview": "Ext.define('Voyant.panel.DToC.Stats', {\r\n\textend: 'Ext.grid.Panel',\r\n\tmixins: ['Voyant.panel.Panel'],\r\n\talias: 'widget.d"
}
]
// ... and 1197 more files (download for full content)
About this extraction
This page contains the full source code of the sgsinclair/Voyant GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1397 files (51.7 MB), approximately 13.6M tokens, and a symbol index with 7609 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.