diff --git a/helma/Chart.js b/helma/Chart.js index 0c366879..3de7a8e7 100644 --- a/helma/Chart.js +++ b/helma/Chart.js @@ -8,28 +8,43 @@ * * Copyright 1998-2006 Helma Software. All Rights Reserved. * - * $RCSfile: helma.Chart.js,v $ + * $RCSfile: Chart.js,v $ * $Author: czv $ - * $Revision: 1.6 $ - * $Date: 2006/04/18 13:06:58 $ + * $Revision: 1.2 $ + * $Date: 2006/04/24 07:02:17 $ */ +/** + * @fileoverview Fields and methods of the helma.Chart prototype + */ + // take care of any dependencies app.addRepository('modules/helma/jxl.jar'); - +/** + * Define the global namespace if not existing + */ if (!global.helma) { global.helma = {}; } -// -// chart package by tobi schaefer -// needs andy khan's java excel api: download jxl.jar at -// http://www.andykhan.com/jexcelapi/ -// - - +/** + * Creates a new instance of helma.Chart + * @class Instances of this class are capable of reading + * Excel spreadsheets and rendering them as XHTML table. Internally + * helma.Chart uses the Java Excel API + * by Andy Khan. + * @param {String} fpath The path to the spreadsheet file + * @param {String} prefix An optional prefix to use for all + * stylesheet classes within the rendered table + * @param {String} sheetName The name of the sheet within the + * spreadsheet file to render. If this argument is omitted, the + * first sheet is rendered. + * @returns A newly created helma.Chart instance. + * @constructor + * @author Tobi Schaefer + */ helma.Chart = function(fpath, prefix, sheetName) { var JXLPKG = Packages.jxl.Workbook; var JXLPKGNAME = "jxl.jar"; @@ -47,7 +62,7 @@ helma.Chart = function(fpath, prefix, sheetName) { "[" + JXLPKGURL + "]"); } - function getCellStyle(c) { + var getCellStyle = function(c) { if (!c) return; var result = new Object(); @@ -66,15 +81,19 @@ helma.Chart = function(fpath, prefix, sheetName) { return result; } - if (sheetName) + if (sheetName) { var sheet = workbook.getSheet(sheetName); - else + } else { var sheet = workbook.getSheet(0); + } if (!sheet) return; prefix = prefix ? prefix + "_" : "chart_"; + /** + * Renders the Excel spreadsheet as XHTML table. + */ this.render = function() { res.write('\n'); @@ -128,12 +147,18 @@ helma.Chart = function(fpath, prefix, sheetName) { workbook.close(); }; + /** + * Returns the spreadsheet as rendered XHTML table. + * @returns The rendered spreadsheet table + * @type String + */ this.renderAsString = function() { res.push(); this.render(); return res.pop(); }; + /** @ignore */ this.toString = function() { return "[helma.Chart " + file + "]"; }; @@ -145,11 +170,17 @@ helma.Chart = function(fpath, prefix, sheetName) { } +/** @ignore */ helma.Chart.toString = function() { return "[helma.Chart]"; }; +/** + * A simple example for using helma.Chart that renders + * the passed file as XHTML table to response. + * @param {String} file The path to the Excel spreadsheet file + */ helma.Chart.example = function(file) { // var file = "/path/to/file.xls"; var chart = new helma.Chart(file); diff --git a/helma/Color.js b/helma/Color.js index a7908054..a2484232 100644 --- a/helma/Color.js +++ b/helma/Color.js @@ -8,54 +8,80 @@ * * Copyright 1998-2006 Helma Software. All Rights Reserved. * - * $RCSfile: helma.Color.js,v $ - * $Author: hannes $ - * $Revision: 1.5 $ - * $Date: 2006/04/18 13:06:58 $ + * $RCSfile: Color.js,v $ + * $Author: czv $ + * $Revision: 1.2 $ + * $Date: 2006/04/24 07:02:17 $ */ +/** + * @fileoverview Fields and methods of the helma.Chart prototype + */ + +// take care of any dependencies +app.addRepository("modules/core/String.js"); + +/** + * Define the global namespace if not existing + */ if (!global.helma) { global.helma = {}; } /** - * constructor for a color object - * @param IntegerOrRgbObject the red fraction or an rgb() object - * @param Integer the green fraction - * @param Integer the blue fraction - * @return the resulting color object + * Constructs a new instance of helma.Color. + * @class Instances of this class provide methods for + * converting HTML color names into their corresponding + * RGB values and vice versa, or retrieving single RGB color values. + * @param {Number|String} R Either the red fraction of the color, + * or the name of the color. + * @param {Number} G The green fraction + * @param {Number} B The blue fraction + * @returns A newly created helma.Color instance + * @constructor */ helma.Color = function(R, G, B) { - var value = null, name, hex, rgb; + var value = null; + var name = null; + var hex = null; + var rgb = null; /** - * return the decimal value of a color object - * @return Integer the decimal value + * Returns the decimal value of this color, or of a specified + * color channel. + * @param {String} channel An optional color channel which + * decimal value should be returned. Must be either "red", + * "green" or "blue". If no channel is specified this + * method returns the decimal value of the color itself. + * @returns The decimal value of this color or a single channel. + * @type Number */ - this.valueOf = function() { - if (arguments.length > 0) { - if (!rgb) { - var compose = function(n, bits) { - var div = Math.pow(2, bits); - remainder = n % div; - return Math.floor(n/div); + this.valueOf = function(channel) { + if (channel) { + if (!rgb) { + var compose = function(n, bits) { + var div = Math.pow(2, bits); + remainder = n % div; + return Math.floor(n/div); } var remainder = value; rgb = { red: compose(remainder, 16), green: compose(remainder, 8), blue: compose(remainder, 0) - } + }; } - return rgb[arguments[0]]; + return rgb[channel]; } return value; }; /** - * return the hexidecimal value of a color object - * @return String the hexidecimal value + * Returns the hexidecimal value of this color (without + * a leading hash sign). + * @returns The hexidecimal value of this color + * @type String */ this.toString = function() { if (!value) @@ -65,36 +91,43 @@ helma.Color = function(R, G, B) { return hex; }; + /** - * return the trivial name of this color - * @return String the trivial name + * Returns the trivial name of this color + * @returns The trivial name of this color + * @type String */ this.getName = function() { return helma.Color.COLORVALUES[value]; }; - // the main code + /** + * Main constructor body + */ if (arguments.length % 2 == 0) throw("Insufficient arguments for creating Color"); if (arguments.length == 1) { - if (R.constructor == Number) { + if (R.constructor == Number) { value = R; } else if (R.constructor == String) { R = R.toLowerCase(); if (helma.Color.COLORNAMES[R]) { this.name = R; - R = helma.Color.COLORNAMES[R]; - } else if (helma.Color.COLORVALUES[R]) { - this.name = helma.Color.COLORVALUES[R]; - } else if (R.startsWith("#")) - R = R.substring(1); - value = parseInt(R, 16); + value = helma.Color.COLORNAMES[R]; + } else { + if (R.startsWith("#")) { + R = R.substring(1); + } + value = parseInt(R, 16); + this.name = helma.Color.COLORVALUES[value]; + } } - } else + } else { value = R * Math.pow(2, 16) + G * Math.pow(2, 8) + B; + } if (value == null || isNaN(value)) - throw("Cannot create Color from " + R); + throw("helma.Color: invalid argument " + R); for (var i in this) this.dontEnum(i); @@ -104,30 +137,28 @@ helma.Color = function(R, G, B) { /** - * create a helma.Color from trivial name - * @param String the color's name (like "darkseagreen") - * @return helma.Color the resulting color object + * Creates a new helma.Color instance based on a color name. + * @param {String} name The color name (eg. "darkseagreen") + * @returns An instance of helma.Color representing the color specified + * @type helma.Color */ helma.Color.fromName = function(name) { var value = helma.Color.COLORNAMES[name.toLowerCase()]; - if (!value) - value = 0; - return new helma.Color(value); + return new helma.Color(value || 0); }; /** - * transform a hsl representation of a color - * to the equivalent decimal value - * @param Integer the hue fraction - * @param Integer the saturation fraction - * @param Integer the lightness fraction - * @return Object the resulting color object - * - * note: this function is adapted from the - * HSLtoRGB conversion method as described at - * http://www1.tip.nl/~t876506/ColorDesign.html#hr - * (thanks!) + * Creates a new helma.Color instance based on a HSL color + * representation. This method is adapted from the HSLtoRGB + * conversion method as described at + * http://www1.tip.nl/~t876506/ColorDesign.html#hr. + * @param {Number} H The hue fraction of the color definition + * @param {Number} S The saturation fraction + * @param {Number} L The lightness fraction + * @returns An instance of helma.Color representing the corresponding + * RGB color definition. + * @type helma.Color */ helma.Color.fromHsl = function(H,S,L) { function H1(H,S,L) { @@ -182,7 +213,7 @@ helma.Color.fromHsl = function(H,S,L) { else if (H < 5/6) rgb = H5(H,S,L); else rgb = H6(H,S,L); - return new Color( + return new helma.Color( Math.round(rgb[0]*255), Math.round(rgb[1]*255), Math.round(rgb[2]*255) @@ -191,7 +222,9 @@ helma.Color.fromHsl = function(H,S,L) { /** - * object containig the hex values of named colors + * Contains the hexadecimal values of named colors. + * @type Object + * @final */ helma.Color.COLORNAMES = { black: 0x000000, @@ -334,14 +367,18 @@ helma.Color.COLORNAMES = { /** - * object containig the color names for specific hex values + * Contains the color names for specific hex values + * @type Object + * @final */ helma.Color.COLORVALUES = {}; -for (var i in helma.Color.COLORNAMES) +for (var i in helma.Color.COLORNAMES) { helma.Color.COLORVALUES[helma.Color.COLORNAMES[i]] = i; +} +/** @ignore */ helma.Color.toString = function() { return "[helma.Color]"; };