active_frontend 13.3.0 → 14.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.DS_Store +0 -0
- data/.fasterer.yml +19 -0
- data/.reek +27 -0
- data/.rubocop.yml +38 -0
- data/.scss-lint.yml +27 -0
- data/Rakefile +1 -1
- data/active_frontend.gemspec +21 -18
- data/app/.DS_Store +0 -0
- data/app/assets/.DS_Store +0 -0
- data/app/assets/fonts/.DS_Store +0 -0
- data/app/assets/fonts/dripicons/.DS_Store +0 -0
- data/app/assets/fonts/dripicons/dripicons.woff +0 -0
- data/app/assets/fonts/fakt-pro/.DS_Store +0 -0
- data/app/assets/fonts/fakt-pro/fakt-pro-bold.woff +0 -0
- data/app/assets/fonts/fakt-pro/fakt-pro-normal.woff +0 -0
- data/app/assets/fonts/fakt-pro/fakt-pro-semibold.woff +0 -0
- data/app/assets/fonts/fakt-pro/fakt-pro-semilight.woff +0 -0
- data/app/assets/fonts/fakt-soft-pro/.DS_Store +0 -0
- data/app/assets/fonts/fakt-soft-pro/fakt-soft-pro-bold.woff +0 -0
- data/app/assets/fonts/fakt-soft-pro/fakt-soft-pro-normal.woff +0 -0
- data/app/assets/fonts/fakt-soft-pro/fakt-soft-pro-semibold.woff +0 -0
- data/app/assets/fonts/fakt-soft-pro/fakt-soft-pro-semilight.woff +0 -0
- data/app/assets/images/.DS_Store +0 -0
- data/app/assets/images/.keep +0 -0
- data/app/assets/images/placeholders/.DS_Store +0 -0
- data/app/assets/images/placeholders/camera-large.png +0 -0
- data/app/assets/images/placeholders/camera-small.png +0 -0
- data/app/assets/images/placeholders/camera.png +0 -0
- data/app/assets/images/placeholders/document-large.png +0 -0
- data/app/assets/images/placeholders/document-small.png +0 -0
- data/app/assets/images/placeholders/document.png +0 -0
- data/app/assets/images/placeholders/photo-large.png +0 -0
- data/app/assets/images/placeholders/{picture-small.png → photo-small.png} +0 -0
- data/app/assets/images/placeholders/photo.png +0 -0
- data/app/assets/images/placeholders/store-large.png +0 -0
- data/app/assets/images/placeholders/store-small.png +0 -0
- data/app/assets/images/placeholders/store.png +0 -0
- data/app/assets/images/placeholders/user-large.png +0 -0
- data/app/assets/images/placeholders/user-small.png +0 -0
- data/app/assets/images/placeholders/user.png +0 -0
- data/app/helpers/active_frontend_helper.rb +22 -37
- data/lib/.DS_Store +0 -0
- data/lib/active_frontend.rb +3 -4
- data/lib/active_frontend/.DS_Store +0 -0
- data/lib/active_frontend/version.rb +1 -1
- data/lib/generators/active_frontend/install_generator.rb +3 -3
- data/lib/generators/active_frontend/templates/install.js +35 -30
- data/lib/generators/active_frontend/templates/install.scss +55 -58
- data/vendor/.DS_Store +0 -0
- data/vendor/assets/.DS_Store +0 -0
- data/vendor/assets/javascripts/.DS_Store +0 -0
- data/vendor/assets/javascripts/active_frontend.js +35 -30
- data/vendor/assets/javascripts/base/_affix.js +170 -0
- data/vendor/assets/javascripts/base/_alert.js +80 -0
- data/vendor/assets/javascripts/base/_animation.js +106 -0
- data/vendor/assets/javascripts/base/_button.js +123 -0
- data/vendor/assets/javascripts/base/_carousel.js +237 -0
- data/vendor/assets/javascripts/base/_collapse.js +200 -0
- data/vendor/assets/javascripts/base/_colorpicker.js +147 -0
- data/vendor/assets/javascripts/base/_datepicker.js +1411 -0
- data/vendor/assets/javascripts/base/_dropdown.js +154 -0
- data/vendor/assets/javascripts/base/_filepicker.js +235 -0
- data/vendor/assets/javascripts/base/_hoverdown.js +116 -0
- data/vendor/assets/javascripts/base/_layout.js +126 -0
- data/vendor/assets/javascripts/base/_list.js +103 -0
- data/vendor/assets/javascripts/{_modal.js → base/_modal.js} +170 -167
- data/vendor/assets/javascripts/base/_popover.js +101 -0
- data/vendor/assets/javascripts/base/_scrollspy.js +161 -0
- data/vendor/assets/javascripts/base/_switch.js +160 -0
- data/vendor/assets/javascripts/base/_tab.js +139 -0
- data/vendor/assets/javascripts/base/_table.js +224 -0
- data/vendor/assets/javascripts/base/_timeago.js +270 -0
- data/vendor/assets/javascripts/base/_timepicker.js +541 -0
- data/vendor/assets/javascripts/base/_tooltip.js +525 -0
- data/vendor/assets/javascripts/base/_tour.js +268 -0
- data/vendor/assets/javascripts/base/_transition.js +52 -0
- data/vendor/assets/javascripts/base/_typeahead.js +362 -0
- data/vendor/assets/javascripts/extensions/_calendar.js +4709 -0
- data/vendor/assets/javascripts/extensions/_chart.js +9371 -0
- data/vendor/assets/javascripts/extensions/_map.js +2153 -0
- data/vendor/assets/stylesheets/.DS_Store +0 -0
- data/vendor/assets/stylesheets/{_mixin.scss → _utility.scss} +96 -10
- data/vendor/assets/stylesheets/_variable.scss +201 -19
- data/vendor/assets/stylesheets/active_frontend.scss +55 -58
- data/vendor/assets/stylesheets/blocks/_anchor.scss +15 -0
- data/vendor/assets/stylesheets/blocks/_button.scss +278 -0
- data/vendor/assets/stylesheets/blocks/_code.scss +144 -0
- data/vendor/assets/stylesheets/blocks/_common.scss +127 -0
- data/vendor/assets/stylesheets/blocks/_form.scss +508 -0
- data/vendor/assets/stylesheets/blocks/_icon.scss +359 -0
- data/vendor/assets/stylesheets/blocks/_list.scss +76 -0
- data/vendor/assets/stylesheets/blocks/_multimedia.scss +62 -0
- data/vendor/assets/stylesheets/blocks/_reset.scss +179 -0
- data/vendor/assets/stylesheets/blocks/_table.scss +211 -0
- data/vendor/assets/stylesheets/blocks/_typography.scss +204 -0
- data/vendor/assets/stylesheets/components/_ad.scss +78 -0
- data/vendor/assets/stylesheets/components/_affix.scss +14 -0
- data/vendor/assets/stylesheets/components/_alert.scss +50 -0
- data/vendor/assets/stylesheets/components/_animation.scss +1670 -0
- data/vendor/assets/stylesheets/components/_breadcrumb.scss +17 -0
- data/vendor/assets/stylesheets/components/_calendar.scss +213 -0
- data/vendor/assets/stylesheets/components/_card.scss +30 -0
- data/vendor/assets/stylesheets/components/_carousel.scss +135 -0
- data/vendor/assets/stylesheets/components/_chart.scss +10 -0
- data/vendor/assets/stylesheets/components/_collapse.scss +17 -0
- data/vendor/assets/stylesheets/components/_colorpicker.scss +38 -0
- data/vendor/assets/stylesheets/components/_datepicker.scss +80 -0
- data/vendor/assets/stylesheets/components/_dropmenu.scss +151 -0
- data/vendor/assets/stylesheets/components/_footer.scss +11 -0
- data/vendor/assets/stylesheets/components/_grid.scss +144 -0
- data/vendor/assets/stylesheets/components/_header.scss +99 -0
- data/vendor/assets/stylesheets/components/_label_and_badge.scss +57 -0
- data/vendor/assets/stylesheets/components/_layout.scss +63 -0
- data/vendor/assets/stylesheets/components/_map.scss +14 -0
- data/vendor/assets/stylesheets/components/_milestone.scss +49 -0
- data/vendor/assets/stylesheets/components/_missive.scss +40 -0
- data/vendor/assets/stylesheets/components/_modal.scss +126 -0
- data/vendor/assets/stylesheets/components/_nav_and_tab.scss +202 -0
- data/vendor/assets/stylesheets/components/_navbar.scss +66 -0
- data/vendor/assets/stylesheets/components/_pagination.scss +79 -0
- data/vendor/assets/stylesheets/components/_placeholder.scss +23 -0
- data/vendor/assets/stylesheets/components/_popover.scss +167 -0
- data/vendor/assets/stylesheets/components/_progress.scss +62 -0
- data/vendor/assets/stylesheets/components/_sidebar.scss +74 -0
- data/vendor/assets/stylesheets/components/_spinner.scss +83 -0
- data/vendor/assets/stylesheets/components/_switch.scss +150 -0
- data/vendor/assets/stylesheets/components/_timepicker.scss +30 -0
- data/vendor/assets/stylesheets/components/_tooltip.scss +93 -0
- data/vendor/assets/stylesheets/components/_transition.scss +12 -0
- data/vendor/assets/stylesheets/components/_typeahead.scss +18 -0
- metadata +150 -94
- data/app/assets/fonts/gotham/gotham-bold.woff +0 -0
- data/app/assets/fonts/gotham/gotham-book.woff +0 -0
- data/app/assets/fonts/gotham/gotham-light.woff +0 -0
- data/app/assets/fonts/gotham/gotham-medium.woff +0 -0
- data/app/assets/fonts/gotham/gotham-rounded-bold.woff +0 -0
- data/app/assets/fonts/gotham/gotham-rounded-book.woff +0 -0
- data/app/assets/fonts/gotham/gotham-rounded-light.woff +0 -0
- data/app/assets/fonts/gotham/gotham-rounded-medium.woff +0 -0
- data/app/assets/images/placeholders/archive-large.png +0 -0
- data/app/assets/images/placeholders/archive-small.png +0 -0
- data/app/assets/images/placeholders/archive.png +0 -0
- data/app/assets/images/placeholders/picture-large.png +0 -0
- data/app/assets/images/placeholders/picture.png +0 -0
- data/vendor/assets/javascripts/_affix.js +0 -153
- data/vendor/assets/javascripts/_alert.js +0 -85
- data/vendor/assets/javascripts/_animation.js +0 -103
- data/vendor/assets/javascripts/_button.js +0 -107
- data/vendor/assets/javascripts/_carousel.js +0 -228
- data/vendor/assets/javascripts/_chart.js +0 -3742
- data/vendor/assets/javascripts/_collapse.js +0 -202
- data/vendor/assets/javascripts/_color_picker.js +0 -108
- data/vendor/assets/javascripts/_date_picker.js +0 -1650
- data/vendor/assets/javascripts/_dropdown.js +0 -156
- data/vendor/assets/javascripts/_file_input.js +0 -71
- data/vendor/assets/javascripts/_hoverdown.js +0 -109
- data/vendor/assets/javascripts/_inputmask.js +0 -341
- data/vendor/assets/javascripts/_loader.js +0 -361
- data/vendor/assets/javascripts/_map.js +0 -2401
- data/vendor/assets/javascripts/_popover.js +0 -99
- data/vendor/assets/javascripts/_scrollspy.js +0 -163
- data/vendor/assets/javascripts/_slider.js +0 -1572
- data/vendor/assets/javascripts/_sort.js +0 -1432
- data/vendor/assets/javascripts/_swoggle.js +0 -415
- data/vendor/assets/javascripts/_tab.js +0 -146
- data/vendor/assets/javascripts/_tablespy.js +0 -1883
- data/vendor/assets/javascripts/_time_ago.js +0 -206
- data/vendor/assets/javascripts/_time_picker.js +0 -1088
- data/vendor/assets/javascripts/_tooltip.js +0 -504
- data/vendor/assets/javascripts/_transition.js +0 -50
- data/vendor/assets/javascripts/_typeahead.js +0 -366
- data/vendor/assets/stylesheets/_ad.scss +0 -63
- data/vendor/assets/stylesheets/_affix.scss +0 -14
- data/vendor/assets/stylesheets/_alert.scss +0 -114
- data/vendor/assets/stylesheets/_animation.scss +0 -1370
- data/vendor/assets/stylesheets/_breadcrumb.scss +0 -100
- data/vendor/assets/stylesheets/_button.scss +0 -386
- data/vendor/assets/stylesheets/_canvas.scss +0 -182
- data/vendor/assets/stylesheets/_carousel.scss +0 -158
- data/vendor/assets/stylesheets/_chart.scss +0 -15
- data/vendor/assets/stylesheets/_code.scss +0 -150
- data/vendor/assets/stylesheets/_collapse.scss +0 -14
- data/vendor/assets/stylesheets/_color.scss +0 -55
- data/vendor/assets/stylesheets/_colorpicker.scss +0 -63
- data/vendor/assets/stylesheets/_datepicker.scss +0 -122
- data/vendor/assets/stylesheets/_dropdown.scss +0 -248
- data/vendor/assets/stylesheets/_footer.scss +0 -71
- data/vendor/assets/stylesheets/_form.scss +0 -661
- data/vendor/assets/stylesheets/_grid.scss +0 -184
- data/vendor/assets/stylesheets/_header.scss +0 -156
- data/vendor/assets/stylesheets/_icon.scss +0 -362
- data/vendor/assets/stylesheets/_image.scss +0 -33
- data/vendor/assets/stylesheets/_label_and_badge.scss +0 -104
- data/vendor/assets/stylesheets/_link.scss +0 -55
- data/vendor/assets/stylesheets/_list.scss +0 -122
- data/vendor/assets/stylesheets/_loader.scss +0 -71
- data/vendor/assets/stylesheets/_map.scss +0 -44
- data/vendor/assets/stylesheets/_missive.scss +0 -74
- data/vendor/assets/stylesheets/_modal.scss +0 -204
- data/vendor/assets/stylesheets/_nav_and_tab.scss +0 -230
- data/vendor/assets/stylesheets/_navbar.scss +0 -73
- data/vendor/assets/stylesheets/_pagination.scss +0 -79
- data/vendor/assets/stylesheets/_panel.scss +0 -80
- data/vendor/assets/stylesheets/_placeholder.scss +0 -63
- data/vendor/assets/stylesheets/_popover.scss +0 -128
- data/vendor/assets/stylesheets/_progress.scss +0 -86
- data/vendor/assets/stylesheets/_reset.scss +0 -140
- data/vendor/assets/stylesheets/_sidebar.scss +0 -148
- data/vendor/assets/stylesheets/_slider.scss +0 -151
- data/vendor/assets/stylesheets/_spinner.scss +0 -572
- data/vendor/assets/stylesheets/_subheader.scss +0 -112
- data/vendor/assets/stylesheets/_swoggle.scss +0 -120
- data/vendor/assets/stylesheets/_table.scss +0 -210
- data/vendor/assets/stylesheets/_timepicker.scss +0 -77
- data/vendor/assets/stylesheets/_toolbar.scss +0 -130
- data/vendor/assets/stylesheets/_tooltip.scss +0 -105
- data/vendor/assets/stylesheets/_transition.scss +0 -11
- data/vendor/assets/stylesheets/_trunk.scss +0 -147
- data/vendor/assets/stylesheets/_typeahead.scss +0 -18
- data/vendor/assets/stylesheets/_typography.scss +0 -233
@@ -0,0 +1,126 @@
|
|
1
|
+
+function ($) {
|
2
|
+
'use strict';
|
3
|
+
|
4
|
+
// LAYOUT CLASS DEFINITION
|
5
|
+
// =======================
|
6
|
+
|
7
|
+
var Layout = function (element, options) {
|
8
|
+
this.$element = $(element);
|
9
|
+
this.$window = $(window);
|
10
|
+
this.settings = {
|
11
|
+
direction: this.$element.data('direction'),
|
12
|
+
effect: this.$element.data('effect'),
|
13
|
+
target: this.$element.data('target')
|
14
|
+
};
|
15
|
+
this.options = $.extend({}, Layout.DEFAULTS, this.settings, options);
|
16
|
+
|
17
|
+
this.init();
|
18
|
+
this.toggleViewport();
|
19
|
+
};
|
20
|
+
|
21
|
+
if (!$.fn.animation) throw new Error('Layout requires animation.js');
|
22
|
+
|
23
|
+
Layout.VERSION = '1.0.0';
|
24
|
+
Layout.DEFAULTS = {
|
25
|
+
direction: 'left',
|
26
|
+
effect: 'slide',
|
27
|
+
target: '#layout-target'
|
28
|
+
};
|
29
|
+
|
30
|
+
Layout.prototype.constructor = Layout;
|
31
|
+
|
32
|
+
Layout.prototype.init = function () {
|
33
|
+
var _self = this;
|
34
|
+
var options = this.options;
|
35
|
+
|
36
|
+
this.$element.click(function () {
|
37
|
+
var target = $(_self.options.target);
|
38
|
+
var next = _self.getNext();
|
39
|
+
var toggle = 'out';
|
40
|
+
|
41
|
+
if (target.hasClass('hidden') || target.is(':hidden') || target.css('visibility') === 'hidden') {
|
42
|
+
toggle = 'in';
|
43
|
+
}
|
44
|
+
|
45
|
+
var effect = options.effect + '-' + toggle + '-' + options.direction;
|
46
|
+
|
47
|
+
_self.togglePosition('fixed');
|
48
|
+
target.animation({
|
49
|
+
duration: 'xxs',
|
50
|
+
effect: effect,
|
51
|
+
hide: toggle === 'out'
|
52
|
+
});
|
53
|
+
});
|
54
|
+
};
|
55
|
+
|
56
|
+
Layout.prototype.getNext = function () {
|
57
|
+
var next = $(this.options.target).next();
|
58
|
+
var id = next.attr('id');
|
59
|
+
|
60
|
+
if (id === undefined || id === '') {
|
61
|
+
id = 'show-bs-layout';
|
62
|
+
next.attr('id', id);
|
63
|
+
}
|
64
|
+
|
65
|
+
return $('#' + id);
|
66
|
+
};
|
67
|
+
|
68
|
+
Layout.prototype.togglePosition = function (klass) {
|
69
|
+
var target = $(this.options.target);
|
70
|
+
|
71
|
+
if (this.$window.width() < 767) {
|
72
|
+
target.addClass(klass);
|
73
|
+
} else {
|
74
|
+
target.removeClass(klass);
|
75
|
+
}
|
76
|
+
};
|
77
|
+
|
78
|
+
Layout.prototype.toggleViewport = function () {
|
79
|
+
var _self = this;
|
80
|
+
|
81
|
+
this.togglePosition('hidden fixed');
|
82
|
+
|
83
|
+
this.$window.on('resize.bs.layout orientationChange.bs.layout', function () {
|
84
|
+
_self.togglePosition('hidden fixed');
|
85
|
+
});
|
86
|
+
};
|
87
|
+
|
88
|
+
// LAYOUT PLUGIN DEFINITION
|
89
|
+
// ========================
|
90
|
+
|
91
|
+
function Plugin(option) {
|
92
|
+
return this.each(function () {
|
93
|
+
var $this = $(this);
|
94
|
+
var data = $this.data('bs.layout');
|
95
|
+
var options = typeof option === 'object' && option;
|
96
|
+
|
97
|
+
if (!data) $this.data('bs.layout', (data = new Layout(this, options)));
|
98
|
+
if (typeof option === 'string') data[option]();
|
99
|
+
});
|
100
|
+
}
|
101
|
+
|
102
|
+
var old = $.fn.layout;
|
103
|
+
|
104
|
+
$.fn.layout = Plugin;
|
105
|
+
$.fn.layout.Constructor = Layout;
|
106
|
+
|
107
|
+
// LAYOUT NO CONFLICT
|
108
|
+
// ==================
|
109
|
+
|
110
|
+
$.fn.layout.noConflict = function () {
|
111
|
+
$.fn.layout = old;
|
112
|
+
return this;
|
113
|
+
};
|
114
|
+
|
115
|
+
// LAYOUT DATA-API
|
116
|
+
// ==================
|
117
|
+
|
118
|
+
$(document).on('ready.bs.layout.data-api', function () {
|
119
|
+
$('[data-toggle="layout"]').each(function () {
|
120
|
+
var $this = $(this);
|
121
|
+
if ($this.data('layout')) return;
|
122
|
+
Plugin.call($this, $this.data());
|
123
|
+
});
|
124
|
+
});
|
125
|
+
|
126
|
+
}(jQuery);
|
@@ -0,0 +1,103 @@
|
|
1
|
+
+function ($) {
|
2
|
+
'use strict';
|
3
|
+
|
4
|
+
// LIST CLASS DEFINITION
|
5
|
+
// =====================
|
6
|
+
|
7
|
+
var List = function (element, options) {
|
8
|
+
this.$element = $(element);
|
9
|
+
this.settings = {
|
10
|
+
input: this.$element.data('input'),
|
11
|
+
emptyText: this.$element.data('empty-text')
|
12
|
+
};
|
13
|
+
this.options = $.extend({}, List.DEFAULTS, this.settings, options);
|
14
|
+
|
15
|
+
this.$input = $(this.options.input);
|
16
|
+
this.$lis = this.$element.children();
|
17
|
+
this.$len = this.$lis.length;
|
18
|
+
|
19
|
+
this.init();
|
20
|
+
};
|
21
|
+
|
22
|
+
List.VERSION = '1.0.0';
|
23
|
+
List.DEFAULTS = {
|
24
|
+
callback: function (visible) {},
|
25
|
+
emptyText: 'No matches found',
|
26
|
+
input: null
|
27
|
+
};
|
28
|
+
|
29
|
+
List.prototype.constructor = List;
|
30
|
+
|
31
|
+
List.prototype.init = function () {
|
32
|
+
if (this.options.input === null) return this;
|
33
|
+
|
34
|
+
var _self = this;
|
35
|
+
var list = this.$element;
|
36
|
+
var element = this.$input;
|
37
|
+
|
38
|
+
element.keyup(function () {
|
39
|
+
var filter = element.val().toLowerCase();
|
40
|
+
var visible = 0;
|
41
|
+
|
42
|
+
for (var i = 0; i < _self.$len; i++) {
|
43
|
+
var li = $(_self.$lis[i]);
|
44
|
+
|
45
|
+
if (li.text().toLowerCase().indexOf(filter) >= 0) {
|
46
|
+
li.removeClass('hidden');
|
47
|
+
visible++;
|
48
|
+
} else {
|
49
|
+
li.addClass('hidden');
|
50
|
+
}
|
51
|
+
}
|
52
|
+
|
53
|
+
if (_self.options.placeholder !== null) {
|
54
|
+
list.find('.bsListEmpty').remove();
|
55
|
+
|
56
|
+
if (visible === 0) list.append('<li class="bsListEmpty">' + _self.options.emptyText + '</li>');
|
57
|
+
}
|
58
|
+
|
59
|
+
_self.options.callback(visible);
|
60
|
+
|
61
|
+
return false;
|
62
|
+
});
|
63
|
+
};
|
64
|
+
|
65
|
+
// LIST PLUGIN DEFINITION
|
66
|
+
// ======================
|
67
|
+
|
68
|
+
function Plugin(option) {
|
69
|
+
return this.each(function () {
|
70
|
+
var $this = $(this);
|
71
|
+
var data = $this.data('bs.list');
|
72
|
+
var options = typeof option === 'object' && option;
|
73
|
+
|
74
|
+
if (!data) $this.data('bs.list', (data = new List(this, options)));
|
75
|
+
if (typeof option === 'string') data[option]();
|
76
|
+
});
|
77
|
+
}
|
78
|
+
|
79
|
+
var old = $.fn.list;
|
80
|
+
|
81
|
+
$.fn.list = Plugin;
|
82
|
+
$.fn.list.Constructor = List;
|
83
|
+
|
84
|
+
// LIST NO CONFLICT
|
85
|
+
// ================
|
86
|
+
|
87
|
+
$.fn.list.noConflict = function () {
|
88
|
+
$.fn.list = old;
|
89
|
+
return this;
|
90
|
+
};
|
91
|
+
|
92
|
+
// LIST DATA-API
|
93
|
+
// =============
|
94
|
+
|
95
|
+
$(document).on('ready.bs.list.data-api', function () {
|
96
|
+
$('[data-toggle="list"]').each(function () {
|
97
|
+
var $this = $(this);
|
98
|
+
if ($this.data('list')) return;
|
99
|
+
Plugin.call($this, $this.data());
|
100
|
+
});
|
101
|
+
});
|
102
|
+
|
103
|
+
}(jQuery);
|
@@ -5,324 +5,327 @@
|
|
5
5
|
// ======================
|
6
6
|
|
7
7
|
var Modal = function (element, options) {
|
8
|
-
this
|
9
|
-
this.$
|
10
|
-
this
|
11
|
-
|
12
|
-
this.$
|
13
|
-
this
|
14
|
-
this.
|
15
|
-
this.
|
16
|
-
this.
|
8
|
+
this.$body = $(document.body);
|
9
|
+
this.$element = $(element);
|
10
|
+
this.options = options;
|
11
|
+
|
12
|
+
this.$dialog = this.$element.find('.modal-dialog');
|
13
|
+
this.$backdrop = null;
|
14
|
+
this.isShown = null;
|
15
|
+
this.originalBodyPad = null;
|
16
|
+
this.scrollbarWidth = 0;
|
17
|
+
this.ignoreBackdropClick = false;
|
17
18
|
|
18
19
|
if (this.options.remote) {
|
19
20
|
this.$element
|
20
|
-
.find('.modal-
|
21
|
+
.find('.modal-body')
|
21
22
|
.load(this.options.remote, $.proxy(function () {
|
22
|
-
this.$element.trigger('loaded.bs.modal')
|
23
|
-
}, this))
|
23
|
+
this.$element.trigger('loaded.bs.modal');
|
24
|
+
}, this));
|
24
25
|
}
|
25
|
-
}
|
26
|
-
|
27
|
-
Modal.VERSION = '3.3.6'
|
28
|
-
|
29
|
-
Modal.TRANSITION_DURATION = 300
|
30
|
-
Modal.BACKDROP_TRANSITION_DURATION = 150
|
26
|
+
};
|
31
27
|
|
28
|
+
Modal.VERSION = '1.0.0';
|
29
|
+
Modal.TRANSITION_DURATION = 300;
|
30
|
+
Modal.BACKDROP_TRANSITION_DURATION = 150;
|
32
31
|
Modal.DEFAULTS = {
|
33
32
|
backdrop: true,
|
34
33
|
keyboard: true,
|
35
34
|
show: true
|
36
|
-
}
|
35
|
+
};
|
36
|
+
|
37
|
+
Modal.prototype.constructor = Modal;
|
37
38
|
|
38
39
|
Modal.prototype.toggle = function (_relatedTarget) {
|
39
|
-
return this.isShown ? this.hide() : this.show(_relatedTarget)
|
40
|
-
}
|
40
|
+
return this.isShown ? this.hide() : this.show(_relatedTarget);
|
41
|
+
};
|
41
42
|
|
42
43
|
Modal.prototype.show = function (_relatedTarget) {
|
43
|
-
var that = this
|
44
|
-
var e
|
45
|
-
|
46
|
-
this.$element.trigger(e)
|
47
|
-
|
48
|
-
if (this.isShown || e.isDefaultPrevented()) return
|
44
|
+
var that = this;
|
45
|
+
var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget });
|
49
46
|
|
50
|
-
this.
|
47
|
+
this.$element.trigger(e);
|
51
48
|
|
52
|
-
this.
|
53
|
-
this.setScrollbar()
|
54
|
-
this.$body.addClass('modal-open')
|
49
|
+
if (this.isShown || e.isDefaultPrevented()) return;
|
55
50
|
|
56
|
-
this.
|
57
|
-
this.resize()
|
51
|
+
this.isShown = true;
|
58
52
|
|
59
|
-
this
|
53
|
+
this.checkScrollbar();
|
54
|
+
this.setScrollbar();
|
55
|
+
this.$body.addClass('modal-open');
|
56
|
+
this.escape();
|
57
|
+
this.resize();
|
58
|
+
this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this));
|
60
59
|
|
61
60
|
this.$dialog.on('mousedown.dismiss.bs.modal', function () {
|
62
61
|
that.$element.one('mouseup.dismiss.bs.modal', function (e) {
|
63
|
-
if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true
|
64
|
-
})
|
65
|
-
})
|
62
|
+
if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true;
|
63
|
+
});
|
64
|
+
});
|
66
65
|
|
67
66
|
this.backdrop(function () {
|
68
|
-
var transition = $.support.transition && that.$element.hasClass('fade')
|
67
|
+
var transition = $.support.transition && that.$element.hasClass('fade');
|
69
68
|
|
70
|
-
if (!that.$element.parent().length)
|
71
|
-
that.$element.appendTo(that.$body) // don't move modals dom position
|
72
|
-
}
|
69
|
+
if (!that.$element.parent().length) that.$element.appendTo(that.$body);
|
73
70
|
|
74
71
|
that.$element
|
75
72
|
.show()
|
76
|
-
.scrollTop(0)
|
73
|
+
.scrollTop(0);
|
77
74
|
|
78
|
-
that.adjustDialog()
|
75
|
+
that.adjustDialog();
|
79
76
|
|
80
|
-
if (transition)
|
81
|
-
that.$element[0].offsetWidth // force reflow
|
82
|
-
}
|
77
|
+
if (transition) that.$element[0].offsetWidth;
|
83
78
|
|
84
|
-
that.$element.addClass('in')
|
79
|
+
that.$element.addClass('in');
|
80
|
+
that.enforceFocus();
|
85
81
|
|
86
|
-
|
87
|
-
|
88
|
-
var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })
|
82
|
+
var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget });
|
89
83
|
|
90
84
|
transition ?
|
91
|
-
that.$dialog
|
85
|
+
that.$dialog
|
92
86
|
.one('bsTransitionEnd', function () {
|
93
|
-
that.$element.trigger('focus').trigger(e)
|
94
|
-
})
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
87
|
+
that.$element.trigger('focus').trigger(e);
|
88
|
+
}).emulateTransitionEnd(Modal.TRANSITION_DURATION) :
|
89
|
+
that.$element
|
90
|
+
.trigger('focus')
|
91
|
+
.trigger(e);
|
92
|
+
});
|
93
|
+
};
|
99
94
|
|
100
95
|
Modal.prototype.hide = function (e) {
|
101
|
-
if (e) e.preventDefault()
|
96
|
+
if (e) e.preventDefault();
|
102
97
|
|
103
|
-
e = $.Event('hide.bs.modal')
|
98
|
+
e = $.Event('hide.bs.modal');
|
104
99
|
|
105
|
-
this.$element.trigger(e)
|
100
|
+
this.$element.trigger(e);
|
106
101
|
|
107
|
-
if (!this.isShown || e.isDefaultPrevented()) return
|
102
|
+
if (!this.isShown || e.isDefaultPrevented()) return;
|
108
103
|
|
109
|
-
this.isShown = false
|
104
|
+
this.isShown = false;
|
110
105
|
|
111
|
-
this.escape()
|
112
|
-
this.resize()
|
106
|
+
this.escape();
|
107
|
+
this.resize();
|
113
108
|
|
114
|
-
$(document).off('focusin.bs.modal')
|
109
|
+
$(document).off('focusin.bs.modal');
|
115
110
|
|
116
111
|
this.$element
|
117
112
|
.removeClass('in')
|
118
113
|
.off('click.dismiss.bs.modal')
|
119
|
-
.off('mouseup.dismiss.bs.modal')
|
114
|
+
.off('mouseup.dismiss.bs.modal');
|
120
115
|
|
121
|
-
this.$dialog.off('mousedown.dismiss.bs.modal')
|
116
|
+
this.$dialog.off('mousedown.dismiss.bs.modal');
|
122
117
|
|
123
118
|
$.support.transition && this.$element.hasClass('fade') ?
|
124
119
|
this.$element
|
125
120
|
.one('bsTransitionEnd', $.proxy(this.hideModal, this))
|
126
121
|
.emulateTransitionEnd(Modal.TRANSITION_DURATION) :
|
127
|
-
this.hideModal()
|
128
|
-
}
|
122
|
+
this.hideModal();
|
123
|
+
};
|
129
124
|
|
130
125
|
Modal.prototype.enforceFocus = function () {
|
131
126
|
$(document)
|
132
127
|
.off('focusin.bs.modal') // guard against infinite focus loop
|
133
128
|
.on('focusin.bs.modal', $.proxy(function (e) {
|
134
129
|
if (this.$element[0] !== e.target && !this.$element.has(e.target).length) {
|
135
|
-
this.$element.trigger('focus')
|
130
|
+
this.$element.trigger('focus');
|
136
131
|
}
|
137
|
-
}, this))
|
138
|
-
}
|
132
|
+
}, this));
|
133
|
+
};
|
139
134
|
|
140
135
|
Modal.prototype.escape = function () {
|
141
136
|
if (this.isShown && this.options.keyboard) {
|
142
137
|
this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {
|
143
|
-
e.which
|
144
|
-
}, this))
|
138
|
+
e.which === 27 && this.hide();
|
139
|
+
}, this));
|
145
140
|
} else if (!this.isShown) {
|
146
|
-
this.$element.off('keydown.dismiss.bs.modal')
|
141
|
+
this.$element.off('keydown.dismiss.bs.modal');
|
147
142
|
}
|
148
|
-
}
|
143
|
+
};
|
149
144
|
|
150
145
|
Modal.prototype.resize = function () {
|
151
146
|
if (this.isShown) {
|
152
|
-
$(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this))
|
147
|
+
$(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this));
|
153
148
|
} else {
|
154
|
-
$(window).off('resize.bs.modal')
|
149
|
+
$(window).off('resize.bs.modal');
|
155
150
|
}
|
156
|
-
}
|
151
|
+
};
|
157
152
|
|
158
153
|
Modal.prototype.hideModal = function () {
|
159
|
-
var that = this
|
160
|
-
this.$element.hide()
|
154
|
+
var that = this;
|
155
|
+
this.$element.hide();
|
161
156
|
this.backdrop(function () {
|
162
|
-
that.$body.removeClass('modal-open')
|
163
|
-
that.resetAdjustments()
|
164
|
-
that.resetScrollbar()
|
165
|
-
that.$element.trigger('hidden.bs.modal')
|
166
|
-
})
|
167
|
-
}
|
157
|
+
that.$body.removeClass('modal-open');
|
158
|
+
that.resetAdjustments();
|
159
|
+
that.resetScrollbar();
|
160
|
+
that.$element.trigger('hidden.bs.modal');
|
161
|
+
});
|
162
|
+
};
|
168
163
|
|
169
164
|
Modal.prototype.removeBackdrop = function () {
|
170
|
-
this.$backdrop && this.$backdrop.remove()
|
171
|
-
this.$backdrop = null
|
172
|
-
}
|
165
|
+
this.$backdrop && this.$backdrop.remove();
|
166
|
+
this.$backdrop = null;
|
167
|
+
};
|
173
168
|
|
174
169
|
Modal.prototype.backdrop = function (callback) {
|
175
|
-
var that = this
|
176
|
-
var animate = this.$element.hasClass('fade') ? 'fade' : ''
|
170
|
+
var that = this;
|
171
|
+
var animate = this.$element.hasClass('fade') ? 'fade' : '';
|
177
172
|
|
178
173
|
if (this.isShown && this.options.backdrop) {
|
179
|
-
var doAnimate = $.support.transition && animate
|
174
|
+
var doAnimate = $.support.transition && animate;
|
180
175
|
|
181
176
|
this.$backdrop = $(document.createElement('div'))
|
182
177
|
.addClass('modal-backdrop ' + animate)
|
183
|
-
.appendTo(this.$body)
|
178
|
+
.appendTo(this.$body);
|
184
179
|
|
185
180
|
this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {
|
186
181
|
if (this.ignoreBackdropClick) {
|
187
|
-
this.ignoreBackdropClick = false
|
188
|
-
return
|
182
|
+
this.ignoreBackdropClick = false;
|
183
|
+
return;
|
189
184
|
}
|
190
|
-
if (e.target !== e.currentTarget) return
|
191
|
-
this.options.backdrop == 'static'
|
192
|
-
? this.$element[0].focus()
|
193
|
-
: this.hide()
|
194
|
-
}, this))
|
185
|
+
if (e.target !== e.currentTarget) return;
|
195
186
|
|
196
|
-
|
187
|
+
this.options.backdrop === 'static' ?
|
188
|
+
this.$element[0].focus() :
|
189
|
+
this.hide();
|
190
|
+
}, this));
|
197
191
|
|
198
|
-
this.$backdrop.
|
192
|
+
if (doAnimate) this.$backdrop[0].offsetWidth;
|
199
193
|
|
200
|
-
|
194
|
+
this.$backdrop.addClass('in');
|
195
|
+
|
196
|
+
if (!callback) return;
|
201
197
|
|
202
198
|
doAnimate ?
|
203
199
|
this.$backdrop
|
204
200
|
.one('bsTransitionEnd', callback)
|
205
201
|
.emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
|
206
|
-
callback()
|
202
|
+
callback();
|
207
203
|
|
208
204
|
} else if (!this.isShown && this.$backdrop) {
|
209
|
-
this.$backdrop.removeClass('in')
|
205
|
+
this.$backdrop.removeClass('in');
|
210
206
|
|
211
207
|
var callbackRemove = function () {
|
212
|
-
that.removeBackdrop()
|
213
|
-
callback && callback()
|
214
|
-
}
|
208
|
+
that.removeBackdrop();
|
209
|
+
callback && callback();
|
210
|
+
};
|
215
211
|
$.support.transition && this.$element.hasClass('fade') ?
|
216
212
|
this.$backdrop
|
217
213
|
.one('bsTransitionEnd', callbackRemove)
|
218
214
|
.emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
|
219
|
-
callbackRemove()
|
215
|
+
callbackRemove();
|
220
216
|
|
221
217
|
} else if (callback) {
|
222
|
-
callback()
|
218
|
+
callback();
|
223
219
|
}
|
224
|
-
}
|
225
|
-
|
226
|
-
// these following methods are used to handle overflowing modals
|
220
|
+
};
|
227
221
|
|
228
222
|
Modal.prototype.handleUpdate = function () {
|
229
|
-
this.adjustDialog()
|
230
|
-
}
|
223
|
+
this.adjustDialog();
|
224
|
+
};
|
231
225
|
|
232
226
|
Modal.prototype.adjustDialog = function () {
|
233
|
-
var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight
|
227
|
+
var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight;
|
234
228
|
|
235
229
|
this.$element.css({
|
236
230
|
paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',
|
237
231
|
paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''
|
238
|
-
})
|
239
|
-
}
|
232
|
+
});
|
233
|
+
};
|
240
234
|
|
241
235
|
Modal.prototype.resetAdjustments = function () {
|
242
236
|
this.$element.css({
|
243
237
|
paddingLeft: '',
|
244
238
|
paddingRight: ''
|
245
|
-
})
|
246
|
-
}
|
239
|
+
});
|
240
|
+
};
|
247
241
|
|
248
242
|
Modal.prototype.checkScrollbar = function () {
|
249
|
-
var fullWindowWidth = window.innerWidth
|
243
|
+
var fullWindowWidth = window.innerWidth;
|
244
|
+
|
250
245
|
if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8
|
251
|
-
var documentElementRect = document.documentElement.getBoundingClientRect()
|
252
|
-
|
246
|
+
var documentElementRect = document.documentElement.getBoundingClientRect();
|
247
|
+
|
248
|
+
fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left);
|
253
249
|
}
|
254
|
-
|
255
|
-
this.
|
256
|
-
|
250
|
+
|
251
|
+
this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth;
|
252
|
+
this.scrollbarWidth = this.measureScrollbar();
|
253
|
+
};
|
257
254
|
|
258
255
|
Modal.prototype.setScrollbar = function () {
|
259
|
-
var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)
|
260
|
-
|
261
|
-
|
262
|
-
|
256
|
+
var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10);
|
257
|
+
|
258
|
+
this.originalBodyPad = document.body.style.paddingRight || '';
|
259
|
+
|
260
|
+
if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth);
|
261
|
+
};
|
263
262
|
|
264
263
|
Modal.prototype.resetScrollbar = function () {
|
265
|
-
this.$body.css('padding-right', this.originalBodyPad)
|
266
|
-
}
|
264
|
+
this.$body.css('padding-right', this.originalBodyPad);
|
265
|
+
};
|
267
266
|
|
268
267
|
Modal.prototype.measureScrollbar = function () { // thx walsh
|
269
|
-
var scrollDiv = document.createElement('div')
|
270
|
-
scrollDiv.className = 'modal-scrollbar-measure'
|
271
|
-
this.$body.append(scrollDiv)
|
272
|
-
var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth
|
273
|
-
this.$body[0].removeChild(scrollDiv)
|
274
|
-
return scrollbarWidth
|
275
|
-
}
|
268
|
+
var scrollDiv = document.createElement('div');
|
269
|
+
scrollDiv.className = 'modal-scrollbar-measure';
|
270
|
+
this.$body.append(scrollDiv);
|
276
271
|
|
272
|
+
var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth;
|
273
|
+
this.$body[0].removeChild(scrollDiv);
|
274
|
+
|
275
|
+
return scrollbarWidth;
|
276
|
+
};
|
277
277
|
|
278
278
|
// MODAL PLUGIN DEFINITION
|
279
279
|
// =======================
|
280
280
|
|
281
281
|
function Plugin(option, _relatedTarget) {
|
282
282
|
return this.each(function () {
|
283
|
-
var $this
|
284
|
-
var data
|
285
|
-
var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option
|
286
|
-
|
287
|
-
if (!data) $this.data('bs.modal', (data = new Modal(this, options)))
|
288
|
-
if (typeof option
|
289
|
-
|
290
|
-
|
283
|
+
var $this = $(this);
|
284
|
+
var data = $this.data('bs.modal');
|
285
|
+
var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option === 'object' && option);
|
286
|
+
|
287
|
+
if (!data) $this.data('bs.modal', (data = new Modal(this, options)));
|
288
|
+
if (typeof option === 'string') {
|
289
|
+
data[option](_relatedTarget);
|
290
|
+
} else if (options.show) {
|
291
|
+
data.show(_relatedTarget);
|
292
|
+
}
|
293
|
+
});
|
291
294
|
}
|
292
295
|
|
293
|
-
var old = $.fn.modal
|
294
|
-
|
295
|
-
$.fn.modal = Plugin
|
296
|
-
$.fn.modal.Constructor = Modal
|
296
|
+
var old = $.fn.modal;
|
297
297
|
|
298
|
+
$.fn.modal = Plugin;
|
299
|
+
$.fn.modal.Constructor = Modal;
|
298
300
|
|
299
301
|
// MODAL NO CONFLICT
|
300
302
|
// =================
|
301
303
|
|
302
304
|
$.fn.modal.noConflict = function () {
|
303
|
-
$.fn.modal = old
|
304
|
-
return this
|
305
|
-
}
|
306
|
-
|
305
|
+
$.fn.modal = old;
|
306
|
+
return this;
|
307
|
+
};
|
307
308
|
|
308
309
|
// MODAL DATA-API
|
309
310
|
// ==============
|
310
311
|
|
311
312
|
$(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) {
|
312
|
-
var $this
|
313
|
-
var href
|
314
|
-
var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, '')))
|
315
|
-
var option
|
313
|
+
var $this = $(this);
|
314
|
+
var href = $this.attr('href');
|
315
|
+
var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, '')));
|
316
|
+
var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data());
|
316
317
|
|
317
|
-
if ($this.is('a')) e.preventDefault()
|
318
|
+
if ($this.is('a')) e.preventDefault();
|
318
319
|
|
319
320
|
$target.one('show.bs.modal', function (showEvent) {
|
320
|
-
if (showEvent.isDefaultPrevented()) return
|
321
|
+
if (showEvent.isDefaultPrevented()) return;
|
322
|
+
|
321
323
|
$target.one('hidden.bs.modal', function () {
|
322
|
-
$this.is(':visible') && $this.trigger('focus')
|
323
|
-
})
|
324
|
-
})
|
325
|
-
|
326
|
-
|
324
|
+
$this.is(':visible') && $this.trigger('focus');
|
325
|
+
});
|
326
|
+
});
|
327
|
+
|
328
|
+
Plugin.call($target, option, this);
|
329
|
+
});
|
327
330
|
|
328
331
|
}(jQuery);
|