]> gitweb @ CieloNegro.org - Rakka.git/commitdiff
implemented global lock
authorpho <pho@cielonegro.org>
Sat, 19 Jan 2008 05:54:36 +0000 (14:54 +0900)
committerpho <pho@cielonegro.org>
Sat, 19 Jan 2008 05:54:36 +0000 (14:54 +0900)
darcs-hash:20080119055436-62b54-3dcb1eaf3522793e7209bc7ec527696a0f0d55e2.gz

Rakka/Resource/PageEntity.hs
Rakka/SystemConfig.hs
Rakka/Utils.hs
defaultPages/StyleSheet/Default.xml
js/base.js
js/editPage.js
js/login.js
js/screen.js

index 8f63bbaad3b9c6f68748530ccc261cd68c0bb5d2..dbef4d5b1a16615a26cd4271be67afe4084a270c 100644 (file)
@@ -18,6 +18,7 @@ import           Rakka.Page
 import           Rakka.Resource
 import           Rakka.Storage
 import           Rakka.SystemConfig
+import           Rakka.Utils
 import           Rakka.Wiki.Engine
 import           System.FilePath
 import           Text.XML.HXT.Arrow.Namespace
@@ -116,8 +117,10 @@ entityToXHTML env
     -> do SiteName   siteName   <- getSysConfA (envSysConf env) -< ()
           BaseURI    baseURI    <- getSysConfA (envSysConf env) -< ()
           StyleSheet styleSheet <- getSysConfA (envSysConf env) -< ()
+          GlobalLock isGLocked  <- getSysConfA (envSysConf env) -< ()
 
-          name <- (getXPathTreesInDoc "/page/@name/text()" >>> getText) -< page
+          name     <- (getXPathTreesInDoc "/page/@name/text()" >>> getText) -< page
+          isLocked <- (getXPathTreesInDoc "/page/@isLocked/text()" >>> getText >>> parseYesOrNo) -< page
 
           let cssHref   = [uriToString id (mkObjectURI baseURI styleSheet) ""]
               scriptSrc = [uriToString id (baseURI { uriPath = uriPath baseURI </> "js" }) ""]
@@ -156,7 +159,9 @@ entityToXHTML env
                          )
                       += ( eelem "script"
                            += sattr "type" "text/javascript"
-                           += txt ("Rakka.baseURI = \"" ++ uriToString id baseURI "" ++ "\";")
+                           += txt ("Rakka.baseURI=\"" ++ uriToString id baseURI "" ++ "\";")
+                           += txt ("Rakka.isLocked=" ++ trueOrFalse isLocked ++ ";")
+                           += txt ("Rakka.isGlobalLocked=" ++ trueOrFalse isGLocked ++ ";")
                          )
                     )
                  += ( eelem "body"
@@ -229,6 +234,7 @@ notFoundToXHTML env
     -> do SiteName   siteName   <- getSysConfA (envSysConf env) -< ()
           BaseURI    baseURI    <- getSysConfA (envSysConf env) -< ()
           StyleSheet styleSheet <- getSysConfA (envSysConf env) -< ()
+          GlobalLock isGLocked  <- getSysConfA (envSysConf env) -< ()
 
           name <- (getXPathTreesInDoc "/pageNotFound/@name/text()" >>> getText) -< pageNotFound
 
@@ -264,6 +270,7 @@ notFoundToXHTML env
                       += ( eelem "script"
                            += sattr "type" "text/javascript"
                            += txt ("Rakka.baseURI = \"" ++ uriToString id baseURI "" ++ "\";")
+                           += txt ("Rakka.isGlobalLocked=" ++ trueOrFalse isGLocked ++ ";")
                          )
                     )
                  += ( eelem "body"
index eb526fbc45939a6863d2fc139fd2a45876f8138c..11fe124a155a62c4bcb4f8b4b28601f3804aca59 100644 (file)
@@ -12,6 +12,7 @@ module Rakka.SystemConfig
     , DefaultPage(..)
     , StyleSheet(..)
     , Languages(..)
+    , GlobalLock(..)
 
     , serializeStringPairs
     , deserializeStringPairs
@@ -209,3 +210,15 @@ instance SysConfValue Languages where
                                  , ("pt", "Português")
                                  , ("sv", "Svenska"  )
                                  ]
+
+
+newtype GlobalLock = GlobalLock Bool deriving (Show, Typeable)
+instance SysConfValue GlobalLock where
+    confPath _      = "globalLock"
+    serialize (GlobalLock isLocked)
+        | isLocked  = "*"
+        | otherwise = ""
+    deserialize "*" = Just (GlobalLock True)
+    deserialize ""  = Just (GlobalLock False)
+    deserialize _   = Nothing
+    defaultValue _  = GlobalLock False
index 0fddc6d64127baf25a1e5adbe19b58b5e758d039..693fdf2ebae8b695e7b1c30596c2e81d5bd09c40 100644 (file)
@@ -1,5 +1,6 @@
 module Rakka.Utils
     ( yesOrNo
+    , trueOrFalse
     , parseYesOrNo
     , maybeA
     , deleteIfEmpty
@@ -22,6 +23,11 @@ yesOrNo True  = "yes"
 yesOrNo False = "no"
 
 
+trueOrFalse :: Bool -> String
+trueOrFalse True  = "true"
+trueOrFalse False = "false"
+
+
 parseYesOrNo :: ArrowChoice a => a String Bool
 parseYesOrNo 
     = proc str -> do case str of
index 87515bd3407fbdc859b75fb2843bf1e8b2291132..9f4b8e75dfbf32bb3fce47a581c4f452a1f38bf4 100644 (file)
@@ -292,6 +292,13 @@ input[type="button"] {
 input[type="button"]:active {
     background-color: #999999;
 }
+input[type="button"][disabled] {
+    border-color: #e5e5e5;
+    color: #b5b5b5;
+}
+input[type="button"][disabled]:active {
+    background-color: #f5f5f5;
+}
 
 .header, .footer, .sideBar {
     background-color: #eeeeee;
index 78c08cdc5a5b2818a389d3f6cf2069d3b7c5779f..f2aa402fc91921426446e2c08ae6bf01711c11ce 100644 (file)
@@ -1,4 +1,6 @@
 /* Namespace Rakka */
 var Rakka = {};
 
-Rakka.baseURI = null;
+Rakka.baseURI        = null;
+Rakka.isLocked       = false;
+Rakka.isGlobalLocked = false;
index f0d3d507021ce012ea140ecd1ec256834726b516..4e5d25512cb518b79d199b14cb59515cf229e16a 100644 (file)
@@ -74,8 +74,8 @@
         $(fldPageName).change(makeDirty);
 
         var chkIsLocked
-            = $.INPUT({type   : "checkbox",
-                       checked: (isLocked ? "checked" : "")});
+            = $.INPUT({type    : "checkbox",
+                       checked : (isLocked ? "checked" : "")});
 
         $(chkIsLocked).change(makeDirty);
 
 
         $area.append(pageEditor);
 
+        if (!Rakka.isLoggedIn() || Rakka.isGlobalLocked) {
+            $(trIsLocked).hide();
+        }
+
         isDirty = false;
     };
 
index 174376bc590a3cf8a44a765dbcfd017d449bae48..48a19b626fdd7e6e1caea341d6172a7b163887a6 100644 (file)
@@ -77,6 +77,7 @@
     var logout = function () {
         document.cookie = "rakkaLoginInfo=;max-age=0";
         updateLoginState();
+        Rakka.restoreScreen();
     };
 
     var currentUserID;
                 .click(function () {
                     logout();
                 });
+
+            $("input.newButton").attr({disabled: ""});
+            
+            $("input.editButton").attr({disabled: ""});
         }
         else {
             /* ログインしてゐない */
                 .val("Login")
                 .unbind("click")
                 .click(Rakka.showLoginPanel);
+
+            $("input.newButton").attr({
+                disabled: (Rakka.isGlobalLocked ? "disabled" : "")
+            });
+            
+            $("input.editButton").attr({
+                disabled: (Rakka.isLocked || Rakka.isGlobalLocked ? "disabled" : "")
+            });
         }
     };
 
     Rakka.setAuthorization = function (req) {
-        if (currentUserID != null) {
+        if (Rakka.isLoggedIn()) {
             req.setRequestHeader(
                 "Authorization",
                     "Basic " + Rakka.encodeBase64(currentUserID + ":" + currentPassword));
         }
     };
 
+    Rakka.isLoggedIn = function () {
+        return currentUserID != null;
+    };
+
     $(document).ready(function () {
         updateLoginState();
     });
index 9fc50e76e93f518c84b13e91164de7ca213c7de6..95ee043d486123c4a8c1e55630a668ef25cf64b2 100644 (file)
     };
 
     Rakka.restoreScreen = function () {
-        if (switchedArea == null) {
-            throw new Error("Rakka.restoreScreen(): not switched");
-        }
+        if (switchedArea != null) {
+            $("div.sideBar div.outline").show();
 
-        $("div.sideBar div.outline").show();
+            $("p.redirection").show();
 
-        $("p.redirection").show();
+            $(switchedArea).remove();
+            switchedArea = null;
 
-        $(switchedArea).remove();
-        switchedArea = null;
-
-        $("div.body").children().show();
+            $("div.body").children().show();
+        }
         return null;
     };