diff options
author | Bernhard Posselt <dev@bernhard-posselt.com> | 2014-09-14 00:43:40 +0200 |
---|---|---|
committer | Bernhard Posselt <dev@bernhard-posselt.com> | 2014-09-14 00:43:40 +0200 |
commit | 2647d14cf062c4771b3400721b336bd5857f84f8 (patch) | |
tree | 06b382a41257550d33719b4736ea190d06eb845a /js/service | |
parent | c67f4bf6075844a558d137f9e4e926a4d5e53d0f (diff) |
add parser for opml
Diffstat (limited to 'js/service')
-rw-r--r-- | js/service/OPMLParser.js | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/js/service/OPMLParser.js b/js/service/OPMLParser.js new file mode 100644 index 000000000..6a56a6217 --- /dev/null +++ b/js/service/OPMLParser.js @@ -0,0 +1,72 @@ +/** + * ownCloud - News + * + * This file is licensed under the Affero General Public License version 3 or + * later. See the COPYING file. + * + * @author Bernhard Posselt <dev@bernhard-posselt.com> + * @copyright Bernhard Posselt 2014 + */ +app.service('OPMLParser', function () { + 'use strict'; + + var parseOutline = function (outline) { + var url = outline.attr('xmlUrl') || outline.attr('htmlUrl'); + var name = outline.attr('title') || outline.attr('text') || url; + + // folder + if (url === undefined) { + return { + type: 'folder', + name: name, + feeds: [] + }; + + // feed + } else { + return { + type: 'feed', + name: name, + url: url + }; + } + }; + + // there is only one level, so feeds in a folder in a folder should be + // attached to the root folder + var recursivelyParse = function (level, root, firstLevel) { + for (var i=0; i<level.length; i++) { + var outline = $(level[i]); + + var entry = parseOutline(outline); + + if (entry.type === 'feed') { + root.feeds.push(entry); + } else { + + // only first level should append folders + if (firstLevel) { + recursivelyParse(outline.children('outline'), entry, false); + root.folders.push(entry); + } else { + recursivelyParse(outline.children('outline'), root, false); + } + } + }; + + return root; + }; + + this.parse = function (xml) { + xml = $.parseXML(xml); + var firstLevel = $(xml).find('body > outline'); + + var root = { + 'feeds': [], + 'folders': [] + }; + + return recursivelyParse(firstLevel, root, true); + }; + +});
\ No newline at end of file |