334 lines
7.5 KiB
JavaScript
334 lines
7.5 KiB
JavaScript
//
|
|
// 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;
|
|
};
|