133 lines
3.5 KiB
JavaScript
133 lines
3.5 KiB
JavaScript
|
(function() {
|
||
|
var DOMParser, find, parse;
|
||
|
|
||
|
DOMParser = (typeof window !== "undefined" && window !== null ? window.DOMParser : void 0) || (typeof require === "function" ? require('xmldom').DOMParser : void 0) || function() {};
|
||
|
|
||
|
find = function(node, list) {
|
||
|
var attributes, childNode, childNodeName, childNodes, i, match, x, _i, _j, _ref, _ref1;
|
||
|
if (node.hasChildNodes()) {
|
||
|
childNodes = node.childNodes;
|
||
|
for (i = _i = 0, _ref = childNodes.length; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {
|
||
|
childNode = childNodes[i];
|
||
|
childNodeName = childNode.nodeName;
|
||
|
if (/REF/i.test(childNodeName)) {
|
||
|
attributes = childNode.attributes;
|
||
|
for (x = _j = 0, _ref1 = attributes.length; 0 <= _ref1 ? _j < _ref1 : _j > _ref1; x = 0 <= _ref1 ? ++_j : --_j) {
|
||
|
match = attributes[x].nodeName.match(/HREF/i);
|
||
|
if (match) {
|
||
|
list.push({
|
||
|
file: childNode.getAttribute(match[0]).trim()
|
||
|
});
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
} else if (childNodeName !== '#text') {
|
||
|
find(childNode, list);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return null;
|
||
|
};
|
||
|
|
||
|
parse = function(playlist) {
|
||
|
var doc, ret;
|
||
|
ret = [];
|
||
|
doc = (new DOMParser()).parseFromString(playlist, 'text/xml').documentElement;
|
||
|
if (!doc) {
|
||
|
return ret;
|
||
|
}
|
||
|
find(doc, ret);
|
||
|
return ret;
|
||
|
};
|
||
|
|
||
|
(typeof module !== "undefined" && module !== null ? module.exports : window).ASX = {
|
||
|
name: 'asx',
|
||
|
parse: parse
|
||
|
};
|
||
|
|
||
|
}).call(this);
|
||
|
|
||
|
(function() {
|
||
|
var COMMENT_RE, EXTENDED, comments, empty, extended, parse, simple;
|
||
|
|
||
|
EXTENDED = '#EXTM3U';
|
||
|
|
||
|
COMMENT_RE = /:(?:(-?\d+),(.+)\s*-\s*(.+)|(.+))\n(.+)/;
|
||
|
|
||
|
extended = function(line) {
|
||
|
var match;
|
||
|
match = line.match(COMMENT_RE);
|
||
|
if (match && match.length === 6) {
|
||
|
return {
|
||
|
length: match[1] || 0,
|
||
|
artist: match[2] || '',
|
||
|
title: match[4] || match[3],
|
||
|
file: match[5].trim()
|
||
|
};
|
||
|
}
|
||
|
};
|
||
|
|
||
|
simple = function(string) {
|
||
|
return {
|
||
|
file: string.trim()
|
||
|
};
|
||
|
};
|
||
|
|
||
|
empty = function(line) {
|
||
|
return !!line.trim().length;
|
||
|
};
|
||
|
|
||
|
comments = function(line) {
|
||
|
return line[0] !== '#';
|
||
|
};
|
||
|
|
||
|
parse = function(playlist) {
|
||
|
var firstNewline;
|
||
|
playlist = playlist.replace(/\r/g, '');
|
||
|
firstNewline = playlist.search('\n');
|
||
|
if (playlist.substr(0, firstNewline) === EXTENDED) {
|
||
|
return playlist.substr(firstNewline).split('\n#').filter(empty).map(extended);
|
||
|
} else {
|
||
|
return playlist.split('\n').filter(empty).filter(comments).map(simple);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
(typeof module !== "undefined" && module !== null ? module.exports : window).M3U = {
|
||
|
name: 'm3u',
|
||
|
parse: parse
|
||
|
};
|
||
|
|
||
|
}).call(this);
|
||
|
|
||
|
(function() {
|
||
|
var LISTING_RE, parse;
|
||
|
|
||
|
LISTING_RE = /(file|title|length)(\d+)=(.+)\r?/i;
|
||
|
|
||
|
parse = function(playlist) {
|
||
|
var index, key, line, match, tracks, value, _, _i, _len, _ref;
|
||
|
tracks = [];
|
||
|
_ref = playlist.trim().split('\n');
|
||
|
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
||
|
line = _ref[_i];
|
||
|
match = line.match(LISTING_RE);
|
||
|
if (match && match.length === 4) {
|
||
|
_ = match[0], key = match[1], index = match[2], value = match[3];
|
||
|
if (!tracks[index]) {
|
||
|
tracks[index] = {};
|
||
|
}
|
||
|
tracks[index][key.toLowerCase()] = value;
|
||
|
}
|
||
|
}
|
||
|
return tracks.filter(function(track) {
|
||
|
return track != null;
|
||
|
});
|
||
|
};
|
||
|
|
||
|
(typeof module !== "undefined" && module !== null ? module.exports : window).PLS = {
|
||
|
name: 'pls',
|
||
|
parse: parse
|
||
|
};
|
||
|
|
||
|
}).call(this);
|