shibori 1.0.0.beta1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +20 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +27 -0
- data/Procfile +1 -0
- data/README.md +24 -0
- data/Rakefile +2 -0
- data/app.json +11 -0
- data/builder/lineage_hunter.js +80 -0
- data/builder/list_item_hunter.js +106 -0
- data/builder/media_hunter.js +51 -0
- data/builder/object_factory.js +60 -0
- data/builder/parameter_hunter.js +69 -0
- data/builder/pattern_assembler.js +258 -0
- data/builder/pattern_exporter.js +43 -0
- data/builder/patternlab.js +365 -0
- data/builder/patternlab_grunt.js +38 -0
- data/builder/patternlab_gulp.js +26 -0
- data/builder/pseudopattern_hunter.js +78 -0
- data/config.json +34 -0
- data/docs/Pattern Lab Node.md +225 -0
- data/favicon.ico +0 -0
- data/gulpfile.js +148 -0
- data/index.js +20 -0
- data/lib/shibori/version.rb +3 -0
- data/lib/shibori.rb +11 -0
- data/package.json +44 -0
- data/public/data/annotations.js +109 -0
- data/public/styleguide/css/static.css +458 -0
- data/public/styleguide/css/static.scss +404 -0
- data/public/styleguide/css/styleguide-specific.css +170 -0
- data/public/styleguide/css/styleguide-specific.scss +204 -0
- data/public/styleguide/css/styleguide.css +880 -0
- data/public/styleguide/css/styleguide.scss +950 -0
- data/public/styleguide/css/vendor/prism.css +112 -0
- data/public/styleguide/css/vendor/typeahead.css +66 -0
- data/public/styleguide/fonts/icomoon.eot +0 -0
- data/public/styleguide/fonts/icomoon.svg +22 -0
- data/public/styleguide/fonts/icomoon.ttf +0 -0
- data/public/styleguide/fonts/icomoon.woff +0 -0
- data/public/styleguide/html/README +1 -0
- data/public/styleguide/images/spinner.gif +0 -0
- data/public/styleguide/js/annotations-pattern.js +308 -0
- data/public/styleguide/js/annotations-viewer.js +289 -0
- data/public/styleguide/js/code-pattern.js +120 -0
- data/public/styleguide/js/code-viewer.js +443 -0
- data/public/styleguide/js/data-saver.js +169 -0
- data/public/styleguide/js/pattern-finder.js +114 -0
- data/public/styleguide/js/postmessage.js +127 -0
- data/public/styleguide/js/styleguide.js +600 -0
- data/public/styleguide/js/url-handler.js +182 -0
- data/public/styleguide/js/vendor/classlist-polyfill.js +176 -0
- data/public/styleguide/js/vendor/jquery.js +4 -0
- data/public/styleguide/js/vendor/jwerty.js +523 -0
- data/public/styleguide/js/vendor/prism.js +7 -0
- data/public/styleguide/js/vendor/typeahead.bundle.min.js +7 -0
- data/script/bootstrap +58 -0
- data/shibori.gemspec +18 -0
- data/shibori.jpg +0 -0
- data/source/_data/annotations.js +109 -0
- data/source/_data/data.json +93 -0
- data/source/_data/listitems.json +782 -0
- data/source/_patternlab-files/README +1 -0
- data/source/_patternlab-files/index.mustache +94 -0
- data/source/_patternlab-files/partials/ishControls.mustache +64 -0
- data/source/_patternlab-files/partials/patternNav.mustache +17 -0
- data/source/_patternlab-files/partials/patternPaths.mustache +3 -0
- data/source/_patternlab-files/partials/viewAllPaths.mustache +3 -0
- data/source/_patternlab-files/pattern-header-footer/README +1 -0
- data/source/_patternlab-files/pattern-header-footer/footer.html +34 -0
- data/source/_patternlab-files/pattern-header-footer/header.html +44 -0
- data/source/_patternlab-files/styleguide.mustache +75 -0
- data/source/_patternlab-files/viewall.mustache +75 -0
- data/source/_patterns/00-atoms/00-typography/00-headings.mustache +6 -0
- data/source/_patterns/00-atoms/00-typography/01-headings-options.mustache +7 -0
- data/source/_patterns/00-atoms/00-typography/02-body.mustache +2 -0
- data/source/_patterns/00-atoms/00-typography/03-text-manipulation.mustache +12 -0
- data/source/_patterns/00-atoms/00-typography/04-blockquotes.mustache +3 -0
- data/source/_patterns/00-atoms/00-typography/05-lists.mustache +64 -0
- data/source/_patterns/00-atoms/01-colors/00-colors-monochromatic.mustache +36 -0
- data/source/_patterns/00-atoms/01-colors/01-colors-brand.mustache +26 -0
- data/source/_patterns/00-atoms/01-colors/02-colors-gradients.mustache +38 -0
- data/source/_patterns/00-atoms/02-buttons/00-btn-lg.mustache +7 -0
- data/source/_patterns/00-atoms/02-buttons/01-btn-sm.mustache +7 -0
- data/source/_patterns/00-atoms/02-buttons/02-btn-xs.mustache +7 -0
- data/source/_patterns/00-atoms/02-buttons/03-btn-block.mustache +7 -0
- data/source/_patterns/00-atoms/02-buttons/04-btn-deploy.mustache +4 -0
- data/source/_patterns/00-atoms/03-forms/00-text-fields.mustache +24 -0
- data/source/_patterns/00-atoms/03-forms/01-select-menu.mustache +6 -0
- data/source/_patterns/00-atoms/03-forms/02-checkbox.mustache +10 -0
- data/source/_patterns/00-atoms/03-forms/03-radios.mustache +10 -0
- data/source/_patterns/00-atoms/03-forms/04-validation.mustache +14 -0
- data/source/_patterns/00-atoms/04-quote/00-pullquote.mustache +7 -0
- data/source/_patterns/00-atoms/04-quote/01-quote-small.mustache +7 -0
- data/source/_patterns/00-atoms/05-code/01-pre.mustache +11 -0
- data/source/_patterns/00-atoms/06-tooltips/00-text.mustache +3 -0
- data/source/_patterns/00-atoms/06-tooltips/01-diagram-callout.mustache +1 -0
- data/source/_patterns/00-atoms/07-loader/00-spinner.mustache +5 -0
- data/source/_patterns/00-atoms/08-readmore/00-readmore.mustache +3 -0
- data/source/_patterns/00-atoms/09-slider/00-dots.mustache +8 -0
- data/source/_patterns/00-atoms/10-tables/00-tables.mustache +26 -0
- data/source/_patterns/00-atoms/12-modal/00-modal.mustache +14 -0
- data/source/_patterns/00-atoms/13-panel/00-panel.mustache +3 -0
- data/source/_patterns/00-atoms/14-users/00-avatar.mustache +3 -0
- data/source/_patterns/00-atoms/15-icons/00-icons.mustache +333 -0
- data/source/_patterns/00-atoms/15-icons/04-icon-colors.mustache +38 -0
- data/source/_patterns/00-atoms/15-icons/05-icon-sizes.mustache +31 -0
- data/source/_patterns/00-atoms/15-icons/_02-languages.mustache +0 -0
- data/source/_patterns/00-atoms/15-icons/_03-social.mustache +0 -0
- data/source/_patterns/00-atoms/15-icons/_05-icon-containers.mustache +0 -0
- data/source/_patterns/00-atoms/16-video/01-video.mustache +3 -0
- data/source/_patterns/00-atoms/16-video/_00-play-button.mustache +0 -0
- data/source/_patterns/00-atoms/17-utilities/00-visibility.mustache +8 -0
- data/source/_patterns/00-atoms/17-utilities/01-ui-elements.mustache +3 -0
- data/source/_patterns/00-atoms/18-grid/_00-grid.mustache +0 -0
- data/source/_patterns/01-molecules/00-text/00-header-groups.mustache +4 -0
- data/source/_patterns/01-molecules/00-text/01-intro-text.mustache +5 -0
- data/source/_patterns/01-molecules/01-layout/00-one-up.mustache +8 -0
- data/source/_patterns/01-molecules/01-layout/01-two-up.mustache +9 -0
- data/source/_patterns/01-molecules/01-layout/02-three-up.mustache +10 -0
- data/source/_patterns/01-molecules/01-layout/03-four-up.mustache +11 -0
- data/source/_patterns/01-molecules/01-layout/04-masonary-2.mustache +24 -0
- data/source/_patterns/01-molecules/01-layout/05-masonary-3.mustache +24 -0
- data/source/_patterns/01-molecules/02-navigation/01-subnav.mustache +21 -0
- data/source/_patterns/01-molecules/02-navigation/02-breadcrumbs.mustache +25 -0
- data/source/_patterns/01-molecules/02-navigation/03-side-nav.mustache +11 -0
- data/source/_patterns/01-molecules/02-navigation/04-side-nav-small.mustache +32 -0
- data/source/_patterns/01-molecules/02-navigation/05-pagination.mustache +0 -0
- data/source/_patterns/01-molecules/02-navigation/06-tabs.mustache +46 -0
- data/source/_patterns/01-molecules/03-forms/_00-search.mustache +0 -0
- data/source/_patterns/01-molecules/04-slider/00-slider.mustache +8 -0
- data/source/_patterns/01-molecules/05-messages/00-alert.mustache +15 -0
- data/source/_patterns/01-molecules/06-components/_00-social-share.mustache +0 -0
- data/source/_patterns/01-molecules/07-Elements/01-Addons-Card.mustache +79 -0
- data/source/_patterns/01-molecules/07-Elements/02-Buttons-Card.mustache +131 -0
- data/source/_patterns/01-molecules/07-Elements/03-Buildpack-Card.mustache +109 -0
- data/source/_patterns/01-molecules/08-vertical-tabs/01-vertical-tabs.mustache +30 -0
- data/source/_patterns/02-organisms/03-sections/00-purple.mustache +11 -0
- data/source/_patterns/02-organisms/03-sections/01-purple-dark.mustache +12 -0
- data/source/_patterns/02-organisms/03-sections/03-gray-light.mustache +12 -0
- data/source/css/hk-icon-rails.scss +13 -0
- data/source/css/scss/base/_base.scss +62 -0
- data/source/css/scss/base/_fonts.scss +12 -0
- data/source/css/scss/base/_normalize.scss +431 -0
- data/source/css/scss/base/_type.scss +128 -0
- data/source/css/scss/base/_utilities.scss +78 -0
- data/source/css/scss/components/_alert.scss +38 -0
- data/source/css/scss/components/_animate.scss +3340 -0
- data/source/css/scss/components/_animation.scss +15 -0
- data/source/css/scss/components/_buttons.scss +175 -0
- data/source/css/scss/components/_code.scss +26 -0
- data/source/css/scss/components/_forms.scss +136 -0
- data/source/css/scss/components/_hero.scss +18 -0
- data/source/css/scss/components/_hr.scss +11 -0
- data/source/css/scss/components/_icons.scss +85 -0
- data/source/css/scss/components/_lists.scss +45 -0
- data/source/css/scss/components/_logos.scss +15 -0
- data/source/css/scss/components/_masonary.scss +46 -0
- data/source/css/scss/components/_modal.scss +218 -0
- data/source/css/scss/components/_owlCarousel.scss +270 -0
- data/source/css/scss/components/_panel.scss +11 -0
- data/source/css/scss/components/_pill-box.scss +38 -0
- data/source/css/scss/components/_quote.scss +96 -0
- data/source/css/scss/components/_readmore.scss +11 -0
- data/source/css/scss/components/_slider.scss +96 -0
- data/source/css/scss/components/_spinner.scss +64 -0
- data/source/css/scss/components/_sprites.scss +3 -0
- data/source/css/scss/components/_sr-only.scss +10 -0
- data/source/css/scss/components/_tables.scss +62 -0
- data/source/css/scss/components/_tooltips.scss +93 -0
- data/source/css/scss/components/_users.scss +11 -0
- data/source/css/scss/components/_vertical-tabs.scss +129 -0
- data/source/css/scss/components/_video.scss +7 -0
- data/source/css/scss/ecosystem/_addons-card.scss +3 -0
- data/source/css/scss/ecosystem/_cards.scss +369 -0
- data/source/css/scss/ecosystem/_elements-brand.scss +32 -0
- data/source/css/scss/ecosystem/_elements.scss +4 -0
- data/source/css/scss/globals/_colors.scss +189 -0
- data/source/css/scss/globals/_mixins.scss +45 -0
- data/source/css/scss/globals/_variables.scss +87 -0
- data/source/css/scss/layout/_grid-settings.scss +13 -0
- data/source/css/scss/layout/_layout.scss +95 -0
- data/source/css/scss/page-elements/_headers.scss +3 -0
- data/source/css/scss/page-elements/_navigation.scss +254 -0
- data/source/css/scss/page-elements/_sections.scss +66 -0
- data/source/css/scss/page-elements/_sidebar.scss +34 -0
- data/source/css/shibori.scss +63 -0
- data/source/fonts/bentonsans/bentonsans-book.eot +0 -0
- data/source/fonts/bentonsans/bentonsans-book.svg +400 -0
- data/source/fonts/bentonsans/bentonsans-book.ttf +0 -0
- data/source/fonts/bentonsans/bentonsans-book.woff +0 -0
- data/source/fonts/bentonsans/bentonsans-medium.eot +0 -0
- data/source/fonts/bentonsans/bentonsans-medium.svg +416 -0
- data/source/fonts/bentonsans/bentonsans-medium.ttf +0 -0
- data/source/fonts/bentonsans/bentonsans-medium.woff +0 -0
- data/source/fonts/bentonsans/bentonsans-regular.eot +0 -0
- data/source/fonts/bentonsans/bentonsans-regular.svg +416 -0
- data/source/fonts/bentonsans/bentonsans-regular.ttf +0 -0
- data/source/fonts/bentonsans/bentonsans-regular.woff +0 -0
- data/source/fonts/hk-icon/hk-icon.eot +0 -0
- data/source/fonts/hk-icon/hk-icon.svg +261 -0
- data/source/fonts/hk-icon/hk-icon.ttf +0 -0
- data/source/fonts/hk-icon/hk-icon.woff +0 -0
- data/source/fonts/inconsolata/inconsolata-bold.eot +0 -0
- data/source/fonts/inconsolata/inconsolata-bold.svg +239 -0
- data/source/fonts/inconsolata/inconsolata-bold.ttf +0 -0
- data/source/fonts/inconsolata/inconsolata-bold.woff +0 -0
- data/source/fonts/inconsolata/inconsolata-regular.eot +0 -0
- data/source/fonts/inconsolata/inconsolata-regular.svg +239 -0
- data/source/fonts/inconsolata/inconsolata-regular.ttf +0 -0
- data/source/fonts/inconsolata/inconsolata-regular.woff +0 -0
- data/source/images/blockquote/close-sm.png +0 -0
- data/source/images/blockquote/close.png +0 -0
- data/source/images/blockquote/close@2x.png +0 -0
- data/source/images/blockquote/open-sm.png +0 -0
- data/source/images/blockquote/open.png +0 -0
- data/source/images/blockquote/open@2x.png +0 -0
- data/source/images/elements/heroku_suported.svg +32 -0
- data/source/images/forms/select-input-arrows.svg +8 -0
- data/source/js/init.js +26 -0
- data/source/js/main.js +22 -0
- data/source/js/vendor/bourbon-modal.js +17 -0
- data/source/js/vendor/fitvids.js +77 -0
- data/source/js/vendor/fixto.js +719 -0
- data/source/js/vendor/jquery-2.0.0b2.js +8690 -0
- data/source/js/vendor/modernizr.js +4 -0
- data/source/js/vendor/owl.carousel.js +3069 -0
- data/source/js/vendor/readmore.js +11 -0
- data/source/js/vendor/unslider.js +1 -0
- data/source/js/vendor/vertical-tabs.js +34 -0
- data/test/files/test.css +19 -0
- data/test/lineage_hunter_tests.js +262 -0
- data/test/list_item_hunter_tests.js +167 -0
- data/test/media_hunter_tests.js +74 -0
- data/test/object_factory_tests.js +62 -0
- data/test/parameter_hunter_tests.js +298 -0
- data/test/pattern_assembler_tests.js +43 -0
- data/test/patternlab_tests.js +8 -0
- metadata +320 -0
@@ -0,0 +1,523 @@
|
|
1
|
+
/*
|
2
|
+
* jwerty - Awesome handling of keyboard events
|
3
|
+
*
|
4
|
+
* jwerty is a JS lib which allows you to bind, fire and assert key combination
|
5
|
+
* strings against elements and events. It normalises the poor std api into
|
6
|
+
* something easy to use and clear.
|
7
|
+
*
|
8
|
+
* This code is licensed under the MIT
|
9
|
+
* For the full license see: http://keithamus.mit-license.org/
|
10
|
+
* For more information see: http://keithamus.github.com/jwerty
|
11
|
+
*
|
12
|
+
* @author Keith Cirkel ('keithamus') <jwerty@keithcirkel.co.uk>
|
13
|
+
* @license http://keithamus.mit-license.org/
|
14
|
+
* @copyright Copyright © 2011, Keith Cirkel
|
15
|
+
*
|
16
|
+
*/
|
17
|
+
(function (global, exports) {
|
18
|
+
|
19
|
+
// Helper methods & vars:
|
20
|
+
var $d = global.document,
|
21
|
+
$ = (global.jQuery || global.Zepto || global.ender || $d),
|
22
|
+
$$, // Element selector function
|
23
|
+
$b, // Event binding function
|
24
|
+
$f, // Event firing function
|
25
|
+
ke = 'keydown';
|
26
|
+
|
27
|
+
function realTypeOf(v, s) {
|
28
|
+
return (v === null) ? s === 'null'
|
29
|
+
: (v === undefined) ? s === 'undefined'
|
30
|
+
: (v.is && v instanceof $) ? s === 'element'
|
31
|
+
: Object.prototype.toString.call(v).toLowerCase().indexOf(s) > 7;
|
32
|
+
}
|
33
|
+
|
34
|
+
if ($ === $d) {
|
35
|
+
$$ = function (selector, context) {
|
36
|
+
return selector ? $.querySelector(selector, context || $) : $;
|
37
|
+
};
|
38
|
+
$b = function (e, fn) { e.addEventListener(ke, fn, false); };
|
39
|
+
$f = function (e, jwertyEv) {
|
40
|
+
var ret = $d.createEvent('Event'),
|
41
|
+
i;
|
42
|
+
|
43
|
+
ret.initEvent(ke, true, true);
|
44
|
+
|
45
|
+
for (i in jwertyEv) ret[i] = jwertyEv[i];
|
46
|
+
|
47
|
+
return (e || $).dispatchEvent(ret);
|
48
|
+
};
|
49
|
+
} else {
|
50
|
+
$$ = function (selector, context) { return $(selector || $d, context); };
|
51
|
+
$b = function (e, fn) { $(e).bind(ke + '.jwerty', fn); };
|
52
|
+
$f = function (e, ob) { $(e || $d).trigger($.Event(ke, ob)); };
|
53
|
+
}
|
54
|
+
|
55
|
+
// Private
|
56
|
+
var _modProps = { 16: 'shiftKey', 17: 'ctrlKey', 18: 'altKey', 91: 'metaKey' };
|
57
|
+
|
58
|
+
// Generate key mappings for common keys that are not printable.
|
59
|
+
var _keys = {
|
60
|
+
|
61
|
+
// MOD aka toggleable keys
|
62
|
+
mods: {
|
63
|
+
// Shift key, ⇧
|
64
|
+
'⇧': 16,
|
65
|
+
shift: 16,
|
66
|
+
// CTRL key, on Mac: ⌃
|
67
|
+
'⌃': 17,
|
68
|
+
ctrl: 17,
|
69
|
+
// ALT key, on Mac: ⌥ (Alt)
|
70
|
+
'⌥': 18,
|
71
|
+
alt: 18,
|
72
|
+
option: 18,
|
73
|
+
// META, on Mac: ⌘ (CMD), on Windows (Win), on Linux (Super)
|
74
|
+
'⌘': 91,
|
75
|
+
meta: 91,
|
76
|
+
cmd: 91,
|
77
|
+
'super': 91,
|
78
|
+
win: 91
|
79
|
+
},
|
80
|
+
|
81
|
+
// Normal keys
|
82
|
+
keys: {
|
83
|
+
// Backspace key, on Mac: ⌫ (Backspace)
|
84
|
+
'⌫': 8,
|
85
|
+
backspace: 8,
|
86
|
+
// Tab Key, on Mac: ⇥ (Tab), on Windows ⇥⇥
|
87
|
+
'⇥': 9,
|
88
|
+
'⇆': 9,
|
89
|
+
tab: 9,
|
90
|
+
// Return key, ↩
|
91
|
+
'↩': 13,
|
92
|
+
'return': 13,
|
93
|
+
enter: 13,
|
94
|
+
'⌅': 13,
|
95
|
+
// Pause/Break key
|
96
|
+
'pause': 19,
|
97
|
+
'pause-break': 19,
|
98
|
+
// Caps Lock key, ⇪
|
99
|
+
'⇪': 20,
|
100
|
+
caps: 20,
|
101
|
+
'caps-lock': 20,
|
102
|
+
// Escape key, on Mac: ⎋, on Windows: Esc
|
103
|
+
'⎋': 27,
|
104
|
+
escape: 27,
|
105
|
+
esc: 27,
|
106
|
+
// Space key
|
107
|
+
space: 32,
|
108
|
+
// Page-Up key, or pgup, on Mac: ↖
|
109
|
+
'↖': 33,
|
110
|
+
pgup: 33,
|
111
|
+
'page-up': 33,
|
112
|
+
// Page-Down key, or pgdown, on Mac: ↘
|
113
|
+
'↘': 34,
|
114
|
+
pgdown: 34,
|
115
|
+
'page-down': 34,
|
116
|
+
// END key, on Mac: ⇟
|
117
|
+
'⇟': 35,
|
118
|
+
end: 35,
|
119
|
+
// HOME key, on Mac: ⇞
|
120
|
+
'⇞': 36,
|
121
|
+
home: 36,
|
122
|
+
// Insert key, or ins
|
123
|
+
ins: 45,
|
124
|
+
insert: 45,
|
125
|
+
// Delete key, on Mac: ⌫ (Delete)
|
126
|
+
del: 46,
|
127
|
+
'delete': 46,
|
128
|
+
|
129
|
+
// Left Arrow Key, or ←
|
130
|
+
'←': 37,
|
131
|
+
left: 37,
|
132
|
+
'arrow-left': 37,
|
133
|
+
// Up Arrow Key, or ↑
|
134
|
+
'↑': 38,
|
135
|
+
up: 38,
|
136
|
+
'arrow-up': 38,
|
137
|
+
// Right Arrow Key, or →
|
138
|
+
'→': 39,
|
139
|
+
right: 39,
|
140
|
+
'arrow-right': 39,
|
141
|
+
// Up Arrow Key, or ↓
|
142
|
+
'↓': 40,
|
143
|
+
down: 40,
|
144
|
+
'arrow-down': 40,
|
145
|
+
|
146
|
+
// odities, printing characters that come out wrong:
|
147
|
+
// Num-Multiply, or *
|
148
|
+
'*': 106,
|
149
|
+
star: 106,
|
150
|
+
asterisk: 106,
|
151
|
+
multiply: 106,
|
152
|
+
// Num-Plus or +
|
153
|
+
'+': 107,
|
154
|
+
'plus': 107,
|
155
|
+
// Num-Subtract, or -
|
156
|
+
'-': 109,
|
157
|
+
subtract: 109,
|
158
|
+
'num-.': 110,
|
159
|
+
'num-period': 110,
|
160
|
+
'num-dot': 110,
|
161
|
+
'num-full-stop': 110,
|
162
|
+
'num-delete': 110,
|
163
|
+
// Semicolon
|
164
|
+
';': 186,
|
165
|
+
semicolon: 186,
|
166
|
+
// = or equals
|
167
|
+
'=': 187,
|
168
|
+
'equals': 187,
|
169
|
+
// Comma, or ,
|
170
|
+
',': 188,
|
171
|
+
comma: 188,
|
172
|
+
//'-': 189, //???
|
173
|
+
// Period, or ., or full-stop
|
174
|
+
'.': 190,
|
175
|
+
period: 190,
|
176
|
+
'full-stop': 190,
|
177
|
+
// Slash, or /, or forward-slash
|
178
|
+
'/': 191,
|
179
|
+
slash: 191,
|
180
|
+
'forward-slash': 191,
|
181
|
+
// Tick, or `, or back-quote
|
182
|
+
'`': 192,
|
183
|
+
tick: 192,
|
184
|
+
'back-quote': 192,
|
185
|
+
// Open bracket, or [
|
186
|
+
'[': 219,
|
187
|
+
'open-bracket': 219,
|
188
|
+
// Back slash, or \
|
189
|
+
'\\': 220,
|
190
|
+
'back-slash': 220,
|
191
|
+
// Close backet, or ]
|
192
|
+
']': 221,
|
193
|
+
'close-bracket': 221,
|
194
|
+
// Apostraphe, or Quote, or '
|
195
|
+
'\'': 222,
|
196
|
+
quote: 222,
|
197
|
+
apostraphe: 222
|
198
|
+
}
|
199
|
+
|
200
|
+
};
|
201
|
+
|
202
|
+
// To minimise code bloat, add all of the 0-9 and NUMPAD 0-9 keys in a loop
|
203
|
+
var i = 47,
|
204
|
+
n = 0;
|
205
|
+
while (++i < 106) {
|
206
|
+
_keys.keys[n] = i;
|
207
|
+
_keys.keys['num-' + n] = i + 48;
|
208
|
+
++n;
|
209
|
+
}
|
210
|
+
|
211
|
+
// To minimise code bloat, add all of the F1-F25 keys in a loop
|
212
|
+
i = 111,
|
213
|
+
n = 1;
|
214
|
+
while (++i < 136) {
|
215
|
+
_keys.keys['f' + n] = i;
|
216
|
+
++n;
|
217
|
+
}
|
218
|
+
|
219
|
+
// To minimise code bloat, add all of the letters of the alphabet in a loop
|
220
|
+
i = 64;
|
221
|
+
while (++i < 91) {
|
222
|
+
_keys.keys[String.fromCharCode(i).toLowerCase()] = i;
|
223
|
+
}
|
224
|
+
|
225
|
+
function JwertyCode(jwertyCode) {
|
226
|
+
var i,
|
227
|
+
c,
|
228
|
+
n,
|
229
|
+
z,
|
230
|
+
keyCombo,
|
231
|
+
optionals,
|
232
|
+
jwertyCodeFragment,
|
233
|
+
rangeMatches,
|
234
|
+
rangeI;
|
235
|
+
|
236
|
+
// In-case we get called with an instance of ourselves, just return that.
|
237
|
+
if (jwertyCode instanceof JwertyCode) return jwertyCode;
|
238
|
+
|
239
|
+
// If jwertyCode isn't an array, cast it as a string and split into array.
|
240
|
+
if (!realTypeOf(jwertyCode, 'array')) {
|
241
|
+
jwertyCode = (String(jwertyCode)).replace(/\s/g, '').toLowerCase()
|
242
|
+
.match(/(?:\+,|[^,])+/g);
|
243
|
+
}
|
244
|
+
|
245
|
+
// Loop through each key sequence in jwertyCode
|
246
|
+
for (i = 0, c = jwertyCode.length; i < c; ++i) {
|
247
|
+
|
248
|
+
// If the key combo at this part of the sequence isn't an array,
|
249
|
+
// cast as a string and split into an array.
|
250
|
+
if (!realTypeOf(jwertyCode[i], 'array')) {
|
251
|
+
jwertyCode[i] = String(jwertyCode[i])
|
252
|
+
.match(/(?:\+\/|[^\/])+/g);
|
253
|
+
}
|
254
|
+
|
255
|
+
// Parse the key optionals in this sequence
|
256
|
+
optionals = [],
|
257
|
+
n = jwertyCode[i].length;
|
258
|
+
while (n--) {
|
259
|
+
|
260
|
+
// Begin creating the object for this key combo
|
261
|
+
jwertyCodeFragment = jwertyCode[i][n];
|
262
|
+
|
263
|
+
keyCombo = {
|
264
|
+
jwertyCombo: String(jwertyCodeFragment),
|
265
|
+
shiftKey: false,
|
266
|
+
ctrlKey: false,
|
267
|
+
altKey: false,
|
268
|
+
metaKey: false
|
269
|
+
};
|
270
|
+
|
271
|
+
// If jwertyCodeFragment isn't an array then cast as a string
|
272
|
+
// and split it into one.
|
273
|
+
if (!realTypeOf(jwertyCodeFragment, 'array')) {
|
274
|
+
jwertyCodeFragment = String(jwertyCodeFragment).toLowerCase()
|
275
|
+
.match(/(?:(?:[^\+])+|\+\+|^\+$)/g);
|
276
|
+
}
|
277
|
+
|
278
|
+
z = jwertyCodeFragment.length;
|
279
|
+
while (z--) {
|
280
|
+
|
281
|
+
// Normalise matching errors
|
282
|
+
if (jwertyCodeFragment[z] === '++') jwertyCodeFragment[z] = '+';
|
283
|
+
|
284
|
+
// Inject either keyCode or ctrl/meta/shift/altKey into keyCombo
|
285
|
+
if (jwertyCodeFragment[z] in _keys.mods) {
|
286
|
+
keyCombo[_modProps[_keys.mods[jwertyCodeFragment[z]]]] = true;
|
287
|
+
} else if (jwertyCodeFragment[z] in _keys.keys) {
|
288
|
+
keyCombo.keyCode = _keys.keys[jwertyCodeFragment[z]];
|
289
|
+
} else {
|
290
|
+
rangeMatches = jwertyCodeFragment[z].match(/^\[([^-]+\-?[^-]*)-([^-]+\-?[^-]*)\]$/);
|
291
|
+
}
|
292
|
+
}
|
293
|
+
if (realTypeOf(keyCombo.keyCode, 'undefined')) {
|
294
|
+
// If we picked up a range match earlier...
|
295
|
+
if (rangeMatches && (rangeMatches[1] in _keys.keys) && (rangeMatches[2] in _keys.keys)) {
|
296
|
+
rangeMatches[2] = _keys.keys[rangeMatches[2]];
|
297
|
+
rangeMatches[1] = _keys.keys[rangeMatches[1]];
|
298
|
+
|
299
|
+
// Go from match 1 and capture all key-comobs up to match 2
|
300
|
+
for (rangeI = rangeMatches[1]; rangeI < rangeMatches[2]; ++rangeI) {
|
301
|
+
optionals.push({
|
302
|
+
altKey: keyCombo.altKey,
|
303
|
+
shiftKey: keyCombo.shiftKey,
|
304
|
+
metaKey: keyCombo.metaKey,
|
305
|
+
ctrlKey: keyCombo.ctrlKey,
|
306
|
+
keyCode: rangeI,
|
307
|
+
jwertyCombo: String(jwertyCodeFragment)
|
308
|
+
});
|
309
|
+
|
310
|
+
}
|
311
|
+
keyCombo.keyCode = rangeI;
|
312
|
+
// Inject either keyCode or ctrl/meta/shift/altKey into keyCombo
|
313
|
+
} else {
|
314
|
+
keyCombo.keyCode = 0;
|
315
|
+
}
|
316
|
+
}
|
317
|
+
optionals.push(keyCombo);
|
318
|
+
|
319
|
+
}
|
320
|
+
this[i] = optionals;
|
321
|
+
}
|
322
|
+
this.length = i;
|
323
|
+
return this;
|
324
|
+
}
|
325
|
+
|
326
|
+
var jwerty = exports.jwerty = {
|
327
|
+
/**
|
328
|
+
* jwerty.event
|
329
|
+
*
|
330
|
+
* `jwerty.event` will return a function, which expects the first
|
331
|
+
* argument to be a key event. When the key event matches `jwertyCode`,
|
332
|
+
* `callbackFunction` is fired. `jwerty.event` is used by `jwerty.key`
|
333
|
+
* to bind the function it returns. `jwerty.event` is useful for
|
334
|
+
* attaching to your own event listeners. It can be used as a decorator
|
335
|
+
* method to encapsulate functionality that you only want to fire after
|
336
|
+
* a specific key combo. If `callbackContext` is specified then it will
|
337
|
+
* be supplied as `callbackFunction`'s context - in other words, the
|
338
|
+
* keyword `this` will be set to `callbackContext` inside the
|
339
|
+
* `callbackFunction` function.
|
340
|
+
*
|
341
|
+
* @param {Mixed} jwertyCode can be an array, or string of key
|
342
|
+
* combinations, which includes optinals and or sequences
|
343
|
+
* @param {Function} callbackFucntion is a function (or boolean) which
|
344
|
+
* is fired when jwertyCode is matched. Return false to
|
345
|
+
* preventDefault()
|
346
|
+
* @param {Object} callbackContext (Optional) The context to call
|
347
|
+
* `callback` with (i.e this)
|
348
|
+
*
|
349
|
+
*/
|
350
|
+
event: function (jwertyCode, callbackFunction, callbackContext /*? this */) {
|
351
|
+
|
352
|
+
// Construct a function out of callbackFunction, if it is a boolean.
|
353
|
+
if (realTypeOf(callbackFunction, 'boolean')) {
|
354
|
+
var bool = callbackFunction;
|
355
|
+
callbackFunction = function () { return bool; };
|
356
|
+
}
|
357
|
+
|
358
|
+
jwertyCode = new JwertyCode(jwertyCode);
|
359
|
+
|
360
|
+
// Initialise in-scope vars.
|
361
|
+
var i = 0,
|
362
|
+
c = jwertyCode.length - 1,
|
363
|
+
returnValue,
|
364
|
+
jwertyCodeIs;
|
365
|
+
|
366
|
+
// This is the event listener function that gets returned...
|
367
|
+
return function (event) {
|
368
|
+
|
369
|
+
// if jwertyCodeIs returns truthy (string)...
|
370
|
+
if ((jwertyCodeIs = jwerty.is(jwertyCode, event, i))) {
|
371
|
+
// ... and this isn't the last key in the sequence,
|
372
|
+
// incriment the key in sequence to check.
|
373
|
+
if (i < c) {
|
374
|
+
++i;
|
375
|
+
return;
|
376
|
+
// ... and this is the last in the sequence (or the only
|
377
|
+
// one in sequence), then fire the callback
|
378
|
+
} else {
|
379
|
+
returnValue = callbackFunction.call(
|
380
|
+
callbackContext || this, event, jwertyCodeIs);
|
381
|
+
|
382
|
+
// If the callback returned false, then we should run
|
383
|
+
// preventDefault();
|
384
|
+
if (returnValue === false) event.preventDefault();
|
385
|
+
|
386
|
+
// Reset i for the next sequence to fire.
|
387
|
+
i = 0;
|
388
|
+
return;
|
389
|
+
}
|
390
|
+
}
|
391
|
+
|
392
|
+
// If the event didn't hit this time, we should reset i to 0,
|
393
|
+
// that is, unless this combo was the first in the sequence,
|
394
|
+
// in which case we should reset i to 1.
|
395
|
+
i = jwerty.is(jwertyCode, event) ? 1 : 0;
|
396
|
+
};
|
397
|
+
},
|
398
|
+
|
399
|
+
/**
|
400
|
+
* jwerty.is
|
401
|
+
*
|
402
|
+
* `jwerty.is` will return a boolean value, based on if `event` matches
|
403
|
+
* `jwertyCode`. `jwerty.is` is called by `jwerty.event` to check
|
404
|
+
* whether or not to fire the callback. `event` can be a DOM event, or
|
405
|
+
* a jQuery/Zepto/Ender manufactured event. The properties of
|
406
|
+
* `jwertyCode` (speficially ctrlKey, altKey, metaKey, shiftKey and
|
407
|
+
* keyCode) should match `jwertyCode`'s properties - if they do, then
|
408
|
+
* `jwerty.is` will return `true`. If they don't, `jwerty.is` will
|
409
|
+
* return `false`.
|
410
|
+
*
|
411
|
+
* @param {Mixed} jwertyCode can be an array, or string of key
|
412
|
+
* combinations, which includes optinals and or sequences
|
413
|
+
* @param {KeyboardEvent} event is the KeyboardEvent to assert against
|
414
|
+
* @param {Integer} i (Optional) checks the `i` key in jwertyCode
|
415
|
+
* sequence
|
416
|
+
*
|
417
|
+
*/
|
418
|
+
is: function (jwertyCode, event, i /*? 0*/) {
|
419
|
+
jwertyCode = new JwertyCode(jwertyCode);
|
420
|
+
// Default `i` to 0
|
421
|
+
i = i || 0;
|
422
|
+
// We are only interested in `i` of jwertyCode;
|
423
|
+
jwertyCode = jwertyCode[i];
|
424
|
+
// jQuery stores the *real* event in `originalEvent`, which we use
|
425
|
+
// because it does annoything stuff to `metaKey`
|
426
|
+
event = event.originalEvent || event;
|
427
|
+
|
428
|
+
// We'll look at each optional in this jwertyCode sequence...
|
429
|
+
var n = jwertyCode.length,
|
430
|
+
returnValue = false;
|
431
|
+
|
432
|
+
// Loop through each fragment of jwertyCode
|
433
|
+
while (n--) {
|
434
|
+
returnValue = jwertyCode[n].jwertyCombo;
|
435
|
+
// For each property in the jwertyCode object, compare to `event`
|
436
|
+
for (var p in jwertyCode[n]) {
|
437
|
+
// ...except for jwertyCode.jwertyCombo...
|
438
|
+
if (p !== 'jwertyCombo' && event[p] != jwertyCode[n][p]) returnValue = false;
|
439
|
+
}
|
440
|
+
// If this jwertyCode optional wasn't falsey, then we can return early.
|
441
|
+
if (returnValue !== false) return returnValue;
|
442
|
+
}
|
443
|
+
return returnValue;
|
444
|
+
},
|
445
|
+
|
446
|
+
/**
|
447
|
+
* jwerty.key
|
448
|
+
*
|
449
|
+
* `jwerty.key` will attach an event listener and fire
|
450
|
+
* `callbackFunction` when `jwertyCode` matches. The event listener is
|
451
|
+
* attached to `document`, meaning it will listen for any key events
|
452
|
+
* on the page (a global shortcut listener). If `callbackContext` is
|
453
|
+
* specified then it will be supplied as `callbackFunction`'s context
|
454
|
+
* - in other words, the keyword `this` will be set to
|
455
|
+
* `callbackContext` inside the `callbackFunction` function.
|
456
|
+
*
|
457
|
+
* @param {Mixed} jwertyCode can be an array, or string of key
|
458
|
+
* combinations, which includes optinals and or sequences
|
459
|
+
* @param {Function} callbackFunction is a function (or boolean) which
|
460
|
+
* is fired when jwertyCode is matched. Return false to
|
461
|
+
* preventDefault()
|
462
|
+
* @param {Object} callbackContext (Optional) The context to call
|
463
|
+
* `callback` with (i.e this)
|
464
|
+
* @param {Mixed} selector can be a string, jQuery/Zepto/Ender object,
|
465
|
+
* or an HTML*Element on which to bind the eventListener
|
466
|
+
* @param {Mixed} selectorContext can be a string, jQuery/Zepto/Ender
|
467
|
+
* object, or an HTML*Element on which to scope the selector
|
468
|
+
*
|
469
|
+
*/
|
470
|
+
key: function (jwertyCode, callbackFunction, callbackContext /*? this */, selector /*? document */, selectorContext /*? body */) {
|
471
|
+
// Because callbackContext is optional, we should check if the
|
472
|
+
// `callbackContext` is a string or element, and if it is, then the
|
473
|
+
// function was called without a context, and `callbackContext` is
|
474
|
+
// actually `selector`
|
475
|
+
var realSelector = realTypeOf(callbackContext, 'element') || realTypeOf(callbackContext, 'string') ? callbackContext : selector,
|
476
|
+
// If `callbackContext` is undefined, or if we skipped it (and
|
477
|
+
// therefore it is `realSelector`), set context to `global`.
|
478
|
+
realcallbackContext = realSelector === callbackContext ? global : callbackContext,
|
479
|
+
// Finally if we did skip `callbackContext`, then shift
|
480
|
+
// `selectorContext` to the left (take it from `selector`)
|
481
|
+
realSelectorContext = realSelector === callbackContext ? selector : selectorContext;
|
482
|
+
|
483
|
+
// If `realSelector` is already a jQuery/Zepto/Ender/DOM element,
|
484
|
+
// then just use it neat, otherwise find it in DOM using $$()
|
485
|
+
$b(
|
486
|
+
realTypeOf(realSelector, 'element') ? realSelector : $$(realSelector, realSelectorContext),
|
487
|
+
jwerty.event(jwertyCode, callbackFunction, realcallbackContext)
|
488
|
+
);
|
489
|
+
},
|
490
|
+
|
491
|
+
/**
|
492
|
+
* jwerty.fire
|
493
|
+
*
|
494
|
+
* `jwerty.fire` will construct a keyup event to fire, based on
|
495
|
+
* `jwertyCode`. The event will be fired against `selector`.
|
496
|
+
* `selectorContext` is used to search for `selector` within
|
497
|
+
* `selectorContext`, similar to jQuery's
|
498
|
+
* `$('selector', 'context')`.
|
499
|
+
*
|
500
|
+
* @param {Mixed} jwertyCode can be an array, or string of key
|
501
|
+
* combinations, which includes optinals and or sequences
|
502
|
+
* @param {Mixed} selector can be a string, jQuery/Zepto/Ender object,
|
503
|
+
* or an HTML*Element on which to bind the eventListener
|
504
|
+
* @param {Mixed} selectorContext can be a string, jQuery/Zepto/Ender
|
505
|
+
* object, or an HTML*Element on which to scope the selector
|
506
|
+
*
|
507
|
+
*/
|
508
|
+
fire: function (jwertyCode, selector /*? document */, selectorContext /*? body */, i) {
|
509
|
+
jwertyCode = new JwertyCode(jwertyCode);
|
510
|
+
var realI = realTypeOf(selectorContext, 'number') ? selectorContext : i;
|
511
|
+
|
512
|
+
// If `realSelector` is already a jQuery/Zepto/Ender/DOM element,
|
513
|
+
// then just use it neat, otherwise find it in DOM using $$()
|
514
|
+
$f(
|
515
|
+
realTypeOf(selector, 'element') ? selector : $$(selector, selectorContext),
|
516
|
+
jwertyCode[realI || 0][0]
|
517
|
+
);
|
518
|
+
},
|
519
|
+
|
520
|
+
KEYS: _keys
|
521
|
+
};
|
522
|
+
|
523
|
+
}(this, (typeof module !== 'undefined' && module.exports ? module.exports : this)));
|
@@ -0,0 +1,7 @@
|
|
1
|
+
/**
|
2
|
+
* Prism: Lightweight, robust, elegant syntax highlighting
|
3
|
+
* MIT license http://www.opensource.org/licenses/mit-license.php/
|
4
|
+
* @author Lea Verou http://lea.verou.me
|
5
|
+
*/(function(){var e=/\blang(?:uage)?-(?!\*)(\w+)\b/i,t=self.Prism={util:{type:function(e){return Object.prototype.toString.call(e).match(/\[object (\w+)\]/)[1]},clone:function(e){var n=t.util.type(e);switch(n){case"Object":var r={};for(var i in e)e.hasOwnProperty(i)&&(r[i]=t.util.clone(e[i]));return r;case"Array":return e.slice()}return e}},languages:{extend:function(e,n){var r=t.util.clone(t.languages[e]);for(var i in n)r[i]=n[i];return r},insertBefore:function(e,n,r,i){i=i||t.languages;var s=i[e],o={};for(var u in s)if(s.hasOwnProperty(u)){if(u==n)for(var a in r)r.hasOwnProperty(a)&&(o[a]=r[a]);o[u]=s[u]}return i[e]=o},DFS:function(e,n){for(var r in e){n.call(e,r,e[r]);t.util.type(e)==="Object"&&t.languages.DFS(e[r],n)}}},highlightAll:function(e,n){var r=document.querySelectorAll('code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code');for(var i=0,s;s=r[i++];)t.highlightElement(s,e===!0,n)},highlightElement:function(r,i,s){var o,u,a=r;while(a&&!e.test(a.className))a=a.parentNode;if(a){o=(a.className.match(e)||[,""])[1];u=t.languages[o]}if(!u)return;r.className=r.className.replace(e,"").replace(/\s+/g," ")+" language-"+o;a=r.parentNode;/pre/i.test(a.nodeName)&&(a.className=a.className.replace(e,"").replace(/\s+/g," ")+" language-"+o);var f=r.textContent;if(!f)return;f=f.replace(/&/g,"&").replace(/</g,"<").replace(/\u00a0/g," ");var l={element:r,language:o,grammar:u,code:f};t.hooks.run("before-highlight",l);if(i&&self.Worker){var c=new Worker(t.filename);c.onmessage=function(e){l.highlightedCode=n.stringify(JSON.parse(e.data),o);t.hooks.run("before-insert",l);l.element.innerHTML=l.highlightedCode;s&&s.call(l.element);t.hooks.run("after-highlight",l)};c.postMessage(JSON.stringify({language:l.language,code:l.code}))}else{l.highlightedCode=t.highlight(l.code,l.grammar,l.language);t.hooks.run("before-insert",l);l.element.innerHTML=l.highlightedCode;s&&s.call(r);t.hooks.run("after-highlight",l)}},highlight:function(e,r,i){return n.stringify(t.tokenize(e,r),i)},tokenize:function(e,n,r){var i=t.Token,s=[e],o=n.rest;if(o){for(var u in o)n[u]=o[u];delete n.rest}e:for(var u in n){if(!n.hasOwnProperty(u)||!n[u])continue;var a=n[u],f=a.inside,l=!!a.lookbehind,c=0;a=a.pattern||a;for(var h=0;h<s.length;h++){var p=s[h];if(s.length>e.length)break e;if(p instanceof i)continue;a.lastIndex=0;var d=a.exec(p);if(d){l&&(c=d[1].length);var v=d.index-1+c,d=d[0].slice(c),m=d.length,g=v+m,y=p.slice(0,v+1),b=p.slice(g+1),w=[h,1];y&&w.push(y);var E=new i(u,f?t.tokenize(d,f):d);w.push(E);b&&w.push(b);Array.prototype.splice.apply(s,w)}}}return s},hooks:{all:{},add:function(e,n){var r=t.hooks.all;r[e]=r[e]||[];r[e].push(n)},run:function(e,n){var r=t.hooks.all[e];if(!r||!r.length)return;for(var i=0,s;s=r[i++];)s(n)}}},n=t.Token=function(e,t){this.type=e;this.content=t};n.stringify=function(e,r,i){if(typeof e=="string")return e;if(Object.prototype.toString.call(e)=="[object Array]")return e.map(function(t){return n.stringify(t,r,e)}).join("");var s={type:e.type,content:n.stringify(e.content,r,i),tag:"span",classes:["token",e.type],attributes:{},language:r,parent:i};s.type=="comment"&&(s.attributes.spellcheck="true");t.hooks.run("wrap",s);var o="";for(var u in s.attributes)o+=u+'="'+(s.attributes[u]||"")+'"';return"<"+s.tag+' class="'+s.classes.join(" ")+'" '+o+">"+s.content+"</"+s.tag+">"};if(!self.document){self.addEventListener("message",function(e){var n=JSON.parse(e.data),r=n.language,i=n.code;self.postMessage(JSON.stringify(t.tokenize(i,t.languages[r])));self.close()},!1);return}var r=document.getElementsByTagName("script");r=r[r.length-1];if(r){t.filename=r.src;document.addEventListener&&!r.hasAttribute("data-manual")&&document.addEventListener("DOMContentLoaded",t.highlightAll)}})();;
|
6
|
+
Prism.languages.markup={comment:/<!--[\w\W]*?-->/g,prolog:/<\?.+?\?>/,doctype:/<!DOCTYPE.+?>/,cdata:/<!\[CDATA\[[\w\W]*?]]>/i,tag:{pattern:/<\/?[\w:-]+\s*(?:\s+[\w:-]+(?:=(?:("|')(\\?[\w\W])*?\1|\w+))?\s*)*\/?>/gi,inside:{tag:{pattern:/^<\/?[\w:-]+/i,inside:{punctuation:/^<\/?/,namespace:/^[\w-]+?:/}},"attr-value":{pattern:/=(?:('|")[\w\W]*?(\1)|[^\s>]+)/gi,inside:{punctuation:/=|>|"/g}},punctuation:/\/?>/g,"attr-name":{pattern:/[\w:-]+/g,inside:{namespace:/^[\w-]+?:/}}}},entity:/&#?[\da-z]{1,8};/gi};Prism.hooks.add("wrap",function(e){e.type==="entity"&&(e.attributes.title=e.content.replace(/&/,"&"))});;
|
7
|
+
Prism.languages.css={comment:/\/\*[\w\W]*?\*\//g,atrule:{pattern:/@[\w-]+?.*?(;|(?=\s*{))/gi,inside:{punctuation:/[;:]/g}},url:/url\((["']?).*?\1\)/gi,selector:/[^\{\}\s][^\{\};]*(?=\s*\{)/g,property:/(\b|\B)[\w-]+(?=\s*:)/ig,string:/("|')(\\?.)*?\1/g,important:/\B!important\b/gi,ignore:/&(lt|gt|amp);/gi,punctuation:/[\{\};:]/g};Prism.languages.markup&&Prism.languages.insertBefore("markup","tag",{style:{pattern:/(<|<)style[\w\W]*?(>|>)[\w\W]*?(<|<)\/style(>|>)/ig,inside:{tag:{pattern:/(<|<)style[\w\W]*?(>|>)|(<|<)\/style(>|>)/ig,inside:Prism.languages.markup.tag.inside},rest:Prism.languages.css}}});;
|
@@ -0,0 +1,7 @@
|
|
1
|
+
/*!
|
2
|
+
* typeahead.js 0.10.1
|
3
|
+
* https://github.com/twitter/typeahead.js
|
4
|
+
* Copyright 2013 Twitter, Inc. and other contributors; Licensed MIT
|
5
|
+
*/
|
6
|
+
|
7
|
+
!function(a){var b={isMsie:function(){return/(msie|trident)/i.test(navigator.userAgent)?navigator.userAgent.match(/(msie |rv:)(\d+(.\d+)?)/i)[2]:!1},isBlankString:function(a){return!a||/^\s*$/.test(a)},escapeRegExChars:function(a){return a.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")},isString:function(a){return"string"==typeof a},isNumber:function(a){return"number"==typeof a},isArray:a.isArray,isFunction:a.isFunction,isObject:a.isPlainObject,isUndefined:function(a){return"undefined"==typeof a},bind:a.proxy,each:function(b,c){function d(a,b){return c(b,a)}a.each(b,d)},map:a.map,filter:a.grep,every:function(b,c){var d=!0;return b?(a.each(b,function(a,e){return(d=c.call(null,e,a,b))?void 0:!1}),!!d):d},some:function(b,c){var d=!1;return b?(a.each(b,function(a,e){return(d=c.call(null,e,a,b))?!1:void 0}),!!d):d},mixin:a.extend,getUniqueId:function(){var a=0;return function(){return a++}}(),templatify:function(b){function c(){return String(b)}return a.isFunction(b)?b:c},defer:function(a){setTimeout(a,0)},debounce:function(a,b,c){var d,e;return function(){var f,g,h=this,i=arguments;return f=function(){d=null,c||(e=a.apply(h,i))},g=c&&!d,clearTimeout(d),d=setTimeout(f,b),g&&(e=a.apply(h,i)),e}},throttle:function(a,b){var c,d,e,f,g,h;return g=0,h=function(){g=new Date,e=null,f=a.apply(c,d)},function(){var i=new Date,j=b-(i-g);return c=this,d=arguments,0>=j?(clearTimeout(e),e=null,g=i,f=a.apply(c,d)):e||(e=setTimeout(h,j)),f}},noop:function(){}},c="0.10.1",d=function(){function a(a){this.maxSize=a||100,this.size=0,this.hash={},this.list=new c}function c(){this.head=this.tail=null}function d(a,b){this.key=a,this.val=b,this.prev=this.next=null}return b.mixin(a.prototype,{set:function(a,b){var c,e=this.list.tail;this.size>=this.maxSize&&(this.list.remove(e),delete this.hash[e.key]),(c=this.hash[a])?(c.val=b,this.list.moveToFront(c)):(c=new d(a,b),this.list.add(c),this.hash[a]=c,this.size++)},get:function(a){var b=this.hash[a];return b?(this.list.moveToFront(b),b.val):void 0}}),b.mixin(c.prototype,{add:function(a){this.head&&(a.next=this.head,this.head.prev=a),this.head=a,this.tail=this.tail||a},remove:function(a){a.prev?a.prev.next=a.next:this.head=a.next,a.next?a.next.prev=a.prev:this.tail=a.prev},moveToFront:function(a){this.remove(a),this.add(a)}}),a}(this),e=function(){function a(a){this.prefix=["__",a,"__"].join(""),this.ttlKey="__ttl__",this.keyMatcher=new RegExp("^"+this.prefix)}function c(){return(new Date).getTime()}function d(a){return JSON.stringify(b.isUndefined(a)?null:a)}function e(a){return JSON.parse(a)}var f,g;try{f=window.localStorage,f.setItem("~~~","!"),f.removeItem("~~~")}catch(h){f=null}return g=f&&window.JSON?{_prefix:function(a){return this.prefix+a},_ttlKey:function(a){return this._prefix(a)+this.ttlKey},get:function(a){return this.isExpired(a)&&this.remove(a),e(f.getItem(this._prefix(a)))},set:function(a,e,g){return b.isNumber(g)?f.setItem(this._ttlKey(a),d(c()+g)):f.removeItem(this._ttlKey(a)),f.setItem(this._prefix(a),d(e))},remove:function(a){return f.removeItem(this._ttlKey(a)),f.removeItem(this._prefix(a)),this},clear:function(){var a,b,c=[],d=f.length;for(a=0;d>a;a++)(b=f.key(a)).match(this.keyMatcher)&&c.push(b.replace(this.keyMatcher,""));for(a=c.length;a--;)this.remove(c[a]);return this},isExpired:function(a){var d=e(f.getItem(this._ttlKey(a)));return b.isNumber(d)&&c()>d?!0:!1}}:{get:b.noop,set:b.noop,remove:b.noop,clear:b.noop,isExpired:b.noop},b.mixin(a.prototype,g),a}(),f=function(){function c(b){b=b||{},this._send=b.transport?e(b.transport):a.ajax,this._get=b.rateLimiter?b.rateLimiter(this._get):this._get}function e(c){return function(d,e){function f(a){b.defer(function(){h.resolve(a)})}function g(a){b.defer(function(){h.reject(a)})}var h=a.Deferred();return c(d,e,f,g),h}}var f=0,g={},h=6,i=new d(10);return c.setMaxPendingRequests=function(a){h=a},c.resetCache=function(){i=new d(10)},b.mixin(c.prototype,{_get:function(a,b,c){function d(b){c&&c(b),i.set(a,b)}function e(){f--,delete g[a],k.onDeckRequestArgs&&(k._get.apply(k,k.onDeckRequestArgs),k.onDeckRequestArgs=null)}var j,k=this;(j=g[a])?j.done(d):h>f?(f++,g[a]=this._send(a,b).done(d).always(e)):this.onDeckRequestArgs=[].slice.call(arguments,0)},get:function(a,c,d){var e;return b.isFunction(c)&&(d=c,c={}),(e=i.get(a))?b.defer(function(){d&&d(e)}):this._get(a,c,d),!!e}}),c}(),g=function(){function c(b){b=b||{},b.datumTokenizer&&b.queryTokenizer||a.error("datumTokenizer and queryTokenizer are both required"),this.datumTokenizer=b.datumTokenizer,this.queryTokenizer=b.queryTokenizer,this.datums=[],this.trie=e()}function d(a){return a=b.filter(a,function(a){return!!a}),a=b.map(a,function(a){return a.toLowerCase()})}function e(){return{ids:[],children:{}}}function f(a){for(var b={},c=[],d=0;d<a.length;d++)b[a[d]]||(b[a[d]]=!0,c.push(a[d]));return c}function g(a,b){function c(a,b){return a-b}var d=0,e=0,f=[];for(a=a.sort(c),b=b.sort(c);d<a.length&&e<b.length;)a[d]<b[e]?d++:a[d]>b[e]?e++:(f.push(a[d]),d++,e++);return f}return b.mixin(c.prototype,{bootstrap:function(a){this.datums=a.datums,this.trie=a.trie},add:function(a){var c=this;a=b.isArray(a)?a:[a],b.each(a,function(a){var f,g;f=c.datums.push(a)-1,g=d(c.datumTokenizer(a)),b.each(g,function(a){var b,d,g;for(b=c.trie,d=a.split("");g=d.shift();)b=b.children[g]||(b.children[g]=e()),b.ids.push(f)})})},get:function(a){var c,e,h=this;return c=d(this.queryTokenizer(a)),b.each(c,function(a){var b,c,d,f;if(e&&0===e.length)return!1;for(b=h.trie,c=a.split("");b&&(d=c.shift());)b=b.children[d];return b&&0===c.length?(f=b.ids.slice(0),void(e=e?g(e,f):f)):(e=[],!1)}),e?b.map(f(e),function(a){return h.datums[a]}):[]},serialize:function(){return{datums:this.datums,trie:this.trie}}}),c}(),h=function(){function d(a){var c=a.local||null;return b.isFunction(c)&&(c=c.call(null)),c}function e(d){var e,f;return f={url:null,thumbprint:"",ttl:864e5,filter:null,ajax:{}},(e=d.prefetch||null)&&(e=b.isString(e)?{url:e}:e,e=b.mixin(f,e),e.thumbprint=c+e.thumbprint,e.ajax.type=e.ajax.type||"GET",e.ajax.dataType=e.ajax.dataType||"json",!e.url&&a.error("prefetch requires url to be set")),e}function f(c){function d(a){return function(c){return b.debounce(c,a)}}function e(a){return function(c){return b.throttle(c,a)}}var f,g;return g={url:null,wildcard:"%QUERY",replace:null,rateLimitBy:"debounce",rateLimitWait:300,send:null,filter:null,ajax:{}},(f=c.remote||null)&&(f=b.isString(f)?{url:f}:f,f=b.mixin(g,f),f.rateLimiter=/^throttle$/i.test(f.rateLimitBy)?e(f.rateLimitWait):d(f.rateLimitWait),f.ajax.type=f.ajax.type||"GET",f.ajax.dataType=f.ajax.dataType||"json",delete f.rateLimitBy,delete f.rateLimitWait,!f.url&&a.error("remote requires url to be set")),f}return{local:d,prefetch:e,remote:f}}(),i=(window.Bloodhound=function(){function c(b){b&&(b.local||b.prefetch||b.remote)||a.error("one of local, prefetch, or remote is required"),this.limit=b.limit||5,this.sorter=d(b.sorter),this.dupDetector=b.dupDetector||i,this.local=h.local(b),this.prefetch=h.prefetch(b),this.remote=h.remote(b),this.cacheKey=this.prefetch?this.prefetch.cacheKey||this.prefetch.url:null,this.index=new g({datumTokenizer:b.datumTokenizer,queryTokenizer:b.queryTokenizer}),this.storage=this.cacheKey?new e(this.cacheKey):null}function d(a){function c(b){return b.sort(a)}function d(a){return a}return b.isFunction(a)?c:d}function i(){return!1}var j;return j={data:"data",protocol:"protocol",thumbprint:"thumbprint"},c.tokenizers={whitespace:function(a){return a.split(/\s+/)},nonword:function(a){return a.split(/\W+/)}},b.mixin(c.prototype,{_loadPrefetch:function(b){function c(a){var c;c=b.filter?b.filter(a):a,f.add(c),f._saveToStorage(f.index.serialize(),b.thumbprint,b.ttl)}var d,e,f=this;return(d=this._readFromStorage(b.thumbprint))?(this.index.bootstrap(d),e=a.Deferred().resolve()):e=a.ajax(b.url,b.ajax).done(c),e},_getFromRemote:function(a,b){function c(a){var c=f.remote.filter?f.remote.filter(a):a;b(c)}var d,e,f=this;return a=a||"",e=encodeURIComponent(a),d=this.remote.replace?this.remote.replace(this.remote.url,a):this.remote.url.replace(this.remote.wildcard,e),this.transport.get(d,this.remote.ajax,c)},_saveToStorage:function(a,b,c){this.storage&&(this.storage.set(j.data,a,c),this.storage.set(j.protocol,location.protocol,c),this.storage.set(j.thumbprint,b,c))},_readFromStorage:function(a){var b,c={};return this.storage&&(c.data=this.storage.get(j.data),c.protocol=this.storage.get(j.protocol),c.thumbprint=this.storage.get(j.thumbprint)),b=c.thumbprint!==a||c.protocol!==location.protocol,c.data&&!b?c.data:null},initialize:function(){function b(){d.add(d.local)}var c,d=this;return c=this.prefetch?this._loadPrefetch(this.prefetch):a.Deferred().resolve(),this.local&&c.done(b),this.transport=this.remote?new f(this.remote):null,this.initialize=function(){return c.promise()},c.promise()},add:function(a){this.index.add(a)},get:function(a,c){function d(a){var d=e.slice(0);b.each(a,function(a){var c;return c=b.some(d,function(b){return f.dupDetector(a,b)}),!c&&d.push(a),d.length<f.limit}),c&&c(f.sorter(d))}var e,f=this,g=!1;e=this.index.get(a),e=this.sorter(e).slice(0,this.limit),e.length<this.limit&&this.transport&&(g=this._getFromRemote(a,d)),!g&&c&&c(e)},ttAdapter:function(){return b.bind(this.get,this)}}),c}(),{wrapper:'<span class="twitter-typeahead"></span>',dropdown:'<span class="tt-dropdown-menu"></span>',dataset:'<div class="tt-dataset-%CLASS%"></div>',suggestions:'<span class="tt-suggestions"></span>',suggestion:'<div class="tt-suggestion">%BODY%</div>'}),j={wrapper:{position:"relative",display:"inline-block"},hint:{position:"absolute",top:"0",left:"0",borderColor:"transparent",boxShadow:"none"},input:{position:"relative",verticalAlign:"top",backgroundColor:"transparent"},inputWithNoHint:{position:"relative",verticalAlign:"top"},dropdown:{position:"absolute",top:"100%",left:"0",zIndex:"100",display:"none"},suggestions:{display:"block"},suggestion:{whiteSpace:"nowrap",cursor:"pointer"},suggestionChild:{whiteSpace:"normal"},ltr:{left:"0",right:"auto"},rtl:{left:"auto",right:" 0"}};b.isMsie()&&b.mixin(j.input,{backgroundImage:"url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)"}),b.isMsie()&&b.isMsie()<=7&&b.mixin(j.input,{marginTop:"-1px"});var k=function(){function c(b){b&&b.el||a.error("EventBus initialized without el"),this.$el=a(b.el)}var d="typeahead:";return b.mixin(c.prototype,{trigger:function(a){var b=[].slice.call(arguments,1);this.$el.trigger(d+a,b)}}),c}(),l=function(){function a(a,b,c,d){var e;if(!c)return this;for(b=b.split(i),c=d?h(c,d):c,this._callbacks=this._callbacks||{};e=b.shift();)this._callbacks[e]=this._callbacks[e]||{sync:[],async:[]},this._callbacks[e][a].push(c);return this}function b(b,c,d){return a.call(this,"async",b,c,d)}function c(b,c,d){return a.call(this,"sync",b,c,d)}function d(a){var b;if(!this._callbacks)return this;for(a=a.split(i);b=a.shift();)delete this._callbacks[b];return this}function e(a){var b,c,d,e,g;if(!this._callbacks)return this;for(a=a.split(i),d=[].slice.call(arguments,1);(b=a.shift())&&(c=this._callbacks[b]);)e=f(c.sync,this,[b].concat(d)),g=f(c.async,this,[b].concat(d)),e()&&j(g);return this}function f(a,b,c){function d(){for(var d,e=0;!d&&e<a.length;e+=1)d=a[e].apply(b,c)===!1;return!d}return d}function g(){var a;return a=window.setImmediate?function(a){setImmediate(function(){a()})}:function(a){setTimeout(function(){a()},0)}}function h(a,b){return a.bind?a.bind(b):function(){a.apply(b,[].slice.call(arguments,0))}}var i=/\s+/,j=g();return{onSync:c,onAsync:b,off:d,trigger:e}}(),m=function(a){function c(a,c,d){for(var e,f=[],g=0;g<a.length;g++)f.push(b.escapeRegExChars(a[g]));return e=d?"\\b("+f.join("|")+")\\b":"("+f.join("|")+")",c?new RegExp(e):new RegExp(e,"i")}var d={node:null,pattern:null,tagName:"strong",className:null,wordsOnly:!1,caseSensitive:!1};return function(e){function f(b){var c,d;return(c=h.exec(b.data))&&(wrapperNode=a.createElement(e.tagName),e.className&&(wrapperNode.className=e.className),d=b.splitText(c.index),d.splitText(c[0].length),wrapperNode.appendChild(d.cloneNode(!0)),b.parentNode.replaceChild(wrapperNode,d)),!!c}function g(a,b){for(var c,d=3,e=0;e<a.childNodes.length;e++)c=a.childNodes[e],c.nodeType===d?e+=b(c)?1:0:g(c,b)}var h;e=b.mixin({},d,e),e.node&&e.pattern&&(e.pattern=b.isArray(e.pattern)?e.pattern:[e.pattern],h=c(e.pattern,e.caseSensitive,e.wordsOnly),g(e.node,f))}}(window.document),n=function(){function c(c){var e,f,h,i,j=this;c=c||{},c.input||a.error("input is missing"),e=b.bind(this._onBlur,this),f=b.bind(this._onFocus,this),h=b.bind(this._onKeydown,this),i=b.bind(this._onInput,this),this.$hint=a(c.hint),this.$input=a(c.input).on("blur.tt",e).on("focus.tt",f).on("keydown.tt",h),0===this.$hint.length&&(this.setHintValue=this.getHintValue=this.clearHint=b.noop),b.isMsie()?this.$input.on("keydown.tt keypress.tt cut.tt paste.tt",function(a){g[a.which||a.keyCode]||b.defer(b.bind(j._onInput,j,a))}):this.$input.on("input.tt",i),this.query=this.$input.val(),this.$overflowHelper=d(this.$input)}function d(b){return a('<pre aria-hidden="true"></pre>').css({position:"absolute",visibility:"hidden",whiteSpace:"nowrap",fontFamily:b.css("font-family"),fontSize:b.css("font-size"),fontStyle:b.css("font-style"),fontVariant:b.css("font-variant"),fontWeight:b.css("font-weight"),wordSpacing:b.css("word-spacing"),letterSpacing:b.css("letter-spacing"),textIndent:b.css("text-indent"),textRendering:b.css("text-rendering"),textTransform:b.css("text-transform")}).insertAfter(b)}function e(a,b){return c.normalizeQuery(a)===c.normalizeQuery(b)}function f(a){return a.altKey||a.ctrlKey||a.metaKey||a.shiftKey}var g;return g={9:"tab",27:"esc",37:"left",39:"right",13:"enter",38:"up",40:"down"},c.normalizeQuery=function(a){return(a||"").replace(/^\s*/g,"").replace(/\s{2,}/g," ")},b.mixin(c.prototype,l,{_onBlur:function(){this.resetInputValue(),this.trigger("blurred")},_onFocus:function(){this.trigger("focused")},_onKeydown:function(a){var b=g[a.which||a.keyCode];this._managePreventDefault(b,a),b&&this._shouldTrigger(b,a)&&this.trigger(b+"Keyed",a)},_onInput:function(){this._checkInputValue()},_managePreventDefault:function(a,b){var c,d,e;switch(a){case"tab":d=this.getHintValue(),e=this.getInputValue(),c=d&&d!==e&&!f(b);break;case"up":case"down":c=!f(b);break;default:c=!1}c&&b.preventDefault()},_shouldTrigger:function(a,b){var c;switch(a){case"tab":c=!f(b);break;default:c=!0}return c},_checkInputValue:function(){var a,b,c;a=this.getInputValue(),b=e(a,this.query),c=b?this.query.length!==a.length:!1,b?c&&this.trigger("whitespaceChanged",this.query):this.trigger("queryChanged",this.query=a)},focus:function(){this.$input.focus()},blur:function(){this.$input.blur()},getQuery:function(){return this.query},setQuery:function(a){this.query=a},getInputValue:function(){return this.$input.val()},setInputValue:function(a,b){this.$input.val(a),!b&&this._checkInputValue()},getHintValue:function(){return this.$hint.val()},setHintValue:function(a){this.$hint.val(a)},resetInputValue:function(){this.$input.val(this.query)},clearHint:function(){this.$hint.val("")},getLanguageDirection:function(){return(this.$input.css("direction")||"ltr").toLowerCase()},hasOverflow:function(){var a=this.$input.width()-2;return this.$overflowHelper.text(this.getInputValue()),this.$overflowHelper.width()>=a},isCursorAtEnd:function(){var a,c,d;return a=this.$input.val().length,c=this.$input[0].selectionStart,b.isNumber(c)?c===a:document.selection?(d=document.selection.createRange(),d.moveStart("character",-a),a===d.text.length):!0},destroy:function(){this.$hint.off(".tt"),this.$input.off(".tt"),this.$hint=this.$input=this.$overflowHelper=null}}),c}(),o=function(){function c(c){c=c||{},c.templates=c.templates||{},c.source||a.error("missing source"),c.name&&!f(c.name)&&a.error("invalid dataset name: "+c.name),this.query=null,this.highlight=!!c.highlight,this.name=c.name||b.getUniqueId(),this.source=c.source,this.displayFn=d(c.display||c.displayKey),this.templates=e(c.templates,this.displayFn),this.$el=a(i.dataset.replace("%CLASS%",this.name))}function d(a){function c(b){return b[a]}return a=a||"value",b.isFunction(a)?a:c}function e(a,c){function d(a){return"<p>"+c(a)+"</p>"}return{empty:a.empty&&b.templatify(a.empty),header:a.header&&b.templatify(a.header),footer:a.footer&&b.templatify(a.footer),suggestion:a.suggestion||d}}function f(a){return/^[_a-zA-Z0-9-]+$/.test(a)}var g="ttDataset",h="ttValue",k="ttDatum";return c.extractDatasetName=function(b){return a(b).data(g)},c.extractValue=function(b){return a(b).data(h)},c.extractDatum=function(b){return a(b).data(k)},b.mixin(c.prototype,l,{_render:function(c,d){function e(){return p.templates.empty({query:c,isEmpty:!0})}function f(){function e(b){var c,d,e;return d=p.templates.suggestion(b),e=i.suggestion.replace("%BODY%",d),c=a(e).data(g,p.name).data(h,p.displayFn(b)).data(k,b),c.children().each(function(){a(this).css(j.suggestionChild)}),c}var f,l;return f=a(i.suggestions).css(j.suggestions),l=b.map(d,e),f.append.apply(f,l),p.highlight&&m({node:f[0],pattern:c}),f}function l(){return p.templates.header({query:c,isEmpty:!o})}function n(){return p.templates.footer({query:c,isEmpty:!o})}if(this.$el){var o,p=this;this.$el.empty(),o=d&&d.length,!o&&this.templates.empty?this.$el.html(e()).prepend(p.templates.header?l():null).append(p.templates.footer?n():null):o&&this.$el.html(f()).prepend(p.templates.header?l():null).append(p.templates.footer?n():null),this.trigger("rendered")}},getRoot:function(){return this.$el},update:function(a){function b(b){a===c.query&&c._render(a,b)}var c=this;this.query=a,this.source(a,b)},clear:function(){this._render(this.query||"")},isEmpty:function(){return this.$el.is(":empty")},destroy:function(){this.$el=null}}),c}(),p=function(){function c(c){var e,f,g,h=this;c=c||{},c.menu||a.error("menu is required"),this.isOpen=!1,this.isEmpty=!0,this.datasets=b.map(c.datasets,d),e=b.bind(this._onSuggestionClick,this),f=b.bind(this._onSuggestionMouseEnter,this),g=b.bind(this._onSuggestionMouseLeave,this),this.$menu=a(c.menu).on("click.tt",".tt-suggestion",e).on("mouseenter.tt",".tt-suggestion",f).on("mouseleave.tt",".tt-suggestion",g),b.each(this.datasets,function(a){h.$menu.append(a.getRoot()),a.onSync("rendered",h._onRendered,h)})}function d(a){return new o(a)}return b.mixin(c.prototype,l,{_onSuggestionClick:function(b){this.trigger("suggestionClicked",a(b.currentTarget))},_onSuggestionMouseEnter:function(b){this._removeCursor(),this._setCursor(a(b.currentTarget),!0)},_onSuggestionMouseLeave:function(){this._removeCursor()},_onRendered:function(){function a(a){return a.isEmpty()}this.isEmpty=b.every(this.datasets,a),this.isEmpty?this._hide():this.isOpen&&this._show(),this.trigger("datasetRendered")},_hide:function(){this.$menu.hide()},_show:function(){this.$menu.css("display","block")},_getSuggestions:function(){return this.$menu.find(".tt-suggestion")},_getCursor:function(){return this.$menu.find(".tt-cursor").first()},_setCursor:function(a,b){a.first().addClass("tt-cursor"),!b&&this.trigger("cursorMoved")},_removeCursor:function(){this._getCursor().removeClass("tt-cursor")},_moveCursor:function(a){var b,c,d,e;if(this.isOpen){if(c=this._getCursor(),b=this._getSuggestions(),this._removeCursor(),d=b.index(c)+a,d=(d+1)%(b.length+1)-1,-1===d)return void this.trigger("cursorRemoved");-1>d&&(d=b.length-1),this._setCursor(e=b.eq(d)),this._ensureVisible(e)}},_ensureVisible:function(a){var b,c,d,e;b=a.position().top,c=b+a.outerHeight(!0),d=this.$menu.scrollTop(),e=this.$menu.height()+parseInt(this.$menu.css("paddingTop"),10)+parseInt(this.$menu.css("paddingBottom"),10),0>b?this.$menu.scrollTop(d+b):c>e&&this.$menu.scrollTop(d+(c-e))},close:function(){this.isOpen&&(this.isOpen=!1,this._removeCursor(),this._hide(),this.trigger("closed"))},open:function(){this.isOpen||(this.isOpen=!0,!this.isEmpty&&this._show(),this.trigger("opened"))},setLanguageDirection:function(a){this.$menu.css("ltr"===a?j.ltr:j.rtl)},moveCursorUp:function(){this._moveCursor(-1)},moveCursorDown:function(){this._moveCursor(1)},getDatumForSuggestion:function(a){var b=null;return a.length&&(b={raw:o.extractDatum(a),value:o.extractValue(a),datasetName:o.extractDatasetName(a)}),b},getDatumForCursor:function(){return this.getDatumForSuggestion(this._getCursor().first())},getDatumForTopSuggestion:function(){return this.getDatumForSuggestion(this._getSuggestions().first())},update:function(a){function c(b){b.update(a)}b.each(this.datasets,c)},empty:function(){function a(a){a.clear()}b.each(this.datasets,a),this.isEmpty=!0},isVisible:function(){return this.isOpen&&!this.isEmpty},destroy:function(){function a(a){a.destroy()}this.$menu.off(".tt"),this.$menu=null,b.each(this.datasets,a)}}),c}(),q=function(){function c(c){var e,f,g;c=c||{},c.input||a.error("missing input"),this.autoselect=!!c.autoselect,this.minLength=b.isNumber(c.minLength)?c.minLength:1,this.$node=d(c.input,c.withHint),e=this.$node.find(".tt-dropdown-menu"),f=this.$node.find(".tt-input"),g=this.$node.find(".tt-hint"),this.eventBus=c.eventBus||new k({el:f}),this.dropdown=new p({menu:e,datasets:c.datasets}).onSync("suggestionClicked",this._onSuggestionClicked,this).onSync("cursorMoved",this._onCursorMoved,this).onSync("cursorRemoved",this._onCursorRemoved,this).onSync("opened",this._onOpened,this).onSync("closed",this._onClosed,this).onAsync("datasetRendered",this._onDatasetRendered,this),this.input=new n({input:f,hint:g}).onSync("focused",this._onFocused,this).onSync("blurred",this._onBlurred,this).onSync("enterKeyed",this._onEnterKeyed,this).onSync("tabKeyed",this._onTabKeyed,this).onSync("escKeyed",this._onEscKeyed,this).onSync("upKeyed",this._onUpKeyed,this).onSync("downKeyed",this._onDownKeyed,this).onSync("leftKeyed",this._onLeftKeyed,this).onSync("rightKeyed",this._onRightKeyed,this).onSync("queryChanged",this._onQueryChanged,this).onSync("whitespaceChanged",this._onWhitespaceChanged,this),e.on("mousedown.tt",function(a){b.isMsie()&&b.isMsie()<9&&(f[0].onbeforedeactivate=function(){window.event.returnValue=!1,f[0].onbeforedeactivate=null}),a.preventDefault()})}function d(b,c){var d,f,h,k;d=a(b),f=a(i.wrapper).css(j.wrapper),h=a(i.dropdown).css(j.dropdown),k=d.clone().css(j.hint).css(e(d)),k.val("").removeData().addClass("tt-hint").removeAttr("id name placeholder").prop("disabled",!0).attr({autocomplete:"off",spellcheck:"false"}),d.data(g,{dir:d.attr("dir"),autocomplete:d.attr("autocomplete"),spellcheck:d.attr("spellcheck"),style:d.attr("style")}),d.addClass("tt-input").attr({autocomplete:"off",spellcheck:!1}).css(c?j.input:j.inputWithNoHint);try{!d.attr("dir")&&d.attr("dir","auto")}catch(l){}return d.wrap(f).parent().prepend(c?k:null).append(h)}function e(a){return{backgroundAttachment:a.css("background-attachment"),backgroundClip:a.css("background-clip"),backgroundColor:a.css("background-color"),backgroundImage:a.css("background-image"),backgroundOrigin:a.css("background-origin"),backgroundPosition:a.css("background-position"),backgroundRepeat:a.css("background-repeat"),backgroundSize:a.css("background-size")}}function f(a){var c=a.find(".tt-input");b.each(c.data(g),function(a,d){b.isUndefined(a)?c.removeAttr(d):c.attr(d,a)}),c.detach().removeData(g).removeClass("tt-input").insertAfter(a),a.remove()}var g="ttAttrs";return b.mixin(c.prototype,{_onSuggestionClicked:function(a,b){var c;(c=this.dropdown.getDatumForSuggestion(b))&&this._select(c)},_onCursorMoved:function(){var a=this.dropdown.getDatumForCursor();this.input.clearHint(),this.input.setInputValue(a.value,!0),this.eventBus.trigger("cursorchanged",a.raw,a.datasetName)},_onCursorRemoved:function(){this.input.resetInputValue(),this._updateHint()},_onDatasetRendered:function(){this._updateHint()},_onOpened:function(){this._updateHint(),this.eventBus.trigger("opened")},_onClosed:function(){this.input.clearHint(),this.eventBus.trigger("closed")},_onFocused:function(){this.dropdown.empty(),this.dropdown.open()},_onBlurred:function(){this.dropdown.close()},_onEnterKeyed:function(a,b){var c,d;c=this.dropdown.getDatumForCursor(),d=this.dropdown.getDatumForTopSuggestion(),c?(this._select(c),b.preventDefault()):this.autoselect&&d&&(this._select(d),b.preventDefault())},_onTabKeyed:function(a,b){var c;(c=this.dropdown.getDatumForCursor())?(this._select(c),b.preventDefault()):this._autocomplete()},_onEscKeyed:function(){this.dropdown.close(),this.input.resetInputValue()},_onUpKeyed:function(){var a=this.input.getQuery();!this.dropdown.isOpen&&a.length>=this.minLength&&this.dropdown.update(a),this.dropdown.open(),this.dropdown.moveCursorUp()},_onDownKeyed:function(){var a=this.input.getQuery();!this.dropdown.isOpen&&a.length>=this.minLength&&this.dropdown.update(a),this.dropdown.open(),this.dropdown.moveCursorDown()},_onLeftKeyed:function(){"rtl"===this.dir&&this._autocomplete()},_onRightKeyed:function(){"ltr"===this.dir&&this._autocomplete()},_onQueryChanged:function(a,b){this.input.clearHint(),this.dropdown.empty(),b.length>=this.minLength&&this.dropdown.update(b),this.dropdown.open(),this._setLanguageDirection()},_onWhitespaceChanged:function(){this._updateHint(),this.dropdown.open()},_setLanguageDirection:function(){var a;this.dir!==(a=this.input.getLanguageDirection())&&(this.dir=a,this.$node.css("direction",a),this.dropdown.setLanguageDirection(a))},_updateHint:function(){var a,c,d,e,f,g;a=this.dropdown.getDatumForTopSuggestion(),a&&this.dropdown.isVisible()&&!this.input.hasOverflow()&&(c=this.input.getInputValue(),d=n.normalizeQuery(c),e=b.escapeRegExChars(d),f=new RegExp("^(?:"+e+")(.*$)","i"),g=f.exec(a.value),this.input.setHintValue(c+(g?g[1]:"")))},_autocomplete:function(){var a,b,c;a=this.input.getHintValue(),b=this.input.getQuery(),a&&b!==a&&this.input.isCursorAtEnd()&&(c=this.dropdown.getDatumForTopSuggestion(),c&&this.input.setInputValue(c.value),this.eventBus.trigger("autocompleted",c.raw,c.datasetName))},_select:function(a){this.input.clearHint(),this.input.setQuery(a.value),this.input.setInputValue(a.value,!0),this._setLanguageDirection(),this.eventBus.trigger("selected",a.raw,a.datasetName),this.dropdown.close(),b.defer(b.bind(this.dropdown.empty,this.dropdown))},open:function(){this.dropdown.open()},close:function(){this.dropdown.close()},getQuery:function(){return this.input.getQuery()},setQuery:function(a){this.input.setInputValue(a)},destroy:function(){this.input.destroy(),this.dropdown.destroy(),f(this.$node),this.$node=null}}),c}();!function(){var c,d,e;c=a.fn.typeahead,d="ttTypeahead",e={initialize:function(c,e){function f(){var f,g,h=a(this);b.each(e,function(a){a.highlight=!!c.highlight}),g=new q({input:h,eventBus:f=new k({el:h}),withHint:b.isUndefined(c.hint)?!0:!!c.hint,minLength:c.minLength,autoselect:c.autoselect,datasets:e}),h.data(d,g)}return e=b.isArray(e)?e:[].slice.call(arguments,1),c=c||{},this.each(f)},open:function(){function b(){var b,c=a(this);(b=c.data(d))&&b.open()}return this.each(b)},close:function(){function b(){var b,c=a(this);(b=c.data(d))&&b.close()}return this.each(b)},val:function(b){function c(){var c,e=a(this);(c=e.data(d))&&c.setQuery(b)}function e(a){var b,c;return(b=a.data(d))&&(c=b.getQuery()),c}return arguments.length?this.each(c):e(this.first())},destroy:function(){function b(){var b,c=a(this);(b=c.data(d))&&(b.destroy(),c.removeData(d))}return this.each(b)}},a.fn.typeahead=function(a){return e[a]?e[a].apply(this,[].slice.call(arguments,1)):e.initialize.apply(this,arguments)},a.fn.typeahead.noConflict=function(){return a.fn.typeahead=c,this}}()}(window.jQuery);
|
data/script/bootstrap
ADDED
@@ -0,0 +1,58 @@
|
|
1
|
+
#!/bin/sh
|
2
|
+
#
|
3
|
+
# bootstrap
|
4
|
+
#
|
5
|
+
|
6
|
+
# Colors
|
7
|
+
ESC_SEQ="\x1b["
|
8
|
+
COL_RESET=$ESC_SEQ"39;49;00m"
|
9
|
+
COL_RED=$ESC_SEQ"31;01m"
|
10
|
+
COL_GREEN=$ESC_SEQ"32;01m"
|
11
|
+
COL_YELLOW=$ESC_SEQ"33;01m"
|
12
|
+
|
13
|
+
#
|
14
|
+
# Welcome to Heroku Paterns
|
15
|
+
#
|
16
|
+
|
17
|
+
echo ""
|
18
|
+
echo " Welcome to Shibori. The pattern library for Heroku Elements and Marketing properties."
|
19
|
+
echo ""
|
20
|
+
|
21
|
+
#
|
22
|
+
# Check for Git
|
23
|
+
#
|
24
|
+
|
25
|
+
if test ! $(which git)
|
26
|
+
then
|
27
|
+
echo "$COL_RED x $COL_RESET You need to install Git:"
|
28
|
+
echo "Visit http://git-scm.com/book/en/v2/Getting-Started-Installing-Git for details"
|
29
|
+
exit
|
30
|
+
else
|
31
|
+
echo "$COL_GREEN ✔ $COL_RESET Git found."
|
32
|
+
fi
|
33
|
+
|
34
|
+
#
|
35
|
+
# Check for NPM
|
36
|
+
#
|
37
|
+
if test ! $(which npm)
|
38
|
+
then
|
39
|
+
echo "$COL_RED x $COL_RESET You need to install NPM first https://docs.npmjs.com/getting-started/installing-node"
|
40
|
+
fi
|
41
|
+
|
42
|
+
#
|
43
|
+
# Check for NPM
|
44
|
+
#
|
45
|
+
npm install --global gulp
|
46
|
+
|
47
|
+
#
|
48
|
+
# Installing Dependencies
|
49
|
+
#
|
50
|
+
|
51
|
+
echo ""
|
52
|
+
echo " Installing dependencies..."
|
53
|
+
npm install
|
54
|
+
echo ""
|
55
|
+
echo "$COL_GREEN ✔ $COL_RESET rubygems dependencies installed"
|
56
|
+
echo ""
|
57
|
+
echo " 👍 You're ready to go. Run ```gulp serve``` to launch Heroku Patterns"
|
58
|
+
echo ""
|