* Fixed reference to parent site in Archive
* Fixed _children.filter in Archive * Added missing permission checks * Modified global defineConstants() method to return the getter function instead of automatically defining it with given argument * Added HopObject.macro_macro() method to display userland macro code * Removed colorpicker (will be replaced by third-party library) * Removed obsolete global constants and functions * Overhauled and tested global userland macros like story_macro(), image_macro() etc. * Implemented global list_macro() to replace any special listFoobar_macro() methods * Moved global autoLogin() method into User prototype * Overhauled global randomize_macro() * Renamed global evalURL() method to validateUrl() as well as evalEmail() to validateEmail() * Re-added accidentally removed subskins to Members.skin * Fixed some skin names which were changed recently * Remove delete_action() from Membership * Fixed foreign key of images collection in Membership * Removed global username_macro() and replaced it with appropriate membership macros * Moved contents of systemscripts.skin into javascript.skin in Root prototype * Removed main_css_action(), main_js_action() and sitecounter_macro() methods from Root * Added accessname to sites collection in Root * Upgraded jQuery to version 1.2.1 * Replaced call for global history_macro() with corresponding list_macro() call * Renamed "public" collection of Stories prototype to "featured" * Moved a lot of styles from Root's style.skin to the one in Site * Added comments collection to Site * Moved embed.skin as subskin #embed into Site.skin * Fixed some minor issues in Story.js (removed check for creator before setting the story's mode) * Defined cookie names as constants of User which can be overriden via app.properties userCookie and hashCookie * Moved a lot of code into compatibility module
This commit is contained in:
parent
ded7f5fcea
commit
df9017ab77
38 changed files with 1154 additions and 1736 deletions
|
@ -29,6 +29,10 @@ Admin.prototype.constructor = function() {
|
|||
return this;
|
||||
};
|
||||
|
||||
Admin.prototype.getPermission = function(action) {
|
||||
return User.require(User.PRIVILEGED);
|
||||
};
|
||||
|
||||
Admin.prototype.onRequest = function() {
|
||||
HopObject.prototype.onRequest.apply(this);
|
||||
if (!session.data.admin) {
|
||||
|
@ -42,10 +46,6 @@ Admin.prototype.onUnhandledMacro = function(name) {
|
|||
return null;
|
||||
};
|
||||
|
||||
Admin.prototype.getPermission = function(action) {
|
||||
return User.require(User.PRIVILEGED);
|
||||
};
|
||||
|
||||
Admin.prototype.main_action = function() {
|
||||
return res.redirect(this.href("status"));
|
||||
};
|
||||
|
@ -216,7 +216,7 @@ Admin.prototype.count_macro = function(param, object, name) {
|
|||
case "comments":
|
||||
if (object.constructor === Site) {
|
||||
res.write("FIXME: takes very long... :(");
|
||||
//res.write(object.stories.all.size() - object.stories.size());
|
||||
//res.write(object.stories.comments.size());
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -31,7 +31,8 @@ Archive.prototype.constructor = function(name, parent) {
|
|||
};
|
||||
|
||||
Archive.prototype.getPermission = function(action) {
|
||||
if (!this._parent.getPermission("main")) {
|
||||
var site = res.handlers.site;
|
||||
if (!site.getPermission("main")) {
|
||||
return false;
|
||||
}
|
||||
switch (action) {
|
||||
|
@ -40,7 +41,7 @@ Archive.prototype.getPermission = function(action) {
|
|||
case "next":
|
||||
return this.getPage() < this.getSize() / this.getPageSize();
|
||||
default:
|
||||
return this._parent.archiveMode === Site.PUBLIC;
|
||||
return site.archiveMode === Site.PUBLIC;
|
||||
}
|
||||
return false;
|
||||
};
|
||||
|
@ -113,7 +114,7 @@ Archive.prototype.list_macro = function(param, type) {
|
|||
if (!this.parent) {
|
||||
var site = res.handlers.site;
|
||||
var offset = (page - 1) * pageSize;
|
||||
var stories = site.stories["public"].list(offset, pageSize);
|
||||
var stories = site.stories.featured.list(offset, pageSize);
|
||||
for each (var story in stories) {
|
||||
renderStory(story);
|
||||
};
|
||||
|
@ -190,7 +191,7 @@ Archive.prototype.getFilter = function() {
|
|||
res.push();
|
||||
res.write("where site_id = ");
|
||||
res.write(site._id);
|
||||
res.write(" and prototype = 'Story' and status <> 'private'");
|
||||
res.write(" and prototype = 'Story' and status <> 'closed'");
|
||||
var part;
|
||||
if (part = this.getDate("year")) {
|
||||
res.write(" and year(created) = " + part);
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
_children = collection(Story)
|
||||
_children.local = id
|
||||
_children.foreign = site_id
|
||||
_children.filter = prototype = 'Story' and status <> 'private'
|
||||
_children.filter = prototype = 'Story' and status <> 'closed'
|
||||
_children.order = created desc
|
||||
_children.group = date_format(created, "%Y%m%d")
|
||||
#_children.group.prototype = Archive
|
||||
|
|
|
@ -22,7 +22,8 @@
|
|||
// $URL$
|
||||
//
|
||||
|
||||
defineConstants(Comment, "getStatus", "closed", "pending", "readonly", "public");
|
||||
Comment.getStatus = defineConstants(Comment, "closed",
|
||||
"pending", "readonly", "public");
|
||||
|
||||
Comment.prototype.constructor = function(parent) {
|
||||
this.site = parent.site;
|
||||
|
@ -49,7 +50,10 @@ Comment.prototype.getPermission = function(action) {
|
|||
case ".":
|
||||
case "main":
|
||||
case "comment":
|
||||
return this.story.getPermission(action);
|
||||
return this.site.commentsMode === Site.ENABLED &&
|
||||
this.story.getPermission(action) &&
|
||||
this.status !== Comment.CLOSED &&
|
||||
this.status !== Comment.PENDING;
|
||||
case "delete":
|
||||
case "edit":
|
||||
return this.story.getPermission.call(this, "delete");
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<% #main %>
|
||||
<a href="<% file.href %>" title="<% file.description %>"><% param.text %></a>
|
||||
<a href="<% file.href %>" title="<% file.description %>"><% file.name %></a>
|
||||
<span class="small">
|
||||
(<% file.contentType suffix=", " %><% file.contentLength %>)
|
||||
</span>
|
||||
|
@ -9,10 +9,10 @@
|
|||
<table width="100%" cellspacing="0" cellpadding="0">
|
||||
<tr>
|
||||
<td colspan="2" class="small">
|
||||
<strong>Macro:</strong> <% file <% file.name %> %>
|
||||
<div class="ample"><strong>Details: </strong><% file.fileSize %>
|
||||
<% file.contentType prefix=" " %><% file.requests prefix=", "
|
||||
no="0 downloads" one="1 download" more=" downloads"%></div>
|
||||
<strong>Macro:</strong> <% file.macro %>
|
||||
<div class="ample"><strong>Details: </strong><% file.contentLength %>
|
||||
<% file.contentType prefix=" " %><% ngettext "{0} download" "{0} downloads"
|
||||
<% file.requests %> prefix=", " %></div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
|
|
@ -29,6 +29,7 @@ app.addRepository("modules/core/Filters.js");
|
|||
|
||||
app.addRepository("modules/helma/Image.js");
|
||||
app.addRepository("modules/helma/Html.js");
|
||||
app.addRepository("modules/helma/Http.js");
|
||||
app.addRepository("modules/helma/Mail.js");
|
||||
app.addRepository("modules/helma/Search.js");
|
||||
app.addRepository("modules/helma/Zip.js");
|
||||
|
@ -41,9 +42,6 @@ app.addRepository("modules/jala/code/I18n.js");
|
|||
//app.addRepository("modules/jala/code/ListRenderer.js");
|
||||
app.addRepository("modules/jala/code/Utilities.js");
|
||||
|
||||
var _ = gettext;
|
||||
|
||||
var search = new helma.Search();
|
||||
var html = new helma.Html();
|
||||
|
||||
/**
|
||||
|
@ -51,7 +49,33 @@ var html = new helma.Html();
|
|||
* to an application-wide array (mail queue).
|
||||
*/
|
||||
helma.Mail.prototype.queue = function() {
|
||||
return app.data.mailQueue.push(this);
|
||||
app.data.mails || (app.data.mails = []);
|
||||
return app.data.mails.push(this);
|
||||
};
|
||||
|
||||
SHORTDATEFORMAT = "yyyy-MM-dd HH:mm";
|
||||
LONGDATEFORMAT = "EEEE, d. MMMM yyyy, HH:mm";
|
||||
|
||||
function defineConstants(ctor /*, arguments */) {
|
||||
var constants = [], name;
|
||||
for (var i=1; i<arguments.length; i+=1) {
|
||||
name = arguments[i].toUpperCase().replace(/\s/g, "");
|
||||
if (ctor[name]) {
|
||||
app.logger.warn("Constant already defined: " + ctor.name + "." + name);
|
||||
}
|
||||
ctor[name] = arguments[i];
|
||||
constants.push({
|
||||
value: arguments[i],
|
||||
display: arguments[i]
|
||||
});
|
||||
}
|
||||
return function() {
|
||||
return constants;
|
||||
};
|
||||
}
|
||||
|
||||
function disableMacro(ctor, name) {
|
||||
return ctor.prototype[name + "_macro"] = function() {return};
|
||||
};
|
||||
|
||||
function onStart() {
|
||||
|
@ -62,34 +86,7 @@ function onStart() {
|
|||
var id = rows.getColumnItem("id");
|
||||
//Packages.helma.main.Server.getServer().stopApplication(app.name);
|
||||
rows.release();*/
|
||||
return;
|
||||
|
||||
// load application messages and modules
|
||||
var dir = new Helma.File(app.dir, "../i18n");
|
||||
var arr = dir.list();
|
||||
for (var i in arr) {
|
||||
var fname = arr[i];
|
||||
if (fname.startsWith("messages.")) {
|
||||
var name = fname.substring(fname.indexOf(".") + 1, fname.length);
|
||||
var msgFile = new Helma.File(dir, fname);
|
||||
app.data[name] = new Packages.helma.util.SystemProperties(msgFile.getAbsolutePath());
|
||||
app.log("loaded application messages (language: " + name + ")");
|
||||
}
|
||||
}
|
||||
// init index manager
|
||||
app.data.indexManager = new IndexManager();
|
||||
// build macro help
|
||||
app.data.macros = buildMacroHelp();
|
||||
//eval(macroHelpFile.readAll());
|
||||
app.log("loaded macro help file");
|
||||
// creating the vector for referrer-logging
|
||||
app.data.accessLog = new java.util.Vector();
|
||||
// creating the hashtable for storyread-counting
|
||||
app.data.readLog = new java.util.Hashtable();
|
||||
// define the global mail queue
|
||||
app.data.mailQueue = new Array();
|
||||
// init constants
|
||||
initConstants();
|
||||
// call onStart methods of modules
|
||||
for (var i in app.modules) {
|
||||
if (app.modules[i].onStart)
|
||||
|
@ -110,29 +107,6 @@ function scheduler() {
|
|||
return 5000;
|
||||
}
|
||||
|
||||
function disableMacro(ctor, name) {
|
||||
return ctor.prototype[name + "_macro"] = function() {return};
|
||||
};
|
||||
|
||||
function defineConstants(ctor, getterName /* , arguments */) {
|
||||
var constants = [], name;
|
||||
for (var i=2; i<arguments.length; i+=1) {
|
||||
name = arguments[i].toUpperCase().replace(/\s/g, "");
|
||||
if (ctor[name]) {
|
||||
app.logger.warn("Constant already defined: " + ctor.name + "." + name);
|
||||
}
|
||||
ctor[name] = arguments[i];
|
||||
constants.push({
|
||||
value: arguments[i],
|
||||
display: arguments[i]
|
||||
});
|
||||
}
|
||||
ctor[getterName] = function() {
|
||||
return constants;
|
||||
};
|
||||
return;
|
||||
}
|
||||
|
||||
function logAction(context, action) {
|
||||
if (context) {
|
||||
root.admin.log.add(new LogEntry(context, action));
|
||||
|
@ -140,7 +114,6 @@ function logAction(context, action) {
|
|||
root.admin.log.cache.add(new LogEntry(path[path.length - 1]));
|
||||
}
|
||||
return;
|
||||
|
||||
/* FIXME: check whether request really should be logged
|
||||
var site = res.handlers.site ? res.handlers.site: root;
|
||||
var url = http.evalUrl(req.data.http_referer);
|
||||
|
@ -178,111 +151,54 @@ function flushLog() {
|
|||
return;
|
||||
}
|
||||
|
||||
MAY_ADD_STORY = 1;
|
||||
MAY_VIEW_ANYSTORY = 2;
|
||||
MAY_EDIT_ANYSTORY = 4;
|
||||
MAY_DELETE_ANYSTORY = 8;
|
||||
MAY_ADD_COMMENT = 16;
|
||||
MAY_EDIT_ANYCOMMENT = 32;
|
||||
MAY_DELETE_ANYCOMMENT = 64;
|
||||
MAY_ADD_IMAGE = 128;
|
||||
MAY_EDIT_ANYIMAGE = 256;
|
||||
MAY_DELETE_ANYIMAGE = 512;
|
||||
MAY_ADD_FILE = 1024;
|
||||
MAY_EDIT_ANYFILE = 2048;
|
||||
MAY_DELETE_ANYFILE= 4096;
|
||||
MAY_VIEW_STATS = 8192;
|
||||
MAY_EDIT_PREFS = 16384;
|
||||
MAY_EDIT_LAYOUTS = 32768;
|
||||
MAY_EDIT_MEMBERS = 65536;
|
||||
/**
|
||||
* Renders a string depending on the comparison of two values. If the first
|
||||
* value equals the second value, the first result will be returned; the
|
||||
* second result otherwise.
|
||||
* <p>Example: <code><% if <% macro %> is "value" then "yes!" else "no :(" %></code>
|
||||
* </p>
|
||||
* Note that any value or result can be a macro, too. Thus, this can be used as
|
||||
* a simple implementation of an if-then-else statement by using Helma macros
|
||||
* only.
|
||||
* @param {Object} param The default Helma macro parameter object
|
||||
* @param {String} firstValue The first value
|
||||
* @param {String} _is_ Syntactic sugar; should be "is" for legibility
|
||||
* @param {String} secondValue The second value
|
||||
* @param {String} _then_ Syntactic sugar; should be "then" for legibility
|
||||
* @param {String} firstResult The first result, ie. the value that will be
|
||||
* returned if the first value equals the second one
|
||||
* @param {String} _else_ Syntactic sugar; should be "else" for legibility
|
||||
* @param {String} secondResult The second result, ie. the value that will be
|
||||
* returned if the first value does not equal the second one
|
||||
* @returns The resulting value
|
||||
* @type String
|
||||
* @member Global
|
||||
*/
|
||||
function if_macro(param, firstValue, _is_, secondValue, _then_, firstResult,
|
||||
_else_, secondResult) {
|
||||
return (("" + firstValue) == ("" + secondValue)) ? firstResult : secondResult;
|
||||
}
|
||||
|
||||
EDITABLEBY_ADMINS = 0;
|
||||
EDITABLEBY_CONTRIBUTORS = 1;
|
||||
EDITABLEBY_SUBSCRIBERS = 2;
|
||||
function gettext_macro(param, text /*, value1, value2, ...*/) {
|
||||
var args = [text];
|
||||
for (var i=2; i<arguments.length; i+=1) {
|
||||
args.push(arguments[i]);
|
||||
}
|
||||
return gettext.apply(this, args);
|
||||
}
|
||||
|
||||
SHORTDATEFORMAT = "yyyy-MM-dd HH:mm";
|
||||
LONGDATEFORMAT = "EEEE, d. MMMM yyyy, HH:mm";
|
||||
function ngettext_macro(param, singular, plural, value1 /*, value2, value3, ...*/) {
|
||||
var args = [singular, plural, value1];
|
||||
for (var i=4; i<arguments.length; i+=1) {
|
||||
args.push(arguments[i]);
|
||||
}
|
||||
return ngettext.apply(this, args);
|
||||
}
|
||||
|
||||
function now_macro(param, format) {
|
||||
return formatDate(new Date, format || param.format);
|
||||
}
|
||||
|
||||
function file_macro(param, name, mode) {
|
||||
name || (name = param.name);
|
||||
if (!name) {
|
||||
return;
|
||||
}
|
||||
mode || (mode = param.as);
|
||||
delete(param.name);
|
||||
delete(param.as);
|
||||
|
||||
var file;
|
||||
if (name.startsWith("/")) {
|
||||
if (mode === "url") {
|
||||
res.write(root.getStaticUrl(name.substring(1)));
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
file = HopObject.getFromPath(name, "files");
|
||||
if (!file) {
|
||||
return;
|
||||
}
|
||||
if (mode === "url") {
|
||||
res.write(file.getUrl());
|
||||
} else {
|
||||
param.text || (param.text = file.name);
|
||||
file.renderSkin(param.skin || "main", param);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
function image_macro(param, name, mode) {
|
||||
name || (name = param.name);
|
||||
if (!name) {
|
||||
return;
|
||||
}
|
||||
mode || (mode = param.as);
|
||||
var action = param.linkto;
|
||||
delete(param.name);
|
||||
delete(param.as);
|
||||
delete(param.linkto);
|
||||
|
||||
var image;
|
||||
if (name.startsWith("/") && (image = Images.Default[name.substring(1)])) {
|
||||
param.src = root.getStaticUrl(image.name);
|
||||
param.border = 0;
|
||||
if (mode === "url") {
|
||||
res.write(param.src);
|
||||
} else if (image.href) {
|
||||
res.push();
|
||||
html.tag("img", param);
|
||||
link_filter(res.pop(), param, image.href);
|
||||
} else {
|
||||
html.tag("img", param);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
image = HopObject.getFromPath(name, "images");
|
||||
if (!image && param.fallback) {
|
||||
image = HopObject.getFromPath(param.fallback, "images");
|
||||
}
|
||||
if (!image) {
|
||||
return;
|
||||
}
|
||||
|
||||
switch (mode) {
|
||||
case "url" :
|
||||
return image.getUrl();
|
||||
case "thumbnail":
|
||||
action || (action = image.getUrl());
|
||||
return image.thumbnail_macro(param);
|
||||
}
|
||||
image.render_macro(param);
|
||||
return;
|
||||
}
|
||||
|
||||
function link_macro() {
|
||||
return renderLink.apply(this, arguments);
|
||||
}
|
||||
|
@ -321,54 +237,138 @@ function breadcrumbs_macro (param, delimiter) {
|
|||
return;
|
||||
}
|
||||
|
||||
// FIXME:
|
||||
function story_macro(param) {
|
||||
if (!param.id)
|
||||
function story_macro(param, id, mode) {
|
||||
id || (id = param.id);
|
||||
var story = HopObject.getFromPath(id, "stories");
|
||||
if (!story || !story.getPermission("main")) {
|
||||
return;
|
||||
var storyPath = param.id.split("/");
|
||||
if (storyPath.length == 2) {
|
||||
var site = root.get(storyPath[0]);
|
||||
if (!site || !site.online)
|
||||
return;
|
||||
} else if (res.handlers.site)
|
||||
var site = res.handlers.site;
|
||||
else
|
||||
return;
|
||||
var story = site.allstories.get(storyPath[1] ? storyPath[1] : param.id);
|
||||
if (!story)
|
||||
return getMessage("error", "storyNoExist", param.id);
|
||||
switch (param.as) {
|
||||
}
|
||||
|
||||
mode || (mode = param.as);
|
||||
delete(param.name);
|
||||
delete(param.as);
|
||||
|
||||
switch (mode) {
|
||||
case "url":
|
||||
res.write(story.href());
|
||||
break;
|
||||
case "link":
|
||||
var title = param.text ? param.text :
|
||||
story.content.get("title");
|
||||
html.link({href: story.href()}, title ? title : story._id);
|
||||
html.link({href: story.href()}, story.getTitle());
|
||||
break;
|
||||
default:
|
||||
story.renderSkin(param.skin ? param.skin : "embed");
|
||||
story.renderSkin(param.skin ? param.skin : "Story#main");
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// FIXME:
|
||||
function poll_macro(param) {
|
||||
if (!param.id)
|
||||
function file_macro(param, id, mode) {
|
||||
id || (id = param.name);
|
||||
if (!id) {
|
||||
return;
|
||||
// disable caching of any contentPart containing this macro
|
||||
res.meta.cachePart = false;
|
||||
var parts = param.id.split("/");
|
||||
if (parts.length == 2)
|
||||
var site = root.get(parts[0]);
|
||||
else
|
||||
var site = res.handlers.site;
|
||||
if (!site)
|
||||
}
|
||||
|
||||
mode || (mode = param.as);
|
||||
delete(param.name);
|
||||
delete(param.as);
|
||||
|
||||
var file;
|
||||
if (id.startsWith("/")) {
|
||||
name = id.substring(1);
|
||||
if (mode === "url") {
|
||||
res.write(root.getStaticUrl(name));
|
||||
} else {
|
||||
file = root.getStaticFile(name);
|
||||
res.push();
|
||||
File.prototype.contentLength_macro.call({
|
||||
contentLength: file.getLength()
|
||||
});
|
||||
res.handlers.file = {
|
||||
href: root.getStaticUrl(name),
|
||||
name: name,
|
||||
contentLength: res.pop()
|
||||
};
|
||||
File.prototype.renderSkin("File#main");
|
||||
}
|
||||
return;
|
||||
var poll = site.polls.get(parts[1] ? parts[1] : param.id);
|
||||
if (!poll)
|
||||
return getMessage("error.pollNoExist", param.id);
|
||||
switch (param.as) {
|
||||
}
|
||||
|
||||
file = HopObject.getFromPath(id, "files");
|
||||
if (!file) {
|
||||
return;
|
||||
}
|
||||
if (mode === "url") {
|
||||
res.write(file.getUrl());
|
||||
} else {
|
||||
file.renderSkin(param.skin || "File#main");
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
function image_macro(param, id, mode) {
|
||||
id || (id = param.name);
|
||||
if (!id) {
|
||||
return;
|
||||
}
|
||||
|
||||
mode || (mode = param.as);
|
||||
delete(param.name);
|
||||
delete(param.as);
|
||||
delete(param.linkto);
|
||||
|
||||
var image;
|
||||
if (id.startsWith("/") && (image = Images.Default[id.substring(1)])) {
|
||||
param.src = root.getStaticUrl(image.name);
|
||||
param.border = 0;
|
||||
if (mode === "url") {
|
||||
res.write(param.src);
|
||||
} else if (image.href) {
|
||||
res.push();
|
||||
html.tag("img", param);
|
||||
link_filter(res.pop(), param, image.href);
|
||||
} else {
|
||||
html.tag("img", param);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
image = HopObject.getFromPath(id, "images");
|
||||
if (!image && param.fallback) {
|
||||
image = HopObject.getFromPath(param.fallback, "images");
|
||||
}
|
||||
if (!image) {
|
||||
return;
|
||||
}
|
||||
switch (mode) {
|
||||
case "url" :
|
||||
res.write(image.getUrl());
|
||||
break;
|
||||
case "thumbnail":
|
||||
image.thumbnail_macro(param);
|
||||
break;
|
||||
default:
|
||||
image.render_macro(param);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
function poll_macro(param, id, mode) {
|
||||
id || (param.id = id);
|
||||
if (!id) {
|
||||
return;
|
||||
}
|
||||
|
||||
var poll = HopObject.getFromPath(id, "polls");
|
||||
if (!poll) {
|
||||
return;
|
||||
}
|
||||
|
||||
mode || (mode = param.as);
|
||||
var action = param.linkto;
|
||||
delete(param.name);
|
||||
delete(param.as);
|
||||
delete(param.linkto);
|
||||
|
||||
switch (mode) {
|
||||
case "url":
|
||||
res.write(poll.href());
|
||||
break;
|
||||
|
@ -378,204 +378,128 @@ function poll_macro(param) {
|
|||
}, poll.question);
|
||||
break;
|
||||
default:
|
||||
if (poll.closed || param.as == "results")
|
||||
poll.renderSkin("results");
|
||||
if (poll.status === Poll.CLOSED || mode === "results")
|
||||
poll.renderSkin("Poll#results");
|
||||
else {
|
||||
res.data.action = poll.href();
|
||||
poll.renderSkin("main");
|
||||
poll.renderSkin("Poll#main");
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// FIXME:
|
||||
function sitelist_macro(param) {
|
||||
// setting some general limitations:
|
||||
var minDisplay = 10;
|
||||
var maxDisplay = 25;
|
||||
var max = Math.min((param.limit ? parseInt(param.limit, 10) : minDisplay), maxDisplay);
|
||||
root.renderSitelist(max);
|
||||
res.write(res.data.sitelist);
|
||||
delete res.data.sitelist;
|
||||
function list_macro(param /*, limit, id */) {
|
||||
var id = arguments[2] || arguments[1];
|
||||
var limit = arguments[2] && arguments[1] || 0;
|
||||
if (!id && !limit) {
|
||||
return;
|
||||
}
|
||||
|
||||
// FIXME:
|
||||
function imagelist_macro(param) {
|
||||
var site = param.of ? root.get(param.of) : res.handlers.site;
|
||||
if (!site)
|
||||
return;
|
||||
if (!site.images.size())
|
||||
return;
|
||||
var max = Math.min(param.limit ? param.limit : 5, site.images.size());
|
||||
var idx = 0;
|
||||
var imgParam;
|
||||
var linkParam = {};
|
||||
delete param.limit;
|
||||
|
||||
while (idx < max) {
|
||||
var imgObj = site.images.get(idx++);
|
||||
|
||||
imgParam = Object.clone(param);
|
||||
delete imgParam.itemprefix;
|
||||
delete imgParam.itemsuffix;
|
||||
delete imgParam.as;
|
||||
delete linkParam.href;
|
||||
delete linkParam.onclick;
|
||||
|
||||
res.write(param.itemprefix);
|
||||
// return different display according to param.as
|
||||
switch (param.as) {
|
||||
case "url":
|
||||
res.write(imgObj.getUrl());
|
||||
break;
|
||||
case "popup":
|
||||
linkParam.onclick = imgObj.getPopupUrl();
|
||||
case "thumbnail":
|
||||
linkParam.href = param.linkto ? param.linkto : imgObj.getUrl();
|
||||
if (imgObj.thumbnail)
|
||||
imgObj = imgObj.thumbnail;
|
||||
default:
|
||||
if (linkParam.href) {
|
||||
html.openLink(linkParam);
|
||||
renderImage(imgObj, imgParam);
|
||||
html.closeLink();
|
||||
} else
|
||||
renderImage(imgObj, imgParam);
|
||||
}
|
||||
res.write(param.itemsuffix);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// FIXME: -> tags!
|
||||
function topiclist_macro(param) {
|
||||
var site = param.of ? root.get(param.of) : res.handlers.site;
|
||||
if (!site)
|
||||
return;
|
||||
site.topics.topiclist_macro(param);
|
||||
return;
|
||||
}
|
||||
|
||||
// FIXME: obsolete?
|
||||
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;
|
||||
}
|
||||
|
||||
// FIXME:
|
||||
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.get(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.get(param.name));
|
||||
} else
|
||||
return;
|
||||
renderSkin("colorpickerWidget", param);
|
||||
return;
|
||||
}
|
||||
|
||||
// FIXME:
|
||||
function randomize_macro(param) {
|
||||
var site, obj;
|
||||
if (param.site) {
|
||||
var site = root.get(param.site);
|
||||
if (!site.online)
|
||||
return;
|
||||
var max = Math.min(Math.max(limit, 5), 20);
|
||||
var collection, skin;
|
||||
if (id === "sites") {
|
||||
collection = root.sites;
|
||||
skin = "Site#preview";
|
||||
} else {
|
||||
var max = root.publicSites.size();
|
||||
while (!site || site.online < 1)
|
||||
site = root.publicSites.get(Math.floor(Math.random() * max));
|
||||
var site;
|
||||
var parts = id.split("/");
|
||||
if (parts.length > 1) {
|
||||
type = parts[1];
|
||||
site = root.sites.get(parts[0]);
|
||||
} else {
|
||||
type = parts[0];
|
||||
}
|
||||
var coll;
|
||||
switch (param.what) {
|
||||
|
||||
site || (site = res.handlers.site);
|
||||
var filter = function(item, index) {
|
||||
return index < max && item.getPermission("main");
|
||||
};
|
||||
|
||||
switch (type) {
|
||||
case "images":
|
||||
collection = site.images.list(0, max);
|
||||
skin = "Image#preview";
|
||||
break;
|
||||
|
||||
case "featured":
|
||||
collection = site.stories.featured.list(0, max);
|
||||
skin = "Story#preview";
|
||||
break;
|
||||
|
||||
case "stories":
|
||||
obj = site.stories.get(Math.floor(Math.random() * site.allstories.size()));
|
||||
var stories = site.stories.recent;
|
||||
collection = stories.list().filter(function(item, index) {
|
||||
return item.constructor === Story && filter(item, index);
|
||||
});
|
||||
skin = "Story#preview";
|
||||
break;
|
||||
|
||||
case "comments":
|
||||
var comments = site.stories.comments;
|
||||
collection = comments.list().filter(filter);
|
||||
skin = "Comment#preview";
|
||||
break;
|
||||
|
||||
case "postings":
|
||||
content = site.stories.recent;
|
||||
collection = content.list().filter(filter);
|
||||
skin = "Story#preview";
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
param.skin && (skin = param.skin);
|
||||
for each (var item in collection) {
|
||||
item.renderSkin(skin);
|
||||
}
|
||||
return;
|
||||
};
|
||||
|
||||
function randomize_macro(param, id) {
|
||||
var getRandom = function(n) {
|
||||
return Math.floor(Math.random() * n);
|
||||
};
|
||||
|
||||
var site;
|
||||
if (id === "sites") {
|
||||
site = root.sites.get(getRandom(root.sites.size()));
|
||||
site.renderSkin(param.skin || "Site#preview");
|
||||
return;
|
||||
}
|
||||
|
||||
var parts = id.split("/");
|
||||
if (parts.length > 1) {
|
||||
type = parts[1];
|
||||
site = root.sites.get(parts[0]);
|
||||
} else {
|
||||
type = parts[0];
|
||||
}
|
||||
site || (site = res.handlers.site);
|
||||
switch (type) {
|
||||
case "stories":
|
||||
var stories = site.stories["public"];
|
||||
var story = stories.get(getRandom(stories.size()));
|
||||
story && story.renderSkin(param.skin || "Story#preview");
|
||||
break;
|
||||
case "images":
|
||||
obj = site.images.get(Math.floor(Math.random() * site.images.size()));
|
||||
break;
|
||||
case "sites":
|
||||
default:
|
||||
obj = site;
|
||||
var image = site.images.get(getRandom(site.images.size()));
|
||||
image && image.renderSkin(param.skin || "Image#preview");
|
||||
break;
|
||||
}
|
||||
obj.renderSkin(param.skin ? param.skin : "embed");
|
||||
return;
|
||||
}
|
||||
|
||||
// FIXME:
|
||||
function randomimage_macro(param) {
|
||||
if (param.images) {
|
||||
var items = new Array();
|
||||
var aliases = param.images.split(",");
|
||||
for (var i=0; i<aliases.length; i++) {
|
||||
aliases[i] = aliases[i].trim();
|
||||
var img = getPoolObj(aliases[i], "images");
|
||||
if (img && img.obj) items[items.length] = img.obj;
|
||||
}
|
||||
}
|
||||
delete(param.images);
|
||||
var idx = Math.floor(Math.random()*items.length);
|
||||
var img = items[idx];
|
||||
param.name = img.alias;
|
||||
return image_macro(param);
|
||||
}
|
||||
|
||||
// FIXME:
|
||||
function imageoftheday_macro(param) {
|
||||
var s = res.handlers.site;
|
||||
var pool = res.handlers.site.images;
|
||||
if (pool==null) return;
|
||||
delete(param.topic);
|
||||
var img = pool.get(0);
|
||||
param.name = img.alias;
|
||||
return image_macro(param);
|
||||
}
|
||||
|
||||
// FIXME:
|
||||
function evalEmail(str) {
|
||||
if (!str.isEmail()) {
|
||||
return null;
|
||||
}
|
||||
function validateEmail(str) {
|
||||
if (str.isEmail()) {
|
||||
return str;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
// FIXME:
|
||||
function evalURL(str) {
|
||||
function validateUrl(str) {
|
||||
if (str) {
|
||||
if (url = helma.Http.evalUrl(str)) {
|
||||
return String(url);
|
||||
} else if (str.contains("@")) {
|
||||
|
@ -583,35 +507,10 @@ function evalURL(str) {
|
|||
} else {
|
||||
return "http://" + str;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
// FIXME:
|
||||
function autoLogin() {
|
||||
if (session.user) {
|
||||
return;
|
||||
}
|
||||
var name = req.cookies.avUsr;
|
||||
var hash = req.cookies.avPw;
|
||||
if (!name || !hash) {
|
||||
return;
|
||||
}
|
||||
var user = User.getByName(name);
|
||||
if (!user) {
|
||||
return;
|
||||
}
|
||||
var ip = req.data.http_remotehost.clip(getProperty ("cookieLevel","4"),
|
||||
"", "\\.");
|
||||
if ((user.hash + ip).md5() !== hash) {
|
||||
return;
|
||||
}
|
||||
session.login(user);
|
||||
user.touch();
|
||||
res.message = gettext('Welcome to "{0}", {1}. Have fun!',
|
||||
res.handlers.site.title, user.name);
|
||||
return;
|
||||
}
|
||||
|
||||
// FIXME:
|
||||
function pingUpdatedSites() {
|
||||
var c = getDBConnection("antville");
|
||||
|
@ -933,15 +832,6 @@ function buildMacroHelp() {
|
|||
return macroHelp;
|
||||
}
|
||||
|
||||
/**
|
||||
* wrapper method to expose the indexManager's
|
||||
* rebuildIndexes method to cron
|
||||
*/
|
||||
function rebuildIndexes() {
|
||||
app.data.indexManager.rebuildIndexes();
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* function tries to check if the color contains just hex-characters
|
||||
* if so, it returns the color-definition prefixed with a '#'
|
||||
|
@ -1154,21 +1044,6 @@ function renderPageNavigation(collectionOrSize, url, itemsPerPage, pageIdx) {
|
|||
return renderSkinAsString("pagenavigation", param);
|
||||
}
|
||||
|
||||
/**
|
||||
* function checks if user is logged in or not
|
||||
* if false, it redirects to the login-page
|
||||
* but before it stores the url to jump back (if passed as argument)
|
||||
*/
|
||||
function checkIfLoggedIn(referrer) {
|
||||
if (!session.user) {
|
||||
// user is not logged in
|
||||
if (referrer)
|
||||
session.data.referrer = referrer;
|
||||
res.redirect(res.handlers.site ? res.handlers.site.members.href("login") : root.members.href("login"));
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
function singularize(plural) {
|
||||
if (plural.endsWith("ies")) {
|
||||
return plural.substring(0, plural.length-3) + "y";
|
||||
|
@ -1256,34 +1131,6 @@ function getDateFormats(type, language) {
|
|||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Renders a string depending on the comparison of two values. If the first
|
||||
* value equals the second value, the first result will be returned; the
|
||||
* second result otherwise.
|
||||
* <p>Example: <code><% if <% macro %> is "value" then "yes!" else "no :(" %></code>
|
||||
* </p>
|
||||
* Note that any value or result can be a macro, too. Thus, this can be used as
|
||||
* a simple implementation of an if-then-else statement by using Helma macros
|
||||
* only.
|
||||
* @param {Object} param The default Helma macro parameter object
|
||||
* @param {String} firstValue The first value
|
||||
* @param {String} _is_ Syntactic sugar; should be "is" for legibility
|
||||
* @param {String} secondValue The second value
|
||||
* @param {String} _then_ Syntactic sugar; should be "then" for legibility
|
||||
* @param {String} firstResult The first result, ie. the value that will be
|
||||
* returned if the first value equals the second one
|
||||
* @param {String} _else_ Syntactic sugar; should be "else" for legibility
|
||||
* @param {String} secondResult The second result, ie. the value that will be
|
||||
* returned if the first value does not equal the second one
|
||||
* @returns The resulting value
|
||||
* @type String
|
||||
* @member Global
|
||||
*/
|
||||
function if_macro(param, firstValue, _is_, secondValue, _then_, firstResult,
|
||||
_else_, secondResult) {
|
||||
return (("" + firstValue) == ("" + secondValue)) ? firstResult : secondResult;
|
||||
}
|
||||
|
||||
function age_filter(value, param) {
|
||||
if (!value || value.constructor !== Date) {
|
||||
return value;
|
||||
|
@ -1322,20 +1169,3 @@ function clip_filter(input, param, limit, clipping, delimiter) {
|
|||
delimiter || (delimiter = "\\s");
|
||||
return String(input || "").head(limit, clipping, delimiter);
|
||||
}
|
||||
|
||||
var gettext_macro = function(param, text /*, value1, value2, ...*/) {
|
||||
var args = [text];
|
||||
for (var i=2; i<arguments.length; i+=1) {
|
||||
args.push(arguments[i]);
|
||||
}
|
||||
return gettext.apply(this, args);
|
||||
};
|
||||
|
||||
var ngettext_macro = function(param, singular, plural, value1 /*, value2, value3, ...*/) {
|
||||
var args = [singular, plural, value1];
|
||||
for (var i=4; i<arguments.length; i+=1) {
|
||||
args.push(arguments[i]);
|
||||
}
|
||||
return ngettext.apply(this, args);
|
||||
};
|
||||
|
||||
|
|
|
@ -1,113 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" >
|
||||
<head>
|
||||
<title>Antville Colorpicker</title>
|
||||
<link rel="stylesheet" type="text/css" title="CSS Stylesheet"
|
||||
href="<% site.href main.css %>" />
|
||||
<style type="text/css">
|
||||
<!--
|
||||
body {
|
||||
background-color: #ffffff;
|
||||
font-family: Verdana, Helvetica, Arial, sans-serif;
|
||||
color: #000000;
|
||||
}
|
||||
|
||||
td {
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
.center {
|
||||
text-align: right;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.widget {
|
||||
background-color: #ffffff;
|
||||
font: 12px verdana;
|
||||
color: #000000;
|
||||
}
|
||||
|
||||
.link {
|
||||
color: <% layout.linkcolor %>;
|
||||
}
|
||||
|
||||
.active {
|
||||
color: <% layout.alinkcolor %>;
|
||||
}
|
||||
|
||||
.visited {
|
||||
color: <% layout.vlinkcolor %>;
|
||||
}
|
||||
|
||||
.border {
|
||||
border: 1px solid #eeeeee;
|
||||
}
|
||||
// -->
|
||||
</style>
|
||||
<script type="text/javascript">
|
||||
<!--
|
||||
<% skin name="colorpickerScripts" %>
|
||||
// -->
|
||||
</script>
|
||||
</head>
|
||||
<body onload="cp.setCurrentColor();">
|
||||
|
||||
<p align="center">
|
||||
<table border="0" cellspacing="4" cellpadding="8">
|
||||
<tr>
|
||||
<td width="240" class="widget" colspan="2">
|
||||
|
||||
<!-- inner table, containing the color picker widget -->
|
||||
<table border="0" cellspacing="5" cellpadding="0">
|
||||
<tr>
|
||||
<td class="widget" colspan="2" align="center">Select <% request.text %> color:</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign="top" class="border" title="Select color">
|
||||
|
||||
<script type="text/javascript">
|
||||
<!--
|
||||
var cp = Antville.ColorPicker;
|
||||
for (var i=0; i<cp.defaultPalette.length; i++) {
|
||||
var color = cp.defaultPalette[i];
|
||||
if (i % cp.brightness.length == 0)
|
||||
document.write("<div>");
|
||||
document.write('<img id="color' + i + '" style="background-color: #' + color + ';" onclick="cp.updateBrightness(this, ' + i + ');" src="' + Antville.pixel.src + '" width="' + cp.squareSize + '" height="' + cp.squareSize + '" />');
|
||||
if (i % cp.brightness.length == cp.brightness.length-1)
|
||||
document.write("</div>");
|
||||
}
|
||||
// -->
|
||||
</script>
|
||||
|
||||
</td>
|
||||
<td valign="top">
|
||||
<div class="border" title="Select color brightness">
|
||||
|
||||
<script type="text/javascript">
|
||||
<!--
|
||||
for (var i=0; i<cp.brightness.length; i++)
|
||||
document.write('<div><img id="bright' + i + '" onclick="cp.updatePalette(this, ' + i + ');" src="' + Antville.pixel.src + '" width="15" height="15" style="background-color: #' + cp.brightness[i][0] + ';"/></div>');
|
||||
// -->
|
||||
</script>
|
||||
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="widget"><input class="widget" style="border: none;" id="display" value="" size="10" /></td>
|
||||
<td align="right" class="widget"><button name="accept" type="button" onclick="cp.submit();" title="accept color selection">Accept</button> <button name="cancel" type="button" onclick="cp.cancel();" title="cancel color selection">Cancel</button>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</p>
|
||||
|
||||
</body>
|
||||
</html>
|
|
@ -1,139 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" >
|
||||
<head>
|
||||
<title>Antville Colorpicker</title>
|
||||
<link rel="stylesheet" type="text/css" title="CSS Stylesheet"
|
||||
href="<% site.href main.css %>" />
|
||||
|
||||
<style type="text/css">
|
||||
<!--
|
||||
|
||||
body {
|
||||
background-color: #ffffff;
|
||||
font-family: Verdana, Helvetica, Arial, sans-serif;
|
||||
color: #000000;
|
||||
}
|
||||
|
||||
td {
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
.center {
|
||||
text-align: right;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.widget {
|
||||
background-color: #ffffff;
|
||||
font: 12px verdana;
|
||||
color: #000000;
|
||||
}
|
||||
|
||||
.link {
|
||||
color: <% layout.linkcolor %>;
|
||||
}
|
||||
|
||||
.active {
|
||||
color: <% layout.alinkcolor %>;
|
||||
}
|
||||
|
||||
.visited {
|
||||
color: <% layout.vlinkcolor %>;
|
||||
}
|
||||
|
||||
.border {
|
||||
border: 1px solid #eeeeee;
|
||||
}
|
||||
|
||||
// -->
|
||||
</style>
|
||||
|
||||
<script type="text/javascript">
|
||||
<!--
|
||||
<% skin name="colorpickerScripts" %>
|
||||
// -->
|
||||
</script>
|
||||
|
||||
</head>
|
||||
<body onload="cp.setCurrentColors(); cp.setDropdown(); cp.setCurrentColor();">
|
||||
|
||||
<table border="0" cellspacing="4" cellpadding="8">
|
||||
<tr>
|
||||
<td width="240" class="widget" rowspan="2">
|
||||
|
||||
<!-- inner table, containing the color picker widget -->
|
||||
<table border="0" cellspacing="5" cellpadding="0" bgcolor="#ffffff">
|
||||
<tr>
|
||||
<td class="widget" colspan="2" align="center">Select
|
||||
<select size="1" id="dropdown" name="color" onchange="cp.setDropDownColor(this);">
|
||||
|
||||
<script type="text/javascript">
|
||||
<!--
|
||||
var cp = Antville.ColorPicker;
|
||||
for (var i in cp.colorNames)
|
||||
document.write('<option value="' + i + '">' + cp.colorNames[i] + '</option>');
|
||||
// -->
|
||||
</script>
|
||||
|
||||
</select> color:
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign="top" class="border" title="Select color">
|
||||
|
||||
<script type="text/javascript">
|
||||
<!--
|
||||
for (var i=0; i<cp.defaultPalette.length; i++) {
|
||||
var color = cp.defaultPalette[i];
|
||||
if (i % cp.brightness.length == 0)
|
||||
document.write("<div>");
|
||||
document.write('<img id="color' + i + '" style="background-color: #' + color + ';" onclick="cp.updateBrightness(this, ' + i + ');" src="' + Antville.pixel.src + '" width="' + cp.squareSize + '" height="' + cp.squareSize + '" />');
|
||||
if (i % cp.brightness.length == cp.brightness.length-1)
|
||||
document.write("</div>");
|
||||
}
|
||||
// -->
|
||||
</script>
|
||||
|
||||
</td>
|
||||
<td valign="top">
|
||||
<div class="border" title="Select color brightness">
|
||||
|
||||
<script type="text/javascript">
|
||||
<!--
|
||||
for (var i=0; i<cp.brightness.length; i++)
|
||||
document.write('<div><img id="bright' + i + '" onclick="cp.updatePalette(this, ' + i + ');" src="' + Antville.pixel.src + '" width="15" height="15" style="background-color: #' + cp.brightness[i][0] + ';"/></div>');
|
||||
// -->
|
||||
</script>
|
||||
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
|
||||
</td>
|
||||
<td class="widget"> <!-- just a stupid spacer cell --></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td id="demo">
|
||||
<div id="titlecolor" class="storyTitle">Sample Text</div>
|
||||
<div id="textcolor" class="storyText">This is a sample text containing a <a id="linkcolor" class="link">fresh (unvisited) link</a> and a
|
||||
<a id="vlinkcolor" class="visited">visited link</a>. The <a id="alinkcolor" class="active">active link</a> color is the one
|
||||
you'll see while pressing the mouse button on the link.</div<br />
|
||||
<div id="smallcolor" class="small">Finally, some small text.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="widget">
|
||||
<input class="widget" style="border: none;" id="display" value="" size="10" />
|
||||
</td>
|
||||
<td align="right" class="widget"><button name="accept" type="button" onclick="cp.submit();" title="accept color selection">Accept</button> <button name="cancel" type="button" onclick="cp.cancel();" title="cancel color selection">Cancel</button>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
</body>
|
||||
</html>
|
|
@ -1,207 +0,0 @@
|
|||
var Antville = {};
|
||||
|
||||
Antville.prefix = "Antville_";
|
||||
Antville.pixel = new Image();
|
||||
Antville.pixel.src = "<% image name="/pixel" as="url" %>";
|
||||
|
||||
Antville.ColorPickerFactory = function() {
|
||||
var prefix = Antville.prefix + "ColorPicker_";
|
||||
var valuePrefix = Antville.prefix + "ColorValue_";
|
||||
|
||||
this.colorNames = {
|
||||
bgcolor: "background",
|
||||
textcolor: "text",
|
||||
titlecolor: "title",
|
||||
linkcolor: "link",
|
||||
alinkcolor: "active link",
|
||||
vlinkcolor: "visited link",
|
||||
smallcolor: "small text"
|
||||
};
|
||||
|
||||
this.colors = {};
|
||||
for (var i in this.colorNames) {
|
||||
var el = self.opener.document.getElementById(prefix+i);
|
||||
if (!el)
|
||||
continue;
|
||||
var col = el.style.backgroundColor;
|
||||
if (col.indexOf("#") == 0)
|
||||
col = col.substring(1);
|
||||
this.colors[i] = col;
|
||||
}
|
||||
|
||||
this.brightness = [
|
||||
["000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000","000000"],
|
||||
["151515","151313","151212","151010","150e0e","150c0c","150b0b","150909","150707","150505","150404","150202","150000","151515","151413","151312","151310","15120e","15110c","15100b","150f09","150e07","150d05","150c04","150c02","150b00","151515","151513","151512","151510","15150e","15150c","15150b","151509","151507","151505","151504","151502","151500","151515","141513","131512","131510","12150e","11150c","10150b","0f1509","0e1507","0d1505","0c1504","0c1502","0b1500","151515","131513","121512","101510","0e150e","0c150c","0b150b","091509","071507","051505","041504","021502","001500","151515","131514","121513","101513","0e1512","0c1511","0b1510","09150f","07150e","05150d","04150c","02150c","00150b","151515","131515","121515","101515","0e1515","0c1515","0b1515","091515","071515","051515","041515","021515","001515","151515","131415","121315","101315","0e1215","0c1115","0b1015","090f15","070e15","050d15","040c15","020c15","000b15","151515","131315","121215","101015","0e0e15","0c0c15","0b0b15","090915","070715","050515","040415","020215","000015","151515","141315","131215","131015","120e15","110c15","100b15","0f0915","0e0715","0d0515","0c0415","0c0215","0b0015","151515","151315","151215","151015","150e15","150c15","150b15","150915","150715","150515","150415","150215","150015","151515","151314","151213","151013","150e12","150c11","150b10","15090f","15070e","15050d","15040c","15020c","15000b","151515","151313","151212","151010","150e0e","150c0c","150b0b","150909","150707","150505","150404","150202","150000"],
|
||||
["2b2b2b","2b2727","2b2323","2b2020","2b1c1c","2b1919","2b1515","2b1212","2b0e0e","2b0b0b","2b0707","2b0404","2b0000","2b2b2b","2b2927","2b2723","2b2520","2b231c","2b2219","2b2015","2b1e12","2b1c0e","2b1b0b","2b1907","2b1704","2b1500","2b2b2b","2a2b27","2b2b23","2b2b20","2b2b1c","2a2b19","2b2b15","2b2b12","2a2b0e","2b2b0b","2b2b07","2b2b04","2b2b00","2b2b2b","292b27","272b23","252b20","232b1c","222b19","202b15","1e2b12","1c2b0e","1b2b0b","192b07","172b04","152b00","2b2b2b","272b27","232b23","202b20","1c2b1c","192b19","152b15","122b12","0e2b0e","0b2b0b","072b07","042b04","002b00","2b2b2b","272b29","232b27","202b25","1c2b23","192b22","152b20","122b1e","0e2b1c","0b2b1b","072b19","042b17","002b15","2b2b2b","272b2a","232b2a","202b2b","1c2b2b","192b2a","152b2a","122b2a","0e2b2a","0b2b2a","072b2a","042b2a","002b2a","2b2b2b","27292b","23272b","20252b","1c232b","19222b","15202b","121e2b","0e1c2b","0b1b2b","07192b","04172b","00152b","2b2b2b","27272b","23232b","20202b","1c1c2b","19192b","15152b","12122b","0e0e2b","0b0b2b","07072b","04042b","00002b","2b2b2b","29272b","27232b","25202b","231c2b","22192b","20152b","1e122b","1c0e2b","1b0b2b","19072b","17042b","15002b","2b2b2b","2b272a","2b232b","2b202b","2b1c2b","2b192a","2b152b","2b122b","2b0e2a","2b0b2b","2b072b","2b042b","2b002b","2b2b2b","2b2729","2b2327","2b2025","2b1c23","2b1922","2b1520","2b121e","2b0e1c","2b0b1b","2b0719","2b0417","2b0015","2b2b2b","2b2727","2b2323","2b2020","2b1c1c","2b1919","2b1515","2b1212","2b0e0e","2b0b0b","2b0707","2b0404","2b0000"],
|
||||
["404040","403a3a","403535","403030","402b2b","402525","402020","401b1b","401515","401010","400b0b","400505","400000","404040","403d3a","403a35","403830","40352b","403225","403020","402d1b","402b15","402810","40250b","402305","402000","404040","40403a","404035","404030","40402b","404025","404020","40401b","404015","404010","40400b","404005","404000","404040","3d403a","3a4035","384030","35402b","324025","304020","2d401b","2b4015","284010","25400b","234005","204000","404040","3a403a","354035","304030","2b402b","254025","204020","1b401b","154015","104010","0b400b","054005","004000","404040","3a403d","35403a","304038","2b4035","254032","204030","1b402d","15402b","104028","0b4025","054023","004020","404040","3a4040","354040","304040","2b4040","254040","204040","1b4040","154040","104040","0b4040","054040","004040","404040","3a3d40","353a40","303840","2b3540","253240","203040","1b2d40","152b40","102840","0b2540","052340","002040","404040","3a3a40","353540","303040","2b2b40","252540","202040","1b1b40","151540","101040","0b0b40","050540","000040","404040","3d3a40","3a3540","383040","352b40","322540","302040","2d1b40","2b1540","281040","250b40","230540","200040","404040","403a40","403540","403040","402b40","402540","402040","401b40","401540","401040","400b40","400540","400040","404040","403a3d","40353a","403038","402b35","402532","402030","401b2d","40152a","401028","400b25","400523","400020","404040","403a3a","403535","403030","402b2b","402525","402020","401b1b","401515","401010","400b0b","400505","400000"],
|
||||
["555555","554e4e","554747","554040","553939","553232","552b2b","552323","551c1c","551515","550e0e","550707","550000","555555","55514e","554e47","554a40","554739","554332","55402b","553c23","55391c","553515","55320e","552e07","552b00","555555","55554e","555547","555540","555539","555532","55552b","555523","55551c","555515","55550e","555507","555500","555555","51554e","4e5547","4a5540","475539","435532","40552b","3c5523","39551c","355515","32550e","2e5507","2b5500","555555","4e554e","475547","405540","395539","325532","2b552b","235523","1c551c","155515","0e550e","075507","005500","555555","4e5551","47554e","40554a","395547","325543","2b5540","23553c","1c5539","155535","0e5532","07552e","00552b","555555","4e5555","475555","405555","395555","325555","2b5555","235555","1c5555","155555","0e5555","075555","005555","555555","4e5155","474e55","404a55","394755","324355","2b4055","233c55","1c3955","153555","0e3255","072e55","002b55","555555","4e4e55","474755","404055","393955","323255","2b2b55","232355","1c1c55","151555","0e0e55","070755","000055","555555","514e55","4e4755","4a4055","473955","433255","402b55","3c2355","391c55","351555","320e55","2e0755","2b0055","555555","554e55","554755","554055","553955","553255","552b55","552355","551c55","551555","550e55","550755","550055","555555","554e51","55474e","55404a","553947","553243","552b40","55233c","551c39","551535","550e32","55072e","55002a","555555","554e4e","554747","554040","553939","553232","552b2b","552323","551c1c","551515","550e0e","550707","550000"],
|
||||
["6a6a6a","6a6161","6a5959","6a5050","6a4747","6a3e3e","6a3535","6a2c2c","6a2323","6a1b1b","6a1212","6a0909","6a0000","6a6a6a","6a6661","6a6159","6a5d50","6a5947","6a543e","6a5035","6a4b2c","6a4723","6a421b","6a3e12","6a3a09","6a3500","6a6a6a","6a6a61","6a6a59","6a6a50","6a6a47","6a6a3e","6a6a35","6a6a2c","6a6a23","6a6a1b","6a6a12","6a6a09","6a6a00","6a6a6a","666a61","616a59","5d6a50","596a47","546a3e","506a35","4b6a2c","476a23","426a1b","3e6a12","3a6a09","356a00","6a6a6a","616a61","596a59","506a50","476a47","3e6a3e","356a35","2c6a2c","236a23","1b6a1b","126a12","096a09","006a00","6a6a6a","616a66","596a61","506a5d","476a59","3e6a54","356a50","2c6a4b","236a47","1b6a42","126a3e","096a3a","006a35","6a6a6a","616a6a","596a6a","506a6a","476a6a","3e6a6a","356a6a","2c6a6a","236a6a","1b6a6a","126a6a","096a6a","006a6a","6a6a6a","61666a","59616a","505d6a","47596a","3e546a","35506a","2c4b6a","23476a","1b426a","123e6a","093a6a","00356a","6a6a6a","61616a","59596a","50506a","47476a","3e3e6a","35356a","2c2c6a","23236a","1b1b6a","12126a","09096a","00006a","6a6a6a","66616a","61596a","5d506a","59476a","543e6a","50356a","4b2c6a","47236a","421b6a","3e126a","3a096a","35006a","6a6a6a","6a616a","6a596a","6a506a","6a476a","6a3e6a","6a356a","6a2c6a","6a236a","6a1b6a","6a126a","6a096a","6a006a","6a6a6a","6a6166","6a5961","6a505d","6a4759","6a3e54","6a3550","6a2c4b","6a2347","6a1b42","6a123e","6a093a","6a0035","6a6a6a","6a6161","6a5959","6a5050","6a4747","6a3e3e","6a3535","6a2c2c","6a2323","6a1b1b","6a1212","6a0909","6a0000"],
|
||||
["7f7f7f","7f7575","7f6a6a","7f6060","7f5555","7f4a4a","7f4040","7f3535","7f2b2b","7f2020","7f1515","7f0b0b","7f0000","7f7f7f","7f7a75","7f756a","7f7060","7f6a55","7f654a","7f6040","7f5a35","7f552b","7f5020","7f4a15","7f450b","7f4000","7f7f7f","7f7f75","7f7f6a","7f7f60","7f7f55","7f7f4a","7f7f40","7f7f35","7f7f2b","7f7f20","7f7f15","7f7f0b","7f7f00","7f7f7f","7a7f75","757f6a","707f60","6a7f55","657f4a","607f40","5a7f35","557f2b","507f20","4a7f15","457f0b","407f00","7f7f7f","757f75","6a7f6a","607f60","557f55","4a7f4a","407f40","357f35","2b7f2b","207f20","157f15","0b7f0b","007f00","7f7f7f","757f7a","6a7f75","607f70","557f6a","4a7f65","407f60","357f5a","2b7f55","207f50","157f4a","0b7f45","007f40","7f7f7f","757f7f","6a7f7f","607f7f","557f7f","4a7f7f","407f7f","357f7f","2b7f7f","207f7f","157f7f","0b7f7f","007f7f","7f7f7f","757a7f","6a757f","60707f","556a7f","4a657f","40607f","355a7f","2b557f","20507f","154a7f","0b457f","00407f","7f7f7f","75757f","6a6a7f","60607f","55557f","4a4a7f","40407f","35357f","2b2b7f","20207f","15157f","0b0b7f","00007f","7f7f7f","7a757f","756a7f","70607f","6a557f","654a7f","60407f","5a357f","552b7f","50207f","4a157f","450b7f","40007f","7f7f7f","7f757f","7f6a7f","7f607f","7f557f","7f4a7f","7f407f","7f357f","7f2b7f","7f207f","7f157f","7f0b7f","7f007f","7f7f7f","7f757a","7f6a75","7f6070","7f556a","7f4a65","7f4060","7f355a","7f2b55","7f2050","7f154a","7f0b45","7f0040","7f7f7f","7f7575","7f6a6a","7f6060","7f5555","7f4a4a","7f4040","7f3535","7f2b2b","7f2020","7f1515","7f0b0b","7f0000"],
|
||||
["959595","958888","957c7c","957070","956363","955757","954a4a","953e3e","953232","952525","951919","950c0c","950000","959595","958f88","95887c","958270","957c63","957657","95704a","95693e","956332","955d25","955719","95510c","954a00","959595","959588","95957c","959570","959563","959557","95954a","95953e","959532","959525","959519","95950c","959500","959595","8f9588","88957c","829570","7c9563","769557","70954a","69953e","639532","5d9525","579519","51950c","4a9500","959595","889588","7c957c","709570","639563","579557","4a954a","3e953e","329532","259525","199519","0c950c","009500","959595","88958f","7c9588","709582","63957c","579576","4a9570","3e9569","329563","25955d","199557","0c9551","00954a","959595","889595","7c9595","709595","639595","579595","4a9595","3e9595","329595","259595","199595","0c9595","009595","959595","888f95","7c8895","708295","637c95","577695","4a7095","3e6995","326395","255d95","195795","0c5195","004a95","959595","888895","7c7c95","707095","636395","575795","4a4a95","3e3e95","323295","252595","191995","0c0c95","000095","959595","8f8895","887c95","827095","7c6395","765795","704a95","693e95","633295","5d2595","571995","510c95","4a0095","959595","958895","957c95","957095","956395","955795","954a95","953e95","953295","952595","951995","950c95","950095","959595","95888f","957c88","957082","95637c","955776","954a70","953e69","953263","95255d","951957","950c51","95004a","959595","958888","957c7c","957070","956363","955757","954a4a","953e3e","953232","952525","951919","950c0c","950000"],
|
||||
["aaaaaa","aa9c9c","aa8e8e","aa8080","aa7171","aa6363","aa5555","aa4747","aa3939","aa2b2b","aa1c1c","aa0e0e","aa0000","aaaaaa","aaa39c","aa9c8e","aa9580","aa8e71","aa8763","aa8055","aa7847","aa7139","aa6a2b","aa631c","aa5c0e","aa5500","aaaaaa","aaaa9c","aaaa8e","aaaa80","aaaa71","aaaa63","aaaa55","aaaa47","aaaa39","aaaa2b","aaaa1c","aaaa0e","aaaa00","aaaaaa","a3aa9c","9caa8e","95aa80","8eaa71","87aa63","80aa55","78aa47","71aa39","6aaa2b","63aa1c","5caa0e","55aa00","aaaaaa","9caa9c","8eaa8e","80aa80","71aa71","63aa63","55aa55","47aa47","39aa39","2baa2b","1caa1c","0eaa0e","00aa00","aaaaaa","9caaa3","8eaa9c","80aa95","71aa8e","63aa87","55aa80","47aa78","39aa71","2baa6a","1caa63","0eaa5c","00aa55","aaaaaa","9caaaa","8eaaaa","80aaaa","71aaaa","63aaaa","55aaaa","47aaaa","39aaaa","2baaaa","1caaaa","0eaaaa","00aaaa","aaaaaa","9ca3aa","8e9caa","8095aa","718eaa","6387aa","5580aa","4778aa","3971aa","2b6aaa","1c63aa","0e5caa","0055aa","aaaaaa","9c9caa","8e8eaa","8080aa","7171aa","6363aa","5555aa","4747aa","3939aa","2b2baa","1c1caa","0e0eaa","0000aa","aaaaaa","a39caa","9c8eaa","9580aa","8e71aa","8763aa","8055aa","7847aa","7139aa","6a2baa","631caa","5c0eaa","5500aa","aaaaaa","aa9caa","aa8eaa","aa80aa","aa71aa","aa63aa","aa55aa","aa47aa","aa39aa","aa2baa","aa1caa","aa0eaa","aa00aa","aaaaaa","aa9ca3","aa8e9c","aa8095","aa718e","aa6387","aa557f","aa4778","aa3971","aa2b6a","aa1c63","aa0e5c","aa0055","aaaaaa","aa9c9c","aa8e8e","aa8080","aa7171","aa6363","aa5555","aa4747","aa3939","aa2b2b","aa1c1c","aa0e0e","aa0000"],
|
||||
["bfbfbf","bfafaf","bf9f9f","bf8f8f","bf8080","bf7070","bf6060","bf5050","bf4040","bf3030","bf2020","bf1010","bf0000","bfbfbf","bfb7af","bfaf9f","bfa78f","bf9f80","bf9770","bf8f60","bf8750","bf8040","bf7830","bf7020","bf6810","bf6000","bfbfbf","bfbfaf","bfbf9f","bfbf8f","bfbf80","bfbf70","bfbf60","bfbf50","bfbf40","bfbf30","bfbf20","bfbf10","bfbf00","bfbfbf","b7bfaf","afbf9f","a7bf8f","9fbf80","97bf70","8fbf60","87bf50","80bf40","78bf30","70bf20","68bf10","60bf00","bfbfbf","afbfaf","9fbf9f","8fbf8f","80bf80","70bf70","60bf60","50bf50","40bf40","30bf30","20bf20","10bf10","00bf00","bfbfbf","afbfb7","9fbfaf","8fbfa7","80bf9f","70bf97","60bf8f","50bf87","40bf80","30bf78","20bf70","10bf68","00bf60","bfbfbf","afbfbf","9fbfbf","8fbfbf","80bfbf","70bfbf","60bfbf","50bfbf","40bfbf","30bfbf","20bfbf","10bfbf","00bfbf","bfbfbf","afb7bf","9fafbf","8fa7bf","809fbf","7097bf","608fbf","5087bf","4080bf","3078bf","2070bf","1068bf","0060bf","bfbfbf","afafbf","9f9fbf","8f8fbf","8080bf","7070bf","6060bf","5050bf","4040bf","3030bf","2020bf","1010bf","0000bf","bfbfbf","b7afbf","af9fbf","a78fbf","9f80bf","9770bf","8f60bf","8750bf","8040bf","7830bf","7020bf","6810bf","6000bf","bfbfbf","bfafbf","bf9fbf","bf8fbf","bf80bf","bf70bf","bf60bf","bf50bf","bf40bf","bf30bf","bf20bf","bf10bf","bf00bf","bfbfbf","bfafb7","bf9faf","bf8fa7","bf809f","bf7097","bf608f","bf5087","bf407f","bf3078","bf2070","bf1068","bf0060","bfbfbf","bfafaf","bf9f9f","bf8f8f","bf8080","bf7070","bf6060","bf5050","bf4040","bf3030","bf2020","bf1010","bf0000"],
|
||||
["d5d5d5","d5c3c3","d5b1b1","d59f9f","d58e8e","d57c7c","d56a6a","d55959","d54747","d53535","d52323","d51212","d50000","d5d5d5","d5ccc3","d5c3b1","d5ba9f","d5b18e","d5a87c","d59f6a","d59759","d58e47","d58535","d57c23","d57312","d56a00","d5d5d5","d4d5c3","d5d5b1","d5d59f","d5d58e","d4d57c","d5d56a","d5d559","d4d547","d5d535","d5d523","d5d512","d5d500","d5d5d5","ccd5c3","c3d5b1","bad59f","b1d58e","a8d57c","9fd56a","97d559","8ed547","85d535","7cd523","73d512","6ad500","d5d5d5","c3d5c3","b1d5b1","9fd59f","8ed58e","7cd57c","6ad56a","59d559","47d547","35d535","23d523","12d512","00d500","d5d5d5","c3d5cc","b1d5c3","9fd5ba","8ed5b1","7cd5a8","6ad59f","59d597","47d58e","35d585","23d57c","12d573","00d56a","d5d5d5","c3d5d4","b1d5d4","9fd5d5","8ed5d5","7cd5d4","6ad5d4","59d5d4","47d5d4","35d5d4","23d5d4","12d5d4","00d5d4","d5d5d5","c3ccd5","b1c3d5","9fbad5","8eb1d5","7ca8d5","6a9fd5","5997d5","478ed5","3585d5","237cd5","1273d5","006ad5","d5d5d5","c3c3d5","b1b1d5","9f9fd5","8e8ed5","7c7cd5","6a6ad5","5959d5","4747d5","3535d5","2323d5","1212d5","0000d5","d5d5d5","ccc3d5","c3b1d5","ba9fd5","b18ed5","a87cd5","9f6ad5","9759d5","8e47d5","8535d5","7c23d5","7312d5","6a00d5","d5d5d5","d5c3d4","d5b1d5","d59fd5","d58ed5","d57cd4","d56ad5","d559d5","d547d4","d535d5","d523d5","d512d5","d500d5","d5d5d5","d5c3cc","d5b1c3","d59fba","d58eb1","d57ca8","d56a9f","d55997","d5478e","d53585","d5237c","d51273","d5006a","d5d5d5","d5c3c3","d5b1b1","d59f9f","d58e8e","d57c7c","d56a6a","d55959","d54747","d53535","d52323","d51212","d50000"],
|
||||
["eaeaea","ead6d6","eac3c3","eaafaf","ea9c9c","ea8888","ea7575","ea6161","ea4e4e","ea3a3a","ea2727","ea1313","ea0000","eaeaea","eae0d6","ead6c3","eacdaf","eac39c","eab988","eaaf75","eaa661","ea9c4e","ea923a","ea8827","ea7f13","ea7500","eaeaea","eaead6","eaeac3","eaeaaf","eaea9c","eaea88","eaea75","eaea61","eaea4e","eaea3a","eaea27","eaea13","eaea00","eaeaea","e0ead6","d6eac3","cdeaaf","c3ea9c","b9ea88","afea75","a6ea61","9cea4e","92ea3a","88ea27","7fea13","75ea00","eaeaea","d6ead6","c3eac3","afeaaf","9cea9c","88ea88","75ea75","61ea61","4eea4e","3aea3a","27ea27","13ea13","00ea00","eaeaea","d6eae0","c3ead6","afeacd","9ceac3","88eab9","75eaaf","61eaa6","4eea9c","3aea92","27ea88","13ea7f","00ea75","eaeaea","d6eaea","c3eaea","afeaea","9ceaea","88eaea","75eaea","61eaea","4eeaea","3aeaea","27eaea","13eaea","00eaea","eaeaea","d6e0ea","c3d6ea","afcdea","9cc3ea","88b9ea","75afea","61a6ea","4e9cea","3a92ea","2788ea","137fea","0075ea","eaeaea","d6d6ea","c3c3ea","afafea","9c9cea","8888ea","7575ea","6161ea","4e4eea","3a3aea","2727ea","1313ea","0000ea","eaeaea","e0d6ea","d6c3ea","cdafea","c39cea","b988ea","af75ea","a661ea","9c4eea","923aea","8827ea","7f13ea","7500ea","eaeaea","ead6ea","eac3ea","eaafea","ea9cea","ea88ea","ea75ea","ea61ea","ea4eea","ea3aea","ea27ea","ea13ea","ea00ea","eaeaea","ead6e0","eac3d6","eaafcd","ea9cc3","ea88b9","ea75af","ea61a6","ea4e9c","ea3a92","ea2788","ea137f","ea0075","eaeaea","ead6d6","eac3c3","eaafaf","ea9c9c","ea8888","ea7575","ea6161","ea4e4e","ea3a3a","ea2727","ea1313","ea0000"],
|
||||
["ffffff","ffeaea","ffd5d5","ffbfbf","ffaaaa","ff9595","ff8080","ff6a6a","ff5555","ff4040","ff2a2a","ff1515","ff0000","ffffff","fff4ea","ffead5","ffdfbf","ffd5aa","ffca95","ffbf80","ffb56a","ffaa55","ff9f40","ff952a","ff8a15","ff8000","ffffff","ffffea","ffffd5","ffffbf","ffffaa","ffff95","ffff80","ffff6a","ffff55","ffff40","ffff2a","ffff15","ffff00","ffffff","f4ffea","eaffd5","dfffbf","d5ffaa","caff95","bfff80","b5ff6a","aaff55","9fff40","95ff2a","8aff15","80ff00","ffffff","eaffea","d5ffd5","bfffbf","aaffaa","95ff95","80ff80","6aff6a","55ff55","40ff40","2aff2a","15ff15","00ff00","ffffff","eafff4","d5ffea","bfffdf","aaffd4","95ffca","80ffbf","6affb5","55ffaa","40ff9f","2aff95","15ff8a","00ff80","ffffff","eaffff","d5ffff","bfffff","aaffff","95ffff","80ffff","6affff","55ffff","40ffff","2affff","15ffff","00ffff","ffffff","eaf4ff","d5eaff","bfdfff","aad5ff","95caff","80bfff","6ab5ff","55aaff","409fff","2a95ff","158aff","0080ff","ffffff","eaeaff","d5d5ff","bfbfff","aaaaff","9595ff","8080ff","6a6aff","5555ff","4040ff","2a2aff","1515ff","0000ff","ffffff","f4eaff","ead5ff","dfbfff","d5aaff","ca95ff","bf80ff","b56aff","aa55ff","9f40ff","952aff","8a15ff","8000ff","ffffff","ffeaff","ffd5ff","ffbfff","ffaaff","ff95ff","ff80ff","ff6aff","ff55ff","ff40ff","ff2aff","ff15ff","ff00ff","ffffff","ffeaf4","ffd5ea","ffbfdf","ffaad4","ff95ca","ff80bf","ff6ab5","ff55aa","ff409f","ff2a95","ff158a","ff007f","ffffff","ffeaea","ffd5d5","ffbfbf","ffaaaa","ff9595","ff8080","ff6a6a","ff5555","ff4040","ff2a2b","ff1515","ff0000"]
|
||||
];
|
||||
|
||||
// the color we're currently editing
|
||||
this.currentColor = "<% request.name %>";
|
||||
this.currentColorValue = self.opener.document.getElementById(prefix+this.currentColor).style.backgroundColor;
|
||||
|
||||
this.squareSize = 15;
|
||||
this.defaultPalette = this.brightness[this.brightness.length-1];
|
||||
|
||||
this.marquee = new Image();
|
||||
this.marquee.src = "<% image name="/marquee" as="url" %>";
|
||||
|
||||
this.setPaletteMarquee = function(obj) {
|
||||
if (this.lastPaletteMarquee)
|
||||
this.lastPaletteMarquee.src = Antville.pixel.src;
|
||||
obj.src = this.marquee.src;
|
||||
this.lastPaletteMarquee = obj;
|
||||
return;
|
||||
}
|
||||
|
||||
this.setBrightnessMarquee = function(obj) {
|
||||
if (this.lastBrightnessMarquee)
|
||||
this.lastBrightnessMarquee.src = Antville.pixel.src;
|
||||
obj.src = this.marquee.src;
|
||||
this.lastBrightnessMarquee = obj;
|
||||
return;
|
||||
}
|
||||
|
||||
this.displayColor = function(obj) {
|
||||
this.displayColorValue(obj);
|
||||
var col = obj.style.backgroundColor;
|
||||
// document.getElementById("result").value = col;
|
||||
this.colors[this.currentColor] = document.getElementById("display").value;
|
||||
if (this.currentColor == "bgcolor") {
|
||||
var el = document.getElementById("demo");
|
||||
if (el)
|
||||
el.style.backgroundColor = col;
|
||||
} else {
|
||||
var el = document.getElementById(this.currentColor);
|
||||
if (el)
|
||||
el.style.color = col;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert various color notations into one canonical six figure hex notation.
|
||||
*/
|
||||
this.parseColor = function(color) {
|
||||
var rgb = new RegExp("rgb ?\\( ?([0-9^,]*), ?([0-9^,]*), ?([0-9^ \\)]*) ?\\)");
|
||||
var result = color.match(rgb);
|
||||
if (result) {
|
||||
var R = parseInt(result[1]).toString(16);
|
||||
var G = parseInt(result[2]).toString(16);
|
||||
var B = parseInt(result[3]).toString(16);
|
||||
if (R.length == 1) R="0"+R;
|
||||
if (G.length == 1) G="0"+G;
|
||||
if (B.length == 1) B="0"+B;
|
||||
return R+G+B;
|
||||
}
|
||||
else if (color.indexOf("#") == 0)
|
||||
return color.substring(1);
|
||||
else
|
||||
return color;
|
||||
}
|
||||
|
||||
this.displayColorValue = function(obj) {
|
||||
var col = obj.style.backgroundColor;
|
||||
col = this.parseColor(col);
|
||||
document.getElementById("display").value = col;
|
||||
return;
|
||||
}
|
||||
|
||||
this.updatePalette = function(obj, p) {
|
||||
this.setPaletteMarquee(obj);
|
||||
this.displayColor(obj);
|
||||
var palette = this.brightness[p];
|
||||
if (!this.colorPalette) {
|
||||
this.colorPalette = new Array();
|
||||
for (var i=0; i<palette.length; i++)
|
||||
this.colorPalette[i] = document.getElementById("color"+i);
|
||||
}
|
||||
for (var i=0; i<palette.length; i++)
|
||||
this.colorPalette[i].style.backgroundColor = "#"+palette[i];
|
||||
this.selectedColor = obj;
|
||||
return;
|
||||
}
|
||||
|
||||
this.updateBrightness = function(obj, p) {
|
||||
this.setBrightnessMarquee(obj);
|
||||
this.displayColor(obj);
|
||||
for (var i=0; i<this.brightness.length; i++)
|
||||
document.getElementById("bright"+i).style.backgroundColor = "#"+this.brightness[i][p];
|
||||
return;
|
||||
}
|
||||
|
||||
this.setCurrentColors = function() {
|
||||
for (var name in this.colors) {
|
||||
var col = this.colors[name];
|
||||
if (name == "bgcolor")
|
||||
document.getElementById("demo").style.backgroundColor = col;
|
||||
else
|
||||
document.getElementById(name).style.color = col;
|
||||
}
|
||||
}
|
||||
|
||||
this.setCurrentColor = function() {
|
||||
var col = this.colors[this.currentColor];
|
||||
if (col == null)
|
||||
col = this.currentColorValue;
|
||||
col = this.parseColor(col);
|
||||
for (var i=this.brightness.length-1; i>=0; i--) {
|
||||
for (var j=0; j<this.brightness[i].length; j++) {
|
||||
if (this.brightness[i][j] == col) {
|
||||
var c = document.getElementById("color"+j);
|
||||
var b = document.getElementById("bright"+i);
|
||||
this.updateBrightness(c, j);
|
||||
this.updatePalette(b, i);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
this.setDropdown = function() {
|
||||
var select = document.getElementById("dropdown");
|
||||
for (var i=0; i<select.options.length; i++) {
|
||||
if (select.options[i].value == this.currentColor) {
|
||||
select.selectedIndex = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
this.setDropDownColor = function(select) {
|
||||
this.currentColor = select.options[select.selectedIndex].value;
|
||||
this.setCurrentColor();
|
||||
return;
|
||||
}
|
||||
|
||||
this.submit = function() {
|
||||
var ref = self.opener.document;
|
||||
for (var i in this.colors) {
|
||||
var col = this.colors[i];
|
||||
col = this.parseColor(col);
|
||||
ref.getElementById(prefix+i).style.backgroundColor = "#"+col;
|
||||
ref.getElementById(valuePrefix+i).value = col;
|
||||
}
|
||||
this.cancel();
|
||||
return;
|
||||
}
|
||||
|
||||
this.cancel = function() {
|
||||
self.close();
|
||||
return;
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
Antville.ColorPicker = new Antville.ColorPickerFactory();
|
|
@ -1 +0,0 @@
|
|||
<% param.editor %> <img src="<% image name="/pixel" as="url" %>" width="13" height="13" alt="" style="margin-left:5px;background-color:<% param.color %>;" title="Click to pick the <% param.text %> color" onclick="Antville.ColorPicker.open('<% param.name %>', '<% param.text %>', '<% param.skin %>');" id="Antville_ColorPicker_<% param.name %>" class="colorpickerWidget" />
|
|
@ -46,9 +46,9 @@ HopObject.prototype.onRequest = function() {
|
|||
}
|
||||
}
|
||||
|
||||
autoLogin();
|
||||
User.autoLogin();
|
||||
res.handlers.membership = User.getMembership();
|
||||
if (User.getStatus() === User.BLOCKED) {
|
||||
if (User.getCurrentStatus() === User.BLOCKED) {
|
||||
session.logout();
|
||||
res.message = new Error(gettext("Sorry, your account has been disabled. Please contact the maintainer of this site for further information."));
|
||||
res.redirect(root.href());
|
||||
|
@ -114,15 +114,6 @@ res.abort(); */
|
|||
return;
|
||||
};
|
||||
|
||||
HopObject.prototype.onUnhandledMacro = function(name) {
|
||||
return;
|
||||
|
||||
switch (name) {
|
||||
default:
|
||||
return this[name];
|
||||
}
|
||||
};
|
||||
|
||||
HopObject.prototype.touch = function() {
|
||||
return this.map({
|
||||
modified: new Date,
|
||||
|
@ -205,6 +196,24 @@ HopObject.prototype.upload_macro = function(param, name) {
|
|||
return;
|
||||
};
|
||||
|
||||
HopObject.prototype.macro_macro = function(param, handler) {
|
||||
var ctor = this.constructor;
|
||||
if ([Story, Image, File, Poll].indexOf(ctor) > -1) {
|
||||
var quote = function(str) {
|
||||
if (/\s/.test(str)) {
|
||||
str = '"' + str + '"';
|
||||
}
|
||||
return str;
|
||||
};
|
||||
res.encode("<% ");
|
||||
res.write(handler || ctor.name.toLowerCase());
|
||||
res.write(String.SPACE);
|
||||
res.write(quote(this.name) || this._id);
|
||||
res.encode(" %>");
|
||||
}
|
||||
return;
|
||||
};
|
||||
|
||||
HopObject.prototype.getFormValue = function(name) {
|
||||
if (req.isPost()) {
|
||||
return req.postParams[name];
|
||||
|
@ -327,7 +336,7 @@ HopObject.getFromPath = function(name, collection) {
|
|||
} else {
|
||||
site = res.handlers.site;
|
||||
}
|
||||
if (site) {
|
||||
if (site && site.getPermission("main")) {
|
||||
return site[collection].get(name);
|
||||
}
|
||||
return null;
|
||||
|
|
|
@ -172,12 +172,9 @@ Image.prototype.url_macro = function() {
|
|||
return res.write(this.url || this.getUrl());
|
||||
};
|
||||
|
||||
Image.prototype.code_macro = function() {
|
||||
res.write("<% ");
|
||||
res.write(this.parent.constructor === Layout ? "layout.image " : "image ");
|
||||
res.write(this.name);
|
||||
res.write(" %>");
|
||||
return;
|
||||
Image.prototype.macro_macro = function() {
|
||||
return HopObject.prototype.macro_macro.call(this, null,
|
||||
this.parent.constructor === Layout ? "layout.image" : "image");
|
||||
};
|
||||
|
||||
Image.prototype.thumbnail_macro = function() {
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<% #main %>
|
||||
<p><% breadcrumbs %></p>
|
||||
<p>To insert this image into a story, comment or skin copy/paste the following
|
||||
code: <pre><% image.code %></pre></p>
|
||||
code: <pre><% image.macro %></pre></p>
|
||||
<table width="100%" border="0" cellspacing="0" cellpadding="0">
|
||||
<tr>
|
||||
<td colspan="2" class="small">
|
||||
|
@ -34,7 +34,7 @@ code: <pre><% image.code %></pre></p>
|
|||
<table width="100%" cellspacing="0" cellpadding="0">
|
||||
<tr>
|
||||
<td colspan="2" class="small">
|
||||
<strong>Macro:</strong> <% image.code %>
|
||||
<strong>Macro:</strong> <% image.macro %>
|
||||
<div class="ample"><strong>Format: </strong><% image.contentType %>,
|
||||
<% image.width %>×<% image.height %> pixels</div>
|
||||
</td>
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
// $URL$
|
||||
//
|
||||
|
||||
defineConstants(Layout, "getModes", "default", "shared");
|
||||
Layout.getModes = defineConstants(Layout, "default", "shared");
|
||||
|
||||
this.handleMetadata("title");
|
||||
this.handleMetadata("description");
|
||||
|
|
|
@ -62,9 +62,10 @@ Members.prototype.link_macro = function(param, action, text) {
|
|||
|
||||
Members.prototype.main_action = function() {
|
||||
res.data.title = gettext("Members of {0}", this._parent.title);
|
||||
res.data.list = renderList(this, "mgrlistitem", 10, req.data.page);
|
||||
res.data.pager = renderPageNavigation(this, this.href(req.action), 10,
|
||||
req.data.page);
|
||||
res.data.list = renderList(this, "Membership#members",
|
||||
10, req.queryParams.page);
|
||||
res.data.pager = renderPageNavigation(this, this.href(req.action),
|
||||
10, req.queryParams.page);
|
||||
res.data.body = this.renderSkinAsString("Members#main");
|
||||
res.handlers.site.renderSkin("page");
|
||||
return;
|
||||
|
@ -136,8 +137,8 @@ Members.prototype.logout_action = function() {
|
|||
session.user.name);
|
||||
session.logout();
|
||||
delete session.data.referrer;
|
||||
res.setCookie("avUsr", "");
|
||||
res.setCookie("avPw", "");
|
||||
res.setCookie(User.COOKIE, String.EMPTY);
|
||||
res.setCookie(User.HASHCOOKIE, String.EMPTY);
|
||||
}
|
||||
res.redirect(this._parent.href());
|
||||
return;
|
||||
|
|
|
@ -11,6 +11,128 @@
|
|||
<% response.list %>
|
||||
<% response.pager %>
|
||||
|
||||
<% #login %>
|
||||
<script type="text/javascript">
|
||||
$(function() {
|
||||
$("#submit").click(function() {
|
||||
var token = "<% session.token %>";
|
||||
var name = $("#name").val();
|
||||
var password = $("#password").val();
|
||||
$("input:password").val("");
|
||||
$.ajax({
|
||||
async: false,
|
||||
url: '<% members.href salt.js %>',
|
||||
data: "user=" + encodeURIComponent(name),
|
||||
dataType: "json",
|
||||
success: function(salt) {
|
||||
$("#digest").val($.md5($.md5(password + salt) + token));
|
||||
}
|
||||
});
|
||||
return true;
|
||||
});
|
||||
});
|
||||
</script>
|
||||
<form id="login" method="post" action="<% response.action %>">
|
||||
<input type="hidden" name="digest" id="digest" />
|
||||
<table border="0" cellspacing="0" cellpadding="3">
|
||||
<tr>
|
||||
<td class="small">Username:</td>
|
||||
<td nowrap="nowrap">
|
||||
<input type="text" name="name" id="name" size="15" tabindex="1"
|
||||
value="<% request.name %>" />
|
||||
</td>
|
||||
<td rowspan="4" nowrap="nowrap"> </td>
|
||||
<td class="small">
|
||||
<% members.link register "Not registered yet" %>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="small" nowrap="nowrap">Password:</td>
|
||||
<td>
|
||||
<input type="password" name="password" id="password" size="15" tabindex="2" />
|
||||
</td>
|
||||
<td class="small">
|
||||
<% members.link sendpwd "Forgot your password?" %>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td nowrap="nowrap"> </td>
|
||||
<td colspan="2" class="small">
|
||||
<input type="checkbox" id="remember" name="remember" tabindex="3"
|
||||
<% if <% request.remember %> is "on" then 'checked="checked"' %> />
|
||||
<label for="remember">Remember me</label>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td nowrap="nowrap"> </td>
|
||||
<td colspan="2"><br />
|
||||
<button type="submit" id="submit" name="login" value="1"
|
||||
tabindex="4">login</button>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
|
||||
<% #register %>
|
||||
<script type="text/javascript">
|
||||
$(function() {
|
||||
$("#submit").click(function() {
|
||||
var token = "<% session.token %>";
|
||||
var password = $("#password").val();
|
||||
var passwordConfirm = $("#passwordConfirm").val();
|
||||
$("input:password").val("");
|
||||
// Check both passwords but let the server do the error handling
|
||||
if (!password || !passwordConfirm) {
|
||||
return true;
|
||||
} else if (password !== passwordConfirm) {
|
||||
$("#password1").val(0);
|
||||
$("#password2").val(1);
|
||||
return true;
|
||||
}
|
||||
var hash = $.md5(password + token);
|
||||
$("#hash").val(hash);
|
||||
return true;
|
||||
});
|
||||
});
|
||||
</script>
|
||||
<form method="post" action="<% response.action %>">
|
||||
<input type="hidden" name="hash" id="hash" />
|
||||
<table border="0" cellspacing="0" cellpadding="3">
|
||||
<tr>
|
||||
<td class="small" nowrap="nowrap">Username:</td>
|
||||
<td nowrap="nowrap">
|
||||
<input type="text" name="name" value="<% request.name %>" />
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="small" valign="top" nowrap="nowrap">e-mail:</td>
|
||||
<td>
|
||||
<input type="text" name="email" value="<% request.email %>" />
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="small" nowrap="nowrap">Password:</td>
|
||||
<td nowrap="nowrap">
|
||||
<input type="password" name="password" id="password" />
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="small" nowrap="nowrap">Confirm password:</td>
|
||||
<td nowrap="nowrap">
|
||||
<input type="password" name="passwordConfirm" id="passwordConfirm" />
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td nowrap="nowrap"> </td>
|
||||
<td nowrap="nowrap"><br />
|
||||
<button type="submit" id="submit" name="register"
|
||||
value="register">Register</button>
|
||||
<button type="submit" name="cancel" value="cancel">Cancel</button>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
|
||||
<% #add %>
|
||||
<form method="post" action="<% response.action %>">
|
||||
<table border="0" cellspacing="0" cellpadding="0">
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
// $URL$
|
||||
//
|
||||
|
||||
defineConstants(Membership, "getRoles", "Subscriber", "Contributor",
|
||||
Membership.getRoles = defineConstants(Membership, "Subscriber", "Contributor",
|
||||
"Manager", "Owner");
|
||||
|
||||
Membership.prototype.constructor = function(user, role) {
|
||||
|
@ -50,21 +50,6 @@ Membership.prototype.getPermission = function(action) {
|
|||
return true;
|
||||
};
|
||||
|
||||
Membership.prototype.update = function(data) {
|
||||
if (!data.role) {
|
||||
throw Error(gettext("Please choose a role for this member."));
|
||||
} else if (this.user === session.user) {
|
||||
throw Error(gettext("Sorry, you are not allowed to edit your own membership."));
|
||||
} else if (data.role !== this.role) {
|
||||
this.role = data.role;
|
||||
this.touch();
|
||||
/* FIXME: sendMail(root.sys_email, this.user.email,
|
||||
getMessage("mail.statusChange", this.site.title),
|
||||
this.renderSkinAsString("mailstatuschange"));*/
|
||||
}
|
||||
return;
|
||||
};
|
||||
|
||||
Membership.prototype.edit_action = function() {
|
||||
if (req.postParams.save) {
|
||||
try {
|
||||
|
@ -84,6 +69,29 @@ Membership.prototype.edit_action = function() {
|
|||
return;
|
||||
};
|
||||
|
||||
Membership.prototype.getFormOptions = function(name) {
|
||||
switch (name) {
|
||||
case "role":
|
||||
return Membership.getRoles();
|
||||
}
|
||||
return;
|
||||
};
|
||||
|
||||
Membership.prototype.update = function(data) {
|
||||
if (!data.role) {
|
||||
throw Error(gettext("Please choose a role for this member."));
|
||||
} else if (this.user === session.user) {
|
||||
throw Error(gettext("Sorry, you are not allowed to edit your own membership."));
|
||||
} else if (data.role !== this.role) {
|
||||
this.role = data.role;
|
||||
this.touch();
|
||||
/* FIXME: sendMail(root.sys_email, this.user.email,
|
||||
getMessage("mail.statusChange", this.site.title),
|
||||
this.renderSkinAsString("mailstatuschange"));*/
|
||||
}
|
||||
return;
|
||||
};
|
||||
|
||||
Membership.prototype.contact_action = function() {
|
||||
if (req.postParams.send) {
|
||||
try {
|
||||
|
@ -109,28 +117,6 @@ Membership.prototype.contact_action = function() {
|
|||
return;
|
||||
};
|
||||
|
||||
Membership.prototype.delete_action = function() {
|
||||
if (req.postParams.proceed) {
|
||||
try {
|
||||
var url = this._parent.href();
|
||||
Membership.remove(this);
|
||||
res.message = gettext("Successfully deleted the membership.");
|
||||
res.redirect(url);
|
||||
} catch(ex) {
|
||||
res.message = ex;
|
||||
app.log(ex);
|
||||
}
|
||||
}
|
||||
|
||||
res.data.action = this.href(req.action);
|
||||
res.data.title = gettext("Delete membership: {0}", this.name);
|
||||
res.data.body = this.renderSkinAsString("delete", {
|
||||
text: gettext('You are about to delete the membership {0}', this.name)
|
||||
});
|
||||
this.site.renderSkin("page");
|
||||
return;
|
||||
};
|
||||
|
||||
Membership.prototype.getMacroHandler = function(name) {
|
||||
switch (name) {
|
||||
case "creator":
|
||||
|
@ -138,18 +124,71 @@ Membership.prototype.getMacroHandler = function(name) {
|
|||
}
|
||||
};
|
||||
|
||||
Membership.prototype.link_filter = function(value, param) {
|
||||
return HopObject.prototype.link_filter.call(this, value,
|
||||
param, this.creator.url);
|
||||
};
|
||||
|
||||
Membership.prototype.email_macro = function(param) {
|
||||
throw Error("Due to privacy reasons the display of e-mail addresses is disabled.")
|
||||
};
|
||||
|
||||
Membership.prototype.getFormOptions = function(name) {
|
||||
switch (name) {
|
||||
case "role":
|
||||
return Membership.getRoles();
|
||||
}
|
||||
Membership.prototype.status_macro = function() {
|
||||
this.role || (res.handlers.members = {});
|
||||
this.renderSkin(session.user ? "Membership#status" : "Membership#login");
|
||||
return;
|
||||
};
|
||||
|
||||
Membership.getByName = function(name) {
|
||||
var site = res.handlers.site;
|
||||
if (site) {
|
||||
return site.members.get(name);
|
||||
}
|
||||
return null;
|
||||
};
|
||||
|
||||
Membership.require = function(role) {
|
||||
var roles = [Membership.SUBSCRIBER, Membership.CONTRIBUTOR,
|
||||
Membership.MANAGER, Membership.OWNER];
|
||||
if (role && res.handlers.membership) {
|
||||
return roles.indexOf(res.handlers.membership.role) >= roles.indexOf(role);
|
||||
}
|
||||
return false;
|
||||
};
|
||||
|
||||
Membership.remove = function(membership) {
|
||||
/*if (!membership) {
|
||||
throw Error(gettext("Please specify a membership you want to be removed."));
|
||||
} else if (membership.role === Membership.OWNER) {
|
||||
throw Error(gettext("Sorry, an owner of a site cannot be removed."));
|
||||
}*/
|
||||
membership.remove();
|
||||
return;
|
||||
};
|
||||
|
||||
/*
|
||||
MAY_ADD_STORY = 1;
|
||||
MAY_VIEW_ANYSTORY = 2;
|
||||
MAY_EDIT_ANYSTORY = 4;
|
||||
MAY_DELETE_ANYSTORY = 8;
|
||||
MAY_ADD_COMMENT = 16;
|
||||
MAY_EDIT_ANYCOMMENT = 32;
|
||||
MAY_DELETE_ANYCOMMENT = 64;
|
||||
MAY_ADD_IMAGE = 128;
|
||||
MAY_EDIT_ANYIMAGE = 256;
|
||||
MAY_DELETE_ANYIMAGE = 512;
|
||||
MAY_ADD_FILE = 1024;
|
||||
MAY_EDIT_ANYFILE = 2048;
|
||||
MAY_DELETE_ANYFILE= 4096;
|
||||
MAY_VIEW_STATS = 8192;
|
||||
MAY_EDIT_PREFS = 16384;
|
||||
MAY_EDIT_LAYOUTS = 32768;
|
||||
MAY_EDIT_MEMBERS = 65536;
|
||||
|
||||
EDITABLEBY_ADMINS = 0;
|
||||
EDITABLEBY_CONTRIBUTORS = 1;
|
||||
EDITABLEBY_SUBSCRIBERS = 2;
|
||||
|
||||
Membership.getLevel = function(role) {
|
||||
if (!role) {
|
||||
var membership = User.getMembership();
|
||||
|
@ -168,45 +207,6 @@ Membership.getLevel = function(role) {
|
|||
}
|
||||
};
|
||||
|
||||
Membership.getByName = function(name) {
|
||||
var site = res.handlers.site;
|
||||
if (site) {
|
||||
return site.members.get(name);
|
||||
}
|
||||
return null;
|
||||
};
|
||||
|
||||
Membership.require = function(role) {
|
||||
var roles = [Membership.SUBSCRIBER, Membership.CONTRIBUTOR,
|
||||
Membership.MANAGER, Membership.OWNER];
|
||||
if (role && res.handlers.membership) {
|
||||
return roles.indexOf(res.handlers.membership.role) >= roles.indexOf(role);
|
||||
}
|
||||
return false;
|
||||
/* if (role && res.handlers.membership) {
|
||||
return Membership.getLevel(res.handlers.membership.role) -
|
||||
Membership.getLevel(role) >= 0;
|
||||
}
|
||||
return false; */
|
||||
};
|
||||
|
||||
Membership.remove = function(membership) {
|
||||
/*if (!membership) {
|
||||
throw Error(gettext("Please specify a membership you want to be removed."));
|
||||
} else if (membership.role === Membership.OWNER) {
|
||||
throw Error(gettext("Sorry, an owner of a site cannot be removed."));
|
||||
}*/
|
||||
membership.remove();
|
||||
return;
|
||||
};
|
||||
|
||||
Membership.prototype.status_macro = function() {
|
||||
this.role || (res.handlers.members = {});
|
||||
this.renderSkin(session.user ? "Membership#status" : "Membership#login");
|
||||
return;
|
||||
};
|
||||
|
||||
/*
|
||||
Membership.getRoles = function() {
|
||||
return [{
|
||||
display: Membership.SUBSCRIBER,
|
||||
|
|
|
@ -16,9 +16,9 @@
|
|||
## See the License for the specific language governing permissions and
|
||||
## limitations under the License.
|
||||
##
|
||||
## $Revision$
|
||||
## $LastChangedBy$
|
||||
## $LastChangedDate$
|
||||
## $Revision:3355 $
|
||||
## $LastChangedBy:piefke3000 $
|
||||
## $LastChangedDate:2007-10-11 15:38:29 +0200 (Thu, 11 Oct 2007) $
|
||||
## $URL$
|
||||
##
|
||||
|
||||
|
@ -61,7 +61,7 @@ polls.order = created desc
|
|||
|
||||
images = collection(Image)
|
||||
images.local = site_id
|
||||
images.foreign = site_id
|
||||
images.foreign = parent_id
|
||||
images.local.1 = creator_id
|
||||
images.foreign.1 = creator_id
|
||||
images.filter = prototype = 'Image' and parent_type = 'Site'
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
You're not logged in <% site.members.link login prefix="... " %>
|
||||
|
||||
<% #status %>
|
||||
Logged in as <% username as="link" %><br />
|
||||
Logged in as <% membership.name | membership.link %><br />
|
||||
<% membership.role prefix="(" suffix=")<br />" %>
|
||||
<% members.link edit "edit your profile" prefix="... " suffix="<br />" %>
|
||||
<% site.link subscribe text="subscribe to this site" prefix="... " suffix="<br />" %>
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
// $URL$
|
||||
//
|
||||
|
||||
defineConstants(Poll, "getStatus", "closed", "readonly", "open");
|
||||
Poll.getStatus = defineConstants(Poll, "closed", "readonly", "open");
|
||||
|
||||
Poll.prototype.constructor = function(question) {
|
||||
this.question = question;
|
||||
|
|
|
@ -41,7 +41,7 @@
|
|||
<td rowspan="2" width="5"></td>'
|
||||
%>
|
||||
<td colspan="3" class="small">
|
||||
<strong>Macro:</strong> <% poll <% poll.id %> %>
|
||||
<strong>Macro:</strong> <% poll.macro %>
|
||||
<div class="ample"><strong>Status:</strong>
|
||||
<% ngettext "{0} vote" "{0} votes" <% poll.votes %> %>
|
||||
</td>
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
// $URL$
|
||||
//
|
||||
|
||||
defineConstants(Root, "getScopes", markgettext("every site"),
|
||||
Root.getScopes = defineConstants(Root, markgettext("every site"),
|
||||
markgettext("public sites"), markgettext("trusted sites"),
|
||||
markgettext("no site"));
|
||||
|
||||
|
@ -191,39 +191,6 @@ Root.prototype.rss_xml_action = function() {
|
|||
return;
|
||||
};
|
||||
|
||||
Root.prototype.main_css_action = function() {
|
||||
res.dependsOn(res.handlers.layout.modifytime);
|
||||
res.dependsOn(res.handlers.layout.skins.getSkinSource("Root", "style"));
|
||||
res.digest();
|
||||
res.contentType = "text/css";
|
||||
this.renderSkin("style");
|
||||
return;
|
||||
};
|
||||
|
||||
Root.prototype.main_js_action = function() {
|
||||
res.dependsOn(res.handlers.layout.modifytime);
|
||||
res.dependsOn(res.handlers.layout.skins.getSkinSource("Root", "javascript"));
|
||||
res.digest();
|
||||
res.contentType = "text/javascript";
|
||||
root.renderSkin("javascript");
|
||||
root.renderSkin("systemscripts");
|
||||
return;
|
||||
};
|
||||
|
||||
Root.prototype.sitecounter_macro = function(param) {
|
||||
if (param.count == "all")
|
||||
var size = root.size();
|
||||
else
|
||||
var size = this.publicSites.size();
|
||||
if (size == 0)
|
||||
res.write(param.no ? param.no : size);
|
||||
else if (size == 1)
|
||||
res.write(param.one ? param.one : size);
|
||||
else
|
||||
res.write(size + (param.more ? param.more : ""));
|
||||
return;
|
||||
};
|
||||
|
||||
Root.prototype.getCreationPermission = function() {
|
||||
var user;
|
||||
if (!(user = session.user)) {
|
||||
|
@ -235,10 +202,8 @@ Root.prototype.getCreationPermission = function() {
|
|||
switch (root.creationScope) {
|
||||
case User.PRIVILEGEDUSERS:
|
||||
return false;
|
||||
|
||||
case User.TRUSTEDUSERS:
|
||||
return User.require(User.TRUSTED);
|
||||
|
||||
default:
|
||||
case User.ALLUSERS:
|
||||
if (root.qualifyingPeriod) {
|
||||
|
@ -345,7 +310,7 @@ Root.prototype.renderSitelist = function(limit, show, scroll) {
|
|||
while (cnt < limit && idx < size) {
|
||||
var s = collection.get(idx++);
|
||||
if (!s.blocked && s.online) {
|
||||
s.renderSkin("preview");
|
||||
s.renderSkin("Site#list");
|
||||
cnt++;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -43,6 +43,7 @@ _children.accessname = name
|
|||
_children.order = modified desc
|
||||
|
||||
sites = collection(Site)
|
||||
sites.accessname = name
|
||||
sites.filter = name <> '${name}' and mode <> 'closed' and mode <> 'restricted' and status <> 'blocked'
|
||||
sites.order = name asc
|
||||
|
||||
|
|
|
@ -0,0 +1,278 @@
|
|||
Antville = {};
|
||||
Antville.prefix = "Antville_";
|
||||
|
||||
Antville.encode = function(str) {
|
||||
var chars = ["&", "<", ">", '"'];
|
||||
for (var i in chars) {
|
||||
var c = chars[i];
|
||||
var re = new RegExp(c, "g");
|
||||
str = str.replace(re, "&#" + c.charCodeAt() + ";");
|
||||
}
|
||||
return str;
|
||||
};
|
||||
|
||||
Antville.decode = function(str) {
|
||||
return str.replace(/&/g, "&");
|
||||
};
|
||||
|
||||
Antville.Referrer = function(url, text, count) {
|
||||
this.url = url;
|
||||
this.text = text;
|
||||
this.count = count;
|
||||
this.compose = function(key, prefix) {
|
||||
var query = new Antville.Query(this.url);
|
||||
if (query[key]) {
|
||||
if (prefix == null)
|
||||
prefix = "";
|
||||
return prefix + Antville.encode(query[key]);
|
||||
}
|
||||
return this.text;
|
||||
}
|
||||
return this;
|
||||
};
|
||||
|
||||
Antville.Query = function(str) {
|
||||
if (str == undefined)
|
||||
var str = location.search.substring(1);
|
||||
else if (str.indexOf("?") > -1)
|
||||
var str = str.split("?")[1];
|
||||
if (str == "")
|
||||
return this;
|
||||
var parts = Antville.decode(decodeURIComponent(str)).split("&");
|
||||
for (var i in parts) {
|
||||
var pair = parts[i].split("=");
|
||||
var key = pair[0];
|
||||
if (key) {
|
||||
key = key.replace(/\+/g, " ");
|
||||
var value = pair[1];
|
||||
if (value)
|
||||
value = value.replace(/\+/g, " ");
|
||||
this[key] = value;
|
||||
}
|
||||
}
|
||||
return this;
|
||||
};
|
||||
|
||||
Antville.Filter = function(def, key) {
|
||||
this.key = key;
|
||||
if (def == null)
|
||||
this.items = [];
|
||||
else if (def instanceof Array)
|
||||
this.items = def;
|
||||
else
|
||||
this.items = def.replace(/\r/g, "\n").split("\n");
|
||||
this.test = function(str) {
|
||||
if (!str)
|
||||
return false;
|
||||
str = str.replace(/&/g, "&");
|
||||
for (var n in this.items) {
|
||||
var re = new RegExp(this.items[n], "i");
|
||||
if (re.test(str))
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
return this;
|
||||
};
|
||||
|
||||
/**
|
||||
* MD5 (Message-Digest Algorithm)
|
||||
* http://www.webtoolkit.info/
|
||||
*/
|
||||
jQuery.md5 = function (string) {
|
||||
function RotateLeft(lValue, iShiftBits) {
|
||||
return (lValue<<iShiftBits) | (lValue>>>(32-iShiftBits));
|
||||
}
|
||||
|
||||
function AddUnsigned(lX,lY) {
|
||||
var lX4,lY4,lX8,lY8,lResult;
|
||||
lX8 = (lX & 0x80000000);
|
||||
lY8 = (lY & 0x80000000);
|
||||
lX4 = (lX & 0x40000000);
|
||||
lY4 = (lY & 0x40000000);
|
||||
lResult = (lX & 0x3FFFFFFF)+(lY & 0x3FFFFFFF);
|
||||
if (lX4 & lY4) {
|
||||
return (lResult ^ 0x80000000 ^ lX8 ^ lY8);
|
||||
}
|
||||
if (lX4 | lY4) {
|
||||
if (lResult & 0x40000000) {
|
||||
return (lResult ^ 0xC0000000 ^ lX8 ^ lY8);
|
||||
} else {
|
||||
return (lResult ^ 0x40000000 ^ lX8 ^ lY8);
|
||||
}
|
||||
} else {
|
||||
return (lResult ^ lX8 ^ lY8);
|
||||
}
|
||||
}
|
||||
|
||||
function F(x,y,z) { return (x & y) | ((~x) & z); }
|
||||
function G(x,y,z) { return (x & z) | (y & (~z)); }
|
||||
function H(x,y,z) { return (x ^ y ^ z); }
|
||||
function I(x,y,z) { return (y ^ (x | (~z))); }
|
||||
|
||||
function FF(a,b,c,d,x,s,ac) {
|
||||
a = AddUnsigned(a, AddUnsigned(AddUnsigned(F(b, c, d), x), ac));
|
||||
return AddUnsigned(RotateLeft(a, s), b);
|
||||
};
|
||||
|
||||
function GG(a,b,c,d,x,s,ac) {
|
||||
a = AddUnsigned(a, AddUnsigned(AddUnsigned(G(b, c, d), x), ac));
|
||||
return AddUnsigned(RotateLeft(a, s), b);
|
||||
};
|
||||
|
||||
function HH(a,b,c,d,x,s,ac) {
|
||||
a = AddUnsigned(a, AddUnsigned(AddUnsigned(H(b, c, d), x), ac));
|
||||
return AddUnsigned(RotateLeft(a, s), b);
|
||||
};
|
||||
|
||||
function II(a,b,c,d,x,s,ac) {
|
||||
a = AddUnsigned(a, AddUnsigned(AddUnsigned(I(b, c, d), x), ac));
|
||||
return AddUnsigned(RotateLeft(a, s), b);
|
||||
};
|
||||
|
||||
function ConvertToWordArray(string) {
|
||||
var lWordCount;
|
||||
var lMessageLength = string.length;
|
||||
var lNumberOfWords_temp1=lMessageLength + 8;
|
||||
var lNumberOfWords_temp2=(lNumberOfWords_temp1-(lNumberOfWords_temp1 % 64))/64;
|
||||
var lNumberOfWords = (lNumberOfWords_temp2+1)*16;
|
||||
var lWordArray=Array(lNumberOfWords-1);
|
||||
var lBytePosition = 0;
|
||||
var lByteCount = 0;
|
||||
while ( lByteCount < lMessageLength ) {
|
||||
lWordCount = (lByteCount-(lByteCount % 4))/4;
|
||||
lBytePosition = (lByteCount % 4)*8;
|
||||
lWordArray[lWordCount] = (lWordArray[lWordCount] | (string.charCodeAt(lByteCount)<<lBytePosition));
|
||||
lByteCount++;
|
||||
}
|
||||
lWordCount = (lByteCount-(lByteCount % 4))/4;
|
||||
lBytePosition = (lByteCount % 4)*8;
|
||||
lWordArray[lWordCount] = lWordArray[lWordCount] | (0x80<<lBytePosition);
|
||||
lWordArray[lNumberOfWords-2] = lMessageLength<<3;
|
||||
lWordArray[lNumberOfWords-1] = lMessageLength>>>29;
|
||||
return lWordArray;
|
||||
};
|
||||
|
||||
function WordToHex(lValue) {
|
||||
var WordToHexValue="",WordToHexValue_temp="",lByte,lCount;
|
||||
for (lCount = 0;lCount<=3;lCount++) {
|
||||
lByte = (lValue>>>(lCount*8)) & 255;
|
||||
WordToHexValue_temp = "0" + lByte.toString(16);
|
||||
WordToHexValue = WordToHexValue + WordToHexValue_temp.substr(WordToHexValue_temp.length-2,2);
|
||||
}
|
||||
return WordToHexValue;
|
||||
};
|
||||
|
||||
function Utf8Encode(string) {
|
||||
string = string.replace(/\r\n/g,"\n");
|
||||
var utftext = "";
|
||||
|
||||
for (var n = 0; n < string.length; n++) {
|
||||
|
||||
var c = string.charCodeAt(n);
|
||||
|
||||
if (c < 128) {
|
||||
utftext += String.fromCharCode(c);
|
||||
}
|
||||
else if((c > 127) && (c < 2048)) {
|
||||
utftext += String.fromCharCode((c >> 6) | 192);
|
||||
utftext += String.fromCharCode((c & 63) | 128);
|
||||
}
|
||||
else {
|
||||
utftext += String.fromCharCode((c >> 12) | 224);
|
||||
utftext += String.fromCharCode(((c >> 6) & 63) | 128);
|
||||
utftext += String.fromCharCode((c & 63) | 128);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return utftext;
|
||||
};
|
||||
|
||||
var x=Array();
|
||||
var k,AA,BB,CC,DD,a,b,c,d;
|
||||
var S11=7, S12=12, S13=17, S14=22;
|
||||
var S21=5, S22=9 , S23=14, S24=20;
|
||||
var S31=4, S32=11, S33=16, S34=23;
|
||||
var S41=6, S42=10, S43=15, S44=21;
|
||||
|
||||
string = Utf8Encode(string);
|
||||
|
||||
x = ConvertToWordArray(string);
|
||||
|
||||
a = 0x67452301; b = 0xEFCDAB89; c = 0x98BADCFE; d = 0x10325476;
|
||||
|
||||
for (k=0;k<x.length;k+=16) {
|
||||
AA=a; BB=b; CC=c; DD=d;
|
||||
a=FF(a,b,c,d,x[k+0], S11,0xD76AA478);
|
||||
d=FF(d,a,b,c,x[k+1], S12,0xE8C7B756);
|
||||
c=FF(c,d,a,b,x[k+2], S13,0x242070DB);
|
||||
b=FF(b,c,d,a,x[k+3], S14,0xC1BDCEEE);
|
||||
a=FF(a,b,c,d,x[k+4], S11,0xF57C0FAF);
|
||||
d=FF(d,a,b,c,x[k+5], S12,0x4787C62A);
|
||||
c=FF(c,d,a,b,x[k+6], S13,0xA8304613);
|
||||
b=FF(b,c,d,a,x[k+7], S14,0xFD469501);
|
||||
a=FF(a,b,c,d,x[k+8], S11,0x698098D8);
|
||||
d=FF(d,a,b,c,x[k+9], S12,0x8B44F7AF);
|
||||
c=FF(c,d,a,b,x[k+10],S13,0xFFFF5BB1);
|
||||
b=FF(b,c,d,a,x[k+11],S14,0x895CD7BE);
|
||||
a=FF(a,b,c,d,x[k+12],S11,0x6B901122);
|
||||
d=FF(d,a,b,c,x[k+13],S12,0xFD987193);
|
||||
c=FF(c,d,a,b,x[k+14],S13,0xA679438E);
|
||||
b=FF(b,c,d,a,x[k+15],S14,0x49B40821);
|
||||
a=GG(a,b,c,d,x[k+1], S21,0xF61E2562);
|
||||
d=GG(d,a,b,c,x[k+6], S22,0xC040B340);
|
||||
c=GG(c,d,a,b,x[k+11],S23,0x265E5A51);
|
||||
b=GG(b,c,d,a,x[k+0], S24,0xE9B6C7AA);
|
||||
a=GG(a,b,c,d,x[k+5], S21,0xD62F105D);
|
||||
d=GG(d,a,b,c,x[k+10],S22,0x2441453);
|
||||
c=GG(c,d,a,b,x[k+15],S23,0xD8A1E681);
|
||||
b=GG(b,c,d,a,x[k+4], S24,0xE7D3FBC8);
|
||||
a=GG(a,b,c,d,x[k+9], S21,0x21E1CDE6);
|
||||
d=GG(d,a,b,c,x[k+14],S22,0xC33707D6);
|
||||
c=GG(c,d,a,b,x[k+3], S23,0xF4D50D87);
|
||||
b=GG(b,c,d,a,x[k+8], S24,0x455A14ED);
|
||||
a=GG(a,b,c,d,x[k+13],S21,0xA9E3E905);
|
||||
d=GG(d,a,b,c,x[k+2], S22,0xFCEFA3F8);
|
||||
c=GG(c,d,a,b,x[k+7], S23,0x676F02D9);
|
||||
b=GG(b,c,d,a,x[k+12],S24,0x8D2A4C8A);
|
||||
a=HH(a,b,c,d,x[k+5], S31,0xFFFA3942);
|
||||
d=HH(d,a,b,c,x[k+8], S32,0x8771F681);
|
||||
c=HH(c,d,a,b,x[k+11],S33,0x6D9D6122);
|
||||
b=HH(b,c,d,a,x[k+14],S34,0xFDE5380C);
|
||||
a=HH(a,b,c,d,x[k+1], S31,0xA4BEEA44);
|
||||
d=HH(d,a,b,c,x[k+4], S32,0x4BDECFA9);
|
||||
c=HH(c,d,a,b,x[k+7], S33,0xF6BB4B60);
|
||||
b=HH(b,c,d,a,x[k+10],S34,0xBEBFBC70);
|
||||
a=HH(a,b,c,d,x[k+13],S31,0x289B7EC6);
|
||||
d=HH(d,a,b,c,x[k+0], S32,0xEAA127FA);
|
||||
c=HH(c,d,a,b,x[k+3], S33,0xD4EF3085);
|
||||
b=HH(b,c,d,a,x[k+6], S34,0x4881D05);
|
||||
a=HH(a,b,c,d,x[k+9], S31,0xD9D4D039);
|
||||
d=HH(d,a,b,c,x[k+12],S32,0xE6DB99E5);
|
||||
c=HH(c,d,a,b,x[k+15],S33,0x1FA27CF8);
|
||||
b=HH(b,c,d,a,x[k+2], S34,0xC4AC5665);
|
||||
a=II(a,b,c,d,x[k+0], S41,0xF4292244);
|
||||
d=II(d,a,b,c,x[k+7], S42,0x432AFF97);
|
||||
c=II(c,d,a,b,x[k+14],S43,0xAB9423A7);
|
||||
b=II(b,c,d,a,x[k+5], S44,0xFC93A039);
|
||||
a=II(a,b,c,d,x[k+12],S41,0x655B59C3);
|
||||
d=II(d,a,b,c,x[k+3], S42,0x8F0CCC92);
|
||||
c=II(c,d,a,b,x[k+10],S43,0xFFEFF47D);
|
||||
b=II(b,c,d,a,x[k+1], S44,0x85845DD1);
|
||||
a=II(a,b,c,d,x[k+8], S41,0x6FA87E4F);
|
||||
d=II(d,a,b,c,x[k+15],S42,0xFE2CE6E0);
|
||||
c=II(c,d,a,b,x[k+6], S43,0xA3014314);
|
||||
b=II(b,c,d,a,x[k+13],S44,0x4E0811A1);
|
||||
a=II(a,b,c,d,x[k+4], S41,0xF7537E82);
|
||||
d=II(d,a,b,c,x[k+11],S42,0xBD3AF235);
|
||||
c=II(c,d,a,b,x[k+2], S43,0x2AD7D2BB);
|
||||
b=II(b,c,d,a,x[k+9], S44,0xEB86D391);
|
||||
a=AddUnsigned(a,AA);
|
||||
b=AddUnsigned(b,BB);
|
||||
c=AddUnsigned(c,CC);
|
||||
d=AddUnsigned(d,DD);
|
||||
}
|
||||
var temp = WordToHex(a)+WordToHex(b)+WordToHex(c)+WordToHex(d);
|
||||
return temp.toLowerCase();
|
||||
};
|
|
@ -1,465 +0,0 @@
|
|||
Antville = {};
|
||||
Antville.prefix = "Antville_";
|
||||
|
||||
Antville.pixel = new Image();
|
||||
Antville.pixel.src = '<% image name="/pixel" as="url" %>';
|
||||
|
||||
Antville.colors = {"aliceblue": true, "antiquewhite": true, "aqua": true, "aquamarine": true, "azure": true, "beige": true, "bisque": true, "black": true, "blanchedalmond": true, "blue": true, "blueviolet": true, "brown": true, "burlywood": true, "cadetblue": true, "chartreuse": true, "chocolate": true, "coral": true, "cornflowerblue": true, "cornsilk": true, "crimson": true, "cyan": true, "darkblue": true, "darkcyan": true, "darkgoldenrod": true, "darkgray": true, "darkgreen": true, "darkkhaki": true, "darkmagenta": true, "darkolivegreen": true, "darkorange": true, "darkorchid": true, "darkred": true, "darksalmon": true, "darkseagreen": true, "darkslateblue": true, "darkslategray": true, "darkturquoise": true, "darkviolet": true, "deeppink": true, "deepskyblue": true, "dimgray": true, "dodgerblue": true, "firebrick": true, "floralwhite": true, "forestgreen": true, "fuchsia": true, "gainsboro": true, "ghostwhite": true, "gold": true, "goldenrod": true, "gray": true, "green": true, "greenyellow": true, "honeydew": true, "hotpink": true, "indianred ": true, "indigo ": true, "ivory": true, "khaki": true, "lavender": true, "lavenderblush": true, "lawngreen": true, "lemonchiffon": true, "lightblue": true, "lightcoral": true, "lightcyan": true, "lightgoldenrodyellow": true, "lightgrey": true, "lightgreen": true, "lightpink": true, "lightsalmon": true, "lightseagreen": true, "lightskyblue": true, "lightslateblue": true, "lightslategray": true, "lightsteelblue": true, "lightyellow": true, "lime": true, "limegreen": true, "linen": true, "magenta": true, "maroon": true, "mediumaquamarine": true, "mediumblue": true, "mediumorchid": true, "mediumpurple": true, "mediumseagreen": true, "mediumslateblue": true, "mediumspringgreen": true, "mediumturquoise": true, "mediumvioletred": true, "midnightblue": true, "mintcream": true, "mistyrose": true, "moccasin": true, "navajowhite": true, "navy": true, "oldlace": true, "olive": true, "olivedrab": true, "orange": true, "orangered": true, "orchid": true, "palegoldenrod": true, "palegreen": true, "paleturquoise": true, "palevioletred": true, "papayawhip": true, "peachpuff": true, "peru": true, "pink": true, "plum": true, "powderblue": true, "purple": true, "red": true, "rosybrown": true, "royalblue": true, "saddlebrown": true, "salmon": true, "sandybrown": true, "seagreen": true, "seashell": true, "sienna": true, "silver": true, "skyblue": true, "slateblue": true, "slategray": true, "snow": true, "springgreen": true, "steelblue": true, "tan": true, "teal": true, "thistle": true, "tomato": true, "turquoise": true, "violet": true, "violetred": true, "wheat": true, "white": true, "whitesmoke": true, "yellow": true, "yellowgreen": true};
|
||||
|
||||
Antville.ColorPickerFactory = function() {
|
||||
this.prefix = Antville.prefix + "ColorPicker_";
|
||||
this.valuePrefix = Antville.prefix + "ColorValue_";
|
||||
|
||||
this.open = function(name, text, skin) {
|
||||
if (skin == "colorpickerExt")
|
||||
var cpWindow = window.open("<% site.href colorpicker %>?name=" + name + "&text=" + text + "&skin=" + skin, Antville.ColorPicker.prefix, "toolbar=no,location=no,directories=no,status=no,scrollbars=no,resizable=yes,width=480,height=360");
|
||||
else
|
||||
var cpWindow = window.open("<% site.href colorpicker %>?name=" + name + "&text=" + text + "&skin=" + skin, Antville.ColorPicker.prefix, "toolbar=no,location=no,directories=no,status=no,scrollbars=no,resizable=yes,width=350,height=320");
|
||||
}
|
||||
|
||||
this.set = function(name, color) {
|
||||
var prefix = Antville.ColorPicker.prefix;
|
||||
var valuePrefix = Antville.ColorPicker.valuePrefix;
|
||||
var color = Antville.parseColor(color);
|
||||
if (color)
|
||||
document.getElementById(prefix + name).style.backgroundColor = color;
|
||||
else
|
||||
color = Antville.parseColor(document.getElementById(prefix + name).style.backgroundColor);
|
||||
if (color.indexOf("#") == 0)
|
||||
color = color.substr(1,color.length-1);
|
||||
document.getElementById(valuePrefix + name).value = color;
|
||||
return;
|
||||
}
|
||||
|
||||
return this;
|
||||
};
|
||||
|
||||
Antville.ColorPicker = new Antville.ColorPickerFactory();
|
||||
|
||||
Antville.encode = function(str) {
|
||||
var chars = ["&", "<", ">", '"'];
|
||||
for (var i in chars) {
|
||||
var c = chars[i];
|
||||
var re = new RegExp(c, "g");
|
||||
str = str.replace(re, "&#" + c.charCodeAt() + ";");
|
||||
}
|
||||
return str;
|
||||
};
|
||||
|
||||
Antville.decode = function(str) {
|
||||
return str.replace(/&/g, "&");
|
||||
};
|
||||
|
||||
Antville.parseColor = function(color) {
|
||||
var c = color.toLowerCase();
|
||||
if (Antville.colors[c])
|
||||
return c;
|
||||
var rgb = new RegExp("rgb ?\\( ?([0-9^,]*), ?([0-9^,]*), ?([0-9^ \\)]*) ?\\)");
|
||||
var result = color.match(rgb);
|
||||
if (result) {
|
||||
var R = parseInt(result[1]).toString(16);
|
||||
var G = parseInt(result[2]).toString(16);
|
||||
var B = parseInt(result[3]).toString(16);
|
||||
if (R.length == 1) R="0"+R;
|
||||
if (G.length == 1) G="0"+G;
|
||||
if (B.length == 1) B="0"+B;
|
||||
return "#"+R+G+B;
|
||||
}
|
||||
if (c.indexOf("#") == 0)
|
||||
c = c.substr(1,c.length-1);
|
||||
if (c.length == 6) {
|
||||
var nonhex = new RegExp("[^0-9,a-f]");
|
||||
nonhex.ignoreCase = true;
|
||||
var found = c.match(nonhex);
|
||||
if (!found)
|
||||
return "#" + c;
|
||||
}
|
||||
return;
|
||||
};
|
||||
|
||||
Antville.Referrer = function(url, text, count) {
|
||||
this.url = url;
|
||||
this.text = text;
|
||||
this.count = count;
|
||||
this.compose = function(key, prefix) {
|
||||
var query = new Antville.Query(this.url);
|
||||
if (query[key]) {
|
||||
if (prefix == null)
|
||||
prefix = "";
|
||||
return prefix + Antville.encode(query[key]);
|
||||
}
|
||||
return this.text;
|
||||
}
|
||||
return this;
|
||||
};
|
||||
|
||||
Antville.Query = function(str) {
|
||||
if (str == undefined)
|
||||
var str = location.search.substring(1);
|
||||
else if (str.indexOf("?") > -1)
|
||||
var str = str.split("?")[1];
|
||||
if (str == "")
|
||||
return this;
|
||||
var parts = Antville.decode(decodeURIComponent(str)).split("&");
|
||||
for (var i in parts) {
|
||||
var pair = parts[i].split("=");
|
||||
var key = pair[0];
|
||||
if (key) {
|
||||
key = key.replace(/\+/g, " ");
|
||||
var value = pair[1];
|
||||
if (value)
|
||||
value = value.replace(/\+/g, " ");
|
||||
this[key] = value;
|
||||
}
|
||||
}
|
||||
return this;
|
||||
};
|
||||
|
||||
Antville.Filter = function(def, key) {
|
||||
this.key = key;
|
||||
if (def == null)
|
||||
this.items = [];
|
||||
else if (def instanceof Array)
|
||||
this.items = def;
|
||||
else
|
||||
this.items = def.replace(/\r/g, "\n").split("\n");
|
||||
this.test = function(str) {
|
||||
if (!str)
|
||||
return false;
|
||||
str = str.replace(/&/g, "&");
|
||||
for (var n in this.items) {
|
||||
var re = new RegExp(this.items[n], "i");
|
||||
if (re.test(str))
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
return this;
|
||||
};
|
||||
|
||||
/**
|
||||
*
|
||||
* Secure Hash Algorithm (SHA256)
|
||||
* http://www.webtoolkit.info/
|
||||
*
|
||||
* Original code by Angel Marin, Paul Johnston.
|
||||
*
|
||||
*/
|
||||
Antville.sha256 = function(s) {
|
||||
var chrsz = 8;
|
||||
var hexcase = 0;
|
||||
|
||||
function safe_add (x, y) {
|
||||
var lsw = (x & 0xFFFF) + (y & 0xFFFF);
|
||||
var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
|
||||
return (msw << 16) | (lsw & 0xFFFF);
|
||||
}
|
||||
|
||||
function S (X, n) { return ( X >>> n ) | (X << (32 - n)); }
|
||||
function R (X, n) { return ( X >>> n ); }
|
||||
function Ch(x, y, z) { return ((x & y) ^ ((~x) & z)); }
|
||||
function Maj(x, y, z) { return ((x & y) ^ (x & z) ^ (y & z)); }
|
||||
function Sigma0256(x) { return (S(x, 2) ^ S(x, 13) ^ S(x, 22)); }
|
||||
function Sigma1256(x) { return (S(x, 6) ^ S(x, 11) ^ S(x, 25)); }
|
||||
function Gamma0256(x) { return (S(x, 7) ^ S(x, 18) ^ R(x, 3)); }
|
||||
function Gamma1256(x) { return (S(x, 17) ^ S(x, 19) ^ R(x, 10)); }
|
||||
|
||||
function core_sha256 (m, l) {
|
||||
var K = new Array(0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5, 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5, 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3, 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174, 0xE49B69C1, 0xEFBE4786, 0xFC19DC6, 0x240CA1CC, 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA, 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7, 0xC6E00BF3, 0xD5A79147, 0x6CA6351, 0x14292967, 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13, 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85, 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3, 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070, 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5, 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3, 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208, 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2);
|
||||
var HASH = new Array(0x6A09E667, 0xBB67AE85, 0x3C6EF372, 0xA54FF53A, 0x510E527F, 0x9B05688C, 0x1F83D9AB, 0x5BE0CD19);
|
||||
var W = new Array(64);
|
||||
var a, b, c, d, e, f, g, h, i, j;
|
||||
var T1, T2;
|
||||
|
||||
m[l >> 5] |= 0x80 << (24 - l % 32);
|
||||
m[((l + 64 >> 9) << 4) + 15] = l;
|
||||
|
||||
for ( var i = 0; i<m.length; i+=16 ) {
|
||||
a = HASH[0];
|
||||
b = HASH[1];
|
||||
c = HASH[2];
|
||||
d = HASH[3];
|
||||
e = HASH[4];
|
||||
f = HASH[5];
|
||||
g = HASH[6];
|
||||
h = HASH[7];
|
||||
|
||||
for ( var j = 0; j<44; j++) {
|
||||
if (j < 16) W[j] = m[j + i];
|
||||
else W[j] = safe_add(safe_add(safe_add(Gamma1256(W[j - 2]), W[j - 7]), Gamma0256(W[j - 15])), W[j - 16]);
|
||||
|
||||
T1 = safe_add(safe_add(safe_add(safe_add(h, Sigma1256(e)), Ch(e, f, g)), K[j]), W[j]);
|
||||
T2 = safe_add(Sigma0256(a), Maj(a, b, c));
|
||||
|
||||
h = g;
|
||||
g = f;
|
||||
f = e;
|
||||
e = safe_add(d, T1);
|
||||
d = c;
|
||||
c = b;
|
||||
b = a;
|
||||
a = safe_add(T1, T2);
|
||||
}
|
||||
|
||||
HASH[0] = safe_add(a, HASH[0]);
|
||||
HASH[1] = safe_add(b, HASH[1]);
|
||||
HASH[2] = safe_add(c, HASH[2]);
|
||||
HASH[3] = safe_add(d, HASH[3]);
|
||||
HASH[4] = safe_add(e, HASH[4]);
|
||||
HASH[5] = safe_add(f, HASH[5]);
|
||||
HASH[6] = safe_add(g, HASH[6]);
|
||||
HASH[7] = safe_add(h, HASH[7]);
|
||||
}
|
||||
return HASH;
|
||||
}
|
||||
|
||||
function str2binb (str) {
|
||||
var bin = Array();
|
||||
var mask = (1 << chrsz) - 1;
|
||||
for(var i = 0; i < str.length * chrsz; i += chrsz) {
|
||||
bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (24 - i%32);
|
||||
}
|
||||
return bin;
|
||||
}
|
||||
|
||||
function Utf8Encode(string) {
|
||||
string = string.replace(/\r\n/g,"\n");
|
||||
var utftext = "";
|
||||
|
||||
for (var n = 0; n < string.length; n++) {
|
||||
|
||||
var c = string.charCodeAt(n);
|
||||
|
||||
if (c < 128) {
|
||||
utftext += String.fromCharCode(c);
|
||||
}
|
||||
else if((c > 127) && (c < 2048)) {
|
||||
utftext += String.fromCharCode((c >> 6) | 192);
|
||||
utftext += String.fromCharCode((c & 63) | 128);
|
||||
}
|
||||
else {
|
||||
utftext += String.fromCharCode((c >> 12) | 224);
|
||||
utftext += String.fromCharCode(((c >> 6) & 63) | 128);
|
||||
utftext += String.fromCharCode((c & 63) | 128);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return utftext;
|
||||
}
|
||||
|
||||
function binb2hex (binarray) {
|
||||
var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
|
||||
var str = "";
|
||||
for(var i = 0; i < binarray.length * 4; i++) {
|
||||
str += hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8+4)) & 0xF) +
|
||||
hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8 )) & 0xF);
|
||||
}
|
||||
return str;
|
||||
}
|
||||
|
||||
s = Utf8Encode(s);
|
||||
return binb2hex(core_sha256(str2binb(s), s.length * chrsz));
|
||||
};
|
||||
|
||||
/**
|
||||
* MD5 (Message-Digest Algorithm)
|
||||
* http://www.webtoolkit.info/
|
||||
*/
|
||||
jQuery.md5 = function (string) {
|
||||
function RotateLeft(lValue, iShiftBits) {
|
||||
return (lValue<<iShiftBits) | (lValue>>>(32-iShiftBits));
|
||||
}
|
||||
|
||||
function AddUnsigned(lX,lY) {
|
||||
var lX4,lY4,lX8,lY8,lResult;
|
||||
lX8 = (lX & 0x80000000);
|
||||
lY8 = (lY & 0x80000000);
|
||||
lX4 = (lX & 0x40000000);
|
||||
lY4 = (lY & 0x40000000);
|
||||
lResult = (lX & 0x3FFFFFFF)+(lY & 0x3FFFFFFF);
|
||||
if (lX4 & lY4) {
|
||||
return (lResult ^ 0x80000000 ^ lX8 ^ lY8);
|
||||
}
|
||||
if (lX4 | lY4) {
|
||||
if (lResult & 0x40000000) {
|
||||
return (lResult ^ 0xC0000000 ^ lX8 ^ lY8);
|
||||
} else {
|
||||
return (lResult ^ 0x40000000 ^ lX8 ^ lY8);
|
||||
}
|
||||
} else {
|
||||
return (lResult ^ lX8 ^ lY8);
|
||||
}
|
||||
}
|
||||
|
||||
function F(x,y,z) { return (x & y) | ((~x) & z); }
|
||||
function G(x,y,z) { return (x & z) | (y & (~z)); }
|
||||
function H(x,y,z) { return (x ^ y ^ z); }
|
||||
function I(x,y,z) { return (y ^ (x | (~z))); }
|
||||
|
||||
function FF(a,b,c,d,x,s,ac) {
|
||||
a = AddUnsigned(a, AddUnsigned(AddUnsigned(F(b, c, d), x), ac));
|
||||
return AddUnsigned(RotateLeft(a, s), b);
|
||||
};
|
||||
|
||||
function GG(a,b,c,d,x,s,ac) {
|
||||
a = AddUnsigned(a, AddUnsigned(AddUnsigned(G(b, c, d), x), ac));
|
||||
return AddUnsigned(RotateLeft(a, s), b);
|
||||
};
|
||||
|
||||
function HH(a,b,c,d,x,s,ac) {
|
||||
a = AddUnsigned(a, AddUnsigned(AddUnsigned(H(b, c, d), x), ac));
|
||||
return AddUnsigned(RotateLeft(a, s), b);
|
||||
};
|
||||
|
||||
function II(a,b,c,d,x,s,ac) {
|
||||
a = AddUnsigned(a, AddUnsigned(AddUnsigned(I(b, c, d), x), ac));
|
||||
return AddUnsigned(RotateLeft(a, s), b);
|
||||
};
|
||||
|
||||
function ConvertToWordArray(string) {
|
||||
var lWordCount;
|
||||
var lMessageLength = string.length;
|
||||
var lNumberOfWords_temp1=lMessageLength + 8;
|
||||
var lNumberOfWords_temp2=(lNumberOfWords_temp1-(lNumberOfWords_temp1 % 64))/64;
|
||||
var lNumberOfWords = (lNumberOfWords_temp2+1)*16;
|
||||
var lWordArray=Array(lNumberOfWords-1);
|
||||
var lBytePosition = 0;
|
||||
var lByteCount = 0;
|
||||
while ( lByteCount < lMessageLength ) {
|
||||
lWordCount = (lByteCount-(lByteCount % 4))/4;
|
||||
lBytePosition = (lByteCount % 4)*8;
|
||||
lWordArray[lWordCount] = (lWordArray[lWordCount] | (string.charCodeAt(lByteCount)<<lBytePosition));
|
||||
lByteCount++;
|
||||
}
|
||||
lWordCount = (lByteCount-(lByteCount % 4))/4;
|
||||
lBytePosition = (lByteCount % 4)*8;
|
||||
lWordArray[lWordCount] = lWordArray[lWordCount] | (0x80<<lBytePosition);
|
||||
lWordArray[lNumberOfWords-2] = lMessageLength<<3;
|
||||
lWordArray[lNumberOfWords-1] = lMessageLength>>>29;
|
||||
return lWordArray;
|
||||
};
|
||||
|
||||
function WordToHex(lValue) {
|
||||
var WordToHexValue="",WordToHexValue_temp="",lByte,lCount;
|
||||
for (lCount = 0;lCount<=3;lCount++) {
|
||||
lByte = (lValue>>>(lCount*8)) & 255;
|
||||
WordToHexValue_temp = "0" + lByte.toString(16);
|
||||
WordToHexValue = WordToHexValue + WordToHexValue_temp.substr(WordToHexValue_temp.length-2,2);
|
||||
}
|
||||
return WordToHexValue;
|
||||
};
|
||||
|
||||
function Utf8Encode(string) {
|
||||
string = string.replace(/\r\n/g,"\n");
|
||||
var utftext = "";
|
||||
|
||||
for (var n = 0; n < string.length; n++) {
|
||||
|
||||
var c = string.charCodeAt(n);
|
||||
|
||||
if (c < 128) {
|
||||
utftext += String.fromCharCode(c);
|
||||
}
|
||||
else if((c > 127) && (c < 2048)) {
|
||||
utftext += String.fromCharCode((c >> 6) | 192);
|
||||
utftext += String.fromCharCode((c & 63) | 128);
|
||||
}
|
||||
else {
|
||||
utftext += String.fromCharCode((c >> 12) | 224);
|
||||
utftext += String.fromCharCode(((c >> 6) & 63) | 128);
|
||||
utftext += String.fromCharCode((c & 63) | 128);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return utftext;
|
||||
};
|
||||
|
||||
var x=Array();
|
||||
var k,AA,BB,CC,DD,a,b,c,d;
|
||||
var S11=7, S12=12, S13=17, S14=22;
|
||||
var S21=5, S22=9 , S23=14, S24=20;
|
||||
var S31=4, S32=11, S33=16, S34=23;
|
||||
var S41=6, S42=10, S43=15, S44=21;
|
||||
|
||||
string = Utf8Encode(string);
|
||||
|
||||
x = ConvertToWordArray(string);
|
||||
|
||||
a = 0x67452301; b = 0xEFCDAB89; c = 0x98BADCFE; d = 0x10325476;
|
||||
|
||||
for (k=0;k<x.length;k+=16) {
|
||||
AA=a; BB=b; CC=c; DD=d;
|
||||
a=FF(a,b,c,d,x[k+0], S11,0xD76AA478);
|
||||
d=FF(d,a,b,c,x[k+1], S12,0xE8C7B756);
|
||||
c=FF(c,d,a,b,x[k+2], S13,0x242070DB);
|
||||
b=FF(b,c,d,a,x[k+3], S14,0xC1BDCEEE);
|
||||
a=FF(a,b,c,d,x[k+4], S11,0xF57C0FAF);
|
||||
d=FF(d,a,b,c,x[k+5], S12,0x4787C62A);
|
||||
c=FF(c,d,a,b,x[k+6], S13,0xA8304613);
|
||||
b=FF(b,c,d,a,x[k+7], S14,0xFD469501);
|
||||
a=FF(a,b,c,d,x[k+8], S11,0x698098D8);
|
||||
d=FF(d,a,b,c,x[k+9], S12,0x8B44F7AF);
|
||||
c=FF(c,d,a,b,x[k+10],S13,0xFFFF5BB1);
|
||||
b=FF(b,c,d,a,x[k+11],S14,0x895CD7BE);
|
||||
a=FF(a,b,c,d,x[k+12],S11,0x6B901122);
|
||||
d=FF(d,a,b,c,x[k+13],S12,0xFD987193);
|
||||
c=FF(c,d,a,b,x[k+14],S13,0xA679438E);
|
||||
b=FF(b,c,d,a,x[k+15],S14,0x49B40821);
|
||||
a=GG(a,b,c,d,x[k+1], S21,0xF61E2562);
|
||||
d=GG(d,a,b,c,x[k+6], S22,0xC040B340);
|
||||
c=GG(c,d,a,b,x[k+11],S23,0x265E5A51);
|
||||
b=GG(b,c,d,a,x[k+0], S24,0xE9B6C7AA);
|
||||
a=GG(a,b,c,d,x[k+5], S21,0xD62F105D);
|
||||
d=GG(d,a,b,c,x[k+10],S22,0x2441453);
|
||||
c=GG(c,d,a,b,x[k+15],S23,0xD8A1E681);
|
||||
b=GG(b,c,d,a,x[k+4], S24,0xE7D3FBC8);
|
||||
a=GG(a,b,c,d,x[k+9], S21,0x21E1CDE6);
|
||||
d=GG(d,a,b,c,x[k+14],S22,0xC33707D6);
|
||||
c=GG(c,d,a,b,x[k+3], S23,0xF4D50D87);
|
||||
b=GG(b,c,d,a,x[k+8], S24,0x455A14ED);
|
||||
a=GG(a,b,c,d,x[k+13],S21,0xA9E3E905);
|
||||
d=GG(d,a,b,c,x[k+2], S22,0xFCEFA3F8);
|
||||
c=GG(c,d,a,b,x[k+7], S23,0x676F02D9);
|
||||
b=GG(b,c,d,a,x[k+12],S24,0x8D2A4C8A);
|
||||
a=HH(a,b,c,d,x[k+5], S31,0xFFFA3942);
|
||||
d=HH(d,a,b,c,x[k+8], S32,0x8771F681);
|
||||
c=HH(c,d,a,b,x[k+11],S33,0x6D9D6122);
|
||||
b=HH(b,c,d,a,x[k+14],S34,0xFDE5380C);
|
||||
a=HH(a,b,c,d,x[k+1], S31,0xA4BEEA44);
|
||||
d=HH(d,a,b,c,x[k+4], S32,0x4BDECFA9);
|
||||
c=HH(c,d,a,b,x[k+7], S33,0xF6BB4B60);
|
||||
b=HH(b,c,d,a,x[k+10],S34,0xBEBFBC70);
|
||||
a=HH(a,b,c,d,x[k+13],S31,0x289B7EC6);
|
||||
d=HH(d,a,b,c,x[k+0], S32,0xEAA127FA);
|
||||
c=HH(c,d,a,b,x[k+3], S33,0xD4EF3085);
|
||||
b=HH(b,c,d,a,x[k+6], S34,0x4881D05);
|
||||
a=HH(a,b,c,d,x[k+9], S31,0xD9D4D039);
|
||||
d=HH(d,a,b,c,x[k+12],S32,0xE6DB99E5);
|
||||
c=HH(c,d,a,b,x[k+15],S33,0x1FA27CF8);
|
||||
b=HH(b,c,d,a,x[k+2], S34,0xC4AC5665);
|
||||
a=II(a,b,c,d,x[k+0], S41,0xF4292244);
|
||||
d=II(d,a,b,c,x[k+7], S42,0x432AFF97);
|
||||
c=II(c,d,a,b,x[k+14],S43,0xAB9423A7);
|
||||
b=II(b,c,d,a,x[k+5], S44,0xFC93A039);
|
||||
a=II(a,b,c,d,x[k+12],S41,0x655B59C3);
|
||||
d=II(d,a,b,c,x[k+3], S42,0x8F0CCC92);
|
||||
c=II(c,d,a,b,x[k+10],S43,0xFFEFF47D);
|
||||
b=II(b,c,d,a,x[k+1], S44,0x85845DD1);
|
||||
a=II(a,b,c,d,x[k+8], S41,0x6FA87E4F);
|
||||
d=II(d,a,b,c,x[k+15],S42,0xFE2CE6E0);
|
||||
c=II(c,d,a,b,x[k+6], S43,0xA3014314);
|
||||
b=II(b,c,d,a,x[k+13],S44,0x4E0811A1);
|
||||
a=II(a,b,c,d,x[k+4], S41,0xF7537E82);
|
||||
d=II(d,a,b,c,x[k+11],S42,0xBD3AF235);
|
||||
c=II(c,d,a,b,x[k+2], S43,0x2AD7D2BB);
|
||||
b=II(b,c,d,a,x[k+9], S44,0xEB86D391);
|
||||
a=AddUnsigned(a,AA);
|
||||
b=AddUnsigned(b,BB);
|
||||
c=AddUnsigned(c,CC);
|
||||
d=AddUnsigned(d,DD);
|
||||
}
|
||||
var temp = WordToHex(a)+WordToHex(b)+WordToHex(c)+WordToHex(d);
|
||||
return temp.toLowerCase();
|
||||
};
|
|
@ -22,11 +22,11 @@
|
|||
// $URL$
|
||||
//
|
||||
|
||||
defineConstants(Site, "getStatus", "blocked", "regular", "trusted");
|
||||
defineConstants(Site, "getModes", "closed", "restricted", "public", "open");
|
||||
defineConstants(Site, "getPageModes", "days", "stories");
|
||||
defineConstants(Site, "getCommentsModes", "disabled", "enabled");
|
||||
defineConstants(Site, "getArchiveModes", "closed", "public");
|
||||
Site.getStatus = defineConstants(Site, "blocked", "regular", "trusted");
|
||||
Site.getModes = defineConstants(Site, "closed", "restricted", "public", "open");
|
||||
Site.getPageModes = defineConstants(Site, "days", "stories");
|
||||
Site.getCommentsModes = defineConstants(Site, "disabled", "enabled");
|
||||
Site.getArchiveModes = defineConstants(Site, "closed", "public");
|
||||
|
||||
this.handleMetadata("archiveMode");
|
||||
this.handleMetadata("commentsMode");
|
||||
|
@ -88,7 +88,7 @@ Site.prototype.getPermission = function(action) {
|
|||
case "rss.xml":
|
||||
case "tags":
|
||||
return this.status !== Site.BLOCKED &&
|
||||
User.require(User.REGULAR) &&
|
||||
!User.require(User.BLOCKED) &&
|
||||
Site.require(Site.PUBLIC) ||
|
||||
Site.require(Site.RESTRICTED) &&
|
||||
Membership.require(Membership.SUBSCRIBER) ||
|
||||
|
@ -98,12 +98,12 @@ Site.prototype.getPermission = function(action) {
|
|||
case "edit":
|
||||
case "referrers":
|
||||
return this.status !== Site.BLOCKED &&
|
||||
User.require(User.REGULAR) &&
|
||||
!User.require(User.BLOCKED) &&
|
||||
Membership.require(Membership.OWNER) ||
|
||||
User.require(User.PRIVILEGED);
|
||||
case "subscribe":
|
||||
return this.status !== Site.BLOCKED &&
|
||||
User.require(User.REGULAR) &&
|
||||
!User.require(User.BLOCKED) &&
|
||||
Site.require(Site.PUBLIC) &&
|
||||
!Membership.require(Membership.SUBSCRIBER);
|
||||
case "unsubscribe":
|
||||
|
@ -201,10 +201,10 @@ Site.prototype.update = function(data) {
|
|||
mode: data.mode || Site.PRIVATE,
|
||||
webHookUrl: data.webHookUrl,
|
||||
webHookEnabled: data.webHookEnabled ? true : false,
|
||||
pageMode: data.pageMode || 'days',
|
||||
pageMode: data.pageMode || Site.DAYS,
|
||||
pageSize: parseInt(data.pageSize, 10) || 3,
|
||||
commentsMode: data.commentsMode,
|
||||
archiveMode: data.archiveMode,
|
||||
commentsMode: data.commentsMode || Site.DISABLED,
|
||||
archiveMode: data.archiveMode || Site.CLOSED,
|
||||
timeZone: data.timeZone,
|
||||
longDateFormat: data.longDateFormat,
|
||||
shortDateFormat: data.shortDateFormat,
|
||||
|
@ -228,8 +228,8 @@ Site.remove = function(site) {
|
|||
};
|
||||
|
||||
Site.prototype.main_css_action = function() {
|
||||
res.dependsOn(this.modifytime);
|
||||
res.dependsOn(res.handlers.layout.modifytime);
|
||||
res.dependsOn(this.modified);
|
||||
res.dependsOn(res.handlers.layout.modified);
|
||||
res.dependsOn(res.handlers.layout.skins.getSkinSource("Site", "style"));
|
||||
res.digest();
|
||||
res.contentType = "text/css";
|
||||
|
@ -238,13 +238,13 @@ Site.prototype.main_css_action = function() {
|
|||
};
|
||||
|
||||
Site.prototype.main_js_action = function() {
|
||||
res.dependsOn(this.modifytime);
|
||||
res.dependsOn(res.handlers.layout.modifytime);
|
||||
res.dependsOn(this.modified);
|
||||
res.dependsOn(res.handlers.layout.modified);
|
||||
res.dependsOn(res.handlers.layout.skins.getSkinSource("Site", "javascript"));
|
||||
res.digest();
|
||||
res.contentType = "text/javascript";
|
||||
this.renderSkin("javascript");
|
||||
root.renderSkin("systemscripts");
|
||||
root.renderSkin("javascript");
|
||||
return;
|
||||
};
|
||||
|
||||
|
@ -523,7 +523,7 @@ Site.prototype.getMacroHandler = function(name) {
|
|||
Site.prototype.list_macro = function(param, type) {
|
||||
switch (type) {
|
||||
case "stories":
|
||||
if (this.stories["public"].size() < 1) {
|
||||
if (this.stories.featured.size() < 1) {
|
||||
this.renderSkin("Site#welcome");
|
||||
if (session.user) {
|
||||
if (session.user === this.creator) {
|
||||
|
@ -567,39 +567,6 @@ Site.prototype.age_macro = function(param) {
|
|||
return;
|
||||
};
|
||||
|
||||
Site.prototype.history_macro = function(param, type) {
|
||||
param.limit = Math.min(param.limit || 10, 20);
|
||||
type || (type = param.show);
|
||||
var stories = this.stories.recent;
|
||||
var size = stories.size();
|
||||
var counter = i = 0;
|
||||
var item;
|
||||
while (counter < param.limit && i < size) {
|
||||
if (i % param.limit === 0) {
|
||||
stories.prefetchChildren(i, param.limit);
|
||||
}
|
||||
item = stories.get(i);
|
||||
i += 1;
|
||||
switch (item.constructor) {
|
||||
case Story:
|
||||
if (type === "comments") {
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
case Comment:
|
||||
if (type === "stories" || item.story.mode === Story.PRIVATE ||
|
||||
item.story.commentsMode === Story.CLOSED ||
|
||||
this.commentsMode === Site.CLOSED) {
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
}
|
||||
item.renderSkin("Story#history");
|
||||
counter += 1;
|
||||
}
|
||||
return;
|
||||
};
|
||||
|
||||
Site.prototype.referrers_macro = function() {
|
||||
var date = new Date;
|
||||
date.setDate(date.getDate() - 1);
|
||||
|
@ -810,70 +777,6 @@ Site.prototype.searchCreatetime_macro = function() {
|
|||
return;
|
||||
};
|
||||
|
||||
/** FIXME: to be removed!
|
||||
* function saves new properties of site
|
||||
* @param Obj Object containing the form values
|
||||
* @param Obj User-Object modifying this site
|
||||
* @throws Exception
|
||||
*/
|
||||
Site.prototype.evalPreferences = function(data, user) {
|
||||
res.debug(data);
|
||||
//res.abort();
|
||||
|
||||
return;
|
||||
|
||||
|
||||
this.title = stripTags(param.title);
|
||||
this.email = param.email;
|
||||
if (this.online && !param.online)
|
||||
this.lastoffline = new Date();
|
||||
this.online = param.online ? 1 : 0;
|
||||
this.enableping = param.enableping ? 1 : 0;
|
||||
|
||||
// store new preferences
|
||||
var prefs = new HopObject();
|
||||
for (var i in param) {
|
||||
if (i.startsWith("properties_"))
|
||||
prefs[i.substring(12)] = param[i];
|
||||
}
|
||||
prefs.days = !isNaN(parseInt(param.properties_days, 10)) ? parseInt(param.properties_days, 10) : 3;
|
||||
prefs.discussions = param.properties_discussions ? 1 : 0;
|
||||
prefs.usercontrib = param.properties_usercontrib ? 1 : 0;
|
||||
prefs.archive = param.properties_archive ? 1 : 0;
|
||||
// store selected locale
|
||||
if (param.locale) {
|
||||
var loc = param.locale.split("_");
|
||||
prefs.language = loc[0];
|
||||
prefs.country = loc.length == 2 ? loc[1] : null;
|
||||
}
|
||||
prefs.timezone = param.timezone;
|
||||
prefs.longdateformat = param.longdateformat;
|
||||
prefs.shortdateformat = param.shortdateformat;
|
||||
|
||||
// layout
|
||||
this.layout = param.layout ? this.layouts.get(param.layout) : null;
|
||||
|
||||
// e-mail notification
|
||||
prefs.notify_create = parseInt(param.notify_create, 10) || null;
|
||||
prefs.notify_update = parseInt(param.notify_update, 10) || null;
|
||||
prefs.notify_upload = parseInt(param.notify_upload, 10) || null;
|
||||
|
||||
// store preferences
|
||||
this.properties.setAll(prefs);
|
||||
// call the evalPreferences method of every module
|
||||
for (var i in app.modules)
|
||||
this.applyModuleMethod(app.modules[i], "evalPreferences", param);
|
||||
|
||||
|
||||
// reset cached locale, timezone and dateSymbols
|
||||
this.cache.locale = null;
|
||||
this.cache.timezone = null;
|
||||
this.cache.dateSymbols = null;
|
||||
|
||||
this.modifytime = new Date();
|
||||
this.modifier = modifier;
|
||||
};
|
||||
|
||||
Site.prototype.getLayouts = function() {
|
||||
var result = [];
|
||||
this.layouts.forEach(function() {
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
<% #main %>
|
||||
<% list tobi/comments %>
|
||||
<% site.list stories %>
|
||||
|
||||
<% #preview %>
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
<meta http-equiv="Content-Type" content="text/html" />
|
||||
<meta name="MSSmartTagsPreventParsing" content="TRUE" />
|
||||
<script type="text/javascript"
|
||||
src="<% file /jquery-1.1.3.1.pack.js url %>"></script>
|
||||
src="<% file /jquery-1.2.1.min.js url %>"></script>
|
||||
<script type="text/javascript" src="<% site.href main.js %>"></script>
|
||||
<link rel="stylesheet" type="text/css"
|
||||
title="CSS Stylesheet" href="<% site.href main.css %>" />
|
||||
|
@ -67,8 +67,8 @@
|
|||
<div class="boxheader">calendar</div>
|
||||
<div class="box"><% site.calendar %></div>
|
||||
|
||||
<div class="boxheader">recent comments</div>
|
||||
<div class="box"><% site.history comments %></div>
|
||||
<div class="boxheader">recent postings</div>
|
||||
<div class="box"><% list postings skin=Story#history %></div>
|
||||
|
||||
<div class="boxline"></div><br />
|
||||
<div class="box"><% image /rss.png | site.link rss.xml %><br />
|
||||
|
|
|
@ -313,3 +313,61 @@ ul.skinmgrTree li div {
|
|||
margin-left:20px;
|
||||
margin-bottom:5px;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* Admin styles */
|
||||
|
||||
.pageTitle {
|
||||
font-family:<% layout.value titlefont %>;
|
||||
font-size:<% layout.value titlesize %>;
|
||||
font-weight:bold;
|
||||
color:<% layout.value titlecolor %>;
|
||||
padding-bottom:10pt;
|
||||
}
|
||||
|
||||
.label {
|
||||
font-family: <% layout.value smallfont %>;
|
||||
font-size: 7pt;
|
||||
padding: 2px;
|
||||
color: #ffffff;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
.regular {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.blocked {
|
||||
background-color: #000000;
|
||||
}
|
||||
|
||||
.trusted, .User {
|
||||
background-color: #0000cc;
|
||||
}
|
||||
|
||||
.closed {
|
||||
background-color: #cc0000;
|
||||
}
|
||||
|
||||
.public, .Site {
|
||||
background-color: #006600;
|
||||
}
|
||||
|
||||
.Root, .privileged {
|
||||
background-color: #ffcc00;
|
||||
}
|
||||
|
||||
.flagLight {
|
||||
font-family:<% layout.value smallfont %>;
|
||||
font-size:7pt;
|
||||
padding:2px;
|
||||
color:#333333;
|
||||
}
|
||||
|
||||
.sysmgrListitem {
|
||||
margin-top:15px;
|
||||
border-top:1px solid #dddddd;
|
||||
}
|
||||
|
|
|
@ -16,9 +16,9 @@
|
|||
## See the License for the specific language governing permissions and
|
||||
## limitations under the License.
|
||||
##
|
||||
## $Revision$
|
||||
## $LastChangedBy$
|
||||
## $LastChangedDate$
|
||||
## $Revision:3355 $
|
||||
## $LastChangedBy:piefke3000 $
|
||||
## $LastChangedDate:2007-10-11 15:38:29 +0200 (Thu, 11 Oct 2007) $
|
||||
## $URL$
|
||||
##
|
||||
|
||||
|
@ -36,11 +36,11 @@ top.filter = prototype = 'Story' and status <> "closed" and requests > 0
|
|||
top.order = requests desc
|
||||
top.maxSize = 25
|
||||
|
||||
public = collection(Story)
|
||||
public.local = id
|
||||
public.foreign = site_id
|
||||
public.filter = prototype = 'Story' and status <> "closed" and mode <> "hidden"
|
||||
public.order = modified desc
|
||||
featured = collection(Story)
|
||||
featured.local = id
|
||||
featured.foreign = site_id
|
||||
featured.filter = prototype = 'Story' and status <> "closed" and mode <> "hidden"
|
||||
featured.order = modified desc
|
||||
|
||||
closed = collection(Story)
|
||||
closed.local = id
|
||||
|
@ -48,18 +48,19 @@ closed.foreign site_id
|
|||
closed.filter = prototype = 'Story' and status = 'closed'
|
||||
closed.order = created desc
|
||||
|
||||
all = collection(Story)
|
||||
all.local = id
|
||||
all.foreign = site_id
|
||||
all.filter = status <> "closed"
|
||||
all.order = modified desc
|
||||
|
||||
recent = collection(Story)
|
||||
recent.local = id
|
||||
recent.foreign = site_id
|
||||
recent.filter = status <> "closed"
|
||||
recent.order = modified desc
|
||||
recent.maxsize = 100
|
||||
recent.maxSize = 100
|
||||
|
||||
comments = collection(Comment)
|
||||
comments.local = id
|
||||
comments.foreign = site_id
|
||||
comments.filter = prototype = 'Comment' and status <> 'closed' and status <> 'pending'
|
||||
comments.order = modified desc
|
||||
comments.maxSize = 100
|
||||
|
||||
tags = collection(Tag)
|
||||
tags.accessname = name
|
||||
|
|
|
@ -22,10 +22,11 @@
|
|||
// $URL$
|
||||
//
|
||||
|
||||
defineConstants(Story, "getStatus", "closed", "public", "shared", "open");
|
||||
defineConstants(Story, "getModes", "hidden", "featured");
|
||||
defineConstants(Story, "getCommentsModes", "closed",
|
||||
Story.getStatus = defineConstants(Story, "closed", "public", "shared", "open");
|
||||
Story.getModes = defineConstants(Story, "hidden", "featured");
|
||||
Story.getCommentsModes = defineConstants(Story, "closed",
|
||||
"readonly", "moderated", "open");
|
||||
|
||||
this.handleMetadata("title");
|
||||
this.handleMetadata("text");
|
||||
|
||||
|
@ -182,9 +183,7 @@ Story.prototype.update = function(data) {
|
|||
this.setContent(data);
|
||||
//this.setTags(data.tags || data.tag_array)
|
||||
this.commentsMode = data.commentsMode;
|
||||
if (this.creator === session.user) {
|
||||
this.mode = data.mode;
|
||||
}
|
||||
if (this.status === Story.PRIVATE && data.status !== Story.PRIVATE) {
|
||||
if (delta > 50) {
|
||||
site.lastUpdate = new Date;
|
||||
|
@ -238,7 +237,7 @@ Story.prototype.rotate_action = function() {
|
|||
this.mode = Story.FEATURED;
|
||||
this.status = Story.CLOSED;
|
||||
}
|
||||
return res.redirect(this._parent.href());
|
||||
return res.redirect(req.data.http_referer || this._parent.href());
|
||||
};
|
||||
|
||||
Story.prototype.comment_action = function() {
|
||||
|
@ -301,7 +300,7 @@ Story.prototype.summary_macro = function(param) {
|
|||
|
||||
Story.prototype.comments_macro = function(param, mode) {
|
||||
var story = this.story || this;
|
||||
if (story.site.commentsMode === Site.CLOSED ||
|
||||
if (story.site.commentsMode === Site.DISABLED ||
|
||||
story.commentsMode === Site.CLOSED) {
|
||||
return;
|
||||
} else if (mode) {
|
||||
|
|
|
@ -33,6 +33,31 @@
|
|||
</p>
|
||||
<br />
|
||||
|
||||
<% #embed %>
|
||||
<% story.title prefix='<div class="storyTitle">'suffix="</div>" %>
|
||||
<% story.text | clip %>
|
||||
<span class="small">
|
||||
<% story.link . "[read more]" %>
|
||||
<% story.link edit prefix=" ... " %>
|
||||
</span><br />
|
||||
|
||||
<% #history %>
|
||||
<div class="historyItem">
|
||||
<% story.summary %>
|
||||
<div class="small">
|
||||
by <% story.creator %> (<% story.modified short %>)
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<% #top %>
|
||||
<tr>
|
||||
<td align="right" valign="baseline" class="small"><% param.position %></td>
|
||||
<td align="right" valign="baseline"><% story.requests %></td>
|
||||
<td valign="baseline"><% story.created "yyyy-MM-dd" %></td>
|
||||
<td valign="baseline"><% story.title | story.link %></td>
|
||||
<td valign="baseline"><% story.creator %></td>
|
||||
</tr>
|
||||
|
||||
<% #comment %>
|
||||
<% story.skin Story#day %>
|
||||
<% story.skin Story#content %>
|
||||
|
@ -51,7 +76,7 @@ else <% if <% story.mode %> is hidden then
|
|||
<td rowspan="2" width="5" nowrap="nowrap"></td>' %>
|
||||
%>
|
||||
<td colspan="3" class="small">
|
||||
<strong>Macro:</strong> <% story <% story.id %> %><br />
|
||||
<strong>Macro:</strong> <% story.macro %><br />
|
||||
<div class="ample"><strong>Status: </strong><% story.status %><!--
|
||||
--><% story.tags link prefix=" in " %>,
|
||||
<% story.comments link %></div>
|
||||
|
@ -138,23 +163,6 @@ for (var i in referrers) {
|
|||
</noscript>
|
||||
</table>
|
||||
|
||||
<% #history %>
|
||||
<div class="historyItem">
|
||||
<% story.summary %>
|
||||
<div class="small">
|
||||
by <% story.creator %> (<% story.modified short %>)
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<% #top %>
|
||||
<tr>
|
||||
<td align="right" valign="baseline" class="small"><% param.position %></td>
|
||||
<td align="right" valign="baseline"><% story.requests %></td>
|
||||
<td valign="baseline"><% story.created "yyyy-MM-dd" %></td>
|
||||
<td valign="baseline"><% story.title | story.link %></td>
|
||||
<td valign="baseline"><% story.creator %></td>
|
||||
</tr>
|
||||
|
||||
<% #edit %>
|
||||
<form method="post" action="<% response.action %>">
|
||||
<p>
|
||||
|
|
|
@ -1,2 +0,0 @@
|
|||
<span class="storyTitle"><% story.content part="title" suffix="<br />" %></span>
|
||||
<% story.content part="text" limit="20" delimiter="\\s" clipping=" ..." %><span class="small"><% story.link text="[read more]" prefix=" " to="main" %><% story.editlink prefix=" ... " %></span><br />
|
|
@ -22,10 +22,13 @@
|
|||
// $URL$
|
||||
//
|
||||
|
||||
defineConstants(User, "getStatus", "blocked", "regular", "trusted",
|
||||
"privileged");
|
||||
defineConstants(User, "getScopes", "regular users", "trusted users",
|
||||
"privileged users");
|
||||
User.COOKIE = getProperty("userCookie", "antvilleUser");
|
||||
User.HASHCOOKIE = getProperty("hashCookie", "antvilleHash");
|
||||
|
||||
User.getStatus = defineConstants(User, "blocked",
|
||||
"regular", "trusted", "privileged");
|
||||
User.getScopes = defineConstants(User, "regular users",
|
||||
"trusted users", "privileged users");
|
||||
|
||||
this.handleMetadata("hash");
|
||||
this.handleMetadata("salt");
|
||||
|
@ -71,10 +74,10 @@ User.prototype.update = function(data) {
|
|||
salt: session.data.token
|
||||
});
|
||||
}
|
||||
this.map({
|
||||
url: evalURL(data.url),
|
||||
email: evalEmail(data.email),
|
||||
});
|
||||
if (!(this.email = validateEmail(data.email))) {
|
||||
throw Error(gettext("Please enter a valid e-mail address"));
|
||||
}
|
||||
this.url = validateUrl(data.url);
|
||||
return this;
|
||||
};
|
||||
|
||||
|
@ -105,7 +108,7 @@ User.prototype.list_macro = function(param, type) {
|
|||
memberships.forEach(function(membership) {
|
||||
var site;
|
||||
if (site = membership.get("site")) {
|
||||
site.renderSkin("Site#preview");
|
||||
site.renderSkin("Site#list");
|
||||
}
|
||||
return;
|
||||
});
|
||||
|
@ -169,6 +172,31 @@ User.register = function(data) {
|
|||
return user;
|
||||
};
|
||||
|
||||
User.autoLogin = function() {
|
||||
if (session.user) {
|
||||
return;
|
||||
}
|
||||
var name = req.cookies[User.COOKIE];
|
||||
var hash = req.cookies[User.HASHCOOKIE];
|
||||
if (!name || !hash) {
|
||||
return;
|
||||
}
|
||||
var user = User.getByName(name);
|
||||
if (!user) {
|
||||
return;
|
||||
}
|
||||
var ip = req.data.http_remotehost.clip(getProperty("cookieLevel", "4"),
|
||||
"", "\\.");
|
||||
if ((user.hash + ip).md5() !== hash) {
|
||||
return;
|
||||
}
|
||||
session.login(user);
|
||||
user.touch();
|
||||
res.message = gettext('Welcome to "{0}", {1}. Have fun!',
|
||||
res.handlers.site.title, user.name);
|
||||
return;
|
||||
};
|
||||
|
||||
User.login = function(data) {
|
||||
var user = User.getByName(data.name);
|
||||
if (!user) {
|
||||
|
@ -185,10 +213,10 @@ User.login = function(data) {
|
|||
}
|
||||
if (data.remember) {
|
||||
// Set long running cookies for automatic login
|
||||
res.setCookie("avUsr", user.name, 365);
|
||||
res.setCookie(User.COOKIE, user.name, 365);
|
||||
var ip = req.data.http_remotehost.clip(getProperty("cookieLevel", "4"),
|
||||
"", "\\.");
|
||||
res.setCookie("avPw", (user.hash + ip).md5(), 365);
|
||||
res.setCookie(User.HASHCOOKIE, (user.hash + ip).md5(), 365);
|
||||
}
|
||||
user.touch();
|
||||
session.login(user);
|
||||
|
@ -203,7 +231,7 @@ User.require = function(s) {
|
|||
return false;
|
||||
};
|
||||
|
||||
User.getStatus = function() {
|
||||
User.getCurrentStatus = function() {
|
||||
if (session.user) {
|
||||
return session.user.status;
|
||||
}
|
||||
|
|
|
@ -163,3 +163,95 @@ function fakemail_macro(param) {
|
|||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// FIXME:
|
||||
function sitelist_macro(param) {
|
||||
// setting some general limitations:
|
||||
var minDisplay = 10;
|
||||
var maxDisplay = 25;
|
||||
var max = Math.min((param.limit ? parseInt(param.limit, 10) : minDisplay), maxDisplay);
|
||||
root.renderSitelist(max);
|
||||
res.write(res.data.sitelist);
|
||||
delete res.data.sitelist;
|
||||
return;
|
||||
}
|
||||
|
||||
// FIXME:
|
||||
function imagelist_macro(param) {
|
||||
var site = param.of ? root.get(param.of) : res.handlers.site;
|
||||
if (!site)
|
||||
return;
|
||||
if (!site.images.size())
|
||||
return;
|
||||
var max = Math.min(param.limit ? param.limit : 5, site.images.size());
|
||||
var idx = 0;
|
||||
var imgParam;
|
||||
var linkParam = {};
|
||||
delete param.limit;
|
||||
|
||||
while (idx < max) {
|
||||
var imgObj = site.images.get(idx++);
|
||||
|
||||
imgParam = Object.clone(param);
|
||||
delete imgParam.itemprefix;
|
||||
delete imgParam.itemsuffix;
|
||||
delete imgParam.as;
|
||||
delete linkParam.href;
|
||||
delete linkParam.onclick;
|
||||
|
||||
res.write(param.itemprefix);
|
||||
// return different display according to param.as
|
||||
switch (param.as) {
|
||||
case "url":
|
||||
res.write(imgObj.getUrl());
|
||||
break;
|
||||
case "popup":
|
||||
linkParam.onclick = imgObj.getPopupUrl();
|
||||
case "thumbnail":
|
||||
linkParam.href = param.linkto ? param.linkto : imgObj.getUrl();
|
||||
if (imgObj.thumbnail)
|
||||
imgObj = imgObj.thumbnail;
|
||||
default:
|
||||
if (linkParam.href) {
|
||||
html.openLink(linkParam);
|
||||
renderImage(imgObj, imgParam);
|
||||
html.closeLink();
|
||||
} else
|
||||
renderImage(imgObj, imgParam);
|
||||
}
|
||||
res.write(param.itemsuffix);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// FIXME: -> tags!
|
||||
function topiclist_macro(param) {
|
||||
var site = param.of ? root.get(param.of) : res.handlers.site;
|
||||
if (!site)
|
||||
return;
|
||||
site.topics.topiclist_macro(param);
|
||||
return;
|
||||
}
|
||||
|
||||
function imageoftheday_macro(param) {
|
||||
var s = res.handlers.site;
|
||||
var pool = res.handlers.site.images;
|
||||
if (pool==null) return;
|
||||
delete(param.topic);
|
||||
var img = pool.get(0);
|
||||
param.name = img.alias;
|
||||
return image_macro(param);
|
||||
}
|
||||
|
||||
// FIXME: obsolete?
|
||||
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;
|
||||
}
|
||||
|
|
|
@ -62,6 +62,20 @@ Root.prototype.shortdateformat_macro = function(param) {
|
|||
return;
|
||||
};
|
||||
|
||||
Root.prototype.sitecounter_macro = function(param) {
|
||||
if (param.count == "all")
|
||||
var size = root.size();
|
||||
else
|
||||
var size = this.publicSites.size();
|
||||
if (size == 0)
|
||||
res.write(param.no ? param.no : size);
|
||||
else if (size == 1)
|
||||
res.write(param.one ? param.one : size);
|
||||
else
|
||||
res.write(size + (param.more ? param.more : ""));
|
||||
return;
|
||||
};
|
||||
|
||||
Root.prototype.sysmgrnavigation_macro = function(param) {
|
||||
if (session.user && session.user.sysadmin)
|
||||
this.renderSkin("sysmgrnavigation");
|
||||
|
|
|
@ -145,6 +145,39 @@ Site.prototype.layoutchooser_macro = function(param) {
|
|||
return this.select_macro(param, "layout");
|
||||
};
|
||||
|
||||
Site.prototype.history_macro = function(param, type) {
|
||||
param.limit = Math.min(param.limit || 10, 20);
|
||||
type || (type = param.show);
|
||||
var stories = this.stories.recent;
|
||||
var size = stories.size();
|
||||
var counter = i = 0;
|
||||
var item;
|
||||
while (counter < param.limit && i < size) {
|
||||
if (i % param.limit === 0) {
|
||||
stories.prefetchChildren(i, param.limit);
|
||||
}
|
||||
item = stories.get(i);
|
||||
i += 1;
|
||||
switch (item.constructor) {
|
||||
case Story:
|
||||
if (type === "comments") {
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
case Comment:
|
||||
if (type === "stories" || item.story.mode === Story.PRIVATE ||
|
||||
item.story.commentsMode === Story.CLOSED ||
|
||||
this.commentsMode === Site.DISABLED) {
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
}
|
||||
item.renderSkin("Story#history");
|
||||
counter += 1;
|
||||
}
|
||||
return;
|
||||
};
|
||||
|
||||
Site.prototype.menuext_action = function() {
|
||||
this.renderSkin("menuext");
|
||||
return;
|
||||
|
|
Loading…
Add table
Reference in a new issue