happo 2.6.0 → 2.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/happo/public/HappoDiffs.jsx +12 -18
- data/lib/happo/public/happo-runner.js +34 -52
- data/lib/happo/public/happo-styles.css +0 -20
- data/lib/happo/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4f44c560afe02096d68d9a04a2f2f8bb787768ae
|
4
|
+
data.tar.gz: a88fa0dcd66c6c1cd21b2dfd05914da55a0b5814
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 47ed2b3c591ccfa1acf1cbf47bc917fd2f71c917b9d8de65e97ca40fc8d4fa428e458bbd3a6c616e7bc7b8b1dffddec055a5855f50514f49b7f0f403d9c0650a
|
7
|
+
data.tar.gz: bef158db3def1a19b72caa132a87abcf0cfe16298112fb0559d0e9f0637a32d3274cafce16557cc50a6935f1d9ad52745767589c0fd0a3cbfe3c236c793c6491
|
@@ -240,25 +240,19 @@ Swiper.propTypes = {
|
|
240
240
|
function SideBySide({ previous, current }) {
|
241
241
|
return (
|
242
242
|
<div className='SideBySide'>
|
243
|
-
<
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
Before
|
250
|
-
</div>
|
251
|
-
</div>
|
243
|
+
<img
|
244
|
+
className='SideBySide__image'
|
245
|
+
role='presentation'
|
246
|
+
src={previous}
|
247
|
+
title='Before'
|
248
|
+
/>
|
252
249
|
{' '}
|
253
|
-
<
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
After
|
260
|
-
</div>
|
261
|
-
</div>
|
250
|
+
<img
|
251
|
+
className='SideBySide__image'
|
252
|
+
role='presentation'
|
253
|
+
src={current}
|
254
|
+
title='After'
|
255
|
+
/>
|
262
256
|
</div>
|
263
257
|
);
|
264
258
|
}
|
@@ -10,7 +10,6 @@
|
|
10
10
|
window.happo = {
|
11
11
|
defined: {},
|
12
12
|
fdefined: [],
|
13
|
-
currentRenderedElement: undefined,
|
14
13
|
errors: [],
|
15
14
|
|
16
15
|
define: function define(description, func, options) {
|
@@ -99,8 +98,7 @@ window.happo = {
|
|
99
98
|
*
|
100
99
|
* @param {Object} renderedElement
|
101
100
|
*/
|
102
|
-
cleanOutElement: function cleanOutElement(
|
103
|
-
renderedElement.parentNode.removeChild(renderedElement);
|
101
|
+
cleanOutElement: function cleanOutElement() {
|
104
102
|
},
|
105
103
|
|
106
104
|
/**
|
@@ -121,10 +119,8 @@ window.happo = {
|
|
121
119
|
}
|
122
120
|
|
123
121
|
// Clear out the body of the document
|
124
|
-
if (this.currentRenderedElement) {
|
125
|
-
this.cleanOutElement(this.currentRenderedElement);
|
126
|
-
}
|
127
122
|
while (document.body.firstChild) {
|
123
|
+
this.cleanOutElement(document.body.firstChild);
|
128
124
|
document.body.removeChild(document.body.firstChild);
|
129
125
|
}
|
130
126
|
|
@@ -133,8 +129,8 @@ window.happo = {
|
|
133
129
|
// The function takes an argument, which is a callback that is called
|
134
130
|
// once it is done executing. This can be used to write functions that
|
135
131
|
// have asynchronous code in them.
|
136
|
-
this.tryAsync(func).then(function (
|
137
|
-
doneFunc(this.
|
132
|
+
this.tryAsync(func).then(function () {
|
133
|
+
doneFunc(this.processExample(currentExample));
|
138
134
|
}.bind(this)).catch(function (error) {
|
139
135
|
doneFunc(this.handleError(currentExample, error));
|
140
136
|
}.bind(this));
|
@@ -146,15 +142,15 @@ window.happo = {
|
|
146
142
|
if (result instanceof Promise) {
|
147
143
|
// The function returned a promise, so we need to wait for it to
|
148
144
|
// resolve before proceeding.
|
149
|
-
result.then(function (
|
150
|
-
doneFunc(this.
|
145
|
+
result.then(function () {
|
146
|
+
doneFunc(this.processExample(currentExample));
|
151
147
|
}.bind(this)).catch(function (error) {
|
152
148
|
doneFunc(this.handleError(currentExample, error));
|
153
149
|
}.bind(this));
|
154
150
|
} else {
|
155
151
|
// The function did not return a promise, so we assume it gave us an
|
156
152
|
// element that we can process immediately.
|
157
|
-
doneFunc(this.
|
153
|
+
doneFunc(this.processExample(currentExample));
|
158
154
|
}
|
159
155
|
}
|
160
156
|
} catch (error) {
|
@@ -197,38 +193,36 @@ window.happo = {
|
|
197
193
|
}
|
198
194
|
},
|
199
195
|
|
200
|
-
// This function gets the full size of the
|
201
|
-
// descendent nodes. This allows us to ensure that the
|
202
|
-
// absolutely positioned elements. It is important that
|
203
|
-
// may be iterating over a high number of nodes.
|
204
|
-
getFullRect: function getFullRect(
|
205
|
-
this.removeScrollbars(node);
|
206
|
-
|
207
|
-
var rect = node.getBoundingClientRect();
|
208
|
-
|
196
|
+
// This function gets the full size of children in the document body,
|
197
|
+
// including all descendent nodes. This allows us to ensure that the
|
198
|
+
// screenshot includes absolutely positioned elements. It is important that
|
199
|
+
// this is fast, since we may be iterating over a high number of nodes.
|
200
|
+
getFullRect: function getFullRect() {
|
209
201
|
// Set up the initial object that we will mutate in our recursive function.
|
210
202
|
var box = {
|
211
|
-
bottom:
|
212
|
-
left:
|
213
|
-
right:
|
214
|
-
top:
|
203
|
+
bottom: 0,
|
204
|
+
left: 0,
|
205
|
+
right: 0,
|
206
|
+
top: 0,
|
215
207
|
};
|
216
208
|
|
217
|
-
// getBoundingClientRect does not include margin, so we need to use
|
218
|
-
// getComputedStyle. Since this is slow and the margin of descendent
|
219
|
-
// elements is significantly less likely to matter, let's include the margin
|
220
|
-
// only from the topmost node.
|
221
|
-
var computedStyle = window.getComputedStyle(node);
|
222
|
-
box.bottom += parseInt(computedStyle.getPropertyValue('margin-bottom'), 10);
|
223
|
-
box.left -= parseInt(computedStyle.getPropertyValue('margin-left'), 10);
|
224
|
-
box.right += parseInt(computedStyle.getPropertyValue('margin-right'), 10);
|
225
|
-
box.top -= parseInt(computedStyle.getPropertyValue('margin-top'), 10);
|
226
|
-
|
227
209
|
// If there are any children, we want to iterate over them recursively,
|
228
210
|
// mutating our box object along the way to expand to include all descendent
|
229
211
|
// nodes.
|
230
|
-
for (var i = 0; i <
|
231
|
-
|
212
|
+
for (var i = 0; i < document.body.children.length; i++) {
|
213
|
+
var node = document.body.children[i];
|
214
|
+
|
215
|
+
this.getFullRectRecursive(node, box);
|
216
|
+
|
217
|
+
// getBoundingClientRect does not include margin, so we need to use
|
218
|
+
// getComputedStyle. Since this is slow and the margin of descendent
|
219
|
+
// elements is significantly less likely to matter, let's include the
|
220
|
+
// margin only from the topmost nodes.
|
221
|
+
var computedStyle = window.getComputedStyle(node);
|
222
|
+
box.bottom += parseInt(computedStyle.getPropertyValue('margin-bottom'), 10);
|
223
|
+
box.left -= parseInt(computedStyle.getPropertyValue('margin-left'), 10);
|
224
|
+
box.right += parseInt(computedStyle.getPropertyValue('margin-right'), 10);
|
225
|
+
box.top -= parseInt(computedStyle.getPropertyValue('margin-top'), 10);
|
232
226
|
}
|
233
227
|
|
234
228
|
// As the last step, we calculate the width and height for the box. This is
|
@@ -247,23 +241,11 @@ window.happo = {
|
|
247
241
|
return box;
|
248
242
|
},
|
249
243
|
|
250
|
-
|
244
|
+
processExample: function processExample(currentExample) {
|
251
245
|
try {
|
252
|
-
this
|
253
|
-
|
254
|
-
var rect;
|
255
|
-
if (currentExample.options.snapshotEntireScreen) {
|
256
|
-
rect = {
|
257
|
-
width: window.innerWidth,
|
258
|
-
height: window.innerHeight,
|
259
|
-
top: 0,
|
260
|
-
left: 0,
|
261
|
-
};
|
262
|
-
} else {
|
263
|
-
// Note that this method returns floats, so we need to round those off
|
264
|
-
// to integers before returning.
|
265
|
-
rect = this.getFullRect(elem);
|
266
|
-
}
|
246
|
+
// Note that this method returns floats, so we need to round those off
|
247
|
+
// to integers before returning.
|
248
|
+
var rect = this.getFullRect();
|
267
249
|
|
268
250
|
return {
|
269
251
|
description: currentExample.description,
|
@@ -123,25 +123,5 @@ body {
|
|
123
123
|
}
|
124
124
|
|
125
125
|
.SideBySide__image {
|
126
|
-
display: inline-block;
|
127
|
-
line-height: 0;
|
128
|
-
position: relative;
|
129
126
|
vertical-align: top;
|
130
127
|
}
|
131
|
-
|
132
|
-
.SideBySide__caption {
|
133
|
-
background-color: #666666;
|
134
|
-
bottom: 0;
|
135
|
-
color: #ffffff;
|
136
|
-
font-size: 10px;
|
137
|
-
line-height: 1;
|
138
|
-
opacity: 0;
|
139
|
-
padding: 3px 6px;
|
140
|
-
position: absolute;
|
141
|
-
right: 0;
|
142
|
-
transition: opacity .2s;
|
143
|
-
}
|
144
|
-
|
145
|
-
.SideBySide__image:hover .SideBySide__caption {
|
146
|
-
opacity: 1;
|
147
|
-
}
|
data/lib/happo/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: happo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Henric Trotzig
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2016-09-
|
12
|
+
date: 2016-09-05 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: chunky_png
|