ustyle 1.15.3 → 1.16.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,120 +1,171 @@
1
- var setOptions = this.Utils.setOptions;
2
-
3
- window.Tabs = (function(options) {
4
- var Tabs;
5
- return Tabs = (function() {
6
- var getSelector;
7
-
8
- Tabs.prototype.defaults = {
9
- tabContainer: ".us-tabs",
10
- tabLinks: ".us-tabs-nav-mainlink",
11
- tabNav: ".us-tabs-nav",
12
- changeUrls: true,
13
- activeClass: "active",
14
- collapsible: false,
15
- autoScroll: true
16
- };
17
-
18
- function Tabs(options) {
19
- var ref = this.options = setOptions(options, this.defaults);
20
- var tabContainer = ref.tabContainer;
21
- var tabLinks = ref.tabLinks;
22
-
23
- this.tabs = $(tabContainer).find(tabLinks);
24
- this.filter = this.tabs.data("target") ? "data-target" : "href";
25
- this.init();
26
- this.tabs.on("click.ustyle.tab", (function(_this) {
27
- return function(e) {
28
- var $target = $(e.currentTarget);
29
- if (_this.isAccordion() && _this.options.collapsible && _this.isActive($target)) {
30
- _this.collapse($target);
31
- _this.hashClear();
32
- } else {
33
- _this.navigateTo($target);
34
- _this.scrollToTab($target);
35
- _this.hashChange($target);
36
- }
37
-
38
- return e.preventDefault();
39
- };
40
- })(this));
1
+ window.Tabs = (function(Utils) {
2
+
3
+ var addClass = Utils.addClass;
4
+ var hasClass = Utils.hasClass;
5
+ var removeClass = Utils.removeClass;
6
+ var setOptions = Utils.setOptions;
7
+
8
+ Tabs.prototype.defaults = {
9
+ tabContainer: ".us-tabs",
10
+ tabLinks: ".us-tabs-nav-mainlink",
11
+ tabNav: ".us-tabs-nav",
12
+ changeUrls: true,
13
+ activeClass: "active",
14
+ collapsible: false,
15
+ autoScroll: true
16
+ };
17
+
18
+ function Tabs(options) {
19
+ var ref = this.options = setOptions(options, this.defaults);
20
+ var tabContainer = ref.tabContainer;
21
+ var tabLinks = ref.tabLinks;
22
+
23
+ this.activeTabEvent = new CustomEvent('ustyle.tab.active');
24
+ this.tabs = document.querySelectorAll(tabContainer + ' ' + tabLinks);
25
+ if(!this.tabs.length) return;
26
+ this.filter = this.tabs.item(0).getAttribute("data-target") ? "data-target" : "href";
27
+ this.init();
28
+
29
+ var handleClick = (function (_this) {
30
+ return function (e) {
31
+ var target = e.currentTarget;
32
+ if (_this.isAccordion() && _this.options.collapsible && _this.isActive(target)) {
33
+ _this.collapse(target);
34
+ _this.hashClear();
35
+ } else {
36
+ _this.navigateTo(target);
37
+ _this.scrollToTab(target);
38
+ _this.hashChange(target);
39
+ }
40
+
41
+ return e.preventDefault();
42
+ }
43
+ })(this);
44
+
45
+ forEach(this.tabs, function (index, tab) {
46
+ tab.addEventListener('click', handleClick);
47
+ });
48
+ }
49
+
50
+ Tabs.prototype.init = function() {
51
+ var activeTab = this.activeTab();
52
+ var initialHash = this.tabFromHash();
53
+
54
+ if (initialHash) {
55
+ return this.navigateTo(initialHash);
56
+ } else if (activeTab) {
57
+ return this.navigateTo(activeTab);
58
+ } else if (!this.options.collapsible || !this.isAccordion()) {
59
+ return this.navigateTo(this.tabs.item(0));
41
60
  }
61
+ };
62
+
63
+ Tabs.prototype.hashChange = function(target) {
64
+ if (!this.options.changeUrls) return;
65
+
66
+ return window.location.replace("#!" + (getSelector(target).replace(/#/, "")));
67
+ };
68
+
69
+ Tabs.prototype.hashClear = function() {
70
+ if (!this.options.changeUrls) return;
42
71
 
43
- Tabs.prototype.init = function() {
44
- var $activeTab = this.activeTab();
45
- var $initialHash = this.tabFromHash();
72
+ var url = window.location.pathname + window.location.search;
73
+ return typeof history.replaceState === "function" ? history.replaceState("", document.title, url) : void 0;
74
+ };
46
75
 
47
- if ($initialHash.length) {
48
- return this.navigateTo($initialHash);
49
- } else if ($activeTab.length) {
50
- return this.navigateTo($activeTab);
51
- } else if (!this.options.collapsible || !this.isAccordion()) {
52
- return this.navigateTo(this.tabs.first());
76
+ Tabs.prototype.navigateTo = function(target) {
77
+ var selector = getSelector(target);
78
+ var selected = document.querySelector(selector);
79
+ var activeClass = this.options.activeClass;
80
+ var filter = this.filter;
81
+
82
+ forEach(this.tabs, function (index, tab) {
83
+ removeClass(tab, activeClass);
84
+ });
85
+
86
+ forEach(this.tabs, function (index, tab) {
87
+ if (tab.getAttribute(filter) === selector) {
88
+ return addClass(tab, activeClass);
53
89
  }
54
- };
90
+ });
55
91
 
56
- Tabs.prototype.hashChange = function(target) {
57
- if (!this.options.changeUrls) {
58
- return;
92
+ forEach(selected.parentNode.children, function (index, child) {
93
+ if (child !== selected) {
94
+ removeClass(child, activeClass);
59
95
  }
96
+ });
97
+
98
+ addClass(selected, activeClass);
99
+ return selected.dispatchEvent(this.activeTabEvent);
100
+ };
101
+
102
+ Tabs.prototype.collapse = function(target) {
103
+ var selected = document.querySelector(getSelector(target));
104
+ var activeClass = this.options.activeClass;
60
105
 
61
- return location.replace("#!" + (getSelector(target).replace(/#/, "")));
62
- };
106
+ forEach(this.tabs, function (index, tab) {
107
+ removeClass(tab, activeClass);
108
+ });
63
109
 
64
- Tabs.prototype.hashClear = function() {
65
- if (!this.options.changeUrls) {
66
- return;
110
+ return removeClass(selected, activeClass);
111
+ };
112
+
113
+ Tabs.prototype.scrollToTab = function(target) {
114
+ if (!(this.isAccordion() && this.options.autoScroll)) {
115
+ return;
116
+ }
117
+
118
+ var selected = document.querySelector(getSelector(target));
119
+ return selected.scrollIntoView();
120
+ };
121
+
122
+ Tabs.prototype.activeTab = function() {
123
+ var activeTab = null;
124
+ var activeClass = this.options.activeClass;
125
+ var matchingTab = null;
126
+
127
+ forEach(this.tabs, function (index, tab) {
128
+ if (hasClass(tab, activeClass)) {
129
+ return matchingTab = tab;
67
130
  }
131
+ });
132
+
133
+ return matchingTab;
134
+ };
68
135
 
69
- var url = window.location.pathname + window.location.search;
70
- return typeof history.replaceState === "function" ? history.replaceState("", document.title, url) : void 0;
71
- };
72
-
73
- Tabs.prototype.navigateTo = function(target) {
74
- var selector = getSelector(target);
75
- var $selected = $(selector);
76
- this.tabs.removeClass(this.options.activeClass).end();
77
- this.tabs.filter("[" + this.filter + "='" + selector + "']").addClass(this.options.activeClass);
78
- $selected.siblings("." + this.options.activeClass).removeClass(this.options.activeClass).end().addClass(this.options.activeClass);
79
- return $selected.trigger("ustyle.tab.active");
80
- };
81
-
82
- Tabs.prototype.collapse = function(target) {
83
- var $selected = $(getSelector(target));
84
- this.tabs.removeClass(this.options.activeClass).end();
85
- return $selected.removeClass(this.options.activeClass);
86
- };
87
-
88
- Tabs.prototype.scrollToTab = function(target) {
89
- if (!(this.isAccordion() && this.options.autoScroll)) {
90
- return;
136
+ Tabs.prototype.tabFromHash = function() {
137
+ var tabId = window.location.hash.replace("!", "");
138
+ var filter = this.filter;
139
+ var matchingTab = null;
140
+
141
+ forEach(this.tabs, function (index, tab) {
142
+ if (tab.getAttribute(filter) === tabId) {
143
+ return matchingTab = tab;
91
144
  }
145
+ });
92
146
 
93
- var $selected = $(getSelector(target));
94
- return $("html,body").scrollTop($selected.offset().top);
95
- };
147
+ return matchingTab;
148
+ };
96
149
 
97
- Tabs.prototype.activeTab = function() {
98
- return this.tabs.filter("." + this.options.activeClass);
99
- };
150
+ Tabs.prototype.isActive = function(target) {
151
+ return getSelector(target) === getSelector(this.activeTab());
152
+ };
100
153
 
101
- Tabs.prototype.tabFromHash = function() {
102
- var tabId = location.hash.replace("!", "");
103
- return this.tabs.filter("[" + this.filter + "='" + tabId + "']");
104
- };
154
+ Tabs.prototype.isAccordion = function() {
155
+ var tabNav = document.querySelector(this.options.tabNav);
105
156
 
106
- Tabs.prototype.isActive = function(target) {
107
- return getSelector(target) === getSelector(this.activeTab());
108
- };
157
+ return !(tabNav.offsetWidth > 0 || tabNav.offsetHeight > 0);
158
+ };
109
159
 
110
- Tabs.prototype.isAccordion = function() {
111
- return !$(this.options.tabNav).is(":visible");
112
- };
160
+ var getSelector = function(clicked) {
161
+ return clicked.getAttribute("data-target") || clicked.getAttribute("href");
162
+ };
113
163
 
114
- getSelector = function(clicked) {
115
- return clicked.data("target") || clicked.attr("href");
116
- };
164
+ var forEach = function (array, callback, scope) {
165
+ for (var i = array.length - 1; i >= 0; i--) {
166
+ callback.call(scope, i, array[i]);
167
+ }
168
+ };
117
169
 
118
- return Tabs;
119
- })();
120
- })();
170
+ return Tabs;
171
+ })(this.Utils);
@@ -99,8 +99,6 @@ $devices: ();
99
99
 
100
100
  /// Output a media query block for the targeted device and a potential internet explorer fallback
101
101
  ///
102
- /// @require {Variable} devices
103
- ///
104
102
  /// @param {String} $device
105
103
  /// The device to match up the media query with. Can be one from the list of `$min-breakpoints` (`small-tablet`, `tablet`, `desktop` etc.)
106
104
  /// or `$max-breakpoints` (`mobile`, `to-small-tablet`, `to-tablet`)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ustyle
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.15.3
4
+ version: 1.16.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - uSwitch Limited
@@ -13,7 +13,7 @@ authors:
13
13
  autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
- date: 2017-09-29 00:00:00.000000000 Z
16
+ date: 2018-01-09 00:00:00.000000000 Z
17
17
  dependencies:
18
18
  - !ruby/object:Gem::Dependency
19
19
  name: sass
@@ -142,12 +142,10 @@ files:
142
142
  - CONTRIBUTING.md
143
143
  - Gemfile
144
144
  - Gruntfile.js
145
- - JAVASCRIPT_STANDARDS.md
146
145
  - LICENSE.txt
147
146
  - README.md
148
147
  - Rakefile
149
148
  - bower.json
150
- - config/.jscsrc
151
149
  - config/autoprefixer.yml
152
150
  - config/scss-lint.yml
153
151
  - dist/icons.svg
@@ -163,6 +161,7 @@ files:
163
161
  - grunt/tasks/browser-sync.js
164
162
  - grunt/tasks/builder.js
165
163
  - grunt/tasks/styleguide.js
164
+ - index.js
166
165
  - lib/ustyle.rb
167
166
  - lib/ustyle/deploy.rb
168
167
  - lib/ustyle/engine.rb
@@ -175,6 +174,7 @@ files:
175
174
  - lib/ustyle/sprockets.rb
176
175
  - lib/ustyle/utils.rb
177
176
  - lib/ustyle/version.rb
177
+ - package-lock.json
178
178
  - package.json
179
179
  - styleguide/CNAME
180
180
  - styleguide/assets/images/CTAs.png
@@ -256,7 +256,6 @@ files:
256
256
  - styleguide/assets/images/ux-conventions-recognition.png
257
257
  - styleguide/assets/images/ux-conventions-visibility.png
258
258
  - styleguide/assets/javascripts/app.js
259
- - styleguide/assets/javascripts/modules/cleanWhiteSpace.js
260
259
  - styleguide/assets/javascripts/modules/stats.js
261
260
  - styleguide/assets/javascripts/vendor/highlight.js
262
261
  - styleguide/assets/javascripts/vendor/svg4everybody.js
@@ -1,88 +0,0 @@
1
- # JAVASCRIPT STANDARDS
2
-
3
- ### INTRODUCTION
4
-
5
- We are using [JSCS](http://jscs.info/) to lint our javascript code within uStyle.
6
-
7
- ### RULES
8
-
9
- Our preset is set to use Airbnb as the base set of options.
10
-
11
- ```javascript
12
- {
13
- "esnext": true,
14
- "verbose": true,
15
- "requireSpaceAfterKeywords": [
16
- "if",
17
- "else",
18
- "for",
19
- "while",
20
- "do",
21
- "switch",
22
- "case",
23
- "return",
24
- "try",
25
- "catch",
26
- "typeof"
27
- ],
28
- "disallowSpacesInNamedFunctionExpression": {
29
- "beforeOpeningRoundBrace": true
30
- },
31
- "disallowSpacesInFunctionExpression": {
32
- "beforeOpeningRoundBrace": true
33
- },
34
- "disallowSpacesInAnonymousFunctionExpression": {
35
- "beforeOpeningRoundBrace": true
36
- },
37
- "disallowSpacesInFunctionDeclaration": {
38
- "beforeOpeningRoundBrace": true
39
- },
40
- "disallowEmptyBlocks": true,
41
- "disallowSpacesInsideArrayBrackets": true,
42
- "disallowSpacesInsideParentheses": true,
43
- "disallowSpaceAfterObjectKeys": true,
44
- "disallowSpaceAfterPrefixUnaryOperators": true,
45
- "disallowSpaceBeforePostfixUnaryOperators": true,
46
- "disallowSpaceBeforeBinaryOperators": [
47
- ","
48
- ],
49
- "disallowMixedSpacesAndTabs": true,
50
- "disallowTrailingWhitespace": true,
51
- "requireTrailingComma": { "ignoreSingleLine": true },
52
- "disallowYodaConditions": true,
53
- "disallowKeywords": [ "with" ],
54
- "disallowKeywordsOnNewLine": ["else"],
55
- "disallowMultipleLineBreaks": true,
56
- "disallowMultipleLineStrings": true,
57
- "disallowMultipleVarDecl": true,
58
- "disallowSpaceBeforeComma": true,
59
- "disallowSpaceBeforeSemicolon": true,
60
- "requireSpaceBeforeBlockStatements": true,
61
- "requireParenthesesAroundIIFE": true,
62
- "requireSpacesInConditionalExpression": true,
63
- "requireBlocksOnNewline": 1,
64
- "requireCommaBeforeLineBreak": true,
65
- "requireSpaceBeforeBinaryOperators": true,
66
- "requireSpaceAfterBinaryOperators": true,
67
- "requireCamelCaseOrUpperCaseIdentifiers": true,
68
- "requireLineFeedAtFileEnd": true,
69
- "requireCapitalizedConstructors": true,
70
- "requireDotNotation": true,
71
- "requireSpacesInForStatement": true,
72
- "requireSpaceBetweenArguments": true,
73
- "requireCurlyBraces": [
74
- "do"
75
- ],
76
- "requirePaddingNewLinesBeforeLineComments": {
77
- "allExcept": "firstAfterCurly"
78
- },
79
- "requirePaddingNewLinesAfterBlocks": true,
80
- "requireSemicolons": true,
81
- "safeContextKeyword": "_this",
82
- "validateLineBreaks": "LF",
83
- "validateIndentation": 2,
84
-
85
- "validateQuoteMarks": "\"",
86
- "requireTrailingComma": null
87
- }
88
- ```
data/config/.jscsrc DELETED
@@ -1,76 +0,0 @@
1
- {
2
- "esnext": true,
3
- "verbose": true,
4
- "requireSpaceAfterKeywords": [
5
- "if",
6
- "else",
7
- "for",
8
- "while",
9
- "do",
10
- "switch",
11
- "case",
12
- "return",
13
- "try",
14
- "catch",
15
- "typeof"
16
- ],
17
- "disallowSpacesInNamedFunctionExpression": {
18
- "beforeOpeningRoundBrace": true
19
- },
20
- "disallowSpacesInFunctionExpression": {
21
- "beforeOpeningRoundBrace": true
22
- },
23
- "disallowSpacesInAnonymousFunctionExpression": {
24
- "beforeOpeningRoundBrace": true
25
- },
26
- "disallowSpacesInFunctionDeclaration": {
27
- "beforeOpeningRoundBrace": true
28
- },
29
- "disallowEmptyBlocks": true,
30
- "disallowSpacesInsideArrayBrackets": true,
31
- "disallowSpacesInsideParentheses": true,
32
- "disallowSpaceAfterObjectKeys": true,
33
- "disallowSpaceAfterPrefixUnaryOperators": true,
34
- "disallowSpaceBeforePostfixUnaryOperators": true,
35
- "disallowSpaceBeforeBinaryOperators": [
36
- ","
37
- ],
38
- "disallowMixedSpacesAndTabs": true,
39
- "disallowTrailingWhitespace": true,
40
- "requireTrailingComma": { "ignoreSingleLine": true },
41
- "disallowYodaConditions": true,
42
- "disallowKeywords": [ "with" ],
43
- "disallowKeywordsOnNewLine": ["else"],
44
- "disallowMultipleLineBreaks": true,
45
- "disallowMultipleLineStrings": true,
46
- "disallowMultipleVarDecl": true,
47
- "disallowSpaceBeforeComma": true,
48
- "disallowSpaceBeforeSemicolon": true,
49
- "requireSpaceBeforeBlockStatements": true,
50
- "requireParenthesesAroundIIFE": true,
51
- "requireSpacesInConditionalExpression": true,
52
- "requireBlocksOnNewline": 1,
53
- "requireCommaBeforeLineBreak": true,
54
- "requireSpaceBeforeBinaryOperators": true,
55
- "requireSpaceAfterBinaryOperators": true,
56
- "requireCamelCaseOrUpperCaseIdentifiers": true,
57
- "requireLineFeedAtFileEnd": true,
58
- "requireCapitalizedConstructors": true,
59
- "requireDotNotation": true,
60
- "requireSpacesInForStatement": true,
61
- "requireSpaceBetweenArguments": true,
62
- "requireCurlyBraces": [
63
- "do"
64
- ],
65
- "requirePaddingNewLinesBeforeLineComments": {
66
- "allExcept": "firstAfterCurly"
67
- },
68
- "requirePaddingNewLinesAfterBlocks": true,
69
- "requireSemicolons": true,
70
- "safeContextKeyword": "_this",
71
- "validateLineBreaks": "LF",
72
- "validateIndentation": 2,
73
-
74
- "validateQuoteMarks": "\"",
75
- "requireTrailingComma": null
76
- }
@@ -1,34 +0,0 @@
1
- function cleanWhiteSpace(codeBlocks){
2
- if (!codeBlocks) return;
3
-
4
- for (var i = codeBlocks.length - 1; i >= 0; i--) {
5
- var codeBlock = codeBlocks[i],
6
- lines, offset;
7
-
8
- var text = codeBlock.textContent || codeBlock.innerText;
9
-
10
- lines = text.split( '\n' );
11
-
12
- if ( lines.length > 1 && lines[ lines.length - 1 ].trim() === '' ){
13
- lines.pop();
14
- }
15
-
16
- var canClean = lines[1] != undefined;
17
-
18
- if (canClean) {
19
- // how much white-space do we need to remove form each line?
20
- offset = lines[ 1 ].match( /^\s*/ )[ 0 ].length;
21
-
22
- // remove the excess white-space from the beginning of each line
23
- lines = lines.map( function ( line ) {
24
- return line.slice( offset );
25
- });
26
-
27
- lines.shift();
28
-
29
- codeBlock.textContent = lines.join( '\n' );
30
- }
31
-
32
- hljs.highlightBlock(codeBlock);
33
- };
34
- }