Skip to content

Instantly share code, notes, and snippets.

@designeng
designeng / mLoader.coffee
Last active December 21, 2015 21:29
Module loader
define [], () ->
class mLoader
modules: ["modules/footer", "modules/header"]
init: () ->
for m in @modules
moduleShortName = m.split("/")[1] + "Module"
modulePath = m + "/index"
define moduleShortName, [modulePath], (mod) ->
sync: ( method, collection, options ) ->
content = localStorage.getItem( @url() ) if localStorage
if content and not navigator.onLine
options.success JSON.parse content
else
return Backbone.sync( method, collection, options ).done ( response ) =>
localStorage.setItem( @url(), JSON.stringify( response ) ) if localStorage
@designeng
designeng / CompositeView.coffee
Last active December 22, 2015 17:49
Marionette.CompositeView as Layout for Controls rendering
define ["backbone", "marionette"], (Backbone, Marionette) ->
ControlItemView = Marionette.Layout.extend
template: '<div control="{{controlType}}" model="controlModel"/>'
initialize: (options) ->
onRender: ->
MyCompositeView = Marionette.CompositeView.extend
@designeng
designeng / BaseControlWrapper.coffee
Created September 12, 2013 18:59
Base class for control resolving task
define ["marionette"], (Marionette) ->
BaseControlWrapper = Marionette.Layout.extend
initialize: (options) ->
@controlClassResolve(@model.get "controlType")
self = @
@deferred.done( (controlTypeClass) ->
self.onDeferredDone(controlTypeClass)
@designeng
designeng / callbacks.coffee
Created October 10, 2013 13:56
cujo.js when, callbacks usage
sumInForeSeconds = (a, b, callback) ->
console.log "sumInFiveSeconds"
setTimeout(()=>
callback(a + b)
, 4000)
sumInFiveSeconds = (a, b, callback) ->
console.log "sumInFiveSeconds"
setTimeout(()=>
callback(a + b)
@designeng
designeng / Controller_and_declaration.coffee
Created November 6, 2013 14:28
Loading and resolving controller and component declaration with when.js "all" method
# blank method
callback = (resultClass) ->
# loading controllers directly instead of modules
require ["modules/" + name + "/" + name + "Controller", "modules/" + name + "/declaration"], (ControllerClass, declaration) =>
types = findNested(declaration.componentItems, "itemType")
console.log types
promises = []
processRouteMap = (routes) ->
requirejs.config
nodeRequire: require
paths:
"routeMap" : __dirname + "/../../../app/js/" + "routeMap"
"requireConfig" : __dirname + "/../../../app/js/" + "requireConfig.js"
"text" : __dirname + "/../../../app/js/vendors/requirejs-text/text"
requirejs ["routeMap", "text!requireConfig"], (routeMap, requireConfig) ->
console.log "requireConfig", requireConfig
define ->
findNested = (obj, key, memo) ->
i = undefined
memo = [] if Object::toString.call(memo) isnt "[object Array]"
for i of obj
if Object::hasOwnProperty.call(obj, i)
if i is key
memo.push obj[i]
else findNested obj[i], key, memo if Object::toString.call(obj[i]) is "[object Object]"
memo
define [
"underscore"
"when"
], (_, When) ->
return (options) ->
extend = (componentDefinition, wire) ->
When.promise (resolve) ->
define ->
class AutoCompleteController
# @injected
input: undefined
# @injected
listCollection: undefined
curId: 0