* fix: eslint operator-linebreak issue * fix: eslint quotes issue * fix: react jsx indent and props issues * fix: eslint trailing spaces issues * fix: eslint line around directives issue * fix: eslint semi rule * fix: eslint newline per chain rule * fix: eslint space infix ops rule * fix: eslint space-in-parens issue * fix: eslint space before function paren issue * fix: eslint space before blocks issue * fix: eslint arrow body style issue * fix: eslint dot-location issue * fix: eslint quotes issue * fix: eslint quote props issue * fix: eslint operator assignment issue * fix: eslint new line after import issue * fix: indent issues * fix: operator assignment issue * fix: all autofixable eslint issues * fix: all react related fixable issues * fix: autofixable eslint issues * chore: remove all template literals * fix: remaining autofixable issues * chore: apply amnesty on all existing issues * fix: failing xss-lint issues * refactor: apply amnesty on remaining issues * refactor: apply amnesty on new issues * fix: remove file level suppressions * refactor: apply amnesty on new issues
59 lines
2.3 KiB
JavaScript
59 lines
2.3 KiB
JavaScript
define(['backbone', 'underscore'], function(Backbone, _) {
|
|
var Location = Backbone.Model.extend({
|
|
defaults: {
|
|
tag: '',
|
|
org: '',
|
|
course: '',
|
|
category: '',
|
|
name: ''
|
|
},
|
|
toUrl: function(overrides) {
|
|
return;
|
|
/* eslint-disable-next-line no-unused-expressions, no-unreachable */
|
|
(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,
|
|
// eslint-disable-next-line prefer-regex-literals
|
|
_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;
|
|
});
|