Markdown: start adding markdown wiki mode.
authorWilfried Goesgens <dothebart@citadel.org>
Sat, 7 Dec 2013 23:36:08 +0000 (00:36 +0100)
committerWilfried Goesgens <dothebart@citadel.org>
Sat, 7 Dec 2013 23:36:08 +0000 (00:36 +0100)
15 files changed:
citadel/modules/wiki/serv_wiki.c
libcitadel/lib/libcitadel.h
webcit/dav_propfind.c
webcit/messages.c
webcit/roomops.c
webcit/roomviews.c
webcit/sitemap.c
webcit/static/.gitignore [changed mode: 0644->0755]
webcit/static/t/edit_message.html
webcit/static/t/navbar.html
webcit/static/t/room/create.html
webcit/static/t/view_blog/post.html [changed mode: 0755->0644]
webcit/static/t/view_message.html
webcit/static/t/viewomatic.html
webcit/wiki.c

index d656b2457c5c3a77e1158f0bd21fb4ce41faff1c..79845fa8a341d0d25cbc24521b8138bbac54f1b5 100644 (file)
@@ -94,7 +94,8 @@ int wiki_upload_beforesave(struct CtdlMessage *msg, recptypes *recp) {
        if (!CCC->logged_in) return(0); /* Only do this if logged in. */
 
        /* Is this a room with a Wiki in it, don't run this hook. */
-       if (CCC->room.QRdefaultview != VIEW_WIKI) {
+       if ((CCC->room.QRdefaultview != VIEW_WIKI) &&
+           (CCC->room.QRdefaultview != VIEW_WIKIMD)) {
                return(0);
        }
 
index b36f8314d26faafb04784638eabaf815063b9589..bd7c8da9ccf2be13e1bd6389a784e7a6f4652220 100644 (file)
@@ -100,6 +100,7 @@ typedef enum _room_views {
        VIEW_DRAFTS             = 9,    /* Drafts view */
        VIEW_BLOG               = 10,   /* Blog view */
        VIEW_QUEUE              = 11,   /* SMTP/... QUEUE rooms */
+       VIEW_WIKIMD             = 12,   /* Markdown Wiki view */
        VIEW_MAX,
        VIEW_JSON_LIST,
 } ROOM_VIEWS;
index 1e2e5e74a6c32b9228ca95a9a6809a60e751f011..64e7a1297c470d22860661d3e1cf74002a0acb10 100644 (file)
@@ -383,7 +383,8 @@ void dav_collection_list(void)
                        (view == VIEW_ADDRESSBOOK) ||
                        (view == VIEW_NOTES) ||
                        (view == VIEW_JOURNAL) ||
-                       (view == VIEW_WIKI)
+                       (view == VIEW_WIKI) ||
+                       (view == VIEW_WIKIMD)
                ) {
                        is_groupware_collection = 1;
                }
@@ -425,6 +426,7 @@ void dav_collection_list(void)
                                wc_printf("<G:vjournal-collection />");
                                break;
                        case VIEW_WIKI:
+                       case VIEW_WIKIMD:
                                wc_printf("<G:wiki-collection />");
                                break;
                        }
index e6dd7767d8f60d86934374277ebf8904dd40d909..9e538d234a64e106a857606ce5c3fac602f3b6c4 100644 (file)
@@ -1705,7 +1705,10 @@ void display_enter(void)
 
        begin_burst();
        output_headers(1, 0, 0, 0, 1, 0);
-       DoTemplate(HKEY("edit_message"), NULL, &NoCtx);
+       if (WCC->CurRoom.defview == VIEW_WIKIMD) 
+               DoTemplate(HKEY("edit_markdown_epic"), NULL, &NoCtx);
+       else
+               DoTemplate(HKEY("edit_message"), NULL, &NoCtx);
        end_burst();
 
        return;
index 66efe3faa75d4e71af67c5c052b0430614252c84..8720aecbc4e782b46d8c8c7c08898f289358aa1f 100644 (file)
@@ -1446,6 +1446,7 @@ InitModule_ROOMOPS
        REGISTERTokenParamDefine(VIEW_JOURNAL);
        REGISTERTokenParamDefine(VIEW_BLOG);
        REGISTERTokenParamDefine(VIEW_QUEUE);
+       REGISTERTokenParamDefine(VIEW_WIKIMD);          
 
        /* GNET types: */
        /* server internal, we need to know but ignore them. */
index 81829502cfdc4456e336f0c274bfeea1f8b2d4a5..40fa9e02a32383c3035965412f733970f5df089b 100644 (file)
@@ -11,7 +11,7 @@ char *viewdefs[VIEW_MAX];
  * This table defines which views may be selected as the
  * default view for a room at the time of its creation.
  */
-ROOM_VIEWS allowed_default_views[VIEW_MAX] = {
+int allowed_default_views[VIEW_MAX] = {
        1, /* VIEW_BBS          Bulletin board */
        1, /* VIEW_MAILBOX      Mailbox summary */
        1, /* VIEW_ADDRESSBOOK  Address book */
@@ -22,7 +22,9 @@ ROOM_VIEWS allowed_default_views[VIEW_MAX] = {
        0, /* VIEW_CALBRIEF     Brief Calendar */
        0, /* VIEW_JOURNAL      Journal */
        0, /* VIEW_DRAFTS       Drafts */
-       1  /* VIEW_BLOG         Blog */
+       1, /* VIEW_BLOG         Blog */
+       0, /* VIEW_QUEUE        Mail Queue */
+       1  /* VIEW_WIKIMD       MarkDown Wiki */
 };
 
 /*
@@ -30,17 +32,18 @@ ROOM_VIEWS allowed_default_views[VIEW_MAX] = {
  * which alternate views may be selected by the user.
  */
 ROOM_VIEWS exchangeable_views[VIEW_MAX][VIEW_MAX] = {
-       { 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 },    /* bulletin board */
-       { 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 },    /* mailbox summary */
-       { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },    /* address book */
-       { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 },    /* calendar */
-       { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 },    /* tasks */
-       { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },    /* notes */
-       { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },    /* wiki */
-       { 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 },    /* brief calendar */
-       { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 },    /* journal */
-       { 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1 },    /* drafts */
-       { 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 }     /* blog */
+       { 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 }, /* bulletin board */
+       { 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 }, /* mailbox summary */
+       { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, /* address book */
+       { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 }, /* calendar */
+       { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 }, /* tasks */
+       { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 }, /* notes */
+       { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 }, /* wiki */
+       { 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* brief calendar */
+       { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0 }, /* journal */
+       { 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0 }, /* drafts */
+       { 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 }, /* blog */
+       { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }  /* Markdown wiki */
 };
 
 /*
@@ -58,6 +61,7 @@ void initialize_viewdefs(void) {
        viewdefs[VIEW_JOURNAL]          = _("Journal");
        viewdefs[VIEW_DRAFTS]           = _("Drafts");
        viewdefs[VIEW_BLOG]             = _("Blog");
+       viewdefs[VIEW_WIKIMD]           = _("Markdown Wiki");
 }
 
 
@@ -84,6 +88,9 @@ void tmplput_ROOM_COLLECTIONTYPE(StrBuf *Target, WCTemplputParams *TP)
        case VIEW_WIKI:
                StrBufAppendBufPlain(Target, HKEY("wiki"), 0);
                break;
+       case VIEW_WIKIMD:
+               StrBufAppendBufPlain(Target, HKEY("x-markdown"), 0);
+               break;
        }
 }
 
index 0835c366abf631c4188a0afd68d1f796202c609c..477e7742928f9f23cdb6ee8b0e05224a623a4cb8 100644 (file)
@@ -175,17 +175,18 @@ void sitemap(void) {
 
                /* Output the messages in this room only if it's a room type we can make sense of */
                switch(roomlist->defview) {
-                       case VIEW_BBS:
-                               sitemap_do_bbs();
-                               break;
-                       case VIEW_WIKI:
-                               sitemap_do_wiki();
-                               break;
-                       case VIEW_BLOG:
-                               sitemap_do_blog();
-                               break;
-                       default:
-                               break;
+               case VIEW_BBS:
+                       sitemap_do_bbs();
+                       break;
+               case VIEW_WIKI:
+               case VIEW_WIKIMD:
+                       sitemap_do_wiki();
+                       break;
+               case VIEW_BLOG:
+                       sitemap_do_blog();
+                       break;
+               default:
+                       break;
                }
 
                struct sitemap_room_list *ptr = roomlist;
old mode 100644 (file)
new mode 100755 (executable)
index 4afa0b165b6a196aba8e003e0f6a6046bc064a45..116d1c3768f77402efb4b9647a73e3f354583c06 100644 (file)
 <div style="display:none" id="submit-o-matic"><ul>
 <li>
        <a href="javascript:submit_post('post');">
-               <img src="static/webcit_icons/essen/16x16/check.png" alt="">
+               <img src="static/webcit_icons/essen/16x16/check.png" alt=""">
                <span class="navbar_link">
                <?!("COND:BSTR", 1, "__RCPTREQUIRED")><?_("Send message")><?!("X", 1)>
                <??("COND:BSTR", 2, "__RCPTREQUIRED")><?_("Post message")><?!("X", 2)>
 </li>
 <li>
        <a href="javascript:submit_post('draft');">
-               <img src="static/webcit_icons/essen/16x16/draft.png" alt="">
+               <img src="static/webcit_icons/essen/16x16/draft.png" alt=""">
                <span class="navbar_link">
                <?_("Save to Drafts")>
                </span>
 </li>
 <li>
        <a href="javascript:show_attachments_form();">
-               <img src="static/webcit_icons/essen/16x16/attachement.png" alt="">
+               <img src="static/webcit_icons/essen/16x16/attachement.png" alt=""">
                <span class="navbar_link">
                <?_("Attachments:")>
                <span id="num_attachments"><?MSG:NATTACH></span>
 </li>
 <?!("COND:BSTR", 1, "__RCPTREQUIRED")><li>
        <a href="javascript:PopOpenAddressBook('recp_id|<?_("To:")>|cc_id|<?_("CC:")>|bcc_id|<?_("BCC:")>');">
-               <img src="static/webcit_icons/essen/16x16/contact.png" alt="">
+               <img src="static/webcit_icons/essen/16x16/contact.png" alt=""">
                <span class="navbar_link">
                <?_("Contacts")>
                </span>
index 05e3e3b35d180db5eff904aef8e71468297096f4..7bcc33ceec8060db79f6f36640c3997283696105 100644 (file)
                </li>
 <??("X", 80)>
 
+<?!("COND:THISROOM:CURR_VIEW", 80, #"VIEW_WIKIMD")>
+        <??("COND:WIKI:PAGE", 81, "home")>
+       <li class="readallmess">
+               <a href="wiki?page=home?go=<?THISROOM:NAME("U")>">
+                       <img src="static/webcit_icons/essen/16x16/readallmsg.png" alt="" width="16" height="16">
+                       <span class="navbar_link"><?_("Wiki home")></span>
+               </a>
+       </li>
+       <?!("X", 81)>
+               <li class="newmess">
+                               <a href="javascript:GetLoggedInFirst(encodeURIComponent('display_enter<?BSTR:FORWARD("page", "U")>'))">
+                                       <img  src="static/webcit_icons/essen/16x16/pencil.png" alt="" width="16" height="16">
+                                       <span class="navbar_link"><?_("Edit this page")></span>
+                               </a>
+                       </li>
+               <li class="newmess">
+                       <a href="wiki<?%("COND:WIKI:TYPE", 84, "wiki_history", "", "", "_history")><?BSTR:FORWARD("page", "U")>">
+                               <img  src="static/webcit_icons/essen/16x16/pen.png" alt="" width="16" height="16">
+                               <span class="navbar_link"><?%("COND:WIKI:TYPE", 86, "wiki_history", "", _("Current version", _("History"))></span>
+                       </a>
+               </li>
+<??("X", 80)>
+
 <?!("COND:THISROOM:CURR_VIEW", 90, #"VIEW_BLOG")>
        <li class="newmess">
                <a href="javascript:GetLoggedInFirst('display_enter')">
index 98bea8626a94b50d8d083840ac97ed5ab3d204f3..99cbde45cf274416a7d9a33807f6cd62ee06ba94 100644 (file)
@@ -56,6 +56,8 @@ else {
 
 <?!("COND:ALLOWED_DEFAULT_VIEW", 1, #"VIEW_WIKI")><option value="<?DEF:VAL(#"VIEW_WIKI")>" <?%("COND:THISROOM:CURR_VIEW", 2, #"VIEW_WIKI", 0, "selected", "")>><?ROOM:VIEW_STRING(#"VIEW_WIKI", "X")></option><??("X", 1)>
 
+<?!("COND:ALLOWED_DEFAULT_VIEW", 1, #"VIEW_WIKIMD")><option value="<?DEF:VAL(#"VIEW_WIKIMD")>" <?%("COND:THISROOM:CURR_VIEW", 2, #"VIEW_WIKIMD", 0, "selected", "")>><?ROOM:VIEW_STRING(#"VIEW_WIKIMD", "X")></option><??("X", 1)>
+
 <!-- <?!("COND:ALLOWED_DEFAULT_VIEW", 1, #"VIEW_CALBRIEF")><option value="<?DEF:VAL(#"VIEW_CALBRIEF")>" <?%("COND:THISROOM:CURR_VIEW", 2, #"VIEW_CALBRIEF", 0, "selected", "")>><?ROOM:VIEW_STRING(#"VIEW_CALBRIEF", "X")></option><??("X", 1)> -->
 
 <?!("COND:ALLOWED_DEFAULT_VIEW", 1, #"VIEW_JOURNAL")><option value="<?DEF:VAL(#"VIEW_JOURNAL")>" <?%("COND:THISROOM:CURR_VIEW", 2, #"VIEW_JOURNAL", 0, "selected", "")>><?ROOM:VIEW_STRING(#"VIEW_JOURNAL", "X")></option><??("X", 1)>
old mode 100755 (executable)
new mode 100644 (file)
index 103099c83463e23805c2b651ca22a0c2a1dcc6ba..79327b16c9c59b02d533517819328814b8a2c93f 100644 (file)
@@ -1,6 +1,6 @@
 <div class="message">
 <?!("COND:ROOM:TYPE_IS", 13, #"VIEW_BBS")><a name="<?MAIL:SUMM:N>"></a><??("X", 13)>
-<??("COND:ROOM:TYPE_IS", 12, #"VIEW_WIKI")><!-- skip headers for wiki rooms -->
+<??("COND:ROOM:TYPE_IS", 12, #"VIEW_WIKI")><??("COND:ROOM:TYPE_IS", 12, #"VIEW_WIKIMD")><!-- skip headers for wiki rooms -->
 <div class="message_header">
 <?!("COND:ROOM:TYPE_IS", 14, #"VIEW_BBS")><a href="<?MAIL:SUMM:PERMALINK>">[#]</a><??("X", 14)>
  <span><?MAIL:SUMM:DATEFULL></span>
@@ -35,7 +35,7 @@
    <a href="#" onclick="window.open('printmsg/<?MAIL:SUMM:N>', 'print<?MAIL:SUMM:N>', 'toolbar=no,location=no,directories=no,copyhistory=no,status=yes,scrollbars=yes,resizable=yes,width=600,height=400'); "><span>[</span><?_("Print")><span>]</span></a>
  </p>
 </div>
-<?!("X", 12)>
+<?!("X", 16)><?!("X", 12)>
 <div class="message_content"><div>
 <?MAIL:BODY>
 <?!("COND:MAIL:MIME:ATTACH:SUBMESSAGES", 10)>
index 3f6ce255f6adad6f75b8234c68b4488a3d8a57f6..e02b9f4b53f0097ce715e71d47d7addb5950260e 100644 (file)
@@ -19,6 +19,8 @@
 
 <?!("COND:THISROOM:HAVE_VIEW", 1, #"VIEW_WIKI")><option value="changeview?view=<?DEF:VAL(#"VIEW_WIKI")>" <?%("COND:THISROOM:CURR_VIEW", 2, #"VIEW_WIKI", 0, "selected", "")>><?ROOM:VIEW_STRING(#"VIEW_WIKI", "X")></option><??("X", 1)>
 
+<?!("COND:THISROOM:HAVE_VIEW", 1, #"VIEW_WIKIMD")><option value="changeview?view=<?DEF:VAL(#"VIEW_WIKIMD")>" <?%("COND:THISROOM:CURR_VIEW", 2, #"VIEW_WIKIMD", 0, "selected", "")>><?ROOM:VIEW_STRING(#"VIEW_WIKIMD", "X")></option><??("X", 1)>
+
 <!-- <?!("COND:THISROOM:HAVE_VIEW", 1, #"VIEW_CALBRIEF")><option value="changeview?view=<?DEF:VAL(#"VIEW_CALBRIEF")>" <?%("COND:THISROOM:CURR_VIEW", 2, #"VIEW_CALBRIEF", 0, "selected", "")>><?ROOM:VIEW_STRING(#"VIEW_CALBRIEF", "X")></option><??("X", 1)> -->
 
 <?!("COND:THISROOM:HAVE_VIEW", 1, #"VIEW_JOURNAL")><option value="changeview?view=<?DEF:VAL(#"VIEW_JOURNAL")>" <?%("COND:THISROOM:CURR_VIEW", 2, #"VIEW_JOURNAL", 0, "selected", "")>><?ROOM:VIEW_STRING(#"VIEW_JOURNAL", "X")></option><??("X", 1)>
@@ -27,4 +29,3 @@
                        </select>
        </div>
 </form>
-
index c4a4ac7504adcb4b9136fd486af5afe025e487ea..ec746fe86baf6b1a1c177efec02a96be9e24c9b5 100644 (file)
@@ -45,12 +45,14 @@ void str_wiki_index(char *s)
  */
 void display_wiki_page_backend(char *pagename, char *rev, int do_revert)
 {
+       wcsession *WCC = WC;
        const StrBuf *Mime;
        long msgnum = (-1L);
        char buf[256];
 
-       if (WC->CurRoom.view != VIEW_WIKI) {
-               wc_printf(_("'%s' is not a Wiki room."), ChrPtr(WC->CurRoom.name) );
+       if ((WCC->CurRoom.view != VIEW_WIKI) &&
+           (WCC->CurRoom.view != VIEW_WIKIMD)) {
+               wc_printf(_("'%s' is not a Wiki room."), ChrPtr(WCC->CurRoom.name) );
                return;
        }
 
@@ -74,7 +76,7 @@ void display_wiki_page_backend(char *pagename, char *rev, int do_revert)
        }
 
        if (msgnum >= 0L) {
-               read_message(WC->WBuf, HKEY("view_message"), msgnum, NULL, &Mime);
+               read_message(WCC->WBuf, HKEY("view_message"), msgnum, NULL, &Mime);
                return;
        }
 
@@ -347,6 +349,17 @@ InitModule_WIKI
                wiki_Cleanup
        );
 
+       RegisterReadLoopHandlerset(
+               VIEW_WIKIMD,
+               wiki_GetParamsGetServerCall,
+               wiki_PrintHeaderPage,
+               NULL,
+               NULL,
+               NULL,
+               NULL,
+               wiki_Cleanup
+       );
+
        WebcitAddUrlHandler(HKEY("wiki"), "", 0, display_wiki_page, 0);
        WebcitAddUrlHandler(HKEY("wiki_history"), "", 0, display_wiki_history, 0);
        WebcitAddUrlHandler(HKEY("wiki_pagelist"), "", 0, display_wiki_pagelist, 0);