/*
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>
| Images 0 | ||
|---|---|---|
| No images to display in the gallery. |
Copyright © 2011 MindTouch, Inc. Powered by