]> gitweb @ CieloNegro.org - Rakka.git/commitdiff
improvements of page locking
authorpho <pho@cielonegro.org>
Fri, 18 Jan 2008 09:55:45 +0000 (18:55 +0900)
committerpho <pho@cielonegro.org>
Fri, 18 Jan 2008 09:55:45 +0000 (18:55 +0900)
darcs-hash:20080118095545-62b54-9ebca7f4e7d5eca0bd7537eaeb97a8a90645b93c.gz

Rakka/Page.hs
Rakka/Storage/Repos.hs
Rakka/Wiki/Engine.hs
defaultPages/StyleSheet/Default.xml
js/Makefile
js/editPage.js
schemas/rakka-page-1.0.rng

index 0affbf52f3b700bceb02e38a1770ad0d19165981..16835d5aafd79e247d227e557e93d77eb267e0ea 100644 (file)
@@ -60,6 +60,7 @@ data Page
     = Redirection {
         redirName       :: !PageName
       , redirDest       :: !PageName
+      , redirIsLocked   :: !Bool
       , redirRevision   :: RevNum
       , redirLastMod    :: UTCTime
       , redirUpdateInfo :: Maybe UpdateInfo
@@ -91,8 +92,8 @@ data UpdateInfo
 
 
 isRedirect :: Page -> Bool
-isRedirect (Redirection _ _ _ _ _) = True
-isRedirect _                       = False
+isRedirect (Redirection _ _ _ _ _ _) = True
+isRedirect _                         = False
 
 
 isEntity :: Page -> Bool
@@ -297,11 +298,14 @@ parseXmlizedPage
     = proc (name, tree)
     -> do updateInfo <- maybeA parseUpdateInfo -< tree
           redirect   <- maybeA (getXPathTreesInDoc "/page/@redirect/text()" >>> getText) -< tree
+          isLocked   <- (withDefault (getXPathTreesInDoc "/page/@isLocked/text()" >>> getText) "no"
+                         >>> parseYesOrNo) -< tree
           case redirect of
             Nothing   -> parseEntity -< (name, tree)
             Just dest -> returnA     -< (Redirection {
                                            redirName       = name
                                          , redirDest       = dest
+                                         , redirIsLocked   = isLocked
                                          , redirRevision   = undefined
                                          , redirLastMod    = undefined
                                          , redirUpdateInfo = updateInfo
index 8430068922a7e1b8e98676e539dc28d8f1f45296..e1f4b8e24049cab6d564666974328d948f1f4bf4 100644 (file)
@@ -158,9 +158,13 @@ loadPageInRepository repos name rev
                lastMod <- getRevisionProp "svn:date"
                           >>= return . fromJust . parseW3CDateTime . chomp . fromJust
 
+               isLocked <- getRevisionProp "rakka:isLocked"
+                           >>= return . isJust
+
                return Redirection {
                             redirName       = name
                           , redirDest       = dest
+                          , redirIsLocked   = isLocked
                           , redirRevision   = pageRev
                           , redirLastMod    = zonedTimeToUTC lastMod
                           , redirUpdateInfo = undefined
@@ -244,7 +248,7 @@ putPageIntoRepository repos userID page
                setNodeProp path "rakka:lang"      Nothing
                setNodeProp path "rakka:isTheme"   Nothing
                setNodeProp path "rakka:isFeed"    Nothing
-               setNodeProp path "rakka:isLocked"  Nothing
+               setNodeProp path "rakka:isLocked"  (encodeFlag $ redirIsLocked page)
                setNodeProp path "rakka:isBinary"  Nothing
                setNodeProp path "rakka:summary"   Nothing
                setNodeProp path "rakka:otherLang" Nothing
index 21bdad1a11a27ac2895cc6745d735aefef277f38..910ef15f318a2f3222443074a84d9de313ee29ec 100644 (file)
@@ -318,6 +318,7 @@ makeDraft interpTable
 
                pName     <- getXPathTreesInDoc "/page/@name/text()"         >>> getText -< tree
                pRedir    <- getXPathTreesInDoc "/page/@redirect/text()"     >>> getText -< tree
+               pIsLocked <- getXPathTreesInDoc "/page/@isLocked/text()"     >>> getText -< tree
                pRevision <- getXPathTreesInDoc "/page/@revision/text()"     >>> getText -< tree
                pLastMod  <- getXPathTreesInDoc "/page/@lastModified/text()" >>> getText -< tree
 
@@ -325,6 +326,7 @@ makeDraft interpTable
                arrIO2 (flip setAttribute "@title"        ) -< (doc, Just pName)
                arrIO2 (flip setAttribute "@type"         ) -< (doc, Just "application/x-rakka-redirection")
                arrIO2 (flip setAttribute "@mdate"        ) -< (doc, Just pLastMod)
+               arrIO2 (flip setAttribute "rakka:isLocked") -< (doc, Just pIsLocked)
                arrIO2 (flip setAttribute "rakka:revision") -< (doc, Just pRevision)
 
                -- リダイレクト先ページ名はテキストとして入れる
index d23597501d5ba339b91e5f65483df70e297b25b9..87515bd3407fbdc859b75fb2843bf1e8b2291132 100644 (file)
@@ -175,6 +175,9 @@ table.pageEditor {
 .pageEditor input[type="radio"] {
     margin-right: 10px;
 }
+.pageEditor input[type="checkbox"] {
+    margin-right: 5px;
+}
 .pageEditor input[type="text"], 
 .pageEditor input[type="file"],
 .pageEditor textarea {
index b318275a93ff4c2b4318f4450e49fdaec3f1974a..f8f2f2833fb0508aa0750471585764f8837b0bb4 100644 (file)
@@ -1,5 +1,5 @@
 JQUERY_SOURCE = jquery-1.2.2.js
-COMPRESSOR    = yuicompressor-2.2.4.jar
+COMPRESSOR    = yuicompressor-2.2.5.jar
 
 SOURCES = \
        $(JQUERY_SOURCE) \
index d50e5b40c6003c32d2029285366c2e72dd23886a..f0d3d507021ce012ea140ecd1ec256834726b516 100644 (file)
                     : $page.attr("redirect") != null           ? "redirect"
                     :                                            "unknown"
                     ;
+                var isLocked    = $page.attr("isLocked") == "yes";
                 var source
                     = $page.attr("redirect") != null ? $page.attr("redirect")
                     : $page.find("textData").text()
                     ;
                 var summary     = $page.find("summary").text();
                 
-                displayPageEditor(pageName, oldRevision, defaultType, source, summary);
+                displayPageEditor(pageName, oldRevision, defaultType, isLocked, source, summary);
             },
             error  : function (req) {
                 Rakka.hideWaitingMessage();
                 
                 if (req.status == 404) {
-                    displayPageEditor(pageName, null, "rakka", null, "");
+                    displayPageEditor(pageName, null, "rakka", false, null, "");
                 }
                 else {
                     $area.text("Error: " + req.status + " " + req.statusText);
     };
 
     Rakka.newPage = function () {
-        displayPageEditor("", null, "rakka", null, "");
+        displayPageEditor("", null, "rakka", false, null, "");
     };
 
-    var displayPageEditor = function (pageName, oldRevision, defaultType, source, summary) {
+    var displayPageEditor = function (pageName, oldRevision, defaultType, isLocked, source, summary) {
         var $area = Rakka.switchScreen();
 
         $previewHeader = $( $.H1({}, "Preview") );
 
         $(fldPageName).change(makeDirty);
 
+        var chkIsLocked
+            = $.INPUT({type   : "checkbox",
+                       checked: (isLocked ? "checked" : "")});
+
+        $(chkIsLocked).change(makeDirty);
+
+        var trIsLocked
+            = $.TR({},
+                   $.TH({}, "Page lock"),
+                   $.TD({},
+                        $.LABEL({},
+                                chkIsLocked,
+                                "Disallow anonymous users to edit or delete this page")));
+        
         var btnTypeRakka
             = $.INPUT({type   : "radio",
                        name   : "type",
                     pageName,
                     oldRevision,
                     fldPageName.value,
+                    chkIsLocked.checked,
                     "text/x-rakka",
                     fldSummary.value,
                     fldRakkaSource.value);
                     pageName,
                     oldRevision,
                     fldPageName.value,
+                    chkIsLocked.checked,
                     "text/css",
                     fldSummary.value,
                     fldCSSSource.value);
                     pageName,
                     oldRevision,
                     fldPageName.value,
+                    chkIsLocked.checked,
                     fldSummary.value,
                     fldUploadFile.value);
             }
                     pageName,
                     oldRevision,
                     fldPageName.value,
+                    chkIsLocked.checked,
                     fldRedirect.value);
             }
         });
                                    $.TH({}, "Page name"),
                                    $.TD({}, fldPageName)
                                   ),
+                              trIsLocked,
                               $.TR({},
                                    $.TH({}, "Page type"),
                                    $.TD({},
         Rakka.scrollToTopLeft();
     };
 
-    var submitTextPage = function (pageName, oldRevision, givenPageName, mimeType, summary, text) {
+    var submitTextPage = function (pageName, oldRevision, givenPageName, isLocked, mimeType, summary, text) {
         var doc = document.implementation.createDocument(
             "http://cielonegro.org/schema/Rakka/Page/1.0", "page", null);
 
             page.appendChild(updateInfo);
         }
 
+        page.setAttribute("isLocked", isLocked ? "yes" : "no");
         page.setAttribute("type", mimeType);
 
         if (summary != null) {
         });
     };
 
-    var submitBinaryPage = function (pageName, oldRevision, givenPageName, summary, path) {
+    var submitBinaryPage = function (pageName, oldRevision, givenPageName, isLocked, summary, path) {
         var doc = document.implementation.createDocument(
             "http://cielonegro.org/schema/Rakka/Page/1.0", "page", null);
 
             page.appendChild(updateInfo);
         }
 
+        page.setAttribute("isLocked", isLocked ? "yes" : "no");
         page.setAttribute("type", "");
 
         if (summary != null) {
         });
     };
 
-    var submitRedirection = function (pageName, oldRevision, givenPageName, destination) {
+    var submitRedirection = function (pageName, oldRevision, givenPageName, isLocked, destination) {
         var doc = document.implementation.createDocument(
             "http://cielonegro.org/schema/Rakka/Page/1.0", "page", null);
 
             page.appendChild(updateInfo);
         }
 
+        page.setAttribute("isLocked", isLocked ? "yes" : "no");
         page.setAttribute("redirect", destination);
 
         Rakka.displayWaitingMessage("Submitting... please wait.");
index 55051662502c1f67c148a4b5c82a43b9e2601d80..e344f0fd372ad596ae59a3955160f96c293c8b92 100644 (file)
          binaryData の場合のみ許される。 -->
   </optional>
 
+  <optional>
+    <!-- ログインしてゐないユーザーの編集を禁止するフラグ -->
+    <attribute name="isLocked">
+      <choice>
+        <value>yes</value>
+        <value>no</value>
+      </choice>
+    </attribute>
+  </optional>
+
   <choice>
     <!-- リダイレクトの場合 -->
     <attribute name="redirect">
         </attribute>
       </optional>
 
-      <optional>
-        <!-- ログインしてゐないユーザーの編集を禁止するフラグ -->
-        <attribute name="isLocked">
-          <choice>
-            <value>yes</value>
-            <value>no</value>
-          </choice>
-        </attribute>
-      </optional>
-
       <interleave>
         <optional>
           <element name="summary">