# HG changeset patch # User ymh # Date 1478967685 -3600 # Node ID 5c6c526a7fc1466bb671ca29939c3d8cdc29ba76 # Parent 8f29358e46daf42dee9af6df76c0ea40093acc73 Display for single notice, preparation for share link diff -r 8f29358e46da -r 5c6c526a7fc1 cms/app-client/app/components/toolbar-component.js --- a/cms/app-client/app/components/toolbar-component.js Thu Nov 10 15:35:27 2016 +0100 +++ b/cms/app-client/app/components/toolbar-component.js Sat Nov 12 17:21:25 2016 +0100 @@ -2,17 +2,16 @@ export default Ember.Component.extend({ - player: Ember.inject.service(), + player: Ember.inject.service(), - classNames: ['toolbar-component'], + classNames: ['toolbar-component'], - actions: { + actions: { - display: function(el) { - console.log('toolbar display func'); - this.get('player').displayAdditionalInformation(el); - } + display: function(el) { + this.get('player').displayAdditionalInformation(el); + } - } + } }); diff -r 8f29358e46da -r 5c6c526a7fc1 cms/app-client/app/controllers/application.js --- a/cms/app-client/app/controllers/application.js Thu Nov 10 15:35:27 2016 +0100 +++ b/cms/app-client/app/controllers/application.js Sat Nov 12 17:21:25 2016 +0100 @@ -39,7 +39,7 @@ // need to reset pagination this.set("page", 1); }), - filterObserver: Ember.observer('filter', 'filter.language', 'filter.date', 'filter.date.[]', 'filter.discourse', 'filter.discourse.[]', 'filter.location', 'filter.theme', 'filter.theme.[]', function() { + filterObserver: Ember.observer('filter', 'filter.language', 'filter.date', 'filter.date.[]', 'filter.discourse', 'filter.discourse.[]', 'filter.location', 'filter.theme', 'filter.theme.[]',function() { this.setProperties(this.get('filter').getProperties('language', 'date', 'discourse', 'theme', 'location')); // need to reset pagination this.set("page", 1); diff -r 8f29358e46da -r 5c6c526a7fc1 cms/app-client/app/models/document.js --- a/cms/app-client/app/models/document.js Thu Nov 10 15:35:27 2016 +0100 +++ b/cms/app-client/app/models/document.js Sat Nov 12 17:21:25 2016 +0100 @@ -19,7 +19,7 @@ subjects: DS.attr({ defaultValue: function() { return []; } }), duration_ms: DS.attr('number', { - defaultValue: function() { + defaultValue: () => { var self = this; var duration = 0; Object.keys(this.get('mediaArray')).forEach(function(key) { diff -r 8f29358e46da -r 5c6c526a7fc1 cms/app-client/app/router.js --- a/cms/app-client/app/router.js Thu Nov 10 15:35:27 2016 +0100 +++ b/cms/app-client/app/router.js Sat Nov 12 17:21:25 2016 +0100 @@ -9,15 +9,16 @@ player: Ember.inject.service(), didTransition:function() { - this.get('player').toggleVideoscreen(false); - this.get('player').displayMetadata(this.get('player').get('window')); + this.get('player').toggleVideoscreen(false); + this.get('player').displayMetadata(this.get('player').get('window')); - this._super(...arguments); + this._super(...arguments); } }); Router.map(function() { + this.route('document', { path: '/doc/:doc_id'}); this.route('tabs/langues', { path: '/' }); this.route('tabs/langues', { path: '/langues' }); this.route('tabs/carto', { path: '/cartographie' }); diff -r 8f29358e46da -r 5c6c526a7fc1 cms/app-client/app/routes/application.js --- a/cms/app-client/app/routes/application.js Thu Nov 10 15:35:27 2016 +0100 +++ b/cms/app-client/app/routes/application.js Sat Nov 12 17:21:25 2016 +0100 @@ -9,12 +9,21 @@ filter: Ember.inject.service(), constants: Ember.inject.service(), - model: function(params) { - let filterQueryArgs = _.clone(this.get('filter').get('queryParamsValues')); - return this.store.query('document', _.merge(filterQueryArgs, { - page: params['page'], - perpage: this.get('constants').DOCUMENTS_PAGINATION_PERPAGE - })); + model: function(params, transition) { + if(transition.targetName === 'document') { + let documentId = transition.params['document']['doc_id']; + return this.store.query('document', { + id: documentId, + page: 1, + perpage: this.get('constants').DOCUMENTS_PAGINATION_PERPAGE + }); + } else { + let filterQueryArgs = _.clone(this.get('filter').get('queryParamsValues')); + return this.store.query('document', _.merge(filterQueryArgs, { + page: params['page'], + perpage: this.get('constants').DOCUMENTS_PAGINATION_PERPAGE + })); + } }, /** @@ -48,12 +57,12 @@ }, beforeModel: function(transition) { - new RSVP.Promise((resolve) => { + return new RSVP.Promise((resolve) => { // succeed this.get('filter').setProperties(transition['queryParams']); resolve(); }); - return this._super(...arguments); + //return this._super(...arguments); }, queryParams: Ember.computed('filter', function() { @@ -71,6 +80,12 @@ controller.set('isLoading', false); }); }, + willTransition: function(transition) { + if(this.controller.currentPath === 'document' || transition.targetName === 'document') { + this.refresh(); + } + return true; + }, didTransition: function() { // Append body classname depending on the route diff -r 8f29358e46da -r 5c6c526a7fc1 cms/app-client/app/routes/document.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cms/app-client/app/routes/document.js Sat Nov 12 17:21:25 2016 +0100 @@ -0,0 +1,13 @@ +import Ember from 'ember'; + +export default Ember.Route.extend({ + model() { + return this.modelFor('application'); + }, + + actions : { + didTransition() { + this.controllerFor('application').get('player').displayMetadata('notice'); + } + } +}); diff -r 8f29358e46da -r 5c6c526a7fc1 cms/app-client/app/routes/tabs/language.js --- a/cms/app-client/app/routes/tabs/language.js Thu Nov 10 15:35:27 2016 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -import Ember from 'ember'; - -export default Ember.Route.extend({ - - player: Ember.inject.service(), - - activate: function() { - this.get('player').set('window', false); - } - -}); diff -r 8f29358e46da -r 5c6c526a7fc1 cms/app-client/app/routes/tabs/langues.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cms/app-client/app/routes/tabs/langues.js Sat Nov 12 17:21:25 2016 +0100 @@ -0,0 +1,11 @@ +import Ember from 'ember'; + +export default Ember.Route.extend({ + + player: Ember.inject.service(), + + activate: function() { + this.get('player').set('window', false); + } + +}); diff -r 8f29358e46da -r 5c6c526a7fc1 cms/app-client/app/services/colors.js --- a/cms/app-client/app/services/colors.js Thu Nov 10 15:35:27 2016 +0100 +++ b/cms/app-client/app/services/colors.js Sat Nov 12 17:21:25 2016 +0100 @@ -21,7 +21,6 @@ export function getComplement(c) { let chromaColorHsl = chroma(c).hsl(); - console.log(chromaColorHsl[0]); chromaColorHsl[0] += 180; if (chromaColorHsl[0] > 360) { chromaColorHsl[0] -= 360; diff -r 8f29358e46da -r 5c6c526a7fc1 cms/app-client/app/services/filter.js --- a/cms/app-client/app/services/filter.js Thu Nov 10 15:35:27 2016 +0100 +++ b/cms/app-client/app/services/filter.js Sat Nov 12 17:21:25 2016 +0100 @@ -75,12 +75,11 @@ case 'discourse': case 'theme': let filterValues = this.get(filter); - console.log("filterValues", filterValues); if(filterValues === null) { filterValues = []; } if(!_.contains(filterValues, value)) { - filterValues = filterValues.slice(0); + filterValues = filterValues.slice(0); //clone filterValues.push(value); filterValues.sort(); this.set(filter, filterValues); @@ -101,7 +100,7 @@ return `${value}`; }, deserializeQueryParam(value, urlKey, defaultValueType) { - if (urlKey === 'date' || urlKey === 'theme' || urlKey === 'discourse') { + if (urlKey === 'id' || urlKey === 'date' || urlKey === 'theme' || urlKey === 'discourse') { if(_.isArray(value)) { return value; } else { diff -r 8f29358e46da -r 5c6c526a7fc1 cms/app-client/app/services/player.js --- a/cms/app-client/app/services/player.js Thu Nov 10 15:35:27 2016 +0100 +++ b/cms/app-client/app/services/player.js Sat Nov 12 17:21:25 2016 +0100 @@ -18,7 +18,6 @@ displayAdditionalInformation: function(el) { if(el === 'video') { - console.log('toggleVideoscreen'); this.toggleVideoscreen(); } else { if(this.get('window') !== el) { @@ -42,7 +41,7 @@ this.set('videoscreen', !this.get('videoscreen')); } else { this.set('videoscreen', state); - } + } }, init: function() { diff -r 8f29358e46da -r 5c6c526a7fc1 cms/app-client/app/templates/document.hbs diff -r 8f29358e46da -r 5c6c526a7fc1 cms/app-client/mirage/serializers/sparse-document.js --- a/cms/app-client/mirage/serializers/sparse-document.js Thu Nov 10 15:35:27 2016 +0100 +++ b/cms/app-client/mirage/serializers/sparse-document.js Sat Nov 12 17:21:25 2016 +0100 @@ -7,10 +7,33 @@ attrs: ['id', 'title', 'languages', 'url', 'issued', 'modified', 'publishers', 'mediaArray', 'transcript'], serialize(response, request) { - // This is how to call super, as Mirage borrows [Backbone's implementation of extend](http://backbonejs.org/#Model-extend) let json = BaseSerializer.prototype.serialize.apply(this, arguments); + if(!!request.queryParams.id) { + let docs = _(json['documents']).filter(function(m) { + return m.id === request.queryParams.id; + }).map(function(doc) { + let res = _.omit(doc, ['publishers', 'mediaArray', 'transcript']); + res['publisher'] = doc['publishers'].join(', '); + res['duration_ms'] = doc['mediaArray']?doc['mediaArray'][_(Object.keys(doc['mediaArray'])).first()]['extent_ms']:0; + res['transcript_url'] = (doc['transcript'] && doc['transcript']['url'])?doc['transcript']['url']:null; + return res; + }).value(); + let meta = { + total: 1, + per_page: 1, + current_page: 1, + last_page: 1, + from: 1, + to: 1, + prev_page_url: null, + next_page_url: null + }; + + return {'documents': docs, 'meta': meta}; + } + let page = Math.max(parseInt(request.queryParams.page || 1) - 1, 0); let perPage = parseInt(request.queryParams.perpage || 100); diff -r 8f29358e46da -r 5c6c526a7fc1 cms/app-client/package.json --- a/cms/app-client/package.json Thu Nov 10 15:35:27 2016 +0100 +++ b/cms/app-client/package.json Sat Nov 12 17:21:25 2016 +0100 @@ -56,6 +56,7 @@ "ember-load-initializers": "^0.5.1", "ember-lodash": "0.0.10", "ember-resolver": "^2.0.3", + "ember-truth-helpers": "1.2.0", "ember-welcome-page": "^1.0.3", "ember-wormhole": "0.4.0", "eslint-config-ember": "^0.3.0", diff -r 8f29358e46da -r 5c6c526a7fc1 cms/app-client/tests/unit/routes/document-test.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cms/app-client/tests/unit/routes/document-test.js Sat Nov 12 17:21:25 2016 +0100 @@ -0,0 +1,11 @@ +import { moduleFor, test } from 'ember-qunit'; + +moduleFor('route:document', 'Unit | Route | document', { + // Specify the other units that are required for this test. + // needs: ['controller:foo'] +}); + +test('it exists', function(assert) { + let route = this.subject(); + assert.ok(route); +}); diff -r 8f29358e46da -r 5c6c526a7fc1 dev/doc_agg_date.txt --- a/dev/doc_agg_date.txt Thu Nov 10 15:35:27 2016 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,29 +0,0 @@ -{ - "size": 0, - "query": { "match_all": [] }, - "aggs": { - "datestats": { - "nested": { - "path": "creation_years" - }, - "aggs": { - "years": { - "terms": { - "field": "creation_years.year", - "size": 0, - "order": { - "_term": "asc" - } - }, - "aggs": { - "year_count": { - "sum": { - "field": "creation_years.weight" - } - } - } - } - } - } - } -} diff -r 8f29358e46da -r 5c6c526a7fc1 server/src/app/Libraries/Filters/CorpusFilterManager.php --- a/server/src/app/Libraries/Filters/CorpusFilterManager.php Thu Nov 10 15:35:27 2016 +0100 +++ b/server/src/app/Libraries/Filters/CorpusFilterManager.php Sat Nov 12 17:21:25 2016 +0100 @@ -10,6 +10,29 @@ const DATE_REGEXP = "/^([[:digit:]]{4})(?:-([[:digit:]]{4}))?$/"; + public function prepareIds($ids) { + if(is_null($ids)) { + return []; + } + + if(is_string($ids)) { + return split(",", $ids); + } + else return $ids; + } + + public function getIdsFilterPart($ids) { + return [ + "bool" => [ + "filter" => [ + "terms" => [ + 'id' => $ids + ] + ] + ] + ]; + } + public function getLanguageNode($nodeId) { $node = null; $currentNodes = [config('corpusparole.languages_treemap'),]; @@ -232,6 +255,11 @@ $filters = []; + $ids = $this->prepareIds($request->input('id', [])); + if(!empty($ids)) { + $filters['id'] = $ids; + } + $languages = $this->prepareLanguages($request->input('language', [])); if(!empty($languages)) { $filters['language'] = $languages; @@ -266,7 +294,16 @@ } $qFilterParts = []; - + if(array_key_exists('id', $filters) && !empty($filters['id'])) { + $ids = $filters['id']; + if(is_string($ids)) { + $ids = [$ids,]; + } + $fp = $this->getIdsFilterPart($ids); + if(!empty($fp)) { + $qFilterParts[] = $fp; + } + } if(array_key_exists('language', $filters) && !empty($filters['language'])) { $languages = $filters['language']; if(is_string($languages)) {