69 lines
1.8 KiB
JavaScript
69 lines
1.8 KiB
JavaScript
CMS.Models.Location = Backbone.Model.extend({
|
|
defaults: {
|
|
tag: "",
|
|
org: "",
|
|
course: "",
|
|
category: "",
|
|
name: ""
|
|
},
|
|
toUrl: function(overrides) {
|
|
return
|
|
(overrides && overrides['tag'] ? overrides['tag'] : this.get('tag')) + "://" +
|
|
(overrides && overrides['org'] ? overrides['org'] : this.get('org')) + "/" +
|
|
(overrides && overrides['course'] ? overrides['course'] : this.get('course')) + "/" +
|
|
(overrides && overrides['category'] ? overrides['category'] : this.get('category')) + "/" +
|
|
(overrides && overrides['name'] ? overrides['name'] : this.get('name')) + "/";
|
|
},
|
|
_tagPattern : /[^:]+/g,
|
|
_fieldPattern : new RegExp('[^/]+','g'),
|
|
|
|
parse: function(payload) {
|
|
if (_.isArray(payload)) {
|
|
return {
|
|
tag: payload[0],
|
|
org: payload[1],
|
|
course: payload[2],
|
|
category: payload[3],
|
|
name: payload[4]
|
|
};
|
|
}
|
|
else if (_.isString(payload)) {
|
|
this._tagPattern.lastIndex = 0; // odd regex behavior requires this to be reset sometimes
|
|
var foundTag = this._tagPattern.exec(payload);
|
|
if (foundTag) {
|
|
this._fieldPattern.lastIndex = this._tagPattern.lastIndex + 1; // skip over the colon
|
|
return {
|
|
tag: foundTag[0],
|
|
org: this.getNextField(payload),
|
|
course: this.getNextField(payload),
|
|
category: this.getNextField(payload),
|
|
name: this.getNextField(payload)
|
|
}
|
|
}
|
|
else return null;
|
|
}
|
|
else {
|
|
return payload;
|
|
}
|
|
},
|
|
getNextField : function(payload) {
|
|
try {
|
|
return this._fieldPattern.exec(payload)[0];
|
|
}
|
|
catch (err) {
|
|
return "";
|
|
}
|
|
}
|
|
});
|
|
|
|
CMS.Models.CourseRelative = Backbone.Model.extend({
|
|
defaults: {
|
|
course_location : null, // must never be null, but here to doc the field
|
|
idx : null // the index making it unique in the containing collection (no implied sort)
|
|
}
|
|
});
|
|
|
|
CMS.Models.CourseRelativeCollection = Backbone.Collection.extend({
|
|
model : CMS.Models.CourseRelative
|
|
});
|