├── webapp ├── src │ ├── main │ │ ├── resources │ │ │ ├── logs │ │ │ │ └── logTest │ │ │ ├── .gitignore │ │ │ ├── graph │ │ │ │ └── filterTest.graph │ │ │ └── configs │ │ │ │ ├── collections.xml │ │ │ │ └── config.xml │ │ ├── webapp │ │ │ ├── css │ │ │ │ └── index.html │ │ │ ├── img │ │ │ │ ├── index.html │ │ │ │ ├── institutes.png │ │ │ │ └── updateGraph.png │ │ │ ├── js │ │ │ │ ├── index.html │ │ │ │ ├── app │ │ │ │ │ ├── app.module.js │ │ │ │ │ └── app.config.js │ │ │ │ └── custom.js │ │ │ ├── views │ │ │ │ └── error.jsp │ │ │ ├── partials │ │ │ │ ├── index.html │ │ │ │ ├── home.template.jsp │ │ │ │ └── error.template.jsp │ │ │ ├── .gitignore │ │ │ ├── vendor │ │ │ │ ├── angular │ │ │ │ │ ├── index.js │ │ │ │ │ ├── angular.min.js.gzip │ │ │ │ │ ├── bower.json │ │ │ │ │ ├── angular-csp.css │ │ │ │ │ ├── .bower.json │ │ │ │ │ ├── package.json │ │ │ │ │ ├── LICENSE.md │ │ │ │ │ └── README.md │ │ │ │ ├── angular-route │ │ │ │ │ ├── index.js │ │ │ │ │ ├── bower.json │ │ │ │ │ ├── .bower.json │ │ │ │ │ ├── package.json │ │ │ │ │ └── LICENSE.md │ │ │ │ ├── angular-cookies │ │ │ │ │ ├── index.js │ │ │ │ │ ├── bower.json │ │ │ │ │ ├── .bower.json │ │ │ │ │ ├── package.json │ │ │ │ │ ├── LICENSE.md │ │ │ │ │ └── angular-cookies.min.js │ │ │ │ ├── angular-sanitize │ │ │ │ │ ├── index.js │ │ │ │ │ ├── bower.json │ │ │ │ │ ├── .bower.json │ │ │ │ │ ├── package.json │ │ │ │ │ └── LICENSE.md │ │ │ │ ├── jquery │ │ │ │ │ ├── src │ │ │ │ │ │ ├── var │ │ │ │ │ │ │ ├── arr.js │ │ │ │ │ │ │ ├── document.js │ │ │ │ │ │ │ ├── getProto.js │ │ │ │ │ │ │ ├── concat.js │ │ │ │ │ │ │ ├── push.js │ │ │ │ │ │ │ ├── slice.js │ │ │ │ │ │ │ ├── class2type.js │ │ │ │ │ │ │ ├── indexOf.js │ │ │ │ │ │ │ ├── pnum.js │ │ │ │ │ │ │ ├── fnToString.js │ │ │ │ │ │ │ ├── toString.js │ │ │ │ │ │ │ ├── hasOwn.js │ │ │ │ │ │ │ ├── documentElement.js │ │ │ │ │ │ │ ├── support.js │ │ │ │ │ │ │ ├── ObjectFunctionString.js │ │ │ │ │ │ │ ├── rcssNum.js │ │ │ │ │ │ │ └── rnothtmlwhite.js │ │ │ │ │ │ ├── selector.js │ │ │ │ │ │ ├── .eslintrc.json │ │ │ │ │ │ ├── ajax │ │ │ │ │ │ │ ├── var │ │ │ │ │ │ │ │ ├── rquery.js │ │ │ │ │ │ │ │ ├── location.js │ │ │ │ │ │ │ │ └── nonce.js │ │ │ │ │ │ │ ├── parseXML.js │ │ │ │ │ │ │ └── load.js │ │ │ │ │ │ ├── css │ │ │ │ │ │ │ ├── var │ │ │ │ │ │ │ │ ├── rmargin.js │ │ │ │ │ │ │ │ ├── cssExpand.js │ │ │ │ │ │ │ │ ├── rnumnonpx.js │ │ │ │ │ │ │ │ ├── getStyles.js │ │ │ │ │ │ │ │ ├── swap.js │ │ │ │ │ │ │ │ └── isHiddenWithinTree.js │ │ │ │ │ │ │ ├── hiddenVisibleSelectors.js │ │ │ │ │ │ │ ├── addGetHookIf.js │ │ │ │ │ │ │ ├── curCSS.js │ │ │ │ │ │ │ └── adjustCSS.js │ │ │ │ │ │ ├── data │ │ │ │ │ │ │ └── var │ │ │ │ │ │ │ │ ├── dataPriv.js │ │ │ │ │ │ │ │ ├── dataUser.js │ │ │ │ │ │ │ │ └── acceptData.js │ │ │ │ │ │ ├── manipulation │ │ │ │ │ │ │ ├── var │ │ │ │ │ │ │ │ ├── rcheckableType.js │ │ │ │ │ │ │ │ ├── rscriptType.js │ │ │ │ │ │ │ │ └── rtagName.js │ │ │ │ │ │ │ ├── _evalUrl.js │ │ │ │ │ │ │ ├── setGlobalEval.js │ │ │ │ │ │ │ ├── getAll.js │ │ │ │ │ │ │ ├── wrapMap.js │ │ │ │ │ │ │ └── support.js │ │ │ │ │ │ ├── traversing │ │ │ │ │ │ │ └── var │ │ │ │ │ │ │ │ ├── rneedsContext.js │ │ │ │ │ │ │ │ ├── siblings.js │ │ │ │ │ │ │ │ └── dir.js │ │ │ │ │ │ ├── core │ │ │ │ │ │ │ ├── var │ │ │ │ │ │ │ │ └── rsingleTag.js │ │ │ │ │ │ │ ├── readyException.js │ │ │ │ │ │ │ ├── nodeName.js │ │ │ │ │ │ │ ├── DOMEval.js │ │ │ │ │ │ │ ├── stripAndCollapse.js │ │ │ │ │ │ │ ├── support.js │ │ │ │ │ │ │ ├── access.js │ │ │ │ │ │ │ └── parseHTML.js │ │ │ │ │ │ ├── event │ │ │ │ │ │ │ ├── support.js │ │ │ │ │ │ │ ├── ajax.js │ │ │ │ │ │ │ ├── alias.js │ │ │ │ │ │ │ └── focusin.js │ │ │ │ │ │ ├── attributes.js │ │ │ │ │ │ ├── effects │ │ │ │ │ │ │ └── animatedSelector.js │ │ │ │ │ │ ├── selector-sizzle.js │ │ │ │ │ │ ├── deferred │ │ │ │ │ │ │ └── exceptionHook.js │ │ │ │ │ │ ├── queue │ │ │ │ │ │ │ └── delay.js │ │ │ │ │ │ ├── exports │ │ │ │ │ │ │ ├── global.js │ │ │ │ │ │ │ └── amd.js │ │ │ │ │ │ ├── jquery.js │ │ │ │ │ │ ├── attributes │ │ │ │ │ │ │ └── support.js │ │ │ │ │ │ ├── deprecated.js │ │ │ │ │ │ ├── wrap.js │ │ │ │ │ │ └── dimensions.js │ │ │ │ │ ├── bower.json │ │ │ │ │ ├── .bower.json │ │ │ │ │ ├── LICENSE.txt │ │ │ │ │ └── external │ │ │ │ │ │ └── sizzle │ │ │ │ │ │ └── LICENSE.txt │ │ │ │ ├── bootstrap │ │ │ │ │ ├── Gemfile │ │ │ │ │ ├── grunt │ │ │ │ │ │ ├── .jshintrc │ │ │ │ │ │ ├── bs-commonjs-generator.js │ │ │ │ │ │ ├── bs-raw-files-generator.js │ │ │ │ │ │ ├── bs-glyphicons-data-generator.js │ │ │ │ │ │ ├── configBridge.json │ │ │ │ │ │ └── sauce_browsers.yml │ │ │ │ │ ├── less │ │ │ │ │ │ ├── mixins │ │ │ │ │ │ │ ├── center-block.less │ │ │ │ │ │ │ ├── size.less │ │ │ │ │ │ │ ├── opacity.less │ │ │ │ │ │ │ ├── text-emphasis.less │ │ │ │ │ │ │ ├── text-overflow.less │ │ │ │ │ │ │ ├── background-variant.less │ │ │ │ │ │ │ ├── resize.less │ │ │ │ │ │ │ ├── labels.less │ │ │ │ │ │ │ ├── progress-bar.less │ │ │ │ │ │ │ ├── nav-divider.less │ │ │ │ │ │ │ ├── reset-filter.less │ │ │ │ │ │ │ ├── alerts.less │ │ │ │ │ │ │ ├── tab-focus.less │ │ │ │ │ │ │ ├── nav-vertical-align.less │ │ │ │ │ │ │ ├── responsive-visibility.less │ │ │ │ │ │ │ ├── reset-text.less │ │ │ │ │ │ │ ├── border-radius.less │ │ │ │ │ │ │ ├── pagination.less │ │ │ │ │ │ │ ├── panels.less │ │ │ │ │ │ │ ├── hide-text.less │ │ │ │ │ │ │ ├── list-group.less │ │ │ │ │ │ │ ├── clearfix.less │ │ │ │ │ │ │ ├── table-row.less │ │ │ │ │ │ │ ├── image.less │ │ │ │ │ │ │ └── buttons.less │ │ │ │ │ │ ├── .csslintrc │ │ │ │ │ │ ├── wells.less │ │ │ │ │ │ ├── breadcrumbs.less │ │ │ │ │ │ ├── responsive-embed.less │ │ │ │ │ │ ├── component-animations.less │ │ │ │ │ │ ├── close.less │ │ │ │ │ │ ├── thumbnails.less │ │ │ │ │ │ ├── utilities.less │ │ │ │ │ │ ├── pager.less │ │ │ │ │ │ ├── media.less │ │ │ │ │ │ ├── mixins.less │ │ │ │ │ │ ├── labels.less │ │ │ │ │ │ ├── jumbotron.less │ │ │ │ │ │ ├── badges.less │ │ │ │ │ │ ├── bootstrap.less │ │ │ │ │ │ ├── code.less │ │ │ │ │ │ ├── grid.less │ │ │ │ │ │ └── alerts.less │ │ │ │ │ ├── fonts │ │ │ │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ │ │ │ ├── glyphicons-halflings-regular.woff │ │ │ │ │ │ └── glyphicons-halflings-regular.woff2 │ │ │ │ │ ├── dist │ │ │ │ │ │ ├── fonts │ │ │ │ │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ │ │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ │ │ │ │ ├── glyphicons-halflings-regular.woff │ │ │ │ │ │ │ └── glyphicons-halflings-regular.woff2 │ │ │ │ │ │ └── js │ │ │ │ │ │ │ └── npm.js │ │ │ │ │ ├── js │ │ │ │ │ │ ├── .jshintrc │ │ │ │ │ │ └── transition.js │ │ │ │ │ ├── CHANGELOG.md │ │ │ │ │ ├── nuget │ │ │ │ │ │ ├── MyGet.ps1 │ │ │ │ │ │ ├── bootstrap.nuspec │ │ │ │ │ │ └── bootstrap.less.nuspec │ │ │ │ │ ├── bower.json │ │ │ │ │ ├── Gemfile.lock │ │ │ │ │ ├── package.js │ │ │ │ │ ├── .bower.json │ │ │ │ │ ├── LICENSE │ │ │ │ │ └── ISSUE_TEMPLATE.md │ │ │ │ └── d3 │ │ │ │ │ ├── bower.json │ │ │ │ │ ├── .bower.json │ │ │ │ │ ├── README.md │ │ │ │ │ └── LICENSE │ │ │ └── WEB-INF │ │ │ │ ├── web.xml │ │ │ │ ├── log4j2.xml │ │ │ │ └── webapp-dispatcher-servlet.xml │ │ └── java │ │ │ └── de │ │ │ └── tudarmstadt │ │ │ └── ukp │ │ │ └── exploration │ │ │ └── graph_doc_explorer │ │ │ └── webapp │ │ │ ├── web │ │ │ └── controllers │ │ │ │ └── HomeController.java │ │ │ └── application │ │ │ ├── domains │ │ │ ├── Document.java │ │ │ ├── SearchResponse.java │ │ │ ├── GraphAPI.java │ │ │ ├── Collection.java │ │ │ └── GraphEdgeAPI.java │ │ │ ├── graph │ │ │ ├── filter │ │ │ │ └── IGraphFilter.java │ │ │ ├── parser │ │ │ │ ├── IGraphParser.java │ │ │ │ └── SyntaxErrorException.java │ │ │ ├── GeneratorsContainer.java │ │ │ └── FileGraphGenerator.java │ │ │ └── search │ │ │ └── ISearcher.java │ └── test │ │ ├── resources │ │ ├── .gitignore │ │ ├── graph │ │ │ └── filterTest.graph │ │ └── configs │ │ │ ├── collections.xml │ │ │ └── config.xml │ │ ├── java │ │ └── de │ │ │ └── tudarmstadt │ │ │ └── ukp │ │ │ └── exploration │ │ │ └── graph_doc_explorer │ │ │ └── webapp │ │ │ └── application │ │ │ ├── search │ │ │ └── SolrSearchHTTPTest.java │ │ │ ├── configs │ │ │ └── WebAppConfigurationTest.java │ │ │ └── graph │ │ │ ├── DummyGraphGeneratorTest.java │ │ │ ├── parser │ │ │ └── SampleDataParserTest.java │ │ │ └── filter │ │ │ └── NodesInScopeFilterTest.java │ │ └── javascript │ │ └── unit │ │ └── karma.conf.js ├── .bowerrc ├── jdepend.properties ├── .gitignore ├── package.json ├── bower.json └── README.md ├── graphs-ne-impl ├── .gitignore ├── pom.xml ├── src │ ├── main │ │ └── java │ │ │ └── de │ │ │ └── tudarmstadt │ │ │ └── ukp │ │ │ └── exploration │ │ │ └── graph_doc_explorer │ │ │ └── graphs_ne_impl │ │ │ └── UimaUtil.java │ └── test │ │ └── java │ │ └── de │ │ └── tudarmstadt │ │ └── ukp │ │ └── exploration │ │ └── graph_doc_explorer │ │ └── graph_ne_impl │ │ └── Test.java └── README.md ├── indexer ├── .gitignore ├── src │ ├── main │ │ └── java │ │ │ └── de │ │ │ └── tudarmstadt │ │ │ └── ukp │ │ │ └── exploration │ │ │ └── graph_doc_explorer │ │ │ └── indexer │ │ │ ├── application │ │ │ ├── IDocumentIndexer.java │ │ │ ├── IArgumentsHandler.java │ │ │ ├── SolrArgumentsHandler.java │ │ │ └── SolrIndexer.java │ │ │ └── config │ │ │ ├── config.xml │ │ │ └── log4j2.xml │ └── test │ │ └── java │ │ └── de │ │ └── tudarmstadt │ │ └── ukp │ │ └── exploration │ │ └── graph_doc_explorer │ │ └── indexer │ │ └── application │ │ └── tests │ │ ├── SolrIndexerTest.java │ │ ├── ConfigurationTest.java │ │ └── SolrArgumentsHandlerTest.java └── README.md ├── graphs ├── .gitignore ├── README.md ├── pom.xml └── src │ └── main │ └── java │ └── de │ └── tudarmstadt │ └── ukp │ └── exploration │ └── graph_doc_explorer │ └── graphs │ ├── Label.java │ ├── Occurrence.java │ ├── SearchResult.java │ ├── UpdateQueue.java │ ├── IGraphGenerator.java │ ├── LogEntry.java │ ├── Graph.java │ └── GraphEdge.java ├── .gitignore └── NOTICE.txt /webapp/src/main/resources/logs/logTest: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/css/index.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/img/index.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/js/index.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/views/error.jsp: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/partials/index.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /webapp/src/main/resources/.gitignore: -------------------------------------------------------------------------------- 1 | /data/ 2 | -------------------------------------------------------------------------------- /webapp/src/test/resources/.gitignore: -------------------------------------------------------------------------------- 1 | /data/ 2 | -------------------------------------------------------------------------------- /webapp/.bowerrc: -------------------------------------------------------------------------------- 1 | { 2 | "directory": "src/main/webapp/vendor" 3 | } 4 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/.gitignore: -------------------------------------------------------------------------------- 1 | # bower files 2 | vendor/* 3 | !vendor 4 | !vendor/index.html 5 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/angular/index.js: -------------------------------------------------------------------------------- 1 | require('./angular'); 2 | module.exports = angular; 3 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/angular-route/index.js: -------------------------------------------------------------------------------- 1 | require('./angular-route'); 2 | module.exports = 'ngRoute'; 3 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/angular-cookies/index.js: -------------------------------------------------------------------------------- 1 | require('./angular-cookies'); 2 | module.exports = 'ngCookies'; 3 | -------------------------------------------------------------------------------- /webapp/jdepend.properties: -------------------------------------------------------------------------------- 1 | ignore.java=java.*,javax.* 2 | ignore.sun=sun.*,com.sun.* 3 | ignore.org=org.* 4 | ignore.com=com.* -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/angular-sanitize/index.js: -------------------------------------------------------------------------------- 1 | require('./angular-sanitize'); 2 | module.exports = 'ngSanitize'; 3 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/jquery/src/var/arr.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | "use strict"; 3 | 4 | return []; 5 | } ); 6 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/js/app/app.module.js: -------------------------------------------------------------------------------- 1 | 'use strict' ; 2 | angular.module('searchApp', ['ngRoute', 'ngSanitize', 'ngCookies']) ; -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/jquery/src/selector.js: -------------------------------------------------------------------------------- 1 | define( [ "./selector-sizzle" ], function() { 2 | "use strict"; 3 | } ); 4 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/jquery/src/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | 4 | "extends": "../.eslintrc-browser.json" 5 | } 6 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/jquery/src/ajax/var/rquery.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | "use strict"; 3 | 4 | return ( /\?/ ); 5 | } ); 6 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/jquery/src/var/document.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | "use strict"; 3 | 4 | return window.document; 5 | } ); 6 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/jquery/src/ajax/var/location.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | "use strict"; 3 | 4 | return window.location; 5 | } ); 6 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/jquery/src/css/var/rmargin.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | "use strict"; 3 | 4 | return ( /^margin/ ); 5 | } ); 6 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/img/institutes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UKPLab/emnlp2017-graphdocexplore/HEAD/webapp/src/main/webapp/img/institutes.png -------------------------------------------------------------------------------- /webapp/src/main/webapp/img/updateGraph.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UKPLab/emnlp2017-graphdocexplore/HEAD/webapp/src/main/webapp/img/updateGraph.png -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/jquery/src/var/getProto.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | "use strict"; 3 | 4 | return Object.getPrototypeOf; 5 | } ); 6 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/jquery/src/var/concat.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "./arr" 3 | ], function( arr ) { 4 | "use strict"; 5 | 6 | return arr.concat; 7 | } ); 8 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/jquery/src/var/push.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "./arr" 3 | ], function( arr ) { 4 | "use strict"; 5 | 6 | return arr.push; 7 | } ); 8 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/jquery/src/var/slice.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "./arr" 3 | ], function( arr ) { 4 | "use strict"; 5 | 6 | return arr.slice; 7 | } ); 8 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/partials/home.template.jsp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UKPLab/emnlp2017-graphdocexplore/HEAD/webapp/src/main/webapp/partials/home.template.jsp -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/jquery/src/var/class2type.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | "use strict"; 3 | 4 | // [[Class]] -> type pairs 5 | return {}; 6 | } ); 7 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/jquery/src/var/indexOf.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "./arr" 3 | ], function( arr ) { 4 | "use strict"; 5 | 6 | return arr.indexOf; 7 | } ); 8 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/jquery/src/css/var/cssExpand.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | "use strict"; 3 | 4 | return [ "Top", "Right", "Bottom", "Left" ]; 5 | } ); 6 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/jquery/src/data/var/dataPriv.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../Data" 3 | ], function( Data ) { 4 | "use strict"; 5 | 6 | return new Data(); 7 | } ); 8 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/jquery/src/data/var/dataUser.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../Data" 3 | ], function( Data ) { 4 | "use strict"; 5 | 6 | return new Data(); 7 | } ); 8 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/jquery/src/var/pnum.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | "use strict"; 3 | 4 | return ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; 5 | } ); 6 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/jquery/src/ajax/var/nonce.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../../core" 3 | ], function( jQuery ) { 4 | "use strict"; 5 | 6 | return jQuery.now(); 7 | } ); 8 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/jquery/src/manipulation/var/rcheckableType.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | "use strict"; 3 | 4 | return ( /^(?:checkbox|radio)$/i ); 5 | } ); 6 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/jquery/src/manipulation/var/rscriptType.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | "use strict"; 3 | 4 | return ( /^$|\/(?:java|ecma)script/i ); 5 | } ); 6 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/jquery/src/manipulation/var/rtagName.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | "use strict"; 3 | 4 | return ( /<([a-z][^\/\0>\x20\t\r\n\f]+)/i ); 5 | } ); 6 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/jquery/src/var/fnToString.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "./hasOwn" 3 | ], function( hasOwn ) { 4 | "use strict"; 5 | 6 | return hasOwn.toString; 7 | } ); 8 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/angular/angular.min.js.gzip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UKPLab/emnlp2017-graphdocexplore/HEAD/webapp/src/main/webapp/vendor/angular/angular.min.js.gzip -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/jquery/src/var/toString.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "./class2type" 3 | ], function( class2type ) { 4 | "use strict"; 5 | 6 | return class2type.toString; 7 | } ); 8 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/jquery/src/var/hasOwn.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "./class2type" 3 | ], function( class2type ) { 4 | "use strict"; 5 | 6 | return class2type.hasOwnProperty; 7 | } ); 8 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/bootstrap/Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | 3 | group :development, :test do 4 | gem 'jekyll', '~> 3.1.2' 5 | gem 'jekyll-sitemap', '~> 0.11.0' 6 | end 7 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/jquery/src/var/documentElement.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "./document" 3 | ], function( document ) { 4 | "use strict"; 5 | 6 | return document.documentElement; 7 | } ); 8 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/jquery/src/var/support.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | "use strict"; 3 | 4 | // All support tests are defined in their respective modules. 5 | return {}; 6 | } ); 7 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/bootstrap/grunt/.jshintrc: -------------------------------------------------------------------------------- 1 | { 2 | "extends" : "../js/.jshintrc", 3 | "asi" : false, 4 | "browser" : false, 5 | "es3" : false, 6 | "node" : true 7 | } 8 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/jquery/src/var/ObjectFunctionString.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "./fnToString" 3 | ], function( fnToString ) { 4 | "use strict"; 5 | 6 | return fnToString.call( Object ); 7 | } ); 8 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/bootstrap/less/mixins/center-block.less: -------------------------------------------------------------------------------- 1 | // Center-align a block level element 2 | 3 | .center-block() { 4 | display: block; 5 | margin-left: auto; 6 | margin-right: auto; 7 | } 8 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/jquery/src/css/var/rnumnonpx.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../../var/pnum" 3 | ], function( pnum ) { 4 | "use strict"; 5 | 6 | return new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); 7 | } ); 8 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/angular/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular", 3 | "version": "1.5.11", 4 | "license": "MIT", 5 | "main": "./angular.js", 6 | "ignore": [], 7 | "dependencies": { 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/bootstrap/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UKPLab/emnlp2017-graphdocexplore/HEAD/webapp/src/main/webapp/vendor/bootstrap/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/bootstrap/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UKPLab/emnlp2017-graphdocexplore/HEAD/webapp/src/main/webapp/vendor/bootstrap/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/bootstrap/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UKPLab/emnlp2017-graphdocexplore/HEAD/webapp/src/main/webapp/vendor/bootstrap/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/bootstrap/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UKPLab/emnlp2017-graphdocexplore/HEAD/webapp/src/main/webapp/vendor/bootstrap/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/d3/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "d3", 3 | "description": "A JavaScript visualization library for HTML and SVG.", 4 | "main": "d3.js", 5 | "license": "BSD-3-Clause", 6 | "ignore": [] 7 | } 8 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/jquery/src/traversing/var/rneedsContext.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../../core", 3 | "../../selector" 4 | ], function( jQuery ) { 5 | "use strict"; 6 | 7 | return jQuery.expr.match.needsContext; 8 | } ); 9 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/bootstrap/dist/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UKPLab/emnlp2017-graphdocexplore/HEAD/webapp/src/main/webapp/vendor/bootstrap/dist/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/bootstrap/dist/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UKPLab/emnlp2017-graphdocexplore/HEAD/webapp/src/main/webapp/vendor/bootstrap/dist/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/bootstrap/dist/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UKPLab/emnlp2017-graphdocexplore/HEAD/webapp/src/main/webapp/vendor/bootstrap/dist/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/bootstrap/dist/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UKPLab/emnlp2017-graphdocexplore/HEAD/webapp/src/main/webapp/vendor/bootstrap/dist/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/jquery/src/core/var/rsingleTag.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | "use strict"; 3 | 4 | // Match a standalone tag 5 | return ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); 6 | } ); 7 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/jquery/src/var/rcssNum.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../var/pnum" 3 | ], function( pnum ) { 4 | 5 | "use strict"; 6 | 7 | return new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); 8 | 9 | } ); 10 | -------------------------------------------------------------------------------- /graphs-ne-impl/.gitignore: -------------------------------------------------------------------------------- 1 | /target/ 2 | target/ 3 | *.class 4 | *.jar 5 | *.war 6 | *.ear 7 | *.zip 8 | *.tar.gz 9 | *.rar 10 | hs_err_pid* 11 | 12 | .settings/ 13 | .externalToolBuilders/ 14 | *.launch 15 | .project 16 | .classpath -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/bootstrap/less/mixins/size.less: -------------------------------------------------------------------------------- 1 | // Sizing shortcuts 2 | 3 | .size(@width; @height) { 4 | width: @width; 5 | height: @height; 6 | } 7 | 8 | .square(@size) { 9 | .size(@size; @size); 10 | } 11 | -------------------------------------------------------------------------------- /indexer/.gitignore: -------------------------------------------------------------------------------- 1 | /target/ 2 | target/ 3 | *.class 4 | *.jar 5 | *.war 6 | *.ear 7 | *.zip 8 | *.tar.gz 9 | *.rar 10 | hs_err_pid* 11 | 12 | .settings/ 13 | .externalToolBuilders/ 14 | *.launch 15 | .project 16 | .classpath -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/bootstrap/less/mixins/opacity.less: -------------------------------------------------------------------------------- 1 | // Opacity 2 | 3 | .opacity(@opacity) { 4 | opacity: @opacity; 5 | // IE8 filter 6 | @opacity-ie: (@opacity * 100); 7 | filter: ~"alpha(opacity=@{opacity-ie})"; 8 | } 9 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/bootstrap/less/mixins/text-emphasis.less: -------------------------------------------------------------------------------- 1 | // Typography 2 | 3 | .text-emphasis-variant(@color) { 4 | color: @color; 5 | a&:hover, 6 | a&:focus { 7 | color: darken(@color, 10%); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/jquery/src/event/support.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../var/support" 3 | ], function( support ) { 4 | 5 | "use strict"; 6 | 7 | support.focusin = "onfocusin" in window; 8 | 9 | return support; 10 | 11 | } ); 12 | -------------------------------------------------------------------------------- /graphs/.gitignore: -------------------------------------------------------------------------------- 1 | /data/ 2 | /bin/ 3 | target/ 4 | *.class 5 | *.jar 6 | *.war 7 | *.ear 8 | *.zip 9 | *.tar.gz 10 | *.rar 11 | hs_err_pid* 12 | 13 | .settings/ 14 | .externalToolBuilders/ 15 | *.launch 16 | .project 17 | .classpath -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/bootstrap/less/mixins/text-overflow.less: -------------------------------------------------------------------------------- 1 | // Text overflow 2 | // Requires inline-block or block for proper styling 3 | 4 | .text-overflow() { 5 | overflow: hidden; 6 | text-overflow: ellipsis; 7 | white-space: nowrap; 8 | } 9 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/bootstrap/less/mixins/background-variant.less: -------------------------------------------------------------------------------- 1 | // Contextual backgrounds 2 | 3 | .bg-variant(@color) { 4 | background-color: @color; 5 | a&:hover, 6 | a&:focus { 7 | background-color: darken(@color, 10%); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/angular-route/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular-route", 3 | "version": "1.5.11", 4 | "license": "MIT", 5 | "main": "./angular-route.js", 6 | "ignore": [], 7 | "dependencies": { 8 | "angular": "1.5.11" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/angular-cookies/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular-cookies", 3 | "version": "1.5.11", 4 | "license": "MIT", 5 | "main": "./angular-cookies.js", 6 | "ignore": [], 7 | "dependencies": { 8 | "angular": "1.5.11" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/bootstrap/less/mixins/resize.less: -------------------------------------------------------------------------------- 1 | // Resize anything 2 | 3 | .resizable(@direction) { 4 | resize: @direction; // Options: horizontal, vertical, both 5 | overflow: auto; // Per CSS3 UI, `resize` only applies when `overflow` isn't `visible` 6 | } 7 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | #ignore tmp file 2 | .~* 3 | *.swp 4 | 5 | target/ 6 | *.class 7 | *.jar 8 | *.war 9 | *.ear 10 | *.zip 11 | *.tar.gz 12 | *.rar 13 | hs_err_pid* 14 | 15 | .settings/ 16 | .externalToolBuilders/ 17 | *.launch 18 | .project 19 | .classpath 20 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/angular-sanitize/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular-sanitize", 3 | "version": "1.5.11", 4 | "license": "MIT", 5 | "main": "./angular-sanitize.js", 6 | "ignore": [], 7 | "dependencies": { 8 | "angular": "1.5.11" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/bootstrap/less/mixins/labels.less: -------------------------------------------------------------------------------- 1 | // Labels 2 | 3 | .label-variant(@color) { 4 | background-color: @color; 5 | 6 | &[href] { 7 | &:hover, 8 | &:focus { 9 | background-color: darken(@color, 10%); 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/jquery/src/core/readyException.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../core" 3 | ], function( jQuery ) { 4 | 5 | "use strict"; 6 | 7 | jQuery.readyException = function( error ) { 8 | window.setTimeout( function() { 9 | throw error; 10 | } ); 11 | }; 12 | 13 | } ); 14 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/jquery/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "jquery", 3 | "main": "dist/jquery.js", 4 | "license": "MIT", 5 | "ignore": [ 6 | "package.json" 7 | ], 8 | "keywords": [ 9 | "jquery", 10 | "javascript", 11 | "browser", 12 | "library" 13 | ] 14 | } -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/jquery/src/core/nodeName.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | 3 | "use strict"; 4 | 5 | function nodeName( elem, name ) { 6 | 7 | return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); 8 | 9 | }; 10 | 11 | return nodeName; 12 | 13 | } ); 14 | -------------------------------------------------------------------------------- /webapp/src/main/resources/graph/filterTest.graph: -------------------------------------------------------------------------------- 1 | nodes 2 | 1000 Alex a.txt;1;2 3 | 1001 Arwed b.txt;3;4 4 | 1002 Ramy b.txt;5;6|a.txt;9;10 5 | 1003 Basti a.txt;7;8 6 | edges 7 | 1000 1001 is related to 8 | 1001 1002 is related to 9 | 1002 1003 is related to 10 | 1000 1002 is related to -------------------------------------------------------------------------------- /indexer/src/main/java/de/tudarmstadt/ukp/exploration/graph_doc_explorer/indexer/application/IDocumentIndexer.java: -------------------------------------------------------------------------------- 1 | package de.tudarmstadt.ukp.exploration.graph_doc_explorer.indexer.application; 2 | 3 | public interface IDocumentIndexer { 4 | public void indexDocuments(IArgumentsHandler handler) ; 5 | } 6 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/bootstrap/less/mixins/progress-bar.less: -------------------------------------------------------------------------------- 1 | // Progress bars 2 | 3 | .progress-bar-variant(@color) { 4 | background-color: @color; 5 | 6 | // Deprecated parent class requirement as of v3.2.0 7 | .progress-striped & { 8 | #gradient > .striped(); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /webapp/src/test/resources/graph/filterTest.graph: -------------------------------------------------------------------------------- 1 | nodes 2 | 1000 Alex a.txt;1;2 3 | 1001 Arwed b.txt;3;4 4 | 1002 Ramy b.txt;5;6|a.txt;9;10 5 | 1003 Basti a.txt;7;8 6 | edges 7 | 1000 1001 is related to 8 | 1001 1002 is related to 9 | 1002 1003 is related to 10 | 1000 1002 is related to 11 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/jquery/src/var/rnothtmlwhite.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | "use strict"; 3 | 4 | // Only count HTML whitespace 5 | // Other whitespace should count in values 6 | // https://html.spec.whatwg.org/multipage/infrastructure.html#space-character 7 | return ( /[^\x20\t\r\n\f]+/g ); 8 | } ); 9 | -------------------------------------------------------------------------------- /graphs/README.md: -------------------------------------------------------------------------------- 1 | # Graph-based Document Exploration 2 | ## graphs module 3 | 4 | This module contains Java data structures to store graphs with nodes and edges and their corresponding spans in documents they were extracted from. Both the webapp and all graph extraction modules use these data structures. 5 | 6 | 7 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/jquery/src/attributes.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "./core", 3 | "./attributes/attr", 4 | "./attributes/prop", 5 | "./attributes/classes", 6 | "./attributes/val" 7 | ], function( jQuery ) { 8 | 9 | "use strict"; 10 | 11 | // Return jQuery for attributes-only inclusion 12 | return jQuery; 13 | } ); 14 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/bootstrap/less/mixins/nav-divider.less: -------------------------------------------------------------------------------- 1 | // Horizontal dividers 2 | // 3 | // Dividers (basically an hr) within dropdowns and nav lists 4 | 5 | .nav-divider(@color: #e5e5e5) { 6 | height: 1px; 7 | margin: ((@line-height-computed / 2) - 1) 0; 8 | overflow: hidden; 9 | background-color: @color; 10 | } 11 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/bootstrap/less/mixins/reset-filter.less: -------------------------------------------------------------------------------- 1 | // Reset filters for IE 2 | // 3 | // When you need to remove a gradient background, do not forget to use this to reset 4 | // the IE filter for IE9 and below. 5 | 6 | .reset-filter() { 7 | filter: e(%("progid:DXImageTransform.Microsoft.gradient(enabled = false)")); 8 | } 9 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/jquery/src/traversing/var/siblings.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | 3 | "use strict"; 4 | 5 | return function( n, elem ) { 6 | var matched = []; 7 | 8 | for ( ; n; n = n.nextSibling ) { 9 | if ( n.nodeType === 1 && n !== elem ) { 10 | matched.push( n ); 11 | } 12 | } 13 | 14 | return matched; 15 | }; 16 | 17 | } ); 18 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/jquery/src/effects/animatedSelector.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../core", 3 | "../selector", 4 | "../effects" 5 | ], function( jQuery ) { 6 | 7 | "use strict"; 8 | 9 | jQuery.expr.pseudos.animated = function( elem ) { 10 | return jQuery.grep( jQuery.timers, function( fn ) { 11 | return elem === fn.elem; 12 | } ).length; 13 | }; 14 | 15 | } ); 16 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/bootstrap/less/mixins/alerts.less: -------------------------------------------------------------------------------- 1 | // Alerts 2 | 3 | .alert-variant(@background; @border; @text-color) { 4 | background-color: @background; 5 | border-color: @border; 6 | color: @text-color; 7 | 8 | hr { 9 | border-top-color: darken(@border, 5%); 10 | } 11 | .alert-link { 12 | color: darken(@text-color, 10%); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/bootstrap/js/.jshintrc: -------------------------------------------------------------------------------- 1 | { 2 | "asi" : true, 3 | "browser" : true, 4 | "eqeqeq" : false, 5 | "eqnull" : true, 6 | "es3" : true, 7 | "expr" : true, 8 | "jquery" : true, 9 | "latedef" : true, 10 | "laxbreak" : true, 11 | "nonbsp" : true, 12 | "strict" : true, 13 | "undef" : true, 14 | "unused" : true 15 | } 16 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/jquery/src/core/DOMEval.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../var/document" 3 | ], function( document ) { 4 | "use strict"; 5 | 6 | function DOMEval( code, doc ) { 7 | doc = doc || document; 8 | 9 | var script = doc.createElement( "script" ); 10 | 11 | script.text = code; 12 | doc.head.appendChild( script ).parentNode.removeChild( script ); 13 | } 14 | 15 | return DOMEval; 16 | } ); 17 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/bootstrap/less/mixins/tab-focus.less: -------------------------------------------------------------------------------- 1 | // WebKit-style focus 2 | 3 | .tab-focus() { 4 | // WebKit-specific. Other browsers will keep their default outline style. 5 | // (Initially tried to also force default via `outline: initial`, 6 | // but that seems to erroneously remove the outline in Firefox altogether.) 7 | outline: 5px auto -webkit-focus-ring-color; 8 | outline-offset: -2px; 9 | } 10 | -------------------------------------------------------------------------------- /NOTICE.txt: -------------------------------------------------------------------------------- 1 | ------------------------------------------------------------------------------- 2 | Copyright 2017 3 | Ubiquitous Knowledge Processing (UKP) Lab 4 | Technische Universität Darmstadt 5 | 6 | ------------------------------------------------------------------------------- 7 | Third party legal information 8 | 9 | Please see the corresponding README and LICENSE files available in 10 | webapp/src/main/webapp/vendor 11 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/jquery/src/css/hiddenVisibleSelectors.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../core", 3 | "../selector" 4 | ], function( jQuery ) { 5 | 6 | "use strict"; 7 | 8 | jQuery.expr.pseudos.hidden = function( elem ) { 9 | return !jQuery.expr.pseudos.visible( elem ); 10 | }; 11 | jQuery.expr.pseudos.visible = function( elem ) { 12 | return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); 13 | }; 14 | 15 | } ); 16 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/jquery/src/data/var/acceptData.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | 3 | "use strict"; 4 | 5 | /** 6 | * Determines whether an object can have data 7 | */ 8 | return function( owner ) { 9 | 10 | // Accepts only: 11 | // - Node 12 | // - Node.ELEMENT_NODE 13 | // - Node.DOCUMENT_NODE 14 | // - Object 15 | // - Any 16 | return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); 17 | }; 18 | 19 | } ); 20 | -------------------------------------------------------------------------------- /webapp/src/test/resources/configs/collections.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/bootstrap/less/mixins/nav-vertical-align.less: -------------------------------------------------------------------------------- 1 | // Navbar vertical align 2 | // 3 | // Vertically center elements in the navbar. 4 | // Example: an element has a height of 30px, so write out `.navbar-vertical-align(30px);` to calculate the appropriate top margin. 5 | 6 | .navbar-vertical-align(@element-height) { 7 | margin-top: ((@navbar-height - @element-height) / 2); 8 | margin-bottom: ((@navbar-height - @element-height) / 2); 9 | } 10 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/bootstrap/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | Bootstrap uses [GitHub's Releases feature](https://github.com/blog/1547-release-your-software) for its changelogs. 2 | 3 | See [the Releases section of our GitHub project](https://github.com/twbs/bootstrap/releases) for changelogs for each release version of Bootstrap. 4 | 5 | Release announcement posts on [the official Bootstrap blog](http://blog.getbootstrap.com) contain summaries of the most noteworthy changes made in each release. 6 | -------------------------------------------------------------------------------- /webapp/.gitignore: -------------------------------------------------------------------------------- 1 | script* 2 | 3 | #ignore the target/ directory 4 | target/ 5 | 6 | #ignore MacOSX files 7 | .DS_Store 8 | 9 | #ignore node repo 10 | node/ 11 | node_modules/ 12 | etc/ 13 | 14 | # ignore the report directory 15 | src/test/javascript/reports/* 16 | 17 | *.class 18 | *.jar 19 | *.war 20 | *.ear 21 | *.zip 22 | *.tar.gz 23 | *.rar 24 | hs_err_pid* 25 | 26 | .settings/ 27 | .externalToolBuilders/ 28 | *.launch 29 | .project 30 | .classpath -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/angular/angular-csp.css: -------------------------------------------------------------------------------- 1 | /* Include this file in your html if you are using the CSP mode. */ 2 | 3 | @charset "UTF-8"; 4 | 5 | [ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], 6 | .ng-cloak, .x-ng-cloak, 7 | .ng-hide:not(.ng-hide-animate) { 8 | display: none !important; 9 | } 10 | 11 | ng\:form { 12 | display: block; 13 | } 14 | 15 | .ng-animate-shim { 16 | visibility:hidden; 17 | } 18 | 19 | .ng-anchor { 20 | position:absolute; 21 | } 22 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/bootstrap/less/mixins/responsive-visibility.less: -------------------------------------------------------------------------------- 1 | // Responsive utilities 2 | 3 | // 4 | // More easily include all the states for responsive-utilities.less. 5 | .responsive-visibility() { 6 | display: block !important; 7 | table& { display: table !important; } 8 | tr& { display: table-row !important; } 9 | th&, 10 | td& { display: table-cell !important; } 11 | } 12 | 13 | .responsive-invisibility() { 14 | display: none !important; 15 | } 16 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/jquery/src/event/ajax.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../core", 3 | "../event" 4 | ], function( jQuery ) { 5 | 6 | "use strict"; 7 | 8 | // Attach a bunch of functions for handling common AJAX events 9 | jQuery.each( [ 10 | "ajaxStart", 11 | "ajaxStop", 12 | "ajaxComplete", 13 | "ajaxError", 14 | "ajaxSuccess", 15 | "ajaxSend" 16 | ], function( i, type ) { 17 | jQuery.fn[ type ] = function( fn ) { 18 | return this.on( type, fn ); 19 | }; 20 | } ); 21 | 22 | } ); 23 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/jquery/src/core/stripAndCollapse.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../var/rnothtmlwhite" 3 | ], function( rnothtmlwhite ) { 4 | "use strict"; 5 | 6 | // Strip and collapse whitespace according to HTML spec 7 | // https://html.spec.whatwg.org/multipage/infrastructure.html#strip-and-collapse-whitespace 8 | function stripAndCollapse( value ) { 9 | var tokens = value.match( rnothtmlwhite ) || []; 10 | return tokens.join( " " ); 11 | } 12 | 13 | return stripAndCollapse; 14 | } ); 15 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/jquery/src/manipulation/_evalUrl.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../ajax" 3 | ], function( jQuery ) { 4 | 5 | "use strict"; 6 | 7 | jQuery._evalUrl = function( url ) { 8 | return jQuery.ajax( { 9 | url: url, 10 | 11 | // Make this explicit, since user can override this through ajaxSetup (#11264) 12 | type: "GET", 13 | dataType: "script", 14 | cache: true, 15 | async: false, 16 | global: false, 17 | "throws": true 18 | } ); 19 | }; 20 | 21 | return jQuery._evalUrl; 22 | 23 | } ); 24 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/jquery/src/css/var/getStyles.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | "use strict"; 3 | 4 | return function( elem ) { 5 | 6 | // Support: IE <=11 only, Firefox <=30 (#15098, #14150) 7 | // IE throws on elements created in popups 8 | // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" 9 | var view = elem.ownerDocument.defaultView; 10 | 11 | if ( !view || !view.opener ) { 12 | view = window; 13 | } 14 | 15 | return view.getComputedStyle( elem ); 16 | }; 17 | } ); 18 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/jquery/src/traversing/var/dir.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../../core" 3 | ], function( jQuery ) { 4 | 5 | "use strict"; 6 | 7 | return function( elem, dir, until ) { 8 | var matched = [], 9 | truncate = until !== undefined; 10 | 11 | while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { 12 | if ( elem.nodeType === 1 ) { 13 | if ( truncate && jQuery( elem ).is( until ) ) { 14 | break; 15 | } 16 | matched.push( elem ); 17 | } 18 | } 19 | return matched; 20 | }; 21 | 22 | } ); 23 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/bootstrap/nuget/MyGet.ps1: -------------------------------------------------------------------------------- 1 | $nuget = $env:NuGet 2 | 3 | # parse the version number out of package.json 4 | $bsversion = ((Get-Content $env:SourcesPath\package.json) -join "`n" | ConvertFrom-Json).version 5 | 6 | # create packages 7 | & $nuget pack "nuget\bootstrap.nuspec" -Verbosity detailed -NonInteractive -NoPackageAnalysis -BasePath $env:SourcesPath -Version $bsversion 8 | & $nuget pack "nuget\bootstrap.less.nuspec" -Verbosity detailed -NonInteractive -NoPackageAnalysis -BasePath $env:SourcesPath -Version $bsversion 9 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/jquery/src/manipulation/setGlobalEval.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../data/var/dataPriv" 3 | ], function( dataPriv ) { 4 | 5 | "use strict"; 6 | 7 | // Mark scripts as having already been evaluated 8 | function setGlobalEval( elems, refElements ) { 9 | var i = 0, 10 | l = elems.length; 11 | 12 | for ( ; i < l; i++ ) { 13 | dataPriv.set( 14 | elems[ i ], 15 | "globalEval", 16 | !refElements || dataPriv.get( refElements[ i ], "globalEval" ) 17 | ); 18 | } 19 | } 20 | 21 | return setGlobalEval; 22 | } ); 23 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/jquery/src/selector-sizzle.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "./core", 3 | "../external/sizzle/dist/sizzle" 4 | ], function( jQuery, Sizzle ) { 5 | 6 | "use strict"; 7 | 8 | jQuery.find = Sizzle; 9 | jQuery.expr = Sizzle.selectors; 10 | 11 | // Deprecated 12 | jQuery.expr[ ":" ] = jQuery.expr.pseudos; 13 | jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; 14 | jQuery.text = Sizzle.getText; 15 | jQuery.isXMLDoc = Sizzle.isXML; 16 | jQuery.contains = Sizzle.contains; 17 | jQuery.escapeSelector = Sizzle.escape; 18 | 19 | } ); 20 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/angular/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular", 3 | "version": "1.5.11", 4 | "license": "MIT", 5 | "main": "./angular.js", 6 | "ignore": [], 7 | "dependencies": {}, 8 | "homepage": "https://github.com/angular/bower-angular", 9 | "_release": "1.5.11", 10 | "_resolution": { 11 | "type": "version", 12 | "tag": "v1.5.11", 13 | "commit": "0f57428c3ffe2f486264ab7fbee3968dccc7b720" 14 | }, 15 | "_source": "https://github.com/angular/bower-angular.git", 16 | "_target": "1.5.x", 17 | "_originalSource": "angular" 18 | } -------------------------------------------------------------------------------- /indexer/src/test/java/de/tudarmstadt/ukp/exploration/graph_doc_explorer/indexer/application/tests/SolrIndexerTest.java: -------------------------------------------------------------------------------- 1 | package de.tudarmstadt.ukp.exploration.graph_doc_explorer.indexer.application.tests ; 2 | import static org.junit.Assert.*; 3 | 4 | import org.junit.Before; 5 | import org.junit.Test; 6 | 7 | public class SolrIndexerTest { 8 | 9 | @Before 10 | public void setUp() throws Exception { 11 | } 12 | 13 | @Test 14 | public void test() { 15 | System.out.println("Not yet implemented"); 16 | assertTrue(true) ; 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/bootstrap/dist/js/npm.js: -------------------------------------------------------------------------------- 1 | // This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment. 2 | require('../../js/transition.js') 3 | require('../../js/alert.js') 4 | require('../../js/button.js') 5 | require('../../js/carousel.js') 6 | require('../../js/collapse.js') 7 | require('../../js/dropdown.js') 8 | require('../../js/modal.js') 9 | require('../../js/tooltip.js') 10 | require('../../js/popover.js') 11 | require('../../js/scrollspy.js') 12 | require('../../js/tab.js') 13 | require('../../js/affix.js') -------------------------------------------------------------------------------- /indexer/src/test/java/de/tudarmstadt/ukp/exploration/graph_doc_explorer/indexer/application/tests/ConfigurationTest.java: -------------------------------------------------------------------------------- 1 | package de.tudarmstadt.ukp.exploration.graph_doc_explorer.indexer.application.tests; 2 | 3 | import static org.junit.Assert.*; 4 | 5 | import org.junit.Before; 6 | import org.junit.Ignore; 7 | import org.junit.Test; 8 | 9 | public class ConfigurationTest { 10 | 11 | @Before 12 | public void setUp() throws Exception { 13 | } 14 | 15 | @Test 16 | @Ignore 17 | public void test() { 18 | fail("Not yet implemented"); 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/bootstrap/less/.csslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "adjoining-classes": false, 3 | "box-sizing": false, 4 | "box-model": false, 5 | "compatible-vendor-prefixes": false, 6 | "floats": false, 7 | "font-sizes": false, 8 | "gradients": false, 9 | "important": false, 10 | "known-properties": false, 11 | "outline-none": false, 12 | "qualified-headings": false, 13 | "regex-selectors": false, 14 | "shorthand": false, 15 | "text-indent": false, 16 | "unique-headings": false, 17 | "universal-selector": false, 18 | "unqualified-attributes": false 19 | } 20 | -------------------------------------------------------------------------------- /indexer/src/test/java/de/tudarmstadt/ukp/exploration/graph_doc_explorer/indexer/application/tests/SolrArgumentsHandlerTest.java: -------------------------------------------------------------------------------- 1 | package de.tudarmstadt.ukp.exploration.graph_doc_explorer.indexer.application.tests; 2 | 3 | import static org.junit.Assert.*; 4 | 5 | import org.junit.Before; 6 | import org.junit.Ignore; 7 | import org.junit.Test; 8 | 9 | public class SolrArgumentsHandlerTest { 10 | 11 | @Before 12 | public void setUp() throws Exception { 13 | } 14 | 15 | @Test 16 | @Ignore 17 | public void test() { 18 | fail("Not yet implemented"); 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /graphs/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 4.0.0 3 | 4 | 5 | de.tudarmstadt.ukp.exploration 6 | graph-doc-explorer 7 | 0.0.1-SNAPSHOT 8 | 9 | 10 | graph-doc-explorer.graphs 11 | common data structures 12 | jar 13 | 14 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/bootstrap/less/mixins/reset-text.less: -------------------------------------------------------------------------------- 1 | .reset-text() { 2 | font-family: @font-family-base; 3 | // We deliberately do NOT reset font-size. 4 | font-style: normal; 5 | font-weight: normal; 6 | letter-spacing: normal; 7 | line-break: auto; 8 | line-height: @line-height-base; 9 | text-align: left; // Fallback for where `start` is not supported 10 | text-align: start; 11 | text-decoration: none; 12 | text-shadow: none; 13 | text-transform: none; 14 | white-space: normal; 15 | word-break: normal; 16 | word-spacing: normal; 17 | word-wrap: normal; 18 | } 19 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/d3/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "d3", 3 | "description": "A JavaScript visualization library for HTML and SVG.", 4 | "main": "d3.js", 5 | "license": "BSD-3-Clause", 6 | "ignore": [], 7 | "homepage": "https://github.com/mbostock-bower/d3-bower", 8 | "version": "3.5.17", 9 | "_release": "3.5.17", 10 | "_resolution": { 11 | "type": "version", 12 | "tag": "v3.5.17", 13 | "commit": "abe0262a205c9f3755c3a757de4dfd1d49f34b24" 14 | }, 15 | "_source": "https://github.com/mbostock-bower/d3-bower.git", 16 | "_target": "3.x", 17 | "_originalSource": "d3" 18 | } -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/bootstrap/less/mixins/border-radius.less: -------------------------------------------------------------------------------- 1 | // Single side border-radius 2 | 3 | .border-top-radius(@radius) { 4 | border-top-right-radius: @radius; 5 | border-top-left-radius: @radius; 6 | } 7 | .border-right-radius(@radius) { 8 | border-bottom-right-radius: @radius; 9 | border-top-right-radius: @radius; 10 | } 11 | .border-bottom-radius(@radius) { 12 | border-bottom-right-radius: @radius; 13 | border-bottom-left-radius: @radius; 14 | } 15 | .border-left-radius(@radius) { 16 | border-bottom-left-radius: @radius; 17 | border-top-left-radius: @radius; 18 | } 19 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/angular-route/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular-route", 3 | "version": "1.5.11", 4 | "license": "MIT", 5 | "main": "./angular-route.js", 6 | "ignore": [], 7 | "dependencies": { 8 | "angular": "1.5.11" 9 | }, 10 | "homepage": "https://github.com/angular/bower-angular-route", 11 | "_release": "1.5.11", 12 | "_resolution": { 13 | "type": "version", 14 | "tag": "v1.5.11", 15 | "commit": "cdb9db456ece8b3f80a638bb7bd69dc2dcd4eee9" 16 | }, 17 | "_source": "https://github.com/angular/bower-angular-route.git", 18 | "_target": "1.5.x", 19 | "_originalSource": "angular-route" 20 | } -------------------------------------------------------------------------------- /webapp/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "graph-doc-explorer", 3 | "private": true, 4 | "version": "1.0.0", 5 | "description": "Graph-based Document Exploration", 6 | "license": "Apache 2.0", 7 | "devDependencies": { 8 | "bower": "^1.8.0", 9 | "angular-mocks": "1.5.x", 10 | "jasmine-core": "2.x.x", 11 | "karma": "~1.0.0", 12 | "karma-jasmine": "^1.0.2", 13 | "karma-chrome-launcher": "", 14 | "karma-junit-reporter": "^0.2.2" 15 | }, 16 | "scripts": { 17 | "pretest": "bower install", 18 | "prestart": "npm install", 19 | "test": "karma start src/test/javascript/unit/karma.conf.js --single-run" 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/angular-cookies/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular-cookies", 3 | "version": "1.5.11", 4 | "license": "MIT", 5 | "main": "./angular-cookies.js", 6 | "ignore": [], 7 | "dependencies": { 8 | "angular": "1.5.11" 9 | }, 10 | "homepage": "https://github.com/angular/bower-angular-cookies", 11 | "_release": "1.5.11", 12 | "_resolution": { 13 | "type": "version", 14 | "tag": "v1.5.11", 15 | "commit": "a443bb1d7edc1688acf8d820932f27b4b19b89bc" 16 | }, 17 | "_source": "https://github.com/angular/bower-angular-cookies.git", 18 | "_target": "1.5.x", 19 | "_originalSource": "angular-cookies" 20 | } -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/bootstrap/less/mixins/pagination.less: -------------------------------------------------------------------------------- 1 | // Pagination 2 | 3 | .pagination-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) { 4 | > li { 5 | > a, 6 | > span { 7 | padding: @padding-vertical @padding-horizontal; 8 | font-size: @font-size; 9 | line-height: @line-height; 10 | } 11 | &:first-child { 12 | > a, 13 | > span { 14 | .border-left-radius(@border-radius); 15 | } 16 | } 17 | &:last-child { 18 | > a, 19 | > span { 20 | .border-right-radius(@border-radius); 21 | } 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /indexer/src/main/java/de/tudarmstadt/ukp/exploration/graph_doc_explorer/indexer/config/config.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/angular-sanitize/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular-sanitize", 3 | "version": "1.5.11", 4 | "license": "MIT", 5 | "main": "./angular-sanitize.js", 6 | "ignore": [], 7 | "dependencies": { 8 | "angular": "1.5.11" 9 | }, 10 | "homepage": "https://github.com/angular/bower-angular-sanitize", 11 | "_release": "1.5.11", 12 | "_resolution": { 13 | "type": "version", 14 | "tag": "v1.5.11", 15 | "commit": "84df06c4ec4f1eef7f9d0b849b9fdf5433c2669c" 16 | }, 17 | "_source": "https://github.com/angular/bower-angular-sanitize.git", 18 | "_target": "1.5.x", 19 | "_originalSource": "angular-sanitize" 20 | } -------------------------------------------------------------------------------- /webapp/src/main/java/de/tudarmstadt/ukp/exploration/graph_doc_explorer/webapp/web/controllers/HomeController.java: -------------------------------------------------------------------------------- 1 | package de.tudarmstadt.ukp.exploration.graph_doc_explorer.webapp.web.controllers; 2 | 3 | import org.springframework.stereotype.Controller; 4 | import org.springframework.ui.ModelMap; 5 | import org.springframework.web.bind.annotation.RequestMapping; 6 | import org.springframework.web.bind.annotation.RequestMethod; 7 | 8 | @Controller 9 | @RequestMapping("/") 10 | public class HomeController { 11 | @RequestMapping(value = "/", method = RequestMethod.GET) 12 | public String index(ModelMap model) { 13 | return "index"; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/jquery/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "jquery", 3 | "main": "dist/jquery.js", 4 | "license": "MIT", 5 | "ignore": [ 6 | "package.json" 7 | ], 8 | "keywords": [ 9 | "jquery", 10 | "javascript", 11 | "browser", 12 | "library" 13 | ], 14 | "homepage": "https://github.com/jquery/jquery-dist", 15 | "version": "3.2.1", 16 | "_release": "3.2.1", 17 | "_resolution": { 18 | "type": "version", 19 | "tag": "3.2.1", 20 | "commit": "77d2a51d0520d2ee44173afdf4e40a9201f5964e" 21 | }, 22 | "_source": "https://github.com/jquery/jquery-dist.git", 23 | "_target": "1.9.1 - 3", 24 | "_originalSource": "jquery" 25 | } -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/jquery/src/css/var/swap.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | 3 | "use strict"; 4 | 5 | // A method for quickly swapping in/out CSS properties to get correct calculations. 6 | return function( elem, options, callback, args ) { 7 | var ret, name, 8 | old = {}; 9 | 10 | // Remember the old values, and insert the new ones 11 | for ( name in options ) { 12 | old[ name ] = elem.style[ name ]; 13 | elem.style[ name ] = options[ name ]; 14 | } 15 | 16 | ret = callback.apply( elem, args || [] ); 17 | 18 | // Revert the old values 19 | for ( name in options ) { 20 | elem.style[ name ] = old[ name ]; 21 | } 22 | 23 | return ret; 24 | }; 25 | 26 | } ); 27 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/bootstrap/less/mixins/panels.less: -------------------------------------------------------------------------------- 1 | // Panels 2 | 3 | .panel-variant(@border; @heading-text-color; @heading-bg-color; @heading-border) { 4 | border-color: @border; 5 | 6 | & > .panel-heading { 7 | color: @heading-text-color; 8 | background-color: @heading-bg-color; 9 | border-color: @heading-border; 10 | 11 | + .panel-collapse > .panel-body { 12 | border-top-color: @border; 13 | } 14 | .badge { 15 | color: @heading-bg-color; 16 | background-color: @heading-text-color; 17 | } 18 | } 19 | & > .panel-footer { 20 | + .panel-collapse > .panel-body { 21 | border-bottom-color: @border; 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/jquery/src/css/addGetHookIf.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | 3 | "use strict"; 4 | 5 | function addGetHookIf( conditionFn, hookFn ) { 6 | 7 | // Define the hook, we'll check on the first run if it's really needed. 8 | return { 9 | get: function() { 10 | if ( conditionFn() ) { 11 | 12 | // Hook not needed (or it's not possible to use it due 13 | // to missing dependency), remove it. 14 | delete this.get; 15 | return; 16 | } 17 | 18 | // Hook needed; redefine it so that the support test is not executed again. 19 | return ( this.get = hookFn ).apply( this, arguments ); 20 | } 21 | }; 22 | } 23 | 24 | return addGetHookIf; 25 | 26 | } ); 27 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/bootstrap/less/wells.less: -------------------------------------------------------------------------------- 1 | // 2 | // Wells 3 | // -------------------------------------------------- 4 | 5 | 6 | // Base class 7 | .well { 8 | min-height: 20px; 9 | padding: 19px; 10 | margin-bottom: 20px; 11 | background-color: @well-bg; 12 | border: 1px solid @well-border; 13 | border-radius: @border-radius-base; 14 | .box-shadow(inset 0 1px 1px rgba(0,0,0,.05)); 15 | blockquote { 16 | border-color: #ddd; 17 | border-color: rgba(0,0,0,.15); 18 | } 19 | } 20 | 21 | // Sizes 22 | .well-lg { 23 | padding: 24px; 24 | border-radius: @border-radius-large; 25 | } 26 | .well-sm { 27 | padding: 9px; 28 | border-radius: @border-radius-small; 29 | } 30 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/bootstrap/less/mixins/hide-text.less: -------------------------------------------------------------------------------- 1 | // CSS image replacement 2 | // 3 | // Heads up! v3 launched with only `.hide-text()`, but per our pattern for 4 | // mixins being reused as classes with the same name, this doesn't hold up. As 5 | // of v3.0.1 we have added `.text-hide()` and deprecated `.hide-text()`. 6 | // 7 | // Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757 8 | 9 | // Deprecated as of v3.0.1 (has been removed in v4) 10 | .hide-text() { 11 | font: ~"0/0" a; 12 | color: transparent; 13 | text-shadow: none; 14 | background-color: transparent; 15 | border: 0; 16 | } 17 | 18 | // New mixin to use as of v3.0.1 19 | .text-hide() { 20 | .hide-text(); 21 | } 22 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/partials/error.template.jsp: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 | 6 | 7 |

Error.. Something went wrong !

8 |

Go back to the homepage

9 | 10 |
11 |
12 |
13 |
14 |
15 |
16 | Partner institutes 18 |
19 |
-------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/angular/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular", 3 | "version": "1.5.11", 4 | "description": "HTML enhanced for web apps", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "https://github.com/angular/angular.js.git" 12 | }, 13 | "keywords": [ 14 | "angular", 15 | "framework", 16 | "browser", 17 | "client-side" 18 | ], 19 | "author": "Angular Core Team ", 20 | "license": "MIT", 21 | "bugs": { 22 | "url": "https://github.com/angular/angular.js/issues" 23 | }, 24 | "homepage": "http://angularjs.org" 25 | } 26 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/bootstrap/less/mixins/list-group.less: -------------------------------------------------------------------------------- 1 | // List Groups 2 | 3 | .list-group-item-variant(@state; @background; @color) { 4 | .list-group-item-@{state} { 5 | color: @color; 6 | background-color: @background; 7 | 8 | a&, 9 | button& { 10 | color: @color; 11 | 12 | .list-group-item-heading { 13 | color: inherit; 14 | } 15 | 16 | &:hover, 17 | &:focus { 18 | color: @color; 19 | background-color: darken(@background, 5%); 20 | } 21 | &.active, 22 | &.active:hover, 23 | &.active:focus { 24 | color: #fff; 25 | background-color: @color; 26 | border-color: @color; 27 | } 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/jquery/src/ajax/parseXML.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../core" 3 | ], function( jQuery ) { 4 | 5 | "use strict"; 6 | 7 | // Cross-browser xml parsing 8 | jQuery.parseXML = function( data ) { 9 | var xml; 10 | if ( !data || typeof data !== "string" ) { 11 | return null; 12 | } 13 | 14 | // Support: IE 9 - 11 only 15 | // IE throws on parseFromString with invalid input. 16 | try { 17 | xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); 18 | } catch ( e ) { 19 | xml = undefined; 20 | } 21 | 22 | if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { 23 | jQuery.error( "Invalid XML: " + data ); 24 | } 25 | return xml; 26 | }; 27 | 28 | return jQuery.parseXML; 29 | 30 | } ); 31 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/bootstrap/less/mixins/clearfix.less: -------------------------------------------------------------------------------- 1 | // Clearfix 2 | // 3 | // For modern browsers 4 | // 1. The space content is one way to avoid an Opera bug when the 5 | // contenteditable attribute is included anywhere else in the document. 6 | // Otherwise it causes space to appear at the top and bottom of elements 7 | // that are clearfixed. 8 | // 2. The use of `table` rather than `block` is only necessary if using 9 | // `:before` to contain the top-margins of child elements. 10 | // 11 | // Source: http://nicolasgallagher.com/micro-clearfix-hack/ 12 | 13 | .clearfix() { 14 | &:before, 15 | &:after { 16 | content: " "; // 1 17 | display: table; // 2 18 | } 19 | &:after { 20 | clear: both; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/bootstrap/less/breadcrumbs.less: -------------------------------------------------------------------------------- 1 | // 2 | // Breadcrumbs 3 | // -------------------------------------------------- 4 | 5 | 6 | .breadcrumb { 7 | padding: @breadcrumb-padding-vertical @breadcrumb-padding-horizontal; 8 | margin-bottom: @line-height-computed; 9 | list-style: none; 10 | background-color: @breadcrumb-bg; 11 | border-radius: @border-radius-base; 12 | 13 | > li { 14 | display: inline-block; 15 | 16 | + li:before { 17 | content: "@{breadcrumb-separator}\00a0"; // Unicode space added since inline-block means non-collapsing white-space 18 | padding: 0 5px; 19 | color: @breadcrumb-color; 20 | } 21 | } 22 | 23 | > .active { 24 | color: @breadcrumb-active-color; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/bootstrap/less/responsive-embed.less: -------------------------------------------------------------------------------- 1 | // Embeds responsive 2 | // 3 | // Credit: Nicolas Gallagher and SUIT CSS. 4 | 5 | .embed-responsive { 6 | position: relative; 7 | display: block; 8 | height: 0; 9 | padding: 0; 10 | overflow: hidden; 11 | 12 | .embed-responsive-item, 13 | iframe, 14 | embed, 15 | object, 16 | video { 17 | position: absolute; 18 | top: 0; 19 | left: 0; 20 | bottom: 0; 21 | height: 100%; 22 | width: 100%; 23 | border: 0; 24 | } 25 | } 26 | 27 | // Modifier class for 16:9 aspect ratio 28 | .embed-responsive-16by9 { 29 | padding-bottom: 56.25%; 30 | } 31 | 32 | // Modifier class for 4:3 aspect ratio 33 | .embed-responsive-4by3 { 34 | padding-bottom: 75%; 35 | } 36 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/jquery/src/core/support.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../var/document", 3 | "../var/support" 4 | ], function( document, support ) { 5 | 6 | "use strict"; 7 | 8 | // Support: Safari 8 only 9 | // In Safari 8 documents created via document.implementation.createHTMLDocument 10 | // collapse sibling forms: the second one becomes a child of the first one. 11 | // Because of that, this security measure has to be disabled in Safari 8. 12 | // https://bugs.webkit.org/show_bug.cgi?id=137337 13 | support.createHTMLDocument = ( function() { 14 | var body = document.implementation.createHTMLDocument( "" ).body; 15 | body.innerHTML = "
"; 16 | return body.childNodes.length === 2; 17 | } )(); 18 | 19 | return support; 20 | } ); 21 | -------------------------------------------------------------------------------- /indexer/src/main/java/de/tudarmstadt/ukp/exploration/graph_doc_explorer/indexer/config/log4j2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/jquery/src/deferred/exceptionHook.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../core", 3 | "../deferred" 4 | ], function( jQuery ) { 5 | 6 | "use strict"; 7 | 8 | // These usually indicate a programmer mistake during development, 9 | // warn about them ASAP rather than swallowing them by default. 10 | var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; 11 | 12 | jQuery.Deferred.exceptionHook = function( error, stack ) { 13 | 14 | // Support: IE 8 - 9 only 15 | // Console exists when dev tools are open, which can happen at any time 16 | if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { 17 | window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); 18 | } 19 | }; 20 | 21 | } ); 22 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/jquery/src/queue/delay.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../core", 3 | "../queue", 4 | "../effects" // Delay is optional because of this dependency 5 | ], function( jQuery ) { 6 | 7 | "use strict"; 8 | 9 | // Based off of the plugin by Clint Helfers, with permission. 10 | // https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ 11 | jQuery.fn.delay = function( time, type ) { 12 | time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; 13 | type = type || "fx"; 14 | 15 | return this.queue( type, function( next, hooks ) { 16 | var timeout = window.setTimeout( next, time ); 17 | hooks.stop = function() { 18 | window.clearTimeout( timeout ); 19 | }; 20 | } ); 21 | }; 22 | 23 | return jQuery.fn.delay; 24 | } ); 25 | -------------------------------------------------------------------------------- /webapp/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "graph-doc-explorer", 3 | "version": "1.0.0", 4 | "description": "Graph-based Document Exploration", 5 | "keywords": [ 6 | "search", 7 | "documents" 8 | ], 9 | "license": "Apache 2.0", 10 | "private": true, 11 | "ignore": [ 12 | "**/.*", 13 | "node_modules", 14 | "bower_components", 15 | "src/main/webapp/vendor", 16 | "test", 17 | "tests" 18 | ], 19 | "dependencies": { 20 | "angular": "1.5.x", 21 | "d3": "3.x", 22 | "bootstrap": "3.3.x", 23 | "angular-route": "1.5.x", 24 | "angular-sanitize": "1.5.x", 25 | "angular-cookies": "1.5.x" 26 | }, 27 | "main": "src/main/webapp/views/index.jsp" 28 | } 29 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/jquery/src/exports/global.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../core" 3 | ], function( jQuery, noGlobal ) { 4 | 5 | "use strict"; 6 | 7 | var 8 | 9 | // Map over jQuery in case of overwrite 10 | _jQuery = window.jQuery, 11 | 12 | // Map over the $ in case of overwrite 13 | _$ = window.$; 14 | 15 | jQuery.noConflict = function( deep ) { 16 | if ( window.$ === jQuery ) { 17 | window.$ = _$; 18 | } 19 | 20 | if ( deep && window.jQuery === jQuery ) { 21 | window.jQuery = _jQuery; 22 | } 23 | 24 | return jQuery; 25 | }; 26 | 27 | // Expose jQuery and $ identifiers, even in AMD 28 | // (#7102#comment:10, https://github.com/jquery/jquery/pull/557) 29 | // and CommonJS for browser emulators (#13566) 30 | if ( !noGlobal ) { 31 | window.jQuery = window.$ = jQuery; 32 | } 33 | 34 | } ); 35 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/jquery/src/event/alias.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../core", 3 | 4 | "../event", 5 | "./trigger" 6 | ], function( jQuery ) { 7 | 8 | "use strict"; 9 | 10 | jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " + 11 | "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + 12 | "change select submit keydown keypress keyup contextmenu" ).split( " " ), 13 | function( i, name ) { 14 | 15 | // Handle event binding 16 | jQuery.fn[ name ] = function( data, fn ) { 17 | return arguments.length > 0 ? 18 | this.on( name, null, data, fn ) : 19 | this.trigger( name ); 20 | }; 21 | } ); 22 | 23 | jQuery.fn.extend( { 24 | hover: function( fnOver, fnOut ) { 25 | return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); 26 | } 27 | } ); 28 | 29 | } ); 30 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/bootstrap/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "bootstrap", 3 | "description": "The most popular front-end framework for developing responsive, mobile first projects on the web.", 4 | "keywords": [ 5 | "css", 6 | "js", 7 | "less", 8 | "mobile-first", 9 | "responsive", 10 | "front-end", 11 | "framework", 12 | "web" 13 | ], 14 | "homepage": "http://getbootstrap.com", 15 | "license": "MIT", 16 | "moduleType": "globals", 17 | "main": [ 18 | "less/bootstrap.less", 19 | "dist/js/bootstrap.js" 20 | ], 21 | "ignore": [ 22 | "/.*", 23 | "_config.yml", 24 | "CNAME", 25 | "composer.json", 26 | "CONTRIBUTING.md", 27 | "docs", 28 | "js/tests", 29 | "test-infra" 30 | ], 31 | "dependencies": { 32 | "jquery": "1.9.1 - 3" 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/jquery/src/manipulation/getAll.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../core", 3 | "../core/nodeName" 4 | ], function( jQuery, nodeName ) { 5 | 6 | "use strict"; 7 | 8 | function getAll( context, tag ) { 9 | 10 | // Support: IE <=9 - 11 only 11 | // Use typeof to avoid zero-argument method invocation on host objects (#15151) 12 | var ret; 13 | 14 | if ( typeof context.getElementsByTagName !== "undefined" ) { 15 | ret = context.getElementsByTagName( tag || "*" ); 16 | 17 | } else if ( typeof context.querySelectorAll !== "undefined" ) { 18 | ret = context.querySelectorAll( tag || "*" ); 19 | 20 | } else { 21 | ret = []; 22 | } 23 | 24 | if ( tag === undefined || tag && nodeName( context, tag ) ) { 25 | return jQuery.merge( [ context ], ret ); 26 | } 27 | 28 | return ret; 29 | } 30 | 31 | return getAll; 32 | } ); 33 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/jquery/src/jquery.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "./core", 3 | "./selector", 4 | "./traversing", 5 | "./callbacks", 6 | "./deferred", 7 | "./deferred/exceptionHook", 8 | "./core/ready", 9 | "./data", 10 | "./queue", 11 | "./queue/delay", 12 | "./attributes", 13 | "./event", 14 | "./event/alias", 15 | "./event/focusin", 16 | "./manipulation", 17 | "./manipulation/_evalUrl", 18 | "./wrap", 19 | "./css", 20 | "./css/hiddenVisibleSelectors", 21 | "./serialize", 22 | "./ajax", 23 | "./ajax/xhr", 24 | "./ajax/script", 25 | "./ajax/jsonp", 26 | "./ajax/load", 27 | "./event/ajax", 28 | "./effects", 29 | "./effects/animatedSelector", 30 | "./offset", 31 | "./dimensions", 32 | "./deprecated", 33 | "./exports/amd", 34 | "./exports/global" 35 | ], function( jQuery ) { 36 | 37 | "use strict"; 38 | 39 | return jQuery; 40 | 41 | } ); 42 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/bootstrap/less/component-animations.less: -------------------------------------------------------------------------------- 1 | // 2 | // Component animations 3 | // -------------------------------------------------- 4 | 5 | // Heads up! 6 | // 7 | // We don't use the `.opacity()` mixin here since it causes a bug with text 8 | // fields in IE7-8. Source: https://github.com/twbs/bootstrap/pull/3552. 9 | 10 | .fade { 11 | opacity: 0; 12 | .transition(opacity .15s linear); 13 | &.in { 14 | opacity: 1; 15 | } 16 | } 17 | 18 | .collapse { 19 | display: none; 20 | 21 | &.in { display: block; } 22 | tr&.in { display: table-row; } 23 | tbody&.in { display: table-row-group; } 24 | } 25 | 26 | .collapsing { 27 | position: relative; 28 | height: 0; 29 | overflow: hidden; 30 | .transition-property(~"height, visibility"); 31 | .transition-duration(.35s); 32 | .transition-timing-function(ease); 33 | } 34 | -------------------------------------------------------------------------------- /indexer/README.md: -------------------------------------------------------------------------------- 1 | # Graph-based Document Exploration 2 | ## indexer module 3 | 4 | This module contains a simple command-line tool to index a document collection in Solr as needed for the application. 5 | 6 | ### Build 7 | 8 | Maven will create an executable jar of this module that can be used from a command prompt. 9 | 10 | ### Usage 11 | 12 | The executable can be invoked as follows: 13 | 14 | * `document-indexer ` 15 | 16 | An example for the `config.xml` can be found in `de/tudarmstadt/ukp/exploration/graph_doc_explorer/indexer/config/config.xml`. 17 | 18 | Please make sure that 19 | * the config.xml points to the correct core of your solr installation 20 | * the webapp's collection.xml refers to the collection with the name defined here during indexing as the third parameter 21 | 22 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/js/app/app.config.js: -------------------------------------------------------------------------------- 1 | 'use strict' ; 2 | 3 | angular.module('searchApp').config(['$locationProvider', '$routeProvider', 4 | function config($locationProvider, $routeProvider) { 5 | $locationProvider.hashPrefix('!'); 6 | $routeProvider. 7 | when('/', { 8 | templateUrl :'partials/home.template.jsp', 9 | controller: 'HomeController' 10 | }). 11 | when('/error', { 12 | templateUrl : 'partials/error.template.jsp', 13 | controller: 'ErrorController' 14 | }). 15 | when('/search/:groupID/:searchwords', { 16 | templateUrl: 'partials/results.template.jsp', 17 | reloadOnSearch: false, 18 | controller: 'ResultsController' 19 | }). 20 | otherwise({ 21 | redirectTo: '/error' 22 | }); 23 | } 24 | ]); -------------------------------------------------------------------------------- /webapp/src/main/webapp/js/custom.js: -------------------------------------------------------------------------------- 1 | function fix_height(jQuery) { 2 | (function($){ 3 | 4 | var height = 0; 5 | height = Math.ceil($(window).height() - $('footer').height() - $('#search-field-wrapper').height() ) - 120; // $('header').height() 6 | 7 | var titleOffset = 50 ; 8 | $('#results-wrapper').height(height); 9 | 10 | $('#document-wrapper').height(height); 11 | $('#document-wrapper .document-container').height(height-titleOffset); 12 | 13 | $('#graph-container').height(height); 14 | 15 | })(jQuery); 16 | 17 | 18 | } 19 | 20 | /** 21 | * get maximum height for search results 22 | * @param jQuery 23 | * @returns 24 | */ 25 | function hide_header(jQuery) { 26 | $('header').css('display', 'none'); 27 | } 28 | 29 | function show_header(jQuery) { 30 | $('header').css('display', '') ; 31 | } 32 | 33 | 34 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/bootstrap/less/mixins/table-row.less: -------------------------------------------------------------------------------- 1 | // Tables 2 | 3 | .table-row-variant(@state; @background) { 4 | // Exact selectors below required to override `.table-striped` and prevent 5 | // inheritance to nested tables. 6 | .table > thead > tr, 7 | .table > tbody > tr, 8 | .table > tfoot > tr { 9 | > td.@{state}, 10 | > th.@{state}, 11 | &.@{state} > td, 12 | &.@{state} > th { 13 | background-color: @background; 14 | } 15 | } 16 | 17 | // Hover states for `.table-hover` 18 | // Note: this is not available for cells or rows within `thead` or `tfoot`. 19 | .table-hover > tbody > tr { 20 | > td.@{state}:hover, 21 | > th.@{state}:hover, 22 | &.@{state}:hover > td, 23 | &:hover > .@{state}, 24 | &.@{state}:hover > th { 25 | background-color: darken(@background, 5%); 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/angular-route/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular-route", 3 | "version": "1.5.11", 4 | "description": "AngularJS router module", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "https://github.com/angular/angular.js.git" 12 | }, 13 | "keywords": [ 14 | "angular", 15 | "framework", 16 | "browser", 17 | "router", 18 | "client-side" 19 | ], 20 | "author": "Angular Core Team ", 21 | "license": "MIT", 22 | "bugs": { 23 | "url": "https://github.com/angular/angular.js/issues" 24 | }, 25 | "homepage": "http://angularjs.org", 26 | "jspm": { 27 | "shim": { 28 | "angular-route": { 29 | "deps": ["angular"] 30 | } 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/WEB-INF/web.xml: -------------------------------------------------------------------------------- 1 | 5 | Graph-based Document Exploration 6 | 7 | 8 | webapp-dispatcher 9 | org.springframework.web.servlet.DispatcherServlet 10 | 1 11 | 12 | 13 | webapp-dispatcher 14 | / 15 | /api 16 | 17 | 18 | 404 19 | /views/error.jsp 20 | 21 | 22 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/angular-cookies/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular-cookies", 3 | "version": "1.5.11", 4 | "description": "AngularJS module for cookies", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "https://github.com/angular/angular.js.git" 12 | }, 13 | "keywords": [ 14 | "angular", 15 | "framework", 16 | "browser", 17 | "cookies", 18 | "client-side" 19 | ], 20 | "author": "Angular Core Team ", 21 | "license": "MIT", 22 | "bugs": { 23 | "url": "https://github.com/angular/angular.js/issues" 24 | }, 25 | "homepage": "http://angularjs.org", 26 | "jspm": { 27 | "shim": { 28 | "angular-cookies": { 29 | "deps": ["angular"] 30 | } 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /webapp/src/main/java/de/tudarmstadt/ukp/exploration/graph_doc_explorer/webapp/application/domains/Document.java: -------------------------------------------------------------------------------- 1 | package de.tudarmstadt.ukp.exploration.graph_doc_explorer.webapp.application.domains; 2 | 3 | /** 4 | * A domain class for the text document 5 | * 6 | * @author Alexander Gössl, Arwed Gölz, Ramy Hcini, Sebastian Vollbrecht 7 | * @since 20 Jan 2017 8 | * @version 1.0 9 | */ 10 | 11 | public class Document { 12 | private String id; 13 | private String text; 14 | private Collection collection; 15 | 16 | public Document(String _id, String _text, Collection _collection) { 17 | id = _id; 18 | text = _text; 19 | collection = _collection; 20 | } 21 | 22 | public String id() { 23 | return id; 24 | } 25 | 26 | public String text() { 27 | return text; 28 | } 29 | 30 | public Collection collection() { 31 | return collection; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/angular-sanitize/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular-sanitize", 3 | "version": "1.5.11", 4 | "description": "AngularJS module for sanitizing HTML", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "https://github.com/angular/angular.js.git" 12 | }, 13 | "keywords": [ 14 | "angular", 15 | "framework", 16 | "browser", 17 | "html", 18 | "client-side" 19 | ], 20 | "author": "Angular Core Team ", 21 | "license": "MIT", 22 | "bugs": { 23 | "url": "https://github.com/angular/angular.js/issues" 24 | }, 25 | "homepage": "http://angularjs.org", 26 | "jspm": { 27 | "shim": { 28 | "angular-sanitize": { 29 | "deps": ["angular"] 30 | } 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /webapp/src/test/java/de/tudarmstadt/ukp/exploration/graph_doc_explorer/webapp/application/search/SolrSearchHTTPTest.java: -------------------------------------------------------------------------------- 1 | package de.tudarmstadt.ukp.exploration.graph_doc_explorer.webapp.application.search; 2 | 3 | import static org.junit.Assert.assertEquals; 4 | 5 | import java.util.LinkedList; 6 | 7 | import org.junit.Ignore; 8 | import org.junit.Test; 9 | 10 | import de.tudarmstadt.ukp.exploration.graph_doc_explorer.graphs.SearchResult; 11 | 12 | public class SolrSearchHTTPTest { 13 | 14 | LinkedList searchResults = new LinkedList(); 15 | 16 | @Test 17 | @Ignore 18 | public void testSetup() { 19 | // ISearcher logic has changed. this test is depercated 20 | ISearcher search = new SolrSearchHTTP(); 21 | searchResults.addAll(search.query("Howard Metzenbaum", "organisation")); 22 | assertEquals(8, searchResults.size()); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /webapp/src/test/resources/configs/config.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /graphs/src/main/java/de/tudarmstadt/ukp/exploration/graph_doc_explorer/graphs/Label.java: -------------------------------------------------------------------------------- 1 | package de.tudarmstadt.ukp.exploration.graph_doc_explorer.graphs; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | /** 7 | * Domain class modeling the Label 8 | * 9 | * @author Alexander Gössl, Arwed Gölz, Ramy Hcini, Sebastian Vollbrecht 10 | * @since 30 Jan 2017 11 | * @version 1.0 12 | */ 13 | public class Label { 14 | private String l; 15 | private List occurrences; 16 | 17 | public Label(String _l, List _occurrences) { 18 | l = _l; 19 | occurrences = _occurrences; 20 | } 21 | 22 | public Label(String _l) { 23 | l = _l; 24 | occurrences = new ArrayList(); 25 | } 26 | 27 | public String label() { 28 | return l; 29 | } 30 | 31 | public List occurrences() { 32 | return occurrences; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /webapp/src/main/java/de/tudarmstadt/ukp/exploration/graph_doc_explorer/webapp/application/graph/filter/IGraphFilter.java: -------------------------------------------------------------------------------- 1 | package de.tudarmstadt.ukp.exploration.graph_doc_explorer.webapp.application.graph.filter; 2 | 3 | import java.util.List; 4 | 5 | import de.tudarmstadt.ukp.exploration.graph_doc_explorer.graphs.Graph; 6 | import de.tudarmstadt.ukp.exploration.graph_doc_explorer.graphs.SearchResult; 7 | 8 | /** 9 | * Interface for a graph filter 10 | * 11 | * @author Alexander Gössl, Arwed Gölz, Ramy Hcini, Sebastian Vollbrecht 12 | * @since 20 Jan 2017 13 | * @version 1.0 14 | */ 15 | 16 | @Deprecated 17 | public interface IGraphFilter { 18 | /** 19 | * Filter the Graph using the search results 20 | * 21 | * @param searchResults 22 | * @param g 23 | * : graph 24 | * @return a filtered Graph 25 | */ 26 | public Graph filter(List searchResults, Graph g); 27 | } 28 | -------------------------------------------------------------------------------- /webapp/src/main/java/de/tudarmstadt/ukp/exploration/graph_doc_explorer/webapp/application/graph/parser/IGraphParser.java: -------------------------------------------------------------------------------- 1 | package de.tudarmstadt.ukp.exploration.graph_doc_explorer.webapp.application.graph.parser; 2 | 3 | import de.tudarmstadt.ukp.exploration.graph_doc_explorer.graphs.Graph; 4 | 5 | /** 6 | * IGraphParser is the interface used to parse a graph from an input source 7 | * 8 | * @author Ramy Hcini 9 | * @since 22 Dec 2016 10 | * @version 1.0 11 | */ 12 | @Deprecated 13 | public interface IGraphParser { 14 | 15 | /** 16 | * Parses an entire graph input, verifying that it contains a valid graph's 17 | * definition. 18 | * 19 | * @return true if the file was parsed successfully 20 | * 21 | */ 22 | public boolean parse(); 23 | 24 | /** 25 | * Returns the graph which was built during parsing. 26 | * 27 | * @return the graph 28 | */ 29 | public abstract Graph getGraph(); 30 | } 31 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/bootstrap/less/close.less: -------------------------------------------------------------------------------- 1 | // 2 | // Close icons 3 | // -------------------------------------------------- 4 | 5 | 6 | .close { 7 | float: right; 8 | font-size: (@font-size-base * 1.5); 9 | font-weight: @close-font-weight; 10 | line-height: 1; 11 | color: @close-color; 12 | text-shadow: @close-text-shadow; 13 | .opacity(.2); 14 | 15 | &:hover, 16 | &:focus { 17 | color: @close-color; 18 | text-decoration: none; 19 | cursor: pointer; 20 | .opacity(.5); 21 | } 22 | 23 | // Additional properties for button version 24 | // iOS requires the button element instead of an anchor tag. 25 | // If you want the anchor version, it requires `href="#"`. 26 | // See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile 27 | button& { 28 | padding: 0; 29 | cursor: pointer; 30 | background: transparent; 31 | border: 0; 32 | -webkit-appearance: none; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/bootstrap/less/thumbnails.less: -------------------------------------------------------------------------------- 1 | // 2 | // Thumbnails 3 | // -------------------------------------------------- 4 | 5 | 6 | // Mixin and adjust the regular image class 7 | .thumbnail { 8 | display: block; 9 | padding: @thumbnail-padding; 10 | margin-bottom: @line-height-computed; 11 | line-height: @line-height-base; 12 | background-color: @thumbnail-bg; 13 | border: 1px solid @thumbnail-border; 14 | border-radius: @thumbnail-border-radius; 15 | .transition(border .2s ease-in-out); 16 | 17 | > img, 18 | a > img { 19 | &:extend(.img-responsive); 20 | margin-left: auto; 21 | margin-right: auto; 22 | } 23 | 24 | // Add a hover state for linked versions only 25 | a&:hover, 26 | a&:focus, 27 | a&.active { 28 | border-color: @link-color; 29 | } 30 | 31 | // Image captions 32 | .caption { 33 | padding: @thumbnail-caption-padding; 34 | color: @thumbnail-caption-color; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /webapp/src/main/java/de/tudarmstadt/ukp/exploration/graph_doc_explorer/webapp/application/graph/GeneratorsContainer.java: -------------------------------------------------------------------------------- 1 | package de.tudarmstadt.ukp.exploration.graph_doc_explorer.webapp.application.graph; 2 | 3 | import java.util.HashMap; 4 | import java.util.Map; 5 | 6 | import de.tudarmstadt.ukp.exploration.graph_doc_explorer.graphs.IGraphGenerator; 7 | 8 | public class GeneratorsContainer { 9 | 10 | static private Map generators = new HashMap(); 11 | 12 | public static void put(String id, IGraphGenerator g) { 13 | generators.put(id, g); 14 | } 15 | 16 | public static IGraphGenerator get(String id) { 17 | System.out.println(generators.get(id)); 18 | return generators.get(id); 19 | } 20 | 21 | public static boolean have(String id) { 22 | return generators.containsKey(id); 23 | } 24 | 25 | public static void remove(String id) { 26 | generators.remove(id); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/jquery/src/manipulation/wrapMap.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | 3 | "use strict"; 4 | 5 | // We have to close these tags to support XHTML (#13200) 6 | var wrapMap = { 7 | 8 | // Support: IE <=9 only 9 | option: [ 1, "" ], 10 | 11 | // XHTML parsers do not magically insert elements in the 12 | // same way that tag soup parsers do. So we cannot shorten 13 | // this by omitting or other required elements. 14 | thead: [ 1, "", "
" ], 15 | col: [ 2, "", "
" ], 16 | tr: [ 2, "", "
" ], 17 | td: [ 3, "", "
" ], 18 | 19 | _default: [ 0, "", "" ] 20 | }; 21 | 22 | // Support: IE <=9 only 23 | wrapMap.optgroup = wrapMap.option; 24 | 25 | wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; 26 | wrapMap.th = wrapMap.td; 27 | 28 | return wrapMap; 29 | } ); 30 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/jquery/src/attributes/support.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../var/document", 3 | "../var/support" 4 | ], function( document, support ) { 5 | 6 | "use strict"; 7 | 8 | ( function() { 9 | var input = document.createElement( "input" ), 10 | select = document.createElement( "select" ), 11 | opt = select.appendChild( document.createElement( "option" ) ); 12 | 13 | input.type = "checkbox"; 14 | 15 | // Support: Android <=4.3 only 16 | // Default value for a checkbox should be "on" 17 | support.checkOn = input.value !== ""; 18 | 19 | // Support: IE <=11 only 20 | // Must access selectedIndex to make default options select 21 | support.optSelected = opt.selected; 22 | 23 | // Support: IE <=11 only 24 | // An input loses its value after becoming a radio 25 | input = document.createElement( "input" ); 26 | input.value = "t"; 27 | input.type = "radio"; 28 | support.radioValue = input.value === "t"; 29 | } )(); 30 | 31 | return support; 32 | 33 | } ); 34 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/d3/README.md: -------------------------------------------------------------------------------- 1 | # Data-Driven Documents 2 | 3 | 4 | 5 | **D3.js** is a JavaScript library for manipulating documents based on data. **D3** helps you bring data to life using HTML, SVG, and CSS. **D3** emphasizes web standards and combines powerful visualization components with a data-driven approach to DOM manipulation, giving you the full capabilities of modern browsers without tying yourself to a proprietary framework. 6 | 7 | Want to learn more? [See the wiki.](https://github.com/mbostock/d3/wiki) 8 | 9 | For examples, [see the gallery](https://github.com/mbostock/d3/wiki/Gallery) and [mbostock’s bl.ocks](http://bl.ocks.org/mbostock). 10 | 11 | ## Good News, Everyone! 12 | 13 | The next major release of D3, 4.0, is coming! See the [4.0 development branch](https://github.com/mbostock/d3/tree/4) and read the [new API reference](https://github.com/mbostock/d3/blob/4/README.md) to get ready. 14 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/jquery/src/deprecated.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "./core", 3 | "./core/nodeName" 4 | ], function( jQuery, nodeName ) { 5 | 6 | "use strict"; 7 | 8 | jQuery.fn.extend( { 9 | 10 | bind: function( types, data, fn ) { 11 | return this.on( types, null, data, fn ); 12 | }, 13 | unbind: function( types, fn ) { 14 | return this.off( types, null, fn ); 15 | }, 16 | 17 | delegate: function( selector, types, data, fn ) { 18 | return this.on( types, selector, data, fn ); 19 | }, 20 | undelegate: function( selector, types, fn ) { 21 | 22 | // ( namespace ) or ( selector, types [, fn] ) 23 | return arguments.length === 1 ? 24 | this.off( selector, "**" ) : 25 | this.off( types, selector || "**", fn ); 26 | } 27 | } ); 28 | 29 | jQuery.holdReady = function( hold ) { 30 | if ( hold ) { 31 | jQuery.readyWait++; 32 | } else { 33 | jQuery.ready( true ); 34 | } 35 | }; 36 | jQuery.isArray = Array.isArray; 37 | jQuery.parseJSON = JSON.parse; 38 | jQuery.nodeName = nodeName; 39 | 40 | } ); 41 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/bootstrap/less/utilities.less: -------------------------------------------------------------------------------- 1 | // 2 | // Utility classes 3 | // -------------------------------------------------- 4 | 5 | 6 | // Floats 7 | // ------------------------- 8 | 9 | .clearfix { 10 | .clearfix(); 11 | } 12 | .center-block { 13 | .center-block(); 14 | } 15 | .pull-right { 16 | float: right !important; 17 | } 18 | .pull-left { 19 | float: left !important; 20 | } 21 | 22 | 23 | // Toggling content 24 | // ------------------------- 25 | 26 | // Note: Deprecated .hide in favor of .hidden or .sr-only (as appropriate) in v3.0.1 27 | .hide { 28 | display: none !important; 29 | } 30 | .show { 31 | display: block !important; 32 | } 33 | .invisible { 34 | visibility: hidden; 35 | } 36 | .text-hide { 37 | .text-hide(); 38 | } 39 | 40 | 41 | // Hide from screenreaders and browsers 42 | // 43 | // Credit: HTML5 Boilerplate 44 | 45 | .hidden { 46 | display: none !important; 47 | } 48 | 49 | 50 | // For Affix plugin 51 | // ------------------------- 52 | 53 | .affix { 54 | position: fixed; 55 | } 56 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/bootstrap/Gemfile.lock: -------------------------------------------------------------------------------- 1 | GEM 2 | remote: https://rubygems.org/ 3 | specs: 4 | addressable (2.4.0) 5 | colorator (0.1) 6 | ffi (1.9.14-x64-mingw32) 7 | jekyll (3.1.6) 8 | colorator (~> 0.1) 9 | jekyll-sass-converter (~> 1.0) 10 | jekyll-watch (~> 1.1) 11 | kramdown (~> 1.3) 12 | liquid (~> 3.0) 13 | mercenary (~> 0.3.3) 14 | rouge (~> 1.7) 15 | safe_yaml (~> 1.0) 16 | jekyll-sass-converter (1.4.0) 17 | sass (~> 3.4) 18 | jekyll-sitemap (0.11.0) 19 | addressable (~> 2.4.0) 20 | jekyll-watch (1.4.0) 21 | listen (~> 3.0, < 3.1) 22 | kramdown (1.11.1) 23 | liquid (3.0.6) 24 | listen (3.0.8) 25 | rb-fsevent (~> 0.9, >= 0.9.4) 26 | rb-inotify (~> 0.9, >= 0.9.7) 27 | mercenary (0.3.6) 28 | rb-fsevent (0.9.7) 29 | rb-inotify (0.9.7) 30 | ffi (>= 0.5.0) 31 | rouge (1.11.1) 32 | safe_yaml (1.0.4) 33 | sass (3.4.22) 34 | 35 | PLATFORMS 36 | x64-mingw32 37 | 38 | DEPENDENCIES 39 | jekyll (~> 3.1.2) 40 | jekyll-sitemap (~> 0.11.0) 41 | 42 | BUNDLED WITH 43 | 1.12.5 44 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/bootstrap/package.js: -------------------------------------------------------------------------------- 1 | // package metadata file for Meteor.js 2 | 3 | /* jshint strict:false */ 4 | /* global Package:true */ 5 | 6 | Package.describe({ 7 | name: 'twbs:bootstrap', // http://atmospherejs.com/twbs/bootstrap 8 | summary: 'The most popular front-end framework for developing responsive, mobile first projects on the web.', 9 | version: '3.3.7', 10 | git: 'https://github.com/twbs/bootstrap.git' 11 | }); 12 | 13 | Package.onUse(function (api) { 14 | api.versionsFrom('METEOR@1.0'); 15 | api.use('jquery', 'client'); 16 | var assets = [ 17 | 'dist/fonts/glyphicons-halflings-regular.eot', 18 | 'dist/fonts/glyphicons-halflings-regular.svg', 19 | 'dist/fonts/glyphicons-halflings-regular.ttf', 20 | 'dist/fonts/glyphicons-halflings-regular.woff', 21 | 'dist/fonts/glyphicons-halflings-regular.woff2' 22 | ]; 23 | if (api.addAssets) { 24 | api.addAssets(assets, 'client'); 25 | } else { 26 | api.addFiles(assets, 'client', { isAsset: true }); 27 | } 28 | api.addFiles([ 29 | 'dist/css/bootstrap.css', 30 | 'dist/js/bootstrap.js' 31 | ], 'client'); 32 | }); 33 | -------------------------------------------------------------------------------- /webapp/src/test/javascript/unit/karma.conf.js: -------------------------------------------------------------------------------- 1 | module.exports = function(config){ 2 | config.set({ 3 | reporters: ['progress', 'junit'], 4 | basePath : '../../../', 5 | 6 | files : [ 7 | 'main/webapp/vendor/jquery/dist/jquery.min.js', 8 | 'main/webapp/vendor/angular/**.min.js', 9 | 'main/webapp/vendor/angular-route/**.min.js', 10 | 'main/webapp/vendor/angular-cookies/**.min.js', 11 | 'main/webapp/vendor/angular-sanitize/**.min.js', 12 | 'main/webapp/vendor/d3/**.min.js', 13 | '../node_modules/angular-mocks/angular-mocks.js', 14 | 15 | 'main/webapp/js/app/app.module.js', 16 | 'main/webapp/js/app/app.*.js', 17 | 'main/webapp/js/*.js', 18 | 19 | 'test/javascript/unit/*.tests.js' 20 | ], 21 | 22 | autoWatch : true, 23 | 24 | frameworks: ['jasmine'], 25 | 26 | browsers : ['Chrome'], 27 | 28 | plugins : [ 29 | 'karma-chrome-launcher', 30 | 'karma-jasmine', 31 | 'karma-junit-reporter' 32 | ], 33 | 34 | junitReporter : { 35 | outputFile: 'test/javascript/reports/unit.xml', 36 | suite: 'unit' 37 | } 38 | 39 | }); 40 | }; 41 | -------------------------------------------------------------------------------- /graphs/src/main/java/de/tudarmstadt/ukp/exploration/graph_doc_explorer/graphs/Occurrence.java: -------------------------------------------------------------------------------- 1 | package de.tudarmstadt.ukp.exploration.graph_doc_explorer.graphs; 2 | 3 | /** 4 | * Class that models the occurences of a label node in the documents 5 | * 6 | * @author Alexander Gössl, Arwed Gölz, Ramy Hcini, Sebastian Vollbrecht 7 | * @since 20 Jan 2017 8 | * @version 1.2 9 | */ 10 | 11 | public class Occurrence { 12 | private int begin; 13 | private int end; 14 | private String docID; 15 | 16 | /** 17 | * The ONE AND ONLY usable contructor 18 | * 19 | * @param _begin 20 | * the begin of the occurence in the document 21 | * @param _end 22 | * the end of the occurence in the document 23 | * @param _doc 24 | * the document ID 25 | */ 26 | public Occurrence(int _begin, int _end, String _doc) { 27 | begin = _begin; 28 | end = _end; 29 | docID = _doc; 30 | } 31 | 32 | public int begin() { 33 | return begin; 34 | } 35 | 36 | public int end() { 37 | return end; 38 | } 39 | 40 | public String docID() { 41 | return docID; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/bootstrap/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "bootstrap", 3 | "description": "The most popular front-end framework for developing responsive, mobile first projects on the web.", 4 | "keywords": [ 5 | "css", 6 | "js", 7 | "less", 8 | "mobile-first", 9 | "responsive", 10 | "front-end", 11 | "framework", 12 | "web" 13 | ], 14 | "homepage": "http://getbootstrap.com", 15 | "license": "MIT", 16 | "moduleType": "globals", 17 | "main": [ 18 | "less/bootstrap.less", 19 | "dist/js/bootstrap.js" 20 | ], 21 | "ignore": [ 22 | "/.*", 23 | "_config.yml", 24 | "CNAME", 25 | "composer.json", 26 | "CONTRIBUTING.md", 27 | "docs", 28 | "js/tests", 29 | "test-infra" 30 | ], 31 | "dependencies": { 32 | "jquery": "1.9.1 - 3" 33 | }, 34 | "version": "3.3.7", 35 | "_release": "3.3.7", 36 | "_resolution": { 37 | "type": "version", 38 | "tag": "v3.3.7", 39 | "commit": "0b9c4a4007c44201dce9a6cc1a38407005c26c86" 40 | }, 41 | "_source": "https://github.com/twbs/bootstrap.git", 42 | "_target": "3.3.x", 43 | "_originalSource": "bootstrap" 44 | } -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/bootstrap/less/pager.less: -------------------------------------------------------------------------------- 1 | // 2 | // Pager pagination 3 | // -------------------------------------------------- 4 | 5 | 6 | .pager { 7 | padding-left: 0; 8 | margin: @line-height-computed 0; 9 | list-style: none; 10 | text-align: center; 11 | &:extend(.clearfix all); 12 | li { 13 | display: inline; 14 | > a, 15 | > span { 16 | display: inline-block; 17 | padding: 5px 14px; 18 | background-color: @pager-bg; 19 | border: 1px solid @pager-border; 20 | border-radius: @pager-border-radius; 21 | } 22 | 23 | > a:hover, 24 | > a:focus { 25 | text-decoration: none; 26 | background-color: @pager-hover-bg; 27 | } 28 | } 29 | 30 | .next { 31 | > a, 32 | > span { 33 | float: right; 34 | } 35 | } 36 | 37 | .previous { 38 | > a, 39 | > span { 40 | float: left; 41 | } 42 | } 43 | 44 | .disabled { 45 | > a, 46 | > a:hover, 47 | > a:focus, 48 | > span { 49 | color: @pager-disabled-color; 50 | background-color: @pager-bg; 51 | cursor: @cursor-disabled; 52 | } 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /graphs/src/main/java/de/tudarmstadt/ukp/exploration/graph_doc_explorer/graphs/SearchResult.java: -------------------------------------------------------------------------------- 1 | package de.tudarmstadt.ukp.exploration.graph_doc_explorer.graphs; 2 | 3 | /** 4 | * Class modeling a search result used in the application. 5 | * Content comes from the results of the search engine 6 | * 7 | * @author Alexander Gössl, Arwed Gölz, Ramy Hcini, Sebastian Vollbrecht 8 | * @since 20 Jan 2017 9 | * @version 1.8 10 | */ 11 | public class SearchResult { 12 | private String highlight; 13 | private String text; 14 | private String id; 15 | 16 | /** 17 | * The ONE AND ONLY constructor used for creating Search instances 18 | * 19 | * @param _id 20 | * of the search result 21 | * @param _highlight 22 | * section 23 | * @param _text 24 | */ 25 | public SearchResult(String _id, String _highlight, String _text) { 26 | highlight = _highlight; 27 | text = _text; 28 | id = _id; 29 | } 30 | 31 | public String highlight() { 32 | return highlight; 33 | } 34 | 35 | public String text() { 36 | return text; 37 | } 38 | 39 | public String id() { 40 | return id; 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/bootstrap/grunt/bs-commonjs-generator.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap Grunt task for the CommonJS module generation 3 | * http://getbootstrap.com 4 | * Copyright 2014-2015 Twitter, Inc. 5 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 6 | */ 7 | 8 | 'use strict'; 9 | 10 | var fs = require('fs'); 11 | var path = require('path'); 12 | 13 | var COMMONJS_BANNER = '// This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment.\n'; 14 | 15 | module.exports = function generateCommonJSModule(grunt, srcFiles, destFilepath) { 16 | var destDir = path.dirname(destFilepath); 17 | 18 | function srcPathToDestRequire(srcFilepath) { 19 | var requirePath = path.relative(destDir, srcFilepath).replace(/\\/g, '/'); 20 | return 'require(\'' + requirePath + '\')'; 21 | } 22 | 23 | var moduleOutputJs = COMMONJS_BANNER + srcFiles.map(srcPathToDestRequire).join('\n'); 24 | try { 25 | fs.writeFileSync(destFilepath, moduleOutputJs); 26 | } catch (err) { 27 | grunt.fail.warn(err); 28 | } 29 | grunt.log.writeln('File ' + destFilepath.cyan + ' created.'); 30 | }; 31 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/jquery/src/exports/amd.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../core" 3 | ], function( jQuery ) { 4 | 5 | "use strict"; 6 | 7 | // Register as a named AMD module, since jQuery can be concatenated with other 8 | // files that may use define, but not via a proper concatenation script that 9 | // understands anonymous AMD modules. A named AMD is safest and most robust 10 | // way to register. Lowercase jquery is used because AMD module names are 11 | // derived from file names, and jQuery is normally delivered in a lowercase 12 | // file name. Do this after creating the global so that if an AMD module wants 13 | // to call noConflict to hide this version of jQuery, it will work. 14 | 15 | // Note that for maximum portability, libraries that are not jQuery should 16 | // declare themselves as anonymous modules, and avoid setting a global if an 17 | // AMD loader is present. jQuery is a special case. For more information, see 18 | // https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon 19 | 20 | if ( typeof define === "function" && define.amd ) { 21 | define( "jquery", [], function() { 22 | return jQuery; 23 | } ); 24 | } 25 | 26 | } ); 27 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/angular/LICENSE.md: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2016 Angular 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /webapp/src/main/java/de/tudarmstadt/ukp/exploration/graph_doc_explorer/webapp/application/domains/SearchResponse.java: -------------------------------------------------------------------------------- 1 | package de.tudarmstadt.ukp.exploration.graph_doc_explorer.webapp.application.domains; 2 | 3 | import java.util.List; 4 | 5 | import de.tudarmstadt.ukp.exploration.graph_doc_explorer.graphs.Graph; 6 | import de.tudarmstadt.ukp.exploration.graph_doc_explorer.graphs.SearchResult; 7 | 8 | /** 9 | * The wrapper class of the JSON response sent to the client application 10 | * 11 | * @author Alexander Gössl, Arwed Gölz, Ramy Hcini, Sebastian Vollbrecht 12 | * @since 20 Jan 2017 13 | * @version 1.7 14 | */ 15 | public class SearchResponse { 16 | List searchResults; 17 | GraphAPI graph; 18 | 19 | /** 20 | * ONE AND ONLY constructor 21 | * 22 | * @param _searchResults 23 | * @param _graph 24 | */ 25 | public SearchResponse(List _searchResults, Graph _graph) { 26 | searchResults = _searchResults; 27 | graph = new GraphAPI(_graph); 28 | } 29 | 30 | public List searchResults() { 31 | return searchResults; 32 | } 33 | 34 | public GraphAPI graph() { 35 | return graph; 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/angular-cookies/LICENSE.md: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2016 Angular 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/angular-route/LICENSE.md: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2016 Angular 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/angular-sanitize/LICENSE.md: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2016 Angular 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/bootstrap/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2011-2016 Twitter, Inc. 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /webapp/src/main/java/de/tudarmstadt/ukp/exploration/graph_doc_explorer/webapp/application/domains/GraphAPI.java: -------------------------------------------------------------------------------- 1 | package de.tudarmstadt.ukp.exploration.graph_doc_explorer.webapp.application.domains; 2 | 3 | import java.util.LinkedList; 4 | import java.util.List; 5 | 6 | import de.tudarmstadt.ukp.exploration.graph_doc_explorer.graphs.Graph; 7 | import de.tudarmstadt.ukp.exploration.graph_doc_explorer.graphs.GraphEdge; 8 | import de.tudarmstadt.ukp.exploration.graph_doc_explorer.graphs.GraphNode; 9 | 10 | /** 11 | * Graph for usage in API (with GraphEdgeAPI) 12 | */ 13 | public class GraphAPI { 14 | 15 | private List nodes; 16 | private List edges; 17 | private boolean directed; 18 | 19 | public GraphAPI(Graph g) { 20 | this.nodes = g.nodes(); 21 | this.edges = new LinkedList(); 22 | for (GraphEdge e : g.edges()) 23 | this.edges.add(new GraphEdgeAPI(e)); 24 | this.directed = g.isDirected(); 25 | } 26 | 27 | public List nodes() { 28 | return nodes; 29 | } 30 | 31 | public List edges() { 32 | return edges; 33 | } 34 | 35 | public boolean isDirected() { 36 | return directed; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/jquery/src/manipulation/support.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../var/document", 3 | "../var/support" 4 | ], function( document, support ) { 5 | 6 | "use strict"; 7 | 8 | ( function() { 9 | var fragment = document.createDocumentFragment(), 10 | div = fragment.appendChild( document.createElement( "div" ) ), 11 | input = document.createElement( "input" ); 12 | 13 | // Support: Android 4.0 - 4.3 only 14 | // Check state lost if the name is set (#11217) 15 | // Support: Windows Web Apps (WWA) 16 | // `name` and `type` must use .setAttribute for WWA (#14901) 17 | input.setAttribute( "type", "radio" ); 18 | input.setAttribute( "checked", "checked" ); 19 | input.setAttribute( "name", "t" ); 20 | 21 | div.appendChild( input ); 22 | 23 | // Support: Android <=4.1 only 24 | // Older WebKit doesn't clone checked state correctly in fragments 25 | support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; 26 | 27 | // Support: IE <=11 only 28 | // Make sure textarea (and checkbox) defaultValue is properly cloned 29 | div.innerHTML = ""; 30 | support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; 31 | } )(); 32 | 33 | return support; 34 | 35 | } ); 36 | -------------------------------------------------------------------------------- /webapp/src/main/resources/configs/collections.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 7 | 10 | 13 | 16 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/bootstrap/less/media.less: -------------------------------------------------------------------------------- 1 | .media { 2 | // Proper spacing between instances of .media 3 | margin-top: 15px; 4 | 5 | &:first-child { 6 | margin-top: 0; 7 | } 8 | } 9 | 10 | .media, 11 | .media-body { 12 | zoom: 1; 13 | overflow: hidden; 14 | } 15 | 16 | .media-body { 17 | width: 10000px; 18 | } 19 | 20 | .media-object { 21 | display: block; 22 | 23 | // Fix collapse in webkit from max-width: 100% and display: table-cell. 24 | &.img-thumbnail { 25 | max-width: none; 26 | } 27 | } 28 | 29 | .media-right, 30 | .media > .pull-right { 31 | padding-left: 10px; 32 | } 33 | 34 | .media-left, 35 | .media > .pull-left { 36 | padding-right: 10px; 37 | } 38 | 39 | .media-left, 40 | .media-right, 41 | .media-body { 42 | display: table-cell; 43 | vertical-align: top; 44 | } 45 | 46 | .media-middle { 47 | vertical-align: middle; 48 | } 49 | 50 | .media-bottom { 51 | vertical-align: bottom; 52 | } 53 | 54 | // Reset margins on headings for tighter default spacing 55 | .media-heading { 56 | margin-top: 0; 57 | margin-bottom: 5px; 58 | } 59 | 60 | // Media list variation 61 | // 62 | // Undo default ul/ol styles 63 | .media-list { 64 | padding-left: 0; 65 | list-style: none; 66 | } 67 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/bootstrap/less/mixins/image.less: -------------------------------------------------------------------------------- 1 | // Image Mixins 2 | // - Responsive image 3 | // - Retina image 4 | 5 | 6 | // Responsive image 7 | // 8 | // Keep images from scaling beyond the width of their parents. 9 | .img-responsive(@display: block) { 10 | display: @display; 11 | max-width: 100%; // Part 1: Set a maximum relative to the parent 12 | height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching 13 | } 14 | 15 | 16 | // Retina image 17 | // 18 | // Short retina mixin for setting background-image and -size. Note that the 19 | // spelling of `min--moz-device-pixel-ratio` is intentional. 20 | .img-retina(@file-1x; @file-2x; @width-1x; @height-1x) { 21 | background-image: url("@{file-1x}"); 22 | 23 | @media 24 | only screen and (-webkit-min-device-pixel-ratio: 2), 25 | only screen and ( min--moz-device-pixel-ratio: 2), 26 | only screen and ( -o-min-device-pixel-ratio: 2/1), 27 | only screen and ( min-device-pixel-ratio: 2), 28 | only screen and ( min-resolution: 192dpi), 29 | only screen and ( min-resolution: 2dppx) { 30 | background-image: url("@{file-2x}"); 31 | background-size: @width-1x @height-1x; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /graphs/src/main/java/de/tudarmstadt/ukp/exploration/graph_doc_explorer/graphs/UpdateQueue.java: -------------------------------------------------------------------------------- 1 | package de.tudarmstadt.ukp.exploration.graph_doc_explorer.graphs; 2 | 3 | import java.util.HashSet; 4 | import java.util.Set; 5 | 6 | /** 7 | * This class stores for every user if there is an update available for their 8 | * graphs. 9 | */ 10 | public class UpdateQueue { 11 | static private Set queue = new HashSet(); 12 | 13 | /** 14 | * Add a user ID to the queue to notify the client that this user's 15 | * graph has changed. 16 | * 17 | * @param uuid 18 | * the user ID. 19 | */ 20 | public static void add(String uuid) { 21 | queue.add(uuid); 22 | } 23 | 24 | /** 25 | * Get the state of a given user's graph. If the user ID is in the set, 26 | * the user's graph has changed. 27 | * If not, the user's graph hasn't changed. 28 | * 29 | * @param uuid 30 | * the user ID. 31 | * @return 32 | * true if the given user's graph has changed, otherwise false. 33 | */ 34 | public static boolean getStateOf(String uuid) { 35 | if (queue.contains(uuid)) { 36 | queue.remove(uuid); 37 | return true; 38 | } else { 39 | return false; 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/bootstrap/ISSUE_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | Before opening an issue: 2 | 3 | - [Search for duplicate or closed issues](https://github.com/twbs/bootstrap/issues?utf8=%E2%9C%93&q=is%3Aissue) 4 | - [Validate](http://validator.w3.org/nu/) and [lint](https://github.com/twbs/bootlint#in-the-browser) any HTML to avoid common problems 5 | - Prepare a [reduced test case](https://css-tricks.com/reduced-test-cases/) for any bugs 6 | - Read the [contributing guidelines](https://github.com/twbs/bootstrap/blob/master/CONTRIBUTING.md) 7 | 8 | When asking general "how to" questions: 9 | 10 | - Please do not open an issue here 11 | - Instead, ask for help on [StackOverflow, IRC, or Slack](https://github.com/twbs/bootstrap/blob/master/README.md#community) 12 | 13 | When reporting a bug, include: 14 | 15 | - Operating system and version (Windows, Mac OS X, Android, iOS, Win10 Mobile) 16 | - Browser and version (Chrome, Firefox, Safari, IE, MS Edge, Opera 15+, Android Browser) 17 | - Reduced test cases and potential fixes using [JS Bin](https://jsbin.com) 18 | 19 | When suggesting a feature, include: 20 | 21 | - As much detail as possible for what we should add and why it's important to Bootstrap 22 | - Relevant links to prior art, screenshots, or live demos whenever possible 23 | -------------------------------------------------------------------------------- /webapp/src/test/java/de/tudarmstadt/ukp/exploration/graph_doc_explorer/webapp/application/configs/WebAppConfigurationTest.java: -------------------------------------------------------------------------------- 1 | package de.tudarmstadt.ukp.exploration.graph_doc_explorer.webapp.application.configs; 2 | 3 | import static org.junit.Assert.assertEquals; 4 | 5 | import java.util.List; 6 | 7 | import org.junit.Before; 8 | import org.junit.Test; 9 | 10 | import de.tudarmstadt.ukp.exploration.graph_doc_explorer.webapp.application.domains.Collection; 11 | 12 | public class WebAppConfigurationTest { 13 | private WebAppConfiguration config; 14 | 15 | @Before 16 | public void setUp() throws Exception { 17 | config = WebAppConfiguration.getInstance(); 18 | } 19 | 20 | /** 21 | * Collections 22 | */ 23 | @Test 24 | public void testGetCollection() { 25 | Collection c = config.getCollection("collectionTest1"); 26 | assertEquals(c.folder(), "/data/test1/"); 27 | } 28 | 29 | @Test 30 | public void testGetCollections() { 31 | List lc = config.getCollections(); 32 | assertEquals(lc.size(), 2); 33 | } 34 | 35 | /** 36 | * Solr Server URL 37 | */ 38 | @Test 39 | public void testSolrServerUrl() { 40 | assertEquals(config.solrServerUrl(), "http://localhost:8983/solr/documents"); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /webapp/src/main/java/de/tudarmstadt/ukp/exploration/graph_doc_explorer/webapp/application/search/ISearcher.java: -------------------------------------------------------------------------------- 1 | package de.tudarmstadt.ukp.exploration.graph_doc_explorer.webapp.application.search; 2 | 3 | import java.util.List; 4 | 5 | import de.tudarmstadt.ukp.exploration.graph_doc_explorer.graphs.SearchResult; 6 | 7 | /** 8 | * The interface utilized by all search class implementations 9 | * 10 | * @author Alexander Gössl, Ramy Hcini, Sebastian Vollbrecht, Arwed Gölz 11 | */ 12 | public interface ISearcher { 13 | 14 | /** 15 | * Perform a query on the underlying search method 16 | * 17 | * @param keyword 18 | * The string to search for 19 | * @param groupID 20 | * The document collection to search 21 | * @return A list of the results 22 | */ 23 | public List query(String keyword, String groupID); 24 | 25 | /** 26 | * Sets the string url of the server 27 | * 28 | * @param url: 29 | * url of the server 30 | */ 31 | public void setUrl(String url); 32 | 33 | /** 34 | * List the available document collections that can be searched through 35 | * 36 | * @return A list of available document collections 37 | */ 38 | public List groupIDs(); 39 | } 40 | -------------------------------------------------------------------------------- /webapp/src/test/java/de/tudarmstadt/ukp/exploration/graph_doc_explorer/webapp/application/graph/DummyGraphGeneratorTest.java: -------------------------------------------------------------------------------- 1 | package de.tudarmstadt.ukp.exploration.graph_doc_explorer.webapp.application.graph; 2 | 3 | import static org.junit.Assert.assertEquals; 4 | 5 | import java.util.ArrayList; 6 | import java.util.List; 7 | 8 | import org.junit.Before; 9 | import org.junit.Test; 10 | 11 | import de.tudarmstadt.ukp.exploration.graph_doc_explorer.graphs.SearchResult; 12 | 13 | public class DummyGraphGeneratorTest { 14 | private List searchResults; 15 | 16 | @Before 17 | public void setUp() throws Exception { 18 | searchResults = new ArrayList(); 19 | searchResults.add(new SearchResult("1018-7.txt", "", "")); // 4 nodes ; 20 | // 2 edges 21 | searchResults.add(new SearchResult("1018-1.txt", "", "")); // 4 nodes ; 22 | // 2 edges 23 | } 24 | 25 | @Test 26 | public void testGeneratedGraph() { 27 | FileGraphGenerator dummy = new FileGraphGenerator(); 28 | String[] params = { "" }; 29 | dummy.initialize(searchResults, null, params); // "/data/student_loans/"); 30 | 31 | assertEquals(dummy.getGraph().edges().size(), 5); 32 | assertEquals(dummy.getGraph().nodes().size(), 7); 33 | } 34 | 35 | } 36 | -------------------------------------------------------------------------------- /webapp/src/main/java/de/tudarmstadt/ukp/exploration/graph_doc_explorer/webapp/application/domains/Collection.java: -------------------------------------------------------------------------------- 1 | package de.tudarmstadt.ukp.exploration.graph_doc_explorer.webapp.application.domains; 2 | 3 | /** 4 | * A class representing the Collection 5 | * 6 | * @author Alexander Gössl, Arwed Gölz, Ramy Hcini, Sebastian Vollbrecht 7 | * @since 30 Jan 2017 8 | * @version 1.2 9 | */ 10 | public class Collection { 11 | String name; 12 | String folder; 13 | String className; 14 | String params; 15 | 16 | public Collection(String _n, String _f, String _c, String _p) { 17 | name = _n; 18 | folder = _f; 19 | className = _c; 20 | params = _p; 21 | if (params == null) 22 | params = ""; 23 | } 24 | 25 | public String name() { 26 | return name; 27 | } 28 | 29 | public String folder() { 30 | return folder; 31 | } 32 | 33 | public String className() { 34 | return className; 35 | } 36 | 37 | public String params() { 38 | return params; 39 | } 40 | 41 | public void setName(String n) { 42 | name = n; 43 | } 44 | 45 | public void setFolder(String f) { 46 | folder = f; 47 | } 48 | 49 | public void setClassName(String c) { 50 | className = c; 51 | } 52 | 53 | public void setParams(String p) { 54 | params = p; 55 | } 56 | 57 | } 58 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/bootstrap/less/mixins.less: -------------------------------------------------------------------------------- 1 | // Mixins 2 | // -------------------------------------------------- 3 | 4 | // Utilities 5 | @import "mixins/hide-text.less"; 6 | @import "mixins/opacity.less"; 7 | @import "mixins/image.less"; 8 | @import "mixins/labels.less"; 9 | @import "mixins/reset-filter.less"; 10 | @import "mixins/resize.less"; 11 | @import "mixins/responsive-visibility.less"; 12 | @import "mixins/size.less"; 13 | @import "mixins/tab-focus.less"; 14 | @import "mixins/reset-text.less"; 15 | @import "mixins/text-emphasis.less"; 16 | @import "mixins/text-overflow.less"; 17 | @import "mixins/vendor-prefixes.less"; 18 | 19 | // Components 20 | @import "mixins/alerts.less"; 21 | @import "mixins/buttons.less"; 22 | @import "mixins/panels.less"; 23 | @import "mixins/pagination.less"; 24 | @import "mixins/list-group.less"; 25 | @import "mixins/nav-divider.less"; 26 | @import "mixins/forms.less"; 27 | @import "mixins/progress-bar.less"; 28 | @import "mixins/table-row.less"; 29 | 30 | // Skins 31 | @import "mixins/background-variant.less"; 32 | @import "mixins/border-radius.less"; 33 | @import "mixins/gradients.less"; 34 | 35 | // Layout 36 | @import "mixins/clearfix.less"; 37 | @import "mixins/center-block.less"; 38 | @import "mixins/nav-vertical-align.less"; 39 | @import "mixins/grid-framework.less"; 40 | @import "mixins/grid.less"; 41 | -------------------------------------------------------------------------------- /indexer/src/main/java/de/tudarmstadt/ukp/exploration/graph_doc_explorer/indexer/application/IArgumentsHandler.java: -------------------------------------------------------------------------------- 1 | package de.tudarmstadt.ukp.exploration.graph_doc_explorer.indexer.application; 2 | 3 | import java.nio.file.Path; 4 | 5 | /** 6 | * ArgumentsHandler interface that will be used by the core application to handle the arguments 7 | * given to the application 8 | * @author Ramy Hcini 9 | * @since 20 Dec 2016 10 | * @version 1.0 11 | */ 12 | public interface IArgumentsHandler { 13 | /** 14 | * sets the arguments received from the command line 15 | * @param args an array of arguments 16 | */ 17 | public void setArguments(String[] args) ; 18 | /** 19 | * @return the path of the directory containing the text files to be indexed 20 | */ 21 | public Path getDirectoryPath() ; 22 | 23 | /** 24 | * @return the number of expected arguments 25 | */ 26 | public int getNbOfArgs() ; 27 | 28 | /** 29 | * Sets the server url from the config file 30 | * @param url 31 | */ 32 | public void setServerUrl(String url) ; 33 | /** 34 | * @return the server url 35 | */ 36 | public String getServerUrl() ; 37 | 38 | /** 39 | * @param key is the name of the argument to get, used to enable classes to have optional and special arguments 40 | * @return the value of the argument with the key key 41 | */ 42 | public String get(String key) ; 43 | } 44 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/bootstrap/less/labels.less: -------------------------------------------------------------------------------- 1 | // 2 | // Labels 3 | // -------------------------------------------------- 4 | 5 | .label { 6 | display: inline; 7 | padding: .2em .6em .3em; 8 | font-size: 75%; 9 | font-weight: bold; 10 | line-height: 1; 11 | color: @label-color; 12 | text-align: center; 13 | white-space: nowrap; 14 | vertical-align: baseline; 15 | border-radius: .25em; 16 | 17 | // Add hover effects, but only for links 18 | a& { 19 | &:hover, 20 | &:focus { 21 | color: @label-link-hover-color; 22 | text-decoration: none; 23 | cursor: pointer; 24 | } 25 | } 26 | 27 | // Empty labels collapse automatically (not available in IE8) 28 | &:empty { 29 | display: none; 30 | } 31 | 32 | // Quick fix for labels in buttons 33 | .btn & { 34 | position: relative; 35 | top: -1px; 36 | } 37 | } 38 | 39 | // Colors 40 | // Contextual variations (linked labels get darker on :hover) 41 | 42 | .label-default { 43 | .label-variant(@label-default-bg); 44 | } 45 | 46 | .label-primary { 47 | .label-variant(@label-primary-bg); 48 | } 49 | 50 | .label-success { 51 | .label-variant(@label-success-bg); 52 | } 53 | 54 | .label-info { 55 | .label-variant(@label-info-bg); 56 | } 57 | 58 | .label-warning { 59 | .label-variant(@label-warning-bg); 60 | } 61 | 62 | .label-danger { 63 | .label-variant(@label-danger-bg); 64 | } 65 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/bootstrap/nuget/bootstrap.nuspec: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | bootstrap 5 | 3.3.7 6 | Bootstrap CSS 7 | Twitter, Inc. 8 | bootstrap 9 | The most popular front-end framework for developing responsive, mobile first projects on the web. 10 | http://blog.getbootstrap.com 11 | Bootstrap framework in CSS. Includes fonts and JavaScript 12 | en-us 13 | http://getbootstrap.com 14 | http://getbootstrap.com/apple-touch-icon.png 15 | https://github.com/twbs/bootstrap/blob/master/LICENSE 16 | Copyright 2016 17 | false 18 | 19 | 20 | 21 | css js less mobile-first responsive front-end framework web 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/bootstrap/less/jumbotron.less: -------------------------------------------------------------------------------- 1 | // 2 | // Jumbotron 3 | // -------------------------------------------------- 4 | 5 | 6 | .jumbotron { 7 | padding-top: @jumbotron-padding; 8 | padding-bottom: @jumbotron-padding; 9 | margin-bottom: @jumbotron-padding; 10 | color: @jumbotron-color; 11 | background-color: @jumbotron-bg; 12 | 13 | h1, 14 | .h1 { 15 | color: @jumbotron-heading-color; 16 | } 17 | 18 | p { 19 | margin-bottom: (@jumbotron-padding / 2); 20 | font-size: @jumbotron-font-size; 21 | font-weight: 200; 22 | } 23 | 24 | > hr { 25 | border-top-color: darken(@jumbotron-bg, 10%); 26 | } 27 | 28 | .container &, 29 | .container-fluid & { 30 | border-radius: @border-radius-large; // Only round corners at higher resolutions if contained in a container 31 | padding-left: (@grid-gutter-width / 2); 32 | padding-right: (@grid-gutter-width / 2); 33 | } 34 | 35 | .container { 36 | max-width: 100%; 37 | } 38 | 39 | @media screen and (min-width: @screen-sm-min) { 40 | padding-top: (@jumbotron-padding * 1.6); 41 | padding-bottom: (@jumbotron-padding * 1.6); 42 | 43 | .container &, 44 | .container-fluid & { 45 | padding-left: (@jumbotron-padding * 2); 46 | padding-right: (@jumbotron-padding * 2); 47 | } 48 | 49 | h1, 50 | .h1 { 51 | font-size: @jumbotron-heading-font-size; 52 | } 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /webapp/src/test/java/de/tudarmstadt/ukp/exploration/graph_doc_explorer/webapp/application/graph/parser/SampleDataParserTest.java: -------------------------------------------------------------------------------- 1 | package de.tudarmstadt.ukp.exploration.graph_doc_explorer.webapp.application.graph.parser; 2 | 3 | import static org.junit.Assert.assertEquals; 4 | 5 | import org.junit.Test; 6 | 7 | import de.tudarmstadt.ukp.exploration.graph_doc_explorer.webapp.application.graph.parser.SampleDataParser; 8 | 9 | public class SampleDataParserTest { 10 | 11 | @Test 12 | public void testOrg() { 13 | SampleDataParser p = new SampleDataParser(); 14 | p.setVerbose(true); 15 | assertEquals(true, p.parse()); 16 | assertEquals(25, p.getGraph().nodes().size()); 17 | assertEquals(28, p.getGraph().edges().size()); 18 | 19 | } 20 | 21 | @Test 22 | public void testPersons1() { 23 | SampleDataParser p = new SampleDataParser(); 24 | p.setSrc("/graph/persons1.graph"); 25 | p.setVerbose(true); 26 | assertEquals(true, p.parse()); 27 | assertEquals(13, p.getGraph().nodes().size()); 28 | assertEquals(24, p.getGraph().edges().size()); 29 | } 30 | 31 | @Test 32 | public void testPersons2() { 33 | SampleDataParser p = new SampleDataParser(); 34 | p.setSrc("/graph/persons2.graph"); 35 | p.setVerbose(true); 36 | assertEquals(true, p.parse()); 37 | assertEquals(188, p.getGraph().nodes().size()); 38 | assertEquals(179, p.getGraph().edges().size()); 39 | } 40 | 41 | } 42 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/bootstrap/nuget/bootstrap.less.nuspec: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | bootstrap.less 5 | 3.3.7 6 | Bootstrap Less 7 | Twitter, Inc. 8 | bootstrap 9 | The most popular front-end framework for developing responsive, mobile first projects on the web. 10 | http://blog.getbootstrap.com 11 | Bootstrap framework in Less. Includes fonts and JavaScript 12 | en-us 13 | http://getbootstrap.com 14 | http://getbootstrap.com/apple-touch-icon.png 15 | https://github.com/twbs/bootstrap/blob/master/LICENSE 16 | Copyright 2016 17 | false 18 | 19 | 20 | 21 | css js less mobile-first responsive front-end framework web 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/jquery/src/css/var/isHiddenWithinTree.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../../core", 3 | "../../selector" 4 | 5 | // css is assumed 6 | ], function( jQuery ) { 7 | "use strict"; 8 | 9 | // isHiddenWithinTree reports if an element has a non-"none" display style (inline and/or 10 | // through the CSS cascade), which is useful in deciding whether or not to make it visible. 11 | // It differs from the :hidden selector (jQuery.expr.pseudos.hidden) in two important ways: 12 | // * A hidden ancestor does not force an element to be classified as hidden. 13 | // * Being disconnected from the document does not force an element to be classified as hidden. 14 | // These differences improve the behavior of .toggle() et al. when applied to elements that are 15 | // detached or contained within hidden ancestors (gh-2404, gh-2863). 16 | return function( elem, el ) { 17 | 18 | // isHiddenWithinTree might be called from jQuery#filter function; 19 | // in that case, element will be second argument 20 | elem = el || elem; 21 | 22 | // Inline style trumps all 23 | return elem.style.display === "none" || 24 | elem.style.display === "" && 25 | 26 | // Otherwise, check computed style 27 | // Support: Firefox <=43 - 45 28 | // Disconnected elements can have computed display: none, so first confirm that elem is 29 | // in the document. 30 | jQuery.contains( elem.ownerDocument, elem ) && 31 | 32 | jQuery.css( elem, "display" ) === "none"; 33 | }; 34 | } ); 35 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/angular-cookies/angular-cookies.min.js: -------------------------------------------------------------------------------- 1 | /* 2 | AngularJS v1.5.11 3 | (c) 2010-2017 Google, Inc. http://angularjs.org 4 | License: MIT 5 | */ 6 | (function(n,c){'use strict';function l(b,a,g){var d=g.baseHref(),k=b[0];return function(b,e,f){var g,h;f=f||{};h=f.expires;g=c.isDefined(f.path)?f.path:d;c.isUndefined(e)&&(h="Thu, 01 Jan 1970 00:00:00 GMT",e="");c.isString(h)&&(h=new Date(h));e=encodeURIComponent(b)+"="+encodeURIComponent(e);e=e+(g?";path="+g:"")+(f.domain?";domain="+f.domain:"");e+=h?";expires="+h.toUTCString():"";e+=f.secure?";secure":"";f=e.length+1;4096 4096 bytes)!");k.cookie=e}}c.module("ngCookies",["ng"]).provider("$cookies",[function(){var b=this.defaults={};this.$get=["$$cookieReader","$$cookieWriter",function(a,g){return{get:function(d){return a()[d]},getObject:function(d){return(d=this.get(d))?c.fromJson(d):d},getAll:function(){return a()},put:function(d,a,m){g(d,a,m?c.extend({},b,m):b)},putObject:function(d,b,a){this.put(d,c.toJson(b),a)},remove:function(a,k){g(a,void 0,k?c.extend({},b,k):b)}}}]}]);c.module("ngCookies").factory("$cookieStore", 8 | ["$cookies",function(b){return{get:function(a){return b.getObject(a)},put:function(a,c){b.putObject(a,c)},remove:function(a){b.remove(a)}}}]);l.$inject=["$document","$log","$browser"];c.module("ngCookies").provider("$$cookieWriter",function(){this.$get=l})})(window,window.angular); 9 | //# sourceMappingURL=angular-cookies.min.js.map 10 | -------------------------------------------------------------------------------- /webapp/src/main/java/de/tudarmstadt/ukp/exploration/graph_doc_explorer/webapp/application/domains/GraphEdgeAPI.java: -------------------------------------------------------------------------------- 1 | package de.tudarmstadt.ukp.exploration.graph_doc_explorer.webapp.application.domains; 2 | 3 | import de.tudarmstadt.ukp.exploration.graph_doc_explorer.graphs.GraphEdge; 4 | import de.tudarmstadt.ukp.exploration.graph_doc_explorer.graphs.Label; 5 | 6 | /** 7 | * Graph edge for usage in API -> without references to nodes 8 | */ 9 | public class GraphEdgeAPI { 10 | private String id; 11 | private Label label; 12 | /** 13 | * Source node ID 14 | */ 15 | private String source; 16 | /** 17 | * Target node ID 18 | */ 19 | private String target; 20 | 21 | final private transient String NO_SOURCE_NODE = "null"; 22 | final private transient String NO_TARGET_NODE = "null"; 23 | 24 | public GraphEdgeAPI(GraphEdge e) { 25 | this.id = e.id(); 26 | this.label = e.label(); 27 | this.source = e.getSource().id(); 28 | if (this.source == null) 29 | this.source = NO_SOURCE_NODE; 30 | this.target = e.getTarget().id(); 31 | if (this.target == null) 32 | this.target = NO_TARGET_NODE; 33 | } 34 | 35 | public String id() { 36 | return id; 37 | } 38 | 39 | public String source() { 40 | return source; 41 | } 42 | 43 | public String target() { 44 | return target; 45 | } 46 | 47 | public Label label() { 48 | return label; 49 | } 50 | 51 | @Override 52 | public String toString() { 53 | return source + "-" + target; 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/bootstrap/less/badges.less: -------------------------------------------------------------------------------- 1 | // 2 | // Badges 3 | // -------------------------------------------------- 4 | 5 | 6 | // Base class 7 | .badge { 8 | display: inline-block; 9 | min-width: 10px; 10 | padding: 3px 7px; 11 | font-size: @font-size-small; 12 | font-weight: @badge-font-weight; 13 | color: @badge-color; 14 | line-height: @badge-line-height; 15 | vertical-align: middle; 16 | white-space: nowrap; 17 | text-align: center; 18 | background-color: @badge-bg; 19 | border-radius: @badge-border-radius; 20 | 21 | // Empty badges collapse automatically (not available in IE8) 22 | &:empty { 23 | display: none; 24 | } 25 | 26 | // Quick fix for badges in buttons 27 | .btn & { 28 | position: relative; 29 | top: -1px; 30 | } 31 | 32 | .btn-xs &, 33 | .btn-group-xs > .btn & { 34 | top: 0; 35 | padding: 1px 5px; 36 | } 37 | 38 | // Hover state, but only for links 39 | a& { 40 | &:hover, 41 | &:focus { 42 | color: @badge-link-hover-color; 43 | text-decoration: none; 44 | cursor: pointer; 45 | } 46 | } 47 | 48 | // Account for badges in navs 49 | .list-group-item.active > &, 50 | .nav-pills > .active > a > & { 51 | color: @badge-active-color; 52 | background-color: @badge-active-bg; 53 | } 54 | 55 | .list-group-item > & { 56 | float: right; 57 | } 58 | 59 | .list-group-item > & + & { 60 | margin-right: 5px; 61 | } 62 | 63 | .nav-pills > li > a > & { 64 | margin-left: 3px; 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/d3/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2010-2016, Michael Bostock 2 | All rights reserved. 3 | 4 | Redistribution and use in source and binary forms, with or without 5 | modification, are permitted provided that the following conditions are met: 6 | 7 | * Redistributions of source code must retain the above copyright notice, this 8 | list of conditions and the following disclaimer. 9 | 10 | * Redistributions in binary form must reproduce the above copyright notice, 11 | this list of conditions and the following disclaimer in the documentation 12 | and/or other materials provided with the distribution. 13 | 14 | * The name Michael Bostock may not be used to endorse or promote products 15 | derived from this software without specific prior written permission. 16 | 17 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 18 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 20 | DISCLAIMED. IN NO EVENT SHALL MICHAEL BOSTOCK BE LIABLE FOR ANY DIRECT, 21 | INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 22 | BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23 | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 24 | OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 25 | NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 26 | EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/bootstrap/less/bootstrap.less: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap v3.3.7 (http://getbootstrap.com) 3 | * Copyright 2011-2016 Twitter, Inc. 4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 5 | */ 6 | 7 | // Core variables and mixins 8 | @import "variables.less"; 9 | @import "mixins.less"; 10 | 11 | // Reset and dependencies 12 | @import "normalize.less"; 13 | @import "print.less"; 14 | @import "glyphicons.less"; 15 | 16 | // Core CSS 17 | @import "scaffolding.less"; 18 | @import "type.less"; 19 | @import "code.less"; 20 | @import "grid.less"; 21 | @import "tables.less"; 22 | @import "forms.less"; 23 | @import "buttons.less"; 24 | 25 | // Components 26 | @import "component-animations.less"; 27 | @import "dropdowns.less"; 28 | @import "button-groups.less"; 29 | @import "input-groups.less"; 30 | @import "navs.less"; 31 | @import "navbar.less"; 32 | @import "breadcrumbs.less"; 33 | @import "pagination.less"; 34 | @import "pager.less"; 35 | @import "labels.less"; 36 | @import "badges.less"; 37 | @import "jumbotron.less"; 38 | @import "thumbnails.less"; 39 | @import "alerts.less"; 40 | @import "progress-bars.less"; 41 | @import "media.less"; 42 | @import "list-group.less"; 43 | @import "panels.less"; 44 | @import "responsive-embed.less"; 45 | @import "wells.less"; 46 | @import "close.less"; 47 | 48 | // Components w/ JavaScript 49 | @import "modals.less"; 50 | @import "tooltip.less"; 51 | @import "popovers.less"; 52 | @import "carousel.less"; 53 | 54 | // Utility classes 55 | @import "utilities.less"; 56 | @import "responsive-utilities.less"; 57 | -------------------------------------------------------------------------------- /graphs-ne-impl/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 4.0.0 3 | 4 | de.tudarmstadt.ukp.exploration 5 | graph-doc-explorer 6 | 0.0.1-SNAPSHOT 7 | 8 | graph-doc-explorer.graphs-ne-impl 9 | implementation of graph interface for entities 10 | jar 11 | 12 | 13 | 14 | de.tudarmstadt.ukp.exploration 15 | graph-doc-explorer.graphs 16 | 0.0.1-SNAPSHOT 17 | 18 | 19 | de.tudarmstadt.ukp.dkpro.core 20 | 21 | de.tudarmstadt.ukp.dkpro.core.stanfordnlp-gpl 22 | 23 | 1.8.0 24 | 25 | 26 | de.tudarmstadt.ukp.dkpro.core 27 | 28 | de.tudarmstadt.ukp.dkpro.core.io.bincas-asl 29 | 30 | 1.8.0 31 | 32 | 33 | de.tudarmstadt.ukp.dkpro.core 34 | 35 | de.tudarmstadt.ukp.dkpro.core.io.text-asl 36 | 37 | 1.8.0 38 | 39 | 40 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/bootstrap/grunt/bs-raw-files-generator.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap Grunt task for generating raw-files.min.js for the Customizer 3 | * http://getbootstrap.com 4 | * Copyright 2014-2015 Twitter, Inc. 5 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 6 | */ 7 | 8 | 'use strict'; 9 | 10 | var fs = require('fs'); 11 | var btoa = require('btoa'); 12 | var glob = require('glob'); 13 | 14 | function getFiles(type) { 15 | var files = {}; 16 | var recursive = type === 'less'; 17 | var globExpr = recursive ? '/**/*' : '/*'; 18 | glob.sync(type + globExpr) 19 | .filter(function (path) { 20 | return type === 'fonts' ? true : new RegExp('\\.' + type + '$').test(path); 21 | }) 22 | .forEach(function (fullPath) { 23 | var relativePath = fullPath.replace(/^[^/]+\//, ''); 24 | files[relativePath] = type === 'fonts' ? btoa(fs.readFileSync(fullPath)) : fs.readFileSync(fullPath, 'utf8'); 25 | }); 26 | return 'var __' + type + ' = ' + JSON.stringify(files) + '\n'; 27 | } 28 | 29 | module.exports = function generateRawFilesJs(grunt, banner) { 30 | if (!banner) { 31 | banner = ''; 32 | } 33 | var dirs = ['js', 'less', 'fonts']; 34 | var files = banner + dirs.map(getFiles).reduce(function (combined, file) { 35 | return combined + file; 36 | }, ''); 37 | var rawFilesJs = 'docs/assets/js/raw-files.min.js'; 38 | try { 39 | fs.writeFileSync(rawFilesJs, files); 40 | } catch (err) { 41 | grunt.fail.warn(err); 42 | } 43 | grunt.log.writeln('File ' + rawFilesJs.cyan + ' created.'); 44 | }; 45 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/WEB-INF/log4j2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/jquery/src/core/access.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../core" 3 | ], function( jQuery ) { 4 | 5 | "use strict"; 6 | 7 | // Multifunctional method to get and set values of a collection 8 | // The value/s can optionally be executed if it's a function 9 | var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { 10 | var i = 0, 11 | len = elems.length, 12 | bulk = key == null; 13 | 14 | // Sets many values 15 | if ( jQuery.type( key ) === "object" ) { 16 | chainable = true; 17 | for ( i in key ) { 18 | access( elems, fn, i, key[ i ], true, emptyGet, raw ); 19 | } 20 | 21 | // Sets one value 22 | } else if ( value !== undefined ) { 23 | chainable = true; 24 | 25 | if ( !jQuery.isFunction( value ) ) { 26 | raw = true; 27 | } 28 | 29 | if ( bulk ) { 30 | 31 | // Bulk operations run against the entire set 32 | if ( raw ) { 33 | fn.call( elems, value ); 34 | fn = null; 35 | 36 | // ...except when executing function values 37 | } else { 38 | bulk = fn; 39 | fn = function( elem, key, value ) { 40 | return bulk.call( jQuery( elem ), value ); 41 | }; 42 | } 43 | } 44 | 45 | if ( fn ) { 46 | for ( ; i < len; i++ ) { 47 | fn( 48 | elems[ i ], key, raw ? 49 | value : 50 | value.call( elems[ i ], i, fn( elems[ i ], key ) ) 51 | ); 52 | } 53 | } 54 | } 55 | 56 | if ( chainable ) { 57 | return elems; 58 | } 59 | 60 | // Gets 61 | if ( bulk ) { 62 | return fn.call( elems ); 63 | } 64 | 65 | return len ? fn( elems[ 0 ], key ) : emptyGet; 66 | }; 67 | 68 | return access; 69 | 70 | } ); 71 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/WEB-INF/webapp-dispatcher-servlet.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 11 | 12 | 14 | 16 | 18 | 20 | 21 | 22 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/bootstrap/grunt/bs-glyphicons-data-generator.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap Grunt task for Glyphicons data generation 3 | * http://getbootstrap.com 4 | * Copyright 2014-2015 Twitter, Inc. 5 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 6 | */ 7 | 8 | 'use strict'; 9 | 10 | var fs = require('fs'); 11 | 12 | module.exports = function generateGlyphiconsData(grunt) { 13 | // Pass encoding, utf8, so `readFileSync` will return a string instead of a 14 | // buffer 15 | var glyphiconsFile = fs.readFileSync('less/glyphicons.less', 'utf8'); 16 | var glyphiconsLines = glyphiconsFile.split('\n'); 17 | 18 | // Use any line that starts with ".glyphicon-" and capture the class name 19 | var iconClassName = /^\.(glyphicon-[a-zA-Z0-9-]+)/; 20 | var glyphiconsData = '# This file is generated via Grunt task. **Do not edit directly.**\n' + 21 | '# See the \'build-glyphicons-data\' task in Gruntfile.js.\n\n'; 22 | var glyphiconsYml = 'docs/_data/glyphicons.yml'; 23 | for (var i = 0, len = glyphiconsLines.length; i < len; i++) { 24 | var match = glyphiconsLines[i].match(iconClassName); 25 | 26 | if (match !== null) { 27 | glyphiconsData += '- ' + match[1] + '\n'; 28 | } 29 | } 30 | 31 | // Create the `_data` directory if it doesn't already exist 32 | if (!fs.existsSync('docs/_data')) { 33 | fs.mkdirSync('docs/_data'); 34 | } 35 | 36 | try { 37 | fs.writeFileSync(glyphiconsYml, glyphiconsData); 38 | } catch (err) { 39 | grunt.fail.warn(err); 40 | } 41 | grunt.log.writeln('File ' + glyphiconsYml.cyan + ' created.'); 42 | }; 43 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/bootstrap/grunt/configBridge.json: -------------------------------------------------------------------------------- 1 | { 2 | "paths": { 3 | "customizerJs": [ 4 | "../assets/js/vendor/autoprefixer.js", 5 | "../assets/js/vendor/less.min.js", 6 | "../assets/js/vendor/jszip.min.js", 7 | "../assets/js/vendor/uglify.min.js", 8 | "../assets/js/vendor/Blob.js", 9 | "../assets/js/vendor/FileSaver.js", 10 | "../assets/js/raw-files.min.js", 11 | "../assets/js/src/customizer.js" 12 | ], 13 | "docsJs": [ 14 | "../assets/js/vendor/holder.min.js", 15 | "../assets/js/vendor/ZeroClipboard.min.js", 16 | "../assets/js/vendor/anchor.min.js", 17 | "../assets/js/src/application.js" 18 | ] 19 | }, 20 | "config": { 21 | "autoprefixerBrowsers": [ 22 | "Android 2.3", 23 | "Android >= 4", 24 | "Chrome >= 20", 25 | "Firefox >= 24", 26 | "Explorer >= 8", 27 | "iOS >= 6", 28 | "Opera >= 12", 29 | "Safari >= 6" 30 | ], 31 | "jqueryCheck": [ 32 | "if (typeof jQuery === 'undefined') {", 33 | " throw new Error('Bootstrap\\'s JavaScript requires jQuery')", 34 | "}\n" 35 | ], 36 | "jqueryVersionCheck": [ 37 | "+function ($) {", 38 | " 'use strict';", 39 | " var version = $.fn.jquery.split(' ')[0].split('.')", 40 | " if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1) || (version[0] > 3)) {", 41 | " throw new Error('Bootstrap\\'s JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4')", 42 | " }", 43 | "}(jQuery);\n\n" 44 | ] 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /graphs-ne-impl/src/main/java/de/tudarmstadt/ukp/exploration/graph_doc_explorer/graphs_ne_impl/UimaUtil.java: -------------------------------------------------------------------------------- 1 | package de.tudarmstadt.ukp.exploration.graph_doc_explorer.graphs_ne_impl; 2 | 3 | import java.io.File; 4 | import java.io.FileInputStream; 5 | import java.io.FileNotFoundException; 6 | import java.io.InputStream; 7 | 8 | import org.apache.uima.UIMAException; 9 | import org.apache.uima.cas.impl.Serialization; 10 | import org.apache.uima.fit.factory.JCasFactory; 11 | import org.apache.uima.jcas.JCas; 12 | 13 | import de.tudarmstadt.ukp.dkpro.core.api.metadata.type.DocumentMetaData; 14 | import de.tudarmstadt.ukp.exploration.graph_doc_explorer.graphs.SearchResult; 15 | 16 | public class UimaUtil { 17 | 18 | public static JCas createCas(SearchResult doc) { 19 | 20 | JCas jCas = UimaUtil.createEmptyCas(); 21 | jCas.setDocumentLanguage("en"); 22 | jCas.setDocumentText(doc.text()); 23 | 24 | DocumentMetaData docMetaData = DocumentMetaData.create(jCas); 25 | docMetaData.setDocumentId(doc.id()); 26 | 27 | return jCas; 28 | 29 | } 30 | 31 | public static JCas createEmptyCas() { 32 | try { 33 | JCas jCas = JCasFactory.createJCas(); 34 | return jCas; 35 | } catch (UIMAException e) { 36 | e.printStackTrace(); 37 | return null; 38 | } 39 | } 40 | 41 | public static JCas readBinCas(File binFile, JCas jcas) { 42 | try { 43 | InputStream in = new FileInputStream(binFile); 44 | Serialization.deserializeCAS(jcas.getCas(), in); 45 | return jcas; 46 | } catch (FileNotFoundException e) { 47 | e.printStackTrace(); 48 | return null; 49 | } 50 | } 51 | 52 | } 53 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/bootstrap/less/code.less: -------------------------------------------------------------------------------- 1 | // 2 | // Code (inline and block) 3 | // -------------------------------------------------- 4 | 5 | 6 | // Inline and block code styles 7 | code, 8 | kbd, 9 | pre, 10 | samp { 11 | font-family: @font-family-monospace; 12 | } 13 | 14 | // Inline code 15 | code { 16 | padding: 2px 4px; 17 | font-size: 90%; 18 | color: @code-color; 19 | background-color: @code-bg; 20 | border-radius: @border-radius-base; 21 | } 22 | 23 | // User input typically entered via keyboard 24 | kbd { 25 | padding: 2px 4px; 26 | font-size: 90%; 27 | color: @kbd-color; 28 | background-color: @kbd-bg; 29 | border-radius: @border-radius-small; 30 | box-shadow: inset 0 -1px 0 rgba(0,0,0,.25); 31 | 32 | kbd { 33 | padding: 0; 34 | font-size: 100%; 35 | font-weight: bold; 36 | box-shadow: none; 37 | } 38 | } 39 | 40 | // Blocks of code 41 | pre { 42 | display: block; 43 | padding: ((@line-height-computed - 1) / 2); 44 | margin: 0 0 (@line-height-computed / 2); 45 | font-size: (@font-size-base - 1); // 14px to 13px 46 | line-height: @line-height-base; 47 | word-break: break-all; 48 | word-wrap: break-word; 49 | color: @pre-color; 50 | background-color: @pre-bg; 51 | border: 1px solid @pre-border-color; 52 | border-radius: @border-radius-base; 53 | 54 | // Account for some code outputs that place code tags in pre tags 55 | code { 56 | padding: 0; 57 | font-size: inherit; 58 | color: inherit; 59 | white-space: pre-wrap; 60 | background-color: transparent; 61 | border-radius: 0; 62 | } 63 | } 64 | 65 | // Enable scrollable blocks of code 66 | .pre-scrollable { 67 | max-height: @pre-scrollable-max-height; 68 | overflow-y: scroll; 69 | } 70 | -------------------------------------------------------------------------------- /graphs/src/main/java/de/tudarmstadt/ukp/exploration/graph_doc_explorer/graphs/IGraphGenerator.java: -------------------------------------------------------------------------------- 1 | package de.tudarmstadt.ukp.exploration.graph_doc_explorer.graphs; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * The interface which all graph generators have to implement. 7 | */ 8 | public interface IGraphGenerator { 9 | 10 | /** 11 | * Initializes the graph generator. The initialization needs the search 12 | * results to construct the graph. The folder where the corresponding 13 | * documents are located is useful as it allows storing additional 14 | * information for the graph generator in the folder. 15 | * 16 | * @param searchResults 17 | * A list containing all search results. 18 | * @param folder 19 | * The folder containing the files for this document collection. 20 | */ 21 | public void initialize(List searchResults, String folder, String[] args); 22 | 23 | /** 24 | * Add a User Action to the graph generator. The User Action is modeled by a 25 | * LogEntry which contains more information than just the action itself. 26 | * 27 | * @param userAction 28 | * A LogEntry corresponding to a user action. The LogEntry 29 | * contains more information than just the user action. For 30 | * example the user action "node centered" is always logged 31 | * together with the nodes which are visible after centering the 32 | * node. 33 | */ 34 | public void addUserAction(LogEntry userAction); 35 | 36 | /** 37 | * Returns the graph generated by the graph generator. 38 | * 39 | * @return The graph object containing all the graph's nodes and edges. 40 | */ 41 | public Graph getGraph(); 42 | 43 | } 44 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/bootstrap/less/mixins/buttons.less: -------------------------------------------------------------------------------- 1 | // Button variants 2 | // 3 | // Easily pump out default styles, as well as :hover, :focus, :active, 4 | // and disabled options for all buttons 5 | 6 | .button-variant(@color; @background; @border) { 7 | color: @color; 8 | background-color: @background; 9 | border-color: @border; 10 | 11 | &:focus, 12 | &.focus { 13 | color: @color; 14 | background-color: darken(@background, 10%); 15 | border-color: darken(@border, 25%); 16 | } 17 | &:hover { 18 | color: @color; 19 | background-color: darken(@background, 10%); 20 | border-color: darken(@border, 12%); 21 | } 22 | &:active, 23 | &.active, 24 | .open > .dropdown-toggle& { 25 | color: @color; 26 | background-color: darken(@background, 10%); 27 | border-color: darken(@border, 12%); 28 | 29 | &:hover, 30 | &:focus, 31 | &.focus { 32 | color: @color; 33 | background-color: darken(@background, 17%); 34 | border-color: darken(@border, 25%); 35 | } 36 | } 37 | &:active, 38 | &.active, 39 | .open > .dropdown-toggle& { 40 | background-image: none; 41 | } 42 | &.disabled, 43 | &[disabled], 44 | fieldset[disabled] & { 45 | &:hover, 46 | &:focus, 47 | &.focus { 48 | background-color: @background; 49 | border-color: @border; 50 | } 51 | } 52 | 53 | .badge { 54 | color: @background; 55 | background-color: @color; 56 | } 57 | } 58 | 59 | // Button sizes 60 | .button-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) { 61 | padding: @padding-vertical @padding-horizontal; 62 | font-size: @font-size; 63 | line-height: @line-height; 64 | border-radius: @border-radius; 65 | } 66 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/jquery/LICENSE.txt: -------------------------------------------------------------------------------- 1 | Copyright JS Foundation and other contributors, https://js.foundation/ 2 | 3 | This software consists of voluntary contributions made by many 4 | individuals. For exact contribution history, see the revision history 5 | available at https://github.com/jquery/jquery 6 | 7 | The following license applies to all parts of this software except as 8 | documented below: 9 | 10 | ==== 11 | 12 | Permission is hereby granted, free of charge, to any person obtaining 13 | a copy of this software and associated documentation files (the 14 | "Software"), to deal in the Software without restriction, including 15 | without limitation the rights to use, copy, modify, merge, publish, 16 | distribute, sublicense, and/or sell copies of the Software, and to 17 | permit persons to whom the Software is furnished to do so, subject to 18 | the following conditions: 19 | 20 | The above copyright notice and this permission notice shall be 21 | included in all copies or substantial portions of the Software. 22 | 23 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 24 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 25 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 26 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 27 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 28 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 29 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 30 | 31 | ==== 32 | 33 | All files located in the node_modules and external directories are 34 | externally maintained libraries used by this software which have their 35 | own licenses; we recommend you read them, as their terms may differ from 36 | the terms above. 37 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/jquery/src/event/focusin.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../core", 3 | "../data/var/dataPriv", 4 | "./support", 5 | 6 | "../event", 7 | "./trigger" 8 | ], function( jQuery, dataPriv, support ) { 9 | 10 | "use strict"; 11 | 12 | // Support: Firefox <=44 13 | // Firefox doesn't have focus(in | out) events 14 | // Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 15 | // 16 | // Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 17 | // focus(in | out) events fire after focus & blur events, 18 | // which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order 19 | // Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 20 | if ( !support.focusin ) { 21 | jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { 22 | 23 | // Attach a single capturing handler on the document while someone wants focusin/focusout 24 | var handler = function( event ) { 25 | jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); 26 | }; 27 | 28 | jQuery.event.special[ fix ] = { 29 | setup: function() { 30 | var doc = this.ownerDocument || this, 31 | attaches = dataPriv.access( doc, fix ); 32 | 33 | if ( !attaches ) { 34 | doc.addEventListener( orig, handler, true ); 35 | } 36 | dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); 37 | }, 38 | teardown: function() { 39 | var doc = this.ownerDocument || this, 40 | attaches = dataPriv.access( doc, fix ) - 1; 41 | 42 | if ( !attaches ) { 43 | doc.removeEventListener( orig, handler, true ); 44 | dataPriv.remove( doc, fix ); 45 | 46 | } else { 47 | dataPriv.access( doc, fix, attaches ); 48 | } 49 | } 50 | }; 51 | } ); 52 | } 53 | 54 | return jQuery; 55 | } ); 56 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/jquery/external/sizzle/LICENSE.txt: -------------------------------------------------------------------------------- 1 | Copyright jQuery Foundation and other contributors, https://jquery.org/ 2 | 3 | This software consists of voluntary contributions made by many 4 | individuals. For exact contribution history, see the revision history 5 | available at https://github.com/jquery/sizzle 6 | 7 | The following license applies to all parts of this software except as 8 | documented below: 9 | 10 | ==== 11 | 12 | Permission is hereby granted, free of charge, to any person obtaining 13 | a copy of this software and associated documentation files (the 14 | "Software"), to deal in the Software without restriction, including 15 | without limitation the rights to use, copy, modify, merge, publish, 16 | distribute, sublicense, and/or sell copies of the Software, and to 17 | permit persons to whom the Software is furnished to do so, subject to 18 | the following conditions: 19 | 20 | The above copyright notice and this permission notice shall be 21 | included in all copies or substantial portions of the Software. 22 | 23 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 24 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 25 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 26 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 27 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 28 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 29 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 30 | 31 | ==== 32 | 33 | All files located in the node_modules and external directories are 34 | externally maintained libraries used by this software which have their 35 | own licenses; we recommend you read them, as their terms may differ from 36 | the terms above. 37 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/bootstrap/less/grid.less: -------------------------------------------------------------------------------- 1 | // 2 | // Grid system 3 | // -------------------------------------------------- 4 | 5 | 6 | // Container widths 7 | // 8 | // Set the container width, and override it for fixed navbars in media queries. 9 | 10 | .container { 11 | .container-fixed(); 12 | 13 | @media (min-width: @screen-sm-min) { 14 | width: @container-sm; 15 | } 16 | @media (min-width: @screen-md-min) { 17 | width: @container-md; 18 | } 19 | @media (min-width: @screen-lg-min) { 20 | width: @container-lg; 21 | } 22 | } 23 | 24 | 25 | // Fluid container 26 | // 27 | // Utilizes the mixin meant for fixed width containers, but without any defined 28 | // width for fluid, full width layouts. 29 | 30 | .container-fluid { 31 | .container-fixed(); 32 | } 33 | 34 | 35 | // Row 36 | // 37 | // Rows contain and clear the floats of your columns. 38 | 39 | .row { 40 | .make-row(); 41 | } 42 | 43 | 44 | // Columns 45 | // 46 | // Common styles for small and large grid columns 47 | 48 | .make-grid-columns(); 49 | 50 | 51 | // Extra small grid 52 | // 53 | // Columns, offsets, pushes, and pulls for extra small devices like 54 | // smartphones. 55 | 56 | .make-grid(xs); 57 | 58 | 59 | // Small grid 60 | // 61 | // Columns, offsets, pushes, and pulls for the small device range, from phones 62 | // to tablets. 63 | 64 | @media (min-width: @screen-sm-min) { 65 | .make-grid(sm); 66 | } 67 | 68 | 69 | // Medium grid 70 | // 71 | // Columns, offsets, pushes, and pulls for the desktop device range. 72 | 73 | @media (min-width: @screen-md-min) { 74 | .make-grid(md); 75 | } 76 | 77 | 78 | // Large grid 79 | // 80 | // Columns, offsets, pushes, and pulls for the large desktop device range. 81 | 82 | @media (min-width: @screen-lg-min) { 83 | .make-grid(lg); 84 | } 85 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/jquery/src/wrap.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "./core", 3 | "./core/init", 4 | "./manipulation", // clone 5 | "./traversing" // parent, contents 6 | ], function( jQuery ) { 7 | 8 | "use strict"; 9 | 10 | jQuery.fn.extend( { 11 | wrapAll: function( html ) { 12 | var wrap; 13 | 14 | if ( this[ 0 ] ) { 15 | if ( jQuery.isFunction( html ) ) { 16 | html = html.call( this[ 0 ] ); 17 | } 18 | 19 | // The elements to wrap the target around 20 | wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); 21 | 22 | if ( this[ 0 ].parentNode ) { 23 | wrap.insertBefore( this[ 0 ] ); 24 | } 25 | 26 | wrap.map( function() { 27 | var elem = this; 28 | 29 | while ( elem.firstElementChild ) { 30 | elem = elem.firstElementChild; 31 | } 32 | 33 | return elem; 34 | } ).append( this ); 35 | } 36 | 37 | return this; 38 | }, 39 | 40 | wrapInner: function( html ) { 41 | if ( jQuery.isFunction( html ) ) { 42 | return this.each( function( i ) { 43 | jQuery( this ).wrapInner( html.call( this, i ) ); 44 | } ); 45 | } 46 | 47 | return this.each( function() { 48 | var self = jQuery( this ), 49 | contents = self.contents(); 50 | 51 | if ( contents.length ) { 52 | contents.wrapAll( html ); 53 | 54 | } else { 55 | self.append( html ); 56 | } 57 | } ); 58 | }, 59 | 60 | wrap: function( html ) { 61 | var isFunction = jQuery.isFunction( html ); 62 | 63 | return this.each( function( i ) { 64 | jQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html ); 65 | } ); 66 | }, 67 | 68 | unwrap: function( selector ) { 69 | this.parent( selector ).not( "body" ).each( function() { 70 | jQuery( this ).replaceWith( this.childNodes ); 71 | } ); 72 | return this; 73 | } 74 | } ); 75 | 76 | return jQuery; 77 | } ); 78 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/bootstrap/grunt/sauce_browsers.yml: -------------------------------------------------------------------------------- 1 | [ 2 | # Docs: https://saucelabs.com/docs/platforms/webdriver 3 | 4 | { 5 | browserName: "safari", 6 | platform: "OS X 10.10" 7 | }, 8 | { 9 | browserName: "chrome", 10 | platform: "OS X 10.10" 11 | }, 12 | { 13 | browserName: "firefox", 14 | platform: "OS X 10.10" 15 | }, 16 | 17 | # Mac Opera not currently supported by Sauce Labs 18 | 19 | { 20 | browserName: "internet explorer", 21 | version: "11", 22 | platform: "Windows 8.1" 23 | }, 24 | { 25 | browserName: "internet explorer", 26 | version: "10", 27 | platform: "Windows 8" 28 | }, 29 | { 30 | browserName: "internet explorer", 31 | version: "9", 32 | platform: "Windows 7" 33 | }, 34 | { 35 | browserName: "internet explorer", 36 | version: "8", 37 | platform: "Windows 7" 38 | }, 39 | 40 | # { # Unofficial 41 | # browserName: "internet explorer", 42 | # version: "7", 43 | # platform: "Windows XP" 44 | # }, 45 | 46 | { 47 | browserName: "chrome", 48 | platform: "Windows 8.1" 49 | }, 50 | { 51 | browserName: "firefox", 52 | platform: "Windows 8.1" 53 | }, 54 | 55 | # Win Opera 15+ not currently supported by Sauce Labs 56 | 57 | { 58 | browserName: "iphone", 59 | platform: "OS X 10.10", 60 | version: "9.2" 61 | }, 62 | 63 | # iOS Chrome not currently supported by Sauce Labs 64 | 65 | # Linux (unofficial) 66 | { 67 | browserName: "chrome", 68 | platform: "Linux" 69 | }, 70 | { 71 | browserName: "firefox", 72 | platform: "Linux" 73 | } 74 | 75 | # Android Chrome not currently supported by Sauce Labs 76 | 77 | # { # Android Browser (super-unofficial) 78 | # browserName: "android", 79 | # version: "4.0", 80 | # platform: "Linux" 81 | # } 82 | ] 83 | -------------------------------------------------------------------------------- /webapp/src/main/java/de/tudarmstadt/ukp/exploration/graph_doc_explorer/webapp/application/graph/parser/SyntaxErrorException.java: -------------------------------------------------------------------------------- 1 | package de.tudarmstadt.ukp.exploration.graph_doc_explorer.webapp.application.graph.parser; 2 | 3 | public class SyntaxErrorException extends Exception { 4 | 5 | /** 6 | * 7 | */ 8 | private static final long serialVersionUID = 8022147874769647737L; 9 | 10 | protected String message; 11 | 12 | /** 13 | * SyntaxErrors are thrown whenever a graph file's syntax is invalid. 14 | * 15 | * @param currentLine 16 | * the line, where the error occured 17 | * @param currentColumn 18 | * the column, where the error occured 19 | * @param currentChar 20 | * the current character which caused the error 21 | */ 22 | public SyntaxErrorException(int currentLine, int currentColumn, char currentChar) { 23 | 24 | if (currentChar == '\t' || currentChar == '\n' || currentChar == '\r') 25 | message = "Invalid tab, newline or return character in line " + currentLine + ", column " + currentColumn 26 | + ".\n"; 27 | else 28 | message = "The graph contains an error in line " + currentLine + ", column " + currentColumn + ": " 29 | + currentChar + "\n"; 30 | } 31 | 32 | /* 33 | * (non-Javadoc) 34 | * 35 | * @see java.lang.Throwable#getLocalizedMessage() 36 | */ 37 | @Override 38 | public String getLocalizedMessage() { 39 | return message; 40 | } 41 | 42 | /* 43 | * (non-Javadoc) 44 | * 45 | * @see java.lang.Throwable#getMessage() 46 | */ 47 | @Override 48 | public String getMessage() { 49 | return message; 50 | } 51 | 52 | /* 53 | * (non-Javadoc) 54 | * 55 | * @see java.lang.Throwable#toString() 56 | */ 57 | @Override 58 | public String toString() { 59 | return message; 60 | } 61 | 62 | } 63 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/bootstrap/less/alerts.less: -------------------------------------------------------------------------------- 1 | // 2 | // Alerts 3 | // -------------------------------------------------- 4 | 5 | 6 | // Base styles 7 | // ------------------------- 8 | 9 | .alert { 10 | padding: @alert-padding; 11 | margin-bottom: @line-height-computed; 12 | border: 1px solid transparent; 13 | border-radius: @alert-border-radius; 14 | 15 | // Headings for larger alerts 16 | h4 { 17 | margin-top: 0; 18 | // Specified for the h4 to prevent conflicts of changing @headings-color 19 | color: inherit; 20 | } 21 | 22 | // Provide class for links that match alerts 23 | .alert-link { 24 | font-weight: @alert-link-font-weight; 25 | } 26 | 27 | // Improve alignment and spacing of inner content 28 | > p, 29 | > ul { 30 | margin-bottom: 0; 31 | } 32 | 33 | > p + p { 34 | margin-top: 5px; 35 | } 36 | } 37 | 38 | // Dismissible alerts 39 | // 40 | // Expand the right padding and account for the close button's positioning. 41 | 42 | .alert-dismissable, // The misspelled .alert-dismissable was deprecated in 3.2.0. 43 | .alert-dismissible { 44 | padding-right: (@alert-padding + 20); 45 | 46 | // Adjust close link position 47 | .close { 48 | position: relative; 49 | top: -2px; 50 | right: -21px; 51 | color: inherit; 52 | } 53 | } 54 | 55 | // Alternate styles 56 | // 57 | // Generate contextual modifier classes for colorizing the alert. 58 | 59 | .alert-success { 60 | .alert-variant(@alert-success-bg; @alert-success-border; @alert-success-text); 61 | } 62 | 63 | .alert-info { 64 | .alert-variant(@alert-info-bg; @alert-info-border; @alert-info-text); 65 | } 66 | 67 | .alert-warning { 68 | .alert-variant(@alert-warning-bg; @alert-warning-border; @alert-warning-text); 69 | } 70 | 71 | .alert-danger { 72 | .alert-variant(@alert-danger-bg; @alert-danger-border; @alert-danger-text); 73 | } 74 | -------------------------------------------------------------------------------- /webapp/src/main/resources/configs/config.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/jquery/src/core/parseHTML.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../core", 3 | "../var/document", 4 | "./var/rsingleTag", 5 | "../manipulation/buildFragment", 6 | 7 | // This is the only module that needs core/support 8 | "./support" 9 | ], function( jQuery, document, rsingleTag, buildFragment, support ) { 10 | 11 | "use strict"; 12 | 13 | // Argument "data" should be string of html 14 | // context (optional): If specified, the fragment will be created in this context, 15 | // defaults to document 16 | // keepScripts (optional): If true, will include scripts passed in the html string 17 | jQuery.parseHTML = function( data, context, keepScripts ) { 18 | if ( typeof data !== "string" ) { 19 | return []; 20 | } 21 | if ( typeof context === "boolean" ) { 22 | keepScripts = context; 23 | context = false; 24 | } 25 | 26 | var base, parsed, scripts; 27 | 28 | if ( !context ) { 29 | 30 | // Stop scripts or inline event handlers from being executed immediately 31 | // by using document.implementation 32 | if ( support.createHTMLDocument ) { 33 | context = document.implementation.createHTMLDocument( "" ); 34 | 35 | // Set the base href for the created document 36 | // so any parsed elements with URLs 37 | // are based on the document's URL (gh-2965) 38 | base = context.createElement( "base" ); 39 | base.href = document.location.href; 40 | context.head.appendChild( base ); 41 | } else { 42 | context = document; 43 | } 44 | } 45 | 46 | parsed = rsingleTag.exec( data ); 47 | scripts = !keepScripts && []; 48 | 49 | // Single tag 50 | if ( parsed ) { 51 | return [ context.createElement( parsed[ 1 ] ) ]; 52 | } 53 | 54 | parsed = buildFragment( [ data ], context, scripts ); 55 | 56 | if ( scripts && scripts.length ) { 57 | jQuery( scripts ).remove(); 58 | } 59 | 60 | return jQuery.merge( [], parsed.childNodes ); 61 | }; 62 | 63 | return jQuery.parseHTML; 64 | 65 | } ); 66 | -------------------------------------------------------------------------------- /graphs/src/main/java/de/tudarmstadt/ukp/exploration/graph_doc_explorer/graphs/LogEntry.java: -------------------------------------------------------------------------------- 1 | package de.tudarmstadt.ukp.exploration.graph_doc_explorer.graphs; 2 | 3 | import java.util.Date; 4 | 5 | /** 6 | * Class modeling one log entry in the log file for user actions 7 | * 8 | * @author Alexander Gössl, Arwed Gölz, Ramy Hcini, Sebastian Vollbrecht 9 | */ 10 | public class LogEntry { 11 | 12 | public final static String NO_RESULTS = "NO_RESULTS"; 13 | 14 | private Date date; 15 | private String user_id; 16 | private String collection_id; 17 | private UserAction action; 18 | private String message; 19 | 20 | private boolean isUserActionEntry; 21 | 22 | /** 23 | * Create a new instance of log entry, thereby creating one new line in the 24 | * log 25 | * 26 | * @param user_id 27 | * The ID of the user causing this entry 28 | * @param action 29 | * The user action causing this entry 30 | * @param message 31 | * A string describing what was done 32 | */ 33 | public LogEntry(String user_id, UserAction action, String message) { 34 | this.date = new Date(); 35 | this.user_id = user_id; 36 | this.action = action; 37 | this.message = message; 38 | 39 | isUserActionEntry = true; 40 | } 41 | 42 | public UserAction getAction() { 43 | return action; 44 | } 45 | 46 | public String getMessage() { 47 | return message; 48 | } 49 | 50 | public String getUserID() { 51 | return user_id; 52 | } 53 | 54 | public String getCollectionID() { 55 | return collection_id; 56 | } 57 | 58 | public void setCollection(String c) { 59 | collection_id = c; 60 | } 61 | 62 | @Override 63 | public String toString() { 64 | if (isUserActionEntry) { 65 | return date + "," + user_id + "," + action + "," + message; 66 | } else { 67 | return date + "," + user_id + "," + message; 68 | } 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /graphs-ne-impl/README.md: -------------------------------------------------------------------------------- 1 | # Graph-based Document Exploration 2 | ## graphs-ne-impl module 3 | 4 | This module is an example implementation of a graph extraction module. It uses Stanford NER to identify entities and extracts graphs based on co-occurrences. 5 | 6 | ### Implementation 7 | 8 | The implementation uses DKPro, a UIMA-based framework that provides access to a variety of linguistic annotation tools, such as Stanford NER. Document collections are preprocessed with it and the annotated data is used an runtime. 9 | 10 | ### Usage 11 | 12 | When adding a new document collection, it has to be preprocessed with `PipelinePreprocessing.java`. Documents with annotations are then serialized as *.bin6-files in the document collection folder and accessed by this module at runtime. 13 | 14 | ### Create your own graph extraction module 15 | 16 | Please follow these steps to add a new graph extraction module: 17 | 18 | 1. Create a new Maven module and add the `graphs` module as a dependency. 19 | 1. In that module, create a class that implements `de.tudarmstadt.ukp.exploration.graph_doc_explorer.graphs.IGraphGenerator`. 20 | * `initialize` is called once when the graph extractor is initialized and provides the documents returned by the search and the path to the document collection's fils. 21 | * `addUserAction` is called whenever a user action is reported to the server. The graph extractor can use this information to modify the current graph, if that's desired. 22 | * `getGraph` can be called by the framework at any time and should return the current state of the extracted graph. 23 | * Please refer to `StaticEntityGraph` and `DynamicEntityGraph` for example implementations. 24 | 1. Add your new module as a dependency to the `webapp` module. 25 | 1. In the webapp's `collections.xml`, assign your new class to a document collection. 26 | 1. Build and redeploy the webapp. 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /indexer/src/main/java/de/tudarmstadt/ukp/exploration/graph_doc_explorer/indexer/application/SolrArgumentsHandler.java: -------------------------------------------------------------------------------- 1 | package de.tudarmstadt.ukp.exploration.graph_doc_explorer.indexer.application; 2 | 3 | import java.io.IOException; 4 | import java.nio.file.Path; 5 | import java.nio.file.Paths; 6 | import java.util.HashMap; 7 | 8 | 9 | /** 10 | * Concrete implementation of the interface IArgumentsHandler 11 | * for Solr arguments 12 | * @author Ramy Hcini 13 | * @since 20 Dec 2016 14 | * @version 1.0 15 | */ 16 | public class SolrArgumentsHandler implements IArgumentsHandler { 17 | /** 18 | * directory path 19 | */ 20 | private Path directoryPath ; 21 | 22 | private HashMap specialArgs = new HashMap(); 23 | 24 | /** 25 | * solr server url 26 | */ 27 | private String serverUrl ; 28 | 29 | final private int nbOfArgs = 3 ; 30 | 31 | public SolrArgumentsHandler() { 32 | // DEFAULT VALUES 33 | directoryPath = Paths.get("data") ; 34 | specialArgs.put("groupID", "default") ; 35 | } 36 | 37 | @Override 38 | public void setArguments(String[] args) { 39 | // 2. argument = directory path 40 | String directoryName = args[1] ; 41 | try { 42 | directoryPath = Paths.get(directoryName).toRealPath(); 43 | } catch (IOException e) { 44 | e.printStackTrace(); 45 | } 46 | 47 | // 3. argument = groupID 48 | specialArgs.put("groupID",args[2]) ; 49 | } 50 | 51 | @Override 52 | public Path getDirectoryPath() { 53 | return directoryPath; 54 | } 55 | 56 | @Override 57 | public int getNbOfArgs() { 58 | return nbOfArgs; 59 | } 60 | 61 | @Override 62 | public void setServerUrl(String url) { 63 | serverUrl = url ; 64 | } 65 | 66 | @Override 67 | public String getServerUrl() { 68 | return serverUrl; 69 | } 70 | 71 | @Override 72 | public String get(String key) { 73 | return specialArgs.get(key) ; 74 | } 75 | 76 | } 77 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/jquery/src/css/curCSS.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../core", 3 | "./var/rnumnonpx", 4 | "./var/rmargin", 5 | "./var/getStyles", 6 | "./support", 7 | "../selector" // Get jQuery.contains 8 | ], function( jQuery, rnumnonpx, rmargin, getStyles, support ) { 9 | 10 | "use strict"; 11 | 12 | function curCSS( elem, name, computed ) { 13 | var width, minWidth, maxWidth, ret, 14 | 15 | // Support: Firefox 51+ 16 | // Retrieving style before computed somehow 17 | // fixes an issue with getting wrong values 18 | // on detached elements 19 | style = elem.style; 20 | 21 | computed = computed || getStyles( elem ); 22 | 23 | // getPropertyValue is needed for: 24 | // .css('filter') (IE 9 only, #12537) 25 | // .css('--customProperty) (#3144) 26 | if ( computed ) { 27 | ret = computed.getPropertyValue( name ) || computed[ name ]; 28 | 29 | if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) { 30 | ret = jQuery.style( elem, name ); 31 | } 32 | 33 | // A tribute to the "awesome hack by Dean Edwards" 34 | // Android Browser returns percentage for some values, 35 | // but width seems to be reliably pixels. 36 | // This is against the CSSOM draft spec: 37 | // https://drafts.csswg.org/cssom/#resolved-values 38 | if ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) { 39 | 40 | // Remember the original values 41 | width = style.width; 42 | minWidth = style.minWidth; 43 | maxWidth = style.maxWidth; 44 | 45 | // Put in the new values to get a computed value out 46 | style.minWidth = style.maxWidth = style.width = ret; 47 | ret = computed.width; 48 | 49 | // Revert the changed values 50 | style.width = width; 51 | style.minWidth = minWidth; 52 | style.maxWidth = maxWidth; 53 | } 54 | } 55 | 56 | return ret !== undefined ? 57 | 58 | // Support: IE <=9 - 11 only 59 | // IE returns zIndex value as an integer. 60 | ret + "" : 61 | ret; 62 | } 63 | 64 | return curCSS; 65 | } ); 66 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/jquery/src/dimensions.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "./core", 3 | "./core/access", 4 | "./css" 5 | ], function( jQuery, access ) { 6 | 7 | "use strict"; 8 | 9 | // Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods 10 | jQuery.each( { Height: "height", Width: "width" }, function( name, type ) { 11 | jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, 12 | function( defaultExtra, funcName ) { 13 | 14 | // Margin is only for outerHeight, outerWidth 15 | jQuery.fn[ funcName ] = function( margin, value ) { 16 | var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ), 17 | extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" ); 18 | 19 | return access( this, function( elem, type, value ) { 20 | var doc; 21 | 22 | if ( jQuery.isWindow( elem ) ) { 23 | 24 | // $( window ).outerWidth/Height return w/h including scrollbars (gh-1729) 25 | return funcName.indexOf( "outer" ) === 0 ? 26 | elem[ "inner" + name ] : 27 | elem.document.documentElement[ "client" + name ]; 28 | } 29 | 30 | // Get document width or height 31 | if ( elem.nodeType === 9 ) { 32 | doc = elem.documentElement; 33 | 34 | // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], 35 | // whichever is greatest 36 | return Math.max( 37 | elem.body[ "scroll" + name ], doc[ "scroll" + name ], 38 | elem.body[ "offset" + name ], doc[ "offset" + name ], 39 | doc[ "client" + name ] 40 | ); 41 | } 42 | 43 | return value === undefined ? 44 | 45 | // Get width or height on the element, requesting but not forcing parseFloat 46 | jQuery.css( elem, type, extra ) : 47 | 48 | // Set width or height on the element 49 | jQuery.style( elem, type, value, extra ); 50 | }, type, chainable ? margin : undefined, chainable ); 51 | }; 52 | } ); 53 | } ); 54 | 55 | return jQuery; 56 | } ); 57 | -------------------------------------------------------------------------------- /graphs-ne-impl/src/test/java/de/tudarmstadt/ukp/exploration/graph_doc_explorer/graph_ne_impl/Test.java: -------------------------------------------------------------------------------- 1 | package de.tudarmstadt.ukp.exploration.graph_doc_explorer.graph_ne_impl; 2 | 3 | import java.io.File; 4 | import java.io.IOException; 5 | import java.util.ArrayList; 6 | import java.util.List; 7 | 8 | import org.apache.commons.io.FileUtils; 9 | 10 | import de.tudarmstadt.ukp.exploration.graph_doc_explorer.graphs.Graph; 11 | import de.tudarmstadt.ukp.exploration.graph_doc_explorer.graphs.IGraphGenerator; 12 | import de.tudarmstadt.ukp.exploration.graph_doc_explorer.graphs.SearchResult; 13 | import de.tudarmstadt.ukp.exploration.graph_doc_explorer.graphs_ne_impl.StaticEntityGraph; 14 | 15 | public class Test { 16 | 17 | public static void main(String[] args) { 18 | 19 | String collection = "enron_persons\\"; 20 | 21 | // create search results for test 22 | List results = new ArrayList(); 23 | File folder = new File("..\\webapp\\src\\main\\resources\\data\\" + collection); 24 | for (File f : folder.listFiles()) { 25 | if (f.getName().matches(".*txt")) { 26 | try { 27 | String text = FileUtils.readFileToString(f, "utf-8"); 28 | SearchResult doc = new SearchResult(f.getName().substring(0, f.getName().lastIndexOf('.')), "", 29 | text); 30 | results.add(doc); 31 | } catch (IOException e) { 32 | e.printStackTrace(); 33 | } 34 | } 35 | } 36 | System.out.println("docs: " + results.size()); 37 | 38 | // call the interface 39 | IGraphGenerator generator = new StaticEntityGraph(); 40 | String[] params = { "PERSON", "99999", "99999", "3" }; 41 | generator.initialize(results, 42 | "C:\\Users\\falke\\EclipseWorkspace\\graph-doc-explorer\\webapp\\src\\main\\resources\\data\\" 43 | + collection, 44 | params); 45 | 46 | Graph graph = generator.getGraph(); 47 | 48 | System.out.println("nodes: " + graph.nodes().size()); 49 | System.out.println("edges: " + graph.edges().size()); 50 | 51 | } 52 | 53 | } 54 | -------------------------------------------------------------------------------- /webapp/src/test/java/de/tudarmstadt/ukp/exploration/graph_doc_explorer/webapp/application/graph/filter/NodesInScopeFilterTest.java: -------------------------------------------------------------------------------- 1 | package de.tudarmstadt.ukp.exploration.graph_doc_explorer.webapp.application.graph.filter; 2 | 3 | import static org.junit.Assert.assertEquals; 4 | 5 | import java.util.HashMap; 6 | import java.util.LinkedList; 7 | import java.util.List; 8 | 9 | import org.junit.Test; 10 | 11 | import de.tudarmstadt.ukp.exploration.graph_doc_explorer.graphs.Graph; 12 | import de.tudarmstadt.ukp.exploration.graph_doc_explorer.graphs.GraphEdge; 13 | import de.tudarmstadt.ukp.exploration.graph_doc_explorer.graphs.GraphNode; 14 | import de.tudarmstadt.ukp.exploration.graph_doc_explorer.graphs.SearchResult; 15 | import de.tudarmstadt.ukp.exploration.graph_doc_explorer.webapp.application.graph.parser.SampleDataParser; 16 | 17 | public class NodesInScopeFilterTest { 18 | 19 | private Graph graph; 20 | 21 | private List getSearchResults() { 22 | List results = new LinkedList(); 23 | results.add( 24 | new SearchResult("a.txt", "highlight", "The test query's results only contain the document 'a.txt'.")); 25 | return results; 26 | } 27 | 28 | private void parseGraphFile() { 29 | SampleDataParser p = new SampleDataParser(); 30 | p.setSrc("/graph/filterTest.graph"); 31 | p.parse(); 32 | graph = p.getGraph(); 33 | } 34 | 35 | @Test 36 | public void testCreateEdgesList() { 37 | 38 | parseGraphFile(); 39 | 40 | List searchResults = this.getSearchResults(); 41 | 42 | NodesInScopeFilter nodesInScopeFilter = new NodesInScopeFilter(searchResults, graph); 43 | 44 | // should only contain nodes: Alex, Ramy, Basti 45 | HashMap graphNodes = nodesInScopeFilter.createNodesList(); 46 | assertEquals(3, graphNodes.size()); 47 | 48 | // should only contain edges: Alex-Ramy, Alex-Basti 49 | List graphEdges = nodesInScopeFilter.createEdgesList(); 50 | assertEquals(2, graphEdges.size()); 51 | } 52 | 53 | } 54 | -------------------------------------------------------------------------------- /graphs/src/main/java/de/tudarmstadt/ukp/exploration/graph_doc_explorer/graphs/Graph.java: -------------------------------------------------------------------------------- 1 | package de.tudarmstadt.ukp.exploration.graph_doc_explorer.graphs; 2 | 3 | import java.util.HashSet; 4 | import java.util.LinkedList; 5 | import java.util.List; 6 | import java.util.Map; 7 | import java.util.Set; 8 | 9 | /** 10 | * This class models a Graph including Nodes and Edges 11 | * 12 | * @author Alexander Gössl, Arwed Gölz, Ramy Hcini, Sebastian Vollbrecht 13 | * @since 20 Jan 2017 14 | * @version 1.3 15 | */ 16 | public class Graph { 17 | 18 | private List nodes; 19 | private List edges; 20 | private boolean directed; 21 | 22 | public Graph() { 23 | nodes = new LinkedList(); 24 | edges = new LinkedList(); 25 | directed = true; 26 | } 27 | 28 | /** 29 | * Construct a graph instance 30 | * 31 | * @param nodes 32 | * as a map of nodeID (as String) -> node (as GraphNode) 33 | * @param edges 34 | */ 35 | public Graph(Map nodes, List edges) { 36 | this.nodes = new LinkedList(nodes.values()); 37 | this.edges = edges; 38 | } 39 | 40 | public boolean isDirected() { 41 | return directed; 42 | } 43 | 44 | public void setDirected(boolean dir) { 45 | directed = dir; 46 | } 47 | 48 | public List nodes() { 49 | return nodes; 50 | } 51 | 52 | public List edges() { 53 | return edges; 54 | } 55 | 56 | public void addNode(GraphNode node) { 57 | nodes.add(node); 58 | } 59 | 60 | public void addEdge(GraphEdge edge) { 61 | edges.add(edge); 62 | } 63 | 64 | public void removeNode(GraphNode node) { 65 | this.nodes.remove(node); 66 | Set toRemove = new HashSet(); 67 | 68 | for (GraphEdge e : this.edges) 69 | if (e.getSource().equals(node.id()) || e.getTarget().equals(node.id())) 70 | toRemove.add(e); 71 | 72 | this.edges.removeAll(toRemove); 73 | } 74 | 75 | public void removeEdge(GraphEdge edge) { 76 | this.edges.remove(edge); 77 | } 78 | } 79 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/bootstrap/js/transition.js: -------------------------------------------------------------------------------- 1 | /* ======================================================================== 2 | * Bootstrap: transition.js v3.3.7 3 | * http://getbootstrap.com/javascript/#transitions 4 | * ======================================================================== 5 | * Copyright 2011-2016 Twitter, Inc. 6 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 7 | * ======================================================================== */ 8 | 9 | 10 | +function ($) { 11 | 'use strict'; 12 | 13 | // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/) 14 | // ============================================================ 15 | 16 | function transitionEnd() { 17 | var el = document.createElement('bootstrap') 18 | 19 | var transEndEventNames = { 20 | WebkitTransition : 'webkitTransitionEnd', 21 | MozTransition : 'transitionend', 22 | OTransition : 'oTransitionEnd otransitionend', 23 | transition : 'transitionend' 24 | } 25 | 26 | for (var name in transEndEventNames) { 27 | if (el.style[name] !== undefined) { 28 | return { end: transEndEventNames[name] } 29 | } 30 | } 31 | 32 | return false // explicit for ie8 ( ._.) 33 | } 34 | 35 | // http://blog.alexmaccaw.com/css-transitions 36 | $.fn.emulateTransitionEnd = function (duration) { 37 | var called = false 38 | var $el = this 39 | $(this).one('bsTransitionEnd', function () { called = true }) 40 | var callback = function () { if (!called) $($el).trigger($.support.transition.end) } 41 | setTimeout(callback, duration) 42 | return this 43 | } 44 | 45 | $(function () { 46 | $.support.transition = transitionEnd() 47 | 48 | if (!$.support.transition) return 49 | 50 | $.event.special.bsTransitionEnd = { 51 | bindType: $.support.transition.end, 52 | delegateType: $.support.transition.end, 53 | handle: function (e) { 54 | if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments) 55 | } 56 | } 57 | }) 58 | 59 | }(jQuery); 60 | -------------------------------------------------------------------------------- /graphs/src/main/java/de/tudarmstadt/ukp/exploration/graph_doc_explorer/graphs/GraphEdge.java: -------------------------------------------------------------------------------- 1 | package de.tudarmstadt.ukp.exploration.graph_doc_explorer.graphs; 2 | 3 | /** 4 | * A class that models a graph edge 5 | * 6 | * @author Alexander Gössl, Arwed Gölz, Ramy Hcini, Sebastian Vollbrecht 7 | * @since 20 Jan 2017 8 | * @version 1.4 9 | */ 10 | public class GraphEdge { 11 | private String id; 12 | private Label label; 13 | /** 14 | * Source node ID 15 | */ 16 | private GraphNode source; 17 | /** 18 | * Target node ID 19 | */ 20 | private GraphNode target; 21 | 22 | final private transient String NO_SOURCE_NODE = "null"; 23 | final private transient String NO_TARGET_NODE = "null"; 24 | 25 | /** 26 | * Creates a new GraphEdge, consisting of a source node, a target node and 27 | * the name of the edge 28 | * Generate an ID 29 | * 30 | * @param sourceNode 31 | * the source GraphNode 32 | * @param targetNode 33 | * the target GraphNode 34 | * @param label 35 | * the edge's label 36 | */ 37 | public GraphEdge(GraphNode sourceNode, GraphNode targetNode, Label _label) { 38 | this.source = sourceNode; 39 | this.target = targetNode; 40 | // construct id : concatenate sourceID and targetID with an underscore. 41 | this.id = this.source.id() + "_" + this.target.id(); 42 | this.label = _label; 43 | } 44 | 45 | public String id() { 46 | return id; 47 | } 48 | 49 | public void setId() { 50 | this.id = this.source.id() + "_" + this.target.id(); 51 | } 52 | 53 | public GraphNode getSource() { 54 | return source; 55 | } 56 | 57 | public void setSource(GraphNode node) { 58 | this.source = node; 59 | this.setId(); 60 | } 61 | 62 | public GraphNode getTarget() { 63 | return target; 64 | } 65 | 66 | public void setTarget(GraphNode node) { 67 | this.target = node; 68 | this.setId(); 69 | } 70 | 71 | public Label label() { 72 | return label; 73 | } 74 | 75 | @Override 76 | public String toString() { 77 | return source + "-" + target; 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /indexer/src/main/java/de/tudarmstadt/ukp/exploration/graph_doc_explorer/indexer/application/SolrIndexer.java: -------------------------------------------------------------------------------- 1 | package de.tudarmstadt.ukp.exploration.graph_doc_explorer.indexer.application; 2 | 3 | import java.io.IOException; 4 | import java.nio.file.DirectoryStream; 5 | import java.nio.file.Files; 6 | import java.nio.file.Path; 7 | 8 | import org.apache.commons.io.Charsets; 9 | import org.apache.commons.io.FileUtils; 10 | import org.apache.solr.client.solrj.SolrClient; 11 | import org.apache.solr.client.solrj.SolrServerException; 12 | import org.apache.solr.client.solrj.impl.HttpSolrClient; 13 | import org.apache.solr.common.SolrInputDocument; 14 | 15 | public class SolrIndexer implements IDocumentIndexer { 16 | @Override 17 | public void indexDocuments(IArgumentsHandler handler) { 18 | Path directory = handler.getDirectoryPath(); 19 | String urlString = handler.getServerUrl(); 20 | 21 | try (DirectoryStream stream = Files.newDirectoryStream(directory, "*.txt")) { 22 | SolrClient solr = new HttpSolrClient.Builder(urlString).build(); 23 | for (Path entry : stream) { 24 | System.out.println("Indexing the file " + entry.getFileName()); 25 | 26 | SolrInputDocument doc = new SolrInputDocument(); 27 | String fileName = entry.getFileName().toString(); 28 | String groupID = handler.get("groupID"); 29 | String text = FileUtils.readFileToString(entry.toFile(), Charsets.UTF_8); 30 | 31 | doc.addField("id", groupID + "_" + fileName); 32 | doc.addField("name", fileName.substring(0, fileName.lastIndexOf('.'))); 33 | doc.addField("groupID", groupID); 34 | doc.addField("dc_text", text); 35 | doc.addField("path", directory); 36 | 37 | try { 38 | solr.add(doc); 39 | } catch (SolrServerException e) { 40 | e.printStackTrace(); 41 | } 42 | } 43 | try { 44 | // commit changes 45 | solr.commit(); 46 | } catch (SolrServerException e) { 47 | e.printStackTrace(); 48 | } 49 | } catch (IOException x) { 50 | // it can only be thrown by newDirectoryStream. 51 | System.err.println(x); 52 | } 53 | } 54 | 55 | } 56 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/angular/README.md: -------------------------------------------------------------------------------- 1 | # packaged angular 2 | 3 | This repo is for distribution on `npm` and `bower`. The source for this module is in the 4 | [main AngularJS repo](https://github.com/angular/angular.js). 5 | Please file issues and pull requests against that repo. 6 | 7 | ## Install 8 | 9 | You can install this package either with `npm` or with `bower`. 10 | 11 | ### npm 12 | 13 | ```shell 14 | npm install angular 15 | ``` 16 | 17 | Then add a ` 21 | ``` 22 | 23 | Or `require('angular')` from your code. 24 | 25 | ### bower 26 | 27 | ```shell 28 | bower install angular 29 | ``` 30 | 31 | Then add a ` 35 | ``` 36 | 37 | ## Documentation 38 | 39 | Documentation is available on the 40 | [AngularJS docs site](http://docs.angularjs.org/). 41 | 42 | ## License 43 | 44 | The MIT License 45 | 46 | Copyright (c) 2010-2015 Google, Inc. http://angularjs.org 47 | 48 | Permission is hereby granted, free of charge, to any person obtaining a copy 49 | of this software and associated documentation files (the "Software"), to deal 50 | in the Software without restriction, including without limitation the rights 51 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 52 | copies of the Software, and to permit persons to whom the Software is 53 | furnished to do so, subject to the following conditions: 54 | 55 | The above copyright notice and this permission notice shall be included in 56 | all copies or substantial portions of the Software. 57 | 58 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 59 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 60 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 61 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 62 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 63 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 64 | THE SOFTWARE. 65 | -------------------------------------------------------------------------------- /webapp/README.md: -------------------------------------------------------------------------------- 1 | # Graph-based Document Exploration 2 | ## webapp module 3 | 4 | This module contains backend and frontend parts of the web application. 5 | 6 | ### Configuration 7 | 8 | Folder `src/main/resource/configs` contains two central configuration files: 9 | 10 | * `collections.xml` Definition of document collections and assignment of graph generation modules. 11 | * `config.xml` General settings. 12 | 13 | ### Build 14 | 15 | The whole build process and all Java dependencies are managed by Maven. During a build, NPM and Bower will be automatically downloaded to take care of the dependency management for the frontend code. As a result, a war file will be generated that can be deployed on a web server (e.g. Tomcat). 16 | 17 | ### Installation 18 | 19 | Please follow these steps to setup the system with the default configuration and demo collections: 20 | 21 | 1. Install Tomcat (or alternative Java web server) 22 | 1. Install solr and start solr (`bin/solr start`) 23 | 1. Create a new core with `bin/solr create -c documents` 24 | 1. Using solr web interface, create the following fields in the new core (select the core, then go to `Schema` and click `Add field`) 25 | * Name: dc_text, Type: text_general, Properties: indexed, required, stored 26 | * Name: groupID, Type: string, Properties: indexed, required, stored 27 | * Name: path, Type: string, Properties: indexed, required, stored 28 | 1. Index all documents of the demo collections with solr. Example: 29 | * `document-indexer config.xml data/enron_orgs enron-orgs` 30 | Please make sure that the collections name defined during indexing (last parameter) match those used in the `collections.xml` configuration file. For more infos on indexing, please refer to `indexer/README`. 31 | 1. Deploy the war file created during the build process to Tomcat. 32 | 1. Open the application in your Browser (preferably Chrome). 33 | 34 | ### Project Structure 35 | 36 | The most important code lives here: 37 | * `src/main/java` Java code for backend 38 | * `src/main/resource/configs` configuration files 39 | * `src/main/resource/data` data of demo collections 40 | * `src/main/webapp` code of frontend 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /webapp/src/main/java/de/tudarmstadt/ukp/exploration/graph_doc_explorer/webapp/application/graph/FileGraphGenerator.java: -------------------------------------------------------------------------------- 1 | package de.tudarmstadt.ukp.exploration.graph_doc_explorer.webapp.application.graph; 2 | 3 | import java.util.List; 4 | 5 | import de.tudarmstadt.ukp.exploration.graph_doc_explorer.graphs.Graph; 6 | import de.tudarmstadt.ukp.exploration.graph_doc_explorer.graphs.IGraphGenerator; 7 | import de.tudarmstadt.ukp.exploration.graph_doc_explorer.graphs.LogEntry; 8 | import de.tudarmstadt.ukp.exploration.graph_doc_explorer.graphs.SearchResult; 9 | import de.tudarmstadt.ukp.exploration.graph_doc_explorer.webapp.application.graph.filter.IGraphFilter; 10 | import de.tudarmstadt.ukp.exploration.graph_doc_explorer.webapp.application.graph.filter.NodesInScopeFilter; 11 | import de.tudarmstadt.ukp.exploration.graph_doc_explorer.webapp.application.graph.parser.IGraphParser; 12 | import de.tudarmstadt.ukp.exploration.graph_doc_explorer.webapp.application.graph.parser.SampleDataParser; 13 | 14 | /** 15 | * A dummy graph generator implementing the graph generator interface to 16 | * just for the developement phase. Later we will use the generator of the 17 | * Client 18 | * 19 | * @author Alexander Gössl, Arwed Gölz, Ramy Hcini, Sebastian Vollbrecht 20 | * @since 20 Jan 2017 21 | * @version 1.0 22 | */ 23 | @SuppressWarnings("deprecation") 24 | public class FileGraphGenerator implements IGraphGenerator { 25 | IGraphFilter filter; 26 | IGraphParser parser; 27 | Graph g; 28 | 29 | @Override 30 | public void initialize(List searchResults, String folder, String[] args) { 31 | System.out.println("init: " + this.getClass().getSimpleName()); 32 | SampleDataParser parser = new SampleDataParser(); 33 | if (folder != null) { 34 | parser.setSrc(folder + "graph"); 35 | } 36 | filter = new NodesInScopeFilter(); 37 | parser.parse(); 38 | g = filter.filter(searchResults, parser.getGraph()); 39 | g.setDirected(true); 40 | } 41 | 42 | @Override 43 | public void addUserAction(LogEntry userAction) { 44 | // TODO Auto-generated method stub 45 | 46 | } 47 | 48 | @Override 49 | public Graph getGraph() { 50 | return g; 51 | } 52 | 53 | } 54 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/jquery/src/ajax/load.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../core", 3 | "../core/stripAndCollapse", 4 | "../core/parseHTML", 5 | "../ajax", 6 | "../traversing", 7 | "../manipulation", 8 | "../selector" 9 | ], function( jQuery, stripAndCollapse ) { 10 | 11 | "use strict"; 12 | 13 | /** 14 | * Load a url into a page 15 | */ 16 | jQuery.fn.load = function( url, params, callback ) { 17 | var selector, type, response, 18 | self = this, 19 | off = url.indexOf( " " ); 20 | 21 | if ( off > -1 ) { 22 | selector = stripAndCollapse( url.slice( off ) ); 23 | url = url.slice( 0, off ); 24 | } 25 | 26 | // If it's a function 27 | if ( jQuery.isFunction( params ) ) { 28 | 29 | // We assume that it's the callback 30 | callback = params; 31 | params = undefined; 32 | 33 | // Otherwise, build a param string 34 | } else if ( params && typeof params === "object" ) { 35 | type = "POST"; 36 | } 37 | 38 | // If we have elements to modify, make the request 39 | if ( self.length > 0 ) { 40 | jQuery.ajax( { 41 | url: url, 42 | 43 | // If "type" variable is undefined, then "GET" method will be used. 44 | // Make value of this field explicit since 45 | // user can override it through ajaxSetup method 46 | type: type || "GET", 47 | dataType: "html", 48 | data: params 49 | } ).done( function( responseText ) { 50 | 51 | // Save response for use in complete callback 52 | response = arguments; 53 | 54 | self.html( selector ? 55 | 56 | // If a selector was specified, locate the right elements in a dummy div 57 | // Exclude scripts to avoid IE 'Permission Denied' errors 58 | jQuery( "
" ).append( jQuery.parseHTML( responseText ) ).find( selector ) : 59 | 60 | // Otherwise use the full result 61 | responseText ); 62 | 63 | // If the request succeeds, this function gets "data", "status", "jqXHR" 64 | // but they are ignored because response was set above. 65 | // If it fails, this function gets "jqXHR", "status", "error" 66 | } ).always( callback && function( jqXHR, status ) { 67 | self.each( function() { 68 | callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] ); 69 | } ); 70 | } ); 71 | } 72 | 73 | return this; 74 | }; 75 | 76 | } ); 77 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/vendor/jquery/src/css/adjustCSS.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../core", 3 | "../var/rcssNum" 4 | ], function( jQuery, rcssNum ) { 5 | 6 | "use strict"; 7 | 8 | function adjustCSS( elem, prop, valueParts, tween ) { 9 | var adjusted, 10 | scale = 1, 11 | maxIterations = 20, 12 | currentValue = tween ? 13 | function() { 14 | return tween.cur(); 15 | } : 16 | function() { 17 | return jQuery.css( elem, prop, "" ); 18 | }, 19 | initial = currentValue(), 20 | unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), 21 | 22 | // Starting value computation is required for potential unit mismatches 23 | initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && 24 | rcssNum.exec( jQuery.css( elem, prop ) ); 25 | 26 | if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { 27 | 28 | // Trust units reported by jQuery.css 29 | unit = unit || initialInUnit[ 3 ]; 30 | 31 | // Make sure we update the tween properties later on 32 | valueParts = valueParts || []; 33 | 34 | // Iteratively approximate from a nonzero starting point 35 | initialInUnit = +initial || 1; 36 | 37 | do { 38 | 39 | // If previous iteration zeroed out, double until we get *something*. 40 | // Use string for doubling so we don't accidentally see scale as unchanged below 41 | scale = scale || ".5"; 42 | 43 | // Adjust and apply 44 | initialInUnit = initialInUnit / scale; 45 | jQuery.style( elem, prop, initialInUnit + unit ); 46 | 47 | // Update scale, tolerating zero or NaN from tween.cur() 48 | // Break the loop if scale is unchanged or perfect, or if we've just had enough. 49 | } while ( 50 | scale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations 51 | ); 52 | } 53 | 54 | if ( valueParts ) { 55 | initialInUnit = +initialInUnit || +initial || 0; 56 | 57 | // Apply relative offset (+=/-=) if specified 58 | adjusted = valueParts[ 1 ] ? 59 | initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : 60 | +valueParts[ 2 ]; 61 | if ( tween ) { 62 | tween.unit = unit; 63 | tween.start = initialInUnit; 64 | tween.end = adjusted; 65 | } 66 | } 67 | return adjusted; 68 | } 69 | 70 | return adjustCSS; 71 | } ); 72 | --------------------------------------------------------------------------------