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);
|