| 1 | 1 |
new file mode 100644 |
| ... | ... |
@@ -0,0 +1,24 @@ |
| 1 |
+# EditorConfig is awesome: http://EditorConfig.org |
|
| 2 |
+ |
|
| 3 |
+# top-most EditorConfig file |
|
| 4 |
+root = true |
|
| 5 |
+ |
|
| 6 |
+# Unix-style newlines with a newline ending every file |
|
| 7 |
+[*] |
|
| 8 |
+end_of_line = lf |
|
| 9 |
+insert_final_newline = true |
|
| 10 |
+trim_trailing_whitespace = true |
|
| 11 |
+ |
|
| 12 |
+[*.{php,twig,yml}]
|
|
| 13 |
+indent_style = space |
|
| 14 |
+indent_size = 4 |
|
| 15 |
+ |
|
| 16 |
+[*.{svg,min.css,min.js}]
|
|
| 17 |
+insert_final_newline = false |
|
| 18 |
+ |
|
| 19 |
+[*/src/Resources/contao/**.{css,js,php}]
|
|
| 20 |
+indent_style = tab |
|
| 21 |
+ |
|
| 22 |
+[*/src/Resources/contao/**.html5] |
|
| 23 |
+indent_style = space |
|
| 24 |
+indent_size = 2 |
|
| 0 | 25 |
\ No newline at end of file |
| ... | ... |
@@ -179,8 +179,9 @@ |
| 179 | 179 |
/** |
| 180 | 180 |
* Object Fit |
| 181 | 181 |
*/ |
| 182 |
-@mixin object-fit($mode: cover) {
|
|
| 182 |
+@mixin object-fit($mode: cover, $position: 50% 50%) {
|
|
| 183 | 183 |
object-fit: $mode; |
| 184 |
+ object-position: $position; |
|
| 184 | 185 |
font-family: 'object-fit: #{$mode};';
|
| 185 | 186 |
display: block; |
| 186 | 187 |
width: 100%; |
| ... | ... |
@@ -1556,4 +1556,183 @@ $shadow-color: #fff; |
| 1556 | 1556 |
} |
| 1557 | 1557 |
} |
| 1558 | 1558 |
} |
| 1559 |
+} |
|
| 1560 |
+ |
|
| 1561 |
+/** |
|
| 1562 |
+ * PHOTO / TEXT COMBI |
|
| 1563 |
+ */ |
|
| 1564 |
+.photo-text-wrapper {
|
|
| 1565 |
+ position: relative; |
|
| 1566 |
+ |
|
| 1567 |
+ .photo-text-wrapper-background {
|
|
| 1568 |
+ @extend .background-wrapper-background; |
|
| 1569 |
+ } |
|
| 1570 |
+ |
|
| 1571 |
+ &.-valign-center {
|
|
| 1572 |
+ min-height: 100vh; |
|
| 1573 |
+ display: flex; |
|
| 1574 |
+ flex-direction: column; |
|
| 1575 |
+ justify-content: center; |
|
| 1576 |
+ > .text-wall {
|
|
| 1577 |
+ flex: 0 0 auto; |
|
| 1578 |
+ width: 100%; |
|
| 1579 |
+ } |
|
| 1580 |
+ |
|
| 1581 |
+ &.-valignTop {
|
|
| 1582 |
+ justify-content: flex-start; |
|
| 1583 |
+ } |
|
| 1584 |
+ &.-valignBottom {
|
|
| 1585 |
+ justify-content: flex-end; |
|
| 1586 |
+ } |
|
| 1587 |
+ } |
|
| 1588 |
+ |
|
| 1589 |
+ .photo-wall {
|
|
| 1590 |
+ position: absolute; |
|
| 1591 |
+ //margin-left: $gutter-default; |
|
| 1592 |
+ left: 50%-$gutter-default/2; |
|
| 1593 |
+ right: 0; |
|
| 1594 |
+ top: 0; |
|
| 1595 |
+ height: 100%; |
|
| 1596 |
+ |
|
| 1597 |
+ &-content {
|
|
| 1598 |
+ height: 100%; |
|
| 1599 |
+ overflow: hidden; |
|
| 1600 |
+ background: 50% 50% no-repeat; |
|
| 1601 |
+ background-size: cover; |
|
| 1602 |
+ } |
|
| 1603 |
+ } |
|
| 1604 |
+ .text-wall {
|
|
| 1605 |
+ @include centered-1200; |
|
| 1606 |
+ |
|
| 1607 |
+ &-content {
|
|
| 1608 |
+ max-width: 50%; |
|
| 1609 |
+ margin-right: auto; |
|
| 1610 |
+ -webkit-box-sizing: border-box; |
|
| 1611 |
+ -moz-box-sizing: border-box; |
|
| 1612 |
+ box-sizing: border-box; |
|
| 1613 |
+ padding-right: 75px; |
|
| 1614 |
+ |
|
| 1615 |
+ .-bg-dark& {
|
|
| 1616 |
+ &, |
|
| 1617 |
+ h1,h2,h3,h4,h5,h6 {
|
|
| 1618 |
+ color: $color-text-invert; |
|
| 1619 |
+ } |
|
| 1620 |
+ } |
|
| 1621 |
+ |
|
| 1622 |
+ &.-padding {
|
|
| 1623 |
+ padding: $gutter-default*2 0; |
|
| 1624 |
+ } |
|
| 1625 |
+ &.-medium-padding {
|
|
| 1626 |
+ padding: 50px 0; |
|
| 1627 |
+ } |
|
| 1628 |
+ &.-large-padding {
|
|
| 1629 |
+ padding: 100px 0; |
|
| 1630 |
+ } |
|
| 1631 |
+ |
|
| 1632 |
+ &.-padding-top {
|
|
| 1633 |
+ padding: $gutter-default*2 0 0; |
|
| 1634 |
+ } |
|
| 1635 |
+ &.-medium-padding-top {
|
|
| 1636 |
+ padding: 50px 0 0; |
|
| 1637 |
+ } |
|
| 1638 |
+ &.-large-padding-top {
|
|
| 1639 |
+ padding: 100px 0 0; |
|
| 1640 |
+ } |
|
| 1641 |
+ |
|
| 1642 |
+ &.-padding-bottom {
|
|
| 1643 |
+ padding: 0 0 $gutter-default*2; |
|
| 1644 |
+ } |
|
| 1645 |
+ &.-medium-padding-bottom {
|
|
| 1646 |
+ padding: 0 0 50px; |
|
| 1647 |
+ } |
|
| 1648 |
+ &.-large-padding-bottom {
|
|
| 1649 |
+ padding: 0 0 100px; |
|
| 1650 |
+ } |
|
| 1651 |
+ } |
|
| 1652 |
+ } |
|
| 1653 |
+ |
|
| 1654 |
+ &.-alt-color {
|
|
| 1655 |
+ background-color: $color-bg-secondary; |
|
| 1656 |
+ |
|
| 1657 |
+ /*&, |
|
| 1658 |
+ h1,h2,h3,h4,h5,h6 {
|
|
| 1659 |
+ color: $color-headline-invert; |
|
| 1660 |
+ }*/ |
|
| 1661 |
+ } |
|
| 1662 |
+ |
|
| 1663 |
+ &.-bg-dark {
|
|
| 1664 |
+ background-color: #000; |
|
| 1665 |
+ } |
|
| 1666 |
+ |
|
| 1667 |
+ &.-text-right {
|
|
| 1668 |
+ .photo-wall {
|
|
| 1669 |
+ margin-left: 0; |
|
| 1670 |
+ margin-right: $gutter-default; |
|
| 1671 |
+ left: 0; |
|
| 1672 |
+ right: 50%-$gutter-default/2; |
|
| 1673 |
+ } |
|
| 1674 |
+ |
|
| 1675 |
+ .text-wall {
|
|
| 1676 |
+ &-content {
|
|
| 1677 |
+ margin-right: 0; |
|
| 1678 |
+ margin-left: auto; |
|
| 1679 |
+ padding-right: 0; |
|
| 1680 |
+ padding-left: 75px; |
|
| 1681 |
+ } |
|
| 1682 |
+ } |
|
| 1683 |
+ } |
|
| 1684 |
+ |
|
| 1685 |
+ @media screen and (max-width: 800px) {
|
|
| 1686 |
+ .photo-wall {
|
|
| 1687 |
+ margin-left: 60px; |
|
| 1688 |
+ } |
|
| 1689 |
+ |
|
| 1690 |
+ .text-wall {
|
|
| 1691 |
+ &-content {
|
|
| 1692 |
+ padding-right: 0; |
|
| 1693 |
+ } |
|
| 1694 |
+ } |
|
| 1695 |
+ |
|
| 1696 |
+ &.-text-right {
|
|
| 1697 |
+ .photo-wall {
|
|
| 1698 |
+ margin-right: 60px; |
|
| 1699 |
+ } |
|
| 1700 |
+ |
|
| 1701 |
+ .text-wall {
|
|
| 1702 |
+ &-content {
|
|
| 1703 |
+ padding-left: 0; |
|
| 1704 |
+ } |
|
| 1705 |
+ } |
|
| 1706 |
+ } |
|
| 1707 |
+ } |
|
| 1708 |
+ |
|
| 1709 |
+ @media screen and (max-width: 599px) {
|
|
| 1710 |
+ .photo-wall {
|
|
| 1711 |
+ position: relative; |
|
| 1712 |
+ right: auto; |
|
| 1713 |
+ left: auto; |
|
| 1714 |
+ top: auto; |
|
| 1715 |
+ margin: 0 0 15px; |
|
| 1716 |
+ padding: 15px 15px 0; |
|
| 1717 |
+ } |
|
| 1718 |
+ |
|
| 1719 |
+ .photo-wall-content {
|
|
| 1720 |
+ min-height: 66vw; |
|
| 1721 |
+ } |
|
| 1722 |
+ |
|
| 1723 |
+ .text-wall {
|
|
| 1724 |
+ &-content {
|
|
| 1725 |
+ padding-right: 0; |
|
| 1726 |
+ max-width: none; |
|
| 1727 |
+ } |
|
| 1728 |
+ } |
|
| 1729 |
+ |
|
| 1730 |
+ &.-text-right {
|
|
| 1731 |
+ .photo-wall {
|
|
| 1732 |
+ margin-right: 0; |
|
| 1733 |
+ right: 0; |
|
| 1734 |
+ } |
|
| 1735 |
+ } |
|
| 1736 |
+ } |
|
| 1737 |
+ |
|
| 1559 | 1738 |
} |
| 1560 | 1739 |
\ No newline at end of file |
| 1561 | 1740 |
new file mode 100644 |
| ... | ... |
@@ -0,0 +1,65 @@ |
| 1 |
+<?php |
|
| 2 |
+$cssClasses = array( |
|
| 3 |
+ 'feature-wrapper', |
|
| 4 |
+ 'feature-wrapper_'.$this->id, |
|
| 5 |
+ $this->class, |
|
| 6 |
+); |
|
| 7 |
+if ($this->contentPosition) {
|
|
| 8 |
+ $cssClasses[] = $this->contentPosition; |
|
| 9 |
+} |
|
| 10 |
+if ($this->valign) {
|
|
| 11 |
+ $cssClasses[] = $this->valign; |
|
| 12 |
+} |
|
| 13 |
+if ($this->valignCenter) {
|
|
| 14 |
+ $cssClasses[] = '-valign-center'; |
|
| 15 |
+} |
|
| 16 |
+ |
|
| 17 |
+$figure = ''; |
|
| 18 |
+$blnIsVideo = false; |
|
| 19 |
+if (($file = \FilesModel::findByUuid($this->backgroundImage)) !== null) |
|
| 20 |
+{
|
|
| 21 |
+ if (in_array( |
|
| 22 |
+ $file->extension, |
|
| 23 |
+ array_map('trim', explode(',', \Config::get('validImageTypes')))
|
|
| 24 |
+ )) |
|
| 25 |
+ {
|
|
| 26 |
+ $figure = $this->figure( |
|
| 27 |
+ $file->uuid, $this->backgroundImageSize, |
|
| 28 |
+ [ |
|
| 29 |
+ 'options' => [ |
|
| 30 |
+ 'attr' => [ |
|
| 31 |
+ 'class' => 'feature-image', |
|
| 32 |
+ 'style' => "object-fit: $this->backgroundSize;" . |
|
| 33 |
+ "object-position: $this->backgroundPosition;" . |
|
| 34 |
+ "font-family: 'object-fit: $this->backgroundSize';" |
|
| 35 |
+ ] |
|
| 36 |
+ ] |
|
| 37 |
+ ] |
|
| 38 |
+ ); |
|
| 39 |
+ } else {
|
|
| 40 |
+ $blnIsVideo = !$blnIsVideo; |
|
| 41 |
+ } |
|
| 42 |
+} |
|
| 43 |
+ |
|
| 44 |
+ |
|
| 45 |
+?> |
|
| 46 |
+ |
|
| 47 |
+<?php $this->block('content'); ?>
|
|
| 48 |
+<div class="<?php echo implode(' ', $cssClasses) ?> block"<?= $this->cssID ?><?php if ($this->style): ?> style="<?= $this->style ?>"<?php endif; ?>>
|
|
| 49 |
+ |
|
| 50 |
+ <div class="photo-wall"> |
|
| 51 |
+ <?php if ($blnIsVideo && $file !== null): ?> |
|
| 52 |
+ <div class="photo-wall-content"> |
|
| 53 |
+ <video class="no-mejs" autoplay loop> |
|
| 54 |
+ <source src="<?php echo TL_FILES_URL . $file->path ?>" type="video/<?php echo $file->extension ?>"> |
|
| 55 |
+ </video> |
|
| 56 |
+ </div> |
|
| 57 |
+ <?php elseif ($figure !== null): ?> |
|
| 58 |
+ <div class="photo-wall-content"> |
|
| 59 |
+ <?= $figure ?> |
|
| 60 |
+ </div> |
|
| 61 |
+ <?php endif ?> |
|
| 62 |
+ </div> |
|
| 63 |
+ |
|
| 64 |
+ <div class="text-wall"><div class="text-wall-content<?php if ($this->padding): ?> <?= $this->padding ?><?php endif; ?>"> |
|
| 65 |
+<?php $this->endblock(); ?> |
| 0 | 66 |
new file mode 100644 |
| ... | ... |
@@ -0,0 +1,170 @@ |
| 1 |
+<?php |
|
| 2 |
+// rsce_boxes_config.php |
|
| 3 |
+return array( |
|
| 4 |
+ 'label' => array('Zentrierter Featured-Block Anfang →', 'Erzeugt einen zentrierten Feature-Block (z.B. Weinlinie)'),
|
|
| 5 |
+ 'types' => array('content','module'),
|
|
| 6 |
+ 'standardFields' => array('cssID', 'space'),
|
|
| 7 |
+ 'wrapper' => array( |
|
| 8 |
+ 'type' => 'start', |
|
| 9 |
+ ), |
|
| 10 |
+ 'fields' => array( |
|
| 11 |
+ 'content_set' => array( |
|
| 12 |
+ 'label' => array('Inhaltsspalte'),
|
|
| 13 |
+ 'inputType' => 'group', |
|
| 14 |
+ ), |
|
| 15 |
+ 'contentPosition' => array( |
|
| 16 |
+ 'label' => array('Position', 'Legt fest ob der Inhalt links oder rechts vom Bild positioniert ist.'),
|
|
| 17 |
+ 'inputType' => 'select', |
|
| 18 |
+ 'options' => array( |
|
| 19 |
+ '' => 'Links', |
|
| 20 |
+ '-text-right' => 'Rechts', |
|
| 21 |
+ ), |
|
| 22 |
+ 'eval' => array('tl_class' => 'w50'),
|
|
| 23 |
+ ), |
|
| 24 |
+ 'image_set' => array( |
|
| 25 |
+ 'label' => array('Bildspalte'),
|
|
| 26 |
+ 'inputType' => 'group', |
|
| 27 |
+ ), |
|
| 28 |
+ 'backgroundImage' => array( |
|
| 29 |
+ 'label' => array('Bild oder Video', 'Wählen Sie ein Bild oder eine Videodatei aus.'),
|
|
| 30 |
+ 'inputType' => 'fileTree', |
|
| 31 |
+ 'eval' => array( |
|
| 32 |
+ 'tl_class' => 'clr', |
|
| 33 |
+ 'multiple' => false, |
|
| 34 |
+ 'fieldType' => 'radio', |
|
| 35 |
+ 'filesOnly' => true, |
|
| 36 |
+ 'extensions' => \Config::get('validImageTypes') . ',mp4,webm,ogv,ogg',
|
|
| 37 |
+ 'orderField'=>'orderSRC', |
|
| 38 |
+// 'isGallery' => true, |
|
| 39 |
+ ), |
|
| 40 |
+ ), |
|
| 41 |
+ 'backgroundImageSize' => array( |
|
| 42 |
+ 'label' => array('Bildbreite und Bildhöhe', ''),
|
|
| 43 |
+ 'inputType' => 'imageSize', |
|
| 44 |
+ 'options' => \System::getContainer()->get('contao.image.image_sizes')->getOptionsForUser(BackendUser::getInstance()),
|
|
| 45 |
+ 'reference' => &$GLOBALS['TL_LANG']['MSC'], |
|
| 46 |
+ 'eval' => array( |
|
| 47 |
+ 'rgxp' => 'digit', |
|
| 48 |
+ 'tl_class' => 'w50', |
|
| 49 |
+ 'includeBlankOption' => true, |
|
| 50 |
+ ), |
|
| 51 |
+ ), |
|
| 52 |
+ 'backgroundSize' => array( |
|
| 53 |
+ 'label' => array('Bildanpassung', ''),
|
|
| 54 |
+ 'inputType' => 'select', |
|
| 55 |
+ 'options' => array( |
|
| 56 |
+ 'cover' => 'Beschnitten', |
|
| 57 |
+ 'contain' => 'Proportional', |
|
| 58 |
+ '100% 100%' => 'Verzerrt', |
|
| 59 |
+ 'auto auto' => 'Originalgröße', |
|
| 60 |
+ ), |
|
| 61 |
+ 'eval' => array('tl_class' => 'w50'),
|
|
| 62 |
+ ), |
|
| 63 |
+ 'backgroundPosition' => array( |
|
| 64 |
+ 'label' => array('Position', 'Bildausrichtung'),
|
|
| 65 |
+ 'inputType' => 'select', |
|
| 66 |
+ 'options' => array( |
|
| 67 |
+ '' => '-', |
|
| 68 |
+ '0 0' => 'Links | Oben', |
|
| 69 |
+ '50% 0' => 'Mitte | Oben', |
|
| 70 |
+ '100% 0' => 'Rechts | Oben', |
|
| 71 |
+ '0 50%' => 'Links | Mitte', |
|
| 72 |
+ '50% 50%' => 'Mitte | Mitte', |
|
| 73 |
+ '100% 50%' => 'Rechts | Mitte', |
|
| 74 |
+ '0 100%' => 'Links | Unten', |
|
| 75 |
+ '50% 100%' => 'Mitte | Unten', |
|
| 76 |
+ '100% 100%' => 'Rechts | Unten', |
|
| 77 |
+ ), |
|
| 78 |
+ 'eval' => array('tl_class' => 'w50'),
|
|
| 79 |
+ ), |
|
| 80 |
+ 'featureLink' => array( |
|
| 81 |
+ 'label' => array('Featurelink unter Bild', 'Stellt einen prominenten Link unterhalb des Bildes dar.'),
|
|
| 82 |
+ 'inputType' => 'checkbox', |
|
| 83 |
+ 'eval' => array( |
|
| 84 |
+ 'tl_class' => 'w50 m12 clr', |
|
| 85 |
+ ), |
|
| 86 |
+ ), |
|
| 87 |
+ 'linkLabel' => array( |
|
| 88 |
+ 'label' => array('Link-Text', ''),
|
|
| 89 |
+ 'inputType' => 'text', |
|
| 90 |
+ 'eval' => array('tl_class' => 'w50'),
|
|
| 91 |
+ 'dependsOn' => array( |
|
| 92 |
+ 'field' => 'featureLink' |
|
| 93 |
+ ) |
|
| 94 |
+ ), |
|
| 95 |
+ 'linkUrl' => array( |
|
| 96 |
+ 'label' => array('Link-URL', 'Beispiele: {{link_url::seitenalias}} (Alias, ID oder anderer Inserttag), http://example.com'),
|
|
| 97 |
+ 'inputType' => 'url', |
|
| 98 |
+ 'eval' => array('tl_class' => 'w50'),
|
|
| 99 |
+ 'dependsOn' => array( |
|
| 100 |
+ 'field' => 'featureLink' |
|
| 101 |
+ ) |
|
| 102 |
+ ), |
|
| 103 |
+ 'linkTitle' => array( |
|
| 104 |
+ 'label' => array('Link-Titel', 'Wird beim hovern mit der Maus dargestellt.'),
|
|
| 105 |
+ 'inputType' => 'text', |
|
| 106 |
+ 'eval' => array('tl_class' => 'w50'),
|
|
| 107 |
+ 'dependsOn' => array( |
|
| 108 |
+ 'field' => 'featureLink' |
|
| 109 |
+ ) |
|
| 110 |
+ ), |
|
| 111 |
+ 'newWindow' => array( |
|
| 112 |
+ 'label' => $GLOBALS['TL_LANG']['MSC']['target'], |
|
| 113 |
+ 'inputType' => 'checkbox', |
|
| 114 |
+ 'eval' => array('tl_class' => 'w50 m12'),
|
|
| 115 |
+ 'dependsOn' => array( |
|
| 116 |
+ 'field' => 'featureLink' |
|
| 117 |
+ ) |
|
| 118 |
+ ), |
|
| 119 |
+ 'layout_set' => array( |
|
| 120 |
+ 'label' => array('Layoutoptionen'),
|
|
| 121 |
+ 'inputType' => 'group', |
|
| 122 |
+ ), |
|
| 123 |
+ 'padding' => array( |
|
| 124 |
+ 'label' => array('Innenabstand', 'Es wird Oben und Unten ein Innenabstand angewendet.'),
|
|
| 125 |
+ 'inputType' => 'select', |
|
| 126 |
+ 'options' => array( |
|
| 127 |
+ '' => '-', |
|
| 128 |
+ '-padding' => 'Default', |
|
| 129 |
+ '-medium-padding' => 'Medium', |
|
| 130 |
+ '-large-padding' => 'Large', |
|
| 131 |
+ '-padding-top' => 'Small Top', |
|
| 132 |
+ '-medium-padding-top' => 'Medium Top', |
|
| 133 |
+ '-large-padding-top' => 'Large Top', |
|
| 134 |
+ '-padding-bottom' => 'Small Bottom', |
|
| 135 |
+ '-medium-padding-bottom' => 'Medium Bottom', |
|
| 136 |
+ '-large-padding-bottom' => 'Large Bottom', |
|
| 137 |
+ ), |
|
| 138 |
+ 'eval' => array( |
|
| 139 |
+ 'tl_class' => 'w50', |
|
| 140 |
+ ), |
|
| 141 |
+ ), |
|
| 142 |
+ 'valign' => array( |
|
| 143 |
+ 'label' => array('Vertikale Ausrichtung', 'Vertikale Ausrichtung (nur in Verbindung mit "Mind. Viewport Höhe").'),
|
|
| 144 |
+ 'inputType' => 'select', |
|
| 145 |
+ 'options' => array( |
|
| 146 |
+ '' => 'Mitte', |
|
| 147 |
+ '-valignTop' => 'Oben', |
|
| 148 |
+ '-valignBottom' => 'Unten', |
|
| 149 |
+ ), |
|
| 150 |
+ 'eval' => array('tl_class' => 'w50'),
|
|
| 151 |
+ ), |
|
| 152 |
+ 'valignCenter' => array( |
|
| 153 |
+ 'label' => array('Mind. Viewport Höhe', 'Der Inhaltsbereich hat mindestens die Höhe des Viewports. Der Inhalt wird zentriert dargestellt.'),
|
|
| 154 |
+ 'inputType' => 'checkbox', |
|
| 155 |
+ 'eval' => array( |
|
| 156 |
+ 'tl_class' => 'w50 m12 clr', |
|
| 157 |
+ ), |
|
| 158 |
+ ), |
|
| 159 |
+ 'spacing' => array( |
|
| 160 |
+ 'label' => array('Abstand'),
|
|
| 161 |
+ 'inputType' => 'group', |
|
| 162 |
+ ), |
|
| 163 |
+ 'es_spacing' => array ( |
|
| 164 |
+ 'inputType' => 'standardField' |
|
| 165 |
+ ), |
|
| 166 |
+ 'es_padding' => array ( |
|
| 167 |
+ 'inputType' => 'standardField' |
|
| 168 |
+ ), |
|
| 169 |
+ ), |
|
| 170 |
+); |
|
| 0 | 171 |
\ No newline at end of file |
| 1 | 172 |
new file mode 100644 |
| ... | ... |
@@ -0,0 +1,70 @@ |
| 1 |
+<?php |
|
| 2 |
+$cssClasses = array( |
|
| 3 |
+ 'photo-text-wrapper', |
|
| 4 |
+ 'photo-text-wrapper_'.$this->id, |
|
| 5 |
+ $this->class, |
|
| 6 |
+); |
|
| 7 |
+if ($this->textPosition) {
|
|
| 8 |
+ $cssClasses[] = $this->textPosition; |
|
| 9 |
+} |
|
| 10 |
+if ($this->valign) {
|
|
| 11 |
+ $cssClasses[] = $this->valign; |
|
| 12 |
+} |
|
| 13 |
+if ($this->valignCenter) {
|
|
| 14 |
+ $cssClasses[] = '-valign-center'; |
|
| 15 |
+} |
|
| 16 |
+$imageFiles = array(); |
|
| 17 |
+$videoFiles = array(); |
|
| 18 |
+if (is_array($this->backgroundImage)) {
|
|
| 19 |
+ foreach (\FilesModel::findMultipleByUuids($this->backgroundImage) as $file) {
|
|
| 20 |
+ if (in_array( |
|
| 21 |
+ $file->extension, |
|
| 22 |
+ array_map('trim', explode(',', \Config::get('validImageTypes')))
|
|
| 23 |
+ )) {
|
|
| 24 |
+ $imageFiles[] = $file; |
|
| 25 |
+ } |
|
| 26 |
+ else {
|
|
| 27 |
+ $videoFiles[] = $file; |
|
| 28 |
+ } |
|
| 29 |
+ } |
|
| 30 |
+} |
|
| 31 |
+$imgColStyle = ''; |
|
| 32 |
+if (count($imageFiles) && $image = $this->getImageObject($imageFiles[0]->uuid, $this->backgroundImageSize)) {
|
|
| 33 |
+ $imgColStyle .= 'background-image: url("' . $image->src . '");';
|
|
| 34 |
+} |
|
| 35 |
+if ((count($imageFiles) || count($videoFiles)) && $this->backgroundSize) {
|
|
| 36 |
+ $imgColStyle .= 'background-size: ' . $this->backgroundSize . ';'; |
|
| 37 |
+} |
|
| 38 |
+if ((count($imageFiles) || count($videoFiles)) && $this->backgroundPosition) {
|
|
| 39 |
+ $imgColStyle .= 'background-position: ' . $this->backgroundPosition . ';'; |
|
| 40 |
+} |
|
| 41 |
+ |
|
| 42 |
+$style = ''; |
|
| 43 |
+if (!count($videoFiles) && !count($imageFiles)) {
|
|
| 44 |
+ $style .= $imgColStyle; |
|
| 45 |
+} |
|
| 46 |
+ |
|
| 47 |
+?> |
|
| 48 |
+ |
|
| 49 |
+<?php $this->block('content'); ?>
|
|
| 50 |
+<div class="<?php echo implode(' ', $cssClasses) ?> block"<?= $this->cssID ?><?php if ($this->style): ?> style="<?= $this->style ?>"<?php endif; ?>>
|
|
| 51 |
+ |
|
| 52 |
+ <div class="photo-wall"> |
|
| 53 |
+ <?php if (count($videoFiles)): ?> |
|
| 54 |
+ <div class="photo-wall-content"> |
|
| 55 |
+ <video class="no-mejs" autoplay loop <?php if (count($imageFiles) && $image = $this->getImageObject($imageFiles[0]->uuid, $this->backgroundImageSize)): ?> poster="<?php echo $image->src ?>"<?php endif ?>> |
|
| 56 |
+ <?php foreach ($videoFiles as $video): ?> |
|
| 57 |
+ <source src="<?php echo TL_FILES_URL . $video->path ?>" type="video/<?php echo $video->extension ?>"> |
|
| 58 |
+ <?php endforeach ?> |
|
| 59 |
+ <?php if (count($imageFiles) && $image = $this->getImageObject($imageFiles[0]->uuid, $this->backgroundImageSize)): ?> |
|
| 60 |
+ <?php $this->insert('picture_default', $image->picture) ?>
|
|
| 61 |
+ <?php endif ?> |
|
| 62 |
+ </video> |
|
| 63 |
+ </div> |
|
| 64 |
+ <?php elseif (count($imageFiles) && $image = $this->getImageObject($imageFiles[0]->uuid, $this->backgroundImageSize)): ?> |
|
| 65 |
+ <div class="photo-wall-content" style="<?php echo htmlspecialchars($imgColStyle) ?>" data-image-url="<?php echo $image->src ?>"></div> |
|
| 66 |
+ <?php endif ?> |
|
| 67 |
+ </div> |
|
| 68 |
+ |
|
| 69 |
+ <div class="text-wall"><div class="text-wall-content<?php if ($this->padding): ?> <?= $this->padding ?><?php endif; ?>"> |
|
| 70 |
+<?php $this->endblock(); ?> |
| 0 | 71 |
new file mode 100644 |
| ... | ... |
@@ -0,0 +1,127 @@ |
| 1 |
+<?php |
|
| 2 |
+// rsce_boxes_config.php |
|
| 3 |
+return array( |
|
| 4 |
+ 'label' => array('Zentrierter Inhaltsbereich mit halbseitigem Bild Start', 'Erzeugt einen zentrierten Inhaltsbereich'),
|
|
| 5 |
+ 'types' => array('content','module'),
|
|
| 6 |
+ 'standardFields' => array('cssID', 'space'),
|
|
| 7 |
+ 'wrapper' => array( |
|
| 8 |
+ 'type' => 'start', |
|
| 9 |
+ ), |
|
| 10 |
+ 'fields' => array( |
|
| 11 |
+ 'text_set' => array( |
|
| 12 |
+ 'label' => array('Textspalte'),
|
|
| 13 |
+ 'inputType' => 'group', |
|
| 14 |
+ ), |
|
| 15 |
+ 'textPosition' => array( |
|
| 16 |
+ 'label' => array('Textposition', 'Legt fest ob der Text links oder rechts vom Bild positioniert ist.'),
|
|
| 17 |
+ 'inputType' => 'select', |
|
| 18 |
+ 'options' => array( |
|
| 19 |
+ '' => 'Links', |
|
| 20 |
+ '-text-right' => 'Rechts', |
|
| 21 |
+ ), |
|
| 22 |
+ 'eval' => array('tl_class' => 'w50'),
|
|
| 23 |
+ ), |
|
| 24 |
+ 'image_set' => array( |
|
| 25 |
+ 'label' => array('Bildspalte'),
|
|
| 26 |
+ 'inputType' => 'group', |
|
| 27 |
+ ), |
|
| 28 |
+ 'backgroundImage' => array( |
|
| 29 |
+ 'label' => array('Bild oder Video', 'Wählen Sie ein Bild oder mehrere Videodateien aus.'),
|
|
| 30 |
+ 'inputType' => 'fileTree', |
|
| 31 |
+ 'eval' => array( |
|
| 32 |
+ 'tl_class' => 'clr', |
|
| 33 |
+ 'multiple' => true, |
|
| 34 |
+ 'fieldType' => 'checkbox', |
|
| 35 |
+ 'filesOnly' => true, |
|
| 36 |
+ 'extensions' => \Config::get('validImageTypes') . ',mp4,webm,ogv,ogg',
|
|
| 37 |
+ 'orderField'=>'orderSRC', |
|
| 38 |
+// 'isGallery' => true, |
|
| 39 |
+ ), |
|
| 40 |
+ ), |
|
| 41 |
+ 'backgroundImageSize' => array( |
|
| 42 |
+ 'label' => array('Bildbreite und Bildhöhe', ''),
|
|
| 43 |
+ 'inputType' => 'imageSize', |
|
| 44 |
+ 'options' => \System::getContainer()->get('contao.image.image_sizes')->getOptionsForUser(BackendUser::getInstance()),
|
|
| 45 |
+ 'reference' => &$GLOBALS['TL_LANG']['MSC'], |
|
| 46 |
+ 'eval' => array( |
|
| 47 |
+ 'rgxp' => 'digit', |
|
| 48 |
+ 'tl_class' => 'w50', |
|
| 49 |
+ 'includeBlankOption' => true, |
|
| 50 |
+ ), |
|
| 51 |
+ ), |
|
| 52 |
+ 'backgroundSize' => array( |
|
| 53 |
+ 'label' => array('Bildanpassung', ''),
|
|
| 54 |
+ 'inputType' => 'select', |
|
| 55 |
+ 'options' => array( |
|
| 56 |
+ '' => 'Beschnitten', |
|
| 57 |
+ 'contain' => 'Proportional', |
|
| 58 |
+ '100% 100%' => 'Verzerrt', |
|
| 59 |
+ 'auto auto' => 'Originalgröße', |
|
| 60 |
+ ), |
|
| 61 |
+ 'eval' => array('tl_class' => 'w50'),
|
|
| 62 |
+ ), |
|
| 63 |
+ 'backgroundPosition' => array( |
|
| 64 |
+ 'label' => array('Position', 'Nicht mit Parallax-Effekt kombinierbar'),
|
|
| 65 |
+ 'inputType' => 'select', |
|
| 66 |
+ 'options' => array( |
|
| 67 |
+ '' => '-', |
|
| 68 |
+ '0 0' => 'Links | Oben', |
|
| 69 |
+ '50% 0' => 'Mitte | Oben', |
|
| 70 |
+ '100% 0' => 'Rechts | Oben', |
|
| 71 |
+ '0 50%' => 'Links | Mitte', |
|
| 72 |
+ '50% 50%' => 'Mitte | Mitte', |
|
| 73 |
+ '100% 50%' => 'Rechts | Mitte', |
|
| 74 |
+ '0 100%' => 'Links | Unten', |
|
| 75 |
+ '50% 100%' => 'Mitte | Unten', |
|
| 76 |
+ '100% 100%' => 'Rechts | Unten', |
|
| 77 |
+ ), |
|
| 78 |
+ 'eval' => array('tl_class' => 'w50'),
|
|
| 79 |
+ ), |
|
| 80 |
+ 'padding' => array( |
|
| 81 |
+ 'label' => array('Innenabstand', 'Es wird Oben und Unten ein Innenabstand angewendet.'),
|
|
| 82 |
+ 'inputType' => 'select', |
|
| 83 |
+ 'options' => array( |
|
| 84 |
+ '' => '-', |
|
| 85 |
+ '-padding' => 'Default', |
|
| 86 |
+ '-medium-padding' => 'Medium', |
|
| 87 |
+ '-large-padding' => 'Large', |
|
| 88 |
+ '-padding-top' => 'Small Top', |
|
| 89 |
+ '-medium-padding-top' => 'Medium Top', |
|
| 90 |
+ '-large-padding-top' => 'Large Top', |
|
| 91 |
+ '-padding-bottom' => 'Small Bottom', |
|
| 92 |
+ '-medium-padding-bottom' => 'Medium Bottom', |
|
| 93 |
+ '-large-padding-bottom' => 'Large Bottom', |
|
| 94 |
+ ), |
|
| 95 |
+ 'eval' => array( |
|
| 96 |
+ 'tl_class' => 'w50', |
|
| 97 |
+ ), |
|
| 98 |
+ ), |
|
| 99 |
+ 'valignCenter' => array( |
|
| 100 |
+ 'label' => array('Mind. Viewport Höhe', 'Der Inhaltsbereich hat mindestens die Höhe des Viewports. Der Inhalt wird zentriert dargestellt.'),
|
|
| 101 |
+ 'inputType' => 'checkbox', |
|
| 102 |
+ 'eval' => array( |
|
| 103 |
+ 'tl_class' => 'w50 m12 clr', |
|
| 104 |
+ ), |
|
| 105 |
+ ), |
|
| 106 |
+ 'valign' => array( |
|
| 107 |
+ 'label' => array('Vertikale Ausrichtung', 'Vertikale Ausrichtung (nur in Verbindung mit "Mind. Viewport Höhe").'),
|
|
| 108 |
+ 'inputType' => 'select', |
|
| 109 |
+ 'options' => array( |
|
| 110 |
+ '' => 'Mitte', |
|
| 111 |
+ '-valignTop' => 'Oben', |
|
| 112 |
+ '-valignBottom' => 'Unten', |
|
| 113 |
+ ), |
|
| 114 |
+ 'eval' => array('tl_class' => 'w50'),
|
|
| 115 |
+ ), |
|
| 116 |
+ 'spacing' => array( |
|
| 117 |
+ 'label' => array('Abstand'),
|
|
| 118 |
+ 'inputType' => 'group', |
|
| 119 |
+ ), |
|
| 120 |
+ 'es_spacing' => array ( |
|
| 121 |
+ 'inputType' => 'standardField' |
|
| 122 |
+ ), |
|
| 123 |
+ 'es_padding' => array ( |
|
| 124 |
+ 'inputType' => 'standardField' |
|
| 125 |
+ ), |
|
| 126 |
+ ), |
|
| 127 |
+); |
|
| 0 | 128 |
\ No newline at end of file |
| 0 | 7 |
new file mode 100644 |
| ... | ... |
@@ -0,0 +1,13 @@ |
| 1 |
+<?php |
|
| 2 |
+ |
|
| 3 |
+return array( |
|
| 4 |
+ 'label' => array( |
|
| 5 |
+ 'Zentrierter Inhaltsbereich mit halbseitigem Bild Ende', |
|
| 6 |
+ 'Beendet einen zentrierten Inhaltsbereich', |
|
| 7 |
+ ), |
|
| 8 |
+ 'types' => array('content', 'module'),
|
|
| 9 |
+ 'wrapper' => array( |
|
| 10 |
+ 'type' => 'stop', |
|
| 11 |
+ ), |
|
| 12 |
+ 'fields' => array(), |
|
| 13 |
+); |