Template:DekiForum

    Table of contents
    No headers
    /*
    This template will take a snapshot the current page, and create a page directly below it using that
    snapshot. The page is titled as "CURRENT_PAGE_NAME - CURRENT_DATE_AND_TIME"
    */
    
    // CALL NEEDED EXTENSIONS
    dekiapi();
    
    <div id="newpagediv">
        // SET UP THE PLEASE WAIT DIV, BE SURE TO HIDE IT ON LOAD IN THE CSS
        <div id="waitdiv">
            <img src="http://developer.mindtouch.com/@api/deki/files/4851/=ajax-loader.gif" id="waitgif"/>
    	<br />
    	"Please wait...";
        </div>
        <div id="creatediv">
            // CREATE HIDDEN VARIABLES FOR THE CTOR TO USE
    	<input type="hidden" value=(page.path.."/Forum Topics") id="topicpath"/>
    	<input type="hidden" value=("Template:DekiForumPostInclude") id="ppath"/>
    	<input type="hidden" value=(site.uri) id="siteuri"/>
            <input type="hidden" value=(page.title .. ' - ' .. date.now) id="oldpname" />
            <input type="text" id="pname" name="pname" value="" size="35"/>
    	<input type="button" value="Create new post" ctor="
                var working = false;
    	    when($this.click){
                    // MAKE SURE WE'RE OK TO PROCEED, THEN SHOW THE WAIT DIV, AND
                    // PUBLISH A MESSAGE ON THE NEWPAGE CHANNEL WITH THE VARIABLES DEFINED ABOVE
                    if (working == false){
                        working = true;
    	    	    #creatediv.hide();
    	    	    #waitdiv.show();
    	    	    @newpage({siteuri: #siteuri.val(), pname: #pname.val(), topicpath: #topicpath.val(), ppath: #ppath.val()});                                
    	        };
                }
    
    	    when(@newpage) {
                    // DEFINE THE PAGE PATH, THEN GET THE PAGE API SO WE CAN CREATE THE PAGE
    	        var page_path = @newpage.topicpath + '/' + @newpage.pname; 
                    var site_api = {{site.api}};
                    var page_api = site_api + '/pages/=' + Deki.url.encode(Deki.url.encode(page_path));
    	        MindTouch.Web.Get(page_api, null, function(xhr){
                        // SUCCESSFULLY DID THE WEB.GET... LET'S CHECK TO MAKE SURE THE 
                        // PAGE DOESN'T ALREADY EXIST - THIS IS UNLIKELY GIVEN THE 
                        // UNIQUE TITLE, BUT BETTER SAFE THAN SORRY
    		    if (xhr.status == '200'){                                
    		        alert('That page already exists. Please choose a different name.');
    		        #creatediv.show();
    		        #waitdiv.hide();
    		        #pname.val('Enter ' + {{string.tolower(buttonname)}} + ' name');
                            working = false;
    		    };
    		    if (xhr.status == '404'){   
                            // PAGE DOESN'T EXIST, SO LET'S GET THE API FOR THE CURRENT PAGE
                            var cpagepath = @newpage.ppath;
                            //var cpagepath = @newpage.topicpath;
                            var template_api = site_api + '/pages/=' + Deki.url.encode(Deki.url.encode(cpagepath));
                            // ATTEMPT TO CREATE THE PAGE IN SAVE MODE
                            MindTouch.Deki.ReadPageContents(template_api, { mode: 'view' },
    				    function(xhr) {
    				        // lookup body[not(target)]
    				        var contents = $(xhr.xml).find('body:not([target])').text();
    				        // use as content on UpdatePage
    				        var api_params = {
    				            mode: 'edit'
    				        };
    				        MindTouch.Deki.UpdatePageContents(page_api, contents, api_params, 
                                                function(){
                                                    // SUCCESS! LET'S GO TO THAT PAGE NOW
                                                    @loadnewpage({siteuri: @newpage.siteuri, ppath: @newpage.topicpath, pname: @newpage.pname}); 
                                                },
                            		    function(){
                                                    // FAIL! LET THE USER KNOW SOMETHING BROKE
    		                                alert('Page create failed. Please try again.');
                                                    working = false; 
    				            });
                                        }
    			    );
                        }   
                    }, 
    	        function(){
                        // THE WEB.GET HAS FAILED. LET THE USER KNOW
    		    alert('Page read failed. Status: ' + xhr.statusText);    
                        working = false;				       
                    });    
    	    };
        
    	    when(@loadnewpage) {
                    // LOAD THE NEW PAGE IN THE CURRENT BROWSER WINDOW
    	        var newpath = (@loadnewpage.siteuri + @loadnewpage.ppath + '/' + @loadnewpage.pname);
    	        window.location = (newpath);
    	    };
            "/> 
        </div>
    </div>
    
    <style type="text/css">"
    
    #waitdiv {
        display: none;
        text-align: center;
    }
    
    #creatediv {
        text-align: left;
    }
    
    "</style>
    
    //Forum Listing
    let homepath = page.path .. "/Forum Topics";
    var homepage = wiki.getpage(homepath);
    var empty = true;
    if (homepage != nil) {
       let empty = (#homepage.subpages == 0);
    }
    var topics = [];
    if (!empty) {
       foreach (var p in homepage.subpages) {
          var entry = wiki.page(p.path);
          var originator = entry['//*[@id=\'ForumEntryOriginator\']'];
          if (xml.text(originator) == nil) { let originator = web.link(p.author.uri, p.author.name); }
             var lastAuthor = p.author;
             var lastDate = p.date;
             var lastChange = string.contains(p.editsummary, 'page created') ? '(new)' : '(E)';
             if (#p.comments != 0) {
                var lastComment = list.reverse(p.comments)[0];
                if (date.isafter(lastComment.date, p.date)) {
                let lastAuthor = lastComment.author;
                let lastDate = lastComment.date;
                let lastChange = '(C)';
             }
          }
       let lastAuthor = web.link(lastAuthor.uri, lastAuthor.name);
       let lastDate = date.format(lastDate, 's');
       var sticky = (p.tags.sticky != nil ? 'STICKY!' : '');
       let lastDate = (sticky != '' ? 'z' : 'a') .. lastDate;
       let topics ..= [ { page:p, originator:originator, author:lastAuthor, date:lastDate, change:lastChange, sticky:sticky } ];
       }
    let topics = list.sort(topics, 'date', true);
    }
    
    //I can't get datatable to see the XML table
    //datatable{table: "forumlist",options: {"aaSorting":["4","desc"],"sPaginationType":"full_numbers","iDisplayLength":10 } }; 
    <table id="forumlist" cellspacing="0" cellpadding="4" border="1" id="forumlist" class="table">
        <tbody>
            <tr>
                <th valign="top" style="width: 55%; ">"Topic"</th>
                <th valign="top" style="width: 10%; text-align: center; ">"Starter"</th>
                <th valign="top" style="width: 5%; text-align: center; ">"Replies"</th>
                <th valign="top" style="width: 25%; text-align: center; ">"Last Post"</th>
                <th valign="top" style="width: 5%; ">"Views"</th>
            </tr>
    foreach (var t in topics){
    //            <tr class=__count % 2 == 0 ? 'bg1' : 'bg2'>
             <tr class="bg2">
                <td valign="top"><font size="1" style="font-size: 16px; "><strong><font style="font-size: 10px; color: #598527; ">t.sticky</font> web.link(t.page.uri, t.page.title)</strong></font></td>
                <td style="vertical-align: top; text-align: center; ">t.originator;</td>
                var replies=(#t.page.comments>0)?#t.page.comments-1:0;
                <td style="vertical-align: top; text-align: center; ">replies</td>
                var lastchange = date.format(string.substr(t.date,1),'yyyy-M-d H:mm');' '; 
                if (t.change != "(new)") { 
                    let lastchange = lastchange.."by ".. t.author.." ".. t.change;
                }
                <td valign="top" style="text-align: center; "><font style="font-size: 12px; ">date.format(string.substr(t.date,1),'yyyy-M-d H:mm');' '; if (t.change != '(new)') { 'by '; t.author; ' '; }</font></td>
                <td valign="top" style="text-align: center; ">t.page.viewcount</td>
            </tr>
    }
    if (empty){
            <tr>
                <td colspan="5"><font style="font-size: 14px; "><strong>"(no topics yet)"</strong></font></td>
            </tr>
    }
        </tbody>
    </table>
    
    
    Tag page
    Viewing 2 of 2 comments: view all
    Can someone with unsafe html privileges resave this?
    Posted 13:00, 20 Jul 2010
    @craigsivils done
    Posted 13:37, 20 Jul 2010
    Viewing 2 of 2 comments: view all
    You must login to post a comment.

    Copyright © 2011 MindTouch, Inc. Powered by