X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=tools%2Fhtdocs%2Fmkws.js;h=124b3115fb9723bcf7227d31e86b8337e09fd45a;hb=588dc0fed2bd1f9240418e05a87514796679223a;hp=e560ad1052344689267c70b3707a097f7eab401d;hpb=f9b8ce4ca71110c94bc5cf90d346bc18466d5075;p=mkws-moved-to-github.git diff --git a/tools/htdocs/mkws.js b/tools/htdocs/mkws.js index e560ad1..124b311 100644 --- a/tools/htdocs/mkws.js +++ b/tools/htdocs/mkws.js @@ -100,6 +100,42 @@ mkws.debug_function = function (string) { } var debug = mkws.debug_function; // local alias + +Handlebars.registerHelper('link', function(a) { + var result = ""; + for (var i in a) { + if (i > 0) result += "
"; + var text = Handlebars.Utils.escapeExpression(a[i]); + result += '' + text + ''; + } + + return new Handlebars.SafeString(result); +}); + + +Handlebars.registerHelper('json', function(obj) { + return JSON.stringify(obj); +}); + + +// We need {{attr name}} because Handlebars can't parse {{@@name}} +Handlebars.registerHelper('attr', function(attrName) { + return this['@' + attrName]; +}); + + +Handlebars.registerHelper('first', function(items, options) { + var having = options.hash.having; + for (var i in items) { + var item = items[i] + if (!having || item[having]) { + return options.fn(item); + } + } + return ""; +}); + + { /* default mkws config */ var config_default = { @@ -640,7 +676,41 @@ function replaceHtml(el, html) { function renderDetails(data, marker) { - var details = '
'; + if (mkws.templateRecord === undefined) { + maybeLoadTemplate("Record"); + } + + var details; + if (mkws.templateRecord) { + var template = mkws.templateRecord; + details = template(data); + } else { + details = defaultRenderDetails(data, marker); + } + + return '
' + details + '
'; +} + + +function maybeLoadTemplate(name) +{ + var source = $("#mkwsTemplate" + name).html(); + if (!source) { + debug("no template '" + name + "': falling back to default behaviour"); + // Mark template as not provided + mkws['template' + name] = 0; + return; + } + + var template = Handlebars.compile(source); + debug("compiled template '" + name + "'"); + mkws['template' + name] = template; +} + + +function defaultRenderDetails(data, marker) +{ + var details = '
'; if (marker) details += ''; var locations = []; @@ -658,11 +728,11 @@ function renderDetails(data, marker) } else { details += renderField("Location" + (locations.length == 1 ? "" : "s"), locations); } - details += '
'+ marker + '
'; - + details += ''; return details; } + function renderField(caption, data, data2, data3) { if (data === undefined) { return "";