Sha256: 29343c9699823e0929802928bd65ec62439223fe40b3f61fa8f7e433aea8ad6f

Contents?: true

Size: 1.9 KB

Versions: 3

Compression:

Stored size: 1.9 KB

Contents

//     Emerson Sink
//
//     Adds...

(function(ns) {

  // Emerson Extension
  // --------------------------------------------------------------------------

  // ### Emerson.sink module
  var define = ns.sink = function(view) {};

  // ### Module API
  //   * `ns` is a reference to the namespace.
  //   * `init` is a hook for initializing the module.
  _.extend(define, {
    ns     : ns,
    init   : function init() {
      _before.list = [];
      _after.list  = [];
    },
    before : function before(callback) {
      if(callback) {
        _before(callback);
      }
    },
    after  : function after(callback) {
      if(callback) {
        _after(callback);
      }
    }
  });


  // "Base" Libary Extension
  // --------------------------------------------------------------------------

  // Make a local copy of Emerson.base. e.g., one of jQuery, Zepto or Ender.
  var $ = ns.base;

  // ### $.fn.sink
  //
  //     $(target).sink()
  //
  $.fn.sink = function() {
    _.each(this, function(e) {
      var elem = $(e);
      var key  = elem.data('sink');

      if(key) {
        _before.apply(elem);
        elem.replaceAll('[data-sink="' + key + '"]', 'body');
        _after.apply(elem);
      }
    });

    return this;
  };


  // Internal Implementation
  // --------------------------------------------------------------------------

  // ### 'before' callbacks
  var _before = function(callback) {
    var view;
    if(callback) {
      _before.list.push(callback);
    }
    else {
      view = this;
      _.each(_before.list, function(fn) {
        fn(view);
      });
    }
  };
  _.extend(_before,  { list : [] });

  // ### 'after' callbacks
  var _after = function(callback) {
    var view;
    if(callback) {
      _after.list.push(callback);
    }
    else {
      view = this;
      _.each(_after.list, function(fn) {
        fn(view);
      });
    }
  };
  _.extend(_after,  { list : [] });
})(Emerson);

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
emerson-0.0.3 vendor/assets/javascripts/emerson/sink.js
emerson-0.0.2 vendor/assets/javascripts/emerson/sink.js
emerson-0.0.1 vendor/assets/javascripts/emerson/sink.js