# HG changeset patch # User ymh # Date 1448973188 -3600 # Node ID a9b98b16b0531697ac1e74f4e38e8b41b1053674 # Parent eadaf0b8f02ebaf44cf740e1ab089669ef943d8d add contributor list + edition pane diff -r eadaf0b8f02e -r a9b98b16b053 server/bo_client/app/adapters/application.js --- a/server/bo_client/app/adapters/application.js Fri Nov 27 17:59:36 2015 +0100 +++ b/server/bo_client/app/adapters/application.js Tue Dec 01 13:33:08 2015 +0100 @@ -1,5 +1,5 @@ import DS from 'ember-data'; export default DS.RESTAdapter.extend({ - namespace: 'api', + namespace: 'api/v1', }); diff -r eadaf0b8f02e -r a9b98b16b053 server/bo_client/app/components/bo-doc-contributors.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/server/bo_client/app/components/bo-doc-contributors.js Tue Dec 01 13:33:08 2015 +0100 @@ -0,0 +1,21 @@ +import Ember from 'ember'; +import _ from 'lodash/lodash'; + +export default Ember.Component.extend({ + + actions: { + toggleEditContributors : function() { + console.log("EDIT CONTRIBUTORS"); + // var contributors = _.clone(this.get('document').get('contributors')); + // console.log("EDIT CONTRIBUTPRS", contributors); + // contributors.push({ + // name: "Hello world", + // url: null, + // role: 'http://www.language-archives.org/OLAC/1.1/annotator' + // }); + // this.get('document').set('contributors', contributors); + Ember.$('#doc-contributors-table-pane').slideToggle(); + Ember.$('#doc-contributors-list-pane').slideToggle(); + } + } +}); diff -r eadaf0b8f02e -r a9b98b16b053 server/bo_client/app/helpers/add-one.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/server/bo_client/app/helpers/add-one.js Tue Dec 01 13:33:08 2015 +0100 @@ -0,0 +1,7 @@ +import Ember from 'ember'; + +export function addOne(params) { + return params[0] + 1; +} + +export default Ember.Helper.helper(addOne); diff -r eadaf0b8f02e -r a9b98b16b053 server/bo_client/app/helpers/document-contributor-role-translation-tag.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/server/bo_client/app/helpers/document-contributor-role-translation-tag.js Tue Dec 01 13:33:08 2015 +0100 @@ -0,0 +1,8 @@ +import Ember from 'ember'; + +export function documentContributorRoleTranslationTag(params) { + let role = params[0]; + return role.replace('http://www.language-archives.org/OLAC/1.1/', 'bo.olac_role_'); +} + +export default Ember.Helper.helper(documentContributorRoleTranslationTag); diff -r eadaf0b8f02e -r a9b98b16b053 server/bo_client/app/index.html --- a/server/bo_client/app/index.html Fri Nov 27 17:59:36 2015 +0100 +++ b/server/bo_client/app/index.html Tue Dec 01 13:33:08 2015 +0100 @@ -18,7 +18,7 @@ - + {{content-for 'head-footer'}} @@ -51,7 +51,7 @@ {{content-for 'body'}} - + diff -r eadaf0b8f02e -r a9b98b16b053 server/bo_client/app/locales/en/translations.js --- a/server/bo_client/app/locales/en/translations.js Fri Nov 27 17:59:36 2015 +0100 +++ b/server/bo_client/app/locales/en/translations.js Tue Dec 01 13:33:08 2015 +0100 @@ -12,7 +12,35 @@ "document_audio": "Audio:", "document_content": "Content", "document_title": "Title:", - "document_editors": "Editor(s):" + "document_editors": "Editor(s):", + "document_contributors": "Contributor(s):", + "contributors_th_name": "Name", + "contributors_th_url": "URL", + "contributors_th_role": "Role", + "olac_role_annotator": "annotator", + "olac_role_author": "author", + "olac_role_compiler": "compiler", + "olac_role_consultant": "consultant", + "olac_role_data_inputter": "data inputter", + "olac_role_depositor": "depositor", + "olac_role_developer": "developer", + "olac_role_editor": "editor", + "olac_role_illustrator": "illustrator", + "olac_role_interpreter": "interpreter", + "olac_role_interviewer": "interviewer", + "olac_role_participant": "participant", + "olac_role_performer": "performer", + "olac_role_photographer": "photographer", + "olac_role_recorder": "recorder", + "olac_role_researcher": "researcher", + "olac_role_research_participant": "research participant", + "olac_role_responder": "responder", + "olac_role_signer": "signer", + "olac_role_singer": "singer", + "olac_role_speaker": "speaker", + "olac_role_sponsor": "sponsor", + "olac_role_transcriber": "transcriber", + "olac_role_translator": "translator", } // "some.translation.key": "Text for some.translation.key", diff -r eadaf0b8f02e -r a9b98b16b053 server/bo_client/app/locales/fr/translations.js --- a/server/bo_client/app/locales/fr/translations.js Fri Nov 27 17:59:36 2015 +0100 +++ b/server/bo_client/app/locales/fr/translations.js Tue Dec 01 13:33:08 2015 +0100 @@ -11,7 +11,35 @@ "document_audio": "Audio :", "document_content": "Contenu", "document_title": "Titre :", - "document_editors": "Editeur(s) :" + "document_editors": "Editeur(s) :", + "document_contributors": "Contributeur(s) :", + "contributors_th_name": "Nom", + "contributors_th_url": "URL", + "contributors_th_role": "Role", + "olac_role_annotator": "annotateur", + "olac_role_author": "auteur", + "olac_role_compiler": "compilateur", + "olac_role_consultant": "consultant", + "olac_role_data_inputter": "data inputter", + "olac_role_depositor": "depositeur", + "olac_role_developer": "developpeur", + "olac_role_editor": "editeur", + "olac_role_illustrator": "illustrateur", + "olac_role_interpreter": "interprète", + "olac_role_interviewer": "interviewer", + "olac_role_participant": "participant", + "olac_role_performer": "performer", + "olac_role_photographer": "photographe", + "olac_role_recorder": "recorder", + "olac_role_researcher": "chercheur", + "olac_role_research_participant": "research participant", + "olac_role_responder": "responder", + "olac_role_signer": "signataire", + "olac_role_singer": "chanteur", + "olac_role_speaker": "speaker", + "olac_role_sponsor": "sponsor", + "olac_role_transcriber": "transcripteur", + "olac_role_translator": "traducteur", }, // "some.translation.key": "Text for some.translation.key", // diff -r eadaf0b8f02e -r a9b98b16b053 server/bo_client/app/models/document.js --- a/server/bo_client/app/models/document.js Fri Nov 27 17:59:36 2015 +0100 +++ b/server/bo_client/app/models/document.js Tue Dec 01 13:33:08 2015 +0100 @@ -1,9 +1,32 @@ import DS from 'ember-data'; +import Ember from 'ember'; +import _ from 'lodash/lodash'; export default DS.Model.extend({ //id: DS.attr('string'), uri: DS.attr('string'), + title: DS.attr('string'), + publishers: DS.attr({defaultValue: []}), - mediaArray: DS.attr({defaultValue: []}) + + contributors: DS.attr({defaultValue: []}), + + mediaArray: DS.attr({defaultValue: []}), + + mediaList: Ember.computed('mediaArray', function() { + var res = []; + var mp3 = null; + _.forEach(this.get('mediaArray'), function(m) { + if(m.format === 'audio/mpeg') { + mp3 = m; + } else if (m.format.startsWith('audio/')) { + res.push(m); + } + }); + if(mp3) { + res.unshift(mp3); + } + return res; + }), }); diff -r eadaf0b8f02e -r a9b98b16b053 server/bo_client/app/styles/app.scss --- a/server/bo_client/app/styles/app.scss Fri Nov 27 17:59:36 2015 +0100 +++ b/server/bo_client/app/styles/app.scss Tue Dec 01 13:33:08 2015 +0100 @@ -1,1 +1,34 @@ -@import "app-core"; +@import 'bower_components/bootstrap-sass/assets/stylesheets/_bootstrap'; +@import 'bower_components/font-awesome/scss/font-awesome'; + +$btn-font-weight: 300; +$font-family-sans-serif: "Roboto", Helvetica, Arial, sans-serif; + +body, label, .checkbox label { + font-weight: 300; +} + +.doc_details_title { + @extend .h3; + margin-top: 0; +} +.content-main-title { + @extend .h4; +} + +.data-audio-title { + @extend .h4; +} + +.content-title { + @extend .h5; +} + +.bo-doc-edit-icons { + cursor: pointer; +} + +#doc-contributors-table-pane { + display: none; + margin-top: 20px; +} diff -r eadaf0b8f02e -r a9b98b16b053 server/bo_client/app/templates/application.hbs --- a/server/bo_client/app/templates/application.hbs Fri Nov 27 17:59:36 2015 +0100 +++ b/server/bo_client/app/templates/application.hbs Tue Dec 01 13:33:08 2015 +0100 @@ -1,3 +1,1 @@ -

Welcome to Ember application

- {{outlet}} diff -r eadaf0b8f02e -r a9b98b16b053 server/bo_client/app/templates/components/bo-doc-contributors.hbs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/server/bo_client/app/templates/components/bo-doc-contributors.hbs Tue Dec 01 13:33:08 2015 +0100 @@ -0,0 +1,36 @@ +
+ {{ fa-icon "pencil" class='bo-doc-edit-icons' click=(action "toggleEditContributors")}} + +
+
+
+
{{t 'bo.document_contributors'}}
+
+
+
{{#each document.contributors as |contrib index|}}{{if index " ; "}}{{#if contrib.name}}{{contrib.name}}{{else}}{{contrib.url}}{{/if}} ({{t (document-contributor-role-translation-tag contrib.role)}}){{/each}}
+
+
+
+ + + + + + + + + + + {{#each document.contributors as |contrib index|}} + + + + + + + {{/each}} + +
#{{t 'bo.contributors_th_name'}}{{t 'bo.contributors_th_url'}}{{t 'bo.contributors_th_role'}}
{{add-one index}}{{contrib.name}}{{contrib.url}}{{contrib.role}}
+
+
+
diff -r eadaf0b8f02e -r a9b98b16b053 server/bo_client/app/templates/doc.hbs --- a/server/bo_client/app/templates/doc.hbs Fri Nov 27 17:59:36 2015 +0100 +++ b/server/bo_client/app/templates/doc.hbs Tue Dec 01 13:33:08 2015 +0100 @@ -1,27 +1,48 @@
-
+
{{t 'bo.document_detail'}}
-
-
-
{{t 'bo.document_audio'}}
-
- +
+
+
{{t 'bo.document_content'}}
+
+
+   +
+
+
{{t 'bo.document_title'}}
+
{{model.title}}
+
+
+
+ {{bo-doc-contributors document=model}} +
+
+
+   +
+
+
{{t 'bo.document_editors'}}
+
{{#each model.publishers as |publisher index|}}{{if index ", "}}{{publisher}}{{/each}}
+
+
+
+
+
+
{{t 'bo.document_audio'}}
+
+ +
-
{{t 'bo.document_content'}}
-
{{t 'bo.document_title'}}
-
{{model.title}}
-
{{t 'bo.document_editors'}}
-
{{#each model.publishers as |publisher index|}}{{if index ", "}}{{publisher}}{{/each}}
diff -r eadaf0b8f02e -r a9b98b16b053 server/bo_client/bower.json --- a/server/bo_client/bower.json Fri Nov 27 17:59:36 2015 +0100 +++ b/server/bo_client/bower.json Tue Dec 01 13:33:08 2015 +0100 @@ -1,16 +1,25 @@ { "name": "bo-client", "dependencies": { - "ember": "2.1.0", - "ember-cli-shims": "ember-cli/ember-cli-shims#0.0.3", + "ember": "2.2.0", + "ember-cli-shims": "ember-cli/ember-cli-shims#0.0.6", "ember-cli-test-loader": "ember-cli-test-loader#0.1.3", "ember-data": ">=2.1.0", - "ember-load-initializers": "ember-cli/ember-load-initializers#0.1.5", - "ember-qunit": "0.4.9", - "ember-qunit-notifications": "0.0.7", - "ember-resolver": "~0.1.18", + "ember-load-initializers": "ember-cli/ember-load-initializers#0.1.7", + "ember-qunit": ">=0.4.9", + "ember-qunit-notifications": ">=0.0.7", + "ember-resolver": ">=0.1.18", "jquery": "latest", - "loader.js": "ember-cli/loader.js#3.2.1", - "qunit": "~1.18.0" + "loader.js": "ember-cli/loader.js#3.5.0", + "qunit": "~1.18.0", + "bootstrap-sass": "bootstrap-sass-official#~3.3.6", + "font-awesome": "~4.4.0" + }, + "resolutions": { + "ember-cli-shims": "0.0.6", + "loader.js": "3.5.0", + "ember-load-initializers": "0.1.7", + "ember": "2.2.0", + "qunit-notifications": "~0.1.0" } } diff -r eadaf0b8f02e -r a9b98b16b053 server/bo_client/config/environment.js --- a/server/bo_client/config/environment.js Fri Nov 27 17:59:36 2015 +0100 +++ b/server/bo_client/config/environment.js Tue Dec 01 13:33:08 2015 +0100 @@ -5,6 +5,7 @@ modulePrefix: 'bo-client', environment: environment, baseURL: '/', + //locationType: 'auto', locationType: 'auto', EmberENV: { FEATURES: { @@ -20,11 +21,11 @@ }; if (environment === 'development') { - // ENV.APP.LOG_RESOLVER = true; - // ENV.APP.LOG_ACTIVE_GENERATION = true; - // ENV.APP.LOG_TRANSITIONS = true; - // ENV.APP.LOG_TRANSITIONS_INTERNAL = true; - // ENV.APP.LOG_VIEW_LOOKUPS = true; + ENV.APP.LOG_RESOLVER = true; + ENV.APP.LOG_ACTIVE_GENERATION = true; + ENV.APP.LOG_TRANSITIONS = true; + ENV.APP.LOG_TRANSITIONS_INTERNAL = true; + ENV.APP.LOG_VIEW_LOOKUPS = true; } if (environment === 'test') { @@ -40,7 +41,7 @@ } if (environment === 'production') { - + ENV.locationType = 'hash'; } return ENV; diff -r eadaf0b8f02e -r a9b98b16b053 server/bo_client/ember-cli-build.js --- a/server/bo_client/ember-cli-build.js Fri Nov 27 17:59:36 2015 +0100 +++ b/server/bo_client/ember-cli-build.js Tue Dec 01 13:33:08 2015 +0100 @@ -1,20 +1,44 @@ /* global require, module */ var EmberApp = require('ember-cli/lib/broccoli/ember-app'); +var pickFiles = require('broccoli-static-compiler'); module.exports = function(defaults) { var app = new EmberApp(defaults, { + outputPaths: { + vendor: { + js: '/assets/bo-client-vendor.js', + css: '/assets/bo-client-vendor.css' + } + }, + fingerprint: { + enabled: false + }, + storeConfigInMeta: false, // Add options here + emberCliFontAwesome: { + useScss: true + }, sassOptions: { includePaths: [ 'app/styles', - '../src/resources/assets/sass', - '../src/vendor/bower_components/bootstrap-sass/assets/stylesheets' ], } }); + // bootstrap + app.import('bower_components/bootstrap-sass/assets/javascripts/bootstrap.js'); + var bootstrapFonts = pickFiles('bower_components/bootstrap-sass/assets/fonts', { + srcDir: '/', + destDir: '/fonts' + }); + + + // app.import('../src/vendor/bower_components/bootstrap-sass/assets/fonts/bootstrap/glyphicons-halflings-regular.woff', { + // destDir: 'fonts' + // }) + // Use `app.import` to add additional libraries to the generated // output files. // @@ -28,5 +52,5 @@ // please specify an object with the list of modules as keys // along with the exports of each module as its value. - return app.toTree(); + return app.toTree(bootstrapFonts); }; diff -r eadaf0b8f02e -r a9b98b16b053 server/bo_client/package.json --- a/server/bo_client/package.json Fri Nov 27 17:59:36 2015 +0100 +++ b/server/bo_client/package.json Tue Dec 01 13:33:08 2015 +0100 @@ -19,30 +19,37 @@ "author": "", "license": "MIT", "devDependencies": { - "bower": "^1.5.2", - "broccoli-asset-rev": "^2.1.2", - "broccoli-funnel": "^0.2.8", - "broccoli-merge-trees": "^0.2.3", - "ember-cli": "1.13.8", - "ember-cli-app-version": "0.5.0", - "ember-cli-babel": "^5.1.3", + "bower": "^1.6.8", + "broccoli-asset-rev": "^2.3.0", + "broccoli-funnel": "^1.0.1", + "broccoli-merge-trees": "^1.0.0", + "ember-cli": "1.13.13", + "ember-cli-app-version": "1.0.0", + "ember-cli-babel": "^5.1.6", "ember-cli-content-security-policy": "0.4.0", - "ember-cli-dependency-checker": "^1.0.1", - "ember-cli-htmlbars": "0.7.9", - "ember-cli-htmlbars-inline-precompile": "^0.2.0", - "ember-cli-ic-ajax": "0.2.1", + "ember-cli-dependency-checker": "^1.1.0", + "ember-cli-font-awesome": "1.3.0", + "ember-cli-htmlbars": "1.0.1", + "ember-cli-htmlbars-inline-precompile": "^0.3.1", + "ember-cli-ic-ajax": "0.2.4", "ember-cli-inject-live-reload": "^1.3.1", - "ember-cli-qunit": "^1.0.0", - "ember-cli-release": "0.2.3", - "ember-cli-sass": "4.2.0", - "ember-cli-sri": "^1.0.3", + "ember-cli-qunit": "^1.0.4", + "ember-cli-release": "0.2.8", + "ember-cli-sass": "5.2.0", + "ember-cli-sri": "^1.2.1", "ember-cli-uglify": "^1.2.0", - "ember-data": "1.13.8", - "ember-disable-proxy-controllers": "^1.0.0", - "ember-export-application-global": "^1.0.3", - "ember-i18n": "4.1.3", + "ember-data": "2.2.1", + "ember-disable-proxy-controllers": "^1.0.1", + "ember-export-application-global": "^1.0.5", + "ember-i18n": "4.2.0", + "ember-lodash": "0.0.6", "express": "^4.13.3", - "glob": "^4.5.3", - "morgan": "^1.6.1" + "glob": "^6.0.1", + "morgan": "^1.6.1", + "npm-check-updates": "^2.5.1", + "walk-sync": "^0.2.6" + }, + "dependencies": { + "broccoli-static-compiler": "^0.2.2" } } diff -r eadaf0b8f02e -r a9b98b16b053 server/bo_client/server/mocks/documents.js --- a/server/bo_client/server/mocks/documents.js Fri Nov 27 17:59:36 2015 +0100 +++ b/server/bo_client/server/mocks/documents.js Tue Dec 01 13:33:08 2015 +0100 @@ -1,42 +1,162 @@ module.exports = function(app) { var express = require('express'); + var _ = require('lodash'); + var documentsRouter = express.Router(); + + var documentList = [{ + "id": "crdo-09-CAYCHAX_SOUND", + "uri": "http://purl.org/poi/corpusdelaparole.huma-num.fr/crdo-09-CAYCHAX_SOUND", + "title": "ALLOc : Caychax : Parabole", + "modified": "2010-10-25T18:16:38+02:00", + "publishers": [ + "Équipe de Recherche en Syntaxe et Sémantique", + "Bases, corpus, langage" + ], + "contributors": [ + { + "name": null, + "url": "http://viaf.org/viaf/56666014", + "role": "http://www.language-archives.org/OLAC/1.1/data_inputter" + }, + { + "name": "LDOR", + "url": null, + "role": "http://www.language-archives.org/OLAC/1.1/depositor" + }, + { + "name": "Thésaurus Occitan", + "url": null, + "role": "http://www.language-archives.org/OLAC/1.1/depositor" + }, + { + "name": "Équipe de Recherche en Syntaxe et Sémantique", + "url": null, + "role": "http://www.language-archives.org/OLAC/1.1/editor" + }, + { + "name": "Bases, corpus, langage", + "url": null, + "role": "http://www.language-archives.org/OLAC/1.1/editor" + }, + { + "name": null, + "url": "http://viaf.org/viaf/91792187", + "role": "http://www.language-archives.org/OLAC/1.1/interviewer" + }, + { + "name": null, + "url": "http://viaf.org/viaf/51700729", + "role": "http://www.language-archives.org/OLAC/1.1/researcher" + }, + { + "name": "Alazet, Pierre", + "url": null, + "role": "http://www.language-archives.org/OLAC/1.1/speaker" + }, + { + "name": "Del Duca, Jeanne", + "url": null, + "role": "http://www.language-archives.org/OLAC/1.1/transcriber" + } + ], + "mediaArray": { + "http://cocoon.huma-num.fr/data/archi/144792_09-CAYCHAX_22km.wav": { + "url": "http://cocoon.huma-num.fr/data/archi/144792_09-CAYCHAX_22km.wav", + "format": "audio/x-wav", + "extent": "PT03M18S", + "extent_ms": 198000, + "master": false + }, + "http://cocoon.huma-num.fr/data/archi/masters/144792.wav": { + "url": "http://cocoon.huma-num.fr/data/archi/masters/144792.wav", + "format": "audio/x-wav", + "extent": "PT03M18S", + "extent_ms": 198000, + "master": true + }, + "http://cocoon.huma-num.fr/data/archi/mp3/144792_09-CAYCHAX_44k.mp3": { + "url": "http://cocoon.huma-num.fr/data/archi/mp3/144792_09-CAYCHAX_44k.mp3", + "format": "audio/mpeg", + "extent": "PT03M18S", + "extent_ms": 198000, + "master": false + }, + "http://cocoon.huma-num.fr/exist/crdo/thesoc/oc/crdo-09-CAYCHAX.xhtml": { + "url": "http://cocoon.huma-num.fr/exist/crdo/thesoc/oc/crdo-09-CAYCHAX.xhtml", + "format": "application/xhtml+xml", + "extent": null, + "extent_ms": null, + "master": false + }, + "http://cocoon.huma-num.fr/exist/crdo/thesoc/oc/crdo-09-CAYCHAX.xml": { + "url": "http://cocoon.huma-num.fr/exist/crdo/thesoc/oc/crdo-09-CAYCHAX.xml", + "format": "application/xml", + "extent": null, + "extent_ms": null, + "master": false + } + } + }, + { + "id": "crdo-ALA_177", + "uri": "http://purl.org/poi/corpusdelaparole.huma-num.fr/crdo-ALA_177", + "title": "Atlas Linguistique et ethnographique de l'Alsace - Enquêtes linguistiques - Cleebourg: 04", + "modified": "2014-12-01T18:34:43+01:00", + "publishers": [ + "Atlas linguistiques, cultures et parlers régionaux de France" + ], + "contributors": [ + { + "name": null, + "url": "http://viaf.org/viaf/9122216", + "role": "http://www.language-archives.org/OLAC/1.1/depositor" + }, + { + "name": null, + "url": "http://viaf.org/viaf/61542329", + "role": "http://www.language-archives.org/OLAC/1.1/interviewer" + }, + { + "name": "Informateur 1", + "url": null, + "role": "http://www.language-archives.org/OLAC/1.1/speaker" + }, + { + "name": null, + "url": "http://viaf.org/viaf/61542329", + "role": "http://www.language-archives.org/OLAC/1.1/transcriber" + } + ], + "mediaArray": { + "http://cocoon.huma-num.fr/data/ala/ALA_177.mp3": { + "url": "http://cocoon.huma-num.fr/data/ala/ALA_177.mp3", + "format": "audio/mpeg", + "extent": "PT23M53S", + "extent_ms": 1433000, + "master": false + }, + "http://cocoon.huma-num.fr/data/ala/masters/ALA_177.wav": { + "url": "http://cocoon.huma-num.fr/data/ala/masters/ALA_177.wav", + "format": "audio/x-wav", + "extent": "PT23M53S", + "extent_ms": 1433000, + "master": true + }, + "http://cocoon.huma-num.fr/data/ala/ALA_177_22km.wav": { + "url": "http://cocoon.huma-num.fr/data/ala/ALA_177_22km.wav", + "format": "audio/x-wav", + "extent": "PT23M53S", + "extent_ms": 1433000, + "master": false + } + } + }]; + documentsRouter.get('/', function(req, res) { res.send({ - 'documents': [{ - id: "crdo-ALA_170", - uri: "http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-ALA_170", - title: "Atlas Linguistique et ethnographique de l'Alsace - Enqu\u00eates linguistiques - Brumath: 03", - publishers: ["Atlas linguistiques, cultures et parlers r\u00e9gionaux de France"], - mediaArray: [ - { - url: "http:\/\/cocoon.huma-num.fr\/data\/ala\/ALA_170_22km.wav", - format: "audio\/x-wav"}, - { - url: "http:\/\/cocoon.huma-num.fr\/data\/ala\/ALA_170.mp3", - format: "audio\/mpeg"}, - { - url: "http:\/\/purl.org\/poi\/crdo.vjf.cnrs.fr\/crdo-ALA_170", - format: "audio\/x-wav" } - ] - }, - { - id: "crdo-ALA_177", - uri: "http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-ALA_177", - title: "Atlas Linguistique et ethnographique de l'Alsace - Enqu\u00eates linguistiques - Cleebourg: 04", - publishers: ["Atlas linguistiques, cultures et parlers r\u00e9gionaux de France"], - mediaArray: [{ - url: "http:\/\/cocoon.huma-num.fr\/data\/ala\/ALA_177_22km.wav", - format: "audio\/x-wav" - }, { - url: "http:\/\/cocoon.huma-num.fr\/data\/ala\/ALA_177.mp3", - format: "audio\/mpeg" - }, { - url: "http:\/\/purl.org\/poi\/crdo.vjf.cnrs.fr\/crdo-ALA_177", - format: "audio\/x-wav" - }] - }] + 'documents': documentList, }); }); @@ -45,25 +165,14 @@ }); documentsRouter.get('/:id', function(req, res) { - res.send({ - 'document': { - id: req.params.id, - uri: "http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-ALA_170", - title: "Atlas Linguistique et ethnographique de l'Alsace - Enqu\u00eates linguistiques - Brumath: 03", - publishers: ["Atlas linguistiques, cultures et parlers r\u00e9gionaux de France"], - mediaArray: [ - { - url: "http:\/\/cocoon.huma-num.fr\/data\/ala\/ALA_170_22km.wav", - format: "audio\/x-wav"}, - { - url: "http:\/\/cocoon.huma-num.fr\/data\/ala\/ALA_170.mp3", - format: "audio\/mpeg"}, - { - url: "http:\/\/purl.org\/poi\/crdo.vjf.cnrs.fr\/crdo-ALA_170", - format: "audio\/x-wav" } - ] - } - }); + + var docRes = _.find(documentList, 'id', req.params.id); + if(docRes) { + res.send({'document': docRes}); + } else { + res.status(404).send('Not found'); + } + }); documentsRouter.put('/:id', function(req, res) { @@ -78,5 +187,5 @@ res.status(204).end(); }); - app.use('/api/documents', documentsRouter); + app.use('/api/v1/documents', documentsRouter); }; diff -r eadaf0b8f02e -r a9b98b16b053 server/bo_client/tests/integration/components/bo-doc-contributors-test.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/server/bo_client/tests/integration/components/bo-doc-contributors-test.js Tue Dec 01 13:33:08 2015 +0100 @@ -0,0 +1,25 @@ +import { moduleForComponent, test } from 'ember-qunit'; +import hbs from 'htmlbars-inline-precompile'; + +moduleForComponent('bo-doc-contributors', 'Integration | Component | bo doc contributors', { + integration: true +}); + +test('it renders', function(assert) { + + // Set any properties with this.set('myProperty', 'value'); + // Handle any actions with this.on('myAction', function(val) { ... });" + EOL + EOL + + + this.render(hbs`{{bo-doc-contributors}}`); + + assert.equal(this.$().text().trim(), ''); + + // Template block usage:" + EOL + + this.render(hbs` + {{#bo-doc-contributors}} + template block text + {{/bo-doc-contributors}} + `); + + assert.equal(this.$().text().trim(), 'template block text'); +}); diff -r eadaf0b8f02e -r a9b98b16b053 server/bo_client/tests/unit/helpers/add-one-test.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/server/bo_client/tests/unit/helpers/add-one-test.js Tue Dec 01 13:33:08 2015 +0100 @@ -0,0 +1,10 @@ +import { addOne } from '../../../helpers/add-one'; +import { module, test } from 'qunit'; + +module('Unit | Helper | add one'); + +// Replace this with your real tests. +test('it works', function(assert) { + let result = addOne(42); + assert.equal(result, 43); +}); diff -r eadaf0b8f02e -r a9b98b16b053 server/bo_client/tests/unit/helpers/document-contributor-role-translation-tag-test.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/server/bo_client/tests/unit/helpers/document-contributor-role-translation-tag-test.js Tue Dec 01 13:33:08 2015 +0100 @@ -0,0 +1,10 @@ +import { documentContributorRoleTranslationTag } from '../../../helpers/document-contributor-role-translation-tag'; +import { module, test } from 'qunit'; + +module('Unit | Helper | document contributor role translation tag'); + +// Replace this with your real tests. +test('it works', function(assert) { + let result = documentContributorRoleTranslationTag("http://www.language-archives.org/OLAC/1.1/transcriber"); + assert.equal(result, "bo.olac_role_transcriber"); +}); diff -r eadaf0b8f02e -r a9b98b16b053 server/src/app/Http/Controllers/Api/DocumentController.php --- a/server/src/app/Http/Controllers/Api/DocumentController.php Fri Nov 27 17:59:36 2015 +0100 +++ b/server/src/app/Http/Controllers/Api/DocumentController.php Tue Dec 01 13:33:08 2015 +0100 @@ -24,7 +24,12 @@ */ public function index() { - return response()->json($this->documentRepository->paginateAll()); + $paginator = $this->documentRepository->paginateAll(); + $res = []; + foreach ($paginator->toArray() as $key => $value) { + $res[($key === 'data')?'documents':$key] = $value; + } + return response()->json($res); } /** @@ -60,7 +65,7 @@ if(is_null($doc)) { abort(404); } - return response()->json($doc); + return response()->json(["document" => $doc]); } /** diff -r eadaf0b8f02e -r a9b98b16b053 server/src/app/Http/Controllers/Bo/DocumentListController.php --- a/server/src/app/Http/Controllers/Bo/DocumentListController.php Fri Nov 27 17:59:36 2015 +0100 +++ b/server/src/app/Http/Controllers/Bo/DocumentListController.php Tue Dec 01 13:33:08 2015 +0100 @@ -69,6 +69,27 @@ } /** + * Display the specified resource with the js client. + * + * @param string $id + * + * @return Response + */ + public function getClient($id) + { + //$doc->add("<$doc_uri>"); + $doc = $this->documentRepository->get($id); + + if(is_null($doc)) { + abort(404); + } + + return view('bo.docDetailClient', ['doc' => $doc]); + + } + + + /** * Show the form for editing the specified resource. * * @param int $id diff -r eadaf0b8f02e -r a9b98b16b053 server/src/app/Http/routes.php --- a/server/src/app/Http/routes.php Fri Nov 27 17:59:36 2015 +0100 +++ b/server/src/app/Http/routes.php Tue Dec 01 13:33:08 2015 +0100 @@ -15,7 +15,12 @@ Route::get('home', 'HomeController@index'); +//Route::get('bo/docs/docDetailClient', 'Bo\DocumentListController@showClient'); Route::resource('bo/docs', 'Bo\DocumentListController'); +Route::controller('bo/docs', 'Bo\DocumentListController', [ + 'getClient' => 'bo.docs.client' +]); + Route::controllers([ // 'auth' => 'Auth\AuthController', @@ -30,5 +35,7 @@ | */ -Route::resource('api/document', 'Api\DocumentController', - ['only' => ['index', 'show']]); +Route::group(['prefix' => 'api/v1'] , function() { + Route::resource('documents', 'Api\DocumentController', + ['only' => ['index', 'show']]); +}); diff -r eadaf0b8f02e -r a9b98b16b053 server/src/app/Libraries/CocoonUtils.php --- a/server/src/app/Libraries/CocoonUtils.php Fri Nov 27 17:59:36 2015 +0100 +++ b/server/src/app/Libraries/CocoonUtils.php Tue Dec 01 13:33:08 2015 +0100 @@ -3,6 +3,33 @@ class CocoonUtils { + const OLAC_ROLES = [ + 'http://www.language-archives.org/OLAC/1.1/annotator', + 'http://www.language-archives.org/OLAC/1.1/author', + 'http://www.language-archives.org/OLAC/1.1/compiler', + 'http://www.language-archives.org/OLAC/1.1/consultant', + 'http://www.language-archives.org/OLAC/1.1/data_inputter', + 'http://www.language-archives.org/OLAC/1.1/depositor', + 'http://www.language-archives.org/OLAC/1.1/developer', + 'http://www.language-archives.org/OLAC/1.1/editor', + 'http://www.language-archives.org/OLAC/1.1/illustrator', + 'http://www.language-archives.org/OLAC/1.1/interpreter', + 'http://www.language-archives.org/OLAC/1.1/interviewer', + 'http://www.language-archives.org/OLAC/1.1/participant', + 'http://www.language-archives.org/OLAC/1.1/performer', + 'http://www.language-archives.org/OLAC/1.1/photographer', + 'http://www.language-archives.org/OLAC/1.1/recorder', + 'http://www.language-archives.org/OLAC/1.1/researcher', + 'http://www.language-archives.org/OLAC/1.1/research_participant', + 'http://www.language-archives.org/OLAC/1.1/responder', + 'http://www.language-archives.org/OLAC/1.1/signer', + 'http://www.language-archives.org/OLAC/1.1/singer', + 'http://www.language-archives.org/OLAC/1.1/speaker', + 'http://www.language-archives.org/OLAC/1.1/sponsor', + 'http://www.language-archives.org/OLAC/1.1/transcriber', + 'http://www.language-archives.org/OLAC/1.1/translator', + ]; + /** * Extract id form cocoon url. * diff -r eadaf0b8f02e -r a9b98b16b053 server/src/app/Libraries/Utils.php --- a/server/src/app/Libraries/Utils.php Fri Nov 27 17:59:36 2015 +0100 +++ b/server/src/app/Libraries/Utils.php Tue Dec 01 13:33:08 2015 +0100 @@ -15,7 +15,7 @@ */ public static function dateIntervalToMillis(\DateInterval $di) { if(is_null($di)) { - return 0; + return null; } $seconds = ($di->s) + ($di->i * 60) @@ -35,9 +35,13 @@ * @return the number of milliseconds or 0 if $str is null */ public static function iso8601IntervalToMillis($str) { - if(is_null($str) || $str === '') { + if(is_null($str)) { + return null; + } + elseif( $str === '') { return 0; } + $di = new \DateInterval($str); return self::dateIntervalToMillis($di); } diff -r eadaf0b8f02e -r a9b98b16b053 server/src/app/Models/Document.php --- a/server/src/app/Models/Document.php Fri Nov 27 17:59:36 2015 +0100 +++ b/server/src/app/Models/Document.php Tue Dec 01 13:33:08 2015 +0100 @@ -67,6 +67,11 @@ return $this->title; } + public function getTitleValue() { + $title = $this->getTitle(); + return is_null($title)?null:$title->getValue(); + } + public function getPublishers() { if(is_null($this->publishers)) { try { @@ -89,6 +94,11 @@ return $this->issued; } + public function getIssuedValue() { + $issued = $this->getIssued(); + return is_null($issued)?null:$issued->getValue(); + } + public function getModified() { if(is_null($this->modified)) { try { @@ -96,9 +106,6 @@ if(is_null($this->modified)) { $this->modified = $this->getIssued(); } - else { - $this->modified = $this->modified->getValue(); - } } catch(\Exception $e) { $this->modified = null; } @@ -106,6 +113,11 @@ return $this->modified; } + public function getModifiedValue() { + $modified = $this->getModified(); + return is_null($modified)?null:$modified->getValue(); + } + public function getMediaArray() { if(is_null($this->mediaArray)) { @@ -116,7 +128,7 @@ $masterUrl = is_null($master)?null:$master->getUri(); foreach($this->graph->allOfType("") as $webResource) { - $extent = $webResource->getLiteral("dc:extent"); + $extent = $webResource->getLiteral(""); $extent = is_null($extent)?null:$extent->getValue(); $extent_ms = Utils::iso8601IntervalToMillis($extent); $format = $webResource->getLiteral("dc11:format"); @@ -150,6 +162,28 @@ return $res; } + public function getContributors() { + return array_reduce( + CocoonUtils::OLAC_ROLES, + function($res, $olacRole) { + return array_merge( + $res, + array_map( + function($olacValue) use ($olacRole) { + return [ + 'name' => ($olacValue instanceof Literal)?$olacValue->getValue():null, + 'url' => ($olacValue instanceof Resource)?$olacValue->getUri():null, + 'role' => $olacRole + ]; + }, + $this->getProvidedCHO()->all("<$olacRole>") + ) + ); + }, + [] + ); + } + /** * change discourse type list */ @@ -195,7 +229,9 @@ $mediaArray = array_map( function($m) { $f = Utils::processLiteralOrString($m['format']); - return ['url' => $m['url'], 'format' => $f];}, + $res = $m; + $res['format'] = $f; + return $res;}, $this->getMediaArray() ); @@ -207,9 +243,10 @@ return [ 'id' => $this->getId(), 'uri' => $this->getUri(), - 'title' => $this->getTitle()->getValue(), - 'modified' => $this->getModified(), + 'title' => $this->getTitleValue(), + 'modified' => $this->getModifiedValue(), 'publishers' => $publishers, + 'contributors' => $this->getContributors(), 'mediaArray'=> $mediaArray ]; } diff -r eadaf0b8f02e -r a9b98b16b053 server/src/app/Repositories/RdfDocumentRepository.php --- a/server/src/app/Repositories/RdfDocumentRepository.php Fri Nov 27 17:59:36 2015 +0100 +++ b/server/src/app/Repositories/RdfDocumentRepository.php Tue Dec 01 13:33:08 2015 +0100 @@ -134,12 +134,12 @@ $page = Paginator::resolveCurrentPage($pageName); - assert(is_numeric($page)); + assert(is_null($page) || is_numeric($page)); $total = $this->getCount(); $offset = max(0,($page - 1) * $perPage); - + $query = "SELECT DISTINCT ?uri ?doc ?title ?issued ?modified". " WHERE {". diff -r eadaf0b8f02e -r a9b98b16b053 server/src/config/cache.php --- a/server/src/config/cache.php Fri Nov 27 17:59:36 2015 +0100 +++ b/server/src/config/cache.php Tue Dec 01 13:33:08 2015 +0100 @@ -74,6 +74,6 @@ | */ - 'prefix' => 'laravel', + 'prefix' => 'corpus', ]; diff -r eadaf0b8f02e -r a9b98b16b053 server/src/gulpfile.js --- a/server/src/gulpfile.js Fri Nov 27 17:59:36 2015 +0100 +++ b/server/src/gulpfile.js Tue Dec 01 13:33:08 2015 +0100 @@ -1,5 +1,8 @@ -var elixir = require('laravel-elixir'); +var gulp = require('gulp'), + elixir = require('laravel-elixir'); + +var exec = require('child_process').execSync; /* |-------------------------------------------------------------------------- | Elixir Asset Management @@ -16,11 +19,27 @@ 'bootstrap': './vendor/bower_components/bootstrap-sass/assets/' }; +gulp.task('build-ember', function(cb) { + exec('node_modules/.bin/ember build -prod', { + cwd: '../bo_client', + stdio:[0,1,2] + }); +}); + + +gulp.task('copy-bo-ember', function() { + gulp.src('../bo_client/dist/assets/*.js') + .pipe(gulp.dest('public/js/vendor/')); + gulp.src('../bo_client/dist/assets/*.css') + .pipe(gulp.dest('public/css/vendor/')); +}); elixir(function(mix) { mix.sass('app.scss', 'public/css/app.css', {includePaths: [paths['bootstrap']+'stylesheets/']}) .copy(paths.bootstrap + 'fonts/bootstrap', 'public/fonts') .copy(paths.bootstrap + 'javascripts/bootstrap.js', 'public/js/vendor/bootstrap.js') .copy(paths.bower_base_path + 'jquery/dist/jquery.min.js', 'public/js/vendor/jquery.js') - .copy(paths.bower_base_path + 'font-awesome/css/font-awesome.min.css', 'public/css/vendor/font-awesome.css'); + .copy(paths.bower_base_path + 'font-awesome/css/font-awesome.min.css', 'public/css/vendor/font-awesome.css') + .task('build-ember') + .task('copy-bo-ember'); }); diff -r eadaf0b8f02e -r a9b98b16b053 server/src/package.json --- a/server/src/package.json Fri Nov 27 17:59:36 2015 +0100 +++ b/server/src/package.json Tue Dec 01 13:33:08 2015 +0100 @@ -3,6 +3,7 @@ "devDependencies": { "bower": "^1.5.3", "gulp": "^3.8.8", + "gulp-exec": "^2.1.2", "laravel-elixir": "*" } } diff -r eadaf0b8f02e -r a9b98b16b053 server/src/public/css/app.css --- a/server/src/public/css/app.css Fri Nov 27 17:59:36 2015 +0100 +++ b/server/src/public/css/app.css Tue Dec 01 13:33:08 2015 +0100 @@ -1,3 +1,4 @@ +@charset "UTF-8"; /*! * Bootstrap v3.3.5 (http://getbootstrap.com) * Copyright 2011-2015 Twitter, Inc. @@ -123,7 +124,8 @@ text-transform: none; } button, -html input[type="button"], input[type="reset"], +html input[type="button"], +input[type="reset"], input[type="submit"] { -webkit-appearance: button; cursor: pointer; } @@ -1066,8 +1068,7 @@ a { color: #337ab7; text-decoration: none; } - a:hover, - a:focus { + a:hover, a:focus { color: #23527c; text-decoration: underline; } a:focus { @@ -1119,8 +1120,7 @@ clip: rect(0, 0, 0, 0); border: 0; } -.sr-only-focusable:active, -.sr-only-focusable:focus { +.sr-only-focusable:active, .sr-only-focusable:focus { position: static; width: auto; height: auto; @@ -1132,7 +1132,7 @@ cursor: pointer; } h1, h2, h3, h4, h5, h6, -.h1, .h2, .h3, .h4, .h5, .h6 { +.h1, .h2, .h3, .doc_details_title, .h4, .content-main-title, .data-audio-title, .h5, .content-title, .h6 { font-family: inherit; font-weight: 500; line-height: 1.1; @@ -1146,10 +1146,10 @@ h6 .small, .h1 small, .h1 .small, .h2 small, - .h2 .small, .h3 small, - .h3 .small, .h4 small, - .h4 .small, .h5 small, - .h5 .small, .h6 small, + .h2 .small, .h3 small, .doc_details_title small, + .h3 .small, .doc_details_title .small, .h4 small, .content-main-title small, .data-audio-title small, + .h4 .small, .content-main-title .small, .data-audio-title .small, .h5 small, .content-title small, + .h5 .small, .content-title .small, .h6 small, .h6 .small { font-weight: normal; line-height: 1; @@ -1157,7 +1157,7 @@ h1, .h1, h2, .h2, -h3, .h3 { +h3, .h3, .doc_details_title { margin-top: 20px; margin-bottom: 10px; } h1 small, @@ -1167,21 +1167,21 @@ h2 .small, .h2 small, .h2 .small, h3 small, - h3 .small, .h3 small, - .h3 .small { + h3 .small, .h3 small, .doc_details_title small, + .h3 .small, .doc_details_title .small { font-size: 65%; } -h4, .h4, -h5, .h5, +h4, .h4, .content-main-title, .data-audio-title, +h5, .h5, .content-title, h6, .h6 { margin-top: 10px; margin-bottom: 10px; } h4 small, - h4 .small, .h4 small, - .h4 .small, + h4 .small, .h4 small, .content-main-title small, .data-audio-title small, + .h4 .small, .content-main-title .small, .data-audio-title .small, h5 small, - h5 .small, .h5 small, - .h5 .small, + h5 .small, .h5 small, .content-title small, + .h5 .small, .content-title .small, h6 small, h6 .small, .h6 small, .h6 .small { @@ -1193,13 +1193,13 @@ h2, .h2 { font-size: 30px; } -h3, .h3 { +h3, .h3, .doc_details_title { font-size: 24px; } -h4, .h4 { +h4, .h4, .content-main-title, .data-audio-title { font-size: 18px; } -h5, .h5 { +h5, .h5, .content-title { font-size: 14px; } h6, .h6 { @@ -1368,8 +1368,7 @@ dd { margin-left: 0; } -.dl-horizontal dd:before, -.dl-horizontal dd:after { +.dl-horizontal dd:before, .dl-horizontal dd:after { content: " "; display: table; } @@ -1499,8 +1498,7 @@ margin-left: auto; padding-left: 15px; padding-right: 15px; } - .container:before, - .container:after { + .container:before, .container:after { content: " "; display: table; } .container:after { @@ -1520,8 +1518,7 @@ margin-left: auto; padding-left: 15px; padding-right: 15px; } - .container-fluid:before, - .container-fluid:after { + .container-fluid:before, .container-fluid:after { content: " "; display: table; } .container-fluid:after { @@ -1530,8 +1527,7 @@ .row { margin-left: -15px; margin-right: -15px; } - .row:before, - .row:after { + .row:before, .row:after { content: " "; display: table; } .row:after { @@ -2324,8 +2320,7 @@ color: #999; } .form-control::-webkit-input-placeholder { color: #999; } - .form-control[disabled], - .form-control[readonly], + .form-control[disabled], .form-control[readonly], fieldset[disabled] .form-control { background-color: #eeeeee; opacity: 1; } @@ -2345,8 +2340,7 @@ input[type="datetime-local"].form-control, input[type="month"].form-control { line-height: 34px; } - input[type="date"].input-sm, - .input-group-sm > input[type="date"].form-control, + input[type="date"].input-sm, .input-group-sm > input[type="date"].form-control, .input-group-sm > input[type="date"].input-group-addon, .input-group-sm > .input-group-btn > input[type="date"].btn, .input-group-sm input[type="date"], @@ -2354,20 +2348,22 @@ .input-group-sm > input[type="time"].form-control, .input-group-sm > input[type="time"].input-group-addon, .input-group-sm > .input-group-btn > input[type="time"].btn, - .input-group-sm input[type="time"], + .input-group-sm + input[type="time"], input[type="datetime-local"].input-sm, .input-group-sm > input[type="datetime-local"].form-control, .input-group-sm > input[type="datetime-local"].input-group-addon, .input-group-sm > .input-group-btn > input[type="datetime-local"].btn, - .input-group-sm input[type="datetime-local"], + .input-group-sm + input[type="datetime-local"], input[type="month"].input-sm, .input-group-sm > input[type="month"].form-control, .input-group-sm > input[type="month"].input-group-addon, .input-group-sm > .input-group-btn > input[type="month"].btn, - .input-group-sm input[type="month"] { + .input-group-sm + input[type="month"] { line-height: 30px; } - input[type="date"].input-lg, - .input-group-lg > input[type="date"].form-control, + input[type="date"].input-lg, .input-group-lg > input[type="date"].form-control, .input-group-lg > input[type="date"].input-group-addon, .input-group-lg > .input-group-btn > input[type="date"].btn, .input-group-lg input[type="date"], @@ -2375,17 +2371,20 @@ .input-group-lg > input[type="time"].form-control, .input-group-lg > input[type="time"].input-group-addon, .input-group-lg > .input-group-btn > input[type="time"].btn, - .input-group-lg input[type="time"], + .input-group-lg + input[type="time"], input[type="datetime-local"].input-lg, .input-group-lg > input[type="datetime-local"].form-control, .input-group-lg > input[type="datetime-local"].input-group-addon, .input-group-lg > .input-group-btn > input[type="datetime-local"].btn, - .input-group-lg input[type="datetime-local"], + .input-group-lg + input[type="datetime-local"], input[type="month"].input-lg, .input-group-lg > input[type="month"].form-control, .input-group-lg > input[type="month"].input-group-addon, .input-group-lg > .input-group-btn > input[type="month"].btn, - .input-group-lg input[type="month"] { + .input-group-lg + input[type="month"] { line-height: 46px; } } .form-group { @@ -2432,24 +2431,26 @@ margin-top: 0; margin-left: 10px; } -input[type="radio"][disabled], -input[type="radio"].disabled, +input[type="radio"][disabled], input[type="radio"].disabled, fieldset[disabled] input[type="radio"], input[type="checkbox"][disabled], input[type="checkbox"].disabled, -fieldset[disabled] input[type="checkbox"] { +fieldset[disabled] +input[type="checkbox"] { cursor: not-allowed; } .radio-inline.disabled, fieldset[disabled] .radio-inline, .checkbox-inline.disabled, -fieldset[disabled] .checkbox-inline { +fieldset[disabled] +.checkbox-inline { cursor: not-allowed; } .radio.disabled label, fieldset[disabled] .radio label, .checkbox.disabled label, -fieldset[disabled] .checkbox label { +fieldset[disabled] +.checkbox label { cursor: not-allowed; } .form-control-static { @@ -2457,11 +2458,9 @@ padding-bottom: 7px; margin-bottom: 0; min-height: 34px; } - .form-control-static.input-lg, - .input-group-lg > .form-control-static.form-control, + .form-control-static.input-lg, .input-group-lg > .form-control-static.form-control, .input-group-lg > .form-control-static.input-group-addon, - .input-group-lg > .input-group-btn > .form-control-static.btn, - .form-control-static.input-sm, .input-group-sm > .form-control-static.form-control, + .input-group-lg > .input-group-btn > .form-control-static.btn, .form-control-static.input-sm, .input-group-sm > .form-control-static.form-control, .input-group-sm > .form-control-static.input-group-addon, .input-group-sm > .input-group-btn > .form-control-static.btn { padding-left: 0; @@ -2482,11 +2481,11 @@ height: 30px; line-height: 30px; } -textarea.input-sm, -.input-group-sm > textarea.form-control, +textarea.input-sm, .input-group-sm > textarea.form-control, .input-group-sm > textarea.input-group-addon, .input-group-sm > .input-group-btn > textarea.btn, -select[multiple].input-sm, .input-group-sm > select[multiple].form-control, +select[multiple].input-sm, +.input-group-sm > select[multiple].form-control, .input-group-sm > select[multiple].input-group-addon, .input-group-sm > .input-group-btn > select[multiple].btn { height: auto; } @@ -2528,11 +2527,11 @@ height: 46px; line-height: 46px; } -textarea.input-lg, -.input-group-lg > textarea.form-control, +textarea.input-lg, .input-group-lg > textarea.form-control, .input-group-lg > textarea.input-group-addon, .input-group-lg > .input-group-btn > textarea.btn, -select[multiple].input-lg, .input-group-lg > select[multiple].form-control, +select[multiple].input-lg, +.input-group-lg > select[multiple].form-control, .input-group-lg > select[multiple].input-group-addon, .input-group-lg > .input-group-btn > select[multiple].btn { height: auto; } @@ -2576,8 +2575,7 @@ text-align: center; pointer-events: none; } -.input-lg + .form-control-feedback, -.input-group-lg > .form-control + .form-control-feedback, +.input-lg + .form-control-feedback, .input-group-lg > .form-control + .form-control-feedback, .input-group-lg > .input-group-addon + .form-control-feedback, .input-group-lg > .input-group-btn > .btn + .form-control-feedback, .input-group-lg + .form-control-feedback, @@ -2586,8 +2584,7 @@ height: 46px; line-height: 46px; } -.input-sm + .form-control-feedback, -.input-group-sm > .form-control + .form-control-feedback, +.input-sm + .form-control-feedback, .input-group-sm > .form-control + .form-control-feedback, .input-group-sm > .input-group-addon + .form-control-feedback, .input-group-sm > .input-group-btn > .btn + .form-control-feedback, .input-group-sm + .form-control-feedback, @@ -2743,8 +2740,7 @@ .form-horizontal .form-group { margin-left: -15px; margin-right: -15px; } - .form-horizontal .form-group:before, - .form-horizontal .form-group:after { + .form-horizontal .form-group:before, .form-horizontal .form-group:after { content: " "; display: table; } .form-horizontal .form-group:after { @@ -2789,27 +2785,18 @@ -moz-user-select: none; -ms-user-select: none; user-select: none; } - .btn:focus, - .btn.focus, - .btn:active:focus, - .btn:active.focus, - .btn.active:focus, - .btn.active.focus { + .btn:focus, .btn.focus, .btn:active:focus, .btn:active.focus, .btn.active:focus, .btn.active.focus { outline: thin dotted; outline: 5px auto -webkit-focus-ring-color; outline-offset: -2px; } - .btn:hover, - .btn:focus, - .btn.focus { + .btn:hover, .btn:focus, .btn.focus { color: #333; text-decoration: none; } - .btn:active, - .btn.active { + .btn:active, .btn.active { outline: 0; background-image: none; box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); } - .btn.disabled, - .btn[disabled], + .btn.disabled, .btn[disabled], fieldset[disabled] .btn { cursor: not-allowed; opacity: 0.65; @@ -2824,8 +2811,7 @@ color: #333; background-color: #fff; border-color: #ccc; } - .btn-default:focus, - .btn-default.focus { + .btn-default:focus, .btn-default.focus { color: #333; background-color: #e6e6e6; border-color: #8c8c8c; } @@ -2833,40 +2819,22 @@ color: #333; background-color: #e6e6e6; border-color: #adadad; } - .btn-default:active, - .btn-default.active, + .btn-default:active, .btn-default.active, .open > .btn-default.dropdown-toggle { color: #333; background-color: #e6e6e6; border-color: #adadad; } - .btn-default:active:hover, - .btn-default:active:focus, - .btn-default:active.focus, - .btn-default.active:hover, - .btn-default.active:focus, - .btn-default.active.focus, + .btn-default:active:hover, .btn-default:active:focus, .btn-default:active.focus, .btn-default.active:hover, .btn-default.active:focus, .btn-default.active.focus, .open > .btn-default.dropdown-toggle:hover, .open > .btn-default.dropdown-toggle:focus, .open > .btn-default.dropdown-toggle.focus { color: #333; background-color: #d4d4d4; border-color: #8c8c8c; } - .btn-default:active, - .btn-default.active, + .btn-default:active, .btn-default.active, .open > .btn-default.dropdown-toggle { background-image: none; } - .btn-default.disabled, - .btn-default.disabled:hover, - .btn-default.disabled:focus, - .btn-default.disabled.focus, - .btn-default.disabled:active, - .btn-default.disabled.active, - .btn-default[disabled], - .btn-default[disabled]:hover, - .btn-default[disabled]:focus, - .btn-default[disabled].focus, - .btn-default[disabled]:active, - .btn-default[disabled].active, + .btn-default.disabled, .btn-default.disabled:hover, .btn-default.disabled:focus, .btn-default.disabled.focus, .btn-default.disabled:active, .btn-default.disabled.active, .btn-default[disabled], .btn-default[disabled]:hover, .btn-default[disabled]:focus, .btn-default[disabled].focus, .btn-default[disabled]:active, .btn-default[disabled].active, fieldset[disabled] .btn-default, fieldset[disabled] .btn-default:hover, fieldset[disabled] .btn-default:focus, @@ -2883,8 +2851,7 @@ color: #fff; background-color: #337ab7; border-color: #2e6da4; } - .btn-primary:focus, - .btn-primary.focus { + .btn-primary:focus, .btn-primary.focus { color: #fff; background-color: #286090; border-color: #122b40; } @@ -2892,40 +2859,22 @@ color: #fff; background-color: #286090; border-color: #204d74; } - .btn-primary:active, - .btn-primary.active, + .btn-primary:active, .btn-primary.active, .open > .btn-primary.dropdown-toggle { color: #fff; background-color: #286090; border-color: #204d74; } - .btn-primary:active:hover, - .btn-primary:active:focus, - .btn-primary:active.focus, - .btn-primary.active:hover, - .btn-primary.active:focus, - .btn-primary.active.focus, + .btn-primary:active:hover, .btn-primary:active:focus, .btn-primary:active.focus, .btn-primary.active:hover, .btn-primary.active:focus, .btn-primary.active.focus, .open > .btn-primary.dropdown-toggle:hover, .open > .btn-primary.dropdown-toggle:focus, .open > .btn-primary.dropdown-toggle.focus { color: #fff; background-color: #204d74; border-color: #122b40; } - .btn-primary:active, - .btn-primary.active, + .btn-primary:active, .btn-primary.active, .open > .btn-primary.dropdown-toggle { background-image: none; } - .btn-primary.disabled, - .btn-primary.disabled:hover, - .btn-primary.disabled:focus, - .btn-primary.disabled.focus, - .btn-primary.disabled:active, - .btn-primary.disabled.active, - .btn-primary[disabled], - .btn-primary[disabled]:hover, - .btn-primary[disabled]:focus, - .btn-primary[disabled].focus, - .btn-primary[disabled]:active, - .btn-primary[disabled].active, + .btn-primary.disabled, .btn-primary.disabled:hover, .btn-primary.disabled:focus, .btn-primary.disabled.focus, .btn-primary.disabled:active, .btn-primary.disabled.active, .btn-primary[disabled], .btn-primary[disabled]:hover, .btn-primary[disabled]:focus, .btn-primary[disabled].focus, .btn-primary[disabled]:active, .btn-primary[disabled].active, fieldset[disabled] .btn-primary, fieldset[disabled] .btn-primary:hover, fieldset[disabled] .btn-primary:focus, @@ -2942,8 +2891,7 @@ color: #fff; background-color: #5cb85c; border-color: #4cae4c; } - .btn-success:focus, - .btn-success.focus { + .btn-success:focus, .btn-success.focus { color: #fff; background-color: #449d44; border-color: #255625; } @@ -2951,40 +2899,22 @@ color: #fff; background-color: #449d44; border-color: #398439; } - .btn-success:active, - .btn-success.active, + .btn-success:active, .btn-success.active, .open > .btn-success.dropdown-toggle { color: #fff; background-color: #449d44; border-color: #398439; } - .btn-success:active:hover, - .btn-success:active:focus, - .btn-success:active.focus, - .btn-success.active:hover, - .btn-success.active:focus, - .btn-success.active.focus, + .btn-success:active:hover, .btn-success:active:focus, .btn-success:active.focus, .btn-success.active:hover, .btn-success.active:focus, .btn-success.active.focus, .open > .btn-success.dropdown-toggle:hover, .open > .btn-success.dropdown-toggle:focus, .open > .btn-success.dropdown-toggle.focus { color: #fff; background-color: #398439; border-color: #255625; } - .btn-success:active, - .btn-success.active, + .btn-success:active, .btn-success.active, .open > .btn-success.dropdown-toggle { background-image: none; } - .btn-success.disabled, - .btn-success.disabled:hover, - .btn-success.disabled:focus, - .btn-success.disabled.focus, - .btn-success.disabled:active, - .btn-success.disabled.active, - .btn-success[disabled], - .btn-success[disabled]:hover, - .btn-success[disabled]:focus, - .btn-success[disabled].focus, - .btn-success[disabled]:active, - .btn-success[disabled].active, + .btn-success.disabled, .btn-success.disabled:hover, .btn-success.disabled:focus, .btn-success.disabled.focus, .btn-success.disabled:active, .btn-success.disabled.active, .btn-success[disabled], .btn-success[disabled]:hover, .btn-success[disabled]:focus, .btn-success[disabled].focus, .btn-success[disabled]:active, .btn-success[disabled].active, fieldset[disabled] .btn-success, fieldset[disabled] .btn-success:hover, fieldset[disabled] .btn-success:focus, @@ -3001,8 +2931,7 @@ color: #fff; background-color: #5bc0de; border-color: #46b8da; } - .btn-info:focus, - .btn-info.focus { + .btn-info:focus, .btn-info.focus { color: #fff; background-color: #31b0d5; border-color: #1b6d85; } @@ -3010,40 +2939,22 @@ color: #fff; background-color: #31b0d5; border-color: #269abc; } - .btn-info:active, - .btn-info.active, + .btn-info:active, .btn-info.active, .open > .btn-info.dropdown-toggle { color: #fff; background-color: #31b0d5; border-color: #269abc; } - .btn-info:active:hover, - .btn-info:active:focus, - .btn-info:active.focus, - .btn-info.active:hover, - .btn-info.active:focus, - .btn-info.active.focus, + .btn-info:active:hover, .btn-info:active:focus, .btn-info:active.focus, .btn-info.active:hover, .btn-info.active:focus, .btn-info.active.focus, .open > .btn-info.dropdown-toggle:hover, .open > .btn-info.dropdown-toggle:focus, .open > .btn-info.dropdown-toggle.focus { color: #fff; background-color: #269abc; border-color: #1b6d85; } - .btn-info:active, - .btn-info.active, + .btn-info:active, .btn-info.active, .open > .btn-info.dropdown-toggle { background-image: none; } - .btn-info.disabled, - .btn-info.disabled:hover, - .btn-info.disabled:focus, - .btn-info.disabled.focus, - .btn-info.disabled:active, - .btn-info.disabled.active, - .btn-info[disabled], - .btn-info[disabled]:hover, - .btn-info[disabled]:focus, - .btn-info[disabled].focus, - .btn-info[disabled]:active, - .btn-info[disabled].active, + .btn-info.disabled, .btn-info.disabled:hover, .btn-info.disabled:focus, .btn-info.disabled.focus, .btn-info.disabled:active, .btn-info.disabled.active, .btn-info[disabled], .btn-info[disabled]:hover, .btn-info[disabled]:focus, .btn-info[disabled].focus, .btn-info[disabled]:active, .btn-info[disabled].active, fieldset[disabled] .btn-info, fieldset[disabled] .btn-info:hover, fieldset[disabled] .btn-info:focus, @@ -3060,8 +2971,7 @@ color: #fff; background-color: #f0ad4e; border-color: #eea236; } - .btn-warning:focus, - .btn-warning.focus { + .btn-warning:focus, .btn-warning.focus { color: #fff; background-color: #ec971f; border-color: #985f0d; } @@ -3069,40 +2979,22 @@ color: #fff; background-color: #ec971f; border-color: #d58512; } - .btn-warning:active, - .btn-warning.active, + .btn-warning:active, .btn-warning.active, .open > .btn-warning.dropdown-toggle { color: #fff; background-color: #ec971f; border-color: #d58512; } - .btn-warning:active:hover, - .btn-warning:active:focus, - .btn-warning:active.focus, - .btn-warning.active:hover, - .btn-warning.active:focus, - .btn-warning.active.focus, + .btn-warning:active:hover, .btn-warning:active:focus, .btn-warning:active.focus, .btn-warning.active:hover, .btn-warning.active:focus, .btn-warning.active.focus, .open > .btn-warning.dropdown-toggle:hover, .open > .btn-warning.dropdown-toggle:focus, .open > .btn-warning.dropdown-toggle.focus { color: #fff; background-color: #d58512; border-color: #985f0d; } - .btn-warning:active, - .btn-warning.active, + .btn-warning:active, .btn-warning.active, .open > .btn-warning.dropdown-toggle { background-image: none; } - .btn-warning.disabled, - .btn-warning.disabled:hover, - .btn-warning.disabled:focus, - .btn-warning.disabled.focus, - .btn-warning.disabled:active, - .btn-warning.disabled.active, - .btn-warning[disabled], - .btn-warning[disabled]:hover, - .btn-warning[disabled]:focus, - .btn-warning[disabled].focus, - .btn-warning[disabled]:active, - .btn-warning[disabled].active, + .btn-warning.disabled, .btn-warning.disabled:hover, .btn-warning.disabled:focus, .btn-warning.disabled.focus, .btn-warning.disabled:active, .btn-warning.disabled.active, .btn-warning[disabled], .btn-warning[disabled]:hover, .btn-warning[disabled]:focus, .btn-warning[disabled].focus, .btn-warning[disabled]:active, .btn-warning[disabled].active, fieldset[disabled] .btn-warning, fieldset[disabled] .btn-warning:hover, fieldset[disabled] .btn-warning:focus, @@ -3119,8 +3011,7 @@ color: #fff; background-color: #d9534f; border-color: #d43f3a; } - .btn-danger:focus, - .btn-danger.focus { + .btn-danger:focus, .btn-danger.focus { color: #fff; background-color: #c9302c; border-color: #761c19; } @@ -3128,40 +3019,22 @@ color: #fff; background-color: #c9302c; border-color: #ac2925; } - .btn-danger:active, - .btn-danger.active, + .btn-danger:active, .btn-danger.active, .open > .btn-danger.dropdown-toggle { color: #fff; background-color: #c9302c; border-color: #ac2925; } - .btn-danger:active:hover, - .btn-danger:active:focus, - .btn-danger:active.focus, - .btn-danger.active:hover, - .btn-danger.active:focus, - .btn-danger.active.focus, + .btn-danger:active:hover, .btn-danger:active:focus, .btn-danger:active.focus, .btn-danger.active:hover, .btn-danger.active:focus, .btn-danger.active.focus, .open > .btn-danger.dropdown-toggle:hover, .open > .btn-danger.dropdown-toggle:focus, .open > .btn-danger.dropdown-toggle.focus { color: #fff; background-color: #ac2925; border-color: #761c19; } - .btn-danger:active, - .btn-danger.active, + .btn-danger:active, .btn-danger.active, .open > .btn-danger.dropdown-toggle { background-image: none; } - .btn-danger.disabled, - .btn-danger.disabled:hover, - .btn-danger.disabled:focus, - .btn-danger.disabled.focus, - .btn-danger.disabled:active, - .btn-danger.disabled.active, - .btn-danger[disabled], - .btn-danger[disabled]:hover, - .btn-danger[disabled]:focus, - .btn-danger[disabled].focus, - .btn-danger[disabled]:active, - .btn-danger[disabled].active, + .btn-danger.disabled, .btn-danger.disabled:hover, .btn-danger.disabled:focus, .btn-danger.disabled.focus, .btn-danger.disabled:active, .btn-danger.disabled.active, .btn-danger[disabled], .btn-danger[disabled]:hover, .btn-danger[disabled]:focus, .btn-danger[disabled].focus, .btn-danger[disabled]:active, .btn-danger[disabled].active, fieldset[disabled] .btn-danger, fieldset[disabled] .btn-danger:hover, fieldset[disabled] .btn-danger:focus, @@ -3178,25 +3051,17 @@ color: #337ab7; font-weight: normal; border-radius: 0; } - .btn-link, - .btn-link:active, - .btn-link.active, - .btn-link[disabled], + .btn-link, .btn-link:active, .btn-link.active, .btn-link[disabled], fieldset[disabled] .btn-link { background-color: transparent; box-shadow: none; } - .btn-link, - .btn-link:hover, - .btn-link:focus, - .btn-link:active { + .btn-link, .btn-link:hover, .btn-link:focus, .btn-link:active { border-color: transparent; } - .btn-link:hover, - .btn-link:focus { + .btn-link:hover, .btn-link:focus { color: #23527c; text-decoration: underline; background-color: transparent; } - .btn-link[disabled]:hover, - .btn-link[disabled]:focus, + .btn-link[disabled]:hover, .btn-link[disabled]:focus, fieldset[disabled] .btn-link:hover, fieldset[disabled] .btn-link:focus { color: #777777; @@ -3311,27 +3176,21 @@ color: #333333; white-space: nowrap; } -.dropdown-menu > li > a:hover, -.dropdown-menu > li > a:focus { +.dropdown-menu > li > a:hover, .dropdown-menu > li > a:focus { text-decoration: none; color: #262626; background-color: #f5f5f5; } -.dropdown-menu > .active > a, -.dropdown-menu > .active > a:hover, -.dropdown-menu > .active > a:focus { +.dropdown-menu > .active > a, .dropdown-menu > .active > a:hover, .dropdown-menu > .active > a:focus { color: #fff; text-decoration: none; outline: 0; background-color: #337ab7; } -.dropdown-menu > .disabled > a, -.dropdown-menu > .disabled > a:hover, -.dropdown-menu > .disabled > a:focus { +.dropdown-menu > .disabled > a, .dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus { color: #777777; } -.dropdown-menu > .disabled > a:hover, -.dropdown-menu > .disabled > a:focus { +.dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus { text-decoration: none; background-color: transparent; background-image: none; @@ -3402,10 +3261,7 @@ .btn-group-vertical > .btn { position: relative; float: left; } - .btn-group > .btn:hover, - .btn-group > .btn:focus, - .btn-group > .btn:active, - .btn-group > .btn.active, + .btn-group > .btn:hover, .btn-group > .btn:focus, .btn-group > .btn:active, .btn-group > .btn.active, .btn-group-vertical > .btn:hover, .btn-group-vertical > .btn:focus, .btn-group-vertical > .btn:active, @@ -3420,8 +3276,7 @@ .btn-toolbar { margin-left: -5px; } - .btn-toolbar:before, - .btn-toolbar:after { + .btn-toolbar:before, .btn-toolbar:after { content: " "; display: table; } .btn-toolbar:after { @@ -3499,8 +3354,7 @@ width: 100%; max-width: 100%; } -.btn-group-vertical > .btn-group:before, -.btn-group-vertical > .btn-group:after { +.btn-group-vertical > .btn-group:before, .btn-group-vertical > .btn-group:after { content: " "; display: table; } @@ -3605,12 +3459,14 @@ background-color: #eeeeee; border: 1px solid #ccc; border-radius: 4px; } - .input-group-addon.input-sm, .input-group-sm > .input-group-addon, + .input-group-addon.input-sm, + .input-group-sm > .input-group-addon, .input-group-sm > .input-group-btn > .input-group-addon.btn { padding: 5px 10px; font-size: 12px; border-radius: 3px; } - .input-group-addon.input-lg, .input-group-lg > .input-group-addon, + .input-group-addon.input-lg, + .input-group-lg > .input-group-addon, .input-group-lg > .input-group-btn > .input-group-addon.btn { padding: 10px 16px; font-size: 18px; @@ -3653,9 +3509,7 @@ position: relative; } .input-group-btn > .btn + .btn { margin-left: -1px; } - .input-group-btn > .btn:hover, - .input-group-btn > .btn:focus, - .input-group-btn > .btn:active { + .input-group-btn > .btn:hover, .input-group-btn > .btn:focus, .input-group-btn > .btn:active { z-index: 2; } .input-group-btn:first-child > .btn, .input-group-btn:first-child > .btn-group { @@ -3669,8 +3523,7 @@ margin-bottom: 0; padding-left: 0; list-style: none; } - .nav:before, - .nav:after { + .nav:before, .nav:after { content: " "; display: table; } .nav:after { @@ -3682,21 +3535,17 @@ position: relative; display: block; padding: 10px 15px; } - .nav > li > a:hover, - .nav > li > a:focus { + .nav > li > a:hover, .nav > li > a:focus { text-decoration: none; background-color: #eeeeee; } .nav > li.disabled > a { color: #777777; } - .nav > li.disabled > a:hover, - .nav > li.disabled > a:focus { + .nav > li.disabled > a:hover, .nav > li.disabled > a:focus { color: #777777; text-decoration: none; background-color: transparent; cursor: not-allowed; } - .nav .open > a, - .nav .open > a:hover, - .nav .open > a:focus { + .nav .open > a, .nav .open > a:hover, .nav .open > a:focus { background-color: #eeeeee; border-color: #337ab7; } .nav .nav-divider { @@ -3719,9 +3568,7 @@ border-radius: 4px 4px 0 0; } .nav-tabs > li > a:hover { border-color: #eeeeee #eeeeee #ddd; } - .nav-tabs > li.active > a, - .nav-tabs > li.active > a:hover, - .nav-tabs > li.active > a:focus { + .nav-tabs > li.active > a, .nav-tabs > li.active > a:hover, .nav-tabs > li.active > a:focus { color: #555555; background-color: #fff; border: 1px solid #ddd; @@ -3734,9 +3581,7 @@ border-radius: 4px; } .nav-pills > li + li { margin-left: 2px; } - .nav-pills > li.active > a, - .nav-pills > li.active > a:hover, - .nav-pills > li.active > a:focus { + .nav-pills > li.active > a, .nav-pills > li.active > a:hover, .nav-pills > li.active > a:focus { color: #fff; background-color: #337ab7; } @@ -3768,17 +3613,17 @@ .nav-tabs-justified > li > a, .nav-tabs.nav-justified > li > a { margin-right: 0; border-radius: 4px; } - .nav-tabs-justified > .active > a, - .nav-tabs.nav-justified > .active > a, .nav-tabs-justified > .active > a:hover, - .nav-tabs.nav-justified > .active > a:hover, .nav-tabs-justified > .active > a:focus, .nav-tabs.nav-justified > .active > a:focus { + .nav-tabs-justified > .active > a, .nav-tabs.nav-justified > .active > a, + .nav-tabs-justified > .active > a:hover, .nav-tabs.nav-justified > .active > a:hover, + .nav-tabs-justified > .active > a:focus, .nav-tabs.nav-justified > .active > a:focus { border: 1px solid #ddd; } @media (min-width: 768px) { .nav-tabs-justified > li > a, .nav-tabs.nav-justified > li > a { border-bottom: 1px solid #ddd; border-radius: 4px 4px 0 0; } - .nav-tabs-justified > .active > a, - .nav-tabs.nav-justified > .active > a, .nav-tabs-justified > .active > a:hover, - .nav-tabs.nav-justified > .active > a:hover, .nav-tabs-justified > .active > a:focus, .nav-tabs.nav-justified > .active > a:focus { + .nav-tabs-justified > .active > a, .nav-tabs.nav-justified > .active > a, + .nav-tabs-justified > .active > a:hover, .nav-tabs.nav-justified > .active > a:hover, + .nav-tabs-justified > .active > a:focus, .nav-tabs.nav-justified > .active > a:focus { border-bottom-color: #fff; } } .tab-content > .tab-pane { @@ -3797,8 +3642,7 @@ min-height: 50px; margin-bottom: 20px; border: 1px solid transparent; } - .navbar:before, - .navbar:after { + .navbar:before, .navbar:after { content: " "; display: table; } .navbar:after { @@ -3807,8 +3651,7 @@ .navbar { border-radius: 4px; } } -.navbar-header:before, -.navbar-header:after { +.navbar-header:before, .navbar-header:after { content: " "; display: table; } @@ -3826,8 +3669,7 @@ border-top: 1px solid transparent; box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1); -webkit-overflow-scrolling: touch; } - .navbar-collapse:before, - .navbar-collapse:after { + .navbar-collapse:before, .navbar-collapse:after { content: " "; display: table; } .navbar-collapse:after { @@ -3907,8 +3749,7 @@ font-size: 18px; line-height: 20px; height: 50px; } - .navbar-brand:hover, - .navbar-brand:focus { + .navbar-brand:hover, .navbar-brand:focus { text-decoration: none; } .navbar-brand > img { display: block; } @@ -3961,8 +3802,7 @@ padding: 5px 15px 5px 25px; } .navbar-nav .open .dropdown-menu > li > a { line-height: 20px; } - .navbar-nav .open .dropdown-menu > li > a:hover, - .navbar-nav .open .dropdown-menu > li > a:focus { + .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-nav .open .dropdown-menu > li > a:focus { background-image: none; } } @media (min-width: 768px) { .navbar-nav { @@ -4081,58 +3921,44 @@ border-color: #e7e7e7; } .navbar-default .navbar-brand { color: #777; } - .navbar-default .navbar-brand:hover, - .navbar-default .navbar-brand:focus { + .navbar-default .navbar-brand:hover, .navbar-default .navbar-brand:focus { color: #5e5e5e; background-color: transparent; } .navbar-default .navbar-text { color: #777; } .navbar-default .navbar-nav > li > a { color: #777; } - .navbar-default .navbar-nav > li > a:hover, - .navbar-default .navbar-nav > li > a:focus { + .navbar-default .navbar-nav > li > a:hover, .navbar-default .navbar-nav > li > a:focus { color: #333; background-color: transparent; } - .navbar-default .navbar-nav > .active > a, - .navbar-default .navbar-nav > .active > a:hover, - .navbar-default .navbar-nav > .active > a:focus { + .navbar-default .navbar-nav > .active > a, .navbar-default .navbar-nav > .active > a:hover, .navbar-default .navbar-nav > .active > a:focus { color: #555; background-color: #e7e7e7; } - .navbar-default .navbar-nav > .disabled > a, - .navbar-default .navbar-nav > .disabled > a:hover, - .navbar-default .navbar-nav > .disabled > a:focus { + .navbar-default .navbar-nav > .disabled > a, .navbar-default .navbar-nav > .disabled > a:hover, .navbar-default .navbar-nav > .disabled > a:focus { color: #ccc; background-color: transparent; } .navbar-default .navbar-toggle { border-color: #ddd; } - .navbar-default .navbar-toggle:hover, - .navbar-default .navbar-toggle:focus { + .navbar-default .navbar-toggle:hover, .navbar-default .navbar-toggle:focus { background-color: #ddd; } .navbar-default .navbar-toggle .icon-bar { background-color: #888; } .navbar-default .navbar-collapse, .navbar-default .navbar-form { border-color: #e7e7e7; } - .navbar-default .navbar-nav > .open > a, - .navbar-default .navbar-nav > .open > a:hover, - .navbar-default .navbar-nav > .open > a:focus { + .navbar-default .navbar-nav > .open > a, .navbar-default .navbar-nav > .open > a:hover, .navbar-default .navbar-nav > .open > a:focus { background-color: #e7e7e7; color: #555; } @media (max-width: 767px) { .navbar-default .navbar-nav .open .dropdown-menu > li > a { color: #777; } - .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, - .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { + .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { color: #333; background-color: transparent; } - .navbar-default .navbar-nav .open .dropdown-menu > .active > a, - .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, - .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus { + .navbar-default .navbar-nav .open .dropdown-menu > .active > a, .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus { color: #555; background-color: #e7e7e7; } - .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, - .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, - .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus { + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus { color: #ccc; background-color: transparent; } } .navbar-default .navbar-link { @@ -4141,11 +3967,9 @@ color: #333; } .navbar-default .btn-link { color: #777; } - .navbar-default .btn-link:hover, - .navbar-default .btn-link:focus { + .navbar-default .btn-link:hover, .navbar-default .btn-link:focus { color: #333; } - .navbar-default .btn-link[disabled]:hover, - .navbar-default .btn-link[disabled]:focus, + .navbar-default .btn-link[disabled]:hover, .navbar-default .btn-link[disabled]:focus, fieldset[disabled] .navbar-default .btn-link:hover, fieldset[disabled] .navbar-default .btn-link:focus { color: #ccc; } @@ -4155,41 +3979,32 @@ border-color: #090909; } .navbar-inverse .navbar-brand { color: #9d9d9d; } - .navbar-inverse .navbar-brand:hover, - .navbar-inverse .navbar-brand:focus { + .navbar-inverse .navbar-brand:hover, .navbar-inverse .navbar-brand:focus { color: #fff; background-color: transparent; } .navbar-inverse .navbar-text { color: #9d9d9d; } .navbar-inverse .navbar-nav > li > a { color: #9d9d9d; } - .navbar-inverse .navbar-nav > li > a:hover, - .navbar-inverse .navbar-nav > li > a:focus { + .navbar-inverse .navbar-nav > li > a:hover, .navbar-inverse .navbar-nav > li > a:focus { color: #fff; background-color: transparent; } - .navbar-inverse .navbar-nav > .active > a, - .navbar-inverse .navbar-nav > .active > a:hover, - .navbar-inverse .navbar-nav > .active > a:focus { + .navbar-inverse .navbar-nav > .active > a, .navbar-inverse .navbar-nav > .active > a:hover, .navbar-inverse .navbar-nav > .active > a:focus { color: #fff; background-color: #090909; } - .navbar-inverse .navbar-nav > .disabled > a, - .navbar-inverse .navbar-nav > .disabled > a:hover, - .navbar-inverse .navbar-nav > .disabled > a:focus { + .navbar-inverse .navbar-nav > .disabled > a, .navbar-inverse .navbar-nav > .disabled > a:hover, .navbar-inverse .navbar-nav > .disabled > a:focus { color: #444; background-color: transparent; } .navbar-inverse .navbar-toggle { border-color: #333; } - .navbar-inverse .navbar-toggle:hover, - .navbar-inverse .navbar-toggle:focus { + .navbar-inverse .navbar-toggle:hover, .navbar-inverse .navbar-toggle:focus { background-color: #333; } .navbar-inverse .navbar-toggle .icon-bar { background-color: #fff; } .navbar-inverse .navbar-collapse, .navbar-inverse .navbar-form { border-color: #101010; } - .navbar-inverse .navbar-nav > .open > a, - .navbar-inverse .navbar-nav > .open > a:hover, - .navbar-inverse .navbar-nav > .open > a:focus { + .navbar-inverse .navbar-nav > .open > a, .navbar-inverse .navbar-nav > .open > a:hover, .navbar-inverse .navbar-nav > .open > a:focus { background-color: #090909; color: #fff; } @media (max-width: 767px) { @@ -4199,18 +4014,13 @@ background-color: #090909; } .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { color: #9d9d9d; } - .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, - .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { color: #fff; background-color: transparent; } - .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, - .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, - .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus { + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus { color: #fff; background-color: #090909; } - .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, - .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, - .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus { + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus { color: #444; background-color: transparent; } } .navbar-inverse .navbar-link { @@ -4219,11 +4029,9 @@ color: #fff; } .navbar-inverse .btn-link { color: #9d9d9d; } - .navbar-inverse .btn-link:hover, - .navbar-inverse .btn-link:focus { + .navbar-inverse .btn-link:hover, .navbar-inverse .btn-link:focus { color: #fff; } - .navbar-inverse .btn-link[disabled]:hover, - .navbar-inverse .btn-link[disabled]:focus, + .navbar-inverse .btn-link[disabled]:hover, .navbar-inverse .btn-link[disabled]:focus, fieldset[disabled] .navbar-inverse .btn-link:hover, fieldset[disabled] .navbar-inverse .btn-link:focus { color: #444; } @@ -4237,7 +4045,7 @@ .breadcrumb > li { display: inline-block; } .breadcrumb > li + li:before { - content: "/\\00a0"; + content: "/ "; padding: 0 5px; color: #ccc; } .breadcrumb > .active { @@ -4270,17 +4078,14 @@ .pagination > li:last-child > span { border-bottom-right-radius: 4px; border-top-right-radius: 4px; } - .pagination > li > a:hover, - .pagination > li > a:focus, + .pagination > li > a:hover, .pagination > li > a:focus, .pagination > li > span:hover, .pagination > li > span:focus { z-index: 3; color: #23527c; background-color: #eeeeee; border-color: #ddd; } - .pagination > .active > a, - .pagination > .active > a:hover, - .pagination > .active > a:focus, + .pagination > .active > a, .pagination > .active > a:hover, .pagination > .active > a:focus, .pagination > .active > span, .pagination > .active > span:hover, .pagination > .active > span:focus { @@ -4337,8 +4142,7 @@ margin: 20px 0; list-style: none; text-align: center; } - .pager:before, - .pager:after { + .pager:before, .pager:after { content: " "; display: table; } .pager:after { @@ -4372,7 +4176,7 @@ .label { display: inline; - padding: 0.2em 0.6em 0.3em; + padding: .2em .6em .3em; font-size: 75%; font-weight: bold; line-height: 1; @@ -4387,46 +4191,39 @@ position: relative; top: -1px; } -a.label:hover, -a.label:focus { +a.label:hover, a.label:focus { color: #fff; text-decoration: none; cursor: pointer; } .label-default { background-color: #777777; } - .label-default[href]:hover, - .label-default[href]:focus { + .label-default[href]:hover, .label-default[href]:focus { background-color: #5e5e5e; } .label-primary { background-color: #337ab7; } - .label-primary[href]:hover, - .label-primary[href]:focus { + .label-primary[href]:hover, .label-primary[href]:focus { background-color: #286090; } .label-success { background-color: #5cb85c; } - .label-success[href]:hover, - .label-success[href]:focus { + .label-success[href]:hover, .label-success[href]:focus { background-color: #449d44; } .label-info { background-color: #5bc0de; } - .label-info[href]:hover, - .label-info[href]:focus { + .label-info[href]:hover, .label-info[href]:focus { background-color: #31b0d5; } .label-warning { background-color: #f0ad4e; } - .label-warning[href]:hover, - .label-warning[href]:focus { + .label-warning[href]:hover, .label-warning[href]:focus { background-color: #ec971f; } .label-danger { background-color: #d9534f; } - .label-danger[href]:hover, - .label-danger[href]:focus { + .label-danger[href]:hover, .label-danger[href]:focus { background-color: #c9302c; } .badge { @@ -4447,8 +4244,7 @@ .btn .badge { position: relative; top: -1px; } - .btn-xs .badge, - .btn-group-xs > .btn .badge, + .btn-xs .badge, .btn-group-xs > .btn .badge, .btn-group-xs > .btn .badge { top: 0; padding: 1px 5px; } @@ -4463,8 +4259,7 @@ .nav-pills > li > a > .badge { margin-left: 3px; } -a.badge:hover, -a.badge:focus { +a.badge:hover, a.badge:focus { color: #fff; text-decoration: none; cursor: pointer; } @@ -4542,9 +4337,11 @@ .alert > p + p { margin-top: 5px; } -.alert-dismissable, .alert-dismissible { +.alert-dismissable, +.alert-dismissible { padding-right: 35px; } - .alert-dismissable .close, .alert-dismissible .close { + .alert-dismissable .close, + .alert-dismissible .close { position: relative; top: -2px; right: -21px; @@ -4719,8 +4516,7 @@ a.list-group-item .list-group-item-heading, button.list-group-item .list-group-item-heading { color: #333; } - a.list-group-item:hover, - a.list-group-item:focus, + a.list-group-item:hover, a.list-group-item:focus, button.list-group-item:hover, button.list-group-item:focus { text-decoration: none; @@ -4731,41 +4527,29 @@ width: 100%; text-align: left; } -.list-group-item.disabled, -.list-group-item.disabled:hover, -.list-group-item.disabled:focus { +.list-group-item.disabled, .list-group-item.disabled:hover, .list-group-item.disabled:focus { background-color: #eeeeee; color: #777777; cursor: not-allowed; } - .list-group-item.disabled .list-group-item-heading, - .list-group-item.disabled:hover .list-group-item-heading, - .list-group-item.disabled:focus .list-group-item-heading { + .list-group-item.disabled .list-group-item-heading, .list-group-item.disabled:hover .list-group-item-heading, .list-group-item.disabled:focus .list-group-item-heading { color: inherit; } - .list-group-item.disabled .list-group-item-text, - .list-group-item.disabled:hover .list-group-item-text, - .list-group-item.disabled:focus .list-group-item-text { + .list-group-item.disabled .list-group-item-text, .list-group-item.disabled:hover .list-group-item-text, .list-group-item.disabled:focus .list-group-item-text { color: #777777; } -.list-group-item.active, -.list-group-item.active:hover, -.list-group-item.active:focus { +.list-group-item.active, .list-group-item.active:hover, .list-group-item.active:focus { z-index: 2; color: #fff; background-color: #337ab7; border-color: #337ab7; } .list-group-item.active .list-group-item-heading, .list-group-item.active .list-group-item-heading > small, - .list-group-item.active .list-group-item-heading > .small, - .list-group-item.active:hover .list-group-item-heading, + .list-group-item.active .list-group-item-heading > .small, .list-group-item.active:hover .list-group-item-heading, .list-group-item.active:hover .list-group-item-heading > small, - .list-group-item.active:hover .list-group-item-heading > .small, - .list-group-item.active:focus .list-group-item-heading, + .list-group-item.active:hover .list-group-item-heading > .small, .list-group-item.active:focus .list-group-item-heading, .list-group-item.active:focus .list-group-item-heading > small, .list-group-item.active:focus .list-group-item-heading > .small { color: inherit; } - .list-group-item.active .list-group-item-text, - .list-group-item.active:hover .list-group-item-text, - .list-group-item.active:focus .list-group-item-text { + .list-group-item.active .list-group-item-text, .list-group-item.active:hover .list-group-item-text, .list-group-item.active:focus .list-group-item-text { color: #c7ddef; } .list-group-item-success { @@ -4778,15 +4562,12 @@ a.list-group-item-success .list-group-item-heading, button.list-group-item-success .list-group-item-heading { color: inherit; } - a.list-group-item-success:hover, - a.list-group-item-success:focus, + a.list-group-item-success:hover, a.list-group-item-success:focus, button.list-group-item-success:hover, button.list-group-item-success:focus { color: #3c763d; background-color: #d0e9c6; } - a.list-group-item-success.active, - a.list-group-item-success.active:hover, - a.list-group-item-success.active:focus, + a.list-group-item-success.active, a.list-group-item-success.active:hover, a.list-group-item-success.active:focus, button.list-group-item-success.active, button.list-group-item-success.active:hover, button.list-group-item-success.active:focus { @@ -4804,15 +4585,12 @@ a.list-group-item-info .list-group-item-heading, button.list-group-item-info .list-group-item-heading { color: inherit; } - a.list-group-item-info:hover, - a.list-group-item-info:focus, + a.list-group-item-info:hover, a.list-group-item-info:focus, button.list-group-item-info:hover, button.list-group-item-info:focus { color: #31708f; background-color: #c4e3f3; } - a.list-group-item-info.active, - a.list-group-item-info.active:hover, - a.list-group-item-info.active:focus, + a.list-group-item-info.active, a.list-group-item-info.active:hover, a.list-group-item-info.active:focus, button.list-group-item-info.active, button.list-group-item-info.active:hover, button.list-group-item-info.active:focus { @@ -4830,15 +4608,12 @@ a.list-group-item-warning .list-group-item-heading, button.list-group-item-warning .list-group-item-heading { color: inherit; } - a.list-group-item-warning:hover, - a.list-group-item-warning:focus, + a.list-group-item-warning:hover, a.list-group-item-warning:focus, button.list-group-item-warning:hover, button.list-group-item-warning:focus { color: #8a6d3b; background-color: #faf2cc; } - a.list-group-item-warning.active, - a.list-group-item-warning.active:hover, - a.list-group-item-warning.active:focus, + a.list-group-item-warning.active, a.list-group-item-warning.active:hover, a.list-group-item-warning.active:focus, button.list-group-item-warning.active, button.list-group-item-warning.active:hover, button.list-group-item-warning.active:focus { @@ -4856,15 +4631,12 @@ a.list-group-item-danger .list-group-item-heading, button.list-group-item-danger .list-group-item-heading { color: inherit; } - a.list-group-item-danger:hover, - a.list-group-item-danger:focus, + a.list-group-item-danger:hover, a.list-group-item-danger:focus, button.list-group-item-danger:hover, button.list-group-item-danger:focus { color: #a94442; background-color: #ebcccc; } - a.list-group-item-danger.active, - a.list-group-item-danger.active:hover, - a.list-group-item-danger.active:focus, + a.list-group-item-danger.active, a.list-group-item-danger.active:hover, a.list-group-item-danger.active:focus, button.list-group-item-danger.active, button.list-group-item-danger.active:hover, button.list-group-item-danger.active:focus { @@ -4889,8 +4661,7 @@ .panel-body { padding: 15px; } - .panel-body:before, - .panel-body:after { + .panel-body:before, .panel-body:after { content: " "; display: table; } .panel-body:after { @@ -5236,8 +5007,7 @@ text-shadow: 0 1px 0 #fff; opacity: 0.2; filter: alpha(opacity=20); } - .close:hover, - .close:focus { + .close:hover, .close:focus { color: #000; text-decoration: none; cursor: pointer; @@ -5328,8 +5098,7 @@ padding: 15px; text-align: right; border-top: 1px solid #e5e5e5; } - .modal-footer:before, - .modal-footer:after { + .modal-footer:before, .modal-footer:after { content: " "; display: table; } .modal-footer:after { @@ -5521,8 +5290,7 @@ .popover-content { padding: 9px 14px; } -.popover > .arrow, -.popover > .arrow:after { +.popover > .arrow, .popover > .arrow:after { position: absolute; display: block; width: 0; @@ -5618,19 +5386,15 @@ backface-visibility: hidden; -webkit-perspective: 1000px; perspective: 1000px; } - .carousel-inner > .item.next, - .carousel-inner > .item.active.right { + .carousel-inner > .item.next, .carousel-inner > .item.active.right { -webkit-transform: translate3d(100%, 0, 0); transform: translate3d(100%, 0, 0); left: 0; } - .carousel-inner > .item.prev, - .carousel-inner > .item.active.left { + .carousel-inner > .item.prev, .carousel-inner > .item.active.left { -webkit-transform: translate3d(-100%, 0, 0); transform: translate3d(-100%, 0, 0); left: 0; } - .carousel-inner > .item.next.left, - .carousel-inner > .item.prev.right, - .carousel-inner > .item.active { + .carousel-inner > .item.next.left, .carousel-inner > .item.prev.right, .carousel-inner > .item.active { -webkit-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); left: 0; } } @@ -5679,8 +5443,7 @@ background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); } - .carousel-control:hover, - .carousel-control:focus { + .carousel-control:hover, .carousel-control:focus { outline: 0; color: #fff; text-decoration: none; @@ -5777,8 +5540,7 @@ .carousel-indicators { bottom: 20px; } } -.clearfix:before, -.clearfix:after { +.clearfix:before, .clearfix:after { content: " "; display: table; } @@ -5994,4 +5756,7 @@ body, label, .checkbox label { font-weight: 300; } +.doc_details_title { + margin-top: 0; } + /*# sourceMappingURL=app.css.map */ diff -r eadaf0b8f02e -r a9b98b16b053 server/src/resources/views/app.blade.php --- a/server/src/resources/views/app.blade.php Fri Nov 27 17:59:36 2015 +0100 +++ b/server/src/resources/views/app.blade.php Tue Dec 01 13:33:08 2015 +0100 @@ -4,12 +4,14 @@ - Laravel + @yield('title','Laravel') + @section('css-assets') + @show @@ -55,8 +57,10 @@ @yield('content') + @section('js-assets') - - + + + @show diff -r eadaf0b8f02e -r a9b98b16b053 server/src/resources/views/bo/docDetailClient.blade.php --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/server/src/resources/views/bo/docDetailClient.blade.php Tue Dec 01 13:33:08 2015 +0100 @@ -0,0 +1,21 @@ +@extends('app') + +@section('title', 'Document detail') + +@section('css-assets') + + + +@endsection + +@section('js-assets') + @parent + + + +@endsection + +@section('content') +
+
+@endsection diff -r eadaf0b8f02e -r a9b98b16b053 server/src/resources/views/bo/docList.blade.php --- a/server/src/resources/views/bo/docList.blade.php Fri Nov 27 17:59:36 2015 +0100 +++ b/server/src/resources/views/bo/docList.blade.php Tue Dec 01 13:33:08 2015 +0100 @@ -15,7 +15,10 @@ @foreach ($docs as $doc) - {{ $doc->getId() }} + + {{ $doc->getId() }}
+ {{ $doc->getId() }} + {{ $doc->getTitle() }} {{ $doc->getModified() }} diff -r eadaf0b8f02e -r a9b98b16b053 server/src/tests/Models/DocumentTest.php --- a/server/src/tests/Models/DocumentTest.php Fri Nov 27 17:59:36 2015 +0100 +++ b/server/src/tests/Models/DocumentTest.php Tue Dec 01 13:33:08 2015 +0100 @@ -1,6 +1,7 @@ assertEquals('fr', $doc->getTitle()->getLang(), "Language title must be fr"); } + public function testModified() { + $this->assertNotNull($this->graph, 'Graph shoud not be null'); + + $doc = new Document("http://purl.org/poi/corpusdelaparole.huma-num.fr/crdo-CFPP2000_35_SOUND", $this->graph); + $this->assertInstanceOf(EasyRdf\Literal::class, $doc->getModified(), "Modified must be a literal"); + $this->assertEquals("http://purl.org/dc/terms/W3CDTF", $doc->getModified()->getDatatypeURI(), "type must be http://purl.org/dc/terms/W3CDTF"); + $this->assertEquals("2013-10-12T14:35:57+02:00", $doc->getModified(), "modified must be 2013-10-12T14:35:57+02:00"); + + } + + public function testPublisher() { $doc = new Document("http://purl.org/poi/corpusdelaparole.huma-num.fr/crdo-CFPP2000_35_SOUND", $this->graph); @@ -169,7 +181,7 @@ } else { $this->assertNull($media['extent'], "no media extent"); - $this->assertSame(0, $media['extent_ms'], "extend in ms is 0"); + $this->assertNull($media['extent_ms'], "extend in ms is null"); $this->assertStringStartsWith('application/', $media['format']); } @@ -302,4 +314,20 @@ $this->assertFalse($doc->isIsomorphic($doc2),"document must not be isomorphic after adding discourse type"); } + public function testGetContributors() { + $doc = new Document("http://purl.org/poi/corpusdelaparole.huma-num.fr/crdo-CFPP2000_35_SOUND", $this->graph); + + $contributors = $doc->getContributors(); + + $this->assertNotEmpty($contributors, "The contributors array should not be empty"); + $this->assertCount(8, $contributors, "The contributors array should have 8 elements"); + + foreach ($contributors as $contribDef) { + $this->assertArrayHasKey('name', $contribDef, "ContribDef must have name key"); + $this->assertArrayHasKey('url', $contribDef, "ContribDef must have url key"); + $this->assertArrayHasKey('role', $contribDef, "ContribDef must have role key"); + $this->assertContains($contribDef['role'], CocoonUtils::OLAC_ROLES, "Role should be in OLAC_ROLES"); + } + } + } diff -r eadaf0b8f02e -r a9b98b16b053 server/src/tests/libraries/UtilsTest.php --- a/server/src/tests/libraries/UtilsTest.php Fri Nov 27 17:59:36 2015 +0100 +++ b/server/src/tests/libraries/UtilsTest.php Tue Dec 01 13:33:08 2015 +0100 @@ -25,4 +25,10 @@ $ms = Utils::iso8601IntervalToMillis("P1Y1M1DT1H1M1S"); $this->assertEquals(34277461000, $ms, "duration must be 3427746100"); } + + public function testiso8601IntervalToMillisNull() { + $ms = Utils::iso8601IntervalToMillis(null); + $this->assertNull($ms, "duration must be null"); + } + }