desirae-datamap-ruhoh.js/datamapper-ruhoh.js

127 lines
4.6 KiB
JavaScript

/*jshint -W054 */
;(function (exports) {
'use strict';
var Mustache = exports.Mustache || require('mustache')
;
function map(view) {
var newview
, analytics
, comments
, desi = {}
;
comments = view.site.disqus_shortname &&
Mustache.render(view.desi.partials.disqus, { disqus: {
shortname: view.site.disqus_shortname
, identifier: view.entity.disqus_identifier || undefined
, url: !view.entity.disqus_identifier && view.entity.disqus_url || undefined
}})
;
analytics = view.site.google_analytics_tracking_id &&
Mustache.render(view.desi.partials.google_analytics, { google_analytics: {
tracking_id: view.site.google_analytics_tracking_id
}})
;
Object.keys(view).forEach(function (key) {
desi[key] = view[key];
});
desi.desi = {};
Object.keys(view).forEach(function (key) {
desi.desi[key] = view[key];
});
newview = {
desi: desi
, content: view.contents
, page: {
title: view.entity.yml.title || view.site.title // in rt
, filename: view.entity.name // in rt
, tagline: view.entity.yml.tagline // in rt
, description: view.entity.yml.description // in rt
, content: view.contents
, youtube: view.entity.yml.youtube
, tags: view.entity.yml.tags
, categories: view.entity.yml.categories
, player_width: view.entity.yml.player_width
, player_height: view.entity.yml.player_height
, next: view.entities[view.entity_index + 1]
, previous: view.entities[view.entity_index - 1]
, date: view.entity.year + '-' + view.entity.month + '-' + view.entity.day
, url: view.entity.relative_link
// TODO , url: view.entities.
}
, 'page?previous': view.entities[view.entity_index - 1] // ruhoh-twitter only
// should contain { url: ..., title: ... }
, 'page?next': view.entities[view.entity_index + 1] // ruhoh-twitter only
, 'page.categories?to_categories': [] // ruhoh-twitter only
, 'page.tags?to_tags': [] // ruhoh-twitter only
, posts: { collated: view.desi.collated }
, urls: {
base_url: view.env.base_url
// /something/ -> good (leading and trailing slash)
// / -> bad good (leading and trailing slash)
, base_path: (view.env.base_path + '/').replace('//', '/')
}
, data: {
author: {
name: view.author.name
, twitter: view.author.twitter
}
, title: view.site.title
, host: view.env.base_url.replace(/^https?:\/\//, '')
}
, stylesheets: { 'load': function () {
return function (text, render) {
// TODO pay attention to text of which styles to load?
// this is unescaped, right?
return render(view.desi.styles.join('\n'));
};
}}
, styles: view.desi.styles.join('\n')
, assets: view.desi.styles.join('\n') // ruhoh-twitter only
, comments: comments // ruhoh-twitter only
, analytics: analytics // ruhoh-twitter only
, widgets: {
comments: comments
, analytics: analytics
, facebook_connect: view.desi.partials.facebook_connect
, twitter: view.desi.partials.twitter
, google_plusone: view.desi.partials.google_plusone
, amazon_link_enhancer: view.site.amazon_affiliate_id &&
Mustache.render(view.desi.partials.amazon_link_enhancer, {
amazon_affiliate_id: view.site.amazon_affiliate_id
})
}
, site: {
navigation: view.navigation
, title: view.site.title // ruhoh-twitter only
, author: { // ruhoh-twitter only
name: view.author.name // ruhoh-twitter only
}
}
};
// backwards compat
newview.site['navigation?to_pages'] = newview.site.navigation; // ruhoh-twitter only
newview.site['navigation?to__root'] = newview.site.navigation;
newview.data.navigation = view.site.navigation;
newview.data['navigation?to_pages'] = newview.site.navigation;
newview.data['navigation?to__root'] = newview.site.navigation;
newview.page.content = view.contents;
return newview;
}
// shoulda made this an object at the start... oops
map.ruhoh = map;
map['ruhoh@1.0'] = map;
map['ruhoh@2.6'] = map;
exports.DesiraeDatamapRuhoh = map.DesiraeDatamapRuhoh = map;
}('undefined' !== typeof exports && exports || window));