UNPKG

3m5-coco

Version:

a simple MVC Framework

445 lines (286 loc) 12.2 kB
"use strict"; require("core-js/modules/es6.array.copy-within"); require("core-js/modules/es6.array.fill"); require("core-js/modules/es6.array.find"); require("core-js/modules/es6.array.find-index"); require("core-js/modules/es7.array.flat-map"); require("core-js/modules/es6.array.from"); require("core-js/modules/es7.array.includes"); require("core-js/modules/es6.array.iterator"); require("core-js/modules/es6.array.of"); require("core-js/modules/es6.array.sort"); require("core-js/modules/es6.array.species"); require("core-js/modules/es6.date.to-primitive"); require("core-js/modules/es6.function.has-instance"); require("core-js/modules/es6.function.name"); require("core-js/modules/es6.map"); require("core-js/modules/es6.math.acosh"); require("core-js/modules/es6.math.asinh"); require("core-js/modules/es6.math.atanh"); require("core-js/modules/es6.math.cbrt"); require("core-js/modules/es6.math.clz32"); require("core-js/modules/es6.math.cosh"); require("core-js/modules/es6.math.expm1"); require("core-js/modules/es6.math.fround"); require("core-js/modules/es6.math.hypot"); require("core-js/modules/es6.math.imul"); require("core-js/modules/es6.math.log1p"); require("core-js/modules/es6.math.log10"); require("core-js/modules/es6.math.log2"); require("core-js/modules/es6.math.sign"); require("core-js/modules/es6.math.sinh"); require("core-js/modules/es6.math.tanh"); require("core-js/modules/es6.math.trunc"); require("core-js/modules/es6.number.constructor"); require("core-js/modules/es6.number.epsilon"); require("core-js/modules/es6.number.is-finite"); require("core-js/modules/es6.number.is-integer"); require("core-js/modules/es6.number.is-nan"); require("core-js/modules/es6.number.is-safe-integer"); require("core-js/modules/es6.number.max-safe-integer"); require("core-js/modules/es6.number.min-safe-integer"); require("core-js/modules/es6.number.parse-float"); require("core-js/modules/es6.number.parse-int"); require("core-js/modules/es6.object.assign"); require("core-js/modules/es7.object.define-getter"); require("core-js/modules/es7.object.define-setter"); require("core-js/modules/es7.object.entries"); require("core-js/modules/es6.object.freeze"); require("core-js/modules/es6.object.get-own-property-descriptor"); require("core-js/modules/es7.object.get-own-property-descriptors"); require("core-js/modules/es6.object.get-own-property-names"); require("core-js/modules/es6.object.get-prototype-of"); require("core-js/modules/es7.object.lookup-getter"); require("core-js/modules/es7.object.lookup-setter"); require("core-js/modules/es6.object.prevent-extensions"); require("core-js/modules/es6.object.to-string"); require("core-js/modules/es6.object.is"); require("core-js/modules/es6.object.is-frozen"); require("core-js/modules/es6.object.is-sealed"); require("core-js/modules/es6.object.is-extensible"); require("core-js/modules/es6.object.keys"); require("core-js/modules/es6.object.seal"); require("core-js/modules/es6.object.set-prototype-of"); require("core-js/modules/es7.object.values"); require("core-js/modules/es6.promise"); require("core-js/modules/es7.promise.finally"); require("core-js/modules/es6.reflect.apply"); require("core-js/modules/es6.reflect.construct"); require("core-js/modules/es6.reflect.define-property"); require("core-js/modules/es6.reflect.delete-property"); require("core-js/modules/es6.reflect.get"); require("core-js/modules/es6.reflect.get-own-property-descriptor"); require("core-js/modules/es6.reflect.get-prototype-of"); require("core-js/modules/es6.reflect.has"); require("core-js/modules/es6.reflect.is-extensible"); require("core-js/modules/es6.reflect.own-keys"); require("core-js/modules/es6.reflect.prevent-extensions"); require("core-js/modules/es6.reflect.set"); require("core-js/modules/es6.reflect.set-prototype-of"); require("core-js/modules/es6.regexp.constructor"); require("core-js/modules/es6.regexp.flags"); require("core-js/modules/es6.regexp.match"); require("core-js/modules/es6.regexp.replace"); require("core-js/modules/es6.regexp.split"); require("core-js/modules/es6.regexp.search"); require("core-js/modules/es6.regexp.to-string"); require("core-js/modules/es6.set"); require("core-js/modules/es6.symbol"); require("core-js/modules/es7.symbol.async-iterator"); require("core-js/modules/es6.string.anchor"); require("core-js/modules/es6.string.big"); require("core-js/modules/es6.string.blink"); require("core-js/modules/es6.string.bold"); require("core-js/modules/es6.string.code-point-at"); require("core-js/modules/es6.string.ends-with"); require("core-js/modules/es6.string.fixed"); require("core-js/modules/es6.string.fontcolor"); require("core-js/modules/es6.string.fontsize"); require("core-js/modules/es6.string.from-code-point"); require("core-js/modules/es6.string.includes"); require("core-js/modules/es6.string.italics"); require("core-js/modules/es6.string.iterator"); require("core-js/modules/es6.string.link"); require("core-js/modules/es7.string.pad-start"); require("core-js/modules/es7.string.pad-end"); require("core-js/modules/es6.string.raw"); require("core-js/modules/es6.string.repeat"); require("core-js/modules/es6.string.small"); require("core-js/modules/es6.string.starts-with"); require("core-js/modules/es6.string.strike"); require("core-js/modules/es6.string.sub"); require("core-js/modules/es6.string.sup"); require("core-js/modules/es7.string.trim-left"); require("core-js/modules/es7.string.trim-right"); require("core-js/modules/es6.typed.array-buffer"); require("core-js/modules/es6.typed.int8-array"); require("core-js/modules/es6.typed.uint8-array"); require("core-js/modules/es6.typed.uint8-clamped-array"); require("core-js/modules/es6.typed.int16-array"); require("core-js/modules/es6.typed.uint16-array"); require("core-js/modules/es6.typed.int32-array"); require("core-js/modules/es6.typed.uint32-array"); require("core-js/modules/es6.typed.float32-array"); require("core-js/modules/es6.typed.float64-array"); require("core-js/modules/es6.weak-map"); require("core-js/modules/es6.weak-set"); require("core-js/modules/web.timers"); require("core-js/modules/web.immediate"); require("core-js/modules/web.dom.iterable"); require("regenerator-runtime/runtime"); // Rewrite modern console methods for olders browsers (like IE 9/10) if (!window.console) { window.console = {}; } if (!window.console.debug) { window.console.debug = window.console.log || function () {}; } if (!window.console.error) { window.console.error = window.console.log || function () {}; } if (!window.console.warn) { window.console.warn = window.console.log || function () {}; } //IE support var Event = Event || window.Event; Event.prototype.stopPropagation = Event.prototype.stopPropagation || function () { this.cancelBubble = true; }; Event.prototype.preventDefault = Event.prototype.preventDefault || function () { this.returnValue = false; }; //add $compute function to all functions /** $compute function to register change listeners to properties in Coco.Model */ if (!Function.prototype.$compute) { Function.prototype.$compute = function () { var fn = this; var args = Array.prototype.slice.call(arguments); /** * We capsule the function and the $compute properties, because our this context is the function and not the * model. When the model gets instantiated we call this returned function with the model context, set the observers * and return the original function (with assigned model context) back to the initial model property. */ var retFn = function retFn(targetAttribute, observers) { for (var i = 0; i < args.length; i++) { observers.push({ attribute: args[i], target: targetAttribute, old: fn.call(this) }); } return fn.$bind(this); }; // Assign a flag to the function, that we can distinct between normal functions as attributes and computed properties. retFn.isComputed = true; return retFn; }; } // Dependencies var Coco = Coco || {}; var Handlebars = require('handlebars/runtime'), $ = require("jquery"); window.$ = $; window.jQuery = $; //require non public Coco classes require("./service/Coco.ServiceContainer.js"); require("./helpers/HandlebarsHelpers.js"); require("./router/Coco.RouterService.js"); var Translator = require("./lib/Coco.Translator.js"); /** * Class: .Coco * * 3m5. Javascript SDK main class (Coco.SDK) * * exports Coco as module, so just type "var Coco = require('3m5-coco')" to us it! * * triggers <Coco.Event.INITIALIZED> Event on body when Coco is ready * * CONFIGURATION: * * config: { baseUrl: "/", //server context path locale: "de", //the Coco default locale router: { loaderDelay: 300 // When views are swapped by Router, this time adjusts when the loading class }, restService: { //restService configuration path: "rest/", //restService path cacheGet: 0 //cache time in SECONDS for GET Requests of same url, value lower than 0 causes unlimited cache } } * * (c) 2016 3m5. Media GmbH */ Coco.SDK = dejavu.Class.declare({ $name: "Coco.Init", //////////////////////////////////////////////////////////// //////// CONFIGURATION config: { baseUrl: "/", //server context path router: { loaderDelay: 300 // When views are swapped by Router, this time adjusts when the loading class }, restService: { //restService configuration path: "rest/", //restService path cacheGet: 0 //cache time in SECONDS for GET Requests of same url, value lower than 0 causes unlimited cache } }, //////// CLASS DEFINITIONS Event: require("./event/Coco.Event.js"), ModelEvent: require("./event/Coco.ModelEvent.js"), RestServiceEvent: require("./event/Coco.RestServiceEvent.js"), RouterEvent: require("./event/Coco.RouterEvent.js"), TranslatorEvent: require("./event/Coco.TranslatorEvent.js"), ViewEvent: require("./event/Coco.ViewEvent.js"), EventDispatcher: require("./event/Coco.EventDispatcher.js"), //PACKAGE MODEL Model: require("./model/Coco.Model.js"), Collection: require("./model/Coco.Collection.js"), //PACKAGE SERVICE Service: require("./service/Coco.Service.js"), ServiceProvider: require("./service/Coco.ServiceProvider.js"), //PACKAGE ROUTER Router: require("./router/Coco.Router.js"), //REST BaseRestService: require("./service/Coco.BaseRestService.js"), //PACKAGE LIB Math: require("./lib/Coco.Math.js"), Utils: require("./lib/Coco.Utils.js"), Storage: require("./lib/Coco.Storage.js"), StringUtils: require("./lib/Coco.StringUtils.js"), URLHelper: require("./lib/Coco.URLHelper.js"), //PACKAGE VIEW View: require("./view/Coco.View.js"), ChildView: require("./view/Coco.ChildView.js"), //i18n Translator Translator: new Translator(), //////// CLASS DEFINITIONS END //////////////////////////////////////////////////////////// $statics: { version: "0.3.0", initialized: false }, initialize: function initialize() { console.logWithDate = true; try { Handlebars; } catch (error) { console.error(error); throw new Error("Missing Handlebars! include npm-module 'handlebars' into your project!"); } try { $; } catch (error) { console.error(error); throw new Error("Missing jQuery! Install jQuery to use Coco.SDK ", error); } console.debug("-------------------------------------------"); console.debug("Coco.js v" + this.$static.version + " initialized. Coco.config on startup: ", $.extend({}, this.config)); console.debug("Bugreport@ GitHub: https://github.com/3m5/coco/issues"); console.debug("Handlebars v" + Handlebars.VERSION); console.debug("registered Handlebars helpers: ", Handlebars.helpers); console.debug("jQuery v" + $().jquery); console.debug("-------------------------------------------"); $("body").trigger(this.Event.INITIALIZED); this.initialized = true; } }); module.exports = new Coco.SDK();