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/build/app.js | |
parent | c67f4bf6075844a558d137f9e4e926a4d5e53d0f (diff) |
add parser for opml
Diffstat (limited to 'js/build/app.js')
-rw-r--r-- | js/build/app.js | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/js/build/app.js b/js/build/app.js index 1338657b2..1858956fc 100644 --- a/js/build/app.js +++ b/js/build/app.js @@ -1275,6 +1275,69 @@ app.service('Loading', function () { }; }); +app.service('OPMLParser', function () { + 'use strict'; + + var parseOutline = function (outline) { + outline = $(outline); + + var url = outline.attr('xmlUrl') || outline.attr('htmlUrl'); + var title = outline.attr('title') || outline.attr('text') || url; + + // folder + if (url === undefined) { + return { + type: 'folder', + title: title, + feeds: [] + }; + + // feed + } else { + return { + type: 'feed', + title: title, + 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) { + $(root).each(function (index, outline) { + outline = $(outline); + + var type = parseOutline(outline); + + if (type === 'feed') { + root.feeds.push(type); + } else { + // only first level should append folders + if (firstLevel) { + root.folders.push(type); + } + + recursivelyParse(outline.children('outline'), type); + } + + return root; + }); + }; + + this.parse = function (xml) { + xml = $.parseXml(xml); + var root = $(xml).find('body'); + + var parsed = { + 'feeds': [], + 'folders': [] + }; + + return recursivelyParse(root, parsed, true); + }; + +}); /*jshint undef:false*/ app.service('Publisher', function () { 'use strict'; |