UNPKG

metro4

Version:

The front-end framework for Build responsive, mobile-first projects on the web with the first front-end component library in Metro Style

149 lines (119 loc) 3.49 kB
var BottomSheet = { init: function( options, elem ) { this.options = $.extend( {}, this.options, options ); this.elem = elem; this.element = $(elem); this.toggle = null; this._setOptionsFromDOM(); this._create(); return this; }, options: { mode: "list", toggle: null, onOpen: Metro.noop, onClose: Metro.noop, onBottomSheetCreate: Metro.noop }, _setOptionsFromDOM: function(){ var that = this, element = this.element, o = this.options; $.each(element.data(), function(key, value){ if (key in o) { try { o[key] = JSON.parse(value); } catch (e) { o[key] = value; } } }); }, _create: function(){ var that = this, element = this.element, o = this.options; this._createStructure(); this._createEvents(); Utils.exec(o.onBottomSheetCreate, [element], element[0]); }, _createStructure: function(){ var that = this, element = this.element, o = this.options; element .addClass("bottom-sheet") .addClass(o.mode+"-list"); if (Utils.isValue(o.toggle) && $(o.toggle).length > 0) { this.toggle = $(o.toggle); } }, _createEvents: function(){ var that = this, element = this.element, o = this.options; if (Utils.isValue(this.toggle)) { this.toggle.on(Metro.events.click, function(){ that.toggleView(); }); } element.on(Metro.events.click, "li", function(){ that.close(); }); }, isOpen: function(){ return this.element.hasClass("opened"); }, open: function(mode){ var element = this.element, o = this.options; if (Utils.isValue(mode)) { element.removeClass("list-style grid-style").addClass(mode+"-style"); } this.element.addClass("opened"); Utils.exec(o.onOpen, [element], element[0]); }, close: function(){ var element = this.element, o = this.options; element.removeClass("opened"); Utils.exec(o.onClose, [element], element[0]); }, toggle: function(mode){ if (this.isOpen()) { this.close(); } else { this.open(mode); } }, changeAttribute: function(attributeName){ }, destroy: function(){} }; Metro.plugin('bottomsheet', BottomSheet); Metro['bottomsheet'] = { isBottomSheet: function(el){ return Utils.isMetroObject(el, "bottomsheet"); }, open: function(el, as){ if (!this.isBottomSheet(el)) { return false; } var sheet = $(el).data("bottomsheet"); sheet.open(as); }, close: function(el){ if (!this.isBottomSheet(el)) { return false; } var sheet = $(el).data("bottomsheet"); sheet.close(); }, toggle: function(el, as){ if (!this.isBottomSheet(el)) { return false; } if (this.isOpen(el)) { this.close(el); } else { this.open(el, as); } }, isOpen: function(el){ if (!this.isBottomSheet(el)) { return false; } var sheet = $(el).data("bottomsheet"); return sheet.isOpen(); } };