lib/assets/javascripts/loco-rails.js in loco-rails-1.5.2 vs lib/assets/javascripts/loco-rails.js in loco-rails-2.0.0

- old
+ new

@@ -1,2931 +1,2 @@ -window.App = { - Loco: null, - IdentityMap: null, - Wire: null, - Line: null, - Env: { - loco: null, - namespaceController: null, - controller: null, - action: null, - scope: null - }, - Mix: null, - Mixins: {}, - UI: {}, - Controllers: {}, - Models: {}, - Views: {}, - Services: {}, - Helpers: {}, - Presenters: {}, - Validators: {}, - I18n: {}, - Utils: {}, - Channels: { - Loco: {} - } -}; - -var slice = [].slice, - extend = 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; - -App.Mix = function() { - var Mixed, base, i, method, mixin, mixins, name, ref; - base = arguments[0], mixins = 2 <= arguments.length ? slice.call(arguments, 1) : []; - Mixed = (function(superClass) { - extend(Mixed, superClass); - - function Mixed() { - return Mixed.__super__.constructor.apply(this, arguments); - } - - return Mixed; - - })(base); - for (i = mixins.length - 1; i >= 0; i += -1) { - mixin = mixins[i]; - ref = mixin.prototype; - for (name in ref) { - method = ref[name]; - Mixed.prototype[name] = method; - } - } - return Mixed; -}; - -App.IdentityMap = (function() { - function IdentityMap() {} - - IdentityMap.imap = {}; - - IdentityMap.clear = function() { - return this.imap = {}; - }; - - IdentityMap.add = function(obj) { - var identity; - identity = obj.getIdentity(); - if (this.imap[identity] == null) { - this.imap[identity] = {}; - } - if (this.imap[identity][obj.id] == null) { - this.imap[identity][obj.id] = []; - } - return this.imap[identity][obj.id][0] = obj; - }; - - IdentityMap.connect = function(obj, opts) { - var model; - if (opts == null) { - opts = {}; - } - model = opts["with"]; - this.add(model); - return this.imap[model.getIdentity()][model.id].push(obj); - }; - - IdentityMap.addCollection = function(identity, opts) { - if (opts == null) { - opts = {}; - } - if (this.imap[identity] == null) { - this.imap[identity] = {}; - } - if (this.imap[identity]["collection"] == null) { - this.imap[identity]["collection"] = []; - } - if (this.imap[identity]["collection"].indexOf(opts.to) !== -1) { - return; - } - return this.imap[identity]["collection"].push(opts.to); - }; - - IdentityMap.all = function(identity) { - var arr, id, objs, ref; - if (this.imap[identity] == null) { - return null; - } - arr = []; - ref = this.imap[identity]; - for (id in ref) { - objs = ref[id]; - if (id === "collection") { - continue; - } - arr.push(objs[0]); - } - return arr; - }; - - IdentityMap.find = function(klass, id) { - if (this.imap[klass] && this.imap[klass][id]) { - return this.imap[klass][id][0]; - } else { - return null; - } - }; - - IdentityMap.findConnected = function(klass, id) { - var arr; - if (this.imap[klass] && this.imap[klass][id] && this.imap[klass][id].length > 1) { - arr = this.imap[klass][id]; - return arr.slice(1, +(arr.length - 1) + 1 || 9e9); - } else { - return []; - } - }; - - return IdentityMap; - -})(); - -App.Wire = (function() { - function Wire(opts) { - var ref, ref1, ref2, ref3; - if (opts == null) { - opts = {}; - } - this.syncTime = null; - this.token = null; - this.pollingInterval = null; - this.pollingTime = (ref = opts.pollingTime) != null ? ref : 3000; - this.log = (opts.log != null) && opts.log ? true : false; - this.ssl = opts.ssl; - this.location = (ref1 = opts.location) != null ? ref1 : 'notification-center'; - this.size = (ref2 = opts.size) != null ? ref2 : 100; - this.protocolWithHost = opts.protocolWithHost; - this.allowedDisconnectionTime = (ref3 = opts.allowedDisconnectionTime) != null ? ref3 : 10; - this.disconnectedSinceTime = null; - this.uuid = null; - this.delayedDisconnection = false; - } - - Wire.prototype.setToken = function(token) { - return this.token = token; - }; - - Wire.prototype.getSyncTime = function() { - return this.syncTime; - }; - - Wire.prototype.setSyncTime = function(val) { - return this.syncTime = val; - }; - - Wire.prototype.resetSyncTime = function() { - return this.syncTime = null; - }; - - Wire.prototype.getPollingTime = function() { - return this.pollingTime; - }; - - Wire.prototype.setPollingTime = function(val) { - this.pollingTime = val; - this.disconnect(); - return this.connect(); - }; - - Wire.prototype.getPollingInterval = function() { - return this.pollingInterval; - }; - - Wire.prototype.getSSL = function() { - return this.ssl; - }; - - Wire.prototype.setSSL = function(val) { - return this.ssl = val; - }; - - Wire.prototype.getLocation = function() { - return this.location; - }; - - Wire.prototype.setLocation = function(val) { - return this.location = val; - }; - - Wire.prototype.getSize = function() { - return this.size; - }; - - Wire.prototype.setSize = function(val) { - return this.size = val; - }; - - Wire.prototype.getAllowedDisconnectionTime = function() { - return this.allowedDisconnectionTime; - }; - - Wire.prototype.setAllowedDisconnectionTime = function(val) { - return this.allowedDisconnectionTime = val; - }; - - Wire.prototype.getUuid = function() { - return this.uuid; - }; - - Wire.prototype.setUuid = function(val) { - return this.uuid = val; - }; - - Wire.prototype.setDelayedDisconnection = function() { - return this.delayedDisconnection = true; - }; - - Wire.prototype.connect = function() { - var line; - line = App.Env.loco.getLine(); - if ((line != null) && !line.isWireAllowed()) { - return; - } - return this.pollingInterval = setInterval((function(_this) { - return function() { - _this.check(); - if (_this.delayedDisconnection) { - _this.delayedDisconnection = false; - return _this.disconnect(); - } - }; - })(this), this.pollingTime); - }; - - Wire.prototype.disconnect = function() { - return window.clearInterval(this.pollingInterval); - }; - - Wire.prototype.disableNotifications = function() { - console.log('App.Wire#disableNotifications - DEPRECATED'); - return this.disconnect(); - }; - - Wire.prototype.processNotification = function(notification) { - var className, id, identity, model, obj, payload, signal; - if (this.log) { - console.log(notification); - } - className = notification[0], id = notification[1], signal = notification[2], payload = notification[3]; - model = App.Env.loco.getModelForRemoteName(className); - identity = model.getIdentity(); - if (App.IdentityMap.imap[identity] == null) { - return; - } - if (App.IdentityMap.imap[identity][id] != null) { - obj = App.IdentityMap.find(identity, id); - if (obj["receivedSignal"] != null) { - obj.receivedSignal(signal, payload); - } - this._emitSignalToMembers(id, signal, payload, model, identity); - } - if (model["receivedSignal"] != null) { - model.receivedSignal(signal, payload); - } - if (App.IdentityMap.imap[identity]["collection"] == null) { - return; - } - if (App.IdentityMap.imap[identity]["collection"].length === 0) { - return; - } - return this._emitSignalToCollection(signal, payload, identity); - }; - - Wire.prototype.processSignal = function(notification) { - return this.processNotification(notification); - }; - - Wire.prototype.check = function() { - var request; - if (Object.keys(App.IdentityMap.imap).length === 0 && (this.token == null) && (this.syncTime != null)) { - return; - } - request = new XMLHttpRequest(); - request.open('GET', this._getURL() + '?' + App.Utils.Object.toURIParams(this._requestParams())); - request.onload = (function(_this) { - return function(e) { - var data, i, len, notification, notifications; - if (e.target.status >= 200 && e.target.status < 400) { - data = JSON.parse(e.target.response); - _this.disconnectedSinceTime = null; - _this.syncTime = data[1]; - notifications = data[0]; - if (notifications.length === 0) { - return; - } - for (i = 0, len = notifications.length; i < len; i++) { - notification = notifications[i]; - _this.processNotification(notification); - } - if (notifications.length === _this.size) { - return _this.check(); - } - } else if (e.target.status >= 500) { - return _this._handleDisconnection(); - } - }; - })(this); - request.onerror = (function(_this) { - return function() { - return _this._handleDisconnection(); - }; - })(this); - return request.send(); - }; - - Wire.prototype.fetchSyncTime = function(opts) { - var request; - if (opts == null) { - opts = {}; - } - request = new XMLHttpRequest(); - request.open('GET', (this._getURL()) + "/sync-time"); - request.onerror = (function(_this) { - return function() { - if (opts.after != null) { - return _this[opts.after](); - } - }; - })(this); - request.onload = (function(_this) { - return function(e) { - var data; - if (e.target.status >= 200 && e.target.status < 400) { - data = JSON.parse(e.target.response); - _this.syncTime = data.sync_time; - if (opts.after != null) { - return _this[opts.after](); - } - } else if (e.target.status >= 500) { - if (opts.after != null) { - return _this[opts.after](); - } - } - }; - })(this); - return request.send(); - }; - - Wire.prototype._emitSignalToMembers = function(id, signal, payload, model, identity, obj) { - var connObj, i, len, ref, results; - if (obj == null) { - obj = null; - } - if (obj == null) { - obj = new model({ - id: id - }); - } - ref = App.IdentityMap.findConnected(identity, id); - results = []; - for (i = 0, len = ref.length; i < len; i++) { - connObj = ref[i]; - if (connObj.receiverFor(obj) != null) { - results.push(connObj[connObj.receiverFor(obj)](signal, payload)); - } else if (connObj["receivedSignal"] != null) { - results.push(connObj.receivedSignal(signal, payload)); - } else { - results.push(void 0); - } - } - return results; - }; - - Wire.prototype._emitSignalToCollection = function(signal, payload, identity) { - var i, len, obj, ref, results; - ref = App.IdentityMap.imap[identity]["collection"]; - results = []; - for (i = 0, len = ref.length; i < len; i++) { - obj = ref[i]; - if (obj.receiverFor(identity) != null) { - results.push(obj[obj.receiverFor(identity)](identity + " " + signal, payload)); - } else if (obj["receivedSignal"] != null) { - results.push(obj.receivedSignal(identity + " " + signal, payload)); - } else { - results.push(void 0); - } - } - return results; - }; - - Wire.prototype._requestParams = function() { - var params; - params = { - synced_at: this.syncTime - }; - if (this.token != null) { - params.token = this.token; - } - if (this.uuid != null) { - params.uuid = this.uuid; - } - return params; - }; - - Wire.prototype._getURL = function() { - var _, host, protocol, ref, ref1; - ref = window.location.href.split('/'), protocol = ref[0], _ = ref[1], host = ref[2]; - if (this.protocolWithHost != null) { - ref1 = this.protocolWithHost.split('//'), protocol = ref1[0], host = ref1[1]; - } - if (this.ssl != null) { - protocol = this.ssl ? 'https:' : "http:"; - } - return protocol + "//" + host + "/" + this.location; - }; - - Wire.prototype._handleDisconnection = function() { - var ctrl, diffInSec, ref; - if (this.disconnectedSinceTime == null) { - this.disconnectedSinceTime = new Date(); - } - diffInSec = (new Date() - this.disconnectedSinceTime) / 1000; - ctrl = (ref = App.Env.namespaceController) != null ? ref : App.Env.controller; - if (diffInSec > this.allowedDisconnectionTime && (ctrl['disconnectedForTooLong'] != null)) { - return ctrl.disconnectedForTooLong(this.disconnectedSinceTime); - } - }; - - return Wire; - -})(); - -App.Line = (function() { - function Line(opts) { - if (opts == null) { - opts = {}; - } - this.connected = false; - } - - Line.prototype.connect = function() { - return App.Channels.Loco.NotificationCenter = App.cable.subscriptions.create({ - channel: "Loco::NotificationCenterChannel" - }, { - connected: (function(_this) { - return function() { - var wire; - console.log('ws connected'); - _this.connected = true; - wire = App.Env.loco.getWire(); - if (wire != null) { - wire.setDelayedDisconnection(); - } - return _this._sendNotification({ - loco: 'connected' - }); - }; - })(this), - disconnected: (function(_this) { - return function() { - var wire; - console.log('ws disconnected'); - _this.connected = false; - wire = App.Env.loco.getWire(); - if (wire != null) { - wire.setUuid(null); - wire.fetchSyncTime({ - after: 'connect' - }); - } - return _this._sendNotification({ - loco: 'disconnected' - }); - }; - })(this), - rejected: (function(_this) { - return function() { - console.log('ws rejected'); - return _this._sendNotification({ - loco: 'rejected' - }); - }; - })(this), - received: (function(_this) { - return function(data) { - if (data.loco != null) { - _this._processSystemNotification(data.loco); - delete data.loco; - } - if (Object.keys(data).length === 0) { - return; - } - return _this._sendNotification(data); - }; - })(this) - }); - }; - - Line.prototype.isWireAllowed = function() { - return !this.connected; - }; - - Line.prototype.send = function(data) { - return App.Channels.Loco.NotificationCenter.send(data); - }; - - Line.prototype._processSystemNotification = function(data) { - var wire; - if (data.connection_check != null) { - this.send({ - loco: { - connection_check: true - } - }); - } - wire = App.Env.loco.getWire(); - if (wire == null) { - return; - } - if (data.sync_time != null) { - wire.setSyncTime(data.sync_time); - } - if (data.uuid != null) { - console.log("uuid: " + data.uuid); - wire.setUuid(data.uuid); - } - if (data.notification != null) { - wire.processNotification(data.notification); - } - if (data.xhr_notifications != null) { - wire.check(); - } - if (data.start_ajax_polling) { - console.log("wire connected"); - this.connected = null; - wire.setUuid(null); - return wire.fetchSyncTime({ - after: 'connect' - }); - } - }; - - Line.prototype._sendNotification = function(data) { - var notificationCenter; - notificationCenter = new App.Services.NotificationCenter; - return notificationCenter.receivedSignal(data); - }; - - return Line; - -})(); - -App.Loco = (function() { - function Loco(opts) { - var notificationsParams, ref, ref1, ref2, ref3; - if (opts == null) { - opts = {}; - } - this.wire = null; - this.line = null; - this.locale = null; - this.turbolinks = (ref = opts.turbolinks) != null ? ref : false; - this.startWire = ((ref1 = opts.notifications) != null ? ref1.enable : void 0) ? true : false; - this.postInit = opts.postInit; - this.setLocale((ref2 = opts.locale) != null ? ref2 : 'en'); - this.setProtocolWithHost(opts.protocolWithHost); - notificationsParams = (ref3 = opts.notifications) != null ? ref3 : {}; - notificationsParams.protocolWithHost = this.protocolWithHost; - this.notificationsParams = notificationsParams; - } - - Loco.prototype.getWire = function() { - return this.wire; - }; - - Loco.prototype.getLine = function() { - return this.line; - }; - - Loco.prototype.getLocale = function() { - return this.locale; - }; - - Loco.prototype.setLocale = function(locale) { - return this.locale = locale; - }; - - Loco.prototype.getProtocolWithHost = function() { - return this.protocolWithHost; - }; - - Loco.prototype.setProtocolWithHost = function(val) { - if (val == null) { - this.protocolWithHost = null; - return; - } - if (val[val.length - 1] === '/') { - val = val.slice(0, +(val.length - 2) + 1 || 9e9); - } - return this.protocolWithHost = val; - }; - - Loco.prototype.init = function() { - var event; - App.Env.loco = this; - this.initWire(); - this.initLine(); - if (this.turbolinks) { - event = Number(this.turbolinks) >= 5 ? "turbolinks:load" : "page:change"; - return document.addEventListener(event, (function(_this) { - return function() { - _this.flow(); - if (_this.postInit != null) { - return _this.postInit(); - } - }; - })(this)); - } else { - return this.ready((function(_this) { - return function() { - _this.flow(); - if (_this.postInit != null) { - return _this.postInit(); - } - }; - })(this)); - } - }; - - Loco.prototype.ready = function(fn) { - var cond; - cond = document.attachEvent ? document.readyState === "complete" : document.readyState !== "loading"; - if (cond) { - return fn(); - } else { - return document.addEventListener('DOMContentLoaded', fn); - } - }; - - Loco.prototype.initWire = function() { - if (!this.startWire) { - return; - } - this.wire = new App.Wire(this.notificationsParams); - return this.wire.fetchSyncTime({ - after: 'connect' - }); - }; - - Loco.prototype.initLine = function() { - if (App.cable == null) { - return; - } - this.line = new App.Line; - return this.line.connect(); - }; - - Loco.prototype.flow = function() { - var action_name, controller_name, namespace_name; - App.IdentityMap.clear(); - namespace_name = document.getElementsByTagName('body')[0].getAttribute('data-namespace'); - controller_name = document.getElementsByTagName('body')[0].getAttribute('data-controller'); - action_name = document.getElementsByTagName('body')[0].getAttribute('data-action'); - App.Env.action = action_name; - if (App.Controllers[namespace_name] != null) { - App.Env.namespaceController = new App.Controllers[namespace_name]; - if (App.Controllers[namespace_name][controller_name] != null) { - App.Env.controller = new App.Controllers[namespace_name][controller_name]; - } - if (App.Env.namespaceController.initialize != null) { - App.Env.namespaceController.initialize(); - } - if (App.Env.controller != null) { - App.Env.namespaceController.setSubController(App.Env.controller); - App.Env.controller.setSuperController(App.Env.namespaceController); - if (App.Env.controller.initialize != null) { - App.Env.controller.initialize(); - } - if (App.Env.controller[action_name] != null) { - App.Env.controller[action_name](); - } - } - } else if (App.Controllers[controller_name]) { - App.Env.controller = new App.Controllers[controller_name]; - if (App.Env.controller.initialize != null) { - App.Env.controller.initialize(); - } - if (App.Env.controller[action_name] != null) { - App.Env.controller[action_name](); - } - } - if (this.wire != null) { - this.wire.resetSyncTime(); - return this.wire.fetchSyncTime(); - } - }; - - Loco.prototype.emit = function(data) { - return this.line.send(data); - }; - - Loco.prototype.getModels = function() { - var _, func, innerFunc, models, ref, ref1, regExp; - models = []; - regExp = /^[A-Z]/; - ref = App.Models; - for (func in ref) { - _ = ref[func]; - if (!regExp.exec(func) || func === "Base") { - continue; - } - models.push(func); - ref1 = App.Models[func]; - for (innerFunc in ref1) { - _ = ref1[innerFunc]; - if (regExp.exec(innerFunc)) { - models.push(func + "." + innerFunc); - } - } - } - return models; - }; - - Loco.prototype.getModelForRemoteName = function(remoteName) { - var i, len, model, parts, ref; - ref = this.getModels(); - for (i = 0, len = ref.length; i < len; i++) { - model = ref[i]; - parts = model.split("."); - if (parts.length === 1) { - if (App.Models[parts[0]].getRemoteName() === remoteName) { - return App.Models[parts[0]]; - } - } else if (parts.length === 2) { - if (App.Models[parts[0]][parts[1]].getRemoteName() === remoteName) { - return App.Models[parts[0]][parts[1]]; - } - } - } - }; - - return Loco; - -})(); - -App.Mixins.Connectivity = (function() { - function Connectivity() {} - - Connectivity.prototype.connectWith = function(data, opts) { - var i, identity, len, resource, results; - if (opts == null) { - opts = {}; - } - if (data == null) { - return null; - } - if (data.constructor.name !== "Array") { - data = [data]; - } - data = App.Utils.Array.uniq(data); - results = []; - for (i = 0, len = data.length; i < len; i++) { - resource = data[i]; - if (resource.constructor.name === "Function") { - identity = resource.getIdentity(); - App.IdentityMap.addCollection(identity, { - to: this - }); - if (opts.receiver != null) { - results.push(this.receivers[identity] = opts.receiver); - } else { - results.push(void 0); - } - } else { - App.IdentityMap.connect(this, { - "with": resource - }); - if (opts.receiver != null) { - results.push(this.receivers[resource.toKey()] = opts.receiver); - } else { - results.push(void 0); - } - } - } - return results; - }; - - Connectivity.prototype.receiverFor = function(data) { - if (data.constructor.name === "String") { - if (this.receivers[data] != null) { - return this.receivers[data]; - } else { - return null; - } - } - if (this.receivers[data.toKey()] != null) { - return this.receivers[data.toKey()]; - } - return null; - }; - - return Connectivity; - -})(); - -App.Utils.Array = (function() { - function Array() {} - - Array.map = function(arr, func) { - var i, len, newArr, o; - newArr = []; - for (i = 0, len = arr.length; i < len; i++) { - o = arr[i]; - newArr.push(func(o)); - } - return newArr; - }; - - Array.uniq = function(arr) { - var i, len, newArr, o; - newArr = []; - for (i = 0, len = arr.length; i < len; i++) { - o = arr[i]; - if (newArr.indexOf(o) === -1) { - newArr.push(o); - } - } - return newArr; - }; - - return Array; - -})(); - -App.Utils.Collection = (function() { - function Collection() {} - - Collection.find = function(collection, func) { - var i, len, o; - for (i = 0, len = collection.length; i < len; i++) { - o = collection[i]; - if (func(o) === true) { - return o; - } - } - }; - - return Collection; - -})(); - -App.Utils.Dom = (function() { - function Dom() {} - - Dom.hasClass = function(el, className) { - if (el.classList) { - return el.classList.contains(className); - } else { - return new RegExp('(^| )' + className + '( |$)', 'gi').test(el.className); - } - }; - - Dom.addClass = function(el, className) { - if (el.classList) { - return el.classList.add(className); - } else { - return el.className += ' ' + className; - } - }; - - Dom.removeClass = function(el, className) { - if (el.classList) { - return el.classList.remove(className); - } else { - return el.className = el.className.replace(new RegExp('(^|\\b)' + className.split(' ').join('|') + '(\\b|$)', 'gi'), ' '); - } - }; - - return Dom; - -})(); - -App.Utils.Object = (function() { - function Object() {} - - Object.toURIParams = function(obj) { - var key, str, val; - str = ""; - for (key in obj) { - val = obj[key]; - if (str !== "") { - str += "&"; - } - str += key + "=" + encodeURIComponent(val); - } - return str; - }; - - return Object; - -})(); - -App.Utils.String = (function() { - function String() {} - - String.last = function(s) { - return s[s.length - 1]; - }; - - return String; - -})(); - -App.Validators.Base = (function() { - Base.sharedInstances = {}; - - Base.instance = function(obj, attr, opts) { - var sharedInstance, validatorName; - validatorName = this.identity; - if (this.sharedInstances[validatorName] == null) { - this.sharedInstances[validatorName] = new App.Validators[validatorName]; - } - sharedInstance = this.sharedInstances[validatorName]; - sharedInstance.assignAttribs(obj, attr, opts); - return sharedInstance; - }; - - function Base() { - this.obj = null; - this.attr = null; - this.val = null; - this.opts = null; - } - - Base.prototype.assignAttribs = function(obj, attr, opts) { - this.obj = obj; - this.attr = attr; - this.val = this.obj[this.attr]; - return this.opts = opts; - }; - - return Base; - -})(); - -var extend = 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; - -App.Validators.Absence = (function(superClass) { - extend(Absence, superClass); - - Absence.identity = "Absence"; - - function Absence() { - Absence.__super__.constructor.apply(this, arguments); - } - - Absence.prototype.validate = function() { - switch (typeof this.val) { - case 'string': - if ((this.val != null) && this.val.length === 0) { - return; - } - break; - default: - if (this.val == null) { - return; - } - } - return this._addErrorMessage(); - }; - - Absence.prototype._addErrorMessage = function() { - var message; - message = this.opts.message != null ? this.opts.message : App.I18n[App.Env.loco.getLocale()].errors.messages.present; - return this.obj.addErrorMessage(message, { - "for": this.attr - }); - }; - - return Absence; - -})(App.Validators.Base); - -var extend = 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; - -App.Validators.Confirmation = (function(superClass) { - extend(Confirmation, superClass); - - Confirmation.identity = "Confirmation"; - - function Confirmation() { - Confirmation.__super__.constructor.apply(this, arguments); - } - - Confirmation.prototype.validate = function() { - var properVal; - properVal = this.obj[this._properAttr()]; - if ((this.val != null) && (properVal != null) && this.val === properVal) { - return; - } - return this._addErrorMessage(); - }; - - Confirmation.prototype._addErrorMessage = function() { - var attrName, attrNames, defaultAttrName, message; - defaultAttrName = this.attr.charAt(0).toUpperCase() + this.attr.slice(1); - attrNames = App.I18n[App.Env.loco.getLocale()].attributes[this.obj.getIdentity()]; - attrName = (attrNames && attrNames[this.attr]) || defaultAttrName; - message = this.opts.message != null ? this.opts.message : App.I18n[App.Env.loco.getLocale()].errors.messages.confirmation; - message = message.replace('%{attribute}', attrName); - return this.obj.addErrorMessage(message, { - "for": this._properAttr() - }); - }; - - Confirmation.prototype._properAttr = function() { - return this.attr + "Confirmation"; - }; - - return Confirmation; - -})(App.Validators.Base); - -var extend = 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; - -App.Validators.Exclusion = (function(superClass) { - extend(Exclusion, superClass); - - Exclusion.identity = "Exclusion"; - - function Exclusion() { - Exclusion.__super__.constructor.apply(this, arguments); - } - - Exclusion.prototype.validate = function() { - var set; - set = this.opts["in"] || this.opts.within || []; - if (set.indexOf(this.val) === -1) { - return; - } - return this._addErrorMessage(); - }; - - Exclusion.prototype._addErrorMessage = function() { - var message; - message = this.opts.message != null ? this.opts.message : App.I18n[App.Env.loco.getLocale()].errors.messages.exclusion; - return this.obj.addErrorMessage(message, { - "for": this.attr - }); - }; - - return Exclusion; - -})(App.Validators.Base); - -var extend = 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; - -App.Validators.Format = (function(superClass) { - extend(Format, superClass); - - Format.identity = "Format"; - - function Format() { - Format.__super__.constructor.apply(this, arguments); - } - - Format.prototype.validate = function() { - var match; - match = this.opts["with"].exec(this.val); - if (match != null) { - return; - } - return this._addErrorMessage(); - }; - - Format.prototype._addErrorMessage = function() { - var message; - message = this.opts.message != null ? this.opts.message : App.I18n[App.Env.loco.getLocale()].errors.messages.invalid; - return this.obj.addErrorMessage(message, { - "for": this.attr - }); - }; - - return Format; - -})(App.Validators.Base); - -var extend = 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; - -App.Validators.Inclusion = (function(superClass) { - extend(Inclusion, superClass); - - Inclusion.identity = "Inclusion"; - - function Inclusion() { - Inclusion.__super__.constructor.apply(this, arguments); - } - - Inclusion.prototype.validate = function() { - var set; - set = this.opts["in"] || this.opts.within || []; - if (set.indexOf(this.val) !== -1) { - return; - } - return this._addErrorMessage(); - }; - - Inclusion.prototype._addErrorMessage = function() { - var message; - message = this.opts.message != null ? this.opts.message : App.I18n[App.Env.loco.getLocale()].errors.messages.inclusion; - return this.obj.addErrorMessage(message, { - "for": this.attr - }); - }; - - return Inclusion; - -})(App.Validators.Base); - -var extend = 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; - -App.Validators.Length = (function(superClass) { - extend(Length, superClass); - - Length.identity = "Length"; - - function Length() { - Length.__super__.constructor.apply(this, arguments); - } - - Length.prototype.validate = function() { - var message; - if (this.val == null) { - return; - } - message = (this._range()[0] != null) && (this._range()[1] != null) && this._range()[0] === this._range()[1] && this.val.length !== this._range()[0] ? this._selectErrorMessage('wrong_length', this._range()[0]) : (this._range()[0] != null) && this.val.length < this._range()[0] ? this._selectErrorMessage('too_short', this._range()[0]) : (this._range()[1] != null) && this.val.length > this._range()[1] ? this._selectErrorMessage('too_long', this._range()[1]) : null; - if (message === null) { - return; - } - return this.obj.addErrorMessage(message, { - "for": this.attr - }); - }; - - Length.prototype._range = function() { - var from, to; - from = this.opts.minimum || this.opts.is || ((this.opts.within != null) && this.opts.within[0]) || null; - to = this.opts.maximum || this.opts.is || ((this.opts.within != null) && this.opts.within[1]) || null; - return [from, to]; - }; - - Length.prototype._selectErrorMessage = function(msg, val) { - var i, len, message, ref, variant; - if (val === 1) { - return App.I18n[App.Env.loco.getLocale()].errors.messages[msg].one; - } - message = null; - ref = ['few', 'many']; - for (i = 0, len = ref.length; i < len; i++) { - variant = ref[i]; - if (this._checkVariant(variant, val)) { - message = App.I18n[App.Env.loco.getLocale()].errors.messages[msg][variant]; - break; - } - } - if (message == null) { - message = App.I18n[App.Env.loco.getLocale()].errors.messages[msg].other; - } - if (this.opts.message != null) { - message = this.opts.message; - } - if (/%{count}/.exec(message)) { - message = message.replace('%{count}', val); - } - return message; - }; - - Length.prototype._checkVariant = function(variant, val) { - if (App.I18n[App.Env.loco.getLocale()].variants[variant] == null) { - return; - } - return App.I18n[App.Env.loco.getLocale()].variants[variant](val); - }; - - return Length; - -})(App.Validators.Base); - -var extend = 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; - -App.Validators.Numericality = (function(superClass) { - extend(Numericality, superClass); - - Numericality.identity = "Numericality"; - - function Numericality() { - Numericality.__super__.constructor.apply(this, arguments); - } - - Numericality.prototype.validate = function() { - if (isNaN(this.val)) { - return this._addNaNErrorMessage(); - } else if ((this.opts.only_integer != null) && Number(this.val) !== parseInt(this.val)) { - return this._addIntErrorMessage(); - } else if ((this.opts.greater_than != null) && Number(this.val) <= this.opts.greater_than) { - return this._addGreatherThanErrorMessage(); - } else if ((this.opts.greater_than_or_equal_to != null) && Number(this.val) < this.opts.greater_than_or_equal_to) { - return this._addGreatherThanOrEqualToErrorMessage(); - } else if ((this.opts.equal_to != null) && Number(this.val) !== this.opts.equal_to) { - return this._addEqualToErrorMessage(); - } else if ((this.opts.less_than != null) && Number(this.val) >= this.opts.less_than) { - return this._addLessThanErrorMessage(); - } else if ((this.opts.less_than_or_equal_to != null) && Number(this.val) > this.opts.less_than_or_equal_to) { - return this._addLessThanOrEqualToErrorMessage(); - } else if ((this.opts.other_than != null) && Number(this.val) === this.opts.other_than) { - return this._addOtherThanErrorMessage(); - } else if ((this.opts.odd != null) && Number(this.val) % 2 !== 1) { - return this._addOddErrorMessage(); - } else if ((this.opts.even != null) && Number(this.val) % 2 !== 0) { - return this._addEvenErrorMessage(); - } - }; - - Numericality.prototype._addNaNErrorMessage = function() { - var message; - message = this.opts.message != null ? this.opts.message : App.I18n[App.Env.loco.getLocale()].errors.messages.not_a_number; - return this.obj.addErrorMessage(message, { - "for": this.attr - }); - }; - - Numericality.prototype._addIntErrorMessage = function() { - var message; - message = App.I18n[App.Env.loco.getLocale()].errors.messages.not_an_integer; - return this.obj.addErrorMessage(message, { - "for": this.attr - }); - }; - - Numericality.prototype._addGreatherThanErrorMessage = function() { - var message; - message = App.I18n[App.Env.loco.getLocale()].errors.messages.greater_than; - message = message.replace('%{count}', this.opts.greater_than); - return this.obj.addErrorMessage(message, { - "for": this.attr - }); - }; - - Numericality.prototype._addGreatherThanOrEqualToErrorMessage = function() { - var message; - message = App.I18n[App.Env.loco.getLocale()].errors.messages.greater_than_or_equal_to; - message = message.replace('%{count}', this.opts.greater_than_or_equal_to); - return this.obj.addErrorMessage(message, { - "for": this.attr - }); - }; - - Numericality.prototype._addEqualToErrorMessage = function() { - var message; - message = App.I18n[App.Env.loco.getLocale()].errors.messages.equal_to; - message = message.replace('%{count}', this.opts.equal_to); - return this.obj.addErrorMessage(message, { - "for": this.attr - }); - }; - - Numericality.prototype._addLessThanErrorMessage = function() { - var message; - message = App.I18n[App.Env.loco.getLocale()].errors.messages.less_than; - message = message.replace('%{count}', this.opts.less_than); - return this.obj.addErrorMessage(message, { - "for": this.attr - }); - }; - - Numericality.prototype._addLessThanOrEqualToErrorMessage = function() { - var message; - message = App.I18n[App.Env.loco.getLocale()].errors.messages.less_than_or_equal_to; - message = message.replace('%{count}', this.opts.less_than_or_equal_to); - return this.obj.addErrorMessage(message, { - "for": this.attr - }); - }; - - Numericality.prototype._addOtherThanErrorMessage = function() { - var message; - message = App.I18n[App.Env.loco.getLocale()].errors.messages.other_than; - message = message.replace('%{count}', this.opts.other_than); - return this.obj.addErrorMessage(message, { - "for": this.attr - }); - }; - - Numericality.prototype._addOddErrorMessage = function() { - var message; - message = App.I18n[App.Env.loco.getLocale()].errors.messages.odd; - return this.obj.addErrorMessage(message, { - "for": this.attr - }); - }; - - Numericality.prototype._addEvenErrorMessage = function() { - var message; - message = App.I18n[App.Env.loco.getLocale()].errors.messages.even; - return this.obj.addErrorMessage(message, { - "for": this.attr - }); - }; - - return Numericality; - -})(App.Validators.Base); - -var extend = 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; - -App.Validators.Presence = (function(superClass) { - extend(Presence, superClass); - - Presence.identity = "Presence"; - - function Presence() { - Presence.__super__.constructor.apply(this, arguments); - } - - Presence.prototype.validate = function() { - switch (typeof this.val) { - case 'string': - if ((this.val != null) && this.val.length > 0) { - return; - } - break; - default: - if (this.val != null) { - return; - } - } - return this._addErrorMessage(); - }; - - Presence.prototype._addErrorMessage = function() { - var message; - message = this.opts.message != null ? this.opts.message : App.I18n[App.Env.loco.getLocale()].errors.messages.blank; - return this.obj.addErrorMessage(message, { - "for": this.attr - }); - }; - - return Presence; - -})(App.Validators.Base); - -var extend = 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; - -App.Validators.Size = (function(superClass) { - extend(Size, superClass); - - Size.identity = "Size"; - - function Size() { - Size.__super__.constructor.apply(this, arguments); - } - - Size.prototype.validate = function() { - return App.Validators.Length.instance(this.obj, this.attr, this.opts).validate(); - }; - - return Size; - -})(App.Validators.Base); - -App.Models.Base = (function() { - function Base(data) { - if (data == null) { - data = {}; - } - this.id = null; - this.errors = null; - this.resource = data.resource; - if (this.constructor.attributes != null) { - this.__initAttributes(); - } - if (data != null) { - this.__assignAttributes(data); - } - } - - Base.all = function(opts) { - if (opts == null) { - opts = {}; - } - return this.get("all", opts); - }; - - Base.find = function(idOrObj) { - var id, req, urlParams; - urlParams = {}; - if (typeof idOrObj === "object") { - urlParams = idOrObj; - id = idOrObj.id; - delete urlParams.id; - } else { - id = idOrObj; - } - req = new XMLHttpRequest(); - req.open('GET', (this.__getResourcesUrl(urlParams)) + "/" + id); - req.setRequestHeader("Accept", "application/json"); - req.setRequestHeader("Content-Type", "application/json"); - req.send(JSON.stringify(urlParams)); - return new Promise((function(_this) { - return function(resolve, reject) { - req.onerror = function(e) { - return reject(e); - }; - return req.onload = function(e) { - var obj, record; - record = JSON.parse(e.target.response); - obj = _this.__initSubclass(record); - App.IdentityMap.add(obj); - return resolve(obj); - }; - }; - })(this)); - }; - - Base.get = function(action, opts) { - if (opts == null) { - opts = {}; - } - return this.__send("GET", action, opts); - }; - - Base.post = function(action, opts) { - if (opts == null) { - opts = {}; - } - return this.__send("POST", action, opts); - }; - - Base.put = function(action, opts) { - if (opts == null) { - opts = {}; - } - return this.__send("PUT", action, opts); - }; - - Base["delete"] = function(action, opts) { - if (opts == null) { - opts = {}; - } - return this.__send("DELETE", action, opts); - }; - - Base.getIdentity = function() { - if (this.identity != null) { - return this.identity; - } else { - throw "Specify Model's @identity!"; - } - }; - - Base.getRemoteName = function() { - if (this.remoteName != null) { - return this.remoteName; - } else { - return this.getIdentity(); - } - }; - - Base.getAttribRemoteName = function(attrib) { - if (this.attributes == null) { - return null; - } - if (this.attributes[attrib] == null) { - return null; - } - if (this.attributes[attrib].remoteName == null) { - return attrib; - } - return this.attributes[attrib].remoteName; - }; - - Base.getResourcesUrlParams = function() { - var match, params, regexp, url; - url = this.__getResourcesUrl(); - regexp = /:(\w+)\/?/; - params = []; - while (match = regexp.exec(url)) { - params.push(match[1]); - url = url.replace(match[0], match[1]); - } - return params; - }; - - Base.__getResourcesUrl = function(opts) { - var match, resourcesUrl; - if (opts == null) { - opts = {}; - } - resourcesUrl = this.resources == null ? "/" + (this.getRemoteName().toLowerCase()) + "s" : opts.resource ? this.resources[opts.resource].url : (App.Env.scope != null) && (this.resources[App.Env.scope] != null) ? this.resources[App.Env.scope].url : this.resources.url; - if (App.Env.loco.protocolWithHost != null) { - resourcesUrl = "" + App.Env.loco.protocolWithHost + resourcesUrl; - } - match = /:(\w+)\/?/.exec(resourcesUrl); - if (match == null) { - return resourcesUrl; - } - if (opts[match[1]] != null) { - resourcesUrl = resourcesUrl.replace(":" + match[1], opts[match[1]]); - delete opts[match[1]]; - } else if ((opts.obj != null) && (opts.obj[match[1]] != null)) { - resourcesUrl = resourcesUrl.replace(":" + match[1], opts.obj[match[1]]); - } - return resourcesUrl; - }; - - Base.__initSubclass = function(params) { - var parts; - if (params == null) { - params = {}; - } - parts = this.getIdentity().split("."); - if (parts.length === 1) { - return new App.Models[parts[0]](params); - } - return new App.Models[parts[0]][parts[1]](params); - }; - - Base.__page = function(i, opts, reqOpts, resp) { - var data, httpMethod, key, ref, ref1, req, url, val; - if (opts == null) { - opts = {}; - } - if (reqOpts == null) { - reqOpts = {}; - } - if (resp == null) { - resp = { - resources: [], - count: 0 - }; - } - httpMethod = reqOpts.method || "GET"; - url = reqOpts.url || this.__getResourcesUrl(opts); - data = {}; - if (reqOpts.data != null) { - ref = reqOpts.data; - for (key in ref) { - val = ref[key]; - if (key === "resource") { - continue; - } - data[key] = val; - } - } - data[this.__getPaginationParam()] = i; - if (httpMethod === 'GET') { - url = url + '?' + App.Utils.Object.toURIParams(data); - } - req = new XMLHttpRequest(); - req.open(httpMethod, url); - req.setRequestHeader("Accept", "application/json"); - req.setRequestHeader("Content-Type", "application/json"); - req.setRequestHeader("X-CSRF-Token", (ref1 = document.querySelector("meta[name='csrf-token']")) != null ? ref1.content : void 0); - req.send(JSON.stringify(data)); - return new Promise((function(_this) { - return function(resolve, reject) { - req.onerror = function(e) { - return reject(e); - }; - return req.onload = function(e) { - var j, len, obj, record, ref2; - data = JSON.parse(e.target.response); - resp.count = data.count; - for (key in data) { - val = data[key]; - if (['resources', 'count'].indexOf(key) === -1) { - resp[key] = val; - } - } - ref2 = data.resources; - for (j = 0, len = ref2.length; j < len; j++) { - record = ref2[j]; - obj = _this.__initSubclass(record); - if (opts.resource != null) { - obj.resource = opts.resource; - } - App.IdentityMap.add(obj); - resp.resources.push(obj); - } - return resolve(resp); - }; - }; - })(this)); - }; - - Base.__paginate = function(opts, reqOpts) { - var pageNum, perPage, ref; - perPage = this.__getPaginationPer(); - pageNum = (ref = opts.page) != null ? ref : 1; - return this.__page(pageNum, opts, reqOpts).then((function(_this) { - return function(data) { - var func, i, j, max, promise, ref1; - if (opts.page != null) { - return Promise.resolve(data); - } - if (data.count <= perPage) { - return Promise.resolve(data); - } - max = parseInt(data.count / perPage); - if (max !== data.count / perPage) { - max += 1; - } - promise = Promise.resolve(data); - if (max === 1) { - return promise; - } - for (i = j = 2, ref1 = max; 2 <= ref1 ? j <= ref1 : j >= ref1; i = 2 <= ref1 ? ++j : --j) { - func = function(i) { - return promise = promise.then(function(arr) { - return _this.__page(i, opts, reqOpts, data); - }); - }; - func(i); - } - return promise; - }; - })(this)); - }; - - Base.__getPaginationParam = function() { - var defaultParam, param, ref, ref1, ref2, ref3; - defaultParam = 'page'; - if ((App.Env.scope != null) && (this.resources != null) && (this.resources[App.Env.scope] != null)) { - param = (ref = this.resources[App.Env.scope]) != null ? (ref1 = ref.paginate) != null ? ref1.param : void 0 : void 0; - return param != null ? param : defaultParam; - } - if (((ref2 = this.resources) != null ? (ref3 = ref2.paginate) != null ? ref3.param : void 0 : void 0) != null) { - return this.resources.paginate.param; - } - return defaultParam; - }; - - Base.__getPaginationPer = function() { - var ref, ref1, ref2, ref3; - if ((App.Env.scope != null) && (this.resources != null) && (this.resources[App.Env.scope] != null)) { - return (ref = this.resources[App.Env.scope]) != null ? (ref1 = ref.paginate) != null ? ref1.per : void 0 : void 0; - } - if (((ref2 = this.resources) != null ? (ref3 = ref2.paginate) != null ? ref3.per : void 0 : void 0) != null) { - return this.resources.paginate.per; - } - return null; - }; - - Base.__send = function(method, action, opts) { - var reqOpts, url; - url = this.__getResourcesUrl(opts); - if (action !== "all") { - url = url + "/" + action; - } - reqOpts = { - method: method, - url: url, - data: opts - }; - return this.__paginate(opts, reqOpts); - }; - - Base.prototype.setResource = function(name) { - return this.resource = name; - }; - - Base.prototype.getIdentity = function() { - return this.constructor.getIdentity(); - }; - - Base.prototype.getAttrRemoteName = function(attr) { - if (this.constructor.attributes == null) { - return null; - } - if (this.constructor.attributes[attr] == null) { - return null; - } - return this.constructor.attributes[attr].remoteName || attr; - }; - - Base.prototype.getAttrName = function(remoteName) { - var config, name, ref; - if (this.constructor.attributes == null) { - return remoteName; - } - if (this.constructor.attributes[remoteName] != null) { - return remoteName; - } - ref = this.constructor.attributes; - for (name in ref) { - config = ref[name]; - if (config.remoteName === remoteName) { - return name; - } - } - return remoteName; - }; - - Base.prototype.getAttrType = function(attrName) { - if (this.constructor.attributes == null) { - return null; - } - if (this.constructor.attributes[attrName] == null) { - return null; - } - return this.constructor.attributes[attrName].type; - }; - - Base.prototype.assignAttr = function(attrName, val) { - var attrType; - attrType = this.getAttrType(attrName); - if (val == null) { - this[attrName] = null; - return; - } - switch (attrType) { - case "Date": - val = new Date(Date.parse(val)); - break; - case "Integer": - case "Int": - val = parseInt(val); - break; - case "Float": - val = parseFloat(val); - break; - case "Boolean": - case "Bool": - val = typeof val === 'boolean' ? val : Boolean(parseInt(val)); - break; - case "Number": - val = Number(val); - break; - case "String": - val = String(val); - } - return this[attrName] = val; - }; - - Base.prototype.attributes = function() { - var _, attribs, name, ref; - attribs = { - id: this.id - }; - if (this.constructor.attributes == null) { - return attribs; - } - ref = this.constructor.attributes; - for (name in ref) { - _ = ref[name]; - attribs[name] = this[name]; - } - return attribs; - }; - - Base.prototype.isValid = function() { - var config, j, len, meth, name, pvs, ref, ref1, ref2, validationName, validationSettings, validator; - if (this.constructor.attributes == null) { - return true; - } - this.errors = null; - ref = this.constructor.attributes; - for (name in ref) { - config = ref[name]; - if (config.validations == null) { - continue; - } - ref1 = config.validations; - for (validationName in ref1) { - validationSettings = ref1[validationName]; - if ((this.id != null) && validationSettings.on === "create") { - continue; - } - if ((this.id == null) && validationSettings.on === "update") { - continue; - } - if ((validationSettings["if"] != null) && !validationSettings["if"](this)) { - continue; - } - validator = validationName.charAt(0).toUpperCase() + validationName.slice(1); - if (App.Validators[validator] == null) { - console.log("Warning! \"" + validator + "\" validator is not implemented!"); - continue; - } - pvs = this.__processedValidationSettings(validationSettings); - App.Validators[validator].instance(this, name, pvs).validate(); - } - } - if (this.constructor.validate != null) { - ref2 = this.constructor.validate; - for (j = 0, len = ref2.length; j < len; j++) { - meth = ref2[j]; - this[meth](); - } - } - if (this.errors != null) { - return false; - } else { - return true; - } - }; - - Base.prototype.isInvalid = function() { - return !this.isValid(); - }; - - Base.prototype.isEmpty = function() { - var name, ref, val; - ref = this.attributes(); - for (name in ref) { - val = ref[name]; - if (this[name] !== null) { - return false; - } - } - return true; - }; - - Base.prototype.addErrorMessage = function(message, opts) { - if (opts == null) { - opts = {}; - } - if (this.errors == null) { - this.errors = {}; - } - if (this.errors[opts["for"]] == null) { - this.errors[opts["for"]] = []; - } - return this.errors[opts["for"]].push(message); - }; - - Base.prototype.save = function() { - var httpMeth, ref, req; - httpMeth = this.id != null ? "PUT" : "POST"; - req = new XMLHttpRequest(); - req.open(httpMeth, this.__getResourceUrl()); - req.setRequestHeader("Accept", "application/json"); - req.setRequestHeader("Content-Type", "application/json"); - req.setRequestHeader("X-CSRF-Token", (ref = document.querySelector("meta[name='csrf-token']")) != null ? ref.content : void 0); - req.send(JSON.stringify(this.serialize())); - return new Promise((function(_this) { - return function(resolve, reject) { - req.onerror = function(e) { - return reject(e); - }; - return req.onload = function(e) { - var data; - data = JSON.parse(e.target.response); - if (data.success) { - resolve(data); - return; - } - if (data.errors != null) { - _this.__assignRemoteErrorMessages(data.errors); - } - return resolve(data); - }; - }; - })(this)); - }; - - Base.prototype.updateAttribute = function(attr) { - var ref, req; - req = new XMLHttpRequest(); - req.open('PUT', this.__getResourceUrl()); - req.setRequestHeader("Accept", "application/json"); - req.setRequestHeader("Content-Type", "application/json"); - req.setRequestHeader("X-CSRF-Token", (ref = document.querySelector("meta[name='csrf-token']")) != null ? ref.content : void 0); - req.send(JSON.stringify(this.serialize(attr))); - return new Promise((function(_this) { - return function(resolve, reject) { - req.onerror = function(e) { - return reject(e); - }; - return req.onload = function(e) { - var data; - if (e.target.status >= 200 && e.target.status < 400) { - data = JSON.parse(e.target.response); - if (data.success) { - resolve(data); - return; - } - if (data.errors != null) { - _this.__assignRemoteErrorMessages(data.errors); - } - return resolve(data); - } else if (e.target.status >= 500) { - return reject(e); - } - }; - }; - })(this)); - }; - - Base.prototype.serialize = function(attr) { - var _, attribs, hash, mainKey, remoteName; - if (attr == null) { - attr = null; - } - if (this.constructor.attributes == null) { - return {}; - } - hash = {}; - mainKey = this.constructor.getRemoteName().toLowerCase(); - hash[mainKey] = {}; - attribs = {}; - if (attr != null) { - attribs[attr] = null; - } else { - attribs = this.constructor.attributes; - } - for (attr in attribs) { - _ = attribs[attr]; - remoteName = this.getAttrRemoteName(attr); - hash[mainKey][remoteName] = this[attr]; - } - return hash; - }; - - Base.prototype.reload = function() { - var findParams, j, len, param, ref; - findParams = { - id: this.id - }; - ref = this.constructor.getResourcesUrlParams(); - for (j = 0, len = ref.length; j < len; j++) { - param = ref[j]; - findParams[param] = this[param]; - } - return this.constructor.find(findParams); - }; - - Base.prototype.changes = function() { - var currentObj, name, ref, result, val; - result = {}; - currentObj = App.IdentityMap.find(this.getIdentity(), this.id); - ref = this.attributes(); - for (name in ref) { - val = ref[name]; - if (val !== currentObj[name]) { - if ((val != null) && val.constructor === Date && currentObj[name] - val === 0) { - continue; - } - if (val !== currentObj[name]) { - result[name] = { - is: currentObj[name], - was: val - }; - } - } - } - return result; - }; - - Base.prototype.applyChanges = function() { - var name, ref, results, vals; - ref = this.changes(); - results = []; - for (name in ref) { - vals = ref[name]; - results.push(this[name] = vals.is); - } - return results; - }; - - Base.prototype.toKey = function() { - return (this.getIdentity().toLowerCase()) + "_" + this.id; - }; - - Base.prototype.get = function(action, data) { - if (data == null) { - data = {}; - } - return this.__send("GET", action, data); - }; - - Base.prototype.post = function(action, data) { - if (data == null) { - data = {}; - } - return this.__send("POST", action, data); - }; - - Base.prototype.put = function(action, data) { - if (data == null) { - data = {}; - } - return this.__send("PUT", action, data); - }; - - Base.prototype["delete"] = function(action, data) { - if (data == null) { - data = {}; - } - return this.__send("DELETE", action, data); - }; - - Base.prototype.__send = function(method, action, data) { - var ref, req, url; - url = this.__getResourceUrl(); - if (action != null) { - url = url + "/" + action; - } - req = new XMLHttpRequest(); - req.open(method, url); - req.setRequestHeader("Accept", "application/json"); - req.setRequestHeader("Content-Type", "application/json"); - req.setRequestHeader("X-CSRF-Token", (ref = document.querySelector("meta[name='csrf-token']")) != null ? ref.content : void 0); - req.send(JSON.stringify(data)); - return new Promise(function(resolve, reject) { - req.onerror = function(e) { - return reject(e); - }; - return req.onload = function(e) { - if (e.target.status >= 200 && e.target.status < 400) { - data = JSON.parse(e.target.response); - return resolve(data); - } else if (e.target.status >= 500) { - return reject(e); - } - }; - }); - }; - - Base.prototype.__assignAttributes = function(data) { - var attrName, key, results, val; - results = []; - for (key in data) { - val = data[key]; - attrName = this.getAttrName(key); - results.push(this.assignAttr(attrName, val)); - } - return results; - }; - - Base.prototype.__initAttributes = function() { - var config, name, ref, results; - ref = this.constructor.attributes; - results = []; - for (name in ref) { - config = ref[name]; - results.push(this[name] = null); - } - return results; - }; - - Base.prototype.__assignRemoteErrorMessages = function(remoteErrors) { - var attr, error, errors, remoteName, results; - results = []; - for (remoteName in remoteErrors) { - errors = remoteErrors[remoteName]; - attr = this.getAttrName(remoteName); - results.push((function() { - var j, len, results1; - results1 = []; - for (j = 0, len = errors.length; j < len; j++) { - error = errors[j]; - results1.push(this.addErrorMessage(error, { - "for": attr - })); - } - return results1; - }).call(this)); - } - return results; - }; - - Base.prototype.__getResourceUrl = function() { - var url; - url = this.constructor.__getResourcesUrl({ - resource: this.resource, - obj: this - }); - if (this.id == null) { - return url; - } - return url + "/" + this.id; - }; - - Base.prototype.__processedValidationSettings = function(validationSettings) { - var confName, confVal, res; - res = {}; - for (confName in validationSettings) { - confVal = validationSettings[confName]; - if (typeof confVal === 'function') { - res[confName] = confVal(this); - } else { - res[confName] = confVal; - } - } - return res; - }; - - return Base; - -})(); - -var extend = 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; - -App.Controllers.Base = (function(superClass) { - extend(Base, superClass); - - function Base() { - this.views = {}; - this.receivers = {}; - this.subController = null; - this.superController = null; - this.params = this.__fetchParams(); - } - - Base.prototype.setView = function(key, view) { - return this.views[key] = view; - }; - - Base.prototype.getView = function(key) { - return this.views[key]; - }; - - Base.prototype.getViews = function() { - return this.views; - }; - - Base.prototype.setSubController = function(cntrlr) { - return this.subController = cntrlr; - }; - - Base.prototype.getSubController = function() { - return this.subController; - }; - - Base.prototype.setSuperController = function(cntrlr) { - return this.superController = cntrlr; - }; - - Base.prototype.getSuperController = function() { - return this.superController; - }; - - Base.prototype.setResource = function(name) { - return this.setScope(name); - }; - - Base.prototype.setScope = function(name) { - return App.Env.scope = name; - }; - - Base.prototype.__fetchParams = function() { - var arr, i, id, key, len, match, params, paramsArray, paramsString, splitUrl, val; - params = {}; - match = /https?:\/\/.+\/\w+\/(\d+)/.exec(window.location.href); - id = match != null ? match[1] : null; - if (id != null) { - params["id"] = parseInt(id); - } - splitUrl = window.location.href.split('?'); - if (splitUrl.length === 1) { - return params; - } - paramsString = splitUrl[splitUrl.length - 1]; - paramsArray = App.Utils.Array.map(paramsString.split('&'), function(s) { - return s.split('='); - }); - for (i = 0, len = paramsArray.length; i < len; i++) { - arr = paramsArray[i]; - key = decodeURIComponent(arr[0]); - val = decodeURIComponent(arr[1]); - if (val != null) { - val = val.replace(/\+/g, " "); - } - params[key] = val; - } - return params; - }; - - return Base; - -})(App.Mix(App.Mixins.Connectivity)); - -var extend = 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; - -App.Views.Base = (function(superClass) { - extend(Base, superClass); - - function Base(opts) { - if (opts == null) { - opts = {}; - } - this.views = {}; - this.intervals = {}; - this.receivers = {}; - this.controller = null; - this.delegator = null; - if (opts.controller != null) { - this.setController(opts.controller); - } - if (opts.delegator != null) { - this.setDelegator(opts.delegator); - } - } - - Base.prototype.setController = function(cntr) { - return this.controller = cntr; - }; - - Base.prototype.getController = function() { - return this.controller; - }; - - Base.prototype.setView = function(key, view) { - return this.views[key] = view; - }; - - Base.prototype.getView = function(key) { - return this.views[key]; - }; - - Base.prototype.getViews = function() { - return this.views; - }; - - Base.prototype.setDelegator = function(delegator) { - return this.delegator = delegator; - }; - - Base.prototype.getDelegator = function(delegator) { - return this.delegator; - }; - - return Base; - -})(App.Mix(App.Mixins.Connectivity)); - -App.UI.Form = (function() { - function Form(opts) { - if (opts == null) { - opts = {}; - } - this.formId = opts.id; - this.obj = opts["for"]; - this.initObj = (opts.initObj != null) && opts.initObj ? true : false; - this.delegator = opts.delegator; - this.callbackSuccess = opts.callbackSuccess; - this.callbackFailure = opts.callbackFailure; - this.callbackActive = opts.callbackActive; - this.form = this._findForm(); - this.submit = null; - this.submitVal = null; - if (this.form != null) { - this.submit = this.form.querySelector('[type="submit"]'); - } - if (this.submit != null) { - this.submitVal = this.submit.value; - } - this.locale = App.Env.loco.getLocale(); - } - - Form.prototype.getObj = function() { - return this.obj; - }; - - Form.prototype.render = function() { - if (this.initObj) { - this._assignAttribs(); - return this._handle(); - } else if (this.form != null) { - this.fill(); - return this._handle(); - } - }; - - Form.prototype.fill = function(attr) { - var _, attributes, formEl, name, query, radioEl, remoteName, results, uniqInputTypes; - if (attr == null) { - attr = null; - } - if (this.obj == null) { - return null; - } - if (this.obj.constructor.attributes == null) { - return null; - } - attributes = {}; - if (attr != null) { - attributes[attr] = null; - } else { - attributes = this.obj.constructor.attributes; - } - results = []; - for (name in attributes) { - _ = attributes[name]; - remoteName = this.obj.getAttrRemoteName(name); - query = this.form.querySelector("[data-attr=" + remoteName + "]"); - if (query === null) { - continue; - } - formEl = query.querySelectorAll("input,textarea,select"); - if (formEl.length === 0) { - continue; - } - if (formEl.length === 1) { - formEl[0].value = this.obj[name]; - continue; - } - uniqInputTypes = App.Utils.Array.uniq(App.Utils.Array.map(formEl, function(e) { - return e.getAttribute('type'); - })); - if (uniqInputTypes.length === 1 && uniqInputTypes[0] === 'radio') { - radioEl = App.Utils.Collection.find(formEl, (function(_this) { - return function(e) { - return e.value === String(_this.obj[name]); - }; - })(this)); - if (radioEl != null) { - radioEl.checked = true; - continue; - } - } - if (formEl[0].getAttribute("type") !== "hidden" && formEl[formEl.length - 1].getAttribute('type') !== "checkbox") { - continue; - } - results.push(formEl[formEl.length - 1].checked = Boolean(this.obj[name])); - } - return results; - }; - - Form.prototype._findForm = function() { - var objName; - if (this.formId != null) { - return document.getElementById("" + this.formId); - } - if (this.obj != null) { - objName = this.obj.getIdentity().toLowerCase(); - if (this.obj.id != null) { - return document.getElementById("edit_" + objName + "_" + this.obj.id); - } else { - return document.getElementById("new_" + objName); - } - } - }; - - Form.prototype._handle = function() { - return this.form.addEventListener('submit', (function(_this) { - return function(e) { - var clearForm; - e.preventDefault(); - if (!_this._canBeSubmitted()) { - return; - } - if (_this.obj == null) { - _this._submitForm(); - return; - } - _this._assignAttribs(); - _this._hideErrors(); - if (_this.obj.isInvalid()) { - _this._renderErrors(); - if (_this.callbackFailure != null) { - _this.delegator[_this.callbackFailure](); - } - return; - } - _this._submittingForm(false); - clearForm = _this.obj.id != null ? false : true; - return _this.obj.save().then(function(data) { - _this._alwaysAfterRequest(); - if (data.success) { - return _this._handleSuccess(data, clearForm); - } else { - if (_this.callbackFailure != null) { - _this.delegator[_this.callbackFailure](); - } - return _this._renderErrors(); - } - })["catch"](function(err) { - return _this._connectionError(); - }); - }; - })(this)); - }; - - Form.prototype._canBeSubmitted = function() { - if (this.submit == null) { - return true; - } - if (App.Utils.Dom.hasClass(this.submit, 'active')) { - return false; - } - if (App.Utils.Dom.hasClass(this.submit, 'success')) { - return false; - } - if (App.Utils.Dom.hasClass(this.submit, 'failure')) { - return false; - } - return true; - }; - - Form.prototype._submitForm = function() { - var data, ref, req, url; - this._submittingForm(); - url = this.form.getAttribute('action') + '.json'; - data = new FormData(this.form); - req = new XMLHttpRequest(); - req.open('POST', url); - req.setRequestHeader("X-CSRF-Token", (ref = document.querySelector("meta[name='csrf-token']")) != null ? ref.content : void 0); - req.onload = (function(_this) { - return function(e) { - _this._alwaysAfterRequest(); - if (_this.submit != null) { - _this.submit.blur(); - } - if (e.target.status >= 200 && e.target.status < 400) { - data = JSON.parse(e.target.response); - if (data.success) { - return _this._handleSuccess(data, _this.form.getAttribute("method") === "POST"); - } else { - return _this._renderErrors(data.errors); - } - } else if (e.target.status >= 500) { - return _this._connectionError(); - } - }; - })(this); - req.onerror = (function(_this) { - return function() { - _this._alwaysAfterRequest(); - if (_this.submit != null) { - _this.submit.blur(); - } - return _this._connectionError(); - }; - })(this); - return req.send(data); - }; - - Form.prototype._handleSuccess = function(data, clearForm) { - var ref, ref1, val; - if (clearForm == null) { - clearForm = true; - } - val = (ref = (ref1 = data.flash) != null ? ref1.success : void 0) != null ? ref : App.I18n[this.locale].ui.form.success; - if (this.submit != null) { - App.Utils.Dom.addClass(this.submit, 'success'); - this.submit.value = val; - } - if (data.access_token != null) { - App.Env.loco.getWire().setToken(data.access_token); - } - if (this.callbackSuccess != null) { - if (data.data != null) { - this.delegator[this.callbackSuccess](data.data); - } else { - this.delegator[this.callbackSuccess](); - } - return; - } - return setTimeout((function(_this) { - return function() { - var i, len, node, nodes, results, selector; - if (_this.submit != null) { - _this.submit.disabled = false; - App.Utils.Dom.removeClass(_this.submit, 'success'); - _this.submit.value = _this.submitVal; - } - selector = ":not([data-loco-not-clear=true])"; - if (clearForm) { - nodes = _this.form.querySelectorAll("input:not([type='submit'])" + selector + ", textarea" + selector); - results = []; - for (i = 0, len = nodes.length; i < len; i++) { - node = nodes[i]; - results.push(node.value = ''); - } - return results; - } - }; - })(this), 5000); - }; - - Form.prototype._renderErrors = function(remoteErrors) { - var attrib, data, errors, i, len, node, nodes, query, remoteName; - if (remoteErrors == null) { - remoteErrors = null; - } - if ((this.obj != null) && (this.obj.errors == null)) { - return; - } - if ((this.obj == null) && (remoteErrors == null)) { - return; - } - data = remoteErrors != null ? remoteErrors : this.obj.errors; - for (attrib in data) { - errors = data[attrib]; - remoteName = this.obj != null ? this.obj.getAttrRemoteName(attrib) : attrib; - if ((remoteName != null) && attrib !== "base") { - query = this.form.querySelector("[data-attr=" + remoteName + "]"); - if (query === null) { - continue; - } - nodes = query.querySelectorAll(".errors[data-for=" + remoteName + "]"); - if (nodes.length === 0) { - continue; - } - for (i = 0, len = nodes.length; i < len; i++) { - node = nodes[i]; - node.textContent = errors[0]; - } - continue; - } - if (attrib === "base" && errors.length > 0) { - nodes = document.querySelectorAll(".errors[data-for='base']"); - if (nodes.length === 1) { - nodes[0].textContent = errors[0]; - } else if (this.submit != null) { - this.submit.value = errors[0]; - } - } - } - if (this.submit != null) { - if (this.submit.value === this.submitVal || this.submit.value === App.I18n[this.locale].ui.form.sending) { - this.submit.value = App.I18n[this.locale].ui.form.errors.invalid_data; - } - App.Utils.Dom.addClass(this.submit, 'failure'); - } - this._showErrors(); - return setTimeout((function(_this) { - return function() { - var j, len1, ref, results; - if (_this.submit != null) { - _this.submit.disabled = false; - App.Utils.Dom.removeClass(_this.submit, 'failure'); - _this.submit.val = _this.submitVal; - } - ref = _this.form.querySelectorAll('input.invalid, textarea.invalid, select.invalid'); - results = []; - for (j = 0, len1 = ref.length; j < len1; j++) { - node = ref[j]; - results.push(App.Utils.Dom.removeClass(node, 'invalid')); - } - return results; - }; - })(this), 1000); - }; - - Form.prototype._assignAttribs = function() { - var _, formEl, name, query, radioEl, ref, remoteName, results, uniqInputTypes; - if (this.obj.constructor.attributes == null) { - return null; - } - ref = this.obj.constructor.attributes; - results = []; - for (name in ref) { - _ = ref[name]; - remoteName = this.obj.getAttrRemoteName(name); - query = this.form.querySelector("[data-attr=" + remoteName + "]"); - if (query === null) { - continue; - } - formEl = query.querySelectorAll("input,textarea,select"); - if (formEl.length === 0) { - continue; - } - if (formEl.length === 1) { - this.obj.assignAttr(name, formEl[0].value); - continue; - } - uniqInputTypes = App.Utils.Array.uniq(App.Utils.Array.map(formEl, function(e) { - return e.getAttribute('type'); - })); - if (uniqInputTypes.length === 1 && uniqInputTypes[0] === 'radio') { - radioEl = App.Utils.Collection.find(formEl, (function(_this) { - return function(e) { - return e.checked === true; - }; - })(this)); - if (radioEl != null) { - this.obj.assignAttr(name, radioEl.value); - continue; - } - } - if (formEl[0].getAttribute("type") !== "hidden" && formEl[formEl.length - 1].getAttribute('type') !== "checkbox") { - continue; - } - if (formEl[formEl.length - 1].checked === true) { - results.push(this.obj.assignAttr(name, formEl[formEl.length - 1].value)); - } else { - results.push(this.obj.assignAttr(name, formEl[0].value)); - } - } - return results; - }; - - Form.prototype._hideErrors = function() { - var e, i, len, ref, results; - ref = this.form.querySelectorAll('.errors'); - results = []; - for (i = 0, len = ref.length; i < len; i++) { - e = ref[i]; - if (e.textContent.trim().length > 0) { - e.textContent = ''; - results.push(e.style.display = 'none'); - } else { - results.push(void 0); - } - } - return results; - }; - - Form.prototype._showErrors = function() { - var e, i, len, ref, results; - ref = this.form.querySelectorAll('.errors'); - results = []; - for (i = 0, len = ref.length; i < len; i++) { - e = ref[i]; - if (e.textContent.trim().length > 0) { - results.push(e.style.display = 'block'); - } else { - results.push(void 0); - } - } - return results; - }; - - Form.prototype._submittingForm = function(hideErrors) { - if (hideErrors == null) { - hideErrors = true; - } - if (this.submit != null) { - App.Utils.Dom.removeClass(this.submit, 'success'); - App.Utils.Dom.removeClass(this.submit, 'failure'); - App.Utils.Dom.addClass(this.submit, 'active'); - this.submit.value = App.I18n[this.locale].ui.form.sending; - } - if (this.callbackActive != null) { - this.delegator[this.callbackActive](); - } - if (hideErrors) { - return this._hideErrors(); - } - }; - - Form.prototype._connectionError = function() { - if (this.submit == null) { - return; - } - App.Utils.Dom.removeClass(this.submit, 'active'); - App.Utils.Dom.addClass(this.submit, 'failure'); - this.submit.val = App.I18n[this.locale].ui.form.errors.connection; - return setTimeout((function(_this) { - return function() { - _this.submit.disabled = false; - App.Utils.Dom.removeClass(_this.submit, 'failure'); - return _this.submit.val = _this.submitVal; - }; - })(this), 3000); - }; - - Form.prototype._alwaysAfterRequest = function() { - if (this.submit == null) { - return; - } - return App.Utils.Dom.removeClass(this.submit, 'active'); - }; - - return Form; - -})(); - -App.UI.Tabs = (function() { - function Tabs(node, delegator, opts) { - var ref; - if (opts == null) { - opts = {}; - } - this.sel = $(node); - this.delegator = delegator; - this.animFunc = (ref = opts.animFunc) != null ? ref : 'animate'; - this.handle(); - } - - Tabs.prototype.handle = function() { - var elementsSize; - elementsSize = this.sel.find('a').size(); - return this.sel.find('a').click((function(_this) { - return function(e) { - var child, i, index, left, len, ref, width; - e.preventDefault(); - if ($(e.target).hasClass("active")) { - return; - } - index = 0; - ref = $(e.target).parent().children('a'); - for (i = 0, len = ref.length; i < len; i++) { - child = ref[i]; - if ($(child).text() === $(e.target).text()) { - break; - } - index += 1; - } - width = parseInt(_this.sel.css('width')); - left = width / elementsSize * index; - _this.sel.find('a.active').removeClass('active'); - $(e.target).addClass('active'); - _this.sel.find('div.background')[_this.animFunc]({ - left: left - }, 200); - return _this.delegator[$(e.target).data("action")](); - }; - })(this)); - }; - - return Tabs; - -})(); - -App.Services.Date = (function() { - function Date(date) { - this.date = date; - } - - Date.prototype.toString = function(format) { - var skope; - if (format == null) { - format = 'default'; - } - skope = App.I18n[App.Env.loco.getLocale()].date.formats; - switch (format) { - case 'default': - return this.strftime(skope["default"]); - case 'short': - return this.strftime(skope.short); - case 'long': - return this.strftime(skope.long); - default: - return console.log('App.Services.Date#toString: unknown format.'); - } - }; - - Date.prototype.strftime = function(str) { - var skope; - skope = App.I18n[App.Env.loco.getLocale()]; - str = str.replace('%Y', (function(_this) { - return function(x) { - return _this.date.getFullYear(); - }; - })(this)); - str = str.replace('%y', (function(_this) { - return function(x) { - return _this.date.getFullYear().toString().slice(-2); - }; - })(this)); - str = str.replace('%m', (function(_this) { - return function(x) { - var month; - month = _this.date.getMonth() + 1; - if (month >= 10) { - return month; - } else { - return "0" + month; - } - }; - })(this)); - str = str.replace('%b', (function(_this) { - return function(x) { - return skope.date.abbr_month_names[_this.date.getMonth()]; - }; - })(this)); - str = str.replace('%B', (function(_this) { - return function(x) { - return skope.date.month_names[_this.date.getMonth()]; - }; - })(this)); - str = str.replace('%d', (function(_this) { - return function(x) { - if (_this.date.getDate() >= 10) { - return _this.date.getDate(); - } else { - return "0" + (_this.date.getDate()); - } - }; - })(this)); - str = str.replace('%H', (function(_this) { - return function(x) { - if (_this.date.getHours() >= 10) { - return _this.date.getHours(); - } else { - return "0" + (_this.date.getHours()); - } - }; - })(this)); - str = str.replace('%M', (function(_this) { - return function(x) { - if (_this.date.getMinutes() >= 10) { - return _this.date.getMinutes(); - } else { - return "0" + (_this.date.getMinutes()); - } - }; - })(this)); - return str = str.replace('%S', (function(_this) { - return function(x) { - if (_this.date.getSeconds() >= 10) { - return _this.date.getSeconds(); - } else { - return "0" + (_this.date.getSeconds()); - } - }; - })(this)); - }; - - return Date; - -})(); - -App.Helpers.Text = (function() { - function Text(opts) { - if (opts == null) { - opts = {}; - } - } - - Text.prototype.simpleFormat = function(str) { - str = str.replace(/\r\n?/, "\n"); - str = str.trim(); - if (str.length > 0) { - str = str.replace(/\n\n+/g, '</p><p>'); - str = str.replace(/\n/g, '<br>'); - str = '<p>' + str + '</p>'; - } - return str; - }; - - return Text; - -})(); - -App.I18n.en = { - variants: {}, - models: {}, - attributes: {}, - ui: { - form: { - sending: "Sending...", - success: "Success", - errors: { - connection: "Connection Error", - invalid_data: "Invalid data" - } - } - }, - date: { - formats: { - "default": "%Y-%m-%d", - short: "%b %d", - long: "%B %d, %Y" - }, - day_names: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], - abbr_day_names: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], - month_names: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], - abbr_month_names: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] - }, - errors: { - messages: { - accepted: "must be accepted", - blank: "can't be blank", - confirmation: "doesn't match %{attribute}", - empty: "can't be empty", - equal_to: "must be equal to %{count}", - even: "must be even", - exclusion: "is reserved", - greater_than: "must be greater than %{count}", - greater_than_or_equal_to: "must be greater than or equal to %{count}", - inclusion: "is not included in the list", - invalid: "is invalid", - less_than: "must be less than %{count}", - less_than_or_equal_to: "must be less than or equal to %{count}", - not_a_number: "is not a number", - not_an_integer: "must be an integer", - odd: "must be odd", - present: "must be blank", - too_long: { - one: "is too long (maximum is 1 character)", - other: "is too long (maximum is %{count} characters)" - }, - too_short: { - one: "is too short (minimum is 1 character)", - other: "is too short (minimum is %{count} characters)" - }, - wrong_length: { - one: "is the wrong length (should be 1 character)", - other: "is the wrong length (should be %{count} characters)" - }, - other_than: "must be other than %{count}" - } - } -}; +//= require loco-model +//= require loco \ No newline at end of file