packages feed

HFitUI-0.1.0.0: src/WebUI/Widgets/Extensions/ToolTipExtension.hs

----------------------------------------------------------------
-- Модуль приложения
-- Расширение графического интерфейса (ExtensionUI)
-- Всплывающая подсказка
----------------------------------------------------------------

module WebUI.Widgets.Extensions.ToolTipExtension
    ( toolTipExtension

    , extToolTip
    , extToolTipW
    ) where

-- Импорт модулей
import           Prelude                         as PRL

import qualified Text.Blaze                      as TB
import qualified Text.Blaze.Html5                as H
import           Text.Blaze.Html5                
import qualified Text.Blaze.Html5.Attributes     as HA
import           Text.Blaze.Html5.Attributes     
import           Text.Blaze.Html.Renderer.String (renderHtml)
import qualified Text.Blaze.Internal             as TBI

import           Text.Hamlet
import           Text.Lucius
import           Text.Cassius
import           Text.Julius

import           WebUI.Widgets.UIWidget
import           WebUI.Widgets.Components.UIBase



-- | Подготовка CSS
prepareCSS a = toHtml $ renderCssUrl undefined a



-- http://www.w3schools.com/howto/howto_css_tooltip.asp

-- | Метод подключения расширения всплывающей подсказки (ToolTipExtension)
toolTipExtension :: WidgetUI -> UI WidgetUI
toolTipExtension shell = do
    uuid <- generateUUID
    extension <- return $ createWidgetUI elem uuid "extension_ToolTipExtension"
    extension <- return $ extension { wui_styles = (wui_styles extension) ++ [H.style $ do 
        prepareCSS ([cassius|
            .tooltip 
                position: relative
                display: inline-block
            
            .tooltip .tooltiptext 
                visibility: hidden
                width: auto
                min-width: 120px
                background-color: #555
                color: #fff
                text-align: center
                border-radius: 6px
                padding: 5px 0
                position: absolute
                z-index: 100000
                bottom: 125%
                left: 50%
                margin-left: -60px
                opacity: 0
                transition: opacity 1s


            .tooltip .tooltiptext::after 
                content: ""
                position: absolute
                top: 100%
                left: 50%
                margin-left: -5px
                border-width: 5px
                border-style: solid
                border-color: #555 transparent transparent transparent

            .tooltip:hover .tooltiptext 
                visibility: visible
                opacity: 1
        |] )] }
    --extension <- return $ extension { wui_styles = (wui_styles extension) ++ [H.style ".test_qwerty {position: display;}"] }
    shell `addWUI` extension
    where
        elem = EmptyElementUI 



-- | Добавление всплывающей подсказки с текстом
extToolTip :: String -> WidgetUI -> UI WidgetUI
extToolTip val widget = do 
    case (wui_element widget) of
            ContainerUI f   -> do widget <- classToWidget "tooltip" widget 
                                            `addWUImms` 
                                            [textSpan val <#> classToWidget "tooltiptext"]
                                  return widget
            ElementUI e     -> do return widget
            EmptyElementUI  -> do return widget



-- | Добавление всплывающей подсказки с виджетом
extToolTipW :: WidgetUI -> WidgetUI -> UI WidgetUI
extToolTipW valw widget = do 
    case (wui_element widget) of
            ContainerUI f   -> do widget <- classToWidget "tooltip" widget 
                                            `addWUImms` 
                                            [classToWidget "tooltiptext" valw]
                                  return widget
            ElementUI e     -> do return widget
            EmptyElementUI  -> do return widget