xref: /plugin/combo/ComboStrap/TagAttribute/Shadow.php (revision 04fd306c7c155fa133ebb3669986875d65988276)
1*04fd306cSNickeau<?php
2*04fd306cSNickeau/**
3*04fd306cSNickeau * Copyright (c) 2021. ComboStrap, Inc. and its affiliates. All Rights Reserved.
4*04fd306cSNickeau *
5*04fd306cSNickeau * This source code is licensed under the GPL license found in the
6*04fd306cSNickeau * COPYING  file in the root directory of this source tree.
7*04fd306cSNickeau *
8*04fd306cSNickeau * @license  GPL 3 (https://www.gnu.org/licenses/gpl-3.0.en.html)
9*04fd306cSNickeau * @author   ComboStrap <support@combostrap.com>
10*04fd306cSNickeau *
11*04fd306cSNickeau */
12*04fd306cSNickeau
13*04fd306cSNickeaunamespace ComboStrap\TagAttribute;
14*04fd306cSNickeau
15*04fd306cSNickeau
16*04fd306cSNickeauuse ComboStrap\LogUtility;
17*04fd306cSNickeauuse ComboStrap\PluginUtility;
18*04fd306cSNickeauuse ComboStrap\SiteConfig;
19*04fd306cSNickeauuse ComboStrap\TagAttributes;
20*04fd306cSNickeau
21*04fd306cSNickeauclass Shadow
22*04fd306cSNickeau{
23*04fd306cSNickeau
24*04fd306cSNickeau    const ELEVATION_ATT = "elevation";
25*04fd306cSNickeau    const SHADOW_ATT = "shadow";
26*04fd306cSNickeau    const CANONICAL = "shadow";
27*04fd306cSNickeau
28*04fd306cSNickeau    const CONF_DEFAULT_VALUE = "defaultShadowLevel";
29*04fd306cSNickeau
30*04fd306cSNickeau    /**
31*04fd306cSNickeau     * Historically, this is the shadow of material design for the button
32*04fd306cSNickeau     */
33*04fd306cSNickeau    const MEDIUM_ELEVATION_CLASS = "shadow-md";
34*04fd306cSNickeau    const SNIPPET_ID = "shadow";
35*04fd306cSNickeau
36*04fd306cSNickeau    const CONF_SMALL_LEVEL_VALUE = "small";
37*04fd306cSNickeau    const CONF_MEDIUM_LEVEL_VALUE = "medium";
38*04fd306cSNickeau    const CONF_LARGE_LEVEL_VALUE = "large";
39*04fd306cSNickeau    const CONF_EXTRA_LARGE_LEVEL_VALUE = "extra-large";
40*04fd306cSNickeau
41*04fd306cSNickeau    /**
42*04fd306cSNickeau     * @param TagAttributes $attributes
43*04fd306cSNickeau     */
44*04fd306cSNickeau    public static function process(TagAttributes &$attributes)
45*04fd306cSNickeau    {
46*04fd306cSNickeau        $elevationValue = "";
47*04fd306cSNickeau
48*04fd306cSNickeau        if ($attributes->hasComponentAttribute(self::ELEVATION_ATT)) {
49*04fd306cSNickeau            $elevationValue = $attributes->getValueAndRemove(self::ELEVATION_ATT);
50*04fd306cSNickeau        } else {
51*04fd306cSNickeau            if ($attributes->hasComponentAttribute(self::SHADOW_ATT)) {
52*04fd306cSNickeau                $elevationValue = $attributes->getValueAndRemove(self::SHADOW_ATT);
53*04fd306cSNickeau            }
54*04fd306cSNickeau        }
55*04fd306cSNickeau
56*04fd306cSNickeau        if (!empty($elevationValue)) {
57*04fd306cSNickeau
58*04fd306cSNickeau            $shadowClass = self::getClass($elevationValue);
59*04fd306cSNickeau            if (!empty($shadowClass)) {
60*04fd306cSNickeau                $attributes->addClassName($shadowClass);
61*04fd306cSNickeau            }
62*04fd306cSNickeau
63*04fd306cSNickeau        }
64*04fd306cSNickeau
65*04fd306cSNickeau    }
66*04fd306cSNickeau
67*04fd306cSNickeau
68*04fd306cSNickeau    public
69*04fd306cSNickeau    static function getDefaultClass()
70*04fd306cSNickeau    {
71*04fd306cSNickeau        $defaultValue = SiteConfig::getConfValue(self::CONF_DEFAULT_VALUE);
72*04fd306cSNickeau        return self::getClass($defaultValue);
73*04fd306cSNickeau    }
74*04fd306cSNickeau
75*04fd306cSNickeau    public
76*04fd306cSNickeau    static function getClass($value)
77*04fd306cSNickeau    {
78*04fd306cSNickeau        // To string because if the value was true, the first string case
79*04fd306cSNickeau        // would be chosen :(
80*04fd306cSNickeau        if ($value === true) {
81*04fd306cSNickeau            $value = "true";
82*04fd306cSNickeau        }
83*04fd306cSNickeau        /**
84*04fd306cSNickeau         * The class are bootstrap class even without the bs suffix/prefix
85*04fd306cSNickeau         * https://getbootstrap.com/docs/5.0/utilities/shadows/
86*04fd306cSNickeau         */
87*04fd306cSNickeau        switch ($value) {
88*04fd306cSNickeau            case self::CONF_SMALL_LEVEL_VALUE:
89*04fd306cSNickeau            case "sm":
90*04fd306cSNickeau                return "shadow-sm";
91*04fd306cSNickeau            case self::CONF_MEDIUM_LEVEL_VALUE:
92*04fd306cSNickeau            case "md";
93*04fd306cSNickeau                PluginUtility::getSnippetManager()->attachCssInternalStyleSheet(self::SNIPPET_ID);
94*04fd306cSNickeau                return self::MEDIUM_ELEVATION_CLASS;
95*04fd306cSNickeau            case self::CONF_LARGE_LEVEL_VALUE:
96*04fd306cSNickeau            case "lg":
97*04fd306cSNickeau                return "shadow";
98*04fd306cSNickeau            case self::CONF_EXTRA_LARGE_LEVEL_VALUE:
99*04fd306cSNickeau            case "xl":
100*04fd306cSNickeau            case "high":
101*04fd306cSNickeau                return "shadow-lg";
102*04fd306cSNickeau                // Old deprecated: $styleProperties["box-shadow"] = "0 0 0 .2em rgba(3,102,214,0),0 13px 27px -5px rgba(50,50,93,.25),0 8px 16px -8px rgba(0,0,0,.3),0 -6px 16px -6px rgba(0,0,0,.025)";
103*04fd306cSNickeau            case "true":
104*04fd306cSNickeau            case "1":
105*04fd306cSNickeau                return self::getDefaultClass();
106*04fd306cSNickeau            default:
107*04fd306cSNickeau                LogUtility::msg("The shadow / elevation value ($value) is unknown", LogUtility::LVL_MSG_ERROR, self::CANONICAL);
108*04fd306cSNickeau                return null;
109*04fd306cSNickeau        }
110*04fd306cSNickeau    }
111*04fd306cSNickeau
112*04fd306cSNickeau    /**
113*04fd306cSNickeau     * @param TagAttributes $attributes
114*04fd306cSNickeau     */
115*04fd306cSNickeau    public
116*04fd306cSNickeau    static function addMediumElevation(&$attributes)
117*04fd306cSNickeau    {
118*04fd306cSNickeau        $attributes->addClassName(self::MEDIUM_ELEVATION_CLASS);
119*04fd306cSNickeau    }
120*04fd306cSNickeau
121*04fd306cSNickeau}
122