Demo-Component/media/uikit/js/core/button.js

158 lines
4.2 KiB
JavaScript
Raw Normal View History

2017-04-08 18:35:55 +00:00
/*! UIkit 2.25.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */
(function(UI) {
"use strict";
UI.component('buttonRadio', {
defaults: {
"activeClass": 'uk-active',
"target": ".uk-button"
},
boot: function() {
// init code
UI.$html.on("click.buttonradio.uikit", "[data-uk-button-radio]", function(e) {
var ele = UI.$(this);
if (!ele.data("buttonRadio")) {
var obj = UI.buttonRadio(ele, UI.Utils.options(ele.attr("data-uk-button-radio"))),
target = UI.$(e.target);
if (target.is(obj.options.target)) {
target.trigger("click");
}
}
});
},
init: function() {
var $this = this;
// Init ARIA
this.find($this.options.target).attr('aria-checked', 'false').filter('.' + $this.options.activeClass).attr('aria-checked', 'true');
this.on("click", this.options.target, function(e) {
var ele = UI.$(this);
if (ele.is('a[href="#"]')) e.preventDefault();
$this.find($this.options.target).not(ele).removeClass($this.options.activeClass).blur();
ele.addClass($this.options.activeClass);
// Update ARIA
$this.find($this.options.target).not(ele).attr('aria-checked', 'false');
ele.attr('aria-checked', 'true');
$this.trigger("change.uk.button", [ele]);
});
},
getSelected: function() {
return this.find('.' + this.options.activeClass);
}
});
UI.component('buttonCheckbox', {
defaults: {
"activeClass": 'uk-active',
"target": ".uk-button"
},
boot: function() {
UI.$html.on("click.buttoncheckbox.uikit", "[data-uk-button-checkbox]", function(e) {
var ele = UI.$(this);
if (!ele.data("buttonCheckbox")) {
var obj = UI.buttonCheckbox(ele, UI.Utils.options(ele.attr("data-uk-button-checkbox"))),
target = UI.$(e.target);
if (target.is(obj.options.target)) {
target.trigger("click");
}
}
});
},
init: function() {
var $this = this;
// Init ARIA
this.find($this.options.target).attr('aria-checked', 'false').filter('.' + $this.options.activeClass).attr('aria-checked', 'true');
this.on("click", this.options.target, function(e) {
var ele = UI.$(this);
if (ele.is('a[href="#"]')) e.preventDefault();
ele.toggleClass($this.options.activeClass).blur();
// Update ARIA
ele.attr('aria-checked', ele.hasClass($this.options.activeClass));
$this.trigger("change.uk.button", [ele]);
});
},
getSelected: function() {
return this.find('.' + this.options.activeClass);
}
});
UI.component('button', {
defaults: {},
boot: function() {
UI.$html.on("click.button.uikit", "[data-uk-button]", function(e) {
var ele = UI.$(this);
if (!ele.data("button")) {
var obj = UI.button(ele, UI.Utils.options(ele.attr("data-uk-button")));
ele.trigger("click");
}
});
},
init: function() {
var $this = this;
// Init ARIA
this.element.attr('aria-pressed', this.element.hasClass("uk-active"));
this.on("click", function(e) {
if ($this.element.is('a[href="#"]')) e.preventDefault();
$this.toggle();
$this.trigger("change.uk.button", [$this.element.blur().hasClass("uk-active")]);
});
},
toggle: function() {
this.element.toggleClass("uk-active");
// Update ARIA
this.element.attr('aria-pressed', this.element.hasClass("uk-active"));
}
});
})(UIkit);