unprint 0.10.12 → 0.11.0

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "unprint",
3
- "version": "0.10.12",
3
+ "version": "0.11.0",
4
4
  "description": "Simplify common web scraping tasks while staying in control of the data.",
5
5
  "main": "src/app.js",
6
6
  "scripts": {
package/src/app.js CHANGED
@@ -483,6 +483,43 @@ function querySourceSets(context, selector, attr = 'srcset', customOptions = {})
483
483
  return sourceSets.map((sourceSet) => extractSourceSet(sourceSet, customOptions));
484
484
  }
485
485
 
486
+ /*
487
+ function removeStyleFunctionSpaces(el) {
488
+ // jsdom appears to have a bug where it ignores inline CSS attributes set to a function() containing spaces, e.g. url( image.png )
489
+ el.setAttribute('style', el.getAttribute('style').replace(/\(\s+(.*)\s+\)/g, (match, cssArgs) => `(${cssArgs})`));
490
+ }
491
+ */
492
+
493
+ function queryStyle(context, selector, customOptions) {
494
+ const options = {
495
+ ...customOptions,
496
+ attribute: 'style',
497
+ };
498
+
499
+ const style = queryContent(context, selector, options);
500
+
501
+ if (style) {
502
+ return options.styleAttribute
503
+ ? style.getPropertyValue(options.styleAttribute)
504
+ : style._values;
505
+ }
506
+
507
+ return null;
508
+ }
509
+
510
+ function queryStyles(context, selector, customOptions) {
511
+ const options = {
512
+ ...customOptions,
513
+ attribute: 'style',
514
+ };
515
+
516
+ const elStyles = queryContents(context, selector, options).map((style) => (options.styleAttribute
517
+ ? style.getPropertyValue(options.styleAttribute)
518
+ : style._values));
519
+
520
+ return elStyles;
521
+ }
522
+
486
523
  function queryVideo(context, selector = 'source', customOptions) {
487
524
  const options = {
488
525
  ...context.options,
@@ -681,6 +718,8 @@ const queryFns = {
681
718
  imgs: queryImages,
682
719
  json: queryJson,
683
720
  jsons: queryJsons,
721
+ style: queryStyle,
722
+ styles: queryStyles,
684
723
  number: queryNumber,
685
724
  num: queryNumber,
686
725
  numbers: queryNumbers,
package/tests/index.html CHANGED
@@ -42,6 +42,9 @@
42
42
  <img class="srcset" srcset="https://i.redd.it/e91oo4ueyeb71.jpg 240w, https://i.redd.it/vn9h981hlx281.png 480w, https://i.redd.it/e91oo4ueyeb71.jpg 640w">
43
43
  <img class="srcset" srcset="https://i.redd.it/e91oo4ueyeb71.jpg 240w, https://i.redd.it/vn9h981hlx281.png 480w, https://i.redd.it/e91oo4ueyeb71.jpg 640w">
44
44
 
45
+ <div class="style" style="background-image: url('https://i.imgur.com/eDQmLys.jpg'); color: red;"></div>
46
+ <div class="style" style="margin: 1rem; color: blue;"></div>
47
+
45
48
  <video id="video" poster="https://i.imgur.com/eDQmLys.jpg"><source src="https://i.imgur.com/eDQmLys.mp4"></video>
46
49
 
47
50
  <script id="json" type="application/js">{"foo": "bar", "lorem": "ipsum", "hello": "world"}</script>
package/tests/init.js CHANGED
@@ -37,6 +37,10 @@ async function initTest() {
37
37
  console.log('images', res.context.query.imgs('.image'));
38
38
  console.log('srcset', res.context.query.sourceSet('.srcset'));
39
39
  console.log('srcsets', res.context.query.sourceSets('.srcset'));
40
+ console.log('style', res.context.query.style('.style'));
41
+ console.log('style background', res.context.query.style('.style', { styleAttribute: 'background-image' }));
42
+ console.log('styles', res.context.query.styles('.style'));
43
+ console.log('styles color', res.context.query.styles('.style', { styleAttribute: 'color' }));
40
44
  console.log('path', res.context.query.url('#path'));
41
45
  console.log('relative path', res.context.query.url('#relativePath'));
42
46
  console.log('exists', res.context.query.exists('#title'));