summaryrefslogtreecommitdiff
path: root/javascript/jquery/plugins/shiftcheckbox/jquery.shiftcheckbox.js
diff options
context:
space:
mode:
Diffstat (limited to 'javascript/jquery/plugins/shiftcheckbox/jquery.shiftcheckbox.js')
-rw-r--r--javascript/jquery/plugins/shiftcheckbox/jquery.shiftcheckbox.js196
1 files changed, 0 insertions, 196 deletions
diff --git a/javascript/jquery/plugins/shiftcheckbox/jquery.shiftcheckbox.js b/javascript/jquery/plugins/shiftcheckbox/jquery.shiftcheckbox.js
deleted file mode 100644
index f2d0121..0000000
--- a/javascript/jquery/plugins/shiftcheckbox/jquery.shiftcheckbox.js
+++ /dev/null
@@ -1,196 +0,0 @@
-/* ShiftCheckbox jQuery plugin
- *
- * Copyright (C) 2011-2012 James Nylen
- *
- * Released under MIT license
- * For details see:
- * https://github.com/nylen/shiftcheckbox
- *
- * Requires jQuery v1.7 or higher.
- */
-
-(function($) {
- var ns = '.shiftcheckbox';
-
- $.fn.shiftcheckbox = function(opts) {
- opts = $.extend({
- checkboxSelector : null,
- selectAll : null,
- onChange : null,
- ignoreClick : null
- }, opts);
-
- if (typeof opts.onChange != 'function') {
- opts.onChange = function(checked) { };
- }
-
- $.fn.scb_changeChecked = function(opts, checked) {
- this.prop('checked', checked);
- opts.onChange.call(this, checked);
- return this;
- }
-
- var $containers,
- $checkboxes,
- $containersSelectAll,
- $checkboxesSelectAll,
- $otherSelectAll,
- $containersAll,
- $checkboxesAll;
-
- if (opts.selectAll) {
- // We need to set up a "select all" control
- $containersSelectAll = $(opts.selectAll);
- if ($containersSelectAll && !$containersSelectAll.length) {
- $containersSelectAll = false;
- }
- }
-
- if ($containersSelectAll) {
- $checkboxesSelectAll = $containersSelectAll
- .filter(':checkbox')
- .add($containersSelectAll.find(':checkbox'));
-
- $containersSelectAll = $containersSelectAll.not(':checkbox');
- $otherSelectAll = $containersSelectAll.filter(function() {
- return !$(this).find($checkboxesSelectAll).length;
- });
- $containersSelectAll = $containersSelectAll.filter(function() {
- return !!$(this).find($checkboxesSelectAll).length;
- }).each(function() {
- $(this).data('childCheckbox', $(this).find($checkboxesSelectAll)[0]);
- });
- }
-
- if (opts.checkboxSelector) {
-
- // checkboxSelector means that the elements we need to attach handlers to
- // ($containers) are not actually checkboxes but contain them instead
-
- $containersAll = this.filter(function() {
- return !!$(this).find(opts.checkboxSelector).filter(':checkbox').length;
- }).each(function() {
- $(this).data('childCheckbox', $(this).find(opts.checkboxSelector).filter(':checkbox')[0]);
- }).add($containersSelectAll);
-
- $checkboxesAll = $containersAll.map(function() {
- return $(this).data('childCheckbox');
- });
-
- } else {
-
- $checkboxesAll = this.filter(':checkbox');
-
- }
-
- if ($checkboxesSelectAll && !$checkboxesSelectAll.length) {
- $checkboxesSelectAll = false;
- } else {
- $checkboxesAll = $checkboxesAll.add($checkboxesSelectAll);
- }
-
- if ($otherSelectAll && !$otherSelectAll.length) {
- $otherSelectAll = false;
- }
-
- if ($containersAll) {
- $containers = $containersAll.not($containersSelectAll);
- }
- $checkboxes = $checkboxesAll.not($checkboxesSelectAll);
-
- if (!$checkboxes.length) {
- return;
- }
-
- var lastIndex = -1;
-
- var checkboxClicked = function(e) {
- var checked = !!$(this).prop('checked');
-
- var curIndex = $checkboxes.index(this);
- if (curIndex < 0) {
- if ($checkboxesSelectAll.filter(this).length) {
- $checkboxesAll.scb_changeChecked(opts, checked);
- }
- return;
- }
-
- if (e.shiftKey && lastIndex != -1) {
- var di = (curIndex > lastIndex ? 1 : -1);
- for (var i = lastIndex; i != curIndex; i += di) {
- $checkboxes.eq(i).scb_changeChecked(opts, checked);
- }
- }
-
- if ($checkboxesSelectAll) {
- if (checked && !$checkboxes.not(':checked').length) {
- $checkboxesSelectAll.scb_changeChecked(opts, true);
- } else if (!checked) {
- $checkboxesSelectAll.scb_changeChecked(opts, false);
- }
- }
-
- lastIndex = curIndex;
- };
-
- if ($checkboxesSelectAll) {
- $checkboxesSelectAll
- .prop('checked', !$checkboxes.not(':checked').length)
- .filter(function() {
- return !$containersAll.find(this).length;
- }).on('click' + ns, checkboxClicked);
- }
-
- if ($otherSelectAll) {
- $otherSelectAll.on('click' + ns, function() {
- var checked;
- if ($checkboxesSelectAll) {
- checked = !!$checkboxesSelectAll.eq(0).prop('checked');
- } else {
- checked = !!$checkboxes.eq(0).prop('checked');
- }
- $checkboxesAll.scb_changeChecked(opts, !checked);
- });
- }
-
- if (opts.checkboxSelector) {
- $containersAll.on('click' + ns, function(e) {
- if ($(e.target).closest(opts.ignoreClick).length) {
- return;
- }
- var $checkbox = $($(this).data('childCheckbox'));
- $checkbox.not(e.target).each(function() {
- var checked = !$checkbox.prop('checked');
- $(this).scb_changeChecked(opts, checked);
- });
-
- $checkbox[0].focus();
- checkboxClicked.call($checkbox, e);
-
- // If the user clicked on a label inside the row that points to the
- // current row's checkbox, cancel the event.
- var $label = $(e.target).closest('label');
- var labelFor = $label.attr('for');
- if (labelFor && labelFor == $checkbox.attr('id')) {
- if ($label.find($checkbox).length) {
- // Special case: The label contains the checkbox.
- if ($checkbox[0] != e.target) {
- return false;
- }
- } else {
- return false;
- }
- }
- }).on('mousedown' + ns, function(e) {
- if (e.shiftKey) {
- // Prevent selecting text by Shift+click
- return false;
- }
- });
- } else {
- $checkboxes.on('click' + ns, checkboxClicked);
- }
-
- return this;
- };
-})(jQuery);