57 lines
2.1 KiB
JavaScript
57 lines
2.1 KiB
JavaScript
define(['backbone', 'underscore'], function(Backbone, _) {
|
|
var 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 '';
|
|
}
|
|
}
|
|
});
|
|
return Location;
|
|
});
|