packages feed

hablo-1.0.0.0: share/js/domRenderer.js

function DomRenderer(modules) {
	return {
		article: article,
		articlesList: articlesList,
		replaceMarkdown: replaceMarkdown
	};

	function replaceMarkdown() {
		var div = document.getElementById('contents');
		if(div.children[0] && div.children[0].tagName.toLowerCase() == 'article') {
			convertArticle(div.children[0], true);
		} else {
			var articles = div.getElementsByClassName('articles')[0];
			if(articles != undefined) {
				for(var i = 0; i < articles.children.length; i++) {
					convertArticle(articles.children[i]);
				}
			} else {
				console.log('No articles found for this page');
			}
		}
	}

	function convertArticle(article, comments) {
		var header = article.getElementsByTagName('header')[0];
		header.appendChild(modules.metadata.get(article.id));
		var text = article.getElementsByTagName('pre')[0];
		if(text != undefined) {
			article.replaceChild(getDiv(text.innerText), text);
			if(comments) {
				modules.metadata.getComments(article.id)
					.forEach(article.appendChild.bind(article));
			}
		} else {
			console.log('No content found for this article');
		}
	}

	function getDiv(markdown) {
		var d= modules.dom.make('div', {
			innerHTML: modules.md.render(markdown)
		});
		var scripts = d.getElementsByTagName('script');
		for(var i = 0; i < scripts.length; i++) {
			var run = modules.dom.make('script',
				{type: 'text/javascript', src: scripts[i].src, textContent: scripts[i].textContent}
			);
			scripts[i].parentNode.replaceChild(run, scripts[i]);
		}
		return d;
	}

	function article(key, markdown, limit) {
		var url = ["", blog.path.articlesPath, key + (limit != undefined ? '.html' : '.md')].join('/');
		var lines = markdown.split(/\n/).slice(blog.articles[key].bodyOffset);
		var div = getDiv(lines.slice(0, limit).join('\n'));
		return modules.dom.make('article', {}, [
			modules.dom.make('header', {}, [
				modules.dom.make('a', {href: url}, [
					modules.dom.make('h1', {innerText: blog.articles[key].title})
				]),
				modules.metadata.get(key)
			]),
			div
		].concat(limit != undefined ? [] : modules.metadata.getComments(key)));
	}

	function pageTitle(tag, all) {
		if(tag != undefined) {
			var template = all ? 'allTaggedPage' : 'latestTaggedPage';
			return modules.template.render(template, {tag: tag});
		} else {
			return blog.wording[all ? 'allPage' : 'latestPage'];
		}
	}

	function otherUrl(tag, all) {
		var path = [tag, all ? null : 'all.html'];
		return '/' + path.filter(modules.fun.defined).join('/');
	}

	function articlesList(tag, all) {
		return function(articlePreviews) {
			return [
				modules.dom.make('h2', {innerText: pageTitle(tag, all)}),
				modules.dom.make('a', {
					innerText: all ? blog.wording.latestLink : blog.wording.allLink,
					href: otherUrl(tag, all)
				}),
				modules.dom.make('div', {class: 'articles'}, articlePreviews.filter(modules.fun.defined))
			];
		};
	}
}