Merge pull request #34 from gcsolaroli/master

Fixed some resources
This commit is contained in:
Giulio Cesare Solaroli 2012-03-17 14:18:52 -07:00
commit 288b8df03a
49 changed files with 1861 additions and 3309 deletions

View File

@ -3,6 +3,9 @@
"mochikit.repository": "http://svn.mochikit.com/mochikit/trunk/",
"mochikit.version": "1249"
},
"html.template": "index_template.html",
"js": [
"MochiKit/Base.js",
"MochiKit/Iter.js",

File diff suppressed because it is too large Load Diff

View File

@ -1,28 +1,3 @@
<!--
Copyright 2008-2011 Clipperz Srl
This file is part of Clipperz Community Edition.
Clipperz Community Edition is an online password manager.
For further information about its features and functionalities please
refer to http://www.clipperz.com.
* Clipperz Community Edition is free software: you can redistribute
it and/or modify it under the terms of the GNU Affero General Public
License as published by the Free Software Foundation, either version
3 of the License, or (at your option) any later version.
* Clipperz Community Edition is distributed in the hope that it will
be useful, but WITHOUT ANY WARRANTY; without even the implied
warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU Affero General Public License for more details.
* You should have received a copy of the GNU Affero General Public
License along with Clipperz Community Edition. If not, see
<http://www.gnu.org/licenses/>.
-->
<html>
<head>
<title>clipperz</title>

View File

@ -142,7 +142,7 @@ Clipperz.PM.Proxy.prototype = MochiKit.Base.update(null, {
'processMessage': function (aFunctionName, someParameters, aRequestType) {
var deferredResult;
deferredResult = new Clipperz.Async.Deferred("Proxy.processMessage", {trace:true});
deferredResult = new Clipperz.Async.Deferred("Proxy.processMessage", {trace:false});
deferredResult.addMethod(this, 'payToll', aRequestType);
deferredResult.addMethod(this, 'sendMessage', aFunctionName);
deferredResult.addMethod(this, 'setTollCallback');

View File

@ -102,8 +102,8 @@ Clipperz.Base.extend(Clipperz.PM.UI.Common.Components.Tooltip, Clipperz.PM.UI.Co
{tag:'div', id:this.getId('body'), cls:'tooltip_body', children:[
{tag:'div', cls:'tooltip_text', children:[
{tag:'span', html:this.text()}
]},
{tag:'div', id:this.getId('footer'), cls:'tooltip_footer'}
]}//,
// {tag:'div', id:this.getId('footer'), cls:'tooltip_footer'}
]},
{tag:'div', id:this.getId('arrow'), cls:'tooltip_arrow'}
]});
@ -146,45 +146,46 @@ Clipperz.Base.extend(Clipperz.PM.UI.Common.Components.Tooltip, Clipperz.PM.UI.Co
switch (this.position()) {
case 'ABOVE':
//console.log("ABOVE");
MochiKit.Style.setElementDimensions(this.getId('arrow'), {w:36, h:13}, 'px');
// MochiKit.Style.setElementDimensions(this.getId('arrow'), {w:36, h:13}, 'px');
bodyPosition.x = elementSizeAndPosition.position.x + (elementSizeAndPosition.dimensions.w/2 - this.boxDimensions().w/2);
bodyPosition.y = elementSizeAndPosition.position.y - this.boxDimensions().h - 13;
arrowPosition.x = elementSizeAndPosition.position.x + (elementSizeAndPosition.dimensions.w/2 - 36/2);
arrowPosition.y = elementSizeAndPosition.position.y - 13;
// arrowPosition.x = elementSizeAndPosition.position.x + (elementSizeAndPosition.dimensions.w/2 - 36/2);
// arrowPosition.y = elementSizeAndPosition.position.y - 13;
break;
case 'BELOW':
//console.log("BELOW");
MochiKit.Style.setElementDimensions(this.getId('arrow'), {w:36, h:13}, 'px');
// MochiKit.Style.setElementDimensions(this.getId('arrow'), {w:36, h:13}, 'px');
bodyPosition.x = elementSizeAndPosition.position.x + (elementSizeAndPosition.dimensions.w/2 - this.boxDimensions().w/2);
bodyPosition.y = elementSizeAndPosition.position.y + elementSizeAndPosition.dimensions.h + 13;
arrowPosition.x = elementSizeAndPosition.position.x + (elementSizeAndPosition.dimensions.w/2 - 36/2);
arrowPosition.y = elementSizeAndPosition.position.y + elementSizeAndPosition.dimensions.h;
// arrowPosition.x = elementSizeAndPosition.position.x + (elementSizeAndPosition.dimensions.w/2 - 36/2);
// arrowPosition.y = elementSizeAndPosition.position.y + elementSizeAndPosition.dimensions.h;
break;
case 'LEFT':
//console.log("LEFT");
MochiKit.Style.setElementDimensions(this.getId('arrow'), {w:13, h:36}, 'px');
// MochiKit.Style.setElementDimensions(this.getId('arrow'), {w:13, h:36}, 'px');
bodyPosition.x = elementSizeAndPosition.position.x - this.boxDimensions().w - 13;
bodyPosition.y = elementSizeAndPosition.position.y + (elementSizeAndPosition.dimensions.h/2 - this.boxDimensions().h/2);
arrowPosition.x = elementSizeAndPosition.position.x -13;
arrowPosition.y = elementSizeAndPosition.position.y + (elementSizeAndPosition.dimensions.h/2 - 36/2);
// arrowPosition.x = elementSizeAndPosition.position.x -13;
// arrowPosition.y = elementSizeAndPosition.position.y + (elementSizeAndPosition.dimensions.h/2 - 36/2);
break;
case 'RIGHT':
//console.log("RIGHT");
MochiKit.Style.setElementDimensions(this.getId('arrow'), {w:13, h:36}, 'px');
// MochiKit.Style.setElementDimensions(this.getId('arrow'), {w:13, h:36}, 'px');
bodyPosition.x = elementSizeAndPosition.position.x + elementSizeAndPosition.dimensions.w + 13;
bodyPosition.y = elementSizeAndPosition.position.y + (elementSizeAndPosition.dimensions.h/2 - this.boxDimensions().h/2);
arrowPosition.x = elementSizeAndPosition.position.x + elementSizeAndPosition.dimensions.w;
arrowPosition.y = elementSizeAndPosition.position.y + (elementSizeAndPosition.dimensions.h/2 - 36/2);
// arrowPosition.x = elementSizeAndPosition.position.x + elementSizeAndPosition.dimensions.w;
// arrowPosition.y = elementSizeAndPosition.position.y + (elementSizeAndPosition.dimensions.h/2 - 36/2);
break;
}
//console.log("X: " + bodyPosition.x + ", Y: " + bodyPosition.y);
MochiKit.Style.setElementPosition(this.getId('body'), bodyPosition);
MochiKit.Style.setElementPosition(this.getId('arrow'), arrowPosition);
MochiKit.Style.setElementPosition(this.getId('tooltip'), bodyPosition);
// MochiKit.Style.setElementPosition(this.getId('body'), bodyPosition);
// MochiKit.Style.setElementPosition(this.getId('arrow'), arrowPosition);
MochiKit.Visual.appear(this.displayElement(), {duration:0.4});
}
},

View File

@ -65,24 +65,9 @@ Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.LoginForm, Clipperz.PM.UI.Com
// {tag:'form', cls:'loginForm', autocomplete:this.autocomplete(), children:[
{tag:'form', id:this.getId('form'), cls:'loginForm', children:[
{tag:'label', html:'username', 'for':this.getId('usernameField')},
{tag:'input', id:this.getId('usernameField'), type:'text', cls:'username'/*, value:'joe'*/},
{tag:'ul', id:this.getId('passwordOptions'), children:[
{tag:'li', id:this.getId('passphraseOption'), children:[
{tag:'label', html:'passphrase / OTP', 'for':this.getId('passphraseField')},
{tag:'input', id:this.getId('passphraseField'), type:'password', cls:'password'/*, value:'clipperz'*/}
]} // ,
/*
{tag:'li', id:this.getId('otpOption'), children:[
{tag:'label', html:'one-time password', 'for':this.getId('otpField_1')},
{tag:'input', id:this.getId('otpField_1'), type:'text', cls:'otp', value:'abcd-efgh'},
{tag:'input', id:this.getId('otpField_2'), type:'text', cls:'otp', value:'abcd-efgh'},
{tag:'input', id:this.getId('otpField_3'), type:'text', cls:'otp', value:'abcd-efgh'},
{tag:'input', id:this.getId('otpField_4'), type:'text', cls:'otp', value:'abcd-efgh'}
]}
*/
]},
// {tag:'input', id:this.getId('otpCheckbox'), type:'checkbox', cls:'checkbox'},
// {tag:'label', html:'use a one-time passphrase', 'for':this.getId('otpCheckbox'), cls:'checkbox'},
{tag:'input', id:this.getId('usernameField'), type:'text', cls:'username'},
{tag:'label', html:'passphrase / OTP', 'for':this.getId('passphraseField')},
{tag:'input', id:this.getId('passphraseField'), type:'password', cls:'password'},
{tag:'div', cls:'translations', children:[
{tag:'h4', html:'choose your language'},
@ -161,29 +146,22 @@ Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.LoginForm, Clipperz.PM.UI.Com
//-------------------------------------------------------------------------
'loginEventHandler': function(anEvent) {
var username;
var passphrase;
// var shouldUseOTP;
// var otp;
// var username;
// var passphrase;
var signalArguments;
anEvent.preventDefault();
username = this.getElement('usernameField').value;
passphrase = this.getElement('passphraseField').value;
// otp = this.getElement('otpField_1').value +
// this.getElement('otpField_2').value +
// this.getElement('otpField_3').value +
// this.getElement('otpField_4').value;
// shouldUseOTP = this.getElement('otpCheckbox').checked;
// username = this.getElement('usernameField').value;
// passphrase = this.getElement('passphraseField').value;
signalArguments = {username:username};
// signalArguments = {username:username};
// signalArguments.passphrase = passphrase;
// if (shouldUseOTP) {
// signalArguments.otp = otp;
// } else {
signalArguments.passphrase = passphrase;
// }
signalArguments = {
'username': this.getElement('usernameField').value,
'passphrase': this.getElement('passphraseField').value
};
MochiKit.Signal.signal(this, 'doLogin', signalArguments);
},

View File

@ -81,13 +81,11 @@ MochiKit.Base.update(Clipperz.PM.UI.Web.Controllers.LoginController.prototype, {
'doLogin': function(aLoginForm, anEvent) {
var deferredResult;
var parameters;
// var shouldUseOTP;
var loginProgress;
var user;
var getPassphraseDelegate;
parameters = anEvent;
// shouldUseOTP = (typeof(parameters.passphrase) == 'undefined');
getPassphraseDelegate = MochiKit.Base.partial(MochiKit.Async.succeed, parameters.passphrase);
user = new Clipperz.PM.DataModel.User({'username':parameters.username, 'getPassphraseFunction':MochiKit.Base.method(Clipperz.PM.RunTime.mainController, 'getPassphrase')});
@ -99,11 +97,7 @@ MochiKit.Base.update(Clipperz.PM.UI.Web.Controllers.LoginController.prototype, {
deferredResult.addMethod(Clipperz.PM.RunTime.mainController, 'setPassphraseDelegate', getPassphraseDelegate);
deferredResult.addMethod(loginProgress, 'deferredShowModal', {deferredObject:deferredResult, openFromElement:aLoginForm.submitButtonElement()});
deferredResult.addMethod(Clipperz.Crypto.PRNG.defaultRandomGenerator(), 'deferredEntropyCollection');
// if (shouldUseOTP == false) {
deferredResult.addMethod(user, 'login');
// } else {
// deferredResult.addMethod(user, 'loginUsingOTP', parameters.username, parameters.otp);
// }
deferredResult.addMethod(user, 'login');
deferredResult.addCallback(function(aLoginProgress, res) {
aLoginProgress.disableCancel();
return res;

View File

@ -8,7 +8,7 @@ See <http://mochikit.com/> for documentation, downloads, license, etc.
***/
MochiKit.Base._module('Async', '1.5', ['Base']);
MochiKit.Base.module(MochiKit, 'Async', '1.5', ['Base']);
/** @id MochiKit.Async.Deferred */
MochiKit.Async.Deferred = function (/* optional */ canceller) {
@ -20,28 +20,32 @@ MochiKit.Async.Deferred = function (/* optional */ canceller) {
this.canceller = canceller;
this.silentlyCancelled = false;
this.chained = false;
this.finalized = false;
};
MochiKit.Async.Deferred.prototype = {
/** @id MochiKit.Async.Deferred.prototype.repr */
repr: function () {
var state;
if (this.fired == -1) {
state = 'unfired';
} else if (this.fired === 0) {
state = 'success';
} else {
state = 'error';
}
return 'Deferred(' + this.id + ', ' + state + ')';
return 'Deferred(' + this.id + ', ' + this.state() + ')';
},
toString: MochiKit.Base.forwardCall("repr"),
_nextId: MochiKit.Base.counter(),
/** @id MochiKit.Async.Deferred.prototype.state */
state: function () {
if (this.fired == -1) {
return 'unfired';
} else if (this.fired === 0) {
return 'success';
} else {
return 'error';
}
},
/** @id MochiKit.Async.Deferred.prototype.cancel */
cancel: function () {
cancel: function (e) {
var self = MochiKit.Async;
if (this.fired == -1) {
if (this.canceller) {
@ -50,10 +54,15 @@ MochiKit.Async.Deferred.prototype = {
this.silentlyCancelled = true;
}
if (this.fired == -1) {
this.errback(new self.CancelledError(this));
if (typeof(e) === 'string') {
e = new self.GenericError(e);
} else if (!(e instanceof Error)) {
e = new self.CancelledError(this);
}
this.errback(e);
}
} else if ((this.fired === 0) && (this.results[0] instanceof self.Deferred)) {
this.results[0].cancel();
this.results[0].cancel(e);
}
},
@ -65,7 +74,9 @@ MochiKit.Async.Deferred.prototype = {
***/
this.fired = ((res instanceof Error) ? 1 : 0);
this.results[this.fired] = res;
this._fire();
if (this.paused === 0) {
this._fire();
}
},
_check: function () {
@ -129,6 +140,9 @@ MochiKit.Async.Deferred.prototype = {
if (this.chained) {
throw new Error("Chained Deferreds can not be re-used");
}
if (this.finalized) {
throw new Error("Finalized Deferreds can not be re-used");
}
this.chain.push([cb, eb]);
if (this.fired >= 0) {
this._fire();
@ -136,6 +150,24 @@ MochiKit.Async.Deferred.prototype = {
return this;
},
/** @id MochiKit.Async.Deferred.prototype.setFinalizer */
setFinalizer: function (fn) {
if (this.chained) {
throw new Error("Chained Deferreds can not be re-used");
}
if (this.finalized) {
throw new Error("Finalized Deferreds can not be re-used");
}
if (arguments.length > 1) {
fn = MochiKit.Base.partial.apply(null, arguments);
}
this._finalizer = fn;
if (this.fired >= 0) {
this._fire();
}
return this;
},
_fire: function () {
/***
@ -160,11 +192,8 @@ MochiKit.Async.Deferred.prototype = {
fired = ((res instanceof Error) ? 1 : 0);
if (res instanceof MochiKit.Async.Deferred) {
cb = function (res) {
self._resback(res);
self.paused--;
if ((self.paused === 0) && (self.fired >= 0)) {
self._fire();
}
self._resback(res);
};
this.paused++;
}
@ -178,6 +207,10 @@ MochiKit.Async.Deferred.prototype = {
}
this.fired = fired;
this.results[fired] = res;
if (this.chain.length == 0 && this.paused === 0 && this._finalizer) {
this.finalized = true;
this._finalizer(res);
}
if (cb && this.paused) {
// this is for "tail recursion" in case the dependent deferred
// is already fired
@ -249,7 +282,7 @@ MochiKit.Base.update(MochiKit.Async, {
var status = null;
try {
status = this.status;
if (!status && m.isNotEmpty(this.responseText)) {
if (!status && (this.response || m.isNotEmpty(this.responseText))) {
// 0 or undefined seems to mean cached or local
status = 304;
}
@ -337,7 +370,8 @@ MochiKit.Base.update(MochiKit.Async, {
username: undefined,
password: undefined,
headers: undefined,
mimeType: undefined
mimeType: undefined,
responseType: undefined
*/
}, opts);
var self = MochiKit.Async;
@ -371,6 +405,9 @@ MochiKit.Base.update(MochiKit.Async, {
req.setRequestHeader(name, value);
}
}
if ("responseType" in opts && "responseType" in req) {
req.responseType = opts.responseType;
}
return self.sendXMLHttpRequest(req, opts.sendContent);
},
@ -404,16 +441,44 @@ MochiKit.Base.update(MochiKit.Async, {
return d;
},
/** @id MochiKit.Async.loadScript */
loadScript: function (url) {
var d = new MochiKit.Async.Deferred();
var script = document.createElement("script");
script.type = "text/javascript";
script.src = url;
script.onload = function () {
script.onload = null;
script.onerror = null;
script.onreadystatechange = null;
script = null;
d.callback();
};
script.onerror = function (msg) {
script.onload = null;
script.onerror = null;
script.onreadystatechange = null;
script = null;
msg = "Failed to load script at " + url + ": " + msg;
d.errback(new URIError(msg, url));
}
script.onreadystatechange = function () {
if (script.readyState == "loaded" || script.readyState == "complete") {
script.onload();
} else {
// IE doesn't bother to report errors...
MochiKit.Async.callLater(10, script.onerror, "Script loading timed out")
}
};
document.getElementsByTagName("head")[0].appendChild(script);
return d;
},
/** @id MochiKit.Async.wait */
wait: function (seconds, /* optional */value) {
var d = new MochiKit.Async.Deferred();
var m = MochiKit.Base;
if (typeof(value) != 'undefined') {
d.addCallback(function () { return value; });
}
var timeout = setTimeout(
m.bind("callback", d),
Math.floor(seconds * 1000));
var cb = MochiKit.Base.bind("callback", d, value);
var timeout = setTimeout(cb, Math.floor(seconds * 1000));
d.canceller = function () {
try {
clearTimeout(timeout);
@ -510,6 +575,7 @@ MochiKit.Async.DeferredList = function (list, /* optional */fireOnOneCallback, f
};
MochiKit.Async.DeferredList.prototype = new MochiKit.Async.Deferred();
MochiKit.Async.DeferredList.prototype.constructor = MochiKit.Async.DeferredList;
MochiKit.Async.DeferredList.prototype._cbDeferred = function (index, succeeded, result) {
this.resultList[index] = [succeeded, result];

View File

@ -8,33 +8,43 @@ See <http://mochikit.com/> for documentation, downloads, license, etc.
***/
if (typeof(MochiKit) == 'undefined') {
MochiKit = {};
}
// MochiKit module (namespace)
var MochiKit = MochiKit || {};
if (typeof(MochiKit.__export__) == "undefined") {
MochiKit.__export__ = true;
}
if (typeof(MochiKit.Base) == 'undefined') {
MochiKit.Base = {};
}
MochiKit.NAME = "MochiKit";
MochiKit.VERSION = "1.5";
MochiKit.__repr__ = function () {
return "[" + this.NAME + " " + this.VERSION + "]";
};
MochiKit.toString = function () {
return this.__repr__();
};
// MochiKit.Base module
MochiKit.Base = MochiKit.Base || {};
/**
* Registers a new MochiKit module. This function will insert a new
* property into the "MochiKit" object, making sure that all
* dependency modules have already been inserted. It will also make
* sure that the appropriate properties and default module functions
* are defined.
* Creates a new module in a parent namespace. This function will
* create a new empty module object with "NAME", "VERSION",
* "toString" and "__repr__" properties. This object will be inserted into the parent object
* using the specified name (i.e. parent[name] = module). It will
* also verify that all the dependency modules are defined in the
* parent, or an error will be thrown.
*
* @param {Object} parent the parent module (use "this" or "window" for
* a global module)
* @param {String} name the module name, e.g. "Base"
* @param {String} version the module version, e.g. "1.5"
* @param {Array} deps the array of module dependencies (as strings)
* @param {Array} [deps] the array of module dependencies (as strings)
*/
MochiKit.Base._module = function (name, version, deps) {
if (!(name in MochiKit)) {
MochiKit[name] = {};
}
var module = MochiKit[name];
module.NAME = "MochiKit." + name;
MochiKit.Base.module = function (parent, name, version, deps) {
var module = parent[name] = parent[name] || {};
var prefix = (parent.NAME ? parent.NAME + "." : "");
module.NAME = prefix + name;
module.VERSION = version;
module.__repr__ = function () {
return "[" + this.NAME + " " + this.VERSION + "]";
@ -42,14 +52,15 @@ MochiKit.Base._module = function (name, version, deps) {
module.toString = function () {
return this.__repr__();
};
for (var i = 0; i < deps.length; i++) {
if (!(deps[i] in MochiKit)) {
throw 'MochiKit.' + name + ' depends on MochiKit.' + deps[i] + '!';
for (var i = 0; deps != null && i < deps.length; i++) {
if (!(deps[i] in parent)) {
throw module.NAME + ' depends on ' + prefix + deps[i] + '!';
}
}
}
return module;
};
MochiKit.Base._module("Base", "1.5", []);
MochiKit.Base.module(MochiKit, "Base", "1.5", []);
/** @id MochiKit.Base.update */
MochiKit.Base.update = function (self, obj/*, ... */) {
@ -240,6 +251,7 @@ MochiKit.Base.update(MochiKit.Base, {
_newNamedError: function (module, name, func) {
func.prototype = new MochiKit.Base.NamedError(module.NAME + "." + name);
func.prototype.constructor = func;
module[name] = func;
},
@ -351,7 +363,7 @@ MochiKit.Base.update(MochiKit.Base, {
} else if (typeof(value) === "number" || value instanceof Number) {
return !isNaN(value) && value != 0;
} else if (value != null && typeof(value.length) === "number") {
return value.length !== 0
return value.length !== 0;
} else {
return value != null;
}
@ -675,6 +687,9 @@ MochiKit.Base.update(MochiKit.Base, {
newfunc.im_self = im_self;
newfunc.im_func = im_func;
newfunc.im_preargs = im_preargs;
if (typeof(im_func.NAME) == 'string') {
newfunc.NAME = "bind(" + im_func.NAME + ",...)";
}
return newfunc;
},
@ -788,11 +803,14 @@ MochiKit.Base.update(MochiKit.Base, {
}
return MochiKit.Base.reprRegistry.match(o);
} catch (e) {
if (typeof(o.NAME) == 'string' && (
o.toString == Function.prototype.toString ||
o.toString == Object.prototype.toString
)) {
return o.NAME;
try {
if (typeof(o.NAME) == 'string' && (
o.toString == Function.prototype.toString ||
o.toString == Object.prototype.toString
)) {
return o.NAME;
}
} catch (ignore) {
}
}
try {
@ -840,16 +858,13 @@ MochiKit.Base.update(MochiKit.Base, {
/** @id MochiKit.Base.evalJSON */
evalJSON: function () {
return eval("(" + MochiKit.Base._filterJSON(arguments[0]) + ")");
evalJSON: function (jsonText) {
return eval("(" + MochiKit.Base._filterJSON(jsonText) + ")");
},
_filterJSON: function (s) {
var m = s.match(/^\s*\/\*(.*)\*\/\s*$/);
if (m) {
return m[1];
}
return s;
return (m) ? m[1] : s;
},
/** @id MochiKit.Base.serializeJSON */
@ -894,6 +909,12 @@ MochiKit.Base.update(MochiKit.Base, {
// short-circuit for objects that support "json" serialization
// if they return "self" then just pass-through...
var newObj;
if (typeof(o.toJSON) == "function") {
newObj = o.toJSON();
if (o !== newObj) {
return me(newObj);
}
}
if (typeof(o.__json__) == "function") {
newObj = o.__json__();
if (o !== newObj) {
@ -1100,7 +1121,7 @@ MochiKit.Base.update(MochiKit.Base, {
if (data.length === 0) {
throw new TypeError('median() requires at least one argument');
}
data.sort(compare);
data.sort(MochiKit.Base.compare);
if (data.length % 2 == 0) {
var upper = data.length / 2;
return (data[upper] + data[upper - 1]) / 2;
@ -1290,19 +1311,45 @@ MochiKit.Base.AdapterRegistry.prototype = {
}
};
MochiKit.Base._exportSymbols = function (globals, module) {
if (MochiKit.__export__ === false || module.__export__ === false) {
return;
}
for (var k in module) {
var v = module[k];
if (v != null) {
var okName = (k[0] !== "_" && k !== "toString");
if (v.__export__ === true || (v.__export__ !== false && okName)) {
globals[k] = module[k];
/**
* Exports all symbols from one or more modules into the specified
* namespace (or scope). This is similar to MochiKit.Base.update(),
* except for special handling of the "__export__" flag, contained
* sub-modules (exported recursively), and names starting with "_".
*
* @param {Object} namespace the object or scope to modify
* @param {Object} module the module to export
*/
MochiKit.Base.moduleExport = function (namespace, module/*, ...*/) {
var SKIP = { toString: true, NAME: true, VERSION: true };
var mods = MochiKit.Base.extend([], arguments, 1);
while ((module = mods.shift()) != null) {
for (var k in module) {
var v = module[k];
if (v != null) {
var flagSet = (typeof(v.__export__) == 'boolean');
var nameValid = (k[0] !== "_" && !SKIP[k]);
if (flagSet ? v.__export__ : nameValid) {
if (typeof(v) == 'object' && v.NAME && v.VERSION) {
mods.push(v);
} else {
namespace[k] = module[k];
}
}
}
}
}
return namespace;
};
/**
* Identical to moduleExport, but also considers the global and
* module-specific "__export__" flag.
*/
MochiKit.Base._exportSymbols = function (namespace, module) {
if (MochiKit.__export__ !== false && module.__export__ !== false) {
MochiKit.Base.moduleExport(namespace, module);
}
};
/**
@ -1321,7 +1368,7 @@ MochiKit.Base._exportSymbols = function (globals, module) {
* @param {String} version the first version when the source function
* was deprecated (e.g. '1.4')
* @param {Boolean} [exportable] the exportable function flag,
* defaults to true
* defaults to false
*/
MochiKit.Base._deprecated = function (module, name, target, version, exportable) {
if (typeof(module) === 'string') {
@ -1349,11 +1396,9 @@ MochiKit.Base._deprecated = function (module, name, target, version, exportable)
}
return MochiKit[targetModule][targetName].apply(this, arguments);
};
if (exportable === false) {
func.__export__ = false;
}
func.__export__ = (exportable === true);
module[name] = func;
}
};
MochiKit.Base.__new__ = function () {
var m = this;
@ -1362,8 +1407,8 @@ MochiKit.Base.__new__ = function () {
m.noop = m.operator.identity;
// Backwards compat
m._deprecated(m, 'forward', 'MochiKit.Base.forwardCall', '1.3', false);
m._deprecated(m, 'find', 'MochiKit.Base.findValue', '1.3', false);
m._deprecated(m, 'forward', 'MochiKit.Base.forwardCall', '1.3');
m._deprecated(m, 'find', 'MochiKit.Base.findValue', '1.3');
if (typeof(encodeURIComponent) != "undefined") {
/** @id MochiKit.Base.urlEncode */
@ -1375,7 +1420,7 @@ MochiKit.Base.__new__ = function () {
return escape(unencoded
).replace(/\+/g, '%2B'
).replace(/\"/g,'%22'
).rval.replace(/\'/g, '%27');
).replace(/\'/g, '%27');
};
}
@ -1385,6 +1430,7 @@ MochiKit.Base.__new__ = function () {
this.name = name;
};
m.NamedError.prototype = new Error();
m.NamedError.prototype.constructor = m.NamedError;
m.update(m.NamedError.prototype, {
repr: function () {
if (this.message && this.message != this.name) {
@ -1409,6 +1455,8 @@ MochiKit.Base.__new__ = function () {
m.isCallable = m.typeMatcher('function');
/** @id MochiKit.Base.isUndefined */
m.isUndefined = m.typeMatcher('undefined');
/** @id MochiKit.Base.isValue */
m.isValue = m.typeMatcher('boolean', 'number', 'string');
/** @id MochiKit.Base.merge */
m.merge = m.partial(m.update, null);

View File

@ -8,7 +8,7 @@ See <http://mochikit.com/> for documentation, downloads, license, etc.
***/
MochiKit.Base._module('Color', '1.5', ['Base', 'DOM', 'Style']);
MochiKit.Base.module(MochiKit, 'Color', '1.5', ['Base', 'DOM', 'Style']);
/** @id MochiKit.Color.Color */
MochiKit.Color.Color = function (red, green, blue, alpha) {
@ -112,7 +112,7 @@ MochiKit.Color.Color.prototype = {
/** @id MochiKit.Color.Color.prototype.isLight */
isLight: function () {
return this.asHSL().b > 0.5;
return this.asHSL().l > 0.5;
},
/** @id MochiKit.Color.Color.prototype.isDark */
@ -641,19 +641,10 @@ MochiKit.Base.update(MochiKit.Color, {
yellow: [1, 1, 0]
};
var makeColor = function (name, r, g, b, a) {
var rval = this.fromRGB(r, g, b, a);
this[name] = function () { return rval; };
return rval;
};
for (var k in colors) {
var name = k + "Color";
var bindArgs = m.concat(
[makeColor, this.Color, name],
colors[k]
);
this.Color[name] = m.bind.apply(null, bindArgs);
var value = this.Color.fromRGB.apply(this.Color, colors[k]);
this.Color[name] = m.partial(m.operator.identity, value);
}
var isColor = function () {

View File

@ -8,7 +8,7 @@ See <http://mochikit.com/> for documentation, downloads, license, etc.
***/
MochiKit.Base._module('DOM', '1.5', ['Base']);
MochiKit.Base.module(MochiKit, 'DOM', '1.5', ['Base']);
MochiKit.Base.update(MochiKit.DOM, {
@ -297,11 +297,11 @@ MochiKit.Base.update(MochiKit.DOM, {
updateNodeAttributes: function (node, attrs) {
var elem = node;
var self = MochiKit.DOM;
var base = MochiKit.Base;
if (typeof(node) == 'string') {
elem = self.getElement(node);
}
if (attrs) {
var updatetree = MochiKit.Base.updatetree;
if (self.attributeArray.compliant) {
// not IE, good.
for (var k in attrs) {
@ -310,7 +310,7 @@ MochiKit.Base.update(MochiKit.DOM, {
if (k == "style" && MochiKit.Style) {
MochiKit.Style.setStyle(elem, v);
} else {
updatetree(elem[k], v);
base.updatetree(elem[k], v);
}
} else if (k.substring(0, 2) == "on") {
if (typeof(v) == "string") {
@ -320,8 +320,8 @@ MochiKit.Base.update(MochiKit.DOM, {
} else {
elem.setAttribute(k, v);
}
if (typeof(elem[k]) == "string" && elem[k] != v) {
// Also set property for weird attributes (see #302)
if (base.isValue(elem[k]) && elem[k] != v) {
// Also set property for weird attributes (see #302 & #335)
elem[k] = v;
}
}
@ -340,7 +340,7 @@ MochiKit.Base.update(MochiKit.DOM, {
if (k == "style" && MochiKit.Style) {
MochiKit.Style.setStyle(elem, v);
} else {
updatetree(elem[k], v);
base.updatetree(elem[k], v);
}
} else if (k.substring(0, 2) == "on") {
if (typeof(v) == "string") {
@ -350,8 +350,8 @@ MochiKit.Base.update(MochiKit.DOM, {
} else {
elem.setAttribute(k, v);
}
if (typeof(elem[k]) == "string" && elem[k] != v) {
// Also set property for weird attributes (see #302)
if (base.isValue(elem[k]) && elem[k] != v) {
// Also set property for weird attributes (see #302 & #335)
elem[k] = v;
}
}
@ -990,6 +990,7 @@ MochiKit.Base.update(MochiKit.DOM, {
"for": "htmlFor",
"readonly": "readOnly",
"colspan": "colSpan",
"rowspan": "rowSpan",
"bgcolor": "bgColor",
"cellspacing": "cellSpacing",
"cellpadding": "cellPadding"
@ -1007,7 +1008,7 @@ MochiKit.Base.update(MochiKit.DOM, {
// Backwards compatibility aliases
/** @id MochiKit.DOM.computedStyle */
m._deprecated(this, 'computedStyle', 'MochiKit.Style.getStyle', '1.4');
m._deprecated(this, 'computedStyle', 'MochiKit.Style.getStyle', '1.4', true);
/** @id MochiKit.DOM.elementDimensions */
m._deprecated(this, 'elementDimensions', 'MochiKit.Style.getElementDimensions', '1.4');
/** @id MochiKit.DOM.elementPosition */
@ -1041,48 +1042,38 @@ MochiKit.Base.update(MochiKit.DOM, {
// shorthand for createDOM syntax
var createDOMFunc = this.createDOMFunc;
/** @id MochiKit.DOM.UL */
this.UL = createDOMFunc("ul");
/** @id MochiKit.DOM.OL */
this.OL = createDOMFunc("ol");
/** @id MochiKit.DOM.LI */
this.LI = createDOMFunc("li");
/** @id MochiKit.DOM.A */
this.A = createDOMFunc("a");
/** @id MochiKit.DOM.ARTICLE */
this.ARTICLE = createDOMFunc("article");
/** @id MochiKit.DOM.ASIDE */
this.ASIDE = createDOMFunc("aside");
/** @id MochiKit.DOM.BR */
this.BR = createDOMFunc("br");
/** @id MochiKit.DOM.BUTTON */
this.BUTTON = createDOMFunc("button");
/** @id MochiKit.DOM.CANVAS */
this.CANVAS = createDOMFunc("canvas");
/** @id MochiKit.DOM.CAPTION */
this.CAPTION = createDOMFunc("caption");
/** @id MochiKit.DOM.DD */
this.DD = createDOMFunc("dd");
/** @id MochiKit.DOM.DIV */
this.DIV = createDOMFunc("div");
/** @id MochiKit.DOM.DL */
this.DL = createDOMFunc("dl");
/** @id MochiKit.DOM.DT */
this.DT = createDOMFunc("dt");
/** @id MochiKit.DOM.DD */
this.DD = createDOMFunc("dd");
/** @id MochiKit.DOM.TD */
this.TD = createDOMFunc("td");
/** @id MochiKit.DOM.TR */
this.TR = createDOMFunc("tr");
/** @id MochiKit.DOM.TBODY */
this.TBODY = createDOMFunc("tbody");
/** @id MochiKit.DOM.THEAD */
this.THEAD = createDOMFunc("thead");
/** @id MochiKit.DOM.TFOOT */
this.TFOOT = createDOMFunc("tfoot");
/** @id MochiKit.DOM.TABLE */
this.TABLE = createDOMFunc("table");
/** @id MochiKit.DOM.TH */
this.TH = createDOMFunc("th");
/** @id MochiKit.DOM.INPUT */
this.INPUT = createDOMFunc("input");
/** @id MochiKit.DOM.SPAN */
this.SPAN = createDOMFunc("span");
/** @id MochiKit.DOM.A */
this.A = createDOMFunc("a");
/** @id MochiKit.DOM.DIV */
this.DIV = createDOMFunc("div");
/** @id MochiKit.DOM.IMG */
this.IMG = createDOMFunc("img");
/** @id MochiKit.DOM.BUTTON */
this.BUTTON = createDOMFunc("button");
/** @id MochiKit.DOM.TT */
this.TT = createDOMFunc("tt");
/** @id MochiKit.DOM.PRE */
this.PRE = createDOMFunc("pre");
/** @id MochiKit.DOM.FIELDSET */
this.FIELDSET = createDOMFunc("fieldset");
/** @id MochiKit.DOM.FIGURE */
this.FIGURE = createDOMFunc("figure");
/** @id MochiKit.DOM.FIGCAPTION */
this.FIGCAPTION = createDOMFunc("figcaption");
/** @id MochiKit.DOM.FOOTER */
this.FOOTER = createDOMFunc("footer");
/** @id MochiKit.DOM.FORM */
this.FORM = createDOMFunc("form");
/** @id MochiKit.DOM.H1 */
this.H1 = createDOMFunc("h1");
/** @id MochiKit.DOM.H2 */
@ -1095,38 +1086,82 @@ MochiKit.Base.update(MochiKit.DOM, {
this.H5 = createDOMFunc("h5");
/** @id MochiKit.DOM.H6 */
this.H6 = createDOMFunc("h6");
/** @id MochiKit.DOM.BR */
this.BR = createDOMFunc("br");
/** @id MochiKit.DOM.HEADER */
this.HEADER = createDOMFunc("header");
/** @id MochiKit.DOM.HGROUP */
this.HGROUP = createDOMFunc("hgroup");
/** @id MochiKit.DOM.HR */
this.HR = createDOMFunc("hr");
/** @id MochiKit.DOM.IFRAME */
this.IFRAME = createDOMFunc("iframe");
/** @id MochiKit.DOM.IMG */
this.IMG = createDOMFunc("img");
/** @id MochiKit.DOM.INPUT */
this.INPUT = createDOMFunc("input");
/** @id MochiKit.DOM.LABEL */
this.LABEL = createDOMFunc("label");
/** @id MochiKit.DOM.TEXTAREA */
this.TEXTAREA = createDOMFunc("textarea");
/** @id MochiKit.DOM.FORM */
this.FORM = createDOMFunc("form");
/** @id MochiKit.DOM.P */
this.P = createDOMFunc("p");
/** @id MochiKit.DOM.SELECT */
this.SELECT = createDOMFunc("select");
/** @id MochiKit.DOM.OPTION */
this.OPTION = createDOMFunc("option");
/** @id MochiKit.DOM.OPTGROUP */
this.OPTGROUP = createDOMFunc("optgroup");
/** @id MochiKit.DOM.LEGEND */
this.LEGEND = createDOMFunc("legend");
/** @id MochiKit.DOM.FIELDSET */
this.FIELDSET = createDOMFunc("fieldset");
/** @id MochiKit.DOM.LI */
this.LI = createDOMFunc("li");
/** @id MochiKit.DOM.LINK */
this.LINK = createDOMFunc("link");
/** @id MochiKit.DOM.MARK */
this.MARK = createDOMFunc("mark");
/** @id MochiKit.DOM.METER */
this.METER = createDOMFunc("meter");
/** @id MochiKit.DOM.NAV */
this.NAV = createDOMFunc("nav");
/** @id MochiKit.DOM.OL */
this.OL = createDOMFunc("ol");
/** @id MochiKit.DOM.OPTGROUP */
this.OPTGROUP = createDOMFunc("optgroup");
/** @id MochiKit.DOM.OPTION */
this.OPTION = createDOMFunc("option");
/** @id MochiKit.DOM.P */
this.P = createDOMFunc("p");
/** @id MochiKit.DOM.PRE */
this.PRE = createDOMFunc("pre");
/** @id MochiKit.DOM.PROGRESS */
this.PROGRESS = createDOMFunc("progress");
/** @id MochiKit.DOM.SCRIPT */
this.SCRIPT = createDOMFunc("script");
/** @id MochiKit.DOM.SECTION */
this.SECTION = createDOMFunc("section");
/** @id MochiKit.DOM.SELECT */
this.SELECT = createDOMFunc("select");
/** @id MochiKit.DOM.SPAN */
this.SPAN = createDOMFunc("span");
/** @id MochiKit.DOM.STRONG */
this.STRONG = createDOMFunc("strong");
/** @id MochiKit.DOM.CANVAS */
this.CANVAS = createDOMFunc("canvas");
/** @id MochiKit.DOM.STYLE */
this.STYLE = createDOMFunc("style");
/** @id MochiKit.DOM.TABLE */
this.TABLE = createDOMFunc("table");
/** @id MochiKit.DOM.TBODY */
this.TBODY = createDOMFunc("tbody");
/** @id MochiKit.DOM.TD */
this.TD = createDOMFunc("td");
/** @id MochiKit.DOM.TEXTAREA */
this.TEXTAREA = createDOMFunc("textarea");
/** @id MochiKit.DOM.TFOOT */
this.TFOOT = createDOMFunc("tfoot");
/** @id MochiKit.DOM.TH */
this.TH = createDOMFunc("th");
/** @id MochiKit.DOM.THEAD */
this.THEAD = createDOMFunc("thead");
/** @id MochiKit.DOM.TR */
this.TR = createDOMFunc("tr");
/** @id MochiKit.DOM.TT */
this.TT = createDOMFunc("tt");
/** @id MochiKit.DOM.UL */
this.UL = createDOMFunc("ul");
/** @id MochiKit.DOM.NBSP */
this.NBSP = "\u00a0";
/** @id MochiKit.DOM.$ */
this.$ = this.getElement;
m.nameFunctions(this);
}
});

View File

@ -8,7 +8,7 @@ See <http://mochikit.com/> for documentation, downloads, license, etc.
***/
MochiKit.Base._module('DateTime', '1.5', ['Base']);
MochiKit.Base.module(MochiKit, 'DateTime', '1.5', ['Base']);
/** @id MochiKit.DateTime.isoDate */
MochiKit.DateTime.isoDate = function (str) {
@ -20,10 +20,10 @@ MochiKit.DateTime.isoDate = function (str) {
if (iso.length === 0) {
return null;
}
var date = new Date(iso[0], iso[1] - 1, iso[2]);
date.setFullYear(iso[0]);
date.setMonth(iso[1] - 1);
date.setDate(iso[2]);
var date = new Date(parseInt(iso[0], 10), parseInt(iso[1], 10) - 1, parseInt(iso[2], 10));
date.setFullYear(iso[0]);
date.setMonth(iso[1] - 1);
date.setDate(iso[2]);
return date;
};
@ -80,15 +80,17 @@ MochiKit.DateTime.toISOTime = function (date, realISO/* = false */) {
if (typeof(date) == "undefined" || date === null) {
return null;
}
var hh = date.getHours();
var mm = date.getMinutes();
var ss = date.getSeconds();
var _padTwo = MochiKit.DateTime._padTwo;
if (realISO) {
// adjust date for UTC timezone
date = new Date(date.getTime() + (date.getTimezoneOffset() * 60000));
}
var lst = [
((realISO && (hh < 10)) ? "0" + hh : hh),
((mm < 10) ? "0" + mm : mm),
((ss < 10) ? "0" + ss : ss)
(realISO ? _padTwo(date.getHours()) : date.getHours()),
_padTwo(date.getMinutes()),
_padTwo(date.getSeconds())
];
return lst.join(":");
return lst.join(":") + (realISO ? "Z" : "");
};
/** @id MochiKit.DateTime.toISOTimeStamp */
@ -96,12 +98,13 @@ MochiKit.DateTime.toISOTimestamp = function (date, realISO/* = false*/) {
if (typeof(date) == "undefined" || date === null) {
return null;
}
var time = MochiKit.DateTime.toISOTime(date, realISO);
var sep = realISO ? "T" : " ";
var foot = realISO ? "Z" : "";
if (realISO) {
// adjust date for UTC timezone
date = new Date(date.getTime() + (date.getTimezoneOffset() * 60000));
}
return MochiKit.DateTime.toISODate(date) + sep + MochiKit.DateTime.toISOTime(date, realISO) + foot;
return MochiKit.DateTime.toISODate(date) + sep + time;
};
/** @id MochiKit.DateTime.toISODate */
@ -110,7 +113,7 @@ MochiKit.DateTime.toISODate = function (date) {
return null;
}
var _padTwo = MochiKit.DateTime._padTwo;
var _padFour = MochiKit.DateTime._padFour;
var _padFour = MochiKit.DateTime._padFour;
return [
_padFour(date.getFullYear()),
_padTwo(date.getMonth() + 1),
@ -133,14 +136,14 @@ MochiKit.DateTime._padTwo = function (n) {
};
MochiKit.DateTime._padFour = function(n) {
switch(n.toString().length) {
case 1: return "000" + n; break;
case 2: return "00" + n; break;
case 3: return "0" + n; break;
case 4:
default:
return n;
}
switch(n.toString().length) {
case 1: return "000" + n; break;
case 2: return "00" + n; break;
case 3: return "0" + n; break;
case 4:
default:
return n;
}
};
/** @id MochiKit.DateTime.toPaddedAmericanDate */

View File

@ -8,7 +8,7 @@ Copyright (c) 2005 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
***/
MochiKit.Base._module('DragAndDrop', '1.5', ['Base', 'Iter', 'DOM', 'Signal', 'Visual', 'Position']);
MochiKit.Base.module(MochiKit, 'DragAndDrop', '1.5', ['Base', 'Iter', 'DOM', 'Signal', 'Visual', 'Position']);
MochiKit.DragAndDrop.Droppables = {
/***
@ -306,8 +306,9 @@ MochiKit.DragAndDrop.Draggables = {
var pointer = event.mouse();
// Mozilla-based browsers fire successive mousemove events with
// the same coordinates, prevent needless redrawing (moz bug?)
if (this._lastPointer && (MochiKit.Base.repr(this._lastPointer.page) ==
MochiKit.Base.repr(pointer.page))) {
if (this._lastPointer &&
this._lastPointer.page.x == pointer.page.x &&
this._lastPointer.page.y == pointer.page.y) {
return;
}
this._lastPointer = pointer;
@ -442,8 +443,8 @@ MochiKit.DragAndDrop.Draggable.prototype = {
currentDelta: function () {
var s = MochiKit.Style.getStyle;
return [
parseInt(s(this.element, 'left') || '0'),
parseInt(s(this.element, 'top') || '0')];
parseInt(s(this.element, 'left') || '0', 10),
parseInt(s(this.element, 'top') || '0', 10)];
},
/** @id MochiKit.DragAndDrop.initDrag */
@ -481,8 +482,7 @@ MochiKit.DragAndDrop.Draggable.prototype = {
this.options.selectclass);
}
if (this.options.zindex) {
this.originalZ = parseInt(MochiKit.Style.getStyle(this.element,
'z-index') || '0');
this.originalZ = MochiKit.Style.getStyle(this.element, 'z-index');
this.element.style.zIndex = this.options.zindex;
}

View File

@ -8,7 +8,7 @@ See <http://mochikit.com/> for documentation, downloads, license, etc.
***/
MochiKit.Base._module('Format', '1.5', ['Base']);
MochiKit.Base.module(MochiKit, 'Format', '1.5', ['Base']);
MochiKit.Format._numberFormatter = function (placeholder, header, footer, locale, isPercent, precision, leadingZeros, separatorAt, trailingZeros) {
return function (num) {
@ -104,7 +104,7 @@ MochiKit.Format.numberFormatter = function (pattern, placeholder/* = "" */, loca
return [
self.NAME,
"(",
map(m.repr, args).join(", "),
m.map(m.repr, args).join(", "),
")"
].join("");
};
@ -142,7 +142,7 @@ MochiKit.Format.twoDigitAverage = function (numerator, denominator) {
/** @id MochiKit.Format.twoDigitFloat */
MochiKit.Format.twoDigitFloat = function (aNumber) {
var res = roundToFixed(aNumber, 2);
var res = MochiKit.Format.roundToFixed(aNumber, 2);
if (res.indexOf(".00") > 0) {
return res.substring(0, res.length - 3);
} else if (res.charAt(res.length - 1) == "0") {
@ -193,7 +193,7 @@ MochiKit.Format.truncToFixed = function (aNumber, precision) {
fixed = MochiKit.Format._shiftNumber(fixed, 0);
}
return fixed;
}
};
/** @id MochiKit.Format.roundToFixed */
MochiKit.Format.roundToFixed = function (aNumber, precision) {
@ -205,7 +205,7 @@ MochiKit.Format.roundToFixed = function (aNumber, precision) {
fixed = MochiKit.Format._shiftNumber(str, -precision);
}
return fixed;
}
};
/**
* Converts a number to a fixed format string. This function handles
@ -221,7 +221,7 @@ MochiKit.Format.roundToFixed = function (aNumber, precision) {
MochiKit.Format._numberToFixed = function (aNumber, precision) {
var str = aNumber.toString();
var parts = str.split(/[eE]/);
var exp = (parts.length === 1) ? 0 : parseInt(parts[1]) || 0;
var exp = (parts.length === 1) ? 0 : parseInt(parts[1], 10) || 0;
var fixed = MochiKit.Format._shiftNumber(parts[0], exp);
parts = fixed.split(/\./);
var whole = parts[0];
@ -234,7 +234,7 @@ MochiKit.Format._numberToFixed = function (aNumber, precision) {
} else {
return whole;
}
}
};
/**
* Shifts the decimal dot location in a fixed format number string.
@ -275,7 +275,7 @@ MochiKit.Format._shiftNumber = function (num, exp) {
num = "-" + num.substring(2);
}
return num;
}
};
/** @id MochiKit.Format.percentFormat */
MochiKit.Format.percentFormat = function (aNumber) {

View File

@ -8,7 +8,7 @@ See <http://mochikit.com/> for documentation, downloads, license, etc.
***/
MochiKit.Base._module('Iter', '1.5', ['Base']);
MochiKit.Base.module(MochiKit, 'Iter', '1.5', ['Base']);
MochiKit.Base.update(MochiKit.Iter, {
/** @id MochiKit.Iter.registerIteratorFactory */
@ -222,14 +222,15 @@ MochiKit.Base.update(MochiKit.Iter, {
},
toString: m.forwardCall("repr"),
next: function () {
if (start >= stop) {
throw self.StopIteration;
}
var rval;
while (i < start) {
rval = seq.next();
i++;
}
if (start >= stop) {
throw self.StopIteration;
}
start += step;
return rval;
}
@ -280,15 +281,12 @@ MochiKit.Base.update(MochiKit.Iter, {
next: function () {
while (argiter.length > 1) {
try {
var result = argiter[0].next();
return result;
return argiter[0].next();
} catch (e) {
if (e != self.StopIteration) {
throw e;
}
argiter.shift();
var result = argiter[0].next();
return result;
}
}
if (argiter.length == 1) {
@ -413,7 +411,7 @@ MochiKit.Base.update(MochiKit.Iter, {
var self = MochiKit.Iter;
iterable = self.iter(iterable);
var rval = [];
rval = [];
var a_val;
try {
while (true) {

View File

@ -8,7 +8,7 @@ See <http://mochikit.com/> for documentation, downloads, license, etc.
***/
MochiKit.Base._module('Logging', '1.5', ['Base']);
MochiKit.Base.module(MochiKit, 'Logging', '1.5', ['Base']);
/** @id MochiKit.Logging.LogMessage */
MochiKit.Logging.LogMessage = function (num, level, info) {
@ -187,7 +187,7 @@ MochiKit.Logging.Logger.prototype = {
}
var messages = this.getMessages(howMany);
if (messages.length) {
var lst = map(function (m) {
var lst = MochiKit.Base.map(function (m) {
return '\n [' + m.num + '] ' + m.level + ': ' + m.info.join(' ');
}, messages);
lst.unshift('LAST ' + messages.length + ' MESSAGES:');

View File

@ -8,7 +8,7 @@ See <http://mochikit.com/> for documentation, downloads, license, etc.
***/
MochiKit.Base._module('LoggingPane', '1.5', ['Base', 'Logging']);
MochiKit.Base.module(MochiKit, 'LoggingPane', '1.5', ['Base', 'Logging']);
/** @id MochiKit.LoggingPane.createLoggingPane */
MochiKit.LoggingPane.createLoggingPane = function (inline/* = false */) {
@ -24,7 +24,10 @@ MochiKit.LoggingPane.createLoggingPane = function (inline/* = false */) {
return m._loggingPane;
};
/** @id MochiKit.LoggingPane.LoggingPane */
/**
* @id MochiKit.LoggingPane.LoggingPane
* @constructor
*/
MochiKit.LoggingPane.LoggingPane = function (inline/* = false */, logger/* = MochiKit.Logging.logger */) {
/* Use a div if inline, pop up a window if not */
@ -146,7 +149,7 @@ MochiKit.LoggingPane.LoggingPane = function (inline/* = false */, logger/* = Moc
infore = new RegExp(infoFilterField.value);
} catch(e) {
/* If there was an error with the regexes, do no filtering */
logDebug("Error in filter regex: " + e.message);
MochiKit.Logging.logDebug("Error in filter regex: " + e.message);
return null;
}
@ -184,7 +187,7 @@ MochiKit.LoggingPane.LoggingPane = function (inline/* = false */, logger/* = Moc
try {
try {
debugPane.loggingPane = null;
} catch(e) { logFatal("Bookmarklet was closed incorrectly."); }
} catch(e) { MochiKit.Logging.logFatal("Bookmarklet was closed incorrectly."); }
if (inline) {
debugPane.parentNode.removeChild(debugPane);
} else {
@ -224,7 +227,7 @@ MochiKit.LoggingPane.LoggingPane = function (inline/* = false */, logger/* = Moc
/** @id MochiKit.LoggingPane.filterOnEnter */
var filterOnEnter = bind(function (event) {
event = event || window.event;
key = event.which || event.keyCode;
var key = event.which || event.keyCode;
if (key == 13) {
this.buildAndApplyFilter();
}

View File

@ -8,17 +8,14 @@ See <http://mochikit.com/> for documentation, downloads, license, etc.
***/
if (typeof(MochiKit) == 'undefined') {
MochiKit = {};
}
var MochiKit = MochiKit || {};
if (typeof(MochiKit.MochiKit) == 'undefined') {
/** @id MochiKit.MochiKit */
MochiKit.MochiKit = {};
}
/** @id MochiKit.MochiKit */
MochiKit.MochiKit = MochiKit.MochiKit || {};
MochiKit.MochiKit.NAME = "MochiKit.MochiKit";
MochiKit.MochiKit.VERSION = "1.5";
MochiKit.MochiKit.__export__ = false;
MochiKit.MochiKit.__repr__ = function () {
return "[" + this.NAME + " " + this.VERSION + "]";
};

View File

@ -8,16 +8,13 @@ See <http://mochikit.com/> for documentation, downloads, license, etc.
***/
if (typeof(MochiKit) == "undefined") {
MochiKit = {};
}
var MochiKit = MochiKit || {};
if (typeof(MochiKit.MockDOM) == "undefined") {
MochiKit.MockDOM = {};
}
MochiKit.MockDOM = MochiKit.MockDOM || {};
MochiKit.MockDOM.NAME = "MochiKit.MockDOM";
MochiKit.MockDOM.VERSION = "1.5";
MochiKit.MockDOM.__export__ = false;
MochiKit.MockDOM.__repr__ = function () {
return "[" + this.NAME + " " + this.VERSION + "]";

View File

@ -8,7 +8,7 @@ See <http://mochikit.com/> for documentation, downloads, license, etc.
***/
MochiKit.Base._module('Position', '1.5', ['Base', 'DOM', 'Style']);
MochiKit.Base.module(MochiKit, 'Position', '1.5', ['Base', 'DOM', 'Style']);
MochiKit.Base.update(MochiKit.Position, {
// Don't export from this module

View File

@ -8,7 +8,7 @@ See <http://mochikit.com/> for documentation, downloads, license, etc.
***/
MochiKit.Base._module('Selector', '1.5', ['Base', 'DOM', 'Iter']);
MochiKit.Base.module(MochiKit, 'Selector', '1.5', ['Base', 'DOM', 'Iter']);
MochiKit.Selector.Selector = function (expression) {
this.params = {classNames: [], pseudoClassNames: []};
@ -127,8 +127,8 @@ MochiKit.Selector.Selector.prototype = {
a = 2;
b = 0;
} else {
a = match[2] && parseInt(match) || null;
b = parseInt(match[3]);
a = match[2] && parseInt(match, 10) || null;
b = parseInt(match[3], 10);
}
conditions.push('this.nthChild(element,' + a + ',' + b
+ ',' + !!pseudoClass.match('^nth-last') // Reverse
@ -167,7 +167,7 @@ MochiKit.Selector.Selector.prototype = {
break;
case 'not':
var subselector = new MochiKit.Selector.Selector(pseudoClassArgument);
conditions.push('!( ' + subselector.buildMatchExpression() + ')')
conditions.push('!( ' + subselector.buildMatchExpression() + ')');
break;
}
}
@ -177,7 +177,7 @@ MochiKit.Selector.Selector.prototype = {
var value = 'MochiKit.DOM.getNodeAttribute(element, ' + repr(attribute.name) + ')';
var splitValueBy = function (delimiter) {
return value + '.split(' + repr(delimiter) + ')';
}
};
conditions.push(value + ' != null');
switch (attribute.operator) {
case '=':
@ -352,6 +352,12 @@ MochiKit.Base.update(MochiKit.Selector, {
return res;
};
return MochiKit.Base.flattenArray(MochiKit.Base.map(function (expression) {
try {
var res = element.querySelectorAll(expression);
return Array.prototype.slice.call(res, 0);
} catch (ignore) {
// No querySelectorAll or extended expression syntax used
}
var nextScope = "";
var reducer = function (results, expr) {
var match = expr.match(/^[>+~]$/);

View File

@ -8,7 +8,7 @@ See <http://mochikit.com/> for documentation, downloads, license, etc.
***/
MochiKit.Base._module('Signal', '1.5', ['Base', 'DOM', 'Style']);
MochiKit.Base.module(MochiKit, 'Signal', '1.5', ['Base', 'DOM']);
MochiKit.Signal._observers = [];
@ -266,16 +266,17 @@ MochiKit.Base.update(MochiKit.Signal.Event.prototype, {
if (this.type() && (
this.type().indexOf('mouse') === 0 ||
this.type().indexOf('drag') === 0 ||
this.type().indexOf('click') != -1 ||
this.type() == 'contextmenu')) {
m.client = new MochiKit.Style.Coordinates(0, 0);
m.client = { x: 0, y: 0 };
if (e.clientX || e.clientY) {
m.client.x = (!e.clientX || e.clientX < 0) ? 0 : e.clientX;
m.client.y = (!e.clientY || e.clientY < 0) ? 0 : e.clientY;
}
m.page = new MochiKit.Style.Coordinates(0, 0);
m.page = { x: 0, y: 0 };
if (e.pageX || e.pageY) {
m.page.x = (!e.pageX || e.pageX < 0) ? 0 : e.pageX;
m.page.y = (!e.pageY || e.pageY < 0) ? 0 : e.pageY;
@ -337,7 +338,7 @@ MochiKit.Base.update(MochiKit.Signal.Event.prototype, {
}
}
if (this.type() == 'mousewheel') {
m.wheel = new MochiKit.Style.Coordinates(0, 0);
m.wheel = { x: 0, y: 0 };
if (e.wheelDeltaX || e.wheelDeltaY) {
m.wheel.x = e.wheelDeltaX / -40 || 0;
m.wheel.y = e.wheelDeltaY / -40 || 0;
@ -672,6 +673,18 @@ MochiKit.Base.update(MochiKit.Signal, {
return ident;
},
/** @id MochiKit.Signal.connectOnce */
connectOnce: function (src, sig, objOrFunc/* optional */, funcOrStr) {
var self = MochiKit.Signal;
var ident1 = self.connect(src, sig, objOrFunc, funcOrStr);
var ident2;
ident2 = self.connect(src, sig, function() {
self.disconnect(ident1);
self.disconnect(ident2);
});
return ident1;
},
_disconnect: function (ident) {
// already disconnected
if (!ident.connected) {
@ -715,7 +728,7 @@ MochiKit.Base.update(MochiKit.Signal, {
var o = observers[i];
if (o.source === src && o.signal === sig && o.objOrFunc === obj && o.funcOrStr === func) {
self._disconnect(o);
if (!self._lock) {
if (self._lock === 0) {
observers.splice(i, 1);
} else {
self._dirty = true;
@ -727,7 +740,7 @@ MochiKit.Base.update(MochiKit.Signal, {
var idx = m.findIdentical(observers, ident);
if (idx >= 0) {
self._disconnect(ident);
if (!self._lock) {
if (self._lock === 0) {
observers.splice(idx, 1);
} else {
self._dirty = true;
@ -743,7 +756,7 @@ MochiKit.Base.update(MochiKit.Signal, {
var self = MochiKit.Signal;
var observers = self._observers;
var disconnect = self._disconnect;
var locked = self._lock;
var lock = self._lock;
var dirty = self._dirty;
if (typeof(funcOrStr) === 'undefined') {
funcOrStr = null;
@ -753,10 +766,10 @@ MochiKit.Base.update(MochiKit.Signal, {
if (ident.objOrFunc === objOrFunc &&
(funcOrStr === null || ident.funcOrStr === funcOrStr)) {
disconnect(ident);
if (locked) {
dirty = true;
} else {
if (lock === 0) {
observers.splice(i, 1);
} else {
dirty = true;
}
}
}
@ -774,7 +787,7 @@ MochiKit.Base.update(MochiKit.Signal, {
var disconnect = self._disconnect;
var observers = self._observers;
var i, ident;
var locked = self._lock;
var lock = self._lock;
var dirty = self._dirty;
if (signals.length === 0) {
// disconnect all
@ -782,7 +795,7 @@ MochiKit.Base.update(MochiKit.Signal, {
ident = observers[i];
if (ident.source === src) {
disconnect(ident);
if (!locked) {
if (lock === 0) {
observers.splice(i, 1);
} else {
dirty = true;
@ -798,7 +811,7 @@ MochiKit.Base.update(MochiKit.Signal, {
ident = observers[i];
if (ident.source === src && ident.signal in sigs) {
disconnect(ident);
if (!locked) {
if (lock === 0) {
observers.splice(i, 1);
} else {
dirty = true;
@ -818,7 +831,7 @@ MochiKit.Base.update(MochiKit.Signal, {
}
var args = MochiKit.Base.extend(null, arguments, 2);
var errors = [];
self._lock = true;
self._lock++;
for (var i = 0; i < observers.length; i++) {
var ident = observers[i];
if (ident.source === src && ident.signal === sig &&
@ -837,8 +850,8 @@ MochiKit.Base.update(MochiKit.Signal, {
}
}
}
self._lock = false;
if (self._dirty) {
self._lock--;
if (self._lock === 0 && self._dirty) {
self._dirty = false;
for (var i = observers.length - 1; i >= 0; i--) {
if (!observers[i].connected) {
@ -861,7 +874,7 @@ MochiKit.Signal.__new__ = function (win) {
var m = MochiKit.Base;
this._document = document;
this._window = win;
this._lock = false;
this._lock = 0;
this._dirty = false;
try {

View File

@ -6,7 +6,7 @@ See scriptaculous.js for full license.
***/
MochiKit.Base._module('Sortable', '1.5', ['Base', 'Iter', 'DOM', 'Position', 'DragAndDrop']);
MochiKit.Base.module(MochiKit, 'Sortable', '1.5', ['Base', 'Iter', 'DOM', 'Position', 'DragAndDrop']);
MochiKit.Base.update(MochiKit.Sortable, {
__export__: false,
@ -179,7 +179,7 @@ MochiKit.Base.update(MochiKit.Sortable, {
onhover: self.onHover,
tree: options.tree,
accept: options.accept
}
};
var options_for_tree = {
onhover: self.onEmptyHover,
@ -187,7 +187,7 @@ MochiKit.Base.update(MochiKit.Sortable, {
containment: options.containment,
hoverclass: options.hoverclass,
accept: options.accept
}
};
// fix for gecko engine
MochiKit.DOM.removeEmptyTextNodes(element);
@ -430,11 +430,11 @@ MochiKit.Base.update(MochiKit.Sortable, {
children: [],
position: parent.children.length,
container: self._findChildrenElement(children[i], options.treeTag.toUpperCase())
}
};
/* Get the element containing the children and recurse over it */
if (child.container) {
self._tree(child.container, options, child)
self._tree(child.container, options, child);
}
parent.children.push (child);
@ -475,7 +475,7 @@ MochiKit.Base.update(MochiKit.Sortable, {
children: new Array,
container: element,
position: 0
}
};
return MochiKit.Sortable._tree(element, options, root);
},

View File

@ -6,9 +6,12 @@ See <http://mochikit.com/> for documentation, downloads, license, etc.
(c) 2005-2006 Bob Ippolito, Beau Hartshorne. All rights Reserved.
The MochiKit.Style.getElementPosition function is adapted from
YAHOO.util.Dom.getXY v0.9.0. which is copyrighted by Yahoo! Inc.
***/
MochiKit.Base._module('Style', '1.5', ['Base', 'DOM']);
MochiKit.Base.module(MochiKit, 'Style', '1.5', ['Base', 'DOM']);
/** @id MochiKit.Style.Dimensions */
@ -179,7 +182,7 @@ MochiKit.Base.update(MochiKit.Style, {
o.nodeType == null &&
typeof(o.x) == "number" &&
typeof(o.y) == "number";
}
};
if (typeof(elem) == "string") {
elem = dom.getElement(elem);
@ -197,7 +200,7 @@ MochiKit.Base.update(MochiKit.Style, {
var de = d.documentElement;
var b = d.body;
if (!elem.parentNode && elem.x && elem.y) {
if (isCoordinates(elem)) {
/* it's just a MochiKit.Style.Coordinates object */
c.x += elem.x || 0;
c.y += elem.y || 0;
@ -228,8 +231,8 @@ MochiKit.Base.update(MochiKit.Style, {
if (parent != elem) {
while (parent) {
c.x += parseInt(parent.style.borderLeftWidth) || 0;
c.y += parseInt(parent.style.borderTopWidth) || 0;
c.x += parseInt(parent.style.borderLeftWidth, 10) || 0;
c.y += parseInt(parent.style.borderTopWidth, 10) || 0;
c.x += parent.offsetLeft;
c.y += parent.offsetTop;
parent = parent.offsetParent;
@ -390,7 +393,7 @@ MochiKit.Base.update(MochiKit.Style, {
if (contentSize) {
var tableCell = 'colSpan' in elem && 'rowSpan' in elem;
var collapse = (tableCell && elem.parentNode && self.getStyle(
elem.parentNode, 'borderCollapse') == 'collapse')
elem.parentNode, 'borderCollapse') == 'collapse');
if (collapse) {
if (/MSIE/.test(navigator.userAgent)) {
var borderLeftQuota = elem.previousSibling? 0.5 : 1;
@ -543,8 +546,8 @@ MochiKit.Base.update(MochiKit.Style, {
}
// Backwards compatibility aliases
m._deprecated(this, 'elementPosition', 'MochiKit.Style.getElementPosition', '1.3');
m._deprecated(this, 'elementDimensions', 'MochiKit.Style.getElementDimensions', '1.3');
m._deprecated(this, 'elementPosition', 'MochiKit.Style.getElementPosition', '1.3', true);
m._deprecated(this, 'elementDimensions', 'MochiKit.Style.getElementDimensions', '1.3', true);
this.hideElement = m.partial(this.setDisplayForElement, 'none');
// TODO: showElement could be improved by using getDefaultDisplay.

View File

@ -8,7 +8,7 @@ See <http://mochikit.com/> for documentation, downloads, license, etc.
***/
MochiKit.Base._module('Test', '1.5', ['Base']);
MochiKit.Base.module(MochiKit, 'Test', '1.5', ['Base']);
MochiKit.Test.runTests = function (obj) {
if (typeof(obj) == "string") {

View File

@ -8,7 +8,7 @@ See <http://mochikit.com/> for documentation, downloads, license, etc.
***/
MochiKit.Base._module('Text', '1.5', ['Base', 'Format']);
MochiKit.Base.module(MochiKit, 'Text', '1.5', ['Base', 'Format']);
/**
* Checks if a text string starts with the specified substring. If
@ -22,7 +22,7 @@ MochiKit.Base._module('Text', '1.5', ['Base', 'Format']);
*/
MochiKit.Text.startsWith = function (substr, str) {
return str != null && substr != null && str.indexOf(substr) == 0;
}
};
/**
* Checks if a text string ends with the specified substring. If
@ -37,7 +37,7 @@ MochiKit.Text.startsWith = function (substr, str) {
MochiKit.Text.endsWith = function (substr, str) {
return str != null && substr != null &&
str.lastIndexOf(substr) == Math.max(str.length - substr.length, 0);
}
};
/**
* Checks if a text string contains the specified substring. If
@ -51,7 +51,7 @@ MochiKit.Text.endsWith = function (substr, str) {
*/
MochiKit.Text.contains = function (substr, str) {
return str != null && substr != null && str.indexOf(substr) >= 0;
}
};
/**
* Adds a character to the left-hand side of a string until it
@ -71,7 +71,7 @@ MochiKit.Text.padLeft = function (str, minLength, fillChar) {
str = fillChar + str;
}
return str;
}
};
/**
* Adds a character to the right-hand side of a string until it
@ -91,7 +91,7 @@ MochiKit.Text.padRight = function (str, minLength, fillChar) {
str += fillChar;
}
return str;
}
};
/**
* Returns a truncated copy of a string. If the string is shorter
@ -119,29 +119,55 @@ MochiKit.Text.truncate = function (str, maxLength, tail) {
} else {
return str.slice(0, maxLength);
}
}
};
/**
* Splits a text string, applies a function and joins the results
* back together again. This is a convenience function for calling
* split(), map() and join() separately. It can be used to easily
* trim each line in a text string (using the strip function), or to
* translate a text word-by-word.
* Splits a text string using separator as the split point
* If max is given, at most max splits are done, giving at most
* max + 1 elements in the returned list.
*
* @param {Function} func the function to apply
* @param {String} str the string to split
* @param {String} [separator] the separator character to use,
* @param {String/RegExp} [separator] the separator char or regexp to use,
* defaults to newline
*
* @return {String} a string with the joined up results
* @param {Number} [max] the maximum number of parts to return
* @return {Array} an array of parts of the string
*/
MochiKit.Text.splitJoin = function (func, str, separator) {
if (str == null || str.length == 0) {
MochiKit.Text.split = function (str, separator, max) {
if (str == null) {
return str;
}
separator = separator || '\n'
return MochiKit.Base.map(func, str.split(separator)).join(separator);
}
separator = separator || '\n';
var bits = str.split(separator);
if ((typeof(max) == "undefined") || max >= bits.length - 1) {
return bits;
}
bits.splice(max, bits.length, bits.slice(max, bits.length).join(separator));
return bits;
};
/**
* Splits a text string using separator as the split point
* If max is given, at most max splits are done,
* using splits from the right
*
* @param {String} str the string to split
* @param {String/RegExp} [separator] the separator char or regexp to use,
* defaults to newline
* @param {Number} [max] the maximum number of parts to return
* @return {Array} an array of parts of the string
*/
MochiKit.Text.rsplit = function (str, separator, max) {
if (str == null) {
return str;
}
separator = separator || '\n';
var bits = str.split(separator);
if ((typeof(max) == "undefined") || max >= bits.length - 1){
return bits;
}
bits.splice(0, bits.length-max, bits.slice(0, bits.length-max).join(separator));
return bits;
};
/**
* Creates a formatter function for the specified formatter pattern
@ -158,7 +184,7 @@ MochiKit.Text.splitJoin = function (func, str, separator) {
* @throws FormatPatternError if the format pattern was invalid
*/
MochiKit.Text.formatter = function (pattern, locale) {
if (typeof(locale) == "undefined") {
if (locale == null) {
locale = MochiKit.Format.formatLocale();
} else if (typeof(locale) == "string") {
locale = MochiKit.Format.formatLocale(locale);
@ -175,8 +201,8 @@ MochiKit.Text.formatter = function (pattern, locale) {
}
}
return res.join("");
}
}
};
};
/**
* Formats the specified arguments according to a formatter pattern.
@ -193,7 +219,7 @@ MochiKit.Text.formatter = function (pattern, locale) {
MochiKit.Text.format = function (pattern/*, ...*/) {
var func = MochiKit.Text.formatter(pattern);
return func.apply(this, MochiKit.Base.extend([], arguments, 1));
}
};
/**
* Format a value with the specified format specifier.
@ -205,24 +231,29 @@ MochiKit.Text.format = function (pattern/*, ...*/) {
* LOCALE.en_US
*
* @return {String} the formatted output string
*
* @throws FormatPatternError if the format specifier was invalid
*/
MochiKit.Text.formatValue = function (spec, value, locale) {
var self = MochiKit.Text;
if (typeof(spec) === "string") {
spec = self._parseFormatFlags(spec, 0, spec.length - 1);
spec = self._parseFormatFlags(spec, 0, spec.length);
}
for (var i = 0; spec.path != null && i < spec.path.length; i++) {
if (value != null) {
value = value[spec.path[i]];
}
}
if (typeof(locale) == "undefined") {
if (locale == null) {
locale = MochiKit.Format.formatLocale();
} else if (typeof(locale) == "string") {
locale = MochiKit.Format.formatLocale(locale);
}
var str = "";
if (spec.numeric) {
if (spec.type == "number") {
if (value instanceof Number) {
value = value.valueOf();
}
if (typeof(value) != "number" || isNaN(value)) {
str = "";
} else if (value === Number.POSITIVE_INFINITY) {
@ -230,8 +261,7 @@ MochiKit.Text.formatValue = function (spec, value, locale) {
} else if (value === Number.NEGATIVE_INFINITY) {
str = "-\u221e";
} else {
var sign = (spec.sign === "-") ? "" : spec.sign;
sign = (value < 0) ? "-" : sign;
var sign = (value < 0) ? "-" : spec.sign;
value = Math.abs(value);
if (spec.format === "%") {
str = self._truncToPercent(value, spec.precision);
@ -254,7 +284,7 @@ MochiKit.Text.formatValue = function (spec, value, locale) {
} else if (spec.padding == "0") {
str = self.padLeft(str, spec.width - sign.length, "0");
}
str = self._localizeNumber(str, locale, spec.grouping);
str = self._localizeNumber(str, locale, spec.group);
str = sign + str;
}
if (str !== "" && spec.format === "%") {
@ -264,7 +294,7 @@ MochiKit.Text.formatValue = function (spec, value, locale) {
if (spec.format == "r") {
str = MochiKit.Base.repr(value);
} else {
str = (value == null) ? "null" : value.toString();
str = (value == null) ? "" : value.toString();
}
str = self.truncate(str, spec.precision);
}
@ -274,7 +304,7 @@ MochiKit.Text.formatValue = function (spec, value, locale) {
str = self.padLeft(str, spec.width);
}
return str;
}
};
/**
* Adjust an already formatted numeric string for locale-specific
@ -284,16 +314,16 @@ MochiKit.Text.formatValue = function (spec, value, locale) {
*
* @param {String} num the formatted number string
* @param {Object} locale the formatting locale to use
* @param {Boolean} grouping the grouping flag
* @param {Boolean} group the grouping flag
*
* @return {String} the localized number string
*/
MochiKit.Text._localizeNumber = function (num, locale, grouping) {
MochiKit.Text._localizeNumber = function (num, locale, group) {
var parts = num.split(/\./);
var whole = parts[0];
var frac = (parts.length == 1) ? "" : parts[1];
var res = (frac.length > 0) ? locale.decimal : "";
while (grouping && frac.length > 3) {
while (group && frac.length > 3) {
res = res + frac.substring(0, 3) + locale.separator;
frac = frac.substring(3);
if (whole.charAt(0) == "0") {
@ -301,15 +331,15 @@ MochiKit.Text._localizeNumber = function (num, locale, grouping) {
}
}
if (frac.length > 0) {
res += frac;
res = res + frac;
}
while (grouping && whole.length > 3) {
while (group && whole.length > 3) {
var pos = whole.length - 3;
res = locale.separator + whole.substring(pos) + res;
whole = whole.substring((whole.charAt(0) == "0") ? 1 : 0, pos);
}
return whole + res;
}
};
/**
* Parses a format pattern and returns an array of constant strings
@ -324,44 +354,32 @@ MochiKit.Text._localizeNumber = function (num, locale, grouping) {
MochiKit.Text._parsePattern = function (pattern) {
var self = MochiKit.Text;
var parts = [];
var start = 0;
var pos = 0;
for (pos = 0; pos < pattern.length; pos++) {
if (pattern.charAt(pos) == "{") {
if (pos + 1 >= pattern.length) {
var msg = "unescaped { char, should be escaped as {{";
throw new self.FormatPatternError(pattern, pos, msg);
} else if (pattern.charAt(pos + 1) == "{") {
parts.push(pattern.substring(start, pos + 1));
start = pos + 2;
pos++;
} else {
if (start < pos) {
parts.push(pattern.substring(start, pos));
}
start = pattern.indexOf("}", pos) + 1;
if (start <= 0) {
var msg = "unmatched { char, not followed by a } char";
throw new self.FormatPatternError(pattern, pos, msg);
}
parts.push(self._parseFormat(pattern, pos + 1, start - 1));
pos = start - 1;
}
} else if (pattern.charAt(pos) == "}") {
if (pos + 1 >= pattern.length || pattern.charAt(pos + 1) != "}") {
var msg = "unescaped } char, should be escaped as }}";
throw new self.FormatPatternError(pattern, pos, msg);
}
parts.push(pattern.substring(start, pos + 1));
start = pos + 2;
pos++;
var re = /{[^{}]*}|{{?|}}?/g;
var lastPos = re.lastIndex = 0;
var m;
while ((m = re.exec(pattern)) != null) {
if (lastPos < m.index) {
parts.push(pattern.substring(lastPos, m.index))
}
var str = m[0];
lastPos = m.index + str.length;
if (self.startsWith("{", str) && self.endsWith("}", str)) {
parts.push(self._parseFormat(pattern, m.index + 1, lastPos - 1));
} else if (self.startsWith("{{", str) || self.startsWith("}}", str)) {
parts.push(str.substring(1));
} else if (self.startsWith("{", str)) {
var msg = "unescaped { char, should be escaped as {{";
throw new self.FormatPatternError(pattern, m.index, msg);
} else if (self.startsWith("}", str)) {
var msg = "unescaped } char, should be escaped as }}";
throw new self.FormatPatternError(pattern, m.index, msg);
}
}
if (start < pos) {
parts.push(pattern.substring(start, pos));
if (lastPos < pattern.length) {
parts.push(pattern.substring(lastPos));
}
return parts;
}
};
/**
* Parses a format instruction and returns a format info object.
@ -377,40 +395,30 @@ MochiKit.Text._parsePattern = function (pattern) {
MochiKit.Text._parseFormat = function (pattern, startPos, endPos) {
var self = MochiKit.Text;
var text = pattern.substring(startPos, endPos);
var info;
var pos = text.indexOf(":");
if (pos == 0) {
info = self._parseFormatFlags(pattern, startPos + 1, endPos);
info.path = [0];
} else if (pos > 0) {
info = self._parseFormatFlags(pattern, startPos + pos + 1, endPos);
info.path = text.substring(0, pos).split(".");
} else {
info = self._parseFormatFlags(pattern, endPos, endPos);
info.path = text.split(".");
}
var DIGITS = /^\d+$/;
var parts = self.split(text, ":", 1);
var path = parts[0];
var flagsPos = startPos + path.length + ((parts.length == 1) ? 0 : 1);
var info = self._parseFormatFlags(pattern, flagsPos, endPos);
info.path = (path == "") ? [] : path.split(".");
for (var i = 0; i < info.path.length; i++) {
var e = info.path[i];
if (typeof(e) == "string") {
// TODO: replace with MochiKit.Format.strip?
e = e.replace(/^\s+/, "").replace(/\s+$/, "");
if (e == "" && info.path.length == 1) {
e = 0;
} else if (e == "") {
var msg = "format value path contains blanks";
throw new self.FormatPatternError(pattern, startPos, msg);
} else if (DIGITS.test(e)) {
e = parseInt(e);
}
var v = info.path[i];
// TODO: replace with MochiKit.Format.strip?
v = v.replace(/^\s+/, "").replace(/\s+$/, "");
if (v == "" && info.path.length == 1) {
v = 0;
} else if (v == "") {
var msg = "format value path contains blanks";
throw new self.FormatPatternError(pattern, startPos, msg);
} else if (/^\d+$/.test(v)) {
v = parseInt(v, 10);
}
info.path[i] = e;
info.path[i] = v;
}
if (info.path.length < 0 || typeof(info.path[0]) != "number") {
if (info.path.length <= 0 || typeof(info.path[0]) != "number") {
info.path.unshift(0);
}
return info;
}
};
/**
* Parses a string with format flags and returns a format info object.
@ -424,81 +432,52 @@ MochiKit.Text._parseFormat = function (pattern, startPos, endPos) {
* @throws FormatPatternError if the format pattern was invalid
*/
MochiKit.Text._parseFormatFlags = function (pattern, startPos, endPos) {
var self = MochiKit.Text;
var info = { numeric: false, format: "s", width: 0, precision: -1,
align: ">", sign: "-", padding: " ", grouping: false };
var update = MochiKit.Base.update;
var info = { type: "string", format: "s", width: 0, precision: -1,
align: ">", sign: "", padding: " ", group: false };
// TODO: replace with MochiKit.Format.rstrip?
var flags = pattern.substring(startPos, endPos).replace(/\s+$/, "");
while (flags.length > 0) {
switch (flags.charAt(0)) {
case ">":
case "<":
info.align = flags.charAt(0);
flags = flags.substring(1);
break;
case "+":
case "-":
case " ":
info.sign = flags.charAt(0);
flags = flags.substring(1);
break;
case ",":
info.grouping = true;
flags = flags.substring(1);
break;
case ".":
var chars = /^\d*/.exec(flags.substring(1))[0];
info.precision = parseInt(chars);
flags = flags.substring(1 + chars.length);
break;
case "0":
info.padding = flags.charAt(0);
flags = flags.substring(1);
break;
case "1":
case "2":
case "3":
case "4":
case "5":
case "6":
case "7":
case "8":
case "9":
var chars = /^\d*/.exec(flags)[0];
info.width = parseInt(chars);
flags = flags.substring(chars.length);
break;
case "s":
case "r":
info.format = flags.charAt(0);
flags = flags.substring(1);
break;
case "b":
case "d":
case "o":
case "x":
case "X":
case "f":
case "%":
info.numeric = true;
info.format = flags.charAt(0);
info.radix = 10;
if (info.format === "b") {
info.radix = 2;
} else if (info.format === "o") {
info.radix = 8;
} else if (info.format === "x" || info.format === "X") {
info.radix = 16;
}
flags = flags.substring(1);
break;
default:
var msg = "unsupported format flag: " + flags.charAt(0);
throw new self.FormatPatternError(pattern, startPos, msg);
var text = pattern.substring(startPos, endPos).replace(/\s+$/, "");
var m = /^([<>+ 0,-]+)?(\d+)?(\.\d*)?([srbdoxXf%])?(.*)$/.exec(text);
var flags = m[1];
var width = m[2];
var precision = m[3];
var type = m[4];
var unmatched = m[5];
for (var i = 0; flags && i < flags.length; i++) {
var chr = flags.charAt(i);
if (chr == "<" || chr == ">") {
info.align = chr;
} else if (chr == "+" || chr == "-" || chr == " ") {
info.sign = (chr == "-") ? "" : chr;
} else if (chr == "0") {
info.padding = chr;
} else if (chr == ",") {
info.group = true;
}
}
if (width) {
info.width = parseInt(width, 10);
}
if (precision && precision.length > 1) {
info.precision = parseInt(precision.substring(1), 10);
}
if (type == "s" || type == "r") {
info.format = type;
} else if (type == "b") {
update(info, { type: "number", format: type, radix: 2 });
} else if (type == "o") {
update(info, { type: "number", format: type, radix: 8 });
} else if (type == "x" || type == "X") {
update(info, { type: "number", format: type, radix: 16 });
} else if (type == "d" || type == "f" || type == "%") {
update(info, { type: "number", format: type, radix: 10 });
}
if (unmatched) {
var msg = "unsupported format flag: " + unmatched.charAt(0);
throw new MochiKit.Text.FormatPatternError(pattern, startPos, msg);
}
return info;
}
};
/**
* Formats a value as a percentage. This method avoids multiplication
@ -510,33 +489,23 @@ MochiKit.Text._parseFormatFlags = function (pattern, startPos, endPos) {
* @param {Number} precision the number of precision digits
*/
MochiKit.Text._truncToPercent = function (value, precision) {
// TODO: This can be simplified by using the same helper function
// as roundToFixed now does.
// TODO: This can be simplified by using MochiKit.Format._shiftNumber
// as roundToFixed does.
var str;
if (precision >= 0) {
str = MochiKit.Format.roundToFixed(value, precision + 2);
} else {
str = (value == null) ? "0" : value.toString();
}
var fracPos = str.indexOf(".");
if (fracPos < 0) {
str = str + "00";
} else if (fracPos + 3 >= str.length) {
var fraction = str.substring(fracPos + 1);
while (fraction.length < 2) {
fraction = fraction + "0";
}
str = str.substring(0, fracPos) + fraction;
} else {
var fraction = str.substring(fracPos + 1);
str = str.substring(0, fracPos) + fraction.substring(0, 2) +
"." + fraction.substring(2);
var arr = MochiKit.Text.split(str, ".", 2);
var frac = MochiKit.Text.padRight(arr[1], 2, "0");
var whole = arr[0] + frac.substring(0, 2);
frac = frac.substring(2);
while (/^0[0-9]/.test(whole)) {
whole = whole.substring(1);
}
while (str.length > 1 && str.charAt(0) == "0" && str.charAt(1) != ".") {
str = str.substring(1);
}
return str;
}
return (frac.length <= 0) ? whole : whole + "." + frac;
};
/**
* Creates a new format pattern error.
@ -558,13 +527,13 @@ MochiKit.Text.FormatPatternError = function (pattern, pos, message) {
this.pattern = pattern;
this.pos = pos;
this.message = message;
}
MochiKit.Text.FormatPatternError.prototype =
new MochiKit.Base.NamedError("MochiKit.Text.FormatPatternError");
};
MochiKit.Text.FormatPatternError.prototype = new MochiKit.Base.NamedError("MochiKit.Text.FormatPatternError");
MochiKit.Text.FormatPatternError.constructor = MochiKit.Text.FormatPatternError;
//
//XXX: Internet Explorer exception handling blows
//XXX: Internet Explorer export fix
//
if (MochiKit.__export__) {
formatter = MochiKit.Text.formatter;

View File

@ -8,7 +8,7 @@ See <http://mochikit.com/> for documentation, downloads, license, etc.
***/
MochiKit.Base._module('Visual', '1.5', ['Base', 'DOM', 'Style', 'Color', 'Position']);
MochiKit.Base.module(MochiKit, 'Visual', '1.5', ['Base', 'DOM', 'Style', 'Color', 'Position']);
MochiKit.Visual._RoundCorners = function (e, options) {
e = MochiKit.DOM.getElement(e);
@ -469,6 +469,11 @@ MochiKit.Visual.Transitions.parabolic = function (pos) {
return pos * pos;
};
/** @id MochiKit.Visual.Transitions.spring */
MochiKit.Visual.Transitions.spring = function (pos) {
return 1 - (Math.cos(pos * 2.5 * Math.PI) * Math.exp(-pos * 6));
};
/** @id MochiKit.Visual.Transitions.none */
MochiKit.Visual.Transitions.none = function (pos) {
return 0;
@ -534,6 +539,11 @@ MochiKit.Base.update(MochiKit.Visual.ScopedQueue.prototype, {
e.finalize();
}, this.effects);
break;
case 'replace':
ma(function (e) {
e.cancel();
}, this.effects);
break;
}
effect.startOn += timestamp;
@ -662,8 +672,12 @@ MochiKit.Visual.Base.prototype = {
this.event('afterSetup');
}
if (this.state == 'running') {
if (this.options.transition) {
pos = this.options.transition(pos);
var trans = this.options.transition;
if (typeof(trans) == "string") {
trans = MochiKit.Visual.Transitions[trans];
}
if (typeof(trans) == "function") {
pos = trans(pos);
}
pos *= (this.options.to - this.options.from);
pos += this.options.from;
@ -1686,8 +1700,8 @@ MochiKit.Visual.squish = function (element, /* optional */ options) {
var elemClip;
options = b.update({
restoreAfterFinish: true,
scaleMode: {originalHeight: elementDimensions.w,
originalWidth: elementDimensions.h},
scaleMode: {originalHeight: elementDimensions.h,
originalWidth: elementDimensions.w},
beforeSetupInternal: function (effect) {
elemClip = s.makeClipping(effect.element);
},
@ -1958,18 +1972,5 @@ MochiKit.Visual.fold = function (element, /* optional */ options) {
};
/* end of Rico adaptation */
MochiKit.Visual.__new__ = function () {
var m = MochiKit.Base;
// Backwards compatibility aliases
m._deprecated(this, 'Color', 'MochiKit.Color.Color', '1.1');
m._deprecated(this, 'getElementsComputedStyle', 'MochiKit.Style.getStyle', '1.1');
m.nameFunctions(this);
};
MochiKit.Visual.__new__();
MochiKit.Base.nameFunctions(MochiKit.Visual);
MochiKit.Base._exportSymbols(this, MochiKit.Visual);

View File

@ -1,18 +0,0 @@
dojo.kwCompoundRequire({
"common": [
"MochiKit.Base",
"MochiKit.Iter",
"MochiKit.Logging",
"MochiKit.DateTime",
"MochiKit.Format",
"MochiKit.Async",
"MochiKit.DOM",
"MochiKit.Style",
"MochiKit.LoggingPane",
"MochiKit.Color",
"MochiKit.Signal",
"MochiKit.Position",
"MochiKit.Visual"
]
});
dojo.provide("MochiKit.*");

View File

@ -81,11 +81,11 @@ function run() {
Clipperz.PM.RunTime.mainController.run(shouldShowRegistrationForm);
//Clipperz.log("HASH: " + window.location.hash);
if (window.location.hash != "") {
window.location.hash = ""
}
//Clipperz.log("HASH cleaned");
//Clipperz.log("HASH: " + window.location.hash);
// if (window.location.hash != "") {
// window.location.hash = ""
// }
// Clipperz.log("HASH cleaned");
// #credentials=base64encoded({username:'joe', passphrase:'clipperz'})
// MochiKit.Signal.signal(Clipperz.Signal.NotificationCenter, 'doLogin', {username:'joe', passphrase:'clipperz'});
}

View File

@ -1,8 +1,11 @@
{
"copyright.values": {
"mochikit.repository": "http://svn.mochikit.com/mochikit/trunk/",
"mochikit.version": "1506"
"mochikit.repository": "https://github.com/mochi/mochikit.git",
"mochikit.version": "fe8d17bb9ac0a4e5ad4a8d5c2c94a6fac1c92d75"
},
"html.template": "index_template.html",
"js": [
"MochiKit/Base.js",
"MochiKit/Iter.js",

View File

@ -28,7 +28,6 @@ refer to http://www.clipperz.com.
<title>Clipperz.Crypto.AES_v3 - TEST</title>
<script type="text/javascript" src="../../../../js/MochiKit/MochiKit.js"></script>
<script type="text/javascript" src="../../../../js/JSLog/jslog.js"></script>
<script type="text/javascript" src="../../../SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="../../../SimpleTest/test.css">

View File

@ -32,7 +32,6 @@ refer to http://www.clipperz.com.
</script>
<script type="text/javascript" src="../../../../js/MochiKit/MochiKit.js"></script>
<script type="text/javascript" src="../../../../js/JSLog/jslog.js"></script>
<script type="text/javascript" src="../../../SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="../../../SimpleTest/test.css">

View File

@ -26,7 +26,6 @@ refer to http://www.clipperz.com.
<html>
<head>
<script type="text/javascript" src="../../../../js/MochiKit/MochiKit.js"></script>
<script type="text/javascript" src="../../../../js/JSLog/jslog.js"></script>
<script type="text/javascript" src="../../../SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="../../../SimpleTest/test.css">

View File

@ -26,7 +26,6 @@ refer to http://www.clipperz.com.
<html>
<head>
<script type="text/javascript" src="../../../../js/MochiKit/MochiKit.js"></script>
<script type="text/javascript" src="../../../../js/JSLog/jslog.js"></script>
<script type="text/javascript" src="../../../SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="../../../SimpleTest/test.css">

View File

@ -26,7 +26,6 @@ refer to http://www.clipperz.com.
<html>
<head>
<script type="text/javascript" src="../../../../js/MochiKit/MochiKit.js"></script>
<script type="text/javascript" src="../../../../js/JSLog/jslog.js"></script>
<script type="text/javascript" src="../../../SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="../../../SimpleTest/test.css">

View File

@ -26,7 +26,6 @@ refer to http://www.clipperz.com.
<html>
<head>
<script type="text/javascript" src="../../../../js/MochiKit/MochiKit.js"></script>
<script type="text/javascript" src="../../../../js/JSLog/jslog.js"></script>
<script type="text/javascript" src="../../../SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="../../../SimpleTest/test.css">

View File

@ -26,7 +26,6 @@ refer to http://www.clipperz.com.
<html>
<head>
<script type="text/javascript" src="../../../../js/MochiKit/MochiKit.js"></script>
<script type="text/javascript" src="../../../../js/JSLog/jslog.js"></script>
<script type="text/javascript" src="../../../SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="../../../SimpleTest/test.css">

View File

@ -28,7 +28,6 @@ refer to http://www.clipperz.com.
<script> jslog_config_enabled = true; </script>
<script type="text/javascript" src="../../../../js/MochiKit/MochiKit.js"></script>
<script type="text/javascript" src="../../../../js/JSLog/jslog.js"></script>
<script type="text/javascript" src="../../../SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="../../../SimpleTest/test.css">

View File

@ -26,7 +26,6 @@ refer to http://www.clipperz.com.
<html>
<head>
<script type="text/javascript" src="../../../../js/MochiKit/MochiKit.js"></script>
<script type="text/javascript" src="../../../../js/JSLog/jslog.js"></script>
<script type="text/javascript" src="../../../SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="../../../SimpleTest/test.css">

View File

@ -63,7 +63,6 @@ refer to http://www.clipperz.com.
</script>
<script type="text/javascript" src="../../../../js/MochiKit/MochiKit.js"></script>
<script type="text/javascript" src="../../../../js/JSLog/jslog.js"></script>
<script type="text/javascript" src="../../../SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="../../../SimpleTest/test.css">

View File

@ -26,7 +26,6 @@ refer to http://www.clipperz.com.
<html>
<head>
<script type="text/javascript" src="../../../../js/MochiKit/MochiKit.js"></script>
<script type="text/javascript" src="../../../../js/JSLog/jslog.js"></script>
<script type="text/javascript" src="../../../SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="../../../SimpleTest/test.css">

View File

@ -28,7 +28,6 @@ refer to http://www.clipperz.com.
<title>Clipperz.Crypto.Usage - TEST</title>
<script type="text/javascript" src="../../../../js/MochiKit/MochiKit.js"></script>
<script type="text/javascript" src="../../../../js/JSLog/jslog.js"></script>
<script type="text/javascript" src="../../../SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="../../../SimpleTest/test.css">

View File

@ -28,7 +28,6 @@ refer to http://www.clipperz.com.
<title>Clipperz.PM.Date - test</title>
<script type="text/javascript" src="../../../../js/MochiKit/MochiKit.js"></script>
<!-- script type="text/javascript" src="../../../../js/JSLog/jslog.js"></script -->
<script type="text/javascript" src="../../../SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="../../../SimpleTest/test.css">

View File

@ -28,7 +28,6 @@ refer to http://www.clipperz.com.
<title>Clipperz.PM.Proxy - TEST</title>
<script type="text/javascript" src="../../../../js/MochiKit/MochiKit.js"></script>
<script type="text/javascript" src="../../../../js/JSLog/jslog.js"></script>
<script type="text/javascript" src="../../../SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="../../../SimpleTest/test.css">

View File

@ -28,7 +28,6 @@ refer to http://www.clipperz.com.
<title>Clipperz.PM.Toll - test</title>
<script type="text/javascript" src="../../../../js/MochiKit/MochiKit.js"></script>
<script type="text/javascript" src="../../../../js/JSLog/jslog.js"></script>
<script type="text/javascript" src="../../../SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="../../../SimpleTest/test.css">

View File

@ -28,7 +28,6 @@ refer to http://www.clipperz.com.
<title>Clipperz.PM.UI.Web.MainController - test</title>
<script type="text/javascript" src="../../../../../../../js/MochiKit/MochiKit.js"></script>
<script type="text/javascript" src="../../../../../../../js/JSLog/jslog.js"></script>
<script type="text/javascript" src="../../../../../../SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="../../../../../../SimpleTest/test.css">

View File

@ -26,7 +26,6 @@ refer to http://www.clipperz.com.
<html>
<head>
<script type="text/javascript" src="../../../js/MochiKit/MochiKit.js"></script>
<script type="text/javascript" src="../../../js/JSLog/jslog.js"></script>
<script type="text/javascript" src="../../SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="../../SimpleTest/test.css">

View File

@ -101,9 +101,7 @@ refer to http://www.clipperz.com.
Clipperz_IEisBroken = true;
</script><![endif]-->
<link rel="stylesheet" type="text/css" href="../../../../css/clipperz/clipperz.css" />
<link rel="stylesheet" type="text/css" href="../../../../css/clipperz/compact.css" />
<link rel="stylesheet" type="text/css" href="../../../../css/clipperz/ytheme-clipperz.css" />
<link rel="stylesheet" type="text/css" href="../../../../css/web.css" />
</head>
<body>

View File

@ -99,9 +99,7 @@ refer to http://www.clipperz.com.
Clipperz_IEisBroken = true;
</script><![endif]-->
<link rel="stylesheet" type="text/css" href="../../../../css/clipperz/clipperz.css" />
<link rel="stylesheet" type="text/css" href="../../../../css/clipperz/compact.css" />
<link rel="stylesheet" type="text/css" href="../../../../css/clipperz/ytheme-clipperz.css" />
<link rel="stylesheet" type="text/css" href="../../../../css/web.css" />
<style>