bootstrap 4.0.0.alpha1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of bootstrap might be problematic. Click here for more details.
- checksums.yaml +7 -0
- data/.gitattributes +14 -0
- data/.gitignore +19 -0
- data/.travis.yml +16 -0
- data/CHANGELOG.md +7 -0
- data/Gemfile +13 -0
- data/LICENSE +21 -0
- data/README.md +143 -0
- data/Rakefile +75 -0
- data/assets/javascripts/bootstrap-sprockets.js +11 -0
- data/assets/javascripts/bootstrap.js +3560 -0
- data/assets/javascripts/bootstrap.min.js +220 -0
- data/assets/javascripts/bootstrap/alert.js +192 -0
- data/assets/javascripts/bootstrap/button.js +172 -0
- data/assets/javascripts/bootstrap/carousel.js +478 -0
- data/assets/javascripts/bootstrap/collapse.js +364 -0
- data/assets/javascripts/bootstrap/dropdown.js +293 -0
- data/assets/javascripts/bootstrap/modal.js +536 -0
- data/assets/javascripts/bootstrap/popover.js +201 -0
- data/assets/javascripts/bootstrap/scrollspy.js +320 -0
- data/assets/javascripts/bootstrap/tab.js +263 -0
- data/assets/javascripts/bootstrap/tooltip.js +619 -0
- data/assets/javascripts/bootstrap/util.js +157 -0
- data/assets/stylesheets/_bootstrap-flex.scss +8 -0
- data/assets/stylesheets/_bootstrap-grid.scss +62 -0
- data/assets/stylesheets/_bootstrap-reboot.scss +10 -0
- data/assets/stylesheets/_bootstrap.scss +55 -0
- data/assets/stylesheets/bootstrap/_alert.scss +65 -0
- data/assets/stylesheets/bootstrap/_animation.scss +27 -0
- data/assets/stylesheets/bootstrap/_breadcrumb.scss +23 -0
- data/assets/stylesheets/bootstrap/_button-group.scss +224 -0
- data/assets/stylesheets/bootstrap/_buttons.scss +174 -0
- data/assets/stylesheets/bootstrap/_card.scss +293 -0
- data/assets/stylesheets/bootstrap/_carousel.scss +252 -0
- data/assets/stylesheets/bootstrap/_close.scss +28 -0
- data/assets/stylesheets/bootstrap/_code.scss +58 -0
- data/assets/stylesheets/bootstrap/_custom-forms.scss +225 -0
- data/assets/stylesheets/bootstrap/_dropdown.scss +191 -0
- data/assets/stylesheets/bootstrap/_forms.scss +454 -0
- data/assets/stylesheets/bootstrap/_grid.scss +76 -0
- data/assets/stylesheets/bootstrap/_images.scss +28 -0
- data/assets/stylesheets/bootstrap/_input-group.scss +181 -0
- data/assets/stylesheets/bootstrap/_jumbotron.scss +22 -0
- data/assets/stylesheets/bootstrap/_labels.scss +75 -0
- data/assets/stylesheets/bootstrap/_list-group.scss +128 -0
- data/assets/stylesheets/bootstrap/_media.scss +90 -0
- data/assets/stylesheets/bootstrap/_mixins.scss +54 -0
- data/assets/stylesheets/bootstrap/_modal.scss +146 -0
- data/assets/stylesheets/bootstrap/_nav.scss +155 -0
- data/assets/stylesheets/bootstrap/_navbar.scss +230 -0
- data/assets/stylesheets/bootstrap/_normalize.scss +428 -0
- data/assets/stylesheets/bootstrap/_pager.scss +57 -0
- data/assets/stylesheets/bootstrap/_pagination.scss +82 -0
- data/assets/stylesheets/bootstrap/_popover.scss +140 -0
- data/assets/stylesheets/bootstrap/_print.scss +88 -0
- data/assets/stylesheets/bootstrap/_progress.scss +156 -0
- data/assets/stylesheets/bootstrap/_reboot.scss +298 -0
- data/assets/stylesheets/bootstrap/_responsive-embed.scss +38 -0
- data/assets/stylesheets/bootstrap/_tables.scss +193 -0
- data/assets/stylesheets/bootstrap/_tooltip.scss +85 -0
- data/assets/stylesheets/bootstrap/_type.scss +192 -0
- data/assets/stylesheets/bootstrap/_utilities-responsive.scss +49 -0
- data/assets/stylesheets/bootstrap/_utilities-spacing.scss +78 -0
- data/assets/stylesheets/bootstrap/_utilities.scss +117 -0
- data/assets/stylesheets/bootstrap/_variables.scss +632 -0
- data/assets/stylesheets/bootstrap/mixins/_alert.scss +14 -0
- data/assets/stylesheets/bootstrap/mixins/_background-variant.scss +13 -0
- data/assets/stylesheets/bootstrap/mixins/_border-radius.scss +35 -0
- data/assets/stylesheets/bootstrap/mixins/_breakpoints.scss +76 -0
- data/assets/stylesheets/bootstrap/mixins/_buttons.scss +100 -0
- data/assets/stylesheets/bootstrap/mixins/_center-block.scss +7 -0
- data/assets/stylesheets/bootstrap/mixins/_clearfix.scss +7 -0
- data/assets/stylesheets/bootstrap/mixins/_forms.scss +89 -0
- data/assets/stylesheets/bootstrap/mixins/_gradients.scss +43 -0
- data/assets/stylesheets/bootstrap/mixins/_grid-framework.scss +44 -0
- data/assets/stylesheets/bootstrap/mixins/_grid.scss +75 -0
- data/assets/stylesheets/bootstrap/mixins/_hover.scss +59 -0
- data/assets/stylesheets/bootstrap/mixins/_image.scss +33 -0
- data/assets/stylesheets/bootstrap/mixins/_label.scss +11 -0
- data/assets/stylesheets/bootstrap/mixins/_list-group.scss +30 -0
- data/assets/stylesheets/bootstrap/mixins/_lists.scss +7 -0
- data/assets/stylesheets/bootstrap/mixins/_nav-divider.scss +10 -0
- data/assets/stylesheets/bootstrap/mixins/_navbar-align.scss +9 -0
- data/assets/stylesheets/bootstrap/mixins/_pagination.scss +24 -0
- data/assets/stylesheets/bootstrap/mixins/_progress.scss +18 -0
- data/assets/stylesheets/bootstrap/mixins/_pulls.scss +6 -0
- data/assets/stylesheets/bootstrap/mixins/_reset-filter.scss +8 -0
- data/assets/stylesheets/bootstrap/mixins/_reset-text.scss +18 -0
- data/assets/stylesheets/bootstrap/mixins/_resize.scss +6 -0
- data/assets/stylesheets/bootstrap/mixins/_screen-reader.scss +32 -0
- data/assets/stylesheets/bootstrap/mixins/_size.scss +6 -0
- data/assets/stylesheets/bootstrap/mixins/_tab-focus.scss +9 -0
- data/assets/stylesheets/bootstrap/mixins/_table-row.scss +30 -0
- data/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss +12 -0
- data/assets/stylesheets/bootstrap/mixins/_text-hide.scss +8 -0
- data/assets/stylesheets/bootstrap/mixins/_text-truncate.scss +8 -0
- data/bootstrap.gemspec +36 -0
- data/lib/bootstrap.rb +76 -0
- data/lib/bootstrap/engine.rb +11 -0
- data/lib/bootstrap/version.rb +4 -0
- data/tasks/updater.rb +67 -0
- data/tasks/updater/js.rb +37 -0
- data/tasks/updater/logger.rb +57 -0
- data/tasks/updater/network.rb +101 -0
- data/tasks/updater/scss.rb +34 -0
- data/templates/project/_bootstrap-variables.scss +633 -0
- data/templates/project/manifest.rb +18 -0
- data/templates/project/styles.scss +10 -0
- data/test/compass_test.rb +9 -0
- data/test/dummy_rails/README.rdoc +3 -0
- data/test/dummy_rails/Rakefile +6 -0
- data/test/dummy_rails/app/assets/images/.keep +0 -0
- data/test/dummy_rails/app/assets/javascripts/application.js +7 -0
- data/test/dummy_rails/app/assets/stylesheets/application.sass +1 -0
- data/test/dummy_rails/app/controllers/application_controller.rb +5 -0
- data/test/dummy_rails/app/controllers/pages_controller.rb +4 -0
- data/test/dummy_rails/app/helpers/application_helper.rb +2 -0
- data/test/dummy_rails/app/views/layouts/application.html.erb +14 -0
- data/test/dummy_rails/app/views/pages/root.html.slim +58 -0
- data/test/dummy_rails/config.ru +4 -0
- data/test/dummy_rails/config/application.rb +34 -0
- data/test/dummy_rails/config/boot.rb +5 -0
- data/test/dummy_rails/config/environment.rb +5 -0
- data/test/dummy_rails/config/environments/development.rb +23 -0
- data/test/dummy_rails/config/environments/production.rb +82 -0
- data/test/dummy_rails/config/environments/test.rb +38 -0
- data/test/dummy_rails/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy_rails/config/initializers/filter_parameter_logging.rb +4 -0
- data/test/dummy_rails/config/initializers/inflections.rb +16 -0
- data/test/dummy_rails/config/initializers/mime_types.rb +5 -0
- data/test/dummy_rails/config/initializers/secret_token.rb +18 -0
- data/test/dummy_rails/config/initializers/session_store.rb +3 -0
- data/test/dummy_rails/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy_rails/config/locales/en.yml +3 -0
- data/test/dummy_rails/config/locales/es.yml +3 -0
- data/test/dummy_rails/config/routes.rb +3 -0
- data/test/dummy_rails/log/.keep +0 -0
- data/test/gemfiles/rails_4_2.gemfile +11 -0
- data/test/gemfiles/rails_head.gemfile +19 -0
- data/test/rails_test.rb +19 -0
- data/test/support/dummy_rails_integration.rb +22 -0
- data/test/support/reporting.rb +27 -0
- data/test/test_helper.rb +35 -0
- data/test/test_helper_rails.rb +6 -0
- metadata +433 -0
@@ -0,0 +1,201 @@
|
|
1
|
+
'use strict';
|
2
|
+
|
3
|
+
var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
|
4
|
+
|
5
|
+
var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };
|
6
|
+
|
7
|
+
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
|
8
|
+
|
9
|
+
function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
|
10
|
+
|
11
|
+
/**
|
12
|
+
* --------------------------------------------------------------------------
|
13
|
+
* Bootstrap (v4.0.0): popover.js
|
14
|
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
15
|
+
* --------------------------------------------------------------------------
|
16
|
+
*/
|
17
|
+
|
18
|
+
var Popover = (function ($) {
|
19
|
+
|
20
|
+
/**
|
21
|
+
* ------------------------------------------------------------------------
|
22
|
+
* Constants
|
23
|
+
* ------------------------------------------------------------------------
|
24
|
+
*/
|
25
|
+
|
26
|
+
var NAME = 'popover';
|
27
|
+
var VERSION = '4.0.0';
|
28
|
+
var DATA_KEY = 'bs.popover';
|
29
|
+
var EVENT_KEY = '.' + DATA_KEY;
|
30
|
+
var JQUERY_NO_CONFLICT = $.fn[NAME];
|
31
|
+
|
32
|
+
var Default = $.extend({}, Tooltip.Default, {
|
33
|
+
placement: 'right',
|
34
|
+
trigger: 'click',
|
35
|
+
content: '',
|
36
|
+
template: '<div class="popover" role="tooltip">' + '<div class="popover-arrow"></div>' + '<h3 class="popover-title"></h3>' + '<div class="popover-content"></div></div>'
|
37
|
+
});
|
38
|
+
|
39
|
+
var DefaultType = $.extend({}, Tooltip.DefaultType, {
|
40
|
+
content: '(string|element|function)'
|
41
|
+
});
|
42
|
+
|
43
|
+
var ClassName = {
|
44
|
+
FADE: 'fade',
|
45
|
+
IN: 'in'
|
46
|
+
};
|
47
|
+
|
48
|
+
var Selector = {
|
49
|
+
TITLE: '.popover-title',
|
50
|
+
CONTENT: '.popover-content',
|
51
|
+
ARROW: '.popover-arrow'
|
52
|
+
};
|
53
|
+
|
54
|
+
var Event = {
|
55
|
+
HIDE: 'hide' + EVENT_KEY,
|
56
|
+
HIDDEN: 'hidden' + EVENT_KEY,
|
57
|
+
SHOW: 'show' + EVENT_KEY,
|
58
|
+
SHOWN: 'shown' + EVENT_KEY,
|
59
|
+
INSERTED: 'inserted' + EVENT_KEY,
|
60
|
+
CLICK: 'click' + EVENT_KEY,
|
61
|
+
FOCUSIN: 'focusin' + EVENT_KEY,
|
62
|
+
FOCUSOUT: 'focusout' + EVENT_KEY,
|
63
|
+
MOUSEENTER: 'mouseenter' + EVENT_KEY,
|
64
|
+
MOUSELEAVE: 'mouseleave' + EVENT_KEY
|
65
|
+
};
|
66
|
+
|
67
|
+
/**
|
68
|
+
* ------------------------------------------------------------------------
|
69
|
+
* Class Definition
|
70
|
+
* ------------------------------------------------------------------------
|
71
|
+
*/
|
72
|
+
|
73
|
+
var Popover = (function (_Tooltip) {
|
74
|
+
_inherits(Popover, _Tooltip);
|
75
|
+
|
76
|
+
function Popover() {
|
77
|
+
_classCallCheck(this, Popover);
|
78
|
+
|
79
|
+
_get(Object.getPrototypeOf(Popover.prototype), 'constructor', this).apply(this, arguments);
|
80
|
+
}
|
81
|
+
|
82
|
+
/**
|
83
|
+
* ------------------------------------------------------------------------
|
84
|
+
* jQuery
|
85
|
+
* ------------------------------------------------------------------------
|
86
|
+
*/
|
87
|
+
|
88
|
+
_createClass(Popover, [{
|
89
|
+
key: 'isWithContent',
|
90
|
+
|
91
|
+
// overrides
|
92
|
+
|
93
|
+
value: function isWithContent() {
|
94
|
+
return this.getTitle() || this._getContent();
|
95
|
+
}
|
96
|
+
}, {
|
97
|
+
key: 'getTipElement',
|
98
|
+
value: function getTipElement() {
|
99
|
+
return this.tip = this.tip || $(this.config.template)[0];
|
100
|
+
}
|
101
|
+
}, {
|
102
|
+
key: 'setContent',
|
103
|
+
value: function setContent() {
|
104
|
+
var $tip = $(this.getTipElement());
|
105
|
+
|
106
|
+
// we use append for html objects to maintain js events
|
107
|
+
this.setElementContent($tip.find(Selector.TITLE), this.getTitle());
|
108
|
+
this.setElementContent($tip.find(Selector.CONTENT), this._getContent());
|
109
|
+
|
110
|
+
$tip.removeClass(ClassName.FADE).removeClass(ClassName.IN);
|
111
|
+
|
112
|
+
this.cleanupTether();
|
113
|
+
}
|
114
|
+
|
115
|
+
// private
|
116
|
+
|
117
|
+
}, {
|
118
|
+
key: '_getContent',
|
119
|
+
value: function _getContent() {
|
120
|
+
return this.element.getAttribute('data-content') || (typeof this.config.content === 'function' ? this.config.content.call(this.element) : this.config.content);
|
121
|
+
}
|
122
|
+
|
123
|
+
// static
|
124
|
+
|
125
|
+
}], [{
|
126
|
+
key: '_jQueryInterface',
|
127
|
+
value: function _jQueryInterface(config) {
|
128
|
+
return this.each(function () {
|
129
|
+
var data = $(this).data(DATA_KEY);
|
130
|
+
var _config = typeof config === 'object' ? config : null;
|
131
|
+
|
132
|
+
if (!data && /destroy|hide/.test(config)) {
|
133
|
+
return;
|
134
|
+
}
|
135
|
+
|
136
|
+
if (!data) {
|
137
|
+
data = new Popover(this, _config);
|
138
|
+
$(this).data(DATA_KEY, data);
|
139
|
+
}
|
140
|
+
|
141
|
+
if (typeof config === 'string') {
|
142
|
+
if (data[config] === undefined) {
|
143
|
+
throw new Error('No method named "' + config + '"');
|
144
|
+
}
|
145
|
+
data[config]();
|
146
|
+
}
|
147
|
+
});
|
148
|
+
}
|
149
|
+
}, {
|
150
|
+
key: 'VERSION',
|
151
|
+
|
152
|
+
// getters
|
153
|
+
|
154
|
+
get: function get() {
|
155
|
+
return VERSION;
|
156
|
+
}
|
157
|
+
}, {
|
158
|
+
key: 'Default',
|
159
|
+
get: function get() {
|
160
|
+
return Default;
|
161
|
+
}
|
162
|
+
}, {
|
163
|
+
key: 'NAME',
|
164
|
+
get: function get() {
|
165
|
+
return NAME;
|
166
|
+
}
|
167
|
+
}, {
|
168
|
+
key: 'DATA_KEY',
|
169
|
+
get: function get() {
|
170
|
+
return DATA_KEY;
|
171
|
+
}
|
172
|
+
}, {
|
173
|
+
key: 'Event',
|
174
|
+
get: function get() {
|
175
|
+
return Event;
|
176
|
+
}
|
177
|
+
}, {
|
178
|
+
key: 'EVENT_KEY',
|
179
|
+
get: function get() {
|
180
|
+
return EVENT_KEY;
|
181
|
+
}
|
182
|
+
}, {
|
183
|
+
key: 'DefaultType',
|
184
|
+
get: function get() {
|
185
|
+
return DefaultType;
|
186
|
+
}
|
187
|
+
}]);
|
188
|
+
|
189
|
+
return Popover;
|
190
|
+
})(Tooltip);
|
191
|
+
|
192
|
+
$.fn[NAME] = Popover._jQueryInterface;
|
193
|
+
$.fn[NAME].Constructor = Popover;
|
194
|
+
$.fn[NAME].noConflict = function () {
|
195
|
+
$.fn[NAME] = JQUERY_NO_CONFLICT;
|
196
|
+
return Popover._jQueryInterface;
|
197
|
+
};
|
198
|
+
|
199
|
+
return Popover;
|
200
|
+
})(jQuery);
|
201
|
+
//# sourceMappingURL=popover.js.map
|
@@ -0,0 +1,320 @@
|
|
1
|
+
'use strict';
|
2
|
+
|
3
|
+
var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
|
4
|
+
|
5
|
+
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
|
6
|
+
|
7
|
+
/**
|
8
|
+
* --------------------------------------------------------------------------
|
9
|
+
* Bootstrap (v4.0.0): scrollspy.js
|
10
|
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
11
|
+
* --------------------------------------------------------------------------
|
12
|
+
*/
|
13
|
+
|
14
|
+
var ScrollSpy = (function ($) {
|
15
|
+
|
16
|
+
/**
|
17
|
+
* ------------------------------------------------------------------------
|
18
|
+
* Constants
|
19
|
+
* ------------------------------------------------------------------------
|
20
|
+
*/
|
21
|
+
|
22
|
+
var NAME = 'scrollspy';
|
23
|
+
var VERSION = '4.0.0';
|
24
|
+
var DATA_KEY = 'bs.scrollspy';
|
25
|
+
var EVENT_KEY = '.' + DATA_KEY;
|
26
|
+
var DATA_API_KEY = '.data-api';
|
27
|
+
var JQUERY_NO_CONFLICT = $.fn[NAME];
|
28
|
+
|
29
|
+
var Default = {
|
30
|
+
offset: 10,
|
31
|
+
method: 'auto',
|
32
|
+
target: ''
|
33
|
+
};
|
34
|
+
|
35
|
+
var DefaultType = {
|
36
|
+
offset: 'number',
|
37
|
+
method: 'string',
|
38
|
+
target: '(string|element)'
|
39
|
+
};
|
40
|
+
|
41
|
+
var Event = {
|
42
|
+
ACTIVATE: 'activate' + EVENT_KEY,
|
43
|
+
SCROLL: 'scroll' + EVENT_KEY,
|
44
|
+
LOAD_DATA_API: 'load' + EVENT_KEY + DATA_API_KEY
|
45
|
+
};
|
46
|
+
|
47
|
+
var ClassName = {
|
48
|
+
DROPDOWN_ITEM: 'dropdown-item',
|
49
|
+
DROPDOWN_MENU: 'dropdown-menu',
|
50
|
+
NAV_LINK: 'nav-link',
|
51
|
+
NAV: 'nav',
|
52
|
+
ACTIVE: 'active'
|
53
|
+
};
|
54
|
+
|
55
|
+
var Selector = {
|
56
|
+
DATA_SPY: '[data-spy="scroll"]',
|
57
|
+
ACTIVE: '.active',
|
58
|
+
LIST_ITEM: '.list-item',
|
59
|
+
LI: 'li',
|
60
|
+
LI_DROPDOWN: 'li.dropdown',
|
61
|
+
NAV_LINKS: '.nav-link',
|
62
|
+
DROPDOWN: '.dropdown',
|
63
|
+
DROPDOWN_ITEMS: '.dropdown-item',
|
64
|
+
DROPDOWN_TOGGLE: '.dropdown-toggle'
|
65
|
+
};
|
66
|
+
|
67
|
+
var OffsetMethod = {
|
68
|
+
OFFSET: 'offset',
|
69
|
+
POSITION: 'position'
|
70
|
+
};
|
71
|
+
|
72
|
+
/**
|
73
|
+
* ------------------------------------------------------------------------
|
74
|
+
* Class Definition
|
75
|
+
* ------------------------------------------------------------------------
|
76
|
+
*/
|
77
|
+
|
78
|
+
var ScrollSpy = (function () {
|
79
|
+
function ScrollSpy(element, config) {
|
80
|
+
_classCallCheck(this, ScrollSpy);
|
81
|
+
|
82
|
+
this._element = element;
|
83
|
+
this._scrollElement = element.tagName === 'BODY' ? window : element;
|
84
|
+
this._config = this._getConfig(config);
|
85
|
+
this._selector = this._config.target + ' ' + Selector.NAV_LINKS + ',' + (this._config.target + ' ' + Selector.DROPDOWN_ITEMS);
|
86
|
+
this._offsets = [];
|
87
|
+
this._targets = [];
|
88
|
+
this._activeTarget = null;
|
89
|
+
this._scrollHeight = 0;
|
90
|
+
|
91
|
+
$(this._scrollElement).on(Event.SCROLL, $.proxy(this._process, this));
|
92
|
+
|
93
|
+
this.refresh();
|
94
|
+
this._process();
|
95
|
+
}
|
96
|
+
|
97
|
+
/**
|
98
|
+
* ------------------------------------------------------------------------
|
99
|
+
* Data Api implementation
|
100
|
+
* ------------------------------------------------------------------------
|
101
|
+
*/
|
102
|
+
|
103
|
+
// getters
|
104
|
+
|
105
|
+
_createClass(ScrollSpy, [{
|
106
|
+
key: 'refresh',
|
107
|
+
|
108
|
+
// public
|
109
|
+
|
110
|
+
value: function refresh() {
|
111
|
+
var _this = this;
|
112
|
+
|
113
|
+
var autoMethod = this._scrollElement !== this._scrollElement.window ? OffsetMethod.POSITION : OffsetMethod.OFFSET;
|
114
|
+
|
115
|
+
var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;
|
116
|
+
|
117
|
+
var offsetBase = offsetMethod === OffsetMethod.POSITION ? this._getScrollTop() : 0;
|
118
|
+
|
119
|
+
this._offsets = [];
|
120
|
+
this._targets = [];
|
121
|
+
|
122
|
+
this._scrollHeight = this._getScrollHeight();
|
123
|
+
|
124
|
+
var targets = $.makeArray($(this._selector));
|
125
|
+
|
126
|
+
targets.map(function (element) {
|
127
|
+
var target = undefined;
|
128
|
+
var targetSelector = Util.getSelectorFromElement(element);
|
129
|
+
|
130
|
+
if (targetSelector) {
|
131
|
+
target = $(targetSelector)[0];
|
132
|
+
}
|
133
|
+
|
134
|
+
if (target && (target.offsetWidth || target.offsetHeight)) {
|
135
|
+
// todo (fat): remove sketch reliance on jQuery position/offset
|
136
|
+
return [$(target)[offsetMethod]().top + offsetBase, targetSelector];
|
137
|
+
}
|
138
|
+
}).filter(function (item) {
|
139
|
+
return item;
|
140
|
+
}).sort(function (a, b) {
|
141
|
+
return a[0] - b[0];
|
142
|
+
}).forEach(function (item) {
|
143
|
+
_this._offsets.push(item[0]);
|
144
|
+
_this._targets.push(item[1]);
|
145
|
+
});
|
146
|
+
}
|
147
|
+
}, {
|
148
|
+
key: 'dispose',
|
149
|
+
value: function dispose() {
|
150
|
+
$.removeData(this._element, DATA_KEY);
|
151
|
+
$(this._scrollElement).off(EVENT_KEY);
|
152
|
+
|
153
|
+
this._element = null;
|
154
|
+
this._scrollElement = null;
|
155
|
+
this._config = null;
|
156
|
+
this._selector = null;
|
157
|
+
this._offsets = null;
|
158
|
+
this._targets = null;
|
159
|
+
this._activeTarget = null;
|
160
|
+
this._scrollHeight = null;
|
161
|
+
}
|
162
|
+
|
163
|
+
// private
|
164
|
+
|
165
|
+
}, {
|
166
|
+
key: '_getConfig',
|
167
|
+
value: function _getConfig(config) {
|
168
|
+
config = $.extend({}, Default, config);
|
169
|
+
|
170
|
+
if (typeof config.target !== 'string') {
|
171
|
+
var id = $(config.target).attr('id');
|
172
|
+
if (!id) {
|
173
|
+
id = Util.getUID(NAME);
|
174
|
+
$(config.target).attr('id', id);
|
175
|
+
}
|
176
|
+
config.target = '#' + id;
|
177
|
+
}
|
178
|
+
|
179
|
+
Util.typeCheckConfig(NAME, config, DefaultType);
|
180
|
+
|
181
|
+
return config;
|
182
|
+
}
|
183
|
+
}, {
|
184
|
+
key: '_getScrollTop',
|
185
|
+
value: function _getScrollTop() {
|
186
|
+
return this._scrollElement === window ? this._scrollElement.scrollY : this._scrollElement.scrollTop;
|
187
|
+
}
|
188
|
+
}, {
|
189
|
+
key: '_getScrollHeight',
|
190
|
+
value: function _getScrollHeight() {
|
191
|
+
return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);
|
192
|
+
}
|
193
|
+
}, {
|
194
|
+
key: '_process',
|
195
|
+
value: function _process() {
|
196
|
+
var scrollTop = this._getScrollTop() + this._config.offset;
|
197
|
+
var scrollHeight = this._getScrollHeight();
|
198
|
+
var maxScroll = this._config.offset + scrollHeight - this._scrollElement.offsetHeight;
|
199
|
+
|
200
|
+
if (this._scrollHeight !== scrollHeight) {
|
201
|
+
this.refresh();
|
202
|
+
}
|
203
|
+
|
204
|
+
if (scrollTop >= maxScroll) {
|
205
|
+
var target = this._targets[this._targets.length - 1];
|
206
|
+
|
207
|
+
if (this._activeTarget !== target) {
|
208
|
+
this._activate(target);
|
209
|
+
}
|
210
|
+
}
|
211
|
+
|
212
|
+
if (this._activeTarget && scrollTop < this._offsets[0]) {
|
213
|
+
this._activeTarget = null;
|
214
|
+
this._clear();
|
215
|
+
return;
|
216
|
+
}
|
217
|
+
|
218
|
+
for (var i = this._offsets.length; i--;) {
|
219
|
+
var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (this._offsets[i + 1] === undefined || scrollTop < this._offsets[i + 1]);
|
220
|
+
|
221
|
+
if (isActiveTarget) {
|
222
|
+
this._activate(this._targets[i]);
|
223
|
+
}
|
224
|
+
}
|
225
|
+
}
|
226
|
+
}, {
|
227
|
+
key: '_activate',
|
228
|
+
value: function _activate(target) {
|
229
|
+
this._activeTarget = target;
|
230
|
+
|
231
|
+
this._clear();
|
232
|
+
|
233
|
+
var queries = this._selector.split(',');
|
234
|
+
queries = queries.map(function (selector) {
|
235
|
+
return selector + '[data-target="' + target + '"],' + (selector + '[href="' + target + '"]');
|
236
|
+
});
|
237
|
+
|
238
|
+
var $link = $(queries.join(','));
|
239
|
+
|
240
|
+
if ($link.hasClass(ClassName.DROPDOWN_ITEM)) {
|
241
|
+
$link.closest(Selector.DROPDOWN).find(Selector.DROPDOWN_TOGGLE).addClass(ClassName.ACTIVE);
|
242
|
+
$link.addClass(ClassName.ACTIVE);
|
243
|
+
} else {
|
244
|
+
// todo (fat) this is kinda sus…
|
245
|
+
// recursively add actives to tested nav-links
|
246
|
+
$link.parents(Selector.LI).find(Selector.NAV_LINKS).addClass(ClassName.ACTIVE);
|
247
|
+
}
|
248
|
+
|
249
|
+
$(this._scrollElement).trigger(Event.ACTIVATE, {
|
250
|
+
relatedTarget: target
|
251
|
+
});
|
252
|
+
}
|
253
|
+
}, {
|
254
|
+
key: '_clear',
|
255
|
+
value: function _clear() {
|
256
|
+
$(this._selector).filter(Selector.ACTIVE).removeClass(ClassName.ACTIVE);
|
257
|
+
}
|
258
|
+
|
259
|
+
// static
|
260
|
+
|
261
|
+
}], [{
|
262
|
+
key: '_jQueryInterface',
|
263
|
+
value: function _jQueryInterface(config) {
|
264
|
+
return this.each(function () {
|
265
|
+
var data = $(this).data(DATA_KEY);
|
266
|
+
var _config = typeof config === 'object' && config || null;
|
267
|
+
|
268
|
+
if (!data) {
|
269
|
+
data = new ScrollSpy(this, _config);
|
270
|
+
$(this).data(DATA_KEY, data);
|
271
|
+
}
|
272
|
+
|
273
|
+
if (typeof config === 'string') {
|
274
|
+
if (data[config] === undefined) {
|
275
|
+
throw new Error('No method named "' + config + '"');
|
276
|
+
}
|
277
|
+
data[config]();
|
278
|
+
}
|
279
|
+
});
|
280
|
+
}
|
281
|
+
}, {
|
282
|
+
key: 'VERSION',
|
283
|
+
get: function get() {
|
284
|
+
return VERSION;
|
285
|
+
}
|
286
|
+
}, {
|
287
|
+
key: 'Default',
|
288
|
+
get: function get() {
|
289
|
+
return Default;
|
290
|
+
}
|
291
|
+
}]);
|
292
|
+
|
293
|
+
return ScrollSpy;
|
294
|
+
})();
|
295
|
+
|
296
|
+
$(window).on(Event.LOAD_DATA_API, function () {
|
297
|
+
var scrollSpys = $.makeArray($(Selector.DATA_SPY));
|
298
|
+
|
299
|
+
for (var i = scrollSpys.length; i--;) {
|
300
|
+
var $spy = $(scrollSpys[i]);
|
301
|
+
ScrollSpy._jQueryInterface.call($spy, $spy.data());
|
302
|
+
}
|
303
|
+
});
|
304
|
+
|
305
|
+
/**
|
306
|
+
* ------------------------------------------------------------------------
|
307
|
+
* jQuery
|
308
|
+
* ------------------------------------------------------------------------
|
309
|
+
*/
|
310
|
+
|
311
|
+
$.fn[NAME] = ScrollSpy._jQueryInterface;
|
312
|
+
$.fn[NAME].Constructor = ScrollSpy;
|
313
|
+
$.fn[NAME].noConflict = function () {
|
314
|
+
$.fn[NAME] = JQUERY_NO_CONFLICT;
|
315
|
+
return ScrollSpy._jQueryInterface;
|
316
|
+
};
|
317
|
+
|
318
|
+
return ScrollSpy;
|
319
|
+
})(jQuery);
|
320
|
+
//# sourceMappingURL=scrollspy.js.map
|