(function(exports) { var DEBUG = false; 'use strict'; var savedServices = {}; var debugEl; var audioPlayer; var videoPlayer; var imagePlayer; var discoverButton; var currentPlayer; var playerToggler; var folderList; function debugLog(msg, level) { if (!DEBUG && level === 'debug') { return; } var logEl = document.createElement('div'); logEl.textContent = msg; debugEl.appendChild(logEl); } function toggleFolder(evt) { evt.preventDefault(); var elem = evt.target; if (elem.nextSibling && elem.nextSibling.tagName == 'DIV') { // folder is opened. Close it. elem.parentElement.removeChild(elem.nextSibling); elem.classList.remove('opened'); } else { // folder is closed. Open it. debugLog(elem.serviceId, 'debug'); elem.classList.add('opened'); browseFolder( elem.dataset.serviceId, elem.hash.substr(1), evt.target); } } function togglePlayer(value) { if (typeof value != 'boolean') { value = currentPlayer.classList.contains('hide'); } audioPlayer.classList.add('hide'); videoPlayer.classList.add('hide'); imagePlayer.classList.add('hide'); if (value) { currentPlayer.classList.remove('hide'); } } function switchPlayer(type) { audioPlayer.pause(); videoPlayer.pause(); if (type == 'audio') { currentPlayer = audioPlayer; } else if (type == 'video') { currentPlayer = videoPlayer; } else if (type == 'image') { currentPlayer = imagePlayer; } togglePlayer(true); } function playFile(evt) { evt.preventDefault(); var fileType = evt.target.dataset.mime.split('/')[0].toLowerCase(); var mimeType = evt.target.dataset.mime.split('/')[1].toLowerCase(); if (evt.target.href.substr(-3) == 'ogv') { mimeType = 'video/ogg'; } else if (evt.target.href.substr(-3) == 'ogg') { mimeType = 'audio/ogg'; } switchPlayer(fileType); currentPlayer.hidden = false; currentPlayer.src = evt.target.href; currentPlayer.setAttribute('type', mimeType); currentPlayer.play(); } function browseFolder(serviceId, folderId, folderElement) { var mediaServer = savedServices[serviceId]; if (!mediaServer) { return; } folderId = folderId || ''; mediaServer.browse(folderId).then(function(response) { if (!response || !response.data) { return; } var data = response.data.Result.replace(/&/g, "&"); debugLog(data); if (data.indexOf('xmlns:dlna') == -1) { data = data.replace('