// // Jala Project [http://opensvn.csie.org/traccgi/jala] // // Copyright 2004 ORF Online und Teletext GmbH // // Licensed under the Apache License, Version 2.0 (the ``License''); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an ``AS IS'' BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // // $Revision$ // $LastChangedBy$ // $LastChangedDate$ // $HeadURL$ // /** * @fileoverview Fields and methods of the jala.Rss20Writer class. */ // Define the global namespace for Jala modules if (!global.jala) { global.jala = {}; } /** * Jala dependencies */ app.addRepository(getProperty("jala.dir", "modules/jala") + "/code/XmlWriter.js"); /** * @class Class to create, modify and render standard-compliant * RSS 2.0 feeds. * @constructor * @extends jala.XmlWriter * @param {String} header Optional XML header. */ jala.Rss20Writer = function(header) { // defines the prototype of this constructor jala.XmlWriter.apply(this, arguments); // this should do the same but alas, helma throws // an error the very first time it is executed: //arguments.callee.prototype = new jala.XmlWriterInterface(); var DATEFMT = "EEE, dd MMM yyyy HH:mm:ss Z"; var CATEGORY = { name: "category", amount: Infinity, attributes: { name: "domain", } }; var ITEM = { name: "item", amount: Infinity, value: [{ name: "title", required: true }, { name: "link", }, { name: "description", }, { name: "author", }, { name: "comments", }, { name: "enclosure", attributes: [{ name: "url", required: true }, { name: "length", required: true }, { name: "type", required: true }] }, { name: "guid", attributes: [{ name: "isPermaLink", type: Boolean }] }, { name: "pubDate", type: Date, format: DATEFMT }, { name: "source", attributes: [{ name: "url", required: true }] }] }; var CHANNEL = { name: "channel", value: [{ name: "title", required: true }, { name: "link", required: true }, { name: "description", required: true }, { name: "language", }, { name: "copyright", }, { name: "managingEditor", }, { name: "webMaster", }, { name: "pubDate", type: Date, format: DATEFMT }, { name: "lastBuildDate", type: Date, format: DATEFMT }, { name: "generator", }, { name: "docs", }, { name: "cloud", attributes: [{ name: "domain", }, { name: "port", type: Number, format: "#" }, { name: "path", }, { name: "registerProcedure", }, { name: "protocol", }] }, { name: "ttl", type: Number, format: "#" }, { name: "rating", }, { name: "skipHours", }, { name: "skipDays", }] }; var IMAGE = { name: "image", value: [{ name: "url", required: true }, { name: "title", required: true }, { name: "link", required: true }, { name: "width", type: Number, format: "#" }, { name: "height", type: Number, format: "#" }, { name: "description", }] }; var TEXTINPUT = { name: "textinput", value: [{ name: "title", required: true }, { name: "description", required: true }, { name: "name", required: true }, { name: "link", required: true }] }; var ROOT = { name: "rss", attributes: [{ name: "version", value: "2.0" }] }; var xmlroot = this.createElement(ROOT); var channel = this.createElement(CHANNEL); xmlroot.setValue(channel); /** * Get the writer's root element. * @returns The writer's root element. * @type jala.XmlWriter.XmlElement */ this.getRoot = function() { return xmlroot; }; /** * Add child elements to the channel template. * @param {Array} ext List of additional child elements. */ this.extendChannel = function(ext) { this.extend(CHANNEL, ext); channel = this.createElement(CHANNEL); xmlroot.setValue(channel); return; }; /** * Get the writer's channel element. * @returns The writer's channel element. * @type jala.XmlWriter.XmlElement */ this.getChannel = function() { return channel; }; /** * Populate the channel element with data. * @param {Object} data An XmlWriter-compliant object structure. * @returns The populated channel element. * @type jala.XmlWriter.XmlElement */ this.setChannel = function(data) { return channel.populate(data); }; /** * Add child elements to the item template. * @param {Array} ext List of additional child elements. */ this.extendItem = function(ext) { this.extend(ITEM, ext); return; }; /** * Get a new and innocent item element. * @param {Object} data An XmlWriter-compliant object structure. * @returns A new and innocent item element. * @type jala.XmlWriter.XmlElement */ this.createItem = function(data) { var item = this.createElement(ITEM); item.populate(data); return item; }; /** * Add an item element to the channel element. * @param {jala.XmlWriter.XmlElement} item The item element to add. */ this.addItem = function(item) { channel.addValue(item); return; }; /** * Add a category element to an arbitrary element. * @param {String} name The name of the category. * @param {String} domain The domain of the category. * @param {jala.XmlWriter.XmlElement} parent The optional parent element. */ this.addCategory = function(name, domain, parent) { if (!parent) parent = channel; var cat = this.createElement(CATEGORY); cat.populate({ value: name, attributes: {domain: domain} }); parent.addValue(cat); return; }; /** * Populate the image element with data. * @param {Object} data An XmlWriter-compliant object structure. */ this.setImage = function(data) { var image = this.createElement(IMAGE); image.populate(data); channel.setValue(image); return; }; /** * Populate the textInput element with data. * @param {Object} data An XmlWriter-compliant object structure. */ this.setTextInput = function(data) { var textInput = this.createElement(TEXTINPUT); textInput.populate(data); channel.setValue(textInput); return; }; return this; };