Browse code

Allow background videos

Benjamin Roth authored on06/06/2019 19:27:31
Showing10 changed files
... ...
@@ -12,7 +12,25 @@
12 12
     left: 0;
13 13
     right: 0;
14 14
     top: 0;
15
-    bottom: 0; }
15
+    bottom: 0;
16
+    overflow: hidden; }
17
+    .slick-slider-container .slick-slider-background video,
18
+    .slick-slider-container .slick-slider-slide-image video,
19
+    .slick-slider-slide .slick-slider-background video,
20
+    .slick-slider-slide .slick-slider-slide-image video {
21
+      position: absolute;
22
+      left: -10000%;
23
+      right: -10000%;
24
+      top: -10000%;
25
+      bottom: -10000%;
26
+      margin: auto auto;
27
+      min-width: 1000%;
28
+      min-height: 1000%;
29
+      -webkit-transform: scale(0.1);
30
+      transform: scale(0.1);
31
+      width: auto;
32
+      height: auto;
33
+      max-width: none; }
16 34
   .slick-slider-container .slide-content,
17 35
   .slick-slider-slide .slide-content {
18 36
     position: relative; }
... ...
@@ -1,6 +1,6 @@
1 1
 {
2 2
 "version": 3,
3
-"mappings": "AAAA,uBAAwB;EACtB,QAAQ,EAAE,MAAM;;AAElB;mBACoB;EAClB,QAAQ,EAAE,QAAQ;EAElB;;;+CAC0B;IACxB,QAAQ,EAAE,QAAQ;IAClB,IAAI,EAAE,CAAC;IACP,KAAK,EAAE,CAAC;IACR,GAAG,EAAE,CAAC;IACN,MAAM,EAAE,CAAC;EAGX;oCAAe;IACb,QAAQ,EAAE,QAAQ;EAGpB;gCAAW;IACT,QAAQ,EAAE,QAAQ;IAClB,IAAI,EAAE,CAAC;IACP,GAAG,EAAE,CAAC;IACN,KAAK,EAAE,CAAC;IACR,MAAM,EAAE,CAAC",
3
+"mappings": "AAAA,uBAAwB;EACtB,QAAQ,EAAE,MAAM;;AAElB;mBACoB;EAClB,QAAQ,EAAE,QAAQ;EAElB;;;+CAC0B;IACxB,QAAQ,EAAE,QAAQ;IAClB,IAAI,EAAE,CAAC;IACP,KAAK,EAAE,CAAC;IACR,GAAG,EAAE,CAAC;IACN,MAAM,EAAE,CAAC;IACT,QAAQ,EAAE,MAAM;IAEhB;;;uDAAM;MACJ,QAAQ,EAAE,QAAQ;MAClB,IAAI,EAAC,OAAO;MAAE,KAAK,EAAE,OAAO;MAC5B,GAAG,EAAE,OAAO;MAAE,MAAM,EAAE,OAAO;MAC7B,MAAM,EAAE,SAAS;MACjB,SAAS,EAAE,KAAK;MAChB,UAAU,EAAE,KAAK;MACjB,iBAAiB,EAAC,UAAU;MAC5B,SAAS,EAAE,UAAU;MACrB,KAAK,EAAE,IAAI;MACX,MAAM,EAAE,IAAI;MACZ,SAAS,EAAE,IAAI;EAInB;oCAAe;IACb,QAAQ,EAAE,QAAQ;EAGpB;gCAAW;IACT,QAAQ,EAAE,QAAQ;IAClB,IAAI,EAAE,CAAC;IACP,GAAG,EAAE,CAAC;IACN,KAAK,EAAE,CAAC;IACR,MAAM,EAAE,CAAC",
4 4
 "sources": ["slick-addons.scss"],
5 5
 "names": [],
6 6
 "file": "slick-addons.css"
... ...
@@ -12,6 +12,21 @@
12 12
     right: 0;
13 13
     top: 0;
14 14
     bottom: 0;
15
+    overflow: hidden;
16
+
17
+    video {
18
+      position: absolute;
19
+      left:-10000%; right: -10000%;
20
+      top: -10000%; bottom: -10000%;
21
+      margin: auto auto;
22
+      min-width: 1000%;
23
+      min-height: 1000%;
24
+      -webkit-transform:scale(0.1);
25
+      transform: scale(0.1);
26
+      width: auto;
27
+      height: auto;
28
+      max-width: none;
29
+    }
15 30
   }
16 31
 
17 32
   .slide-content {
... ...
@@ -28,10 +28,10 @@ $GLOBALS['TL_DCA']['tl_content']['palettes']['slickSliderStart'] = '{type_legend
28 28
 $GLOBALS['TL_DCA']['tl_content']['palettes']['slickSliderStop'] = '{type_legend},type;{template_legend:hide},customTpl;{protected_legend:hide},protected;{expert_legend:hide},guests;{invisible_legend:hide},invisible,start,stop';
29 29
 $GLOBALS['TL_DCA']['tl_content']['palettes']['slickSliderSlideStart'] = '{type_legend},type;{slickSlider_legend},eSM_addImage;{template_legend:hide},customTpl;{protected_legend:hide},protected;{expert_legend:hide},guests,cssID,space;{invisible_legend:hide},invisible,start,stop';
30 30
 $GLOBALS['TL_DCA']['tl_content']['palettes']['slickSliderSlideStop'] = '{type_legend},type;{template_legend:hide},customTpl;{protected_legend:hide},protected;{expert_legend:hide},guests;{invisible_legend:hide},invisible,start,stop';
31
-$GLOBALS['TL_DCA']['tl_content']['palettes']['slickSliderImage'] = '{type_legend},type;{slickSlider_legend},singleSRC,size,eSM_slick_bgSize,eSM_slick_bgPosition,eSM_slick_minHeight,eSM_slick_bgOpacity,eSM_slick_bgRepeat,eSM_addText;{template_legend:hide},customTpl;{protected_legend:hide},protected;{expert_legend:hide},guests,cssID,space;{invisible_legend:hide},invisible,start,stop';
31
+$GLOBALS['TL_DCA']['tl_content']['palettes']['slickSliderImage'] = '{type_legend},type;{slickSlider_legend},multiSRC,size,eSM_slick_bgSize,eSM_slick_bgPosition,eSM_slick_minHeight,eSM_slick_bgOpacity,eSM_slick_bgRepeat,eSM_addText;{template_legend:hide},customTpl;{protected_legend:hide},protected;{expert_legend:hide},guests,cssID,space;{invisible_legend:hide},invisible,start,stop';
32 32
 
33 33
 
34
-$GLOBALS['TL_DCA']['tl_content']['subpalettes']['eSM_addImage'] = 'singleSRC,size,eSM_slick_bgSize,eSM_slick_bgPosition,eSM_slick_minHeight,eSM_slick_bgOpacity,eSM_slick_bgRepeat';
34
+$GLOBALS['TL_DCA']['tl_content']['subpalettes']['eSM_addImage'] = 'multiSRC,size,eSM_slick_bgSize,eSM_slick_bgPosition,eSM_slick_minHeight,eSM_slick_bgOpacity,eSM_slick_bgRepeat';
35 35
 $GLOBALS['TL_DCA']['tl_content']['subpalettes']['eSM_addText'] = 'eSM_slick_text,eSM_slick_url';
36 36
 
37 37
 /**
... ...
@@ -63,14 +63,33 @@ class ContentSlickSliderImage extends \ContentElement
63 63
       $this->Template = $objTemplate;
64 64
     }
65 65
 
66
-    if ($this->singleSRC)
66
+    if ($this->multiSRC)
67 67
     {
68 68
 
69
-      $objFile = \FilesModel::findByUuid($this->singleSRC);
69
+      $source = \StringUtil::deserialize($this->multiSRC);
70
+      $objFiles = \FilesModel::findMultipleByUuids($source);
70 71
 
71
-      if ($objFile !== null && is_file(TL_ROOT . '/' . $objFile->path))
72
+      if ($objFiles !== null) {
73
+        $imageFiles = array();
74
+        $videoFiles = array();
75
+
76
+        foreach ($objFiles as $file) {
77
+          if (is_file(TL_ROOT . '/' . $file->path))
78
+          {
79
+            if (in_array($file->extension, array_map('trim', explode(',', \Config::get('validImageTypes')))))
80
+            {
81
+              $imageFiles[] = $file;
82
+            } else if (in_array($file->extension, array_map('trim', array('mp4', 'm4v', 'mov', 'wmv', 'webm', 'ogv', 'm4a', 'mp3', 'wma', 'mpeg', 'wav', 'ogg'))))
83
+            {
84
+              $videoFiles[] = $file;
85
+            }
86
+          }
87
+        }
88
+      }
89
+
90
+      if (isset($imageFiles[0]))
72 91
       {
73
-        $this->singleSRC = $objFile->path;
92
+        $this->singleSRC = $imageFiles[0]->path;
74 93
 
75 94
         $this->addImageToTemplate($this->Template, array('singleSRC'=>$this->singleSRC, 'size'=>$this->size));
76 95
 
... ...
@@ -86,6 +105,7 @@ class ContentSlickSliderImage extends \ContentElement
86 105
           $backgroundStyle .= '.slide_'.$this->id.':before { content: ""; display: block; float: left; padding-top: '.$minHeight.'; }';
87 106
         }
88 107
 
108
+
89 109
         $backgroundStyle .= '.slide_'.$this->id.' .slick-slider-slide-image { background-image: url(\''.$this->Template->src.'\');';
90 110
 
91 111
         if ($this->eSM_slick_bgSize) {
... ...
@@ -131,6 +151,10 @@ class ContentSlickSliderImage extends \ContentElement
131 151
         }
132 152
 
133 153
       }
154
+
155
+      if (count($videoFiles)) {
156
+        $this->Template->videoFiles = $videoFiles;
157
+      }
134 158
     }
135 159
 
136 160
     if ($this->eSM_addText)
... ...
@@ -39,14 +39,33 @@ class ContentSlickSliderSlideStart extends \ContentElement
39 39
 			$this->Template = $objTemplate;
40 40
 		}
41 41
 
42
-    if ($this->singleSRC)
42
+    if ($this->eSM_addImage && $this->multiSRC)
43 43
     {
44 44
 
45
-      $objFile = \FilesModel::findByUuid($this->singleSRC);
45
+      $source = \StringUtil::deserialize($this->multiSRC);
46
+      $objFiles = \FilesModel::findMultipleByUuids($source);
46 47
 
47
-      if ($objFile !== null && is_file(TL_ROOT . '/' . $objFile->path))
48
+      if ($objFiles !== null) {
49
+        $imageFiles = array();
50
+        $videoFiles = array();
51
+
52
+        foreach ($objFiles as $file) {
53
+          if (is_file(TL_ROOT . '/' . $file->path))
54
+          {
55
+            if (in_array($file->extension, array_map('trim', explode(',', \Config::get('validImageTypes')))))
56
+            {
57
+              $imageFiles[] = $file;
58
+            } else if (in_array($file->extension, array_map('trim', array('mp4', 'm4v', 'mov', 'wmv', 'webm', 'ogv', 'm4a', 'mp3', 'wma', 'mpeg', 'wav', 'ogg'))))
59
+            {
60
+              $videoFiles[] = $file;
61
+            }
62
+          }
63
+        }
64
+      }
65
+
66
+      if (isset($imageFiles[0]))
48 67
       {
49
-        $this->singleSRC = $objFile->path;
68
+        $this->singleSRC = $imageFiles[0]->path;
50 69
 
51 70
         $this->addImageToTemplate($this->Template, array('singleSRC'=>$this->singleSRC, 'size'=>$this->size));
52 71
 
... ...
@@ -108,6 +127,10 @@ class ContentSlickSliderSlideStart extends \ContentElement
108 127
         }
109 128
 
110 129
       }
130
+
131
+      if (count($videoFiles)) {
132
+        $this->Template->videoFiles = $videoFiles;
133
+      }
111 134
     }
112 135
 
113 136
   }
... ...
@@ -44,47 +44,77 @@ class ContentSlickSliderStart extends \ContentElement
44 44
 		$this->Template->config = $this->eSM_slick_autoPlaySpeed . ',' . $this->eSM_slick_speed . ',' . $this->eSM_slick_initialSlide . ',' . $this->eSM_slick_lazyLoad . ',' . $this->eSM_slick_infinite . ',' . $this->eSM_slick_arrows . ',' . $this->eSM_slick_pagination . ',' . $this->eSM_slick_pause . ',' . $this->eSM_slick_fade . ',' . $this->eSM_slick_slidesToShow . ',' . $this->eSM_slick_slidesToScroll . ',' . $this->eSM_slick_adaptiveHeight;
45 45
 
46 46
 		// Background image
47
-    if ($this->singleSRC)
47
+    if ($this->eSM_addImage && $this->multiSRC)
48 48
     {
49
+      $source = \StringUtil::deserialize($this->multiSRC);
50
+      $objFiles = \FilesModel::findMultipleByUuids($source);
49 51
 
50
-      $objFile = \FilesModel::findByUuid($this->singleSRC);
52
+      if ($objFiles !== null) {
53
+        $imageFiles = array();
54
+        $videoFiles = array();
51 55
 
52
-      if ($objFile !== null && is_file(TL_ROOT . '/' . $objFile->path))
56
+        foreach ($objFiles as $file) {
57
+          if (is_file(TL_ROOT . '/' . $file->path))
58
+          {
59
+            if (in_array($file->extension, array_map('trim', explode(',', \Config::get('validImageTypes')))))
60
+            {
61
+              $imageFiles[] = $file;
62
+            } else if (in_array($file->extension, array_map('trim', array('mp4', 'm4v', 'mov', 'wmv', 'webm', 'ogv', 'm4a', 'mp3', 'wma', 'mpeg', 'wav', 'ogg'))))
63
+            {
64
+              $videoFiles[] = $file;
65
+            }
66
+          }
67
+        }
68
+      }
69
+
70
+      if (isset($imageFiles[0]))
53 71
       {
54
-        $this->singleSRC = $objFile->path;
72
+        $this->singleSRC = $imageFiles[0]->path;
55 73
 
56
-        $this->addImageToTemplate($this->Template, array('singleSRC'=>$this->singleSRC, 'size'=>$this->size));
74
+        $this->addImageToTemplate($this->Template, array('singleSRC' => $this->singleSRC, 'size' => $this->size));
57 75
 
58
-        if ($this->eSM_slick_minHeight) {
59
-          if ($this->eSM_slick_bgSize && $this->eSM_slick_bgSize == 'auto auto') {
76
+        if ($this->eSM_slick_minHeight)
77
+        {
78
+          if ($this->eSM_slick_bgSize && $this->eSM_slick_bgSize == 'auto auto')
79
+          {
60 80
             $this->Template->minHeight = $this->Template->picture['img']['height'] . 'px';
61 81
           } else
62 82
           {
63 83
             $this->Template->minHeight = round($this->Template->picture['img']['height'] / $this->Template->picture['img']['width'] * 100) . '%';
64 84
           }
65 85
         }
66
-      }
67 86
 
68
-      $backgroundStyle = 'background-image: url(\''.$this->Template->src.'\');';
87
+        $backgroundStyle = 'background-image: url(\'' . $this->Template->src . '\');';
69 88
 
70
-      if ($this->eSM_slick_bgSize) {
71
-        $backgroundStyle .= 'background-size: ' . $this->eSM_slick_bgSize . ';';
72
-      } else {
73
-        $backgroundStyle .= 'background-size: cover;';
74
-      }
75
-      if ($this->eSM_slick_bgPosition) {
76
-        $backgroundStyle .= 'background-position: ' . $this->eSM_slick_bgPosition . ';';
77
-      } else {
78
-        $backgroundStyle .= 'background-position: 0 0;';
79
-      }
80
-      if ($this->eSM_slick_bgOpacity) {
81
-        $backgroundStyle .= 'opacity:' . $this->eSM_slick_bgOpacity/100 . ';';
82
-      }
83
-      if ($this->eSM_slick_bgRepeat) {
84
-        $backgroundStyle .= 'background-repeat: ' . $this->eSM_slick_bgRepeat . ';';
89
+        if ($this->eSM_slick_bgSize)
90
+        {
91
+          $backgroundStyle .= 'background-size: ' . $this->eSM_slick_bgSize . ';';
92
+        } else
93
+        {
94
+          $backgroundStyle .= 'background-size: cover;';
95
+        }
96
+        if ($this->eSM_slick_bgPosition)
97
+        {
98
+          $backgroundStyle .= 'background-position: ' . $this->eSM_slick_bgPosition . ';';
99
+        } else
100
+        {
101
+          $backgroundStyle .= 'background-position: 0 0;';
102
+        }
103
+        if ($this->eSM_slick_bgOpacity)
104
+        {
105
+          $backgroundStyle .= 'opacity:' . $this->eSM_slick_bgOpacity / 100 . ';';
106
+        }
107
+        if ($this->eSM_slick_bgRepeat)
108
+        {
109
+          $backgroundStyle .= 'background-repeat: ' . $this->eSM_slick_bgRepeat . ';';
110
+        }
111
+
112
+        $this->Template->backgroundStyle = $backgroundStyle;
85 113
       }
86 114
 
87
-      $this->Template->backgroundStyle = $backgroundStyle;
115
+      if (count($videoFiles)) {
116
+        $this->Template->videoFiles = $videoFiles;
117
+      }
88 118
     }
89 119
 	}
90 120
 }
... ...
@@ -2,8 +2,16 @@
2 2
 <?php $this->block('content'); ?>
3 3
 
4 4
 <div class="slick-slider-slide slide_<?= $this->id ?>">
5
-  <?php if ($this->src): ?>
6
-    <div class="slick-slider-slide-image"></div>
5
+  <?php if ($this->src || count($this->videoFiles)): ?>
6
+    <div class="slick-slider-slide-image">
7
+      <?php if ($this->videoFiles): ?>
8
+        <video class="no-mejs" autoplay loop muted>
9
+          <?php foreach ($this->videoFiles as $video): ?>
10
+            <source src="<?php echo TL_FILES_URL . $video->path ?>" type="video/<?php echo $video->extension ?>">
11
+          <?php endforeach ?>
12
+        </video>
13
+      <?php endif; ?>
14
+    </div>
7 15
 
8 16
     <style>
9 17
       <?= $this->backgroundStyle ?>
... ...
@@ -7,10 +7,18 @@
7 7
   <?php endif; ?>
8 8
 
9 9
   <div class="slick-slider-container slide-container_<?= $this->id ?>">
10
-    <?php if ($this->eSM_addImage && $this->src): ?>
11
-    <div class="slick-slider-background" style="<?= $this->backgroundStyle ?>"></div>
12
-      <?php if ($this->minHeight): ?>
13
-      <style>.slide-container_<?= $this->id ?>:before { content: ""; display: block; padding-top: <?= $this->minHeight ?>; float: left; }</style>
10
+    <?php if ($this->eSM_addImage && ($this->src || count($this->videoFiles))): ?>
11
+      <div class="slick-slider-background"<?php if ($this->src): ?>style="<?= $this->backgroundStyle ?>"<?php endif; ?>>
12
+        <?php if ($this->videoFiles): ?>
13
+          <video class="no-mejs" autoplay loop muted>
14
+            <?php foreach ($this->videoFiles as $video): ?>
15
+              <source src="<?php echo TL_FILES_URL . $video->path ?>" type="video/<?php echo $video->extension ?>">
16
+            <?php endforeach ?>
17
+          </video>
18
+        <?php endif; ?>
19
+      </div>
20
+      <?php if ($this->src && $this->minHeight): ?>
21
+        <style>.slide-container_<?= $this->id ?>:before { content: ""; display: block; padding-top: <?= $this->minHeight ?>; float: left; }</style>
14 22
       <?php endif; ?>
15 23
     <?php endif; ?>
16 24
 
... ...
@@ -1,8 +1,16 @@
1 1
 <?php $this->block('content'); ?>
2 2
 
3 3
 <div class="slick-slider-slide slide_<?= $this->id ?>">
4
-  <?php if ($this->eSM_addImage && $this->src): ?>
5
-    <div class="slick-slider-slide-image"></div>
4
+  <?php if ($this->eSM_addImage && ($this->src || count($this->videoFiles))): ?>
5
+    <div class="slick-slider-background">
6
+      <?php if ($this->videoFiles): ?>
7
+        <video class="no-mejs" autoplay loop muted>
8
+          <?php foreach ($this->videoFiles as $video): ?>
9
+            <source src="<?php echo TL_FILES_URL . $video->path ?>" type="video/<?php echo $video->extension ?>">
10
+          <?php endforeach ?>
11
+        </video>
12
+      <?php endif; ?>
13
+    </div>
6 14
 
7 15
     <style>
8 16
       <?= $this->backgroundStyle ?>