staple 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +8 -0
- data/Gemfile +13 -0
- data/LICENSE.md +23 -0
- data/README.md +51 -0
- data/Rakefile +0 -0
- data/config.rb +24 -0
- data/lib/snippet_helpers.rb +69 -0
- data/lib/staple/import_generator.rb +50 -0
- data/lib/staple/list_generator.rb +22 -0
- data/lib/staple.rb +2 -0
- data/source/CNAME +1 -0
- data/source/_accordion.html.erb +24 -0
- data/source/_accordion_tabs.html.erb +26 -0
- data/source/_accordion_tabs_minimal.html.erb +26 -0
- data/source/_badges.html.erb +7 -0
- data/source/_breadcrumbs.html.erb +7 -0
- data/source/_browser.html.erb +29 -0
- data/source/_button_group.html.erb +18 -0
- data/source/_cards.html.erb +59 -0
- data/source/_centered_navigation.html.erb +38 -0
- data/source/_code.html.erb +10 -0
- data/source/_comment.html.erb +21 -0
- data/source/_device.html.erb +10 -0
- data/source/_dropdown.html.erb +12 -0
- data/source/_expander.html.erb +6 -0
- data/source/_flashes.html.erb +15 -0
- data/source/_footer.html.erb +28 -0
- data/source/_footer_2.html.erb +33 -0
- data/source/_grid_items.html.erb +37 -0
- data/source/_grid_items_lines.html.erb +44 -0
- data/source/_hero.html.erb +11 -0
- data/source/_hover_tile_animation.html.erb +11 -0
- data/source/_icon_bullet_points.html.erb +30 -0
- data/source/_image_gradient_dynamic.html.erb +7 -0
- data/source/_intro_text.html.erb +6 -0
- data/source/_label_alerts.html.erb +5 -0
- data/source/_modal.html.erb +14 -0
- data/source/_navigation.html.erb +44 -0
- data/source/_pagination.html.erb +17 -0
- data/source/_progress_bar.html.erb +3 -0
- data/source/_progress_bar_indication.html.erb +5 -0
- data/source/_search_bar.html.erb +8 -0
- data/source/_search_tools.html.erb +58 -0
- data/source/_side_image.html.erb +10 -0
- data/source/_sliding_menu.html.erb +13 -0
- data/source/_snippet.html.erb +4 -0
- data/source/_switch.html.erb +4 -0
- data/source/_tables.html.erb +31 -0
- data/source/_tables_minimal.html.erb +31 -0
- data/source/_texture-legend.html.erb +24 -0
- data/source/_textures.html.erb +4 -0
- data/source/_tooltip.html.erb +6 -0
- data/source/_type_system_geometric.html.erb +18 -0
- data/source/_type_system_rounded.html.erb +18 -0
- data/source/_type_system_sans.html.erb +18 -0
- data/source/_type_system_serif.html.erb +19 -0
- data/source/_type_system_slab.html.erb +18 -0
- data/source/_type_system_traditional.html.erb +18 -0
- data/source/_vertical_tabs.html.erb +30 -0
- data/source/_video.html.erb +5 -0
- data/source/components.html.erb +174 -0
- data/source/index.html.erb +162 -0
- data/source/javascripts/all.js +11 -0
- data/source/javascripts/jquery.erToc.js +477 -0
- data/source/javascripts/jquery.glide.js +941 -0
- data/source/javascripts/staple/accordion.js +5 -0
- data/source/javascripts/staple/accordion_tabs.js +19 -0
- data/source/javascripts/staple/accordion_tabs_minimal.js +19 -0
- data/source/javascripts/staple/centered_navigation.js +14 -0
- data/source/javascripts/staple/dropdown.js +9 -0
- data/source/javascripts/staple/expander.js +53 -0
- data/source/javascripts/staple/navigation.js +23 -0
- data/source/javascripts/staple/search_tools.js +110 -0
- data/source/javascripts/staple/sliding_menu.js +13 -0
- data/source/javascripts/staple/vertical_tabs.js +32 -0
- data/source/layouts/layout.erb +1 -0
- data/source/refills-hero.html.erb +7 -0
- data/source/refills-menu.html.erb +5 -0
- data/source/refills-page-scripts.html.erb +66 -0
- data/source/stylesheets/_bourbon-nav.scss +86 -0
- data/source/stylesheets/_normalize.scss +425 -0
- data/source/stylesheets/_refills-nav.scss +102 -0
- data/source/stylesheets/_refills-styles.scss +543 -0
- data/source/stylesheets/all.scss +61 -0
- data/source/stylesheets/staple/_accordion-tabs-minimal.scss +60 -0
- data/source/stylesheets/staple/_accordion-tabs.scss +88 -0
- data/source/stylesheets/staple/_accordion.scss +55 -0
- data/source/stylesheets/staple/_badges.scss +44 -0
- data/source/stylesheets/staple/_breadcrumbs.scss +84 -0
- data/source/stylesheets/staple/_browser.scss +141 -0
- data/source/stylesheets/staple/_button-group.scss +81 -0
- data/source/stylesheets/staple/_cards.scss +132 -0
- data/source/stylesheets/staple/_centered-navigation.scss +251 -0
- data/source/stylesheets/staple/_comment.scss +60 -0
- data/source/stylesheets/staple/_device.scss +83 -0
- data/source/stylesheets/staple/_dropdown.scss +127 -0
- data/source/stylesheets/staple/_expander.scss +30 -0
- data/source/stylesheets/staple/_flashes.scss +29 -0
- data/source/stylesheets/staple/_footer-2.scss +117 -0
- data/source/stylesheets/staple/_footer.scss +76 -0
- data/source/stylesheets/staple/_grid-items-lines.scss +86 -0
- data/source/stylesheets/staple/_grid-items.scss +97 -0
- data/source/stylesheets/staple/_hero.scss +54 -0
- data/source/stylesheets/staple/_hover-tile-animation.scss +52 -0
- data/source/stylesheets/staple/_icon-bullet-points.scss +63 -0
- data/source/stylesheets/staple/_image-gradient-dynamic.scss +59 -0
- data/source/stylesheets/staple/_intro-text.scss +67 -0
- data/source/stylesheets/staple/_label-alerts.scss +11 -0
- data/source/stylesheets/staple/_modal.scss +147 -0
- data/source/stylesheets/staple/_navigation.scss +329 -0
- data/source/stylesheets/staple/_pagination.scss +51 -0
- data/source/stylesheets/staple/_progress-bar-indication.scss +39 -0
- data/source/stylesheets/staple/_progress-bar.scss +83 -0
- data/source/stylesheets/staple/_search-bar.scss +40 -0
- data/source/stylesheets/staple/_search-tools.scss +67 -0
- data/source/stylesheets/staple/_side-image.scss +59 -0
- data/source/stylesheets/staple/_sliding-menu.scss +63 -0
- data/source/stylesheets/staple/_switch.scss +77 -0
- data/source/stylesheets/staple/_tables-minimal.scss +60 -0
- data/source/stylesheets/staple/_tables.scss +88 -0
- data/source/stylesheets/staple/_texture-legend.scss +182 -0
- data/source/stylesheets/staple/_textures.scss +119 -0
- data/source/stylesheets/staple/_tooltip.scss +57 -0
- data/source/stylesheets/staple/_type-system-geometric.scss +103 -0
- data/source/stylesheets/staple/_type-system-rounded.scss +107 -0
- data/source/stylesheets/staple/_type-system-sans.scss +110 -0
- data/source/stylesheets/staple/_type-system-serif.scss +111 -0
- data/source/stylesheets/staple/_type-system-slab.scss +107 -0
- data/source/stylesheets/staple/_type-system-traditional.scss +114 -0
- data/source/stylesheets/staple/_vertical-tabs.scss +105 -0
- data/source/stylesheets/staple/_video.scss +21 -0
- data/source/type-systems.html.erb +67 -0
- data/source/vendor/javascripts/ZeroClipboard.min.js +9 -0
- data/source/vendor/javascripts/fixedsticky.js +185 -0
- data/source/vendor/javascripts/prism.js +13 -0
- data/source/vendor/javascripts/smooth-scroll.js +125 -0
- data/source/vendor/stylesheets/fixedsticky.css +22 -0
- data/source/vendor/stylesheets/prism.css +126 -0
- data/staple.gemspec +19 -0
- metadata +184 -0
|
@@ -0,0 +1,477 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Plugin Name: erToc plugin for jQuery
|
|
3
|
+
* Version: 1.0
|
|
4
|
+
* Author: everright.chen
|
|
5
|
+
* Email: everright.chen@gmail.com
|
|
6
|
+
* Website: http://everright.cn
|
|
7
|
+
* Testd on: jQuery 1.4+, IE 6+, Firefox, Chrome, Safari, Oprea
|
|
8
|
+
* erToc is a jQuery plugin that will automatically generate a table of contents for your page.
|
|
9
|
+
*/
|
|
10
|
+
(function($) {
|
|
11
|
+
$.erToc = function(el, options) {
|
|
12
|
+
var base = this;
|
|
13
|
+
|
|
14
|
+
base.$this = $(el);
|
|
15
|
+
|
|
16
|
+
base.init = function() {
|
|
17
|
+
// merege custom options
|
|
18
|
+
base.options = $.extend({}, $.erToc.defaults, options);
|
|
19
|
+
|
|
20
|
+
// get nodes length, break down when have't nodes
|
|
21
|
+
var nodeLength = base.options.nodes.length;
|
|
22
|
+
if (!nodeLength) {
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// get and set the last node id number from $body data
|
|
27
|
+
base.nodeNum = $('body').data(base.options.nodeNumKey) || 1;
|
|
28
|
+
// initialize current level, current original level, current original min level
|
|
29
|
+
base.currentLevel = base.currentOriLevel = base.currentOriMinLevel = 0;
|
|
30
|
+
// get is tiered output of toc
|
|
31
|
+
base.tiered = base.tieredList();
|
|
32
|
+
// initialize output for toc
|
|
33
|
+
base.toc = '';
|
|
34
|
+
|
|
35
|
+
// get start level, if value is string, then auto convert to int
|
|
36
|
+
if (base.options.startLevel != parseInt(base.options.startLevel)) {
|
|
37
|
+
base.options.startLevel = $.inArray(base.options.startLevel, base.options.nodes);
|
|
38
|
+
} else {
|
|
39
|
+
base.options.startLevel -= 1;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
if (!base.options.startLevel || 0 > base.options.startLevel) {
|
|
43
|
+
base.options.startLevel = 0;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// get max level, if value is string, then auto convert to int, auto set max level to nodes length when max level less than start level
|
|
47
|
+
if (base.options.maxLevel != parseInt(base.options.maxLevel)) {
|
|
48
|
+
base.options.maxLevel = $.inArray(base.options.maxLevel, base.options.nodes) + 1;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
if (!base.options.maxLevel || base.options.maxLevel < base.options.startLevel) {
|
|
52
|
+
base.options.maxLevel = base.options.nodes.length;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// check and reset the max leven with new computed
|
|
56
|
+
var validLevel = nodeLength - base.options.startLevel;
|
|
57
|
+
|
|
58
|
+
if (base.options.startLevel > base.options.maxLevel || validLevel < base.options.maxLevel) {
|
|
59
|
+
base.options.maxLevel = validLevel;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// automatically broken down when the nodes does not meet the conditions
|
|
63
|
+
if (!base.initNodes()) {
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
// initialize and append to toc output
|
|
67
|
+
base.initToc();
|
|
68
|
+
// append toc content to toc target element
|
|
69
|
+
base.createToc();
|
|
70
|
+
|
|
71
|
+
// set main scroll object when toc scroll or go to top feature was enabled
|
|
72
|
+
if (base.options.goTop || base.options.tocScroll) {
|
|
73
|
+
base.$body = (window.opera) ? ('CSS1Compat' == document.compatMode ? $('html') : $('body')) : $('html, body');
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// initialize go to top
|
|
77
|
+
if (false !== base.options.goTop) {
|
|
78
|
+
// set go to top object, if not set, then set with body object
|
|
79
|
+
base.$topNode = $(base.options.goTopNode);
|
|
80
|
+
|
|
81
|
+
if (!base.$topNode.length) {
|
|
82
|
+
base.$topNode = $('body');
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
base.options.goTopNodes = base.options.goTopNodes || 'auto';
|
|
86
|
+
|
|
87
|
+
if ('auto' === base.options.goTopNodes) {
|
|
88
|
+
base.$topNode.data('isGoTopPosition', 'yes');
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
base.addGoTop();
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
/*
|
|
96
|
+
* Prepare nodes
|
|
97
|
+
* Min & Max conditions
|
|
98
|
+
* Group nodes, sort nodes
|
|
99
|
+
*/
|
|
100
|
+
base.initNodes = function() {
|
|
101
|
+
var defaultNodes = [];
|
|
102
|
+
for (var i = 0, len = base.options.nodes.length; i < len; i++) {
|
|
103
|
+
defaultNodes[i] = base.options.nodes[i];
|
|
104
|
+
}
|
|
105
|
+
var tag,
|
|
106
|
+
nodes = defaultNodes.splice(base.options.startLevel, base.options.maxLevel);
|
|
107
|
+
base.$nodes = base.$this.find(nodes.join(', '));
|
|
108
|
+
|
|
109
|
+
if (!base.$nodes.length || (base.options.nodeMin > 0 && base.$nodes.length < base.options.nodeMin)) {
|
|
110
|
+
return false;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
if (base.options.nodeMax > 0) {
|
|
114
|
+
base.$nodes = base.$nodes.filter(':lt(' + base.options.nodeMax + ')');
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
base.nodes = {
|
|
118
|
+
'ids': [],
|
|
119
|
+
'classes': [],
|
|
120
|
+
'sorts': {'ids': {}, 'classes': {}}
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
for (var i in nodes) {
|
|
124
|
+
if ('.' == nodes[i].substring(0, 1)) {
|
|
125
|
+
tag = nodes[i].substring(1);
|
|
126
|
+
base.nodes.classes.push(tag);
|
|
127
|
+
base.nodes.sorts.classes[tag] = i;
|
|
128
|
+
} else {
|
|
129
|
+
tag = nodes[i].toLowerCase();
|
|
130
|
+
base.nodes.ids.push(tag);
|
|
131
|
+
base.nodes.sorts.ids[tag] = i;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
return true;
|
|
136
|
+
};
|
|
137
|
+
|
|
138
|
+
/*
|
|
139
|
+
* Prepare toc content
|
|
140
|
+
*/
|
|
141
|
+
base.initToc = function() {
|
|
142
|
+
if (base.tiered) {
|
|
143
|
+
base.listO = '<' + base.options.tocListType + '>';
|
|
144
|
+
base.listC = '</' + base.options.tocListType + '>';
|
|
145
|
+
base.listEO = '<li>';
|
|
146
|
+
base.listEC = '</li>';
|
|
147
|
+
base.toc += base.listO + base.listEO;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
var node, level, currentLevel;
|
|
151
|
+
|
|
152
|
+
var numCurrLabel = '';
|
|
153
|
+
if (true === base.options.numbered) {
|
|
154
|
+
var numPrevLevel = 0,
|
|
155
|
+
numLevelCount = {},
|
|
156
|
+
numPrefix = {},
|
|
157
|
+
numPrevPrefix = '',
|
|
158
|
+
numLastPrefix = '';
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
base.$nodes.addClass(base.options.nodeClass).each(function(i, obj) {
|
|
162
|
+
node = $(obj);
|
|
163
|
+
level = base.getLevel(node);
|
|
164
|
+
if (base.tiered) {
|
|
165
|
+
currentLevel = base.currentLevel;
|
|
166
|
+
|
|
167
|
+
if (0 == i) {
|
|
168
|
+
base.currentOriLevel = level;
|
|
169
|
+
base.currentOriMinLevel = level;
|
|
170
|
+
} else {
|
|
171
|
+
if (level > base.currentOriLevel) {
|
|
172
|
+
currentLevel = base.currentLevel + 1;
|
|
173
|
+
base.currentOriLevel = level;
|
|
174
|
+
} else if (level < base.currentOriLevel) {
|
|
175
|
+
currentLevel = level <= base.currentOriMinLevel ? 0 : level - base.currentOriMinLevel;
|
|
176
|
+
base.currentOriLevel = level;
|
|
177
|
+
|
|
178
|
+
if (level < base.currentOriMinLevel) {
|
|
179
|
+
base.currentOriMinLevel = level;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
base.toc += base.formatLevel(currentLevel, false);
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
if (true === base.options.numbered) {
|
|
187
|
+
if (!numLevelCount[currentLevel] || numPrevLevel < currentLevel) {
|
|
188
|
+
numLevelCount[currentLevel] = 1;
|
|
189
|
+
} else {
|
|
190
|
+
numLevelCount[currentLevel] += 1;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
if (numPrevLevel == currentLevel) {
|
|
194
|
+
numCurrLabel = numLastPrefix + numLevelCount[currentLevel];
|
|
195
|
+
} else {
|
|
196
|
+
if (numPrevLevel < currentLevel) {
|
|
197
|
+
numLastPrefix = numPrevPrefix + base.options.numberedJoin;
|
|
198
|
+
numPrefix[currentLevel] = numLastPrefix;
|
|
199
|
+
} else{
|
|
200
|
+
numLastPrefix = '';
|
|
201
|
+
}
|
|
202
|
+
numCurrLabel = (currentLevel == 0) ? numLevelCount[currentLevel] : numPrefix[currentLevel] + numLevelCount[currentLevel];
|
|
203
|
+
|
|
204
|
+
}
|
|
205
|
+
numPrevPrefix = numCurrLabel;
|
|
206
|
+
numCurrLabel = base.options.numberedPrefix + numCurrLabel + base.options.numberedSuffix;
|
|
207
|
+
numPrevLevel = currentLevel;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
base.toc += base.formatLink(node, level, numCurrLabel);
|
|
212
|
+
|
|
213
|
+
if (base.tiered && ((i + 1) == base.$nodes.length)) {
|
|
214
|
+
base.toc += base.formatLevel(currentLevel, true);
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
base.currentLevel = currentLevel;
|
|
218
|
+
});
|
|
219
|
+
|
|
220
|
+
if (base.tiered) {
|
|
221
|
+
base.toc += base.listEC + base.listC;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
// set last nodeNum for other erToc use
|
|
225
|
+
$('body').data(base.options.nodeNumKey, base.nodeNum);
|
|
226
|
+
};
|
|
227
|
+
|
|
228
|
+
/*
|
|
229
|
+
* Append toc to target element
|
|
230
|
+
* title, title enable clicked, toc element scroll
|
|
231
|
+
*/
|
|
232
|
+
base.createToc = function() {
|
|
233
|
+
base.$target = $(base.options.tocTarget);
|
|
234
|
+
base.$toc = $('<div class="er_toc_content"></div>').html(base.toc);
|
|
235
|
+
|
|
236
|
+
if (!base.$target.length) {
|
|
237
|
+
base.$target = $('<div></div>').prependTo(base.$this);
|
|
238
|
+
}
|
|
239
|
+
if (base.options.tocClass) {
|
|
240
|
+
base.$target.addClass(base.options.tocClass);
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
base.$target.append(base.$toc);
|
|
244
|
+
|
|
245
|
+
// set toc title
|
|
246
|
+
var title = $.trim(base.options.tocTitle);
|
|
247
|
+
|
|
248
|
+
if (title.length) {
|
|
249
|
+
var $title = $('<div></div>').html(title).append('<span></span>'),
|
|
250
|
+
hasTitleClass = base.options.tocTitleClass.length;
|
|
251
|
+
|
|
252
|
+
if (hasTitleClass) {
|
|
253
|
+
$title.addClass(base.options.tocTitleClass);
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
// bind hide show event
|
|
257
|
+
if (true === base.options.tocControl) {
|
|
258
|
+
var titleOpenClass = hasTitleClass ? base.options.tocTitleClass + '_open' : 'er_toc_title_open',
|
|
259
|
+
titleCloseClass = hasTitleClass ? base.options.tocTitleClass + '_close' : 'er_toc_title_close';
|
|
260
|
+
|
|
261
|
+
$title.css('cursor', 'pointer').click(function() {
|
|
262
|
+
if ($(this).hasClass(titleOpenClass)) {
|
|
263
|
+
$(this).removeClass(titleOpenClass).addClass(titleCloseClass);
|
|
264
|
+
base.$toc.slideUp();
|
|
265
|
+
} else {
|
|
266
|
+
$(this).removeClass(titleCloseClass).addClass(titleOpenClass);
|
|
267
|
+
base.$toc.slideDown();
|
|
268
|
+
}
|
|
269
|
+
}).click();
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
$title.prependTo(base.$target);
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
// binkd click scroll when toc scroll is enabled
|
|
276
|
+
if (base.options.tocScroll) {
|
|
277
|
+
base.$toc.find('a').click(function() {
|
|
278
|
+
base.$body.animate({scrollTop: ($($(this).attr('href')).offset().top - base.options.goTopBaseHeight)}, base.options.scrollSpeed);
|
|
279
|
+
return false;
|
|
280
|
+
});
|
|
281
|
+
}
|
|
282
|
+
};
|
|
283
|
+
|
|
284
|
+
/*
|
|
285
|
+
* Bind goTop action to nodes which can random, all, custom elements
|
|
286
|
+
*/
|
|
287
|
+
base.addGoTop = function() {
|
|
288
|
+
var top,
|
|
289
|
+
goTop,
|
|
290
|
+
text = (true === base.options.goTop) ? 'Top' : base.options.goTop;
|
|
291
|
+
|
|
292
|
+
if ('all' === base.options.goTopNodes) {
|
|
293
|
+
goTop = base.$nodes;
|
|
294
|
+
} else if ('auto' === base.options.goTopNodes) {
|
|
295
|
+
var currentTop,
|
|
296
|
+
filterNodes = [],
|
|
297
|
+
lastTop = 0,
|
|
298
|
+
preTop = base.getPositionToTop(base.$this),
|
|
299
|
+
depth = Math.round(base.$this.height() / base.$nodes.length);
|
|
300
|
+
|
|
301
|
+
if (base.options.goTopDepth > depth) {
|
|
302
|
+
depth = base.options.goTopDepth;
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
base.$nodes.each(function(i) {
|
|
306
|
+
currentTop = $(this).position().top - lastTop;
|
|
307
|
+
|
|
308
|
+
if (0 == i) {
|
|
309
|
+
currentTop += preTop;
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
if (currentTop >= depth) {
|
|
313
|
+
filterNodes.push('#' + $(this).attr('id'));
|
|
314
|
+
lastTop = $(this).position().top;
|
|
315
|
+
}
|
|
316
|
+
});
|
|
317
|
+
|
|
318
|
+
if (filterNodes.length) {
|
|
319
|
+
goTop = base.$nodes.filter(filterNodes.join(', '));
|
|
320
|
+
}
|
|
321
|
+
} else {
|
|
322
|
+
goTop = base.$nodes.filter(base.options.goTopNodes);
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
top = $('<a href="#" class="' + base.options.goTopClass + '" title="' + text + '">' + text + '</a>');
|
|
326
|
+
goTop.append(top);
|
|
327
|
+
goTop.children('a.' + base.options.goTopClass).click(function() {
|
|
328
|
+
base.$body.animate({scrollTop: (base.$topNode.offset().top - base.options.goTopBaseHeight)}, base.options.scrollSpeed);
|
|
329
|
+
return false;
|
|
330
|
+
});
|
|
331
|
+
};
|
|
332
|
+
|
|
333
|
+
/*
|
|
334
|
+
* Get node element in which level
|
|
335
|
+
*/
|
|
336
|
+
base.getLevel = function(node) {
|
|
337
|
+
var n;
|
|
338
|
+
|
|
339
|
+
if (base.nodes.ids.length) {
|
|
340
|
+
n = node.get(0).nodeName.toLowerCase();
|
|
341
|
+
|
|
342
|
+
if ($.inArray(n, base.nodes.ids) >= 0) {
|
|
343
|
+
return base.nodes.sorts.ids[n];
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
if (base.nodes.classes.length) {
|
|
348
|
+
for(var i in base.nodes.classes) {
|
|
349
|
+
n = base.nodes.classes[i];
|
|
350
|
+
|
|
351
|
+
if (node.hasClass(n)) {
|
|
352
|
+
return base.nodes.sorts.classes[n];
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
return 0;
|
|
358
|
+
};
|
|
359
|
+
|
|
360
|
+
/*
|
|
361
|
+
* Toc output with tieredList
|
|
362
|
+
*/
|
|
363
|
+
base.tieredList = function() {
|
|
364
|
+
var exist = $.inArray(base.options.tocListType, ['ul', 'ol']);
|
|
365
|
+
return exist < 0 ? false : true;
|
|
366
|
+
};
|
|
367
|
+
|
|
368
|
+
/*
|
|
369
|
+
* Get current obj to go to the top of the height
|
|
370
|
+
*/
|
|
371
|
+
base.getPositionToTop = function($obj) {
|
|
372
|
+
var top = 0, end;
|
|
373
|
+
|
|
374
|
+
while($obj) {
|
|
375
|
+
end = ($obj.data('isGoTopPosition') && 'yes' === $obj.data('isGoTopPosition')) ? true : false;
|
|
376
|
+
|
|
377
|
+
if (!end) {
|
|
378
|
+
top += $obj.position().top;
|
|
379
|
+
$obj = $obj.parent();
|
|
380
|
+
} else {
|
|
381
|
+
$obj = null;
|
|
382
|
+
break;
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
return top;
|
|
387
|
+
};
|
|
388
|
+
|
|
389
|
+
/*
|
|
390
|
+
* Prepare toc each text with link
|
|
391
|
+
*/
|
|
392
|
+
base.formatLink = function(node, level, label) {
|
|
393
|
+
var text = node.text(),
|
|
394
|
+
id = node.attr('id') || base.options.nodeIdPrefix + base.nodeNum,
|
|
395
|
+
style = (base.tiered ? '' : ' class="' + base.options.tocClassPrefix + level + '"');
|
|
396
|
+
|
|
397
|
+
node.attr('id', id);
|
|
398
|
+
base.nodeNum++;
|
|
399
|
+
|
|
400
|
+
return label + '<a href="#' + id + '" title="' + text + '"' + style + '>' + text + '</a>';
|
|
401
|
+
};
|
|
402
|
+
|
|
403
|
+
/*
|
|
404
|
+
* Format tag with levels
|
|
405
|
+
*/
|
|
406
|
+
base.formatLevel = function(level, last) {
|
|
407
|
+
if (true !== last) {
|
|
408
|
+
last = false;
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
var output = (level > base.currentLevel) ? base.formatTag(base.currentLevel, level, !last) : base.formatTag(level, base.currentLevel) + ((true === last) ? base.formatTag(0, base.currentLevel) : base.listEC + base.listEO);
|
|
412
|
+
|
|
413
|
+
return output;
|
|
414
|
+
};
|
|
415
|
+
|
|
416
|
+
/*
|
|
417
|
+
* Format tag
|
|
418
|
+
* <ul><li>, </ul><ul>, </li><li>
|
|
419
|
+
*/
|
|
420
|
+
base.formatTag = function(start, end, open) {
|
|
421
|
+
var tags = [];
|
|
422
|
+
|
|
423
|
+
if (true !== open) {
|
|
424
|
+
open = false;
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
for (var i = start; i < end; i++) {
|
|
428
|
+
tags.push(open ? base.listO : base.listC);
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
return (open ? tags.join(base.listEO) + base.listEO : base.listEC + tags.join(base.listEC));
|
|
432
|
+
};
|
|
433
|
+
|
|
434
|
+
// ready go
|
|
435
|
+
base.init();
|
|
436
|
+
};
|
|
437
|
+
|
|
438
|
+
/*
|
|
439
|
+
* erToc default options
|
|
440
|
+
*/
|
|
441
|
+
$.erToc.defaults = {
|
|
442
|
+
startLevel: 'h5', // node name, class or node array subscript [0|1]...n
|
|
443
|
+
maxLevel: 'h6', // node name, class or node array subscript [0|1]...n
|
|
444
|
+
nodes: ['h5', 'h6'], // nodes for prepare toc, support class ['.p1', '.p2', '.p3', '.p4', '.p5', '.p6']
|
|
445
|
+
nodeMin: 0, // min nodes for toc
|
|
446
|
+
nodeMax: 0, // max nodes for toc
|
|
447
|
+
nodeClass: 'er_toc_tag',
|
|
448
|
+
nodeIdPrefix: 'er-toc-id-',
|
|
449
|
+
tocTarget: '', // which element the toc will be append
|
|
450
|
+
tocClass: 'er_toc',
|
|
451
|
+
tocTitle: 'Table of Contents', // title for toc, if set empty string, then title will be hidden
|
|
452
|
+
tocTitleClass: 'er_toc_title',
|
|
453
|
+
tocListType: 'ul', // toc output type, ul, li, others will only include text with link
|
|
454
|
+
tocControl: true, // if have toc title, then can set true to control toc hide or show
|
|
455
|
+
tocClassPrefix: 'er_toc_level_',
|
|
456
|
+
tocScroll: true, // enable toc can be scroll, true or false
|
|
457
|
+
goTop: true, // enable go to top action, true or false
|
|
458
|
+
goTopBaseHeight: 0, //if the top is floating to fixed, then it should reduce the height of the top
|
|
459
|
+
goTopNodes: 'auto', // bind to which nodes, auto, all, and custom elements
|
|
460
|
+
goTopDepth: 450, // if go to top nodes was set auto, then here is the depth for two elements
|
|
461
|
+
goTopClass: 'er_toc_top',
|
|
462
|
+
goTopNode: 'body', // go to top element
|
|
463
|
+
scrollSpeed: 1000, // scroll speed, n seconds, slow, fast
|
|
464
|
+
nodeNumKey: 'erTocNodeNum',
|
|
465
|
+
numbered: false,
|
|
466
|
+
numberedJoin: '.',
|
|
467
|
+
numberedPrefix: '',
|
|
468
|
+
numberedSuffix: ' '
|
|
469
|
+
};
|
|
470
|
+
|
|
471
|
+
$.fn.erToc = function(options) {
|
|
472
|
+
return this.each(function(i){
|
|
473
|
+
(new $.erToc(this, options));
|
|
474
|
+
});
|
|
475
|
+
};
|
|
476
|
+
|
|
477
|
+
})(jQuery);
|