packages feed

HFitUI-0.1.0.0: src/WebUI/Scripts/JavaScript/HJSVars.hs

----------------------------------------------------------------
-- Модуль приложения
-- Скрипты графического интерфейса (HScript)
-- Переменные для Языка JavaScript 
----------------------------------------------------------------

module WebUI.Scripts.JavaScript.HJSVars
    ( HJsEql (..)
    , eqlNew, eqlNewMT
    , eql   , eqlMT

    , HJsVar (..), varJS

    , newVar
    , newVarInt
    , newVarDouble
    , newVarBool
    , newVarStr
    ) where

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

import           Data.Char                                      (toLower)
import           Data.String.Utils                              (strip)

import           WebUI.Scripts.HScript
import           WebUI.Scripts.JavaScript.HJSUtils              (upjs)
import           WebUI.Scripts.JavaScript.HJSTypes
import           WebUI.Scripts.JavaScript.HJSBuilder



-- | Данные связи переменных
data HJsEql = forall n v. (BuilderHSL n, BuilderHSL v) => HJsEqlNew n v
            | forall n v. (BuilderHSL n, BuilderHSL v) => HJsEql    n v

instance BuilderHSL HJsEql where
    buildHSL hbConf (HJsEqlNew n v) = 
        "var " ++ (buildHSL hbConf $ HJsEql n v)
    buildHSL hbConf (HJsEql n v) = 
        let value = valEql hbConf v in
        (nameEql hbConf n value) ++ value ++ ";" ++ (hbc_entryLine hbConf)
        where
            nameEql hbConf n v = 
                let res = (buildHSL hbConf n) in
                if PRL.length res == 0
                then error ("HScript Error! There is no name for HJsEql value: (" ++ v ++ ")")
                else res
            valEql hbConf v = 
                let res = (buildHSL hbConf v) in
                if PRL.length res == 0
                then ""
                else " = " ++ res

    buildHSL_L hbConf (HJsEqlNew n _) = buildHSL_L hbConf n
    buildHSL_L hbConf (HJsEql    n _) = buildHSL_L hbConf n

    buildHSL_R hbConf (HJsEqlNew _ v) = buildHSL_R hbConf v
    buildHSL_R hbConf (HJsEql    _ v) = buildHSL_R hbConf v



-- | Новая связь создаваемых переменных
eqlNew :: (BuilderHSL n, BuilderHSL v) 
       => n
       -> v 
       -> HSL HLangJS HLangJS
eqlNew name val = do 
    var <- return $ HL $ HJsEqlNew name val
    modify (:> var)
    return $ HL name



-- | Новая связь создаваемых переменных через монадный трансформер
eqlNewMT :: (BuilderHSL n) 
         => n
         -> HSL HLangJS HLangJS
         -> HSL HLangJS HLangJS
eqlNewMT name val = do 
    c <- ask
    s <- get
    var <- return $ HL $ HJsEqlNew name $ upjs val c s
    modify (:> var)
    return $ HL name



-- | Новая связь переменных
eql :: (BuilderHSL n, BuilderHSL v) 
    => n
    -> v 
    -> HSL HLangJS HLangJS
eql name val = do 
    var <- return $ HL $ HJsEql name val
    modify (:> var)
    return $ HL name



-- | Новая связь переменных через монадный трансформер
eqlMT :: (BuilderHSL n) 
      => n
      -> HSL HLangJS HLangJS 
      -> HSL HLangJS HLangJS
eqlMT name val = do 
    c <- ask
    s <- get
    var <- return $ HL $ HJsEql name $ upjs val c s
    modify (:> var)
    return $ HL name



-- | Данные имени связи переменных
data HJsVar = forall k. (BuilderHSL k) => HJsVar k

instance BuilderHSL HJsVar where
    buildHSL   hbConf (HJsVar k) = buildHSL   hbConf k
    buildHSL_L hbConf (HJsVar k) = buildHSL_L hbConf k
    buildHSL_R hbConf (HJsVar k) = error ("HScript Error! Calling function \'buildHSL_R\' for (" ++ (buildHSL hbConf k) ++ ")" )

-- | Имя переменной
varJS :: JsName
      -> HJsVar
varJS name = HJsVar name



-- | Новая переменная
newVar :: (BuilderHSL v) 
       => JsName
       -> v
       -> HSL HLangJS HLangJS 
newVar name val = eqlNew (varJS name) val




-- | Новая переменная Int
newVarInt :: JsName
          -> Int
          -> HSL HLangJS HLangJS
newVarInt name val = eqlNew (varJS name) val



-- | Новая переменная Double
newVarDouble :: JsName
             -> Double
             -> HSL HLangJS HLangJS
newVarDouble name val = eqlNew (varJS name) val



-- | Новая переменная Bool
newVarBool :: JsName
           -> Bool
           -> HSL HLangJS HLangJS
newVarBool name val = eqlNew (varJS name) val



-- | Новая переменная String
newVarStr :: JsName
          -> String
          -> HSL HLangJS HLangJS
newVarStr name val = eqlNew (varJS name) (show val)