From fb90946951d1c723dd87209e5a25583b7b9bc531 Mon Sep 17 00:00:00 2001 From: Eric Torreborre Date: Thu, 2 Jun 2022 10:32:44 +0200 Subject: [PATCH 1/6] compile with updated dependencies for GHC 9.2 and removed unused packages: rpc, idl --- cabal.project | 8 - cabal.project.floor-ghc-7.8.4 | 22 - msgpack-aeson/msgpack-aeson.cabal | 23 +- msgpack-idl-web/LICENSE | 25 - msgpack-idl-web/config/favicon.ico | Bin 1342 -> 0 bytes msgpack-idl-web/config/models | 11 - msgpack-idl-web/config/robots.txt | 1 - msgpack-idl-web/config/routes | 7 - msgpack-idl-web/config/settings.yml | 21 - msgpack-idl-web/config/sqlite.yml | 20 - msgpack-idl-web/deploy/Procfile | 97 - msgpack-idl-web/messages/en.msg | 1 - msgpack-idl-web/mpidl-web.cabal | 114 - msgpack-idl-web/src/Application.hs | 61 - msgpack-idl-web/src/Foundation.hs | 162 - msgpack-idl-web/src/Handler/Home.hs | 59 - msgpack-idl-web/src/Import.hs | 28 - msgpack-idl-web/src/Model.hs | 14 - msgpack-idl-web/src/Settings.hs | 68 - msgpack-idl-web/src/Settings/Development.hs | 14 - msgpack-idl-web/src/Settings/StaticFiles.hs | 18 - msgpack-idl-web/src/devel.hs | 26 - msgpack-idl-web/src/main.hs | 8 - msgpack-idl-web/static/css/bootstrap.css | 3990 ----------------- .../static/img/glyphicons-halflings-white.png | Bin 8777 -> 0 bytes .../static/img/glyphicons-halflings.png | Bin 13826 -> 0 bytes .../templates/default-layout-wrapper.hamlet | 47 - .../templates/default-layout.hamlet | 3 - msgpack-idl-web/templates/homepage.hamlet | 20 - msgpack-idl-web/templates/homepage.julius | 1 - msgpack-idl-web/templates/homepage.lucius | 6 - msgpack-idl-web/templates/normalize.lucius | 439 -- msgpack-idl-web/tests/HomeTest.hs | 24 - msgpack-idl-web/tests/main.hs | 22 - msgpack-idl/LICENSE | 30 - msgpack-idl/Language/MessagePack/IDL.hs | 9 - msgpack-idl/Language/MessagePack/IDL/Check.hs | 9 - .../Language/MessagePack/IDL/CodeGen/Cpp.hs | 298 -- .../MessagePack/IDL/CodeGen/Erlang.hs | 189 - .../MessagePack/IDL/CodeGen/Haskell.hs | 209 - .../Language/MessagePack/IDL/CodeGen/Java.hs | 349 -- .../Language/MessagePack/IDL/CodeGen/Perl.hs | 104 - .../Language/MessagePack/IDL/CodeGen/Php.hs | 181 - .../MessagePack/IDL/CodeGen/Python.hs | 172 - .../Language/MessagePack/IDL/CodeGen/Ruby.hs | 285 -- .../Language/MessagePack/IDL/Internal.hs | 14 - .../Language/MessagePack/IDL/Parser.hs | 14 - .../Language/MessagePack/IDL/Syntax.hs | 76 - msgpack-idl/README.md | 66 - msgpack-idl/Setup.hs | 2 - msgpack-idl/Specification.md | 160 - msgpack-idl/exec/main.hs | 138 - msgpack-idl/mpidl.peggy | 87 - msgpack-idl/msgpack-idl.cabal | 68 - msgpack-idl/test/TODO.txt | 19 - msgpack-idl/test/idls/empty.idl | 8 - msgpack-idl/test/test.hs | 18 - msgpack-rpc/LICENSE | 30 - msgpack-rpc/Setup.hs | 2 - msgpack-rpc/msgpack-rpc.cabal | 57 - msgpack-rpc/src/Network/MessagePack/Client.hs | 126 - msgpack-rpc/src/Network/MessagePack/Server.hs | 133 - msgpack-rpc/test/test.hs | 45 - msgpack/msgpack.cabal | 41 +- 64 files changed, 31 insertions(+), 8268 deletions(-) delete mode 100644 cabal.project delete mode 100644 cabal.project.floor-ghc-7.8.4 delete mode 100644 msgpack-idl-web/LICENSE delete mode 100644 msgpack-idl-web/config/favicon.ico delete mode 100644 msgpack-idl-web/config/models delete mode 100644 msgpack-idl-web/config/robots.txt delete mode 100644 msgpack-idl-web/config/routes delete mode 100644 msgpack-idl-web/config/settings.yml delete mode 100644 msgpack-idl-web/config/sqlite.yml delete mode 100644 msgpack-idl-web/deploy/Procfile delete mode 100644 msgpack-idl-web/messages/en.msg delete mode 100644 msgpack-idl-web/mpidl-web.cabal delete mode 100644 msgpack-idl-web/src/Application.hs delete mode 100644 msgpack-idl-web/src/Foundation.hs delete mode 100644 msgpack-idl-web/src/Handler/Home.hs delete mode 100644 msgpack-idl-web/src/Import.hs delete mode 100644 msgpack-idl-web/src/Model.hs delete mode 100644 msgpack-idl-web/src/Settings.hs delete mode 100644 msgpack-idl-web/src/Settings/Development.hs delete mode 100644 msgpack-idl-web/src/Settings/StaticFiles.hs delete mode 100644 msgpack-idl-web/src/devel.hs delete mode 100644 msgpack-idl-web/src/main.hs delete mode 100644 msgpack-idl-web/static/css/bootstrap.css delete mode 100644 msgpack-idl-web/static/img/glyphicons-halflings-white.png delete mode 100644 msgpack-idl-web/static/img/glyphicons-halflings.png delete mode 100644 msgpack-idl-web/templates/default-layout-wrapper.hamlet delete mode 100644 msgpack-idl-web/templates/default-layout.hamlet delete mode 100644 msgpack-idl-web/templates/homepage.hamlet delete mode 100644 msgpack-idl-web/templates/homepage.julius delete mode 100644 msgpack-idl-web/templates/homepage.lucius delete mode 100644 msgpack-idl-web/templates/normalize.lucius delete mode 100644 msgpack-idl-web/tests/HomeTest.hs delete mode 100644 msgpack-idl-web/tests/main.hs delete mode 100644 msgpack-idl/LICENSE delete mode 100644 msgpack-idl/Language/MessagePack/IDL.hs delete mode 100644 msgpack-idl/Language/MessagePack/IDL/Check.hs delete mode 100644 msgpack-idl/Language/MessagePack/IDL/CodeGen/Cpp.hs delete mode 100644 msgpack-idl/Language/MessagePack/IDL/CodeGen/Erlang.hs delete mode 100644 msgpack-idl/Language/MessagePack/IDL/CodeGen/Haskell.hs delete mode 100644 msgpack-idl/Language/MessagePack/IDL/CodeGen/Java.hs delete mode 100644 msgpack-idl/Language/MessagePack/IDL/CodeGen/Perl.hs delete mode 100644 msgpack-idl/Language/MessagePack/IDL/CodeGen/Php.hs delete mode 100644 msgpack-idl/Language/MessagePack/IDL/CodeGen/Python.hs delete mode 100644 msgpack-idl/Language/MessagePack/IDL/CodeGen/Ruby.hs delete mode 100644 msgpack-idl/Language/MessagePack/IDL/Internal.hs delete mode 100644 msgpack-idl/Language/MessagePack/IDL/Parser.hs delete mode 100644 msgpack-idl/Language/MessagePack/IDL/Syntax.hs delete mode 100644 msgpack-idl/README.md delete mode 100644 msgpack-idl/Setup.hs delete mode 100644 msgpack-idl/Specification.md delete mode 100644 msgpack-idl/exec/main.hs delete mode 100644 msgpack-idl/mpidl.peggy delete mode 100644 msgpack-idl/msgpack-idl.cabal delete mode 100644 msgpack-idl/test/TODO.txt delete mode 100644 msgpack-idl/test/idls/empty.idl delete mode 100644 msgpack-idl/test/test.hs delete mode 100644 msgpack-rpc/LICENSE delete mode 100644 msgpack-rpc/Setup.hs delete mode 100644 msgpack-rpc/msgpack-rpc.cabal delete mode 100644 msgpack-rpc/src/Network/MessagePack/Client.hs delete mode 100644 msgpack-rpc/src/Network/MessagePack/Server.hs delete mode 100644 msgpack-rpc/test/test.hs diff --git a/cabal.project b/cabal.project deleted file mode 100644 index dc73f9d..0000000 --- a/cabal.project +++ /dev/null @@ -1,8 +0,0 @@ -tests: True - -packages: - msgpack - msgpack-aeson - msgpack-rpc --- msgpack-idl --- msgpack-idl-web diff --git a/cabal.project.floor-ghc-7.8.4 b/cabal.project.floor-ghc-7.8.4 deleted file mode 100644 index b61c623..0000000 --- a/cabal.project.floor-ghc-7.8.4 +++ /dev/null @@ -1,22 +0,0 @@ --- freeze file for validating lower bounds - --- with-compiler: ghc-7.8.4 -constraints: bytestring installed - , deepseq installed - , binary installed - , containers installed - - , mtl == 2.2.1 - , vector == 0.10.11.0 - , data-binary-ieee754 == 0.4.4 - , unordered-containers == 0.2.5.0 - , hashable == 1.1.2.4 - , text == 1.2.3.0 - , scientific == 0.3.2.0 - , aeson == 0.8.0.2 - , exceptions == 0.8 - , network == 2.6.0.0 - , monad-control == 1.0.0.0 - , conduit == 1.2.3.1 - , conduit-extra == 1.1.3.4 - , binary-conduit == 1.2.3 diff --git a/msgpack-aeson/msgpack-aeson.cabal b/msgpack-aeson/msgpack-aeson.cabal index 063ebd4..1a48f6e 100644 --- a/msgpack-aeson/msgpack-aeson.cabal +++ b/msgpack-aeson/msgpack-aeson.cabal @@ -23,16 +23,15 @@ library hs-source-dirs: src exposed-modules: Data.MessagePack.Aeson - build-depends: base >= 4.7 && < 4.14 - , aeson >= 0.8.0.2 && < 0.12 - || >= 1.0 && < 1.5 - , bytestring >= 0.10.4 && < 0.11 - , msgpack >= 1.1.0 && < 1.2 - , scientific >= 0.3.2 && < 0.4 - , text >= 1.2.3 && < 1.3 - , unordered-containers >= 0.2.5 && < 0.3 - , vector >= 0.10.11 && < 0.13 - , deepseq >= 1.3 && < 1.5 + build-depends: base == 4.14.* + , aeson == 2.* + , bytestring == 0.10.* + , msgpack == 1.2.* + , scientific == 0.3.* + , text == 1.2.* + , unordered-containers == 0.2.* + , vector == 0.12.* + , deepseq == 1.4.* default-language: Haskell2010 @@ -48,7 +47,7 @@ test-suite msgpack-aeson-test , aeson , msgpack -- test-specific dependencies - , tasty == 1.2.* - , tasty-hunit == 0.10.* + , tasty + , tasty-hunit default-language: Haskell2010 diff --git a/msgpack-idl-web/LICENSE b/msgpack-idl-web/LICENSE deleted file mode 100644 index 7fd5055..0000000 --- a/msgpack-idl-web/LICENSE +++ /dev/null @@ -1,25 +0,0 @@ -The following license covers this documentation, and the source code, except -where otherwise indicated. - -Copyright 2012, Hideyuki Tanaka. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS "AS IS" AND ANY EXPRESS OR -IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO -EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY DIRECT, INDIRECT, -INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, -OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE -OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF -ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/msgpack-idl-web/config/favicon.ico b/msgpack-idl-web/config/favicon.ico deleted file mode 100644 index 9dd5f356d4119b9f50f2cfc370d84b975688ca3f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1342 zcmZQzU}Ruo5D;Jh(h3Y2EDQ{43=BX%6OhlyumQ;K1Bz*Y#DG`9fi}^UD+ED^lEv4=~bZE?Oa#QNJ z+cU2q@Jy_cXbVuDRgi&!Pndy$Uj&FjG%!r~G*}n}eN{LmftXW(osr#3fhE^klz}@^ zU$|;Qg2VkYvnvl)`{~~bP+{8=sLs_J1jT`BoV|gnVB8(3%DyR3nI&CMh(Rw@h3UVq z976)oLHzLs0y{P~#GTvJ7=J#|Q0S1eI75h=9Fw`b9HR{w%Q9NKNHZGw$TO`BQDl7J zB*l;!s>tv^SdrnOhYW+Vqd0?Ip`+sMGqWlVOi6OO5U9ko&Rv=z-&2+$3yQ1#2)2Iyt@UV6l_ZOK%y5iLO!%E~8CEhtTI!F91gl`Au7IhU0E0?}kN(w@ z(@GAltcg2Y=&tj-&|Ulg{DQz6r)QS$ZjG{eR_vksuf$95e~GvL|56`=|G7@8hd^n- zM_a_T#Lx6fU6|F+{xt7rP0@~@>%wjS*G1U>Z;o;N-k;|6qA}9`6OjL}G1~EeW3=^5DjW<90fw^D6(KfPd$WT6cc%IO1Eo_)x()sZqPsJK{&i;t{p-yR`PY{n z`maAX{C`cD?VMyQIW~~}Y`~P9?rvnzn&NkBR(1OSnN?~3XI7^E1JWS;e-;Q=r~jK( zlL?~#x2O27D)F}fCP`F~?PDR|ni?=~ZbR<>vMam ze^E`iJs(V`ngAn=$#81rbOtk7PUZ{`6Xo`dki6+t8S`h>Wv`xIl|HpC#V@MB$4ofh z$&hh#oH1ArFpV<&kY`}{z|O$%fSG~e;eQ|-XxxTB3=A_W7#Jih7#Jo1Rc-*{2S9uP eCz>> package.json -# -# Postgresql Yesod setup: -# -# * add a dependency on the "heroku" package in your cabal file -# -# * add code in Application.hs to use the heroku package and load the connection parameters. -# The below works for Postgresql. -# -# #ifndef DEVELOPMENT -# import qualified Web.Heroku -# #endif -# -# -# makeApplication :: AppConfig DefaultEnv Extra -> Logger -> IO Application -# makeApplication conf logger = do -# manager <- newManager def -# s <- staticSite -# hconfig <- loadHerokuConfig -# dbconf <- withYamlEnvironment "config/postgresql.yml" (appEnv conf) -# (Database.Persist.Store.loadConfig . combineMappings hconfig) >>= -# Database.Persist.Store.applyEnv -# p <- Database.Persist.Store.createPoolConfig (dbconf :: Settings.PersistConfig) -# Database.Persist.Store.runPool dbconf (runMigration migrateAll) p -# let foundation = App conf setLogger s p manager dbconf -# app <- toWaiAppPlain foundation -# return $ logWare app -# where -##ifdef DEVELOPMENT -# logWare = logCallbackDev (logBS setLogger) -# setLogger = logger -##else -# setLogger = toProduction logger -- by default the logger is set for development -# logWare = logCallback (logBS setLogger) -##endif -# -# #ifndef DEVELOPMENT -# canonicalizeKey :: (Text, val) -> (Text, val) -# canonicalizeKey ("dbname", val) = ("database", val) -# canonicalizeKey pair = pair -# -# toMapping :: [(Text, Text)] -> AT.Value -# toMapping xs = AT.Object $ M.fromList $ map (\(key, val) -> (key, AT.String val)) xs -# #endif -# -# combineMappings :: AT.Value -> AT.Value -> AT.Value -# combineMappings (AT.Object m1) (AT.Object m2) = AT.Object $ m1 `M.union` m2 -# combineMappings _ _ = error "Data.Object is not a Mapping." -# -# loadHerokuConfig :: IO AT.Value -# loadHerokuConfig = do -# #ifdef DEVELOPMENT -# return $ AT.Object M.empty -# #else -# Web.Heroku.dbConnParams >>= return . toMapping . map canonicalizeKey -# #endif - - - -# Heroku setup: -# Find the Heroku guide. Roughly: -# -# * sign up for a heroku account and register your ssh key -# * create a new application on the *cedar* stack -# -# * make your Yesod project the git repository for that application -# * create a deploy branch -# -# git checkout -b deploy -# -# Repeat these steps to deploy: -# * add your web executable binary (referenced below) to the git repository -# -# git checkout deploy -# git add ./dist/build/mpidl-web/mpidl-web -# git commit -m deploy -# -# * push to Heroku -# -# git push heroku deploy:master - - -# Heroku configuration that runs your app -web: ./dist/build/mpidl-web/mpidl-web production -p $PORT diff --git a/msgpack-idl-web/messages/en.msg b/msgpack-idl-web/messages/en.msg deleted file mode 100644 index e928c34..0000000 --- a/msgpack-idl-web/messages/en.msg +++ /dev/null @@ -1 +0,0 @@ -Hello: Hello diff --git a/msgpack-idl-web/mpidl-web.cabal b/msgpack-idl-web/mpidl-web.cabal deleted file mode 100644 index f55b172..0000000 --- a/msgpack-idl-web/mpidl-web.cabal +++ /dev/null @@ -1,114 +0,0 @@ -name: mpidl-web -version: 0.0.0 -license: BSD3 -license-file: LICENSE -author: Hideyuki Tanaka -maintainer: Hideyuki Tanaka -synopsis: The greatest Yesod web application ever. -description: I'm sure you can say something clever here if you try. -category: Web -stability: Experimental -cabal-version: >= 1.8 -build-type: Simple -homepage: http://mpidl-web.yesodweb.com/ - -Flag dev - Description: Turn on development settings, like auto-reload templates. - Default: False - -Flag library-only - Description: Build for use with "yesod devel" - Default: False - -library - exposed-modules: Application - Foundation - Import - Model - Settings - Settings.StaticFiles - Settings.Development - Handler.Home - - if flag(dev) || flag(library-only) - cpp-options: -DDEVELOPMENT - ghc-options: -Wall -threaded -O0 - else - ghc-options: -Wall -threaded -O2 - - extensions: TemplateHaskell - QuasiQuotes - OverloadedStrings - NoImplicitPrelude - CPP - MultiParamTypeClasses - TypeFamilies - GADTs - GeneralizedNewtypeDeriving - FlexibleContexts - EmptyDataDecls - NoMonomorphismRestriction - - build-depends: base >= 4 && < 5 - , yesod-platform >= 1.0 && < 1.1 - , yesod >= 1.0 && < 1.1 - , yesod-core >= 1.0 && < 1.1 - , yesod-auth >= 1.0 && < 1.1 - , yesod-static >= 1.0 && < 1.1 - , yesod-default >= 1.0 && < 1.1 - , yesod-form >= 1.0 && < 1.1 - , yesod-test >= 0.2 && < 0.3 - , clientsession >= 0.7.3 && < 0.8 - , bytestring >= 0.9 && < 0.10 - , text >= 0.11 && < 0.12 - , persistent >= 0.9 && < 0.10 - , persistent-sqlite >= 0.9 && < 0.10 - , template-haskell - , hamlet >= 1.0 && < 1.1 - , shakespeare-css >= 1.0 && < 1.1 - , shakespeare-js >= 1.0 && < 1.1 - , shakespeare-text >= 1.0 && < 1.1 - , hjsmin >= 0.1 && < 0.2 - , monad-control >= 0.3 && < 0.4 - , wai-extra >= 1.2 && < 1.3 - , yaml >= 0.7 && < 0.8 - , http-conduit >= 1.4 && < 1.5 - , directory >= 1.1 && < 1.2 - , warp >= 1.2 && < 1.3 - - , shelly - , bytestring - , system-fileio - -executable mpidl-web - if flag(library-only) - Buildable: False - - main-is: main.hs - hs-source-dirs: src - build-depends: base - , mpidl-web - , yesod-default - -test-suite test - type: exitcode-stdio-1.0 - main-is: main.hs - hs-source-dirs: tests - ghc-options: -Wall - extensions: TemplateHaskell - QuasiQuotes - OverloadedStrings - NoImplicitPrelude - CPP - OverloadedStrings - MultiParamTypeClasses - TypeFamilies - GADTs - GeneralizedNewtypeDeriving - FlexibleContexts - - build-depends: base - , mpidl-web - , yesod-test - , yesod-default - , yesod-core diff --git a/msgpack-idl-web/src/Application.hs b/msgpack-idl-web/src/Application.hs deleted file mode 100644 index 607a11f..0000000 --- a/msgpack-idl-web/src/Application.hs +++ /dev/null @@ -1,61 +0,0 @@ -{-# OPTIONS_GHC -fno-warn-orphans #-} -module Application - ( makeApplication - , getApplicationDev - , makeFoundation - ) where - -import Import -import Settings -import Yesod.Auth -import Yesod.Default.Config -import Yesod.Default.Main -import Yesod.Default.Handlers -import Yesod.Logger (Logger, logBS, toProduction) -import Network.Wai.Middleware.RequestLogger (logCallback, logCallbackDev) -import qualified Database.Persist.Store -import Database.Persist.GenericSql (runMigration) -import Network.HTTP.Conduit (newManager, def) - --- Import all relevant handler modules here. --- Don't forget to add new modules to your cabal file! -import Handler.Home - --- This line actually creates our YesodSite instance. It is the second half --- of the call to mkYesodData which occurs in Foundation.hs. Please see --- the comments there for more details. -mkYesodDispatch "App" resourcesApp - --- This function allocates resources (such as a database connection pool), --- performs initialization and creates a WAI application. This is also the --- place to put your migrate statements to have automatic database --- migrations handled by Yesod. -makeApplication :: AppConfig DefaultEnv Extra -> Logger -> IO Application -makeApplication conf logger = do - foundation <- makeFoundation conf setLogger - app <- toWaiAppPlain foundation - return $ logWare app - where - setLogger = if development then logger else toProduction logger - logWare = if development then logCallbackDev (logBS setLogger) - else logCallback (logBS setLogger) - -makeFoundation :: AppConfig DefaultEnv Extra -> Logger -> IO App -makeFoundation conf setLogger = do - manager <- newManager def - s <- staticSite - dbconf <- withYamlEnvironment "config/sqlite.yml" (appEnv conf) - Database.Persist.Store.loadConfig >>= - Database.Persist.Store.applyEnv - p <- Database.Persist.Store.createPoolConfig (dbconf :: Settings.PersistConfig) - Database.Persist.Store.runPool dbconf (runMigration migrateAll) p - return $ App conf setLogger s p manager dbconf - --- for yesod devel -getApplicationDev :: IO (Int, Application) -getApplicationDev = - defaultDevelApp loader makeApplication - where - loader = loadConfig (configSettings Development) - { csParseExtra = parseExtra - } diff --git a/msgpack-idl-web/src/Foundation.hs b/msgpack-idl-web/src/Foundation.hs deleted file mode 100644 index fed8a4f..0000000 --- a/msgpack-idl-web/src/Foundation.hs +++ /dev/null @@ -1,162 +0,0 @@ -module Foundation - ( App (..) - , Route (..) - , AppMessage (..) - , resourcesApp - , Handler - , Widget - , Form - , maybeAuth - , requireAuth - , module Settings - , module Model - ) where - -import Prelude -import Yesod -import Yesod.Static -import Yesod.Auth -import Yesod.Auth.BrowserId -import Yesod.Auth.GoogleEmail -import Yesod.Default.Config -import Yesod.Default.Util (addStaticContentExternal) -import Yesod.Logger (Logger, logMsg, formatLogText) -import Network.HTTP.Conduit (Manager) -import qualified Settings -import qualified Database.Persist.Store -import Settings.StaticFiles -import Database.Persist.GenericSql -import Settings (widgetFile, Extra (..)) -import Model -import Text.Jasmine (minifym) -import Web.ClientSession (getKey) -import Text.Hamlet (hamletFile) - --- | The site argument for your application. This can be a good place to --- keep settings and values requiring initialization before your application --- starts running, such as database connections. Every handler will have --- access to the data present here. -data App = App - { settings :: AppConfig DefaultEnv Extra - , getLogger :: Logger - , getStatic :: Static -- ^ Settings for static file serving. - , connPool :: Database.Persist.Store.PersistConfigPool Settings.PersistConfig -- ^ Database connection pool. - , httpManager :: Manager - , persistConfig :: Settings.PersistConfig - } - --- Set up i18n messages. See the message folder. -mkMessage "App" "messages" "en" - --- This is where we define all of the routes in our application. For a full --- explanation of the syntax, please see: --- http://www.yesodweb.com/book/handler --- --- This function does three things: --- --- * Creates the route datatype AppRoute. Every valid URL in your --- application can be represented as a value of this type. --- * Creates the associated type: --- type instance Route App = AppRoute --- * Creates the value resourcesApp which contains information on the --- resources declared below. This is used in Handler.hs by the call to --- mkYesodDispatch --- --- What this function does *not* do is create a YesodSite instance for --- App. Creating that instance requires all of the handler functions --- for our application to be in scope. However, the handler functions --- usually require access to the AppRoute datatype. Therefore, we --- split these actions into two functions and place them in separate files. -mkYesodData "App" $(parseRoutesFile "config/routes") - -type Form x = Html -> MForm App App (FormResult x, Widget) - --- Please see the documentation for the Yesod typeclass. There are a number --- of settings which can be configured by overriding methods here. -instance Yesod App where - approot = ApprootMaster $ appRoot . settings - - -- Store session data on the client in encrypted cookies, - -- default session idle timeout is 120 minutes - makeSessionBackend _ = do - key <- getKey "config/client_session_key.aes" - return . Just $ clientSessionBackend key 120 - - defaultLayout widget = do - master <- getYesod - mmsg <- getMessage - - -- We break up the default layout into two components: - -- default-layout is the contents of the body tag, and - -- default-layout-wrapper is the entire page. Since the final - -- value passed to hamletToRepHtml cannot be a widget, this allows - -- you to use normal widget features in default-layout. - - pc <- widgetToPageContent $ do - $(widgetFile "normalize") - addStylesheet $ StaticR css_bootstrap_css - $(widgetFile "default-layout") - hamletToRepHtml $(hamletFile "templates/default-layout-wrapper.hamlet") - - -- This is done to provide an optimization for serving static files from - -- a separate domain. Please see the staticRoot setting in Settings.hs - urlRenderOverride y (StaticR s) = - Just $ uncurry (joinPath y (Settings.staticRoot $ settings y)) $ renderRoute s - urlRenderOverride _ _ = Nothing - - -- The page to be redirected to when authentication is required. - authRoute _ = Just $ AuthR LoginR - - messageLogger y loc level msg = - formatLogText (getLogger y) loc level msg >>= logMsg (getLogger y) - - -- This function creates static content files in the static folder - -- and names them based on a hash of their content. This allows - -- expiration dates to be set far in the future without worry of - -- users receiving stale content. - addStaticContent = addStaticContentExternal minifym base64md5 Settings.staticDir (StaticR . flip StaticRoute []) - - -- Place Javascript at bottom of the body tag so the rest of the page loads first - jsLoader _ = BottomOfBody - --- How to run database actions. -instance YesodPersist App where - type YesodPersistBackend App = SqlPersist - runDB f = do - master <- getYesod - Database.Persist.Store.runPool - (persistConfig master) - f - (connPool master) - -instance YesodAuth App where - type AuthId App = UserId - - -- Where to send a user after successful login - loginDest _ = HomeR - -- Where to send a user after logout - logoutDest _ = HomeR - - getAuthId creds = runDB $ do - x <- getBy $ UniqueUser $ credsIdent creds - case x of - Just (Entity uid _) -> return $ Just uid - Nothing -> do - fmap Just $ insert $ User (credsIdent creds) Nothing - - -- You can add other plugins like BrowserID, email or OAuth here - authPlugins _ = [authBrowserId, authGoogleEmail] - - authHttpManager = httpManager - --- This instance is required to use forms. You can modify renderMessage to --- achieve customized and internationalized form validation messages. -instance RenderMessage App FormMessage where - renderMessage _ _ = defaultFormMessage - --- Note: previous versions of the scaffolding included a deliver function to --- send emails. Unfortunately, there are too many different options for us to --- give a reasonable default. Instead, the information is available on the --- wiki: --- --- https://github.com/yesodweb/yesod/wiki/Sending-email diff --git a/msgpack-idl-web/src/Handler/Home.hs b/msgpack-idl-web/src/Handler/Home.hs deleted file mode 100644 index c0ee0c2..0000000 --- a/msgpack-idl-web/src/Handler/Home.hs +++ /dev/null @@ -1,59 +0,0 @@ -{-# LANGUAGE TupleSections, OverloadedStrings, ViewPatterns #-} -module Handler.Home where - -import Import - -import Data.Maybe -import qualified Data.Text.Lazy as LT -import qualified Filesystem as FS -import Shelly -import Text.Shakespeare.Text - -defaultCode :: Text -defaultCode = [st| -message hoge { - 0: int moge - 1: map hage -} - -service test { - void foo(0: hoge x) -} -|] - -getHomeR :: Handler RepHtml -getHomeR = do - let submission = Nothing :: Maybe (FileInfo, Text) - handlerName = "getHomeR" :: Text - defaultLayout $ do - aDomId <- lift newIdent - setTitle "MessagePack IDL Code Generator" - $(widgetFile "homepage") - -postHomeR :: Handler (ContentType, Content) -postHomeR = do - (fromMaybe "noname" -> name, source, lang, namespace) <- runInputPost $ (,,,) - <$> iopt textField "name" - <*> ireq textField "source" - <*> ireq textField "lang" - <*> iopt textField "namespace" - - let tarname = [lt|#{name}.tar.bz2|] - idlname = [lt|#{name}.idl|] - - let opts = map LT.fromStrict $ case (lang, namespace) of - ("cpp", Just ns) -> ["-n", ns] - ("java", Just pn) -> ["-p", pn] - ("ruby", Just mn) -> ["-m", mn] - _ -> [] - - archive <- shelly $ do - withTmpDir $ \tmppath -> chdir tmppath $ do - writefile (fromText idlname) $ LT.fromStrict source - run_ "mpidl" $ [LT.fromStrict lang, "-o", [lt|#{name}|], idlname] ++ opts - run_ "tar" ["-cjf", tarname, [lt|#{name}|]] - p <- pwd - liftIO $ FS.readFile $ p fromText tarname - - setHeader "Content-Disposition" [st|attachment; filename="#{tarname}"|] - return ("application/x-bz2", toContent archive) diff --git a/msgpack-idl-web/src/Import.hs b/msgpack-idl-web/src/Import.hs deleted file mode 100644 index 641de38..0000000 --- a/msgpack-idl-web/src/Import.hs +++ /dev/null @@ -1,28 +0,0 @@ -module Import - ( module Prelude - , module Yesod - , module Foundation - , module Settings.StaticFiles - , module Settings.Development - , module Data.Monoid - , module Control.Applicative - , Text -#if __GLASGOW_HASKELL__ < 704 - , (<>) -#endif - ) where - -import Prelude hiding (writeFile, readFile, head, tail, init, last) -import Yesod hiding (Route(..)) -import Foundation -import Data.Monoid (Monoid (mappend, mempty, mconcat)) -import Control.Applicative ((<$>), (<*>), pure) -import Data.Text (Text) -import Settings.StaticFiles -import Settings.Development - -#if __GLASGOW_HASKELL__ < 704 -infixr 5 <> -(<>) :: Monoid m => m -> m -> m -(<>) = mappend -#endif diff --git a/msgpack-idl-web/src/Model.hs b/msgpack-idl-web/src/Model.hs deleted file mode 100644 index 12f6697..0000000 --- a/msgpack-idl-web/src/Model.hs +++ /dev/null @@ -1,14 +0,0 @@ -module Model where - -import Prelude -import Yesod -import Data.Text (Text) -import Database.Persist.Quasi - - --- You can define all of your database entities in the entities file. --- You can find more information on persistent and how to declare entities --- at: --- http://www.yesodweb.com/book/persistent/ -share [mkPersist sqlSettings, mkMigrate "migrateAll"] - $(persistFileWith lowerCaseSettings "config/models") diff --git a/msgpack-idl-web/src/Settings.hs b/msgpack-idl-web/src/Settings.hs deleted file mode 100644 index f9f7075..0000000 --- a/msgpack-idl-web/src/Settings.hs +++ /dev/null @@ -1,68 +0,0 @@ --- | Settings are centralized, as much as possible, into this file. This --- includes database connection settings, static file locations, etc. --- In addition, you can configure a number of different aspects of Yesod --- by overriding methods in the Yesod typeclass. That instance is --- declared in the Foundation.hs file. -module Settings - ( widgetFile - , PersistConfig - , staticRoot - , staticDir - , Extra (..) - , parseExtra - ) where - -import Prelude -import Text.Shakespeare.Text (st) -import Language.Haskell.TH.Syntax -import Database.Persist.Sqlite (SqliteConf) -import Yesod.Default.Config -import qualified Yesod.Default.Util -import Data.Text (Text) -import Data.Yaml -import Control.Applicative -import Settings.Development - --- | Which Persistent backend this site is using. -type PersistConfig = SqliteConf - --- Static setting below. Changing these requires a recompile - --- | The location of static files on your system. This is a file system --- path. The default value works properly with your scaffolded site. -staticDir :: FilePath -staticDir = "static" - --- | The base URL for your static files. As you can see by the default --- value, this can simply be "static" appended to your application root. --- A powerful optimization can be serving static files from a separate --- domain name. This allows you to use a web server optimized for static --- files, more easily set expires and cache values, and avoid possibly --- costly transference of cookies on static files. For more information, --- please see: --- http://code.google.com/speed/page-speed/docs/request.html#ServeFromCookielessDomain --- --- If you change the resource pattern for StaticR in Foundation.hs, you will --- have to make a corresponding change here. --- --- To see how this value is used, see urlRenderOverride in Foundation.hs -staticRoot :: AppConfig DefaultEnv x -> Text -staticRoot conf = [st|#{appRoot conf}/static|] - - --- The rest of this file contains settings which rarely need changing by a --- user. - -widgetFile :: String -> Q Exp -widgetFile = if development then Yesod.Default.Util.widgetFileReload - else Yesod.Default.Util.widgetFileNoReload - -data Extra = Extra - { extraCopyright :: Text - , extraAnalytics :: Maybe Text -- ^ Google Analytics - } deriving Show - -parseExtra :: DefaultEnv -> Object -> Parser Extra -parseExtra _ o = Extra - <$> o .: "copyright" - <*> o .:? "analytics" diff --git a/msgpack-idl-web/src/Settings/Development.hs b/msgpack-idl-web/src/Settings/Development.hs deleted file mode 100644 index 73613f0..0000000 --- a/msgpack-idl-web/src/Settings/Development.hs +++ /dev/null @@ -1,14 +0,0 @@ -module Settings.Development where - -import Prelude - -development :: Bool -development = -#if DEVELOPMENT - True -#else - False -#endif - -production :: Bool -production = not development diff --git a/msgpack-idl-web/src/Settings/StaticFiles.hs b/msgpack-idl-web/src/Settings/StaticFiles.hs deleted file mode 100644 index 2510795..0000000 --- a/msgpack-idl-web/src/Settings/StaticFiles.hs +++ /dev/null @@ -1,18 +0,0 @@ -module Settings.StaticFiles where - -import Prelude (IO) -import Yesod.Static -import qualified Yesod.Static as Static -import Settings (staticDir) -import Settings.Development - --- | use this to create your static file serving site -staticSite :: IO Static.Static -staticSite = if development then Static.staticDevel staticDir - else Static.static staticDir - --- | This generates easy references to files in the static directory at compile time, --- giving you compile-time verification that referenced files exist. --- Warning: any files added to your static directory during run-time can't be --- accessed this way. You'll have to use their FilePath or URL to access them. -$(staticFiles Settings.staticDir) diff --git a/msgpack-idl-web/src/devel.hs b/msgpack-idl-web/src/devel.hs deleted file mode 100644 index 6ce1f7f..0000000 --- a/msgpack-idl-web/src/devel.hs +++ /dev/null @@ -1,26 +0,0 @@ -{-# LANGUAGE PackageImports #-} -import "mpidl-web" Application (getApplicationDev) -import Network.Wai.Handler.Warp - (runSettings, defaultSettings, settingsPort) -import Control.Concurrent (forkIO) -import System.Directory (doesFileExist, removeFile) -import System.Exit (exitSuccess) -import Control.Concurrent (threadDelay) - -main :: IO () -main = do - putStrLn "Starting devel application" - (port, app) <- getApplicationDev - forkIO $ runSettings defaultSettings - { settingsPort = port - } app - loop - -loop :: IO () -loop = do - threadDelay 100000 - e <- doesFileExist "dist/devel-terminate" - if e then terminateDevel else loop - -terminateDevel :: IO () -terminateDevel = exitSuccess diff --git a/msgpack-idl-web/src/main.hs b/msgpack-idl-web/src/main.hs deleted file mode 100644 index a059fcb..0000000 --- a/msgpack-idl-web/src/main.hs +++ /dev/null @@ -1,8 +0,0 @@ -import Prelude (IO) -import Yesod.Default.Config (fromArgs) -import Yesod.Default.Main (defaultMain) -import Settings (parseExtra) -import Application (makeApplication) - -main :: IO () -main = defaultMain (fromArgs parseExtra) makeApplication diff --git a/msgpack-idl-web/static/css/bootstrap.css b/msgpack-idl-web/static/css/bootstrap.css deleted file mode 100644 index 495188a..0000000 --- a/msgpack-idl-web/static/css/bootstrap.css +++ /dev/null @@ -1,3990 +0,0 @@ -/*! - * Bootstrap v2.0.2 - * - * Copyright 2012 Twitter, Inc - * Licensed under the Apache License v2.0 - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Designed and built with all the love in the world @twitter by @mdo and @fat. - */ -article, -aside, -details, -figcaption, -figure, -footer, -header, -hgroup, -nav, -section { - display: block; -} -audio, -canvas, -video { - display: inline-block; - *display: inline; - *zoom: 1; -} -audio:not([controls]) { - display: none; -} -html { - font-size: 100%; - -webkit-text-size-adjust: 100%; - -ms-text-size-adjust: 100%; -} -a:focus { - outline: thin dotted #333; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -a:hover, -a:active { - outline: 0; -} -sub, -sup { - position: relative; - font-size: 75%; - line-height: 0; - vertical-align: baseline; -} -sup { - top: -0.5em; -} -sub { - bottom: -0.25em; -} -img { - height: auto; - border: 0; - -ms-interpolation-mode: bicubic; - vertical-align: middle; -} -button, -input, -select, -textarea { - margin: 0; - font-size: 100%; - vertical-align: middle; -} -button, -input { - *overflow: visible; - line-height: normal; -} -button::-moz-focus-inner, -input::-moz-focus-inner { - padding: 0; - border: 0; -} -button, -input[type="button"], -input[type="reset"], -input[type="submit"] { - cursor: pointer; - -webkit-appearance: button; -} -input[type="search"] { - -webkit-appearance: textfield; - -webkit-box-sizing: content-box; - -moz-box-sizing: content-box; - box-sizing: content-box; -} -input[type="search"]::-webkit-search-decoration, -input[type="search"]::-webkit-search-cancel-button { - -webkit-appearance: none; -} -textarea { - overflow: auto; - vertical-align: top; -} -.clearfix { - *zoom: 1; -} -.clearfix:before, -.clearfix:after { - display: table; - content: ""; -} -.clearfix:after { - clear: both; -} -.hide-text { - overflow: hidden; - text-indent: 100%; - white-space: nowrap; -} -.input-block-level { - display: block; - width: 100%; - min-height: 28px; - /* Make inputs at least the height of their button counterpart */ - - /* Makes inputs behave like true block-level elements */ - - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - -ms-box-sizing: border-box; - box-sizing: border-box; -} -body { - margin: 0; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 13px; - line-height: 18px; - color: #333333; - background-color: #ffffff; -} -a { - color: #0088cc; - text-decoration: none; -} -a:hover { - color: #005580; - text-decoration: underline; -} -.row { - margin-left: -20px; - *zoom: 1; -} -.row:before, -.row:after { - display: table; - content: ""; -} -.row:after { - clear: both; -} -[class*="span"] { - float: left; - margin-left: 20px; -} -.container, -.navbar-fixed-top .container, -.navbar-fixed-bottom .container { - width: 940px; -} -.span12 { - width: 940px; -} -.span11 { - width: 860px; -} -.span10 { - width: 780px; -} -.span9 { - width: 700px; -} -.span8 { - width: 620px; -} -.span7 { - width: 540px; -} -.span6 { - width: 460px; -} -.span5 { - width: 380px; -} -.span4 { - width: 300px; -} -.span3 { - width: 220px; -} -.span2 { - width: 140px; -} -.span1 { - width: 60px; -} -.offset12 { - margin-left: 980px; -} -.offset11 { - margin-left: 900px; -} -.offset10 { - margin-left: 820px; -} -.offset9 { - margin-left: 740px; -} -.offset8 { - margin-left: 660px; -} -.offset7 { - margin-left: 580px; -} -.offset6 { - margin-left: 500px; -} -.offset5 { - margin-left: 420px; -} -.offset4 { - margin-left: 340px; -} -.offset3 { - margin-left: 260px; -} -.offset2 { - margin-left: 180px; -} -.offset1 { - margin-left: 100px; -} -.row-fluid { - width: 100%; - *zoom: 1; -} -.row-fluid:before, -.row-fluid:after { - display: table; - content: ""; -} -.row-fluid:after { - clear: both; -} -.row-fluid > [class*="span"] { - float: left; - margin-left: 2.127659574%; -} -.row-fluid > [class*="span"]:first-child { - margin-left: 0; -} -.row-fluid > .span12 { - width: 99.99999998999999%; -} -.row-fluid > .span11 { - width: 91.489361693%; -} -.row-fluid > .span10 { - width: 82.97872339599999%; -} -.row-fluid > .span9 { - width: 74.468085099%; -} -.row-fluid > .span8 { - width: 65.95744680199999%; -} -.row-fluid > .span7 { - width: 57.446808505%; -} -.row-fluid > .span6 { - width: 48.93617020799999%; -} -.row-fluid > .span5 { - width: 40.425531911%; -} -.row-fluid > .span4 { - width: 31.914893614%; -} -.row-fluid > .span3 { - width: 23.404255317%; -} -.row-fluid > .span2 { - width: 14.89361702%; -} -.row-fluid > .span1 { - width: 6.382978723%; -} -.container { - margin-left: auto; - margin-right: auto; - *zoom: 1; -} -.container:before, -.container:after { - display: table; - content: ""; -} -.container:after { - clear: both; -} -.container-fluid { - padding-left: 20px; - padding-right: 20px; - *zoom: 1; -} -.container-fluid:before, -.container-fluid:after { - display: table; - content: ""; -} -.container-fluid:after { - clear: both; -} -p { - margin: 0 0 9px; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 13px; - line-height: 18px; -} -p small { - font-size: 11px; - color: #999999; -} -.lead { - margin-bottom: 18px; - font-size: 20px; - font-weight: 200; - line-height: 27px; -} -h1, -h2, -h3, -h4, -h5, -h6 { - margin: 0; - font-family: inherit; - font-weight: bold; - color: inherit; - text-rendering: optimizelegibility; -} -h1 small, -h2 small, -h3 small, -h4 small, -h5 small, -h6 small { - font-weight: normal; - color: #999999; -} -h1 { - font-size: 30px; - line-height: 36px; -} -h1 small { - font-size: 18px; -} -h2 { - font-size: 24px; - line-height: 36px; -} -h2 small { - font-size: 18px; -} -h3 { - line-height: 27px; - font-size: 18px; -} -h3 small { - font-size: 14px; -} -h4, -h5, -h6 { - line-height: 18px; -} -h4 { - font-size: 14px; -} -h4 small { - font-size: 12px; -} -h5 { - font-size: 12px; -} -h6 { - font-size: 11px; - color: #999999; - text-transform: uppercase; -} -.page-header { - padding-bottom: 17px; - margin: 18px 0; - border-bottom: 1px solid #eeeeee; -} -.page-header h1 { - line-height: 1; -} -ul, -ol { - padding: 0; - margin: 0 0 9px 25px; -} -ul ul, -ul ol, -ol ol, -ol ul { - margin-bottom: 0; -} -ul { - list-style: disc; -} -ol { - list-style: decimal; -} -li { - line-height: 18px; -} -ul.unstyled, -ol.unstyled { - margin-left: 0; - list-style: none; -} -dl { - margin-bottom: 18px; -} -dt, -dd { - line-height: 18px; -} -dt { - font-weight: bold; - line-height: 17px; -} -dd { - margin-left: 9px; -} -.dl-horizontal dt { - float: left; - clear: left; - width: 120px; - text-align: right; -} -.dl-horizontal dd { - margin-left: 130px; -} -hr { - margin: 18px 0; - border: 0; - border-top: 1px solid #eeeeee; - border-bottom: 1px solid #ffffff; -} -strong { - font-weight: bold; -} -em { - font-style: italic; -} -.muted { - color: #999999; -} -abbr[title] { - border-bottom: 1px dotted #ddd; - cursor: help; -} -abbr.initialism { - font-size: 90%; - text-transform: uppercase; -} -blockquote { - padding: 0 0 0 15px; - margin: 0 0 18px; - border-left: 5px solid #eeeeee; -} -blockquote p { - margin-bottom: 0; - font-size: 16px; - font-weight: 300; - line-height: 22.5px; -} -blockquote small { - display: block; - line-height: 18px; - color: #999999; -} -blockquote small:before { - content: '\2014 \00A0'; -} -blockquote.pull-right { - float: right; - padding-left: 0; - padding-right: 15px; - border-left: 0; - border-right: 5px solid #eeeeee; -} -blockquote.pull-right p, -blockquote.pull-right small { - text-align: right; -} -q:before, -q:after, -blockquote:before, -blockquote:after { - content: ""; -} -address { - display: block; - margin-bottom: 18px; - line-height: 18px; - font-style: normal; -} -small { - font-size: 100%; -} -cite { - font-style: normal; -} -code, -pre { - padding: 0 3px 2px; - font-family: Menlo, Monaco, "Courier New", monospace; - font-size: 12px; - color: #333333; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} -code { - padding: 2px 4px; - color: #d14; - background-color: #f7f7f9; - border: 1px solid #e1e1e8; -} -pre { - display: block; - padding: 8.5px; - margin: 0 0 9px; - font-size: 12.025px; - line-height: 18px; - background-color: #f5f5f5; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, 0.15); - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - white-space: pre; - white-space: pre-wrap; - word-break: break-all; - word-wrap: break-word; -} -pre.prettyprint { - margin-bottom: 18px; -} -pre code { - padding: 0; - color: inherit; - background-color: transparent; - border: 0; -} -.pre-scrollable { - max-height: 340px; - overflow-y: scroll; -} -form { - margin: 0 0 18px; -} -fieldset { - padding: 0; - margin: 0; - border: 0; -} -legend { - display: block; - width: 100%; - padding: 0; - margin-bottom: 27px; - font-size: 19.5px; - line-height: 36px; - color: #333333; - border: 0; - border-bottom: 1px solid #eee; -} -legend small { - font-size: 13.5px; - color: #999999; -} -label, -input, -button, -select, -textarea { - font-size: 13px; - font-weight: normal; - line-height: 18px; -} -input, -button, -select, -textarea { - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; -} -label { - display: block; - margin-bottom: 5px; - color: #333333; -} -input, -textarea, -select, -.uneditable-input { - display: inline-block; - width: 210px; - height: 18px; - padding: 4px; - margin-bottom: 9px; - font-size: 13px; - line-height: 18px; - color: #555555; - border: 1px solid #cccccc; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} -.uneditable-textarea { - width: auto; - height: auto; -} -label input, -label textarea, -label select { - display: block; -} -input[type="image"], -input[type="checkbox"], -input[type="radio"] { - width: auto; - height: auto; - padding: 0; - margin: 3px 0; - *margin-top: 0; - /* IE7 */ - - line-height: normal; - cursor: pointer; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; - border: 0 \9; - /* IE9 and down */ - -} -input[type="image"] { - border: 0; -} -input[type="file"] { - width: auto; - padding: initial; - line-height: initial; - border: initial; - background-color: #ffffff; - background-color: initial; - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; -} -input[type="button"], -input[type="reset"], -input[type="submit"] { - width: auto; - height: auto; -} -select, -input[type="file"] { - height: 28px; - /* In IE7, the height of the select element cannot be changed by height, only font-size */ - - *margin-top: 4px; - /* For IE7, add top margin to align select with labels */ - - line-height: 28px; -} -input[type="file"] { - line-height: 18px \9; -} -select { - width: 220px; - background-color: #ffffff; -} -select[multiple], -select[size] { - height: auto; -} -input[type="image"] { - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; -} -textarea { - height: auto; -} -input[type="hidden"] { - display: none; -} -.radio, -.checkbox { - padding-left: 18px; -} -.radio input[type="radio"], -.checkbox input[type="checkbox"] { - float: left; - margin-left: -18px; -} -.controls > .radio:first-child, -.controls > .checkbox:first-child { - padding-top: 5px; -} -.radio.inline, -.checkbox.inline { - display: inline-block; - padding-top: 5px; - margin-bottom: 0; - vertical-align: middle; -} -.radio.inline + .radio.inline, -.checkbox.inline + .checkbox.inline { - margin-left: 10px; -} -input, -textarea { - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -webkit-transition: border linear 0.2s, box-shadow linear 0.2s; - -moz-transition: border linear 0.2s, box-shadow linear 0.2s; - -ms-transition: border linear 0.2s, box-shadow linear 0.2s; - -o-transition: border linear 0.2s, box-shadow linear 0.2s; - transition: border linear 0.2s, box-shadow linear 0.2s; -} -input:focus, -textarea:focus { - border-color: rgba(82, 168, 236, 0.8); - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); - outline: 0; - outline: thin dotted \9; - /* IE6-9 */ - -} -input[type="file"]:focus, -input[type="radio"]:focus, -input[type="checkbox"]:focus, -select:focus { - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; - outline: thin dotted #333; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -.input-mini { - width: 60px; -} -.input-small { - width: 90px; -} -.input-medium { - width: 150px; -} -.input-large { - width: 210px; -} -.input-xlarge { - width: 270px; -} -.input-xxlarge { - width: 530px; -} -input[class*="span"], -select[class*="span"], -textarea[class*="span"], -.uneditable-input { - float: none; - margin-left: 0; -} -input, -textarea, -.uneditable-input { - margin-left: 0; -} -input.span12, textarea.span12, .uneditable-input.span12 { - width: 930px; -} -input.span11, textarea.span11, .uneditable-input.span11 { - width: 850px; -} -input.span10, textarea.span10, .uneditable-input.span10 { - width: 770px; -} -input.span9, textarea.span9, .uneditable-input.span9 { - width: 690px; -} -input.span8, textarea.span8, .uneditable-input.span8 { - width: 610px; -} -input.span7, textarea.span7, .uneditable-input.span7 { - width: 530px; -} -input.span6, textarea.span6, .uneditable-input.span6 { - width: 450px; -} -input.span5, textarea.span5, .uneditable-input.span5 { - width: 370px; -} -input.span4, textarea.span4, .uneditable-input.span4 { - width: 290px; -} -input.span3, textarea.span3, .uneditable-input.span3 { - width: 210px; -} -input.span2, textarea.span2, .uneditable-input.span2 { - width: 130px; -} -input.span1, textarea.span1, .uneditable-input.span1 { - width: 50px; -} -input[disabled], -select[disabled], -textarea[disabled], -input[readonly], -select[readonly], -textarea[readonly] { - background-color: #eeeeee; - border-color: #ddd; - cursor: not-allowed; -} -.control-group.warning > label, -.control-group.warning .help-block, -.control-group.warning .help-inline { - color: #c09853; -} -.control-group.warning input, -.control-group.warning select, -.control-group.warning textarea { - color: #c09853; - border-color: #c09853; -} -.control-group.warning input:focus, -.control-group.warning select:focus, -.control-group.warning textarea:focus { - border-color: #a47e3c; - -webkit-box-shadow: 0 0 6px #dbc59e; - -moz-box-shadow: 0 0 6px #dbc59e; - box-shadow: 0 0 6px #dbc59e; -} -.control-group.warning .input-prepend .add-on, -.control-group.warning .input-append .add-on { - color: #c09853; - background-color: #fcf8e3; - border-color: #c09853; -} -.control-group.error > label, -.control-group.error .help-block, -.control-group.error .help-inline { - color: #b94a48; -} -.control-group.error input, -.control-group.error select, -.control-group.error textarea { - color: #b94a48; - border-color: #b94a48; -} -.control-group.error input:focus, -.control-group.error select:focus, -.control-group.error textarea:focus { - border-color: #953b39; - -webkit-box-shadow: 0 0 6px #d59392; - -moz-box-shadow: 0 0 6px #d59392; - box-shadow: 0 0 6px #d59392; -} -.control-group.error .input-prepend .add-on, -.control-group.error .input-append .add-on { - color: #b94a48; - background-color: #f2dede; - border-color: #b94a48; -} -.control-group.success > label, -.control-group.success .help-block, -.control-group.success .help-inline { - color: #468847; -} -.control-group.success input, -.control-group.success select, -.control-group.success textarea { - color: #468847; - border-color: #468847; -} -.control-group.success input:focus, -.control-group.success select:focus, -.control-group.success textarea:focus { - border-color: #356635; - -webkit-box-shadow: 0 0 6px #7aba7b; - -moz-box-shadow: 0 0 6px #7aba7b; - box-shadow: 0 0 6px #7aba7b; -} -.control-group.success .input-prepend .add-on, -.control-group.success .input-append .add-on { - color: #468847; - background-color: #dff0d8; - border-color: #468847; -} -input:focus:required:invalid, -textarea:focus:required:invalid, -select:focus:required:invalid { - color: #b94a48; - border-color: #ee5f5b; -} -input:focus:required:invalid:focus, -textarea:focus:required:invalid:focus, -select:focus:required:invalid:focus { - border-color: #e9322d; - -webkit-box-shadow: 0 0 6px #f8b9b7; - -moz-box-shadow: 0 0 6px #f8b9b7; - box-shadow: 0 0 6px #f8b9b7; -} -.form-actions { - padding: 17px 20px 18px; - margin-top: 18px; - margin-bottom: 18px; - background-color: #eeeeee; - border-top: 1px solid #ddd; - *zoom: 1; -} -.form-actions:before, -.form-actions:after { - display: table; - content: ""; -} -.form-actions:after { - clear: both; -} -.uneditable-input { - display: block; - background-color: #ffffff; - border-color: #eee; - -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); - -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); - box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); - cursor: not-allowed; -} -:-moz-placeholder { - color: #999999; -} -::-webkit-input-placeholder { - color: #999999; -} -.help-block, -.help-inline { - color: #555555; -} -.help-block { - display: block; - margin-bottom: 9px; -} -.help-inline { - display: inline-block; - *display: inline; - /* IE7 inline-block hack */ - - *zoom: 1; - vertical-align: middle; - padding-left: 5px; -} -.input-prepend, -.input-append { - margin-bottom: 5px; -} -.input-prepend input, -.input-append input, -.input-prepend select, -.input-append select, -.input-prepend .uneditable-input, -.input-append .uneditable-input { - *margin-left: 0; - -webkit-border-radius: 0 3px 3px 0; - -moz-border-radius: 0 3px 3px 0; - border-radius: 0 3px 3px 0; -} -.input-prepend input:focus, -.input-append input:focus, -.input-prepend select:focus, -.input-append select:focus, -.input-prepend .uneditable-input:focus, -.input-append .uneditable-input:focus { - position: relative; - z-index: 2; -} -.input-prepend .uneditable-input, -.input-append .uneditable-input { - border-left-color: #ccc; -} -.input-prepend .add-on, -.input-append .add-on { - display: inline-block; - width: auto; - min-width: 16px; - height: 18px; - padding: 4px 5px; - font-weight: normal; - line-height: 18px; - text-align: center; - text-shadow: 0 1px 0 #ffffff; - vertical-align: middle; - background-color: #eeeeee; - border: 1px solid #ccc; -} -.input-prepend .add-on, -.input-append .add-on, -.input-prepend .btn, -.input-append .btn { - -webkit-border-radius: 3px 0 0 3px; - -moz-border-radius: 3px 0 0 3px; - border-radius: 3px 0 0 3px; -} -.input-prepend .active, -.input-append .active { - background-color: #a9dba9; - border-color: #46a546; -} -.input-prepend .add-on, -.input-prepend .btn { - margin-right: -1px; -} -.input-append input, -.input-append select .uneditable-input { - -webkit-border-radius: 3px 0 0 3px; - -moz-border-radius: 3px 0 0 3px; - border-radius: 3px 0 0 3px; -} -.input-append .uneditable-input { - border-left-color: #eee; - border-right-color: #ccc; -} -.input-append .add-on, -.input-append .btn { - margin-left: -1px; - -webkit-border-radius: 0 3px 3px 0; - -moz-border-radius: 0 3px 3px 0; - border-radius: 0 3px 3px 0; -} -.input-prepend.input-append input, -.input-prepend.input-append select, -.input-prepend.input-append .uneditable-input { - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} -.input-prepend.input-append .add-on:first-child, -.input-prepend.input-append .btn:first-child { - margin-right: -1px; - -webkit-border-radius: 3px 0 0 3px; - -moz-border-radius: 3px 0 0 3px; - border-radius: 3px 0 0 3px; -} -.input-prepend.input-append .add-on:last-child, -.input-prepend.input-append .btn:last-child { - margin-left: -1px; - -webkit-border-radius: 0 3px 3px 0; - -moz-border-radius: 0 3px 3px 0; - border-radius: 0 3px 3px 0; -} -.search-query { - padding-left: 14px; - padding-right: 14px; - margin-bottom: 0; - -webkit-border-radius: 14px; - -moz-border-radius: 14px; - border-radius: 14px; -} -.form-search input, -.form-inline input, -.form-horizontal input, -.form-search textarea, -.form-inline textarea, -.form-horizontal textarea, -.form-search select, -.form-inline select, -.form-horizontal select, -.form-search .help-inline, -.form-inline .help-inline, -.form-horizontal .help-inline, -.form-search .uneditable-input, -.form-inline .uneditable-input, -.form-horizontal .uneditable-input, -.form-search .input-prepend, -.form-inline .input-prepend, -.form-horizontal .input-prepend, -.form-search .input-append, -.form-inline .input-append, -.form-horizontal .input-append { - display: inline-block; - margin-bottom: 0; -} -.form-search .hide, -.form-inline .hide, -.form-horizontal .hide { - display: none; -} -.form-search label, -.form-inline label { - display: inline-block; -} -.form-search .input-append, -.form-inline .input-append, -.form-search .input-prepend, -.form-inline .input-prepend { - margin-bottom: 0; -} -.form-search .radio, -.form-search .checkbox, -.form-inline .radio, -.form-inline .checkbox { - padding-left: 0; - margin-bottom: 0; - vertical-align: middle; -} -.form-search .radio input[type="radio"], -.form-search .checkbox input[type="checkbox"], -.form-inline .radio input[type="radio"], -.form-inline .checkbox input[type="checkbox"] { - float: left; - margin-left: 0; - margin-right: 3px; -} -.control-group { - margin-bottom: 9px; -} -legend + .control-group { - margin-top: 18px; - -webkit-margin-top-collapse: separate; -} -.form-horizontal .control-group { - margin-bottom: 18px; - *zoom: 1; -} -.form-horizontal .control-group:before, -.form-horizontal .control-group:after { - display: table; - content: ""; -} -.form-horizontal .control-group:after { - clear: both; -} -.form-horizontal .control-label { - float: left; - width: 140px; - padding-top: 5px; - text-align: right; -} -.form-horizontal .controls { - margin-left: 160px; - /* Super jank IE7 fix to ensure the inputs in .input-append and input-prepend don't inherit the margin of the parent, in this case .controls */ - - *display: inline-block; - *margin-left: 0; - *padding-left: 20px; -} -.form-horizontal .help-block { - margin-top: 9px; - margin-bottom: 0; -} -.form-horizontal .form-actions { - padding-left: 160px; -} -table { - max-width: 100%; - border-collapse: collapse; - border-spacing: 0; - background-color: transparent; -} -.table { - width: 100%; - margin-bottom: 18px; -} -.table th, -.table td { - padding: 8px; - line-height: 18px; - text-align: left; - vertical-align: top; - border-top: 1px solid #dddddd; -} -.table th { - font-weight: bold; -} -.table thead th { - vertical-align: bottom; -} -.table colgroup + thead tr:first-child th, -.table colgroup + thead tr:first-child td, -.table thead:first-child tr:first-child th, -.table thead:first-child tr:first-child td { - border-top: 0; -} -.table tbody + tbody { - border-top: 2px solid #dddddd; -} -.table-condensed th, -.table-condensed td { - padding: 4px 5px; -} -.table-bordered { - border: 1px solid #dddddd; - border-left: 0; - border-collapse: separate; - *border-collapse: collapsed; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} -.table-bordered th, -.table-bordered td { - border-left: 1px solid #dddddd; -} -.table-bordered thead:first-child tr:first-child th, -.table-bordered tbody:first-child tr:first-child th, -.table-bordered tbody:first-child tr:first-child td { - border-top: 0; -} -.table-bordered thead:first-child tr:first-child th:first-child, -.table-bordered tbody:first-child tr:first-child td:first-child { - -webkit-border-radius: 4px 0 0 0; - -moz-border-radius: 4px 0 0 0; - border-radius: 4px 0 0 0; -} -.table-bordered thead:first-child tr:first-child th:last-child, -.table-bordered tbody:first-child tr:first-child td:last-child { - -webkit-border-radius: 0 4px 0 0; - -moz-border-radius: 0 4px 0 0; - border-radius: 0 4px 0 0; -} -.table-bordered thead:last-child tr:last-child th:first-child, -.table-bordered tbody:last-child tr:last-child td:first-child { - -webkit-border-radius: 0 0 0 4px; - -moz-border-radius: 0 0 0 4px; - border-radius: 0 0 0 4px; -} -.table-bordered thead:last-child tr:last-child th:last-child, -.table-bordered tbody:last-child tr:last-child td:last-child { - -webkit-border-radius: 0 0 4px 0; - -moz-border-radius: 0 0 4px 0; - border-radius: 0 0 4px 0; -} -.table-striped tbody tr:nth-child(odd) td, -.table-striped tbody tr:nth-child(odd) th { - background-color: #f9f9f9; -} -.table tbody tr:hover td, -.table tbody tr:hover th { - background-color: #f5f5f5; -} -table .span1 { - float: none; - width: 44px; - margin-left: 0; -} -table .span2 { - float: none; - width: 124px; - margin-left: 0; -} -table .span3 { - float: none; - width: 204px; - margin-left: 0; -} -table .span4 { - float: none; - width: 284px; - margin-left: 0; -} -table .span5 { - float: none; - width: 364px; - margin-left: 0; -} -table .span6 { - float: none; - width: 444px; - margin-left: 0; -} -table .span7 { - float: none; - width: 524px; - margin-left: 0; -} -table .span8 { - float: none; - width: 604px; - margin-left: 0; -} -table .span9 { - float: none; - width: 684px; - margin-left: 0; -} -table .span10 { - float: none; - width: 764px; - margin-left: 0; -} -table .span11 { - float: none; - width: 844px; - margin-left: 0; -} -table .span12 { - float: none; - width: 924px; - margin-left: 0; -} -table .span13 { - float: none; - width: 1004px; - margin-left: 0; -} -table .span14 { - float: none; - width: 1084px; - margin-left: 0; -} -table .span15 { - float: none; - width: 1164px; - margin-left: 0; -} -table .span16 { - float: none; - width: 1244px; - margin-left: 0; -} -table .span17 { - float: none; - width: 1324px; - margin-left: 0; -} -table .span18 { - float: none; - width: 1404px; - margin-left: 0; -} -table .span19 { - float: none; - width: 1484px; - margin-left: 0; -} -table .span20 { - float: none; - width: 1564px; - margin-left: 0; -} -table .span21 { - float: none; - width: 1644px; - margin-left: 0; -} -table .span22 { - float: none; - width: 1724px; - margin-left: 0; -} -table .span23 { - float: none; - width: 1804px; - margin-left: 0; -} -table .span24 { - float: none; - width: 1884px; - margin-left: 0; -} -[class^="icon-"], -[class*=" icon-"] { - display: inline-block; - width: 14px; - height: 14px; - line-height: 14px; - vertical-align: text-top; - background-image: url("../img/glyphicons-halflings.png"); - background-position: 14px 14px; - background-repeat: no-repeat; - *margin-right: .3em; -} -[class^="icon-"]:last-child, -[class*=" icon-"]:last-child { - *margin-left: 0; -} -.icon-white { - background-image: url("../img/glyphicons-halflings-white.png"); -} -.icon-glass { - background-position: 0 0; -} -.icon-music { - background-position: -24px 0; -} -.icon-search { - background-position: -48px 0; -} -.icon-envelope { - background-position: -72px 0; -} -.icon-heart { - background-position: -96px 0; -} -.icon-star { - background-position: -120px 0; -} -.icon-star-empty { - background-position: -144px 0; -} -.icon-user { - background-position: -168px 0; -} -.icon-film { - background-position: -192px 0; -} -.icon-th-large { - background-position: -216px 0; -} -.icon-th { - background-position: -240px 0; -} -.icon-th-list { - background-position: -264px 0; -} -.icon-ok { - background-position: -288px 0; -} -.icon-remove { - background-position: -312px 0; -} -.icon-zoom-in { - background-position: -336px 0; -} -.icon-zoom-out { - background-position: -360px 0; -} -.icon-off { - background-position: -384px 0; -} -.icon-signal { - background-position: -408px 0; -} -.icon-cog { - background-position: -432px 0; -} -.icon-trash { - background-position: -456px 0; -} -.icon-home { - background-position: 0 -24px; -} -.icon-file { - background-position: -24px -24px; -} -.icon-time { - background-position: -48px -24px; -} -.icon-road { - background-position: -72px -24px; -} -.icon-download-alt { - background-position: -96px -24px; -} -.icon-download { - background-position: -120px -24px; -} -.icon-upload { - background-position: -144px -24px; -} -.icon-inbox { - background-position: -168px -24px; -} -.icon-play-circle { - background-position: -192px -24px; -} -.icon-repeat { - background-position: -216px -24px; -} -.icon-refresh { - background-position: -240px -24px; -} -.icon-list-alt { - background-position: -264px -24px; -} -.icon-lock { - background-position: -287px -24px; -} -.icon-flag { - background-position: -312px -24px; -} -.icon-headphones { - background-position: -336px -24px; -} -.icon-volume-off { - background-position: -360px -24px; -} -.icon-volume-down { - background-position: -384px -24px; -} -.icon-volume-up { - background-position: -408px -24px; -} -.icon-qrcode { - background-position: -432px -24px; -} -.icon-barcode { - background-position: -456px -24px; -} -.icon-tag { - background-position: 0 -48px; -} -.icon-tags { - background-position: -25px -48px; -} -.icon-book { - background-position: -48px -48px; -} -.icon-bookmark { - background-position: -72px -48px; -} -.icon-print { - background-position: -96px -48px; -} -.icon-camera { - background-position: -120px -48px; -} -.icon-font { - background-position: -144px -48px; -} -.icon-bold { - background-position: -167px -48px; -} -.icon-italic { - background-position: -192px -48px; -} -.icon-text-height { - background-position: -216px -48px; -} -.icon-text-width { - background-position: -240px -48px; -} -.icon-align-left { - background-position: -264px -48px; -} -.icon-align-center { - background-position: -288px -48px; -} -.icon-align-right { - background-position: -312px -48px; -} -.icon-align-justify { - background-position: -336px -48px; -} -.icon-list { - background-position: -360px -48px; -} -.icon-indent-left { - background-position: -384px -48px; -} -.icon-indent-right { - background-position: -408px -48px; -} -.icon-facetime-video { - background-position: -432px -48px; -} -.icon-picture { - background-position: -456px -48px; -} -.icon-pencil { - background-position: 0 -72px; -} -.icon-map-marker { - background-position: -24px -72px; -} -.icon-adjust { - background-position: -48px -72px; -} -.icon-tint { - background-position: -72px -72px; -} -.icon-edit { - background-position: -96px -72px; -} -.icon-share { - background-position: -120px -72px; -} -.icon-check { - background-position: -144px -72px; -} -.icon-move { - background-position: -168px -72px; -} -.icon-step-backward { - background-position: -192px -72px; -} -.icon-fast-backward { - background-position: -216px -72px; -} -.icon-backward { - background-position: -240px -72px; -} -.icon-play { - background-position: -264px -72px; -} -.icon-pause { - background-position: -288px -72px; -} -.icon-stop { - background-position: -312px -72px; -} -.icon-forward { - background-position: -336px -72px; -} -.icon-fast-forward { - background-position: -360px -72px; -} -.icon-step-forward { - background-position: -384px -72px; -} -.icon-eject { - background-position: -408px -72px; -} -.icon-chevron-left { - background-position: -432px -72px; -} -.icon-chevron-right { - background-position: -456px -72px; -} -.icon-plus-sign { - background-position: 0 -96px; -} -.icon-minus-sign { - background-position: -24px -96px; -} -.icon-remove-sign { - background-position: -48px -96px; -} -.icon-ok-sign { - background-position: -72px -96px; -} -.icon-question-sign { - background-position: -96px -96px; -} -.icon-info-sign { - background-position: -120px -96px; -} -.icon-screenshot { - background-position: -144px -96px; -} -.icon-remove-circle { - background-position: -168px -96px; -} -.icon-ok-circle { - background-position: -192px -96px; -} -.icon-ban-circle { - background-position: -216px -96px; -} -.icon-arrow-left { - background-position: -240px -96px; -} -.icon-arrow-right { - background-position: -264px -96px; -} -.icon-arrow-up { - background-position: -289px -96px; -} -.icon-arrow-down { - background-position: -312px -96px; -} -.icon-share-alt { - background-position: -336px -96px; -} -.icon-resize-full { - background-position: -360px -96px; -} -.icon-resize-small { - background-position: -384px -96px; -} -.icon-plus { - background-position: -408px -96px; -} -.icon-minus { - background-position: -433px -96px; -} -.icon-asterisk { - background-position: -456px -96px; -} -.icon-exclamation-sign { - background-position: 0 -120px; -} -.icon-gift { - background-position: -24px -120px; -} -.icon-leaf { - background-position: -48px -120px; -} -.icon-fire { - background-position: -72px -120px; -} -.icon-eye-open { - background-position: -96px -120px; -} -.icon-eye-close { - background-position: -120px -120px; -} -.icon-warning-sign { - background-position: -144px -120px; -} -.icon-plane { - background-position: -168px -120px; -} -.icon-calendar { - background-position: -192px -120px; -} -.icon-random { - background-position: -216px -120px; -} -.icon-comment { - background-position: -240px -120px; -} -.icon-magnet { - background-position: -264px -120px; -} -.icon-chevron-up { - background-position: -288px -120px; -} -.icon-chevron-down { - background-position: -313px -119px; -} -.icon-retweet { - background-position: -336px -120px; -} -.icon-shopping-cart { - background-position: -360px -120px; -} -.icon-folder-close { - background-position: -384px -120px; -} -.icon-folder-open { - background-position: -408px -120px; -} -.icon-resize-vertical { - background-position: -432px -119px; -} -.icon-resize-horizontal { - background-position: -456px -118px; -} -.dropdown { - position: relative; -} -.dropdown-toggle { - *margin-bottom: -3px; -} -.dropdown-toggle:active, -.open .dropdown-toggle { - outline: 0; -} -.caret { - display: inline-block; - width: 0; - height: 0; - vertical-align: top; - border-left: 4px solid transparent; - border-right: 4px solid transparent; - border-top: 4px solid #000000; - opacity: 0.3; - filter: alpha(opacity=30); - content: ""; -} -.dropdown .caret { - margin-top: 8px; - margin-left: 2px; -} -.dropdown:hover .caret, -.open.dropdown .caret { - opacity: 1; - filter: alpha(opacity=100); -} -.dropdown-menu { - position: absolute; - top: 100%; - left: 0; - z-index: 1000; - float: left; - display: none; - min-width: 160px; - padding: 4px 0; - margin: 0; - list-style: none; - background-color: #ffffff; - border-color: #ccc; - border-color: rgba(0, 0, 0, 0.2); - border-style: solid; - border-width: 1px; - -webkit-border-radius: 0 0 5px 5px; - -moz-border-radius: 0 0 5px 5px; - border-radius: 0 0 5px 5px; - -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; - *border-right-width: 2px; - *border-bottom-width: 2px; -} -.dropdown-menu.pull-right { - right: 0; - left: auto; -} -.dropdown-menu .divider { - height: 1px; - margin: 8px 1px; - overflow: hidden; - background-color: #e5e5e5; - border-bottom: 1px solid #ffffff; - *width: 100%; - *margin: -5px 0 5px; -} -.dropdown-menu a { - display: block; - padding: 3px 15px; - clear: both; - font-weight: normal; - line-height: 18px; - color: #333333; - white-space: nowrap; -} -.dropdown-menu li > a:hover, -.dropdown-menu .active > a, -.dropdown-menu .active > a:hover { - color: #ffffff; - text-decoration: none; - background-color: #0088cc; -} -.dropdown.open { - *z-index: 1000; -} -.dropdown.open .dropdown-toggle { - color: #ffffff; - background: #ccc; - background: rgba(0, 0, 0, 0.3); -} -.dropdown.open .dropdown-menu { - display: block; -} -.pull-right .dropdown-menu { - left: auto; - right: 0; -} -.dropup .caret, -.navbar-fixed-bottom .dropdown .caret { - border-top: 0; - border-bottom: 4px solid #000000; - content: "\2191"; -} -.dropup .dropdown-menu, -.navbar-fixed-bottom .dropdown .dropdown-menu { - top: auto; - bottom: 100%; - margin-bottom: 1px; -} -.typeahead { - margin-top: 2px; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} -.well { - min-height: 20px; - padding: 19px; - margin-bottom: 20px; - background-color: #f5f5f5; - border: 1px solid #eee; - border: 1px solid rgba(0, 0, 0, 0.05); - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); -} -.well blockquote { - border-color: #ddd; - border-color: rgba(0, 0, 0, 0.15); -} -.well-large { - padding: 24px; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; -} -.well-small { - padding: 9px; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} -.fade { - -webkit-transition: opacity 0.15s linear; - -moz-transition: opacity 0.15s linear; - -ms-transition: opacity 0.15s linear; - -o-transition: opacity 0.15s linear; - transition: opacity 0.15s linear; - opacity: 0; -} -.fade.in { - opacity: 1; -} -.collapse { - -webkit-transition: height 0.35s ease; - -moz-transition: height 0.35s ease; - -ms-transition: height 0.35s ease; - -o-transition: height 0.35s ease; - transition: height 0.35s ease; - position: relative; - overflow: hidden; - height: 0; -} -.collapse.in { - height: auto; -} -.close { - float: right; - font-size: 20px; - font-weight: bold; - line-height: 18px; - color: #000000; - text-shadow: 0 1px 0 #ffffff; - opacity: 0.2; - filter: alpha(opacity=20); -} -.close:hover { - color: #000000; - text-decoration: none; - opacity: 0.4; - filter: alpha(opacity=40); - cursor: pointer; -} -.btn { - display: inline-block; - *display: inline; - /* IE7 inline-block hack */ - - *zoom: 1; - padding: 4px 10px 4px; - margin-bottom: 0; - font-size: 13px; - line-height: 18px; - color: #333333; - text-align: center; - text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); - vertical-align: middle; - background-color: #f5f5f5; - background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6); - background-image: -ms-linear-gradient(top, #ffffff, #e6e6e6); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6)); - background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6); - background-image: -o-linear-gradient(top, #ffffff, #e6e6e6); - background-image: linear-gradient(top, #ffffff, #e6e6e6); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0); - border-color: #e6e6e6 #e6e6e6 #bfbfbf; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - filter: progid:dximagetransform.microsoft.gradient(enabled=false); - border: 1px solid #cccccc; - border-bottom-color: #b3b3b3; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); - -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); - cursor: pointer; - *margin-left: .3em; -} -.btn:hover, -.btn:active, -.btn.active, -.btn.disabled, -.btn[disabled] { - background-color: #e6e6e6; -} -.btn:active, -.btn.active { - background-color: #cccccc \9; -} -.btn:first-child { - *margin-left: 0; -} -.btn:hover { - color: #333333; - text-decoration: none; - background-color: #e6e6e6; - background-position: 0 -15px; - -webkit-transition: background-position 0.1s linear; - -moz-transition: background-position 0.1s linear; - -ms-transition: background-position 0.1s linear; - -o-transition: background-position 0.1s linear; - transition: background-position 0.1s linear; -} -.btn:focus { - outline: thin dotted #333; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -.btn.active, -.btn:active { - background-image: none; - -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); - -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); - background-color: #e6e6e6; - background-color: #d9d9d9 \9; - outline: 0; -} -.btn.disabled, -.btn[disabled] { - cursor: default; - background-image: none; - background-color: #e6e6e6; - opacity: 0.65; - filter: alpha(opacity=65); - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; -} -.btn-large { - padding: 9px 14px; - font-size: 15px; - line-height: normal; - -webkit-border-radius: 5px; - -moz-border-radius: 5px; - border-radius: 5px; -} -.btn-large [class^="icon-"] { - margin-top: 1px; -} -.btn-small { - padding: 5px 9px; - font-size: 11px; - line-height: 16px; -} -.btn-small [class^="icon-"] { - margin-top: -1px; -} -.btn-mini { - padding: 2px 6px; - font-size: 11px; - line-height: 14px; -} -.btn-primary, -.btn-primary:hover, -.btn-warning, -.btn-warning:hover, -.btn-danger, -.btn-danger:hover, -.btn-success, -.btn-success:hover, -.btn-info, -.btn-info:hover, -.btn-inverse, -.btn-inverse:hover { - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - color: #ffffff; -} -.btn-primary.active, -.btn-warning.active, -.btn-danger.active, -.btn-success.active, -.btn-info.active, -.btn-inverse.active { - color: rgba(255, 255, 255, 0.75); -} -.btn-primary { - background-color: #0074cc; - background-image: -moz-linear-gradient(top, #0088cc, #0055cc); - background-image: -ms-linear-gradient(top, #0088cc, #0055cc); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0055cc)); - background-image: -webkit-linear-gradient(top, #0088cc, #0055cc); - background-image: -o-linear-gradient(top, #0088cc, #0055cc); - background-image: linear-gradient(top, #0088cc, #0055cc); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0055cc', GradientType=0); - border-color: #0055cc #0055cc #003580; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - filter: progid:dximagetransform.microsoft.gradient(enabled=false); -} -.btn-primary:hover, -.btn-primary:active, -.btn-primary.active, -.btn-primary.disabled, -.btn-primary[disabled] { - background-color: #0055cc; -} -.btn-primary:active, -.btn-primary.active { - background-color: #004099 \9; -} -.btn-warning { - background-color: #faa732; - background-image: -moz-linear-gradient(top, #fbb450, #f89406); - background-image: -ms-linear-gradient(top, #fbb450, #f89406); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406)); - background-image: -webkit-linear-gradient(top, #fbb450, #f89406); - background-image: -o-linear-gradient(top, #fbb450, #f89406); - background-image: linear-gradient(top, #fbb450, #f89406); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbb450', endColorstr='#f89406', GradientType=0); - border-color: #f89406 #f89406 #ad6704; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - filter: progid:dximagetransform.microsoft.gradient(enabled=false); -} -.btn-warning:hover, -.btn-warning:active, -.btn-warning.active, -.btn-warning.disabled, -.btn-warning[disabled] { - background-color: #f89406; -} -.btn-warning:active, -.btn-warning.active { - background-color: #c67605 \9; -} -.btn-danger { - background-color: #da4f49; - background-image: -moz-linear-gradient(top, #ee5f5b, #bd362f); - background-image: -ms-linear-gradient(top, #ee5f5b, #bd362f); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f)); - background-image: -webkit-linear-gradient(top, #ee5f5b, #bd362f); - background-image: -o-linear-gradient(top, #ee5f5b, #bd362f); - background-image: linear-gradient(top, #ee5f5b, #bd362f); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#bd362f', GradientType=0); - border-color: #bd362f #bd362f #802420; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - filter: progid:dximagetransform.microsoft.gradient(enabled=false); -} -.btn-danger:hover, -.btn-danger:active, -.btn-danger.active, -.btn-danger.disabled, -.btn-danger[disabled] { - background-color: #bd362f; -} -.btn-danger:active, -.btn-danger.active { - background-color: #942a25 \9; -} -.btn-success { - background-color: #5bb75b; - background-image: -moz-linear-gradient(top, #62c462, #51a351); - background-image: -ms-linear-gradient(top, #62c462, #51a351); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351)); - background-image: -webkit-linear-gradient(top, #62c462, #51a351); - background-image: -o-linear-gradient(top, #62c462, #51a351); - background-image: linear-gradient(top, #62c462, #51a351); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#51a351', GradientType=0); - border-color: #51a351 #51a351 #387038; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - filter: progid:dximagetransform.microsoft.gradient(enabled=false); -} -.btn-success:hover, -.btn-success:active, -.btn-success.active, -.btn-success.disabled, -.btn-success[disabled] { - background-color: #51a351; -} -.btn-success:active, -.btn-success.active { - background-color: #408140 \9; -} -.btn-info { - background-color: #49afcd; - background-image: -moz-linear-gradient(top, #5bc0de, #2f96b4); - background-image: -ms-linear-gradient(top, #5bc0de, #2f96b4); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4)); - background-image: -webkit-linear-gradient(top, #5bc0de, #2f96b4); - background-image: -o-linear-gradient(top, #5bc0de, #2f96b4); - background-image: linear-gradient(top, #5bc0de, #2f96b4); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#2f96b4', GradientType=0); - border-color: #2f96b4 #2f96b4 #1f6377; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - filter: progid:dximagetransform.microsoft.gradient(enabled=false); -} -.btn-info:hover, -.btn-info:active, -.btn-info.active, -.btn-info.disabled, -.btn-info[disabled] { - background-color: #2f96b4; -} -.btn-info:active, -.btn-info.active { - background-color: #24748c \9; -} -.btn-inverse { - background-color: #414141; - background-image: -moz-linear-gradient(top, #555555, #222222); - background-image: -ms-linear-gradient(top, #555555, #222222); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#555555), to(#222222)); - background-image: -webkit-linear-gradient(top, #555555, #222222); - background-image: -o-linear-gradient(top, #555555, #222222); - background-image: linear-gradient(top, #555555, #222222); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#555555', endColorstr='#222222', GradientType=0); - border-color: #222222 #222222 #000000; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - filter: progid:dximagetransform.microsoft.gradient(enabled=false); -} -.btn-inverse:hover, -.btn-inverse:active, -.btn-inverse.active, -.btn-inverse.disabled, -.btn-inverse[disabled] { - background-color: #222222; -} -.btn-inverse:active, -.btn-inverse.active { - background-color: #080808 \9; -} -button.btn, -input[type="submit"].btn { - *padding-top: 2px; - *padding-bottom: 2px; -} -button.btn::-moz-focus-inner, -input[type="submit"].btn::-moz-focus-inner { - padding: 0; - border: 0; -} -button.btn.btn-large, -input[type="submit"].btn.btn-large { - *padding-top: 7px; - *padding-bottom: 7px; -} -button.btn.btn-small, -input[type="submit"].btn.btn-small { - *padding-top: 3px; - *padding-bottom: 3px; -} -button.btn.btn-mini, -input[type="submit"].btn.btn-mini { - *padding-top: 1px; - *padding-bottom: 1px; -} -.btn-group { - position: relative; - *zoom: 1; - *margin-left: .3em; -} -.btn-group:before, -.btn-group:after { - display: table; - content: ""; -} -.btn-group:after { - clear: both; -} -.btn-group:first-child { - *margin-left: 0; -} -.btn-group + .btn-group { - margin-left: 5px; -} -.btn-toolbar { - margin-top: 9px; - margin-bottom: 9px; -} -.btn-toolbar .btn-group { - display: inline-block; - *display: inline; - /* IE7 inline-block hack */ - - *zoom: 1; -} -.btn-group .btn { - position: relative; - float: left; - margin-left: -1px; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} -.btn-group .btn:first-child { - margin-left: 0; - -webkit-border-top-left-radius: 4px; - -moz-border-radius-topleft: 4px; - border-top-left-radius: 4px; - -webkit-border-bottom-left-radius: 4px; - -moz-border-radius-bottomleft: 4px; - border-bottom-left-radius: 4px; -} -.btn-group .btn:last-child, -.btn-group .dropdown-toggle { - -webkit-border-top-right-radius: 4px; - -moz-border-radius-topright: 4px; - border-top-right-radius: 4px; - -webkit-border-bottom-right-radius: 4px; - -moz-border-radius-bottomright: 4px; - border-bottom-right-radius: 4px; -} -.btn-group .btn.large:first-child { - margin-left: 0; - -webkit-border-top-left-radius: 6px; - -moz-border-radius-topleft: 6px; - border-top-left-radius: 6px; - -webkit-border-bottom-left-radius: 6px; - -moz-border-radius-bottomleft: 6px; - border-bottom-left-radius: 6px; -} -.btn-group .btn.large:last-child, -.btn-group .large.dropdown-toggle { - -webkit-border-top-right-radius: 6px; - -moz-border-radius-topright: 6px; - border-top-right-radius: 6px; - -webkit-border-bottom-right-radius: 6px; - -moz-border-radius-bottomright: 6px; - border-bottom-right-radius: 6px; -} -.btn-group .btn:hover, -.btn-group .btn:focus, -.btn-group .btn:active, -.btn-group .btn.active { - z-index: 2; -} -.btn-group .dropdown-toggle:active, -.btn-group.open .dropdown-toggle { - outline: 0; -} -.btn-group .dropdown-toggle { - padding-left: 8px; - padding-right: 8px; - -webkit-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); - -moz-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); - *padding-top: 3px; - *padding-bottom: 3px; -} -.btn-group .btn-mini.dropdown-toggle { - padding-left: 5px; - padding-right: 5px; - *padding-top: 1px; - *padding-bottom: 1px; -} -.btn-group .btn-small.dropdown-toggle { - *padding-top: 4px; - *padding-bottom: 4px; -} -.btn-group .btn-large.dropdown-toggle { - padding-left: 12px; - padding-right: 12px; -} -.btn-group.open { - *z-index: 1000; -} -.btn-group.open .dropdown-menu { - display: block; - margin-top: 1px; - -webkit-border-radius: 5px; - -moz-border-radius: 5px; - border-radius: 5px; -} -.btn-group.open .dropdown-toggle { - background-image: none; - -webkit-box-shadow: inset 0 1px 6px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); - -moz-box-shadow: inset 0 1px 6px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 1px 6px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); -} -.btn .caret { - margin-top: 7px; - margin-left: 0; -} -.btn:hover .caret, -.open.btn-group .caret { - opacity: 1; - filter: alpha(opacity=100); -} -.btn-mini .caret { - margin-top: 5px; -} -.btn-small .caret { - margin-top: 6px; -} -.btn-large .caret { - margin-top: 6px; - border-left: 5px solid transparent; - border-right: 5px solid transparent; - border-top: 5px solid #000000; -} -.btn-primary .caret, -.btn-warning .caret, -.btn-danger .caret, -.btn-info .caret, -.btn-success .caret, -.btn-inverse .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; - opacity: 0.75; - filter: alpha(opacity=75); -} -.alert { - padding: 8px 35px 8px 14px; - margin-bottom: 18px; - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); - background-color: #fcf8e3; - border: 1px solid #fbeed5; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - color: #c09853; -} -.alert-heading { - color: inherit; -} -.alert .close { - position: relative; - top: -2px; - right: -21px; - line-height: 18px; -} -.alert-success { - background-color: #dff0d8; - border-color: #d6e9c6; - color: #468847; -} -.alert-danger, -.alert-error { - background-color: #f2dede; - border-color: #eed3d7; - color: #b94a48; -} -.alert-info { - background-color: #d9edf7; - border-color: #bce8f1; - color: #3a87ad; -} -.alert-block { - padding-top: 14px; - padding-bottom: 14px; -} -.alert-block > p, -.alert-block > ul { - margin-bottom: 0; -} -.alert-block p + p { - margin-top: 5px; -} -.nav { - margin-left: 0; - margin-bottom: 18px; - list-style: none; -} -.nav > li > a { - display: block; -} -.nav > li > a:hover { - text-decoration: none; - background-color: #eeeeee; -} -.nav .nav-header { - display: block; - padding: 3px 15px; - font-size: 11px; - font-weight: bold; - line-height: 18px; - color: #999999; - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); - text-transform: uppercase; -} -.nav li + .nav-header { - margin-top: 9px; -} -.nav-list { - padding-left: 15px; - padding-right: 15px; - margin-bottom: 0; -} -.nav-list > li > a, -.nav-list .nav-header { - margin-left: -15px; - margin-right: -15px; - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); -} -.nav-list > li > a { - padding: 3px 15px; -} -.nav-list > .active > a, -.nav-list > .active > a:hover { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); - background-color: #0088cc; -} -.nav-list [class^="icon-"] { - margin-right: 2px; -} -.nav-list .divider { - height: 1px; - margin: 8px 1px; - overflow: hidden; - background-color: #e5e5e5; - border-bottom: 1px solid #ffffff; - *width: 100%; - *margin: -5px 0 5px; -} -.nav-tabs, -.nav-pills { - *zoom: 1; -} -.nav-tabs:before, -.nav-pills:before, -.nav-tabs:after, -.nav-pills:after { - display: table; - content: ""; -} -.nav-tabs:after, -.nav-pills:after { - clear: both; -} -.nav-tabs > li, -.nav-pills > li { - float: left; -} -.nav-tabs > li > a, -.nav-pills > li > a { - padding-right: 12px; - padding-left: 12px; - margin-right: 2px; - line-height: 14px; -} -.nav-tabs { - border-bottom: 1px solid #ddd; -} -.nav-tabs > li { - margin-bottom: -1px; -} -.nav-tabs > li > a { - padding-top: 8px; - padding-bottom: 8px; - line-height: 18px; - border: 1px solid transparent; - -webkit-border-radius: 4px 4px 0 0; - -moz-border-radius: 4px 4px 0 0; - border-radius: 4px 4px 0 0; -} -.nav-tabs > li > a:hover { - border-color: #eeeeee #eeeeee #dddddd; -} -.nav-tabs > .active > a, -.nav-tabs > .active > a:hover { - color: #555555; - background-color: #ffffff; - border: 1px solid #ddd; - border-bottom-color: transparent; - cursor: default; -} -.nav-pills > li > a { - padding-top: 8px; - padding-bottom: 8px; - margin-top: 2px; - margin-bottom: 2px; - -webkit-border-radius: 5px; - -moz-border-radius: 5px; - border-radius: 5px; -} -.nav-pills > .active > a, -.nav-pills > .active > a:hover { - color: #ffffff; - background-color: #0088cc; -} -.nav-stacked > li { - float: none; -} -.nav-stacked > li > a { - margin-right: 0; -} -.nav-tabs.nav-stacked { - border-bottom: 0; -} -.nav-tabs.nav-stacked > li > a { - border: 1px solid #ddd; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} -.nav-tabs.nav-stacked > li:first-child > a { - -webkit-border-radius: 4px 4px 0 0; - -moz-border-radius: 4px 4px 0 0; - border-radius: 4px 4px 0 0; -} -.nav-tabs.nav-stacked > li:last-child > a { - -webkit-border-radius: 0 0 4px 4px; - -moz-border-radius: 0 0 4px 4px; - border-radius: 0 0 4px 4px; -} -.nav-tabs.nav-stacked > li > a:hover { - border-color: #ddd; - z-index: 2; -} -.nav-pills.nav-stacked > li > a { - margin-bottom: 3px; -} -.nav-pills.nav-stacked > li:last-child > a { - margin-bottom: 1px; -} -.nav-tabs .dropdown-menu, -.nav-pills .dropdown-menu { - margin-top: 1px; - border-width: 1px; -} -.nav-pills .dropdown-menu { - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} -.nav-tabs .dropdown-toggle .caret, -.nav-pills .dropdown-toggle .caret { - border-top-color: #0088cc; - border-bottom-color: #0088cc; - margin-top: 6px; -} -.nav-tabs .dropdown-toggle:hover .caret, -.nav-pills .dropdown-toggle:hover .caret { - border-top-color: #005580; - border-bottom-color: #005580; -} -.nav-tabs .active .dropdown-toggle .caret, -.nav-pills .active .dropdown-toggle .caret { - border-top-color: #333333; - border-bottom-color: #333333; -} -.nav > .dropdown.active > a:hover { - color: #000000; - cursor: pointer; -} -.nav-tabs .open .dropdown-toggle, -.nav-pills .open .dropdown-toggle, -.nav > .open.active > a:hover { - color: #ffffff; - background-color: #999999; - border-color: #999999; -} -.nav .open .caret, -.nav .open.active .caret, -.nav .open a:hover .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; - opacity: 1; - filter: alpha(opacity=100); -} -.tabs-stacked .open > a:hover { - border-color: #999999; -} -.tabbable { - *zoom: 1; -} -.tabbable:before, -.tabbable:after { - display: table; - content: ""; -} -.tabbable:after { - clear: both; -} -.tab-content { - display: table; - width: 100%; -} -.tabs-below .nav-tabs, -.tabs-right .nav-tabs, -.tabs-left .nav-tabs { - border-bottom: 0; -} -.tab-content > .tab-pane, -.pill-content > .pill-pane { - display: none; -} -.tab-content > .active, -.pill-content > .active { - display: block; -} -.tabs-below .nav-tabs { - border-top: 1px solid #ddd; -} -.tabs-below .nav-tabs > li { - margin-top: -1px; - margin-bottom: 0; -} -.tabs-below .nav-tabs > li > a { - -webkit-border-radius: 0 0 4px 4px; - -moz-border-radius: 0 0 4px 4px; - border-radius: 0 0 4px 4px; -} -.tabs-below .nav-tabs > li > a:hover { - border-bottom-color: transparent; - border-top-color: #ddd; -} -.tabs-below .nav-tabs .active > a, -.tabs-below .nav-tabs .active > a:hover { - border-color: transparent #ddd #ddd #ddd; -} -.tabs-left .nav-tabs > li, -.tabs-right .nav-tabs > li { - float: none; -} -.tabs-left .nav-tabs > li > a, -.tabs-right .nav-tabs > li > a { - min-width: 74px; - margin-right: 0; - margin-bottom: 3px; -} -.tabs-left .nav-tabs { - float: left; - margin-right: 19px; - border-right: 1px solid #ddd; -} -.tabs-left .nav-tabs > li > a { - margin-right: -1px; - -webkit-border-radius: 4px 0 0 4px; - -moz-border-radius: 4px 0 0 4px; - border-radius: 4px 0 0 4px; -} -.tabs-left .nav-tabs > li > a:hover { - border-color: #eeeeee #dddddd #eeeeee #eeeeee; -} -.tabs-left .nav-tabs .active > a, -.tabs-left .nav-tabs .active > a:hover { - border-color: #ddd transparent #ddd #ddd; - *border-right-color: #ffffff; -} -.tabs-right .nav-tabs { - float: right; - margin-left: 19px; - border-left: 1px solid #ddd; -} -.tabs-right .nav-tabs > li > a { - margin-left: -1px; - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; -} -.tabs-right .nav-tabs > li > a:hover { - border-color: #eeeeee #eeeeee #eeeeee #dddddd; -} -.tabs-right .nav-tabs .active > a, -.tabs-right .nav-tabs .active > a:hover { - border-color: #ddd #ddd #ddd transparent; - *border-left-color: #ffffff; -} -.navbar { - *position: relative; - *z-index: 2; - overflow: visible; - margin-bottom: 18px; -} -.navbar-inner { - padding-left: 20px; - padding-right: 20px; - background-color: #2c2c2c; - background-image: -moz-linear-gradient(top, #333333, #222222); - background-image: -ms-linear-gradient(top, #333333, #222222); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#222222)); - background-image: -webkit-linear-gradient(top, #333333, #222222); - background-image: -o-linear-gradient(top, #333333, #222222); - background-image: linear-gradient(top, #333333, #222222); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0); - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1); - -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1); - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1); -} -.navbar .container { - width: auto; -} -.btn-navbar { - display: none; - float: right; - padding: 7px 10px; - margin-left: 5px; - margin-right: 5px; - background-color: #2c2c2c; - background-image: -moz-linear-gradient(top, #333333, #222222); - background-image: -ms-linear-gradient(top, #333333, #222222); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#222222)); - background-image: -webkit-linear-gradient(top, #333333, #222222); - background-image: -o-linear-gradient(top, #333333, #222222); - background-image: linear-gradient(top, #333333, #222222); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0); - border-color: #222222 #222222 #000000; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - filter: progid:dximagetransform.microsoft.gradient(enabled=false); - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); - -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); -} -.btn-navbar:hover, -.btn-navbar:active, -.btn-navbar.active, -.btn-navbar.disabled, -.btn-navbar[disabled] { - background-color: #222222; -} -.btn-navbar:active, -.btn-navbar.active { - background-color: #080808 \9; -} -.btn-navbar .icon-bar { - display: block; - width: 18px; - height: 2px; - background-color: #f5f5f5; - -webkit-border-radius: 1px; - -moz-border-radius: 1px; - border-radius: 1px; - -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); - -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); - box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); -} -.btn-navbar .icon-bar + .icon-bar { - margin-top: 3px; -} -.nav-collapse.collapse { - height: auto; -} -.navbar { - color: #999999; -} -.navbar .brand:hover { - text-decoration: none; -} -.navbar .brand { - float: left; - display: block; - padding: 8px 20px 12px; - margin-left: -20px; - font-size: 20px; - font-weight: 200; - line-height: 1; - color: #ffffff; -} -.navbar .navbar-text { - margin-bottom: 0; - line-height: 40px; -} -.navbar .btn, -.navbar .btn-group { - margin-top: 5px; -} -.navbar .btn-group .btn { - margin-top: 0; -} -.navbar-form { - margin-bottom: 0; - *zoom: 1; -} -.navbar-form:before, -.navbar-form:after { - display: table; - content: ""; -} -.navbar-form:after { - clear: both; -} -.navbar-form input, -.navbar-form select, -.navbar-form .radio, -.navbar-form .checkbox { - margin-top: 5px; -} -.navbar-form input, -.navbar-form select { - display: inline-block; - margin-bottom: 0; -} -.navbar-form input[type="image"], -.navbar-form input[type="checkbox"], -.navbar-form input[type="radio"] { - margin-top: 3px; -} -.navbar-form .input-append, -.navbar-form .input-prepend { - margin-top: 6px; - white-space: nowrap; -} -.navbar-form .input-append input, -.navbar-form .input-prepend input { - margin-top: 0; -} -.navbar-search { - position: relative; - float: left; - margin-top: 6px; - margin-bottom: 0; -} -.navbar-search .search-query { - padding: 4px 9px; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 13px; - font-weight: normal; - line-height: 1; - color: #ffffff; - background-color: #626262; - border: 1px solid #151515; - -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.15); - -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.15); - box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.15); - -webkit-transition: none; - -moz-transition: none; - -ms-transition: none; - -o-transition: none; - transition: none; -} -.navbar-search .search-query:-moz-placeholder { - color: #cccccc; -} -.navbar-search .search-query::-webkit-input-placeholder { - color: #cccccc; -} -.navbar-search .search-query:focus, -.navbar-search .search-query.focused { - padding: 5px 10px; - color: #333333; - text-shadow: 0 1px 0 #ffffff; - background-color: #ffffff; - border: 0; - -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); - -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); - box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); - outline: 0; -} -.navbar-fixed-top, -.navbar-fixed-bottom { - position: fixed; - right: 0; - left: 0; - z-index: 1030; - margin-bottom: 0; -} -.navbar-fixed-top .navbar-inner, -.navbar-fixed-bottom .navbar-inner { - padding-left: 0; - padding-right: 0; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} -.navbar-fixed-top .container, -.navbar-fixed-bottom .container { - width: 940px; -} -.navbar-fixed-top { - top: 0; -} -.navbar-fixed-bottom { - bottom: 0; -} -.navbar .nav { - position: relative; - left: 0; - display: block; - float: left; - margin: 0 10px 0 0; -} -.navbar .nav.pull-right { - float: right; -} -.navbar .nav > li { - display: block; - float: left; -} -.navbar .nav > li > a { - float: none; - padding: 10px 10px 11px; - line-height: 19px; - color: #999999; - text-decoration: none; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); -} -.navbar .nav > li > a:hover { - background-color: transparent; - color: #ffffff; - text-decoration: none; -} -.navbar .nav .active > a, -.navbar .nav .active > a:hover { - color: #ffffff; - text-decoration: none; - background-color: #222222; -} -.navbar .divider-vertical { - height: 40px; - width: 1px; - margin: 0 9px; - overflow: hidden; - background-color: #222222; - border-right: 1px solid #333333; -} -.navbar .nav.pull-right { - margin-left: 10px; - margin-right: 0; -} -.navbar .dropdown-menu { - margin-top: 1px; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} -.navbar .dropdown-menu:before { - content: ''; - display: inline-block; - border-left: 7px solid transparent; - border-right: 7px solid transparent; - border-bottom: 7px solid #ccc; - border-bottom-color: rgba(0, 0, 0, 0.2); - position: absolute; - top: -7px; - left: 9px; -} -.navbar .dropdown-menu:after { - content: ''; - display: inline-block; - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-bottom: 6px solid #ffffff; - position: absolute; - top: -6px; - left: 10px; -} -.navbar-fixed-bottom .dropdown-menu:before { - border-top: 7px solid #ccc; - border-top-color: rgba(0, 0, 0, 0.2); - border-bottom: 0; - bottom: -7px; - top: auto; -} -.navbar-fixed-bottom .dropdown-menu:after { - border-top: 6px solid #ffffff; - border-bottom: 0; - bottom: -6px; - top: auto; -} -.navbar .nav .dropdown-toggle .caret, -.navbar .nav .open.dropdown .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; -} -.navbar .nav .active .caret { - opacity: 1; - filter: alpha(opacity=100); -} -.navbar .nav .open > .dropdown-toggle, -.navbar .nav .active > .dropdown-toggle, -.navbar .nav .open.active > .dropdown-toggle { - background-color: transparent; -} -.navbar .nav .active > .dropdown-toggle:hover { - color: #ffffff; -} -.navbar .nav.pull-right .dropdown-menu, -.navbar .nav .dropdown-menu.pull-right { - left: auto; - right: 0; -} -.navbar .nav.pull-right .dropdown-menu:before, -.navbar .nav .dropdown-menu.pull-right:before { - left: auto; - right: 12px; -} -.navbar .nav.pull-right .dropdown-menu:after, -.navbar .nav .dropdown-menu.pull-right:after { - left: auto; - right: 13px; -} -.breadcrumb { - padding: 7px 14px; - margin: 0 0 18px; - list-style: none; - background-color: #fbfbfb; - background-image: -moz-linear-gradient(top, #ffffff, #f5f5f5); - background-image: -ms-linear-gradient(top, #ffffff, #f5f5f5); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f5f5f5)); - background-image: -webkit-linear-gradient(top, #ffffff, #f5f5f5); - background-image: -o-linear-gradient(top, #ffffff, #f5f5f5); - background-image: linear-gradient(top, #ffffff, #f5f5f5); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#f5f5f5', GradientType=0); - border: 1px solid #ddd; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; - -webkit-box-shadow: inset 0 1px 0 #ffffff; - -moz-box-shadow: inset 0 1px 0 #ffffff; - box-shadow: inset 0 1px 0 #ffffff; -} -.breadcrumb li { - display: inline-block; - *display: inline; - /* IE7 inline-block hack */ - - *zoom: 1; - text-shadow: 0 1px 0 #ffffff; -} -.breadcrumb .divider { - padding: 0 5px; - color: #999999; -} -.breadcrumb .active a { - color: #333333; -} -.pagination { - height: 36px; - margin: 18px 0; -} -.pagination ul { - display: inline-block; - *display: inline; - /* IE7 inline-block hack */ - - *zoom: 1; - margin-left: 0; - margin-bottom: 0; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); - -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); -} -.pagination li { - display: inline; -} -.pagination a { - float: left; - padding: 0 14px; - line-height: 34px; - text-decoration: none; - border: 1px solid #ddd; - border-left-width: 0; -} -.pagination a:hover, -.pagination .active a { - background-color: #f5f5f5; -} -.pagination .active a { - color: #999999; - cursor: default; -} -.pagination .disabled span, -.pagination .disabled a, -.pagination .disabled a:hover { - color: #999999; - background-color: transparent; - cursor: default; -} -.pagination li:first-child a { - border-left-width: 1px; - -webkit-border-radius: 3px 0 0 3px; - -moz-border-radius: 3px 0 0 3px; - border-radius: 3px 0 0 3px; -} -.pagination li:last-child a { - -webkit-border-radius: 0 3px 3px 0; - -moz-border-radius: 0 3px 3px 0; - border-radius: 0 3px 3px 0; -} -.pagination-centered { - text-align: center; -} -.pagination-right { - text-align: right; -} -.pager { - margin-left: 0; - margin-bottom: 18px; - list-style: none; - text-align: center; - *zoom: 1; -} -.pager:before, -.pager:after { - display: table; - content: ""; -} -.pager:after { - clear: both; -} -.pager li { - display: inline; -} -.pager a { - display: inline-block; - padding: 5px 14px; - background-color: #fff; - border: 1px solid #ddd; - -webkit-border-radius: 15px; - -moz-border-radius: 15px; - border-radius: 15px; -} -.pager a:hover { - text-decoration: none; - background-color: #f5f5f5; -} -.pager .next a { - float: right; -} -.pager .previous a { - float: left; -} -.pager .disabled a, -.pager .disabled a:hover { - color: #999999; - background-color: #fff; - cursor: default; -} -.modal-open .dropdown-menu { - z-index: 2050; -} -.modal-open .dropdown.open { - *z-index: 2050; -} -.modal-open .popover { - z-index: 2060; -} -.modal-open .tooltip { - z-index: 2070; -} -.modal-backdrop { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1040; - background-color: #000000; -} -.modal-backdrop.fade { - opacity: 0; -} -.modal-backdrop, -.modal-backdrop.fade.in { - opacity: 0.8; - filter: alpha(opacity=80); -} -.modal { - position: fixed; - top: 50%; - left: 50%; - z-index: 1050; - overflow: auto; - width: 560px; - margin: -250px 0 0 -280px; - background-color: #ffffff; - border: 1px solid #999; - border: 1px solid rgba(0, 0, 0, 0.3); - *border: 1px solid #999; - /* IE6-7 */ - - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; - -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); - -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); - box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); - -webkit-background-clip: padding-box; - -moz-background-clip: padding-box; - background-clip: padding-box; -} -.modal.fade { - -webkit-transition: opacity .3s linear, top .3s ease-out; - -moz-transition: opacity .3s linear, top .3s ease-out; - -ms-transition: opacity .3s linear, top .3s ease-out; - -o-transition: opacity .3s linear, top .3s ease-out; - transition: opacity .3s linear, top .3s ease-out; - top: -25%; -} -.modal.fade.in { - top: 50%; -} -.modal-header { - padding: 9px 15px; - border-bottom: 1px solid #eee; -} -.modal-header .close { - margin-top: 2px; -} -.modal-body { - overflow-y: auto; - max-height: 400px; - padding: 15px; -} -.modal-form { - margin-bottom: 0; -} -.modal-footer { - padding: 14px 15px 15px; - margin-bottom: 0; - text-align: right; - background-color: #f5f5f5; - border-top: 1px solid #ddd; - -webkit-border-radius: 0 0 6px 6px; - -moz-border-radius: 0 0 6px 6px; - border-radius: 0 0 6px 6px; - -webkit-box-shadow: inset 0 1px 0 #ffffff; - -moz-box-shadow: inset 0 1px 0 #ffffff; - box-shadow: inset 0 1px 0 #ffffff; - *zoom: 1; -} -.modal-footer:before, -.modal-footer:after { - display: table; - content: ""; -} -.modal-footer:after { - clear: both; -} -.modal-footer .btn + .btn { - margin-left: 5px; - margin-bottom: 0; -} -.modal-footer .btn-group .btn + .btn { - margin-left: -1px; -} -.tooltip { - position: absolute; - z-index: 1020; - display: block; - visibility: visible; - padding: 5px; - font-size: 11px; - opacity: 0; - filter: alpha(opacity=0); -} -.tooltip.in { - opacity: 0.8; - filter: alpha(opacity=80); -} -.tooltip.top { - margin-top: -2px; -} -.tooltip.right { - margin-left: 2px; -} -.tooltip.bottom { - margin-top: 2px; -} -.tooltip.left { - margin-left: -2px; -} -.tooltip.top .tooltip-arrow { - bottom: 0; - left: 50%; - margin-left: -5px; - border-left: 5px solid transparent; - border-right: 5px solid transparent; - border-top: 5px solid #000000; -} -.tooltip.left .tooltip-arrow { - top: 50%; - right: 0; - margin-top: -5px; - border-top: 5px solid transparent; - border-bottom: 5px solid transparent; - border-left: 5px solid #000000; -} -.tooltip.bottom .tooltip-arrow { - top: 0; - left: 50%; - margin-left: -5px; - border-left: 5px solid transparent; - border-right: 5px solid transparent; - border-bottom: 5px solid #000000; -} -.tooltip.right .tooltip-arrow { - top: 50%; - left: 0; - margin-top: -5px; - border-top: 5px solid transparent; - border-bottom: 5px solid transparent; - border-right: 5px solid #000000; -} -.tooltip-inner { - max-width: 200px; - padding: 3px 8px; - color: #ffffff; - text-align: center; - text-decoration: none; - background-color: #000000; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} -.tooltip-arrow { - position: absolute; - width: 0; - height: 0; -} -.popover { - position: absolute; - top: 0; - left: 0; - z-index: 1010; - display: none; - padding: 5px; -} -.popover.top { - margin-top: -5px; -} -.popover.right { - margin-left: 5px; -} -.popover.bottom { - margin-top: 5px; -} -.popover.left { - margin-left: -5px; -} -.popover.top .arrow { - bottom: 0; - left: 50%; - margin-left: -5px; - border-left: 5px solid transparent; - border-right: 5px solid transparent; - border-top: 5px solid #000000; -} -.popover.right .arrow { - top: 50%; - left: 0; - margin-top: -5px; - border-top: 5px solid transparent; - border-bottom: 5px solid transparent; - border-right: 5px solid #000000; -} -.popover.bottom .arrow { - top: 0; - left: 50%; - margin-left: -5px; - border-left: 5px solid transparent; - border-right: 5px solid transparent; - border-bottom: 5px solid #000000; -} -.popover.left .arrow { - top: 50%; - right: 0; - margin-top: -5px; - border-top: 5px solid transparent; - border-bottom: 5px solid transparent; - border-left: 5px solid #000000; -} -.popover .arrow { - position: absolute; - width: 0; - height: 0; -} -.popover-inner { - padding: 3px; - width: 280px; - overflow: hidden; - background: #000000; - background: rgba(0, 0, 0, 0.8); - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; - -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); - -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); - box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); -} -.popover-title { - padding: 9px 15px; - line-height: 1; - background-color: #f5f5f5; - border-bottom: 1px solid #eee; - -webkit-border-radius: 3px 3px 0 0; - -moz-border-radius: 3px 3px 0 0; - border-radius: 3px 3px 0 0; -} -.popover-content { - padding: 14px; - background-color: #ffffff; - -webkit-border-radius: 0 0 3px 3px; - -moz-border-radius: 0 0 3px 3px; - border-radius: 0 0 3px 3px; - -webkit-background-clip: padding-box; - -moz-background-clip: padding-box; - background-clip: padding-box; -} -.popover-content p, -.popover-content ul, -.popover-content ol { - margin-bottom: 0; -} -.thumbnails { - margin-left: -20px; - list-style: none; - *zoom: 1; -} -.thumbnails:before, -.thumbnails:after { - display: table; - content: ""; -} -.thumbnails:after { - clear: both; -} -.thumbnails > li { - float: left; - margin: 0 0 18px 20px; -} -.thumbnail { - display: block; - padding: 4px; - line-height: 1; - border: 1px solid #ddd; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075); - -moz-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075); -} -a.thumbnail:hover { - border-color: #0088cc; - -webkit-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); - -moz-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); - box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); -} -.thumbnail > img { - display: block; - max-width: 100%; - margin-left: auto; - margin-right: auto; -} -.thumbnail .caption { - padding: 9px; -} -.label { - padding: 1px 4px 2px; - font-size: 10.998px; - font-weight: bold; - line-height: 13px; - color: #ffffff; - vertical-align: middle; - white-space: nowrap; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #999999; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} -.label:hover { - color: #ffffff; - text-decoration: none; -} -.label-important { - background-color: #b94a48; -} -.label-important:hover { - background-color: #953b39; -} -.label-warning { - background-color: #f89406; -} -.label-warning:hover { - background-color: #c67605; -} -.label-success { - background-color: #468847; -} -.label-success:hover { - background-color: #356635; -} -.label-info { - background-color: #3a87ad; -} -.label-info:hover { - background-color: #2d6987; -} -.label-inverse { - background-color: #333333; -} -.label-inverse:hover { - background-color: #1a1a1a; -} -.badge { - padding: 1px 9px 2px; - font-size: 12.025px; - font-weight: bold; - white-space: nowrap; - color: #ffffff; - background-color: #999999; - -webkit-border-radius: 9px; - -moz-border-radius: 9px; - border-radius: 9px; -} -.badge:hover { - color: #ffffff; - text-decoration: none; - cursor: pointer; -} -.badge-error { - background-color: #b94a48; -} -.badge-error:hover { - background-color: #953b39; -} -.badge-warning { - background-color: #f89406; -} -.badge-warning:hover { - background-color: #c67605; -} -.badge-success { - background-color: #468847; -} -.badge-success:hover { - background-color: #356635; -} -.badge-info { - background-color: #3a87ad; -} -.badge-info:hover { - background-color: #2d6987; -} -.badge-inverse { - background-color: #333333; -} -.badge-inverse:hover { - background-color: #1a1a1a; -} -@-webkit-keyframes progress-bar-stripes { - from { - background-position: 0 0; - } - to { - background-position: 40px 0; - } -} -@-moz-keyframes progress-bar-stripes { - from { - background-position: 0 0; - } - to { - background-position: 40px 0; - } -} -@-ms-keyframes progress-bar-stripes { - from { - background-position: 0 0; - } - to { - background-position: 40px 0; - } -} -@keyframes progress-bar-stripes { - from { - background-position: 0 0; - } - to { - background-position: 40px 0; - } -} -.progress { - overflow: hidden; - height: 18px; - margin-bottom: 18px; - background-color: #f7f7f7; - background-image: -moz-linear-gradient(top, #f5f5f5, #f9f9f9); - background-image: -ms-linear-gradient(top, #f5f5f5, #f9f9f9); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9)); - background-image: -webkit-linear-gradient(top, #f5f5f5, #f9f9f9); - background-image: -o-linear-gradient(top, #f5f5f5, #f9f9f9); - background-image: linear-gradient(top, #f5f5f5, #f9f9f9); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5', endColorstr='#f9f9f9', GradientType=0); - -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); - -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); - box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} -.progress .bar { - width: 0%; - height: 18px; - color: #ffffff; - font-size: 12px; - text-align: center; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #0e90d2; - background-image: -moz-linear-gradient(top, #149bdf, #0480be); - background-image: -ms-linear-gradient(top, #149bdf, #0480be); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be)); - background-image: -webkit-linear-gradient(top, #149bdf, #0480be); - background-image: -o-linear-gradient(top, #149bdf, #0480be); - background-image: linear-gradient(top, #149bdf, #0480be); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#149bdf', endColorstr='#0480be', GradientType=0); - -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); - -moz-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); - box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - -ms-box-sizing: border-box; - box-sizing: border-box; - -webkit-transition: width 0.6s ease; - -moz-transition: width 0.6s ease; - -ms-transition: width 0.6s ease; - -o-transition: width 0.6s ease; - transition: width 0.6s ease; -} -.progress-striped .bar { - background-color: #149bdf; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - -webkit-background-size: 40px 40px; - -moz-background-size: 40px 40px; - -o-background-size: 40px 40px; - background-size: 40px 40px; -} -.progress.active .bar { - -webkit-animation: progress-bar-stripes 2s linear infinite; - -moz-animation: progress-bar-stripes 2s linear infinite; - animation: progress-bar-stripes 2s linear infinite; -} -.progress-danger .bar { - background-color: #dd514c; - background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35); - background-image: -ms-linear-gradient(top, #ee5f5b, #c43c35); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35)); - background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35); - background-image: -o-linear-gradient(top, #ee5f5b, #c43c35); - background-image: linear-gradient(top, #ee5f5b, #c43c35); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0); -} -.progress-danger.progress-striped .bar { - background-color: #ee5f5b; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.progress-success .bar { - background-color: #5eb95e; - background-image: -moz-linear-gradient(top, #62c462, #57a957); - background-image: -ms-linear-gradient(top, #62c462, #57a957); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957)); - background-image: -webkit-linear-gradient(top, #62c462, #57a957); - background-image: -o-linear-gradient(top, #62c462, #57a957); - background-image: linear-gradient(top, #62c462, #57a957); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#57a957', GradientType=0); -} -.progress-success.progress-striped .bar { - background-color: #62c462; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.progress-info .bar { - background-color: #4bb1cf; - background-image: -moz-linear-gradient(top, #5bc0de, #339bb9); - background-image: -ms-linear-gradient(top, #5bc0de, #339bb9); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9)); - background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9); - background-image: -o-linear-gradient(top, #5bc0de, #339bb9); - background-image: linear-gradient(top, #5bc0de, #339bb9); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#339bb9', GradientType=0); -} -.progress-info.progress-striped .bar { - background-color: #5bc0de; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.progress-warning .bar { - background-color: #faa732; - background-image: -moz-linear-gradient(top, #fbb450, #f89406); - background-image: -ms-linear-gradient(top, #fbb450, #f89406); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406)); - background-image: -webkit-linear-gradient(top, #fbb450, #f89406); - background-image: -o-linear-gradient(top, #fbb450, #f89406); - background-image: linear-gradient(top, #fbb450, #f89406); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbb450', endColorstr='#f89406', GradientType=0); -} -.progress-warning.progress-striped .bar { - background-color: #fbb450; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.accordion { - margin-bottom: 18px; -} -.accordion-group { - margin-bottom: 2px; - border: 1px solid #e5e5e5; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} -.accordion-heading { - border-bottom: 0; -} -.accordion-heading .accordion-toggle { - display: block; - padding: 8px 15px; -} -.accordion-inner { - padding: 9px 15px; - border-top: 1px solid #e5e5e5; -} -.carousel { - position: relative; - margin-bottom: 18px; - line-height: 1; -} -.carousel-inner { - overflow: hidden; - width: 100%; - position: relative; -} -.carousel .item { - display: none; - position: relative; - -webkit-transition: 0.6s ease-in-out left; - -moz-transition: 0.6s ease-in-out left; - -ms-transition: 0.6s ease-in-out left; - -o-transition: 0.6s ease-in-out left; - transition: 0.6s ease-in-out left; -} -.carousel .item > img { - display: block; - line-height: 1; -} -.carousel .active, -.carousel .next, -.carousel .prev { - display: block; -} -.carousel .active { - left: 0; -} -.carousel .next, -.carousel .prev { - position: absolute; - top: 0; - width: 100%; -} -.carousel .next { - left: 100%; -} -.carousel .prev { - left: -100%; -} -.carousel .next.left, -.carousel .prev.right { - left: 0; -} -.carousel .active.left { - left: -100%; -} -.carousel .active.right { - left: 100%; -} -.carousel-control { - position: absolute; - top: 40%; - left: 15px; - width: 40px; - height: 40px; - margin-top: -20px; - font-size: 60px; - font-weight: 100; - line-height: 30px; - color: #ffffff; - text-align: center; - background: #222222; - border: 3px solid #ffffff; - -webkit-border-radius: 23px; - -moz-border-radius: 23px; - border-radius: 23px; - opacity: 0.5; - filter: alpha(opacity=50); -} -.carousel-control.right { - left: auto; - right: 15px; -} -.carousel-control:hover { - color: #ffffff; - text-decoration: none; - opacity: 0.9; - filter: alpha(opacity=90); -} -.carousel-caption { - position: absolute; - left: 0; - right: 0; - bottom: 0; - padding: 10px 15px 5px; - background: #333333; - background: rgba(0, 0, 0, 0.75); -} -.carousel-caption h4, -.carousel-caption p { - color: #ffffff; -} -.hero-unit { - padding: 60px; - margin-bottom: 30px; - background-color: #eeeeee; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; -} -.hero-unit h1 { - margin-bottom: 0; - font-size: 60px; - line-height: 1; - color: inherit; - letter-spacing: -1px; -} -.hero-unit p { - font-size: 18px; - font-weight: 200; - line-height: 27px; - color: inherit; -} -.pull-right { - float: right; -} -.pull-left { - float: left; -} -.hide { - display: none; -} -.show { - display: block; -} -.invisible { - visibility: hidden; -} diff --git a/msgpack-idl-web/static/img/glyphicons-halflings-white.png b/msgpack-idl-web/static/img/glyphicons-halflings-white.png deleted file mode 100644 index 3bf6484a29d8da269f9bc874b25493a45fae3bae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8777 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 B7G?kd diff --git a/msgpack-idl-web/static/img/glyphicons-halflings.png b/msgpack-idl-web/static/img/glyphicons-halflings.png deleted file mode 100644 index 79bc568c21395d5a5ceab62fadb04457094b2ac7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13826 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 diff --git a/msgpack-idl-web/templates/default-layout-wrapper.hamlet b/msgpack-idl-web/templates/default-layout-wrapper.hamlet deleted file mode 100644 index 37a22d9..0000000 --- a/msgpack-idl-web/templates/default-layout-wrapper.hamlet +++ /dev/null @@ -1,47 +0,0 @@ -\ -\ -\ -\ -\ - - - - - #{pageTitle pc} - <meta name="description" content=""> - <meta name="author" content=""> - - <meta name="viewport" content="width=device-width,initial-scale=1"> - - ^{pageHead pc} - - \<!--[if lt IE 9]> - \<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script> - \<![endif]--> - - <script> - document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/,'js'); - <body> - <div class="container"> - <header> - <div id="main" role="main"> - ^{pageBody pc} - <footer> - #{extraCopyright $ appExtra $ settings master} - - $maybe analytics <- extraAnalytics $ appExtra $ settings master - <script> - if(!window.location.href.match(/localhost/)){ - window._gaq = [['_setAccount','#{analytics}'],['_trackPageview'],['_trackPageLoadTime']]; - (function() { - \ var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; - \ ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; - \ var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); - })(); - } - \<!-- Prompt IE 6 users to install Chrome Frame. Remove this if you want to support IE 6. chromium.org/developers/how-tos/chrome-frame-getting-started --> - \<!--[if lt IE 7 ]> - <script src="//ajax.googleapis.com/ajax/libs/chrome-frame/1.0.3/CFInstall.min.js"> - <script> - window.attachEvent('onload',function(){CFInstall.check({mode:'overlay'})}) - \<![endif]--> diff --git a/msgpack-idl-web/templates/default-layout.hamlet b/msgpack-idl-web/templates/default-layout.hamlet deleted file mode 100644 index fa86744..0000000 --- a/msgpack-idl-web/templates/default-layout.hamlet +++ /dev/null @@ -1,3 +0,0 @@ -$maybe msg <- mmsg - <div #message>#{msg} -^{widget} diff --git a/msgpack-idl-web/templates/homepage.hamlet b/msgpack-idl-web/templates/homepage.hamlet deleted file mode 100644 index 43f4202..0000000 --- a/msgpack-idl-web/templates/homepage.hamlet +++ /dev/null @@ -1,20 +0,0 @@ -<h1>MessagePack IDL Code Generator - -<form.well method=post action=@{HomeR}> - <label>IDL Name - <input type="text" name="name"> - <label>IDL Source - <textarea.input-xxlarge rows="20" name="source"> - #{defaultCode} - - <label>Language to Generate - <select name="lang"> - <option value="cpp">C++ - <option value="java">Java - <option value="python">Python - <option value="ruby">Ruby - - <label>Namespace / Package name / Module name - <input type="text" name="namespace"> - - <button.btn type="submit">Generate diff --git a/msgpack-idl-web/templates/homepage.julius b/msgpack-idl-web/templates/homepage.julius deleted file mode 100644 index efae799..0000000 --- a/msgpack-idl-web/templates/homepage.julius +++ /dev/null @@ -1 +0,0 @@ -document.getElementById("#{aDomId}").innerHTML = "This text was added by the Javascript part of the homepage widget."; diff --git a/msgpack-idl-web/templates/homepage.lucius b/msgpack-idl-web/templates/homepage.lucius deleted file mode 100644 index 54986f8..0000000 --- a/msgpack-idl-web/templates/homepage.lucius +++ /dev/null @@ -1,6 +0,0 @@ -h1 { - text-align: center -} -h2##{aDomId} { - color: #990 -} diff --git a/msgpack-idl-web/templates/normalize.lucius b/msgpack-idl-web/templates/normalize.lucius deleted file mode 100644 index 9fc7ae4..0000000 --- a/msgpack-idl-web/templates/normalize.lucius +++ /dev/null @@ -1,439 +0,0 @@ -/*! normalize.css 2011-08-12T17:28 UTC · http://github.com/necolas/normalize.css */ - -/* ============================================================================= - HTML5 display definitions - ========================================================================== */ - -/* - * Corrects block display not defined in IE6/7/8/9 & FF3 - */ - -article, -aside, -details, -figcaption, -figure, -footer, -header, -hgroup, -nav, -section { - display: block; -} - -/* - * Corrects inline-block display not defined in IE6/7/8/9 & FF3 - */ - -audio, -canvas, -video { - display: inline-block; - *display: inline; - *zoom: 1; -} - -/* - * Prevents modern browsers from displaying 'audio' without controls - */ - -audio:not([controls]) { - display: none; -} - -/* - * Addresses styling for 'hidden' attribute not present in IE7/8/9, FF3, S4 - * Known issue: no IE6 support - */ - -[hidden] { - display: none; -} - - -/* ============================================================================= - Base - ========================================================================== */ - -/* - * 1. Corrects text resizing oddly in IE6/7 when body font-size is set using em units - * http://clagnut.com/blog/348/#c790 - * 2. Keeps page centred in all browsers regardless of content height - * 3. Prevents iOS text size adjust after orientation change, without disabling user zoom - * www.456bereastreet.com/archive/201012/controlling_text_size_in_safari_for_ios_without_disabling_user_zoom/ - */ - -html { - font-size: 100%; /* 1 */ - overflow-y: scroll; /* 2 */ - -webkit-text-size-adjust: 100%; /* 3 */ - -ms-text-size-adjust: 100%; /* 3 */ -} - -/* - * Addresses margins handled incorrectly in IE6/7 - */ - -body { - margin: 0; -} - -/* - * Addresses font-family inconsistency between 'textarea' and other form elements. - */ - -body, -button, -input, -select, -textarea { - font-family: sans-serif; -} - - -/* ============================================================================= - Links - ========================================================================== */ - -a { - color: #00e; -} - -a:visited { - color: #551a8b; -} - -/* - * Addresses outline displayed oddly in Chrome - */ - -a:focus { - outline: thin dotted; -} - -/* - * Improves readability when focused and also mouse hovered in all browsers - * people.opera.com/patrickl/experiments/keyboard/test - */ - -a:hover, -a:active { - outline: 0; -} - - -/* ============================================================================= - Typography - ========================================================================== */ - -/* - * Addresses styling not present in IE7/8/9, S5, Chrome - */ - -abbr[title] { - border-bottom: 1px dotted; -} - -/* - * Addresses style set to 'bolder' in FF3/4, S4/5, Chrome -*/ - -b, -strong { - font-weight: bold; -} - -blockquote { - margin: 1em 40px; -} - -/* - * Addresses styling not present in S5, Chrome - */ - -dfn { - font-style: italic; -} - -/* - * Addresses styling not present in IE6/7/8/9 - */ - -mark { - background: #ff0; - color: #000; -} - -/* - * Corrects font family set oddly in IE6, S4/5, Chrome - * en.wikipedia.org/wiki/User:Davidgothberg/Test59 - */ - -pre, -code, -kbd, -samp { - font-family: monospace, serif; - _font-family: 'courier new', monospace; - font-size: 1em; -} - -/* - * Improves readability of pre-formatted text in all browsers - */ - -pre { - white-space: pre; - white-space: pre-wrap; - word-wrap: break-word; -} - -/* - * 1. Addresses CSS quotes not supported in IE6/7 - * 2. Addresses quote property not supported in S4 - */ - -/* 1 */ - -q { - quotes: none; -} - -/* 2 */ - -q:before, -q:after { - content: ''; - content: none; -} - -small { - font-size: 75%; -} - -/* - * Prevents sub and sup affecting line-height in all browsers - * gist.github.com/413930 - */ - -sub, -sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; -} - -sup { - top: -0.5em; -} - -sub { - bottom: -0.25em; -} - - -/* ============================================================================= - Lists - ========================================================================== */ - -ul, -ol { - margin: 1em 0; - padding: 0 0 0 40px; -} - -dd { - margin: 0 0 0 40px; -} - -nav ul, -nav ol { - list-style: none; - list-style-image: none; -} - - -/* ============================================================================= - Embedded content - ========================================================================== */ - -/* - * 1. Removes border when inside 'a' element in IE6/7/8/9 - * 2. Improves image quality when scaled in IE7 - * code.flickr.com/blog/2008/11/12/on-ui-quality-the-little-things-client-side-image-resizing/ - */ - -img { - border: 0; /* 1 */ - -ms-interpolation-mode: bicubic; /* 2 */ -} - -/* - * Corrects overflow displayed oddly in IE9 - */ - -svg:not(:root) { - overflow: hidden; -} - - -/* ============================================================================= - Figures - ========================================================================== */ - -/* - * Addresses margin not present in IE6/7/8/9, S5, O11 - */ - -figure { - margin: 0; -} - - -/* ============================================================================= - Forms - ========================================================================== */ - -/* - * Corrects margin displayed oddly in IE6/7 - */ - -form { - margin: 0; -} - -/* - * Define consistent margin and padding - */ - -fieldset { - margin: 0 2px; - padding: 0.35em 0.625em 0.75em; -} - -/* - * 1. Corrects color not being inherited in IE6/7/8/9 - * 2. Corrects alignment displayed oddly in IE6/7 - */ - -legend { - border: 0; /* 1 */ - *margin-left: -7px; /* 2 */ -} - -/* - * 1. Corrects font size not being inherited in all browsers - * 2. Addresses margins set differently in IE6/7, F3/4, S5, Chrome - * 3. Improves appearance and consistency in all browsers - */ - -button, -input, -select, -textarea { - font-size: 100%; /* 1 */ - margin: 0; /* 2 */ - vertical-align: baseline; /* 3 */ - *vertical-align: middle; /* 3 */ -} - -/* - * 1. Addresses FF3/4 setting line-height using !important in the UA stylesheet - * 2. Corrects inner spacing displayed oddly in IE6/7 - */ - -button, -input { - line-height: normal; /* 1 */ - *overflow: visible; /* 2 */ -} - -/* - * Corrects overlap and whitespace issue for buttons and inputs in IE6/7 - * Known issue: reintroduces inner spacing - */ - -table button, -table input { - *overflow: auto; -} - -/* - * 1. Improves usability and consistency of cursor style between image-type 'input' and others - * 2. Corrects inability to style clickable 'input' types in iOS - */ - -button, -html input[type="button"], -input[type="reset"], -input[type="submit"] { - cursor: pointer; /* 1 */ - -webkit-appearance: button; /* 2 */ -} - -/* - * 1. Addresses box sizing set to content-box in IE8/9 - * 2. Addresses excess padding in IE8/9 - */ - -input[type="checkbox"], -input[type="radio"] { - box-sizing: border-box; /* 1 */ - padding: 0; /* 2 */ -} - -/* - * 1. Addresses appearance set to searchfield in S5, Chrome - * 2. Addresses box sizing set to border-box in S5, Chrome (include -moz to future-proof) - */ - -input[type="search"] { - -webkit-appearance: textfield; /* 1 */ - -moz-box-sizing: content-box; - -webkit-box-sizing: content-box; /* 2 */ - box-sizing: content-box; -} - -/* - * Corrects inner padding displayed oddly in S5, Chrome on OSX - */ - -input[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; -} - -/* - * Corrects inner padding and border displayed oddly in FF3/4 - * www.sitepen.com/blog/2008/05/14/the-devils-in-the-details-fixing-dojos-toolbar-buttons/ - */ - -button::-moz-focus-inner, -input::-moz-focus-inner { - border: 0; - padding: 0; -} - -/* - * 1. Removes default vertical scrollbar in IE6/7/8/9 - * 2. Improves readability and alignment in all browsers - */ - -textarea { - overflow: auto; /* 1 */ - vertical-align: top; /* 2 */ -} - - -/* ============================================================================= - Tables - ========================================================================== */ - -/* - * Remove most spacing between table cells - */ - -table { - border-collapse: collapse; - border-spacing: 0; -} diff --git a/msgpack-idl-web/tests/HomeTest.hs b/msgpack-idl-web/tests/HomeTest.hs deleted file mode 100644 index 17c9e6d..0000000 --- a/msgpack-idl-web/tests/HomeTest.hs +++ /dev/null @@ -1,24 +0,0 @@ -module HomeTest - ( homeSpecs - ) where - -import Import -import Yesod.Test - -homeSpecs :: Specs -homeSpecs = - describe "These are some example tests" $ - it "loads the index and checks it looks right" $ do - get_ "/" - statusIs 200 - htmlAllContain "h1" "Hello" - - post "/" $ do - addNonce - fileByLabel "Choose a file" "tests/main.hs" "text/plain" -- talk about self-reference - byLabel "What's on the file?" "Some Content" - - statusIs 200 - htmlCount ".message" 1 - htmlAllContain ".message" "Some Content" - htmlAllContain ".message" "text/plain" diff --git a/msgpack-idl-web/tests/main.hs b/msgpack-idl-web/tests/main.hs deleted file mode 100644 index d475fe8..0000000 --- a/msgpack-idl-web/tests/main.hs +++ /dev/null @@ -1,22 +0,0 @@ -{-# LANGUAGE OverloadedStrings #-} -{-# LANGUAGE NoMonomorphismRestriction #-} -{-# OPTIONS_GHC -fno-warn-orphans #-} - -module Main where - -import Import -import Settings -import Yesod.Logger (defaultDevelopmentLogger) -import Yesod.Default.Config -import Yesod.Test -import Application (makeFoundation) - -import HomeTest - -main :: IO a -main = do - conf <- loadConfig $ (configSettings Testing) { csParseExtra = parseExtra } - logger <- defaultDevelopmentLogger - foundation <- makeFoundation conf logger - app <- toWaiAppPlain foundation - runTests app (connPool foundation) homeSpecs diff --git a/msgpack-idl/LICENSE b/msgpack-idl/LICENSE deleted file mode 100644 index 6eba326..0000000 --- a/msgpack-idl/LICENSE +++ /dev/null @@ -1,30 +0,0 @@ -Copyright (c)2011, Hideyuki Tanaka - -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - - * Neither the name of Hideyuki Tanaka nor the names of other - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/msgpack-idl/Language/MessagePack/IDL.hs b/msgpack-idl/Language/MessagePack/IDL.hs deleted file mode 100644 index 08c6784..0000000 --- a/msgpack-idl/Language/MessagePack/IDL.hs +++ /dev/null @@ -1,9 +0,0 @@ -module Language.MessagePack.IDL ( - module Language.MessagePack.IDL.Syntax, - module Language.MessagePack.IDL.Parser, - module Language.MessagePack.IDL.CodeGen.Haskell, - ) where - -import Language.MessagePack.IDL.Syntax -import Language.MessagePack.IDL.Parser -import Language.MessagePack.IDL.CodeGen.Haskell diff --git a/msgpack-idl/Language/MessagePack/IDL/Check.hs b/msgpack-idl/Language/MessagePack/IDL/Check.hs deleted file mode 100644 index 3207365..0000000 --- a/msgpack-idl/Language/MessagePack/IDL/Check.hs +++ /dev/null @@ -1,9 +0,0 @@ -module Language.MessagePack.IDL.Check ( - check, - ) where - -import Language.MessagePack.IDL.Syntax - --- TODO: Implement it! -check :: Spec -> Bool -check _ = True diff --git a/msgpack-idl/Language/MessagePack/IDL/CodeGen/Cpp.hs b/msgpack-idl/Language/MessagePack/IDL/CodeGen/Cpp.hs deleted file mode 100644 index 951e1a4..0000000 --- a/msgpack-idl/Language/MessagePack/IDL/CodeGen/Cpp.hs +++ /dev/null @@ -1,298 +0,0 @@ -{-# LANGUAGE QuasiQuotes, RecordWildCards, OverloadedStrings #-} - -module Language.MessagePack.IDL.CodeGen.Cpp ( - Config(..), - generate, - ) where - -import Data.Char -import Data.List -import qualified Data.Text as T -import qualified Data.Text.Lazy as LT -import qualified Data.Text.Lazy.IO as LT -import System.FilePath -import Text.Shakespeare.Text - -import Language.MessagePack.IDL.Syntax - -data Config - = Config - { configFilePath :: FilePath - , configNameSpace :: String - , configPFICommon :: Bool - } - deriving (Show, Eq) - -generate:: Config -> Spec -> IO () -generate Config {..} spec = do - let name = takeBaseName configFilePath - once = map toUpper name - ns = LT.splitOn "::" $ LT.pack configNameSpace - - typeHeader - | configPFICommon = - [lt|#include <msgpack.hpp>|] - | otherwise = - [lt|#include <msgpack.hpp>|] - serverHeader - | configPFICommon = - [lt|#include <pficommon/network/mprpc.h> -#include <pficommon/lang/bind.h>|] - | otherwise = - [lt|#include <msgpack/rpc/server.h>|] - clientHeader - | configPFICommon = - [lt|#include <pficommon/network/mprpc.h>|] - | otherwise = - [lt|#include <msgpack/rpc/client.h>|] - - LT.writeFile (name ++ "_types.hpp") $ templ configFilePath ns once "TYPES" [lt| -#include <vector> -#include <map> -#include <string> -#include <stdexcept> -#include <stdint.h> -#{typeHeader} - -#{genNameSpace ns $ LT.concat $ map (genTypeDecl name) spec } -|] - - LT.writeFile (name ++ "_server.hpp") $ templ configFilePath (snoc ns "server") once "SERVER" [lt| -#include "#{name}_types.hpp" -#{serverHeader} - -#{genNameSpace (snoc ns "server") $ LT.concat $ map (genServer configPFICommon) spec} -|] - - LT.writeFile (name ++ "_client.hpp") $ templ configFilePath (snoc ns "client") once "CLIENT" [lt| -#include "#{name}_types.hpp" -#{clientHeader} - -#{genNameSpace (snoc ns "client") $ LT.concat $ map (genClient configPFICommon) spec} -|] - -genTypeDecl :: String -> Decl -> LT.Text -genTypeDecl _ MPMessage {..} = - genMsg msgName msgFields False - -genTypeDecl _ MPException {..} = - genMsg excName excFields True - -genTypeDecl _ MPType { .. } = - [lt| -typedef #{genType tyType} #{tyName}; -|] - -genTypeDecl _ _ = "" - -genMsg name flds isExc = - let fields = map f flds - fs = map (maybe undefined fldName) $ sortField flds - in [lt| -struct #{name}#{e} { -public: - - #{destructor} - MSGPACK_DEFINE(#{T.intercalate ", " fs}); -#{LT.concat fields} -}; -|] - where - e = if isExc then [lt| : public std::exception|] else "" - destructor = if isExc then [lt|~#{name}() throw() {} -|] else "" - - f Field {..} = [lt| - #{genType fldType} #{fldName};|] - -sortField flds = - flip map [0 .. maximum $ [-1] ++ map fldId flds] $ \ix -> - find ((==ix). fldId) flds - -genServer :: Bool -> Decl -> LT.Text -genServer False MPService {..} = [lt| -template <class Impl> -class #{serviceName} : public msgpack::rpc::server::base { -public: - - void dispatch(msgpack::rpc::request req) { - try { - std::string method; - req.method().convert(&method); -#{LT.concat $ map genMethodDispatch serviceMethods} - } catch (const msgpack::type_error& e) { - req.error(msgpack::rpc::ARGUMENT_ERROR); - } catch (const std::exception& e) { - req.error(std::string(e.what())); - } - } -}; -|] - where - genMethodDispatch Function {..} = - -- TODO: FIX IT! - let typs = map (genRetType . maybe Nothing (Just . fldType)) $ sortField methodArgs in - let params = map g methodArgs in - case params of - [] -> [lt| - if (method == "#{methodName}") { - req.result<#{genRetType methodRetType} >(static_cast<Impl*>(this)->#{methodName}()); - return; - } -|] - _ -> [lt| - if (method == "#{methodName}") { - msgpack::type::tuple<#{LT.intercalate ", " typs} > params; - req.params().convert(¶ms); - req.result<#{genRetType methodRetType} >(static_cast<Impl*>(this)->#{methodName}(#{LT.intercalate ", " params})); - return; - } -|] - where - g fld = [lt|params.get<#{show $ fldId fld}>()|] - - genMethodDispatch _ = "" - -genServer True MPService {..} = [lt| -template <class Impl> -class #{serviceName} : public pfi::network::mprpc::rpc_server { -public: - #{serviceName}(double timeout_sec): rpc_server(timeout_sec) { -#{LT.concat $ map genSetMethod serviceMethods} - } -}; -|] - where - genSetMethod Function {..} = - let typs = map (genRetType . maybe Nothing (Just . fldType)) $ sortField methodArgs - sign = [lt|#{genRetType methodRetType}(#{LT.intercalate ", " typs})|] - phs = LT.concat $ [[lt|, pfi::lang::_#{show ix}|] | ix <- [1 .. length (typs)]] - in [lt| - rpc_server::add<#{sign} >("#{methodName}", pfi::lang::bind(&Impl::#{methodName}, static_cast<Impl*>(this)#{phs}));|] - - genSetMethod _ = "" - -genServer _ _ = "" - -genClient :: Bool -> Decl -> LT.Text -genClient False MPService {..} = [lt| -class #{serviceName} { -public: - #{serviceName}(const std::string &host, uint64_t port) - : c_(host, port) {} -#{LT.concat $ map genMethodCall serviceMethods} -private: - msgpack::rpc::client c_; -}; -|] - where - genMethodCall Function {..} = - let args = LT.intercalate ", " $ map arg methodArgs in - let vals = LT.concat $ map val methodArgs in - case methodRetType of - Nothing -> [lt| - void #{methodName}(#{args}) { - c_.call("#{methodName}"#{vals}); - } -|] - Just typ -> [lt| - #{genType typ} #{methodName}(#{args}) { - return c_.call("#{methodName}"#{vals}).get<#{genType typ} >(); - } -|] - where - arg Field {..} = [lt|#{genType fldType} #{fldName}|] - val Field {..} = [lt|, #{fldName}|] - - genMethodCall _ = "" - -genClient True MPService {..} = [lt| -class #{serviceName} : public pfi::network::mprpc::rpc_client { -public: - #{serviceName}(const std::string &host, uint64_t port, double timeout_sec) - : rpc_client(host, port, timeout_sec) {} -#{LT.concat $ map genMethodCall serviceMethods} -private: -}; -|] - where - genMethodCall Function {..} = - let typs = map (genRetType . maybe Nothing (\f -> Just (fldType f))) $ sortField methodArgs - sign = [lt|#{genRetType methodRetType}(#{LT.intercalate ", " typs})|] - args = LT.intercalate ", " $ map arg methodArgs - vals = LT.intercalate ", " $ map val methodArgs in - case methodRetType of - Nothing -> [lt| - void #{methodName}(#{args}) { - call<#{sign}>("#{methodName}")(#{vals}); - } -|] - Just t -> [lt| - #{genType t} #{methodName}(#{args}) { - return call<#{sign}>("#{methodName}")(#{vals}); - } -|] - where - arg Field {..} = [lt|#{genType fldType} #{fldName}|] - val Field {..} = [lt|#{fldName}|] - - genMethodCall _ = "" - -genClient _ _ = "" - -genType :: Type -> LT.Text -genType (TInt sign bits) = - let base = if sign then "int" else "uint" :: LT.Text in - [lt|#{base}#{show bits}_t|] -genType (TFloat False) = - [lt|float|] -genType (TFloat True) = - [lt|double|] -genType TBool = - [lt|bool|] -genType TRaw = - [lt|std::string|] -genType TString = - [lt|std::string|] -genType (TList typ) = - [lt|std::vector<#{genType typ} >|] -genType (TMap typ1 typ2) = - [lt|std::map<#{genType typ1}, #{genType typ2} >|] -genType (TUserDef className params) = - [lt|#{className}|] -genType (TTuple ts) = - -- TODO: FIX - foldr1 (\t1 t2 -> [lt|std::pair<#{t1}, #{t2} >|]) $ map genType ts -genType TObject = - [lt|msgpack::object|] - -genRetType :: Maybe Type -> LT.Text -genRetType Nothing = [lt|void|] -genRetType (Just t) = genType t - -templ :: FilePath -> [LT.Text] -> String -> String -> LT.Text -> LT.Text -templ filepath ns once name content = [lt| -// This file is auto-generated from #{filepath} -// *** DO NOT EDIT *** - -#ifndef #{namespace}_#{once}_#{name}_HPP_ -#define #{namespace}_#{once}_#{name}_HPP_ - -#{content} - -#endif // #{namespace}_#{once}_#{name}_HPP_ -|] where - namespace = LT.intercalate "_" $ map LT.toUpper ns - - -genNameSpace :: [LT.Text] -> LT.Text -> LT.Text -genNameSpace namespace content = f namespace - where - f [] = [lt|#{content}|] - f (n:ns) = [lt| -namespace #{n} { -#{f ns} -} // namespace #{n} -|] - -snoc xs x = xs ++ [x] diff --git a/msgpack-idl/Language/MessagePack/IDL/CodeGen/Erlang.hs b/msgpack-idl/Language/MessagePack/IDL/CodeGen/Erlang.hs deleted file mode 100644 index e2e8d5d..0000000 --- a/msgpack-idl/Language/MessagePack/IDL/CodeGen/Erlang.hs +++ /dev/null @@ -1,189 +0,0 @@ -{-# LANGUAGE QuasiQuotes, RecordWildCards, OverloadedStrings #-} - -module Language.MessagePack.IDL.CodeGen.Erlang ( - Config(..), - generate, - ) where - -import Data.Char -import Data.List -import qualified Data.Text as T -import qualified Data.Text.Lazy as LT -import qualified Data.Text.Lazy.IO as LT -import System.FilePath -import Text.Shakespeare.Text - -import Language.MessagePack.IDL.Syntax - -data Config - = Config - { configFilePath :: FilePath - } - deriving (Show, Eq) - -generate:: Config -> Spec -> IO () -generate Config {..} spec = do - let name = takeBaseName configFilePath - once = map toUpper name - - headerFile = name ++ "_types.hrl" - - LT.writeFile (headerFile) $ templ configFilePath once "TYPES" [lt| --ifndef(#{once}). --define(#{once}, 1). - --type mp_string() :: binary(). - -#{LT.concat $ map (genTypeDecl name) spec } - --endif. -|] - - LT.writeFile (name ++ "_server.tmpl.erl") $ templ configFilePath once "SERVER" [lt| - --module(#{name}_server). --author('@msgpack-idl'). - --include("#{headerFile}"). - -#{LT.concat $ map genServer spec} -|] - - LT.writeFile (name ++ "_client.erl") [lt| -% This file is automatically generated by msgpack-idl. --module(#{name}_client). --author('@msgpack-idl'). - --include("#{headerFile}"). --export([connect/3, close/1]). - -#{LT.concat $ map genClient spec} -|] - -genTypeDecl :: String -> Decl -> LT.Text -genTypeDecl _ MPMessage {..} = - genMsg msgName msgFields False - -genTypeDecl _ MPException {..} = - genMsg excName excFields True - -genTypeDecl _ MPType { .. } = - [lt| --type #{tyName}() :: #{genType tyType}. -|] - -genTypeDecl _ _ = "" - -genMsg name flds isExc = - let fields = map f flds - in [lt| --type #{name}() :: [ - #{LT.intercalate "\n | " fields} - ]. % #{e} -|] - where - e = if isExc then [lt| (exception)|] else "" - f Field {..} = [lt|#{genType fldType} % #{fldName}|] - -sortField flds = - flip map [0 .. maximum $ [-1] ++ map fldId flds] $ \ix -> - find ((==ix). fldId) flds - -makeExport i Function {..} = - let j = i + length methodArgs in - [lt|#{methodName}/#{show j}|] -makeExport _ _ = "" - - -genServer :: Decl -> LT.Text -genServer MPService {..} = [lt| - --export([#{LT.intercalate ", " $ map (makeExport 0) serviceMethods}]). - -#{LT.concat $ map genSetMethod serviceMethods} - -|] - where - genSetMethod Function {..} = - let typs = map (genRetType . maybe Nothing (Just . fldType)) $ sortField methodArgs - args = map f methodArgs - f Field {..} = [lt|#{capitalize0 fldName}|] - capitalize0 str = T.cons (toUpper $ T.head str) (T.tail str) - - in [lt| --spec #{methodName}(#{LT.intercalate ", " typs}) -> #{genRetType methodRetType}. -#{methodName}(#{LT.intercalate ", " args}) -> - Reply = <<"ok">>, % write your code here - Reply. -|] - genSetMethod _ = "" - -genServer _ = "" - -genClient :: Decl -> LT.Text -genClient MPService {..} = [lt| - --export([#{LT.intercalate ", " $ map (makeExport 1) serviceMethods}]). - --spec connect(inet:ip_address(), inet:port_number(), [proplists:property()]) -> {ok, pid()} | {error, any()}. -connect(Host,Port,Options)-> - msgpack_rpc_client:connect(tcp,Host,Port,Options). - --spec close(pid())-> ok. -close(Pid)-> - msgpack_rpc_client:close(Pid). - -#{LT.concat $ map genMethodCall serviceMethods} -|] - where - genMethodCall Function {..} = - let typs = map (genRetType . maybe Nothing (Just . fldType)) $ sortField methodArgs - args = map f methodArgs - f Field {..} = [lt|#{capitalize0 fldName}|] - capitalize0 str = T.cons (toUpper $ T.head str) (T.tail str) - in [lt| --spec #{methodName}(pid(), #{LT.intercalate ", " typs}) -> #{genRetType methodRetType}. -#{methodName}(Pid, #{LT.intercalate ", " args}) -> - msgpack_rpc_client:call(Pid, #{methodName}, [#{LT.intercalate ", " args}]). -|] - where - arg Field {..} = [lt|#{genType fldType} #{fldName}|] - val Field {..} = [lt|#{fldName}|] - - genMethodCall _ = "" - -genClient _ = "" - -genType :: Type -> LT.Text -genType (TInt sign bits) = - let base = if sign then "non_neg_integer" else "integer" :: LT.Text in - [lt|#{base}()|] -genType (TFloat _) = - [lt|float()|] -genType TBool = - [lt|boolean()|] -genType TRaw = - [lt|binary()|] -genType TString = - [lt|mp_string()|] -genType (TList typ) = - [lt|list(#{genType typ})|] -genType (TMap typ1 typ2) = - [lt|list({#{genType typ1}, #{genType typ2}})|] -genType (TUserDef className params) = - [lt|#{className}()|] -genType (TTuple ts) = - -- TODO: FIX - foldr1 (\t1 t2 -> [lt|{#{t1}, #{t2}}|]) $ map genType ts -genType TObject = - [lt|term()|] - -genRetType :: Maybe Type -> LT.Text -genRetType Nothing = [lt|void()|] -genRetType (Just t) = genType t - -templ :: FilePath -> String -> String -> LT.Text -> LT.Text -templ filepath once name content = [lt| -% This file is auto-generated from #{filepath} - -#{content}|] diff --git a/msgpack-idl/Language/MessagePack/IDL/CodeGen/Haskell.hs b/msgpack-idl/Language/MessagePack/IDL/CodeGen/Haskell.hs deleted file mode 100644 index 40fbff6..0000000 --- a/msgpack-idl/Language/MessagePack/IDL/CodeGen/Haskell.hs +++ /dev/null @@ -1,209 +0,0 @@ -{-# LANGUAGE TemplateHaskell, QuasiQuotes #-} -{-# LANGUAGE OverloadedStrings #-} -{-# LANGUAGE RecordWildCards #-} - -module Language.MessagePack.IDL.CodeGen.Haskell ( - Config(..), - generate, - ) where - -import Data.Char -import Data.Monoid -import qualified Data.Text as T -import qualified Data.Text.Lazy as LT -import qualified Data.Text.Lazy.IO as LT -import Text.Shakespeare.Text - -import Language.MessagePack.IDL.Syntax as MP - -data Config - = Config - { configFilePath :: FilePath - } - -generate :: Config -> Spec -> IO () -generate Config {..} spec = do - LT.writeFile "Types.hs" [lt| -{-# LANGUAGE TemplateHaskell #-} - -module Types where - -import Data.Int -import Data.MessagePack -import Data.Map (Map) -import qualified Data.Map as Map -import Data.Words -#{LT.concat $ map genTypeDecl spec} -|] - - LT.writeFile "Server.hs" [lt| -|] - - LT.writeFile "Client.hs" [lt| -module Server where - -import Data.ByteString (ByteString) -import qualified Data.ByteString as B -import Data.Map (Map) -import qualified Data.Map as M -import Data.Text (Text) -import qualified Data.Text as T - -import qualified Network.MessagePackRpc.Client as MP - -import Types -#{LT.concat $ map genClient spec} -|] - -genClient :: Decl -> LT.Text -genClient MPService {..} = - [lt| -newtype #{monadName} m a - = #{monadName} { un#{monadName} :: StateT () m a } - deriving (Monad, MonadIO, MonadTrans, MonadState ()) -#{LT.concat $ map genMethod serviceMethods} -|] - where - monadName = classize (serviceName) `mappend` "T" - genMethod Function {..} = - let ts = map (genType . fldType) methodArgs in - let typs = ts ++ [ [lt|#{monadName} (#{genRetType methodRetType})|] ] in - [lt| -#{methodize methodName} :: #{LT.intercalate " -> " typs} -#{methodize methodName} = MP.method "#{methodName}" -|] - genMethod f = error $ "unsupported: " ++ show f - -genClient _ = "" - -genTypeDecl :: Decl -> LT.Text -genTypeDecl MPMessage {..} = - let mems = LT.intercalate "\n , " $ map f msgFields in - [lt| -data #{dataName} - = #{dataName} - { #{mems} - } - deriving (Eq, Show) -deriveObject False ''#{dataName} -|] - where - dataName = classize msgName - f Field {..} = - let fname = uncapital dataName `mappend` (capital $ camelize fldName) in - [lt|#{fname} :: #{genType fldType}|] - -genTypeDecl _ = "" - -genType :: Type -> LT.Text -genType (TInt sign bits) = - let base = if sign then "Int" else "Word" :: T.Text in - [lt|#{base}#{show bits}|] -genType (TFloat False) = - [lt|Float|] -genType (TFloat True) = - [lt|Double|] -genType TBool = - [lt|Bool|] -genType TRaw = - [lt|ByteString|] -genType TString = - [lt|Text|] -genType (TList typ) = - [lt|[#{genType typ}]|] -genType (TMap typ1 typ2) = - [lt|Map (#{genType typ1}) (#{genType typ2})|] -genType (TTuple typs) = - [lt|(#{LT.intercalate ", " $ map genType typs})|] -genType (TUserDef name params) = - [lt|#{classize name}|] -genType (TObject) = - undefined - -genRetType :: Maybe Type -> LT.Text -genRetType Nothing = "()" -genRetType (Just t) = genType t - -classize :: T.Text -> T.Text -classize = capital . camelize - -methodize :: T.Text -> T.Text -methodize = uncapital . camelize - -camelize :: T.Text -> T.Text -camelize = T.concat . map capital . T.words . T.map ubToSpc where - ubToSpc '_' = ' ' - ubToSpc c = c - -capital :: T.Text -> T.Text -capital word = - (T.map toUpper $ T.take 1 word) `mappend` T.drop 1 word - -uncapital :: T.Text -> T.Text -uncapital word = - (T.map toLower $ T.take 1 word) `mappend` T.drop 1 word - -{- -genServer :: Spec -> IO Builder -genServer = undefined - -genClient :: Spec -> IO Builder -genClient spec = do - decs <- runQ $ genClient' spec - putStrLn $ pprint decs - undefined - -genClient' :: Spec -> Q [Dec] -genClient' spec = return . concat =<< mapM genDecl spec - -genDecl :: Decl -> Q [Dec] -genDecl (Message name super fields) = do - let clsName = mkName $ T.unpack name - con = recC clsName $ map genFld fields - d <- dataD (cxt []) clsName [] [con] [''Eq, ''Ord, ''Show] - return [d] - where - genFld (Field fid req typ fname _) = - varStrictType (mkName $ uncapital $ T.unpack name ++ capital (T.unpack fname)) (strictType notStrict $ genType typ) - -genDecl (Service name version meths) = do - return [] - -genDecl _ = do - d <- dataD (cxt []) (mkName "Ign") [] [] [] - return [d] - -genType :: MP.Type -> Q TH.Type -genType (TInt False 8 ) = conT ''Word8 -genType (TInt False 16) = conT ''Word16 -genType (TInt False 32) = conT ''Word32 -genType (TInt False 64) = conT ''Word64 -genType (TInt True 8 ) = conT ''Int8 -genType (TInt True 16) = conT ''Int16 -genType (TInt True 32) = conT ''Int32 -genType (TInt True 64) = conT ''Int64 - -genType (TFloat False) = conT ''Float -genType (TFloat True ) = conT ''Double - -genType TBool = conT ''Bool -genType TRaw = conT ''B.ByteString -genType TString = conT ''T.Text - -genType (TList typ) = - listT `appT` genType typ -genType (TMap kt vt) = - [t| M.Map $(genType kt) $(genType vt) |] - -genType (TClass name) = - conT $ mkName $ capital $ T.unpack name - -genType (TTuple typs) = - foldl appT (tupleT (length typs)) (map genType typs) - -capital (c:cs) = toUpper c : cs -capital cs = cs - -uncapital (c:cs) = toLower c : cs -uncapital cs = cs --} diff --git a/msgpack-idl/Language/MessagePack/IDL/CodeGen/Java.hs b/msgpack-idl/Language/MessagePack/IDL/CodeGen/Java.hs deleted file mode 100644 index b92c0ed..0000000 --- a/msgpack-idl/Language/MessagePack/IDL/CodeGen/Java.hs +++ /dev/null @@ -1,349 +0,0 @@ -{-# LANGUAGE QuasiQuotes, RecordWildCards, OverloadedStrings #-} - -module Language.MessagePack.IDL.CodeGen.Java ( - Config(..), - generate, - ) where - -import Data.Char -import Data.Monoid -import qualified Data.Text as T -import qualified Data.Text.Lazy as LT -import qualified Data.Text.Lazy.IO as LT -import System.FilePath -import System.Directory -import Text.Shakespeare.Text - -import Language.MessagePack.IDL.Syntax - -data Config - = Config - { configFilePath :: FilePath - , configPackage :: String - } - deriving (Show, Eq) - -generate :: Config -> Spec -> IO() -generate config spec = do - let typeAlias = map genAlias $ filter isMPType spec - dirName = joinPath $ map LT.unpack $ LT.split (== '.') $ LT.pack $ configPackage config - - genTuple config - createDirectoryIfMissing True dirName - mapM_ (genClient typeAlias config) spec - mapM_ (genStruct typeAlias config) spec - mapM_ (genException typeAlias config) spec - -{-- - LT.writeFile (name ++ "Server.java") $ templ (configFilePath ++ configPackage ++"/server/")[lt| -import org.msgpack.rpc.Server; -package #{configPackage} - -#{LT.concat $ map genServer spec} -|] ---} - -genTuple :: Config -> IO() -genTuple Config {..} = do - LT.writeFile("Tuple.java") $ templ (configFilePath) [lt| -package #{configPackage}; -public class Tuple<T, U> { - public T a; - public U b; -}; -|] - -genImport :: FilePath -> Decl -> LT.Text -genImport packageName MPMessage {..} = - [lt|import #{packageName}.#{formatClassNameT msgName}; -|] -genImport _ _ = "" - -genStruct :: [(T.Text, Type)] -> Config -> Decl -> IO() -genStruct alias Config{..} MPMessage {..} = do - let params = if null msgParam then "" else [lt|<#{T.intercalate ", " msgParam}>|] - resolvedMsgFields = map (resolveFieldAlias alias) msgFields - hashMapImport | not $ null [() | TMap _ _ <- map fldType resolvedMsgFields] = [lt|import java.util.HashMap;|] - | otherwise = "" - arrayListImport | not $ null [() | TList _ <- map fldType resolvedMsgFields] = [lt|import java.util.ArrayList;|] - | otherwise = "" - dirName = joinPath $ map LT.unpack $ LT.split (== '.') $ LT.pack configPackage - fileName = dirName ++ "/" ++ (T.unpack $ formatClassNameT msgName) ++ ".java" - - LT.writeFile fileName $ templ configFilePath [lt| -package #{configPackage}; - -#{hashMapImport} -#{arrayListImport} -import org.msgpack.MessagePack; -import org.msgpack.annotation.Message; - -@Message -public class #{formatClassNameT msgName} #{params} { - -#{LT.concat $ map genDecl resolvedMsgFields} - public #{formatClassNameT msgName}() { - #{LT.concat $ map genInit resolvedMsgFields} - } -}; -|] -genStruct _ _ _ = return () - -resolveMethodAlias :: [(T.Text, Type)] -> Method -> Method -resolveMethodAlias alias Function {..} = Function methodInherit methodName (resolveRetTypeAlias alias methodRetType) (map (resolveFieldAlias alias) methodArgs) -resolveMethodAlias _ f = f - -resolveFieldAlias :: [(T.Text, Type)] -> Field -> Field -resolveFieldAlias alias Field {..} = Field fldId (resolveTypeAlias alias fldType) fldName fldDefault - -resolveTypeAlias :: [(T.Text, Type)] -> Type -> Type -resolveTypeAlias alias ty = let fixedAlias = resolveTypeAlias alias in - case ty of - TNullable t -> - TNullable $ fixedAlias t - TList t -> - TList $ fixedAlias t - TMap s t -> - TMap (fixedAlias s) (fixedAlias t) - TTuple ts -> - TTuple $ map fixedAlias ts - TUserDef className params -> - case lookup className alias of - Just resolvedType -> resolvedType - Nothing -> TUserDef className (map fixedAlias params) - _ -> ty - -resolveRetTypeAlias :: [(T.Text, Type)] -> Maybe Type -> Maybe Type -resolveRetTypeAlias alias Nothing = Nothing -resolveRetTypeAlias alias (Just t) = Just (resolveTypeAlias alias t) - -genInit :: Field -> LT.Text -genInit Field {..} = case fldDefault of - Nothing -> "" - Just defaultVal -> [lt| #{fldName} = #{genLiteral defaultVal};|] - -genDecl :: Field -> LT.Text -genDecl Field {..} = - [lt| public #{genType fldType} #{fldName}; -|] - -genException :: [(T.Text, Type)] -> Config -> Decl -> IO() -genException alias Config{..} MPException{..} = do - LT.writeFile ( (formatClassName $ T.unpack excName) ++ ".java") $ templ configFilePath [lt| -package #{configPackage}; - -import org.msgpack.MessagePack; -import org.msgpack.annotation.Message; - -@Message -public class #{formatClassNameT excName} #{params}{ -#{LT.concat $ map genDecl excFields} - public #{formatClassNameT excName}() { - #{LT.concat $ map genInit excFields} - } -}; -|] - where - params = if null excParam then "" else [lt|<#{T.intercalate ", " excParam}>|] - super = case excSuper of - Just x -> [st|extends #{x}|] - Nothing -> "" -genException _ _ _ = return () - -genClient :: [(T.Text, Type)] -> Config -> Decl -> IO() -genClient alias Config {..} MPService {..} = do - let resolvedServiceMethods = map (resolveMethodAlias alias) serviceMethods - hashMapImport | not $ null [() | Just (TMap _ _) <- map methodRetType resolvedServiceMethods ] = [lt|import java.util.HashMap;|] - | otherwise = "" - arrayListImport | not $ null [() | Just (TList _) <- map methodRetType resolvedServiceMethods] = [lt|import java.util.ArrayList;|] - | otherwise = "" - dirName = joinPath $ map LT.unpack $ LT.split (== '.') $ LT.pack configPackage - fileName = dirName ++ "/" ++ (T.unpack className) ++ ".java" - - LT.writeFile fileName $ templ configFilePath [lt| -package #{configPackage}; - -#{hashMapImport} -#{arrayListImport} -import org.msgpack.rpc.Client; -import org.msgpack.rpc.loop.EventLoop; - -public class #{className} { - public #{className}(String host, int port, double timeout_sec) throws Exception { - EventLoop loop = EventLoop.defaultEventLoop(); - c_ = new Client(host, port, loop); - iface_ = c_.proxy(RPCInterface.class); - } - - public static interface RPCInterface { -#{LT.concat $ map genSignature resolvedServiceMethods} - } - -#{LT.concat $ map genMethodCall resolvedServiceMethods} - private Client c_; - private RPCInterface iface_; -}; -|] - where - className = (formatClassNameT serviceName) `mappend` "Client" - genMethodCall Function {..} = - let args = T.intercalate ", " $ map genArgs' methodArgs - vals = T.intercalate ", " $ pack methodArgs genVal in - case methodRetType of - Nothing -> [lt| - public void #{methodName}(#{args}) { - iface_.#{methodName}(#{vals}); - } -|] - Just typ -> [lt| - public #{genType typ} #{methodName}(#{args}) { - return iface_.#{methodName}(#{vals}); - } -|] - genMethodCall _ = "" - -genClient _ _ _ = return () - -genSignature :: Method -> LT.Text -genSignature Function {..} = - [lt| #{genRetType methodRetType} #{methodName}(#{args}); -|] - where - args = (T.intercalate ", " $ map genArgs' methodArgs) -genSignature _ = "" - -genArgs :: Maybe Field -> T.Text -genArgs (Just field) = genArgs' field -genArgs Nothing = "" - -genArgs' :: Field -> T.Text -genArgs' Field {..} = [st|#{genType fldType} #{fldName}|] - -pack :: [Field] -> (Maybe Field -> T.Text) -> [T.Text] -pack fields converter= - let ixs = map (\f -> fldId f) fields - dic = zip ixs [0..] - m = maximum (-1 :ixs) - sortedIxs = [ lookup ix dic | ix <- [0..m]] :: [Maybe Int] in - map (\sIx -> case sIx of - Nothing -> converter Nothing - Just i -> converter $ Just (fields!!i) ) sortedIxs - -genVal :: Maybe Field -> T.Text -genVal Nothing = "null" -genVal (Just field) = fldName field - -formatClassNameT :: T.Text -> T.Text -formatClassNameT = T.pack . formatClassName . T.unpack - -formatClassName :: String -> String -formatClassName = concatMap (\(c:cs) -> toUpper c:cs) . words . map (\c -> if c=='_' then ' ' else c) - -genServer :: Decl -> LT.Text -genServer _ = "" - -genLiteral :: Literal -> LT.Text -genLiteral (LInt i) = [lt|#{show i}|] -genLiteral (LFloat d) = [lt|#{show d}|] -genLiteral (LBool b) = [lt|#{show b}|] -genLiteral LNull = [lt|null|] -genLiteral (LString s) = [lt|#{show s}|] - -associateBracket :: [LT.Text] -> LT.Text -associateBracket msgParam = - if null msgParam then "" else [lt|<#{LT.intercalate ", " msgParam}>|] - - -genType :: Type -> LT.Text -genType (TInt _ bits) = case bits of - 8 -> [lt|byte|] - 16 -> [lt|short|] - 32 -> [lt|int|] - 64 -> [lt|long|] - _ -> [lt|int|] -genType (TFloat False) = - [lt|float|] -genType (TFloat True) = - [lt|double|] -genType TBool = - [lt|boolean|] -genType TRaw = - [lt|String|] -genType TString = - [lt|String|] -genType (TList typ) = - [lt|ArrayList<#{genWrapperType typ} >|] -genType (TMap typ1 typ2) = - [lt|HashMap<#{genType typ1}, #{genType typ2} >|] -genType (TUserDef className params) = - [lt|#{formatClassNameT className} #{associateBracket $ map genType params}|] -genType (TTuple ts) = - -- TODO: FIX - foldr1 (\t1 t2 -> [lt|Tuple<#{t1}, #{t2} >|]) $ map genWrapperType ts -genType TObject = - [lt|org.msgpack.type.Value|] - -genRetType :: Maybe Type -> LT.Text -genRetType Nothing = [lt|void|] -genRetType (Just t) = genType t - -genTypeWithContext :: Spec -> Type -> LT.Text -genTypeWithContext spec t = case t of - (TUserDef className params) -> - case lookup className $ map genAlias $ filter isMPType spec of - Just x -> genType x - Nothing -> "" - otherwise -> genType t - -isMPType :: Decl -> Bool -isMPType MPType {..} = True -isMPType _ = False - -genAlias :: Decl -> (T.Text, Type) -genAlias MPType {..} = (tyName, tyType) -genAlias _ = ("", TBool) - -genTypeWithTypedef :: T.Text -> Decl -> Maybe Type -genTypeWithTypedef className MPType {..} = - if className == tyName then Just tyType else Nothing -genTypeWithTypedef className _ = Nothing - -genWrapperType :: Type -> LT.Text -genWrapperType (TInt _ bits) = case bits of - 8 -> [lt|Byte|] - 16 -> [lt|Short|] - 32 -> [lt|Integer|] - 64 -> [lt|Long|] - _ -> [lt|Integer|] -genWrapperType (TFloat False) = - [lt|Float|] -genWrapperType (TFloat True) = - [lt|Double|] -genWrapperType TBool = - [lt|Boolean|] -genWrapperType TRaw = - [lt|String|] -genWrapperType TString = - [lt|String|] -genWrapperType (TList typ) = - [lt|ArrayList<#{genWrapperType typ} >|] -genWrapperType (TMap typ1 typ2) = - [lt|HashMap<#{genWrapperType typ1}, #{genWrapperType typ2} >|] -genWrapperType (TUserDef className params) = - [lt|#{formatClassNameT className} #{associateBracket $ map genWrapperType params}|] -genWrapperType (TTuple ts) = - -- TODO: FIX - foldr1 (\t1 t2 -> [lt|Tuple<#{t1}, #{t2} >|]) $ map genWrapperType ts -genWrapperType TObject = - [lt|org.msgpack.type.Value|] -genWrapperType (TNullable typ) = - genWrapperType typ - -templ :: FilePath -> LT.Text -> LT.Text -templ filepath content = [lt| -// This file is auto-generated from #{filepath} -// *** DO NOT EDIT *** - -#{content} - -|] diff --git a/msgpack-idl/Language/MessagePack/IDL/CodeGen/Perl.hs b/msgpack-idl/Language/MessagePack/IDL/CodeGen/Perl.hs deleted file mode 100644 index 357ef5d..0000000 --- a/msgpack-idl/Language/MessagePack/IDL/CodeGen/Perl.hs +++ /dev/null @@ -1,104 +0,0 @@ -{-# LANGUAGE QuasiQuotes, RecordWildCards, OverloadedStrings #-} - -module Language.MessagePack.IDL.CodeGen.Perl ( - Config(..), - generate, - ) where - -import Data.Char -import Data.List -import qualified Data.Text as T -import qualified Data.Text.Lazy as LT -import qualified Data.Text.Lazy.IO as LT -import System.FilePath -import Text.Shakespeare.Text - -import Language.MessagePack.IDL.Syntax - -data Config - = Config - { configFilePath :: FilePath - , configNameSpace :: String - } - deriving (Show, Eq) - -generate:: Config -> Spec -> IO () -generate Config {..} spec = do - let name = takeBaseName configFilePath - once = map toUpper name - ns = LT.splitOn "::" $ LT.pack configNameSpace - --- types - mapM_ writeType spec - --- clients - LT.writeFile (name ++ "_client.pm") [lt| -package #{name}_client; -use strict; -use warnings; -use AnyEvent::MPRPC::Client; -#{LT.concat $ map genClient spec} -|] - -writeType :: Decl -> IO () -writeType MPMessage {..} = - let fields = sortBy (\x y -> fldId x `compare` fldId y) msgFields - fieldNames = map fldName fields :: [T.Text] - packageName = msgName :: T.Text - in LT.writeFile (T.unpack packageName ++ ".pm") [lt|package #{LT.pack $ T.unpack packageName}; -sub new { - return bless { #{LT.concat $ map f fieldNames} }; -} - -1; -|] - where - f :: T.Text -> LT.Text - f name = LT.append (LT.pack $ T.unpack name) $ LT.pack " => \"\"," - -writeType MPException {..} = - let fields = sortBy (\x y -> fldId x `compare` fldId y) excFields - fieldNames = map fldName fields :: [T.Text] - packageName = excName :: T.Text - in LT.writeFile (T.unpack packageName ++ ".pm") [lt|package #{LT.pack $ T.unpack packageName}; -sub new { - return bless { #{LT.concat $ map f fieldNames} }; -} - -1; -|] - where - f :: T.Text -> LT.Text - f name = LT.append (LT.pack $ T.unpack name) $ LT.pack " => \"\",\n" - -writeType _ = return () - -genClient :: Decl -> LT.Text -genClient MPService {..} = [lt| -sub new { - my ($self, $host, $port) = @_; - my $client = AnyEvent::MPRPC::Client->new( - host => $host, - port => $port - ); - bless { client => $client }, $self; -}; - -sub bar { - my ($self, $lang, $xs) = @_; - $self->{'client'}->call(bar => [$xs, $lang])->recv; -}; - -1; -|] - -genClient _ = "" - -templ :: FilePath -> String -> String -> LT.Text -> LT.Text -templ filepath once name content = [lt| -// This file is auto-generated from #{filepath} -// *** DO NOT EDIT *** - -#{content} - -|] diff --git a/msgpack-idl/Language/MessagePack/IDL/CodeGen/Php.hs b/msgpack-idl/Language/MessagePack/IDL/CodeGen/Php.hs deleted file mode 100644 index 1c5bce6..0000000 --- a/msgpack-idl/Language/MessagePack/IDL/CodeGen/Php.hs +++ /dev/null @@ -1,181 +0,0 @@ -{-# LANGUAGE QuasiQuotes, RecordWildCards, OverloadedStrings #-} - -module Language.MessagePack.IDL.CodeGen.Php ( - Config(..), - generate, - ) where - -import Data.Char -import Data.List -import qualified Data.Text as T -import qualified Data.Text.Lazy as LT -import qualified Data.Text.Lazy.IO as LT -import System.FilePath -import Text.Shakespeare.Text -import Data.Monoid - -import Language.MessagePack.IDL.Syntax - -data Config - = Config - { configFilePath :: FilePath - } - deriving (Show, Eq) - -generate:: Config -> Spec -> IO () -generate Config {..} spec = do - let name = takeBaseName configFilePath - once = map toUpper name - - LT.writeFile (name ++ "_types.php") $ templ configFilePath once "TYPES" [lt| -include_once 'Net/MessagePackRPC.php'; - -#{LT.concat $ map genTypeDecl spec} - -class ObjectDecoder { - public static $USER_DEFINED_CLASSES = array( - #{LT.concat $ map genClassName spec} - ); - public static function decodeToObject($ret_array, $type_array) { - if ($type_array == "") { - // do nothing - $ret = $ret_array; - } else if (in_array($type_array, self::$USER_DEFINED_CLASSES)) { - // array -> object - $ret = new $type_array(); - $ret_keys = array_keys((array)$ret); - for ($i = 0; $i < count($ret_keys); $i++) { - $ret->{$ret_keys[$i]} = $ret_array[$i]; - } - } else { - // dissolve array - if (is_array($type_array)) { - if (count($type_array) == 1) { - // if array - foreach ($type_array as $key => $type) { - foreach ($ret_array as $ret_key => $ret_value) { - $ret[$ret_key] = $this->decodeToObject($ret_value, $type); - } - } - } else { - // if tuple - $ret = array(); - $i = 0; - foreach ($type_array as $type) { - $ret[$i] = $this->decodeToObject($ret_array[$i], $type); - $i++; - } - } - } else { - // type error - return $ret_array; - } - } - return $ret; - } -} - -|] - - LT.writeFile (name ++ "_client.php") [lt| -<?php -include_once(dirname(__FILE__)."/#{name}_types.php"); - -#{LT.concat $ map genClient spec} -?> -|] - -genClassName :: Decl -> LT.Text -genClassName MPMessage {..} = - [lt| "#{msgName}", - |] -genClassName _ = "" - -genTypeDecl :: Decl -> LT.Text -genTypeDecl MPMessage {..} = - genMsg msgName msgFields False - -genTypeDecl MPException {..} = - genMsg excName excFields True - -genTypeDecl _ = "" - -genMsg name flds isExc = - let fields = map f flds - fs = map (maybe undefined fldName) $ sortField flds - in [lt| -class #{name}#{e} { - -#{LT.concat fields} -} -|] - where - e = if isExc then [lt| extends Exception|] else "" - - f Field {..} = [lt| public $#{fldName}; -|] - -sortField flds = - flip map [0 .. maximum $ [-1] ++ map fldId flds] $ \ix -> - find ((==ix). fldId) flds - -genClient :: Decl -> LT.Text -genClient MPService {..} = [lt| -class #{serviceName} { - public function __construct($host, $port) { - $this->client = new MessagePackRPC_Client($host, $port); - } -#{LT.concat $ map genMethodCall serviceMethods} - private $client; -} -|] - where - genMethodCall Function {..} = - let args = LT.intercalate ", " $ map arg methodArgs in - let sortedArgs = LT.intercalate ", " $ map (maybe undefined arg) $ sortField methodArgs in - case methodRetType of - Nothing -> [lt| - public function #{methodName}(#{args}) { - $this->client->call("#{methodName}", array(#{sortedArgs})); - } -|] - Just typ -> [lt| - public function #{methodName}(#{args}) { - $ret = $this->client->call("#{methodName}", array(#{sortedArgs})); - $type_array = #{genTypeArray typ}; - return ObjectDecoder::decodeToObject($ret, $type_array); - } -|] - where - arg Field {..} = [lt|$#{fldName}|] - - genMethodCall _ = "" - -genClient _ = "" - -genTypeArray :: Type -> LT.Text -genTypeArray (TList typ) = - [lt|array(#{genTypeArray typ})|] -genTypeArray (TMap typ1 typ2) = - [lt|array(#{genTypeArray typ1} => #{genTypeArray typ2})|] -genTypeArray (TUserDef className params) = - [lt|"#{className}"|] -genTypeArray (TTuple ts) = - foldr1 (\t1 t2 -> [lt|array(#{t1}, #{t2})|]) $ map genTypeArray ts -genTypeArray _ = [lt|""|] - -genType :: Type -> LT.Text -genType (TUserDef className params) = - [lt|#{className}|] -genType _ = "" - -templ :: FilePath -> String -> String -> LT.Text -> LT.Text -templ filepath once name content = [lt| -// This file is auto-generated from #{filepath} -// *** DO NOT EDIT *** -<?php -#{content} -?> -|] - -snoc xs x = xs ++ [x] diff --git a/msgpack-idl/Language/MessagePack/IDL/CodeGen/Python.hs b/msgpack-idl/Language/MessagePack/IDL/CodeGen/Python.hs deleted file mode 100644 index 2e696b5..0000000 --- a/msgpack-idl/Language/MessagePack/IDL/CodeGen/Python.hs +++ /dev/null @@ -1,172 +0,0 @@ -{-# LANGUAGE QuasiQuotes, RecordWildCards, OverloadedStrings #-} - -module Language.MessagePack.IDL.CodeGen.Python ( - Config(..), - generate, - ) where - -import Data.List -import Data.Monoid -import qualified Data.Text as T -import qualified Data.Text.Lazy as LT -import qualified Data.Text.Lazy.IO as LT -import System.FilePath -import Text.Shakespeare.Text -import System.Directory - -import Language.MessagePack.IDL.Syntax - -data Config - = Config - { configFilePath :: FilePath } - deriving (Show, Eq) - -generate:: Config -> Spec -> IO () -generate Config {..} spec = do - createDirectoryIfMissing True (takeBaseName configFilePath); - setCurrentDirectory (takeBaseName configFilePath); - LT.writeFile "__init__.py" $ templ configFilePath [lt| -|] - LT.writeFile "types.py" $ templ configFilePath [lt| -import sys -import msgpack - -#{LT.concat $ map (genTypeDecl "") spec } -|] - - LT.writeFile "server.tmpl.py" $ templ configFilePath [lt| -import msgpackrpc -from types import * -# write your server here and change file name to server.py - -|] - - LT.writeFile "client.py" $ templ configFilePath [lt| -import msgpackrpc -from types import * - -#{LT.concat $ map (genClient) spec} -|] - -genTypeDecl :: String -> Decl -> LT.Text - -genTypeDecl _ MPType {..} = [lt| -class #{tyName}: - @staticmethod - def from_msgpack(arg): - return #{fromMsgpack tyType "arg"} -|] - -genTypeDecl _ MPMessage {..} = - genMsg msgName msgFields False - -genTypeDecl _ MPException {..} = - genMsg excName excFields True - -genTypeDecl _ _ = "" - -genMsg :: ToText a => a -> [Field] -> Bool -> LT.Text -genMsg name flds isExc = - let fs = zipWith (\ix -> maybe ("_UNUSED" `mappend` T.pack (show ix)) fldName) [0 .. ] (sortField flds) - in [lt| -class #{name}#{e}: - def __init__(self, #{LT.intercalate ", " $ map g fs}): -#{LT.concat $ map f flds} - def to_msgpack(self): - return (#{LT.concat $ map typ flds} - ) - - @staticmethod - def from_msgpack(arg): - return #{name}( - #{LT.intercalate ",\n " $ map make_arg flds}) -|] - - where - e = if isExc then [lt|(Exception)|] else "" - f Field {..} = [lt| self.#{fldName} = #{fldName} -|] - typ Field {..} = [lt| - self.#{fldName},|] - make_arg Field {..} = - let fldId_str = T.concat $ map T.pack ["arg[", (show fldId), "]"] in - [lt|#{fromMsgpack fldType fldId_str}|] - g str = [lt|#{str}|] - -sortField :: [Field] -> [Maybe Field] -sortField flds = - flip map [0 .. maximum $ [-1] ++ map fldId flds] $ \ix -> - find ((==ix). fldId) flds - -genClient :: Decl -> LT.Text -genClient MPService {..} = [lt| -class #{serviceName}: - def __init__ (self, host, port): - address = msgpackrpc.Address(host, port) - self.client = msgpackrpc.Client(address) -#{LT.concat $ map genMethodCall serviceMethods} -|] - where - genMethodCall Function {..} = - let arg_list = zipWith (\ix -> maybe ("_UNUSED" `mappend` T.pack (show ix)) fldName) [0 .. ] $ sortField methodArgs - args = LT.concat $ map (\x -> [lt|, #{x}|]) arg_list - in - case methodRetType of - Nothing -> [lt| - def #{methodName} (self#{args}): - self.client.call('#{methodName}'#{args}) -|] - Just ts -> [lt| - def #{methodName} (self#{args}): - retval = self.client.call('#{methodName}'#{args}) - return #{fromMsgpack ts "retval"} -|] - - genMethodCall _ = "" - -genClient _ = "" - -sanitize :: Char -> Char -sanitize '[' = '_' -sanitize ']' = '_' -sanitize c = c - -fromMsgpack :: Type -> T.Text -> LT.Text -fromMsgpack (TNullable t) name = fromMsgpack t name -fromMsgpack (TInt _ _) name = [lt|#{name}|] -fromMsgpack (TFloat False) name = [lt|#{name}|] -fromMsgpack (TFloat True) name = [lt|#{name}|] -fromMsgpack TBool name = [lt|#{name}|] -fromMsgpack TRaw name = [lt|#{name}|] -fromMsgpack TString name = [lt|#{name}|] -fromMsgpack (TList typ) name = - let - varname = T.append (T.pack "elem_") (T.map sanitize name) in - [lt|[#{fromMsgpack typ varname} for #{varname} in #{name}]|] - -fromMsgpack (TMap typ1 typ2) name = - let - keyname = T.append (T.pack "k_" ) $ T.map sanitize name - valname = T.append (T.pack "v_" ) $ T.map sanitize name - in - [lt|{#{fromMsgpack typ1 keyname} : #{fromMsgpack typ2 valname} for #{keyname},#{valname} in #{name}.items()}|] - -fromMsgpack (TUserDef className _) name = [lt|#{className}.from_msgpack(#{name})|] - -fromMsgpack (TTuple ts) name = - let elems = map (f name) (zip [0..] ts) in - [lt| (#{LT.intercalate ", " elems}) |] - where - f :: T.Text -> (Integer, Type) -> LT.Text - f n (i, (TUserDef className _ )) = [lt|#{className}.from_msgpack(#{n}[#{show i}]) |] - f n (i, _) = [lt|#{n}[#{show i}]|] - -fromMsgpack TObject name = [lt|#{name}|] - -templ :: FilePath -> LT.Text -> LT.Text -templ filepath content = [lt| -# This file is auto-generated from #{filepath} -# *** DO NOT EDIT *** - -#{content} -|] diff --git a/msgpack-idl/Language/MessagePack/IDL/CodeGen/Ruby.hs b/msgpack-idl/Language/MessagePack/IDL/CodeGen/Ruby.hs deleted file mode 100644 index 4225d65..0000000 --- a/msgpack-idl/Language/MessagePack/IDL/CodeGen/Ruby.hs +++ /dev/null @@ -1,285 +0,0 @@ -{-# LANGUAGE QuasiQuotes, RecordWildCards, OverloadedStrings #-} - -module Language.MessagePack.IDL.CodeGen.Ruby ( - Config(..), - generate, - ) where - -import Data.Char -import Data.List -import Data.Monoid -import qualified Data.Text as T -import qualified Data.Text.Lazy as LT -import qualified Data.Text.Lazy.IO as LT -import System.FilePath -import Text.Shakespeare.Text -import System.Directory - -import Language.MessagePack.IDL.Syntax - -data Config - = Config - { configFilePath :: FilePath - , configModule :: String - } - deriving (Show, Eq) - -generate:: Config -> Spec -> IO () -generate Config {..} spec = do - createDirectoryIfMissing True (takeBaseName configFilePath); - setCurrentDirectory (takeBaseName configFilePath); - let - mods = LT.splitOn "::" $ LT.pack configModule - - LT.writeFile "types.rb" $ templ configFilePath [lt| -require 'rubygems' -require 'msgpack/rpc' -#{genModule mods $ LT.concat $ map (genTypeDecl "") spec } -|] - - LT.writeFile ("client.rb") $ templ configFilePath [lt| -require 'rubygems' -require 'msgpack/rpc' -require File.join(File.dirname(__FILE__), 'types') - -#{genModule (snoc mods "Client") $ LT.concat $ map genClient spec}|] - -genTypeDecl :: String -> Decl -> LT.Text -genTypeDecl _ MPType {..} = [lt| -class #{capitalizeT tyName} - def #{capitalizeT tyName}.from_tuple(tuple) - #{fromTuple tyType "tuple"} - end - def to_tuple(o) - o - end -end -|] - -genTypeDecl _ MPMessage {..} = - genMsg msgName msgFields False - -genTypeDecl _ MPException {..} = - genMsg excName excFields True - -genTypeDecl _ _ = "" - -genMsg :: T.Text -> [Field] -> Bool -> LT.Text -genMsg name flds isExc = [lt| -class #{capitalizeT name}#{deriveError} - def initialize(#{T.intercalate ", " fs}) - #{LT.intercalate "\n " $ map makeSubst fs} - end - def to_tuple - [#{LT.intercalate ",\n " $ map make_tuple flds}] - end - def to_msgpack(out = '') - to_tuple.to_msgpack(out) - end - def #{capitalizeT name}.from_tuple(tuple) - #{capitalizeT name}.new( - #{LT.intercalate ",\n " $ map make_arg flds} - ) - end -#{indent 2 $ genAccessors sorted_flds} -end -|]-- #{indent 2 $ LT.concat writers} - where - sorted_flds = sortField flds - fs = map (maybe undefined fldName) sorted_flds --- afs = LT.intercalate ",\n " $ map make_tuple flds - make_tuple Field {..} = - [lt|#{toTuple True fldType fldName}|] - deriveError = if isExc then [lt| < StandardError|] else "" - make_arg Field {..} = - let fldIdstr = T.concat $ map T.pack ["tuple[", (show fldId), "]"] - in [lt|#{fromTuple fldType fldIdstr}|] - -makeSubst :: T.Text -> LT.Text -makeSubst fld = [lt| @#{fld} = #{fld} |] - -toTuple :: Bool -> Type -> T.Text -> LT.Text -toTuple _ (TTuple ts) name = - let elems = map (f name) (zip [0..] ts) in - [lt| [#{LT.concat elems}] |] - where - f :: T.Text -> (Integer, Type) -> LT.Text - f n (i, (TUserDef _fg _ )) = [lt|#{n}[#{show i}].to_tuple}, |] - f n (i, _) = [lt|#{n}[#{show i}], |] - -toTuple True t name = [lt|@#{toTuple False t name}|] -toTuple _ (TNullable t) name = [lt|#{toTuple False t name}|] -toTuple _ (TInt _ _) name = [lt|#{name}|] -toTuple _ (TFloat _) name = [lt|#{name}|] -toTuple _ TBool name = [lt|#{name}|] -toTuple _ TRaw name = [lt|#{name}|] -toTuple _ TString name = [lt|#{name}|] -toTuple _ (TList typ) name = [lt|#{name}.map {|x| #{toTuple False typ "x"}}|] -toTuple _ (TMap typ1 typ2) name = - [lt|#{name}.each_with_object({}) {|(k,v),h| h[#{toTuple False typ1 "k"}] = #{toTuple False typ2 "v"}}|] -toTuple _ (TUserDef _ _) name = [lt|#{name}.to_tuple|] - -toTuple _ _ _ = "" - -fromTuple :: Type -> T.Text -> LT.Text -fromTuple (TNullable t) name = [lt|#{fromTuple t name}|] -fromTuple (TInt _ _) name = [lt|#{name}|] -fromTuple (TFloat _) name = [lt|#{name}|] -fromTuple TBool name = [lt|#{name}|] -fromTuple TRaw name = [lt|#{name}|] -fromTuple TString name = [lt|#{name}|] -fromTuple (TList typ) name = - [lt|#{name}.map { |x| #{fromTuple typ "x"} }|] - -fromTuple (TMap typ1 typ2) name = - [lt|#{name}.each_with_object({}) {|(k,v),h| h[#{fromTuple typ1 "k"}] = #{fromTuple typ2 "v"} }|] - -fromTuple (TUserDef className _) name = [lt|#{capitalizeT className}.from_tuple(#{name})|] - -fromTuple (TTuple ts) name = - let elems = map (f name) (zip [0..] ts) in - [lt| [#{LT.intercalate ", " elems}] |] - where - f :: T.Text -> (Integer, Type) -> LT.Text - f n (i, (TUserDef className _ )) = [lt|#{capitalizeT className}.from_tuple(#{n}[#{show i}]) |] - f n (i, _) = [lt|#{n}[#{show i}] |] - -fromTuple (TObject) name = [lt|#{name}|] - -capitalizeT :: T.Text -> T.Text -capitalizeT a = T.cons (toUpper $ T.head a) (T.tail a) - -sortField :: [Field] -> [Maybe Field] -sortField flds = - flip map [0 .. maximum $ [-1] ++ map fldId flds] $ \ix -> find ((==ix). fldId) flds - -indent :: Int -> LT.Text -> LT.Text -indent ind lines = indentedConcat ind $ LT.lines lines - -indentedConcat :: Int -> [LT.Text] -> LT.Text -indentedConcat ind lines = - LT.dropAround (== '\n') $ LT.unlines $ map (indentLine ind) lines - -indentLine :: Int -> LT.Text -> LT.Text -indentLine _ "" = "" -indentLine ind line = mappend (LT.pack $ replicate ind ' ') line - -{- -extractJust :: [Maybe a] -> [a] -extractJust [] = [] -extractJust (Nothing:xs) = extractJust xs -extractJust (Just v:xs) = v : extractJust xs --} - -data AccessorType = Read | ReadWrite deriving Eq - -getAccessorType :: Type -> AccessorType -getAccessorType TBool = Read -getAccessorType (TMap _ _) = Read -getAccessorType (TUserDef _ _) = Read -getAccessorType _ = ReadWrite - -genAccessors :: [Maybe Field] -> LT.Text -genAccessors [] = "" -genAccessors fs = [lt| -#{genAccessors' Read "attr_reader" fs}#{genAccessors' ReadWrite "attr_accessor" fs}|] - -genAccessors' :: AccessorType -> String -> [Maybe Field] -> LT.Text -genAccessors' at an flds = gen $ map (maybe undefined fldName) $ filter fldTypeEq flds - where - gen [] = "" - gen fs = [lt| -#{an} #{T.intercalate ", " $ map (mappend ":") fs}|] - - fldTypeEq (Just Field {..}) = at == getAccessorType fldType - fldTypeEq Nothing = False - - --- TODO: Check when val is not null with TNullable --- TODO: Write single precision value on TFloat False -{- -genAttrWriter :: Field -> LT.Text -genAttrWriter Field {..} = genAttrWriter' fldType fldName - -genAttrWriter' :: Type -> T.Text -> LT.Text - -genAttrWriter' TBool n = [lt| -def #{n}=(val) - @#{n} = val.to_b -end -|] - -genAttrWriter' (TMap kt vt) n = [lt| -def #{n}=(val) - @#{n} = {} - val.each do |k, v| -#{indent 4 $ convert "k" "newk" kt} -#{indent 4 $ convert "v" "newv" vt} - end -end -|] - where - convert from to (TUserDef t p) = - genConvertingType from to (TUserDef t p) - convert from to _ = [lt|#{to} = #{from}|] -genAttrWriter' (TUserDef name types) n = [lt| -def #{n}=(val) -#{indent 2 $ convert "val" atn (TUserDef name types)} -end -|] - where - atn = [lt|@#{n}|] - convert from to (TUserDef t p) = - genConvertingType from to (TUserDef t p) -genAttrWriter' _ _ = "" --} - - -genClient :: Decl -> LT.Text -genClient MPService {..} = [lt| -class #{capitalizeT serviceName} - def initialize(host, port) - @cli = MessagePack::RPC::Client.new(host, port) - end#{LT.concat $ map genMethodCall serviceMethods} -end -|] - where - genMethodCall Function {..} = [lt| - def #{methodName}(#{defArgs}) -#{indent 4 $ genConvertingType' callStr "v" methodRetType} - end|] - where - defArgs = T.intercalate ", " $ map fldName methodArgs - callStr = [lt|@cli.call(#{callArgs})|] - callArgs = mappend ":" $ T.intercalate ", " $ methodName : sortedArgNames - sortedArgNames = map (maybe undefined fldName) $ sortField methodArgs - -genClient _ = "" - -genConvertingType :: LT.Text -> LT.Text -> Type -> LT.Text -genConvertingType unpacked _ (TUserDef t _) = [lt| -#{capitalizeT t}.from_tuple(#{unpacked})|] -genConvertingType _ _ _ = "" - -genConvertingType' :: LT.Text -> LT.Text -> Maybe Type -> LT.Text -genConvertingType' unpacked v (Just (TUserDef t p)) = [lt| -#{genConvertingType unpacked v (TUserDef t p)} -|] -genConvertingType' unpacked _ _ = [lt|#{unpacked}|] - -templ :: FilePath -> LT.Text -> LT.Text -templ filepath content = [lt|# This file is auto-generated from #{filepath} -# *** DO NOT EDIT *** -#{content} -|] - -genModule :: [LT.Text] -> LT.Text -> LT.Text -genModule modules content = f modules - where - f [] = [lt|#{content}|] - f (n:ns) = [lt|module #{n} -#{f ns} -end|] - -snoc :: [a] -> a -> [a] -snoc xs x = xs ++ [x] diff --git a/msgpack-idl/Language/MessagePack/IDL/Internal.hs b/msgpack-idl/Language/MessagePack/IDL/Internal.hs deleted file mode 100644 index 474a9b9..0000000 --- a/msgpack-idl/Language/MessagePack/IDL/Internal.hs +++ /dev/null @@ -1,14 +0,0 @@ -module Language.MessagePack.IDL.Internal ( - withDirectory - ) where - -import Control.Exception -import System.Directory - -withDirectory :: FilePath -> IO a -> IO a -withDirectory dir m = do - createDirectoryIfMissing True dir - bracket - getCurrentDirectory - setCurrentDirectory - (\_ -> setCurrentDirectory dir >> m) diff --git a/msgpack-idl/Language/MessagePack/IDL/Parser.hs b/msgpack-idl/Language/MessagePack/IDL/Parser.hs deleted file mode 100644 index fd55715..0000000 --- a/msgpack-idl/Language/MessagePack/IDL/Parser.hs +++ /dev/null @@ -1,14 +0,0 @@ -{-# Language TemplateHaskell, QuasiQuotes, FlexibleContexts #-} - -module Language.MessagePack.IDL.Parser ( - idl, - ) where - -import Data.Maybe -import qualified Data.Text as T -import Text.Peggy -import Text.Peggy.CodeGen.TH - -import Language.MessagePack.IDL.Syntax - -genDecs $(peggyFile "mpidl.peggy") diff --git a/msgpack-idl/Language/MessagePack/IDL/Syntax.hs b/msgpack-idl/Language/MessagePack/IDL/Syntax.hs deleted file mode 100644 index 1838a69..0000000 --- a/msgpack-idl/Language/MessagePack/IDL/Syntax.hs +++ /dev/null @@ -1,76 +0,0 @@ -{-# LANGUAGE DeriveDataTypeable #-} -module Language.MessagePack.IDL.Syntax where - -import Data.Data -import qualified Data.Text as T - -type Spec = [Decl] - -data Decl - = MPMessage - { msgName :: T.Text - , msgParam :: [T.Text] - , msgFields :: [Field] - } - | MPException - { excName :: T.Text - , excParam :: [T.Text] - , excSuper :: Maybe T.Text - , excFields :: [Field] - } - | MPType - { tyName :: T.Text - , tyType :: Type - } - | MPEnum - { enumName :: T.Text - , enumMem :: [(Int, T.Text)] - } - | MPService - { serviceName :: T.Text - , serviceVersion :: Maybe Int - , serviceMethods :: [Method] - } - deriving (Eq, Show, Data, Typeable) - -data Field - = Field - { fldId :: Int - , fldType :: Type - , fldName :: T.Text - , fldDefault :: Maybe Literal - } - deriving (Eq, Show, Data, Typeable) - -data Method - = Function - { methodInherit :: Bool - , methodName :: T.Text - , methodRetType :: Maybe Type - , methodArgs :: [Field] - } - | InheritName T.Text - | InheritAll - deriving (Eq, Show, Data, Typeable) - -data Type - = TInt Bool Int -- signed? bits - | TFloat Bool -- double prec? - | TBool - | TRaw - | TString - | TNullable Type - | TList Type - | TMap Type Type - | TTuple [Type] - | TUserDef T.Text [Type] - | TObject - deriving (Eq, Show, Data, Typeable) - -data Literal - = LInt Int - | LFloat Double - | LBool Bool - | LNull - | LString T.Text - deriving (Eq, Show, Data, Typeable) diff --git a/msgpack-idl/README.md b/msgpack-idl/README.md deleted file mode 100644 index 332c7ff..0000000 --- a/msgpack-idl/README.md +++ /dev/null @@ -1,66 +0,0 @@ -IDL compiler for MessagePack RPC -================================ - -# Install - -~~~ {.bash} -$ cabal update -$ cabal install msgpack-idl -~~~ - -If you use ghc <= 7.0.x, you may need to specify template-haskell's version. - -~~~ {.bash} -$ cabal install msgpack-idl --constraint='template-haskell == 2.5.*' -~~~ - -# Usage - -~~~ -msgpack-rpc 0.1 - -config [OPTIONS] IDLFILE LANG -MessagePack RPC IDL Compiler - -Common flags: - -o --output=DIR Output directory - -? --help Display help message - -V --version Print version information -~~~ - -# Tutorial - -* Prepare/Write msgspec file - -~~~ -message UserInfo { - 1: int uid - 2: string name - 3: int? flags = 1 -} - -enum Sites { - 0: SiteA - 1: SiteB - 2: SiteC -} - -message LogInLog { - 1: UserInfo user - 2: Sites site -} - -service Foo { - bool login(1: Sites site, 2: UserInfo) -} -~~~ - -* execute msgspec command for generating client/server code - -~~~ {.bash} -$ mprpc foo.msgspec cpp -o cpp -$ ls cpp -client.hpp -server.hpp -types.hpp -~~~ diff --git a/msgpack-idl/Setup.hs b/msgpack-idl/Setup.hs deleted file mode 100644 index 9a994af..0000000 --- a/msgpack-idl/Setup.hs +++ /dev/null @@ -1,2 +0,0 @@ -import Distribution.Simple -main = defaultMain diff --git a/msgpack-idl/Specification.md b/msgpack-idl/Specification.md deleted file mode 100644 index f4c7ae8..0000000 --- a/msgpack-idl/Specification.md +++ /dev/null @@ -1,160 +0,0 @@ -MessagePack IDL Specification -============================= - -# Syntax of Specification File - -~~~ -<spec> <- <message> - / <exception> - / <type-alias> - / <enum> - / <service> -~~~ - -## message - -~~~ -message <name> ['<' <type-param>, ... '>'] { - <field>* -} -~~~ - -## exception - -* Similar to message definition. -* It can throw as an exception. - -~~~ -exception <name> ['<' <type-param>, ... '>'] [< <exception-name>] { - <field>* -} -~~~ - -## type alias - -* no type-parameter - -~~~ -type <name> = <type> -~~~ - -## enum - -~~~ -enum <name> { - <enum-id>: <enum-name> - ... -} -~~~ - -## service - -* multiple services can be defind -* One server contains several services - -~~~ -service <name> [: <version>] { - <method> - ... -} -~~~ - -## field - -~~~ -<field> = <field-id> : <type> <field-name> [ = <literal>] -~~~ - -## method - -~~~ -inherit * # inherit all -inherit <name> # inherit specified method -inherit <type> <name> (<field>, ...) # inherit specified method and check type -<type> <name> (<field>, ...) # define new-method -~~~ - -# Types - -* Primitive types - - `void` - - `object` - - `bool` - - integral types - - `byte` / `short` / `int` / `long` - - `ubyte` / `ushort` / `uint` / `ulong` - - fractional types - - `float` - - `double` - - `raw` - - `string` - -* Compound types - - `list<type>` - - `map<type, type>` - - `tuple<type, ...>` - - `<type>?` - - nullable type - -* User-defined types - - `<class-name><type, ...>` - -# Literals - -* bool - - `true` - - `false` - -* integral - - `0`, `1`, `-1`, ... - -* fractional - - `3.14`, `.9`, `-1.23`, `1e9`, `2.23e-2` - -* string - - `"Hello, World!"`, `"\n\r\t\u1234"` # unicode string - -* nullable - - `null` - -# include other files - -~~~ -include "foo.idl" -~~~ - -# Protocol extensions - -## Request - -* `(type, msgid, method-name, param)` - - same as normal msgpack-rpc - - calls <method-name> method in newest version of default service - -* `(type, msgid, (method-name, service?, versoin?), param)` - - extension of msgpack-idl - - can specify service name and version - - service name and version can be omitted - - this make one server can serve multiple services - -## Response - -* `(type, msgid, error, result)` - - same as normal msgpack-rpc - -# Semantics - -* Field - - `field-id` specifies an index of serialized array - - default value specified by `literal` is used when it is omitted - - field type is nullable - - it's value is omitted, it becomes to null. - - otherwise, type error will be occured - -* Version - - server invokes only method matches exact same as specified version. - - `inherit` inherits - - same service - - less version - - has specified method - - largest version's method diff --git a/msgpack-idl/exec/main.hs b/msgpack-idl/exec/main.hs deleted file mode 100644 index e0bbaf5..0000000 --- a/msgpack-idl/exec/main.hs +++ /dev/null @@ -1,138 +0,0 @@ -{-# LANGUAGE DeriveDataTypeable #-} -{-# LANGUAGE RecordWildCards #-} - -import Data.Version -import System.Console.CmdArgs -import Text.Peggy - -import Language.MessagePack.IDL -import Language.MessagePack.IDL.Internal -import qualified Language.MessagePack.IDL.CodeGen.Haskell as Haskell -import qualified Language.MessagePack.IDL.CodeGen.Cpp as Cpp -import qualified Language.MessagePack.IDL.CodeGen.Ruby as Ruby -import qualified Language.MessagePack.IDL.CodeGen.Java as Java -import qualified Language.MessagePack.IDL.CodeGen.Php as Php -import qualified Language.MessagePack.IDL.CodeGen.Python as Python -import qualified Language.MessagePack.IDL.CodeGen.Perl as Perl -import qualified Language.MessagePack.IDL.CodeGen.Erlang as Erlang - -import Paths_msgpack_idl - -data MPIDL - = Haskell - { output_dir :: FilePath - , module_name :: String - , filepath :: FilePath - } - | Cpp - { output_dir :: FilePath - , namespace :: String - , pficommon :: Bool - , filepath :: FilePath } - | Ruby - { output_dir :: FilePath - , modules :: String - , filepath :: FilePath } - | Java - { output_dir :: FilePath - , package :: String - , filepath :: FilePath - } - | Php - { output_dir :: FilePath - , filepath :: FilePath - } - | Python - { output_dir :: FilePath - , filepath :: FilePath - } - | Perl - { output_dir :: FilePath - , namespace :: String - , filepath :: FilePath } - | Erlang - { output_dir :: FilePath - , filepath :: FilePath } - deriving (Show, Eq, Data, Typeable) - -main :: IO () -main = do - conf <- cmdArgs $ - modes [ Haskell - { output_dir = def - , module_name = "" - , filepath = def &= argPos 0 - } - , Cpp - { output_dir = def - , namespace = "msgpack" - , pficommon = False - , filepath = def &= argPos 0 - } - , Ruby - { output_dir = def - , modules = "MessagePack" - , filepath = def &= argPos 0 - } - , Java - { output_dir = def - , package = "msgpack" - , filepath = def &= argPos 0 - } - , Php - { output_dir = def - , filepath = def &= argPos 0 - } - , Python - { output_dir = def - , filepath = def &= argPos 0 - } - , Perl - { output_dir = def - , namespace = "msgpack" - , filepath = def &= argPos 0 - } - , Erlang - { output_dir = def - , filepath = def &= argPos 0 - } - ] - &= help "MessagePack RPC IDL Compiler" - &= summary ("mpidl " ++ showVersion version) - - compile conf - -compile :: MPIDL -> IO () -compile conf = do - espec <- parseFile idl (filepath conf) - case espec of - Left err -> do - print err - Right spec -> do - print spec - withDirectory (output_dir conf) $ do - case conf of - Cpp {..} -> do - Cpp.generate (Cpp.Config filepath namespace pficommon) spec - - Haskell {..} -> do - Haskell.generate (Haskell.Config filepath) spec - - Java {..} -> do - Java.generate (Java.Config filepath package) spec - - Perl {..} -> do - Perl.generate (Perl.Config filepath namespace) spec - - Php {..} -> do - Php.generate (Php.Config filepath) spec - - Python {..} -> do - Python.generate (Python.Config filepath) spec - - Ruby {..} -> do - Ruby.generate (Ruby.Config filepath modules) spec - - Erlang {..} -> do - Erlang.generate (Erlang.Config filepath) spec - diff --git a/msgpack-idl/mpidl.peggy b/msgpack-idl/mpidl.peggy deleted file mode 100644 index 0f13574..0000000 --- a/msgpack-idl/mpidl.peggy +++ /dev/null @@ -1,87 +0,0 @@ -idl :: Spec = decl* !. - -decl :: Decl - = "message" identifier typeParam "{" field* "}" - { MPMessage $1 $2 $3 } - / "exception" identifier typeParam ("<" identifier)? "{" field* "}" - { MPException $1 $2 $3 $4 } - / "type" identifier "=" ftype - { MPType $1 $2 } - / "enum" identifier "{" (integer ":" identifier)* "}" - { MPEnum $1 $2 } - / "service" identifier (":" integer)? "{" method* "}" - { MPService $1 $2 $3 } - -typeParam :: [T.Text] - = "<" (identifier, ",") ">" - / "" { [] } - -method :: Method - = "inherit" identifier { InheritName $1 } - / "inherit" "*" { InheritAll } - / "inherit"? rtype identifier "(" (field , ",") ")" - { Function (isJust $1) $3 $2 $4 } - -field :: Field - = integer ":" ftype identifier ("=" literal)? - { Field $1 $2 $3 $4 } - -ftype :: Type - = ftypeNN "?" { TNullable $1 } - / ftypeNN - -rtype :: Maybe Type - = "void" { Nothing } - / ftype { Just $1 } - -ftypeNN :: Type - = "byte" { TInt True 8 } - / "short" { TInt True 16 } - / "int" { TInt True 32 } - / "long" { TInt True 64 } - / "ubyte" { TInt False 8 } - / "ushort" { TInt False 16 } - / "uint" { TInt False 32 } - / "ulong" { TInt False 64 } - / "float" { TFloat False } - / "double" { TFloat True } - / "bool" { TBool } - / "raw" { TRaw } - / "string" { TString } - / "object" { TObject } - - / "list" "<" ftype ">" { TList $1 } - / "map" "<" ftype "," ftype ">" { TMap $1 $2 } - / "tuple" "<" (ftype , ",") ">" { TTuple $1 } - - / identifier ("<" (ftype , ",") ">")? - { TUserDef $1 (fromMaybe [] $2) } - -literal ::: Literal - = integer { LInt $1 } - / "true" { LBool True } - / "false" { LBool False } - / "null" { LNull } - / '\"' charLit* '\"' { LString $ T.pack $1 } - -charLit :: Char - = '\\' escChar - / ![\'\"] . - -escChar :: Char - = 'n' { '\n' } - / 'r' { '\r' } - / 't' { '\t' } - / '\\' { '\\' } - / '\"' { '\"' } - / '\'' { '\'' } - -integer ::: Int - = [0-9]+ { read $1 } - -identifier ::: T.Text - = [a-zA-Z_][a-zA-Z0-9_]* { T.pack ($1 : $2) } - -skip :: () = [ \r\n\t] { () } / comment -comment :: () = '#' _:(!'\n' . { () })* '\n' { () } -delimiter :: () = [()[\]{}<>;:,./?] { () } diff --git a/msgpack-idl/msgpack-idl.cabal b/msgpack-idl/msgpack-idl.cabal deleted file mode 100644 index c10ff3a..0000000 --- a/msgpack-idl/msgpack-idl.cabal +++ /dev/null @@ -1,68 +0,0 @@ -name: msgpack-idl -version: 0.2.1 -synopsis: An IDL Compiler for MessagePack -description: An IDL Compiler for MessagePack <http://msgpack.org/> -homepage: http://msgpack.org/ -license: BSD3 -license-file: LICENSE -author: Hideyuki Tanaka -maintainer: Hideyuki Tanaka <tanaka.hideyuki@gmail.com> -copyright: Copyright (c) 2011, Hideyuki Tanaka -category: Language -stability: Experimental -cabal-version: >=1.8 -build-type: Simple - -extra-source-files: mpidl.peggy - -source-repository head - type: git - location: git://github.com/msgpack/msgpack-haskell.git - -library - build-depends: base == 4.* - , bytestring >= 0.9 - , text >= 0.11 - , shakespeare-text == 1.0.* - , blaze-builder == 0.3.* - , template-haskell >= 2.5 && < 2.9 - , containers >= 0.4 - , filepath >= 1.1 && < 1.4 - , directory - , msgpack == 0.7.* - , peggy == 0.3.* - - ghc-options: -Wall - - exposed-modules: Language.MessagePack.IDL - Language.MessagePack.IDL.Check - Language.MessagePack.IDL.CodeGen.Cpp - Language.MessagePack.IDL.CodeGen.Haskell - Language.MessagePack.IDL.CodeGen.Java - Language.MessagePack.IDL.CodeGen.Perl - Language.MessagePack.IDL.CodeGen.Php - Language.MessagePack.IDL.CodeGen.Python - Language.MessagePack.IDL.CodeGen.Ruby - Language.MessagePack.IDL.CodeGen.Erlang - Language.MessagePack.IDL.Internal - Language.MessagePack.IDL.Parser - Language.MessagePack.IDL.Syntax - -executable mpidl - hs-source-dirs: exec - main-is: main.hs - - build-depends: base == 4.* - , directory >= 1.0 - , cmdargs == 0.10.* - , peggy == 0.3.* - , msgpack-idl - -test-suite mpidl-test - type: exitcode-stdio-1.0 - hs-source-dirs: test - main-is: test.hs - - build-depends: base == 4.* - , hspec >= 1.1 - , msgpack-idl diff --git a/msgpack-idl/test/TODO.txt b/msgpack-idl/test/TODO.txt deleted file mode 100644 index 93c7a6a..0000000 --- a/msgpack-idl/test/TODO.txt +++ /dev/null @@ -1,19 +0,0 @@ - -[ ] empty - [ ] message - [ ] exception - [ ] service - -[ ] swap order of - [ ] message - [ ] argument - -[ ] including support - -[ ] versioning - [ ] inherit - -[ ] type-check - [ ] Python - [ ] Ruby - [ ] (Java) diff --git a/msgpack-idl/test/idls/empty.idl b/msgpack-idl/test/idls/empty.idl deleted file mode 100644 index 9e89281..0000000 --- a/msgpack-idl/test/idls/empty.idl +++ /dev/null @@ -1,8 +0,0 @@ -message empty_message { -} - -exception empty_error { -} - -service empty_service { -} diff --git a/msgpack-idl/test/test.hs b/msgpack-idl/test/test.hs deleted file mode 100644 index 6372586..0000000 --- a/msgpack-idl/test/test.hs +++ /dev/null @@ -1,18 +0,0 @@ -import Test.Hspec.Monadic - -main :: IO () -main = hspecX $ do - describe "parser" $ do - it "can parse xxx..." $ do - pending - - describe "checker" $ do - it "can check xxx..." $ do - pending - - describe "generator" $ do - describe "haskell" $ do - it "can generate client" $ do - pending - it "can communicate reference server" $ do - pending diff --git a/msgpack-rpc/LICENSE b/msgpack-rpc/LICENSE deleted file mode 100644 index a79d6cb..0000000 --- a/msgpack-rpc/LICENSE +++ /dev/null @@ -1,30 +0,0 @@ -Copyright (c)2010, Hideyuki Tanaka - -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - - * Neither the name of Hideyuki Tanaka nor the names of other - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/msgpack-rpc/Setup.hs b/msgpack-rpc/Setup.hs deleted file mode 100644 index 9a994af..0000000 --- a/msgpack-rpc/Setup.hs +++ /dev/null @@ -1,2 +0,0 @@ -import Distribution.Simple -main = defaultMain diff --git a/msgpack-rpc/msgpack-rpc.cabal b/msgpack-rpc/msgpack-rpc.cabal deleted file mode 100644 index 0acf909..0000000 --- a/msgpack-rpc/msgpack-rpc.cabal +++ /dev/null @@ -1,57 +0,0 @@ -cabal-version: 1.12 -name: msgpack-rpc -version: 1.0.0 - -synopsis: A MessagePack-RPC Implementation -description: A MessagePack-RPC Implementation <http://msgpack.org/> -homepage: http://msgpack.org/ -bug-reports: https://github.com/msgpack/msgpack-haskell/issues -license: BSD3 -license-file: LICENSE -author: Hideyuki Tanaka -maintainer: Herbert Valerio Riedel <hvr@gnu.org> -copyright: (c) 2010-2015, Hideyuki Tanaka -category: Network -build-type: Simple - -source-repository head - type: git - location: http://github.com/msgpack/msgpack-haskell.git - subdir: msgpack-rpc - -library - default-language: Haskell2010 - hs-source-dirs: src - - exposed-modules: Network.MessagePack.Server - Network.MessagePack.Client - - build-depends: base >= 4.5 && < 4.13 - , bytestring >= 0.10.4 && < 0.11 - , text >= 1.2.3 && < 1.3 - , network >= 2.6 && < 2.9 - || >= 3.0 && < 3.1 - , mtl >= 2.2.1 && < 2.3 - , monad-control >= 1.0.0.0 && < 1.1 - , conduit >= 1.2.3.1 && < 1.3 - , conduit-extra >= 1.1.3.4 && < 1.3 - , binary-conduit >= 1.2.3 && < 1.3 - , exceptions >= 0.8 && < 0.11 - , binary >= 0.7.1 && < 0.9 - , msgpack >= 1.1.0 && < 1.2 - -test-suite msgpack-rpc-test - default-language: Haskell2010 - type: exitcode-stdio-1.0 - hs-source-dirs: test - main-is: test.hs - - build-depends: msgpack-rpc - -- inherited constraints via `msgpack-rpc` - , base - , mtl - , network - -- test-specific dependencies - , async == 2.2.* - , tasty == 1.2.* - , tasty-hunit == 0.10.* diff --git a/msgpack-rpc/src/Network/MessagePack/Client.hs b/msgpack-rpc/src/Network/MessagePack/Client.hs deleted file mode 100644 index e7a8edb..0000000 --- a/msgpack-rpc/src/Network/MessagePack/Client.hs +++ /dev/null @@ -1,126 +0,0 @@ -{-# LANGUAGE DeriveDataTypeable #-} -{-# LANGUAGE GeneralizedNewtypeDeriving #-} - -------------------------------------------------------------------- --- | --- Module : Network.MessagePackRpc.Client --- Copyright : (c) Hideyuki Tanaka, 2010-2015 --- License : BSD3 --- --- Maintainer: Hideyuki Tanaka <tanaka.hideyuki@gmail.com> --- Stability : experimental --- Portability: portable --- --- This module is client library of MessagePack-RPC. --- The specification of MessagePack-RPC is at --- <http://redmine.msgpack.org/projects/msgpack/wiki/RPCProtocolSpec>. --- --- A simple example: --- --- > import Network.MessagePack.Client --- > --- > add :: Int -> Int -> Client Int --- > add = call "add" --- > --- > main = execClient "localhost" 5000 $ do --- > ret <- add 123 456 --- > liftIO $ print ret --- --------------------------------------------------------------------- - -module Network.MessagePack.Client ( - -- * MessagePack Client type - Client, execClient, - - -- * Call RPC method - call, - - -- * RPC error - RpcError(..), - ) where - -import Control.Applicative -import Control.Exception -import Control.Monad -import Control.Monad.Catch -import Control.Monad.State.Strict as CMS -import Data.Binary as Binary -import qualified Data.ByteString as S -import Data.Conduit -import qualified Data.Conduit.Binary as CB -import Data.Conduit.Network -import Data.Conduit.Serialization.Binary -import Data.MessagePack -import Data.Typeable -import System.IO - -newtype Client a - = ClientT { runClient :: StateT Connection IO a } - deriving (Functor, Applicative, Monad, MonadIO, MonadThrow) - --- | RPC connection type -data Connection - = Connection - !(ResumableSource IO S.ByteString) - !(Sink S.ByteString IO ()) - !Int - -execClient :: S.ByteString -> Int -> Client a -> IO () -execClient host port m = - runTCPClient (clientSettings port host) $ \ad -> do - (rsrc, _) <- appSource ad $$+ return () - void $ evalStateT (runClient m) (Connection rsrc (appSink ad) 0) - --- | RPC error type -data RpcError - = ServerError Object -- ^ Server error - | ResultTypeError String -- ^ Result type mismatch - | ProtocolError String -- ^ Protocol error - deriving (Show, Eq, Ord, Typeable) - -instance Exception RpcError - -class RpcType r where - rpcc :: String -> [Object] -> r - -instance MessagePack o => RpcType (Client o) where - rpcc m args = do - res <- rpcCall m (reverse args) - case fromObject res of - Success r -> return r - Error e -> throwM $ ResultTypeError e - -instance (MessagePack o, RpcType r) => RpcType (o -> r) where - rpcc m args arg = rpcc m (toObject arg:args) - -rpcCall :: String -> [Object] -> Client Object -rpcCall methodName args = ClientT $ do - Connection rsrc sink msgid <- CMS.get - (rsrc', res) <- lift $ do - CB.sourceLbs (pack (0 :: Int, msgid, methodName, args)) $$ sink - rsrc $$++ sinkGet Binary.get - CMS.put $ Connection rsrc' sink (msgid + 1) - - case fromObject res of - Error e -> throwM $ ProtocolError e - Success (rtype, rmsgid, rerror, rresult) -> do - - when (rtype /= (1 :: Int)) $ - throwM $ ProtocolError $ - "invalid response type (expect 1, but got " ++ show rtype ++ ")" - - when (rmsgid /= msgid) $ - throwM $ ProtocolError $ - "message id mismatch: expect " - ++ show msgid ++ ", but got " - ++ show rmsgid - - case fromObject rerror of - Error e -> throwM $ ServerError rerror - Success () -> return rresult - --- | Call an RPC Method -call :: RpcType a - => String -- ^ Method name - -> a -call m = rpcc m [] diff --git a/msgpack-rpc/src/Network/MessagePack/Server.hs b/msgpack-rpc/src/Network/MessagePack/Server.hs deleted file mode 100644 index f525e4d..0000000 --- a/msgpack-rpc/src/Network/MessagePack/Server.hs +++ /dev/null @@ -1,133 +0,0 @@ -{-# LANGUAGE DeriveDataTypeable #-} -{-# LANGUAGE FlexibleContexts #-} -{-# LANGUAGE FlexibleInstances #-} -{-# LANGUAGE GeneralizedNewtypeDeriving #-} -{-# LANGUAGE MultiParamTypeClasses #-} -{-# LANGUAGE OverloadedStrings #-} -{-# LANGUAGE ScopedTypeVariables #-} - -------------------------------------------------------------------- --- | --- Module : Network.MessagePackRpc.Server --- Copyright : (c) Hideyuki Tanaka, 2010-2015 --- License : BSD3 --- --- Maintainer: tanaka.hideyuki@gmail.com --- Stability : experimental --- Portability: portable --- --- This module is server library of MessagePack-RPC. --- The specification of MessagePack-RPC is at --- <http://redmine.msgpack.org/projects/msgpack/wiki/RPCProtocolSpec>. --- --- A simple example: --- --- > import Network.MessagePack.Server --- > --- > add :: Int -> Int -> Server Int --- > add x y = return $ x + y --- > --- > main = serve 1234 [ method "add" add ] --- --------------------------------------------------------------------- - -module Network.MessagePack.Server ( - -- * RPC method types - Method, MethodType(..), - ServerT(..), Server, - -- * Build a method - method, - -- * Start RPC server - serve, - ) where - -import Control.Applicative -import Control.Monad -import Control.Monad.Catch -import Control.Monad.Trans -import Control.Monad.Trans.Control -import Data.Binary -import Data.Conduit -import qualified Data.Conduit.Binary as CB -import Data.Conduit.Network -import Data.Conduit.Serialization.Binary -import Data.List -import Data.MessagePack -import Data.Typeable - --- ^ MessagePack RPC method -data Method m - = Method - { methodName :: String - , methodBody :: [Object] -> m Object - } - -type Request = (Int, Int, String, [Object]) -type Response = (Int, Int, Object, Object) - -data ServerError = ServerError String - deriving (Show, Typeable) - -instance Exception ServerError - -newtype ServerT m a = ServerT { runServerT :: m a } - deriving (Functor, Applicative, Monad, MonadIO) - -instance MonadTrans ServerT where - lift = ServerT - -type Server = ServerT IO - -class Monad m => MethodType m f where - -- | Create a RPC method from a Hakell function - toBody :: f -> [Object] -> m Object - -instance (Functor m, MonadThrow m, MessagePack o) => MethodType m (ServerT m o) where - toBody m ls = case ls of - [] -> toObject <$> runServerT m - _ -> throwM $ ServerError "argument number error" - -instance (MonadThrow m, MessagePack o, MethodType m r) => MethodType m (o -> r) where - toBody f (x: xs) = - case fromObject x of - Error e -> throwM $ ServerError e - Success r -> toBody (f r) xs - --- | Build a method -method :: MethodType m f - => String -- ^ Method name - -> f -- ^ Method body - -> Method m -method name body = Method name $ toBody body - --- | Start RPC server with a set of RPC methods. -serve :: (MonadBaseControl IO m, MonadIO m, MonadCatch m, MonadThrow m) - => Int -- ^ Port number - -> [Method m] -- ^ list of methods - -> m () -serve port methods = runGeneralTCPServer (serverSettings port "*") $ \ad -> do - (rsrc, _) <- appSource ad $$+ return () - (_ :: Either ParseError ()) <- try $ processRequests rsrc (appSink ad) - return () - where - processRequests rsrc sink = do - (rsrc', res) <- rsrc $$++ do - obj <- sinkGet get - case fromObject obj of - Error e -> throwM $ ServerError e - Success req -> lift $ getResponse (req :: Request) - _ <- CB.sourceLbs (pack res) $$ sink - processRequests rsrc' sink - - getResponse (rtype, msgid, methodName, args) = do - when (rtype /= 0) $ - throwM $ ServerError $ "request type is not 0, got " ++ show rtype - ret <- callMethod methodName args - return ((1, msgid, toObject (), ret) :: Response) - - callMethod name args = - case find ((== name) . methodName) methods of - Nothing -> - throwM $ ServerError $ "method '" ++ name ++ "' not found" - Just m -> - methodBody m args diff --git a/msgpack-rpc/test/test.hs b/msgpack-rpc/test/test.hs deleted file mode 100644 index be4f51b..0000000 --- a/msgpack-rpc/test/test.hs +++ /dev/null @@ -1,45 +0,0 @@ -{-# LANGUAGE OverloadedStrings #-} - -import Control.Concurrent -import Control.Concurrent.Async -import Control.Monad.Trans -import Test.Tasty -import Test.Tasty.HUnit - -import Network.MessagePack.Client -import Network.MessagePack.Server -import Network.Socket (withSocketsDo) - -port :: Int -port = 5000 - -main :: IO () -main = withSocketsDo $ defaultMain $ - testGroup "simple service" - [ testCase "test" $ server `race_` (threadDelay 1000 >> client) ] - -server :: IO () -server = - serve port - [ method "add" add - , method "echo" echo - ] - where - add :: Int -> Int -> Server Int - add x y = return $ x + y - - echo :: String -> Server String - echo s = return $ "***" ++ s ++ "***" - -client :: IO () -client = execClient "localhost" port $ do - r1 <- add 123 456 - liftIO $ r1 @?= 123 + 456 - r2 <- echo "hello" - liftIO $ r2 @?= "***hello***" - where - add :: Int -> Int -> Client Int - add = call "add" - - echo :: String -> Client String - echo = call "echo" diff --git a/msgpack/msgpack.cabal b/msgpack/msgpack.cabal index 9283e9e..a23691a 100644 --- a/msgpack/msgpack.cabal +++ b/msgpack/msgpack.cabal @@ -1,6 +1,6 @@ cabal-version: 1.12 name: msgpack -version: 1.1.0.0 +version: 1.2.0.0 synopsis: A Haskell implementation of MessagePack description: @@ -71,20 +71,19 @@ library Compat.Binary Compat.Prelude - build-depends: base >= 4.7 && < 4.14 - , mtl >= 2.2.1 && < 2.3 - , bytestring >= 0.10.4 && < 0.11 - , text >= 1.2.3 && < 1.3 - , containers >= 0.5.5 && < 0.7 - , unordered-containers >= 0.2.5 && < 0.3 - , hashable >= 1.1.2.4 && < 1.4 - , vector >= 0.10.11 && < 0.13 - , deepseq >= 1.3 && < 1.5 - , binary >= 0.7.1 && < 0.9 - , semigroups >= 0.5.0 && < 0.20 - , time >= 1.4.2 && < 1.10 - , int-cast >= 0.1.1 && < 0.3 - , array >= 0.5.0 && < 0.6 + build-depends: base == 4.14.* + , mtl == 2.2.* + , bytestring == 0.10.* + , text == 1.2.* + , containers == 0.6.* + , unordered-containers == 0.2.* + , hashable == 1.3.* + , vector == 0.12.* + , deepseq == 1.4.* + , binary == 0.8.* + , time == 1.9.* + , int-cast == 0.2.* + , array == 0.5.* if !impl(ghc > 8.0) build-depends: fail == 4.9.* @@ -106,7 +105,7 @@ test-suite msgpack-tests ghc-options: -Wall - build-depends: msgpack + build-depends: msgpack -- inherited constraints via `msgpack` , base , binary @@ -117,8 +116,8 @@ test-suite msgpack-tests -- test-specific dependencies , async == 2.2.* , filepath == 1.3.* || == 1.4.* - , HsYAML >= 0.1.1 && < 0.2 - , tasty == 1.2.* - , tasty-quickcheck == 0.10.* - , tasty-hunit == 0.10.* - , QuickCheck == 2.13.* + , HsYAML >= 0.1.1 + , tasty + , tasty-quickcheck + , tasty-hunit + , QuickCheck From 5f4d3e4738e7fef079fcc78fc9de16c14140c28e Mon Sep 17 00:00:00 2001 From: Eric Torreborre <eric.torreborre@symbiont.io> Date: Thu, 2 Jun 2022 11:26:18 +0200 Subject: [PATCH 2/6] updated msgpack to base-4.16 (for GHC 9.2) and aeson 2 --- cabal.project | 6 ++++++ msgpack-aeson/msgpack-aeson.cabal | 6 +++--- msgpack-aeson/src/Data/MessagePack/Aeson.hs | 10 ++++++++-- msgpack/msgpack.cabal | 8 ++++---- msgpack/test/DataCases.hs | 16 ++++++++-------- 5 files changed, 29 insertions(+), 17 deletions(-) create mode 100644 cabal.project diff --git a/cabal.project b/cabal.project new file mode 100644 index 0000000..0c83c96 --- /dev/null +++ b/cabal.project @@ -0,0 +1,6 @@ +packages: */*.cabal + +source-repository-package + type: git + location: https://github.com/symbiont-io/int-cast.git + tag: cf3b8b1f8ef66b5120a65c312168f615b7a131b1 diff --git a/msgpack-aeson/msgpack-aeson.cabal b/msgpack-aeson/msgpack-aeson.cabal index 1a48f6e..181b8d4 100644 --- a/msgpack-aeson/msgpack-aeson.cabal +++ b/msgpack-aeson/msgpack-aeson.cabal @@ -23,10 +23,10 @@ library hs-source-dirs: src exposed-modules: Data.MessagePack.Aeson - build-depends: base == 4.14.* + build-depends: base == 4.16.* , aeson == 2.* - , bytestring == 0.10.* - , msgpack == 1.2.* + , bytestring == 0.11.* + , msgpack == 2.* , scientific == 0.3.* , text == 1.2.* , unordered-containers == 0.2.* diff --git a/msgpack-aeson/src/Data/MessagePack/Aeson.hs b/msgpack-aeson/src/Data/MessagePack/Aeson.hs index d97ecc1..02bcd2a 100644 --- a/msgpack-aeson/src/Data/MessagePack/Aeson.hs +++ b/msgpack-aeson/src/Data/MessagePack/Aeson.hs @@ -25,6 +25,8 @@ import Control.Arrow import Control.DeepSeq import Control.Exception import Data.Aeson as A +import Data.Aeson.KeyMap as KM (fromList, toList) +import Data.Aeson.Key as K (toText, fromText, Key) import qualified Data.ByteString.Lazy as L (ByteString) import Data.Data import qualified Data.HashMap.Strict as HM @@ -50,7 +52,7 @@ toAeson = \case ObjectBin b -> fail $ "ObjectBin is not supported by JSON" ObjectArray v -> Array <$> V.mapM toAeson v ObjectMap m -> - A.Object . HM.fromList . V.toList + A.Object . KM.fromList . V.toList <$> V.mapM (\(k, v) -> (,) <$> from k <*> toAeson v) m where from = mpResult fail pure . MP.fromObject ObjectExt _ _ -> fail "ObjectExt is not supported by JSON" @@ -68,7 +70,7 @@ fromAeson = \case Right _ -> fail "number out of bounds" String t -> pure $ ObjectStr t Array v -> ObjectArray <$> traverse fromAeson v - A.Object o -> (ObjectMap . V.fromList) <$> traverse fromEntry (HM.toList o) + A.Object o -> (ObjectMap . V.fromList) <$> traverse fromEntry ((\(k, v) -> (K.toText k, v)) <$> KM.toList o) where fromEntry (k, v) = (\a -> (ObjectStr k, a)) <$> fromAeson v @@ -111,6 +113,10 @@ instance MessagePack a => FromJSON (AsAeson a) where MP.Error e -> fail e MP.Success a -> mpResult fail (pure . AsAeson) $ fromObject a +instance MessagePack K.Key where + fromObject o = K.fromText <$> fromObject o + toObject = toObject . K.toText + -- | Encode to MessagePack via "Data.Aeson"'s 'ToJSON' instances packAeson :: ToJSON a => a -> MP.Result L.ByteString packAeson a = pack <$> (fromAeson $ toJSON a) diff --git a/msgpack/msgpack.cabal b/msgpack/msgpack.cabal index a23691a..70a9ceb 100644 --- a/msgpack/msgpack.cabal +++ b/msgpack/msgpack.cabal @@ -1,6 +1,6 @@ cabal-version: 1.12 name: msgpack -version: 1.2.0.0 +version: 2.0.0.0 synopsis: A Haskell implementation of MessagePack description: @@ -71,9 +71,9 @@ library Compat.Binary Compat.Prelude - build-depends: base == 4.14.* + build-depends: base == 4.16.* , mtl == 2.2.* - , bytestring == 0.10.* + , bytestring == 0.11.* , text == 1.2.* , containers == 0.6.* , unordered-containers == 0.2.* @@ -82,7 +82,7 @@ library , deepseq == 1.4.* , binary == 0.8.* , time == 1.9.* - , int-cast == 0.2.* + , int-cast == 0.3.* , array == 0.5.* if !impl(ghc > 8.0) diff --git a/msgpack/test/DataCases.hs b/msgpack/test/DataCases.hs index f41db7c..8654683 100644 --- a/msgpack/test/DataCases.hs +++ b/msgpack/test/DataCases.hs @@ -76,26 +76,26 @@ instance FromYAML DataCase where parseYAML = Y.withMap "DataCase" $ \m -> do msgpack <- m .: "msgpack" - obj <- do { Just (Y.Scalar Y.SNull) <- m .:! "nil" ; pure ObjectNil } + obj <- do { Just (Y.Scalar _ Y.SNull) <- m .:! "nil" ; pure ObjectNil } <|> do { Just b <- m .:! "bool" ; pure (ObjectBool b) } <|> do { Just i <- m .:! "number" ; pure (ObjectInt (fromInteger i)) } <|> do { Just s <- m .:! "bignum" ; pure (ObjectInt (read . T.unpack $ s)) } <|> do { Just d <- m .:! "number" ; pure (ObjectDouble d) } <|> do { Just t <- m .:! "string" ; pure (ObjectStr t) } <|> do { Just t <- m .:! "binary" ; pure (ObjectBin (hex2bin t)) } - <|> do { Just v@(Y.Sequence _ _) <- m .:! "array" ; pure (nodeToObj v) } - <|> do { Just m'@(Y.Mapping _ _) <- m .:! "map" ; pure (nodeToObj m') } + <|> do { Just v@(Y.Sequence _ _ _) <- m .:! "array" ; pure (nodeToObj v) } + <|> do { Just m'@(Y.Mapping _ _ _) <- m .:! "map" ; pure (nodeToObj m') } <|> do { Just (n,t) <- m .:! "ext" ; pure (ObjectExt n (hex2bin t)) } <|> do { Just (s,ns) <- m .:! "timestamp"; pure (toObject $ mptsFromPosixSeconds2 s ns) } pure (DataCase { dcMsgPack = map hex2bin msgpack, dcObject = obj }) -nodeToObj :: Y.Node -> Object -nodeToObj (Y.Scalar sca) = scalarToObj sca -nodeToObj (Y.Sequence _ ns) = ObjectArray (Lst.fromList (map nodeToObj ns)) -nodeToObj (Y.Mapping _ ns) = ObjectMap (Lst.fromList $ map (\(k,v) -> (nodeToObj k, nodeToObj v)) $ Map.toList ns) -nodeToObj (Y.Anchor _ n) = nodeToObj n +nodeToObj :: Y.Node Pos -> Object +nodeToObj (Y.Scalar _ sca) = scalarToObj sca +nodeToObj (Y.Sequence _ _ ns) = ObjectArray (Lst.fromList (map nodeToObj ns)) +nodeToObj (Y.Mapping _ _ ns) = ObjectMap (Lst.fromList $ map (\(k,v) -> (nodeToObj k, nodeToObj v)) $ Map.toList ns) +nodeToObj (Y.Anchor _ _ n) = nodeToObj n scalarToObj :: Y.Scalar -> Object scalarToObj Y.SNull = ObjectNil From 1b0fc26884896666bcde7a0910fa86478b77a62d Mon Sep 17 00:00:00 2001 From: Eric Torreborre <50922141+symbiont-eric-torreborre@users.noreply.github.com> Date: Tue, 5 Jul 2022 12:29:58 +0200 Subject: [PATCH 3/6] Expanded the bounds for hashable and time --- msgpack/msgpack.cabal | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/msgpack/msgpack.cabal b/msgpack/msgpack.cabal index 70a9ceb..b2284cc 100644 --- a/msgpack/msgpack.cabal +++ b/msgpack/msgpack.cabal @@ -77,11 +77,11 @@ library , text == 1.2.* , containers == 0.6.* , unordered-containers == 0.2.* - , hashable == 1.3.* + , hashable >= 1.3.* && < 2 , vector == 0.12.* , deepseq == 1.4.* , binary == 0.8.* - , time == 1.9.* + , time >= 1.9.* && < 2 , int-cast == 0.3.* , array == 0.5.* From 4318b1c36c1d97c2cf90416153c414cd43be13bf Mon Sep 17 00:00:00 2001 From: Eric Torreborre <50922141+symbiont-eric-torreborre@users.noreply.github.com> Date: Tue, 5 Jul 2022 12:37:39 +0200 Subject: [PATCH 4/6] Removed the wildcard after >= --- msgpack/msgpack.cabal | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/msgpack/msgpack.cabal b/msgpack/msgpack.cabal index b2284cc..31c9ad9 100644 --- a/msgpack/msgpack.cabal +++ b/msgpack/msgpack.cabal @@ -77,11 +77,11 @@ library , text == 1.2.* , containers == 0.6.* , unordered-containers == 0.2.* - , hashable >= 1.3.* && < 2 + , hashable >= 1.3 && < 2 , vector == 0.12.* , deepseq == 1.4.* , binary == 0.8.* - , time >= 1.9.* && < 2 + , time >= 1.9. && < 2 , int-cast == 0.3.* , array == 0.5.* From a5fa2c1c27375ff3deb6354e21542ad8a98cdbf1 Mon Sep 17 00:00:00 2001 From: Eric Torreborre <50922141+symbiont-eric-torreborre@users.noreply.github.com> Date: Tue, 5 Jul 2022 12:53:28 +0200 Subject: [PATCH 5/6] Missed a dot --- msgpack/msgpack.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/msgpack/msgpack.cabal b/msgpack/msgpack.cabal index 31c9ad9..28d5e49 100644 --- a/msgpack/msgpack.cabal +++ b/msgpack/msgpack.cabal @@ -81,7 +81,7 @@ library , vector == 0.12.* , deepseq == 1.4.* , binary == 0.8.* - , time >= 1.9. && < 2 + , time >= 1.9 && < 2 , int-cast == 0.3.* , array == 0.5.* From 634f1dd31acb56d90b7d7b27b70e4300efc33257 Mon Sep 17 00:00:00 2001 From: edgr <edgr@pm.me> Date: Tue, 15 Apr 2025 02:49:59 +0800 Subject: [PATCH 6/6] Remove constraints and old external libs --- cabal.project | 4 ---- msgpack-aeson/msgpack-aeson.cabal | 18 ++++++++-------- msgpack/msgpack.cabal | 35 +++++++++++++------------------ 3 files changed, 23 insertions(+), 34 deletions(-) diff --git a/cabal.project b/cabal.project index 0c83c96..7e6c5c7 100644 --- a/cabal.project +++ b/cabal.project @@ -1,6 +1,2 @@ packages: */*.cabal -source-repository-package - type: git - location: https://github.com/symbiont-io/int-cast.git - tag: cf3b8b1f8ef66b5120a65c312168f615b7a131b1 diff --git a/msgpack-aeson/msgpack-aeson.cabal b/msgpack-aeson/msgpack-aeson.cabal index 181b8d4..7ea19e8 100644 --- a/msgpack-aeson/msgpack-aeson.cabal +++ b/msgpack-aeson/msgpack-aeson.cabal @@ -23,15 +23,15 @@ library hs-source-dirs: src exposed-modules: Data.MessagePack.Aeson - build-depends: base == 4.16.* - , aeson == 2.* - , bytestring == 0.11.* - , msgpack == 2.* - , scientific == 0.3.* - , text == 1.2.* - , unordered-containers == 0.2.* - , vector == 0.12.* - , deepseq == 1.4.* + build-depends: base + , aeson + , bytestring + , msgpack + , scientific + , text + , unordered-containers + , vector + , deepseq default-language: Haskell2010 diff --git a/msgpack/msgpack.cabal b/msgpack/msgpack.cabal index 28d5e49..e024d69 100644 --- a/msgpack/msgpack.cabal +++ b/msgpack/msgpack.cabal @@ -71,28 +71,21 @@ library Compat.Binary Compat.Prelude - build-depends: base == 4.16.* - , mtl == 2.2.* - , bytestring == 0.11.* - , text == 1.2.* - , containers == 0.6.* - , unordered-containers == 0.2.* - , hashable >= 1.3 && < 2 - , vector == 0.12.* - , deepseq == 1.4.* - , binary == 0.8.* - , time >= 1.9 && < 2 - , int-cast == 0.3.* - , array == 0.5.* - - if !impl(ghc > 8.0) - build-depends: fail == 4.9.* - - ghc-options: -Wall - - if impl(ghc >= 7.10) - ghc-options: -fno-warn-trustworthy-safe + build-depends: base + , mtl + , bytestring + , text + , containers + , unordered-containers + , hashable + , vector + , deepseq + , binary + , time + , int-cast + , array + ghc-options: -Wall -fno-warn-trustworthy-safe test-suite msgpack-tests type: exitcode-stdio-1.0