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