@mjhls/mjh-framework 1.0.72 → 1.0.74

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/dist/index.js CHANGED
@@ -5494,10 +5494,11 @@ GROQ query -
5494
5494
  "thumbnail": thumbnail.asset->url,
5495
5495
  "url": url.current
5496
5496
  }
5497
-
5498
5497
  */
5499
5498
  var GroupDeck = function GroupDeck(props) {
5500
5499
  // Props should be an array of objects containing Thumbnail, title, and URL
5500
+ var get2 = props.get2 ? '/' + props.get2 + '/' : '/view/';
5501
+
5501
5502
  var variant = props.dark ? 'white' : '#383838';
5502
5503
  function scrollSlider(e, direction) {
5503
5504
  var slide = e.target.parentElement;
@@ -5515,6 +5516,12 @@ var GroupDeck = function GroupDeck(props) {
5515
5516
  behavior: 'smooth'
5516
5517
  });
5517
5518
  }
5519
+ function handleClick(url, vidIndex) {
5520
+ props.setState(url, vidIndex);
5521
+ }
5522
+ var _props$current = props.current,
5523
+ current = _props$current === undefined ? '' : _props$current;
5524
+
5518
5525
 
5519
5526
  return React__default.createElement(
5520
5527
  'div',
@@ -5540,16 +5547,23 @@ var GroupDeck = function GroupDeck(props) {
5540
5547
  'div',
5541
5548
  { className: 'row__inner' },
5542
5549
  props.dataset && props.dataset.map(function (video, index) {
5543
- var url = '/views/' + video.url;
5544
- return React__default.createElement(
5545
- 'div',
5546
- { key: index, className: 'tile' },
5547
- React__default.createElement(
5548
- Link,
5549
- { href: url },
5550
+ // If there is a current prop, means this will overlay a currently playing video
5551
+ if (current !== '') {
5552
+ var url = video.url;
5553
+
5554
+ return React__default.createElement(
5555
+ 'div',
5556
+ { key: index, className: 'tile' },
5557
+ current && current === url ? React__default.createElement(
5558
+ 'div',
5559
+ { className: 'now-playing' },
5560
+ 'Now Playing'
5561
+ ) : '',
5550
5562
  React__default.createElement(
5551
5563
  'a',
5552
- null,
5564
+ { onClick: function onClick() {
5565
+ return handleClick(url, index + 1);
5566
+ } },
5553
5567
  React__default.createElement(
5554
5568
  'div',
5555
5569
  { className: 'tile__media' },
@@ -5574,15 +5588,53 @@ var GroupDeck = function GroupDeck(props) {
5574
5588
  video.title
5575
5589
  )
5576
5590
  )
5577
- )
5578
- );
5591
+ );
5592
+ } else {
5593
+ // slider by itself
5594
+ var _url = '' + get2 + video.url;
5595
+ return React__default.createElement(
5596
+ 'div',
5597
+ { key: index, className: 'tile' },
5598
+ React__default.createElement(
5599
+ Link,
5600
+ { href: _url },
5601
+ React__default.createElement(
5602
+ 'a',
5603
+ null,
5604
+ React__default.createElement(
5605
+ 'div',
5606
+ { className: 'tile__media' },
5607
+ React__default.createElement('img', { className: 'tile__img', src: video.thumbnail, alt: '' })
5608
+ ),
5609
+ React__default.createElement(
5610
+ 'div',
5611
+ { className: 'tile__details' },
5612
+ React__default.createElement(
5613
+ 'div',
5614
+ { className: 'tile__title' },
5615
+ React__default.createElement(
5616
+ 'div',
5617
+ { style: { color: variant }, className: 'tile__title_text' },
5618
+ video.title
5619
+ )
5620
+ )
5621
+ ),
5622
+ React__default.createElement(
5623
+ 'div',
5624
+ { style: { color: variant }, className: 'tile__info' },
5625
+ video.title
5626
+ )
5627
+ )
5628
+ )
5629
+ );
5630
+ }
5579
5631
  })
5580
5632
  )
5581
5633
  ),
5582
5634
  React__default.createElement(
5583
5635
  'style',
5584
5636
  { jsx: true },
5585
- '\n #vid-slider * {\n box-sizing: border-box;\n }\n #vid-slider {\n position: relative;\n }\n #vid-slider h1,\n #vid-slider p {\n text-align: center;\n width: 100%;\n max-width: 500px;\n margin: auto;\n }\n #vid-slider a:link,\n #vid-slider a:hover,\n #vid-slider a:active,\n #vid-slider a:visited {\n transition: color 150ms;\n color: #95a5a6;\n text-decoration: none;\n }\n #vid-slider a:hover {\n color: #7f8c8d;\n text-decoration: underline;\n }\n #vid-slider .contain {\n width: 100%;\n }\n #vid-slider .row {\n overflow: scroll;\n width: 100%;\n }\n #vid-slider .tile__info {\n white-space: normal !important;\n position: absolute;\n text-align: center;\n color: ' + (props.dark ? 'white' : '#383838') + ';\n opacity: 1;\n font-size: 1rem;\n transition: opacity 0.25s;\n }\n #vid-slider .row__inner {\n transition: 450ms -webkit-transform;\n transition: 450ms transform;\n transition: 450ms transform, 450ms -webkit-transform;\n font-size: 0;\n white-space: nowrap;\n margin: 55px 0;\n padding-bottom: 10px;\n padding-left: 3rem;\n }\n #vid-slider .tile {\n position: relative;\n display: inline-block;\n width: 250px;\n height: 140.625px;\n margin-right: 10px;\n font-size: 20px;\n cursor: pointer;\n transition: 450ms all;\n -webkit-transform-origin: center left;\n transform-origin: center left;\n }\n #vid-slider .tile__img {\n width: 250px;\n height: 140.625px;\n -o-object-fit: cover;\n object-fit: cover;\n }\n #vid-slider .tile__details {\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n top: 0;\n font-size: 10px;\n opacity: 0;\n background: linear-gradient(to top, rgba(0, 0, 0, 0.9) 0%, rgba(0, 0, 0, 0) 100%);\n transition: 450ms opacity;\n }\n #vid-slider .tile__details:after,\n #vid-slider .tile__details:before {\n content: \'\';\n position: absolute;\n top: 50%;\n left: 50%;\n display: #000;\n }\n #vid-slider .tile__details:after {\n margin-top: -25px;\n margin-left: -25px;\n width: 50px;\n height: 50px;\n border: 3px solid #ecf0f1;\n line-height: 50px;\n text-align: center;\n border-radius: 100%;\n background: rgba(0, 0, 0, 0.5);\n z-index: 1;\n }\n #vid-slider .tile__details:before {\n content: \'\u25B6\';\n left: 0;\n width: 100%;\n font-size: 30px;\n margin-left: 3px;\n margin-top: -23px;\n text-align: center;\n z-index: 2;\n color: white;\n }\n #vid-slider .tile:hover .tile__details {\n opacity: 1;\n }\n #vid-slider .tile__title {\n position: absolute;\n bottom: 0;\n padding: 10px;\n max-width: 250px;\n }\n #vid-slider .tile__title_text {\n position: relative;\n left: 0;\n white-space: normal;\n }\n #vid-slider .row__inner:hover {\n -webkit-transform: translate3d(-62.5px, 0, 0);\n transform: translate3d(-62.5px, 0, 0);\n }\n #vid-slider .row__inner:hover .tile {\n opacity: 0.3;\n }\n #vid-slider .row__inner:hover .tile:hover {\n -webkit-transform: scale(1.25);\n transform: scale(1.25);\n opacity: 1;\n }\n #vid-slider .tile:hover ~ .tile {\n -webkit-transform: translate3d(62px, 0, 0);\n transform: translate3d(62px, 0, 0);\n }\n #vid-slider .tile:hover .tile__info {\n opacity: 0;\n }\n #vid-slider .tile__slider-prev,\n #vid-slider .tile__slider-next {\n width: 30px;\n background: transparent;\n border: none;\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n z-index: 5;\n cursor: pointer;\n color: ' + (props.dark ? 'white' : 'black') + ';\n display: flex;\n justify-content: center;\n align-items: center;\n font-size: 2rem;\n }\n #vid-slider .tile__slider-next {\n right: 0;\n }\n #vid-slider,\n #vid-slider .row {\n margin: 0;\n padding: 0;\n }\n #vid-slider .tile:last-child {\n margin-right: 2rem;\n }\n #vid-slider .row::-webkit-scrollbar-thumb {\n background-color: transparent !important;\n }\n #vid-slider i {\n border: solid ' + (props.dark ? 'white' : 'black') + ';\n border-width: 0 4px 4px 0;\n display: inline-block;\n padding: 4px;\n pointer-events: none;\n }\n\n #vid-slider .right {\n transform: rotate(-45deg);\n -webkit-transform: rotate(-45deg);\n }\n\n #vid-slider .left {\n transform: rotate(135deg);\n -webkit-transform: rotate(135deg);\n }\n '
5637
+ '\n #vid-slider * {\n box-sizing: border-box;\n }\n #vid-slider {\n position: relative;\n }\n #vid-slider .now-playing {\n position: absolute;\n top: 1rem;\n left: 1rem;\n color: white;\n }\n #vid-slider h1,\n #vid-slider p {\n text-align: center;\n width: 100%;\n max-width: 500px;\n margin: auto;\n }\n #vid-slider a:link,\n #vid-slider a:hover,\n #vid-slider a:active,\n #vid-slider a:visited {\n transition: color 150ms;\n color: #95a5a6;\n text-decoration: none;\n }\n #vid-slider a:hover {\n color: #7f8c8d;\n text-decoration: underline;\n }\n #vid-slider .contain {\n width: 100%;\n }\n #vid-slider .row {\n overflow: scroll;\n width: 100%;\n }\n #vid-slider .tile__info {\n white-space: normal !important;\n position: absolute;\n text-align: center;\n color: ' + (props.dark ? 'white' : '#383838') + ';\n opacity: 1;\n font-size: 1rem;\n transition: opacity 0.25s;\n }\n #vid-slider .row__inner {\n transition: 450ms -webkit-transform;\n transition: 450ms transform;\n transition: 450ms transform, 450ms -webkit-transform;\n font-size: 0;\n white-space: nowrap;\n margin: 55px 0;\n padding-bottom: 10px;\n padding-left: 3rem;\n }\n #vid-slider .tile {\n position: relative;\n display: inline-block;\n width: 250px;\n height: 140.625px;\n margin-right: 10px;\n font-size: 20px;\n cursor: pointer;\n transition: 450ms all;\n -webkit-transform-origin: center left;\n transform-origin: center left;\n }\n #vid-slider .tile__img {\n width: 250px;\n height: 140.625px;\n -o-object-fit: cover;\n object-fit: cover;\n }\n #vid-slider .tile__details {\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n top: 0;\n font-size: 10px;\n opacity: 0;\n background: linear-gradient(to top, rgba(0, 0, 0, 0.9) 0%, rgba(0, 0, 0, 0) 100%);\n transition: 450ms opacity;\n }\n #vid-slider .tile__details:after,\n #vid-slider .tile__details:before {\n content: \'\';\n position: absolute;\n top: 50%;\n left: 50%;\n display: #000;\n }\n #vid-slider .tile__details:after {\n margin-top: -25px;\n margin-left: -25px;\n width: 50px;\n height: 50px;\n border: 3px solid #ecf0f1;\n line-height: 50px;\n text-align: center;\n border-radius: 100%;\n background: rgba(0, 0, 0, 0.5);\n z-index: 1;\n }\n #vid-slider .tile__details:before {\n content: \'\u25B6\';\n left: 0;\n width: 100%;\n font-size: 30px;\n margin-left: 2px;\n margin-top: -23px;\n text-align: center;\n z-index: 2;\n color: white;\n }\n #vid-slider .tile:hover .tile__details {\n opacity: 1;\n }\n #vid-slider .tile__title {\n position: absolute;\n bottom: 0;\n padding: 10px;\n max-width: 250px;\n }\n #vid-slider .tile__title_text {\n position: relative;\n left: 0;\n white-space: normal;\n }\n #vid-slider .row__inner:hover {\n -webkit-transform: translate3d(-62.5px, 0, 0);\n transform: translate3d(-62.5px, 0, 0);\n }\n #vid-slider .row__inner:hover .tile {\n opacity: 0.3;\n }\n #vid-slider .row__inner:hover .tile:hover {\n -webkit-transform: scale(1.25);\n transform: scale(1.25);\n opacity: 1;\n }\n #vid-slider .tile:hover ~ .tile {\n -webkit-transform: translate3d(62px, 0, 0);\n transform: translate3d(62px, 0, 0);\n }\n #vid-slider .tile:hover .tile__info {\n opacity: 0;\n }\n #vid-slider .tile__slider-prev,\n #vid-slider .tile__slider-next {\n width: 30px;\n background: transparent;\n border: none;\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n z-index: 5;\n cursor: pointer;\n color: ' + (props.dark ? 'white' : 'black') + ';\n display: flex;\n justify-content: center;\n align-items: center;\n font-size: 2rem;\n }\n #vid-slider .tile__slider-next {\n right: 0;\n }\n #vid-slider,\n #vid-slider .row {\n margin: 0;\n padding: 0;\n }\n #vid-slider .tile:last-child {\n margin-right: 2rem;\n }\n #vid-slider .row::-webkit-scrollbar-thumb {\n background-color: transparent !important;\n }\n #vid-slider i {\n border: solid ' + (props.dark ? 'white' : 'black') + ';\n border-width: 0 4px 4px 0;\n display: inline-block;\n padding: 4px;\n pointer-events: none;\n }\n\n #vid-slider .right {\n transform: rotate(-45deg);\n -webkit-transform: rotate(-45deg);\n }\n\n #vid-slider .left {\n transform: rotate(135deg);\n -webkit-transform: rotate(135deg);\n }\n '
5586
5638
  )
5587
5639
  );
5588
5640
  };
@@ -5760,7 +5812,8 @@ var Column3 = function Column3(props) {
5760
5812
  var Header = function Header(props) {
5761
5813
  var title = props.title,
5762
5814
  keyword = props.keyword,
5763
- description = props.description;
5815
+ description = props.description,
5816
+ isLiveSite = props.isLiveSite;
5764
5817
 
5765
5818
 
5766
5819
  return React__default.createElement(
@@ -5771,6 +5824,7 @@ var Header = function Header(props) {
5771
5824
  null,
5772
5825
  title
5773
5826
  ),
5827
+ !isLiveSite && React__default.createElement('meta', { name: 'robots', content: 'noindex, nofollow' }),
5774
5828
  React__default.createElement('meta', { name: 'keywords', content: keyword }),
5775
5829
  React__default.createElement('meta', { name: 'description', content: description }),
5776
5830
  React__default.createElement('link', { rel: 'stylesheet', href: '/bootstrap.min.css' }),
@@ -12493,7 +12547,7 @@ var TemplateNormal = function TemplateNormal(props) {
12493
12547
  return React__default.createElement(
12494
12548
  'section',
12495
12549
  null,
12496
- React__default.createElement(Header, { title: title ? title + ' | ' + website.title : '' + website.title, keyword: keywords, description: description }),
12550
+ React__default.createElement(Header, { title: title ? title + ' | ' + website.title : '' + website.title, isLiveSite: config.isLiveSite, keyword: keywords, description: description }),
12497
12551
  navigation(),
12498
12552
  horizontalAD && horizontalAD.networkID && horizontalAD.adUnit && React__default.createElement(
12499
12553
  Container,
@@ -15526,6 +15580,148 @@ var IFrame = function IFrame(_ref) {
15526
15580
  );
15527
15581
  };
15528
15582
 
15583
+ var YouTubeGallery = function YouTubeGallery(_ref) {
15584
+ var nodes = _ref.nodes;
15585
+
15586
+
15587
+ var router$$1 = router.useRouter();
15588
+ var params = void 0;
15589
+ var seriesVid = void 0;
15590
+
15591
+ var _useState = React.useState(''),
15592
+ _useState2 = slicedToArray(_useState, 2),
15593
+ vidUrl = _useState2[0],
15594
+ setVidUrl = _useState2[1];
15595
+
15596
+ // Once component mounts, set the variables
15597
+
15598
+
15599
+ React.useEffect(function () {
15600
+ console.log('loaded');
15601
+ params = new URL(document.location).searchParams;
15602
+ seriesVid = params.get('seriesVid') || 1;
15603
+ setVidUrl(nodes.videos['' + (seriesVid - 1)].url);
15604
+ }, []);
15605
+
15606
+ // Series data for the image slider
15607
+ var seriesData = [];
15608
+ nodes.videos.forEach(function (vid) {
15609
+ seriesData.push({ title: vid.title, thumbnail: 'http://img.youtube.com/vi/' + getYoutubeId(vid.url) + '/hqdefault.jpg', url: vid.url });
15610
+ });
15611
+
15612
+ // If series vid doesnt exist, go back to first video
15613
+ if (seriesData.length < seriesVid) {
15614
+ seriesVid = 1;
15615
+ var newPath = '/' + get2 + '/' + router$$1.query.url + ('?seriesVid=' + seriesVid);
15616
+ var vidState = { vid_id: seriesVid };
15617
+ window.history.pushState(vidState, '', newPath);
15618
+ }
15619
+ //
15620
+ function toggleSeries() {
15621
+ var series = document.querySelector('.vid-series');
15622
+ if (series.classList.contains('active')) {
15623
+ series.style.bottom = '-100%';
15624
+ } else {
15625
+ series.style.bottom = '6px';
15626
+ }
15627
+ series.classList.toggle('active');
15628
+ }
15629
+ // This function is passed to the GroupDeck to change the youtube iframe src
15630
+ function setState(url, vidIndex) {
15631
+ var get2 = router$$1.asPath.split('/')[1];
15632
+ setVidUrl(url);
15633
+ toggleSeries();
15634
+ lib_3.refresh();
15635
+ var newPath = '/' + get2 + '/' + router$$1.query.url + ('?seriesVid=' + vidIndex);
15636
+ var vidState = { vid_id: vidIndex };
15637
+ window.history.pushState(vidState, '', newPath);
15638
+ }
15639
+
15640
+ // Handle video end
15641
+ function handleOnEnd(e) {
15642
+ var currentVid = void 0;
15643
+ var nextVid = void 0;
15644
+ //Find index of video currently playing
15645
+ seriesData.forEach(function (vid, index$$1) {
15646
+ if (vid.url === vidUrl) {
15647
+ currentVid = index$$1;
15648
+ }
15649
+ });
15650
+ //increment +1, or if at the end of the series list, go back to the beginning
15651
+ if (currentVid + 1 >= seriesData.length) {
15652
+ nextVid = 0;
15653
+ } else {
15654
+ nextVid = currentVid + 1;
15655
+ }
15656
+ var get2 = router$$1.asPath.split('/')[1];
15657
+ // set the new Video URL
15658
+ setState(nodes.videos['' + nextVid].url);
15659
+ var newPath = '/' + get2 + '/' + router$$1.query.url + ('?seriesVid=' + (nextVid + 1));
15660
+ var vidState = { vid_id: nextVid + 1 };
15661
+ var title = '';
15662
+ window.history.pushState(vidState, title, newPath);
15663
+
15664
+ //Small pause before starting next video
15665
+ setTimeout(function () {
15666
+ //Youtube API to start video playing automatically
15667
+ var id = getYoutubeId(nodes.videos['' + nextVid].url);
15668
+ e.target.loadVideoById(id);
15669
+ toggleSeries();
15670
+ lib_3.refresh();
15671
+ }, 1000);
15672
+ }
15673
+ // Youtube Options
15674
+ var opts = {
15675
+ width: '100%',
15676
+ playerVars: {
15677
+ rel: 0
15678
+ }
15679
+ };
15680
+
15681
+ return React__default.createElement(
15682
+ 'div',
15683
+ { className: 'video-container', style: { position: 'sticky', top: '60px', marginBottom: '20vh' } },
15684
+ React__default.createElement(
15685
+ 'div',
15686
+ { className: 'video-block', style: { position: 'relative', overflow: 'hidden' } },
15687
+ vidUrl && React__default.createElement(YouTube, { videoId: getYoutubeId(vidUrl), opts: opts, onEnd: function onEnd(e) {
15688
+ return handleOnEnd(e);
15689
+ } }),
15690
+ React__default.createElement(
15691
+ 'div',
15692
+ {
15693
+ className: 'vid-series',
15694
+ style: {
15695
+ position: 'absolute',
15696
+ width: '100%',
15697
+ height: '250px',
15698
+ background: 'linear-gradient(to bottom, transparent,black)',
15699
+ bottom: '-100%',
15700
+ transition: 'all .5s ease',
15701
+ padding: '0 1rem',
15702
+ left: '0'
15703
+ } },
15704
+ vidUrl && React__default.createElement(GroupDeck, { dark: true, dataset: seriesData, setState: setState, seriesVid: seriesVid, current: vidUrl })
15705
+ )
15706
+ ),
15707
+ React__default.createElement(
15708
+ 'div',
15709
+ { className: 'vid-controls', style: { width: '100%', background: 'transparent', display: 'flex', justifyContent: 'center' } },
15710
+ React__default.createElement('button', {
15711
+ 'aria-label': 'Toggles video series',
15712
+ id: 'vid-series-btn',
15713
+ onClick: toggleSeries,
15714
+ className: 'btn btn-block btn-lg btn-secondary ',
15715
+ style: { borderRadius: '0' } })
15716
+ ),
15717
+ React__default.createElement(
15718
+ 'style',
15719
+ { jsx: true },
15720
+ '\n .vid-series .video-detail iframe {\n height: 415px !important;\n }\n span.btn {\n margin: 0 1rem;\n }\n '
15721
+ )
15722
+ );
15723
+ };
15724
+
15529
15725
  var getSerializers$1 = function getSerializers(client) {
15530
15726
  return {
15531
15727
  types: {
@@ -15535,32 +15731,37 @@ var getSerializers$1 = function getSerializers(client) {
15535
15731
 
15536
15732
  return React__default.createElement(YouTubePlayer$1, { url: url });
15537
15733
  },
15538
- figure: function figure(_ref2) {
15734
+ youtubeGallery: function youtubeGallery(_ref2) {
15539
15735
  var node = _ref2.node;
15540
15736
 
15541
- return React__default.createElement(FigureComponent, { node: node, client: client });
15737
+ return React__default.createElement(YouTubeGallery, { nodes: node });
15542
15738
  },
15543
- slideshow: function slideshow(_ref3) {
15739
+ figure: function figure(_ref3) {
15544
15740
  var node = _ref3.node;
15741
+
15742
+ return React__default.createElement(FigureComponent, { node: node, client: client });
15743
+ },
15744
+ slideshow: function slideshow(_ref4) {
15745
+ var node = _ref4.node;
15545
15746
  var slides = node.slides;
15546
15747
 
15547
15748
  return React__default.createElement(Slideshow, { slides: slides, client: client });
15548
15749
  },
15549
- sidebar: function sidebar(_ref4) {
15550
- var node = _ref4.node;
15750
+ sidebar: function sidebar(_ref5) {
15751
+ var node = _ref5.node;
15551
15752
  var caption = node.caption,
15552
15753
  content = node.content;
15553
15754
 
15554
15755
  return React__default.createElement(Sidebar, { caption: caption, content: content });
15555
15756
  },
15556
- datatable: function datatable(_ref5) {
15557
- var node = _ref5.node;
15757
+ datatable: function datatable(_ref6) {
15758
+ var node = _ref6.node;
15558
15759
  var table = node.table;
15559
15760
 
15560
15761
  return React__default.createElement(TableShow, { rows: table.rows });
15561
15762
  },
15562
- media: function media(_ref6) {
15563
- var node = _ref6.node;
15763
+ media: function media(_ref7) {
15764
+ var node = _ref7.node;
15564
15765
  var upload_doc = node.upload_doc,
15565
15766
  poster = node.poster,
15566
15767
  caption = node.caption,
@@ -15568,8 +15769,8 @@ var getSerializers$1 = function getSerializers(client) {
15568
15769
 
15569
15770
  return React__default.createElement(Media$1, { uploadDoc: upload_doc, poster: poster, blank: blank, client: client, caption: caption });
15570
15771
  },
15571
- iframe: function iframe(_ref7) {
15572
- var node = _ref7.node;
15772
+ iframe: function iframe(_ref8) {
15773
+ var node = _ref8.node;
15573
15774
 
15574
15775
  return React__default.createElement(IFrame, { url: node.url });
15575
15776
  }