@mjhls/mjh-framework 1.0.72 → 1.0.73

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
  };
@@ -15526,6 +15578,148 @@ var IFrame = function IFrame(_ref) {
15526
15578
  );
15527
15579
  };
15528
15580
 
15581
+ var YouTubeGallery = function YouTubeGallery(_ref) {
15582
+ var nodes = _ref.nodes;
15583
+
15584
+
15585
+ var router$$1 = router.useRouter();
15586
+ var params = void 0;
15587
+ var seriesVid = void 0;
15588
+
15589
+ var _useState = React.useState(''),
15590
+ _useState2 = slicedToArray(_useState, 2),
15591
+ vidUrl = _useState2[0],
15592
+ setVidUrl = _useState2[1];
15593
+
15594
+ // Once component mounts, set the variables
15595
+
15596
+
15597
+ React.useEffect(function () {
15598
+ console.log('loaded');
15599
+ params = new URL(document.location).searchParams;
15600
+ seriesVid = params.get('seriesVid') || 1;
15601
+ setVidUrl(nodes.videos['' + (seriesVid - 1)].url);
15602
+ }, []);
15603
+
15604
+ // Series data for the image slider
15605
+ var seriesData = [];
15606
+ nodes.videos.forEach(function (vid) {
15607
+ seriesData.push({ title: vid.title, thumbnail: 'http://img.youtube.com/vi/' + getYoutubeId(vid.url) + '/hqdefault.jpg', url: vid.url });
15608
+ });
15609
+
15610
+ // If series vid doesnt exist, go back to first video
15611
+ if (seriesData.length < seriesVid) {
15612
+ seriesVid = 1;
15613
+ var newPath = '/' + get2 + '/' + router$$1.query.url + ('?seriesVid=' + seriesVid);
15614
+ var vidState = { vid_id: seriesVid };
15615
+ window.history.pushState(vidState, '', newPath);
15616
+ }
15617
+ //
15618
+ function toggleSeries() {
15619
+ var series = document.querySelector('.vid-series');
15620
+ if (series.classList.contains('active')) {
15621
+ series.style.bottom = '-100%';
15622
+ } else {
15623
+ series.style.bottom = '6px';
15624
+ }
15625
+ series.classList.toggle('active');
15626
+ }
15627
+ // This function is passed to the GroupDeck to change the youtube iframe src
15628
+ function setState(url, vidIndex) {
15629
+ var get2 = router$$1.asPath.split('/')[1];
15630
+ setVidUrl(url);
15631
+ toggleSeries();
15632
+ lib_3.refresh();
15633
+ var newPath = '/' + get2 + '/' + router$$1.query.url + ('?seriesVid=' + vidIndex);
15634
+ var vidState = { vid_id: vidIndex };
15635
+ window.history.pushState(vidState, '', newPath);
15636
+ }
15637
+
15638
+ // Handle video end
15639
+ function handleOnEnd(e) {
15640
+ var currentVid = void 0;
15641
+ var nextVid = void 0;
15642
+ //Find index of video currently playing
15643
+ seriesData.forEach(function (vid, index$$1) {
15644
+ if (vid.url === vidUrl) {
15645
+ currentVid = index$$1;
15646
+ }
15647
+ });
15648
+ //increment +1, or if at the end of the series list, go back to the beginning
15649
+ if (currentVid + 1 >= seriesData.length) {
15650
+ nextVid = 0;
15651
+ } else {
15652
+ nextVid = currentVid + 1;
15653
+ }
15654
+ var get2 = router$$1.asPath.split('/')[1];
15655
+ // set the new Video URL
15656
+ setState(nodes.videos['' + nextVid].url);
15657
+ var newPath = '/' + get2 + '/' + router$$1.query.url + ('?seriesVid=' + (nextVid + 1));
15658
+ var vidState = { vid_id: nextVid + 1 };
15659
+ var title = '';
15660
+ window.history.pushState(vidState, title, newPath);
15661
+
15662
+ //Small pause before starting next video
15663
+ setTimeout(function () {
15664
+ //Youtube API to start video playing automatically
15665
+ var id = getYoutubeId(nodes.videos['' + nextVid].url);
15666
+ e.target.loadVideoById(id);
15667
+ toggleSeries();
15668
+ lib_3.refresh();
15669
+ }, 1000);
15670
+ }
15671
+ // Youtube Options
15672
+ var opts = {
15673
+ width: '100%',
15674
+ playerVars: {
15675
+ rel: 0
15676
+ }
15677
+ };
15678
+
15679
+ return React__default.createElement(
15680
+ 'div',
15681
+ { className: 'video-container', style: { position: 'sticky', top: '60px', marginBottom: '20vh' } },
15682
+ React__default.createElement(
15683
+ 'div',
15684
+ { className: 'video-block', style: { position: 'relative', overflow: 'hidden' } },
15685
+ vidUrl && React__default.createElement(YouTube, { videoId: getYoutubeId(vidUrl), opts: opts, onEnd: function onEnd(e) {
15686
+ return handleOnEnd(e);
15687
+ } }),
15688
+ React__default.createElement(
15689
+ 'div',
15690
+ {
15691
+ className: 'vid-series',
15692
+ style: {
15693
+ position: 'absolute',
15694
+ width: '100%',
15695
+ height: '250px',
15696
+ background: 'linear-gradient(to bottom, transparent,black)',
15697
+ bottom: '-100%',
15698
+ transition: 'all .5s ease',
15699
+ padding: '0 1rem',
15700
+ left: '0'
15701
+ } },
15702
+ vidUrl && React__default.createElement(GroupDeck, { dark: true, dataset: seriesData, setState: setState, seriesVid: seriesVid, current: vidUrl })
15703
+ )
15704
+ ),
15705
+ React__default.createElement(
15706
+ 'div',
15707
+ { className: 'vid-controls', style: { width: '100%', background: 'transparent', display: 'flex', justifyContent: 'center' } },
15708
+ React__default.createElement('button', {
15709
+ 'aria-label': 'Toggles video series',
15710
+ id: 'vid-series-btn',
15711
+ onClick: toggleSeries,
15712
+ className: 'btn btn-block btn-lg btn-secondary ',
15713
+ style: { borderRadius: '0' } })
15714
+ ),
15715
+ React__default.createElement(
15716
+ 'style',
15717
+ { jsx: true },
15718
+ '\n .vid-series .video-detail iframe {\n height: 415px !important;\n }\n span.btn {\n margin: 0 1rem;\n }\n '
15719
+ )
15720
+ );
15721
+ };
15722
+
15529
15723
  var getSerializers$1 = function getSerializers(client) {
15530
15724
  return {
15531
15725
  types: {
@@ -15535,32 +15729,37 @@ var getSerializers$1 = function getSerializers(client) {
15535
15729
 
15536
15730
  return React__default.createElement(YouTubePlayer$1, { url: url });
15537
15731
  },
15538
- figure: function figure(_ref2) {
15732
+ youtubeGallery: function youtubeGallery(_ref2) {
15539
15733
  var node = _ref2.node;
15540
15734
 
15541
- return React__default.createElement(FigureComponent, { node: node, client: client });
15735
+ return React__default.createElement(YouTubeGallery, { nodes: node });
15542
15736
  },
15543
- slideshow: function slideshow(_ref3) {
15737
+ figure: function figure(_ref3) {
15544
15738
  var node = _ref3.node;
15739
+
15740
+ return React__default.createElement(FigureComponent, { node: node, client: client });
15741
+ },
15742
+ slideshow: function slideshow(_ref4) {
15743
+ var node = _ref4.node;
15545
15744
  var slides = node.slides;
15546
15745
 
15547
15746
  return React__default.createElement(Slideshow, { slides: slides, client: client });
15548
15747
  },
15549
- sidebar: function sidebar(_ref4) {
15550
- var node = _ref4.node;
15748
+ sidebar: function sidebar(_ref5) {
15749
+ var node = _ref5.node;
15551
15750
  var caption = node.caption,
15552
15751
  content = node.content;
15553
15752
 
15554
15753
  return React__default.createElement(Sidebar, { caption: caption, content: content });
15555
15754
  },
15556
- datatable: function datatable(_ref5) {
15557
- var node = _ref5.node;
15755
+ datatable: function datatable(_ref6) {
15756
+ var node = _ref6.node;
15558
15757
  var table = node.table;
15559
15758
 
15560
15759
  return React__default.createElement(TableShow, { rows: table.rows });
15561
15760
  },
15562
- media: function media(_ref6) {
15563
- var node = _ref6.node;
15761
+ media: function media(_ref7) {
15762
+ var node = _ref7.node;
15564
15763
  var upload_doc = node.upload_doc,
15565
15764
  poster = node.poster,
15566
15765
  caption = node.caption,
@@ -15568,8 +15767,8 @@ var getSerializers$1 = function getSerializers(client) {
15568
15767
 
15569
15768
  return React__default.createElement(Media$1, { uploadDoc: upload_doc, poster: poster, blank: blank, client: client, caption: caption });
15570
15769
  },
15571
- iframe: function iframe(_ref7) {
15572
- var node = _ref7.node;
15770
+ iframe: function iframe(_ref8) {
15771
+ var node = _ref8.node;
15573
15772
 
15574
15773
  return React__default.createElement(IFrame, { url: node.url });
15575
15774
  }