/**
Author: Blake Harms
CoAuthor: @himikel
version: 1.0.3 (modified by @himikel)
HOW TO USE:
Create a dekiscript block and add:
blog();
Change the page permissions to whatever you would like. But if you only want you to be able to add a post, set it to semi-public and give ONLY you permission to create.
*/
/******************* Configurable options *********************/
var postsPerPage = $0 ?? $postsPerPage ?? 5; // # of posts to show per page
var recentNum = $1 ?? $recentNum ?? 10; // # of recent posts to show in sidebar
var commentsNum = $2 ?? $commentsNum ?? 10; // # of recent comments to show in sidebar
var categoriesNum= $3 ?? $categoriesNum ?? 10; // # of top categories to show in sidebar
//@himikel #add 2010-06-13: New Linked blog parameter
var sLinkedBlogsTitle = __request.args.linkedBlogsTitle ?? args.linkedBlogsTitle ?? null;
var sLinkedBlogsUrl = __request.args.linkedBlogsUrl ?? args.linkedBlogsUrl ?? null;
//@himikel #add 2010-10-04: New Page parameter
var nPageId = __request.args.pageid ?? args.pageid ?? -1;
var bpage=page;
if (nPageId>=0)
{
//Web.Html("<br />");Web.Text("PageId: "..nPageId);
let bpage=Wiki.GetPage(Num.Int(nPageId));
//Web.Pre(Json.Format(bpage));
}
/****************** /Configurable options ********************/
var startAt = __request.args.start ?? 0;
<html><head>
<style type="text/css">"
/* main */
#posts { width:70%; float:left; margin-left:1%; }
.post { padding-right:10px; }
.post .post-head a { color:black !important; }
.post .post-subhead { padding-left:50px;font-size:12px; }
.post .post-subhead .post-date { padding:0px; margin:0px; }
.post .post-subhead .post-author { padding:0px; margin:0px; font-weight:bold; font-size:14px; }
.post .post-subhead .post-author a { color:black; }
.post .post-body { padding:10px; font-size-adjust: 0.5 }
.post .post-footer .post-edited { font-style:italic; color: #AAA; padding:10px; }
.post .post-footer .post-links a { padding-right:20px; }
.post .post-footer .post-tags a { padding-right: 5px; color:black !important; }
/* sidebar */
#blog-sidebar { float:right; width:24%; }
#blog-sidebar { border-left: 2px solid black; padding-left:2%; padding-bottom:21px; }
#blog-sidebar ul { margin-top:5px; list-style-type:none; padding-left: 5px; font-size:12px; }
#blog-sidebar ul li { background: url('/skins/common/images/bullet.gif') 0 1px no-repeat; padding-left: 10px; }
/* paginate */
#paginator { padding:15px; clear:both; }
#paginator a.paginate-previous { float:left; text-align:left; }
#paginator a.paginate-next { float:right; text-align:right; }
"</style>
</head></html>
//@himikel mod 2010-10-04: If user is anonymous don't show the 'new post' button
if (!user.anonymous)
wiki.create("New Blog Post",_,_,true,"Blog #" .. #bpage.subpages);
//@himikel #mod 2011/09/26: fixed from ver 1.0.7 (@NeilW http://developer.mindtouch.com/Template:BBlog)
//@himikel #mod 2010/10/04: only wiki pages & without max limit
var blog = list.sort([ p foreach var p in bpage.subpages ], _, true, "date.compare($left.date,$right.date)");
//var blog= wiki.getSearch("path:" .. string.searchescape(bpage.path) .."/*",0xFFFFFF,"-date","type:wiki");
//var blog= wiki.getSearch("path:" .. string.searchescape(bpage.path) .."/*", #bpage.subpages+1,"-date");
//@himikel add 2010/10/04: order posts by creation date
var mCreatInd=[];
foreach (var post in blog)
let mCreatInd..=[{ index: (__index), date: (Date.Format(post.revisions[0].date,"yyyy-MM-dd")) }];
var mCreatOrd=List.OrderBy(mCreatInd,"date descending");
if(startAt > 0){
if(startAt < #blog){
//@himikel mod 2010/10/04: order posts by creation date
let mCreatOrd = List.splice(mCreatOrd, 0, startAt);
//let blog = List.splice(blog, 0, startAt);
}
}
//"#Posts: "..#blog;
var nPostCount=0;
<div id="blog-body">
<div id="posts">
if(#blog> 0){
var shown = 0;
//@himikel mod 2010/10/04: order posts by creation date
foreach(var co in mCreatOrd) {
// foreach(var p in blog){
//"#"..__count.." Title: "..p.Title;
var p=blog[co.index];
let nPostCount+=1;
if(! p.path){
continue;
}
if(shown >= postsPerPage){
break;
}
<div class="post">
<div class="post-head">
<h2><a href=(uri.encode(p.path))>p.title</a></h2>
</div>
<div class="post-subhead">
"by ";
<span class="post-author">
var author= p.revisions[0].author;
<a href=(author.homepage.uri)>author.name</a>
</span>
" on ";
<span class="post-date">
p.revisions[0].date;
</span>
</div>
<div class="post-body">
var wikiPage=wiki.page(p.path)["//div[@id='header']"];
var bReadMore=(string.length(xml.text(wikiPage))>0);
if (!bReadMore) {
let wikiPage=wiki.page(p.path);
}
wikiPage;
//@himikel #add 2010-10-13: to add JavaScript code
var xlPageScripts=Xml.List{ doc: wikiPage, xpath: "//script", xml: true };
foreach (var xPageScript in xlPageScripts)
{
//Because of performance only add FlashPlayer embed script
if (String.IndexOf(xPageScript,"flashembed")>=0)
Web.Xml(xPageScript);
}//fe
//Web.Xml(wikiPage);
if (bReadMore) {
<b><a href=(uri.encode(p.path))>"Leer más..."</a></b>
//web.link(p.path,"Leer más...");
}
</div>
<div class="post-footer">
if(#p.revisions >1){
<div class="post-edited">
"Last Edited: "..p.date .. " ";
"by ";
<a href=(p.author.homepage.uri)>p.author.name</a>
</div>
}
<div class="post-links">
<a href=(p.path.."#comment")>"Comments ("..#p.comments..")"</a><a href=(p.path)> "Views: "..p.viewcount</a>
</div>
if(#p.tags >0) {
<div class="post-tags">
"Tags: ";
var tags = Map.keys(p.tags);
foreach(var tag in tags){
<a href=(uri.build(site.uri,"/Special:Tags",{'tag':tag}))>tag</a>
}
</div>
}
</div>
</div>
let shown+=1;
}
}
else {
"No posts";
}
<div id="paginator">
if(startAt > 0){
var previous = 0;
if(startAt - postsPerPage > 0){
let previous = startAt - postsPerPage;
}
<a href=(uri.build(bpage.uri,_,{start:previous})) class="paginate-previous"> "< Previous posts"</a>
}
if(startAt + postsPerPage <= #bpage.subpages -1){
var next = startAt + nPostCount - 1;
//var next = startAt + postsPerPage;
<a href=(uri.build(bpage.uri,_,{start:next})) class="paginate-next"> "Next posts >"</a>
}
</div>
<br />
<br />
</div>
<div id="blog-sidebar">
//@himikel #add
<div class="license-rss" style="text-align:center">
//@himikel #add 2010-06-13
var sRssUrl=Uri.Build(Site.Api, ["pages"]).."/="..Uri.Encode(Uri.Encode(bpage.path)).."/feed/new";
//var sRssUrl=Uri.Build(bpage.Api, "feed/new");
<a rel="rss" href=(sRssUrl)>
<img alt="RSS" style="border-width:0" width="35" height="35" align="left" src="http://www.gureweb.net/@api/deki/files/83/=feed.png?size=thumb" />
</a>
<a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/es/">
<img alt="Creative Commons License" style="border-width:0" src="http://i.creativecommons.org/l/by-nc-sa/3.0/es/88x31.png" />
</a>
</div>
//@himikel #add 2010-06-13
if (sLinkedBlogsUrl!=null)
{
<div id="linkedBlogs">
<h3>"Linked Blogs"</h3>
<ul>
<li><a href=(sLinkedBlogsUrl)>(sLinkedBlogsTitle)</a></li>
</ul>
</div>
}
<div id="recentPosts">
<h3>"Recent Posts"</h3>
<ul>
//@himikel mod 2010/10/08: order posts by creation date
var recco=list.splice(mCreatOrd, recentNum-1, -1, []);
//var recent = wiki.getSearch("path:" .. string.searchescape(bpage.path) .."/*", recentNum,"-date");
if(#recco > 1) {
//if(#recent > 1) {
foreach(var rco in recco){
//foreach(var post in recent){
var post=blog[rco.index];
<li><a href=(post.path)> post.title</a></li>
}
}
else {
<li>"No recent posts."</li>
}
</ul>
</div>
<div id="recentComments">
<h3>"Recent Comments"</h3>
var comments= [];
foreach(var p in bpage.subpages){ let comments ..= p.comments; }
if(#comments != 0){
var comment= wiki.api(uri.build(bpage.api,"comments",{limit:5,sortby:"-date.posted",depth:"infinity"}));
var com_page = xml.list(comment,"//comment/page.parent/title");
var com_path = xml.list(comment,"//comment/page.parent/path");
var com_num = xml.list(comment,"//comment/number");
var i=0;
<ul>
foreach(var n in com_num){
<li><a href=(com_path[i])>com_page[i]</a>; " ("; <a href=(com_path[i].."#comment"..n)>n</a>; ")"; </li>
let i +=1;
}
</ul>
}
</div>
<div id="categories">
<h3>"Top Categories"</h3>
// Get subpages tags. Credit: SteveB (TagDirectory)
var tagmap = { };
var tag_count = [ ];
foreach(var p in bpage.subpages) {
var tags = p.tags;
// check if page has no tags; if so make up a default list
if(!#tags) {
let tags = [ { name: '(unclassified)', type: 'text' } ];
}
// foreach tag on the page, append the page to that tag's list
foreach(var t in tags where t.type == 'text') {
let tagmap ..= { (t.name) : tagmap[t.name] .. [ p ] };
}
}
if(#tagmap) {
// count how many pages each tag has
foreach(var tag in map.keys(tagmap)) {
let tag_count ..= [ { 'tag': tag, 'count': #tagmap[tag] } ];
}
}
let tag_count = List.splice(List.Sort(tag_count, 'count',true),categoriesNum);
<ul>
foreach(var category in tag_count){
<li> <a href=("/Special:Tags?tag=" .. category.tag)>category.tag</a>" ("..category.count..")" </li>
}
</ul>
</div>
</div>
</div>
| Archivo | Tamaño | Fecha | Adjuntado por | |||
|---|---|---|---|---|---|---|
| feed.png No hay descripción | 4.08 kB | 20:01, 13 Jun 2010 | himikel | Acciones | ||
| linkedin.png No hay descripción | 3.42 kB | 20:01, 13 Jun 2010 | himikel | Acciones | ||
| twitter.png No hay descripción | 3.8 kB | 20:01, 13 Jun 2010 | himikel | Acciones | ||