Updated to spine 1.0.8.
This commit is contained in:
parent
6e9f9f4eee
commit
88571e7d5c
7 changed files with 384 additions and 185 deletions
|
@ -1,11 +1,12 @@
|
|||
// Generated by CoffeeScript 1.3.3
|
||||
(function() {
|
||||
var $, Ajax, Base, Collection, Extend, Include, Model, Singleton,
|
||||
var $, Ajax, Base, Collection, Extend, Include, Model, Singleton, Spine,
|
||||
__bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },
|
||||
__hasProp = Object.prototype.hasOwnProperty,
|
||||
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor; child.__super__ = parent.prototype; return child; },
|
||||
__slice = Array.prototype.slice;
|
||||
__hasProp = {}.hasOwnProperty,
|
||||
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
|
||||
__slice = [].slice;
|
||||
|
||||
if (typeof Spine === "undefined" || Spine === null) Spine = require('spine');
|
||||
Spine = this.Spine || require('spine');
|
||||
|
||||
$ = Spine.$;
|
||||
|
||||
|
@ -21,8 +22,13 @@
|
|||
disable: function(callback) {
|
||||
if (this.enabled) {
|
||||
this.enabled = false;
|
||||
callback();
|
||||
return this.enabled = true;
|
||||
try {
|
||||
return callback();
|
||||
} catch (e) {
|
||||
throw e;
|
||||
} finally {
|
||||
this.enabled = true;
|
||||
}
|
||||
} else {
|
||||
return callback();
|
||||
}
|
||||
|
@ -43,7 +49,9 @@
|
|||
});
|
||||
},
|
||||
queue: function(callback) {
|
||||
if (!this.enabled) return;
|
||||
if (!this.enabled) {
|
||||
return;
|
||||
}
|
||||
if (this.pending) {
|
||||
this.requests.push(callback);
|
||||
} else {
|
||||
|
@ -86,7 +94,9 @@
|
|||
function Collection(model) {
|
||||
this.model = model;
|
||||
this.errorResponse = __bind(this.errorResponse, this);
|
||||
|
||||
this.recordsResponse = __bind(this.recordsResponse, this);
|
||||
|
||||
}
|
||||
|
||||
Collection.prototype.find = function(id, params) {
|
||||
|
@ -110,8 +120,12 @@
|
|||
Collection.prototype.fetch = function(params, options) {
|
||||
var id,
|
||||
_this = this;
|
||||
if (params == null) params = {};
|
||||
if (options == null) options = {};
|
||||
if (params == null) {
|
||||
params = {};
|
||||
}
|
||||
if (options == null) {
|
||||
options = {};
|
||||
}
|
||||
if (id = params.id) {
|
||||
delete params.id;
|
||||
return this.find(id, params).success(function(record) {
|
||||
|
@ -143,7 +157,9 @@
|
|||
function Singleton(record) {
|
||||
this.record = record;
|
||||
this.errorResponse = __bind(this.errorResponse, this);
|
||||
|
||||
this.recordResponse = __bind(this.recordResponse, this);
|
||||
|
||||
this.model = this.record.constructor;
|
||||
}
|
||||
|
||||
|
@ -191,7 +207,9 @@
|
|||
|
||||
Singleton.prototype.recordResponse = function(options) {
|
||||
var _this = this;
|
||||
if (options == null) options = {};
|
||||
if (options == null) {
|
||||
options = {};
|
||||
}
|
||||
return function(data, status, xhr) {
|
||||
var _ref;
|
||||
if (Spine.isBlank(data)) {
|
||||
|
@ -214,7 +232,9 @@
|
|||
|
||||
Singleton.prototype.errorResponse = function(options) {
|
||||
var _this = this;
|
||||
if (options == null) options = {};
|
||||
if (options == null) {
|
||||
options = {};
|
||||
}
|
||||
return function(xhr, statusText, error) {
|
||||
var _ref;
|
||||
_this.record.trigger('ajaxError', xhr, statusText, error);
|
||||
|
@ -236,7 +256,9 @@
|
|||
var args, url;
|
||||
args = 1 <= arguments.length ? __slice.call(arguments, 0) : [];
|
||||
url = Ajax.getURL(this.constructor);
|
||||
if (url.charAt(url.length - 1) !== '/') url += '/';
|
||||
if (url.charAt(url.length - 1) !== '/') {
|
||||
url += '/';
|
||||
}
|
||||
url += encodeURIComponent(this.id);
|
||||
args.unshift(url);
|
||||
return args.join('/');
|
||||
|
@ -268,8 +290,12 @@
|
|||
return (_ref = this.ajax()).fetch.apply(_ref, arguments);
|
||||
},
|
||||
ajaxChange: function(record, type, options) {
|
||||
if (options == null) options = {};
|
||||
if (options.ajax === false) return;
|
||||
if (options == null) {
|
||||
options = {};
|
||||
}
|
||||
if (options.ajax === false) {
|
||||
return;
|
||||
}
|
||||
return record.ajax()[type](options.ajax, options);
|
||||
}
|
||||
};
|
||||
|
@ -285,6 +311,8 @@
|
|||
|
||||
Spine.Ajax = Ajax;
|
||||
|
||||
if (typeof module !== "undefined" && module !== null) module.exports = Ajax;
|
||||
if (typeof module !== "undefined" && module !== null) {
|
||||
module.exports = Ajax;
|
||||
}
|
||||
|
||||
}).call(this);
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
// Generated by CoffeeScript 1.3.3
|
||||
(function() {
|
||||
var $,
|
||||
var $, Spine,
|
||||
__bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },
|
||||
__hasProp = Object.prototype.hasOwnProperty,
|
||||
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor; child.__super__ = parent.prototype; return child; };
|
||||
__hasProp = {}.hasOwnProperty,
|
||||
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
|
||||
|
||||
if (typeof Spine === "undefined" || Spine === null) Spine = require('spine');
|
||||
Spine = this.Spine || require('spine');
|
||||
|
||||
$ = Spine.$;
|
||||
|
||||
|
@ -19,12 +20,13 @@
|
|||
List.prototype.selectFirst = false;
|
||||
|
||||
function List() {
|
||||
this.change = __bind(this.change, this); List.__super__.constructor.apply(this, arguments);
|
||||
this.change = __bind(this.change, this);
|
||||
List.__super__.constructor.apply(this, arguments);
|
||||
this.bind('change', this.change);
|
||||
}
|
||||
|
||||
List.prototype.template = function() {
|
||||
return arguments[0];
|
||||
throw 'Override template';
|
||||
};
|
||||
|
||||
List.prototype.change = function(item) {
|
||||
|
@ -34,11 +36,13 @@
|
|||
return;
|
||||
}
|
||||
this.children().removeClass('active');
|
||||
return this.children().forItem(this.current).addClass('active');
|
||||
return $(this.children().get(this.items.indexOf(this.current))).addClass('active');
|
||||
};
|
||||
|
||||
List.prototype.render = function(items) {
|
||||
if (items) this.items = items;
|
||||
if (items) {
|
||||
this.items = items;
|
||||
}
|
||||
this.html(this.template(this.items));
|
||||
this.change(this.current);
|
||||
if (this.selectFirst) {
|
||||
|
@ -54,7 +58,7 @@
|
|||
|
||||
List.prototype.click = function(e) {
|
||||
var item;
|
||||
item = $(e.currentTarget).item();
|
||||
item = this.items[$(e.currentTarget).index()];
|
||||
this.trigger('change', item);
|
||||
return true;
|
||||
};
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
// Generated by CoffeeScript 1.3.3
|
||||
(function() {
|
||||
var Spine;
|
||||
|
||||
if (typeof Spine === "undefined" || Spine === null) Spine = require('spine');
|
||||
Spine = this.Spine || require('spine');
|
||||
|
||||
Spine.Model.Local = {
|
||||
extended: function() {
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
// Generated by CoffeeScript 1.3.3
|
||||
(function() {
|
||||
var $,
|
||||
__hasProp = Object.prototype.hasOwnProperty,
|
||||
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor; child.__super__ = parent.prototype; return child; },
|
||||
__slice = Array.prototype.slice;
|
||||
var $, Spine,
|
||||
__hasProp = {}.hasOwnProperty,
|
||||
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
|
||||
__slice = [].slice;
|
||||
|
||||
if (typeof Spine === "undefined" || Spine === null) Spine = require('spine');
|
||||
Spine = this.Spine || require('spine');
|
||||
|
||||
$ = Spine.$;
|
||||
|
||||
|
@ -104,15 +105,10 @@
|
|||
Stack.prototype.className = 'spine stack';
|
||||
|
||||
function Stack() {
|
||||
var key, value, _fn, _ref, _ref2,
|
||||
var key, value, _fn, _ref, _ref1,
|
||||
_this = this;
|
||||
Stack.__super__.constructor.apply(this, arguments);
|
||||
this.manager = new Spine.Manager;
|
||||
this.manager.bind('change', function() {
|
||||
var args, controller;
|
||||
controller = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : [];
|
||||
if (controller) return _this.active.apply(_this, args);
|
||||
});
|
||||
_ref = this.controllers;
|
||||
for (key in _ref) {
|
||||
value = _ref[key];
|
||||
|
@ -121,21 +117,25 @@
|
|||
});
|
||||
this.add(this[key]);
|
||||
}
|
||||
_ref2 = this.routes;
|
||||
_ref1 = this.routes;
|
||||
_fn = function(key, value) {
|
||||
var callback;
|
||||
if (typeof value === 'function') callback = value;
|
||||
if (typeof value === 'function') {
|
||||
callback = value;
|
||||
}
|
||||
callback || (callback = function() {
|
||||
var _ref3;
|
||||
return (_ref3 = _this[value]).active.apply(_ref3, arguments);
|
||||
var _ref2;
|
||||
return (_ref2 = _this[value]).active.apply(_ref2, arguments);
|
||||
});
|
||||
return _this.route(key, callback);
|
||||
};
|
||||
for (key in _ref2) {
|
||||
value = _ref2[key];
|
||||
for (key in _ref1) {
|
||||
value = _ref1[key];
|
||||
_fn(key, value);
|
||||
}
|
||||
if (this["default"]) this[this["default"]].active();
|
||||
if (this["default"]) {
|
||||
this[this["default"]].active();
|
||||
}
|
||||
}
|
||||
|
||||
Stack.prototype.add = function(controller) {
|
||||
|
@ -151,4 +151,8 @@
|
|||
module.exports = Spine.Manager;
|
||||
}
|
||||
|
||||
if (typeof module !== "undefined" && module !== null) {
|
||||
module.exports.Stack = Spine.Stack;
|
||||
}
|
||||
|
||||
}).call(this);
|
||||
|
|
|
@ -1,17 +1,16 @@
|
|||
// Generated by CoffeeScript 1.3.3
|
||||
(function() {
|
||||
var Collection, Instance, Singleton, isArray, singularize, underscore,
|
||||
__hasProp = Object.prototype.hasOwnProperty,
|
||||
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor; child.__super__ = parent.prototype; return child; };
|
||||
var Collection, Instance, Singleton, Spine, isArray, require, singularize, underscore,
|
||||
__hasProp = {}.hasOwnProperty,
|
||||
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
|
||||
|
||||
if (typeof Spine === "undefined" || Spine === null) Spine = require('spine');
|
||||
Spine = this.Spine || require('spine');
|
||||
|
||||
isArray = Spine.isArray;
|
||||
|
||||
if (typeof require === "undefined" || require === null) {
|
||||
require = (function(value) {
|
||||
require = this.require || (function(value) {
|
||||
return eval(value);
|
||||
});
|
||||
}
|
||||
|
||||
Collection = (function(_super) {
|
||||
|
||||
|
@ -19,7 +18,9 @@
|
|||
|
||||
function Collection(options) {
|
||||
var key, value;
|
||||
if (options == null) options = {};
|
||||
if (options == null) {
|
||||
options = {};
|
||||
}
|
||||
for (key in options) {
|
||||
value = options[key];
|
||||
this[key] = value;
|
||||
|
@ -49,14 +50,16 @@
|
|||
records = this.select(function(rec) {
|
||||
return rec.id + '' === id + '';
|
||||
});
|
||||
if (!records[0]) throw 'Unknown record';
|
||||
if (!records[0]) {
|
||||
throw 'Unknown record';
|
||||
}
|
||||
return records[0];
|
||||
};
|
||||
|
||||
Collection.prototype.findAllByAttribute = function(name, value) {
|
||||
var _this = this;
|
||||
return this.model.select(function(rec) {
|
||||
return rec[name] === value;
|
||||
return _this.associated(rec) && rec[name] === value;
|
||||
});
|
||||
};
|
||||
|
||||
|
@ -72,21 +75,23 @@
|
|||
};
|
||||
|
||||
Collection.prototype.refresh = function(values) {
|
||||
var record, records, _i, _j, _len, _len2, _ref;
|
||||
var record, records, _i, _j, _len, _len1, _ref;
|
||||
_ref = this.all();
|
||||
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
||||
record = _ref[_i];
|
||||
delete this.model.records[record.id];
|
||||
}
|
||||
records = this.model.fromJSON(values);
|
||||
if (!isArray(records)) records = [records];
|
||||
for (_j = 0, _len2 = records.length; _j < _len2; _j++) {
|
||||
if (!isArray(records)) {
|
||||
records = [records];
|
||||
}
|
||||
for (_j = 0, _len1 = records.length; _j < _len1; _j++) {
|
||||
record = records[_j];
|
||||
record.newRecord = false;
|
||||
record[this.fkey] = this.record.id;
|
||||
this.model.records[record.id] = record;
|
||||
}
|
||||
return this.model.trigger('refresh', records);
|
||||
return this.model.trigger('refresh', this.model.cloneArray(records));
|
||||
};
|
||||
|
||||
Collection.prototype.create = function(record) {
|
||||
|
@ -108,7 +113,9 @@
|
|||
|
||||
function Instance(options) {
|
||||
var key, value;
|
||||
if (options == null) options = {};
|
||||
if (options == null) {
|
||||
options = {};
|
||||
}
|
||||
for (key in options) {
|
||||
value = options[key];
|
||||
this[key] = value;
|
||||
|
@ -120,8 +127,12 @@
|
|||
};
|
||||
|
||||
Instance.prototype.update = function(value) {
|
||||
if (!(value instanceof this.model)) value = new this.model(value);
|
||||
if (value.isNew()) value.save();
|
||||
if (!(value instanceof this.model)) {
|
||||
value = new this.model(value);
|
||||
}
|
||||
if (value.isNew()) {
|
||||
value.save();
|
||||
}
|
||||
return this.record[this.fkey] = value && value.id;
|
||||
};
|
||||
|
||||
|
@ -135,7 +146,9 @@
|
|||
|
||||
function Singleton(options) {
|
||||
var key, value;
|
||||
if (options == null) options = {};
|
||||
if (options == null) {
|
||||
options = {};
|
||||
}
|
||||
for (key in options) {
|
||||
value = options[key];
|
||||
this[key] = value;
|
||||
|
@ -147,7 +160,9 @@
|
|||
};
|
||||
|
||||
Singleton.prototype.update = function(value) {
|
||||
if (!(value instanceof this.model)) value = this.model.fromJSON(value);
|
||||
if (!(value instanceof this.model)) {
|
||||
value = this.model.fromJSON(value);
|
||||
}
|
||||
value[this.fkey] = this.record.id;
|
||||
return value.save();
|
||||
};
|
||||
|
@ -167,9 +182,13 @@
|
|||
Spine.Model.extend({
|
||||
hasMany: function(name, model, fkey) {
|
||||
var association;
|
||||
if (fkey == null) fkey = "" + (underscore(this.className)) + "_id";
|
||||
if (fkey == null) {
|
||||
fkey = "" + (underscore(this.className)) + "_id";
|
||||
}
|
||||
association = function(record) {
|
||||
if (typeof model === 'string') model = require(model);
|
||||
if (typeof model === 'string') {
|
||||
model = require(model);
|
||||
}
|
||||
return new Collection({
|
||||
name: name,
|
||||
model: model,
|
||||
|
@ -178,15 +197,21 @@
|
|||
});
|
||||
};
|
||||
return this.prototype[name] = function(value) {
|
||||
if (value != null) association(this).refresh(value);
|
||||
if (value != null) {
|
||||
association(this).refresh(value);
|
||||
}
|
||||
return association(this);
|
||||
};
|
||||
},
|
||||
belongsTo: function(name, model, fkey) {
|
||||
var association;
|
||||
if (fkey == null) fkey = "" + (singularize(name)) + "_id";
|
||||
if (fkey == null) {
|
||||
fkey = "" + (singularize(name)) + "_id";
|
||||
}
|
||||
association = function(record) {
|
||||
if (typeof model === 'string') model = require(model);
|
||||
if (typeof model === 'string') {
|
||||
model = require(model);
|
||||
}
|
||||
return new Instance({
|
||||
name: name,
|
||||
model: model,
|
||||
|
@ -195,16 +220,22 @@
|
|||
});
|
||||
};
|
||||
this.prototype[name] = function(value) {
|
||||
if (value != null) association(this).update(value);
|
||||
if (value != null) {
|
||||
association(this).update(value);
|
||||
}
|
||||
return association(this).exists();
|
||||
};
|
||||
return this.attributes.push(fkey);
|
||||
},
|
||||
hasOne: function(name, model, fkey) {
|
||||
var association;
|
||||
if (fkey == null) fkey = "" + (underscore(this.className)) + "_id";
|
||||
if (fkey == null) {
|
||||
fkey = "" + (underscore(this.className)) + "_id";
|
||||
}
|
||||
association = function(record) {
|
||||
if (typeof model === 'string') model = require(model);
|
||||
if (typeof model === 'string') {
|
||||
model = require(model);
|
||||
}
|
||||
return new Singleton({
|
||||
name: name,
|
||||
model: model,
|
||||
|
@ -213,7 +244,9 @@
|
|||
});
|
||||
};
|
||||
return this.prototype[name] = function(value) {
|
||||
if (value != null) association(this).update(value);
|
||||
if (value != null) {
|
||||
association(this).update(value);
|
||||
}
|
||||
return association(this).find();
|
||||
};
|
||||
}
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
// Generated by CoffeeScript 1.3.3
|
||||
(function() {
|
||||
var $, escapeRegExp, hashStrip, namedParam, splatParam,
|
||||
__hasProp = Object.prototype.hasOwnProperty,
|
||||
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor; child.__super__ = parent.prototype; return child; },
|
||||
__slice = Array.prototype.slice;
|
||||
var $, Spine, escapeRegExp, hashStrip, namedParam, splatParam,
|
||||
__hasProp = {}.hasOwnProperty,
|
||||
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
|
||||
__slice = [].slice;
|
||||
|
||||
if (typeof Spine === "undefined" || Spine === null) Spine = require('spine');
|
||||
Spine = this.Spine || require('spine');
|
||||
|
||||
$ = Spine.$;
|
||||
|
||||
|
@ -48,12 +49,16 @@
|
|||
};
|
||||
|
||||
Route.setup = function(options) {
|
||||
if (options == null) options = {};
|
||||
if (options == null) {
|
||||
options = {};
|
||||
}
|
||||
this.options = $.extend({}, this.options, options);
|
||||
if (this.options.history) {
|
||||
this.history = this.historySupport && this.options.history;
|
||||
}
|
||||
if (this.options.shim) return;
|
||||
if (this.options.shim) {
|
||||
return;
|
||||
}
|
||||
if (this.history) {
|
||||
$(window).bind('popstate', this.change);
|
||||
} else {
|
||||
|
@ -82,11 +87,17 @@
|
|||
}
|
||||
options = $.extend({}, this.options, options);
|
||||
path = args.join('/');
|
||||
if (this.path === path) return;
|
||||
if (this.path === path) {
|
||||
return;
|
||||
}
|
||||
this.path = path;
|
||||
this.trigger('navigate', this.path);
|
||||
if (options.trigger) this.matchRoute(this.path, options);
|
||||
if (options.shim) return;
|
||||
if (options.trigger) {
|
||||
this.matchRoute(this.path, options);
|
||||
}
|
||||
if (options.shim) {
|
||||
return;
|
||||
}
|
||||
if (this.history) {
|
||||
return history.pushState({}, document.title, this.path);
|
||||
} else {
|
||||
|
@ -97,7 +108,9 @@
|
|||
Route.getPath = function() {
|
||||
var path;
|
||||
path = window.location.pathname;
|
||||
if (path.substr(0, 1) !== '/') path = '/' + path;
|
||||
if (path.substr(0, 1) !== '/') {
|
||||
path = '/' + path;
|
||||
}
|
||||
return path;
|
||||
};
|
||||
|
||||
|
@ -116,16 +129,18 @@
|
|||
Route.change = function() {
|
||||
var path;
|
||||
path = this.getFragment() !== '' ? this.getFragment() : this.getPath();
|
||||
if (path === this.path) return;
|
||||
if (path === this.path) {
|
||||
return;
|
||||
}
|
||||
this.path = path;
|
||||
return this.matchRoute(this.path);
|
||||
};
|
||||
|
||||
Route.matchRoute = function(path, options) {
|
||||
var route, _i, _len, _ref2;
|
||||
_ref2 = this.routes;
|
||||
for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
|
||||
route = _ref2[_i];
|
||||
var route, _i, _len, _ref1;
|
||||
_ref1 = this.routes;
|
||||
for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
|
||||
route = _ref1[_i];
|
||||
if (route.match(path, options)) {
|
||||
this.trigger('change', route, path);
|
||||
return route;
|
||||
|
@ -143,6 +158,10 @@
|
|||
while ((match = namedParam.exec(path)) !== null) {
|
||||
this.names.push(match[1]);
|
||||
}
|
||||
splatParam.lastIndex = 0;
|
||||
while ((match = splatParam.exec(path)) !== null) {
|
||||
this.names.push(match[1]);
|
||||
}
|
||||
path = path.replace(escapeRegExp, '\\$&').replace(namedParam, '([^\/]*)').replace(splatParam, '(.*?)');
|
||||
this.route = new RegExp('^' + path + '$');
|
||||
} else {
|
||||
|
@ -151,14 +170,18 @@
|
|||
}
|
||||
|
||||
Route.prototype.match = function(path, options) {
|
||||
var i, match, param, params, _len;
|
||||
if (options == null) options = {};
|
||||
var i, match, param, params, _i, _len;
|
||||
if (options == null) {
|
||||
options = {};
|
||||
}
|
||||
match = this.route.exec(path);
|
||||
if (!match) return false;
|
||||
if (!match) {
|
||||
return false;
|
||||
}
|
||||
options.match = match;
|
||||
params = match.slice(1);
|
||||
if (this.names.length) {
|
||||
for (i = 0, _len = params.length; i < _len; i++) {
|
||||
for (i = _i = 0, _len = params.length; _i < _len; i = ++_i) {
|
||||
param = params[i];
|
||||
options[this.names[i]] = param;
|
||||
}
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
// Generated by CoffeeScript 1.3.3
|
||||
(function() {
|
||||
var $, Controller, Events, Log, Model, Module, Spine, isArray, isBlank, makeArray, moduleKeywords,
|
||||
__slice = Array.prototype.slice,
|
||||
__indexOf = Array.prototype.indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; },
|
||||
__hasProp = Object.prototype.hasOwnProperty,
|
||||
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor; child.__super__ = parent.prototype; return child; },
|
||||
var $, Controller, Events, Log, Model, Module, Spine, createObject, isArray, isBlank, makeArray, moduleKeywords,
|
||||
__slice = [].slice,
|
||||
__indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; },
|
||||
__hasProp = {}.hasOwnProperty,
|
||||
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
|
||||
__bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };
|
||||
|
||||
Events = {
|
||||
|
@ -29,28 +30,36 @@
|
|||
args = 1 <= arguments.length ? __slice.call(arguments, 0) : [];
|
||||
ev = args.shift();
|
||||
list = this.hasOwnProperty('_callbacks') && ((_ref = this._callbacks) != null ? _ref[ev] : void 0);
|
||||
if (!list) return;
|
||||
if (!list) {
|
||||
return;
|
||||
}
|
||||
for (_i = 0, _len = list.length; _i < _len; _i++) {
|
||||
callback = list[_i];
|
||||
if (callback.apply(this, args) === false) break;
|
||||
if (callback.apply(this, args) === false) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
},
|
||||
unbind: function(ev, callback) {
|
||||
var cb, i, list, _len, _ref;
|
||||
var cb, i, list, _i, _len, _ref;
|
||||
if (!ev) {
|
||||
this._callbacks = {};
|
||||
return this;
|
||||
}
|
||||
list = (_ref = this._callbacks) != null ? _ref[ev] : void 0;
|
||||
if (!list) return this;
|
||||
if (!list) {
|
||||
return this;
|
||||
}
|
||||
if (!callback) {
|
||||
delete this._callbacks[ev];
|
||||
return this;
|
||||
}
|
||||
for (i = 0, _len = list.length; i < _len; i++) {
|
||||
for (i = _i = 0, _len = list.length; _i < _len; i = ++_i) {
|
||||
cb = list[i];
|
||||
if (!(cb === callback)) continue;
|
||||
if (!(cb === callback)) {
|
||||
continue;
|
||||
}
|
||||
list = list.slice();
|
||||
list.splice(i, 1);
|
||||
this._callbacks[ev] = list;
|
||||
|
@ -66,10 +75,16 @@
|
|||
log: function() {
|
||||
var args;
|
||||
args = 1 <= arguments.length ? __slice.call(arguments, 0) : [];
|
||||
if (!this.trace) return;
|
||||
if (this.logPrefix) args.unshift(this.logPrefix);
|
||||
if (!this.trace) {
|
||||
return;
|
||||
}
|
||||
if (this.logPrefix) {
|
||||
args.unshift(this.logPrefix);
|
||||
}
|
||||
if (typeof console !== "undefined" && console !== null) {
|
||||
if (typeof console.log === "function") console.log.apply(console, args);
|
||||
if (typeof console.log === "function") {
|
||||
console.log.apply(console, args);
|
||||
}
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
@ -81,23 +96,35 @@
|
|||
|
||||
Module.include = function(obj) {
|
||||
var key, value, _ref;
|
||||
if (!obj) throw 'include(obj) requires obj';
|
||||
if (!obj) {
|
||||
throw new Error('include(obj) requires obj');
|
||||
}
|
||||
for (key in obj) {
|
||||
value = obj[key];
|
||||
if (__indexOf.call(moduleKeywords, key) < 0) this.prototype[key] = value;
|
||||
if (__indexOf.call(moduleKeywords, key) < 0) {
|
||||
this.prototype[key] = value;
|
||||
}
|
||||
}
|
||||
if ((_ref = obj.included) != null) {
|
||||
_ref.apply(this);
|
||||
}
|
||||
if ((_ref = obj.included) != null) _ref.apply(this);
|
||||
return this;
|
||||
};
|
||||
|
||||
Module.extend = function(obj) {
|
||||
var key, value, _ref;
|
||||
if (!obj) throw 'extend(obj) requires obj';
|
||||
if (!obj) {
|
||||
throw new Error('extend(obj) requires obj');
|
||||
}
|
||||
for (key in obj) {
|
||||
value = obj[key];
|
||||
if (__indexOf.call(moduleKeywords, key) < 0) this[key] = value;
|
||||
if (__indexOf.call(moduleKeywords, key) < 0) {
|
||||
this[key] = value;
|
||||
}
|
||||
}
|
||||
if ((_ref = obj.extended) != null) {
|
||||
_ref.apply(this);
|
||||
}
|
||||
if ((_ref = obj.extended) != null) _ref.apply(this);
|
||||
return this;
|
||||
};
|
||||
|
||||
|
@ -116,7 +143,9 @@
|
|||
};
|
||||
|
||||
function Module() {
|
||||
if (typeof this.init === "function") this.init.apply(this, arguments);
|
||||
if (typeof this.init === "function") {
|
||||
this.init.apply(this, arguments);
|
||||
}
|
||||
}
|
||||
|
||||
return Module;
|
||||
|
@ -141,7 +170,9 @@
|
|||
this.className = name;
|
||||
this.records = {};
|
||||
this.crecords = {};
|
||||
if (attributes.length) this.attributes = attributes;
|
||||
if (attributes.length) {
|
||||
this.attributes = attributes;
|
||||
}
|
||||
this.attributes && (this.attributes = makeArray(this.attributes));
|
||||
this.attributes || (this.attributes = []);
|
||||
this.unbind();
|
||||
|
@ -155,15 +186,21 @@
|
|||
Model.find = function(id) {
|
||||
var record;
|
||||
record = this.records[id];
|
||||
if (!record && ("" + id).match(/c-\d+/)) return this.findCID(id);
|
||||
if (!record) throw 'Unknown record';
|
||||
if (!record && ("" + id).match(/c-\d+/)) {
|
||||
return this.findCID(id);
|
||||
}
|
||||
if (!record) {
|
||||
throw new Error('Unknown record');
|
||||
}
|
||||
return record.clone();
|
||||
};
|
||||
|
||||
Model.findCID = function(cid) {
|
||||
var record;
|
||||
record = this.crecords[cid];
|
||||
if (!record) throw 'Unknown record';
|
||||
if (!record) {
|
||||
throw new Error('Unknown record');
|
||||
}
|
||||
return record.clone();
|
||||
};
|
||||
|
||||
|
@ -177,20 +214,24 @@
|
|||
|
||||
Model.refresh = function(values, options) {
|
||||
var record, records, _i, _len;
|
||||
if (options == null) options = {};
|
||||
if (options == null) {
|
||||
options = {};
|
||||
}
|
||||
if (options.clear) {
|
||||
this.records = {};
|
||||
this.crecords = {};
|
||||
}
|
||||
records = this.fromJSON(values);
|
||||
if (!isArray(records)) records = [records];
|
||||
if (!isArray(records)) {
|
||||
records = [records];
|
||||
}
|
||||
for (_i = 0, _len = records.length; _i < _len; _i++) {
|
||||
record = records[_i];
|
||||
record.id || (record.id = record.cid);
|
||||
this.records[record.id] = record;
|
||||
this.crecords[record.cid] = record;
|
||||
}
|
||||
this.trigger('refresh', !options.clear && this.cloneArray(records));
|
||||
this.trigger('refresh', this.cloneArray(records));
|
||||
return this;
|
||||
};
|
||||
|
||||
|
@ -202,7 +243,9 @@
|
|||
_results = [];
|
||||
for (id in _ref) {
|
||||
record = _ref[id];
|
||||
if (callback(record)) _results.push(record);
|
||||
if (callback(record)) {
|
||||
_results.push(record);
|
||||
}
|
||||
}
|
||||
return _results;
|
||||
}).call(this);
|
||||
|
@ -214,7 +257,9 @@
|
|||
_ref = this.records;
|
||||
for (id in _ref) {
|
||||
record = _ref[id];
|
||||
if (record[name] === value) return record.clone();
|
||||
if (record[name] === value) {
|
||||
return record.clone();
|
||||
}
|
||||
}
|
||||
return null;
|
||||
};
|
||||
|
@ -315,8 +360,12 @@
|
|||
|
||||
Model.fromJSON = function(objects) {
|
||||
var value, _i, _len, _results;
|
||||
if (!objects) return;
|
||||
if (typeof objects === 'string') objects = JSON.parse(objects);
|
||||
if (!objects) {
|
||||
return;
|
||||
}
|
||||
if (typeof objects === 'string') {
|
||||
objects = JSON.parse(objects);
|
||||
}
|
||||
if (isArray(objects)) {
|
||||
_results = [];
|
||||
for (_i = 0, _len = objects.length; _i < _len; _i++) {
|
||||
|
@ -357,14 +406,24 @@
|
|||
|
||||
Model.idCounter = 0;
|
||||
|
||||
Model.uid = function() {
|
||||
return this.idCounter++;
|
||||
Model.uid = function(prefix) {
|
||||
var uid;
|
||||
if (prefix == null) {
|
||||
prefix = '';
|
||||
}
|
||||
uid = prefix + this.idCounter++;
|
||||
if (this.exists(uid)) {
|
||||
uid = this.uid(prefix);
|
||||
}
|
||||
return uid;
|
||||
};
|
||||
|
||||
function Model(atts) {
|
||||
Model.__super__.constructor.apply(this, arguments);
|
||||
if (atts) this.load(atts);
|
||||
this.cid || (this.cid = 'c-' + this.constructor.uid());
|
||||
if (atts) {
|
||||
this.load(atts);
|
||||
}
|
||||
this.cid = this.constructor.uid('c-');
|
||||
}
|
||||
|
||||
Model.prototype.isNew = function() {
|
||||
|
@ -404,17 +463,21 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
if (this.id) result.id = this.id;
|
||||
if (this.id) {
|
||||
result.id = this.id;
|
||||
}
|
||||
return result;
|
||||
};
|
||||
|
||||
Model.prototype.eql = function(rec) {
|
||||
return !!(rec && rec.constructor === this.constructor && (rec.id === this.id || rec.cid === this.cid));
|
||||
return !!(rec && rec.constructor === this.constructor && (rec.cid === this.cid) || (rec.id && rec.id === this.id));
|
||||
};
|
||||
|
||||
Model.prototype.save = function(options) {
|
||||
var error, record;
|
||||
if (options == null) options = {};
|
||||
if (options == null) {
|
||||
options = {};
|
||||
}
|
||||
if (options.validate !== false) {
|
||||
error = this.validate();
|
||||
if (error) {
|
||||
|
@ -428,9 +491,9 @@
|
|||
return record;
|
||||
};
|
||||
|
||||
Model.prototype.updateAttribute = function(name, value) {
|
||||
Model.prototype.updateAttribute = function(name, value, options) {
|
||||
this[name] = value;
|
||||
return this.save();
|
||||
return this.save(options);
|
||||
};
|
||||
|
||||
Model.prototype.updateAttributes = function(atts, options) {
|
||||
|
@ -448,7 +511,9 @@
|
|||
};
|
||||
|
||||
Model.prototype.destroy = function(options) {
|
||||
if (options == null) options = {};
|
||||
if (options == null) {
|
||||
options = {};
|
||||
}
|
||||
this.trigger('beforeDestroy', options);
|
||||
delete this.constructor.records[this.id];
|
||||
delete this.constructor.crecords[this.cid];
|
||||
|
@ -471,12 +536,14 @@
|
|||
};
|
||||
|
||||
Model.prototype.clone = function() {
|
||||
return Object.create(this);
|
||||
return createObject(this);
|
||||
};
|
||||
|
||||
Model.prototype.reload = function() {
|
||||
var original;
|
||||
if (this.isNew()) return this;
|
||||
if (this.isNew()) {
|
||||
return this;
|
||||
}
|
||||
original = this.constructor.find(this.id);
|
||||
this.load(original.attributes());
|
||||
return original;
|
||||
|
@ -519,7 +586,9 @@
|
|||
Model.prototype.create = function(options) {
|
||||
var clone, record;
|
||||
this.trigger('beforeCreate', options);
|
||||
if (!this.id) this.id = this.cid;
|
||||
if (!this.id) {
|
||||
this.id = this.cid;
|
||||
}
|
||||
record = this.dup(false);
|
||||
this.constructor.records[this.id] = record;
|
||||
this.constructor.crecords[this.cid] = record;
|
||||
|
@ -533,7 +602,9 @@
|
|||
var binder, unbinder,
|
||||
_this = this;
|
||||
this.constructor.bind(events, binder = function(record) {
|
||||
if (record && _this.eql(record)) return callback.apply(_this, arguments);
|
||||
if (record && _this.eql(record)) {
|
||||
return callback.apply(_this, arguments);
|
||||
}
|
||||
});
|
||||
this.constructor.bind('unbind', unbinder = function(record) {
|
||||
if (record && _this.eql(record)) {
|
||||
|
@ -549,7 +620,7 @@
|
|||
_this = this;
|
||||
return binder = this.bind(events, function() {
|
||||
_this.constructor.unbind(events, binder);
|
||||
return callback.apply(_this);
|
||||
return callback.apply(_this, arguments);
|
||||
});
|
||||
};
|
||||
|
||||
|
@ -582,6 +653,7 @@
|
|||
|
||||
function Controller(options) {
|
||||
this.release = __bind(this.release, this);
|
||||
|
||||
var key, value, _ref;
|
||||
this.options = options;
|
||||
_ref = this.options;
|
||||
|
@ -589,39 +661,66 @@
|
|||
value = _ref[key];
|
||||
this[key] = value;
|
||||
}
|
||||
if (!this.el) this.el = document.createElement(this.tag);
|
||||
if (!this.el) {
|
||||
this.el = document.createElement(this.tag);
|
||||
}
|
||||
this.el = $(this.el);
|
||||
if (this.className) this.el.addClass(this.className);
|
||||
if (this.attributes) this.el.attr(this.attributes);
|
||||
this.release(function() {
|
||||
return this.el.remove();
|
||||
});
|
||||
if (!this.events) this.events = this.constructor.events;
|
||||
if (!this.elements) this.elements = this.constructor.elements;
|
||||
if (this.events) this.delegateEvents();
|
||||
if (this.elements) this.refreshElements();
|
||||
this.$el = this.el;
|
||||
if (this.className) {
|
||||
this.el.addClass(this.className);
|
||||
}
|
||||
if (this.attributes) {
|
||||
this.el.attr(this.attributes);
|
||||
}
|
||||
if (!this.events) {
|
||||
this.events = this.constructor.events;
|
||||
}
|
||||
if (!this.elements) {
|
||||
this.elements = this.constructor.elements;
|
||||
}
|
||||
if (this.events) {
|
||||
this.delegateEvents(this.events);
|
||||
}
|
||||
if (this.elements) {
|
||||
this.refreshElements();
|
||||
}
|
||||
Controller.__super__.constructor.apply(this, arguments);
|
||||
}
|
||||
|
||||
Controller.prototype.release = function(callback) {
|
||||
if (typeof callback === 'function') {
|
||||
return this.bind('release', callback);
|
||||
} else {
|
||||
return this.trigger('release');
|
||||
}
|
||||
Controller.prototype.release = function() {
|
||||
this.trigger('release');
|
||||
this.el.remove();
|
||||
return this.unbind();
|
||||
};
|
||||
|
||||
Controller.prototype.$ = function(selector) {
|
||||
return $(selector, this.el);
|
||||
};
|
||||
|
||||
Controller.prototype.delegateEvents = function() {
|
||||
var eventName, key, match, method, selector, _ref, _results;
|
||||
_ref = this.events;
|
||||
Controller.prototype.delegateEvents = function(events) {
|
||||
var eventName, key, match, method, selector, _results,
|
||||
_this = this;
|
||||
_results = [];
|
||||
for (key in _ref) {
|
||||
method = _ref[key];
|
||||
if (typeof method !== 'function') method = this.proxy(this[method]);
|
||||
for (key in events) {
|
||||
method = events[key];
|
||||
if (typeof method === 'function') {
|
||||
method = (function(method) {
|
||||
return function() {
|
||||
method.apply(_this, arguments);
|
||||
return true;
|
||||
};
|
||||
})(method);
|
||||
} else {
|
||||
if (!this[method]) {
|
||||
throw new Error("" + method + " doesn't exist");
|
||||
}
|
||||
method = (function(method) {
|
||||
return function() {
|
||||
_this[method].apply(_this, arguments);
|
||||
return true;
|
||||
};
|
||||
})(method);
|
||||
}
|
||||
match = key.match(this.eventSplitter);
|
||||
eventName = match[1];
|
||||
selector = match[2];
|
||||
|
@ -699,7 +798,7 @@
|
|||
var previous, _ref;
|
||||
_ref = [this.el, $(element.el || element)], previous = _ref[0], this.el = _ref[1];
|
||||
previous.replaceWith(this.el);
|
||||
this.delegateEvents();
|
||||
this.delegateEvents(this.events);
|
||||
this.refreshElements();
|
||||
return this.el;
|
||||
};
|
||||
|
@ -712,14 +811,12 @@
|
|||
return element;
|
||||
};
|
||||
|
||||
if (typeof Object.create !== 'function') {
|
||||
Object.create = function(o) {
|
||||
createObject = Object.create || function(o) {
|
||||
var Func;
|
||||
Func = function() {};
|
||||
Func.prototype = o;
|
||||
return new Func();
|
||||
};
|
||||
}
|
||||
|
||||
isArray = function(value) {
|
||||
return Object.prototype.toString.call(value) === '[object Array]';
|
||||
|
@ -727,7 +824,9 @@
|
|||
|
||||
isBlank = function(value) {
|
||||
var key;
|
||||
if (!value) return true;
|
||||
if (!value) {
|
||||
return true;
|
||||
}
|
||||
for (key in value) {
|
||||
return false;
|
||||
}
|
||||
|
@ -740,9 +839,11 @@
|
|||
|
||||
Spine = this.Spine = {};
|
||||
|
||||
if (typeof module !== "undefined" && module !== null) module.exports = Spine;
|
||||
if (typeof module !== "undefined" && module !== null) {
|
||||
module.exports = Spine;
|
||||
}
|
||||
|
||||
Spine.version = '1.0.6';
|
||||
Spine.version = '1.0.8';
|
||||
|
||||
Spine.isArray = isArray;
|
||||
|
||||
|
@ -769,27 +870,35 @@
|
|||
__extends(result, _super);
|
||||
|
||||
function result() {
|
||||
result.__super__.constructor.apply(this, arguments);
|
||||
return result.__super__.constructor.apply(this, arguments);
|
||||
}
|
||||
|
||||
return result;
|
||||
|
||||
})(this);
|
||||
if (instances) result.include(instances);
|
||||
if (statics) result.extend(statics);
|
||||
if (typeof result.unbind === "function") result.unbind();
|
||||
if (instances) {
|
||||
result.include(instances);
|
||||
}
|
||||
if (statics) {
|
||||
result.extend(statics);
|
||||
}
|
||||
if (typeof result.unbind === "function") {
|
||||
result.unbind();
|
||||
}
|
||||
return result;
|
||||
};
|
||||
|
||||
Model.setup = function(name, attributes) {
|
||||
var Instance;
|
||||
if (attributes == null) attributes = [];
|
||||
if (attributes == null) {
|
||||
attributes = [];
|
||||
}
|
||||
Instance = (function(_super) {
|
||||
|
||||
__extends(Instance, _super);
|
||||
|
||||
function Instance() {
|
||||
Instance.__super__.constructor.apply(this, arguments);
|
||||
return Instance.__super__.constructor.apply(this, arguments);
|
||||
}
|
||||
|
||||
return Instance;
|
||||
|
@ -799,10 +908,6 @@
|
|||
return Instance;
|
||||
};
|
||||
|
||||
Module.init = Controller.init = Model.init = function(a1, a2, a3, a4, a5) {
|
||||
return new this(a1, a2, a3, a4, a5);
|
||||
};
|
||||
|
||||
Spine.Class = Module;
|
||||
|
||||
}).call(this);
|
||||
|
|
Loading…
Reference in a new issue