218 lines
5.8 KiB
JavaScript
218 lines
5.8 KiB
JavaScript
//
|
|
// The Antville Project
|
|
// http://code.google.com/p/antville
|
|
//
|
|
// Copyright 2001-2007 by The Antville People
|
|
//
|
|
// 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.
|
|
//
|
|
// $Revision$
|
|
// $LastChangedBy$
|
|
// $LastChangedDate$
|
|
// $URL$
|
|
//
|
|
|
|
app.addRepository("modules/helma/Color.js");
|
|
|
|
var disableAction = function(msg) {
|
|
res.data.title = msg + " :(";
|
|
res.data.body = msg + ". " + "Sorry.";
|
|
this.renderSkin("Site#page");
|
|
return;
|
|
}
|
|
|
|
var relocateProperty = function(proto, name, key) {
|
|
if (!proto || !name) {
|
|
return;
|
|
}
|
|
key || (key = name);
|
|
proto.prototype.__defineGetter__(name, function() {
|
|
return this[key];
|
|
});
|
|
proto.prototype.__defineSetter__(name, function(value) {
|
|
this[key] = value;
|
|
return;
|
|
});
|
|
return addPropertyMacro.apply(this, arguments);
|
|
}
|
|
|
|
var addPropertyMacro = function(proto, name, key) {
|
|
// These two are managed by the HopObject prototype already
|
|
if (name === "createtime" || name === "modifytime") {
|
|
return;
|
|
}
|
|
key || (key = name);
|
|
proto.prototype[name + "_macro"] = function(param) {
|
|
if (param.as === "editor") {
|
|
this.input_macro(param, key);
|
|
} else {
|
|
res.write(this[key]);
|
|
}
|
|
};
|
|
return;
|
|
}
|
|
|
|
var formatTimestamp = function() {
|
|
return formatDate.apply(this, arguments);
|
|
}
|
|
|
|
var linkedpath_macro = breadcrumbs_macro;
|
|
|
|
function link_macro() {
|
|
var param = arguments[0];
|
|
if (param.to) {
|
|
param.url = param.to;
|
|
delete param.to;
|
|
}
|
|
return renderLink.apply(this, arguments);
|
|
}
|
|
|
|
function logo_macro(param, name) {
|
|
param.linkto = "http://antville.org";
|
|
image_macro.call(global, param, "/" + (name || param.name || "smallchaos"));
|
|
return;
|
|
}
|
|
|
|
function input_macro(param) {
|
|
switch (param.type) {
|
|
case "button":
|
|
break;
|
|
|
|
case "radio":
|
|
param.selectedValue = req.data[param.name]; break;
|
|
|
|
default:
|
|
param.value = param.name && req.data[param.name] ?
|
|
req.data[param.name] : param.value;
|
|
}
|
|
|
|
switch (param.type) {
|
|
case "textarea" :
|
|
html.textArea(param); break;
|
|
|
|
case "checkbox" :
|
|
html.checkBox(param); break;
|
|
|
|
case "button" :
|
|
// FIXME: this is left for backwards compatibility
|
|
html.submit(param); break;
|
|
|
|
case "submit" :
|
|
html.submit(param); break;
|
|
|
|
case "password" :
|
|
html.password(param); break;
|
|
|
|
case "radio" :
|
|
html.radioButton(param); break;
|
|
|
|
case "file" :
|
|
html.file(param); break;
|
|
|
|
default :
|
|
html.input(param);
|
|
}
|
|
return;
|
|
}
|
|
|
|
// FIXME: This method deserves some more compatibility pampering
|
|
// (eg. itempre/suffix)
|
|
function storylist_macro(param) {
|
|
var id = param.of ? param.of + "/stories" : "stories";
|
|
return list_macro(param, id, param.limit);
|
|
}
|
|
|
|
function sitelist_macro(param) {
|
|
param.limit || (param.limit = 10);
|
|
return list_macro(param, "updates", Math.min(param.limit, 25));
|
|
}
|
|
|
|
// FIXME: This method deserves some more compatibility pampering
|
|
// (eg. itempre/suffix, as="thumbnail")
|
|
function imagelist_macro(param) {
|
|
var id = param.of ? param.of + "/images" : "images";
|
|
return list_macro(param, id, param.limit);
|
|
}
|
|
|
|
// FIXME: This method deserves some more compatibility pampering
|
|
// (eg. itempre/suffix, limit)
|
|
function topiclist_macro(param) {
|
|
var site = param.of ? root.get(param.of) : res.handlers.site;
|
|
if (site) {
|
|
site.tags.list_macro(param, param.skin);
|
|
}
|
|
return;
|
|
}
|
|
|
|
function username_macro(param) {
|
|
if (!session.user) {
|
|
return;
|
|
}
|
|
if (session.user.url && param.as === "link") {
|
|
html.link({href: session.user.url}, session.user.name);
|
|
} else if (session.user.url && param.as === "url") {
|
|
res.write(session.user.url);
|
|
} else {
|
|
res.write(session.user.name);
|
|
}
|
|
return;
|
|
}
|
|
|
|
function spacer_macro(param) {
|
|
param.width || (param.width = 2);
|
|
param.height || (param.height = 2);
|
|
param.border || (param.border = 0);
|
|
param.alt = "";
|
|
param.name = "/pixel.gif";
|
|
return image_macro(param);
|
|
}
|
|
|
|
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<nOfMails;i++) {
|
|
var tld = tldList[Math.floor(Math.random()*tldList.length)];
|
|
var mailName = "";
|
|
var serverName = "";
|
|
var nameLength = Math.round(Math.random()*7) + 3;
|
|
for (var j=0;j<nameLength;j++)
|
|
mailName += String.fromCharCode(Math.round(Math.random()*25) + 97);
|
|
var serverLength = Math.round(Math.random()*16) + 8;
|
|
for (var j=0;j<serverLength;j++)
|
|
serverName += String.fromCharCode(Math.round(Math.random()*25) + 97);
|
|
var addr = mailName + "@" + serverName + "." + tld;
|
|
html.link({href: "mailto:" + addr}, addr);
|
|
if (i+1 < nOfMails)
|
|
res.write(param.delimiter ? param.delimiter : ", ");
|
|
}
|
|
return;
|
|
}
|
|
|
|
// FIXME: This cannot be working...
|
|
function imageoftheday_macro(param) {
|
|
var images = res.handlers.site.images;
|
|
delete param.topic;
|
|
var img = pool.get(0);
|
|
param.name = img.alias;
|
|
return image_macro(param);
|
|
}
|
|
|
|
function renderColorAsString(c) {
|
|
return c && c.isHexColor() ? "#" + c : c;
|
|
}
|
|
|
|
function renderColor(c) {
|
|
return res.write(renderColorAsString(c));
|
|
}
|