├── .gitignore ├── README.md ├── app ├── controllers │ ├── agents.js │ ├── bot.js │ ├── edition.js │ ├── languages.js │ ├── logs.js │ ├── qa.js │ ├── search.js │ ├── searchMulti.js │ ├── tags.js │ ├── users.js │ ├── versions.js │ └── vocabularies.js ├── mailer │ ├── notify.js │ └── templates │ │ └── comment.jade ├── models │ ├── agent.js │ ├── agentPrivate.js │ ├── agentPublic.js │ ├── languages.js │ ├── logQA.js │ ├── logSearch.js │ ├── logSparql.js │ ├── logSuggest.js │ ├── progress │ │ ├── term.js │ │ ├── termVersion.js │ │ ├── vocabulary.js │ │ └── vocabularyVersion.js │ ├── statlanguage.js │ ├── stattag.js │ ├── statvocabulary.js │ ├── user.js │ └── vocabulary.js └── views │ ├── 404.jade │ ├── 500.jade │ ├── about.jade │ ├── agents │ ├── edit.jade │ ├── form.jade │ ├── index.jade │ ├── new.jade │ └── show.jade │ ├── api.jade │ ├── articles │ ├── edit.jade │ ├── form.jade │ ├── index.jade │ ├── index.mobile.jade │ ├── new.jade │ ├── show.jade │ └── show.mobile.jade │ ├── comments │ ├── comment.jade │ └── form.jade │ ├── edition.jade │ ├── endpoint │ └── index.jade │ ├── includes │ ├── foot.jade │ ├── footer.jade │ ├── head.jade │ ├── header.jade │ └── messages.jade │ ├── index.jade │ ├── languages │ └── show.jade │ ├── layout │ ├── footer.jade │ ├── head.jade │ ├── header.jade │ └── layout.jade │ ├── layouts │ ├── default.jade │ └── mobile.jade │ ├── qa │ └── index.jade │ ├── search │ └── index.jade │ ├── searchMulti │ └── index.jade │ ├── suggest │ └── index.jade │ ├── users │ ├── auth.jade │ ├── edit.jade │ ├── form.jade │ ├── index.jade │ ├── login.jade │ ├── new.jade │ ├── show.jade │ └── signup.jade │ ├── usersBak │ ├── auth.jade │ ├── login.jade │ ├── show.jade │ └── signup.jade │ ├── vocabVersions │ ├── edit.jade │ └── form.jade │ └── vocabularies │ ├── edit.jade │ ├── form.jade │ ├── index.jade │ ├── list.jade │ ├── new.jade │ └── show.jade ├── config ├── config.example.js ├── express.js ├── middlewares │ └── authorization.js ├── passport.js └── routes.js ├── lib ├── queryExamples.js ├── questionAnswerExamples.js └── utils.js ├── package.json ├── public ├── Recommendations_Vocabulary_Design.pdf ├── css │ ├── app.css │ ├── bootstrap-responsive.min.css │ ├── bootstrap.min.css │ ├── dosisBold.woff │ ├── dosisRegular.woff │ ├── grid.css │ ├── jquery.tagsinput.css │ ├── jquery │ │ ├── images │ │ │ ├── animated-overlay.gif │ │ │ ├── ui-bg_flat_0_aaaaaa_40x100.png │ │ │ ├── ui-bg_flat_75_ffffff_40x100.png │ │ │ ├── ui-bg_glass_55_fbf9ee_1x400.png │ │ │ ├── ui-bg_glass_65_ffffff_1x400.png │ │ │ ├── ui-bg_glass_75_dadada_1x400.png │ │ │ ├── ui-bg_glass_75_e6e6e6_1x400.png │ │ │ ├── ui-bg_glass_95_fef1ec_1x400.png │ │ │ ├── ui-bg_highlight-soft_75_cccccc_1x100.png │ │ │ ├── ui-icons_222222_256x240.png │ │ │ ├── ui-icons_2e83ff_256x240.png │ │ │ ├── ui-icons_454545_256x240.png │ │ │ ├── ui-icons_888888_256x240.png │ │ │ └── ui-icons_cd0a0a_256x240.png │ │ ├── jquery-ui.css │ │ ├── jquery.ui.accordion.css │ │ ├── jquery.ui.all.css │ │ ├── jquery.ui.autocomplete.css │ │ ├── jquery.ui.base.css │ │ ├── jquery.ui.button.css │ │ ├── jquery.ui.core.css │ │ ├── jquery.ui.datepicker.css │ │ ├── jquery.ui.dialog.css │ │ ├── jquery.ui.menu.css │ │ ├── jquery.ui.progressbar.css │ │ ├── jquery.ui.resizable.css │ │ ├── jquery.ui.selectable.css │ │ ├── jquery.ui.slider.css │ │ ├── jquery.ui.spinner.css │ │ ├── jquery.ui.tabs.css │ │ ├── jquery.ui.theme.css │ │ ├── jquery.ui.tooltip.css │ │ └── minified │ │ │ ├── images │ │ │ ├── animated-overlay.gif │ │ │ ├── ui-bg_flat_0_aaaaaa_40x100.png │ │ │ ├── ui-bg_flat_75_ffffff_40x100.png │ │ │ ├── ui-bg_glass_55_fbf9ee_1x400.png │ │ │ ├── ui-bg_glass_65_ffffff_1x400.png │ │ │ ├── ui-bg_glass_75_dadada_1x400.png │ │ │ ├── ui-bg_glass_75_e6e6e6_1x400.png │ │ │ ├── ui-bg_glass_95_fef1ec_1x400.png │ │ │ ├── ui-bg_highlight-soft_75_cccccc_1x100.png │ │ │ ├── ui-icons_222222_256x240.png │ │ │ ├── ui-icons_2e83ff_256x240.png │ │ │ ├── ui-icons_454545_256x240.png │ │ │ ├── ui-icons_888888_256x240.png │ │ │ └── ui-icons_cd0a0a_256x240.png │ │ │ ├── jquery-ui.min.css │ │ │ ├── jquery.ui.accordion.min.css │ │ │ ├── jquery.ui.autocomplete.min.css │ │ │ ├── jquery.ui.button.min.css │ │ │ ├── jquery.ui.core.min.css │ │ │ ├── jquery.ui.datepicker.min.css │ │ │ ├── jquery.ui.dialog.min.css │ │ │ ├── jquery.ui.menu.min.css │ │ │ ├── jquery.ui.progressbar.min.css │ │ │ ├── jquery.ui.resizable.min.css │ │ │ ├── jquery.ui.selectable.min.css │ │ │ ├── jquery.ui.slider.min.css │ │ │ ├── jquery.ui.spinner.min.css │ │ │ ├── jquery.ui.tabs.min.css │ │ │ ├── jquery.ui.theme.min.css │ │ │ └── jquery.ui.tooltip.min.css │ ├── nv.d3.css │ ├── parts │ │ ├── about.css │ │ ├── agent.css │ │ ├── api.css │ │ ├── aside.css │ │ ├── boutton.css │ │ ├── edition.css │ │ ├── flatTable.css │ │ ├── form.css │ │ ├── graph.css │ │ ├── header.css │ │ ├── ribbon.css │ │ ├── search.css │ │ ├── suggest.css │ │ └── table.css │ ├── style.css │ ├── style_ext.css │ ├── vis.min.css │ ├── yasqe.min.css │ ├── yasqe_2.0.1.min.css │ ├── yasr.min.css │ └── yasr_1.2.3.min.css ├── img │ ├── Edit_grey.png │ ├── LOV.png │ ├── LOV_small.png │ ├── LOV_white_small.png │ ├── SES.png │ ├── SES_small.png │ ├── SES_white.png │ ├── SES_white_small - Copy.png │ ├── add.png │ ├── add_grey.png │ ├── alert.png │ ├── check.png │ ├── contributors │ │ ├── bv.jpg │ │ └── pyv.jpg │ ├── cursor.png │ ├── document.png │ ├── edit.png │ ├── edit_small.png │ ├── facebook.png │ ├── favicon.ico │ ├── github.png │ ├── glyphicons-halflings-white.png │ ├── glyphicons-halflings.png │ ├── google.png │ ├── gray.png │ ├── green.png │ ├── icon-LOV.png │ ├── key.png │ ├── linkedin.png │ ├── loading.gif │ ├── more.png │ ├── n3_small.gif │ ├── nq_small.gif │ ├── okfn.png │ ├── ontomaton.png │ ├── ontowiki.png │ ├── oops.png │ ├── orange.png │ ├── parrot.png │ ├── partners │ │ ├── datalift.jpg │ │ ├── fujitsu.png │ │ ├── inserm.png │ │ ├── joinup.png │ │ ├── mondeca.png │ │ └── w3c.png │ ├── pdf.gif │ ├── red.png │ ├── remove.png │ ├── remove_white.png │ ├── robot.png │ ├── search-sprite.png │ ├── search.png │ ├── take_action.png │ ├── twitter.png │ ├── upload.png │ ├── validate.png │ ├── vapour.gif │ ├── version.png │ ├── viz.png │ ├── warning_red.png │ └── yasgui.png ├── js │ ├── app.js │ ├── autocomplete.js │ ├── bootbox.js │ ├── bootstrap.min.js │ ├── cie.js │ ├── crossfilter.js │ ├── crossfilter.min.js │ ├── d3.v3.js │ ├── d3.v3.min.js │ ├── dagre-d3.js │ ├── dagre-d3.min.js │ ├── dagre.min.js │ ├── fisheye.js │ ├── form2js │ │ ├── form2js.js │ │ ├── jquery.toObject.js │ │ └── js2form.js │ ├── graph.js │ ├── hive.js │ ├── horizon.js │ ├── index.js │ ├── jquery-1.10.2.min.js │ ├── jquery-1.10.2.min.map │ ├── jquery-ui-1.11.2 │ │ ├── external │ │ │ └── jquery │ │ │ │ └── jquery.js │ │ ├── images │ │ │ ├── ui-bg_diagonals-thick_18_b81900_40x40.png │ │ │ ├── ui-bg_diagonals-thick_20_666666_40x40.png │ │ │ ├── ui-bg_flat_10_000000_40x100.png │ │ │ ├── ui-bg_glass_100_f6f6f6_1x400.png │ │ │ ├── ui-bg_glass_100_fdf5ce_1x400.png │ │ │ ├── ui-bg_glass_65_ffffff_1x400.png │ │ │ ├── ui-bg_gloss-wave_35_f6a828_500x100.png │ │ │ ├── ui-bg_highlight-soft_100_eeeeee_1x100.png │ │ │ ├── ui-bg_highlight-soft_75_ffe45c_1x100.png │ │ │ ├── ui-icons_222222_256x240.png │ │ │ ├── ui-icons_228ef1_256x240.png │ │ │ ├── ui-icons_ef8c08_256x240.png │ │ │ ├── ui-icons_ffd27a_256x240.png │ │ │ └── ui-icons_ffffff_256x240.png │ │ ├── index.html │ │ ├── jquery-ui.css │ │ ├── jquery-ui.js │ │ ├── jquery-ui.min.css │ │ ├── jquery-ui.min.js │ │ ├── jquery-ui.structure.css │ │ ├── jquery-ui.structure.min.css │ │ ├── jquery-ui.theme.css │ │ └── jquery-ui.theme.min.css │ ├── jquery.easing.min.js │ ├── jquery.fittext.js │ ├── jquery.min.js │ ├── jquery.tagsinput.min.js │ ├── jquery.ui.autocomplete.min.js │ ├── jquery.ui.core.min.js │ ├── jquery.ui.menu.min.js │ ├── jquery.ui.position.min.js │ ├── jquery.ui.widget.min.js │ ├── multiselect │ │ ├── img │ │ │ └── expand.png │ │ ├── jquery-gentleSelect-min.js │ │ ├── jquery-gentleSelect.css │ │ └── jquery-gentleSelect.js │ ├── nv.d3.js │ ├── sankey.js │ ├── tooltip │ │ ├── images │ │ │ ├── tt_bottom.gif │ │ │ ├── tt_left.gif │ │ │ ├── tt_top.gif │ │ │ └── x_icon.gif │ │ ├── index.html │ │ ├── jquery.toolbar.js │ │ ├── script.js │ │ └── style.css │ ├── utils.js │ ├── validate.min.js │ ├── vis.map │ ├── vis.min.js │ ├── yasqe.bundled_2.0.1.min.js │ └── yasr.bundled_1.2.3.min.js ├── lov.zip ├── multiBarHorizontalData.json ├── test.json └── test2.json ├── server.js ├── setup ├── agents.json ├── languages.json └── stattags.json └── vocommons └── voaf ├── v1.0 ├── images │ ├── labs.gif │ ├── mondeca.gif │ ├── okfn.png │ ├── rdf.gif │ └── sparqlEndpointStatus_Example.jpg ├── index.html ├── styles │ └── style.css └── voaf_v1.0.rdf ├── v1.1 ├── images │ ├── labs.gif │ ├── mondeca.gif │ ├── okfn.png │ ├── rdf.gif │ └── sparqlEndpointStatus_Example.jpg ├── index.html ├── styles │ └── style.css └── voaf_v1.1.rdf ├── v2.0 ├── images │ ├── labs.gif │ ├── mondeca.gif │ ├── okfn.png │ ├── rdf.gif │ └── sparqlEndpointStatus_Example.jpg ├── index.html ├── styles │ └── style.css └── voaf_v2.0.rdf ├── v2.1 ├── images │ ├── labs.gif │ ├── mondeca.gif │ ├── okfn.png │ ├── play.gif │ ├── rdf.gif │ └── sparqlEndpointStatus_Example.jpg ├── index.html ├── styles │ └── style.css └── voaf_v2.1.rdf ├── v2.2 ├── images │ ├── labs.gif │ ├── mondeca.gif │ ├── okfn.png │ ├── play.gif │ ├── rdf.gif │ └── sparqlEndpointStatus_Example.jpg ├── index.html ├── styles │ └── style.css └── voaf_v2.2.rdf └── v2.3 ├── images ├── labs.gif ├── mondeca.gif ├── okfn.png ├── play.gif ├── rdf.gif └── sparqlEndpointStatus_Example.jpg ├── index.html ├── styles └── style.css └── voaf_v2.3.rdf /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | config/config.js 3 | .classpath 4 | .settings/ 5 | versions/ 6 | .classpath 7 | .project 8 | lovnode.zip 9 | modules.zip 10 | TODO.txt 11 | versions.zip 12 | public/lov.nq.gz 13 | public/lov.n3 14 | public/lov.n3.gz 15 | public/lov.nq -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Linked Open Vocabularies (LOV) - frontEnd 2 | 3 | This is the [Linked Open Vocabularies (LOV) application code repository](http://lov.okfn.org/dataset/lov/). LOV provides a choice of several hundreds of such vocabularies, based on quality requirements including URI stability and availability on the Web, use of standard formats and publication best practices, quality metadata and documentation, identifiable and trustable publication body, proper versioning policy. 4 | 5 | LOV uses [lovScripts](https://github.com/pyvandenbussche/lovScripts) for backoffice scripts such as the aggregator and other scripts. 6 | 7 | The live instance of LOV is available at the following URL: [http://lov.okfn.org/dataset/lov/](http://lov.okfn.org/dataset/lov/) 8 | 9 | ## Install 10 | 11 | **NOTE:** You need to have node.js, mongodb and elasticsearch installed and running. 12 | 13 | ```sh 14 | $ git clone git://github.com/pyvandenbussche/lov.git 15 | $ npm install 16 | $ cp config/config.example.js config/config.js 17 | $ npm start 18 | ``` 19 | 20 | **NOTE:** Do not forget to update the various configuration fields in `config/config.js`. 21 | `db` points to your mongodb database e.g. `mongodb://localhost/lov` 22 | `es` and `elasticsearch` (used by two different node modules to connect to elasticsearch) point to your elastic search instance 23 | `email.auth` is used to send email notification to administrators for curation of the database 24 | 25 | You need to populate the database with certain files if you want to be able to use the edition. 26 | For that use the files in the folder /setup 27 | 28 | 29 | 30 | Then visit [http://localhost:3000/](http://localhost:3000/) 31 | ``` 32 | $ mongoimport -d lov -c agents --file .\agents.json 33 | $ mongoimport -d lov -c languages --file .\languages.json 34 | $ mongoimport -d lov -c stattags --file .\stattags.json 35 | ``` 36 | 37 | ## Directory structure 38 | ``` 39 | -app/ 40 | |__controllers/ 41 | |__models/ 42 | |__mailer/ 43 | |__views/ 44 | -config/ 45 | |__routes.js 46 | |__config.js 47 | |__passport.js (auth config) 48 | |__express.js (express.js configs) 49 | |__middlewares/ (custom middlewares) 50 | -lib/ 51 | -public/ 52 | ``` 53 | 54 | ## License 55 | LOV code and dataset are licensed under a [Creative Commons Attribution 4.0 International License]( https://creativecommons.org/licenses/by/4.0/). 56 | -------------------------------------------------------------------------------- /app/controllers/edition.js: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Module dependencies. 4 | */ 5 | 6 | var mongoose = require('mongoose') 7 | , User = mongoose.model('User') 8 | , users = require('./users') 9 | , Agent = mongoose.model('Agent') 10 | , Vocabulary = mongoose.model('Vocabulary') 11 | , LogSuggest = mongoose.model('LogSuggest') 12 | , utils = require('../../lib/utils') 13 | , _ = require('underscore') 14 | , async = require('async') 15 | 16 | 17 | exports.reviewUsersBatch = function(req, res){ 18 | var deleteArray=JSON.parse(req.body.deleteArray); 19 | var activateArray=JSON.parse(req.body.activateArray); 20 | 21 | async.each(activateArray, function(id, callback) { 22 | User.update({_id:id},{$set:{activated:true}}).exec(callback); 23 | }, function(err, result) { 24 | if( err ) { return console.log(err); } 25 | async.each(deleteArray, function(id, cb) { 26 | User.find({_id:id}).remove().exec(cb); 27 | }, function(err, result) { 28 | if( err ) { return console.log(err); } 29 | res.redirect('/edition/lov/'); 30 | }); 31 | }); 32 | } 33 | 34 | exports.suggestTakeAction = function(req, res){ 35 | LogSuggest.update({_id:req.body.suggId},{$set:{reviewedBy:req.user.agent}}).exec(function(err, suggest) { 36 | if (err) return res.render('500') 37 | res.redirect('/edition/lov/'); 38 | }); 39 | } 40 | 41 | exports.suggestUpdateStatus = function(req, res){ 42 | LogSuggest.update({_id:req.body.suggId},{$set:{status:req.body.status}}).exec(function(err, suggest) { 43 | if (err) return res.render('500') 44 | res.redirect('/edition/lov/'); 45 | }); 46 | } 47 | 48 | 49 | exports.index = function(req, res){ 50 | Vocabulary.listVocabsForReview(function (err, vocabsForReview) { 51 | LogSuggest.listActive(function (err, suggests) { 52 | User.listUsersForReview(function (err, users) { 53 | Vocabulary.listVocabVersionsToReview(function (err, vocabsVersionsForReview) { 54 | res.render('edition', { 55 | utils: utils, 56 | users:users, 57 | suggests:suggests, 58 | vocabsForReview:vocabsForReview, 59 | vocabsVersionsForReview:vocabsVersionsForReview, 60 | auth:req.user 61 | }) 62 | }) 63 | }) 64 | }) 65 | }) 66 | } 67 | -------------------------------------------------------------------------------- /app/controllers/languages.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Module dependencies. 3 | */ 4 | var mongoose = require('mongoose') 5 | , Language = mongoose.model('Language') 6 | , Statlanguage = mongoose.model('Statlanguage') 7 | , utils = require('../../lib/utils') 8 | , _ = require('underscore') 9 | 10 | /** 11 | * Load 12 | */ 13 | 14 | exports.load = function(req, res, next, iso639P3PCode){ 15 | Language.loadByIso639P3PCode(iso639P3PCode, function (err, lang) { 16 | if (err) return next(err) 17 | if (!lang) return next(new Error('Language '+iso639P3PCode+' not found')) 18 | req.lang = lang 19 | next() 20 | }) 21 | } 22 | 23 | /** 24 | * Show 25 | */ 26 | exports.show = function(req, res){ 27 | Statlanguage.mostPopularLangs(function (err, mostPopularLangs) { 28 | //build the JSON object for the elements chart 29 | var values= []; 30 | for(i=0; i< ((mostPopularLangs.length>10)?10:mostPopularLangs.length); i++){ 31 | values.push({label : mostPopularLangs[i].label ,value : parseInt(mostPopularLangs[i].nbOccurrences)}); 32 | } 33 | vocabElementsData = [{key: "Number of vocabularies in ",values: values}]; 34 | var nbOccurrences = 0; 35 | for(i=0; i1){ 16 | console.log(req.query.q) 17 | var command = "python /usr/local/lov/qa4lov/src/webapp/main.py '"+req.query.q+"'"; 18 | var exec = require('child_process').exec; 19 | child = exec(command, 20 | function (error, stdout, stderr) { 21 | if(error !== null){ 22 | console.log('exec error: ' + error); 23 | } 24 | 25 | var log = new LogQA({query: req.query.q, 26 | date: new Date(), 27 | isQuestionProcessed: (stdout.lastIndexOf("Sorry. I don't", 0) !== 0), 28 | isResultEmpty: (stdout.lastIndexOf("Sorry. I am", 0) === 0), 29 | });//console.log(log); 30 | log.save(function (err){if(err)console.log(err)}); 31 | 32 | res.render('qa/index', { 33 | QAExamples: questionAnswerExamples, 34 | question: req.query.q, 35 | stdout:stdout, 36 | stderr:stderr, 37 | utils: utils 38 | }) 39 | }); 40 | } 41 | else{ 42 | res.render('qa/index',{QAExamples:questionAnswerExamples, utils: utils}); 43 | } 44 | } 45 | 46 | /* ************ 47 | FUNCTIONS 48 | ************ */ 49 | 50 | 51 | 52 | /* return a notification of a bad request */ 53 | function standardBadRequestHandler(req, res, helpText) { 54 | res.set('Content-Type', 'text/plain'); 55 | return res.send(400, helpText); 56 | }; 57 | 58 | /* depending on result, send the appropriate response code */ 59 | function standardCallback(req, res, err, results) { 60 | if (err != null) { 61 | console.log(err); 62 | return res.send(500, err); 63 | } else if (!(results != null)) { 64 | return res.send(404, 'API returned no results'); 65 | } else { 66 | return res.send(200, results); 67 | } 68 | }; -------------------------------------------------------------------------------- /app/controllers/searchMulti.js: -------------------------------------------------------------------------------- 1 | var utils = require('../../lib/utils'); 2 | var dagre = require("dagre"); 3 | var fs = require('fs'); 4 | var file = __dirname + '../../../public/test.json'; 5 | var http = require('http'); 6 | 7 | var indexName = 'lov'; /* Name of the ElasticSearch index */ 8 | 9 | /* ********************** 10 | ENTRYPOINT FUNCTIONS 11 | ********************** */ 12 | /** 13 | * Full text search used by the search UI 14 | */ 15 | exports.search = function (req, res, esclient) { 16 | if(req.query.q){ 17 | var kws = req.query.q.split(';'); 18 | if( kws.length>1){ 19 | console.log('Search for terms "'+kws+'"') 20 | 21 | var options = {hostname: 'localhost',port: 8181,path: '/vocreco/rest/reco?q='+req.query.q}; 22 | http.get(options, function(response) { 23 | var bodyChunks = []; 24 | response.on('data', function(d) {bodyChunks.push(d);});// Continuously update stream with data 25 | response.on('end', function() { 26 | var body = Buffer.concat(bodyChunks); 27 | res.render('searchMulti/index',{ 28 | utils: utils, 29 | dagre: dagre, 30 | results: JSON.parse(body) 31 | }); 32 | }); 33 | }); 34 | 35 | /*fs.readFile(file, 'utf8', function (err, data) { 36 | if (err) { 37 | console.log('Error: ' + err); 38 | return; 39 | } 40 | res.render('searchMulti/index',{ 41 | utils: utils, 42 | dagre: dagre, 43 | results: JSON.parse(data) 44 | }); 45 | });*/ 46 | } 47 | else{ 48 | res.render('searchMulti/index',{utils: utils,dagre: dagre}); 49 | } 50 | } 51 | else{ 52 | res.render('searchMulti/index',{utils: utils,dagre: dagre}); 53 | } 54 | 55 | 56 | 57 | 58 | 59 | } 60 | 61 | /* ************ 62 | FUNCTIONS 63 | ************ */ 64 | 65 | 66 | 67 | /* return a notification of a bad request */ 68 | function standardBadRequestHandler(req, res, helpText) { 69 | res.set('Content-Type', 'text/plain'); 70 | return res.send(400, helpText); 71 | }; 72 | 73 | /* depending on result, send the appropriate response code */ 74 | function standardCallback(req, res, err, results) { 75 | if (err != null) { 76 | console.log(err); 77 | return res.send(500, err); 78 | } else if (!(results != null)) { 79 | return res.send(404, 'API returned no results'); 80 | } else { 81 | return res.send(200, results); 82 | } 83 | }; -------------------------------------------------------------------------------- /app/controllers/tags.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Module dependencies. 3 | */ 4 | 5 | var mongoose = require('mongoose') 6 | , Article = mongoose.model('Article') 7 | 8 | /** 9 | * List items tagged with a tag 10 | */ 11 | 12 | exports.index = function (req, res) { 13 | var criteria = { tags: req.param('tag') } 14 | var perPage = 5 15 | var page = (req.param('page') > 0 ? req.param('page') : 1) - 1 16 | var options = { 17 | perPage: perPage, 18 | page: page, 19 | criteria: criteria 20 | } 21 | 22 | Article.list(options, function(err, articles) { 23 | if (err) return res.render('500') 24 | Article.count(criteria).exec(function (err, count) { 25 | res.render('articles/index', { 26 | title: 'Articles tagged ' + req.param('tag'), 27 | articles: articles, 28 | page: page + 1, 29 | pages: Math.ceil(count / perPage) 30 | }) 31 | }) 32 | }) 33 | } 34 | -------------------------------------------------------------------------------- /app/mailer/notify.js: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Module dependencies. 4 | */ 5 | 6 | var mongoose = require('mongoose') 7 | , Notifier = require('notifier') 8 | , env = process.env.NODE_ENV || 'development' 9 | , config = require('../../config/config')[env] 10 | 11 | /** 12 | * Notification methods 13 | */ 14 | 15 | var Notify = { 16 | 17 | /** 18 | * Comment notification 19 | * 20 | * @param {Object} options 21 | * @param {Function} cb 22 | * @api public 23 | */ 24 | 25 | comment: function (options, cb) { 26 | var article = options.article 27 | var author = article.user 28 | var user = options.currentUser 29 | var notifier = new Notifier(config.notifier) 30 | 31 | var obj = { 32 | to: author.email, 33 | from: 'your@product.com', 34 | subject: user.name + ' added a comment on your article ' + article.title, 35 | alert: user.name + ' says: "' + options.comment, 36 | locals: { 37 | to: author.name, 38 | from: user.name, 39 | body: options.comment, 40 | article: article.name 41 | } 42 | } 43 | 44 | // for apple push notifications 45 | /*notifier.use({ 46 | APN: true 47 | parseChannels: ['USER_' + author._id.toString()] 48 | })*/ 49 | 50 | notifier.send('comment', obj, cb) 51 | } 52 | } 53 | 54 | /** 55 | * Expose 56 | */ 57 | 58 | module.exports = Notify 59 | -------------------------------------------------------------------------------- /app/mailer/templates/comment.jade: -------------------------------------------------------------------------------- 1 | p Hello #{to} 2 | 3 | p #{from} has added a comment "#{body}" on your article #{article} 4 | 5 | p Cheers 6 | -------------------------------------------------------------------------------- /app/models/agent.js: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Module dependencies. 4 | */ 5 | 6 | var mongoose = require('mongoose') 7 | , env = process.env.NODE_ENV || 'development' 8 | , config = require('../../config/config')[env] 9 | , Schema = mongoose.Schema 10 | 11 | 12 | /** 13 | * Getters 14 | */ 15 | 16 | var getAltUris = function (altUris) { 17 | return altUris 18 | } 19 | 20 | /** 21 | * Setters 22 | */ 23 | 24 | var setAltUris = function (altUris) { 25 | return altUris 26 | } 27 | 28 | /** 29 | * Agent Schema 30 | */ 31 | 32 | var AgentSchema = new Schema({ 33 | prefUri: {type : String, default : '', trim : true}, 34 | name: {type : String, default : '', trim : true}, 35 | altUris: {type: [], get: getAltUris, set: setAltUris}, 36 | 'type': {type : String, default : '', trim : true} 37 | }) 38 | 39 | /** 40 | * Statics 41 | */ 42 | AgentSchema.statics = { 43 | 44 | /** 45 | * Find agent by id 46 | * 47 | * @param {ObjectId} id 48 | * @param {Function} cb 49 | * @api private 50 | */ 51 | loadFromName: function (name, cb) { 52 | this.findOne({name : name}) 53 | .exec(cb) 54 | }, 55 | 56 | load: function (id, cb) { 57 | this.findOne({_id : id}) 58 | .exec(cb) 59 | }, 60 | 61 | loadFromNameURIAltURI: function(nameURIAltURI, cb) { 62 | this.findOne({ $or: [ //search for altURI or uri or name 63 | {name:nameURIAltURI}, {prefUri:nameURIAltURI},{altUris:nameURIAltURI}]},{_id:0}).exec(cb) 64 | }, 65 | 66 | listAgents: function (cb) { 67 | this.find({},{_id:0}).sort({'name': 1}).exec(cb) 68 | }, 69 | 70 | } 71 | 72 | mongoose.model('Agent', AgentSchema) 73 | -------------------------------------------------------------------------------- /app/models/agentPublic.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Module dependencies. 3 | */ 4 | var mongoose = require('mongoose') 5 | , env = process.env.NODE_ENV || 'development' 6 | , config = require('../../config/config')[env] 7 | , Schema = mongoose.Schema 8 | 9 | /** 10 | * Agent Schema 11 | */ 12 | var AgentPublicSchema = new Schema({ 13 | prefUri: {type : String, default : '', trim : true}, 14 | name: {type : String, default : '', trim : true}, 15 | altUris: {type: []}, 16 | languages: {type: [{ type: Schema.ObjectId, ref: 'Language' }]}, 17 | hasRoleInVocab: [{ type: Schema.ObjectId, ref: 'Vocabulary' }], 18 | 'type': {type : String, default : 'person', trim : true}, 19 | email: { type: String}, 20 | category: { type: String, default : 'curator' }, 21 | callBackFn: { type: String}, 22 | apiKey: { type: String }, 23 | hashed_password: { type: String}, 24 | salt: { type: String}, 25 | activated: { type: Boolean, default: false } 26 | }, { collection: 'agents'}) 27 | 28 | 29 | /** 30 | * Validations 31 | */ 32 | AgentPublicSchema.path('prefUri').validate(function (prefUri) { 33 | return prefUri.length > 0 34 | }, 'Agent preferred URI cannot be blank') 35 | 36 | AgentPublicSchema.path('name').validate(function (name) { 37 | return name.length > 0 38 | }, 'Agent Name cannot be blank') 39 | 40 | AgentPublicSchema.path('type').validate(function (type) { 41 | return type.length > 0 42 | }, 'Agent type cannot be blank') 43 | 44 | 45 | /** 46 | * Statics 47 | */ 48 | AgentPublicSchema.statics = { 49 | /** 50 | * Find agent by id 51 | * 52 | * @param {ObjectId} id 53 | * @param {Function} cb 54 | * @api private 55 | */ 56 | load: function (id, cb) { 57 | this.findOne({_id : id}) 58 | .populate('hasRoleInVocab','prefix') 59 | .populate('languages','label') 60 | .exec(cb) 61 | }, 62 | 63 | /** 64 | * List agents of type person 65 | * 66 | * @param {Function} cb 67 | * @api private 68 | */ 69 | 70 | listPersons: function (cb) { 71 | 72 | this.find({'type':'person'}) 73 | .sort({'name': 1}) // sort by name 74 | .populate('hasRoleInVocab','prefix') 75 | .exec(cb) 76 | }, 77 | 78 | /** 79 | * List agents of type organization 80 | * 81 | * @param {Function} cb 82 | * @api private 83 | */ 84 | 85 | listOrganizations: function (cb) { 86 | 87 | this.find({'type':'organization'}) 88 | .sort({'name': 1}) // sort by name 89 | .populate('hasRoleInVocab','prefix') 90 | .exec(cb) 91 | } 92 | 93 | } 94 | 95 | mongoose.model('AgentPublic', AgentPublicSchema) -------------------------------------------------------------------------------- /app/models/languages.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Module dependencies. 3 | */ 4 | var mongoose = require('mongoose') 5 | , env = process.env.NODE_ENV || 'development' 6 | , config = require('../../config/config')[env] 7 | , Schema = mongoose.Schema 8 | 9 | 10 | /** 11 | * Agent Language 12 | */ 13 | var LanguageSchema = new Schema({ 14 | uri: {type : String, trim : true}, 15 | label: {type : String, trim : true}, 16 | iso639P3PCode: {type : String, trim : true}, 17 | iso639P1Code: {type : String, trim : true} 18 | }) 19 | 20 | /** 21 | * Statics 22 | */ 23 | LanguageSchema.statics = { 24 | 25 | /** 26 | * Find language by id 27 | * 28 | * @param {ObjectId} id 29 | * @param {Function} cb 30 | * @api private 31 | */ 32 | load: function (id, cb) { 33 | this.findOne({_id : id}).exec(cb) 34 | }, 35 | listAllSortByP1Codes: function (cb) { 36 | this.find().sort({'iso639P1Code':1}).exec(cb) 37 | }, 38 | 39 | loadByIso639P3PCode: function (iso639P3PCode, cb) { 40 | this.findOne({'iso639P3PCode' : iso639P3PCode}).exec(cb) 41 | }, 42 | 43 | listAll: function (cb) { 44 | this.find().sort({label:1}).exec(cb) 45 | } 46 | 47 | } 48 | 49 | mongoose.model('Language', LanguageSchema) 50 | -------------------------------------------------------------------------------- /app/models/logQA.js: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Module dependencies. 4 | */ 5 | 6 | var mongoose = require('mongoose') 7 | , env = process.env.NODE_ENV || 'development' 8 | , config = require('../../config/config')[env] 9 | , Schema = mongoose.Schema 10 | 11 | 12 | /** 13 | * Article Schema 14 | */ 15 | 16 | var LogQA = new Schema({ 17 | query: {type : String, trim : true}, 18 | isQuestionProcessed: {type : Boolean}, 19 | isResultEmpty: {type : Boolean}, 20 | date: {type: Date} 21 | }) 22 | 23 | 24 | /** 25 | * Statics 26 | */ 27 | 28 | LogQA.statics = { 29 | 30 | list: function (cb) { 31 | this.find({},{"_id":0}).sort({'date':1}).exec(cb) 32 | }, 33 | } 34 | 35 | mongoose.model('LogQA', LogQA) 36 | -------------------------------------------------------------------------------- /app/models/logSearch.js: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Module dependencies. 4 | */ 5 | 6 | var mongoose = require('mongoose') 7 | , env = process.env.NODE_ENV || 'development' 8 | , config = require('../../config/config')[env] 9 | , Schema = mongoose.Schema 10 | 11 | 12 | /** 13 | * Article Schema 14 | */ 15 | 16 | var LogSearchSchema = new Schema({ 17 | searchWords: {type : String, trim : true}, 18 | searchURL: {type : String}, 19 | date: {type: Date}, 20 | category: {type : String}, 21 | method: {type : String}, 22 | nbResults: {type : String} 23 | }) 24 | 25 | 26 | /** 27 | * Statics 28 | */ 29 | 30 | LogSearchSchema.statics = { 31 | 32 | 33 | mostPopularTags: function (nbItemsRequired, cb) { 34 | this.find({},{"_id":0}).sort({'nbOccurrences':-1}).limit(nbItemsRequired).exec(cb) 35 | }, 36 | } 37 | 38 | mongoose.model('LogSearch', LogSearchSchema) 39 | -------------------------------------------------------------------------------- /app/models/logSparql.js: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Module dependencies. 4 | */ 5 | 6 | var mongoose = require('mongoose') 7 | , env = process.env.NODE_ENV || 'development' 8 | , config = require('../../config/config')[env] 9 | , Schema = mongoose.Schema 10 | 11 | 12 | /** 13 | * Article Schema 14 | */ 15 | 16 | var LogSparql = new Schema({ 17 | query: {type : String, trim : true}, 18 | execTime: {type : String}, 19 | date: {type: Date}, 20 | nbResults: {type : String} 21 | }) 22 | 23 | 24 | /** 25 | * Statics 26 | */ 27 | 28 | LogSparql.statics = { 29 | 30 | list: function (cb) { 31 | this.find({},{"_id":0}).sort({'date':1}).exec(cb) 32 | }, 33 | } 34 | 35 | mongoose.model('LogSparql', LogSparql) 36 | -------------------------------------------------------------------------------- /app/models/logSuggest.js: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Module dependencies. 4 | */ 5 | 6 | var mongoose = require('mongoose') 7 | , env = process.env.NODE_ENV || 'development' 8 | , config = require('../../config/config')[env] 9 | , Schema = mongoose.Schema 10 | 11 | 12 | /** 13 | * Article Schema 14 | */ 15 | 16 | var LogSuggestSchema = new Schema({ 17 | suggestedBy: {type : String}, 18 | uri: {type : String}, 19 | date: {type: Date}, 20 | status: {type : String} , 21 | reviewedBy: { type : String, ref : 'Agent' } 22 | }) 23 | 24 | 25 | /** 26 | * Statics 27 | */ 28 | 29 | LogSuggestSchema.statics = { 30 | list: function (cb) { 31 | this.find() 32 | .populate('reviewedBy', 'name') 33 | .sort({date:-1}) 34 | .exec(cb) 35 | }, 36 | 37 | listActive: function (cb) { 38 | this.find({$nor: [ {status:"discarded"},{status:"created"}]}) 39 | .populate('reviewedBy', 'name') 40 | .sort({date:-1}) 41 | .exec(cb) 42 | } 43 | } 44 | 45 | mongoose.model('LogSuggest', LogSuggestSchema) 46 | -------------------------------------------------------------------------------- /app/models/statlanguage.js: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Module dependencies. 4 | */ 5 | 6 | var mongoose = require('mongoose') 7 | , env = process.env.NODE_ENV || 'development' 8 | , config = require('../../config/config')[env] 9 | , Schema = mongoose.Schema 10 | 11 | 12 | /** 13 | * Statlanguage Schema 14 | */ 15 | 16 | var StatlanguageSchema = new Schema({ 17 | label: {type : String, default : '', trim : true}, 18 | nbOccurrences: {type: Number} 19 | 20 | }) 21 | 22 | 23 | /** 24 | * Statics 25 | */ 26 | 27 | StatlanguageSchema.statics = { 28 | 29 | 30 | mostPopularLangs: function (cb) { 31 | this.find({},{"_id":0}).sort({'nbOccurrences':-1}).exec(cb) 32 | }, 33 | } 34 | 35 | mongoose.model('Statlanguage', StatlanguageSchema) 36 | -------------------------------------------------------------------------------- /app/models/stattag.js: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Module dependencies. 4 | */ 5 | 6 | var mongoose = require('mongoose') 7 | , env = process.env.NODE_ENV || 'development' 8 | , config = require('../../config/config')[env] 9 | , Schema = mongoose.Schema 10 | 11 | 12 | /** 13 | * Article Schema 14 | */ 15 | 16 | var StattagSchema = new Schema({ 17 | label: {type : String, default : '', trim : true}, 18 | nbOccurrences: {type: Number} 19 | 20 | }) 21 | 22 | 23 | /** 24 | * Statics 25 | */ 26 | 27 | StattagSchema.statics = { 28 | 29 | list: function (cb) { 30 | this.find({},{"_id":0}).sort({'label':1}).exec(cb) 31 | }, 32 | mostPopularTags: function (nbItemsRequired, cb) { 33 | this.find({},{"_id":0}).sort({'nbOccurrences':-1}).limit(nbItemsRequired).exec(cb) 34 | } 35 | } 36 | 37 | mongoose.model('Stattag', StattagSchema) 38 | -------------------------------------------------------------------------------- /app/models/statvocabulary.js: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Module dependencies. 4 | */ 5 | 6 | var mongoose = require('mongoose') 7 | , env = process.env.NODE_ENV || 'development' 8 | , config = require('../../config/config')[env] 9 | , Schema = mongoose.Schema 10 | 11 | 12 | /** 13 | * Article Schema 14 | */ 15 | 16 | var StatvocabularySchema = new Schema({ 17 | uri: {type : String, default : '', trim : true}, 18 | nsp: {type : String, default : '', trim : true}, 19 | prefix: {type : String, default : '', trim : true}, 20 | 21 | nbIncomingLinks: {type: Number}, 22 | incomRelMetadata: [{ type : String, ref : 'Statvocabulary'}], 23 | incomRelSpecializes: [{ type : String, ref : 'Statvocabulary'}], 24 | incomRelGeneralizes: [{ type : String, ref : 'Statvocabulary'}], 25 | incomRelExtends: [{ type : String, ref : 'Statvocabulary'}], 26 | incomRelEquivalent: [{ type : String, ref : 'Statvocabulary'}], 27 | incomRelDisjunc: [{ type : String, ref : 'Statvocabulary'}], 28 | incomRelImports: [{ type : String, ref : 'Statvocabulary'}], 29 | 30 | outRelMetadata: [{ type : String, ref : 'Statvocabulary'}], 31 | outRelSpecializes: [{ type : String, ref : 'Statvocabulary'}], 32 | outRelGeneralizes: [{ type : String, ref : 'Statvocabulary'}], 33 | outRelExtends: [{ type : String, ref : 'Statvocabulary'}], 34 | outRelEquivalent: [{ type : String, ref : 'Statvocabulary'}], 35 | outRelDisjunc: [{ type : String, ref : 'Statvocabulary'}], 36 | outRelImports: [{ type : String, ref : 'Statvocabulary'}] 37 | 38 | }) 39 | 40 | 41 | /** 42 | * Statics 43 | */ 44 | 45 | StatvocabularySchema.statics = { 46 | 47 | listPrefixNspUri: function (cb) { 48 | this.find({},{nbIncomingLinks:1,prefix:1, nsp:1, uri:1,_id:0}).sort({'prefix': 1}).exec(cb) 49 | }, 50 | 51 | load: function (vocabUri, cb) { 52 | this.findOne({ uri: vocabUri },{'_id':0}) 53 | .populate('incomRelMetadata', 'prefix nbIncomingLinks') 54 | .populate('incomRelSpecializes', 'prefix nbIncomingLinks') 55 | .populate('incomRelGeneralizes', 'prefix nbIncomingLinks') 56 | .populate('incomRelExtends', 'prefix nbIncomingLinks') 57 | .populate('incomRelEquivalent', 'prefix nbIncomingLinks') 58 | .populate('incomRelDisjunc', 'prefix nbIncomingLinks') 59 | .populate('incomRelImports', 'prefix nbIncomingLinks') 60 | .populate('outRelMetadata', 'prefix nbIncomingLinks') 61 | .populate('outRelSpecializes', 'prefix nbIncomingLinks') 62 | .populate('outRelGeneralizes', 'prefix nbIncomingLinks') 63 | .populate('outRelExtends', 'prefix nbIncomingLinks') 64 | .populate('outRelEquivalent', 'prefix nbIncomingLinks') 65 | .populate('outRelDisjunc', 'prefix nbIncomingLinks') 66 | .populate('outRelImports', 'prefix nbIncomingLinks') 67 | .exec(cb) 68 | }, 69 | 70 | mostLOVIncomingLinks: function (nbItemsRequired, cb) { 71 | this.find({ prefix: { $nin: [ 'rdf','rdfs','owl','xsd' ] } },{'_id':0,'nbIncomingLinks':1, 'prefix':1}).sort({'nbIncomingLinks':-1}).limit(nbItemsRequired).exec(cb) 72 | }, 73 | } 74 | 75 | mongoose.model('Statvocabulary', StatvocabularySchema) 76 | -------------------------------------------------------------------------------- /app/views/404.jade: -------------------------------------------------------------------------------- 1 | extends ./layout/layout 2 | block content 3 | section#post.postPink 4 | article 5 | header.wrpl.w-3-3 6 | h1 7 | span 404 - 8 | | This page does not exist 9 | span - 404 10 | section#post 11 | #error-message-box 12 | #error-stack-trace 13 | pre 14 | code!= error -------------------------------------------------------------------------------- /app/views/500.jade: -------------------------------------------------------------------------------- 1 | extends ./layout/layout 2 | block content 3 | section#post.postPink 4 | article 5 | header.wrpl.w-3-3 6 | h1 7 | span 500 - 8 | | Oops! something went wrong 9 | span - 500 10 | section#post 11 | pre= error -------------------------------------------------------------------------------- /app/views/agents/edit.jade: -------------------------------------------------------------------------------- 1 | extends form 2 | -------------------------------------------------------------------------------- /app/views/agents/new.jade: -------------------------------------------------------------------------------- 1 | extends form 2 | -------------------------------------------------------------------------------- /app/views/articles/edit.jade: -------------------------------------------------------------------------------- 1 | extends form 2 | -------------------------------------------------------------------------------- /app/views/articles/form.jade: -------------------------------------------------------------------------------- 1 | extends ../layouts/default 2 | 3 | 4 | block main 5 | h1= title 6 | hr 7 | 8 | block content 9 | - var action = '/articles' 10 | - action += article.isNew? '' : '/' + article.id 11 | 12 | .row 13 | .span7 14 | form.form-horizontal(method="post", action=action, enctype="multipart/form-data") 15 | 16 | input(type="hidden", name="_csrf", value="#{csrf_token}") 17 | 18 | - if (!article.isNew) 19 | input(type="hidden", name="_method", value="PUT") 20 | 21 | .control-group 22 | label.control-label(for='title') Title 23 | .controls 24 | input#title.input-xlarge(type='text', name="title", value=article.title, placeholder='Enter the title') 25 | 26 | .control-group 27 | label.control-label(for='file') Image 28 | .controls 29 | input#file(type='file', name="image[]") 30 | 31 | .control-group 32 | label.control-label(for='desc') Body 33 | .controls 34 | textarea#desc.input-xlarge(type='text', rows="5", name="body", placeholder='Enter the article description')=article.body 35 | 36 | .control-group 37 | label.control-label(for='tags') Tags 38 | .controls 39 | input#tags(type='text', name="tags", value=article.tags, placeholder='Enter the tags') 40 | 41 | .form-actions 42 | button.btn.btn-primary(type='submit') Save changes 43 |   44 | a.btn(href='/articles', title="cancel") Cancel 45 | 46 | .span5 47 | - if (!article.isNew && article.image && article.image.files && article.image.files.length) 48 | img(src=article.image.cdnUri + "/mini_" + article.image.files[0]) 49 | -------------------------------------------------------------------------------- /app/views/articles/index.jade: -------------------------------------------------------------------------------- 1 | extends ../layouts/default 2 | 3 | block main 4 | h1= title 5 | 6 | block content 7 | - if (articles.length) 8 | - each article in articles 9 | .article 10 | h3 11 | a(href='/articles/'+article._id, title=article.title) #{article.title} 12 | p= article.body 13 | 14 | .meta.muted 15 | span= formatDate(article.createdAt) 16 |   -   17 | - if (article.user) 18 | span Author   19 | 20 | - var name = article.user.name ? article.user.name : article.user.username 21 | 22 | a(href="/users/"+article.user._id)= name 23 |   -   24 | - if (article.tags) 25 | - each tag in article.tags.split(',') 26 |   27 | a.tag(href="/tags/"+tag) 28 | i.icon-tags 29 | | #{tag} 30 | 31 | - if (pages > 1) 32 | .pagination 33 | ul 34 | != createPagination(pages, page) 35 | - else 36 | p.muted No articles.  37 | a(href="/articles/new") create one 38 | -------------------------------------------------------------------------------- /app/views/articles/index.mobile.jade: -------------------------------------------------------------------------------- 1 | extends ../layouts/mobile 2 | 3 | block main 4 | h1= title 5 | 6 | block content 7 | each article in articles 8 | .article 9 | h3 10 | a(href='/articles/'+article._id, title=article.title) #{article.title} 11 | p= article.body 12 | 13 | .meta.muted 14 | span= formatDate(article.createdAt) 15 |   -   16 | span Author   17 | 18 | - var name = article.user.name ? article.user.name : article.user.username 19 | 20 | a(href="/users/"+article.user._id)= name 21 |   -   22 | - if (article.tags) 23 | - each tag in article.tags.split(',') 24 |   25 | a.tag(href="/tags/"+tag) 26 | i.icon-tags 27 | | #{tag} 28 | 29 | if (pages > 1) 30 | .pagination 31 | ul 32 | != createPagination(pages, page) 33 | -------------------------------------------------------------------------------- /app/views/articles/new.jade: -------------------------------------------------------------------------------- 1 | extends form 2 | -------------------------------------------------------------------------------- /app/views/articles/show.jade: -------------------------------------------------------------------------------- 1 | extends ../layouts/default 2 | 3 | block main 4 | h1= article.title 5 | 6 | block content 7 | .row 8 | .span9 9 | p=article.body 10 | .meta.muted 11 | - if (article.user) 12 | - var name = article.user.name ? article.user.name : article.user.username 13 | p Author -  14 | a(href="/users/"+article.user._id)= name 15 | p.muted= formatDate(article.createdAt, "%b %d, %Y at %I:%M %p") 16 | - if (article.tags) 17 | .tags 18 | - each tag in article.tags.split(',') 19 | a.tag(href="/tags/"+tag) 20 | i.icon-tags 21 | | #{tag} 22 |    23 | .span3 24 | - if (!article.isNew && article.image && article.image.files && article.image.files.length) 25 | img(src=article.image.cdnUri + '/mini_' + article.image.files[0]) 26 | 27 | p 28 | br 29 | form.center.form-inline.confirm(action="/articles/"+article.id, method="post") 30 | input(type='hidden', name='_csrf', value="#{csrf_token}") 31 | a.btn(href='/articles/'+article._id+'/edit', title="edit") Edit 32 |    33 | input(type="hidden", name="_method", value="DELETE") 34 | button.btn.btn-danger(type="submit") delete 35 | 36 | p 37 | br 38 | h3 Comments 39 | - each comment in article.comments 40 | include ../comments/comment 41 | include ../comments/form 42 | -------------------------------------------------------------------------------- /app/views/articles/show.mobile.jade: -------------------------------------------------------------------------------- 1 | extends ../layouts/mobile 2 | 3 | 4 | block main 5 | h1= article.title 6 | 7 | block content 8 | .row 9 | .span9 10 | p=article.body 11 | .meta.muted 12 | - var name = article.user.name ? article.user.name : article.user.username 13 | p Author -  14 | a(href="/users/"+article.user._id)= name 15 | p.muted= formatDate(article.createdAt, "%b %d, %Y at %I:%M %p") 16 | - if (article.tags) 17 | .tags 18 | - each tag in article.tags.split(',') 19 | a.tag(href="/tags/"+tag) 20 | i.icon-tags 21 | | #{tag} 22 |    23 | .span3 24 | - if (!article.isNew && article.image && article.image.files && article.image.files.length) 25 | img(src=article.image.cdnUri + '/mini_' + article.image.files[0]) 26 | 27 | p 28 | br 29 | form.center.form-inline.confirm(action="/articles/"+article.id, method="post") 30 | input(type='hidden', name='_csrf', value="#{csrf_token}") 31 | a.btn(href='/articles/'+article._id+'/edit', title="edit") Edit 32 |    33 | input(type="hidden", name="_method", value="DELETE") 34 | button.btn.btn-danger(type="submit") delete 35 | 36 | p 37 | br 38 | h3 Comments 39 | - each comment in article.comments 40 | include ../comments/comment 41 | include ../comments/form 42 | -------------------------------------------------------------------------------- /app/views/comments/comment.jade: -------------------------------------------------------------------------------- 1 | 2 | - if (comment && comment.user) 3 | .comment 4 | - var name = comment.user.name ? comment.user.name : comment.user.username 5 | a(href="/users/"+comment.user._id)= name 6 | | :  7 | = comment.body 8 | br 9 | .muted= formatDate(comment.createdAt) 10 | -------------------------------------------------------------------------------- /app/views/comments/form.jade: -------------------------------------------------------------------------------- 1 | form.form-vertical(method="post", action="/articles/#{article._id}/comments") 2 | input(type='hidden', name='_csrf', value="#{csrf_token}") 3 | .control-group 4 | .controls 5 | textarea#comment.input-xxlarge(type='text', rows="6", name="body", placeholder='Add your comment') 6 | button.btn.btn-primary(type='submit') Add comment 7 | -------------------------------------------------------------------------------- /app/views/endpoint/index.jade: -------------------------------------------------------------------------------- 1 | extends ../layout/layout 2 | block content 3 | section#title.postBlue 4 | h1 LOV SPARQL Endpoint 5 | span / Data Dump 6 | section#posts.default-area 7 | article 8 | .contents.clear.col-2.split.wrplGreen 9 | h2.aboutGroupName(style="padding: .5em;color: #FFFFFF;font-size: 24px;text-shadow: 1px 1px 5px #646464;") SPARQL 10 | ul.aboutGroup 11 | li.aboutTopic 12 | .aboutTopicHeading 13 | h2 Query Examples 14 | .aboutTopicContent 15 | .aboutTopicContentContainer 16 | - var queryIndex=1; 17 | - each queryExample in queryExamples 18 | .aboutDesc Query ##{queryIndex} 19 | a.linkBox(href='/dataset/lov/sparql?query='+encodeURIComponent(queryExample.query)) #{queryExample.title} 20 | - queryIndex=queryIndex+1; 21 | script. 22 | $(".aboutTopicContent").hide() 23 | $( ".aboutTopicHeading" ).click(function() { 24 | $(this).parent().find( ".aboutTopicContent" ).slideToggle( "slow", function() { 25 | // Animation complete. 26 | }); 27 | }); 28 | div#yasqe 29 | div#yasr 30 | script(src='/js/yasr.bundled_1.2.3.min.js') 31 | script(src='/js/yasqe.bundled_2.0.1.min.js') 32 | script. 33 | var yasqe = YASQE(document.getElementById('yasqe'), { 34 | sparql: { 35 | endpoint: 'http://lov.okfn.org/dataset/lov/sparql', 36 | showQueryButton: true 37 | }, 38 | value: 'PREFIX vann:\n\PREFIX voaf:\n\ \n\### Vocabularies contained in LOV and their prefix\n\SELECT DISTINCT ?vocabPrefix ?vocabURI {\n\ \tGRAPH {\n\ \t \t?vocabURI a voaf:Vocabulary.\n\ \t \t?vocabURI vann:preferredNamespacePrefix ?vocabPrefix.\n\}} ORDER BY ?vocabPrefix' 39 | }); 40 | var yasr = YASR(document.getElementById("yasr"), { 41 | //this way, the URLs in the results are prettified using the defined prefixes in the query 42 | getUsedPrefixes: yasqe.getPrefixesFromQuery 43 | }); 44 | 45 | /** 46 | * Set some of the hooks to link YASR and YASQE 47 | */ 48 | yasqe.options.sparql.callbacks.success = function(data, textStatus, xhr) { 49 | yasr.setResponse({response: data, contentType: xhr.getResponseHeader("Content-Type")}); 50 | }; 51 | yasqe.options.sparql.callbacks.error = function(xhr, textStatus, errorThrown) { 52 | var exceptionMsg = textStatus + " (#" + xhr.status + ")"; 53 | if (errorThrown && errorThrown.length) exceptionMsg += ": " + errorThrown; 54 | yasr.setResponse({exception: exceptionMsg}); 55 | }; 56 | aside.wrpl 57 | .h-padding 58 | h2 Data Dump 59 | .line 60 | .asideListFloat 61 | ul.dumps 62 | li 63 | a(href='/lov.n3.gz' target='_blank' style="display: table; ") 64 | img(src='/img/n3_small.gif' style="width:61px; height:38px") 65 | span(style="padding-left:.5em; display: table-cell; vertical-align: middle; ") LOV 66 | li 67 | a(href='/lov.nq.gz' target='_blank' style="display: table; ") 68 | img(src='/img/nq_small.gif' style="width:61px; height:38px") 69 | span(style="padding-left:.5em; display: table-cell; vertical-align: middle; ") LOV + vocabs 70 | .clear 71 | .h-padding 72 | h2 APIs 73 | .line 74 | div 75 | span Consider using 76 | a(href="/dataset/lov/api") 77 | b LOV APIs 78 | span when appropriate 79 | .clear -------------------------------------------------------------------------------- /app/views/includes/foot.jade: -------------------------------------------------------------------------------- 1 | script(src='/js/jquery.min.js') 2 | script(src='/js/bootstrap.min.js') 3 | script(src='/js/bootbox.js') 4 | script(src='/js/jquery.tagsinput.min.js') 5 | script(src='/js/app.js') 6 | script. 7 | var _gaq = _gaq || []; 8 | _gaq.push(['_setAccount', 'UA-25468002-1']); 9 | _gaq.push(['_trackPageview']); 10 | 11 | (function() { 12 | var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; 13 | ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; 14 | var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); 15 | })(); 16 | -------------------------------------------------------------------------------- /app/views/includes/footer.jade: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/app/views/includes/footer.jade -------------------------------------------------------------------------------- /app/views/includes/head.jade: -------------------------------------------------------------------------------- 1 | head(prefix="og: http://ogp.me/ns# nodejsexpressdemo: http://ogp.me/ns/apps/nodejsexpressdemo#") 2 | meta(charset="utf-8") 3 | meta(http-equiv="X-UA-Compatible", content="IE=edge,chrome=1") 4 | 5 | title= pkg.name + ' - ' + title 6 | meta(http-equiv="Content-type", content="text/html;charset=UTF-8") 7 | meta(name="keywords", content=pkg.keywords.join(",")) 8 | meta(name="description", content=pkg.description) 9 | 10 | link(href="/favicon.ico", rel="shortcut icon", type="image/x-icon") 11 | // 12 | Opengraph tags 13 | meta(property="fb:app_id", content="293989217296609") 14 | meta(property="og:title", content=pkg.name + ' - ' + title) 15 | meta(property="og:description", content=pkg.description) 16 | meta(property="og:url", content="http://nodejs-express-demo.herokuapp.com") 17 | meta(property="og:image", content="http://blog.getbootstrap.com/wp-content/themes/bootstrap-blog/img/bootstrap-blog-logo.png") 18 | meta(property="og:site_name", content="Node.js Express Mongoose Demo") 19 | meta(property="fb:admins", content="1037213945") 20 | 21 | // 22 | Application styles 23 | link(rel="stylesheet", href="/css/bootstrap.min.css") 24 | link(rel="stylesheet", href="/css/bootstrap-responsive.min.css") 25 | link(rel="stylesheet", href="/css/jquery.tagsinput.css") 26 | // 27 | link(rel="stylesheet", href="/css/bootstrap-responsive.min.css") 28 | link(rel="stylesheet", href="/css/app.css") 29 | // 30 | 31 | // 32 | Le HTML5 shim, for IE6-8 support of HTML5 elements 33 | //if lt IE 9 34 | script(src="http://html5shim.googlecode.com/svn/trunk/html5.js") 35 | -------------------------------------------------------------------------------- /app/views/includes/header.jade: -------------------------------------------------------------------------------- 1 | header#header 2 | .navbar.navbar-fixed-top(role='navigation') 3 | .navbar-inner 4 | .container 5 | a.brand(href='/') Node.js Express Mongoose Demo 6 | .nav-collapse.collapse 7 | ul.nav 8 | li(class=isActive('/articles/new') ? 'active' : '') 9 | a(href="/articles/new", title="new article") New 10 | ul.nav.pull-right 11 | li 12 | iframe(style="border: 0; margin: 10px 0 0 0; padding: 0;", src="https://www.gittip.com/madhums/widget.html", width="48pt", height="22pt") 13 | 14 | if (req.isAuthenticated()) 15 | li 16 | a(href="/agents/"+req.user.id, title="Profile") Profile 17 | li 18 | a(href="/logout", title="logout") Logout 19 | else 20 | li 21 | a(href="/login", title="Login") Login 22 | 23 | a(href="https://github.com/madhums/nodejs-express-mongoose-demo") 24 | img(style="position: fixed; top: 0; right: 0; border: 0; z-index: 9999", 25 | src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png", 26 | alt="Fork me on GitHub") 27 | -------------------------------------------------------------------------------- /app/views/includes/messages.jade: -------------------------------------------------------------------------------- 1 | - if (typeof info != 'undefined' && info.length) 2 | .fade.in.alert.alert-block.alert-info 3 | button.close(type='button', data-dismiss='alert') × 4 | ul 5 | - each inf in info 6 | li!= inf 7 | 8 | - if (typeof errors != 'undefined' && JSON.stringify(errors).length>2) 9 | .fade.in.alert.alert-block.alert-error 10 | - each error in errors 11 | div!= error 12 | 13 | - if (typeof success != 'undefined' && success.length) 14 | .fade.in.alert.alert-block.alert-success 15 | button.close(type='button', data-dismiss='alert') × 16 | ul 17 | - each succ in success 18 | li!= succ 19 | 20 | - if (typeof warning != 'undefined' && warning.length) 21 | .fade.in.alert.alert-block.alert-warning 22 | button.close(type='button', data-dismiss='alert') × 23 | ul 24 | - each warn in warning 25 | li!= warn 26 | -------------------------------------------------------------------------------- /app/views/languages/show.jade: -------------------------------------------------------------------------------- 1 | extends ../layout/layout 2 | block content 3 | section#post.postBlue 4 | article 5 | header.wrpl.w-3-3 6 | h1 7 | a(href='#{lang.iso639P3PCode}') 8 | | #{lang.label} 9 | span (#{lang.iso639P3PCode}) 10 | section#posts.default-area 11 | article 12 | #greenContainer.contents.clear.col-2.split.wrplGreen 13 | h2.metadata Metadata 14 | .metadataFrame 15 | .metadataContainerLang 16 | table.metadata-table.noheader.flat-table-3(style="width:100%") 17 | tbody 18 | tr 19 | td URI 20 | td 21 | a(href='#{lang.uri}', target='_blank') #{lang.uri} 22 | tr 23 | td iso639P1Code 24 | td #{lang.iso639P1Code} 25 | tr 26 | td iso639P3PCode 27 | td #{lang.iso639P3PCode} 28 | aside.wrpl 29 | .h-padding 30 | h2 Use 31 | .line 32 | .asideListFloat 33 | span Used in 34 | b 35 | a(href='/dataset/lov/vocabs?lang=#{lang.label}') #{nbOccurrences} vocabularies 36 | h2 Statistics 37 | .line 38 | .asideListFloat 39 | svg#chartElements(style='height:200px;') 40 | .clear 41 | script. 42 | nv.addGraph(function() { 43 | var chart = nv.models.multiBarHorizontalChart() 44 | .x(function(d) { return d.label }) 45 | .y(function(d) { return d.value }) 46 | .margin({top: 0, right: -25, bottom: 0}) 47 | .valueFormat(d3.format('')) 48 | .barColor(d3.scale.category10().range()) 49 | .showLegend(false) 50 | .showValues(true) //Show bar value next to each bar. 51 | .tooltips(false) //Show tooltips on hover. 52 | .showControls(false); //Allow user to switch between "Grouped" and "Stacked" mode. 53 | 54 | d3.select('#chartElements') 55 | .datum(!{JSON.stringify(vocabElementsData)}) 56 | .transition().duration(200) 57 | .call(chart); 58 | 59 | nv.utils.windowResize(chart.update); 60 | return chart; 61 | }); -------------------------------------------------------------------------------- /app/views/layout/footer.jade: -------------------------------------------------------------------------------- 1 | footer#footer 2 | .wrpl 3 | a(href='/dataset/lov') 4 | dl 5 | dt 6 | img(src='/img/LOV_white_small.png') 7 | dd 8 | strong Linked Open Vocabularies 9 | .wrpl 10 | br 11 | .bookmarks 12 | b Documentation 13 | ul 14 | li 15 | a(href='/dataset/lov/about', title='About LOV') About 16 | li 17 | a(href='/dataset/lov/api', title='API documentation') API documentation 18 | li 19 | a(href='https://github.com/pyvandenbussche/lov', title='Source in GitHub', target='_blank') Source code 20 | li 21 | a(href='mailto:py.vandenbussche@gmail.com;bvatant@gmail.com', title='Contact LOV team') Contact 22 | .bookmarks 23 | b Publication 24 | ul 25 | li 26 | a(href='http://www.semantic-web-journal.net/content/linked-open-vocabularies-lov-gateway-reusable-semantic-vocabularies-web-1', title='Linked Open Vocabularies', target='_blank') Semantic Web Journal '16 27 | li 28 | a(href='http://ercim-news.ercim.eu/en96/special/linked-open-vocabularies', title='Linked Open Vocabularies', target='_blank') ERCIM News '14 29 | li 30 | a(href='http://bit.ly/1sGxzXZ', title='Requirements for vocabulary preservation and governance', target='_blank') Library Hi Tech '13 31 | .wrpl 32 | a#mt(href='http://okfn.org/', target='_blank') 33 | div.logo 34 | div.logoText 35 | | Hosted by the Open Knowledge Foundation 36 | div(style="float:right") 37 | a(rel="license" href="http://creativecommons.org/licenses/by/4.0/" target="_blank") 38 | img(alt="Creative Commons License" style="border-width:0; margin:1.2em;" src="https://i.creativecommons.org/l/by/4.0/88x31.png") 39 | 40 | script. 41 | (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ 42 | (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), 43 | m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) 44 | })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); 45 | ga('create', 'UA-32519453-1', 'okfn.org'); 46 | ga('send', 'pageview'); -------------------------------------------------------------------------------- /app/views/layout/head.jade: -------------------------------------------------------------------------------- 1 | head 2 | meta(http-equiv='Content-Type', content='text/html; charset=UTF-8') 3 | meta(charset='utf-8') 4 | meta(http-equiv='X-UA-Compatible', content='IE=edge,chrome=1') 5 | meta(http-equiv='Content-Language', content='en-US') 6 | meta(property='og:title' content='Linked Open Vocabularies (LOV)') 7 | meta(property='og:image' content='/img/LOV.png') 8 | meta(property='og:description' content='Your entry point to high quality and reusable Vocabularies to describe Linked Data.') 9 | meta(name='title' content='Linked Open Vocabularies (LOV)') 10 | meta(name='description' content='Your entry point to high quality and reusable Vocabularies to describe Linked Data.') 11 | 12 | title Linked Open Vocabularies 13 | link(rel='icon', href='/img/favicon.ico') 14 | link(rel='stylesheet', type='text/css', media='all', href='/css/style.css') 15 | //link(rel='stylesheet', type='text/css', media='all', href='/css/parts/table.css') 16 | link(rel='stylesheet', type='text/css', media='all', href='/css/parts/search.css') 17 | link(rel='stylesheet', type='text/css', media='all', href='/css/parts/agent.css') 18 | link(rel='stylesheet', type='text/css', media='all', href='/css/parts/header.css') 19 | link(rel='stylesheet', type='text/css', media='all', href='/css/parts/boutton.css') 20 | link(rel='stylesheet', type='text/css', media='all', href='/css/parts/form.css') 21 | link(rel='stylesheet', type='text/css', media='all', href='/css/parts/flatTable.css') 22 | link(rel='stylesheet', type='text/css', media='all', href='/css/parts/ribbon.css') 23 | link(rel='stylesheet', type='text/css', media='all', href='/css/parts/aside.css') 24 | link(rel='stylesheet', type='text/css', media='all', href='/css/parts/graph.css') 25 | link(rel='stylesheet', type='text/css', media='all', href='/css/parts/api.css') 26 | link(rel='stylesheet', type='text/css', media='all', href='/css/parts/suggest.css') 27 | link(rel='stylesheet', type='text/css', media='all', href='/css/parts/about.css') 28 | link(rel='stylesheet', type='text/css', media='all', href='/css/parts/edition.css') 29 | 30 | link(rel='stylesheet', type='text/css', media='screen', href='/css/style_ext.css') 31 | //link(rel='stylesheet', type='text/css', media='all', href='/css/grid.css') 32 | link(href='/css/nv.d3.css', rel='stylesheet', type='text/css') 33 | link(href='/css/jquery/jquery.ui.all.css', rel='stylesheet', type='text/css') 34 | 35 | // Application styles 36 | //link(rel="stylesheet", href="/css/bootstrap.min.css") 37 | //link(rel="stylesheet", href="/css/bootstrap-responsive.min.css") 38 | //link(rel="stylesheet", href="/css/jquery.tagsinput.css") 39 | // 40 | //link(rel="stylesheet", href="/css/bootstrap-responsive.min.css") 41 | //link(rel="stylesheet", href="/css/app.css") 42 | 43 | //script(src='/js/vis.min.js') 44 | //link(href='/css/vis.min.css', rel='stylesheet', type='text/css') 45 | 46 | script(src='/js/d3.v3.min.js') 47 | script(src='/js/nv.d3.js') 48 | script(src='http://api.simile-widgets.org/timeline/2.3.1/timeline-api.js?bundle=true') 49 | script(src='/js/dagre-d3.min.js') 50 | script(src='/js/dagre.min.js') 51 | //script(src='/js/utils.js') 52 | script(src='/js/jquery-1.10.2.min.js') 53 | script(src='/js/jquery-ui-1.11.2/jquery-ui.min.js') 54 | 55 | //script(src='/js/jquery.fittext.js') 56 | script(src='/js/jquery.easing.min.js') 57 | script(src='/js/validate.min.js') 58 | 59 | //script(src="/js/multiselect/jquery-gentleSelect.js") 60 | //link(rel='stylesheet', type='text/css', media='all', href='/js/multiselect/jquery-gentleSelect.css') 61 | 62 | link(rel='stylesheet', type='text/css', media='all', href='/css/yasqe_2.0.1.min.css') 63 | link(rel='stylesheet', type='text/css', media='all', href='/css/yasr_1.2.3.min.css') 64 | 65 | script(src='/js/form2js/form2js.js') 66 | script(src='/js/form2js/jquery.toObject.js') 67 | script(src='/js/form2js/js2form.js') 68 | 69 | script(src='/js/tooltip/jquery.toolbar.js') 70 | 71 | //script(src='/js/tooltip/script.js') 72 | //link(href='/js/tooltip/style.css', rel='stylesheet', type='text/css') 73 | -------------------------------------------------------------------------------- /app/views/layout/header.jade: -------------------------------------------------------------------------------- 1 | header 2 | a#logo(title='Linked Open Vocabularies', href='/dataset/lov') 3 | img(itemprop="image" alt='Linked Open Vocabularies', src='/img/icon-LOV.png' height='86' width='86') 4 | nav 5 | ul 6 | li.wrpl 7 | a(title='', href='/dataset/lov/vocabs') 8 | | Vocabs 9 | li.wrpl 10 | a(title='', href='/dataset/lov/terms') 11 | | Terms 12 | li.wrpl 13 | a(title='', href='/dataset/lov/agents') 14 | | Agents 15 | li.wrpl 16 | a(title='', href='/dataset/lov/sparql') 17 | | SPARQL/Dump 18 | if (req.isAuthenticated() && req.user.category === "admin") 19 | li.wrpl 20 | a(title='', href='/edition/lov/users') 21 | | Users 22 | if (req.isAuthenticated()) 23 | ul.editionAuth(style='position:absolute; top:0; right:0;') 24 | li 25 | a(href="/edition/lov/", title="Edition") Edition 26 | li 27 | a(href="/edition/lov/users/"+req.user.id, title="Profile") Profile 28 | li 29 | a(href="/edition/lov/logout", title="logout") Logout -------------------------------------------------------------------------------- /app/views/layout/layout.jade: -------------------------------------------------------------------------------- 1 | doctype html 2 | html(lang='en') 3 | include head 4 | body.home 5 | .container 6 | include header 7 | include ../includes/messages 8 | block content 9 | include footer -------------------------------------------------------------------------------- /app/views/layouts/default.jade: -------------------------------------------------------------------------------- 1 | doctype html 2 | html(lang='en', xmlns='http://www.w3.org/1999/xhtml', xmlns:fb='https://www.facebook.com/2008/fbml', itemscope='itemscope', itemtype='http://schema.org/Product') 3 | include ../includes/head 4 | body 5 | .wrapper 6 | include ../includes/header 7 | .container 8 | .main-content 9 | .main-head 10 | block main 11 | include ../includes/messages 12 | block content 13 | .push 14 | include ../includes/footer 15 | include ../includes/foot 16 | -------------------------------------------------------------------------------- /app/views/layouts/mobile.jade: -------------------------------------------------------------------------------- 1 | !!! 5 2 | html(lang='en', xmlns='http://www.w3.org/1999/xhtml', xmlns:fb='https://www.facebook.com/2008/fbml', itemscope='itemscope', itemtype='http://schema.org/Product') 3 | include ../includes/head 4 | meta(name='viewport', content='width=device-width,initial-scale=1') 5 | link(rel="stylesheet", href="/css/bootstrap-responsive.min.css") 6 | body 7 | .wrapper 8 | include ../includes/header 9 | .alert 10 | | You are checking this out from your mobile device! 11 | .container 12 | .main-content 13 | .main-head 14 | block main 15 | block content 16 | .push 17 | include ../includes/footer 18 | include ../includes/foot 19 | -------------------------------------------------------------------------------- /app/views/qa/index.jade: -------------------------------------------------------------------------------- 1 | extends ../layout/layout 2 | block content 3 | section#post.postBlue.postSearch 4 | h1 LOV Question Answering 5 | span / Prototype 6 | 7 | section#posts.default-area 8 | article 9 | .contents.clear.col-2.split.wrplGreen 10 | form#searchForm(action='' method='get', style='margin-bottom:1em; margin-top:1em') 11 | div.searchWrapper 12 | button(type='submit', value=' ') ASK Me 13 | input(name='q', type='text', value='#{(question)?question:""}', placeholder='e.g. What is foaf?' autocomplete='off') 14 | - if(question) 15 | table 16 | tr 17 | td(style='width:25%') 18 | img(src='/img/robot.png', valign="top") 19 | td(style='width:75%') 20 | div.QAanswer 21 | span !{stdout} 22 | span !{stderr} 23 | aside.wrpl 24 | .h-padding 25 | h2 Examples 26 | .line 27 | .asideListFloat 28 | ul.dumps 29 | li.aboutTopic 30 | - var queryIndex=1; 31 | - each queryExample in QAExamples 32 | .aboutDesc 33 | a.linkBox(href='/dataset/lov/qa?q='+encodeURIComponent(queryExample.query)) #{queryExample.title} 34 | - queryIndex=queryIndex+1; -------------------------------------------------------------------------------- /app/views/searchMulti/index.jade: -------------------------------------------------------------------------------- 1 | extends ../layout/layout 2 | block content 3 | section#post.postBlue.postSearch 4 | form#searchForm(action='' method='get') 5 | div.searchWrapper 6 | button(type='submit', value=' ') Search 7 | input(name='q', type='text', autocomplete='off') 8 | 9 | section#posts.default-area.postSearchResults 10 | - if(results) 11 | #greenContainer.wrplGreen(style="width:100%") 12 | ul#SearchGrid 13 | script(src='/js/graph.js') 14 | li 15 | .SearchContainer 16 | div.SearchInnerBox 17 | span #{utils.msToTime(results.responseTime)} ms 18 | each result, i in results.recommendations 19 | li(class="SearchBoxclass") 20 | .SearchContainer 21 | div.SearchInnerBox 22 | span.score !{result.score.toFixed(3)} 23 | span.prefixedName Recommendation #{'#'+(i+1)} 24 | div.occurrences 25 | | Nb of clusters: #{result.nb_cluster} 26 | p Nb of vocabularies: #{result.nb_vocabularies} 27 | div.hr 28 | div.SearchBody 29 | svg(id='svg#{i}', width="100%", style='padding-top:1em;', margin:0 auto;) 30 | div(id='test#{i}') 31 | script(type='text/javascript') generateGraph('svg#{i}',!{JSON.stringify(result)}); -------------------------------------------------------------------------------- /app/views/users/auth.jade: -------------------------------------------------------------------------------- 1 | extends ../layouts/default 2 | 3 | block main 4 | h1= title 5 | 6 | block content 7 | .offset0 8 | a(href="/auth/facebook") 9 | img(src="/img/facebook.png") 10 | a(href="/auth/github") 11 | img(src="/img/github.png") 12 | a(href="/auth/twitter") 13 | img(src="/img/twitter.png") 14 | a(href="/auth/google") 15 | img(src="/img/google.png") 16 | a(href="/auth/linkedin") 17 | img(src="/img/linkedin.png") 18 | 19 | center 20 | br 21 | h2 OR 22 | br 23 | 24 | .login 25 | block auth 26 | -------------------------------------------------------------------------------- /app/views/users/edit.jade: -------------------------------------------------------------------------------- 1 | extends form -------------------------------------------------------------------------------- /app/views/users/form.jade: -------------------------------------------------------------------------------- 1 | extends ../layout/layout 2 | block content 3 | - var action = '/edition/lov/users' 4 | - action += user.isNew? '' : '/' + user.id 5 | - var title = user.isNew? 'Sign up' : 'Edit your profile' 6 | section#post.postBlue 7 | article 8 | header.wrpl.w-3-3 9 | h1 #{user.agent.name} 10 | section#posts.default-area 11 | article 12 | #greenContainer.contents.clear.col-2.split.wrplGreen 13 | form(method="post" action=action name="TheForm") 14 | input(type='hidden', name='_csrf', value="#{csrf_token}") 15 | - if (!user.isNew) 16 | input(type="hidden", name="_method", value="PUT") 17 | .metadataFrame 18 | #formErrors 19 | div(class='metadataContainerPerson') 20 | table.editionTable 21 | tbody 22 | tr 23 | td Email 24 | td 25 | input#email(type='email', name="email", placeholder='Email', value=user.email) 26 | tr 27 | td Password 28 | td 29 | input(type='password', name="password", placeholder='Password') 30 | input(type='password', name="password_confirm", placeholder='Confirm Password') 31 | .editionActionBar 32 | input.editionSaveButtonRight(type='submit' name='submit' value='Save') 33 | a.editionCancelButtonRight(href="/dataset/lov/users", title="cancel") Cancel 34 | .clear 35 | script. 36 | //form validation before submit 37 | new FormValidator('TheForm', [{ 38 | name: 'email', 39 | rules: 'required|valid_email' 40 | }, { 41 | name: 'password', 42 | rules: 'min_length[8]' 43 | }, { 44 | name: 'password_confirm', 45 | display: 'password confirmation', 46 | rules: 'matches[password]' 47 | }], function(errors, event) { 48 | if (errors.length > 0) { 49 | var errorString = ''; 50 | for (var i = 0, errorLength = errors.length; i < errorLength; i++) { 51 | errorString += errors[i].message + '
'; 52 | } 53 | document.getElementById('formErrors').style.display = 'block'; 54 | document.getElementById('formErrors').innerHTML = errorString; 55 | event.returnValue=false; 56 | } 57 | }); -------------------------------------------------------------------------------- /app/views/users/index.jade: -------------------------------------------------------------------------------- 1 | extends ../layout/layout 2 | block content 3 | section#post.postBlue 4 | article 5 | header.wrpl.w-3-3 6 | h1 Users 7 | 8 | section#posts.default-area.postSearchResults 9 | - if (typeof(users) !== 'undefined' && users.length>0) 10 | #greenContainer.contents.clear.col-2.split.wrplGreen 11 | .count-items 12 | span.count #{users.length} 13 | .clear 14 | .items 15 | | #{users.length==1 ? 'user' : 'users'} 16 | ul#SearchGrid 17 | each user, i in users 18 | li(class="SearchBoxperson") 19 | .SearchContainer 20 | div.SearchInnerBox 21 | div.actionBar 22 | form(action='/edition/lov/users/#{user._id}' method='post' name='formEdit') 23 | input(type='hidden', name='_csrf', value="#{csrf_token}") 24 | input(type="hidden", name="_method", value="GET") 25 | img.changeUser.actionBarAction(src="/img/edit_small.png" onclick="submit();") 26 | form(action='/edition/lov/users/#{user._id}' method='post' name='formDelete') 27 | input(type='hidden', name='_csrf', value="#{csrf_token}") 28 | input(type="hidden", name="_method", value="DELETE") 29 | img.removeUser.actionBarAction(src="/img/remove.png") 30 | a.prefix(href='/dataset/lov/agents/#{user.agent.name}') !{user.agent.name} 31 | div.uri 32 | a(href="mailto:#{user.email}") !{user.email} 33 | div.hr 34 | div.SearchBody 35 | div(style="float:left") 36 | - if(user.category === "curator") 37 | .statusButton curator 38 | - else 39 | form.statusActionButton(action="/edition/lov/userChangeCategory", method="post") 40 | input.csrf(type='hidden', name='_csrf', value="#{csrf_token}") 41 | input(type='hidden', name='userId', value="#{user._id}") 42 | input(type='hidden', name='category', value="curator") 43 | input.statusSubmit(type='submit' name='submit' value='curator') 44 | - if(user.category === "admin") 45 | .statusButton admin 46 | - else 47 | form.statusActionButton(action="/edition/lov/userChangeCategory", method="post") 48 | input.csrf(type='hidden', name='_csrf', value="#{csrf_token}") 49 | input(type='hidden', name='userId', value="#{user._id}") 50 | input(type='hidden', name='category', value="admin") 51 | input.statusSubmit(type='submit' name='submit' value='admin') 52 | .clear 53 | #dialog(style='display:none;') Are you sure you want to delete this user? 54 | script. 55 | $(document).ready(function () { 56 | // delete a user 57 | $('.removeUser').click(function(){ 58 | var currentForm = $(this).parents('form:first'); 59 | $('#dialog').dialog({ 60 | resizable: false, 61 | height:200, 62 | modal: true, 63 | buttons: { 64 | 'Confirm Deletion': function() { 65 | currentForm.submit(); 66 | }, 67 | Cancel: function() { 68 | currentForm=null; 69 | $(this).dialog('close'); 70 | } 71 | } 72 | }); 73 | }); 74 | }); -------------------------------------------------------------------------------- /app/views/users/login.jade: -------------------------------------------------------------------------------- 1 | extends ../layout/layout 2 | block content 3 | section#post.postPink 4 | article 5 | h1 Log in 6 | .clear 7 | 8 | form(action="/edition/lov/session", method="post" name="TheForm")#fieldSets 9 | fieldset 10 | #formErrors 11 | input(type='hidden', name='_csrf', value="#{csrf_token}") 12 | input(type='email', name="email", placeholder='Email') 13 | input(type='password', name="password", placeholder='Password') 14 | input.loginButtonRight(type='submit' name='submit' value='LOV\' In it!') 15 | script. 16 | //form validation before submit 17 | new FormValidator('TheForm', [{ 18 | name: 'email', 19 | rules: 'required|valid_email' 20 | }], function(errors, event) { 21 | if (errors.length > 0) { 22 | var errorString = ''; 23 | for (var i = 0, errorLength = errors.length; i < errorLength; i++) { 24 | errorString += errors[i].message + '
'; 25 | } 26 | document.getElementById('formErrors').style.display = 'block'; 27 | document.getElementById('formErrors').innerHTML = errorString; 28 | event.returnValue=false; 29 | } 30 | }); -------------------------------------------------------------------------------- /app/views/users/new.jade: -------------------------------------------------------------------------------- 1 | extends form -------------------------------------------------------------------------------- /app/views/users/show.jade: -------------------------------------------------------------------------------- 1 | extends ../layout/layout 2 | block content 3 | section#post.postBlue 4 | article 5 | header.wrpl.w-3-3 6 | h1 #{user.name} 7 | section#posts.default-area 8 | article 9 | p 10 | br 11 | form.center.form-inline.confirm(action="/users/"+user.id, method="post") 12 | input(type='hidden', name='_csrf', value="#{csrf_token}") 13 | a.btn(href='/users/'+user._id+'/edit', title="edit") Edit 14 | |    15 | input(type="hidden", name="_method", value="DELETE") 16 | button.btn.btn-danger(type="submit") delete 17 | #greenContainer.contents.clear.col-2.split.wrplGreen 18 | div email: #{user.email} 19 | div API key: #{user.apiKey} 20 | div Callback function: #{user.callBackFn} 21 | div agent: #{user.agent} -------------------------------------------------------------------------------- /app/views/usersBak/auth.jade: -------------------------------------------------------------------------------- 1 | extends ../layouts/default 2 | 3 | block main 4 | h1= title 5 | 6 | block content 7 | .offset0 8 | a(href="/auth/facebook") 9 | img(src="/img/facebook.png") 10 | a(href="/auth/github") 11 | img(src="/img/github.png") 12 | a(href="/auth/twitter") 13 | img(src="/img/twitter.png") 14 | a(href="/auth/google") 15 | img(src="/img/google.png") 16 | a(href="/auth/linkedin") 17 | img(src="/img/linkedin.png") 18 | 19 | center 20 | br 21 | h2 OR 22 | br 23 | 24 | .login 25 | block auth 26 | -------------------------------------------------------------------------------- /app/views/usersBak/login.jade: -------------------------------------------------------------------------------- 1 | extends auth 2 | 3 | block auth 4 | form.offset1.login.form-horizontal(action="/users/session", method="post") 5 | input(type='hidden', name='_csrf', value="#{csrf_token}") 6 | 7 | p.offset2.error= message 8 | 9 | .control-group 10 | label.control-label(for='email') Email 11 | .controls 12 | input.input-medium#email(type='email', name="email", placeholder='Email') 13 | 14 | .control-group 15 | label.control-label(for='password') Password 16 | .controls 17 | input.input-medium#password(type='password', name="password", placeholder='Password') 18 | 19 | .form-actions 20 | button.btn.btn-primary(type='submit') Login 21 |   22 | | or  23 | a.show-signup(href="/signup") sign up 24 | -------------------------------------------------------------------------------- /app/views/usersBak/show.jade: -------------------------------------------------------------------------------- 1 | extends ../layouts/default 2 | 3 | block main 4 | - var name = user.name ? user.name : user.username 5 | h1= name 6 | -------------------------------------------------------------------------------- /app/views/usersBak/signup.jade: -------------------------------------------------------------------------------- 1 | extends auth 2 | 3 | block auth 4 | form.offset1.form-horizontal(action="/users", method="post") 5 | input(type='hidden', name='_csrf', value="#{csrf_token}") 6 | .control-group 7 | label.control-label(for='name') Full name 8 | .controls 9 | input#name(type='text', name="name", placeholder='Full name', value=user.name) 10 | 11 | .control-group 12 | label.control-label(for='email') Email 13 | .controls 14 | input#email(type='text', name="email", placeholder='Email', value=user.email) 15 | 16 | .control-group 17 | label.control-label(for='username') Username 18 | .controls 19 | input#username(type='text', name="username", placeholder='Username', value=user.username) 20 | 21 | .control-group 22 | label.control-label(for='password') Password 23 | .controls 24 | input#password(type='password', name="password", placeholder='Password') 25 | 26 | .form-actions 27 | button.btn.btn-primary(type='submit') Sign up 28 |   29 | | or  30 | a.show-login(href="/login") login 31 | -------------------------------------------------------------------------------- /app/views/vocabVersions/edit.jade: -------------------------------------------------------------------------------- 1 | extends form 2 | -------------------------------------------------------------------------------- /app/views/vocabularies/edit.jade: -------------------------------------------------------------------------------- 1 | extends form 2 | -------------------------------------------------------------------------------- /app/views/vocabularies/list.jade: -------------------------------------------------------------------------------- 1 | extends ../layout/layout 2 | block content 3 | section#post.postBlue 4 | article 5 | header.wrpl.w-3-3 6 | h1 #{count} Vocabularies 7 | section#posts.default-area 8 | article 9 | #greenContainer.contents.clear.col-2.split.wrplGreen 10 | h2 Persons (#{persons.length}) 11 | table(style="height: 100px;") 12 | thead 13 | tr 14 | th Name 15 | th URI 16 | th Alt URIs 17 | th Role in 18 | tbody(style="overflow-y: scroll; overflow-x: hidden; height: 100px;") 19 | for agent in persons 20 | tr 21 | td #{agent.name} 22 | td #{agent.prefUri} 23 | td 24 | if agent.altUris.length>0 25 | - var html = ""; 26 | - var split = agent.altUris.split(','); 27 | - for (var i in split){ 28 | - if(html.length>0)html+="
"; 29 | - html+=split[i]; 30 | - } 31 | span(onmouseover='tooltip.show(\'#{html}\')', onmouseout='tooltip.hide();') #{agent.altUris.split(',').length} 32 | else 33 | | 0 34 | aside.wrpl 35 | .h-padding 36 | h2 Agent Type 37 | .line 38 | div.asideEnum 39 | 40 | #greenContainer.contents.clear.col-2.split.wrplGreen 41 | h2 Organizations (#{organizations.length}) 42 | table(style="height: 100px;") 43 | thead 44 | tr 45 | th Name 46 | th URI 47 | th Alt URIs 48 | th Role in 49 | tbody(style="overflow-y: scroll; overflow-x: hidden; height: 100px;") 50 | for agent in organizations 51 | tr 52 | td #{agent.name} 53 | td #{agent.prefUri} 54 | td 55 | if agent.altUris.length>0 56 | - var html = ""; 57 | - var split = agent.altUris.split(','); 58 | - for (var i in split){ 59 | - if(html.length>0)html+="
"; 60 | - html+=split[i]; 61 | - } 62 | span(onmouseover='tooltip.show(\'#{html}\')', onmouseout='tooltip.hide();') #{agent.altUris.split(',').length} 63 | else 64 | | 0 -------------------------------------------------------------------------------- /app/views/vocabularies/new.jade: -------------------------------------------------------------------------------- 1 | extends form 2 | -------------------------------------------------------------------------------- /config/config.example.js: -------------------------------------------------------------------------------- 1 | 2 | var path = require('path') 3 | , rootPath = path.normalize(__dirname + '/..') 4 | , templatePath = path.normalize(__dirname + '/../app/mailer/templates') 5 | , notifier = { 6 | service: 'postmark', 7 | APN: false, 8 | email: false, // true 9 | actions: ['comment'], 10 | tplPath: templatePath, 11 | key: 'POSTMARK_KEY', 12 | parseAppId: 'PARSE_APP_ID', 13 | parseApiKey: 'PARSE_MASTER_KEY' 14 | } 15 | 16 | module.exports = { 17 | development: { 18 | db: 'mongodb://localhost/lov', 19 | es: {host: 'localhost',port: 9200}, 20 | email: { 21 | service: 'Gmail', 22 | auth: { 23 | user: 'user@gmail.com', 24 | pass: 'pwd' 25 | } 26 | } 27 | }, 28 | test: { 29 | db: 'mongodb://localhost/lov', 30 | es: {host: 'localhost',port: 9200}, 31 | email: { 32 | service: 'Gmail', 33 | auth: { 34 | user: 'user@gmail.com', 35 | pass: 'pwd' 36 | } 37 | } 38 | }, 39 | production: {} 40 | } 41 | -------------------------------------------------------------------------------- /config/middlewares/authorization.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Shall I switch to https://github.com/ForbesLindesay/connect-roles ? 3 | */ 4 | 5 | /* 6 | * Generic require login routing middleware 7 | */ 8 | 9 | exports.requiresLogin = function (req, res, next) { 10 | if (!req.isAuthenticated()) { 11 | req.session.returnTo = req.originalUrl 12 | return res.redirect('edition/lov/login') 13 | } 14 | next() 15 | } 16 | 17 | exports.requiresAdmin = function (req, res, next) { 18 | if (req.isAuthenticated() && req.user.category === "admin") { 19 | next() 20 | } 21 | else{ 22 | req.session.returnTo = req.originalUrl 23 | return res.redirect('edition/lov/login') 24 | } 25 | } 26 | exports.requiresAdminOrUser = function (req, res, next) { 27 | if (req.isAuthenticated() && (req.user.category === "admin" || ''+req.userObj._id === ''+req.user.id)) { 28 | next() 29 | } 30 | else{ 31 | req.session.returnTo = req.originalUrl 32 | return res.redirect('edition/lov/login') 33 | } 34 | } 35 | 36 | 37 | 38 | /* 39 | * User authorization routing middleware 40 | */ 41 | 42 | exports.user = { 43 | hasAuthorization : function (req, res, next) { 44 | if (req.profile.id != req.user.id) { 45 | req.flash('info', 'You are not authorized') 46 | return res.redirect('/users/'+req.profile.id) 47 | } 48 | next() 49 | } 50 | } 51 | 52 | /* 53 | * Article authorization routing middleware 54 | */ 55 | 56 | exports.article = { 57 | hasAuthorization : function (req, res, next) { 58 | if (req.article.user.id != req.user.id) { 59 | req.flash('info', 'You are not authorized') 60 | return res.redirect('/articles/'+req.article.id) 61 | } 62 | next() 63 | } 64 | } 65 | 66 | exports.agent = { 67 | hasAuthorization : function (req, res, next) { 68 | if (req.agent.id == req.user.id || req.user.category == "admin") { // need to change this for security issues 69 | next() 70 | } 71 | else{ 72 | req.flash('info', 'You are not authorized') 73 | return res.redirect('/agents/'+req.agent.id) 74 | } 75 | } 76 | } 77 | -------------------------------------------------------------------------------- /config/passport.js: -------------------------------------------------------------------------------- 1 | var mongoose = require('mongoose') 2 | , LocalStrategy = require('passport-local').Strategy 3 | , User = mongoose.model('User') 4 | 5 | 6 | module.exports = function (passport, config) { 7 | // require('./initializer') 8 | 9 | // serialize sessions 10 | passport.serializeUser(function(user, done) { 11 | done(null, user.id) 12 | }) 13 | 14 | passport.deserializeUser(function(id, done) { 15 | User.findOne({ _id: id }, function (err, user) { 16 | done(err, user) 17 | }) 18 | }) 19 | 20 | passport.use(new LocalStrategy({ 21 | usernameField: 'email', 22 | passwordField: 'password', 23 | passReqToCallback : true 24 | }, 25 | function(req, email, password, done) { 26 | User.findOne({ email: email }, function (err, user) { 27 | if (err) { return done(err) } 28 | if (!user) { 29 | return done(null, false, { message: 'Invalid email or password.' }) 30 | } 31 | if (!user.authenticate(password)) { 32 | return done(null, false, { message: 'Invalid email or password.' }) 33 | } 34 | if (!user.activated === true) { 35 | return done(null, false, { message: 'Your user account has not been activated yet.' }) 36 | } 37 | return done(null, user) 38 | }) 39 | } 40 | )) 41 | 42 | // use local strategy 43 | /*passport.use(new LocalStrategy({ 44 | usernameField: 'email', 45 | passwordField: 'password' 46 | }, 47 | function(email, password, done) { 48 | User.findOne({ email: email }, function (err, user) { 49 | if (err) { return done(err) } 50 | if (!user) { 51 | return done(null, false, { message: 'Unknown user' }) 52 | } 53 | if (!user.authenticate(password)) { 54 | return done(null, false, { message: 'Invalid password' }) 55 | } 56 | if (!user.activated === true) { 57 | return done(null, false, { message: 'Your user account has not been activated yet' }) 58 | } 59 | return done(null, user) 60 | }) 61 | } 62 | ))*/ 63 | } 64 | -------------------------------------------------------------------------------- /lib/queryExamples.js: -------------------------------------------------------------------------------- 1 | module.exports = [ 2 | { 3 | title:"Vocabularies contained in LOV and their prefix", 4 | query:"PREFIX vann:\nPREFIX voaf:\n\n### Vocabularies contained in LOV and their prefix\nSELECT DISTINCT ?vocabPrefix ?vocabURI {\n GRAPH {\n ?vocabURI a voaf:Vocabulary.\n ?vocabURI vann:preferredNamespacePrefix ?vocabPrefix.\n }} ORDER BY ?vocabPrefix" 5 | }, 6 | { 7 | title:"Vocabularies using a language other than English, sorted by language code", 8 | query:"PREFIX vann:\nPREFIX voaf:\nPREFIX dcterms: \n\n### Vocabularies using a language other than English, sorted by language code\nSELECT DISTINCT ?code ?title ?vocab {\n GRAPH {\n ?vocab a voaf:Vocabulary.\n ?vocab dcterms:title ?title.\n ?vocab dcterms:language ?eng.\n ?vocab dcterms:language ?lang.\n FILTER ( ?lang != ?eng )\n FILTER ( CONTAINS (STR(?eng), 'eng') )\n BIND(REPLACE(STR(?lang), 'http://www.lexvo.org/page/iso639-3/', '') AS ?code)\n }}ORDER BY ?code ?title" 9 | }, 10 | { 11 | title:"Vocabularies modified since 2014-01-01, sorted by modification date", 12 | query:"PREFIX voaf:\nPREFIX dcterms: \n\n### Vocabularies modified since 2014-01-01, sorted by modification date\nSELECT DISTINCT ?date ?title ?vocab {\n GRAPH {\n ?vocab a voaf:Vocabulary.\n ?vocab dcterms:title ?title.\n ?vocab dcterms:modified ?modified.\n FILTER ( STR(?modified) > '2014')\n BIND (STR(?modified) as ?date )\n }} ORDER BY DESC(?date) ?title" 13 | }, 14 | { 15 | title:"Properties with domain foaf:Person outside FOAF, sorted by vocabulary", 16 | query:"PREFIX foaf: \nPREFIX rdfs: \n\n### Properties with domain foaf:Person outside FOAF, sorted by vocabulary\nSELECT DISTINCT ?vocab ?pLabel ?pURI {\n GRAPH ?g {\n ?pURI rdfs:isDefinedBy ?vocab.\n ?pURI rdfs:domain foaf:Person.\n ?pURI rdfs:label ?pLabel.\n FILTER (?vocab != foaf:)\n }} ORDER BY ?vocab ?pLabel" 17 | }, 18 | { 19 | title:"SKOS properties used in vocabularies to describe classes", 20 | query:"PREFIX rdfs: \nPREFIX skos: \nPREFIX owl: \n\n### SKOS properties used in vocabularies to describe classes\nSELECT DISTINCT ?p ?vocab {\n GRAPH ?g {\n ?x rdfs:isDefinedBy ?vocab.\n {?x a owl:Class}\n UNION\n {?x a rdfs:Class}.\n ?x ?p ?y.\n FILTER (CONTAINS(STR(?p), STR(skos:)))\n }} ORDER BY ?p ?vocab" 21 | } 22 | ] -------------------------------------------------------------------------------- /lib/questionAnswerExamples.js: -------------------------------------------------------------------------------- 1 | module.exports = [ 2 | { 3 | title:"What is [vocab]?", 4 | query:"What is prov?" 5 | }, 6 | { 7 | title:"Who publish [vocab]?", 8 | query:"Who publish foaf?" 9 | }, 10 | { 11 | title:"How old is [vocab]?", 12 | query:"How old is prov?" 13 | }, 14 | { 15 | title:"When was [vocab] released?", 16 | query:"When was voaf released?" 17 | }, 18 | { 19 | title:"When was [vocab] last updated?", 20 | query:"When was foaf last updated?" 21 | }, 22 | { 23 | title:"What are the contributors of [vocab]?", 24 | query:"What are the contributors of adms?" 25 | }, 26 | { 27 | title:"What are the versions of [vocab]?", 28 | query:"What are the versions of schema?" 29 | }, 30 | { 31 | title:"What are the languages of [vocab]?", 32 | query:"What are the languages of dcat?" 33 | }, 34 | { 35 | title:"Where to find [vocab] documentation?", 36 | query:"Where to find foaf documentation?" 37 | }, 38 | { 39 | title:"How many vocabularies reuse [vocab]?", 40 | query:"How many vocabularies reuse adms?" 41 | }, 42 | { 43 | title:"How many dataset use [vocab]?", 44 | query:"How many datasets use adms?" 45 | }, 46 | { 47 | title:"What is the namespace of [vocab]?", 48 | query:"What is the namespace of dcterms?" 49 | }, 50 | { 51 | title:"What is the title of [vocab]?", 52 | query:"What is the title of foaf?" 53 | }, 54 | { title:"What is the category of [vocab]?", 55 | query:"What is the category of dcterms?" 56 | } 57 | ] -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "nodejs-express-mongoose-demo", 3 | "description": "A demo app illustrating the usage of express, mongoose, passportjs, jade and other modules in nodejs", 4 | "keywords": [ 5 | "express", 6 | "mongoose", 7 | "mongodb", 8 | "passport", 9 | "demo" 10 | ], 11 | "version": "3.0.0", 12 | "private": false, 13 | "author": "Madhusudhan Srinivasa (http://madhums.github.com)", 14 | "repository" : { 15 | "type" : "git", 16 | "url" : "https://github.com/madhums/node-express-mongoose-demo.git" 17 | }, 18 | "engines": { 19 | "node": "0.10.x", 20 | "npm": "1.2.x" 21 | }, 22 | "scripts": { 23 | "start": "NODE_ENV=development ./node_modules/.bin/nodemon server.js", 24 | "test": "NODE_ENV=test ./node_modules/.bin/mocha --reporter spec --timeout 10000 test/test-*.js" 25 | }, 26 | "dependencies": { 27 | "express": "3.4.x", 28 | "jade": "latest", 29 | "mongoose": "latest", 30 | "elasticsearchclient": "latest", 31 | "elasticsearch": "2.2.0", 32 | "connect-mongo": "latest", 33 | "connect-flash": "latest", 34 | "passport": "latest", 35 | "passport-local": "latest", 36 | "winston": "latest", 37 | "notifier": "latest", 38 | "async": "latest", 39 | "view-helpers": "latest", 40 | "underscore": "latest", 41 | "forever": "latest", 42 | "dagre-d3": "0.2.9", 43 | "dagre": "0.4.6", 44 | "express-negotiate": "0.0.5", 45 | "nodemailer": "0.7.0" 46 | }, 47 | "devDependencies": { 48 | "supertest": "latest", 49 | "should": "latest", 50 | "mocha": "latest", 51 | "nodemon": "latest" 52 | } 53 | } -------------------------------------------------------------------------------- /public/Recommendations_Vocabulary_Design.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/Recommendations_Vocabulary_Design.pdf -------------------------------------------------------------------------------- /public/css/app.css: -------------------------------------------------------------------------------- 1 | body { 2 | padding-top: 60px; 3 | } 4 | 5 | .container { 6 | width: auto; 7 | max-width: 680px; 8 | } 9 | 10 | .article, .comment { 11 | padding: 15px 0; 12 | border-top: 1px solid #e8e8e8; 13 | } 14 | 15 | 16 | .error { 17 | color: #FF2602; 18 | } 19 | 20 | .form-actions { 21 | background: #fff; 22 | border: 0; 23 | } 24 | -------------------------------------------------------------------------------- /public/css/dosisBold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/css/dosisBold.woff -------------------------------------------------------------------------------- /public/css/dosisRegular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/css/dosisRegular.woff -------------------------------------------------------------------------------- /public/css/grid.css: -------------------------------------------------------------------------------- 1 | /* 2 | * MIXITUP Boilerplate Template Stylesheet 3 | */ 4 | 5 | /* ------ BOILERPLATE TEMPLATE ------ */ 6 | 7 | .controls{ 8 | display: inline-block; 9 | width: 180px; 10 | margin: 0 0 30px; 11 | vertical-align: top; 12 | } 13 | 14 | .controls li{ 15 | margin-left: 20px; 16 | cursor: pointer; 17 | list-style-type: square; 18 | } 19 | 20 | .controls li.active{ 21 | font-weight: 700; 22 | } 23 | 24 | -------------------------------------------------------------------------------- /public/css/jquery.tagsinput.css: -------------------------------------------------------------------------------- 1 | div.tagsinput { border:1px solid #CCC; background: #FFF; padding:5px; width:300px; height:100px; overflow-y: auto;} 2 | div.tagsinput span.tag { border: 1px solid #a5d24a; -moz-border-radius:2px; -webkit-border-radius:2px; display: block; float: left; padding: 5px; text-decoration:none; background: #cde69c; color: #638421; margin-right: 5px; margin-bottom:5px;font-family: helvetica; font-size:13px;} 3 | div.tagsinput span.tag a { font-weight: bold; color: #82ad2b; text-decoration:none; font-size: 11px; } 4 | div.tagsinput input { width:80px; margin:0px; font-family: helvetica; font-size: 13px; border:1px solid transparent; padding:5px; background: transparent; color: #000; outline:0px; margin-right:5px; margin-bottom:5px; } 5 | div.tagsinput div { display:block; float: left; } 6 | .tags_clear { clear: both; width: 100%; height: 0px; } 7 | .not_valid {background: #FBD8DB !important; color: #90111A !important;} 8 | -------------------------------------------------------------------------------- /public/css/jquery/images/animated-overlay.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/css/jquery/images/animated-overlay.gif -------------------------------------------------------------------------------- /public/css/jquery/images/ui-bg_flat_0_aaaaaa_40x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/css/jquery/images/ui-bg_flat_0_aaaaaa_40x100.png -------------------------------------------------------------------------------- /public/css/jquery/images/ui-bg_flat_75_ffffff_40x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/css/jquery/images/ui-bg_flat_75_ffffff_40x100.png -------------------------------------------------------------------------------- /public/css/jquery/images/ui-bg_glass_55_fbf9ee_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/css/jquery/images/ui-bg_glass_55_fbf9ee_1x400.png -------------------------------------------------------------------------------- /public/css/jquery/images/ui-bg_glass_65_ffffff_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/css/jquery/images/ui-bg_glass_65_ffffff_1x400.png -------------------------------------------------------------------------------- /public/css/jquery/images/ui-bg_glass_75_dadada_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/css/jquery/images/ui-bg_glass_75_dadada_1x400.png -------------------------------------------------------------------------------- /public/css/jquery/images/ui-bg_glass_75_e6e6e6_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/css/jquery/images/ui-bg_glass_75_e6e6e6_1x400.png -------------------------------------------------------------------------------- /public/css/jquery/images/ui-bg_glass_95_fef1ec_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/css/jquery/images/ui-bg_glass_95_fef1ec_1x400.png -------------------------------------------------------------------------------- /public/css/jquery/images/ui-bg_highlight-soft_75_cccccc_1x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/css/jquery/images/ui-bg_highlight-soft_75_cccccc_1x100.png -------------------------------------------------------------------------------- /public/css/jquery/images/ui-icons_222222_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/css/jquery/images/ui-icons_222222_256x240.png -------------------------------------------------------------------------------- /public/css/jquery/images/ui-icons_2e83ff_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/css/jquery/images/ui-icons_2e83ff_256x240.png -------------------------------------------------------------------------------- /public/css/jquery/images/ui-icons_454545_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/css/jquery/images/ui-icons_454545_256x240.png -------------------------------------------------------------------------------- /public/css/jquery/images/ui-icons_888888_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/css/jquery/images/ui-icons_888888_256x240.png -------------------------------------------------------------------------------- /public/css/jquery/images/ui-icons_cd0a0a_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/css/jquery/images/ui-icons_cd0a0a_256x240.png -------------------------------------------------------------------------------- /public/css/jquery/jquery.ui.accordion.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * jQuery UI Accordion 1.10.3 3 | * http://jqueryui.com 4 | * 5 | * Copyright 2013 jQuery Foundation and other contributors 6 | * Released under the MIT license. 7 | * http://jquery.org/license 8 | * 9 | * http://docs.jquery.com/UI/Accordion#theming 10 | */ 11 | .ui-accordion .ui-accordion-header { 12 | display: block; 13 | cursor: pointer; 14 | position: relative; 15 | margin-top: 2px; 16 | padding: .5em .5em .5em .7em; 17 | min-height: 0; /* support: IE7 */ 18 | } 19 | .ui-accordion .ui-accordion-icons { 20 | padding-left: 2.2em; 21 | } 22 | .ui-accordion .ui-accordion-noicons { 23 | padding-left: .7em; 24 | } 25 | .ui-accordion .ui-accordion-icons .ui-accordion-icons { 26 | padding-left: 2.2em; 27 | } 28 | .ui-accordion .ui-accordion-header .ui-accordion-header-icon { 29 | position: absolute; 30 | left: .5em; 31 | top: 50%; 32 | margin-top: -8px; 33 | } 34 | .ui-accordion .ui-accordion-content { 35 | padding: 1em 2.2em; 36 | border-top: 0; 37 | overflow: auto; 38 | } 39 | -------------------------------------------------------------------------------- /public/css/jquery/jquery.ui.all.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * jQuery UI CSS Framework 1.10.3 3 | * http://jqueryui.com 4 | * 5 | * Copyright 2013 jQuery Foundation and other contributors 6 | * Released under the MIT license. 7 | * http://jquery.org/license 8 | * 9 | * http://docs.jquery.com/UI/Theming 10 | */ 11 | @import "jquery.ui.base.css"; 12 | @import "jquery.ui.theme.css"; 13 | -------------------------------------------------------------------------------- /public/css/jquery/jquery.ui.autocomplete.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * jQuery UI Autocomplete 1.10.3 3 | * http://jqueryui.com 4 | * 5 | * Copyright 2013 jQuery Foundation and other contributors 6 | * Released under the MIT license. 7 | * http://jquery.org/license 8 | * 9 | * http://docs.jquery.com/UI/Autocomplete#theming 10 | */ 11 | .ui-autocomplete { 12 | position: absolute; 13 | top: 0; 14 | left: 0; 15 | cursor: default; 16 | } 17 | -------------------------------------------------------------------------------- /public/css/jquery/jquery.ui.base.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * jQuery UI CSS Framework 1.10.3 3 | * http://jqueryui.com 4 | * 5 | * Copyright 2013 jQuery Foundation and other contributors 6 | * Released under the MIT license. 7 | * http://jquery.org/license 8 | * 9 | * http://docs.jquery.com/UI/Theming 10 | */ 11 | @import url("jquery.ui.core.css"); 12 | 13 | @import url("jquery.ui.accordion.css"); 14 | @import url("jquery.ui.autocomplete.css"); 15 | @import url("jquery.ui.button.css"); 16 | @import url("jquery.ui.datepicker.css"); 17 | @import url("jquery.ui.dialog.css"); 18 | @import url("jquery.ui.menu.css"); 19 | @import url("jquery.ui.progressbar.css"); 20 | @import url("jquery.ui.resizable.css"); 21 | @import url("jquery.ui.selectable.css"); 22 | @import url("jquery.ui.slider.css"); 23 | @import url("jquery.ui.spinner.css"); 24 | @import url("jquery.ui.tabs.css"); 25 | @import url("jquery.ui.tooltip.css"); 26 | -------------------------------------------------------------------------------- /public/css/jquery/jquery.ui.button.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * jQuery UI Button 1.10.3 3 | * http://jqueryui.com 4 | * 5 | * Copyright 2013 jQuery Foundation and other contributors 6 | * Released under the MIT license. 7 | * http://jquery.org/license 8 | * 9 | * http://docs.jquery.com/UI/Button#theming 10 | */ 11 | .ui-button { 12 | display: inline-block; 13 | position: relative; 14 | padding: 0; 15 | line-height: normal; 16 | margin-right: .1em; 17 | cursor: pointer; 18 | vertical-align: middle; 19 | text-align: center; 20 | overflow: visible; /* removes extra width in IE */ 21 | } 22 | .ui-button, 23 | .ui-button:link, 24 | .ui-button:visited, 25 | .ui-button:hover, 26 | .ui-button:active { 27 | text-decoration: none; 28 | } 29 | /* to make room for the icon, a width needs to be set here */ 30 | .ui-button-icon-only { 31 | width: 2.2em; 32 | } 33 | /* button elements seem to need a little more width */ 34 | button.ui-button-icon-only { 35 | width: 2.4em; 36 | } 37 | .ui-button-icons-only { 38 | width: 3.4em; 39 | } 40 | button.ui-button-icons-only { 41 | width: 3.7em; 42 | } 43 | 44 | /* button text element */ 45 | .ui-button .ui-button-text { 46 | display: block; 47 | line-height: normal; 48 | } 49 | .ui-button-text-only .ui-button-text { 50 | padding: .4em 1em; 51 | } 52 | .ui-button-icon-only .ui-button-text, 53 | .ui-button-icons-only .ui-button-text { 54 | padding: .4em; 55 | text-indent: -9999999px; 56 | } 57 | .ui-button-text-icon-primary .ui-button-text, 58 | .ui-button-text-icons .ui-button-text { 59 | padding: .4em 1em .4em 2.1em; 60 | } 61 | .ui-button-text-icon-secondary .ui-button-text, 62 | .ui-button-text-icons .ui-button-text { 63 | padding: .4em 2.1em .4em 1em; 64 | } 65 | .ui-button-text-icons .ui-button-text { 66 | padding-left: 2.1em; 67 | padding-right: 2.1em; 68 | } 69 | /* no icon support for input elements, provide padding by default */ 70 | input.ui-button { 71 | padding: .4em 1em; 72 | } 73 | 74 | /* button icon element(s) */ 75 | .ui-button-icon-only .ui-icon, 76 | .ui-button-text-icon-primary .ui-icon, 77 | .ui-button-text-icon-secondary .ui-icon, 78 | .ui-button-text-icons .ui-icon, 79 | .ui-button-icons-only .ui-icon { 80 | position: absolute; 81 | top: 50%; 82 | margin-top: -8px; 83 | } 84 | .ui-button-icon-only .ui-icon { 85 | left: 50%; 86 | margin-left: -8px; 87 | } 88 | .ui-button-text-icon-primary .ui-button-icon-primary, 89 | .ui-button-text-icons .ui-button-icon-primary, 90 | .ui-button-icons-only .ui-button-icon-primary { 91 | left: .5em; 92 | } 93 | .ui-button-text-icon-secondary .ui-button-icon-secondary, 94 | .ui-button-text-icons .ui-button-icon-secondary, 95 | .ui-button-icons-only .ui-button-icon-secondary { 96 | right: .5em; 97 | } 98 | 99 | /* button sets */ 100 | .ui-buttonset { 101 | margin-right: 7px; 102 | } 103 | .ui-buttonset .ui-button { 104 | margin-left: 0; 105 | margin-right: -.3em; 106 | } 107 | 108 | /* workarounds */ 109 | /* reset extra padding in Firefox, see h5bp.com/l */ 110 | input.ui-button::-moz-focus-inner, 111 | button.ui-button::-moz-focus-inner { 112 | border: 0; 113 | padding: 0; 114 | } 115 | -------------------------------------------------------------------------------- /public/css/jquery/jquery.ui.core.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * jQuery UI CSS Framework 1.10.3 3 | * http://jqueryui.com 4 | * 5 | * Copyright 2013 jQuery Foundation and other contributors 6 | * Released under the MIT license. 7 | * http://jquery.org/license 8 | * 9 | * http://docs.jquery.com/UI/Theming/API 10 | */ 11 | 12 | /* Layout helpers 13 | ----------------------------------*/ 14 | .ui-helper-hidden { 15 | display: none; 16 | } 17 | .ui-helper-hidden-accessible { 18 | border: 0; 19 | clip: rect(0 0 0 0); 20 | height: 1px; 21 | margin: -1px; 22 | overflow: hidden; 23 | padding: 0; 24 | position: absolute; 25 | width: 1px; 26 | } 27 | .ui-helper-reset { 28 | margin: 0; 29 | padding: 0; 30 | border: 0; 31 | outline: 0; 32 | line-height: 1.3; 33 | text-decoration: none; 34 | font-size: 100%; 35 | list-style: none; 36 | } 37 | .ui-helper-clearfix:before, 38 | .ui-helper-clearfix:after { 39 | content: ""; 40 | display: table; 41 | border-collapse: collapse; 42 | } 43 | .ui-helper-clearfix:after { 44 | clear: both; 45 | } 46 | .ui-helper-clearfix { 47 | min-height: 0; /* support: IE7 */ 48 | } 49 | .ui-helper-zfix { 50 | width: 100%; 51 | height: 100%; 52 | top: 0; 53 | left: 0; 54 | position: absolute; 55 | opacity: 0; 56 | filter:Alpha(Opacity=0); 57 | } 58 | 59 | .ui-front { 60 | z-index: 100; 61 | } 62 | 63 | 64 | /* Interaction Cues 65 | ----------------------------------*/ 66 | .ui-state-disabled { 67 | cursor: default !important; 68 | } 69 | 70 | 71 | /* Icons 72 | ----------------------------------*/ 73 | 74 | /* states and images */ 75 | .ui-icon { 76 | display: block; 77 | text-indent: -99999px; 78 | overflow: hidden; 79 | background-repeat: no-repeat; 80 | } 81 | 82 | 83 | /* Misc visuals 84 | ----------------------------------*/ 85 | 86 | /* Overlays */ 87 | .ui-widget-overlay { 88 | position: fixed; 89 | top: 0; 90 | left: 0; 91 | width: 100%; 92 | height: 100%; 93 | } 94 | -------------------------------------------------------------------------------- /public/css/jquery/jquery.ui.dialog.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * jQuery UI Dialog 1.10.3 3 | * http://jqueryui.com 4 | * 5 | * Copyright 2013 jQuery Foundation and other contributors 6 | * Released under the MIT license. 7 | * http://jquery.org/license 8 | * 9 | * http://docs.jquery.com/UI/Dialog#theming 10 | */ 11 | .ui-dialog { 12 | position: absolute; 13 | top: 0; 14 | left: 0; 15 | padding: .2em; 16 | outline: 0; 17 | } 18 | .ui-dialog .ui-dialog-titlebar { 19 | padding: .4em 1em; 20 | position: relative; 21 | } 22 | .ui-dialog .ui-dialog-title { 23 | float: left; 24 | margin: .1em 0; 25 | white-space: nowrap; 26 | width: 90%; 27 | overflow: hidden; 28 | text-overflow: ellipsis; 29 | } 30 | .ui-dialog .ui-dialog-titlebar-close { 31 | position: absolute; 32 | right: .3em; 33 | top: 50%; 34 | width: 21px; 35 | margin: -10px 0 0 0; 36 | padding: 1px; 37 | height: 20px; 38 | } 39 | .ui-dialog .ui-dialog-content { 40 | position: relative; 41 | border: 0; 42 | padding: .5em 1em; 43 | background: none; 44 | overflow: auto; 45 | } 46 | .ui-dialog .ui-dialog-buttonpane { 47 | text-align: left; 48 | border-width: 1px 0 0 0; 49 | background-image: none; 50 | margin-top: .5em; 51 | padding: .3em 1em .5em .4em; 52 | } 53 | .ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { 54 | float: right; 55 | } 56 | .ui-dialog .ui-dialog-buttonpane button { 57 | margin: .5em .4em .5em 0; 58 | cursor: pointer; 59 | } 60 | .ui-dialog .ui-resizable-se { 61 | width: 12px; 62 | height: 12px; 63 | right: -5px; 64 | bottom: -5px; 65 | background-position: 16px 16px; 66 | } 67 | .ui-draggable .ui-dialog-titlebar { 68 | cursor: move; 69 | } 70 | -------------------------------------------------------------------------------- /public/css/jquery/jquery.ui.menu.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * jQuery UI Menu 1.10.3 3 | * http://jqueryui.com 4 | * 5 | * Copyright 2013 jQuery Foundation and other contributors 6 | * Released under the MIT license. 7 | * http://jquery.org/license 8 | * 9 | * http://docs.jquery.com/UI/Menu#theming 10 | */ 11 | .ui-menu { 12 | list-style: none; 13 | padding: 2px; 14 | margin: 0; 15 | display: block; 16 | outline: none; 17 | } 18 | .ui-menu .ui-menu { 19 | margin-top: -3px; 20 | position: absolute; 21 | } 22 | .ui-menu .ui-menu-item { 23 | margin: 0; 24 | padding: 0; 25 | width: 100%; 26 | /* support: IE10, see #8844 */ 27 | list-style-image: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7); 28 | } 29 | .ui-menu .ui-menu-divider { 30 | margin: 5px -2px 5px -2px; 31 | height: 0; 32 | font-size: 0; 33 | line-height: 0; 34 | border-width: 1px 0 0 0; 35 | } 36 | .ui-menu .ui-menu-item a { 37 | text-decoration: none; 38 | display: block; 39 | padding: 2px .4em; 40 | line-height: 1.5; 41 | min-height: 0; /* support: IE7 */ 42 | font-weight: normal; 43 | } 44 | .ui-menu .ui-menu-item a.ui-state-focus, 45 | .ui-menu .ui-menu-item a.ui-state-active { 46 | font-weight: normal; 47 | margin: -1px; 48 | } 49 | 50 | .ui-menu .ui-state-disabled { 51 | font-weight: normal; 52 | margin: .4em 0 .2em; 53 | line-height: 1.5; 54 | } 55 | .ui-menu .ui-state-disabled a { 56 | cursor: default; 57 | } 58 | 59 | /* icon support */ 60 | .ui-menu-icons { 61 | position: relative; 62 | } 63 | .ui-menu-icons .ui-menu-item a { 64 | position: relative; 65 | padding-left: 2em; 66 | } 67 | 68 | /* left-aligned */ 69 | .ui-menu .ui-icon { 70 | position: absolute; 71 | top: .2em; 72 | left: .2em; 73 | } 74 | 75 | /* right-aligned */ 76 | .ui-menu .ui-menu-icon { 77 | position: static; 78 | float: right; 79 | } 80 | -------------------------------------------------------------------------------- /public/css/jquery/jquery.ui.progressbar.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * jQuery UI Progressbar 1.10.3 3 | * http://jqueryui.com 4 | * 5 | * Copyright 2013 jQuery Foundation and other contributors 6 | * Released under the MIT license. 7 | * http://jquery.org/license 8 | * 9 | * http://docs.jquery.com/UI/Progressbar#theming 10 | */ 11 | .ui-progressbar { 12 | height: 2em; 13 | text-align: left; 14 | overflow: hidden; 15 | } 16 | .ui-progressbar .ui-progressbar-value { 17 | margin: -1px; 18 | height: 100%; 19 | } 20 | .ui-progressbar .ui-progressbar-overlay { 21 | background: url("images/animated-overlay.gif"); 22 | height: 100%; 23 | filter: alpha(opacity=25); 24 | opacity: 0.25; 25 | } 26 | .ui-progressbar-indeterminate .ui-progressbar-value { 27 | background-image: none; 28 | } 29 | -------------------------------------------------------------------------------- /public/css/jquery/jquery.ui.resizable.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * jQuery UI Resizable 1.10.3 3 | * http://jqueryui.com 4 | * 5 | * Copyright 2013 jQuery Foundation and other contributors 6 | * Released under the MIT license. 7 | * http://jquery.org/license 8 | * 9 | * http://docs.jquery.com/UI/Resizable#theming 10 | */ 11 | .ui-resizable { 12 | position: relative; 13 | } 14 | .ui-resizable-handle { 15 | position: absolute; 16 | font-size: 0.1px; 17 | display: block; 18 | } 19 | .ui-resizable-disabled .ui-resizable-handle, 20 | .ui-resizable-autohide .ui-resizable-handle { 21 | display: none; 22 | } 23 | .ui-resizable-n { 24 | cursor: n-resize; 25 | height: 7px; 26 | width: 100%; 27 | top: -5px; 28 | left: 0; 29 | } 30 | .ui-resizable-s { 31 | cursor: s-resize; 32 | height: 7px; 33 | width: 100%; 34 | bottom: -5px; 35 | left: 0; 36 | } 37 | .ui-resizable-e { 38 | cursor: e-resize; 39 | width: 7px; 40 | right: -5px; 41 | top: 0; 42 | height: 100%; 43 | } 44 | .ui-resizable-w { 45 | cursor: w-resize; 46 | width: 7px; 47 | left: -5px; 48 | top: 0; 49 | height: 100%; 50 | } 51 | .ui-resizable-se { 52 | cursor: se-resize; 53 | width: 12px; 54 | height: 12px; 55 | right: 1px; 56 | bottom: 1px; 57 | } 58 | .ui-resizable-sw { 59 | cursor: sw-resize; 60 | width: 9px; 61 | height: 9px; 62 | left: -5px; 63 | bottom: -5px; 64 | } 65 | .ui-resizable-nw { 66 | cursor: nw-resize; 67 | width: 9px; 68 | height: 9px; 69 | left: -5px; 70 | top: -5px; 71 | } 72 | .ui-resizable-ne { 73 | cursor: ne-resize; 74 | width: 9px; 75 | height: 9px; 76 | right: -5px; 77 | top: -5px; 78 | } 79 | -------------------------------------------------------------------------------- /public/css/jquery/jquery.ui.selectable.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * jQuery UI Selectable 1.10.3 3 | * http://jqueryui.com 4 | * 5 | * Copyright 2013 jQuery Foundation and other contributors 6 | * Released under the MIT license. 7 | * http://jquery.org/license 8 | * 9 | * http://docs.jquery.com/UI/Selectable#theming 10 | */ 11 | .ui-selectable-helper { 12 | position: absolute; 13 | z-index: 100; 14 | border: 1px dotted black; 15 | } 16 | -------------------------------------------------------------------------------- /public/css/jquery/jquery.ui.slider.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * jQuery UI Slider 1.10.3 3 | * http://jqueryui.com 4 | * 5 | * Copyright 2013 jQuery Foundation and other contributors 6 | * Released under the MIT license. 7 | * http://jquery.org/license 8 | * 9 | * http://docs.jquery.com/UI/Slider#theming 10 | */ 11 | .ui-slider { 12 | position: relative; 13 | text-align: left; 14 | } 15 | .ui-slider .ui-slider-handle { 16 | position: absolute; 17 | z-index: 2; 18 | width: 1.2em; 19 | height: 1.2em; 20 | cursor: default; 21 | } 22 | .ui-slider .ui-slider-range { 23 | position: absolute; 24 | z-index: 1; 25 | font-size: .7em; 26 | display: block; 27 | border: 0; 28 | background-position: 0 0; 29 | } 30 | 31 | /* For IE8 - See #6727 */ 32 | .ui-slider.ui-state-disabled .ui-slider-handle, 33 | .ui-slider.ui-state-disabled .ui-slider-range { 34 | filter: inherit; 35 | } 36 | 37 | .ui-slider-horizontal { 38 | height: .8em; 39 | } 40 | .ui-slider-horizontal .ui-slider-handle { 41 | top: -.3em; 42 | margin-left: -.6em; 43 | } 44 | .ui-slider-horizontal .ui-slider-range { 45 | top: 0; 46 | height: 100%; 47 | } 48 | .ui-slider-horizontal .ui-slider-range-min { 49 | left: 0; 50 | } 51 | .ui-slider-horizontal .ui-slider-range-max { 52 | right: 0; 53 | } 54 | 55 | .ui-slider-vertical { 56 | width: .8em; 57 | height: 100px; 58 | } 59 | .ui-slider-vertical .ui-slider-handle { 60 | left: -.3em; 61 | margin-left: 0; 62 | margin-bottom: -.6em; 63 | } 64 | .ui-slider-vertical .ui-slider-range { 65 | left: 0; 66 | width: 100%; 67 | } 68 | .ui-slider-vertical .ui-slider-range-min { 69 | bottom: 0; 70 | } 71 | .ui-slider-vertical .ui-slider-range-max { 72 | top: 0; 73 | } 74 | -------------------------------------------------------------------------------- /public/css/jquery/jquery.ui.spinner.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * jQuery UI Spinner 1.10.3 3 | * http://jqueryui.com 4 | * 5 | * Copyright 2013 jQuery Foundation and other contributors 6 | * Released under the MIT license. 7 | * http://jquery.org/license 8 | * 9 | * http://docs.jquery.com/UI/Spinner#theming 10 | */ 11 | .ui-spinner { 12 | position: relative; 13 | display: inline-block; 14 | overflow: hidden; 15 | padding: 0; 16 | vertical-align: middle; 17 | } 18 | .ui-spinner-input { 19 | border: none; 20 | background: none; 21 | color: inherit; 22 | padding: 0; 23 | margin: .2em 0; 24 | vertical-align: middle; 25 | margin-left: .4em; 26 | margin-right: 22px; 27 | } 28 | .ui-spinner-button { 29 | width: 16px; 30 | height: 50%; 31 | font-size: .5em; 32 | padding: 0; 33 | margin: 0; 34 | text-align: center; 35 | position: absolute; 36 | cursor: default; 37 | display: block; 38 | overflow: hidden; 39 | right: 0; 40 | } 41 | /* more specificity required here to overide default borders */ 42 | .ui-spinner a.ui-spinner-button { 43 | border-top: none; 44 | border-bottom: none; 45 | border-right: none; 46 | } 47 | /* vertical centre icon */ 48 | .ui-spinner .ui-icon { 49 | position: absolute; 50 | margin-top: -8px; 51 | top: 50%; 52 | left: 0; 53 | } 54 | .ui-spinner-up { 55 | top: 0; 56 | } 57 | .ui-spinner-down { 58 | bottom: 0; 59 | } 60 | 61 | /* TR overrides */ 62 | .ui-spinner .ui-icon-triangle-1-s { 63 | /* need to fix icons sprite */ 64 | background-position: -65px -16px; 65 | } 66 | -------------------------------------------------------------------------------- /public/css/jquery/jquery.ui.tabs.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * jQuery UI Tabs 1.10.3 3 | * http://jqueryui.com 4 | * 5 | * Copyright 2013 jQuery Foundation and other contributors 6 | * Released under the MIT license. 7 | * http://jquery.org/license 8 | * 9 | * http://docs.jquery.com/UI/Tabs#theming 10 | */ 11 | .ui-tabs { 12 | position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ 13 | padding: .2em; 14 | } 15 | .ui-tabs .ui-tabs-nav { 16 | margin: 0; 17 | padding: .2em .2em 0; 18 | } 19 | .ui-tabs .ui-tabs-nav li { 20 | list-style: none; 21 | float: left; 22 | position: relative; 23 | top: 0; 24 | margin: 1px .2em 0 0; 25 | border-bottom-width: 0; 26 | padding: 0; 27 | white-space: nowrap; 28 | } 29 | .ui-tabs .ui-tabs-nav li a { 30 | float: left; 31 | padding: .5em 1em; 32 | text-decoration: none; 33 | } 34 | .ui-tabs .ui-tabs-nav li.ui-tabs-active { 35 | margin-bottom: -1px; 36 | padding-bottom: 1px; 37 | } 38 | .ui-tabs .ui-tabs-nav li.ui-tabs-active a, 39 | .ui-tabs .ui-tabs-nav li.ui-state-disabled a, 40 | .ui-tabs .ui-tabs-nav li.ui-tabs-loading a { 41 | cursor: text; 42 | } 43 | .ui-tabs .ui-tabs-nav li a, /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */ 44 | .ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a { 45 | cursor: pointer; 46 | } 47 | .ui-tabs .ui-tabs-panel { 48 | display: block; 49 | border-width: 0; 50 | padding: 1em 1.4em; 51 | background: none; 52 | } 53 | -------------------------------------------------------------------------------- /public/css/jquery/jquery.ui.tooltip.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * jQuery UI Tooltip 1.10.3 3 | * http://jqueryui.com 4 | * 5 | * Copyright 2013 jQuery Foundation and other contributors 6 | * Released under the MIT license. 7 | * http://jquery.org/license 8 | */ 9 | .ui-tooltip { 10 | padding: 8px; 11 | position: absolute; 12 | z-index: 9999; 13 | max-width: 300px; 14 | -webkit-box-shadow: 0 0 5px #aaa; 15 | box-shadow: 0 0 5px #aaa; 16 | } 17 | body .ui-tooltip { 18 | border-width: 2px; 19 | } 20 | -------------------------------------------------------------------------------- /public/css/jquery/minified/images/animated-overlay.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/css/jquery/minified/images/animated-overlay.gif -------------------------------------------------------------------------------- /public/css/jquery/minified/images/ui-bg_flat_0_aaaaaa_40x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/css/jquery/minified/images/ui-bg_flat_0_aaaaaa_40x100.png -------------------------------------------------------------------------------- /public/css/jquery/minified/images/ui-bg_flat_75_ffffff_40x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/css/jquery/minified/images/ui-bg_flat_75_ffffff_40x100.png -------------------------------------------------------------------------------- /public/css/jquery/minified/images/ui-bg_glass_55_fbf9ee_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/css/jquery/minified/images/ui-bg_glass_55_fbf9ee_1x400.png -------------------------------------------------------------------------------- /public/css/jquery/minified/images/ui-bg_glass_65_ffffff_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/css/jquery/minified/images/ui-bg_glass_65_ffffff_1x400.png -------------------------------------------------------------------------------- /public/css/jquery/minified/images/ui-bg_glass_75_dadada_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/css/jquery/minified/images/ui-bg_glass_75_dadada_1x400.png -------------------------------------------------------------------------------- /public/css/jquery/minified/images/ui-bg_glass_75_e6e6e6_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/css/jquery/minified/images/ui-bg_glass_75_e6e6e6_1x400.png -------------------------------------------------------------------------------- /public/css/jquery/minified/images/ui-bg_glass_95_fef1ec_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/css/jquery/minified/images/ui-bg_glass_95_fef1ec_1x400.png -------------------------------------------------------------------------------- /public/css/jquery/minified/images/ui-bg_highlight-soft_75_cccccc_1x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/css/jquery/minified/images/ui-bg_highlight-soft_75_cccccc_1x100.png -------------------------------------------------------------------------------- /public/css/jquery/minified/images/ui-icons_222222_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/css/jquery/minified/images/ui-icons_222222_256x240.png -------------------------------------------------------------------------------- /public/css/jquery/minified/images/ui-icons_2e83ff_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/css/jquery/minified/images/ui-icons_2e83ff_256x240.png -------------------------------------------------------------------------------- /public/css/jquery/minified/images/ui-icons_454545_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/css/jquery/minified/images/ui-icons_454545_256x240.png -------------------------------------------------------------------------------- /public/css/jquery/minified/images/ui-icons_888888_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/css/jquery/minified/images/ui-icons_888888_256x240.png -------------------------------------------------------------------------------- /public/css/jquery/minified/images/ui-icons_cd0a0a_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/css/jquery/minified/images/ui-icons_cd0a0a_256x240.png -------------------------------------------------------------------------------- /public/css/jquery/minified/jquery.ui.accordion.min.css: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.3 - 2013-05-03 2 | * http://jqueryui.com 3 | * Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */ 4 | 5 | .ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin-top:2px;padding:.5em .5em .5em .7em;min-height:0}.ui-accordion .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-noicons{padding-left:.7em}.ui-accordion .ui-accordion-icons .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-header .ui-accordion-header-icon{position:absolute;left:.5em;top:50%;margin-top:-8px}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto} -------------------------------------------------------------------------------- /public/css/jquery/minified/jquery.ui.autocomplete.min.css: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.3 - 2013-05-03 2 | * http://jqueryui.com 3 | * Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */ 4 | 5 | .ui-autocomplete{position:absolute;top:0;left:0;cursor:default} -------------------------------------------------------------------------------- /public/css/jquery/minified/jquery.ui.button.min.css: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.3 - 2013-05-03 2 | * http://jqueryui.com 3 | * Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */ 4 | 5 | .ui-button{display:inline-block;position:relative;padding:0;line-height:normal;margin-right:.1em;cursor:pointer;vertical-align:middle;text-align:center;overflow:visible}.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active{text-decoration:none}.ui-button-icon-only{width:2.2em}button.ui-button-icon-only{width:2.4em}.ui-button-icons-only{width:3.4em}button.ui-button-icons-only{width:3.7em}.ui-button .ui-button-text{display:block;line-height:normal}.ui-button-text-only .ui-button-text{padding:.4em 1em}.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text{padding:.4em;text-indent:-9999999px}.ui-button-text-icon-primary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 1em .4em 2.1em}.ui-button-text-icon-secondary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 2.1em .4em 1em}.ui-button-text-icons .ui-button-text{padding-left:2.1em;padding-right:2.1em}input.ui-button{padding:.4em 1em}.ui-button-icon-only .ui-icon,.ui-button-text-icon-primary .ui-icon,.ui-button-text-icon-secondary .ui-icon,.ui-button-text-icons .ui-icon,.ui-button-icons-only .ui-icon{position:absolute;top:50%;margin-top:-8px}.ui-button-icon-only .ui-icon{left:50%;margin-left:-8px}.ui-button-text-icon-primary .ui-button-icon-primary,.ui-button-text-icons .ui-button-icon-primary,.ui-button-icons-only .ui-button-icon-primary{left:.5em}.ui-button-text-icon-secondary .ui-button-icon-secondary,.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:.5em}.ui-buttonset{margin-right:7px}.ui-buttonset .ui-button{margin-left:0;margin-right:-.3em}input.ui-button::-moz-focus-inner,button.ui-button::-moz-focus-inner{border:0;padding:0} -------------------------------------------------------------------------------- /public/css/jquery/minified/jquery.ui.core.min.css: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.3 - 2013-05-03 2 | * http://jqueryui.com 3 | * Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */ 4 | 5 | .ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%} -------------------------------------------------------------------------------- /public/css/jquery/minified/jquery.ui.datepicker.min.css: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.3 - 2013-05-03 2 | * http://jqueryui.com 3 | * Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */ 4 | 5 | .ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month-year{width:100%}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:49%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:700;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px} -------------------------------------------------------------------------------- /public/css/jquery/minified/jquery.ui.dialog.min.css: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.3 - 2013-05-03 2 | * http://jqueryui.com 3 | * Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */ 4 | 5 | .ui-dialog{position:absolute;top:0;left:0;padding:.2em;outline:0}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:21px;margin:-10px 0 0 0;padding:1px;height:20px}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:0;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0;background-image:none;margin-top:.5em;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-se{width:12px;height:12px;right:-5px;bottom:-5px;background-position:16px 16px}.ui-draggable .ui-dialog-titlebar{cursor:move} -------------------------------------------------------------------------------- /public/css/jquery/minified/jquery.ui.menu.min.css: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.3 - 2013-05-03 2 | * http://jqueryui.com 3 | * Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */ 4 | 5 | .ui-menu{list-style:none;padding:2px;margin:0;display:block;outline:0}.ui-menu .ui-menu{margin-top:-3px;position:absolute}.ui-menu .ui-menu-item{margin:0;padding:0;width:100%;list-style-image:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)}.ui-menu .ui-menu-divider{margin:5px -2px 5px -2px;height:0;font-size:0;line-height:0;border-width:1px 0 0}.ui-menu .ui-menu-item a{text-decoration:none;display:block;padding:2px .4em;line-height:1.5;min-height:0;font-weight:400}.ui-menu .ui-menu-item a.ui-state-focus,.ui-menu .ui-menu-item a.ui-state-active{font-weight:400;margin:-1px}.ui-menu .ui-state-disabled{font-weight:400;margin:.4em 0 .2em;line-height:1.5}.ui-menu .ui-state-disabled a{cursor:default}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item a{position:relative;padding-left:2em}.ui-menu .ui-icon{position:absolute;top:.2em;left:.2em}.ui-menu .ui-menu-icon{position:static;float:right} -------------------------------------------------------------------------------- /public/css/jquery/minified/jquery.ui.progressbar.min.css: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.3 - 2013-05-03 2 | * http://jqueryui.com 3 | * Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */ 4 | 5 | .ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-progressbar .ui-progressbar-overlay{background:url(images/animated-overlay.gif);height:100%;filter:alpha(opacity=25);opacity:.25}.ui-progressbar-indeterminate .ui-progressbar-value{background-image:none} -------------------------------------------------------------------------------- /public/css/jquery/minified/jquery.ui.resizable.min.css: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.3 - 2013-05-03 2 | * http://jqueryui.com 3 | * Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */ 4 | 5 | .ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:.1px;display:block}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px} -------------------------------------------------------------------------------- /public/css/jquery/minified/jquery.ui.selectable.min.css: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.3 - 2013-05-03 2 | * http://jqueryui.com 3 | * Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */ 4 | 5 | .ui-selectable-helper{position:absolute;z-index:100;border:1px dotted #000} -------------------------------------------------------------------------------- /public/css/jquery/minified/jquery.ui.slider.min.css: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.3 - 2013-05-03 2 | * http://jqueryui.com 3 | * Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */ 4 | 5 | .ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{filter:inherit}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0} -------------------------------------------------------------------------------- /public/css/jquery/minified/jquery.ui.spinner.min.css: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.3 - 2013-05-03 2 | * http://jqueryui.com 3 | * Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */ 4 | 5 | .ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle}.ui-spinner-input{border:0;background:0;color:inherit;padding:0;margin:.2em 0;vertical-align:middle;margin-left:.4em;margin-right:22px}.ui-spinner-button{width:16px;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top:0;border-bottom:0;border-right:0}.ui-spinner .ui-icon{position:absolute;margin-top:-8px;top:50%;left:0}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-spinner .ui-icon-triangle-1-s{background-position:-65px -16px} -------------------------------------------------------------------------------- /public/css/jquery/minified/jquery.ui.tabs.min.css: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.3 - 2013-05-03 2 | * http://jqueryui.com 3 | * Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */ 4 | 5 | .ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav li a{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-active a,.ui-tabs .ui-tabs-nav li.ui-state-disabled a,.ui-tabs .ui-tabs-nav li.ui-tabs-loading a{cursor:text}.ui-tabs .ui-tabs-nav li a,.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:0} -------------------------------------------------------------------------------- /public/css/jquery/minified/jquery.ui.tooltip.min.css: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.3 - 2013-05-03 2 | * http://jqueryui.com 3 | * Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */ 4 | 5 | .ui-tooltip{padding:8px;position:absolute;z-index:9999;max-width:300px;-webkit-box-shadow:0 0 5px #aaa;box-shadow:0 0 5px #aaa}body .ui-tooltip{border-width:2px} -------------------------------------------------------------------------------- /public/css/parts/agent.css: -------------------------------------------------------------------------------- 1 | #AgentGrid{ 2 | width: 100%; 3 | } 4 | 5 | 6 | #AgentGrid li{ 7 | position:relative; 8 | list-style: none; 9 | vertical-align: top; 10 | margin: 0.8em 0.4em; 11 | padding:0.1em; 12 | background: #ccc; 13 | -webkit-box-shadow:-1px 1px 1px 0px rgba(0,0,0,0.3); 14 | -moz-box-shadow:-1px 1px 1px 0px rgba(0,0,0,0.3); 15 | box-shadow:-1px 1px 1px 0px rgba(0,0,0,0.3); 16 | } 17 | #AgentGrid li:before { 18 | content:""; 19 | position:absolute; 20 | top:0; 21 | right:0; 22 | border-color:#99CC00 #99CC00 #fff #fff; 23 | background: transparent; 24 | border-width:0 16px 16px 0 ; 25 | border-style:solid; 26 | -webkit-box-shadow:-1px 1px 1px 0px rgba(0,0,0,0.3); 27 | -moz-box-shadow:-1px 1px 1px 0px rgba(0,0,0,0.3); 28 | box-shadow:-1px 1px 1px 0px rgba(0,0,0,0.3); 29 | display:block; width:0; /* Firefox 3.0 damage limitation */ 30 | } 31 | 32 | #AgentGrid li.AgentBoxperson{ background: #fff; 33 | } 34 | #AgentGrid li.AgentBoxorganization{ background: #fff; 35 | } 36 | 37 | } 38 | #AgentGrid li.SearchBoxvocabulary{ 39 | border-bottom: 0.3em solid pink; 40 | } 41 | #AgentGrid li.SearchBoxinstance{ 42 | border-bottom: 0.3em solid purple; 43 | } 44 | #AgentGrid li.SearchBoxdatatype{ 45 | border-bottom: 0.3em solid green; 46 | } 47 | li.AgentBoxperson .AgentBoxHeader{background: orange;} 48 | li.AgentBoxorganization .AgentBoxHeader{background: #53A3B4;} 49 | .AgentBoxHeader, .AgentBoxBody{ 50 | margin:0.4em; 51 | padding:0.4em; 52 | } 53 | .AgentBoxHeader .name{ color:#FFF; font-weight:bold;} 54 | .AgentBoxHeader .type{ padding-left:0.4em; color:#4a4a4a; text-transform: capitalize;} 55 | .AgentBoxHeader .score{float:right; padding-left:0.4em; color:#fff; padding-right:0.2em; text-transform: capitalize;} 56 | .AgentBoxBody{font-size: .9em;} 57 | .SearcBodyProp{color: #008F00;} 58 | .SearcBodyLang{color: #008F00;} 59 | -------------------------------------------------------------------------------- /public/css/parts/aside.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/css/parts/aside.css -------------------------------------------------------------------------------- /public/css/parts/flatTable.css: -------------------------------------------------------------------------------- 1 | .flat-table { 2 | margin-bottom: 20px; 3 | border-collapse:collapse; 4 | border: none; 5 | border-radius: 3px; 6 | -webkit-border-radius: 3px; 7 | -moz-border-radius: 3px; 8 | } 9 | .flat-table th, .flat-table td { 10 | box-shadow: inset 0 0px rgba(0,0,0,0.25), 11 | inset 0 1px rgba(0,0,0,0.25); 12 | } 13 | .flat-table th { 14 | font-weight: normal; 15 | -webkit-font-smoothing: antialiased; 16 | padding: 1em; 17 | color: rgba(0,0,0,0.60); 18 | text-shadow: 0 0 1px rgba(0,0,0,0.1); 19 | font-size: 1.3em; 20 | } 21 | .flat-table td{ 22 | color: #f7f7f7; 23 | padding: 0.7em 1em 0.7em 1.15em; 24 | text-shadow: 0 0 1px rgba(255,255,255,0.1); 25 | font-size: 1em; 26 | } 27 | .flat-table td a{ 28 | color: #f7f7f7; 29 | } 30 | .flat-table tr { 31 | -webkit-transition: background 0.3s, box-shadow 0.3s; 32 | -moz-transition: background 0.3s, box-shadow 0.3s; 33 | transition: background 0.3s, box-shadow 0.3s; 34 | } 35 | .flat-table-3 { 36 | } 37 | .flat-table-3 tbody tr:hover { 38 | background: rgba(0,0,0,0.1); 39 | } 40 | .flat-table a { 41 | text-decoration: underline; 42 | } 43 | .flat-table a:hover{ 44 | color:#FFFFFF; 45 | } 46 | .flat-table .lang{ 47 | color:#B2DDB2; 48 | } 49 | 50 | .metadataFrame{ 51 | background-color: #F6F6F6; 52 | padding:.4em; 53 | } 54 | .metadataExpl{ 55 | padding:.5em; 56 | color:#FFFFFF; 57 | overflow:hidden; 58 | } 59 | .metadataContainerLang, .metadataContainerVocab, .metadataContainerPerson,.metadataContainerOrganization{ 60 | padding-left:.5em; 61 | } 62 | .metadataContainerLang{ 63 | border-left: 6px solid #8c564b; 64 | } 65 | .metadataContainerVocab{ 66 | border-left: 6px solid #9A69BD; 67 | } 68 | .metadataContainerPerson{ 69 | border-left: 6px solid #82C836; 70 | } 71 | .metadataContainerOrganization{ 72 | border-left: 6px solid #4A8806; 73 | } 74 | 75 | 76 | .metadata-table { 77 | border-collapse:collapse; 78 | border: none; 79 | border-radius: 3px; 80 | -webkit-border-radius: 3px; 81 | -moz-border-radius: 3px; 82 | } 83 | .metadata-table th, .metadata-table tr { 84 | border-top: 1px solid #dddddd; 85 | } 86 | .metadata-table.noheader tr:first-child { 87 | border-top: 0px; 88 | } 89 | .metadata-table th { 90 | font-weight: normal; 91 | -webkit-font-smoothing: antialiased; 92 | padding: 1em; 93 | color: #3c3c3c; 94 | text-shadow: 0 0 1px rgba(0,0,0,0.1); 95 | font-size: 1.3em; 96 | font-weight:bold 97 | } 98 | .metadata-table td{ 99 | color: #3c3c3c; 100 | padding: 0.7em 1em 0.7em 1.15em; 101 | text-shadow: 0 0 1px rgba(255,255,255,0.1); 102 | } 103 | .metadata-table td a{ 104 | color: #3c3c3c; 105 | text-decoration: underline; 106 | } 107 | .metadata-table tr { 108 | -webkit-transition: background 0.3s, box-shadow 0.3s; 109 | -moz-transition: background 0.3s, box-shadow 0.3s; 110 | transition: background 0.3s, box-shadow 0.3s; 111 | } 112 | .metadata-table-3 tbody tr:hover { 113 | background: rgba(0,0,0,0.1); 114 | } 115 | .metadata-table a:hover{ 116 | color:#000000; 117 | } 118 | .metadata-table .lang{ 119 | color:#008F00; 120 | } 121 | 122 | 123 | /*edition*/ 124 | 125 | .editionTable { 126 | border-collapse:collapse; 127 | border: none; 128 | width:100%; 129 | border-radius: 3px; 130 | -webkit-border-radius: 3px; 131 | -moz-border-radius: 3px; 132 | } 133 | .editionTable th, .editionTable tr { 134 | border-top: 1px solid #dddddd; 135 | } 136 | .editionTable tr { 137 | -webkit-transition: background 0.3s, box-shadow 0.3s; 138 | -moz-transition: background 0.3s, box-shadow 0.3s; 139 | transition: background 0.3s, box-shadow 0.3s; 140 | } 141 | .editionTable tbody tr:hover { 142 | background: rgba(0,0,0,0.05); 143 | } 144 | .editionTable tr:first-child { 145 | border-top: 0px; 146 | } 147 | .editionTable td{ 148 | color: #3c3c3c; 149 | padding: .5em; 150 | text-shadow: 0 0 1px rgba(255,255,255,0.1); 151 | } 152 | .editionTable td:first-child { 153 | width:15%; 154 | } -------------------------------------------------------------------------------- /public/css/parts/graph.css: -------------------------------------------------------------------------------- 1 | g.matchingQueryTerm > rect { 2 | fill: #A2DAD2; 3 | stroke-width: 2px; 4 | stroke: #333; 5 | } 6 | 7 | g.edgeLabel > rect { 8 | fill: #F6F6F6; 9 | } 10 | 11 | /*text { 12 | font-weight: 300; 13 | font-family: "Helvetica Neue", Helvetica, Arial, sans-serf; 14 | font-size: 14px; 15 | }*/ 16 | 17 | .node rect { 18 | stroke: #999; 19 | } 20 | 21 | .edgePath path { 22 | stroke: #333; 23 | stroke-width: 1.5px; 24 | fill: none; 25 | } 26 | 27 | 28 | .visus{ 29 | background-color:#F6F6F6; 30 | padding:.4em; 31 | overflow :hidden; 32 | } 33 | .visusContainerVocab{ 34 | border-left: 6px solid #9A69BD; 35 | padding-left:.4em; 36 | overflow :hidden; 37 | } 38 | .visusContainerPerson{ 39 | border-left: 6px solid #82C836; 40 | padding-left:.4em; 41 | overflow :hidden; 42 | } 43 | .visusContainerOrganization{ 44 | border-left: 6px solid #4A8806; 45 | padding-left:.4em; 46 | overflow :hidden; 47 | } 48 | 49 | .timeline-band-0 .timeline-band-layer .timeline-ether-bg { 50 | /*background-color: #0F5656;*/ 51 | background-color: #F6F6F6; 52 | } 53 | /* .timeline-band-0 .timeline-band-layer .timeline-ether-lines { 54 | background-color: #CCCCCC; 55 | } 56 | .timeline-band-0 .timeline-band-layer-inner .timeline-event-label { 57 | color: #FFFFFF; 58 | }*/ 59 | 60 | /* CSS for charts */ 61 | .tick line {display:none} 62 | .nv-y {display:none} 63 | 64 | /* LEGEND */ 65 | ul.visusLegend { list-style-type: none; } 66 | .visusLegend li { 67 | float:left; 68 | padding-right:1em; 69 | padding-top:1em; 70 | } 71 | .visusLegend li .color{ 72 | width:1em; 73 | height:1em; 74 | display:block; 75 | float:left; 76 | } 77 | .visusLegend li .linkName{ 78 | padding-left:.3em; 79 | color:#FFFFFF; 80 | } -------------------------------------------------------------------------------- /public/css/parts/header.css: -------------------------------------------------------------------------------- 1 | ul.editionAuth li { 2 | float: left; 3 | list-style-type: none; 4 | padding-right: 10px; 5 | padding-top: 10px; 6 | color: #999999; 7 | } -------------------------------------------------------------------------------- /public/css/parts/ribbon.css: -------------------------------------------------------------------------------- 1 | .overflowVisible{ 2 | overflow: visible; 3 | display:block; 4 | } 5 | 6 | .ribbonContainerLeft h2{ 7 | position:relative; 8 | color:#fff; 9 | background:#658E15; 10 | font-size:1.5em; 11 | float:left; 12 | padding:10px 10px 10px 20px; 13 | margin-left:-2.5em; 14 | 15 | -moz-box-shadow:2px 2px 0 rgba(0,0,0,0.1); 16 | -webkit-box-shadow:2px 2px 0 rgba(0,0,0,0.1); 17 | -o-box-shadow:2px 2px 0 rgba(0,0,0,0.1); 18 | box-shadow:2px 2px 0 rgba(0,0,0,0.1); 19 | } 20 | .ribbonContainerLeft h2:before{ 21 | content: ""; 22 | position:absolute; 23 | bottom:-8px; 24 | left:0; 25 | width:0; 26 | border-width: 0px 12px 8px 0; 27 | border-style: solid; 28 | border-color: transparent #3D550D transparent transparent ; 29 | display:block; 30 | } 31 | .ribbonContainerLeft{ 32 | background-color: #99CC00; 33 | } 34 | 35 | #post2, #post3{ 36 | margin-left: 3em; 37 | margin-right: 3em; 38 | margin-top: 1em; 39 | margin-bottom: 1.5em; 40 | padding-left: 3em; 41 | padding-right: 3em; 42 | padding-top: 1.5em; 43 | padding-bottom: 1.5em; 44 | overflow: visible; 45 | display: block; 46 | } 47 | #post2.postGreen h2{ 48 | position:relative; 49 | color:#fff; 50 | background:#658E15; 51 | font-size:1.5em; 52 | float:left; 53 | padding:10px 10px 10px 20px; 54 | margin-left:-2.5em; 55 | 56 | -moz-box-shadow:2px 2px 0 rgba(0,0,0,0.1); 57 | -webkit-box-shadow:2px 2px 0 rgba(0,0,0,0.1); 58 | -o-box-shadow:2px 2px 0 rgba(0,0,0,0.1); 59 | box-shadow:2px 2px 0 rgba(0,0,0,0.1); 60 | } 61 | #post2.postGreen h2:before{ 62 | content: ""; 63 | position:absolute; 64 | bottom:-8px; 65 | left:0; 66 | width:0; 67 | border-width: 0px 12px 8px 0; 68 | border-style: solid; 69 | border-color: transparent #3D550D transparent transparent ; 70 | display:block; 71 | } 72 | #post2,#post3.postGreen{ 73 | background-color: #99CC00; 74 | } 75 | .clearBoth{ 76 | clear:both;} 77 | 78 | #post3.postGreen h2{ 79 | position:relative; 80 | color:#fff; 81 | background:#658E15; 82 | font-size:1.5em; 83 | float:right; 84 | padding:10px 10px 10px 20px; 85 | margin-right:-2.5em; 86 | 87 | -moz-box-shadow:-2px 2px 0 rgba(0,0,0,0.1); 88 | -webkit-box-shadow:-2px 2px 0 rgba(0,0,0,0.1); 89 | -o-box-shadow:-2px 2px 0 rgba(0,0,0,0.1); 90 | box-shadow:-2px 2px 0 rgba(0,0,0,0.1); 91 | } 92 | #post3.postGreen h2:before{ 93 | content: ""; 94 | position:absolute; 95 | bottom:-8px; 96 | right:0; 97 | width:0; 98 | border-width: 8px 12px 0px 0; 99 | border-style: solid; 100 | border-color: #3D550D transparent transparent transparent ; 101 | display:block; 102 | } 103 | 104 | -------------------------------------------------------------------------------- /public/css/parts/suggest.css: -------------------------------------------------------------------------------- 1 | .suggestMessageBox{ 2 | font-size:115%; 3 | padding:1em 2em; 4 | color: #FFFFFF; 5 | text-shadow: 1px 1px 5px #646464; 6 | } 7 | 8 | .suggestMessageBox a{ 9 | text-shadow: 0px 0px 0px #646464; 10 | padding: 1px 4px 3px; 11 | border-radius: 3px; 12 | margin-left:0.2em; 13 | margin-right:0.2em; 14 | -webkit-border-radius: 3px; 15 | -moz-border-radius: 3px; 16 | box-shadow: inset 0px 0px 3px rgba(0, 0, 0, 0.7); 17 | -o-box-shadow: inset 0px 0px 3px rgba(0, 0, 0, 0.7); 18 | -moz-box-shadow: inset 0px 0px 3px rgba(0, 0, 0, 0.7); 19 | -webkit-box-shadow: inset 0px 0px 3px rgba(0, 0, 0, 0.7); 20 | -moz-transition-delay: initial; 21 | -moz-transition-duration: 0.2s; 22 | -moz-transition-property: box-shadow -moz-box-shadow -webkit-box-shadow -o-box-shadow; 23 | -moz-transition-timing-function: ease-in-out; 24 | -webkit-transition-delay: initial; 25 | -webkit-transition-duration: 0.2s; 26 | -webkit-transition-property: box-shadow -moz-box-shadow -webkit-box-shadow -o-box-shadow; 27 | -webkit-transition-timing-function: ease-in-out; 28 | -o-transition-delay: initial; 29 | -o-transition-duration: 0.2s; 30 | -o-transition-property: box-shadow -moz-box-shadow -webkit-box-shadow -o-box-shadow; 31 | -o-transition-timing-function: ease-in-out; 32 | transition-delay: initial; 33 | transition-duration: 0.2s; 34 | transition-property: box-shadow -moz-box-shadow -webkit-box-shadow -o-box-shadow; 35 | transition-timing-function: ease-in-out; 36 | background-color: #e7e7e7; 37 | } 38 | .suggestMessageBox a:hover{ 39 | box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.3); 40 | -o-box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.3); 41 | -moz-box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.3); 42 | -webkit-box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.3); 43 | background-color: white; -------------------------------------------------------------------------------- /public/css/parts/table.css: -------------------------------------------------------------------------------- 1 | table.indexList a:link { 2 | color: #666; 3 | font-weight: bold; 4 | text-decoration:none; 5 | } 6 | table.indexList a:visited { 7 | color: #999999; 8 | font-weight:bold; 9 | text-decoration:none; 10 | } 11 | table.indexList a:active, 12 | table.indexList a:hover { 13 | color: #bd5a35; 14 | text-decoration:underline; 15 | } 16 | table.indexList { 17 | font-family:Arial, Helvetica, sans-serif; 18 | color:#666; 19 | font-size:12px; 20 | text-shadow: 1px 1px 0px #fff; 21 | background:#eaebec; 22 | margin:20px; 23 | border:#ccc 1px solid; 24 | border-spacing: 0; 25 | -moz-border-radius:3px; 26 | -webkit-border-radius:3px; 27 | border-radius:3px; 28 | 29 | -moz-box-shadow: 0 1px 2px #d1d1d1; 30 | -webkit-box-shadow: 0 1px 2px #d1d1d1; 31 | box-shadow: 0 1px 2px #d1d1d1; 32 | } 33 | table.indexList th { 34 | padding:21px 25px 22px 25px; 35 | font-size:14px; 36 | border-top:1px solid #fafafa; 37 | border-bottom:1px solid #e0e0e0; 38 | 39 | background: #ededed; 40 | background: -webkit-gradient(linear, left top, left bottom, from(#ededed), to(#ebebeb)); 41 | background: -moz-linear-gradient(top, #ededed, #ebebeb); 42 | } 43 | table.indexList th:first-child { 44 | text-align: left; 45 | padding-left:20px; 46 | } 47 | table.indexList tr:first-child th:first-child { 48 | -moz-border-radius-topleft:3px; 49 | -webkit-border-top-left-radius:3px; 50 | border-top-left-radius:3px; 51 | } 52 | table.indexList tr:first-child th:last-child { 53 | -moz-border-radius-topright:3px; 54 | -webkit-border-top-right-radius:3px; 55 | border-top-right-radius:3px; 56 | } 57 | table.indexList tr { 58 | text-align: left; 59 | padding-left:20px; 60 | } 61 | table.indexList td:first-child { 62 | text-align: left; 63 | padding-left:20px; 64 | border-left: 0; 65 | } 66 | table.indexList td { 67 | padding:8px; 68 | border-top: 1px solid #ffffff; 69 | border-bottom:1px solid #e0e0e0; 70 | border-left: 1px solid #e0e0e0; 71 | 72 | background: #fafafa; 73 | background: -webkit-gradient(linear, left top, left bottom, from(#fbfbfb), to(#fafafa)); 74 | background: -moz-linear-gradient(top, #fbfbfb, #fafafa); 75 | } 76 | table.indexList tr.even td { 77 | background: #f6f6f6; 78 | background: -webkit-gradient(linear, left top, left bottom, from(#f8f8f8), to(#f6f6f6)); 79 | background: -moz-linear-gradient(top, #f8f8f8, #f6f6f6); 80 | } 81 | table.indexList tr:last-child td { 82 | border-bottom:0; 83 | } 84 | table.indexList tr:last-child td:first-child { 85 | -moz-border-radius-bottomleft:3px; 86 | -webkit-border-bottom-left-radius:3px; 87 | border-bottom-left-radius:3px; 88 | } 89 | table.indexList tr:last-child td:last-child { 90 | -moz-border-radius-bottomright:3px; 91 | -webkit-border-bottom-right-radius:3px; 92 | border-bottom-right-radius:3px; 93 | } 94 | table.indexList tr:hover td { 95 | background: #f2f2f2; 96 | background: -webkit-gradient(linear, left top, left bottom, from(#f2f2f2), to(#f0f0f0)); 97 | background: -moz-linear-gradient(top, #f2f2f2, #f0f0f0); 98 | } -------------------------------------------------------------------------------- /public/css/style_ext.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/css/style_ext.css -------------------------------------------------------------------------------- /public/img/Edit_grey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/img/Edit_grey.png -------------------------------------------------------------------------------- /public/img/LOV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/img/LOV.png -------------------------------------------------------------------------------- /public/img/LOV_small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/img/LOV_small.png -------------------------------------------------------------------------------- /public/img/LOV_white_small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/img/LOV_white_small.png -------------------------------------------------------------------------------- /public/img/SES.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/img/SES.png -------------------------------------------------------------------------------- /public/img/SES_small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/img/SES_small.png -------------------------------------------------------------------------------- /public/img/SES_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/img/SES_white.png -------------------------------------------------------------------------------- /public/img/SES_white_small - Copy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/img/SES_white_small - Copy.png -------------------------------------------------------------------------------- /public/img/add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/img/add.png -------------------------------------------------------------------------------- /public/img/add_grey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/img/add_grey.png -------------------------------------------------------------------------------- /public/img/alert.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/img/alert.png -------------------------------------------------------------------------------- /public/img/check.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/img/check.png -------------------------------------------------------------------------------- /public/img/contributors/bv.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/img/contributors/bv.jpg -------------------------------------------------------------------------------- /public/img/contributors/pyv.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/img/contributors/pyv.jpg -------------------------------------------------------------------------------- /public/img/cursor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/img/cursor.png -------------------------------------------------------------------------------- /public/img/document.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/img/document.png -------------------------------------------------------------------------------- /public/img/edit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/img/edit.png -------------------------------------------------------------------------------- /public/img/edit_small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/img/edit_small.png -------------------------------------------------------------------------------- /public/img/facebook.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/img/facebook.png -------------------------------------------------------------------------------- /public/img/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/img/favicon.ico -------------------------------------------------------------------------------- /public/img/github.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/img/github.png -------------------------------------------------------------------------------- /public/img/glyphicons-halflings-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/img/glyphicons-halflings-white.png -------------------------------------------------------------------------------- /public/img/glyphicons-halflings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/img/glyphicons-halflings.png -------------------------------------------------------------------------------- /public/img/google.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/img/google.png -------------------------------------------------------------------------------- /public/img/gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/img/gray.png -------------------------------------------------------------------------------- /public/img/green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/img/green.png -------------------------------------------------------------------------------- /public/img/icon-LOV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/img/icon-LOV.png -------------------------------------------------------------------------------- /public/img/key.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/img/key.png -------------------------------------------------------------------------------- /public/img/linkedin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/img/linkedin.png -------------------------------------------------------------------------------- /public/img/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/img/loading.gif -------------------------------------------------------------------------------- /public/img/more.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/img/more.png -------------------------------------------------------------------------------- /public/img/n3_small.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/img/n3_small.gif -------------------------------------------------------------------------------- /public/img/nq_small.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/img/nq_small.gif -------------------------------------------------------------------------------- /public/img/okfn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/img/okfn.png -------------------------------------------------------------------------------- /public/img/ontomaton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/img/ontomaton.png -------------------------------------------------------------------------------- /public/img/ontowiki.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/img/ontowiki.png -------------------------------------------------------------------------------- /public/img/oops.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/img/oops.png -------------------------------------------------------------------------------- /public/img/orange.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/img/orange.png -------------------------------------------------------------------------------- /public/img/parrot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/img/parrot.png -------------------------------------------------------------------------------- /public/img/partners/datalift.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/img/partners/datalift.jpg -------------------------------------------------------------------------------- /public/img/partners/fujitsu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/img/partners/fujitsu.png -------------------------------------------------------------------------------- /public/img/partners/inserm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/img/partners/inserm.png -------------------------------------------------------------------------------- /public/img/partners/joinup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/img/partners/joinup.png -------------------------------------------------------------------------------- /public/img/partners/mondeca.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/img/partners/mondeca.png -------------------------------------------------------------------------------- /public/img/partners/w3c.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/img/partners/w3c.png -------------------------------------------------------------------------------- /public/img/pdf.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/img/pdf.gif -------------------------------------------------------------------------------- /public/img/red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/img/red.png -------------------------------------------------------------------------------- /public/img/remove.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/img/remove.png -------------------------------------------------------------------------------- /public/img/remove_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/img/remove_white.png -------------------------------------------------------------------------------- /public/img/robot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/img/robot.png -------------------------------------------------------------------------------- /public/img/search-sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/img/search-sprite.png -------------------------------------------------------------------------------- /public/img/search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/img/search.png -------------------------------------------------------------------------------- /public/img/take_action.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/img/take_action.png -------------------------------------------------------------------------------- /public/img/twitter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/img/twitter.png -------------------------------------------------------------------------------- /public/img/upload.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/img/upload.png -------------------------------------------------------------------------------- /public/img/validate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/img/validate.png -------------------------------------------------------------------------------- /public/img/vapour.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/img/vapour.gif -------------------------------------------------------------------------------- /public/img/version.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/img/version.png -------------------------------------------------------------------------------- /public/img/viz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/img/viz.png -------------------------------------------------------------------------------- /public/img/warning_red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/img/warning_red.png -------------------------------------------------------------------------------- /public/img/yasgui.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/img/yasgui.png -------------------------------------------------------------------------------- /public/js/app.js: -------------------------------------------------------------------------------- 1 | $(document).ready(function () { 2 | 3 | // confirmations 4 | $('.confirm').submit(function (e) { 5 | e.preventDefault(); 6 | var self = this; 7 | var msg = 'Are you sure?'; 8 | bootbox.confirm(msg, 'cancel', 'Yes! I am sure', function (action) { 9 | if (action) { 10 | $(self).unbind('submit'); 11 | $(self).trigger('submit'); 12 | } 13 | }); 14 | }); 15 | 16 | $('#tags').tagsInput({ 17 | 'height':'60px', 18 | 'width':'280px' 19 | }); 20 | 21 | }); 22 | -------------------------------------------------------------------------------- /public/js/autocomplete.js: -------------------------------------------------------------------------------- 1 | $(document).ready(function() { 2 | $('input.typeahead').typeahead({ 3 | source: function (query, process) { 4 | $.ajax({ 5 | url: '/api/endpointsAutoComplete', 6 | type: 'POST', 7 | dataType: 'JSON', 8 | data: 'q=' + query, 9 | success: function(data) { 10 | console.log(data); 11 | process(data); 12 | } 13 | }); 14 | } 15 | }); 16 | }); -------------------------------------------------------------------------------- /public/js/fisheye.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | d3.fisheye = { 3 | scale: function(scaleType) { 4 | return d3_fisheye_scale(scaleType(), 3, 0); 5 | }, 6 | circular: function() { 7 | var radius = 200, 8 | distortion = 2, 9 | k0, 10 | k1, 11 | focus = [0, 0]; 12 | 13 | function fisheye(d) { 14 | var dx = d.x - focus[0], 15 | dy = d.y - focus[1], 16 | dd = Math.sqrt(dx * dx + dy * dy); 17 | if (!dd || dd >= radius) return {x: d.x, y: d.y, z: 1}; 18 | var k = k0 * (1 - Math.exp(-dd * k1)) / dd * .75 + .25; 19 | return {x: focus[0] + dx * k, y: focus[1] + dy * k, z: Math.min(k, 10)}; 20 | } 21 | 22 | function rescale() { 23 | k0 = Math.exp(distortion); 24 | k0 = k0 / (k0 - 1) * radius; 25 | k1 = distortion / radius; 26 | return fisheye; 27 | } 28 | 29 | fisheye.radius = function(_) { 30 | if (!arguments.length) return radius; 31 | radius = +_; 32 | return rescale(); 33 | }; 34 | 35 | fisheye.distortion = function(_) { 36 | if (!arguments.length) return distortion; 37 | distortion = +_; 38 | return rescale(); 39 | }; 40 | 41 | fisheye.focus = function(_) { 42 | if (!arguments.length) return focus; 43 | focus = _; 44 | return fisheye; 45 | }; 46 | 47 | return rescale(); 48 | } 49 | }; 50 | 51 | function d3_fisheye_scale(scale, d, a) { 52 | 53 | function fisheye(_) { 54 | var x = scale(_), 55 | left = x < a, 56 | v, 57 | range = d3.extent(scale.range()), 58 | min = range[0], 59 | max = range[1], 60 | m = left ? a - min : max - a; 61 | if (m == 0) m = max - min; 62 | return (left ? -1 : 1) * m * (d + 1) / (d + (m / Math.abs(x - a))) + a; 63 | } 64 | 65 | fisheye.distortion = function(_) { 66 | if (!arguments.length) return d; 67 | d = +_; 68 | return fisheye; 69 | }; 70 | 71 | fisheye.focus = function(_) { 72 | if (!arguments.length) return a; 73 | a = +_; 74 | return fisheye; 75 | }; 76 | 77 | fisheye.copy = function() { 78 | return d3_fisheye_scale(scale.copy(), d, a); 79 | }; 80 | 81 | fisheye.nice = scale.nice; 82 | fisheye.ticks = scale.ticks; 83 | fisheye.tickFormat = scale.tickFormat; 84 | return d3.rebind(fisheye, scale, "domain", "range"); 85 | } 86 | })(); 87 | -------------------------------------------------------------------------------- /public/js/form2js/jquery.toObject.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2010 Maxim Vasiliev 3 | * 4 | * Permission is hereby granted, free of charge, to any person obtaining a copy 5 | * of this software and associated documentation files (the "Software"), to deal 6 | * in the Software without restriction, including without limitation the rights 7 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | * copies of the Software, and to permit persons to whom the Software is 9 | * furnished to do so, subject to the following conditions: 10 | * 11 | * The above copyright notice and this permission notice shall be included in 12 | * all copies or substantial portions of the Software. 13 | * 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20 | * THE SOFTWARE. 21 | * 22 | * @author Maxim Vasiliev 23 | * Date: 29.06.11 24 | * Time: 20:09 25 | */ 26 | 27 | (function($){ 28 | 29 | /** 30 | * jQuery wrapper for form2object() 31 | * Extracts data from child inputs into javascript object 32 | */ 33 | $.fn.toObject = function(options) 34 | { 35 | var result = [], 36 | settings = { 37 | mode: 'first', // what to convert: 'all' or 'first' matched node 38 | delimiter: ".", 39 | skipEmpty: true, 40 | nodeCallback: null, 41 | useIdIfEmptyName: false 42 | }; 43 | 44 | if (options) 45 | { 46 | $.extend(settings, options); 47 | } 48 | 49 | switch(settings.mode) 50 | { 51 | case 'first': 52 | return form2js(this.get(0), settings.delimiter, settings.skipEmpty, settings.nodeCallback, settings.useIdIfEmptyName); 53 | break; 54 | case 'all': 55 | this.each(function(){ 56 | result.push(form2js(this, settings.delimiter, settings.skipEmpty, settings.nodeCallback, settings.useIdIfEmptyName)); 57 | }); 58 | return result; 59 | break; 60 | case 'combine': 61 | return form2js(Array.prototype.slice.call(this), settings.delimiter, settings.skipEmpty, settings.nodeCallback, settings.useIdIfEmptyName); 62 | break; 63 | } 64 | } 65 | 66 | })(jQuery); -------------------------------------------------------------------------------- /public/js/hive.js: -------------------------------------------------------------------------------- 1 | d3.hive = {}; 2 | 3 | d3.hive.link = function() { 4 | var source = function(d) { return d.source; }, 5 | target = function(d) { return d.target; }, 6 | angle = function(d) { return d.angle; }, 7 | startRadius = function(d) { return d.radius; }, 8 | endRadius = startRadius, 9 | arcOffset = -Math.PI / 2; 10 | 11 | function link(d, i) { 12 | var s = node(source, this, d, i), 13 | t = node(target, this, d, i), 14 | x; 15 | if (t.a < s.a) x = t, t = s, s = x; 16 | if (t.a - s.a > Math.PI) s.a += 2 * Math.PI; 17 | var a1 = s.a + (t.a - s.a) / 3, 18 | a2 = t.a - (t.a - s.a) / 3; 19 | return s.r0 - s.r1 || t.r0 - t.r1 20 | ? "M" + Math.cos(s.a) * s.r0 + "," + Math.sin(s.a) * s.r0 21 | + "L" + Math.cos(s.a) * s.r1 + "," + Math.sin(s.a) * s.r1 22 | + "C" + Math.cos(a1) * s.r1 + "," + Math.sin(a1) * s.r1 23 | + " " + Math.cos(a2) * t.r1 + "," + Math.sin(a2) * t.r1 24 | + " " + Math.cos(t.a) * t.r1 + "," + Math.sin(t.a) * t.r1 25 | + "L" + Math.cos(t.a) * t.r0 + "," + Math.sin(t.a) * t.r0 26 | + "C" + Math.cos(a2) * t.r0 + "," + Math.sin(a2) * t.r0 27 | + " " + Math.cos(a1) * s.r0 + "," + Math.sin(a1) * s.r0 28 | + " " + Math.cos(s.a) * s.r0 + "," + Math.sin(s.a) * s.r0 29 | : "M" + Math.cos(s.a) * s.r0 + "," + Math.sin(s.a) * s.r0 30 | + "C" + Math.cos(a1) * s.r1 + "," + Math.sin(a1) * s.r1 31 | + " " + Math.cos(a2) * t.r1 + "," + Math.sin(a2) * t.r1 32 | + " " + Math.cos(t.a) * t.r1 + "," + Math.sin(t.a) * t.r1; 33 | } 34 | 35 | function node(method, thiz, d, i) { 36 | var node = method.call(thiz, d, i), 37 | a = +(typeof angle === "function" ? angle.call(thiz, node, i) : angle) + arcOffset, 38 | r0 = +(typeof startRadius === "function" ? startRadius.call(thiz, node, i) : startRadius), 39 | r1 = (startRadius === endRadius ? r0 : +(typeof endRadius === "function" ? endRadius.call(thiz, node, i) : endRadius)); 40 | return {r0: r0, r1: r1, a: a}; 41 | } 42 | 43 | link.source = function(_) { 44 | if (!arguments.length) return source; 45 | source = _; 46 | return link; 47 | }; 48 | 49 | link.target = function(_) { 50 | if (!arguments.length) return target; 51 | target = _; 52 | return link; 53 | }; 54 | 55 | link.angle = function(_) { 56 | if (!arguments.length) return angle; 57 | angle = _; 58 | return link; 59 | }; 60 | 61 | link.radius = function(_) { 62 | if (!arguments.length) return startRadius; 63 | startRadius = endRadius = _; 64 | return link; 65 | }; 66 | 67 | link.startRadius = function(_) { 68 | if (!arguments.length) return startRadius; 69 | startRadius = _; 70 | return link; 71 | }; 72 | 73 | link.endRadius = function(_) { 74 | if (!arguments.length) return endRadius; 75 | endRadius = _; 76 | return link; 77 | }; 78 | 79 | return link; 80 | }; 81 | -------------------------------------------------------------------------------- /public/js/jquery-ui-1.11.2/images/ui-bg_diagonals-thick_18_b81900_40x40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/js/jquery-ui-1.11.2/images/ui-bg_diagonals-thick_18_b81900_40x40.png -------------------------------------------------------------------------------- /public/js/jquery-ui-1.11.2/images/ui-bg_diagonals-thick_20_666666_40x40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/js/jquery-ui-1.11.2/images/ui-bg_diagonals-thick_20_666666_40x40.png -------------------------------------------------------------------------------- /public/js/jquery-ui-1.11.2/images/ui-bg_flat_10_000000_40x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/js/jquery-ui-1.11.2/images/ui-bg_flat_10_000000_40x100.png -------------------------------------------------------------------------------- /public/js/jquery-ui-1.11.2/images/ui-bg_glass_100_f6f6f6_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/js/jquery-ui-1.11.2/images/ui-bg_glass_100_f6f6f6_1x400.png -------------------------------------------------------------------------------- /public/js/jquery-ui-1.11.2/images/ui-bg_glass_100_fdf5ce_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/js/jquery-ui-1.11.2/images/ui-bg_glass_100_fdf5ce_1x400.png -------------------------------------------------------------------------------- /public/js/jquery-ui-1.11.2/images/ui-bg_glass_65_ffffff_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/js/jquery-ui-1.11.2/images/ui-bg_glass_65_ffffff_1x400.png -------------------------------------------------------------------------------- /public/js/jquery-ui-1.11.2/images/ui-bg_gloss-wave_35_f6a828_500x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/js/jquery-ui-1.11.2/images/ui-bg_gloss-wave_35_f6a828_500x100.png -------------------------------------------------------------------------------- /public/js/jquery-ui-1.11.2/images/ui-bg_highlight-soft_100_eeeeee_1x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/js/jquery-ui-1.11.2/images/ui-bg_highlight-soft_100_eeeeee_1x100.png -------------------------------------------------------------------------------- /public/js/jquery-ui-1.11.2/images/ui-bg_highlight-soft_75_ffe45c_1x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/js/jquery-ui-1.11.2/images/ui-bg_highlight-soft_75_ffe45c_1x100.png -------------------------------------------------------------------------------- /public/js/jquery-ui-1.11.2/images/ui-icons_222222_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/js/jquery-ui-1.11.2/images/ui-icons_222222_256x240.png -------------------------------------------------------------------------------- /public/js/jquery-ui-1.11.2/images/ui-icons_228ef1_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/js/jquery-ui-1.11.2/images/ui-icons_228ef1_256x240.png -------------------------------------------------------------------------------- /public/js/jquery-ui-1.11.2/images/ui-icons_ef8c08_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/js/jquery-ui-1.11.2/images/ui-icons_ef8c08_256x240.png -------------------------------------------------------------------------------- /public/js/jquery-ui-1.11.2/images/ui-icons_ffd27a_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/js/jquery-ui-1.11.2/images/ui-icons_ffd27a_256x240.png -------------------------------------------------------------------------------- /public/js/jquery-ui-1.11.2/images/ui-icons_ffffff_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/js/jquery-ui-1.11.2/images/ui-icons_ffffff_256x240.png -------------------------------------------------------------------------------- /public/js/jquery.fittext.js: -------------------------------------------------------------------------------- 1 | /*global jQuery */ 2 | /*! 3 | * FitText.js 1.2 4 | * 5 | * Copyright 2011, Dave Rupert http://daverupert.com 6 | * Released under the WTFPL license 7 | * http://sam.zoy.org/wtfpl/ 8 | * 9 | * Date: Thu May 05 14:23:00 2011 -0600 10 | */ 11 | 12 | (function( $ ){ 13 | 14 | $.fn.fitText = function( kompressor, options ) { 15 | 16 | // Setup options 17 | var compressor = kompressor || 1, 18 | settings = $.extend({ 19 | 'minFontSize' : Number.NEGATIVE_INFINITY, 20 | 'maxFontSize' : Number.POSITIVE_INFINITY 21 | }, options); 22 | 23 | return this.each(function(){ 24 | 25 | // Store the object 26 | var $this = $(this); 27 | 28 | // Resizer() resizes items based on the object width divided by the compressor * 10 29 | var resizer = function () { 30 | $this.css('font-size', Math.max(Math.min($this.width() / (compressor*10), parseFloat(settings.maxFontSize)), parseFloat(settings.minFontSize))); 31 | }; 32 | 33 | // Call once to set. 34 | resizer(); 35 | 36 | // Call on resize. Opera debounces their resize by default. 37 | $(window).on('resize.fittext orientationchange.fittext', resizer); 38 | 39 | }); 40 | 41 | }; 42 | 43 | })( jQuery ); -------------------------------------------------------------------------------- /public/js/jquery.ui.core.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.3 - 2013-05-03 2 | * http://jqueryui.com 3 | * Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */ 4 | (function(e,t){function i(t,i){var a,n,r,o=t.nodeName.toLowerCase();return"area"===o?(a=t.parentNode,n=a.name,t.href&&n&&"map"===a.nodeName.toLowerCase()?(r=e("img[usemap=#"+n+"]")[0],!!r&&s(r)):!1):(/input|select|textarea|button|object/.test(o)?!t.disabled:"a"===o?t.href||i:i)&&s(t)}function s(t){return e.expr.filters.visible(t)&&!e(t).parents().addBack().filter(function(){return"hidden"===e.css(this,"visibility")}).length}var a=0,n=/^ui-id-\d+$/;e.ui=e.ui||{},e.extend(e.ui,{version:"1.10.3",keyCode:{BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38}}),e.fn.extend({focus:function(t){return function(i,s){return"number"==typeof i?this.each(function(){var t=this;setTimeout(function(){e(t).focus(),s&&s.call(t)},i)}):t.apply(this,arguments)}}(e.fn.focus),scrollParent:function(){var t;return t=e.ui.ie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(e.css(this,"position"))&&/(auto|scroll)/.test(e.css(this,"overflow")+e.css(this,"overflow-y")+e.css(this,"overflow-x"))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(e.css(this,"overflow")+e.css(this,"overflow-y")+e.css(this,"overflow-x"))}).eq(0),/fixed/.test(this.css("position"))||!t.length?e(document):t},zIndex:function(i){if(i!==t)return this.css("zIndex",i);if(this.length)for(var s,a,n=e(this[0]);n.length&&n[0]!==document;){if(s=n.css("position"),("absolute"===s||"relative"===s||"fixed"===s)&&(a=parseInt(n.css("zIndex"),10),!isNaN(a)&&0!==a))return a;n=n.parent()}return 0},uniqueId:function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++a)})},removeUniqueId:function(){return this.each(function(){n.test(this.id)&&e(this).removeAttr("id")})}}),e.extend(e.expr[":"],{data:e.expr.createPseudo?e.expr.createPseudo(function(t){return function(i){return!!e.data(i,t)}}):function(t,i,s){return!!e.data(t,s[3])},focusable:function(t){return i(t,!isNaN(e.attr(t,"tabindex")))},tabbable:function(t){var s=e.attr(t,"tabindex"),a=isNaN(s);return(a||s>=0)&&i(t,!a)}}),e("").outerWidth(1).jquery||e.each(["Width","Height"],function(i,s){function a(t,i,s,a){return e.each(n,function(){i-=parseFloat(e.css(t,"padding"+this))||0,s&&(i-=parseFloat(e.css(t,"border"+this+"Width"))||0),a&&(i-=parseFloat(e.css(t,"margin"+this))||0)}),i}var n="Width"===s?["Left","Right"]:["Top","Bottom"],r=s.toLowerCase(),o={innerWidth:e.fn.innerWidth,innerHeight:e.fn.innerHeight,outerWidth:e.fn.outerWidth,outerHeight:e.fn.outerHeight};e.fn["inner"+s]=function(i){return i===t?o["inner"+s].call(this):this.each(function(){e(this).css(r,a(this,i)+"px")})},e.fn["outer"+s]=function(t,i){return"number"!=typeof t?o["outer"+s].call(this,t):this.each(function(){e(this).css(r,a(this,t,!0,i)+"px")})}}),e.fn.addBack||(e.fn.addBack=function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}),e("").data("a-b","a").removeData("a-b").data("a-b")&&(e.fn.removeData=function(t){return function(i){return arguments.length?t.call(this,e.camelCase(i)):t.call(this)}}(e.fn.removeData)),e.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase()),e.support.selectstart="onselectstart"in document.createElement("div"),e.fn.extend({disableSelection:function(){return this.bind((e.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(e){e.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}}),e.extend(e.ui,{plugin:{add:function(t,i,s){var a,n=e.ui[t].prototype;for(a in s)n.plugins[a]=n.plugins[a]||[],n.plugins[a].push([i,s[a]])},call:function(e,t,i){var s,a=e.plugins[t];if(a&&e.element[0].parentNode&&11!==e.element[0].parentNode.nodeType)for(s=0;a.length>s;s++)e.options[a[s][0]]&&a[s][1].apply(e.element,i)}},hasScroll:function(t,i){if("hidden"===e(t).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",a=!1;return t[s]>0?!0:(t[s]=1,a=t[s]>0,t[s]=0,a)}})})(jQuery); -------------------------------------------------------------------------------- /public/js/multiselect/img/expand.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/js/multiselect/img/expand.png -------------------------------------------------------------------------------- /public/js/multiselect/jquery-gentleSelect.css: -------------------------------------------------------------------------------- 1 | .gentleselect-data { display: none; } 2 | 3 | .gentleselect-label { 4 | padding: 1px 20px 1px 20px; 5 | background-color: #eee; 6 | 7 | border: 2px solid #ddd; 8 | -moz-border-radius: 5px; 9 | -webkit-border-radius: 5px; 10 | border-radius: 5px; 11 | 12 | background-repeat: no-repeat; 13 | background-position: center right; 14 | 15 | cursor: pointer; 16 | color: #555; 17 | } 18 | 19 | .gentleselect-label-highlight { 20 | border: 2px solid #aaa; 21 | background-image: url('img/expand.png'); 22 | } 23 | 24 | .gentleselect-dialog { 25 | position: absolute; 26 | z-index: 500; 27 | display: none; 28 | 29 | background-color: #fff; 30 | border: 1px solid #999; 31 | 32 | -moz-box-shadow: 0px 0px 3px #555; 33 | -webkit-box-shadow: 0px 0px 3px #555; 34 | box-shadow: 0px 0px 3px #555; 35 | 36 | margin: 0; padding: 0; 37 | } 38 | 39 | .gentleselect-dialog > ul { padding: 0; margin: 0; list-style: none; } 40 | .gentleselect-dialog > ul > li { 41 | margin: 0; 42 | padding: 3px 20px 3px 25px; 43 | 44 | cursor: pointer; 45 | } 46 | .gentleselect-dialog > ul > li.selected { 47 | /*font-weight: bold;*/ 48 | color: white; 49 | background-color: #369; 50 | } 51 | .gentleselect-dialog > ul > li.gentleselect-dummy:hover { background-color: #fff; } 52 | .gentleselect-dialog > ul > li:hover { 53 | background-color: #69c; 54 | color: #fff; 55 | } 56 | 57 | .gentleselect-dialog > .gentleselect-title { 58 | display: block; 59 | text-align: center; 60 | margin: 0; 61 | padding: 2px; 62 | background-color: #ddd; 63 | font-size: 0.8em; 64 | color: #666; 65 | overflow: hidden; 66 | } 67 | -------------------------------------------------------------------------------- /public/js/tooltip/images/tt_bottom.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/js/tooltip/images/tt_bottom.gif -------------------------------------------------------------------------------- /public/js/tooltip/images/tt_left.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/js/tooltip/images/tt_left.gif -------------------------------------------------------------------------------- /public/js/tooltip/images/tt_top.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/js/tooltip/images/tt_top.gif -------------------------------------------------------------------------------- /public/js/tooltip/images/x_icon.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/js/tooltip/images/x_icon.gif -------------------------------------------------------------------------------- /public/js/tooltip/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | JavaScript Tooltip Demo 6 | 7 | 8 | 9 |

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aliquam id tellus. Nulla orci enim, vulputate et, pharetra eget, imperdiet non, sem. Mauris sit amet mi nec nulla porttitor dapibus. Curabitur leo sem, lacinia sed, commodo eu, mattis sit amet, felis. Ut tortor. Donec porttitor orci et neque. Curabitur eget diam at libero egestas suscipit. In tortor est, ullamcorper eu, dapibus et, condimentum nec, nunc. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Duis vel purus eget diam aliquam luctus. Nullam risus ipsum, aliquam et, lacinia sit amet, fermentum vel, mi. In hac habitasse platea dictumst. Maecenas et dui non tortor lobortis feugiat. Donec eleifend iaculis arcu. Cras vitae leo nec nunc rhoncus laoreet. Integer eget enim. Nunc dignissim cursus mi. Donec eros.

10 | 11 | 12 | -------------------------------------------------------------------------------- /public/js/tooltip/script.js: -------------------------------------------------------------------------------- 1 | var tooltip=function(){ 2 | var id = 'tt'; 3 | var top = 3; 4 | var left = 3; 5 | var maxw = 400; 6 | var speed = 10; 7 | var timer = 20; 8 | var endalpha = 90; 9 | var alpha = 0; 10 | var tt,t,c,b,h; 11 | var ie = document.all ? true : false; 12 | return{ 13 | show:function(v,w){ 14 | if(tt == null){ 15 | tt = document.createElement('div'); 16 | tt.setAttribute('id',id); 17 | t = document.createElement('div'); 18 | t.setAttribute('id',id + 'top'); 19 | c = document.createElement('div'); 20 | c.setAttribute('id',id + 'cont'); 21 | b = document.createElement('div'); 22 | b.setAttribute('id',id + 'bot'); 23 | tt.appendChild(t); 24 | tt.appendChild(c); 25 | tt.appendChild(b); 26 | document.body.appendChild(tt); 27 | tt.style.opacity = 0; 28 | tt.style.filter = 'alpha(opacity=0)'; 29 | document.onmousemove = this.pos; 30 | } 31 | tt.style.display = 'block'; 32 | c.innerHTML = v; 33 | tt.style.width = w ? w + 'px' : 'auto'; 34 | if(!w && ie){ 35 | t.style.display = 'none'; 36 | b.style.display = 'none'; 37 | tt.style.width = tt.offsetWidth; 38 | t.style.display = 'block'; 39 | b.style.display = 'block'; 40 | } 41 | if(tt.offsetWidth > maxw){tt.style.width = maxw + 'px'} 42 | h = parseInt(tt.offsetHeight) + top; 43 | clearInterval(tt.timer); 44 | tt.timer = setInterval(function(){tooltip.fade(1)},timer); 45 | }, 46 | pos:function(e){ 47 | var u = ie ? event.clientY + document.documentElement.scrollTop : e.pageY; 48 | var l = ie ? event.clientX + document.documentElement.scrollLeft : e.pageX; 49 | tt.style.top = (u - h) + 'px'; 50 | tt.style.left = (l + left) + 'px'; 51 | }, 52 | fade:function(d){ 53 | var a = alpha; 54 | if((a != endalpha && d == 1) || (a != 0 && d == -1)){ 55 | var i = speed; 56 | if(endalpha - a < speed && d == 1){ 57 | i = endalpha - a; 58 | }else if(alpha < speed && d == -1){ 59 | i = a; 60 | } 61 | alpha = a + (i * d); 62 | tt.style.opacity = alpha * .01; 63 | tt.style.filter = 'alpha(opacity=' + alpha + ')'; 64 | }else{ 65 | clearInterval(tt.timer); 66 | if(d == -1){tt.style.display = 'none'} 67 | } 68 | }, 69 | hide:function(){ 70 | clearInterval(tt.timer); 71 | tt.timer = setInterval(function(){tooltip.fade(-1)},timer); 72 | } 73 | }; 74 | }(); -------------------------------------------------------------------------------- /public/js/tooltip/style.css: -------------------------------------------------------------------------------- 1 | #text {margin:50px auto; width:500px} 2 | .hotspot {color:#900; padding-bottom:1px; border-bottom:1px dotted #900; cursor:pointer} 3 | #tt {position:absolute; display:block; background:url(images/tt_left.gif) top left no-repeat} 4 | #tttop {display:block; height:5px; margin-left:5px; background:url(images/tt_top.gif) top right no-repeat; overflow:hidden} 5 | #ttcont {display:block; padding:2px 12px 3px 7px; margin-left:5px; background:#666; color:#FFF} 6 | #ttbot {display:block; height:5px; margin-left:5px; background:url(images/tt_bottom.gif) top right no-repeat; overflow:hidden} -------------------------------------------------------------------------------- /public/js/utils.js: -------------------------------------------------------------------------------- 1 | function addInput(divName,dataArray,value){ 2 | var newdiv = document.createElement('div'); 3 | newdiv.innerHTML = "Remove"; 4 | document.getElementById(divName).appendChild(newdiv); 5 | } -------------------------------------------------------------------------------- /public/lov.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/public/lov.zip -------------------------------------------------------------------------------- /public/multiBarHorizontalData.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "key": "Series 1", 4 | "color": "#d67777", 5 | "values": [ 6 | { 7 | "label" : "Group A" , 8 | "value" : -1.8746444827653 9 | } , 10 | { 11 | "label" : "Group B" , 12 | "value" : -8.0961543492239 13 | } , 14 | { 15 | "label" : "Group C" , 16 | "value" : -0.57072943117674 17 | } , 18 | { 19 | "label" : "Group D" , 20 | "value" : -2.4174010336624 21 | } , 22 | { 23 | "label" : "Group E" , 24 | "value" : -0.72009071426284 25 | } , 26 | { 27 | "label" : "Group F" , 28 | "value" : -0.77154485523777 29 | } , 30 | { 31 | "label" : "Group G" , 32 | "value" : -0.90152097798131 33 | } , 34 | { 35 | "label" : "Group H" , 36 | "value" : -0.91445417330854 37 | } , 38 | { 39 | "label" : "Group I" , 40 | "value" : -0.055746319141851 41 | } 42 | ] 43 | }, 44 | { 45 | "key": "Series 2", 46 | "color": "#4f99b4", 47 | "values": [ 48 | { 49 | "label" : "Group A" , 50 | "value" : 25.307646510375 51 | } , 52 | { 53 | "label" : "Group B" , 54 | "value" : 16.756779544553 55 | } , 56 | { 57 | "label" : "Group C" , 58 | "value" : 18.451534877007 59 | } , 60 | { 61 | "label" : "Group D" , 62 | "value" : 8.6142352811805 63 | } , 64 | { 65 | "label" : "Group E" , 66 | "value" : 7.8082472075876 67 | } , 68 | { 69 | "label" : "Group F" , 70 | "value" : 5.259101026956 71 | } , 72 | { 73 | "label" : "Group G" , 74 | "value" : 0.30947953487127 75 | } , 76 | { 77 | "label" : "Group H" , 78 | "value" : 0 79 | } , 80 | { 81 | "label" : "Group I" , 82 | "value" : 0 83 | } 84 | ] 85 | } 86 | ] 87 | -------------------------------------------------------------------------------- /server.js: -------------------------------------------------------------------------------- 1 | 2 | /*! 3 | * nodejs-express-mongoose-demo 4 | * Copyright(c) 2013 Madhusudhan Srinivasa 5 | * MIT Licensed 6 | */ 7 | 8 | /** 9 | * Module dependencies. 10 | */ 11 | 12 | var express = require('express') 13 | , fs = require('fs') 14 | , https = require('https') 15 | , http = require('http') 16 | , keys_dir = '/etc/letsencrypt/live/lov.okfn.org/' 17 | , server_options = { 18 | key : fs.readFileSync(keys_dir + 'privkey.pem'), 19 | cert : fs.readFileSync(keys_dir + 'cert.pem') 20 | } 21 | , passport = require('passport') 22 | , mongoose = require('mongoose') 23 | , nodemailer = require('nodemailer') 24 | , ElasticSearchClient = require('elasticsearchclient') 25 | , elasticsearch = require('elasticsearch') 26 | 27 | /** 28 | * Main application entry file. 29 | * Please note that the order of loading is important. 30 | */ 31 | 32 | // Load configurations 33 | // if test env, load example file 34 | var env = process.env.NODE_ENV || 'development' 35 | , config = require('./config/config')[env] 36 | 37 | // set default timezon in London 38 | process.env.TZ = 'Europe/London'; 39 | 40 | // Bootstrap db connection 41 | mongoose.connect(config.db) 42 | 43 | // Bootstrap ElasticSearch Connection 44 | var esclient = new ElasticSearchClient(config.es); 45 | console.log({host:config.es.host+':'+config.es.port}); 46 | var elasticsearchclient = new elasticsearch.Client({host:config.es.host+':'+config.es.port}); 47 | 48 | // Bootstrap models 49 | var models_path = __dirname + '/app/models' 50 | fs.readdirSync(models_path).forEach(function (file) { 51 | if (~file.indexOf('.js')) require(models_path + '/' + file) 52 | }) 53 | 54 | // bootstrap passport config 55 | require('./config/passport')(passport, config) 56 | 57 | var app = express() 58 | // express settings 59 | require('./config/express')(app, config, passport) 60 | 61 | //bottstrap transporter for nodemailer 62 | var transporter = nodemailer.createTransport("SMTP", config.email); 63 | 64 | // Bootstrap routes 65 | require('./config/routes')(app, passport, esclient, elasticsearchclient, transporter) 66 | 67 | // Start the app by listening on 68 | var port = process.env.PORT || 3333 69 | https.createServer(server_options,app).listen(4444); 70 | http.createServer(app).listen(port); 71 | 72 | //app.listen(port) 73 | console.log('Express app started on port '+port) 74 | 75 | // expose app 76 | exports = module.exports = app 77 | -------------------------------------------------------------------------------- /setup/agents.json: -------------------------------------------------------------------------------- 1 | { "prefUri" : "http://mydomain/yourUri", "name" : "yourName", "type" : "person"} -------------------------------------------------------------------------------- /setup/stattags.json: -------------------------------------------------------------------------------- 1 | { "_id" : { "$oid" : "562d0ddfc2bf71c5a8c0a347" }, "label" : "Catalogs", "nbOccurrences" : 31 } 2 | { "_id" : { "$oid" : "562d0ddfc2bf71c5a8c0a348" }, "label" : "API", "nbOccurrences" : 26 } 3 | { "_id" : { "$oid" : "562d0ddfc2bf71c5a8c0a349" }, "label" : "Methods", "nbOccurrences" : 38 } 4 | { "_id" : { "$oid" : "562d0ddfc2bf71c5a8c0a34a" }, "label" : "Multimedia", "nbOccurrences" : 13 } 5 | { "_id" : { "$oid" : "562d0ddfc2bf71c5a8c0a34b" }, "label" : "Academy", "nbOccurrences" : 10 } 6 | { "_id" : { "$oid" : "562d0ddfc2bf71c5a8c0a34c" }, "label" : "Metadata", "nbOccurrences" : 33 } 7 | { "_id" : { "$oid" : "562d0ddfc2bf71c5a8c0a34d" }, "label" : "Biology", "nbOccurrences" : 12 } 8 | { "_id" : { "$oid" : "562d0ddfc2bf71c5a8c0a34e" }, "label" : "Health", "nbOccurrences" : 4 } 9 | { "_id" : { "$oid" : "562d0ddfc2bf71c5a8c0a34f" }, "label" : "People", "nbOccurrences" : 20 } 10 | { "_id" : { "$oid" : "562d0ddfc2bf71c5a8c0a350" }, "label" : "Geometry", "nbOccurrences" : 13 } 11 | { "_id" : { "$oid" : "562d0ddfc2bf71c5a8c0a351" }, "label" : "Geography", "nbOccurrences" : 27 } 12 | { "_id" : { "$oid" : "562d0ddfc2bf71c5a8c0a352" }, "label" : "Food", "nbOccurrences" : 6 } 13 | { "_id" : { "$oid" : "562d0ddfc2bf71c5a8c0a353" }, "label" : "Society", "nbOccurrences" : 25 } 14 | { "_id" : { "$oid" : "562d0ddfc2bf71c5a8c0a354" }, "label" : "Quality", "nbOccurrences" : 26 } 15 | { "_id" : { "$oid" : "562d0ddfc2bf71c5a8c0a355" }, "label" : "Support", "nbOccurrences" : 21 } 16 | { "_id" : { "$oid" : "562d0ddfc2bf71c5a8c0a356" }, "label" : "Games", "nbOccurrences" : 2 } 17 | { "_id" : { "$oid" : "562d0ddfc2bf71c5a8c0a357" }, "label" : "Government", "nbOccurrences" : 10 } 18 | { "_id" : { "$oid" : "562d0ddfc2bf71c5a8c0a358" }, "label" : "General & Upper", "nbOccurrences" : 16 } 19 | { "_id" : { "$oid" : "562d0ddfc2bf71c5a8c0a359" }, "label" : "CSV", "nbOccurrences" : 2 } 20 | { "_id" : { "$oid" : "562d0ddfc2bf71c5a8c0a35a" }, "label" : "RDF", "nbOccurrences" : 25 } 21 | { "_id" : { "$oid" : "562d0ddfc2bf71c5a8c0a35b" }, "label" : "eBusiness", "nbOccurrences" : 7 } 22 | { "_id" : { "$oid" : "562d0ddfc2bf71c5a8c0a35c" }, "label" : "W3C Rec", "nbOccurrences" : 10 } 23 | { "_id" : { "$oid" : "562d0ddfc2bf71c5a8c0a35d" }, "label" : "Environment", "nbOccurrences" : 11 } 24 | { "_id" : { "$oid" : "562d0ddfc2bf71c5a8c0a35e" }, "label" : "Vocabularies", "nbOccurrences" : 18 } 25 | { "_id" : { "$oid" : "562d0ddfc2bf71c5a8c0a35f" }, "label" : "Travel", "nbOccurrences" : 6 } 26 | { "_id" : { "$oid" : "562d0ddfc2bf71c5a8c0a360" }, "label" : "Events", "nbOccurrences" : 14 } 27 | { "_id" : { "$oid" : "562d0ddfc2bf71c5a8c0a361" }, "label" : "Contracts", "nbOccurrences" : 6 } 28 | { "_id" : { "$oid" : "562d0ddfc2bf71c5a8c0a362" }, "label" : "Tag", "nbOccurrences" : 8 } 29 | { "_id" : { "$oid" : "562d0ddfc2bf71c5a8c0a363" }, "label" : "Industry", "nbOccurrences" : 11 } 30 | { "_id" : { "$oid" : "562d0ddfc2bf71c5a8c0a364" }, "label" : "Press", "nbOccurrences" : 7 } 31 | { "_id" : { "$oid" : "562d0ddfc2bf71c5a8c0a365" }, "label" : "Services", "nbOccurrences" : 10 } 32 | { "_id" : { "$oid" : "562d0ddfc2bf71c5a8c0a366" }, "label" : "PLM", "nbOccurrences" : 11 } 33 | { "_id" : { "$oid" : "562d0ddfc2bf71c5a8c0a367" }, "label" : "Music", "nbOccurrences" : 6 } 34 | { "_id" : { "$oid" : "562d0ddfc2bf71c5a8c0a368" }, "label" : "Time", "nbOccurrences" : 16 } 35 | { "_id" : { "$oid" : "562d0ddfc2bf71c5a8c0a369" }, "label" : "SPAR", "nbOccurrences" : 12 } 36 | { "_id" : { "$oid" : "562d0ddfc2bf71c5a8c0a36a" }, "label" : "Rec", "nbOccurrences" : 2 } 37 | { "_id" : { "$oid" : "562d0ddfc2bf71c5a8c0a36b" }, "label" : "FRBR", "nbOccurrences" : 11 } 38 | { "_id" : { "$oid" : "562d0ddfc2bf71c5a8c0a36c" }, "label" : "Security", "nbOccurrences" : 8 } 39 | { "_id" : { "$oid" : "562d0ddfc2bf71c5a8c0a36d" }, "label" : "Image", "nbOccurrences" : 4 } 40 | { "_id" : { "$oid" : "562d0ddfc2bf71c5a8c0a36e" }, "label" : "PROTON", "nbOccurrences" : 2 } 41 | { "_id" : { "$oid" : "562d0ddfc2bf71c5a8c0a36f" }, "label" : "SSDesk", "nbOccurrences" : 5 } 42 | -------------------------------------------------------------------------------- /vocommons/voaf/v1.0/images/labs.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/vocommons/voaf/v1.0/images/labs.gif -------------------------------------------------------------------------------- /vocommons/voaf/v1.0/images/mondeca.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/vocommons/voaf/v1.0/images/mondeca.gif -------------------------------------------------------------------------------- /vocommons/voaf/v1.0/images/okfn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/vocommons/voaf/v1.0/images/okfn.png -------------------------------------------------------------------------------- /vocommons/voaf/v1.0/images/rdf.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/vocommons/voaf/v1.0/images/rdf.gif -------------------------------------------------------------------------------- /vocommons/voaf/v1.0/images/sparqlEndpointStatus_Example.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/vocommons/voaf/v1.0/images/sparqlEndpointStatus_Example.jpg -------------------------------------------------------------------------------- /vocommons/voaf/v1.1/images/labs.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/vocommons/voaf/v1.1/images/labs.gif -------------------------------------------------------------------------------- /vocommons/voaf/v1.1/images/mondeca.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/vocommons/voaf/v1.1/images/mondeca.gif -------------------------------------------------------------------------------- /vocommons/voaf/v1.1/images/okfn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/vocommons/voaf/v1.1/images/okfn.png -------------------------------------------------------------------------------- /vocommons/voaf/v1.1/images/rdf.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/vocommons/voaf/v1.1/images/rdf.gif -------------------------------------------------------------------------------- /vocommons/voaf/v1.1/images/sparqlEndpointStatus_Example.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/vocommons/voaf/v1.1/images/sparqlEndpointStatus_Example.jpg -------------------------------------------------------------------------------- /vocommons/voaf/v2.0/images/labs.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/vocommons/voaf/v2.0/images/labs.gif -------------------------------------------------------------------------------- /vocommons/voaf/v2.0/images/mondeca.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/vocommons/voaf/v2.0/images/mondeca.gif -------------------------------------------------------------------------------- /vocommons/voaf/v2.0/images/okfn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/vocommons/voaf/v2.0/images/okfn.png -------------------------------------------------------------------------------- /vocommons/voaf/v2.0/images/rdf.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/vocommons/voaf/v2.0/images/rdf.gif -------------------------------------------------------------------------------- /vocommons/voaf/v2.0/images/sparqlEndpointStatus_Example.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/vocommons/voaf/v2.0/images/sparqlEndpointStatus_Example.jpg -------------------------------------------------------------------------------- /vocommons/voaf/v2.1/images/labs.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/vocommons/voaf/v2.1/images/labs.gif -------------------------------------------------------------------------------- /vocommons/voaf/v2.1/images/mondeca.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/vocommons/voaf/v2.1/images/mondeca.gif -------------------------------------------------------------------------------- /vocommons/voaf/v2.1/images/okfn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/vocommons/voaf/v2.1/images/okfn.png -------------------------------------------------------------------------------- /vocommons/voaf/v2.1/images/play.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/vocommons/voaf/v2.1/images/play.gif -------------------------------------------------------------------------------- /vocommons/voaf/v2.1/images/rdf.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/vocommons/voaf/v2.1/images/rdf.gif -------------------------------------------------------------------------------- /vocommons/voaf/v2.1/images/sparqlEndpointStatus_Example.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/vocommons/voaf/v2.1/images/sparqlEndpointStatus_Example.jpg -------------------------------------------------------------------------------- /vocommons/voaf/v2.2/images/labs.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/vocommons/voaf/v2.2/images/labs.gif -------------------------------------------------------------------------------- /vocommons/voaf/v2.2/images/mondeca.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/vocommons/voaf/v2.2/images/mondeca.gif -------------------------------------------------------------------------------- /vocommons/voaf/v2.2/images/okfn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/vocommons/voaf/v2.2/images/okfn.png -------------------------------------------------------------------------------- /vocommons/voaf/v2.2/images/play.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/vocommons/voaf/v2.2/images/play.gif -------------------------------------------------------------------------------- /vocommons/voaf/v2.2/images/rdf.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/vocommons/voaf/v2.2/images/rdf.gif -------------------------------------------------------------------------------- /vocommons/voaf/v2.2/images/sparqlEndpointStatus_Example.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/vocommons/voaf/v2.2/images/sparqlEndpointStatus_Example.jpg -------------------------------------------------------------------------------- /vocommons/voaf/v2.3/images/labs.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/vocommons/voaf/v2.3/images/labs.gif -------------------------------------------------------------------------------- /vocommons/voaf/v2.3/images/mondeca.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/vocommons/voaf/v2.3/images/mondeca.gif -------------------------------------------------------------------------------- /vocommons/voaf/v2.3/images/okfn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/vocommons/voaf/v2.3/images/okfn.png -------------------------------------------------------------------------------- /vocommons/voaf/v2.3/images/play.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/vocommons/voaf/v2.3/images/play.gif -------------------------------------------------------------------------------- /vocommons/voaf/v2.3/images/rdf.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/vocommons/voaf/v2.3/images/rdf.gif -------------------------------------------------------------------------------- /vocommons/voaf/v2.3/images/sparqlEndpointStatus_Example.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyvandenbussche/lov/6f782e4d0fdfdb37dde3f698a395c07c57479ab8/vocommons/voaf/v2.3/images/sparqlEndpointStatus_Example.jpg --------------------------------------------------------------------------------