sideshow 0.4.1

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.
Files changed (160) hide show
  1. checksums.yaml +7 -0
  2. data/.bowerrc +3 -0
  3. data/.csslintrc +37 -0
  4. data/.editorconfig +27 -0
  5. data/.gitattributes +1 -0
  6. data/.gitignore +23 -0
  7. data/BUILDING.md +4 -0
  8. data/CHANGELOG.md +47 -0
  9. data/Gulpfile.js +404 -0
  10. data/LICENSE +191 -0
  11. data/README.md +342 -0
  12. data/VERSION +1 -0
  13. data/bower.json +61 -0
  14. data/distr/dependencies/jazz.min.js +8 -0
  15. data/distr/dependencies/jquery.min.js +5 -0
  16. data/distr/dependencies/pagedown.min.js +1 -0
  17. data/distr/fonts/open-sans-family/opensans-bold.eot +0 -0
  18. data/distr/fonts/open-sans-family/opensans-bold.svg +1825 -0
  19. data/distr/fonts/open-sans-family/opensans-bold.ttf +0 -0
  20. data/distr/fonts/open-sans-family/opensans-bold.woff +0 -0
  21. data/distr/fonts/open-sans-family/opensans-bolditalic.eot +0 -0
  22. data/distr/fonts/open-sans-family/opensans-bolditalic.svg +1825 -0
  23. data/distr/fonts/open-sans-family/opensans-bolditalic.ttf +0 -0
  24. data/distr/fonts/open-sans-family/opensans-bolditalic.woff +0 -0
  25. data/distr/fonts/open-sans-family/opensans-extrabold.eot +0 -0
  26. data/distr/fonts/open-sans-family/opensans-extrabold.svg +1825 -0
  27. data/distr/fonts/open-sans-family/opensans-extrabold.ttf +0 -0
  28. data/distr/fonts/open-sans-family/opensans-extrabold.woff +0 -0
  29. data/distr/fonts/open-sans-family/opensans-extrabolditalic.eot +0 -0
  30. data/distr/fonts/open-sans-family/opensans-extrabolditalic.svg +1825 -0
  31. data/distr/fonts/open-sans-family/opensans-extrabolditalic.ttf +0 -0
  32. data/distr/fonts/open-sans-family/opensans-extrabolditalic.woff +0 -0
  33. data/distr/fonts/open-sans-family/opensans-italic.eot +0 -0
  34. data/distr/fonts/open-sans-family/opensans-italic.svg +1825 -0
  35. data/distr/fonts/open-sans-family/opensans-italic.ttf +0 -0
  36. data/distr/fonts/open-sans-family/opensans-italic.woff +0 -0
  37. data/distr/fonts/open-sans-family/opensans-light.eot +0 -0
  38. data/distr/fonts/open-sans-family/opensans-light.svg +1825 -0
  39. data/distr/fonts/open-sans-family/opensans-light.ttf +0 -0
  40. data/distr/fonts/open-sans-family/opensans-light.woff +0 -0
  41. data/distr/fonts/open-sans-family/opensans-lightitalic.eot +0 -0
  42. data/distr/fonts/open-sans-family/opensans-lightitalic.svg +1825 -0
  43. data/distr/fonts/open-sans-family/opensans-lightitalic.ttf +0 -0
  44. data/distr/fonts/open-sans-family/opensans-lightitalic.woff +0 -0
  45. data/distr/fonts/open-sans-family/opensans-regular.eot +0 -0
  46. data/distr/fonts/open-sans-family/opensans-regular.svg +1825 -0
  47. data/distr/fonts/open-sans-family/opensans-regular.ttf +0 -0
  48. data/distr/fonts/open-sans-family/opensans-regular.woff +0 -0
  49. data/distr/fonts/open-sans-family/opensans-semibold.eot +0 -0
  50. data/distr/fonts/open-sans-family/opensans-semibold.svg +1825 -0
  51. data/distr/fonts/open-sans-family/opensans-semibold.ttf +0 -0
  52. data/distr/fonts/open-sans-family/opensans-semibold.woff +0 -0
  53. data/distr/fonts/open-sans-family/opensans-semibolditalic.eot +0 -0
  54. data/distr/fonts/open-sans-family/opensans-semibolditalic.svg +1825 -0
  55. data/distr/fonts/open-sans-family/opensans-semibolditalic.ttf +0 -0
  56. data/distr/fonts/open-sans-family/opensans-semibolditalic.woff +0 -0
  57. data/distr/fonts/sideshow-fontface.min.css +1 -0
  58. data/distr/fonts/sideshow-icons/sideshow-icons.eot +0 -0
  59. data/distr/fonts/sideshow-icons/sideshow-icons.svg +16 -0
  60. data/distr/fonts/sideshow-icons/sideshow-icons.ttf +0 -0
  61. data/distr/fonts/sideshow-icons/sideshow-icons.woff +0 -0
  62. data/distr/sideshow.js +2510 -0
  63. data/distr/sideshow.min.js +10 -0
  64. data/distr/stylesheets/sideshow.min.css +1 -0
  65. data/docs/api.js +29 -0
  66. data/docs/assets/css/external-small.png +0 -0
  67. data/docs/assets/css/logo.png +0 -0
  68. data/docs/assets/css/main.css +783 -0
  69. data/docs/assets/favicon.png +0 -0
  70. data/docs/assets/img/spinner.gif +0 -0
  71. data/docs/assets/index.html +10 -0
  72. data/docs/assets/js/api-filter.js +52 -0
  73. data/docs/assets/js/api-list.js +251 -0
  74. data/docs/assets/js/api-search.js +98 -0
  75. data/docs/assets/js/apidocs.js +370 -0
  76. data/docs/assets/js/yui-prettify.js +17 -0
  77. data/docs/assets/vendor/prettify/CHANGES.html +130 -0
  78. data/docs/assets/vendor/prettify/COPYING +202 -0
  79. data/docs/assets/vendor/prettify/README.html +203 -0
  80. data/docs/assets/vendor/prettify/prettify-min.css +1 -0
  81. data/docs/assets/vendor/prettify/prettify-min.js +1 -0
  82. data/docs/classes/Arrow.html +541 -0
  83. data/docs/classes/Arrows.html +805 -0
  84. data/docs/classes/ControlVariables.html +1005 -0
  85. data/docs/classes/DetailsPanel.html +672 -0
  86. data/docs/classes/FadableItem.html +613 -0
  87. data/docs/classes/HidableItem.html +495 -0
  88. data/docs/classes/Mask.CloseButton.html +706 -0
  89. data/docs/classes/Mask.CompositeMask.html +721 -0
  90. data/docs/classes/Mask.CornerPart.html +613 -0
  91. data/docs/classes/Mask.Part.html +395 -0
  92. data/docs/classes/Mask.Polling.html +809 -0
  93. data/docs/classes/Mask.Subject.html +199 -0
  94. data/docs/classes/Mask.SubjectMask.html +417 -0
  95. data/docs/classes/Mask.WizardMenu.html +1401 -0
  96. data/docs/classes/SS.html +267 -0
  97. data/docs/classes/SSException.html +203 -0
  98. data/docs/classes/Screen.html +363 -0
  99. data/docs/classes/StepDescription.html +1025 -0
  100. data/docs/classes/StepDescriptionNextButton.html +746 -0
  101. data/docs/classes/VisualItem.html +339 -0
  102. data/docs/classes/Wizard.html +967 -0
  103. data/docs/files/c +0 -0
  104. data/docs/index.html +162 -0
  105. data/example.html +81 -0
  106. data/examples/images/clemenza.jpg +0 -0
  107. data/examples/images/doc_brown.png +0 -0
  108. data/examples/images/forkme.png +0 -0
  109. data/examples/images/fortes-logo.png +0 -0
  110. data/examples/images/sideshow-logo.png +0 -0
  111. data/examples/images/sideshow-logo.svg +155 -0
  112. data/examples/scripts/sideshow.config.js +2 -0
  113. data/examples/scripts/tutorials/introducing_sideshow.js +259 -0
  114. data/examples/stylesheets/example.min.css +1 -0
  115. data/examples/stylesheets/styl/example.styl +272 -0
  116. data/gulp/config.js +0 -0
  117. data/gulp/extensions/gulp-html-extend.js +151 -0
  118. data/gulp/tasks/.gitkeep +0 -0
  119. data/icons/iconfont.zip +0 -0
  120. data/package.json +56 -0
  121. data/sideshow.gemspec +20 -0
  122. data/sideshow.nuspec +72 -0
  123. data/sideshow.sublime-project +22 -0
  124. data/src/copyright_info.js +8 -0
  125. data/src/general/config.js +42 -0
  126. data/src/general/dictionary.js +42 -0
  127. data/src/general/exception.js +15 -0
  128. data/src/general/global_object.js +287 -0
  129. data/src/general/polling.js +151 -0
  130. data/src/general/screen.js +39 -0
  131. data/src/general/utility_functions.js +88 -0
  132. data/src/general/variables.js +42 -0
  133. data/src/interface_itens/fadable_item.js +55 -0
  134. data/src/interface_itens/hidable_item.js +32 -0
  135. data/src/interface_itens/visual_item.js +42 -0
  136. data/src/main.js +52 -0
  137. data/src/mask/composite_mask.js +193 -0
  138. data/src/mask/composite_mask_corner_part.js +105 -0
  139. data/src/mask/composite_mask_part.js +51 -0
  140. data/src/mask/mask.js +6 -0
  141. data/src/mask/subject_mask.js +34 -0
  142. data/src/step/arrow.js +88 -0
  143. data/src/step/arrows.js +155 -0
  144. data/src/step/step_description.js +165 -0
  145. data/src/step/step_description_next_button.js +55 -0
  146. data/src/step/step_details_panel.js +87 -0
  147. data/src/step/subject.js +100 -0
  148. data/src/wizard/wizard.js +395 -0
  149. data/src/wizard/wizard_control_variables.js +95 -0
  150. data/src/wizard/wizard_menu.js +101 -0
  151. data/stylesheets/_animations.styl +87 -0
  152. data/stylesheets/_font-face.styl +135 -0
  153. data/stylesheets/_icons.styl +27 -0
  154. data/stylesheets/_layout.styl +362 -0
  155. data/stylesheets/_mixins.styl +52 -0
  156. data/stylesheets/_variables.styl +35 -0
  157. data/stylesheets/sideshow-fontface.styl +4 -0
  158. data/stylesheets/sideshow.styl +7 -0
  159. data/yuidoc.json +15 -0
  160. metadata +246 -0
Binary file
Binary file
@@ -0,0 +1,10 @@
1
+ <!doctype html>
2
+ <html>
3
+ <head>
4
+ <title>Redirector</title>
5
+ <meta http-equiv="refresh" content="0;url=../">
6
+ </head>
7
+ <body>
8
+ <a href="../">Click here to redirect</a>
9
+ </body>
10
+ </html>
@@ -0,0 +1,52 @@
1
+ YUI.add('api-filter', function (Y) {
2
+
3
+ Y.APIFilter = Y.Base.create('apiFilter', Y.Base, [Y.AutoCompleteBase], {
4
+ // -- Initializer ----------------------------------------------------------
5
+ initializer: function () {
6
+ this._bindUIACBase();
7
+ this._syncUIACBase();
8
+ },
9
+ getDisplayName: function(name) {
10
+
11
+ Y.each(Y.YUIDoc.meta.allModules, function(i) {
12
+ if (i.name === name && i.displayName) {
13
+ name = i.displayName;
14
+ }
15
+ });
16
+
17
+ return name;
18
+ }
19
+
20
+ }, {
21
+ // -- Attributes -----------------------------------------------------------
22
+ ATTRS: {
23
+ resultHighlighter: {
24
+ value: 'phraseMatch'
25
+ },
26
+
27
+ // May be set to "classes" or "modules".
28
+ queryType: {
29
+ value: 'classes'
30
+ },
31
+
32
+ source: {
33
+ valueFn: function() {
34
+ var self = this;
35
+ return function(q) {
36
+ var data = Y.YUIDoc.meta[self.get('queryType')],
37
+ out = [];
38
+ Y.each(data, function(v) {
39
+ if (v.toLowerCase().indexOf(q.toLowerCase()) > -1) {
40
+ out.push(v);
41
+ }
42
+ });
43
+ return out;
44
+ };
45
+ }
46
+ }
47
+ }
48
+ });
49
+
50
+ }, '3.4.0', {requires: [
51
+ 'autocomplete-base', 'autocomplete-highlighters', 'autocomplete-sources'
52
+ ]});
@@ -0,0 +1,251 @@
1
+ YUI.add('api-list', function (Y) {
2
+
3
+ var Lang = Y.Lang,
4
+ YArray = Y.Array,
5
+
6
+ APIList = Y.namespace('APIList'),
7
+
8
+ classesNode = Y.one('#api-classes'),
9
+ inputNode = Y.one('#api-filter'),
10
+ modulesNode = Y.one('#api-modules'),
11
+ tabviewNode = Y.one('#api-tabview'),
12
+
13
+ tabs = APIList.tabs = {},
14
+
15
+ filter = APIList.filter = new Y.APIFilter({
16
+ inputNode : inputNode,
17
+ maxResults: 1000,
18
+
19
+ on: {
20
+ results: onFilterResults
21
+ }
22
+ }),
23
+
24
+ search = APIList.search = new Y.APISearch({
25
+ inputNode : inputNode,
26
+ maxResults: 100,
27
+
28
+ on: {
29
+ clear : onSearchClear,
30
+ results: onSearchResults
31
+ }
32
+ }),
33
+
34
+ tabview = APIList.tabview = new Y.TabView({
35
+ srcNode : tabviewNode,
36
+ panelNode: '#api-tabview-panel',
37
+ render : true,
38
+
39
+ on: {
40
+ selectionChange: onTabSelectionChange
41
+ }
42
+ }),
43
+
44
+ focusManager = APIList.focusManager = tabviewNode.plug(Y.Plugin.NodeFocusManager, {
45
+ circular : true,
46
+ descendants: '#api-filter, .yui3-tab-panel-selected .api-list-item a, .yui3-tab-panel-selected .result a',
47
+ keys : {next: 'down:40', previous: 'down:38'}
48
+ }).focusManager,
49
+
50
+ LIST_ITEM_TEMPLATE =
51
+ '<li class="api-list-item {typeSingular}">' +
52
+ '<a href="{rootPath}{typePlural}/{name}.html">{displayName}</a>' +
53
+ '</li>';
54
+
55
+ // -- Init ---------------------------------------------------------------------
56
+
57
+ // Duckpunch FocusManager's key event handling to prevent it from handling key
58
+ // events when a modifier is pressed.
59
+ Y.before(function (e, activeDescendant) {
60
+ if (e.altKey || e.ctrlKey || e.metaKey || e.shiftKey) {
61
+ return new Y.Do.Prevent();
62
+ }
63
+ }, focusManager, '_focusPrevious', focusManager);
64
+
65
+ Y.before(function (e, activeDescendant) {
66
+ if (e.altKey || e.ctrlKey || e.metaKey || e.shiftKey) {
67
+ return new Y.Do.Prevent();
68
+ }
69
+ }, focusManager, '_focusNext', focusManager);
70
+
71
+ // Create a mapping of tabs in the tabview so we can refer to them easily later.
72
+ tabview.each(function (tab, index) {
73
+ var name = tab.get('label').toLowerCase();
74
+
75
+ tabs[name] = {
76
+ index: index,
77
+ name : name,
78
+ tab : tab
79
+ };
80
+ });
81
+
82
+ // Switch tabs on Ctrl/Cmd-Left/Right arrows.
83
+ tabviewNode.on('key', onTabSwitchKey, 'down:37,39');
84
+
85
+ // Focus the filter input when the `/` key is pressed.
86
+ Y.one(Y.config.doc).on('key', onSearchKey, 'down:83');
87
+
88
+ // Keep the Focus Manager up to date.
89
+ inputNode.on('focus', function () {
90
+ focusManager.set('activeDescendant', inputNode);
91
+ });
92
+
93
+ // Update all tabview links to resolved URLs.
94
+ tabview.get('panelNode').all('a').each(function (link) {
95
+ link.setAttribute('href', link.get('href'));
96
+ });
97
+
98
+ // -- Private Functions --------------------------------------------------------
99
+ function getFilterResultNode() {
100
+ return filter.get('queryType') === 'classes' ? classesNode : modulesNode;
101
+ }
102
+
103
+ // -- Event Handlers -----------------------------------------------------------
104
+ function onFilterResults(e) {
105
+ var frag = Y.one(Y.config.doc.createDocumentFragment()),
106
+ resultNode = getFilterResultNode(),
107
+ typePlural = filter.get('queryType'),
108
+ typeSingular = typePlural === 'classes' ? 'class' : 'module';
109
+
110
+ if (e.results.length) {
111
+ YArray.each(e.results, function (result) {
112
+ frag.append(Lang.sub(LIST_ITEM_TEMPLATE, {
113
+ rootPath : APIList.rootPath,
114
+ displayName : filter.getDisplayName(result.highlighted),
115
+ name : result.text,
116
+ typePlural : typePlural,
117
+ typeSingular: typeSingular
118
+ }));
119
+ });
120
+ } else {
121
+ frag.append(
122
+ '<li class="message">' +
123
+ 'No ' + typePlural + ' found.' +
124
+ '</li>'
125
+ );
126
+ }
127
+
128
+ resultNode.empty(true);
129
+ resultNode.append(frag);
130
+
131
+ focusManager.refresh();
132
+ }
133
+
134
+ function onSearchClear(e) {
135
+
136
+ focusManager.refresh();
137
+ }
138
+
139
+ function onSearchKey(e) {
140
+ var target = e.target;
141
+
142
+ if (target.test('input,select,textarea')
143
+ || target.get('isContentEditable')) {
144
+ return;
145
+ }
146
+
147
+ e.preventDefault();
148
+
149
+ inputNode.focus();
150
+ focusManager.refresh();
151
+ }
152
+
153
+ function onSearchResults(e) {
154
+ var frag = Y.one(Y.config.doc.createDocumentFragment());
155
+
156
+ if (e.results.length) {
157
+ YArray.each(e.results, function (result) {
158
+ frag.append(result.display);
159
+ });
160
+ } else {
161
+ frag.append(
162
+ '<li class="message">' +
163
+ 'No results found. Maybe you\'ll have better luck with a ' +
164
+ 'different query?' +
165
+ '</li>'
166
+ );
167
+ }
168
+
169
+
170
+ focusManager.refresh();
171
+ }
172
+
173
+ function onTabSelectionChange(e) {
174
+ var tab = e.newVal,
175
+ name = tab.get('label').toLowerCase();
176
+
177
+ tabs.selected = {
178
+ index: tab.get('index'),
179
+ name : name,
180
+ tab : tab
181
+ };
182
+
183
+ switch (name) {
184
+ case 'classes': // fallthru
185
+ case 'modules':
186
+ filter.setAttrs({
187
+ minQueryLength: 0,
188
+ queryType : name
189
+ });
190
+
191
+ search.set('minQueryLength', -1);
192
+
193
+ // Only send a request if this isn't the initially-selected tab.
194
+ if (e.prevVal) {
195
+ filter.sendRequest(filter.get('value'));
196
+ }
197
+ break;
198
+
199
+ case 'everything':
200
+ filter.set('minQueryLength', -1);
201
+ search.set('minQueryLength', 1);
202
+
203
+ if (search.get('value')) {
204
+ search.sendRequest(search.get('value'));
205
+ } else {
206
+ inputNode.focus();
207
+ }
208
+ break;
209
+
210
+ default:
211
+ // WTF? We shouldn't be here!
212
+ filter.set('minQueryLength', -1);
213
+ search.set('minQueryLength', -1);
214
+ }
215
+
216
+ if (focusManager) {
217
+ setTimeout(function () {
218
+ focusManager.refresh();
219
+ }, 1);
220
+ }
221
+ }
222
+
223
+ function onTabSwitchKey(e) {
224
+ var currentTabIndex = tabs.selected.index;
225
+
226
+ if (!(e.ctrlKey || e.metaKey)) {
227
+ return;
228
+ }
229
+
230
+ e.preventDefault();
231
+
232
+ switch (e.keyCode) {
233
+ case 37: // left arrow
234
+ if (currentTabIndex > 0) {
235
+ tabview.selectChild(currentTabIndex - 1);
236
+ inputNode.focus();
237
+ }
238
+ break;
239
+
240
+ case 39: // right arrow
241
+ if (currentTabIndex < (Y.Object.size(tabs) - 2)) {
242
+ tabview.selectChild(currentTabIndex + 1);
243
+ inputNode.focus();
244
+ }
245
+ break;
246
+ }
247
+ }
248
+
249
+ }, '3.4.0', {requires: [
250
+ 'api-filter', 'api-search', 'event-key', 'node-focusmanager', 'tabview'
251
+ ]});
@@ -0,0 +1,98 @@
1
+ YUI.add('api-search', function (Y) {
2
+
3
+ var Lang = Y.Lang,
4
+ Node = Y.Node,
5
+ YArray = Y.Array;
6
+
7
+ Y.APISearch = Y.Base.create('apiSearch', Y.Base, [Y.AutoCompleteBase], {
8
+ // -- Public Properties ----------------------------------------------------
9
+ RESULT_TEMPLATE:
10
+ '<li class="result {resultType}">' +
11
+ '<a href="{url}">' +
12
+ '<h3 class="title">{name}</h3>' +
13
+ '<span class="type">{resultType}</span>' +
14
+ '<div class="description">{description}</div>' +
15
+ '<span class="className">{class}</span>' +
16
+ '</a>' +
17
+ '</li>',
18
+
19
+ // -- Initializer ----------------------------------------------------------
20
+ initializer: function () {
21
+ this._bindUIACBase();
22
+ this._syncUIACBase();
23
+ },
24
+
25
+ // -- Protected Methods ----------------------------------------------------
26
+ _apiResultFilter: function (query, results) {
27
+ // Filter components out of the results.
28
+ return YArray.filter(results, function (result) {
29
+ return result.raw.resultType === 'component' ? false : result;
30
+ });
31
+ },
32
+
33
+ _apiResultFormatter: function (query, results) {
34
+ return YArray.map(results, function (result) {
35
+ var raw = Y.merge(result.raw), // create a copy
36
+ desc = raw.description || '';
37
+
38
+ // Convert description to text and truncate it if necessary.
39
+ desc = Node.create('<div>' + desc + '</div>').get('text');
40
+
41
+ if (desc.length > 65) {
42
+ desc = Y.Escape.html(desc.substr(0, 65)) + ' &hellip;';
43
+ } else {
44
+ desc = Y.Escape.html(desc);
45
+ }
46
+
47
+ raw['class'] || (raw['class'] = '');
48
+ raw.description = desc;
49
+
50
+ // Use the highlighted result name.
51
+ raw.name = result.highlighted;
52
+
53
+ return Lang.sub(this.RESULT_TEMPLATE, raw);
54
+ }, this);
55
+ },
56
+
57
+ _apiTextLocator: function (result) {
58
+ return result.displayName || result.name;
59
+ }
60
+ }, {
61
+ // -- Attributes -----------------------------------------------------------
62
+ ATTRS: {
63
+ resultFormatter: {
64
+ valueFn: function () {
65
+ return this._apiResultFormatter;
66
+ }
67
+ },
68
+
69
+ resultFilters: {
70
+ valueFn: function () {
71
+ return this._apiResultFilter;
72
+ }
73
+ },
74
+
75
+ resultHighlighter: {
76
+ value: 'phraseMatch'
77
+ },
78
+
79
+ resultListLocator: {
80
+ value: 'data.results'
81
+ },
82
+
83
+ resultTextLocator: {
84
+ valueFn: function () {
85
+ return this._apiTextLocator;
86
+ }
87
+ },
88
+
89
+ source: {
90
+ value: '/api/v1/search?q={query}&count={maxResults}'
91
+ }
92
+ }
93
+ });
94
+
95
+ }, '3.4.0', {requires: [
96
+ 'autocomplete-base', 'autocomplete-highlighters', 'autocomplete-sources',
97
+ 'escape'
98
+ ]});