@internetstiftelsen/styleguide 2.26.3 → 2.26.4-beta.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = getCookieByName;
7
+ function getCookieByName(name) {
8
+ var match = document.cookie.match(new RegExp("(^| )" + name + "=([^;]+)"));
9
+
10
+ if (match) {
11
+ return match[2];
12
+ }
13
+
14
+ return null;
15
+ }
@@ -0,0 +1,42 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = hasCookieConsent;
7
+
8
+ var _getCookieByName = require('./getCookieByName');
9
+
10
+ var _getCookieByName2 = _interopRequireDefault(_getCookieByName);
11
+
12
+ var _queryToObj = require('./queryToObj');
13
+
14
+ var _queryToObj2 = _interopRequireDefault(_queryToObj);
15
+
16
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
+
18
+ function hasCookieConsent(category) {
19
+ var defaultIfNoCookie = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
20
+
21
+ var cookie = (0, _getCookieByName2.default)('OptanonConsent');
22
+
23
+ if (!cookie) {
24
+ return defaultIfNoCookie;
25
+ }
26
+
27
+ var cookieObj = (0, _queryToObj2.default)(cookie);
28
+
29
+ if (!('groups' in cookieObj)) {
30
+ return defaultIfNoCookie;
31
+ }
32
+
33
+ var groups = Object.fromEntries(cookieObj.groups.split(',').map(function (group) {
34
+ return group.trim().split(':');
35
+ }));
36
+
37
+ if (!(category in groups)) {
38
+ return defaultIfNoCookie;
39
+ }
40
+
41
+ return groups[category] === '1';
42
+ }
@@ -0,0 +1,25 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+
7
+ var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
8
+
9
+ exports.default = queryToObj;
10
+ /** Parse query string to object */
11
+ function queryToObj(query) {
12
+ var obj = {};
13
+ var pairs = query.split('&');
14
+
15
+ pairs.forEach(function (pair) {
16
+ var _pair$split = pair.split('='),
17
+ _pair$split2 = _slicedToArray(_pair$split, 2),
18
+ key = _pair$split2[0],
19
+ value = _pair$split2[1];
20
+
21
+ obj[decodeURIComponent(key)] = decodeURIComponent(value || '');
22
+ });
23
+
24
+ return obj;
25
+ }
@@ -5,6 +5,20 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.destroyPlayer = destroyPlayer;
7
7
  exports.setupPlayers = setupPlayers;
8
+
9
+ var _className = require('./className');
10
+
11
+ var _className2 = _interopRequireDefault(_className);
12
+
13
+ var _hasCookieConsent = require('./hasCookieConsent');
14
+
15
+ var _hasCookieConsent2 = _interopRequireDefault(_hasCookieConsent);
16
+
17
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
18
+
19
+ // TODO: Should probably implement a way to localize texts in the styleguide
20
+ var missingConsentMessage = 'För att spela Youtubefilmer krävs att "Riktade kakor" tillåts. Tryck för att "Anpassa kakor"';
21
+
8
22
  function loadYoutubeAPI() {
9
23
  var id = 'iisYoutubeAPI';
10
24
 
@@ -31,7 +45,32 @@ function onPlayerStateChange(el, e) {
31
45
  }
32
46
  }
33
47
 
48
+ function createConsentWarning(el) {
49
+ if (el.querySelector('[data-youtube-consent-warning]')) {
50
+ return;
51
+ }
52
+
53
+ var div = document.createElement('div');
54
+ var button = document.createElement('button');
55
+ var message = document.createElement('p');
56
+
57
+ div.setAttribute('data-youtube-consent-warning', true);
58
+ div.className = (0, _className2.default)('m-icon-overlay__message');
59
+ button.className = (0, _className2.default)('a-button');
60
+ button.innerHTML = '<span class="' + (0, _className2.default)('a-button__text') + ' ot-sdk-show-settings">Anpassa kakor</span>';
61
+ message.innerHTML = missingConsentMessage;
62
+
63
+ div.appendChild(message);
64
+ div.appendChild(button);
65
+
66
+ el.appendChild(div);
67
+ }
68
+
34
69
  function createCover(el) {
70
+ if (!(0, _hasCookieConsent2.default)('C0004')) {
71
+ createConsentWarning(el);
72
+ }
73
+
35
74
  if (el.getElementsByTagName('img').length) {
36
75
  return;
37
76
  }
@@ -79,6 +118,10 @@ function setupYoutubePlayer(el) {
79
118
  }
80
119
 
81
120
  function delegateClick(e) {
121
+ if (e.target.closest('[data-youtube-consent-warning]')) {
122
+ return;
123
+ }
124
+
82
125
  var el = e.target.closest('[data-youtube]');
83
126
 
84
127
  if (!el) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@internetstiftelsen/styleguide",
3
- "version": "2.26.3",
3
+ "version": "2.26.4-beta.0.2",
4
4
  "main": "dist/components.js",
5
5
  "ports": {
6
6
  "fractal": "3000"
@@ -0,0 +1,9 @@
1
+ export default function getCookieByName(name) {
2
+ const match = document.cookie.match(new RegExp(`(^| )${name}=([^;]+)`));
3
+
4
+ if (match) {
5
+ return match[2];
6
+ }
7
+
8
+ return null;
9
+ }
@@ -0,0 +1,24 @@
1
+ import getCookieByName from './getCookieByName';
2
+ import queryToObj from './queryToObj';
3
+
4
+ export default function hasCookieConsent(category, defaultIfNoCookie = true) {
5
+ const cookie = getCookieByName('OptanonConsent');
6
+
7
+ if (!cookie) {
8
+ return defaultIfNoCookie;
9
+ }
10
+
11
+ const cookieObj = queryToObj(cookie);
12
+
13
+ if (!('groups' in cookieObj)) {
14
+ return defaultIfNoCookie;
15
+ }
16
+
17
+ const groups = Object.fromEntries(cookieObj.groups.split(',').map((group) => group.trim().split(':')));
18
+
19
+ if (!(category in groups)) {
20
+ return defaultIfNoCookie;
21
+ }
22
+
23
+ return groups[category] === '1';
24
+ }
@@ -0,0 +1,12 @@
1
+ /** Parse query string to object */
2
+ export default function queryToObj(query) {
3
+ const obj = {};
4
+ const pairs = query.split('&');
5
+
6
+ pairs.forEach((pair) => {
7
+ const [key, value] = pair.split('=');
8
+ obj[decodeURIComponent(key)] = decodeURIComponent(value || '');
9
+ });
10
+
11
+ return obj;
12
+ }
@@ -1,3 +1,9 @@
1
+ // TODO: Should probably implement a way to localize texts in the styleguide
2
+ import className from './className';
3
+ import hasCookieConsent from './hasCookieConsent';
4
+
5
+ const missingConsentMessage = 'För att spela Youtubefilmer krävs att "Riktade kakor" tillåts. Tryck för att "Anpassa kakor"';
6
+
1
7
  function loadYoutubeAPI() {
2
8
  const id = 'iisYoutubeAPI';
3
9
 
@@ -24,7 +30,32 @@ function onPlayerStateChange(el, e) {
24
30
  }
25
31
  }
26
32
 
33
+ function createConsentWarning(el) {
34
+ if (el.querySelector('[data-youtube-consent-warning]')) {
35
+ return;
36
+ }
37
+
38
+ const div = document.createElement('div');
39
+ const button = document.createElement('button');
40
+ const message = document.createElement('p');
41
+
42
+ div.setAttribute('data-youtube-consent-warning', true);
43
+ div.className = className('m-icon-overlay__message');
44
+ button.className = className('a-button');
45
+ button.innerHTML = `<span class="${className('a-button__text')} ot-sdk-show-settings">Anpassa kakor</span>`;
46
+ message.innerHTML = missingConsentMessage;
47
+
48
+ div.appendChild(message);
49
+ div.appendChild(button);
50
+
51
+ el.appendChild(div);
52
+ }
53
+
27
54
  function createCover(el) {
55
+ if (!hasCookieConsent('C0004')) {
56
+ createConsentWarning(el);
57
+ }
58
+
28
59
  if (el.getElementsByTagName('img').length) {
29
60
  return;
30
61
  }
@@ -70,6 +101,10 @@ function setupYoutubePlayer(el) {
70
101
  }
71
102
 
72
103
  function delegateClick(e) {
104
+ if (e.target.closest('[data-youtube-consent-warning]')) {
105
+ return;
106
+ }
107
+
73
108
  const el = e.target.closest('[data-youtube]');
74
109
 
75
110
  if (!el) {
@@ -28,7 +28,7 @@
28
28
 
29
29
  @include e(button) {
30
30
  position: absolute;
31
- z-index: z_index(foregroundMinus);
31
+ z-index: 3;
32
32
  top: 50%;
33
33
  left: 50%;
34
34
  width: rhythm(7);
@@ -63,4 +63,21 @@
63
63
  height: rhythm(10);
64
64
  }
65
65
  }
66
+
67
+ @include e(message) {
68
+ display: flex;
69
+ flex-direction: column;
70
+ position: absolute;
71
+ z-index: 4;
72
+ top: 0;
73
+ right: 0;
74
+ bottom: 0;
75
+ left: 0;
76
+ align-items: center;
77
+ justify-content: center;
78
+ text-align: center;
79
+ background: $color-concrete;
80
+ padding-left: rhythm(2);
81
+ padding-right: rhythm(2);
82
+ }
66
83
  }