location.js 2.22 KB
Newer Older
1
define(['backbone', 'underscore'], function(Backbone, _) {
2 3
    var Location = Backbone.Model.extend({
        defaults: {
4 5 6 7 8
            tag: '',
            org: '',
            course: '',
            category: '',
            name: ''
9 10
        },
        toUrl: function(overrides) {
11 12 13 14 15 16
            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')) + '/';
17
        },
18 19
        _tagPattern: /[^:]+/g,
        _fieldPattern: new RegExp('[^/]+', 'g'),
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49

        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;
            }
        },
50
        getNextField: function(payload) {
51 52 53 54
            try {
                return this._fieldPattern.exec(payload)[0];
            }
            catch (err) {
55
                return '';
56 57 58 59 60
            }
        }
    });
    return Location;
});