@penskemediacorp/larva-patterns 1.28.0 → 1.28.1-alpha.141

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.
Files changed (79) hide show
  1. package/algorithms/a-term-content-grid/README.md +1 -0
  2. package/algorithms/a-term-content-grid/a-term-content-grid.html +27 -0
  3. package/algorithms/a-term-content-grid/a-term-content-grid.prototype.js +11 -0
  4. package/components/c-nav-link/c-nav-link.twig +6 -0
  5. package/components/c-timestamp/c-timestamp.twig +3 -0
  6. package/components/c-title/c-title.twig +5 -1
  7. package/modules/article-timestamp/article-timestamp.prototype.js +1 -1
  8. package/modules/author/author.prototype.js +3 -3
  9. package/modules/author-blurb/author-blurb.prototype.js +3 -3
  10. package/modules/author-details/author-details.prototype.js +5 -5
  11. package/modules/badge/badge.prototype.js +1 -1
  12. package/modules/banner/banner.twig +12 -4
  13. package/modules/brands-most-popular/brands-most-popular.prototype.js +1 -0
  14. package/modules/breaking-news/breaking-news.prototype.js +2 -2
  15. package/modules/buy-now/buy-now.prototype.js +1 -1
  16. package/modules/container/container.prototype.js +1 -1
  17. package/modules/content-showcase/content-showcase.prototype.js +3 -3
  18. package/modules/content-showcase/content-showcase.the-moth.js +5 -5
  19. package/modules/fact-list/README.md +1 -0
  20. package/modules/fact-list/fact-list.prototype.js +21 -0
  21. package/modules/fact-list/fact-list.twig +14 -0
  22. package/modules/fact-list-item/README.md +1 -0
  23. package/modules/fact-list-item/fact-list-item.prototype.js +28 -0
  24. package/modules/fact-list-item/fact-list-item.thumbnail.js +13 -0
  25. package/modules/fact-list-item/fact-list-item.twig +17 -0
  26. package/modules/fact-list-menu/README.md +1 -0
  27. package/modules/fact-list-menu/fact-list-menu.prototype.js +40 -0
  28. package/modules/fact-list-menu/fact-list-menu.twig +11 -0
  29. package/modules/faq/faq.prototype.js +30 -0
  30. package/modules/faq/faq.twig +17 -0
  31. package/modules/footer-newsletter/footer-newsletter.prototype.js +7 -3
  32. package/modules/footer-tip/footer-tip.prototype.js +2 -2
  33. package/modules/heading/heading.twig +1 -1
  34. package/modules/how-we-test-products/how-we-test-products.prototype.js +50 -0
  35. package/modules/how-we-test-products/how-we-test-products.twig +19 -0
  36. package/modules/mega-menu-footer/mega-menu-footer.prototype.js +7 -0
  37. package/modules/mega-menu-footer/mega-menu-footer.twig +26 -4
  38. package/modules/mega-menu-item/mega-menu-item.twig +8 -2
  39. package/modules/multiple-products/multiple-products.prototype.js +20 -0
  40. package/modules/multiple-products/multiple-products.twig +14 -0
  41. package/modules/newsletter/newsletter.prototype.js +1 -1
  42. package/modules/newsletter-cta/newsletter-cta.prototype.js +1 -0
  43. package/modules/newsletter-cta/newsletter-cta.twig +1 -1
  44. package/modules/newswire/newswire.prototype.js +1 -0
  45. package/modules/page-404/page-404.smart.js +60 -0
  46. package/modules/page-404/page-404.twig +16 -0
  47. package/modules/paragraph/paragraph.prototype.js +1 -0
  48. package/modules/paragraph/paragraph.twig +6 -1
  49. package/modules/post-content-image/post-content-image.twig +1 -1
  50. package/modules/product-card/product-card.prototype.js +41 -0
  51. package/modules/product-card/product-card.twig +57 -0
  52. package/modules/product-grid/product-grid.prototype.js +46 -0
  53. package/modules/product-grid/product-grid.twig +21 -0
  54. package/modules/pros-and-cons/pros-and-cons.prototype.js +15 -0
  55. package/modules/pros-and-cons/pros-and-cons.twig +12 -0
  56. package/modules/section-heading/section-heading.h2.js +1 -1
  57. package/modules/section-heading/section-heading.h3.js +1 -1
  58. package/modules/separator/separator.prototype.js +1 -0
  59. package/modules/separator/separator.twig +1 -1
  60. package/modules/table-of-contents/table-of-contents.prototype.js +38 -0
  61. package/modules/table-of-contents/table-of-contents.twig +44 -0
  62. package/modules/tag-list/README.md +1 -0
  63. package/modules/tag-list/tag-list.prototype.js +42 -0
  64. package/modules/tag-list/tag-list.thumbnail.js +49 -0
  65. package/modules/tag-list/tag-list.twig +16 -0
  66. package/modules/term-content-top/README.md +1 -0
  67. package/modules/term-content-top/term-content-top.heading-tags.js +14 -0
  68. package/modules/term-content-top/term-content-top.prototype.js +73 -0
  69. package/modules/term-content-top/term-content-top.twig +22 -0
  70. package/objects/o-card/o-card.twig +5 -1
  71. package/objects/o-faq-item/o-faq-item.prototype.js +18 -0
  72. package/objects/o-faq-item/o-faq-item.twig +8 -0
  73. package/objects/o-multiple-product-item/o-multiple-product-item.prototype.js +18 -0
  74. package/objects/o-multiple-product-item/o-multiple-product-item.twig +25 -0
  75. package/objects/o-product-card/o-product-card.primary.js +9 -0
  76. package/objects/o-product-card/o-product-card.prototype.js +60 -0
  77. package/objects/o-product-card/o-product-card.twig +64 -0
  78. package/objects/o-video-card/o-video-card.twig +6 -1
  79. package/package.json +6 -6
@@ -0,0 +1,50 @@
1
+ const clonedeep = require( 'lodash.clonedeep' );
2
+
3
+ const c_title = clonedeep( require( '@penskemediacorp/larva-patterns/components/c-title/c-title.prototype.js' ) );
4
+ const c_dek = clonedeep( require( '@penskemediacorp/larva-patterns/components/c-dek/c-dek.prototype.js' ) );
5
+ const story_card = clonedeep( require( '@penskemediacorp/larva-patterns/modules/story/story.prototype.js' ) );
6
+
7
+ c_title.c_title_classes = 'lrv-a-font-primary-l lrv-u-color-black';
8
+ c_title.c_title_text = 'How We Test Products';
9
+ c_title.c_title_url = false;
10
+
11
+ c_dek.c_dek_classes = 'lrv-a-font-secondary-l';
12
+ c_dek.c_dek_markup = 'Our journalists test hundreds of products every year for readers. We’ve developed a rigorous system for reviewing products objectively. Learn More ⇢.'
13
+ c_dek.c_dek_text = false;
14
+
15
+ story_card.c_span = false;
16
+ story_card.c_title.c_title_url = false;
17
+ story_card.c_title.c_title_classes = 'lrv-a-font-secondary-xl lrv-u-margin-b-050';
18
+ story_card.c_title.c_title_text = '500+';
19
+ story_card.c_timestamp = false;
20
+ story_card.c_tagline_author = false;
21
+
22
+ story_card.c_dek.c_dek_text = 'Products Tested';
23
+ story_card.c_dek.c_dek_classes = 'lrv-u-margin-tb-00 lrv-u-font-family-primary lrv-u-font-size-16 lrv-u-color-brand-secondary';
24
+ story_card.c_dek.c_dek_markup = false;
25
+
26
+ story_card.story_classes = 'lrv-u-width-50p@mobile-max lrv-u-border-color-grey-light lrv-u-padding-tb-125@mobile-max lrv-u-width-75p@tablet lrv-u-margin-lr-auto';
27
+ story_card.story_grid_classes = 'lrv-u-flex lrv-u-flex-direction-column lrv-u-height-100p lrv-u-justify-content-space-between';
28
+
29
+ story_card.c_lazy_image.c_lazy_image_classes = 'lrv-u-margin-lr-auto';
30
+ story_card.c_lazy_image.c_lazy_image_crop_class = '';
31
+ story_card.c_lazy_image.c_lazy_image_img_classes = '';
32
+ story_card.c_lazy_image.c_lazy_image_placeholder_url = 'https://farm5.staticflickr.com/4078/5441060528_31db7838ba_z.jpg';
33
+
34
+ how_we_test_products_items = [
35
+ story_card,
36
+ story_card,
37
+ story_card,
38
+ story_card,
39
+ ];
40
+
41
+ module.exports = {
42
+ how_we_test_products_classes: 'lrv-u-text-align-center lrv-u-background-color-grey-lightest lrv-u-margin-tb-2',
43
+ how_we_test_products_outer_classes: 'lrv-u-width-75p@tablet lrv-u-margin-lr-auto lrv-u-padding-a-2',
44
+ how_we_test_products_banner_classes: '',
45
+ how_we_test_products_title_classes: '',
46
+ how_we_test_products_items_classes: 'lrv-u-flex lrv-u-flex-wrap-wrap@mobile-max',
47
+ how_we_test_products_items: how_we_test_products_items,
48
+ c_title: c_title,
49
+ c_dek: c_dek
50
+ };
@@ -0,0 +1,19 @@
1
+ <div class="how-we-test-products // {{ how_we_test_products_classes }}">
2
+ <div class="how-we-test-products-outer // {{ how_we_test_products_outer_classes }}">
3
+ <div class="{{ how_we_test_products_banner_classes }}">
4
+ <div class="how-we-test-products-title {{ how_we_test_products_title_classes }}">
5
+ {% if c_title %}
6
+ {% include "@larva/components/c-title/c-title.twig" with c_title %}
7
+ {% endif %}
8
+ {% if c_dek %}
9
+ {% include "@larva/components/c-dek/c-dek.twig" with c_dek %}
10
+ {% endif %}
11
+ </div>
12
+ </div>
13
+ <div class="how-we-test-product-items-outer // {{ how_we_test_products_items_classes }}">
14
+ {% for item in how_we_test_products_items %}
15
+ {% include "@larva/modules/story/story.twig" with item %}
16
+ {% endfor %}
17
+ </div>
18
+ </div>
19
+ <div>
@@ -42,8 +42,15 @@ o_email_capture_form.c_button.c_button_inner_classes =
42
42
  'lrv-u-background-color-white lrv-u-padding-l-050';
43
43
  o_email_capture_form.c_button.c_button_text = 'Sign Up';
44
44
 
45
+ const c_tagline_prototype = require( '../../components/c-tagline/c-tagline.prototype' );
46
+ const c_tagline_terms = clonedeep( c_tagline_prototype );
47
+
48
+ c_tagline_terms.c_tagline_classes = 'lrv-a-font-basic-xxs lrv-u-margin-t-050 lrv-a-children-link-decoration-underline';
49
+ c_tagline_terms.c_tagline_text = false;
50
+
45
51
  module.exports = {
46
52
  o_email_capture_form,
53
+ c_tagline_terms,
47
54
  o_social_list,
48
55
  social_heading,
49
56
  mega_menu_subscribe,
@@ -1,8 +1,11 @@
1
1
  <footer class="mega-menu__footer // {{ mega_menu_footer_classes }} ">
2
2
  <div class="mega-menu__footer-inner // {{ mega_menu_footer_inner_classes }} ">
3
- <section class="mega-menu__footer-subscribe // {{ mega_menu_footer_subscribe_classes }} ">
4
- {% include "@larva/modules/mega-menu-footer-subscribe/mega-menu-footer-subscribe.twig" with mega_menu_subscribe %}
5
- </section>
3
+
4
+ {% if mega_menu_subscribe %}
5
+ <section class="mega-menu__footer-subscribe // {{ mega_menu_footer_subscribe_classes }} ">
6
+ {% include "@larva/modules/mega-menu-footer-subscribe/mega-menu-footer-subscribe.twig" with mega_menu_subscribe %}
7
+ </section>
8
+ {% endif %}
6
9
  <section class="mega-menu__footer-social // {{ mega_menu_footer_social_classes }} ">
7
10
  {% include "@larva/modules/heading/heading.twig" with social_heading %}
8
11
  <div class="mega-menu__social-list // {{ mega_menu_social_list_classes }}">
@@ -11,9 +14,28 @@
11
14
  </section>
12
15
  <section class="mega-menu__footer-form // {{ mega_menu_footer_form_classes }} ">
13
16
  {% include "@larva/modules/heading/heading.twig" with newsletter_heading %}
14
- <div class="lrv-u-flex-grow-1 lrv-u-width-100p">
17
+ <div class="lrv-u-flex-grow-1 lrv-u-width-100p {{ mega_menu_email_capture_form_classes }}">
15
18
  {% include "@larva/objects/o-email-capture-form/o-email-capture-form.twig" with o_email_capture_form %}
19
+
20
+ {% if c_tagline_terms %}
21
+ {% include "@larva/components/c-tagline/c-tagline.twig" with c_tagline_terms %}
22
+ {% endif %}
16
23
  </div>
17
24
  </section>
18
25
  </div>
26
+
27
+ <div class="mega-menu__footer-secondary // {{ mega_menu_footer_secondary_classes }}" >
28
+ {% if o_nav %}
29
+ <div class="mega-menu__footer-nav // {{ mega_menu_footer_nav_outer_classes }} ">
30
+ {% include "@larva/objects/o-nav/o-nav.twig" with o_nav %}
31
+ </div>
32
+ {% endif %}
33
+
34
+ {% if c_icon %}
35
+ <div class="mega-menu__footer-copyright // {{ mega_menu_footer_copyright_outer_classes }} ">
36
+ {% include "@larva/components/c-icon/c-icon.twig" with c_icon %}
37
+ <small class="mega-menu__footer-copyright-text {{ mega_menu_footer_copyright_textclasses_classes }}">{{ mega_menu_footer_copyright_text }}</small>
38
+ </div>
39
+ {% endif %}
40
+ </div>
19
41
  </footer>
@@ -1,9 +1,15 @@
1
- <li class="mega-menu-item // mega-menu__parent-list-item {{ mega_menu_item_classes }} ">
1
+ <li class="mega-menu-item // mega-menu__parent-list-item {{ mega_menu_item_classes }} " data-collapsible="collapsed" >
2
2
  <div class="mega-menu__item-link // {{ mega_menu_item_link_classes }} ">
3
3
  {% include "@larva/components/c-link/c-link.twig" with c_link %}
4
+
5
+ {% if c_icon %}
6
+ <button class="mega_menu__item-button // {{ mega_menu_item_button_classes }}" data-collapsible-toggle="always-show">
7
+ {% include "@larva/components/c-icon/c-icon.twig" with c_icon %}
8
+ </button>
9
+ {% endif %}
4
10
  </div>
5
11
 
6
- <ul class="mega-menu__child-list // {{ mega_menu_child_list_classes }} ">
12
+ <ul class="mega-menu__child-list // {{ mega_menu_child_list_classes }} " data-collapsible-panel="" data-collapsible-breakpoint="mobile-only">
7
13
  {% for item in mega_menu_item_children %}
8
14
  <li class="mega-menu__child-list-item ">
9
15
  {% include "@larva/components/c-link/c-link.twig" with item %}
@@ -0,0 +1,20 @@
1
+ const clonedeep = require( 'lodash.clonedeep' );
2
+
3
+ const c_title = clonedeep( require( '@penskemediacorp/larva-patterns/components/c-title/c-title.prototype' ) );
4
+ const multiple_products_item = clonedeep(
5
+ require( '@penskemediacorp/larva-patterns/objects/o-multiple-product-item/o-multiple-product-item.prototype' )
6
+ );
7
+
8
+ c_title.c_title_classes = 'lrv-u-text-align-center lrv-u-padding-tb-075 lrv-u-border-t-1 lrv-u-border-b-1 lrv-u-font-size-28';
9
+ c_title.c_title_text = 'Our Top Picks';
10
+
11
+ const multiple_products_items = [
12
+ multiple_products_item,
13
+ multiple_products_item,
14
+ multiple_products_item,
15
+ ];
16
+
17
+ module.exports = {
18
+ c_title,
19
+ multiple_products_items,
20
+ };
@@ -0,0 +1,14 @@
1
+ <div class="multiple-products // {{ multiple_products_classes }}">
2
+ <div class="{{ multiple_products_wrapper_classes }}">
3
+ <div class="multiple-products-title {{ multiple_products_title_classes }}">
4
+ {% if c_title %}
5
+ {% include "@larva/components/c-title/c-title.twig" with c_title %}
6
+ {% endif %}
7
+ </div>
8
+ <div class="multiple-products-data-wrapper {{ multiple_products_data_wrapper_classes }}">
9
+ {% for item in multiple_products_items %}
10
+ {% include "@larva/objects/o-multiple-product-item/o-multiple-product-item.twig" with item %}
11
+ {% endfor %}
12
+ </div>
13
+ </div>
14
+ </div>
@@ -35,7 +35,7 @@ o_email_capture_form.c_email_field.c_email_field_label_classes =
35
35
  'lrv-a-screen-reader-only';
36
36
  o_email_capture_form.c_email_field.c_email_field_label_text = 'Email Address';
37
37
 
38
- c_tagline_terms.c_tagline_classes = 'lrv-u-margin-t-1';
38
+ c_tagline_terms.c_tagline_classes = 'lrv-u-margin-t-1 lrv-a-font-basic-xxs lrv-a-children-link-decoration-underline';
39
39
  c_tagline_terms.c_tagline_text = false;
40
40
  c_tagline_terms.c_tagline_markup =
41
41
  'By subscribing, I agree to the <a href="#">Terms of Use</a> and <a href="#">Privacy Policy</a>.';
@@ -23,6 +23,7 @@ c_button.c_button_classes +=
23
23
  module.exports = {
24
24
  newsletter_cta_classes:
25
25
  'lrv-u-margin-tb-125 lrv-u-margin-tb-150@desktop-xl lrv-u-padding-tb-2 lrv-u-flex lrv-u-justify-content-space-between lrv-u-border-t-1 lrv-u-border-b-1 lrv-u-align-items-center lrv-u-flex-direction-column@mobile-max lrv-u-padding-a-2@mobile-max',
26
+ newsletter_cta_inner_classes: 'lrv-u-text-align-center@mobile-max',
26
27
  c_heading,
27
28
  c_tagline,
28
29
  c_button,
@@ -1,6 +1,6 @@
1
1
  <div class="newsletter-cta">
2
2
  <div class="{{ newsletter_cta_classes }}">
3
- <div class="lrv-u-text-align-center@mobile-max">
3
+ <div class="{{newsletter_cta_inner_classes}}">
4
4
  {% if c_logo %}
5
5
  {% include "@larva/components/c-logo/c-logo.twig" with c_logo %}
6
6
  {% endif %}
@@ -41,6 +41,7 @@ o_card.c_span = c_span;
41
41
  o_card.c_title = c_title;
42
42
  o_card.c_timestamp = c_timestamp;
43
43
  o_card.c_svg = c_svg;
44
+ o_card.o_card_link_rel_attribute = 'nofollow';
44
45
 
45
46
  module.exports = {
46
47
  newswire_classes: 'lrv-a-wrapper lrv-u-padding-b-2',
@@ -0,0 +1,60 @@
1
+ const clonedeep = require( 'lodash.clonedeep' );
2
+
3
+ const c_heading_prototype = require( '@penskemediacorp/larva-patterns/components/c-heading/c-heading.prototype' );
4
+ const c_svg_prototype = require( '../../components/c-svg/c-svg.prototype.js' );
5
+ const c_title_prototype = require( '@penskemediacorp/larva-patterns/components/c-title/c-title.prototype' );
6
+ const c_tagline_prototype = require( '@penskemediacorp/larva-patterns/components/c-tagline/c-tagline.prototype' );
7
+ const suggested_link_items_prototype = require( '@penskemediacorp/larva-patterns/modules/list/list.prototype' );
8
+ const search_form_prototype = require( '@penskemediacorp/larva-patterns/modules/search-form/search-form.prototype' );
9
+
10
+ const c_heading = clonedeep( c_heading_prototype );
11
+ const c_suggestion_title = clonedeep( c_title_prototype );
12
+ const c_search_title = clonedeep( c_title_prototype );
13
+ const c_svg = clonedeep( c_svg_prototype );
14
+ const c_title = clonedeep( c_title_prototype );
15
+ const c_tagline = clonedeep( c_tagline_prototype );
16
+ const suggested_link_items = clonedeep( suggested_link_items_prototype );
17
+ const search_form = clonedeep( search_form_prototype );
18
+
19
+ c_heading.c_heading_classes = 'lrv-a-screen-reader-only';
20
+ c_heading.c_heading_is_primary_heading = true;
21
+ c_heading.c_heading_text = '404';
22
+
23
+ c_svg.c_svg_name = 'logo-404';
24
+ c_svg.c_svg_classes = 'lrv-u-max-width-100p';
25
+
26
+ c_title.c_title_text = 'OOPS! Something went wrong here!';
27
+ c_title.c_title_classes = 'lrv-a-font-secondary-l lrv-u-text-transform-uppercase lrv-u-margin-b-125';
28
+ c_title.c_title_url = false;
29
+
30
+ c_suggestion_title.c_title_classes = 'lrv-u-text-align-left lrv-u-margin-b-075';
31
+ c_suggestion_title.c_title_text = 'Here are some suggestions that might be the page you were looking for:';
32
+ c_suggestion_title.c_title_url = false;
33
+
34
+ suggested_link_items.list_classes = 'lrv-u-text-align-left lrv-u-padding-b-1';
35
+ suggested_link_items.list_items = [
36
+ { list_markup: 'item_one' },
37
+ { list_markup: 'item_two' },
38
+ ];
39
+
40
+ c_search_title.c_title_classes = 'lrv-u-text-align-left';
41
+ c_search_title.c_title_text = 'Or try searching for it here...';
42
+ c_search_title.c_title_url = false;
43
+
44
+ search_form.search_form_classes = 'lrv-u-text-align-left lrv-u-margin-t-1 lrv-u-display-inline-flex lrv-u-width-100p search-form-404';
45
+ search_form.search_form_input_classes = 'lrv-u-border-a-1 lrv-u-width-100p';
46
+ search_form.search_form_action_url = '/?s=';
47
+
48
+ module.exports = {
49
+ c_heading,
50
+ c_suggestion_title,
51
+ c_search_title,
52
+ c_svg,
53
+ c_tagline,
54
+ c_title,
55
+ page_404_inner_classes: 'lrv-u-margin-lr-auto lrv-u-padding-lr-1',
56
+ search_form,
57
+ suggested_link_items,
58
+ wrapper_classes:
59
+ 'lrv-u-text-align-center lrv-u-padding-t-1 lrv-u-padding-b-2 lrv-u-margin-b-2 lrv-u-max-width-830 lrv-u-margin-lr-auto',
60
+ };
@@ -28,5 +28,21 @@
28
28
 
29
29
  </div>
30
30
 
31
+ {% if c_suggestion_title %}
32
+ {% include "@larva/components/c-title/c-title.twig" with c_suggestion_title %}
33
+ {% endif %}
34
+
35
+ {% if suggested_link_items %}
36
+ {% include "@larva/modules/list/list.twig" with suggested_link_items %}
37
+ {% endif %}
38
+
39
+ {% if c_search_title %}
40
+ {% include "@larva/components/c-title/c-title.twig" with c_search_title %}
41
+ {% endif %}
42
+
43
+ {% if search_form %}
44
+ {% include "@larva/modules/search-form/search-form.twig" with search_form %}
45
+ {% endif %}
46
+
31
47
  </div>
32
48
  </section>
@@ -4,5 +4,6 @@ module.exports = {
4
4
  paragraph_text_align_class: '',
5
5
  paragraph_color_class: '',
6
6
  paragraph_background_color_class: '',
7
+ paragraph_animation_class: '',
7
8
  paragraph_markup: 'Paragraph Text.',
8
9
  };
@@ -1,3 +1,8 @@
1
- <p class="paragraph larva // {{ paragraph_classes }} {{ paragraph_typography_class }} {{ paragraph_text_align_class }} {{ paragraph_color_class }} {{ paragraph_background_color_class }}">
1
+ <p
2
+ {% if paragraph_id_attr %}
3
+ id="{{ paragraph_id_attr }}"
4
+ {% endif %}
5
+ class="paragraph larva // {{ paragraph_classes }} {{ paragraph_animation_class }} {{ paragraph_typography_class }} {{ paragraph_text_align_class }} {{ paragraph_color_class }} {{ paragraph_background_color_class }}"
6
+ >
2
7
  {{ paragraph_markup|raw }}
3
8
  </p>
@@ -1,3 +1,3 @@
1
- <div class="post-content-image // {{ post_content_image_classes }}">
1
+ <div class="post-content-image // {{ post_content_image_classes }} {{ post_content_image_animation_class }}">
2
2
  {% include "@larva/objects/o-figure/o-figure.twig" with o_figure %}
3
3
  </div>
@@ -0,0 +1,41 @@
1
+ const clonedeep = require( 'lodash.clonedeep' );
2
+
3
+ const c_lazy_image = clonedeep( require( '../../components/c-lazy-image/c-lazy-image.prototype' ) );
4
+ const c_figcaption = clonedeep( require( '../../components/c-figcaption/c-figcaption.prototype' ) );
5
+ const c_title = clonedeep( require( '../../components/c-title/c-title.prototype' ) );
6
+ const c_tagline = clonedeep( require( '../../components/c-tagline/c-tagline.prototype' ) );
7
+ const c_button = clonedeep( require( '../../components/c-button/c-button.prototype' ) );
8
+ const c_dek = clonedeep( require( '../../components/c-dek/c-dek.prototype' ) );
9
+
10
+ c_figcaption.c_figcaption_caption_markup = false;
11
+ c_figcaption.c_figcaption_credit_text_markup = 'Courtesy of Nordic Track';
12
+ c_figcaption.c_figcaption_classes = 'lrv-u-flex lrv-u-justify-content-end lrv-u-margin-t-025 lrv-u-color-grey-dark lrv-u-text-transform-uppercase lrv-a-font-basic-xxs';
13
+
14
+ c_title.c_title_text = 'NordicTrack Commercial S22i Studio Cycle';
15
+ c_title.c_title_classes = 'lrv-a-font-primary-xxl lrv-u-margin-t-1 lrv-u-margin-t-075@mobile-max lrv-a-unstyle-inner-links';
16
+ c_title.c_title_url = '';
17
+
18
+ c_tagline.c_tagline_text = 'Powerful, iFit ready, and priced right!';
19
+ c_tagline.c_tagline_classes = 'lrv-a-font-body-xxl lrv-u-margin-t-125 lrv-u-margin-b-00';
20
+
21
+ c_button.c_button_classes = 'lrv-u-margin-t-125 lrv-a-font-basic-m lrv-a-unstyle-link lrv-u-display-block';
22
+ c_button.c_button_inner_classes = 'lrv-u-border-b-2 lrv-u-border-t-2 lrv-u-border-l-1 lrv-u-border-r-1 lrv-u-padding-tb-050 lrv-u-text-transform-uppercase lrv-a-icon lrv-a-icon-before lrv-u-align-items-start lrv-u-padding-lr-050 lrv-u-background-color-brand-primary:hover';
23
+ c_button.c_button_text = 'Subscribe $65.99';
24
+ c_button.c_button_url = '#';
25
+ c_button.product_card_price_outside = false;
26
+
27
+ const buy_now_buttons = [ c_button, c_button ];
28
+
29
+ c_dek.c_dek_text = false;
30
+ c_dek.c_dek_markup = 'NordicTrack went a similar route as Bowflex with their S22i cycle.Instead of the regular fixed position, the S22i can adjust for incline (up to 20%) and decline (down to -10%) for a more realistic ride and better muscle engagement. The kicker with this feature is that trainers can digitally adjust your bike’s incline/decline in real-time during a live class. The S22i’s construction is top-quality with a steel frame and a solid 32-pound flywheel. The bike also uses NordicTrack’s SMR Silent Magnetic Resistance system which improves fluidity while making the bike quieter as well. NordicTrack offers both live, studio-like classes as well as a library of on-demand sessions through their iFit membership. You also get off-bike exercises including strength training, meditation and mindfulness sessions with a swivel of the screen. This iFit service has somewhat of a leg up on other brands because you get a whole year free to test it out. The classes, along with a swath of exercise metrics, are shown on a large, crisp 22-inch display. Among these stats is heart rate, which the bike measures via hand pulse sensors or a separate Bluetooth-connected monitor.';
31
+ c_dek.c_dek_classes = 'lrv-u-order-100 lrv-u-margin-t-125 lrv-u-margin-t-2@mobile-max lrv-a-font-body-xxl lrv-u-margin-b-050';
32
+
33
+ module.exports = {
34
+ product_card_wrapper_classes: 'lrv-u-padding-tb-125',
35
+ c_lazy_image,
36
+ c_figcaption,
37
+ c_title,
38
+ c_tagline,
39
+ buy_now_buttons,
40
+ c_dek,
41
+ };
@@ -0,0 +1,57 @@
1
+ <div class="product-card // {{ product_card_classes }}">
2
+ <div class="product-card-inner-wrapper // {{ product_card_wrapper_classes }}">
3
+ <div class="product-card-image-wrapper // {{ product_card_image_classes }}">
4
+ {% if best_deal_icon %}
5
+ {% include "@larva/components/c-svg/c-svg.twig" with best_deal_icon %}
6
+ {% endif %}
7
+
8
+ {% if c_lazy_image %}
9
+ {% include "@larva/components/c-lazy-image/c-lazy-image.twig" with c_lazy_image %}
10
+ {% endif %}
11
+
12
+ {% if c_figcaption %}
13
+ {% include "@larva/components/c-figcaption/c-figcaption.twig" with c_figcaption %}
14
+ {% endif %}
15
+ </div>
16
+ <div class="product-card-content-wrapper // {{ product_card_details_classes }}">
17
+ {% if article_kicker %}
18
+ {% include "@larva/modules/article-kicker/article-kicker.twig" with article_kicker %}
19
+ {% endif %}
20
+
21
+ {% if c_title %}
22
+ {% include "@larva/components/c-title/c-title.twig" with c_title %}
23
+ {% endif %}
24
+
25
+ {% if c_tagline %}
26
+ {% include "@larva/components/c-tagline/c-tagline.twig" with c_tagline %}
27
+ {% endif %}
28
+
29
+ <div class="buy-now-buttons {{ product_card_buy_now_buttons_classes }}">
30
+ {% if buy_now_buttons %}
31
+ {% for c_button in buy_now_buttons %}
32
+ <div class="{{ product_card_buy_now_button_wrapper_classes }}">
33
+ {% if c_button['product_card_price_outside'] %}
34
+ <p class="{{ product_card_price_outside_classes }}">
35
+ {% if c_button['current_price'] %}
36
+ {% include "@larva/components/c-span/c-span.twig" with c_button['current_price'] %}
37
+ {% endif %}
38
+ {% if c_button['original_price'] %}
39
+ {% include "@larva/components/c-span/c-span.twig" with c_button['original_price'] %}
40
+ {% endif %}
41
+ {% if c_button['discount'] %}
42
+ {% include "@larva/components/c-span/c-span.twig" with c_button['discount'] %}
43
+ {% endif %}
44
+ </p>
45
+ {% endif %}
46
+ {% include "@larva/components/c-button/c-button.twig" with c_button %}
47
+ </div>
48
+ {% endfor %}
49
+ {% endif %}
50
+ </div>
51
+
52
+ {% if c_dek %}
53
+ {% include "@larva/components/c-dek/c-dek.twig" with c_dek %}
54
+ {% endif %}
55
+ </div>
56
+ </div>
57
+ </div>
@@ -0,0 +1,46 @@
1
+ const clonedeep = require( 'lodash.clonedeep' );
2
+
3
+ const c_title = clonedeep(
4
+ require( '@penskemediacorp/larva-patterns/components/c-title/c-title.prototype.js' )
5
+ );
6
+
7
+ const o_product_card = clonedeep(
8
+ require( '../../objects/o-product-card/o-product-card.prototype' )
9
+ );
10
+
11
+ const o_product_card_primary = clonedeep(
12
+ require( '../../objects/o-product-card/o-product-card.primary' )
13
+ );
14
+
15
+ const product_grid_header_verdict_text = 'Verdict';
16
+ const product_grid_header_pros_text = 'Pros';
17
+ const product_grid_header_cons_text = 'Cons';
18
+
19
+ o_product_card.o_product_card_classes = 'lrv-u-border-a-1@mobile-max lrv-u-border-color-grey-light lrv-u-width-100p';
20
+ o_product_card.o_product_card_link_classes =
21
+ 'lrv-a-unstyle-link lrv-u-display-block lrv-a-children-border-vertical lrv-a-children-border--grey-light lrv-u-height-100p lrv-u-flex lrv-u-flex-direction-column';
22
+
23
+ o_product_card.product_grid_header_verdict_text =
24
+ product_grid_header_verdict_text;
25
+ o_product_card.product_grid_header_pros_text =
26
+ product_grid_header_pros_text;
27
+ o_product_card.product_grid_header_cons_text =
28
+ product_grid_header_cons_text;
29
+
30
+ o_product_card_primary.o_product_card_classes += ' lrv-u-border-a-1@mobile-max lrv-u-border-color-grey-light';
31
+ o_product_card_primary.o_product_card_link_classes +=
32
+ ' lrv-a-unstyle-link lrv-u-display-block lrv-a-children-border-vertical lrv-a-children-border--grey-light lrv-u-height-100p lrv-u-flex lrv-u-flex-direction-column';
33
+
34
+ module.exports = {
35
+ product_grid_classes:
36
+ 'lrv-u-margin-tb-2 lrv-u-flex@desktop lrv-a-children-border-horizontal lrv-a-children-border--grey-light lrv-u-border-a-1@desktop lrv-u-border-color-grey-light lrv-a-space-children--3 lrv-a-space-children-vertical@mobile-max',
37
+ product_grid_items: [
38
+ o_product_card,
39
+ o_product_card_primary,
40
+ o_product_card,
41
+ o_product_card,
42
+ ],
43
+ product_grid_header_verdict_text,
44
+ product_grid_header_pros_text,
45
+ product_grid_header_cons_text,
46
+ };
@@ -0,0 +1,21 @@
1
+ <div class="product-grid {{product_grid_classes}}">
2
+ <div class="product-grid__header lrv-a-children-border-vertical lrv-u-flex lrv-u-flex-direction-column lrv-a-hidden@desktop-max">
3
+ <div class="product-grid__header-details lrv-u-flex-grow-1">
4
+ {{product_grid_header_details_text}}
5
+ </div>
6
+ <div class="product-grid__header-verdict best-of-verdict lrv-u-padding-lr-1 lrv-u-padding-t-1 lrv-a-font-secondary-m">
7
+ {{product_grid_header_verdict_text}}
8
+ </div>
9
+ <div class="product-grid__header-pros best-of-pros lrv-u-padding-lr-1 lrv-u-padding-t-1 lrv-a-font-secondary-m">
10
+ {{product_grid_header_pros_text}}
11
+ </div>
12
+ <div class="product-grid__header-cons best-of-cons lrv-u-padding-lr-1 lrv-u-padding-t-1 lrv-a-font-secondary-m">
13
+ {{product_grid_header_cons_text}}
14
+ </div>
15
+ </div>
16
+ {% if product_grid_items %}
17
+ {% for item in product_grid_items %}
18
+ {% include "@larva/objects/o-product-card/o-product-card.twig" with item %}
19
+ {% endfor %}
20
+ {% endif %}
21
+ </div>
@@ -0,0 +1,15 @@
1
+ const clonedeep = require( 'lodash.clonedeep' );
2
+
3
+ const c_heading = clonedeep( require( '../../components/c-heading/c-heading.prototype' ) );
4
+ const list_markup = '<ul><li>List Item</li></ul>';
5
+
6
+ const item = {
7
+ c_heading,
8
+ list_markup
9
+ }
10
+
11
+ module.exports = {
12
+ pros_and_cons_classes: 'lrv-u-flex lrv-u-border-a-1 lrv-a-children-border-horizontal',
13
+ pros_and_cons_inner_classes: 'lrv-u-padding-a-1 lrv-u-width-50p',
14
+ items: [ item, item ]
15
+ }
@@ -0,0 +1,12 @@
1
+ <div class="pros-and-cons {{pros_and_cons_classes}}">
2
+ {% for item in items %}
3
+ <div class="pros-and-cons__inner {{pros_and_cons_inner_classes}}" >
4
+ {% if item['c_heading'] %}
5
+ {% include "@larva/components/c-heading/c-heading.twig" with item['c_heading'] %}
6
+ {% endif %}
7
+ {% if item['list_markup'] %}
8
+ {{item['list_markup']|raw}}
9
+ {% endif %}
10
+ </div>
11
+ {% endfor %}
12
+ </div>
@@ -3,7 +3,7 @@ const clonedeep = require( 'lodash.clonedeep' );
3
3
  const section_heading = clonedeep( require( './section-heading.prototype' ) );
4
4
 
5
5
  section_heading.section_heading_class =
6
- 'lrv-u-margin-lr-auto lrv-u-width-75p lrv-u-border-t-3 lrv-u-padding-t-1';
6
+ 'lrv-u-margin-lr-auto lrv-u-border-t-3 lrv-u-padding-t-050';
7
7
  section_heading.c_dek = false;
8
8
 
9
9
  module.exports = section_heading;
@@ -3,7 +3,7 @@ const clonedeep = require( 'lodash.clonedeep' );
3
3
  const section_heading = clonedeep( require( './section-heading.prototype' ) );
4
4
 
5
5
  section_heading.section_heading_class =
6
- 'lrv-u-margin-lr-auto lrv-u-width-75p lrv-u-border-t-3 lrv-u-padding-t-1';
6
+ 'lrv-u-margin-lr-auto lrv-u-border-t-3 lrv-u-padding-t-050';
7
7
  section_heading.section_heading_level_text = '3';
8
8
  section_heading.section_heading_typography_class = 'lrv-a-font-secondary-xl';
9
9
  section_heading.c_dek = false;
@@ -1,4 +1,5 @@
1
1
  module.exports = {
2
2
  separator_classes: 'lrv-u-border-a-1',
3
3
  separator_border_color_class: '',
4
+ separator_thickness_class: '',
4
5
  };
@@ -1 +1 @@
1
- <hr class="separator larva // {{ separator_classes }} {{ separator_border_color_class }}" />
1
+ <hr class="separator larva // {{ separator_classes }} {{ separator_border_color_class }} {{ separator_thickness_class }}" />
@@ -0,0 +1,38 @@
1
+ const clonedeep = require('lodash.clonedeep');
2
+
3
+ const c_heading = clonedeep( require( '@penskemediacorp/larva-patterns/components/c-heading/c-heading.prototype' ) );
4
+ const c_nav_link = clonedeep( require( '@penskemediacorp/larva-patterns/components/c-nav-link/c-nav-link.prototype' ) );
5
+
6
+
7
+ c_heading.c_heading_classes = 'lrv-a-font-primary-l u-font-size-25 lrv-u-padding-b-075 lrv-u-border-b-1';
8
+
9
+ c_nav_link.c_nav_link_markup = 'Moon Landing on July 21,1968';
10
+ c_nav_link.c_nav_link_title_attr = 'Moon Landing on July 21,1968';
11
+ c_nav_link.c_nav_link_url = '#';
12
+ c_nav_link.c_nav_link_text = false;
13
+
14
+ const toc_list_items = [
15
+ c_nav_link,
16
+ c_nav_link,
17
+ c_nav_link,
18
+ c_nav_link,
19
+ c_nav_link,
20
+ ];
21
+
22
+ const toc_mobile_list_items = toc_list_items;
23
+
24
+ module.exports = {
25
+ toc_classes: 'lrv-u-border-a-1 lrv-u-padding-a-1 lrv-u-margin-b-1',
26
+ toc_navigation_classes: 'lrv-js-MobileHeightToggle',
27
+ toc_list_classes: 'lrv-js-MobileHeightToggle-target lrv-u-color-brand-secondary a-font-theme-secondary-medium-xs lrv-a-unstyle-list lrv-a-grid lrv-a-cols2@desktop u-grid-row-gap-0 u-grid-gap-1 lrv-u-padding-t-050',
28
+ toc_mobile_list_classes: 'lrv-a-hidden@desktop lrv-u-color-brand-secondary a-font-theme-secondary-medium-xs lrv-a-unstyle-list lrv-a-grid u-grid-row-gap-0 lrv-u-padding-t-050',
29
+ toc_list_item_outer_classes: 'lrv-u-line-height-large lrv-u-width-100p',
30
+ toc_mobile_list_item_outer_classes: 'lrv-u-line-height-large lrv-u-width-100p',
31
+ toc_navigation_anchor_classes: 'lrv-u-display-block lrv-u-whitespace-nowrap lrv-u-overflow-hidden',
32
+ nav_title_text: 'View More',
33
+ nav_title_outer_classes: 'lrv-a-hidden@desktop a-heading-border lrv-u-text-align-center',
34
+ nav_title_classes: 'lrv-js-MobileHeightToggle-trigger lrv-u-background-color-white lrv-u-font-weight-normal lrv-u-padding-a-050 lrv-u-justify-content-center lrv-u-text-transform-capitalize',
35
+ toc_list_items: toc_list_items,
36
+ c_heading: c_heading,
37
+ toc_mobile_list_items: toc_mobile_list_items,
38
+ }