/** * Copyright 2009 Google Inc. * * 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. */ import("stringutils.sprintf"); // TODO: validate XHTML of entries? function _xmlDate(d) { return sprintf("%04d-%02d-%02dT%02d:%02d:%02dZ", d.getUTCFullYear(), d.getUTCMonth()+1, d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds()); } // "entries" is an object with "forEach" member (an Array works). // Each entry should have these properties: // * title // * author // * published (Date) // * updated (Date) // * href (URL for HTML version) // * content (valid xhtml) // // NOTE: entries should be sorted descending by entry.updated (newest first) // function renderFeed(title, lastUpdated, entries, href) { function ampesc(url) { return url.replace(/&/g, '&'); } var r = []; r.push('', ''); r.push('' + title + ''); r.push('' + _xmlDate(lastUpdated) + ''); r.push(''); r.push(''); r.push('' + ampesc(request.url) + ''); entries.forEach(function(entry) { r.push('', '' + entry.title + '', '' + entry.author + '', '' + _xmlDate(entry.published) + '', '' + _xmlDate(entry.updated) + '', '', ''+ampesc(entry.href)+'', '', '
'+entry.content+'
', '
', '
'); }); r.push('
'); return r.join('\n'); }