var org = {p3k: ({url:"http://www.theyworkforyou.com/rss/mp/10137.rdf", xml:"\n\n301 Moved Permanently\n\n

Moved Permanently

\n

The document has moved here.

\n\n", message:undefined, modified:(new Date(1495816693183)), baseUri:"http://p3k.org/rss/", query:"setup=true&url=http://www.theyworkforyou.com/rss/mp/10137.rdf&maxItems=5&width=207&align=left&frameColor=white&titleBarColor=white&titleBarTextColor=black&boxFillColor=white&textColor=black&fontFace=", param:{maxItems:"5", frameColor:"white", titleBarColor:"white", width:"207", fontFace:"", setup:"true", titleBarTextColor:"black", align:"left", textColor:"black", url:"http://www.theyworkforyou.com/rss/mp/10137.rdf", boxFillColor:"white"}, box:"\n\n\n\n\n\n\n
\n ${xmlButton}\n ${title}\n
\n ${date}\n
\n
\n ${image}\n ${items}\n ${input}\n
\n RSS box by p3k.org.\n
\n
\n\n", image:"\n\n", input:"
\n${description}\n \n
\n\n", item:"
\n${title}\n${break}\n${description}\n${buttons}\n

\n\n", date:"${year}-${month}-${day}, ${hours}:${minutes}h\n\n", link:"${text}\n", error:"\n\n \n RSS Box Error\n ${link}\n This output was automatically generated to report an error \n that occurred during a request to the JavaScript RSS Box Viewer.\n \n Oops, something went wrong...\n An error occurred while processing the request to the \n JavaScript RSS Box Viewer.\n \n \n An error message was returned by the server.\n ${message}\n \n \n Most likely, this might have happened because of a \n non-existent or invalid RSS feed URL. Please check and possibly correct \n your input, then try again.\n \n \n\n\n"})}; function debug(str) { return document.write('

', str, '

'); } org.p3k.RssBox = function() { var ref; var ISOPATTERN = /([0-9]{4})-([0-9]{2})-([0-9]{2})T([0-9:]+).*$/; var data = org.p3k; data.defaults = { url: "http://blog.p3k.org/rss", maxItems: 7, width: 200, align: "", frameColor: "black", titleBarColor: "lightblue", titleBarTextColor: "black", boxFillColor: "white", textColor: "black", showXmlButton: "", compact: "" }; var baseUri = data.baseUri; var getColor = function(str) { if (str.length === 6 && parseInt(str, 16) && str.indexOf("#") !== 0) { str = "#" + str; } return str.toLowerCase(); } var value; for (var i in data.defaults) { value = data.param[i]; if (!value || value.length === 0) { data.param[i] = data.defaults[i]; } else if (i.indexOf("Color") > 0) { data.param[i] = getColor(value); } } // FIXME: Ugly work-around for many boxes using too small width // values because the former version did not show the exact output. if (data.param.javascript && data.param.width < 200) { data.param.width = 200; } // Remove obsolete parameters from param and query delete data.param.javascript; data.query = data.query.replace("javascript=true", ""); var NAMESPACES = { dc: "http://purl.org/dc/elements/1.1/", rdf: "http://www.w3.org/1999/02/22-rdf-syntax-ns#" }; var getUrl = function(url) { url = baseUri + "proxy.r?" + encodeURIComponent(url); var HttpRequest = function() { return (typeof XMLHttpRequest !== "undefined") ? new XMLHttpRequest() : new ActiveXObject("Msxml2.XMLHTTP"); } var request = new HttpRequest(); request.open("GET", url, false); request.send(null); if (!request.getResponseHeader("Date")) { var cached = request; var ifModifiedSince = cached.getResponseHeader("Last-Modified") || new Date(0); // January 1, 1970 request = new HttpRequest(); request.open("GET", url, false); request.setRequestHeader("If-Modified-Since", ifModifiedSince); request.send(""); if (request.status === 304) { request = cached; } } return request; } var getDocument = function(source) { if (source) { if (document.implementation.createDocument) { var parser = new DOMParser(); var doc = parser.parseFromString(source, "text/xml"); return doc; } else if (window.ActiveXObject) { var doc = new ActiveXObject("Microsoft.XMLDOM"); doc.async = "false"; doc.loadXML(source); return doc; } } return null; } var getError = function() { var msg = null, root; if (!xml || data.message) { msg = data.message || "Unknown error."; } else if (xml.parseError && xml.parseError.errorCode) { msg = xml.parseError.reason; // IExplore } else if (root = xml.documentElement) { var errorNode; if (root.nodeName === "parsererror") { msg = xml.documentElement.textContent; // Mozilla } else if ((errorNode = root.childNodes[0]) && errorNode.nodeName === "parsererror") { msg = errorNode.textContent; // Safari } else if (!/rss|rdf|scriptingNews/i.test(xml.documentElement.nodeName)) { msg = "Incompatible data format. Are you sure this is an RSS feed?"; } } return msg; } var getNode = function(parent, name, namespace) { if (namespace) { if (typeof parent.getElementsByTagNameNS === "undefined") { var elements = parent.getElementsByTagName(namespace + ":" + name); } else { var elements = parent.getElementsByTagNameNS(NAMESPACES[namespace], name); } } else { var elements = parent.getElementsByTagName(name); } if (elements && elements[0]) { return elements[0]; } return null; } var getText = function(node) { if (node && node.childNodes && node.childNodes.length > 0) { return node.childNodes[0].nodeValue || ""; } return ""; } var trim = function(str) { if (str) { return str.replace(/^\s*(\S*)\s*$/, "$1"); } return ""; } var padZero = function(n) { if (n < 10) { return "0" + n } return n; } var encodeXml = function(str) { if (!str) { return ""; } return str.replace(//g, ">").replace(/&/g, "&"); } var render = function(template, param) { if (!template || !param) { return template; } template = template.replace(/\$\{([^}]+)\}/g, function() { var key = arguments[1]; return param[key] || ""; }); return template; } var renderDate = function(date) { if (date.constructor !== Date) { var str = String(date); var millis = Date.parse(str.replace(ISOPATTERN, "$1/$2/$3 $4")); if (millis) { date = new Date(millis); } else { date = new Date; } } return render(data.date, { year: date.getFullYear(), month: padZero(date.getMonth() + 1), day: padZero(date.getDate()), hours: padZero(date.getHours()), minutes: padZero(date.getMinutes()), seconds: padZero(date.getSeconds()), timeZone: "" // date.getTimezoneOffset() }); } var renderButtons = function(enclosure, source) { var result = ""; if (enclosure && enclosure.link) { result += render(data.image, { source: baseUri + "enclosure.gif", title: enclosure.type, link: encodeURI(enclosure.link), width: 13, height: 16 }); } if (source && source.link) { result += render(data.image, { source: baseUri + "source.gif", title: source.title, link: encodeURI(source.link), width: 15, height: 15 }); } return result; } var param = data.param; var rss = data.rss = {items: []}; var xml = getDocument(data.xml); rss.error = getError(); if (rss.error !== null) { xml = getDocument(render(data.error, { link: baseUri + "?" + encodeXml(data.query), message: encodeXml(rss.error) })); param.compact = 0; param.showXmlButton = 1; } var root = xml.documentElement; var type = root.nodeName; if (type === "scriptingNews") { var channel = getNode(xml, "header"); rss.format = "Scripting News"; rss.version = getText(getNode(channel, "scriptingNewsVersion")); rss.title = getText(getNode(channel, "channelTitle")); rss.description = getText(getNode(channel, "channelDescription")); rss.link = getText(getNode(channel, "channelLink")); if (ref = getText(getNode(channel, "imageUrl"))) { ref = rss.image = {source: ref}; ref.title = getText(getNode(channel, "imageTitle")); ref.link = getText(getNode(channel, "imageLink")); ref.width = getText(getNode(channel, "imageWidth")); ref.height = getText(getNode(channel, "imageHeight")); ref.description = getText(getNode(channel, "imageCaption")); } } else { var channel = getNode(xml, "channel"); rss.format = "RSS"; rss.version = (type === "rdf:RDF") ? "1.0" : root.getAttribute("version"); rss.title = getText(getNode(channel, "title")); rss.description = getText(getNode(channel, "description")); rss.link = getText(getNode(channel, "link")); var image = getNode(xml, "image"); if (image) { ref = rss.image = {}; ref.source = getText(getNode(image, "url")) || image.getAttribute('rdf:resource', 'rdf'); ref.title = getText(getNode(image, "title")); ref.link = getText(getNode(image, "link")); ref.width = getText(getNode(image, "width")); ref.height = getText(getNode(image, "height")); ref.description = getText(getNode(image, "description")); } } if (type === "rdf:RDF") { rss.date = renderDate(getText(getNode(channel, "date", "dc")) || data.modified); rss.rights = getText(getNode(channel, "creator", "dc")); var input = getNode(root, "textinput"); if (input && !getNode(input, "link")) { input = root.getElementsByTagName("textinput")[1]; } if (input) { ref = rss.input = {}; ref.link = getText(getNode(input, "link")); ref.description = getText(getNode(input, "description")); ref.name = getText(getNode(input, "name")); ref.title = getText(getNode(input, "title")); } } else { rss.date = renderDate(getText(getNode(channel, "lastBuildDate") || getText(getNode(channel, "pubDate"))) || data.modified); rss.rights = getText(getNode(channel, "copyright")); } var item, text, node; var items = xml.getElementsByTagName("item"); for (var i=0; i' + text + ''); } } else { ref = { title: getText(getNode(item, "title")), description: getText(getNode(item, "description")), link: getText(getNode(item, "link") || getNode(item, "guid")) }; } if (node = getNode(item, "source")) { ref.source = { link: node.getAttribute("url"), title: getText(node) } } if (node = getNode(item, "enclosure")) { ref.enclosure = { link: node.getAttribute("url"), length: node.getAttribute("length"), type: node.getAttribute("type") } } if (node = getNode(item, "category")) { ref.category = { domain: node.getAttribute("domain") || "", content: getText(node) } } rss.items.push(ref); } var item, items = ""; for (var i=0; i" : ""); if (item.link) { title += render(data.link, { link: encodeURI(item.link), text: item.title, 'class': "rssBoxItemTitle" }); } else { title += item.title; } !param.compact && (title += ""); return new String(title); // FIXME: Funny, title alone will be rendered as [object] }(), 'break': item.title && item.description ? "
" : "", description: (!param.compact || !item.title) && item.description, buttons: renderButtons(item.enclosure, item.source) }); } var box = render(data.box, { title: rss.link ? render(data.link, { link: encodeURI(rss.link), text: rss.title, 'class': "rssBoxTitle", style: "color: " + param.titleBarTextColor }) : rss.title, description: rss.description, items: items, xmlButton: param.showXmlButton && render(data.image, { link: param.url, source: baseUri + "rss.png", title: rss.format + " " + rss.version, width: 16, height: 16, align: "right", hspace: 3 }), image: !param.compact && rss.image && render(data.image, { link: encodeURI(rss.image.link), source: rss.image.source, width: rss.image.width, height: rss.image.height, title: rss.image.title, align: "right", valign: "baseline", hspace: 5, vspace: 5 }), input: !param.compact && rss.input && render(data.input, { link: encodeURI(rss.input.link), description: rss.input.description, name: rss.input.name, title: rss.input.title }), date: rss.date, width: param.width, frameColor: param.frameColor, fontFace: param.fontFace, align: param.align, titleBarColor: param.titleBarColor, titleBarTextColor: param.titleBarTextColor, boxFillColor: param.boxFillColor, textColor: param.textColor }); if (!window.rssBoxSetup) { document.write(box); } return box; }; org.p3k.RssBox();