/** * Copyright 2009 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS-IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ //blogcontrol import("jsutils.*"); import("atomfeed"); import("funhtml.*"); import("etherpad.globals.*"); import("etherpad.utils.*"); import("etherpad.quotas"); //---------------------------------------------------------------- // bloghelpers //---------------------------------------------------------------- bloghelpers = {}; bloghelpers.disqusDeveloper = function() { if (isProduction()) { return ''; } return [ '' ].join('\n'); }; bloghelpers.feedburnerUrl = function() { var name = isProduction() ? "TheEtherPadBlog" : "TheEtherPadBlogDev"; return "http://feeds.feedburner.com/"+name; }; bloghelpers.feedLink = function() { return [ '' ].join(''); }; bloghelpers.dfmt = function(d) { return d.toString().split(' ').slice(0,3).join(' '); }; bloghelpers.feedbuttonHtml = function() { var aProps = { href: bloghelpers.feedburnerUrl(), rel: "alternate", type: "application/rss+xml" }; return SPAN(A(aProps, IMG({src: "http://www.feedburner.com/fb/images/pub/feed-icon32x32.png", alt: "EtherPad Blog Feed", style: "vertical-align:middle; border:0;"}))).toHTML(); }; bloghelpers.getMaxUsersPerPad = function() { return quotas.getMaxSimultaneousPadEditors() }; //---------------------------------------------------------------- // posts "database" //---------------------------------------------------------------- function _wrapPost(p) { var wp = {}; keys(p).forEach(function(k) { wp[k] = p[k]; }); wp.url = function() { return "http://"+request.host+"/ep/blog/posts/"+p.id; }; wp.renderContent = function() { return renderTemplateAsString("blog/posts/"+p.id+".ejs", {post: wp, bloghelpers: bloghelpers}); }; return wp; } function _addPost(id, title, author, published, updated) { if (!appjet.cache.blogDB) { appjet.cache.blogDB = { posts: [], postMap: {} }; } var p = {id: id, title: title, author: author, published: published, updated: updated}; appjet.cache.blogDB.posts.push(p); appjet.cache.blogDB.postMap[p.id] = p; } function _getPostById(id) { var p = appjet.cache.blogDB.postMap[id]; if (!p) { return null; } return _wrapPost(p); } function _getAllPosts() { return []; } function _sortBlogDB() { appjet.cache.blogDB.posts.sort(function(a,b) { return cmp(b.published, a.published); }); } //---------------------------------------------------------------- // Posts //---------------------------------------------------------------- function _initBlogDB() { return; } function reloadBlogDb() { delete appjet.cache.blogDB; _initBlogDB(); } function onStartup() { reloadBlogDb(); } //---------------------------------------------------------------- // onRequest //---------------------------------------------------------------- function onRequest(name) { // nothing yet. } //---------------------------------------------------------------- // main //---------------------------------------------------------------- function render_main() { renderFramed('blog/blog_main_body.ejs', {posts: _getAllPosts(), bloghelpers: bloghelpers}); } //---------------------------------------------------------------- // render_feed //---------------------------------------------------------------- function render_feed() { var lastModified = new Date(); // TODO: most recent of all entries modified var entries = []; _getAllPosts().forEach(function(post) { entries.push({ title: post.title, author: post.author, published: post.published, updated: post.updated, href: post.url(), content: post.renderContent() }); }); response.setContentType("application/atom+xml; charset=utf-8"); response.write(atomfeed.renderFeed( "The EtherPad Blog", new Date(), entries, "http://"+request.host+"/ep/blog/")); } //---------------------------------------------------------------- // render_post //---------------------------------------------------------------- function render_post(name) { var p = _getPostById(name); if (!p) { return false; } renderFramed('blog/blog_post_body.ejs', { post: p, bloghelpers: bloghelpers, posts: _getAllPosts() }); return true; } //---------------------------------------------------------------- // render_new_from_etherpad() //---------------------------------------------------------------- function render_new_from_etherpad() { return ""; }