diff -r 353b0881a0b9 -r b1c3bf6eca78 src/js/model.js --- a/src/js/model.js Tue Oct 02 18:08:05 2012 +0200 +++ b/src/js/model.js Wed Oct 24 11:08:31 2012 +0200 @@ -2,7 +2,13 @@ /* model.js is where data is stored in a standard form, whatever the serializer */ -IriSP.Model = { +if (typeof IriSP == "undefined") { + IriSP = {}; +} + +(function (ns) { + +var Model = { _SOURCE_STATUS_EMPTY : 0, _SOURCE_STATUS_WAITING : 1, _SOURCE_STATUS_READY : 2, @@ -36,7 +42,7 @@ var _source = typeof _textOrArray === "string" ? escapeText(_textOrArray) - : IriSP._(_textOrArray).map(escapeText).join("|"); + : ns._(_textOrArray).map(escapeText).join("|"); if (_testOnly) { return new RegExp( _source, 'im'); } else { @@ -80,83 +86,83 @@ } /* - * IriSP.Model.List is a class for a list of elements (e.g. annotations, medias, etc. that each have a distinct ID) + * Model.List is a class for a list of elements (e.g. annotations, medias, etc. that each have a distinct ID) */ -IriSP.Model.List = function(_directory) { +Model.List = function(_directory) { Array.call(this); this.directory = _directory; this.idIndex = []; this.__events = {}; if (typeof _directory == "undefined") { console.trace(); - throw "Error : new IriSP.Model.List(directory): directory is undefined"; + throw "Error : new Model.List(directory): directory is undefined"; } } -IriSP.Model.List.prototype = new Array(); +Model.List.prototype = new Array(); -IriSP.Model.List.prototype.hasId = function(_id) { - return IriSP._(this.idIndex).include(_id); +Model.List.prototype.hasId = function(_id) { + return ns._(this.idIndex).include(_id); } /* On recent browsers, forEach and map are defined and do what we want. * Otherwise, we'll use the Underscore.js functions */ if (typeof Array.prototype.forEach === "undefined") { - IriSP.Model.List.prototype.forEach = function(_callback) { + Model.List.prototype.forEach = function(_callback) { var _this = this; - IriSP._(this).forEach(function(_value, _key) { + ns._(this).forEach(function(_value, _key) { _callback(_value, _key, _this); }); } } if (typeof Array.prototype.map === "undefined") { - IriSP.Model.List.prototype.map = function(_callback) { + Model.List.prototype.map = function(_callback) { var _this = this; - return IriSP._(this).map(function(_value, _key) { + return ns._(this).map(function(_value, _key) { return _callback(_value, _key, _this); }); } } -IriSP.Model.List.prototype.pluck = function(_key) { +Model.List.prototype.pluck = function(_key) { return this.map(function(_value) { return _value[_key]; }); } -/* We override Array's filter function because it doesn't return an IriSP.Model.List +/* We override Array's filter function because it doesn't return an Model.List */ -IriSP.Model.List.prototype.filter = function(_callback) { +Model.List.prototype.filter = function(_callback) { var _this = this, - _res = new IriSP.Model.List(this.directory); - _res.addElements(IriSP._(this).filter(function(_value, _key) { + _res = new Model.List(this.directory); + _res.addElements(ns._(this).filter(function(_value, _key) { return _callback(_value, _key, _this); })); return _res; } -IriSP.Model.List.prototype.slice = function(_start, _end) { - var _res = new IriSP.Model.List(this.directory); +Model.List.prototype.slice = function(_start, _end) { + var _res = new Model.List(this.directory); _res.addElements(Array.prototype.slice.call(this, _start, _end)); return _res; } -IriSP.Model.List.prototype.splice = function(_start, _end) { - var _res = new IriSP.Model.List(this.directory); +Model.List.prototype.splice = function(_start, _end) { + var _res = new Model.List(this.directory); _res.addElements(Array.prototype.splice.call(this, _start, _end)); this.idIndex.splice(_start, _end); return _res; } /* Array has a sort function, but it's not as interesting as Underscore.js's sortBy - * and won't return a new IriSP.Model.List + * and won't return a new Model.List */ -IriSP.Model.List.prototype.sortBy = function(_callback) { +Model.List.prototype.sortBy = function(_callback) { var _this = this, - _res = new IriSP.Model.List(this.directory); - _res.addElements(IriSP._(this).sortBy(function(_value, _key) { + _res = new Model.List(this.directory); + _res.addElements(ns._(this).sortBy(function(_value, _key) { return _callback(_value, _key, _this); })); return _res; @@ -165,34 +171,34 @@ /* Title and Description are basic information for (almost) all element types, * here we can search by these criteria */ -IriSP.Model.List.prototype.searchByTitle = function(_text) { - var _rgxp = IriSP.Model.regexpFromTextOrArray(_text, true); +Model.List.prototype.searchByTitle = function(_text) { + var _rgxp = Model.regexpFromTextOrArray(_text, true); return this.filter(function(_element) { return _rgxp.test(_element.title); }); } -IriSP.Model.List.prototype.searchByDescription = function(_text) { - var _rgxp = IriSP.Model.regexpFromTextOrArray(_text, true); +Model.List.prototype.searchByDescription = function(_text) { + var _rgxp = Model.regexpFromTextOrArray(_text, true); return this.filter(function(_element) { return _rgxp.test(_element.description); }); } -IriSP.Model.List.prototype.searchByTextFields = function(_text) { - var _rgxp = IriSP.Model.regexpFromTextOrArray(_text, true); +Model.List.prototype.searchByTextFields = function(_text) { + var _rgxp = Model.regexpFromTextOrArray(_text, true); return this.filter(function(_element) { return _rgxp.test(_element.description) || _rgxp.test(_element.title); }); } -IriSP.Model.List.prototype.getTitles = function() { +Model.List.prototype.getTitles = function() { return this.map(function(_el) { return _el.title; }); } -IriSP.Model.List.prototype.addId = function(_id) { +Model.List.prototype.addId = function(_id) { var _el = this.directory.getElement(_id) if (!this.hasId(_id) && typeof _el !== "undefined") { this.idIndex.push(_id); @@ -200,11 +206,11 @@ } } -IriSP.Model.List.prototype.push = function(_el) { +Model.List.prototype.push = function(_el) { if (typeof _el === "undefined") { return; } - var _index = (IriSP._(this.idIndex).indexOf(_el.id)); + var _index = (ns._(this.idIndex).indexOf(_el.id)); if (_index === -1) { this.idIndex.push(_el.id); Array.prototype.push.call(this, _el); @@ -213,24 +219,24 @@ } } -IriSP.Model.List.prototype.addIds = function(_array) { +Model.List.prototype.addIds = function(_array) { var _l = _array.length, _this = this; - IriSP._(_array).forEach(function(_id) { + ns._(_array).forEach(function(_id) { _this.addId(_id); }); } -IriSP.Model.List.prototype.addElements = function(_array) { +Model.List.prototype.addElements = function(_array) { var _this = this; - IriSP._(_array).forEach(function(_el) { + ns._(_array).forEach(function(_el) { _this.push(_el); }); } -IriSP.Model.List.prototype.removeId = function(_id, _deleteFromDirectory) { +Model.List.prototype.removeId = function(_id, _deleteFromDirectory) { var _deleteFromDirectory = _deleteFromDirectory || false, - _index = (IriSP._(this.idIndex).indexOf(_id)); + _index = (ns._(this.idIndex).indexOf(_id)); if (_index !== -1) { this.splice(_index,1); } @@ -239,45 +245,45 @@ } } -IriSP.Model.List.prototype.removeElement = function(_el, _deleteFromDirectory) { +Model.List.prototype.removeElement = function(_el, _deleteFromDirectory) { var _deleteFromDirectory = _deleteFromDirectory || false; this.removeId(_el.id); } -IriSP.Model.List.prototype.removeIds = function(_list, _deleteFromDirectory) { +Model.List.prototype.removeIds = function(_list, _deleteFromDirectory) { var _deleteFromDirectory = _deleteFromDirectory || false, _this = this; - IriSP._(_list).forEach(function(_id) { + ns._(_list).forEach(function(_id) { _this.removeId(_id); }); } -IriSP.Model.List.prototype.removeElements = function(_list, _deleteFromDirectory) { +Model.List.prototype.removeElements = function(_list, _deleteFromDirectory) { var _deleteFromDirectory = _deleteFromDirectory || false, _this = this; - IriSP._(_list).forEach(function(_el) { + ns._(_list).forEach(function(_el) { _this.removeElement(_el); }); } -IriSP.Model.List.prototype.on = function(_event, _callback) { +Model.List.prototype.on = function(_event, _callback) { if (typeof this.__events[_event] === "undefined") { this.__events[_event] = []; } this.__events[_event].push(_callback); } -IriSP.Model.List.prototype.off = function(_event, _callback) { +Model.List.prototype.off = function(_event, _callback) { if (typeof this.__events[_event] !== "undefined") { - this.__events[_event] = IriSP._(this.__events[_event]).reject(function(_fn) { + this.__events[_event] = ns._(this.__events[_event]).reject(function(_fn) { return _fn === _callback; }); } } -IriSP.Model.List.prototype.trigger = function(_event, _data) { +Model.List.prototype.trigger = function(_event, _data) { var _list = this; - IriSP._(this.__events[_event]).each(function(_callback) { + ns._(this.__events[_event]).each(function(_callback) { _callback.call(_list, _data); }); } @@ -286,12 +292,12 @@ * without the clumsiness of the original Date object. */ -IriSP.Model.Time = function(_milliseconds) { +Model.Time = function(_milliseconds) { this.milliseconds = 0; this.setMilliseconds(_milliseconds); } -IriSP.Model.Time.prototype.setMilliseconds = function(_milliseconds) { +Model.Time.prototype.setMilliseconds = function(_milliseconds) { var _ante = _milliseconds; switch(typeof _milliseconds) { case "string": @@ -311,15 +317,15 @@ } } -IriSP.Model.Time.prototype.setSeconds = function(_seconds) { +Model.Time.prototype.setSeconds = function(_seconds) { this.milliseconds = 1000 * _seconds; } -IriSP.Model.Time.prototype.getSeconds = function() { +Model.Time.prototype.getSeconds = function() { return this.milliseconds / 1000; } -IriSP.Model.Time.prototype.getHMS = function() { +Model.Time.prototype.getHMS = function() { var _totalSeconds = Math.abs(Math.floor(this.getSeconds())); return { hours : Math.floor(_totalSeconds / 3600), @@ -328,15 +334,15 @@ } } -IriSP.Model.Time.prototype.add = function(_milliseconds) { - this.milliseconds += new IriSP.Model.Time(_milliseconds).milliseconds; +Model.Time.prototype.add = function(_milliseconds) { + this.milliseconds += new Model.Time(_milliseconds).milliseconds; } -IriSP.Model.Time.prototype.valueOf = function() { +Model.Time.prototype.valueOf = function() { return this.milliseconds; } -IriSP.Model.Time.prototype.toString = function() { +Model.Time.prototype.toString = function() { function pad(_n) { var _res = _n.toString(); while (_res.length < 2) { @@ -353,10 +359,10 @@ return _res; } -/* IriSP.Model.Reference handles references between elements +/* Model.Reference handles references between elements */ -IriSP.Model.Reference = function(_source, _idRef) { +Model.Reference = function(_source, _idRef) { this.source = _source; this.id = _idRef; if (typeof _idRef === "object") { @@ -367,9 +373,9 @@ this.refresh(); } -IriSP.Model.Reference.prototype.refresh = function() { +Model.Reference.prototype.refresh = function() { if (this.isList) { - this.contents = new IriSP.Model.List(this.source.directory); + this.contents = new Model.List(this.source.directory); this.contents.addIds(this.id); } else { this.contents = this.source.getElement(this.id); @@ -377,16 +383,16 @@ } -IriSP.Model.Reference.prototype.getContents = function() { +Model.Reference.prototype.getContents = function() { if (typeof this.contents === "undefined" || (this.isList && this.contents.length != this.id.length)) { this.refresh(); } return this.contents; } -IriSP.Model.Reference.prototype.isOrHasId = function(_idRef) { +Model.Reference.prototype.isOrHasId = function(_idRef) { if (this.isList) { - return (IriSP._(this.id).indexOf(_idRef) !== -1) + return (ns._(this.id).indexOf(_idRef) !== -1) } else { return (this.id == _idRef); } @@ -394,13 +400,13 @@ /* */ -IriSP.Model.Element = function(_id, _source) { +Model.Element = function(_id, _source) { this.elementType = 'element'; if (typeof _source === "undefined") { return; } if (typeof _id === "undefined" || !_id) { - _id = IriSP.Model.getUID(); + _id = Model.getUID(); } this.source = _source; this.id = _id; @@ -410,21 +416,21 @@ this.source.directory.addElement(this); } -IriSP.Model.Element.prototype.toString = function() { +Model.Element.prototype.toString = function() { return this.elementType + (this.elementType !== 'element' ? ', id=' + this.id + ', title="' + this.title + '"' : ''); } -IriSP.Model.Element.prototype.setReference = function(_elementType, _idRef) { - this[_elementType] = new IriSP.Model.Reference(this.source, _idRef); +Model.Element.prototype.setReference = function(_elementType, _idRef) { + this[_elementType] = new Model.Reference(this.source, _idRef); } -IriSP.Model.Element.prototype.getReference = function(_elementType) { +Model.Element.prototype.getReference = function(_elementType) { if (typeof this[_elementType] !== "undefined") { return this[_elementType].getContents(); } } -IriSP.Model.Element.prototype.getRelated = function(_elementType, _global) { +Model.Element.prototype.getRelated = function(_elementType, _global) { _global = (typeof _global !== "undefined" && _global); var _this = this; return this.source.getList(_elementType, _global).filter(function(_el) { @@ -433,35 +439,99 @@ }); } -IriSP.Model.Element.prototype.on = function(_event, _callback) { +Model.Element.prototype.on = function(_event, _callback) { if (typeof this.__events[_event] === "undefined") { this.__events[_event] = []; } this.__events[_event].push(_callback); } -IriSP.Model.Element.prototype.off = function(_event, _callback) { +Model.Element.prototype.off = function(_event, _callback) { if (typeof this.__events[_event] !== "undefined") { - this.__events[_event] = IriSP._(this.__events[_event]).reject(function(_fn) { + this.__events[_event] = ns._(this.__events[_event]).reject(function(_fn) { return _fn === _callback; }); } } -IriSP.Model.Element.prototype.trigger = function(_event, _data) { +Model.Element.prototype.trigger = function(_event, _data) { var _element = this; - IriSP._(this.__events[_event]).each(function(_callback) { + ns._(this.__events[_event]).each(function(_callback) { _callback.call(_element, _data); }); } /* */ -IriSP.Model.Media = function(_id, _source) { - IriSP.Model.Element.call(this, _id, _source); +Model.Playable = function(_id, _source) { + Model.Element.call(this, _id, _source); + if (typeof _source === "undefined") { + return; + } + this.elementType = 'playable'; + this.currentTime = new Model.Time(); + this.volume = .5; + this.paused = true; + this.muted = false; + var _this = this; + this.on("play", function() { + _this.paused = false; + }); + this.on("pause", function() { + _this.paused = true; + }); + this.on("timeupdate", function(_time) { + _this.currentTime = _time; + }); +} + +Model.Playable.prototype = new Model.Element(); + +Model.Playable.prototype.getCurrentTime = function() { + return this.currentTime; +} + +Model.Playable.prototype.getVolume = function() { + return this.volume; +} + +Model.Playable.prototype.getPaused = function() { + return this.paused; +} + +Model.Playable.prototype.getMuted = function() { + return this.muted; +} + +Model.Playable.prototype.setCurrentTime = function(_time) { + this.trigger("setcurrenttime",_time); +} + +Model.Playable.prototype.setVolume = function(_vol) { + this.trigger("setvolume",_vol); +} + +Model.Playable.prototype.setMuted = function(_muted) { + this.trigger("setmuted",_muted); +} + +Model.Playable.prototype.play = function() { + this.trigger("setplay"); +} + +Model.Playable.prototype.pause = function() { + this.trigger("setpause"); +} + + +/* */ + +Model.Media = function(_id, _source) { + Model.Playable.call(this, _id, _source); this.elementType = 'media'; - this.duration = new IriSP.Model.Time(); + this.duration = new Model.Time(); this.video = ''; + var _this = this; this.on("timeupdate", function(_time) { _this.getAnnotations().filter(function(_a) { @@ -479,79 +549,63 @@ }); } -IriSP.Model.Media.prototype = new IriSP.Model.Element(); +Model.Media.prototype = new Model.Playable(); /* Default functions to be overriden by players */ - -IriSP.Model.Media.prototype.getCurrentTime = function() { return new IriSP.Model.Time(0); } - -IriSP.Model.Media.prototype.getVolume = function() { return .5; } - -IriSP.Model.Media.prototype.getPaused = function() { return true; } - -IriSP.Model.Media.prototype.getMuted = function() { return false; } - -IriSP.Model.Media.prototype.setCurrentTime - = IriSP.Model.Media.prototype.setVolume - = IriSP.Model.Media.prototype.setMuted - = IriSP.Model.Media.prototype.play - = IriSP.Model.Media.prototype.pause - = function() {} -IriSP.Model.Media.prototype.setDuration = function(_durationMs) { +Model.Media.prototype.setDuration = function(_durationMs) { this.duration.setMilliseconds(_durationMs); } -IriSP.Model.Media.prototype.getAnnotations = function() { +Model.Media.prototype.getAnnotations = function() { return this.getRelated("annotation"); } -IriSP.Model.Media.prototype.getAnnotationsByTypeTitle = function(_title) { +Model.Media.prototype.getAnnotationsByTypeTitle = function(_title) { var _annTypes = this.source.getAnnotationTypes().searchByTitle(_title).pluck("id"); if (_annTypes.length) { return this.getAnnotations().filter(function(_annotation) { - return IriSP._(_annTypes).indexOf(_annotation.getAnnotationType().id) !== -1; + return ns._(_annTypes).indexOf(_annotation.getAnnotationType().id) !== -1; }); } else { - return new IriSP.Model.List(this.source.directory) + return new Model.List(this.source.directory) } } /* */ -IriSP.Model.Tag = function(_id, _source) { - IriSP.Model.Element.call(this, _id, _source); +Model.Tag = function(_id, _source) { + Model.Element.call(this, _id, _source); this.elementType = 'tag'; } -IriSP.Model.Tag.prototype = new IriSP.Model.Element(); +Model.Tag.prototype = new Model.Element(); -IriSP.Model.Tag.prototype.getAnnotations = function() { +Model.Tag.prototype.getAnnotations = function() { return this.getRelated("annotation"); } /* */ - -IriSP.Model.AnnotationType = function(_id, _source) { - IriSP.Model.Element.call(this, _id, _source); +Model.AnnotationType = function(_id, _source) { + Model.Element.call(this, _id, _source); this.elementType = 'annotationType'; } -IriSP.Model.AnnotationType.prototype = new IriSP.Model.Element(); +Model.AnnotationType.prototype = new Model.Element(); -IriSP.Model.AnnotationType.prototype.getAnnotations = function() { +Model.AnnotationType.prototype.getAnnotations = function() { return this.getRelated("annotation"); } /* Annotation * */ -IriSP.Model.Annotation = function(_id, _source) { - IriSP.Model.Element.call(this, _id, _source); +Model.Annotation = function(_id, _source) { + Model.Element.call(this, _id, _source); this.elementType = 'annotation'; - this.begin = new IriSP.Model.Time(); - this.end = new IriSP.Model.Time(); - this.tag = new IriSP.Model.Reference(_source, []); + this.begin = new Model.Time(); + this.end = new Model.Time(); + this.tag = new Model.Reference(_source, []); this.playing = false; var _this = this; this.on("click", function() { @@ -559,56 +613,56 @@ }); } -IriSP.Model.Annotation.prototype = new IriSP.Model.Element(null); +Model.Annotation.prototype = new Model.Element(); -IriSP.Model.Annotation.prototype.setBegin = function(_beginMs) { +Model.Annotation.prototype.setBegin = function(_beginMs) { this.begin.setMilliseconds(_beginMs); } -IriSP.Model.Annotation.prototype.setEnd = function(_beginMs) { +Model.Annotation.prototype.setEnd = function(_beginMs) { this.end.setMilliseconds(_beginMs); } -IriSP.Model.Annotation.prototype.setMedia = function(_idRef) { +Model.Annotation.prototype.setMedia = function(_idRef) { this.setReference("media", _idRef); } -IriSP.Model.Annotation.prototype.getMedia = function() { +Model.Annotation.prototype.getMedia = function() { return this.getReference("media"); } -IriSP.Model.Annotation.prototype.setAnnotationType = function(_idRef) { +Model.Annotation.prototype.setAnnotationType = function(_idRef) { this.setReference("annotationType", _idRef); } -IriSP.Model.Annotation.prototype.getAnnotationType = function() { +Model.Annotation.prototype.getAnnotationType = function() { return this.getReference("annotationType"); } -IriSP.Model.Annotation.prototype.setTags = function(_idRefs) { +Model.Annotation.prototype.setTags = function(_idRefs) { this.setReference("tag", _idRefs); } -IriSP.Model.Annotation.prototype.getTags = function() { +Model.Annotation.prototype.getTags = function() { return this.getReference("tag"); } -IriSP.Model.Annotation.prototype.getTagTexts = function() { +Model.Annotation.prototype.getTagTexts = function() { return this.getTags().getTitles(); } -IriSP.Model.Annotation.prototype.getDuration = function() { - return new IriSP.Model.Time(this.end.milliseconds - this.begin.milliseconds) +Model.Annotation.prototype.getDuration = function() { + return new Model.Time(this.end.milliseconds - this.begin.milliseconds) } /* */ -IriSP.Model.MashedAnnotation = function(_mashup, _annotation) { - IriSP.Model.Element.call(this, _mashup.id + "_" + _annotation.id, _annotation.source); +Model.MashedAnnotation = function(_mashup, _annotation) { + Model.Element.call(this, _mashup.id + "_" + _annotation.id, _annotation.source); this.elementType = 'mashedAnnotation'; this.annotation = _annotation; - this.begin = new IriSP.Model.Time(_mashup.duration); - this.end = new IriSP.Model.Time(_mashup.duration + _annotation.getDuration()); + this.begin = new Model.Time(_mashup.duration); + this.end = new Model.Time(_mashup.duration + _annotation.getDuration()); this.title = this.annotation.title; this.description = this.annotation.description; this.color = this.annotation.color; @@ -618,36 +672,36 @@ }); } -IriSP.Model.MashedAnnotation.prototype = new IriSP.Model.Element(null); +Model.MashedAnnotation.prototype = new Model.Element(null); -IriSP.Model.MashedAnnotation.prototype.getMedia = function() { +Model.MashedAnnotation.prototype.getMedia = function() { return this.annotation.getReference("media"); } -IriSP.Model.MashedAnnotation.prototype.getAnnotationType = function() { +Model.MashedAnnotation.prototype.getAnnotationType = function() { return this.annotation.getReference("annotationType"); } -IriSP.Model.MashedAnnotation.prototype.getTags = function() { +Model.MashedAnnotation.prototype.getTags = function() { return this.annotation.getReference("tag"); } -IriSP.Model.MashedAnnotation.prototype.getTagTexts = function() { +Model.MashedAnnotation.prototype.getTagTexts = function() { return this.annotation.getTags().getTitles(); } -IriSP.Model.MashedAnnotation.prototype.getDuration = function() { +Model.MashedAnnotation.prototype.getDuration = function() { return this.annotation.getDuration(); } /* */ -IriSP.Model.Mashup = function(_id, _source) { - IriSP.Model.Element.call(this, _id, _source); +Model.Mashup = function(_id, _source) { + Model.Playable.call(this, _id, _source); this.elementType = 'mashup'; - this.duration = new IriSP.Model.Time(); - this.segments = new IriSP.Model.List(_source.directory); - this.medias = new IriSP.Model.List(_source.directory); + this.duration = new Model.Time(); + this.segments = new Model.List(_source.directory); + this.medias = new Model.List(_source.directory); var _currentMedia = null; var _this = this; this.on("timeupdate", function(_time) { @@ -674,42 +728,42 @@ }); } -IriSP.Model.Mashup.prototype = new IriSP.Model.Element(); +Model.Mashup.prototype = new Model.Playable(); -IriSP.Model.Mashup.prototype.addSegment = function(_annotation) { - var _mashedAnnotation = new IriSP.Model.MashedAnnotation(this, _annotation); +Model.Mashup.prototype.addSegment = function(_annotation) { + var _mashedAnnotation = new Model.MashedAnnotation(this, _annotation); this.duration.setMilliseconds(_mashedAnnotation.end); this.segments.push(_mashedAnnotation); this.medias.push(_annotation.getMedia()); } -IriSP.Model.Mashup.prototype.addSegmentById = function(_elId) { +Model.Mashup.prototype.addSegmentById = function(_elId) { var _annotation = this.source.getElement(_elId); if (typeof _annotation !== "undefined") { this.addSegment(_annotation); } } -IriSP.Model.Mashup.prototype.getAnnotations = function() { +Model.Mashup.prototype.getAnnotations = function() { return this.segments; } -IriSP.Model.Mashup.prototype.getMedias = function() { +Model.Mashup.prototype.getMedias = function() { return this.medias; } -IriSP.Model.Mashup.prototype.getAnnotationsByTypeTitle = function(_title) { +Model.Mashup.prototype.getAnnotationsByTypeTitle = function(_title) { var _annTypes = this.source.getAnnotationTypes().searchByTitle(_title).pluck("id"); if (_annTypes.length) { return this.getAnnotations().filter(function(_annotation) { - return IriSP._(_annTypes).indexOf(_annotation.getAnnotationType().id) !== -1; + return ns._(_annTypes).indexOf(_annotation.getAnnotationType().id) !== -1; }); } else { - return new IriSP.Model.List(this.source.directory) + return new Model.List(this.source.directory) } } -IriSP.Model.Mashup.prototype.getAnnotationAtTime = function(_time) { +Model.Mashup.prototype.getAnnotationAtTime = function(_time) { var _list = this.segments.filter(function(_annotation) { return _annotation.begin <= _time && _annotation.end > _time; }); @@ -720,7 +774,7 @@ } } -IriSP.Model.Mashup.prototype.getMediaAtTime = function(_time) { +Model.Mashup.prototype.getMediaAtTime = function(_time) { var _annotation = this.getAnnotationAtTime(_time); if (typeof _annotation !== "undefined") { return _annotation.getMedia(); @@ -729,31 +783,14 @@ } } -/* Default functions to be overriden by players */ - -IriSP.Model.Mashup.prototype.getCurrentTime = function() { return new IriSP.Model.Time(0); } - -IriSP.Model.Mashup.prototype.getVolume = function() { return .5; } - -IriSP.Model.Mashup.prototype.getPaused = function() { return true; } - -IriSP.Model.Mashup.prototype.getMuted = function() { return false; } - -IriSP.Model.Mashup.prototype.setCurrentTime - = IriSP.Model.Mashup.prototype.setVolume - = IriSP.Model.Mashup.prototype.setMuted - = IriSP.Model.Mashup.prototype.play - = IriSP.Model.Mashup.prototype.pause - = function() {} - /* */ -IriSP.Model.Source = function(_config) { - this.status = IriSP.Model._SOURCE_STATUS_EMPTY; +Model.Source = function(_config) { + this.status = Model._SOURCE_STATUS_EMPTY; this.elementType = "source"; if (typeof _config !== "undefined") { var _this = this; - IriSP._(_config).forEach(function(_v, _k) { + ns._(_config).forEach(function(_v, _k) { _this[_k] = _v; }) this.callbackQueue = []; @@ -762,16 +799,16 @@ } } -IriSP.Model.Source.prototype = new IriSP.Model.Element(); +Model.Source.prototype = new Model.Element(); -IriSP.Model.Source.prototype.addList = function(_listId, _contents) { +Model.Source.prototype.addList = function(_listId, _contents) { if (typeof this.contents[_listId] === "undefined") { - this.contents[_listId] = new IriSP.Model.List(this.directory); + this.contents[_listId] = new Model.List(this.directory); } this.contents[_listId].addElements(_contents); } -IriSP.Model.Source.prototype.getList = function(_listId, _global) { +Model.Source.prototype.getList = function(_listId, _global) { _global = (typeof _global !== "undefined" && _global); if (_global || typeof this.contents[_listId] === "undefined") { return this.directory.getGlobalList().filter(function(_e) { @@ -782,80 +819,80 @@ } } -IriSP.Model.Source.prototype.forEach = function(_callback) { +Model.Source.prototype.forEach = function(_callback) { var _this = this; - IriSP._(this.contents).forEach(function(_value, _key) { + ns._(this.contents).forEach(function(_value, _key) { _callback.call(_this, _value, _key); }) } -IriSP.Model.Source.prototype.getElement = function(_elId) { +Model.Source.prototype.getElement = function(_elId) { return this.directory.getElement(_elId); } -IriSP.Model.Source.prototype.get = function() { - this.status = IriSP.Model._SOURCE_STATUS_WAITING; +Model.Source.prototype.get = function() { + this.status = Model._SOURCE_STATUS_WAITING; this.handleCallbacks(); } /* We defer the callbacks calls so they execute after the queue is cleared */ -IriSP.Model.Source.prototype.deferCallback = function(_callback) { +Model.Source.prototype.deferCallback = function(_callback) { var _this = this; - IriSP._.defer(function() { + ns._.defer(function() { _callback.call(_this); }); } -IriSP.Model.Source.prototype.handleCallbacks = function() { - this.status = IriSP.Model._SOURCE_STATUS_READY; +Model.Source.prototype.handleCallbacks = function() { + this.status = Model._SOURCE_STATUS_READY; while (this.callbackQueue.length) { this.deferCallback(this.callbackQueue.splice(0,1)[0]); } } -IriSP.Model.Source.prototype.onLoad = function(_callback) { - if (this.status === IriSP.Model._SOURCE_STATUS_READY) { +Model.Source.prototype.onLoad = function(_callback) { + if (this.status === Model._SOURCE_STATUS_READY) { this.deferCallback(_callback); } else { this.callbackQueue.push(_callback); } } -IriSP.Model.Source.prototype.serialize = function() { +Model.Source.prototype.serialize = function() { return this.serializer.serialize(this); } -IriSP.Model.Source.prototype.deSerialize = function(_data) { +Model.Source.prototype.deSerialize = function(_data) { this.serializer.deSerialize(_data, this); } -IriSP.Model.Source.prototype.getAnnotations = function(_global) { +Model.Source.prototype.getAnnotations = function(_global) { _global = (typeof _global !== "undefined" && _global); return this.getList("annotation", _global); } -IriSP.Model.Source.prototype.getMedias = function(_global) { +Model.Source.prototype.getMedias = function(_global) { _global = (typeof _global !== "undefined" && _global); return this.getList("media", _global); } -IriSP.Model.Source.prototype.getTags = function(_global) { +Model.Source.prototype.getTags = function(_global) { _global = (typeof _global !== "undefined" && _global); return this.getList("tag", _global); } -IriSP.Model.Source.prototype.getMashups = function(_global) { +Model.Source.prototype.getMashups = function(_global) { _global = (typeof _global !== "undefined" && _global); return this.getList("mashup", _global); } -IriSP.Model.Source.prototype.getAnnotationTypes = function(_global) { +Model.Source.prototype.getAnnotationTypes = function(_global) { _global = (typeof _global !== "undefined" && _global); return this.getList("annotationType", _global); } -IriSP.Model.Source.prototype.getAnnotationsByTypeTitle = function(_title, _global) { +Model.Source.prototype.getAnnotationsByTypeTitle = function(_title, _global) { _global = (typeof _global !== "undefined" && _global); - var _res = new IriSP.Model.List(this.directory), + var _res = new Model.List(this.directory), _annTypes = this.getAnnotationTypes(_global).searchByTitle(_title); _annTypes.forEach(function(_annType) { _res.addElements(_annType.getAnnotations(_global)); @@ -863,14 +900,14 @@ return _res; } -IriSP.Model.Source.prototype.getDuration = function() { +Model.Source.prototype.getDuration = function() { var _m = this.currentMedia; if (typeof _m !== "undefined") { return this.currentMedia.duration; } } -IriSP.Model.Source.prototype.getCurrentMedia = function(_opts) { +Model.Source.prototype.getCurrentMedia = function(_opts) { if (typeof this.currentMedia === "undefined") { if (_opts.is_mashup) { var _mashups = this.getMashups(); @@ -887,7 +924,7 @@ return this.currentMedia; } -IriSP.Model.Source.prototype.merge = function(_source) { +Model.Source.prototype.merge = function(_source) { var _this = this; _source.forEach(function(_value, _key) { _this.getList(_key).addElements(_value); @@ -896,14 +933,14 @@ /* */ -IriSP.Model.RemoteSource = function(_config) { - IriSP.Model.Source.call(this, _config); +Model.RemoteSource = function(_config) { + Model.Source.call(this, _config); } -IriSP.Model.RemoteSource.prototype = new IriSP.Model.Source(); +Model.RemoteSource.prototype = new Model.Source(); -IriSP.Model.RemoteSource.prototype.get = function() { - this.status = IriSP.Model._SOURCE_STATUS_WAITING; +Model.RemoteSource.prototype.get = function() { + this.status = Model._SOURCE_STATUS_WAITING; var _this = this; this.serializer.loadData(this.url, function(_result) { _this.deSerialize(_result); @@ -913,40 +950,42 @@ /* */ -IriSP.Model.Directory = function() { +Model.Directory = function() { this.remoteSources = {}; this.elements = {}; } -IriSP.Model.Directory.prototype.remoteSource = function(_properties) { +Model.Directory.prototype.remoteSource = function(_properties) { if (typeof _properties !== "object" || typeof _properties.url === "undefined") { - throw "Error : IriSP.Model.Directory.remoteSource(configuration): configuration.url is undefined"; + throw "Error : Model.Directory.remoteSource(configuration): configuration.url is undefined"; } - var _config = IriSP._({ directory: this }).extend(_properties); + var _config = ns._({ directory: this }).extend(_properties); if (typeof this.remoteSources[_properties.url] === "undefined") { - this.remoteSources[_properties.url] = new IriSP.Model.RemoteSource(_config); + this.remoteSources[_properties.url] = new Model.RemoteSource(_config); } return this.remoteSources[_properties.url]; } -IriSP.Model.Directory.prototype.newLocalSource = function(_properties) { - var _config = IriSP._({ directory: this }).extend(_properties), - _res = new IriSP.Model.Source(_config); +Model.Directory.prototype.newLocalSource = function(_properties) { + var _config = ns._({ directory: this }).extend(_properties), + _res = new Model.Source(_config); return _res; } -IriSP.Model.Directory.prototype.getElement = function(_id) { +Model.Directory.prototype.getElement = function(_id) { return this.elements[_id]; } -IriSP.Model.Directory.prototype.addElement = function(_element) { +Model.Directory.prototype.addElement = function(_element) { this.elements[_element.id] = _element; } -IriSP.Model.Directory.prototype.getGlobalList = function() { - var _res = new IriSP.Model.List(this); - _res.addIds(IriSP._(this.elements).keys()); +Model.Directory.prototype.getGlobalList = function() { + var _res = new Model.List(this); + _res.addIds(ns._(this.elements).keys()); return _res; } -/* */ +ns.Model = Model; + +})(IriSP);