/**
Author: Blake Harms
additional tweaks by Neil Weinstock
version: 1.0.7
HOW TO USE:
Create a dekiscript block and add:
bblog();
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
var path = $4 ?? $path ?? page.path; // path of blog homepage
var collapse = $5 ?? $collapse ?? true; // collapse categories listings (requires CollapseItem())
if (collapse && !#wiki.getpage("template:collapseItem")) {
let collapse = false;
<div style="color:red; font-weight:bold"> "BLOG ERROR: collapse option requires CollapseItem template" </div>;
}
/****************** /Configurable options ********************/
var startAt = __request.args.start ?? 0;
<html><head>
<style type="text/css">"
/* main */
#posts { width:70%; float:left;margin-left:3%; }
.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:15px; }
.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:20px; }
/* 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>
var homepage = wiki.getpage(path);
var allBlog = list.sort([ p foreach var p in homepage.subpages ], _, true, "date.compare($left.date,$right.date)");
var blog = allBlog;
if(startAt > 0){
if(startAt < #blog){
let blog = List.splice(blog, 0, startAt);
}
}
wiki.create("New Blog Post",path,_,true,"Blog #" .. #allBlog);
<div id="blog-body">
<div id="posts">
if(#blog> 0){
var shown = 0;
foreach(var p in blog where __index < postsPerPage) {
<div class="post">
<div class="post-head">
<h2> web.link(p.uri, p.title) </h2>
</div>
<div class="post-subhead">
"by ";
<span class="post-author">
var author= p.revisions[0].author;
web.link(author.homepage.uri, author.name);
</span>
" on ";
<span class="post-date">
p.revisions[0].date;
</span>
</div>
<div class="post-body">
wiki.page(p.path);
</div>
<div class="post-footer">
if(#p.revisions >1){
<div class="post-edited">
"Last Edited: "..p.date .. " ";
"by ";
web.link(p.author.homepage.uri, p.author.name);
</div>
}
<div class="post-links">
web.link(p.uri.."#comment", "Comments ("..#p.comments..")");
web.link(p.uri, "Views: "..p.viewcount);
</div>
if(#p.tags >0) {
<div class="post-tags">
"Tags: ";
var tags = Map.keys(p.tags);
foreach(var tag in tags){
web.link(site.uri & "/Special:Tags" & {tag:tag}, tag);
}
</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(page.uri,_,{start:previous})) class="paginate-previous"> "<Previous"</a>
}
if(startAt + postsPerPage <= #homepage.subpages -1){
var next = startAt + postsPerPage;
<a href=(uri.build(page.uri,_,{start:next})) class="paginate-next"> "Next>"</a>
}
</div>
</div>
<div id="blog-sidebar">
<div id="recentPosts">
<h3>"Recent Posts"</h3>
<ul>
if(#allBlog> 1) {
foreach(var post in allBlog where __index < recentNum){
<li> web.link(post.uri, post.title) </li>
}
}
else {
<li>"No recent posts."</li>
}
</ul>
</div>
<div id="recentComments">
<h3>"Recent Comments"</h3>
var comments= [];
foreach(var p in allBlog) {
let comments ..= [ c..{ number:__index+1 } foreach var c in p.comments ];
}
if(#comments != 0) {
let comments = list.sort(comments, _, true, "date.compare($left.date, $right.date)");
<ul>
foreach (var c in comments where __index < commentsNum) {
<li>
web.link(c.page.uri, c.page.title);
" ("; web.link(c.page.uri & ("#comment"..c.number), c.number); ")";
</li>;
}
</ul>;
}
</div>
<div id="cagtegories">
<h3>"Top Categories"</h3>
// Get subpages tags. Credit: SteveB (TagDirectory)
var tagmap = { };
var tag_count = [ ];
foreach(var p in allBlog) {
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>
if (collapse) {
var id = "categoryList_"..@id.."_"..__index;
collapseItem(id, category.tag, category.tag, "slide");
" ("..category.count..")";
<ul id=(id)>
foreach (var cp in tagmap[category.tag])
<li> web.link(cp.uri, cp.title) </li>;
</ul>;
}
else {
<a href=("/Special:Tags?tag=" .. category.tag)> category.tag </a>;
" ("..category.count..")";
}
</li>;
}
</ul>;
</div>;
</div>;
</div>;| Images 0 | ||
|---|---|---|
| No images to display in the gallery. |
Copyright © 2011 MindTouch, Inc. Powered by