helma/modules/helma/Skin.js

125 lines
3.4 KiB
JavaScript
Raw Normal View History

/*
* Helma License Notice
*
* The contents of this file are subject to the Helma License
* Version 2.0 (the "License"). You may not use this file except in
* compliance with the License. A copy of the License is available at
* http://adele.helma.org/download/helma/license.txt
*
* Copyright 1998-2006 Helma Software. All Rights Reserved.
*
* $RCSfile: Skin.js,v $
* $Author$
* $Revision$
* $Date$
*/
/**
* @fileoverview Fields and methods of the helma.Skin class.
* <br /><br />
* To use this optional module, its repository needs to be added to the
* application, for example by calling app.addRepository('modules/helma/Skin.js')
*/
// define the helma namespace, if not existing
if (!global.helma) {
global.helma = {};
}
/**
* Constructs a new instance of helma.Skin
* @class Instances of this class represent a Helma skin. In addition
* to the standard skin functionality this class allows creation of
* a skin based on a Base64 encoded source.
* @param {String} source The source of the skin
* @param {Boolean} encFlag If true the source will be Base64-decoded.
* @constructor
* @returns A newly created instance of helma.Skin
*/
helma.Skin = function(source, encFlag) {
/** @ignore */
var Base64 = Packages.helma.util.Base64;
if (!encFlag) {
var skin = createSkin(source);
} else {
var encoded = source;
source = new java.lang.String(source);
var bytes = Base64.decode(source.toCharArray());
var skin = createSkin(new java.lang.String(bytes, "UTF-8"));
}
/** @ignore */
this.toString = function() {
return source;
};
/**
* Returns the source of the skin as Base64 encoded string
* @returns The source of the skin as Base64 encoded string
* @type String
*/
this.valueOf = function() {
if (encFlag) {
return encoded;
}
var bytes = new java.lang.String(source).getBytes("UTF-8");
return new java.lang.String(Base64.encode(bytes));
};
/**
* Renders the skin.
* @param {Object} param An optional parameter object to pass to the skin.
*/
this.render = function(param) {
return renderSkin(skin, param);
};
/**
* Returns the rendered skin.
* @param {Object} param An optional parameter object to pass to the skin.
* @type String
*/
this.renderAsString = function(param) {
return renderSkinAsString(skin, param);
};
/**
* Returns true if the skin contains a macro with the name
* and optional handler passed as argument.
* @param {String} name The name of the macro
* @param {String} handler An optional macro handler name
* @returns True if the skin contains this macro at least once,
* false otherwise.
* @type Boolean
*/
this.containsMacro = function(name, handler) {
res.push();
res.write("<% *");
if (handler) {
res.write(handler);
res.write(".");
}
res.write(name);
res.write(" *%>");
var re = new RegExp(res.pop(), "g");
return re.test(source);
};
for (var i in this)
this.dontEnum(i);
return this;
};
helma.lib = "Skin";
helma.dontEnum(helma.lib);
for (var i in helma[helma.lib])
helma[helma.lib].dontEnum(i);
for (var i in helma[helma.lib].prototype)
helma[helma.lib].prototype.dontEnum(i);
delete helma.lib;