# HG changeset patch
# User veltr
# Date 1334596232 -7200
# Node ID 5e76a06b961c035e3c8819de5290369866d3cc99
# Parent 7fd843e0dc4e9581702548f80872b548697e08d8
Added Cinecast serializer, with imports management
diff -r 7fd843e0dc4e -r 5e76a06b961c src/js/model.js
--- a/src/js/model.js Fri Apr 13 18:08:19 2012 +0200
+++ b/src/js/model.js Mon Apr 16 19:10:32 2012 +0200
@@ -72,6 +72,10 @@
}
}
+IriSP.Model.List.prototype.hasId = function(_id) {
+ return (IriSP._(this.contents).indexOf(_id) !== -1);
+}
+
IriSP.Model.List.prototype.each = function(_callback) {
var _this = this;
IriSP._(this.contents).each(function(_id) {
@@ -95,10 +99,19 @@
return _res;
}
+IriSP.Model.List.prototype.sortBy = function(_callback) {
+ var _this = this,
+ _res = new IriSP.Model.List(this.directory);
+ _res.contents = IriSP._(this.contents).sortBy(function(_id) {
+ return _callback.call(_this, _this.getElement(_id), _id);
+ });
+ return _res;
+}
+
IriSP.Model.List.prototype.searchByTitle = function(_text) {
var _rgxp = new RegExp('(' + _text.replace(/(\W)/gm,'\\$1') + ')','gim');
return this.filter(function(_element) {
- return _rgxp.test(_element.text);
+ return _rgxp.test(_element.title);
});
}
@@ -112,12 +125,12 @@
IriSP.Model.List.prototype.searchByTextFields = function(_text) {
var _rgxp = new RegExp('(' + _text.replace(/(\W)/gm,'\\$1') + ')','gim');
return this.filter(function(_element) {
- return _rgxp.test(_element.description);
+ return _rgxp.test(_element.description) || _rgxp.test(_element.title);
});
}
IriSP.Model.List.prototype.addId = function(_id) {
- if (this.contents.indexOf(_id) === -1) {
+ if (!this.hasId(_id)) {
this.contents.push(_id);
}
}
@@ -227,10 +240,23 @@
}
}
+IriSP.Model.Element.prototype.getRelated = function(_elementType) {
+ var _this = this;
+ return this.source.getList(_elementType).filter(function(_el) {
+ var _ref = _el[_this.elementType];
+ if (_ref.isList) {
+ return _ref.contents.hasId(_this.id);
+ }
+ else {
+ return _ref.contents === _this.id;
+ }
+ });
+}
+
/* */
-IriSP.Model.Media = function(_id, _directory) {
- IriSP.Model.Element.call(this, _id, _directory);
+IriSP.Model.Media = function(_id, _source) {
+ IriSP.Model.Element.call(this, _id, _source);
this.elementType = 'media';
this.duration = new IriSP.Model.Time();
this.url = '';
@@ -242,29 +268,41 @@
this.duration.milliseconds = _durationMs;
}
+IriSP.Model.Media.prototype.getAnnotations = function() {
+ return this.getRelated("annotation");
+}
+
/* */
-IriSP.Model.Tag = function(_id, _directory) {
- IriSP.Model.Element.call(this, _id, _directory);
+IriSP.Model.Tag = function(_id, _source) {
+ IriSP.Model.Element.call(this, _id, _source);
this.elementType = 'tag';
}
IriSP.Model.Tag.prototype = new IriSP.Model.Element();
+IriSP.Model.Tag.prototype.getAnnotations = function() {
+ return this.getRelated("annotation");
+}
+
/* */
-IriSP.Model.AnnotationType = function(_id, _directory) {
- IriSP.Model.Element.call(this, _id, _directory);
+IriSP.Model.AnnotationType = function(_id, _source) {
+ IriSP.Model.Element.call(this, _id, _source);
this.elementType = 'annotationType';
}
IriSP.Model.AnnotationType.prototype = new IriSP.Model.Element();
+IriSP.Model.AnnotationType.prototype.getAnnotations = function() {
+ return this.getRelated("annotation");
+}
+
/* Annotation
* */
-IriSP.Model.Annotation = function(_id, _directory) {
- IriSP.Model.Element.call(this, _id, _directory);
+IriSP.Model.Annotation = function(_id, _source) {
+ IriSP.Model.Element.call(this, _id, _source);
this.elementType = 'annotation';
this.begin = new IriSP.Model.Time();
this.end = new IriSP.Model.Time();
@@ -384,17 +422,18 @@
IriSP.Model.Source.prototype.setDefaultCurrentMedia = function() {
if (typeof this.currentMedia === "undefined") {
- this.currentMedia = this.getList("media")[0];
+ this.currentMedia = this.getList("media").getElementAt(0);
}
}
-IriSP.Model.Source.prototype.listNamespaces = function() {
+IriSP.Model.Source.prototype.listNamespaces = function(_excludeSelf) {
var _this = this,
- _nsls = [];
+ _nsls = [],
+ _excludeSelf = (typeof _excludeSelf !== "undefined" && _excludeSelf);
this.each(function(_list) {
IriSP._(_list.contents).each(function(_id) {
var _ns = _id.replace(/:.*$/,'');
- if (_nsls.indexOf(_ns) === -1) {
+ if (IriSP._(_nsls).indexOf(_ns) === -1 && (!_excludeSelf || _ns !== _this.namespace)) {
_nsls.push(_ns);
}
})
@@ -433,6 +472,17 @@
return this.getList("media");
}
+IriSP.Model.Source.prototype.getAnnotationTypes = function() {
+ return this.getList("annotationType");
+}
+
+IriSP.Model.Source.prototype.getAnnotationTypeByTitle = function(_title) {
+ var _res = this.getAnnotationTypes().searchByTitle(_title);
+ if (_res.length() > 0) {
+ return _res.getElementAt(0);
+ }
+}
+
IriSP.Model.Source.prototype.getDuration = function() {
return this.currentMedia.duration;
}
diff -r 7fd843e0dc4e -r 5e76a06b961c src/js/serializers/CinecastSerializer.js
--- a/src/js/serializers/CinecastSerializer.js Fri Apr 13 18:08:19 2012 +0200
+++ b/src/js/serializers/CinecastSerializer.js Mon Apr 16 19:10:32 2012 +0200
@@ -0,0 +1,182 @@
+if (typeof IriSP.serializers === "undefined") {
+ IriSP.serializers = {}
+}
+
+IriSP.serializers.cinecast = {
+ types : {
+ media : {
+ serialized_name : "medias",
+ model_name : "media",
+ deserializer : function(_data, _source) {
+ var _res = new IriSP.Model.Media(_data.id, _source);
+ _res.url = _data.href;
+ _res.title = _data.meta.title;
+ _res.description = _data.meta.synopsis;
+ _res.setDuration(_data.meta.duration);
+ return _res;
+ },
+ serializer : function(_data, _source) {
+ return {
+ id : _source.unNamespace(_data.id),
+ url : _data.url,
+ meta : {
+ title : _data.title,
+ synopsis : _data.description,
+ duration : _data.duration.milliseconds
+ }
+ }
+ }
+ },
+ tag : {
+ serialized_name : "tags",
+ model_name : "tag",
+ deserializer : function(_data, _source) {
+ var _res = new IriSP.Model.Tag(_data.id, _source);
+ _res.title = _data.meta.description;
+ return _res;
+ },
+ serializer : function(_data, _source) {
+ return {
+ id : _source.unNamespace(_data.id),
+ meta : {
+ description : _data.title
+ }
+ }
+ }
+ },
+ annotationType : {
+ serialized_name : "annotation_types",
+ deserializer : function(_data, _source) {
+ var _res = new IriSP.Model.AnnotationType(_data.id, _source);
+ _res.title = _source.getNamespaced(_data.id).name;
+ _res.description = _data.meta.description;
+ return _res;
+ },
+ serializer : function(_data, _source) {
+ return {
+ id : _source.unNamespace(_data.id),
+ meta : {
+ description : _data.description
+ }
+ }
+ }
+ },
+ annotation : {
+ serialized_name : "annotations",
+ deserializer : function(_data, _source) {
+ var _res = new IriSP.Model.Annotation(_data.id, _source);
+ _res.title = _data.meta.creator_name;
+ _res.description = _data.content.data;
+ _res.created = IriSP.Model.isoToDate(_data.meta.created);
+ var _c = parseInt(_data.color).toString(16);
+ while (_c.length < 6) {
+ _c = '0' + _c;
+ }
+ _res.color = '#' + _c;
+ _res.setMedia(_data.media, _source);
+ _res.setAnnotationType(_data.type);
+ _res.setTags(IriSP._(_data.tags).map(function(_t) {
+ if (typeof _source.contents.tag === "undefined") {
+ _source.contents.tag = new IriSP.Model.List(_source.directory);
+ }
+ if (_source.contents.tag.hasId(_t)) {
+ return _t;
+ } else {
+ var _id = _t.toLowerCase()
+ .replace(/#/g,'')
+ .replace(/^(\d)/,'_$1')
+ .replace(/[áâäàã]/g,'a')
+ .replace(/ç/g,'c')
+ .replace(/[éèêë]/g,'e')
+ .replace(/[íìîï]/g,'i')
+ .replace(/ñ/g,'n')
+ .replace(/[óòôöõ]/g,'o')
+ .replace(/œ/g,'oe')
+ .replace(/[úùûü]/g,'u')
+ .replace(/ÿ/g,'y')
+ .replace(/[^A-Za-z0-9_]/g,''),
+ _tag = new IriSP.Model.Tag(_id, _source);
+ _tag.title = _t;
+ _source.contents.tag.addElement(_tag);
+ return _id;
+ }
+ }));
+ _res.setBegin(_data.begin);
+ _res.setEnd(_data.end);
+ _res.creator = _data.meta.creator;
+ return _res;
+ },
+ serializer : function(_data, _source) {
+ return {
+ id : _source.unNamespace(_data.id),
+ content : {
+ data : _data.description
+ },
+ begin : _data.begin.milliseconds,
+ end : _data.begin.milliseconds,
+ media : _source.unNamespace(_data.media.contents),
+ type : _source.unNamespace(_data.annotationType.contents),
+ meta : {
+ created : IriSP.Model.dateToIso(_data.created),
+ creator : _data.creator,
+ creator_name : _data.title
+ },
+ tags : _data.getTags().map(function(_el) {
+ return _source.unNamespace(_el.id)
+ })
+ }
+ }
+ }
+ },
+ serialize : function(_source) {
+ var _res = {
+ format : "http://advene.org/ns/cinelab/"
+ },
+ _this = this,
+ _nsls = _source.listNamespaces(true);
+ _res.imports = [];
+ for (var _i = 0; _i < _nsls.length; _i++) {
+ if (typeof _source.directory.namespaces[_nsls[_i]] !== "undefined") {
+ _res.imports.push({
+ id : _nsls[_i],
+ url : _source.directory.namespaces[_nsls[_i]]
+ })
+ }
+ }
+ _source.each(function(_list, _typename) {
+ if (typeof _this.types[_typename] !== "undefined") {
+ _res[_this.types[_typename].serialized_name] = _list.map(function(_el) {
+ return _this.types[_typename].serializer(_el, _source);
+ });
+ }
+ });
+ return _res;
+ },
+ deSerialize : function(_data, _source) {
+ if (typeof _data.imports !== "undefined") {
+ IriSP._(_data.imports).each(function(_import) {
+ _source.directory.namespaces[_import.id] = _import.url;
+ })
+ }
+ IriSP._(this.types).each(function(_type, _typename) {
+ var _listdata = _data[_type.serialized_name];
+ if (typeof _listdata !== "undefined") {
+ var _list = new IriSP.Model.List(_source.directory);
+ if (_listdata.hasOwnProperty("length")) {
+ var _l = _listdata.length;
+ for (var _i = 0; _i < _l; _i++) {
+ _list.addElement(_type.deserializer(_listdata[_i], _source));
+ }
+ } else {
+ _list.addElement(_type.deserializer(_listdata, _source));
+ }
+ _source.addList(_typename, _list);
+ }
+ });
+
+ if (typeof _data.meta !== "undefined" && typeof _data.meta.main_media !== "undefined" && typeof _data.meta.main_media["id-ref"] !== "undefined") {
+ _source.setCurrentMediaId(_data.meta.main_media["id-ref"]);
+ }
+ _source.setDefaultCurrentMedia();
+ }
+}
\ No newline at end of file
diff -r 7fd843e0dc4e -r 5e76a06b961c src/js/serializers/PlatformSerializer.js
--- a/src/js/serializers/PlatformSerializer.js Fri Apr 13 18:08:19 2012 +0200
+++ b/src/js/serializers/PlatformSerializer.js Mon Apr 16 19:10:32 2012 +0200
@@ -7,17 +7,17 @@
media : {
serialized_name : "medias",
model_name : "media",
- deserializer : function(_data, _container) {
- var _res = new IriSP.Model.Media(_data.id, _container);
+ deserializer : function(_data, _source) {
+ var _res = new IriSP.Model.Media(_data.id, _source);
_res.url = _data.href;
_res.title = _data.meta["dc:title"];
_res.description = _data.meta["dc:description"];
_res.setDuration(_data.meta["dc:duration"]);
return _res;
},
- serializer : function(_data, _container) {
+ serializer : function(_data, _source) {
return {
- id : _container.unNamespace(_data.id),
+ id : _source.unNamespace(_data.id),
href : _data.url,
meta : {
"dc:title" : _data.title,
@@ -30,31 +30,31 @@
tag : {
serialized_name : "tags",
model_name : "tag",
- deserializer : function(_data, _container) {
- var _res = new IriSP.Model.Tag(_data.id, _container);
+ deserializer : function(_data, _source) {
+ var _res = new IriSP.Model.Tag(_data.id, _source);
_res.title = _data.meta["dc:title"];
return _res;
},
- serializer : function(_data, _container) {
+ serializer : function(_data, _source) {
return {
- id : _container.unNamespace(_data.id),
+ id : _source.unNamespace(_data.id),
meta : {
"dc:title" : _data.title
}
}
}
},
- annotationTypes : {
+ annotationType : {
serialized_name : "annotation-types",
- deserializer : function(_data, _container) {
- var _res = new IriSP.Model.AnnotationType(_data.id, _container);
+ deserializer : function(_data, _source) {
+ var _res = new IriSP.Model.AnnotationType(_data.id, _source);
_res.title = _data["dc:title"];
_res.description = _data["dc:description"];
return _res;
},
- serializer : function(_data, _container) {
+ serializer : function(_data, _source) {
return {
- id : _container.unNamespace(_data.id),
+ id : _source.unNamespace(_data.id),
"dc:title" : _data.title,
"dc:description" : _data.description
}
@@ -62,8 +62,8 @@
},
annotation : {
serialized_name : "annotations",
- deserializer : function(_data, _container) {
- var _res = new IriSP.Model.Annotation(_data.id, _container);
+ deserializer : function(_data, _source) {
+ var _res = new IriSP.Model.Annotation(_data.id, _source);
_res.title = _data.content.title;
_res.description = _data.content.description;
_res.created = IriSP.Model.isoToDate(_data.meta["dc:created"]);
@@ -72,58 +72,68 @@
_c = '0' + _c;
}
_res.color = '#' + _c;
- _res.setMedia(_data.media, _container);
+ _res.setMedia(_data.media, _source);
_res.setAnnotationType(_data.meta["id-ref"]);
_res.setTags(IriSP._(_data.tags).pluck("id-ref"));
_res.setBegin(_data.begin);
_res.setEnd(_data.end);
+ _res.creator = _data.meta["dc:creator"];
return _res;
},
- serializer : function(_data, _container) {
+ serializer : function(_data, _source) {
return {
- id : _container.unNamespace(_data.id),
+ id : _source.unNamespace(_data.id),
content : {
title : _data.title,
description : _data.description
},
- media : _container.unNamespace(_data.media.contents),
+ media : _source.unNamespace(_data.media.contents),
meta : {
- "id-ref" : _container.unNamespace(_data.annotationType.contents),
- "dc:created" : IriSP.Model.dateToIso(_data.created)
+ "id-ref" : _source.unNamespace(_data.annotationType.contents),
+ "dc:created" : IriSP.Model.dateToIso(_data.created),
+ "dc:creator" : _data.creator
},
tags : _data.getTags().map(function(_el, _id) {
return {
- "id-ref" : _container.unNamespace(_id)
+ "id-ref" : _source.unNamespace(_id)
}
})
}
}
}
},
- serialize : function(_container) {
+ serialize : function(_source) {
var _res = {},
_this = this;
- _container.each(function(_list, _typename) {
- _res[_this.types[_typename].serialized_name] = _list.map(function(_el) {
- return _this.types[_typename].serializer(_el, _container);
- });
+ _source.each(function(_list, _typename) {
+ if (typeof _this.types[_typename] !== "undefined") {
+ _res[_this.types[_typename].serialized_name] = _list.map(function(_el) {
+ return _this.types[_typename].serializer(_el, _source);
+ });
+ }
});
return _res;
},
- deSerialize : function(_data, _container) {
+ deSerialize : function(_data, _source) {
IriSP._(this.types).each(function(_type, _typename) {
- if (typeof _data[_type.serialized_name] !== "undefined") {
- var _list = new IriSP.Model.List(_container.directory);
- IriSP._(_data[_type.serialized_name]).each(function(_el) {
- _list.addElement(_type.deserializer(_el, _container));
- });
- _container.addList(_typename, _list);
+ var _listdata = _data[_type.serialized_name];
+ if (typeof _listdata !== "undefined") {
+ var _list = new IriSP.Model.List(_source.directory);
+ if (_listdata.hasOwnProperty("length")) {
+ var _l = _listdata.length;
+ for (var _i = 0; _i < _l; _i++) {
+ _list.addElement(_type.deserializer(_listdata[_i], _source));
+ }
+ } else {
+ _list.addElement(_type.deserializer(_listdata, _source));
+ }
+ _source.addList(_typename, _list);
}
});
if (typeof _data.meta !== "undefined" && typeof _data.meta.main_media !== "undefined" && typeof _data.meta.main_media["id-ref"] !== "undefined") {
- _container.setCurrentMediaId(_data.meta.main_media["id-ref"]);
+ _source.setCurrentMediaId(_data.meta.main_media["id-ref"]);
}
- _container.setDefaultCurrentMedia();
+ _source.setDefaultCurrentMedia();
}
}
\ No newline at end of file
diff -r 7fd843e0dc4e -r 5e76a06b961c test/model/test.html
--- a/test/model/test.html Fri Apr 13 18:08:19 2012 +0200
+++ b/test/model/test.html Mon Apr 16 19:10:32 2012 +0200
@@ -11,19 +11,29 @@
+