/** * macro renders the current timestamp */ function now_macro(param) { return formatTimestamp(new Date(), param.format); } /** * macro renders the antville-logos */ function logo_macro(param) { if (!param.name) param.name = "smallchaos"; DefaultImages.render(param.name, param); return; } /** * macro renders an image out of image-pool * either as plain image, thumbnail, popup or url * param.name can contain a slash indicating that * the image belongs to a different site or to root */ function image_macro(param) { if (!param.name) return; if (param.name.startsWith("/")) { // standard images and logos are handled by constant IMAGES DefaultImages.render(param.name.substring(1), param); return; } var result = getPoolObj(param.name, "images"); if (!result && param.fallback) result = getPoolObj(param.fallback, "images"); if (!result) return; var img = result.obj; // return different display according to param.as switch (param.as) { case "url" : return img.getUrl(); case "thumbnail" : if (!param.linkto) param.linkto = img.getUrl(); if (img.thumbnail) img = img.thumbnail; break; case "popup" : param.linkto = img.getUrl(); param.onClick = img.getPopupUrl(); if (img.thumbnail) img = img.thumbnail; break; } delete(param.name); delete(param.as); // render image tag if (param.linkto) { Html.openLink({href: param.linkto}); delete(param.linkto); renderImage(img, param); Html.closeLink(); } else renderImage(img, param); return; } /** * Global link macro. In contrast to the hopobject link macro, * this reproduces the link target without further interpretation. */ function link_macro(param) { if (param.to) param.href = param.to; else // backwards compatibility param.href = param.linkto; if (param.urlparam) param.href += "?" + param.urlparam; if (param.anchor) param.href += "#" + param.anchor; var content = param.text ? param.text : param.href; delete param.to; delete param.linkto; delete param.urlparam; delete param.anchor; delete param.text; Html.openTag("a", param); res.write(content); Html.closeTag("a"); return; } /** * macro fetches a file-object and renders a link to "getfile"-action */ function file_macro(param) { if (!param.name) return; var p = getPoolObj(param.name, "files"); if (!p) return; if (!param.text) param.text = p.obj.alias; p.obj.renderSkin(param.skin ? param.skin : "main", param); return; } /** * Macro creates a string representing the objects in the * current request path, linked to their main action. */ function linkedpath_macro (param) { var separator = param.separator; if (!separator) separator = " > "; var title; var start = (path.site == null) ? 0 : 1; for (var i=start; i 0" + rel + order; var connex = getDBConnection("antville"); var rows = connex.executeRetrieval(query); if (rows) { var cnt = 0; param.limit = param.limit ? Math.min(parseInt(param.limit), 100) : 25; while (rows.next() && (cnt < param.limit)) { cnt++; var id = rows.getColumnItem("TEXT_ID").toString(); var story = site.allcontent.get(id); if (!story) continue; res.write(param.itemprefix); Html.openLink({href: story.href()}); var str = story.title; if (!str) str = story.getRenderedContentPart("text").clip(20).softwrap(30); res.write(str ? str : "..."); Html.closeLink(); res.write(param.itemsuffix); } } rows.release(); return; } /** * a not yet sophisticated macro to display a * colorpicker. works in site prefs and story editors */ function colorpicker_macro(param) { if (!param || !param.name) return; var param2 = new Object(); param2.as = "editor"; param2["size"] = "10"; param2.onchange = "Antville.ColorPicker.set('" + param.name + "', this.value);"; param2.id = "Antville_ColorValue_" + param.name; if (!param.text) param.text = param.name; if (param.color) param.color = renderColorAsString(param.color); if (path.story || path.storymgr) { var obj = path.story ? path.story : new story(); param2.part = param.name; // use res.push()/res.pop(), otherwise the macro // would directly write to response res.push(); obj.content_macro(param2); param.editor = res.pop(); param.color = renderColorAsString(obj.content.getProperty(param.name)); } else if (path.layout) { var obj = path.layout; // use res.push()/res.pop(), otherwise the macro // would directly write to response res.push(); obj[param.name + "_macro"](param2); param.editor = res.pop(); param.color = renderColorAsString(obj.preferences.getProperty(param.name)); } else return; renderSkin("colorpickerWidget", param); return; } /** * fakemail macro <%fakemail number=%> * generates and renders faked email-adresses * param.number * (contributed by hr@conspirat) */ function fakemail_macro(param) { var tldList = ["com", "net", "org", "mil", "edu", "de", "biz", "de", "ch", "at", "ru", "de", "tv", "com", "st", "br", "fr", "de", "nl", "dk", "ar", "jp", "eu", "it", "es", "com", "us", "ca", "pl"]; var nOfMails = param.number ? (param.number <= 50 ? param.number : 50) : 20; for (var i=0;i= 0) { var objPath = top.split("/"); var s = (!objPath[0] || objPath[0] == "root") ? root : root.get(objPath[0]); top = objPath[1]; } if (s==null) var s = res.handlers.site; var pool = (top) ? s.images.topics.get(top) : s.images; if (pool==null) return; var items = pool.list(); } delete(param.topic); delete(param.images); var idx = Math.floor(Math.random()*items.length); var img = items[idx]; param.name = img.alias; return image_macro(param); } /** * macro renders the most recently created image of a topic or site * * @param topic String (optional), specifies from which topic the image should be taken * all other parameters are passed through to the global image macro */ function imageoftheday_macro(param) { var s = res.handlers.site; var pool = (param.topic) ? s.images.topics.get(param.topic) : res.handlers.site.images; if (pool==null) return; delete(param.topic); var img = pool.get(0); param.name = img.alias; return image_macro(param); } /** * macro renders images as a thumbnail gallery * images can be either specified directly via the images-attribute or via their topic * * @param images String (optional), column separated list of image aliases * @param topic String (optional), specifies from which topic the image should be taken * @param as String (optional), default "popup" * @param cols Integer (optional), default=4; if 0 then no table is rendered * @itemprefix String (optional) * @itemsuffix String (optional) * @table_params String (optional), default: class="gallery" align="center" * @tr_params String (optional) * @td_params String (optional) * all other parameters are passed through to the global image macro */ function gallery_macro(param) { if (param.images) { var items = new Array(); var aliases = param.images.split(","); for (var i=0; i= 0) { var objPath = top.split("/"); var s = (!objPath[0] || objPath[0] == "root") ? root : root.get(objPath[0]); top = objPath[1]; } if (s==null) var s = res.handlers.site; var pool = (top) ? s.images.topics.get(top) : s.images; if (pool==null) return; var items = pool.list(); } var cols = param.cols ? parseInt(param.cols) : 4; var table_params = param.table_params ? " "+param.table_params : " class=\"gallery\""; var tr_params = param.tr_params ? " "+param.tr_params : ""; var td_params = param.td_params ? " "+param.td_params : ""; var itemprefix = param.itemprefix ? param.itemprefix : ""; var itemsuffix = param.itemsuffix ? param.itemsuffix : ""; var order = param.order ? param.order : null; delete(param.topic); delete(param.images); delete(param.cols); delete(param.itemprefix); delete(param.itemsuffix); delete(param.table_params); delete(param.tr_params); delete(param.td_params); if (param.as==null) param.as = "popup"; if (cols>0) res.write("\n"); if (cols==0 || items.length%cols==0) var max = items.length; else var max = items.length + (cols - items.length%cols); for (var i=0; i0 && i%cols==0) res.write("\n"); if (cols>0) res.write(""); if (img) { res.write(itemprefix); var obj = new HopObject(); for (var j in param) obj[j] = param[j]; obj.name = img.site.alias + "/" + img.alias; image_macro(obj); res.write(itemsuffix); } if (cols>0) res.write("\n"); if (cols>0 && i%cols==cols-1) res.write("\n"); } if (cols>0) res.write("\n"); return; }