--- 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);
+ }
- }
+ }
});
--- 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);
--- 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) {
--- 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' });
--- 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
--- /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');
+ }
+ }
+});
--- 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);
- }
-
-});
--- /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);
+ }
+
+});
--- 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;
--- 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 {
--- 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() {
--- 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);
--- 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",
--- /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);
+});
--- 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"
- }
- }
- }
- }
- }
- }
- }
-}
--- 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)) {