| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 | /* TodoList() * ========= * Converts a list into a todoList. * * @Usage: $('.my-list').todoList(options) *         or add [data-widget="todo-list"] to the ul element *         Pass any option as data-option="value" */+function ($) {  'use strict';  var DataKey = 'lte.todolist';  var Default = {    onCheck  : function (item) {      return item;    },    onUnCheck: function (item) {      return item;    }  };  var Selector = {    data: '[data-widget="todo-list"]'  };  var ClassName = {    done: 'done'  };  // TodoList Class Definition  // =========================  var TodoList = function (element, options) {    this.element = element;    this.options = options;    this._setUpListeners();  };  TodoList.prototype.toggle = function (item) {    item.parents(Selector.li).first().toggleClass(ClassName.done);    if (!item.prop('checked')) {      this.unCheck(item);      return;    }    this.check(item);  };  TodoList.prototype.check = function (item) {    this.options.onCheck.call(item);  };  TodoList.prototype.unCheck = function (item) {    this.options.onUnCheck.call(item);  };  // Private  TodoList.prototype._setUpListeners = function () {    var that = this;    $(this.element).on('change ifChanged', 'input:checkbox', function () {      that.toggle($(this));    });  };  // Plugin Definition  // =================  function Plugin(option) {    return this.each(function () {      var $this = $(this);      var data  = $this.data(DataKey);      if (!data) {        var options = $.extend({}, Default, $this.data(), typeof option == 'object' && option);        $this.data(DataKey, (data = new TodoList($this, options)));      }      if (typeof data == 'string') {        if (typeof data[option] == 'undefined') {          throw new Error('No method named ' + option);        }        data[option]();      }    });  }  var old = $.fn.todoList;  $.fn.todoList             = Plugin;  $.fn.todoList.Constructor = TodoList;  // No Conflict Mode  // ================  $.fn.todoList.noConflict = function () {    $.fn.todoList = old;    return this;  };  // TodoList Data API  // =================  $(window).on('load', function () {    $(Selector.data).each(function () {      Plugin.call($(this));    });  });}(jQuery);
 |