lookbook 1.0.0.beta.5 → 1.0.0.beta.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +27 -254
- data/app/assets/lookbook/css/lookbook.css +1 -1
- data/app/assets/lookbook/css/themes/blue.css +57 -36
- data/app/assets/lookbook/css/themes/indigo.css +57 -36
- data/app/assets/lookbook/css/themes/zinc.css +57 -36
- data/app/assets/lookbook/css/tooltip.css +5 -5
- data/app/components/lookbook/button/component.html.erb +2 -2
- data/app/components/lookbook/embed/component.html.erb +5 -5
- data/app/components/lookbook/embed/component.rb +8 -0
- data/app/components/lookbook/filter/component.html.erb +1 -1
- data/app/components/lookbook/header/component.html.erb +1 -1
- data/app/components/lookbook/inspector_panel/component.html.erb +4 -0
- data/app/components/lookbook/inspector_panel/component.rb +36 -0
- data/app/components/lookbook/nav/item/component.html.erb +1 -1
- data/app/components/lookbook/prose/component.html.erb +1 -1
- data/app/components/lookbook/tabs/dropdown_tab/component.html.erb +1 -1
- data/app/components/lookbook/tabs/tab/component.html.erb +1 -1
- data/app/components/lookbook/toolbar/component.html.erb +1 -1
- data/app/components/lookbook/viewport/component.css +1 -1
- data/app/components/lookbook/viewport/component.html.erb +1 -1
- data/app/controllers/lookbook/pages_controller.rb +1 -0
- data/app/controllers/lookbook/previews_controller.rb +15 -3
- data/app/helpers/lookbook/application_helper.rb +0 -6
- data/app/helpers/lookbook/preview_helper.rb +2 -3
- data/app/views/layouts/lookbook/application.html.erb +1 -1
- data/app/views/layouts/lookbook/page.html.erb +2 -2
- data/app/views/layouts/lookbook/shell.html.erb +6 -0
- data/app/views/layouts/lookbook/skeleton.html.erb +0 -6
- data/app/views/lookbook/previews/panels/_content.html.erb +1 -1
- data/app/views/lookbook/previews/panels/_notes.html.erb +2 -2
- data/app/views/lookbook/previews/panels/_params.html.erb +1 -1
- data/app/views/lookbook/previews/show.html.erb +5 -3
- data/lib/lookbook/config.rb +56 -39
- data/lib/lookbook/engine.rb +8 -0
- data/lib/lookbook/params.rb +12 -0
- data/lib/lookbook/store.rb +8 -0
- data/lib/lookbook/version.rb +1 -1
- data/public/lookbook-assets/css/lookbook.css +302 -150
- data/public/lookbook-assets/css/lookbook.css.map +1 -1
- data/public/lookbook-assets/css/themes/blue.css +57 -36
- data/public/lookbook-assets/css/themes/blue.css.map +1 -1
- data/public/lookbook-assets/css/themes/indigo.css +57 -36
- data/public/lookbook-assets/css/themes/indigo.css.map +1 -1
- data/public/lookbook-assets/css/themes/zinc.css +57 -36
- data/public/lookbook-assets/css/themes/zinc.css.map +1 -1
- data/public/lookbook-assets/js/embed.js +193 -193
- data/public/lookbook-assets/js/lookbook.js +1169 -1326
- data/public/lookbook-assets/js/lookbook.js.map +1 -1
- metadata +6 -4
@@ -1,24 +1,24 @@
|
|
1
1
|
(() => {
|
2
2
|
var $b2e1fd3e30ab1f5c$exports = {};
|
3
3
|
(function(undefined) {
|
4
|
-
if (typeof window ===
|
5
|
-
var autoResize = true, base = 10, bodyBackground =
|
4
|
+
if (typeof window === "undefined") return; // don't run for server side render
|
5
|
+
var autoResize = true, base = 10, bodyBackground = "", bodyMargin = 0, bodyMarginStr = "", bodyObserver = null, bodyPadding = "", calculateWidth = false, doubleEventList = {
|
6
6
|
resize: 1,
|
7
7
|
click: 1
|
8
|
-
}, eventCancelTimer = 128, firstRun = true, height1 = 1, heightCalcModeDefault =
|
8
|
+
}, eventCancelTimer = 128, firstRun = true, height1 = 1, heightCalcModeDefault = "bodyOffset", heightCalcMode = heightCalcModeDefault, initLock = true, initMsg = "", inPageLinks = {}, interval = 32, intervalTimer = null, logging = false, mouseEvents = false, msgID = "[iFrameSizer]", msgIdLen = msgID.length, myID = "", resetRequiredMethods = {
|
9
9
|
max: 1,
|
10
10
|
min: 1,
|
11
11
|
bodyScroll: 1,
|
12
12
|
documentElementScroll: 1
|
13
|
-
}, resizeFrom =
|
14
|
-
warn(
|
13
|
+
}, resizeFrom = "child", sendPermit = true, target1 = window.parent, targetOriginDefault = "*", tolerance = 0, triggerLocked = false, triggerLockedTimer = null, throttledTimer = 16, width1 = 1, widthCalcModeDefault = "scroll", widthCalcMode = widthCalcModeDefault, win = window, onMessage = function() {
|
14
|
+
warn("onMessage function not defined");
|
15
15
|
}, onReady = function() {}, onPageInfo = function() {}, customCalcMethods = {
|
16
16
|
height: function() {
|
17
|
-
warn(
|
17
|
+
warn("Custom height calculation function not defined");
|
18
18
|
return document.documentElement.offsetHeight;
|
19
19
|
},
|
20
20
|
width: function() {
|
21
|
-
warn(
|
21
|
+
warn("Custom width calculation function not defined");
|
22
22
|
return document.body.scrollWidth;
|
23
23
|
}
|
24
24
|
}, eventHandlersByName = {}, passiveSupported = false;
|
@@ -31,8 +31,8 @@ var $b2e1fd3e30ab1f5c$exports = {};
|
|
31
31
|
}
|
32
32
|
}
|
33
33
|
});
|
34
|
-
window.addEventListener(
|
35
|
-
window.removeEventListener(
|
34
|
+
window.addEventListener("test", noop, options);
|
35
|
+
window.removeEventListener("test", noop, options);
|
36
36
|
} catch (error) {
|
37
37
|
/* */ }
|
38
38
|
function addEventListener(el, evt, func, options) {
|
@@ -73,23 +73,23 @@ var $b2e1fd3e30ab1f5c$exports = {};
|
|
73
73
|
};
|
74
74
|
}
|
75
75
|
function formatLogMsg(msg) {
|
76
|
-
return msgID +
|
76
|
+
return msgID + "[" + myID + "] " + msg;
|
77
77
|
}
|
78
78
|
function log(msg) {
|
79
|
-
if (logging &&
|
79
|
+
if (logging && "object" === typeof window.console) // eslint-disable-next-line no-console
|
80
80
|
console.log(formatLogMsg(msg));
|
81
81
|
}
|
82
82
|
function warn(msg) {
|
83
|
-
if (
|
83
|
+
if ("object" === typeof window.console) // eslint-disable-next-line no-console
|
84
84
|
console.warn(formatLogMsg(msg));
|
85
85
|
}
|
86
86
|
function init() {
|
87
87
|
readDataFromParent();
|
88
|
-
log(
|
88
|
+
log("Initialising iFrame (" + window.location.href + ")");
|
89
89
|
readDataFromPage();
|
90
90
|
setMargin();
|
91
|
-
setBodyStyle(
|
92
|
-
setBodyStyle(
|
91
|
+
setBodyStyle("background", bodyBackground);
|
92
|
+
setBodyStyle("padding", bodyPadding);
|
93
93
|
injectClearFixIntoBodyElement();
|
94
94
|
checkHeightMode();
|
95
95
|
checkWidthMode();
|
@@ -98,14 +98,14 @@ var $b2e1fd3e30ab1f5c$exports = {};
|
|
98
98
|
setupMouseEvents();
|
99
99
|
startEventListeners();
|
100
100
|
inPageLinks = setupInPageLinks();
|
101
|
-
sendSize(
|
101
|
+
sendSize("init", "Init message from host page");
|
102
102
|
onReady();
|
103
103
|
}
|
104
104
|
function readDataFromParent() {
|
105
105
|
function strBool(str) {
|
106
|
-
return
|
106
|
+
return "true" === str;
|
107
107
|
}
|
108
|
-
var data = initMsg.substr(msgIdLen).split(
|
108
|
+
var data = initMsg.substr(msgIdLen).split(":");
|
109
109
|
myID = data[0];
|
110
110
|
bodyMargin = undefined !== data[1] ? Number(data[1]) : bodyMargin // For V1 compatibility
|
111
111
|
;
|
@@ -124,9 +124,9 @@ var $b2e1fd3e30ab1f5c$exports = {};
|
|
124
124
|
mouseEvents = undefined !== data[15] ? Boolean(data[15]) : mouseEvents;
|
125
125
|
}
|
126
126
|
function depricate(key) {
|
127
|
-
var splitName = key.split(
|
127
|
+
var splitName = key.split("Callback");
|
128
128
|
if (splitName.length === 2) {
|
129
|
-
var name =
|
129
|
+
var name = "on" + splitName[0].charAt(0).toUpperCase() + splitName[0].slice(1);
|
130
130
|
this[name] = this[key];
|
131
131
|
delete this[key];
|
132
132
|
warn("Deprecated: '" + key + "' has been renamed '" + name + "'. The old method will be removed in the next major version.");
|
@@ -135,50 +135,50 @@ var $b2e1fd3e30ab1f5c$exports = {};
|
|
135
135
|
function readDataFromPage() {
|
136
136
|
function readData() {
|
137
137
|
var data = window.iFrameResizer;
|
138
|
-
log(
|
138
|
+
log("Reading data from page: " + JSON.stringify(data));
|
139
139
|
Object.keys(data).forEach(depricate, data);
|
140
|
-
onMessage =
|
141
|
-
onReady =
|
142
|
-
targetOriginDefault =
|
143
|
-
heightCalcMode =
|
144
|
-
widthCalcMode =
|
140
|
+
onMessage = "onMessage" in data ? data.onMessage : onMessage;
|
141
|
+
onReady = "onReady" in data ? data.onReady : onReady;
|
142
|
+
targetOriginDefault = "targetOrigin" in data ? data.targetOrigin : targetOriginDefault;
|
143
|
+
heightCalcMode = "heightCalculationMethod" in data ? data.heightCalculationMethod : heightCalcMode;
|
144
|
+
widthCalcMode = "widthCalculationMethod" in data ? data.widthCalculationMethod : widthCalcMode;
|
145
145
|
}
|
146
146
|
function setupCustomCalcMethods(calcMode, calcFunc) {
|
147
|
-
if (
|
148
|
-
log(
|
147
|
+
if ("function" === typeof calcMode) {
|
148
|
+
log("Setup custom " + calcFunc + "CalcMethod");
|
149
149
|
customCalcMethods[calcFunc] = calcMode;
|
150
|
-
calcMode =
|
150
|
+
calcMode = "custom";
|
151
151
|
}
|
152
152
|
return calcMode;
|
153
153
|
}
|
154
|
-
if (
|
154
|
+
if ("iFrameResizer" in window && Object === window.iFrameResizer.constructor) {
|
155
155
|
readData();
|
156
|
-
heightCalcMode = setupCustomCalcMethods(heightCalcMode,
|
157
|
-
widthCalcMode = setupCustomCalcMethods(widthCalcMode,
|
156
|
+
heightCalcMode = setupCustomCalcMethods(heightCalcMode, "height");
|
157
|
+
widthCalcMode = setupCustomCalcMethods(widthCalcMode, "width");
|
158
158
|
}
|
159
|
-
log(
|
159
|
+
log("TargetOrigin for parent set to: " + targetOriginDefault);
|
160
160
|
}
|
161
161
|
function chkCSS(attr, value) {
|
162
|
-
if (-1 !== value.indexOf(
|
163
|
-
warn(
|
164
|
-
value =
|
162
|
+
if (-1 !== value.indexOf("-")) {
|
163
|
+
warn("Negative CSS value ignored for " + attr);
|
164
|
+
value = "";
|
165
165
|
}
|
166
166
|
return value;
|
167
167
|
}
|
168
168
|
function setBodyStyle(attr, value) {
|
169
|
-
if (undefined !== value &&
|
169
|
+
if (undefined !== value && "" !== value && "null" !== value) {
|
170
170
|
document.body.style[attr] = value;
|
171
|
-
log(
|
171
|
+
log("Body " + attr + ' set to "' + value + '"');
|
172
172
|
}
|
173
173
|
}
|
174
174
|
function setMargin() {
|
175
175
|
// If called via V1 script, convert bodyMargin from int to str
|
176
|
-
if (undefined === bodyMarginStr) bodyMarginStr = bodyMargin +
|
177
|
-
setBodyStyle(
|
176
|
+
if (undefined === bodyMarginStr) bodyMarginStr = bodyMargin + "px";
|
177
|
+
setBodyStyle("margin", chkCSS("margin", bodyMarginStr));
|
178
178
|
}
|
179
179
|
function stopInfiniteResizingOfIFrame() {
|
180
|
-
document.documentElement.style.height =
|
181
|
-
document.body.style.height =
|
180
|
+
document.documentElement.style.height = "";
|
181
|
+
document.body.style.height = "";
|
182
182
|
log('HTML & body height set to "auto"');
|
183
183
|
}
|
184
184
|
function manageTriggerEvent(options) {
|
@@ -202,124 +202,124 @@ var $b2e1fd3e30ab1f5c$exports = {};
|
|
202
202
|
options.eventName = options.eventNames[0];
|
203
203
|
options.eventNames.map(listener[options.method]);
|
204
204
|
} else listener[options.method](options.eventName);
|
205
|
-
log(capitalizeFirstLetter(options.method) +
|
205
|
+
log(capitalizeFirstLetter(options.method) + " event listener: " + options.eventType);
|
206
206
|
}
|
207
207
|
function manageEventListeners(method) {
|
208
208
|
manageTriggerEvent({
|
209
209
|
method: method,
|
210
|
-
eventType:
|
210
|
+
eventType: "Animation Start",
|
211
211
|
eventNames: [
|
212
|
-
|
213
|
-
|
212
|
+
"animationstart",
|
213
|
+
"webkitAnimationStart"
|
214
214
|
]
|
215
215
|
});
|
216
216
|
manageTriggerEvent({
|
217
217
|
method: method,
|
218
|
-
eventType:
|
218
|
+
eventType: "Animation Iteration",
|
219
219
|
eventNames: [
|
220
|
-
|
221
|
-
|
220
|
+
"animationiteration",
|
221
|
+
"webkitAnimationIteration"
|
222
222
|
]
|
223
223
|
});
|
224
224
|
manageTriggerEvent({
|
225
225
|
method: method,
|
226
|
-
eventType:
|
226
|
+
eventType: "Animation End",
|
227
227
|
eventNames: [
|
228
|
-
|
229
|
-
|
228
|
+
"animationend",
|
229
|
+
"webkitAnimationEnd"
|
230
230
|
]
|
231
231
|
});
|
232
232
|
manageTriggerEvent({
|
233
233
|
method: method,
|
234
|
-
eventType:
|
235
|
-
eventName:
|
234
|
+
eventType: "Input",
|
235
|
+
eventName: "input"
|
236
236
|
});
|
237
237
|
manageTriggerEvent({
|
238
238
|
method: method,
|
239
|
-
eventType:
|
240
|
-
eventName:
|
239
|
+
eventType: "Mouse Up",
|
240
|
+
eventName: "mouseup"
|
241
241
|
});
|
242
242
|
manageTriggerEvent({
|
243
243
|
method: method,
|
244
|
-
eventType:
|
245
|
-
eventName:
|
244
|
+
eventType: "Mouse Down",
|
245
|
+
eventName: "mousedown"
|
246
246
|
});
|
247
247
|
manageTriggerEvent({
|
248
248
|
method: method,
|
249
|
-
eventType:
|
250
|
-
eventName:
|
249
|
+
eventType: "Orientation Change",
|
250
|
+
eventName: "orientationchange"
|
251
251
|
});
|
252
252
|
manageTriggerEvent({
|
253
253
|
method: method,
|
254
|
-
eventType:
|
254
|
+
eventType: "Print",
|
255
255
|
eventName: [
|
256
|
-
|
257
|
-
|
256
|
+
"afterprint",
|
257
|
+
"beforeprint"
|
258
258
|
]
|
259
259
|
});
|
260
260
|
manageTriggerEvent({
|
261
261
|
method: method,
|
262
|
-
eventType:
|
263
|
-
eventName:
|
262
|
+
eventType: "Ready State Change",
|
263
|
+
eventName: "readystatechange"
|
264
264
|
});
|
265
265
|
manageTriggerEvent({
|
266
266
|
method: method,
|
267
|
-
eventType:
|
268
|
-
eventName:
|
267
|
+
eventType: "Touch Start",
|
268
|
+
eventName: "touchstart"
|
269
269
|
});
|
270
270
|
manageTriggerEvent({
|
271
271
|
method: method,
|
272
|
-
eventType:
|
273
|
-
eventName:
|
272
|
+
eventType: "Touch End",
|
273
|
+
eventName: "touchend"
|
274
274
|
});
|
275
275
|
manageTriggerEvent({
|
276
276
|
method: method,
|
277
|
-
eventType:
|
278
|
-
eventName:
|
277
|
+
eventType: "Touch Cancel",
|
278
|
+
eventName: "touchcancel"
|
279
279
|
});
|
280
280
|
manageTriggerEvent({
|
281
281
|
method: method,
|
282
|
-
eventType:
|
282
|
+
eventType: "Transition Start",
|
283
283
|
eventNames: [
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
284
|
+
"transitionstart",
|
285
|
+
"webkitTransitionStart",
|
286
|
+
"MSTransitionStart",
|
287
|
+
"oTransitionStart",
|
288
|
+
"otransitionstart"
|
289
289
|
]
|
290
290
|
});
|
291
291
|
manageTriggerEvent({
|
292
292
|
method: method,
|
293
|
-
eventType:
|
293
|
+
eventType: "Transition Iteration",
|
294
294
|
eventNames: [
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
295
|
+
"transitioniteration",
|
296
|
+
"webkitTransitionIteration",
|
297
|
+
"MSTransitionIteration",
|
298
|
+
"oTransitionIteration",
|
299
|
+
"otransitioniteration"
|
300
300
|
]
|
301
301
|
});
|
302
302
|
manageTriggerEvent({
|
303
303
|
method: method,
|
304
|
-
eventType:
|
304
|
+
eventType: "Transition End",
|
305
305
|
eventNames: [
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
306
|
+
"transitionend",
|
307
|
+
"webkitTransitionEnd",
|
308
|
+
"MSTransitionEnd",
|
309
|
+
"oTransitionEnd",
|
310
|
+
"otransitionend"
|
311
311
|
]
|
312
312
|
});
|
313
|
-
if (
|
313
|
+
if ("child" === resizeFrom) manageTriggerEvent({
|
314
314
|
method: method,
|
315
|
-
eventType:
|
316
|
-
eventName:
|
315
|
+
eventType: "IFrame Resized",
|
316
|
+
eventName: "resize"
|
317
317
|
});
|
318
318
|
}
|
319
319
|
function checkCalcMode(calcMode, calcModeDefault, modes, type) {
|
320
320
|
if (calcModeDefault !== calcMode) {
|
321
321
|
if (!(calcMode in modes)) {
|
322
|
-
warn(calcMode +
|
322
|
+
warn(calcMode + " is not a valid option for " + type + "CalculationMethod.");
|
323
323
|
calcMode = calcModeDefault;
|
324
324
|
}
|
325
325
|
log(type + ' calculation method set to "' + calcMode + '"');
|
@@ -327,16 +327,16 @@ var $b2e1fd3e30ab1f5c$exports = {};
|
|
327
327
|
return calcMode;
|
328
328
|
}
|
329
329
|
function checkHeightMode() {
|
330
|
-
heightCalcMode = checkCalcMode(heightCalcMode, heightCalcModeDefault, getHeight,
|
330
|
+
heightCalcMode = checkCalcMode(heightCalcMode, heightCalcModeDefault, getHeight, "height");
|
331
331
|
}
|
332
332
|
function checkWidthMode() {
|
333
|
-
widthCalcMode = checkCalcMode(widthCalcMode, widthCalcModeDefault, getWidth,
|
333
|
+
widthCalcMode = checkCalcMode(widthCalcMode, widthCalcModeDefault, getWidth, "width");
|
334
334
|
}
|
335
335
|
function startEventListeners() {
|
336
336
|
if (true === autoResize) {
|
337
|
-
manageEventListeners(
|
337
|
+
manageEventListeners("add");
|
338
338
|
setupMutationObserver();
|
339
|
-
} else log(
|
339
|
+
} else log("Auto Resize disabled");
|
340
340
|
}
|
341
341
|
// function stopMsgsToParent() {
|
342
342
|
// log('Disable outgoing messages')
|
@@ -351,7 +351,7 @@ var $b2e1fd3e30ab1f5c$exports = {};
|
|
351
351
|
bodyObserver.disconnect();
|
352
352
|
}
|
353
353
|
function stopEventListeners() {
|
354
|
-
manageEventListeners(
|
354
|
+
manageEventListeners("remove");
|
355
355
|
disconnectMutationObserver();
|
356
356
|
clearInterval(intervalTimer);
|
357
357
|
}
|
@@ -361,11 +361,11 @@ var $b2e1fd3e30ab1f5c$exports = {};
|
|
361
361
|
// if (true === autoResize) stopEventListeners()
|
362
362
|
// }
|
363
363
|
function injectClearFixIntoBodyElement() {
|
364
|
-
var clearFix = document.createElement(
|
365
|
-
clearFix.style.clear =
|
364
|
+
var clearFix = document.createElement("div");
|
365
|
+
clearFix.style.clear = "both";
|
366
366
|
// Guard against the following having been globally redefined in CSS.
|
367
|
-
clearFix.style.display =
|
368
|
-
clearFix.style.height =
|
367
|
+
clearFix.style.display = "block";
|
368
|
+
clearFix.style.height = "0";
|
369
369
|
document.body.appendChild(clearFix);
|
370
370
|
}
|
371
371
|
function setupInPageLinks() {
|
@@ -385,34 +385,34 @@ var $b2e1fd3e30ab1f5c$exports = {};
|
|
385
385
|
function findTarget(location) {
|
386
386
|
function jumpToTarget(target) {
|
387
387
|
var jumpPosition = getElementPosition(target);
|
388
|
-
log(
|
389
|
-
sendMsg(jumpPosition.y, jumpPosition.x,
|
388
|
+
log("Moving to in page link (#" + hash + ") at x: " + jumpPosition.x + " y: " + jumpPosition.y);
|
389
|
+
sendMsg(jumpPosition.y, jumpPosition.x, "scrollToOffset") // X&Y reversed at sendMsg uses height/width
|
390
390
|
;
|
391
391
|
}
|
392
|
-
var hash = location.split(
|
392
|
+
var hash = location.split("#")[1] || location, hashData = decodeURIComponent(hash), target2 = document.getElementById(hashData) || document.getElementsByName(hashData)[0];
|
393
393
|
if (undefined !== target2) jumpToTarget(target2);
|
394
394
|
else {
|
395
|
-
log(
|
396
|
-
sendMsg(0, 0,
|
395
|
+
log("In page link (#" + hash + ") not found in iFrame, so sending to parent");
|
396
|
+
sendMsg(0, 0, "inPageLink", "#" + hash);
|
397
397
|
}
|
398
398
|
}
|
399
399
|
function checkLocationHash() {
|
400
400
|
var hash = window.location.hash;
|
401
401
|
var href = window.location.href;
|
402
|
-
if (
|
402
|
+
if ("" !== hash && "#" !== hash) findTarget(href);
|
403
403
|
}
|
404
404
|
function bindAnchors() {
|
405
405
|
function setupLink(el) {
|
406
406
|
function linkClicked(e) {
|
407
407
|
e.preventDefault();
|
408
|
-
/* jshint validthis:true */ findTarget(this.getAttribute(
|
408
|
+
/* jshint validthis:true */ findTarget(this.getAttribute("href"));
|
409
409
|
}
|
410
|
-
if (
|
410
|
+
if ("#" !== el.getAttribute("href")) addEventListener(el, "click", linkClicked);
|
411
411
|
}
|
412
412
|
Array.prototype.forEach.call(document.querySelectorAll('a[href^="#"]'), setupLink);
|
413
413
|
}
|
414
414
|
function bindLocationHash() {
|
415
|
-
addEventListener(window,
|
415
|
+
addEventListener(window, "hashchange", checkLocationHash);
|
416
416
|
}
|
417
417
|
function initCheck() {
|
418
418
|
// Check if page loaded with location hash after init resize
|
@@ -421,14 +421,14 @@ var $b2e1fd3e30ab1f5c$exports = {};
|
|
421
421
|
function enableInPageLinks() {
|
422
422
|
/* istanbul ignore else */ // Not testable in phantonJS
|
423
423
|
if (Array.prototype.forEach && document.querySelectorAll) {
|
424
|
-
log(
|
424
|
+
log("Setting up location.hash handlers");
|
425
425
|
bindAnchors();
|
426
426
|
bindLocationHash();
|
427
427
|
initCheck();
|
428
|
-
} else warn(
|
428
|
+
} else warn("In page linking not fully supported in this browser! (See README.md for IE8 workaround)");
|
429
429
|
}
|
430
430
|
if (inPageLinks.enable) enableInPageLinks();
|
431
|
-
else log(
|
431
|
+
else log("In page linking not enabled");
|
432
432
|
return {
|
433
433
|
findTarget: findTarget
|
434
434
|
};
|
@@ -436,17 +436,17 @@ var $b2e1fd3e30ab1f5c$exports = {};
|
|
436
436
|
function setupMouseEvents() {
|
437
437
|
if (mouseEvents !== true) return;
|
438
438
|
function sendMouse(e) {
|
439
|
-
sendMsg(0, 0, e.type, e.screenY +
|
439
|
+
sendMsg(0, 0, e.type, e.screenY + ":" + e.screenX);
|
440
440
|
}
|
441
441
|
function addMouseListener(evt, name) {
|
442
|
-
log(
|
442
|
+
log("Add event listener: " + name);
|
443
443
|
addEventListener(window.document, evt, sendMouse);
|
444
444
|
}
|
445
|
-
addMouseListener(
|
446
|
-
addMouseListener(
|
445
|
+
addMouseListener("mouseenter", "Mouse Enter");
|
446
|
+
addMouseListener("mouseleave", "Mouse Leave");
|
447
447
|
}
|
448
448
|
function setupPublicMethods() {
|
449
|
-
log(
|
449
|
+
log("Enable public methods");
|
450
450
|
win.parentIFrame = {
|
451
451
|
autoResize: function autoResizeF(resize) {
|
452
452
|
if (true === resize && false === autoResize) {
|
@@ -456,41 +456,41 @@ var $b2e1fd3e30ab1f5c$exports = {};
|
|
456
456
|
autoResize = false;
|
457
457
|
stopEventListeners();
|
458
458
|
}
|
459
|
-
sendMsg(0, 0,
|
459
|
+
sendMsg(0, 0, "autoResize", JSON.stringify(autoResize));
|
460
460
|
return autoResize;
|
461
461
|
},
|
462
462
|
close: function closeF() {
|
463
|
-
sendMsg(0, 0,
|
463
|
+
sendMsg(0, 0, "close");
|
464
464
|
// teardown()
|
465
465
|
},
|
466
466
|
getId: function getIdF() {
|
467
467
|
return myID;
|
468
468
|
},
|
469
469
|
getPageInfo: function getPageInfoF(callback) {
|
470
|
-
if (
|
470
|
+
if ("function" === typeof callback) {
|
471
471
|
onPageInfo = callback;
|
472
|
-
sendMsg(0, 0,
|
472
|
+
sendMsg(0, 0, "pageInfo");
|
473
473
|
} else {
|
474
474
|
onPageInfo = function() {};
|
475
|
-
sendMsg(0, 0,
|
475
|
+
sendMsg(0, 0, "pageInfoStop");
|
476
476
|
}
|
477
477
|
},
|
478
478
|
moveToAnchor: function moveToAnchorF(hash) {
|
479
479
|
inPageLinks.findTarget(hash);
|
480
480
|
},
|
481
481
|
reset: function resetF() {
|
482
|
-
resetIFrame(
|
482
|
+
resetIFrame("parentIFrame.reset");
|
483
483
|
},
|
484
484
|
scrollTo: function scrollToF(x, y) {
|
485
|
-
sendMsg(y, x,
|
485
|
+
sendMsg(y, x, "scrollTo") // X&Y reversed at sendMsg uses height/width
|
486
486
|
;
|
487
487
|
},
|
488
488
|
scrollToOffset: function scrollToF(x, y) {
|
489
|
-
sendMsg(y, x,
|
489
|
+
sendMsg(y, x, "scrollToOffset") // X&Y reversed at sendMsg uses height/width
|
490
490
|
;
|
491
491
|
},
|
492
492
|
sendMessage: function sendMessageF(msg, targetOrigin) {
|
493
|
-
sendMsg(0, 0,
|
493
|
+
sendMsg(0, 0, "message", JSON.stringify(msg), targetOrigin);
|
494
494
|
},
|
495
495
|
setHeightCalculationMethod: function setHeightCalculationMethodF(heightCalculationMethod) {
|
496
496
|
heightCalcMode = heightCalculationMethod;
|
@@ -501,20 +501,20 @@ var $b2e1fd3e30ab1f5c$exports = {};
|
|
501
501
|
checkWidthMode();
|
502
502
|
},
|
503
503
|
setTargetOrigin: function setTargetOriginF(targetOrigin) {
|
504
|
-
log(
|
504
|
+
log("Set targetOrigin: " + targetOrigin);
|
505
505
|
targetOriginDefault = targetOrigin;
|
506
506
|
},
|
507
507
|
size: function sizeF(customHeight, customWidth) {
|
508
|
-
var valString =
|
509
|
-
sendSize(
|
508
|
+
var valString = "" + (customHeight || "") + (customWidth ? "," + customWidth : "");
|
509
|
+
sendSize("size", "parentIFrame.size(" + valString + ")", customHeight, customWidth);
|
510
510
|
}
|
511
511
|
};
|
512
512
|
}
|
513
513
|
function initInterval() {
|
514
514
|
if (0 !== interval) {
|
515
|
-
log(
|
515
|
+
log("setInterval: " + interval + "ms");
|
516
516
|
intervalTimer = setInterval(function() {
|
517
|
-
sendSize(
|
517
|
+
sendSize("interval", "setInterval: " + interval);
|
518
518
|
}, Math.abs(interval));
|
519
519
|
}
|
520
520
|
}
|
@@ -523,41 +523,41 @@ var $b2e1fd3e30ab1f5c$exports = {};
|
|
523
523
|
function addImageLoadListners(mutation) {
|
524
524
|
function addImageLoadListener(element) {
|
525
525
|
if (false === element.complete) {
|
526
|
-
log(
|
527
|
-
element.addEventListener(
|
528
|
-
element.addEventListener(
|
526
|
+
log("Attach listeners to " + element.src);
|
527
|
+
element.addEventListener("load", imageLoaded, false);
|
528
|
+
element.addEventListener("error", imageError, false);
|
529
529
|
elements.push(element);
|
530
530
|
}
|
531
531
|
}
|
532
|
-
if (mutation.type ===
|
533
|
-
else if (mutation.type ===
|
532
|
+
if (mutation.type === "attributes" && mutation.attributeName === "src") addImageLoadListener(mutation.target);
|
533
|
+
else if (mutation.type === "childList") Array.prototype.forEach.call(mutation.target.querySelectorAll("img"), addImageLoadListener);
|
534
534
|
}
|
535
535
|
function removeFromArray(element) {
|
536
536
|
elements.splice(elements.indexOf(element), 1);
|
537
537
|
}
|
538
538
|
function removeImageLoadListener(element) {
|
539
|
-
log(
|
540
|
-
element.removeEventListener(
|
541
|
-
element.removeEventListener(
|
539
|
+
log("Remove listeners from " + element.src);
|
540
|
+
element.removeEventListener("load", imageLoaded, false);
|
541
|
+
element.removeEventListener("error", imageError, false);
|
542
542
|
removeFromArray(element);
|
543
543
|
}
|
544
544
|
function imageEventTriggered(event, type, typeDesc) {
|
545
545
|
removeImageLoadListener(event.target);
|
546
|
-
sendSize(type, typeDesc +
|
546
|
+
sendSize(type, typeDesc + ": " + event.target.src);
|
547
547
|
}
|
548
548
|
function imageLoaded(event) {
|
549
|
-
imageEventTriggered(event,
|
549
|
+
imageEventTriggered(event, "imageLoad", "Image loaded");
|
550
550
|
}
|
551
551
|
function imageError(event) {
|
552
|
-
imageEventTriggered(event,
|
552
|
+
imageEventTriggered(event, "imageLoadFailed", "Image load failed");
|
553
553
|
}
|
554
554
|
function mutationObserved(mutations) {
|
555
|
-
sendSize(
|
555
|
+
sendSize("mutationObserver", "mutationObserver: " + mutations[0].target + " " + mutations[0].type);
|
556
556
|
// Deal with WebKit / Blink asyncing image loading when tags are injected into the page
|
557
557
|
mutations.forEach(addImageLoadListners);
|
558
558
|
}
|
559
559
|
function createMutationObserver() {
|
560
|
-
var target = document.querySelector(
|
560
|
+
var target = document.querySelector("body"), config = {
|
561
561
|
attributes: true,
|
562
562
|
attributeOldValue: false,
|
563
563
|
characterData: true,
|
@@ -566,15 +566,15 @@ var $b2e1fd3e30ab1f5c$exports = {};
|
|
566
566
|
subtree: true
|
567
567
|
};
|
568
568
|
observer = new MutationObserver(mutationObserved);
|
569
|
-
log(
|
569
|
+
log("Create body MutationObserver");
|
570
570
|
observer.observe(target, config);
|
571
571
|
return observer;
|
572
572
|
}
|
573
573
|
var elements = [], MutationObserver = window.MutationObserver || window.WebKitMutationObserver, observer = createMutationObserver();
|
574
574
|
return {
|
575
575
|
disconnect: function() {
|
576
|
-
if (
|
577
|
-
log(
|
576
|
+
if ("disconnect" in observer) {
|
577
|
+
log("Disconnect body MutationObserver");
|
578
578
|
observer.disconnect();
|
579
579
|
elements.forEach(removeImageLoadListener);
|
580
580
|
}
|
@@ -588,7 +588,7 @@ var $b2e1fd3e30ab1f5c$exports = {};
|
|
588
588
|
if (forceIntervalTimer) initInterval();
|
589
589
|
else bodyObserver = setupBodyMutationObserver();
|
590
590
|
} else {
|
591
|
-
log(
|
591
|
+
log("MutationObserver not supported in this browser!");
|
592
592
|
initInterval();
|
593
593
|
}
|
594
594
|
}
|
@@ -605,19 +605,19 @@ var $b2e1fd3e30ab1f5c$exports = {};
|
|
605
605
|
function chkEventThottle(timer) {
|
606
606
|
if (timer > throttledTimer / 2) {
|
607
607
|
throttledTimer = 2 * timer;
|
608
|
-
log(
|
608
|
+
log("Event throttle increased to " + throttledTimer + "ms");
|
609
609
|
}
|
610
610
|
}
|
611
611
|
// Idea from https://github.com/guardian/iframe-messenger
|
612
612
|
function getMaxElement(side, elements) {
|
613
613
|
var elementsLength = elements.length, elVal = 0, maxVal = 0, Side = capitalizeFirstLetter(side), timer = Date.now();
|
614
614
|
for(var i = 0; i < elementsLength; i++){
|
615
|
-
elVal = elements[i].getBoundingClientRect()[side] + getComputedStyle(
|
615
|
+
elVal = elements[i].getBoundingClientRect()[side] + getComputedStyle("margin" + Side, elements[i]);
|
616
616
|
if (elVal > maxVal) maxVal = elVal;
|
617
617
|
}
|
618
618
|
timer = Date.now() - timer;
|
619
|
-
log(
|
620
|
-
log(
|
619
|
+
log("Parsed " + elementsLength + " HTML elements");
|
620
|
+
log("Element position calculated in " + timer + "ms");
|
621
621
|
chkEventThottle(timer);
|
622
622
|
return maxVal;
|
623
623
|
}
|
@@ -631,19 +631,19 @@ var $b2e1fd3e30ab1f5c$exports = {};
|
|
631
631
|
}
|
632
632
|
function getTaggedElements(side, tag) {
|
633
633
|
function noTaggedElementsFound() {
|
634
|
-
warn(
|
635
|
-
return document.querySelectorAll(
|
634
|
+
warn("No tagged elements (" + tag + ") found on page");
|
635
|
+
return document.querySelectorAll("body *");
|
636
636
|
}
|
637
|
-
var elements = document.querySelectorAll(
|
637
|
+
var elements = document.querySelectorAll("[" + tag + "]");
|
638
638
|
if (elements.length === 0) noTaggedElementsFound();
|
639
639
|
return getMaxElement(side, elements);
|
640
640
|
}
|
641
641
|
function getAllElements() {
|
642
|
-
return document.querySelectorAll(
|
642
|
+
return document.querySelectorAll("body *");
|
643
643
|
}
|
644
644
|
var getHeight = {
|
645
645
|
bodyOffset: function getBodyOffsetHeight() {
|
646
|
-
return document.body.offsetHeight + getComputedStyle(
|
646
|
+
return document.body.offsetHeight + getComputedStyle("marginTop") + getComputedStyle("marginBottom");
|
647
647
|
},
|
648
648
|
offset: function() {
|
649
649
|
return getHeight.bodyOffset() // Backwards compatability
|
@@ -672,10 +672,10 @@ var $b2e1fd3e30ab1f5c$exports = {};
|
|
672
672
|
;
|
673
673
|
},
|
674
674
|
lowestElement: function getBestHeight() {
|
675
|
-
return Math.max(getHeight.bodyOffset() || getHeight.documentElementOffset(), getMaxElement(
|
675
|
+
return Math.max(getHeight.bodyOffset() || getHeight.documentElementOffset(), getMaxElement("bottom", getAllElements()));
|
676
676
|
},
|
677
677
|
taggedElement: function getTaggedElementsHeight() {
|
678
|
-
return getTaggedElements(
|
678
|
+
return getTaggedElements("bottom", "data-iframe-height");
|
679
679
|
}
|
680
680
|
}, getWidth = {
|
681
681
|
bodyScroll: function getBodyScrollWidth() {
|
@@ -703,10 +703,10 @@ var $b2e1fd3e30ab1f5c$exports = {};
|
|
703
703
|
return Math.min.apply(null, getAllMeasurements(getWidth));
|
704
704
|
},
|
705
705
|
rightMostElement: function rightMostElement() {
|
706
|
-
return getMaxElement(
|
706
|
+
return getMaxElement("right", getAllElements());
|
707
707
|
},
|
708
708
|
taggedElement: function getTaggedElementsWidth() {
|
709
|
-
return getTaggedElements(
|
709
|
+
return getTaggedElements("right", "data-iframe-width");
|
710
710
|
}
|
711
711
|
};
|
712
712
|
function sizeIFrame(triggerEvent, triggerEventDesc, customHeight, customWidth) {
|
@@ -735,7 +735,7 @@ var $b2e1fd3e30ab1f5c$exports = {};
|
|
735
735
|
return heightCalcMode in resetRequiredMethods || calculateWidth && widthCalcMode in resetRequiredMethods;
|
736
736
|
}
|
737
737
|
function logIgnored() {
|
738
|
-
log(
|
738
|
+
log("No change in size detected");
|
739
739
|
}
|
740
740
|
function checkDownSizing() {
|
741
741
|
if (isForceResizableEvent() && isForceResizableCalcMode()) resetIFrame(triggerEventDesc);
|
@@ -744,7 +744,7 @@ var $b2e1fd3e30ab1f5c$exports = {};
|
|
744
744
|
})) logIgnored();
|
745
745
|
}
|
746
746
|
var currentHeight, currentWidth;
|
747
|
-
if (isSizeChangeDetected() ||
|
747
|
+
if (isSizeChangeDetected() || "init" === triggerEvent) {
|
748
748
|
lockTrigger();
|
749
749
|
resizeIFrame();
|
750
750
|
} else checkDownSizing();
|
@@ -756,27 +756,27 @@ var $b2e1fd3e30ab1f5c$exports = {};
|
|
756
756
|
reset: 1,
|
757
757
|
resetPage: 1,
|
758
758
|
init: 1
|
759
|
-
})) log(
|
759
|
+
})) log("Trigger event: " + triggerEventDesc);
|
760
760
|
}
|
761
761
|
function isDoubleFiredEvent() {
|
762
762
|
return triggerLocked && triggerEvent in doubleEventList;
|
763
763
|
}
|
764
764
|
if (!isDoubleFiredEvent()) {
|
765
765
|
recordTrigger();
|
766
|
-
if (triggerEvent ===
|
766
|
+
if (triggerEvent === "init") sizeIFrame(triggerEvent, triggerEventDesc, customHeight, customWidth);
|
767
767
|
else sizeIFrameThrottled(triggerEvent, triggerEventDesc, customHeight, customWidth);
|
768
|
-
} else log(
|
768
|
+
} else log("Trigger event cancelled: " + triggerEvent);
|
769
769
|
}
|
770
770
|
function lockTrigger() {
|
771
771
|
if (!triggerLocked) {
|
772
772
|
triggerLocked = true;
|
773
|
-
log(
|
773
|
+
log("Trigger event lock on");
|
774
774
|
}
|
775
775
|
clearTimeout(triggerLockedTimer);
|
776
776
|
triggerLockedTimer = setTimeout(function() {
|
777
777
|
triggerLocked = false;
|
778
|
-
log(
|
779
|
-
log(
|
778
|
+
log("Trigger event lock off");
|
779
|
+
log("--");
|
780
780
|
}, eventCancelTimer);
|
781
781
|
}
|
782
782
|
function triggerReset(triggerEvent) {
|
@@ -787,19 +787,19 @@ var $b2e1fd3e30ab1f5c$exports = {};
|
|
787
787
|
function resetIFrame(triggerEventDesc) {
|
788
788
|
var hcm = heightCalcMode;
|
789
789
|
heightCalcMode = heightCalcModeDefault;
|
790
|
-
log(
|
790
|
+
log("Reset trigger event: " + triggerEventDesc);
|
791
791
|
lockTrigger();
|
792
|
-
triggerReset(
|
792
|
+
triggerReset("reset");
|
793
793
|
heightCalcMode = hcm;
|
794
794
|
}
|
795
795
|
function sendMsg(height, width, triggerEvent, msg, targetOrigin) {
|
796
796
|
function setTargetOrigin() {
|
797
797
|
if (undefined === targetOrigin) targetOrigin = targetOriginDefault;
|
798
|
-
else log(
|
798
|
+
else log("Message targetOrigin: " + targetOrigin);
|
799
799
|
}
|
800
800
|
function sendToParent() {
|
801
|
-
var size = height +
|
802
|
-
log(
|
801
|
+
var size = height + ":" + width, message = myID + ":" + size + ":" + triggerEvent + (undefined !== msg ? ":" + msg : "");
|
802
|
+
log("Sending message to host page (" + message + ")");
|
803
803
|
target1.postMessage(msgID + message, targetOrigin);
|
804
804
|
}
|
805
805
|
if (true === sendPermit) {
|
@@ -820,12 +820,12 @@ var $b2e1fd3e30ab1f5c$exports = {};
|
|
820
820
|
},
|
821
821
|
reset: function resetFromParent() {
|
822
822
|
if (!initLock) {
|
823
|
-
log(
|
824
|
-
triggerReset(
|
825
|
-
} else log(
|
823
|
+
log("Page size reset by host page");
|
824
|
+
triggerReset("resetPage");
|
825
|
+
} else log("Page reset ignored by init");
|
826
826
|
},
|
827
827
|
resize: function resizeFromParent() {
|
828
|
-
sendSize(
|
828
|
+
sendSize("resizeParent", "Parent window requested size check");
|
829
829
|
},
|
830
830
|
moveToAnchor: function moveToAnchorF() {
|
831
831
|
inPageLinks.findTarget(getData());
|
@@ -835,35 +835,35 @@ var $b2e1fd3e30ab1f5c$exports = {};
|
|
835
835
|
},
|
836
836
|
pageInfo: function pageInfoFromParent() {
|
837
837
|
var msgBody = getData();
|
838
|
-
log(
|
838
|
+
log("PageInfoFromParent called from parent: " + msgBody);
|
839
839
|
onPageInfo(JSON.parse(msgBody));
|
840
|
-
log(
|
840
|
+
log(" --");
|
841
841
|
},
|
842
842
|
message: function messageFromParent() {
|
843
843
|
var msgBody = getData();
|
844
|
-
log(
|
844
|
+
log("onMessage called from parent: " + msgBody);
|
845
845
|
// eslint-disable-next-line sonarjs/no-extra-arguments
|
846
846
|
onMessage(JSON.parse(msgBody));
|
847
|
-
log(
|
847
|
+
log(" --");
|
848
848
|
}
|
849
849
|
};
|
850
850
|
function isMessageForUs() {
|
851
|
-
return msgID === (
|
851
|
+
return msgID === ("" + event.data).substr(0, msgIdLen) // ''+ Protects against non-string messages
|
852
852
|
;
|
853
853
|
}
|
854
854
|
function getMessageType() {
|
855
|
-
return event.data.split(
|
855
|
+
return event.data.split("]")[1].split(":")[0];
|
856
856
|
}
|
857
857
|
function getData() {
|
858
|
-
return event.data.substr(event.data.indexOf(
|
858
|
+
return event.data.substr(event.data.indexOf(":") + 1);
|
859
859
|
}
|
860
860
|
function isMiddleTier() {
|
861
|
-
return !$b2e1fd3e30ab1f5c$exports &&
|
861
|
+
return !$b2e1fd3e30ab1f5c$exports && "iFrameResize" in window || "jQuery" in window && "iFrameResize" in window.jQuery.prototype;
|
862
862
|
}
|
863
863
|
function isInitMsg() {
|
864
864
|
// Test if this message is from a child below us. This is an ugly test, however, updating
|
865
865
|
// the message format would break backwards compatibity.
|
866
|
-
return event.data.split(
|
866
|
+
return event.data.split(":")[2] in {
|
867
867
|
true: 1,
|
868
868
|
false: 1
|
869
869
|
};
|
@@ -871,7 +871,7 @@ var $b2e1fd3e30ab1f5c$exports = {};
|
|
871
871
|
function callFromParent() {
|
872
872
|
var messageType = getMessageType();
|
873
873
|
if (messageType in processRequestFromParent) processRequestFromParent[messageType]();
|
874
|
-
else if (!isMiddleTier() && !isInitMsg()) warn(
|
874
|
+
else if (!isMiddleTier() && !isInitMsg()) warn("Unexpected message (" + event.data + ")");
|
875
875
|
}
|
876
876
|
function processMessage() {
|
877
877
|
if (false === firstRun) callFromParent();
|
@@ -883,10 +883,10 @@ var $b2e1fd3e30ab1f5c$exports = {};
|
|
883
883
|
// Normally the parent kicks things off when it detects the iFrame has loaded.
|
884
884
|
// If this script is async-loaded, then tell parent page to retry init.
|
885
885
|
function chkLateLoaded() {
|
886
|
-
if (
|
886
|
+
if ("loading" !== document.readyState) window.parent.postMessage("[iFrameResizerChild]Ready", "*");
|
887
887
|
}
|
888
|
-
addEventListener(window,
|
889
|
-
addEventListener(window,
|
888
|
+
addEventListener(window, "message", receiver);
|
889
|
+
addEventListener(window, "readystatechange", chkLateLoaded);
|
890
890
|
chkLateLoaded();
|
891
891
|
})();
|
892
892
|
|