diff options
Diffstat (limited to 'debian/webinterface-default')
18 files changed, 3806 insertions, 0 deletions
diff --git a/debian/webinterface-default/addon.xml b/debian/webinterface-default/addon.xml new file mode 100644 index 0000000..e61262a --- /dev/null +++ b/debian/webinterface-default/addon.xml @@ -0,0 +1,145 @@ +<?xml version="1.0" encoding="UTF-8"?> +<addon + id="webinterface.default" + version="2.2.33" + name="Default webinterface" + provider-name="Team Kodi"> + <requires> + <import addon="xbmc.json" version="6.0.0"/> + </requires> + <extension + point="xbmc.webinterface"/> + <extension point="xbmc.addon.metadata"> + <summary lang="af_ZA">Span Kodi Web Koppelvlak. (Kodi se verstek web koppelvlak)</summary> + <summary lang="am_ET">የ Kodi የዌብ ገጽታዎች (የ Kodi ነባር የዌብ ገጽታዎች)</summary> + <summary lang="ar_SA">واجهه فريق إكس بي إم سي للشبكة العنكبوتية (واجهه الشبكة العنكبوتية المبدئية لـ إكس بي إم سي)</summary> + <summary lang="be_BY">Team Kodi Web Interface. (Kodi's default web interface)</summary> + <summary lang="bg_BG">Уеб интерфейс на Team Kodi. (стандартният уеб интерфейс на Kodi)</summary> + <summary lang="ca_ES">Interfície web de l'equip Kodi. (la interfície web per defecte del Kodi)</summary> + <summary lang="cs_CZ">Webové rozhraní týmu Kodi (Výchozí webové rozhraní Kodi).</summary> + <summary lang="cy_GB">Rhyngwyneb Gwe Team Kodi (Rhyngwyneb gwe rhagosodedig Kodi)</summary> + <summary lang="da_DK">Team Kodi Web-grænseflade. (Kodi's standard webgrænseflade)</summary> + <summary lang="de_DE">Team Kodi Webinterface. (Standardwebinterface von Kodi)</summary> + <summary lang="el_GR">Διεπαφή Ιστού της Team Kodi. (Προεπιλεγμένη διεπαφή ιστού του Kodi)</summary> + <summary lang="en_AU">Team Kodi Web Interface. (Kodi's default web interface)</summary> + <summary lang="en_GB">Team Kodi Web Interface. (Kodi's default web interface)</summary> + <summary lang="en_NZ">Team Kodi Web Interface. (Kodi's default web interface)</summary> + <summary lang="en_US">Team Kodi Web Interface. (Kodi's default web interface)</summary> + <summary lang="es_AR">Interfaz Web del Equipo de Kodi. (Interfaz web por defecto de Kodi)</summary> + <summary lang="es_ES">Interfaz web de Kodi. (Interfaz web por defecto de Kodi)</summary> + <summary lang="es_MX">Interfaz Web del Equipo de Kodi (Interfaz Web por defecto de Kodi)</summary> + <summary lang="et_EE">Kodi meeskonna veebikeskkond. (Vaikimisi keskkond)</summary> + <summary lang="eu_ES">Kodi taldean Web Interfazea. (Kodi-ren lehenetsiriko web interfazea)</summary> + <summary lang="fa_AF">نمایه وب تیم Kodi.(رابط پیش فرض Kodi)</summary> + <summary lang="fa_IR">رابط وب تیم Kodi. (رابط وب استاندارد Kodi)</summary> + <summary lang="fi_FI">Team Kodin web-käyttöliittymä. (Kodin oletus-web-käyttöliittymä)</summary> + <summary lang="fr_CA">Interface Web de l'équipe Kodi. (Interface Web par défaut de Kodi)</summary> + <summary lang="fr_FR">Interface Web de l'Équipe Kodi (interface d'origine de Kodi)</summary> + <summary lang="gl_ES">Interface web da equipa de Kodi. (Interface web predefinida de Kodi)</summary> + <summary lang="he_IL">ממשק הדפדפן הרשמי של Kodi. (ברירת המחדל)</summary> + <summary lang="hr_HR">Tim Kodi Web sučelje. (Kodijevo uobičajeno web sučelje)</summary> + <summary lang="hu_HU">Az Kodi csapat Webes kezelőfelülete (Kodi alapértelmezett webes kezelőfelülete)</summary> + <summary lang="id_ID">Antar Muka Web Tim Kodi. (Antar muka web bawaan Kodi)</summary> + <summary lang="is_IS">Team Kodi Vefviðmót. (Sjálfgefið vefviðmót á Kodi)</summary> + <summary lang="it_IT">Interfaccia Web del Team Kodi. (Interfaccia web di default per Kodi)</summary> + <summary lang="ja_JP">Team Kodi Web Interface. (Kodi's default web interface)</summary> + <summary lang="ko_KR">Team Kodi 웹 인터페이스. (Kodi 기본 웹 인터페이스)</summary> + <summary lang="lt_LT">Komandos Kodi Web sąsaja.(Kodi numatytoji žiniatinklio sąsaja)</summary> + <summary lang="lv_LV">Team Kodi tīmekļa saskarne. (Kodi noklusētā tīmekļa saskarne)</summary> + <summary lang="mk_MK">Веб интерфејс на Kodi тимот. (Kodi's подразбирачки веб интерфејс)</summary> + <summary lang="mn_MN">Kodi багийн вэб интерфэйс. (Kodi-ийн үндсэн вэб интерфэйс)</summary> + <summary lang="ms_MY">Antaramuka Sesawang Pasukan-Kodi (antaramuka sesawang lalai Kodi) </summary> + <summary lang="mt_MT">Web interface ta' Team Kodi. (Il-Web interface normali ta' Kodi)</summary> + <summary lang="my_MM">Team Kodi ဝက်ဘ် အသွင်အပြင် (Kodi ၏ မူရင် ဝက်ဘ် အသွင်အပြင်)</summary> + <summary lang="nb_NO">Team Kodi nettgrensesnitt. (Kodis standard nettgrensesnitt)</summary> + <summary lang="nl_NL">Team Kodi Webinterface. (Kodi's standaard webinterface)</summary> + <summary lang="pl_PL">Interfejs webowy Kodi. (Domyślny)</summary> + <summary lang="pt_BR">Interface Web da Equipe Kodi. (interface web padrão do Kodi)</summary> + <summary lang="pt_PT">Interface da Web da Team Kodi. (Interface da Web predefinida do Kodi)</summary> + <summary lang="ro_RO">Interfață web Kodi. (interfață web implicită pentru Kodi)</summary> + <summary lang="ru_RU">Веб-интерфейс от разработчиков Kodi (веб-интерфейс Kodi по умолчанию).</summary> + <summary lang="sk_SK">Webové rozhranie tímu Kodi. (predvolené webové rozhranie pre Kodi)</summary> + <summary lang="sl_SI">Spletni vmesnik ekipe Kodi. (Privzet spletni vmesnik za Kodi)</summary> + <summary lang="sr_RS">Web интерфејс Kodi Тима (подразуевани web интерфејс Kodi-jа)</summary> + <summary lang="sr_RS@latin">Web interfejs Kodi Tima (podrazuevani web interfejs Kodija)</summary> + <summary lang="sv_SE">Team Kodi webbgränsnitt. (Kodi's standardwebbgränssnitt)</summary> + <summary lang="szl">Webowy interfejs ôd Team Kodi (wychodny webowy interface we Kodi).</summary> + <summary lang="ta_IN">கோடி குழுமத்தின் இணைய இடைமுகம். (கோடியின் நிரந்தர இணைய இடைமுகம்)</summary> + <summary lang="te_IN">టీమ్-కోడి వెబ్ ఇంటర్ఫేస్. (కోడి యొక్క డిఫాల్ట్ వెబ్ ఇంటర్ఫేస్)</summary> + <summary lang="tg_TJ">Интерфейси веби гурӯҳи кории Kodi Web. (Интерфейси веби пешфарз барои Kodi)</summary> + <summary lang="th_TH">ทีมส่วนประสานหน้าเว็บ Kodi (ส่วนประสานหน้าเว็บพื้นฐานของ Kodi)</summary> + <summary lang="tr_TR">Kodi Takımı Web Arayüzü. (Kodi'nin varsayılan web arayüzü)</summary> + <summary lang="uk_UA">Веб-інтерфейс Kodi (Типовий веб-інтерфейс для Kodi)</summary> + <summary lang="uz_UZ">Kodi guruhi veb Interfeysi. (Kodi andoza veb interfeysi)</summary> + <summary lang="vi_VN">Đội ngũ giao diện Web Kodi. (Giao diện Web mặc định của Kodi)</summary> + <summary lang="zh_CN">Kodi 团队开发的 Web 界面。(Kodi 的默认 web 界面)</summary> + <summary lang="zh_TW">Kodi團隊網頁介面。(Kodi的預設網頁介面)</summary> + <description lang="af_ZA">Verstek web koppelvlak vir Kodi; Ontwerp vir toestelle van alle resolusies</description> + <description lang="am_ET">ነባር የዌብ ገጽታዎች ለ Kodi ፡ የተነደፈው ለሁሉም አካላቶች resolutions ነው </description> + <description lang="ar_SA">واجهه الشبكة العنكبوتية المبدئية لـ إكس بي إم سي، مُصمَمة لتناسب كافة قياسات أبعاد الشاشات</description> + <description lang="be_BY">Стандартны вэб-інтэрфэйс да Kodi; распрацаваны для прыладаў зь любымі разрознасьцямі</description> + <description lang="bg_BG">Стандартния уеб интерфейс на Kodi; Направен е за устройства с най-различни резолюции</description> + <description lang="ca_ES">Interfície web per defecte del Kodi; Dissenyada per dispositius de totes les resolucions</description> + <description lang="cs_CZ">Výchozí webové rozhraní Kodi navržené pro zařízení s libovolným rozlišením</description> + <description lang="cy_GB">Rhyngwyneb gwe rhagosodedig Kodi. Wedi ei gynllunio ar gyfer cydraniad pob dyfais</description> + <description lang="da_DK">Standard webgrænseflade til Kodi; designet til enheder i alle opløsninger</description> + <description lang="de_DE">Standard Kodi Webinterface - Für alle Geräte und Auflösungen geeignet</description> + <description lang="el_GR">Προεπιλεγμένη διεπαφή ιστού για το Kodi. Σχεδιασμένη για συσκευές όλων των αναλύσεων.</description> + <description lang="en_AU">Default web interface for Kodi; Designed for devices of all resolutions</description> + <description lang="en_GB">Default web interface for Kodi; Designed for devices of all resolutions</description> + <description lang="en_NZ">Default web interface for Kodi; Designed for devices of all resolutions</description> + <description lang="en_US">Default web interface for Kodi; Designed for devices of all resolutions</description> + <description lang="es_AR">Interfaz web por defecto de Kodi. Diseñada para dispositivos de cualquier resolución</description> + <description lang="es_ES">Interfaz web por defecto de Kodi. Diseñada para dispositivos de cualquier resolución</description> + <description lang="es_MX">Interfaz Web por defecto para Kodi; Diseñado para dispositivos de todas las resoluciones</description> + <description lang="et_EE">Kodi vaikimisi veebikeskkond; Disainitud erinevate resolutsioonidega seadmetele.</description> + <description lang="eu_ES">Kodi-ren lehenetsiriko web interfazea. Erresoluzio guztietako gailentzat diseinatua</description> + <description lang="fa_AF">رابط پیش فرض Kodiوطراحی شده برای هر رزولیشن</description> + <description lang="fa_IR">رابط استاندارد وب برای Kodi. قابل استفاده برای همه دستگاه ها و همه رزولوشن ها</description> + <description lang="fi_FI">Kodin oletus-web-käyttöliittymä. Suunniteltu käytettäväksi kaiken kokoisilla laitteilla.</description> + <description lang="fr_CA">Interface Web par défaut de Kodi - Conçue pour les appareils de toutes résolutions</description> + <description lang="fr_FR">Interface Web d'origine de Kodi ; adaptée aux appareils de toutes résolutions</description> + <description lang="gl_ES">Interface web predefinida para Kodi, deseñada para dispositivos de todas as resolucións</description> + <description lang="he_IL">ממשק דפדפן ברירת המחדל עבור Kodi; מותאם למכשירים בעלי אבחנות שונות</description> + <description lang="hr_HR">Uobičajeno web sučelje za Kodi; Dizajnirano za uređaje svih razlučivosti</description> + <description lang="hu_HU">A Kodi alapértelmezett webes kezelőfelülete; Minden felbontásra alkalmas</description> + <description lang="hy_AM">Նախնական տեսք Kodi-ի համար; Նախատեսված է բոլոր կրիչների համար</description> + <description lang="id_ID">Antar muka web bawaan bagi Kodi; Dirancang untuk perangkat dengan semua resolusi</description> + <description lang="is_IS">Sjálfgefið vefviðmót fyrir Kodi; Hannað fyrir tæki með allskonar upplausnir</description> + <description lang="it_IT">Interfaccia Web di default per Kodi; Realizzata per periferiche con qualunque risoluzione</description> + <description lang="ja_JP">Kodi のデフォルト Web インターフェースです。さまざまな解像度のデバイス用にデザインされています。</description> + <description lang="ko_KR">Kodi 기본 웹 인터페이스; 모든 해상도의 기기를 위해 디자인 됨</description> + <description lang="lt_LT">Numatytoji Kodi Web sąsaja skirta visų rezoliucijų prietaisams</description> + <description lang="lv_LV">Noklusētā Kodi tīmekļa sakarne; Piemērota visu izšķirtspēju iekārtām</description> + <description lang="mk_MK">Подразбирачки веб интерфејс за Kodi; Дизајниран за уреди со сите резолуции</description> + <description lang="mn_MN">Kod-ийн үндсэн вэб интерфэйс; Бүх төрлийн нарийвчлалтай төхөөрөмжид зориулагдсан.</description> + <description lang="ms_MY">Antaramuka sesawang lalai untuk Kodi; Direka untuk peranti pelbagai resolusi</description> + <description lang="mt_MT">Il-Web interface in-normali ta' Kodi; Iddiżinjata għal apparat ta' kull reżoluzzjoni</description> + <description lang="my_MM">Kodi အတွက် မူရင်း ဝက်ဘ် အသွင်ပြင် ၊ စက်များ အားလုံး၏ resolutions အတွက် ရေးဆွဲထားသည်။</description> + <description lang="nb_NO">Standard nettgrensesnitt for Kodi; Laget for alle oppløsninger</description> + <description lang="nl_NL">Standaard Kodi-webinterface; geschikt voor alle resoluties</description> + <description lang="pl_PL">Domyślny interfejs webowy Kodi; Zaprojektowany dla urządzeń o ekranach w dowolnej rozdzielczości</description> + <description lang="pt_BR">Interface web padrão para Kodi; Concebida para dispositivos de todas as resoluções</description> + <description lang="pt_PT">Interface da Web ppredefinida do Kodi; Criada para dispositivos de todas as resoluções.</description> + <description lang="ro_RO">Interfață web implicită pentru Kodi, realizată de echipa Kodi pentru dispozitive cu orice rezoluție.</description> + <description lang="ru_RU">Веб-интерфейс Kodi по умолчанию. Разработан для устройств с любыми разрешениями.</description> + <description lang="si_LK">Kodi' සඳහා නියත වෙබ් අතුරුමුහුණත; සෑම විභේදනයකම උපකරණ සඳහා නිර්මාණය කර ඇත</description> + <description lang="sk_SK">Predvolené webové rozhranie pre Kodi; Navrhnuté pre zariadenia zobrazujúce v akomkoľvek rozlíšení</description> + <description lang="sl_SI">Privzet spletni vmesnik za Kodi, ustvarjen za naprave vseh ločljivosti</description> + <description lang="sr_RS">Подразумевани web интерфејс Kodi; Намењен уређајима свих резолуција</description> + <description lang="sr_RS@latin">Podrazumevani web interfejs Kodi; Namenjen uređajima svih rezolucija</description> + <description lang="sv_SE">Standardwebbgränssnitt för Kodi; Utformat för alla enheter oavsett skärmupplösning</description> + <description lang="szl">Wychodny webowy interface we Kodi. Zrychtowany dlŏ maszin we wszyjskich rozdziylczościach.</description> + <description lang="ta_IN">கோடி இற்கான நிரந்தர இணைய இடைமுகம்; சகல சாதனங்களின் திரைகளுக்கும் வடிவமைக்கப்பட்டது</description> + <description lang="te_IN">కోడి డిఫాల్ట్ వెబ్ ఇంటర్ఫేస్; అన్ని వైశాల్యాలు పరికరాల కోసం రూపొందించబడింది</description> + <description lang="tg_TJ">Интерфейси веби пешфарз барои Kodi; Барои ҳар гуна дастгоҳ бо возеҳии экранаш гуногун эҷод карда шудааст</description> + <description lang="th_TH">ส่วนประสานหน้าเว็บพื้นฐานสำหรับ Kodi ได้ออกแบบรองรับความละเอียดหน้าจอของอุปกรณ์ทั้งหมด</description> + <description lang="tr_TR">Kodi için varsayılan web arayüzü; Bütün çözünürlüklerde tüm cihazlar için dizayn edilmiştir.</description> + <description lang="uk_UA">Типовий веб-інтерфейс для Kodi; Розроблений для пристроїв з будь-якою роздільною здатністю</description> + <description lang="uz_UZ">Kodi uchun andoza veb interfeysi; barcha ekran o'lchamlari bilan uskunalar uchun yaratilgan</description> + <description lang="vi_VN">Giao diện Web mặc định cho Kodi; Thiết kế cho các thiết bị ở tất cả độ phân giải khác nhau</description> + <description lang="zh_CN">Kodi 的默认 web 界面;为支持所有分辨率的设备而设计</description> + <description lang="zh_TW">Kodi的預設網頁介面;針對所有解析度的設備而設計</description> + <platform>all</platform> + </extension> +</addon> diff --git a/debian/webinterface-default/css/core.css b/debian/webinterface-default/css/core.css new file mode 100644 index 0000000..5371c4a --- /dev/null +++ b/debian/webinterface-default/css/core.css @@ -0,0 +1,794 @@ +body { + font-family: Arial, Verdana, sans-serif; + margin: 0; + padding: 0; +} + +#header { + position: relative; + height: 50px; + border-bottom: 1px solid #000; + z-index: 200; + background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAVIAAAAxCAYAAACIwiGvAAAACXBIWXMAAAsTAAALEwEAmpwYAAA7r2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS41LWMwMjEgNzkuMTU1NzcyLCAyMDE0LzAxLzEzLTE5OjQ0OjAwICAgICAgICAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgICAgICAgICAgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNCAoTWFjaW50b3NoKTwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOkNyZWF0ZURhdGU+MjAxNC0xMi0wNVQxNDozMDoyNyswMTowMDwveG1wOkNyZWF0ZURhdGU+CiAgICAgICAgIDx4bXA6TW9kaWZ5RGF0ZT4yMDE0LTEyLTA2VDE4OjI2OjUwKzAxOjAwPC94bXA6TW9kaWZ5RGF0ZT4KICAgICAgICAgPHhtcDpNZXRhZGF0YURhdGU+MjAxNC0xMi0wNlQxODoyNjo1MCswMTowMDwveG1wOk1ldGFkYXRhRGF0ZT4KICAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9wbmc8L2RjOmZvcm1hdD4KICAgICAgICAgPHBob3Rvc2hvcDpDb2xvck1vZGU+MzwvcGhvdG9zaG9wOkNvbG9yTW9kZT4KICAgICAgICAgPHhtcE1NOkluc3RhbmNlSUQ+eG1wLmlpZDozZGEwMjM1Zi1iOTdlLTQ3ODMtOTZjMy0xMDBhYzMzYWI5OGQ8L3htcE1NOkluc3RhbmNlSUQ+CiAgICAgICAgIDx4bXBNTTpEb2N1bWVudElEPmFkb2JlOmRvY2lkOnBob3Rvc2hvcDo2YmMwNTFmNC1iY2I0LTExNzctYTRhYy1lNmU3M2I3NjVlMDI8L3htcE1NOkRvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+eG1wLmRpZDo1ZTc3Y2MyYS00OTE2LTQ4ZjctOGJiZC05YjYyM2Q1NTc1YjU8L3htcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOkhpc3Rvcnk+CiAgICAgICAgICAgIDxyZGY6U2VxPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5jcmVhdGVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6NWU3N2NjMmEtNDkxNi00OGY3LThiYmQtOWI2MjNkNTU3NWI1PC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDE0LTEyLTA1VDE0OjMwOjI3KzAxOjAwPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNCAoTWFjaW50b3NoKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPnNhdmVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6NDIyYTA5YzQtZjMwZi00OGM3LWFlYTUtMDZmYzk3NmZlMTk3PC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDE0LTEyLTA1VDE0OjQwOjQ5KzAxOjAwPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNCAoTWFjaW50b3NoKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmNoYW5nZWQ+Lzwvc3RFdnQ6Y2hhbmdlZD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPnNhdmVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6M2RhMDIzNWYtYjk3ZS00NzgzLTk2YzMtMTAwYWMzM2FiOThkPC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDE0LTEyLTA2VDE4OjI2OjUwKzAxOjAwPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNCAoTWFjaW50b3NoKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmNoYW5nZWQ+Lzwvc3RFdnQ6Y2hhbmdlZD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgIDwvcmRmOlNlcT4KICAgICAgICAgPC94bXBNTTpIaXN0b3J5PgogICAgICAgICA8dGlmZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgogICAgICAgICA8dGlmZjpYUmVzb2x1dGlvbj43MjAwMDAvMTAwMDA8L3RpZmY6WFJlc29sdXRpb24+CiAgICAgICAgIDx0aWZmOllSZXNvbHV0aW9uPjcyMDAwMC8xMDAwMDwvdGlmZjpZUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6UmVzb2x1dGlvblVuaXQ+MjwvdGlmZjpSZXNvbHV0aW9uVW5pdD4KICAgICAgICAgPGV4aWY6Q29sb3JTcGFjZT42NTUzNTwvZXhpZjpDb2xvclNwYWNlPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+MzM4PC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjQ5PC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAg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') 1px 1px no-repeat #fff; +} + +#remoteContainer { + background: url("../images/remote.jpg") no-repeat; + width: 659px; + height: 213px; + position: relative; + margin: auto; + margin-top: 50px; +} + +.remote_key { + cursor: pointer; + position: absolute; +} + +#navigation { + float: right; +} + +#spinner { + float: right; + padding: 11px 10px; +} + +#commsErrorPanel { + float: left; + line-height: 50px; + background: #c00; + color: #fff; + font-size: 20px; + padding-left: 10px; + width: 330px; +} + +#navigation ul { + list-style-type: none; + border-right: 1px solid #969696; + margin: 0; + padding: 0; +} + +#navigation ul li { + float: left; + color: #000; + cursor: pointer; + line-height: 50px; + margin: 0; + padding: 0 24px; + border-left: 1px solid #969696; + font-family: Verdana, sans-serif; + font-size: 18px; + font-weight: 700; +} + +#navigation ul li.selected, +#navigation ul li:hover { + background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAzCAIAAADZxfV4AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjgxMkRGQzczQkFDMDExREY5RDE0QzJCMjZBM0JGMURBIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjgxMkRGQzc0QkFDMDExREY5RDE0QzJCMjZBM0JGMURBIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6ODEyREZDNzFCQUMwMTFERjlEMTRDMkIyNkEzQkYxREEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6ODEyREZDNzJCQUMwMTFERjlEMTRDMkIyNkEzQkYxREEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4vOcxrAAAAVUlEQVR42lyMUQ7AMAhCF+9/px5MIFNpl2YfREF8z1orSAaAYAnUnsdzdiR+vRLsuzNZ36bLyLM3p36zuhpWzp/7Zn/c5tA8zc3eeUvXbi/tXHwFGAC2dpagcbC63AAAAABJRU5ErkJggg%3D%3D') repeat-x; + color: #fff; +} + +.floatableAlbum { + float: left; + width: 130px; + height: 150px; + padding: 10px 10px 15px 10px; +} + +.floatableMovieCover, +.floatableProfileThumb { + float: left; + width: 130px; + height: 200px; + padding: 10px; +} + +.floatableAlbum:hover, +.floatableTVShowCover:hover, +.floatableMovieCover:hover, +.floatableProfileThumb:hover { + background: #aeaeae; +} + +.albumView .floatableAlbum:hover { + background: transparent; +} + +.tvshowContainer .floatableTVShowCover:hover { + background: #fff; +} + +.floatableTVShowCover { + float: left; + padding: 10px; + width: 379px; + height: 70px; +} + +.floatableTVShowCoverSeason { + width: 500px; + height: 70px; + margin-top: 30px; +} + +.toggle .activeMode { + font-weight: 700; +} + +#tvshowLibraryContainer { + padding-top: 40px; +} + +#libraryContainer .floatableAlbum, +#movieLibraryContainer .floatableMovieCover, +#profilesContainer .floatableProfileThumb, +#tvshowLibraryContainer .floatableTVShowCover { + cursor: pointer; +} + +.floatableAlbum div.imgWrapper, +.floatableMovieCover div.imgWrapper, +.floatableProfileThumb div.imgWrapper, +.floatableTVShowCover div.imgWrapper { + width: 130px; + height: 130px; + display: table-cell; + vertical-align: middle; + text-align: center; + overflow: hidden; +} + +.floatableTVShowCoverSeason div.imgWrapper { + margin: auto; + height: 70px; + width: 379px; + display: block; +} + +div.imgWrapper div.inner { + overflow: hidden; + width: 130px; +} + +.floatableMovieCover div.imgWrapper, +.floatableMovieCover div.imgWrapper div.inner, +.floatableProfileThumb div.imgWrapper, +.floatableProfileThumb div.imgWrapper div.inner { + height: 190px; +} + +#overlay { + top: 50px; + left: 0; + right: 0; + bottom: 150px; + background: #3f3f3f; + position: fixed; + opacity: 0.8; + z-index: 2000; + /* Above contentContainer's */ +} + +.floatableTVShowCover div.imgWrapper, +.floatableTVShowCover img, +.floatableTVShowCover div.imgWrapper div.inner, +.floatableTVShowCoverSeason div.imgWrapper, +.floatableTVShowCoverSeason img, +.floatableTVShowCoverSeason div.imgWrapper div.inner { + height: 70px; + width: 379px; +} + +.floatableAlbum img { + width: 130px; +} + +.floatableMovieCover img, +.floatableProfileThumb img { + height: 180px; +} + +.floatableAlbum p.album, +.floatableMovieCover p.album, +.floatableProfileThumb p.album { + font-size: 12px; + font-weight: 700; + color: #000; + text-align: center; + margin: 0 -5px; + padding: 0; + width: 130px; + white-space: nowrap; + overflow: hidden; +} + +.floatableAlbum p.artist, +.floatableMovieCover p.artist, +.floatableProfileThumb p.artist { + font-size: 11px; + color: #777; + text-align: center; + margin: 0; + padding: 0; +} + +.contentContainer { + overflow-x: hidden; + overflow-y: auto; + position: absolute; + top: 51px; + bottom: 1px; + left: 0; + right: 0; + background: #fff; + padding-bottom: 149px; +} + +.footerPadding { + clear: both; +} + +.albumContainer { + top: 74px; +} + +.albumView .trackRow td, +.seasonView .episodeRow td { + cursor: pointer; + line-height: 14px; + font-size: 14px; + padding: 1px 0; + padding-left: 4px; +} + +.albumView .tr0, +.seasonView .tr0 { + background-color: #efefef; +} + +.albumView .tr0:hover, +.albumView .tr1:hover, +.seasonView .tr0:hover, +.seasonView .tr1:hover { + background-color: blue; + color: #fff; +} + +.seasonView .tr0:hover td.info, +.seasonView .tr1:hover td.info { + background-color: cyan; +} + +.albumView, +.seasonView { + width: 100%; + height: 100%; + border-collapse: collapse; +} + +.seasonView td.episodeThumb { + text-align: center; +} + +.seasonView td.episodeNumber { + text-align: left; +} + +.seasonView td.info { + background: url('data:image/png;base64,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%3D%3D') no-repeat; + background-size: 40%; + background-position: 50% 50%; +} + +.seasonView td.episodeThumb img { + height: 30px; +} + +.albumView td.albumThumb { + padding-left: 0px; + border-right: 1px solid #aeaeae; +} + +.albumView td.time, +.albumView th.time { + text-align: right; + padding-right: 4px; +} + +.albumView tr.headerRow, +#albumSelector table { + background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAXCAIAAABF+LJYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjk4NTQ0NDZGQ0U1ODExREZCMjM4ODgyQjJEQTE5ODBBIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjk4NTQ0NDcwQ0U1ODExREZCMjM4ODgyQjJEQTE5ODBBIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6OTg1NDQ0NkRDRTU4MTFERkIyMzg4ODJCMkRBMTk4MEEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6OTg1NDQ0NkVDRTU4MTFERkIyMzg4ODJCMkRBMTk4MEEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7FuFIdAAAAOklEQVR42kyMUQoAMAhC0+j+J+s2ffXTVtDYA1EUpLsjImhmVFU2IsKqGm1uz8zxX7sBeF1zv44AAwDVBhSDNN7oJQAAAABJRU5ErkJggg%3D%3D') repeat-x; +} + +.albumView th, +.seasonView th { + font-size: 11px; + text-align: left; + border-left: 1px solid #aeaeae; + border-bottom: 1px solid #aeaeae; + padding-left: 4px; + height: 13px; + padding-top: 1px; +} + +.albumView tr.headerRow, +.seasonView tr.headerRow { + background-position: 0 -1px; +} + +.seasonView tr.headerRow th.thumbHeader { + width: 40px; +} + +.albumView .albumThumb, +.albumView .albumBG { + width: 120px; + background: #efefef; + border-right: 1px solid #aeaeae; + vertical-align: top; +} + +.albumView .fillerTrackRow2 td { + height: 100%; + line-height: 100%; +} + +/* Album Selector */ + +#albumSelector { + height: 23px; + font-family: Arial, sans-serif; + font-size: 12px; + font-weight: 700; +} + +#albumSelector table { + width: 100%; + border: 1px solid #aeaeae; + border-top: 0px; + height: 23px; + border-collapse: collapse; +} + +#albumSelector td { + padding-top: 2px; +} + +#albumSelector .prevAlbum, +#albumSelector .allAlbums { + background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAALCAIAAADJDItPAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkJCOEEyQzlGQ0U1QTExREY4MUI0RjIyREY1QUFBQTlBIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkJCOEEyQ0EwQ0U1QTExREY4MUI0RjIyREY1QUFBQTlBIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QkI4QTJDOURDRTVBMTFERjgxQjRGMjJERjVBQUFBOUEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6QkI4QTJDOUVDRTVBMTFERjgxQjRGMjJERjVBQUFBOUEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6Hnv/HAAAA1ElEQVR42mxQOw5EUBSd9/IyCxA2YQlaO1JbgkVIiIpKgR1oNBqdEKERVD7xmzkzk5gYc6r7zn3nnnMvWdf1dkHf923bchxHH2eM49g0je/7qqoOw8AOxbIs6CVJYppmnudgtm1j+75DhGllWdq2HYbhIQDPpmmCjed5ruvO8/wTghVFoWlalmXXgPCiPM8riiLLMiFkPQM/SNd1sEfINE0ty4rj+FDruv5qfx4wxrQoigzDqKoKDIrvYvc3JEkSRTEIAsdxKKUEsf9era5rQRCeAgwAxPWf44ZS0FcAAAAASUVORK5CYII%3D') no-repeat; +} + +/* This must appear before #albumSelector .allAlbums */ + +#albumSelector .allAlbums { + width: 94px; + border-right: 1px solid #aeaeae; + text-align: center; + padding-left: 10px; + cursor: pointer; + background-position: 10px center; +} + +#albumSelector .activeAlbumTitle { + text-align: center; +} + +#albumSelector .nextAlbum { + background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAALCAIAAADJDItPAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjdCMUE3MDBGQ0U1QzExREZBREU0QkQ5NzdFRENBNkQxIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjdCMUE3MDEwQ0U1QzExREZBREU0QkQ5NzdFRENBNkQxIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6N0IxQTcwMERDRTVDMTFERkFERTRCRDk3N0VEQ0E2RDEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6N0IxQTcwMEVDRTVDMTFERkFERTRCRDk3N0VEQ0E2RDEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz62tw0dAAAA3UlEQVR42myQPQ5EUBSF573414jQUEh0Go1GrRGFKKiESuxCYztWYAMqy6ATEg0NmbkiMWTmlPede75zH5rneZomURR5nn/9CC/LUhRFXdfjOK7r+n4K9X2f5zkYNU1LksQwDJZlSZI8t1HXdVmWXWm2bUdRpKoqsBBCBIz2fb+em6Zp29b3fc/zoBAG3v4UTKqqKssSgo/tbdvubQHsOE4QBJIkEVDvHm6aZhzHuq5zHIcx/rIVRUnT1LIsaE5R1OkmwELTdBiGrusKgsAwzB10HDYMgyzLf3/tI8AAgcVrkw2eqPgAAAAASUVORK5CYII%3D') no-repeat; +} + +#albumSelector .prevAlbum, +#albumSelector .nextAlbum { + width: 28px; + border-left: 1px solid #aeaeae; + cursor: pointer; + background-position: center center; +} + +/* Movie Overlay */ + +.moviePopoverContainer, +.episodePopoverContainer { + z-index: 3000; + /* Above overlay */ + border: 1px solid #000; + padding: 10px; + margin: 10px; + position: fixed; + background: #3f3f3f; + top: 50px; + bottom: 150px; + left: 10%; + right: 10%; + opacity: 0.9; +} + +.episodePopoverContainer { + bottom: none; + top: 30%; +} + +.moviePopoverContainer .closeButton, +.episodePopoverContainer .closeButton { + float: right; + cursor: pointer; +} + +.moviePopoverContainer .movieCover { + height: 100%; + padding-right: 20px; + float: left; + z-index: 3100; +} + +.episodePopoverContainer .episodeCover { + width: 40%; + padding-right: 20px; + float: left; + z-index: 3100; +} + +.moviePopoverContainer .movieTitle, +.episodePopoverContainer .episodeTitle { + font-size: 24px; + font-weight: 700; + color: #fff; + margin: 0; +} + +.moviePopoverContainer .runtime, +.moviePopoverContainer .director, +.moviePopoverContainer .genre, +.moviePopoverContainer .plot, +.episodePopoverContainer .runtime, +.episodePopoverContainer .director, +.episodePopoverContainer .genre, +.episodePopoverContainer .episode, +.episodePopoverContainer .season, +.episodePopoverContainer .plot { + color: #fff; +} + +.movieTitle .year, +.episodeTitle .year { + font-weight: 400; + font-size: 18px; +} + +.playIcon { + background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAH4AAAB+CAYAAADiI6WIAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjY3NEJBNzU2QkM0OTExREZBNjg4RTExODNGRTMxNzlDIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjY3NEJBNzU3QkM0OTExREZBNjg4RTExODNGRTMxNzlDIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6Njc0QkE3NTRCQzQ5MTFERkE2ODhFMTE4M0ZFMzE3OUMiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6Njc0QkE3NTVCQzQ5MTFERkE2ODhFMTE4M0ZFMzE3OUMiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6EY6YgAAAd50lEQVR42uxdCYwc1Zn+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%3D') center center no-repeat; + position: absolute; + z-index: 3500; + cursor: pointer; + opacity: 0.8; + width: 100px; +} + + +.playIcon:hover { + opacity: 1; +} + +/* Effects */ + +#topScrollFade { + position: fixed; + top: 51px; + height: 33px; + z-index: 101; + left: 0; + right: 0; + background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAhCAYAAAAYucG/AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjYwREM0NTA2QkM1MzExREY4OEFDQUU5NTc5MTFCNkUxIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjYwREM0NTA3QkM1MzExREY4OEFDQUU5NTc5MTFCNkUxIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NjBEQzQ1MDRCQzUzMTFERjg4QUNBRTk1NzkxMUI2RTEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NjBEQzQ1MDVCQzUzMTFERjg4QUNBRTk1NzkxMUI2RTEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4NLytwAAAANElEQVR42mL4DwRMDEAAIv6AiN8g4hec+AkifmAhvoOIb6isb3jFvmHRhs3kn6gu+A0QYACIHCJCHDLYgwAAAABJRU5ErkJggg%3D%3D') top left repeat-x; +} + +/* Now Playing */ + +#footerPopover { + position: fixed; + height: 150px; + bottom: 0; + left: 0; + right: 16px; + z-index: 10000; + /* Top most always */ + background: #333; + opacity: 0.98; +} + +#nowPlayingPanel { + height: 130px; + width: 600px; + padding: 10px; +} + +#audioCoverArt img { + width: 100px; + height: 100px; + float: left; + padding: 0 10px 10px 0; +} + +#videoCoverArt img { + height: 100px; + float: left; + padding: 0 10px 10px 0; +} + +#audioArtistTitle, +#videoShowTitle { + float: left; + padding: 5px 5px 0 0; + color: #777; +} + +#audioAlbumTitle:before { + content: ' - '; +} + +#audioAlbumTitle { + padding-top: 5px; + color: #777; +} + +#audioTrackWrap, +#videoTrackWrap { + width: 365px; + white-space: nowrap; + overflow: hidden; +} + +#audioTrackTitle, +#videoTitle { + color: #fff; + white-space: nowrap; + overflow: hidden; + font-size: 16px; + font-weight: 700; + padding: 5px 0; + width: 365px; +} + +#audioDuration, +#videoDuration { + float: right; + color: #808080; + font-size: 20px; + font-weight: 700; + padding: 0 5px 5px 0; +} + +#progressBar { + background: url('data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAICAAAAAAdccqdAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABZJREFUCB1jsGfiYOJh4gJCdiY2JlYABfcAiC/XwOEAAAAASUVORK5CYII=') repeat-x scroll 0 0 transparent; + border: 1px solid rgba(0, 0, 0, 0.7); + float: left; + height: 8px; + padding: 0; + position: relative; + width: 365px; + -moz-border-radius: 20px 20px 20px 20px; + border-radius: 20px 20px 20px 20px; + -webkit-border-radius: 20px 20px 20px 20px; +} + +#progressBar .elapsedTime { + background: url('data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAICAAAAAAdccqdAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABdJREFUCB1j+M/0g+kr02emj0D4mekrAD41B7hJ9Jz5AAAAAElFTkSuQmCC') repeat-x scroll 0 0 transparent; + height: 8px; + left: 0; + min-width: 5px; + width: 0; + position: relative; + -moz-border-radius: 20px 20px 20px 20px; + border-radius: 20px 20px 20px 20px; + -webkit-border-radius: 20px 20px 20px 20px; +} + +#progressBar .progressIndicator { + background: url('data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAMpJREFUeNp8kD0OgzAMhe0QWAB1RoKbVKrE0L3H4AztSM/AYaoiVepNuABDGPhN/dIODJQnWYmTL8+O2VpLUJZlJ1kKiSN99ZaomqZ5IWGAApVKqWsYhuT7vqPGcaSu62hZlrvAN07TNBfoGccxMTOtBRNjDM3zfNYoBxc4bElrDbCAY+t53oF2JKCBI/V9v8c5V4D1NE0XebUJSTWAD4URoMdhGJzzOnD2m0LlfiZ9lkmS2CiKbBAELrDHGe7A8Grg+Z+B10g+AgwAK9Fl++J3PdcAAAAASUVORK5CYII=') no-repeat scroll 0 0 transparent; + height: 10px; + left: 0; + position: absolute; + top: -1px; + width: 10px; +} + +#nowPlayingPlaylist, +#nextTrack { + width: 416px; + float: left; + cursor: pointer; + z-index: 1000; +} + +#nowPlayingPlaylist { + clear: both; + color: #fff; + position: relative; + top: -16px; +} + +#nowPlayingPlaylist ul { + list-style-type: none; + margin: 0; + padding: 0; +} + +#nowPlayingPlaylist li { + padding-bottom: 2px; + padding-left: 4px; +} + +#nowPlayingPlaylist li:hover { + cursor: pointer; + background: #004986; +} + +#nowPlayingPlaylist li span.duration, +#nextTrack span.duration { + float: right; + height: 14px; + padding-right: 4px; + font-size: 12px; +} + +#nowPlayingPlaylist li div.trackInfo, +#nextTrack div.trackInfo { + width: 364px; + height: 14px; + font-size: 12px; + white-space: nowrap; + overflow: hidden; +} + +#nowPlayingPlaylist li.activeItem div.trackInfo { + width: 362px; + padding-left: 10px; + background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAOCAYAAAAWo42rAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIZJREFUeNpi/P//PwMxgImBSECyQlWCKkFuBOI9QBwLxBxQPgaGMS4A8R0g7gNiFWwKYVb/gGI/IJ4GxJHoNjNCg+ckEHMA8V8gFgPi10BsiKyQBeZUIGYFYi4gPg7Ek9FNhCnkBJkOxAuBeBYQv8Ll621A7AfETIR8rYBLAQwzUj2uAQIMAPXkkCPo9C41AAAAAElFTkSuQmCC') no-repeat; +} + +#nextTrack, +#nextText, +#nowPlayingPlaylist { + background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAOCAIAAABhIeELAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADhJREFUeNoMxSEOACAMA8CmAdai5ibBwf9fCOJy8DQyE1WFtTfuPZRMW4y/FFSIIwZ7/1ojgCfAAEzrAiPgCWVXAAAAAElFTkSuQmCC') repeat-x #606060; + border: 1px solid #222; +} + +#nextTrack { + border-left: 0px; + color: #ddd; + padding-left: 4px; +} + +#nextText { + clear: both; + float: left; + color: #457cbf; + font-size: 12px; + font-weight: 700; + width: 54px; + border-right: 0px; + height: 14px; + padding-left: 4px; +} + +#playbackControls span, +#playbackControls span:hover { + width: 24px; + height: 24px; + float: left; + display: block; + -moz-background-size: 24px; + background-size: 24px; + -webkit-background-size: 24px; + -o-background-size: 24px; + -khtml-background-size: 24px; + cursor: pointer; +} + +#pbPrev { + background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAxVJREFUeNrsWU1q20AUluxgsEBgCDjUYBAYui7kArlAu4+7T/dt9m0OkAMkB+gFeoFeoNB1wCAwuNhgCLjIUDDuN+W5vEzejEbyWKqKBx4zaKQ33/d+5k/hdrsNmlzCI4EjAc8EwjAspQh6eqhiSBcSQdrCaxtIBllDVhjrseRYfgjg2w6qM8ipAXBeUYSWkDnG/VUZAXyjwA4JuK+iiEwx/uagBChUEsHiamAVEisVItCTCd9GFGIq1HoGHWleaJUmgHeV1fvaY+X6Gb5blohl5cEBpKN1LaBv6pUA3ku0kNkQ8MW+sQPdfSLCPbKE7tQLAQG8Co9JkcRznBBGNINZSRQiIISN0TKeiOjGehZOzgQoYUdVgbeQmPDE5phbOVNlwsOmCvBkxJTCdFcSwvOstCx6hiypVMJOKt4lTGjcgHAMnQlQQnEXznwmrKMX/kzP7NEp4XLywBmf531MlSVJLGidkXBZCTyxfs0bzpkBl0yAZp6/sV9mhfXshSXPBcJn9UDM2rnbXSi8I3ltecfWdw4Z5AzzaMAnEuiy9srBSOckLwRwA0UOzY9CXwz5gOad9K1WVgZ8wYnwMl/K13ssRsrq73WL7ayO6pMDcAlHlEegzeIvKwE8JotfGPquIJcF8yBjq287j8A+W4ALAi9Z/SWq2wJWdyo+CVxKwFn5fIhZquVR188CifhPEvgCeWcBqvoeqiCw0c6wRZLtG6o3kK9C3wNkjOZ9idyKJHwmAplpznUkoe57rtG8kbyBvnvyxo8CarsGfCKBtWnVK0hEhdRbKWzIU2PJU4YSm9amE0Oy7Y6QvT33MWojNkYIXEmeQnVNU29egvdMk4F4pMSzV2zBSOvc0NHVS8I2l99djpQc8CCotwwMuKwE5qzdoXubOqzf1y695k4E6Dj3xAvSce7A4Du69aVjrW0hm2qH6lHFDhhplwrTQisx3RLza5SI7muqsH6ibZtT0631/30zZ1HanLtRC4nm3E5bwikImvJ/QLt2SYIm/qFhCpr7j0xIvOb9pbSEVv3/iZtWjgTqLr8FGAAhgOqLmi3nxQAAAABJRU5ErkJggg%3D%3D') no-repeat; +} + +#pbPrev:hover { + background: url('data:image/png;base64,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') no-repeat; +} + +#pbStop { + background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAp1JREFUeNrsWV9rwkAMb3UIFsaEgmJhUBB82Os+1D7APsc+2l73IAiFQUWh4BAqlBWXg7ClsWnvSv/Y0cBRLXfN75fkcrk7+3K5WH2WkdVzGQh0LXf0j23blT4C82gCjxm0e2jqtyN0jaEl0E7QjqAvqajvD3PmjyEBGOvCw0XgVUQRiUBv1CoBGKOs/YjWrkOUJz5B/7FRAtB3DA8fwyUvPL7QqjF8K80Z66C3HoQwUwQCPrYWAtBPKVzlWF25PzSNZ5w3HoYg98YWvhfXRgDBr6GNWfwGVSciI+KzeaQ8sJFIGBEQwKt4PdSZDkHPHOdVKQltAmidJwK+0DI1kODGUvo+uJcp5rKFbNUWeDSg+vYGdVmoe1VpJQaWHssUQZPgGYmAvHIQiz4BDJ0leXXQzdE1kVC66BxbIiZtD3gsrYUdlDkh6s7DJBPABYfm5rBsYWnICykznIvYSj1AwSemdUrNJCLmBbewGs3ptDdIgWuDou4E4DaaffdkfXDZ3MgSIPUKrU105RXas2bfd2gvmn2PhICDGFMphBwWPonVsSCGRMB4RWDKqstbkVjAeEWAhtT5hgicpbAfNvUDgYFAVr6l2d6xTAWMVwTOUr7tWBwpO44K8u1EKmHbFMQwkdYnfjKXwoCYMJ7x2qNA3kxqIQMO9AgnRoyFxVxECCx0CRgUZ6ayYNhKs1DEwsjtMHxcFj7lBHAjQTt6eRuJFsCP2S4syttYjQq2c79ekLZzDYvHrB9qL2RYwu7Iqzke6LZlfaVrTl7tpNJ+VDApQ5ayfDx4ahq80uGzzBNWLSW2VvaQad0kCeFkbluY/f712WgJiX6cTjMS/bwfYLnZt/p4Q5OT5vp3RyYs9f27pRTiuft74mFPPBAwlx8BBgDogIiBqL/sAAAAAABJRU5ErkJggg%3D%3D') no-repeat; +} + +#pbStop:hover { + background: url('data:image/png;base64,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') no-repeat; +} + +#pbPause { + background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAApxJREFUeNrsWY1qgzAQ1rYILQiC0EKhIPQR9lB9mj3A3ml9gUJBEAoTBEFQGEh3GddxvSXROGvqMBD8T74v+XKXO93r9eqMucyckZeJgO2yoBeu63ZqBNZRAAcf6hLqCupc8loNtYRaQS2gr7xjX3fXLr1hQgC+8+CwgRoqADcVQSiD+gH9fg5GAN4XYHcIvK8iiCTQf/1QAiiVSDLiomMhiUJIBNopJd+uUGJCaoGijbhJWp0JwHti1Nfstpj6C3yXddCymMEtVI89SqG9pFcC8E7EJFMj8PSv2oG210iEzkgGbce9EJCAF/I4myy8lgZhjxZMS8KIgEQ2ypHpiQgfrF9y4gRmDQt2MPA4gDFapFtZIw4zT4ymMqKyeTR4RoJasQjxGG0ldmRRiQV7HniHcMZ+HcSxa00AFxTV4aXPBdtyFr7NM7kVIq5WM7Chdr4PU9mRRIp+RoZLS+Bu9C1vNi8KXHICuOJ/tN/Fw/Y8CxldCzKLtGDXPjlvvd2Fht/g8EJuHaHzA3n+zj45wPNjy+ZzMvo+x8UltCTnxZPELIUCn5QAdeXVkxCoFPikBOZEf+UzoGc45lNQPxGYCOgJ1CyGtV4YjrqJQKmzuZbKUoFPSqBSeGWbxdf5poXE692isMCgk1fWEffiB3Z9Mmg70O0OeGoxB83V6DDE5ilss6GDd04Nz48d9R+yzWXeJiamgLeW5bNV4NIS+CDnHuZtbFgf0a+nwKUmgOHc3SyowrkHgvf46KvCWpUjS1hQvR94AvYsqZAYeWLMEtM0ygqTTkOMfsS2zbEuaz3TWA4R+aQsMxANAJ5n5rSR4f/OjWpIjCc7TT4c7/8BlnaJnDH+oSENjPcfmWThje8vpUZa9v8TTzHxRMC8fAkwABzhg7l0cw47AAAAAElFTkSuQmCC') no-repeat; +} + +#pbPause:hover { + background: url('data:image/png;base64,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') no-repeat; +} + +#pbPlay { + background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAv9JREFUeNrsWl1q20AQ9k8RRGASELjEUBAY8tDXXCDXaHuAHqAHaA+Q9r19L31vLpAL9LUPBoOgoJCAwMUgg6hxZ2DaTiea1Wq1trolA4tiodV838zs7Owow91uNwhZRoPA5YFA3/KI/xgOh04vgXUUweUExgQG/h0rj5YwKhhrGCvQVznq+4P5rx8tCcDcBC4JAXcRJFKA3uKgBGAOWvsJWduHoCe+gf7VXgnAs2O4pBQudeHxnaxawru2NXNj8taxEmZIIJNzvRCA51DhvMbq6P68bTzTuplRCEpvLOF9pTcCBP4MxljEb+a6EAWRVKwj9MBCI9GKgAIe4/XOZzoEPVNaV40krAmQdZ4y8EbLeCAhjYX6vkovc8xNG9n8UODJgPjuBekakO65004MLGciU2T7BC9IZOxWTFjsCVDonLJbd7Y52hMJ1MXX2ClhsvbATKS1vIcyJyfddZh0ArTh8NycN20sYv7Ekxe2wnAJYWv0AAdfta1TQF6DomeeSBTCC0lbArcOetEDr4DEe9PiayG31gRYvcJrE1c5h/HRgzdWIiONTR6IRfhUHZVzb0wcw6gSYRSbCByJ6tKXoDc+A4kLx/mlgvEeAX5C23hOi+iBSyBx6eCNjXaK7ONMfNHRG//Eof63N0LuSuB54ovXrsQBBSvON5BhFr4J/NBWu0f5BMDftpxzpGC8R2Cj5VsPckNWdwmbWMuOI0O+jbQS1kGuYTx3AU8YIm1/kp25LUwoGeMTUZe7LNR38N6rDu/gLZySMBqzEK8+H3dQjNZ+0RG8xFDYpNFChFHioPQDAH8Jo9NBiHRHJgK1XQm4l7LStaLOwNZS6QSeXXvoUIypI/KLAPZQM9uuBLdcpB3nlOpx7Wnhz4T1c+udmErYG3ZrSg3dgwjpmvIUrJX2I4Mlc5GyUmo87Rs86khF5slda6GlaDKd7ZOE0plbGkP2v+6NNpAIozstSIT5fUDk5nQQ4heamjQX3jcyZasP7yulEs/9fycOUR7+V6Jv+SnAAJqtxFYrTd5IAAAAAElFTkSuQmCC') no-repeat; +} + +#pbPlay:hover { + background: url('data:image/png;base64,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%3D%3D') no-repeat; +} + +#pbNext { + background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAvpJREFUeNrsWV1q20AQtmJjiCA0IAgkUDAUAi0ECr1ALpADuNdo39u+pweI39tcoAfoBQKFQAuGgCGQkIAhxUEGkeB+E0ZhWO9IK3llVcYDg2ytdne++dvZ3WA2m7WaTMEawBqARwBBEJQaBGN08dgGb4Hpd6h8GoMT8AR8h/mSkvP5AYC+ER4RC16GCMgY846XCgB9SNsvWds+iCxxifnvKgWAb9t49NhdbO7xl7UaY6xHS9+QrfVCcTMCMDL7egGA72jCVxatk/mvivozx80eu6BpjQuMF3sDwMLvg9uG/47KBqIBpGfEEVlgqIEoBEARnvz11mc6xDw7HFe5IJwBsHbeCOEzNeMBhKksmu+3aeUiAF6LYKtU+AwQlBD+FAaA9xRgu6LfhWua8wBimxNGSteY+8oZALvOgRjgFm2XyywRIAPFw454dZ66kguAnkhvCfvh45IBtDn+0rRNK/YoFwB3fCvGGhVd6j2CiDjFpvSLFCll3rD0kwtLUpfwrNAxe4BNNicAN/9BxXzjDEDUK7I2yTLxIXhLaXvHmUzr+wF8Aj7KASBlCFlG1QKh4T55ZUIf/J2EtbTRu29o6yt99/mb3Rw3Sgw3CrMAbBrVpQuRACesUdMa9D/V9N4CbhQrMs4B6Ijf04KTuFjjqCSAqSKjNYgXoWdrWHZp9P8T2o61uClDnYoyRz+j7ZAtcu9joo1WdTTJaLv3NUlVAAbgU6XtB/g97eKqAPCgRbsjXZNwSH0DxSIf0fYZPCk47qYi41wMTLV860Ck8YEi3Bn4iyyJC1KoZcdORr7tUlntsJhNWLifSvtXtJ0uuGfuautTx1j1qNKLBWLaWGTtfc/YLWxaH7I7DRd0c3mEE5vVqK2clptrKifO66zkIM+BsMDTYUJeOT023CiqUfjIcJ+50n71dmQrsSdu/KnESpwLrcTJnDLoczrzLLz/s9EcEM04nTZANPN+wMjNvVYTb2gsaa55d2TKUt+8W0rFn+u/J24irQHUTf8EGABePUpJ23F8cgAAAABJRU5ErkJggg%3D%3D') no-repeat; +} + +#pbNext:hover { + background: url('data:image/png;base64,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') no-repeat; +} + +.tvshowContainer .seasonPicker { + position: absolute; + right: 5px; + top: 0px; +} + + +.tvshowContainer .active { + font-weight: bold; +} + +.tvshowContainer .episodeListingsContainer { + position: absolute; + top: 40px; + left: 500px; + width: 500px; + padding-bottom: 149px; +} + +.tvshowContainer .episodeListingsContainer ul { + list-style-type: none; + margin: 0; + padding: 0; +} + +.episodeListingsContainer li { + clear: both; +} + +.episodeListingsContainer li img { + height: 30px; + float: left; +} + +.tvshowContainer .showDetails { + text-align: center; + width: 100%; + height: 18px; + position: relative; + padding-top: 5px; + background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAXCAIAAABF+LJYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjk4NTQ0NDZGQ0U1ODExREZCMjM4ODgyQjJEQTE5ODBBIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjk4NTQ0NDcwQ0U1ODExREZCMjM4ODgyQjJEQTE5ODBBIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6OTg1NDQ0NkRDRTU4MTFERkIyMzg4ODJCMkRBMTk4MEEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6OTg1NDQ0NkVDRTU4MTFERkIyMzg4ODJCMkRBMTk4MEEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7FuFIdAAAAOklEQVR42kyMUQoAMAhC0+j+J+s2ffXTVtDYA1EUpLsjImhmVFU2IsKqGm1uz8zxX7sBeF1zv44AAwDVBhSDNN7oJQAAAABJRU5ErkJggg%3D%3D') repeat-x; +} + +.contentContainer .toggle { + position: absolute; + font-size: 12px; + font-weight: 500; + left: 5px; + top: 4px; +} + +.tvshowContainer .showDetails p { + margin: 0; + padding: 0; +} + +.tvshowContainer .showDetails .showTitle { + font-size: 12px; + font-weight: 700; +} + +.tvshowContainer .showDetails span.heading { + font-weight: 700; +}
\ No newline at end of file diff --git a/debian/webinterface-default/css/ipad.css b/debian/webinterface-default/css/ipad.css new file mode 100644 index 0000000..9441022 --- /dev/null +++ b/debian/webinterface-default/css/ipad.css @@ -0,0 +1,9 @@ +.contentContainer { + overflow-x: hidden; + overflow-y: auto; + position: absolute; + height: auto; + bottom: auto; + background: #fff; + padding-bottom: 150px; +}
\ No newline at end of file diff --git a/debian/webinterface-default/favicon.ico b/debian/webinterface-default/favicon.ico Binary files differnew file mode 100644 index 0000000..078637f --- /dev/null +++ b/debian/webinterface-default/favicon.ico diff --git a/debian/webinterface-default/icon.png b/debian/webinterface-default/icon.png Binary files differnew file mode 100644 index 0000000..cca2499 --- /dev/null +++ b/debian/webinterface-default/icon.png diff --git a/debian/webinterface-default/images/DefaultAlbumCover.png b/debian/webinterface-default/images/DefaultAlbumCover.png Binary files differnew file mode 100644 index 0000000..bbfd653 --- /dev/null +++ b/debian/webinterface-default/images/DefaultAlbumCover.png diff --git a/debian/webinterface-default/images/DefaultVideo.png b/debian/webinterface-default/images/DefaultVideo.png Binary files differnew file mode 100644 index 0000000..1aa81a1 --- /dev/null +++ b/debian/webinterface-default/images/DefaultVideo.png diff --git a/debian/webinterface-default/images/ajax-loader.gif b/debian/webinterface-default/images/ajax-loader.gif Binary files differnew file mode 100644 index 0000000..4fb7c23 --- /dev/null +++ b/debian/webinterface-default/images/ajax-loader.gif diff --git a/debian/webinterface-default/images/close-button.png b/debian/webinterface-default/images/close-button.png Binary files differnew file mode 100644 index 0000000..628fbf6 --- /dev/null +++ b/debian/webinterface-default/images/close-button.png diff --git a/debian/webinterface-default/images/remote.jpg b/debian/webinterface-default/images/remote.jpg Binary files differnew file mode 100755 index 0000000..8e10d59 --- /dev/null +++ b/debian/webinterface-default/images/remote.jpg diff --git a/debian/webinterface-default/index.html b/debian/webinterface-default/index.html new file mode 100755 index 0000000..40b5303 --- /dev/null +++ b/debian/webinterface-default/index.html @@ -0,0 +1,73 @@ +<!DOCTYPE html> +<html> + <head> + <title>Kodi</title> + <meta http-equiv="Content-Language" content="EN" /> + <meta http-equiv="Content-Type" content="UTF-8" /> + <!-- <link rel="search" href="provider.xml" type="application/opensearchdescription+xml" title="Kodi Library" /> --> + <link rel="icon" href="favicon.ico" type="image/x-icon"> + <link rel="shortcut icon" href="favicon.ico" type="image/x-icon"> + <!-- <link href="/images/logo.png" rel="image_src" /> --> + <meta name="robots" content="NOINDEX, NOFOLLOW"> + <link href="css/core.css?1.3.57" rel="stylesheet" type="text/css"> + <link href="css/ipad.css?1.0.5" rel="stylesheet" media="only screen and (max-device-width: 1024px)" type="text/css"> + </head> + <body> + <div id="header"> + <div id="commsErrorPanel" style="display: none;"></div> + <div id="navigation"> + <ul> + <li id="profiles">Profiles</li> + <li id="remoteControl">Remote</li> + <li id="movieLibrary">Movies</li> + <li id="tvshowLibrary">TV Shows</li> + <li id="musicLibrary">Music</li> + </ul> + </div> + <img src="images/ajax-loader.gif" alt="Loading please wait" id="spinner" style="display: none"> + </div> + <div id="body"> + <div id="topScrollFade" style="display: none;"></div> + <div id="content"></div> + <div id="overlay" style="display: none;"></div> + </div> + <div id="footerPopover"> + <div id="nowPlayingPanel" style="display: none;"> + <div id="nowPlayingContent"> + <div id="audioDescription"> + <div id="audioCoverArt"></div> + <div id="audioTrackWrap"> + <div id="audioArtistTitle"></div> + <div id="audioAlbumTitle"></div> + </div> + <div id="audioTrackTitle"></div> + <div id="audioDuration"></div> + </div> + <div id="videoDescription"> + <div id="videoCoverArt"></div> + <div id="videoTrackWrap"> + <div id="videoShowTitle"></div> + </div> + <div id="videoTitle"></div> + <div id="videoDuration"></div> + </div> + </div> + <div id="playbackControls"> + <span id="pbPrev" title="Previous"></span> + <span id="pbPause" title="Pause"></span> + <span id="pbPlay" title="Play"></span> + <span id="pbStop" title="Stop"></span> + <span id="pbNext" title="Next"></span> + <div id="progressBar"> + <div class="elapsedTime" style="width: 0%"></div> + <span class="progressIndicator"></span> + </div> + </div> + <span id="nextText">Next:</span> + <div id="nextTrack" style="display: none;"></div> + <div id="nowPlayingPlaylist" style="display: none;"></div> + </div> + </div> + <script type="text/javascript" src="js/xbmc.launcher.js?v=2.1.0"></script> + </body> +</html> diff --git a/debian/webinterface-default/js/MediaLibrary.js b/debian/webinterface-default/js/MediaLibrary.js new file mode 100755 index 0000000..3c1a1bc --- /dev/null +++ b/debian/webinterface-default/js/MediaLibrary.js @@ -0,0 +1,1420 @@ +/* + * Copyright (C) 2005-2013 Team XBMC + * http://xbmc.org + * + * This Program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This Program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with XBMC; see the file COPYING. If not, see + * <http://www.gnu.org/licenses/>. + * + */ + +var MediaLibrary = function () { + this.init(); +}; +MediaLibrary.prototype = { + playlists: {}, + + init: function () { + this.bindControls(); + this.getPlaylists(); + }, + bindControls: function () { + $('#musicLibrary').click(jQuery.proxy(this.musicLibraryOpen, this)); + $('#movieLibrary').click(jQuery.proxy(this.movieLibraryOpen, this)); + $('#tvshowLibrary').click(jQuery.proxy(this.tvshowLibraryOpen, this)); + $('#pictureLibrary').click(jQuery.proxy(this.pictureLibraryOpen, this)); + $('#remoteControl').click(jQuery.proxy(this.remoteControlOpen, this)); + $('#profiles').click(jQuery.proxy(this.profilesOpen, this)); + $('#overlay').click(jQuery.proxy(this.hideOverlay, this)); + $(window).resize(jQuery.proxy(this.updatePlayButtonLocation, this)); + $(document).on('keydown', jQuery.proxy(this.handleKeyPress, this)); + $(document).on('contextmenu', jQuery.proxy(this.handleContextMenu, this)); + }, + resetPage: function () { + $('#musicLibrary').removeClass('selected'); + $('#movieLibrary').removeClass('selected'); + $('#tvshowLibrary').removeClass('selected'); + $('#remoteControl').removeClass('selected'); + $('#pictureLibrary').removeClass('selected'); + $('#profiles').removeClass('selected'); + this.hideOverlay(); + }, + replaceAll: function (haystack, needle, thread) { + return (haystack || '').split(needle || '').join(thread || ''); + }, + getPlaylists: function () { + xbmc.rpc.request({ + 'context': this, + 'method': 'Playlist.GetPlaylists', + 'timeout': 3000, + 'success': function (data) { + if (data && data.result && data.result.length > 0) { + $.each($(data.result), jQuery.proxy(function (i, item) { + this.playlists[item.type] = item.playlistid; + }, this)); + } + }, + 'error': function (data, error) { + xbmc.core.displayCommunicationError(); + setTimeout(jQuery.proxy(this.updateState, this), 2000); + } + }); + }, + remoteControlOpen: function (event) { + this.resetPage(); + this.textBuffer = ''; + $('#remoteControl').addClass('selected'); + $('.contentContainer').hide(); + var libraryContainer = $('#remoteContainer'); + if (!libraryContainer || libraryContainer.length === 0) { + $('#spinner').show(); + libraryContainer = $('<div>'); + libraryContainer.attr('id', 'remoteContainer') + .addClass('contentContainer'); + $('#content').append(libraryContainer); + var keys = [{ + name: 'up', + width: '40px', + height: '30px', + top: '28px', + left: '58px' + }, + { + name: 'down', + width: '40px', + height: '30px', + top: '122px', + left: '58px' + }, + { + name: 'left', + width: '40px', + height: '30px', + top: '74px', + left: '15px' + }, + { + name: 'right', + width: '40px', + height: '30px', + top: '74px', + left: '104px' + }, + { + name: 'ok', + width: '40px', + height: '30px', + top: '74px', + left: '58px' + }, + { + name: 'back', + width: '40px', + height: '30px', + top: '13px', + left: '161px' + }, + { + name: 'home', + width: '40px', + height: '30px', + top: '154px', + left: '8px' + }, + { + name: 'mute', + width: '40px', + height: '30px', + top: '107px', + left: '391px' + }, + { + name: 'power', + width: '30px', + height: '30px', + top: '-3px', + left: '13px' + }, + { + name: 'volumeup', + width: '30px', + height: '30px', + top: '49px', + left: '422px' + }, + { + name: 'volumedown', + width: '30px', + height: '30px', + top: '49px', + left: '367px' + }, + { + name: 'playpause', + width: '32px', + height: '23px', + top: '62px', + left: '260px' + }, + { + name: 'stop', + width: '32px', + height: '23px', + top: '62px', + left: '211px' + }, + { + name: 'next', + width: '38px', + height: '25px', + top: '102px', + left: '304px' + }, + { + name: 'previous', + width: '38px', + height: '25px', + top: '101px', + left: '160px' + }, + { + name: 'forward', + width: '32px', + height: '23px', + top: '102px', + left: '259px' + }, + { + name: 'rewind', + width: '32px', + height: '23px', + top: '101px', + left: '211px' + }, + { + name: 'cleanlib_a', + width: '46px', + height: '26px', + top: '47px', + left: '553px' + }, + { + name: 'updatelib_a', + width: '46px', + height: '26px', + top: '47px', + left: '492px' + }, + { + name: 'cleanlib_v', + width: '46px', + height: '26px', + top: '111px', + left: '553px' + }, + { + name: 'updatelib_v', + width: '46px', + height: '26px', + top: '111px', + left: '492px' + } + ]; + for (var akey in keys) { + var aremotekey = $('<p>').attr('id', keys[akey]['name']); + aremotekey.addClass('remote_key') + .css('height', keys[akey]['height']) + .css('width', keys[akey]['width']) + .css('top', keys[akey]['top']) + .css('left', keys[akey]['left']) + .bind('click', { + key: keys[akey]['name'] + }, jQuery.proxy(this.pressRemoteKey, this)); + libraryContainer.append(aremotekey); + } + } else { + libraryContainer.show(); + libraryContainer.trigger('scroll'); + } + + $('#spinner').hide(); + }, + shouldHandleEvent: function (event) { + var inRemoteControl = $('#remoteControl').hasClass('selected'); + return (!event.ctrlKey && !event.altKey && inRemoteControl); + }, + handleKeyPress: function (event) { + if (!this.shouldHandleEvent(event)) { + return true; + } + + var keys = { + 8: 'back', // Back space + 13: 'ok', // Enter + 27: 'home', // Escape + 32: 'playpause', // Space bar + 37: 'left', // Left + 38: 'up', // Up + 39: 'right', // Right + 40: 'down', // Down + 93: 'contextmenu', // "Right Click" + 107: 'volumeup', // + (num keypad) + 109: 'volumedown', // - (num keypad) + 187: 'volumeup', // + (alnum keypad) + 189: 'volumedown' // - (alnum keypad) + }; + var which = event.which; + var key = keys[which]; + + event.data = { + key: key + }; + + if (!key) { + event.data.key = 'text'; + + if (event.key && event.key.length === 1) { + event.data.text = event.key; + } else { + // Letters + if (which >= 65 && which <= 90) { + var offset = event.shiftKey ? 0 : 32; + event.data.text = String.fromCharCode(which + offset); + } + + // Digits + if (which >= 96 && which <= 105) { + event.data.text = (which - 96) + ""; + } + } + } + + if (event.data.key) { + this.pressRemoteKey(event); + return false; + } + }, + handleContextMenu: function (event) { + if (!this.shouldHandleEvent(event)) { + return true; + } + if ( + (event.target == document) || //Chrome/Opera + (event.clientX === event.clientY && event.clientX === 0) //FF/IE + ) { + return false; + } //keyboard event. cancel it. + return true; + }, + rpcCall: function (method, params) { + var callObj = { + 'method': method + }; + if (params) { + callObj.params = params; + } + return xbmc.rpc.request(callObj); + }, + typeRemoteText: function (event) { + if (event.data.key === 'text' || ((event.data.key === 'playpause' || event.data.key === 'back') && this + .textBuffer.length)) { + if (event.data.key === 'back') { + this.textBuffer = this.textBuffer.substring(0, this.textBuffer.length - 1); + } else if (event.data.key === 'playpause') { + this.textBuffer += ' '; + } else if (event.data.text && event.data.text.length) { + this.textBuffer += event.data.text; + } + console.log(this.textBuffer); + return this.rpcCall('Input.SendText', { + 'text': this.textBuffer, + 'done': false + }); + } else { + this.textBuffer = ''; + } + }, + pressRemoteKey: function (event) { + var player = -1, + keyPressed = event.data.key; + $('#spinner').show(); + if (this.typeRemoteText(event)) { + return true; + } + + switch (keyPressed) { + case 'up': + return this.rpcCall('Input.Up'); + case 'down': + return this.rpcCall('Input.Down'); + case 'left': + return this.rpcCall('Input.Left'); + case 'right': + return this.rpcCall('Input.Right'); + case 'ok': + return this.rpcCall('Input.Select'); + case 'cleanlib_a': + return this.rpcCall('AudioLibrary.Clean'); + case 'updatelib_a': + return this.rpcCall('AudioLibrary.Scan'); + case 'cleanlib_v': + return this.rpcCall('VideoLibrary.Clean'); + case 'updatelib_v': + return this.rpcCall('VideoLibrary.Scan'); + case 'back': + return this.rpcCall('Input.Back'); + case 'home': + return this.rpcCall('Input.Home'); + case 'power': + return this.rpcCall('System.Shutdown'); + case 'contextmenu': + return this.rpcCall('Input.ContextMenu'); + case 'mute': + return this.rpcCall('Application.SetMute', { + 'mute': 'toggle' + }); + case 'volumeup': + return this.rpcCall('Application.SetVolume', { + 'volume': 'increment' + }); + case 'volumedown': + return this.rpcCall('Application.SetVolume', { + 'volume': 'decrement' + }); + } + + // TODO: Get active player + if ($('#videoDescription').is(':visible')) { + player = this.playlists["video"]; + } else if ($('#audioDescription').is(':visible')) { + player = this.playlists["audio"]; + } + + if (player >= 0) { + switch (keyPressed) { + case 'playpause': + return this.rpcCall('Player.PlayPause', { + 'playerid': player + }); + case 'stop': + return this.rpcCall('Player.Stop', { + 'playerid': player + }); + case 'next': + return this.rpcCall('Player.GoTo', { + 'playerid': player, + 'to': 'next' + }); + case 'previous': + return this.rpcCall('Player.GoTo', { + 'playerid': player, + 'to': 'previous' + }); + case 'forward': + return this.rpcCall('Player.SetSpeed', { + 'playerid': player, + 'speed': 'increment' + }); + case 'rewind': + return this.rpcCall('Player.SetSpeed', { + 'playerid': player, + 'speed': 'decrement' + }); + } + } + }, + musicLibraryOpen: function (event) { + this.resetPage(); + $('#musicLibrary').addClass('selected'); + $('.contentContainer').hide(); + var libraryContainer = $('#libraryContainer'); + if (!libraryContainer || libraryContainer.length === 0) { + $('#spinner').show(); + libraryContainer = $('<div>'); + libraryContainer.attr('id', 'libraryContainer') + .addClass('contentContainer'); + $('#content').append(libraryContainer); + xbmc.rpc.request({ + 'context': this, + 'method': 'AudioLibrary.GetAlbums', + 'params': { + 'limits': { + 'start': 0 + }, + 'properties': [ + 'description', + 'theme', + 'mood', + 'style', + 'type', + 'albumlabel', + 'artist', + 'genre', + 'rating', + 'title', + 'year', + 'thumbnail' + ], + 'sort': { + 'method': 'artist' + } + }, + 'success': function (data) { + if (data && data.result && data.result.albums) { + this.albumList = data.result.albums; + $.each($(this.albumList), jQuery.proxy(function (i, item) { + var floatableAlbum = this.generateThumb('album', item + .thumbnail, item.title, item.artist); + floatableAlbum.bind('click', { + album: item + }, jQuery.proxy(this.displayAlbumDetails, this)); + libraryContainer.append(floatableAlbum); + }, this)); + libraryContainer.append($('<div>').addClass('footerPadding')); + $('#spinner').hide(); + libraryContainer.bind('scroll', { + activeLibrary: libraryContainer + }, jQuery.proxy(this.updateScrollEffects, this)); + libraryContainer.trigger('scroll'); + myScroll = new iScroll('libraryContainer'); + } else { + libraryContainer.html(''); + } + } + }); + } else { + libraryContainer.show(); + libraryContainer.trigger('scroll'); + } + }, + getThumbnailPath: function (thumbnail) { + return thumbnail ? ('image/' + encodeURI(thumbnail)) : xbmc.core.DEFAULT_ALBUM_COVER; + }, + generateThumb: function (type, thumbnail, title, artist) { + title = title || ''; + artist = artist || ''; + + var showTitle = title, + showArtist = artist; + var floatableAlbum = $('<div>'); + var path = this.getThumbnailPath(thumbnail); + if (title.length > 21) { + showTitle = $.trim(title.substr(0, 18)) + '...'; + } + if (artist.length > 22) { + showArtist = $.trim(artist.substr(0, 20)) + '...'; + } + var className = ''; + var code = ''; + switch (type) { + case 'album': + className = 'floatableAlbum'; + code = '<p class="album" title="' + title + '">' + showTitle + '</p><p class="artist" title="' + + artist + '">' + artist + '</p>'; + break; + case 'movie': + className = 'floatableMovieCover'; + code = '<p class="album" title="' + title + '">' + showTitle + '</p>'; + break; + case 'tvshow': + className = 'floatableTVShowCover'; + break; + case 'tvshowseason': + className = 'floatableTVShowCoverSeason'; + break; + case 'image': + case 'directory': + className = 'floatableAlbum'; + code = '<p class="album" title="' + title + '">' + showTitle + '</p>'; + break; + case 'profile': + className = 'floatableProfileThumb'; + code = '<p class="album" title="' + title + '">' + showTitle + '</p>'; + break; + } + return floatableAlbum.addClass(className).html('<div class="imgWrapper"><div class="inner"><img src="' + + path + '" alt="' + title + '" /></div></div>' + code); + }, + showAlbumSelectorBlock: function (album) { + if (album) { + var prevAlbum = null, + nextAlbum = null; + $.each($(this.albumList), jQuery.proxy(function (i, item) { + if (item.albumid == album.albumid) { + if (this.albumList.length > 1) { + prevAlbum = this.albumList[i <= 0 ? this.albumList.length - 1 : i - 1]; + nextAlbum = this.albumList[i >= this.albumList.length ? 0 : i + 1]; + } + return false; /* .each break */ + } + }, this)); + var albumSelectorBlock = $('#albumSelector'); + if (!albumSelectorBlock || albumSelectorBlock.length === 0) { + albumSelectorBlock = $('<div>'); + albumSelectorBlock.attr('id', 'albumSelector') + .html( + '<table><tr><td class="allAlbums">All Albums</td><td class="activeAlbumTitle"></td>' + + '<td class="prevAlbum"> </td><td class="nextAlbum"> </td></tr></table>' + ); + $('#content').prepend(albumSelectorBlock); + $('#albumSelector .allAlbums').bind('click', jQuery.proxy(this.hideAlbumDetails, this)); + } + $('#albumSelector .prevAlbum').unbind(); + $('#albumSelector .nextAlbum').unbind(); + if (prevAlbum) { + $('#albumSelector .prevAlbum').bind('click', { + album: prevAlbum + }, jQuery.proxy(this.displayAlbumDetails, this)); + } + if (nextAlbum) { + $('#albumSelector .nextAlbum').bind('click', { + album: nextAlbum + }, jQuery.proxy(this.displayAlbumDetails, this)); + } + $('#albumSelector .activeAlbumTitle').html(album.title || 'Unknown Album'); + albumSelectorBlock.show(); + } + }, + hideAlbumDetails: function () { + $('.contentContainer').hide(); + this.musicLibraryOpen(); + }, + displayAlbumDetails: function (event) { + this.showAlbumSelectorBlock(event.data.album); + var albumDetailsContainer = $('#albumDetails' + event.data.album.albumid); + $('#topScrollFade').hide(); + if (!albumDetailsContainer || albumDetailsContainer.length === 0) { + $('#spinner').show(); + xbmc.rpc.request({ + 'context': this, + 'method': 'AudioLibrary.GetSongs', + 'params': { + 'properties': [ + 'title', + 'artist', + 'genre', + 'track', + 'duration', + 'year', + 'rating', + 'playcount' + ], + 'sort': { + 'method': 'track' + }, + 'filter': { + 'albumid': event.data.album.albumid + } + }, + 'success': function (data) { + albumDetailsContainer = $('<div>'); + albumDetailsContainer.attr('id', 'albumDetails' + event.data.album.albumid) + .addClass('contentContainer') + .addClass('albumContainer') + .html( + '<table class="albumView"><thead><tr class="headerRow"><th>Artwork</th><th> </th>' + + '<th>Name</th><th class="time">Time</th><th>Artist</th><th>Genre</th></tr></thead>' + + '<tbody class="resultSet"></tbody></table>' + ); + $('.contentContainer').hide(); + $('#content').append(albumDetailsContainer); + var albumThumbnail = event.data.album.thumbnail; + var albumTitle = event.data.album.title || 'Unknown Album'; + var albumArtist = event.data.album.artist.join(', ') || 'Unknown Artist'; + var trackCount = data.result.limits.total; + $.each($(data.result.songs), jQuery.proxy(function (i, item) { + var trackRow, trackNumberTD; + if (i === 0) { + trackRow = $('<tr>').addClass('trackRow').addClass('tr' + + i % 2); + trackRow.append($('<td>').attr('rowspan', ++trackCount + 1) + .addClass('albumThumb')); + for (var a = 0; a < 5; a++) { + trackRow.append($('<td>').html(' ').attr('style', + 'display: none')); + } + $('#albumDetails' + event.data.album.albumid + + ' .resultSet').append(trackRow); + } + trackRow = $('<tr>').addClass('trackRow').addClass('tr' + i % 2) + .bind('click', { + album: event.data.album, + itmnbr: i + }, jQuery.proxy(this.playTrack, this)); + trackNumberTD = $('<td>').html(item.track); + + trackRow.append(trackNumberTD); + var trackTitleTD = $('<td>').html(item.title); + + trackRow.append(trackTitleTD); + var trackDurationTD = $('<td>') + .addClass('time') + .html(xbmc.core.durationToString(item.duration)); + + trackRow.append(trackDurationTD); + var trackArtistTD = $('<td>').html(item.artist.join(', ')); + + trackRow.append(trackArtistTD); + var trackGenreTD = $('<td>').html(item.genre.join(', ')); + + trackRow.append(trackGenreTD); + $('#albumDetails' + event.data.album.albumid + ' .resultSet') + .append(trackRow); + }, this)); + if (trackCount > 0) { + var trackRow = $('<tr>').addClass('fillerTrackRow'), + i; + for (i = 0; i < 5; i++) { + trackRow.append($('<td>').html(' ')); + } + $('#albumDetails' + event.data.album.albumid + ' .resultSet').append( + trackRow); + + var trackRow2 = $('<tr>').addClass('fillerTrackRow2'); + trackRow2.append($('<td>').addClass('albumBG').html(' ')); + for (i = 0; i < 5; i++) { + trackRow2.append($('<td>').html(' ')); + } + $('#albumDetails' + event.data.album.albumid + ' .resultSet').append( + trackRow2); + } + $('#albumDetails' + event.data.album.albumid + ' .albumThumb') + .append(this.generateThumb('album', albumThumbnail, albumTitle, + albumArtist)) + .append($('<div>').addClass('footerPadding')); + $('#spinner').hide(); + myScroll = new iScroll('albumDetails' + event.data.album.albumid); + } + }); + } else { + $('.contentContainer').hide(); + $('#albumDetails' + event.data.album.albumid).show(); + } + }, + togglePosterView: function (event) { + var view = event.data.mode; + var wthumblist, hthumblist, hthumbdetails; + $("#toggleBanner").removeClass('activeMode'); + $("#togglePoster").removeClass('activeMode'); + $("#toggleLandscape").removeClass('activeMode'); + switch (view) { + case 'landscape': + xbmc.core.setCookie('TVView', 'landscape'); + wthumblist = '210px'; + hthumblist = '118px'; + hthumbdetails = '213px'; + $("#toggleLandscape").addClass('activeMode'); + break; + case 'banner': + xbmc.core.setCookie('TVView', 'banner'); + wthumblist = '379px'; + hthumblist = '70px'; + hthumbdetails = '70px'; + $("#toggleBanner").addClass('activeMode'); + break; + default: + xbmc.core.setCookie('TVView', 'poster'); + wthumblist = '135px'; + hthumblist = '199px'; + hthumbdetails = '559px'; + $("#togglePoster").addClass('activeMode'); + break; + } + $(".floatableTVShowCover, .floatableTVShowCover div.imgWrapper, .floatableTVShowCover img, " + + ".floatableTVShowCover div.imgWrapper div.inner") + .css('width', wthumblist).css('height', hthumblist); + $(".floatableTVShowCoverSeason div.imgWrapper, .floatableTVShowCoverSeason div.imgWrapper div.inner," + + ".floatableTVShowCoverSeason img, .floatableTVShowCoverSeason") + .css('height', hthumbdetails); + }, + displayTVShowDetails: function (event) { + var tvshowDetailsContainer = $('#tvShowDetails' + event.data.tvshow.tvshowid); + $('#topScrollFade').hide(); + toggle = this.toggle.detach(); + if (!tvshowDetailsContainer || tvshowDetailsContainer.length === 0) { + $('#spinner').show(); + xbmc.rpc.request({ + 'context': this, + 'method': 'VideoLibrary.GetSeasons', + 'params': { + 'properties': [ + 'season', + 'showtitle', + 'playcount', + 'episode', + 'thumbnail', + 'fanart' + ], + 'tvshowid': event.data.tvshow.tvshowid + }, + 'success': function (data) { + tvshowDetailsContainer = $('<div>'); + tvshowDetailsContainer.attr('id', 'tvShowDetails' + event.data.tvshow.tvshowid) + .css('display', 'none') + .addClass('contentContainer') + .addClass('tvshowContainer'); + var showThumb = this.generateThumb('tvshowseason', event.data.tvshow.thumbnail, + event.data.tvshow.title); + if (data && data.result && data.result.seasons && data.result.seasons.length > + 0) { + var showDetails = $('<div>').addClass('showDetails'); + showDetails.append(toggle); + showDetails.append($('<p>').html(data.result.seasons[0].showtitle).addClass( + 'showTitle')); + var seasonSelectionSelect = $('<select>').addClass('seasonPicker'); + this.tvActiveShowContainer = tvshowDetailsContainer; + $.each($(data.result.seasons), function (i, item) { + var season = $('<option>').attr('value', i); + season.text(item.label); + seasonSelectionSelect.append(season); + }); + seasonSelectionSelect.bind('change', { + tvshow: event.data.tvshow.tvshowid, + seasons: data.result.seasons, + element: seasonSelectionSelect + }, jQuery.proxy(this.displaySeasonListings, this)); + showDetails.append(seasonSelectionSelect); + tvshowDetailsContainer.append(showDetails); + tvshowDetailsContainer.append(showThumb); + seasonSelectionSelect.trigger('change'); + $('#content').append(tvshowDetailsContainer); + if (xbmc.core.getCookie('TVView') !== null && + xbmc.core.getCookie('TVView') !== 'banner' + ) { + var view = xbmc.core.getCookie('TVView'); + switch (view) { + case 'poster': + togglePoster.trigger('click'); + break; + case 'landscape': + toggleLandscape.trigger('click'); + break; + } + } + tvshowDetailsContainer.fadeIn(); + } + $('#spinner').hide(); + } + }); + } else { + $('.contentContainer').hide(); + $('#tvShowDetails' + event.data.tvshow.tvshowid).show(); + $('#tvShowDetails' + event.data.tvshow.tvshowid + ' select').trigger('change'); + } + }, + displaySeasonListings: function (event) { + var selectedVal = event.data.element.val(); + var seasons = event.data.seasons; + $('#topScrollFade').hide(); + var oldListings = $('.episodeListingsContainer', this.tvActiveShowContainer).fadeOut(); + this.tvActiveSeason = selectedVal; + xbmc.rpc.request({ + 'context': this, + 'method': 'VideoLibrary.GetEpisodes', + 'params': { + 'properties': [ + 'title', + 'thumbnail', + 'episode', + 'plot', + 'season' + ], + 'season': seasons[selectedVal].season, + 'tvshowid': event.data.tvshow + }, + 'success': function (data) { + var episodeListingsContainer = $('<div>').addClass('episodeListingsContainer'); + var episodeTable = $('<table>').addClass('seasonView').html( + '<thead><tr class="headerRow"><th class="thumbHeader">N°</th><th>Title</th>' + + '<th class="thumbHeader">Thumb</th><th class="thumbHeader">Details</th></tr></thead>' + + '<tbody class="resultSet"></tbody>' + ); + $.each($(data.result.episodes), jQuery.proxy(function (i, item) { + var episodeRow = $('<tr>').addClass('episodeRow').addClass('tr' + + i % 2); + var episodePictureImg = $('<img>').bind('click', { + episode: item + }, jQuery.proxy(this.playTVShow, this)).css('cursor', 'pointer'); + episodePictureImg.attr('src', this.getThumbnailPath(item + .thumbnail)); + var episodePicture = $('<td>').addClass('episodeThumb').append( + episodePictureImg).bind('click', { + episode: item + }, jQuery.proxy(this.playTVShow, this)); + var episodeNumber = $('<td>').addClass('episodeNumber').html(item + .episode).bind('click', { + episode: item + }, jQuery.proxy(this.playTVShow, this)); + var episodeTitle = $('<td>').html(item.title).bind('click', { + episode: item + }, jQuery.proxy(this.playTVShow, this)); + var episodeDetails = $('<td class="info">').html('').bind('click', { + episode: item + }, jQuery.proxy(this.displayEpisodeDetails, this)).css('cursor', + 'pointer'); + episodeRow.append(episodeNumber).append(episodeTitle).append( + episodePicture).append(episodeDetails); + episodeTable.append(episodeRow); + }, this)); + episodeListingsContainer.append(episodeTable); + $(this.tvActiveShowContainer).append(episodeListingsContainer); + } + }); + }, + displayEpisodeDetails: function (event) { + var episodeDetails = $('<div>').attr('id', 'episode-' + event.data.episode.episodeid).addClass( + 'episodePopoverContainer'); + episodeDetails.append($('<img>').attr('src', 'images/close-button.png').addClass('closeButton').bind( + 'click', jQuery.proxy(this.hideOverlay, this))); + episodeDetails.append($('<img>').attr('src', this.getThumbnailPath(event.data.episode.thumbnail)) + .addClass('episodeCover')); + episodeDetails.append($('<div>').addClass('playIcon').bind('click', { + episode: event.data.episode + }, jQuery.proxy(this.playTVShow, this))); + var episodeTitle = $('<p>').addClass('episodeTitle'); + var yearText = event.data.episode.year ? ' <span class="year">(' + event.data.episode.year + + ')</span>' : ''; + episodeTitle.html(event.data.episode.title + yearText); + episodeDetails.append(episodeTitle); + if (event.data.episode.runtime) { + episodeDetails.append($('<p>').addClass('runtime').html('<strong>Runtime:</strong> ' + Math.ceil( + event.data.episode.runtime / 60) + ' minutes')); + } + if (event.data.episode.season) { + episodeDetails.append($('<p>').addClass('season').html('<strong>Season:</strong> ' + event.data + .episode.season)); + } + if (event.data.episode.episode) { + episodeDetails.append($('<p>').addClass('episode').html('<strong>Episode:</strong> ' + event.data + .episode.episode)); + } + if (event.data.episode.plot) { + episodeDetails.append($('<p>').addClass('plot').html('<strong>Plot:</strong> <br/><br/>' + event + .data.episode.plot)); + } + if (event.data.episode.genre) { + episodeDetails.append($('<p>').addClass('genre').html('<strong>Genre:</strong> ' + event.data + .episode.genre)); + } + if (event.data.episode.director) { + episodeDetails.append($('<p>').addClass('director').html('<strong>Directed By:</strong> ' + event + .data.episode.director)); + } + this.activeCover = episodeDetails; + $('body').append(episodeDetails); + $('#overlay').show(); + this.updatePlayButtonLocation(); + }, + playTVShow: function (event) { + xbmc.rpc.request({ + 'context': this, + 'method': 'Player.Open', + 'params': { + 'item': { + 'episodeid': event.data.episode.episodeid + } + }, + 'success': function (data) { + this.hideOverlay(); + } + }); + }, + hideOverlay: function (event) { + if (this.activeCover) { + $(this.activeCover).remove(); + this.activeCover = null; + } + $('#overlay').hide(); + }, + updatePlayButtonLocation: function (event) { + var movieContainer = $('.movieCover'), + playIcon; + if (movieContainer.length > 0) { + playIcon = $('.playIcon'); + if (playIcon.length > 0) { + var heightpi = $(movieContainer[0]).height(); + playIcon.width(Math.floor(0.65 * heightpi)); + playIcon.height(heightpi); + } + } + var episodeContainer = $('.episodeCover'); + if (episodeContainer.length > 0) { + playIcon = $('.playIcon'); + if (playIcon.length > 0) { + var widthpi = $(episodeContainer[0]).width(); + playIcon.width(widthpi); + //assume 16/9 thumb + playIcon.height(Math.floor(widthpi * 9 / 16)); + } + } + }, + playMovie: function (event) { + xbmc.rpc.request({ + 'context': this, + 'method': 'Player.Open', + 'params': { + 'item': { + 'movieid': event.data.movie.movieid + } + }, + 'success': function (data) { + this.hideOverlay(); + } + }); + }, + displayMovieDetails: function (event) { + var movieDetails = $('<div>').attr('id', 'movie-' + event.data.movie.movieid).addClass( + 'moviePopoverContainer'); + movieDetails.append($('<img>').attr('src', 'images/close-button.png').addClass('closeButton').bind( + 'click', jQuery.proxy(this.hideOverlay, this))); + movieDetails.append($('<img>').attr('src', this.getThumbnailPath(event.data.movie.thumbnail)).addClass( + 'movieCover')); + movieDetails.append($('<div>').addClass('playIcon').bind('click', { + movie: event.data.movie + }, jQuery.proxy(this.playMovie, this))); + var movieTitle = $('<p>').addClass('movieTitle'); + var yearText = event.data.movie.year ? ' <span class="year">(' + event.data.movie.year + ')</span>' : + ''; + movieTitle.html(event.data.movie.title + yearText); + movieDetails.append(movieTitle); + if (event.data.movie.runtime) { + movieDetails.append($('<p>').addClass('runtime').html('<strong>Runtime:</strong> ' + Math.ceil(event + .data.movie.runtime / 60) + ' minutes')); + } + if (event.data.movie.plot) { + movieDetails.append($('<p>').addClass('plot').html(event.data.movie.plot)); + } + if (event.data.movie.genre) { + movieDetails.append($('<p>').addClass('genre').html('<strong>Genre:</strong> ' + event.data.movie + .genre)); + } + if (event.data.movie.director) { + movieDetails.append($('<p>').addClass('director').html('<strong>Directed By:</strong> ' + event.data + .movie.director)); + } + this.activeCover = movieDetails; + $('body').append(movieDetails); + $('#overlay').show(); + this.updatePlayButtonLocation(); + }, + playTrack: function (event) { + xbmc.rpc.request({ + 'context': this, + 'method': 'Playlist.Clear', + 'params': { + 'playlistid': this.playlists["audio"] + }, + 'success': function (data) { + xbmc.rpc.request({ + 'context': this, + 'method': 'Playlist.Add', + 'params': { + 'playlistid': this.playlists["audio"], + 'item': { + 'albumid': event.data.album.albumid + } + }, + 'success': function (data) { + xbmc.rpc.request({ + 'method': 'Player.Open', + 'params': { + 'item': { + 'playlistid': this.playlists["audio"], + 'position': event.data.itmnbr + } + }, + 'success': function () {} + }); + } + }); + } + }); + }, + loadProfile: function (event) { + return xbmc.rpc.request({ + 'context': this, + 'method': 'Profiles.LoadProfile', + 'params': { + 'profile': event.data.profile.label + } + }); + }, + movieLibraryOpen: function () { + this.resetPage(); + $('#movieLibrary').addClass('selected'); + $('.contentContainer').hide(); + var libraryContainer = $('#movieLibraryContainer'); + if (!libraryContainer || libraryContainer.length === 0) { + $('#spinner').show(); + xbmc.rpc.request({ + 'context': this, + 'method': 'VideoLibrary.GetMovies', + 'params': { + 'limits': { + 'start': 0 + }, + 'properties': [ + 'genre', + 'director', + 'trailer', + 'tagline', + 'plot', + 'plotoutline', + 'title', + 'originaltitle', + 'lastplayed', + 'runtime', + 'year', + 'playcount', + 'rating', + 'thumbnail', + 'file' + ], + 'sort': { + 'method': 'sorttitle', + 'ignorearticle': true + } + }, + 'success': function (data) { + if (data && data.result && data.result.movies) { + libraryContainer = $('<div>'); + libraryContainer.attr('id', 'movieLibraryContainer') + .addClass('contentContainer'); + $('#content').append(libraryContainer); + } else { + libraryContainer.html(''); + } + $.each($(data.result.movies), jQuery.proxy(function (i, item) { + var floatableMovieCover = this.generateThumb('movie', item + .thumbnail, item.title); + floatableMovieCover.bind('click', { + movie: item + }, jQuery.proxy(this.displayMovieDetails, this)); + libraryContainer.append(floatableMovieCover); + }, this)); + libraryContainer.append($('<div>').addClass('footerPadding')); + $('#spinner').hide(); + libraryContainer.bind('scroll', { + activeLibrary: libraryContainer + }, jQuery.proxy(this.updateScrollEffects, this)); + libraryContainer.trigger('scroll'); + myScroll = new iScroll('movieLibraryContainer'); + } + }); + } else { + libraryContainer.show(); + libraryContainer.trigger('scroll'); + } + }, + tvshowLibraryOpen: function () { + this.resetPage(); + $('#tvshowLibrary').addClass('selected'); + $('.contentContainer').hide(); + var libraryContainer = $('#tvshowLibraryContainer'); + if (!libraryContainer || libraryContainer.length === 0) { + $('#spinner').show(); + toggle = $('<p>').addClass('toggle'); + togglePoster = $('<span>Poster</span>'); + togglePoster.attr('id', 'togglePoster') + .css('cursor', 'pointer') + .bind('click', { + mode: 'poster' + }, jQuery.proxy(this.togglePosterView, this)); + toggleBanner = $('<span>Banner</span>'); + toggleBanner.attr('id', 'toggleBanner') + .css('cursor', 'pointer') + .addClass('activeMode') + .bind('click', { + mode: 'banner' + }, jQuery.proxy(this.togglePosterView, this)); + toggleLandscape = $('<span>Landscape</span>'); + toggleLandscape.attr('id', 'toggleLandscape') + .css('cursor', 'pointer') + .bind('click', { + mode: 'landscape' + }, jQuery.proxy(this.togglePosterView, this)); + toggle.append(toggleBanner).append(' | ').append(togglePoster).append(' | ').append( + toggleLandscape); + this.toggle = toggle; + xbmc.rpc.request({ + 'context': this, + 'method': 'VideoLibrary.GetTVShows', + 'params': { + 'properties': [ + 'genre', + 'plot', + 'title', + 'lastplayed', + 'episode', + 'year', + 'playcount', + 'rating', + 'thumbnail', + 'studio', + 'mpaa', + 'premiered' + ], + 'sort': { + 'method': 'sorttitle', + 'ignorearticle': true + } + }, + 'success': function (data) { + if (data && data.result && data.result.tvshows) { + libraryContainer = $('<div>'); + libraryContainer.append(toggle); + libraryContainer.attr('id', 'tvshowLibraryContainer') + .addClass('contentContainer'); + $('#content').append(libraryContainer); + } else { + libraryContainer.html(''); + } + $.each($(data.result.tvshows), jQuery.proxy(function (i, item) { + var floatableTVShowCover = this.generateThumb('tvshow', item + .thumbnail, item.title); + floatableTVShowCover.bind('click', { + tvshow: item + }, jQuery.proxy(this.displayTVShowDetails, this)); + libraryContainer.append(floatableTVShowCover); + }, this)); + libraryContainer.append($('<div>').addClass('footerPadding')); + $('#spinner').hide(); + libraryContainer.bind('scroll', { + activeLibrary: libraryContainer + }, jQuery.proxy(this.updateScrollEffects, this)); + libraryContainer.trigger('scroll'); + myScroll = new iScroll('tvshowLibraryContainer'); + if (xbmc.core.getCookie('TVView') !== null && + xbmc.core.getCookie('TVView') !== 'banner' + ) { + var view = xbmc.core.getCookie('TVView'); + switch (view) { + case 'poster': + togglePoster.trigger('click'); + break; + case 'landscape': + toggleLandscape.trigger('click'); + break; + } + } + } + }); + } else { + libraryContainer.prepend($(".toggle").detach()).show(); + libraryContainer.trigger('scroll'); + } + }, + profilesOpen: function () { + this.resetPage(); + $('#profiles').addClass('selected'); + $('.contentContainer').hide(); + var libraryContainer = $('#profilesContainer'); + if (!libraryContainer || libraryContainer.length == 0) { + $('#spinner').show(); + var currentProfile = ""; + xbmc.rpc.request({ + 'method': 'Profiles.GetCurrentProfile', + 'params': { + 'properties': [ + 'lockmode' + ] + }, + 'success': function (data) { + if (data) + if (data.result) + currentProfile = data.result.label; + } + }); + xbmc.rpc.request({ + 'context': this, + 'method': 'Profiles.GetProfiles', + 'params': { + 'limits': { + 'start': 0 + }, + 'properties': [ + 'thumbnail' + ], + 'sort': { + 'method': 'sorttitle', + 'ignorearticle': true + } + }, + 'success': function (data) { + if (data && data.result && data.result.profiles) { + libraryContainer = $('<div>'); + libraryContainer.attr('id', 'profilesContainer') + .addClass('contentContainer'); + $('#content').append(libraryContainer); + } else { + libraryContainer.html(''); + } + $.each($(data.result.profiles), jQuery.proxy(function (i, item) { + var itemLabel = item.label; + if (currentProfile == itemLabel) { + itemLabel = itemLabel + "*"; + } + var floatableProfileThumb = this.generateThumb('profile', item + .thumbnail, itemLabel); + floatableProfileThumb.bind('click', { + profile: item + }, jQuery.proxy(this.loadProfile, this)); + libraryContainer.append(floatableProfileThumb); + }, this)); + libraryContainer.append($('<div>').addClass('footerPadding')); + $('#spinner').hide(); + libraryContainer.bind('scroll', { + activeLibrary: libraryContainer + }, jQuery.proxy(this.updateScrollEffects, this)); + libraryContainer.trigger('scroll'); + myScroll = new iScroll('profilesContainer'); + } + }); + } else { + libraryContainer.show(); + libraryContainer.trigger('scroll'); + } + }, + updateScrollEffects: function (event) { + if (event.data.activeLibrary && $(event.data.activeLibrary).scrollTop() > 0) { + $('#topScrollFade').fadeIn(); + } else { + $('#topScrollFade').fadeOut(); + } + }, + startSlideshow: function (event) { + xbmc.rpc.request({ + 'method': 'Player.Open', + 'params': { + 'item': { + 'recursive': 'true', + 'random': 'true', + 'path': this.replaceAll(event.data.directory.file, "\\", "\\\\") + } + }, + 'success': function () {} + }); + }, + showDirectory: function (event) { + var directory = event.data.directory.file; + var jsonDirectory = this.replaceAll(directory, "\\", "\\\\"); + this.resetPage(); + $('#pictureLibrary').addClass('selected'); + $('.contentContainer').hide(); + var libraryContainer = $('#pictureLibraryDirContainer' + directory); + if (!libraryContainer || libraryContainer.length === 0) { + $('#spinner').show(); + xbmc.rpc.request({ + 'context': this, + 'method': 'Files.GetDirectory', + 'params': { + 'media': 'pictures', + 'directory': jsonDirectory + }, + 'success': function (data) { + if (data && data.result && (data.result.directories || data.result.files)) { + libraryContainer = $('<div>'); + libraryContainer.attr('id', 'pictureLibraryDirContainer' + directory) + .addClass('contentContainer'); + $('#content').append(libraryContainer); + var breadcrumb = $('<div>'); + var seperator = '/'; + var item = ''; + var directoryArray = directory.split(seperator); + jQuery.each(directoryArray, function (i, v) { + if (v !== '') { + item += v + seperator; + breadcrumb.append($('<div>').text(' > ' + v).css('float', + 'left').addClass('breadcrumb')); + } + }); + libraryContainer.append(breadcrumb); + libraryContainer.append($('<div>').css('clear', 'both')); + if (data.result.files) { + $.each($(data.result.files), jQuery.proxy(function (i, item) { + if (item.filetype == "file") { + var floatableImage = this.generateThumb('image', + item.file, item.label); + libraryContainer.append(floatableImage); + } else if (item.filetype == "directory") { + var floatableShare = this.generateThumb('directory', + item.thumbnail, item.label); + floatableShare.bind('click', { + directory: item + }, jQuery.proxy(this.showDirectory, this)); + libraryContainer.append(floatableShare); + } + }, this)); + } + libraryContainer.append($('<div>').addClass('footerPadding')); + } else { + libraryContainer.html(''); + } + $('#spinner').hide(); + libraryContainer.bind('scroll', { + activeLibrary: libraryContainer + }, jQuery.proxy(this.updateScrollEffects, this)); + libraryContainer.trigger('scroll'); + myScroll = new iScroll('#pictureLibraryDirContainer' + directory); + } + }); + } else { + libraryContainer.show(); + libraryContainer.trigger('scroll'); + } + }, + pictureLibraryOpen: function () { + this.resetPage(); + $('#pictureLibrary').addClass('selected'); + $('.contentContainer').hide(); + var libraryContainer = $('#pictureLibraryContainer'); + if (!libraryContainer || libraryContainer.length === 0) { + $('#spinner').show(); + xbmc.rpc.request({ + 'context': this, + 'method': 'Files.GetSources', + 'params': { + 'media': 'pictures' + }, + 'success': function (data) { + if (data && data.result && data.result.shares) { + libraryContainer = $('<div>'); + libraryContainer.attr('id', 'pictureLibraryContainer') + .addClass('contentContainer'); + $('#content').append(libraryContainer); + } else { + libraryContainer.html(''); + } + $.each($(data.result.shares), jQuery.proxy(function (i, item) { + var floatableShare = this.generateThumb('directory', item + .thumbnail, item.label); + floatableShare.bind('click', { + directory: item + }, jQuery.proxy(this.showDirectory, this)); + libraryContainer.append(floatableShare); + }, this)); + libraryContainer.append($('<div>').addClass('footerPadding')); + $('#spinner').hide(); + libraryContainer.bind('scroll', { + activeLibrary: libraryContainer + }, jQuery.proxy(this.updateScrollEffects, this)); + libraryContainer.trigger('scroll'); + myScroll = new iScroll('#pictureLibraryContainer'); + } + }); + } else { + libraryContainer.show(); + libraryContainer.trigger('scroll'); + } + } +}; diff --git a/debian/webinterface-default/js/NowPlayingManager.js b/debian/webinterface-default/js/NowPlayingManager.js new file mode 100755 index 0000000..fb34f74 --- /dev/null +++ b/debian/webinterface-default/js/NowPlayingManager.js @@ -0,0 +1,661 @@ +/* + * Copyright (C) 2005-2013 Team XBMC + * http://xbmc.org + * + * This Program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This Program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with XBMC; see the file COPYING. If not, see + * <http://www.gnu.org/licenses/>. + * + */ + +var NowPlayingManager = function () { + this.init(); + return true; +} + +NowPlayingManager.prototype = { + updateCounter: 0, + activePlayer: "", + activePlayerId: -1, + currentItem: -1, + playing: false, + paused: false, + playlistid: -1, + + init: function () { + $('#pbPause').hide(); /* Assume we are not playing something */ + this.bindPlaybackControls(); + this.updateState(); + $('#nextTrack').bind('click', jQuery.proxy(this.showPlaylist, this)); + $('#nowPlayingPlaylist').bind('click', function () { + return false; + }); + $(window).bind('click', jQuery.proxy(this.hidePlaylist, this)); + }, + updateState: function () { + xbmc.rpc.request({ + 'context': this, + 'method': 'Player.GetActivePlayers', + 'timeout': 3000, + 'success': function (data) { + if (data && data.result && data.result.length > 0) { + if (data.result[0].playerid != this.activePlayerId) { + this.activePlayerId = data.result[0].playerid; + this.activePlayer = data.result[0].type; + if (this.activePlayer == "audio") { + this.stopVideoPlaylistUpdate(); + this.displayAudioNowPlaying(); + } else if (this.activePlayer == "video") { + this.stopAudioPlaylistUpdate(); + this.displayVideoNowPlaying(); + } else { + this.stopVideoPlaylistUpdate(); + this.stopAudioPlaylistUpdate(); + this.activePlayer = ""; + this.activePlayerId = -1; + } + + this.stopRefreshTime(); + this.updatePlayer(); + } + } else if (!data || !data.result || data.result.length <= 0) { + this.stopVideoPlaylistUpdate(); + this.stopAudioPlaylistUpdate(); + this.activePlayer = ""; + this.activePlayerId = -1; + } + + if (this.activePlayerId >= 0) { + this.showFooter(); + } else { + this.stopRefreshTime(); + this.hideFooter(); + } + + setTimeout(jQuery.proxy(this.updateState, this), 1000); + }, + 'error': function (data, error) { + xbmc.core.displayCommunicationError(); + setTimeout(jQuery.proxy(this.updateState, this), 2000); + } + }); + }, + updatePlayer: function () { + xbmc.rpc.request({ + 'context': this, + 'method': 'Player.GetProperties', + 'params': { + 'playerid': this.activePlayerId, + 'properties': [ + 'playlistid', + 'speed', + 'position', + 'totaltime', + 'time' + ] + }, + 'success': function (data) { + if (data && data.result) { + this.playlistid = data.result.playlistid; + this.playing = data.result.speed != 0; + this.paused = data.result.speed == 0; + this.currentItem = data.result.position; + this.trackBaseTime = xbmc.core.timeToDuration(data.result.time); + this.trackDurationTime = xbmc.core.timeToDuration(data.result.totaltime); + if (!this.autoRefreshAudioData && !this.autoRefreshVideoData && this.playing) { + if (this.activePlayer == 'audio') { + this.autoRefreshAudioData = true; + this.refreshAudioData(); + } else if (this.activePlayer == 'video') { + this.autoRefreshVideoData = true; + this.refreshVideoData(); + } + } + } + if ((this.autoRefreshAudioData || this.autoRefreshVideoData) && !this + .activeItemTimer) { + this.activeItemTimer = 1; + setTimeout(jQuery.proxy(this.updateActiveItemDurationLoop, this), 1000); + } + } + }); + }, + bindPlaybackControls: function () { + $('#pbNext').bind('click', jQuery.proxy(this.nextTrack, this)); + $('#pbPrev').bind('click', jQuery.proxy(this.prevTrack, this)); + $('#pbStop').bind('click', jQuery.proxy(this.stopTrack, this)); + $('#pbPlay').bind('click', jQuery.proxy(this.playPauseTrack, this)); + $('#pbPause').bind('click', jQuery.proxy(this.playPauseTrack, this)); + that = this + $(document).keypress(function (event) { + switch (event.which) { + case 32: //spacebar + event.preventDefault() + jQuery.proxy(that.playPauseTrack, that)(); + break; + case 120: //x key + event.preventDefault() + jQuery.proxy(that.stopTrack, that)(); + break; + case 44: //period key + event.preventDefault() + jQuery.proxy(that.nextTrack, that)(); + break; + case 46: //comma key + event.preventDefault() + jQuery.proxy(that.prevTrack, that)(); + break; + } + }); + }, + showPlaylist: function () { + $('#nextText').html('Playlist: '); + $('#nowPlayingPlaylist').show(); + return false; + }, + hidePlaylist: function () { + $('#nextText').html('Next: '); + $('#nowPlayingPlaylist').hide(); + return false; + }, + hideFooter: function () { + $('#footerPopover').hide(); + $('#overlay').css('bottom', '0px'); + }, + showFooter: function () { + $('#footerPopover').show(); + $('#overlay').css('bottom', '150px'); + }, + nextTrack: function () { + if (this.activePlayer) { + xbmc.rpc.request({ + 'method': 'Player.GoTo', + 'params': { + 'playerid': this.activePlayerId, + 'to': 'next' + }, + 'success': function () {} + }); + } + }, + prevTrack: function () { + if (this.activePlayer) { + xbmc.rpc.request({ + 'method': 'Player.GoTo', + 'params': { + 'playerid': this.activePlayerId, + 'to': 'previous' + }, + 'success': function () {} + }); + } + }, + stopTrack: function () { + if (this.activePlayer) { + xbmc.rpc.request({ + 'context': this, + 'method': 'Player.Stop', + 'params': { + 'playerid': this.activePlayerId + }, + 'success': function (data) { + if (data && data.result == 'OK') { + this.playing = false; + this.paused = false; + this.trackBaseTime = 0; + this.trackDurationTime = 0; + this.showPlayButton(); + } + } + }); + } + }, + playPauseTrack: function () { + if (this.activePlayer) { + var method = ((this.playing || this.paused) ? 'Player.PlayPause' : 'Playlist.Play'); + xbmc.rpc.request({ + 'context': this, + 'method': method, + 'params': { + 'playerid': this.activePlayerId + }, + 'success': function (data) { + if (data && data.result) { + this.playing = data.result.speed != 0; + this.paused = data.result.speed == 0; + if (this.playing) { + this.showPauseButton(); + } else { + this.showPlayButton(); + } + } + } + }); + } + }, + showPauseButton: function () { + $('#pbPause').show(); + $('#pbPlay').hide(); + }, + showPlayButton: function () { + $('#pbPause').hide(); + $('#pbPlay').show(); + }, + displayAudioNowPlaying: function () { + if (!this.autoRefreshAudioPlaylist) { + this.autoRefreshAudioPlaylist = true; + this.updateAudioPlaylist(); + } + }, + displayVideoNowPlaying: function () { + if (!this.autoRefreshVideoPlaylist) { + this.autoRefreshVideoPlaylist = true; + this.updateVideoPlaylist(); + } + }, + playPlaylistItem: function (sender) { + var sequenceId = $(sender.currentTarget).attr('seq'); + if (!this.activePlaylistItem || (this.activePlaylistItem !== undefined && sequenceId != this + .activePlaylistItem.seq)) { + xbmc.rpc.request({ + 'method': 'Player.GoTo', + 'params': { + 'playerid': this.activePlayerId, + 'to': sequenceId + }, + 'success': function () {} + }); + } + this.hidePlaylist(); + }, + playlistChanged: function (newPlaylist) { + if (this.activePlaylist && !newPlaylist || !this.activePlaylist && newPlaylist) { + return true; + } + if (!this.activePlaylist && !newPlaylist) { + return false; + } + if (this.activePlaylist.length != newPlaylist.length) { + return true; + } + for (var i = 0; i < newPlaylist.length; i++) { + if (!this.comparePlaylistItems(this.activePlaylist[i], newPlaylist[i])) { + return true; + } + } + return false; + }, + updateAudioPlaylist: function () { + xbmc.rpc.request({ + 'context': this, + 'method': 'Playlist.GetItems', + 'params': { + 'playlistid': this.playlistid, + 'properties': [ + 'title', + 'album', + 'artist', + 'duration', + 'thumbnail' + ] + }, + 'success': function (data) { + if (data && data.result && data.result.items && data.result.items.length > 0 && data + .result.limits.total > 0) { + if (!this.activePlaylistItem || this.playlistChanged(data.result.items) || (this + .activePlaylistItem && (this.activePlaylistItem.seq != this.currentItem) + )) { + var ul = $('<ul>'); + var activeItem; + $.each($(data.result.items), jQuery.proxy(function (i, item) { + var li = $('<li>'); + var code = '<span class="duration">' + xbmc.core + .durationToString(item.duration) + + '</span><div class="trackInfo" title="' + item.title + + ' - ' + item.artist + '"><span class="trackTitle">' + + item.title + '</span> - <span class="trackArtist">' + + item.artist + '</span></div>'; + if (i == this.currentItem) { + activeItem = item; + activeItem.seq = i; + li.addClass('activeItem'); + } + if (i == (this.currentItem + 1)) { + $('#nextTrack').html(code).show(); + } + li.bind('click', jQuery.proxy(this.playPlaylistItem, this)); + ul.append(li.attr('seq', i).html(code)); + }, this)); + if (data.result.limits.total > 1) { + if (activeItem && data.result.limits.total - 1 == activeItem.seq) { + $('#nextTrack').html( + '<div class="trackInfo">Last track in playlist</div>') + .show(); + } + $('#nextText').show(); + $('#nowPlayingPlaylist').html('').append(ul); + } else { + $('#nextText').hide(); + $('#nowPlayingPlaylist').hide(); + $('#nextTrack').hide(); + } + if (!this.comparePlaylistItems(activeItem, this.activePlaylistItem)) { + this.activePlaylistItem = activeItem; + if (!this.updateActiveItemDurationRunOnce) { + this.updateActiveItemDurationRunOnce = true; + this.updatePlayer(); + } + } else if (!activeItem) { + this.stopRefreshTime(); + } + this.activePlaylist = data.result.items; + $('#videoDescription').hide(); + $('#audioDescription').show(); + $('#nowPlayingPanel').show(); + } + } else { + this.activePlaylist = null; + $('#audioDescription').hide(); + $('#nowPlayingPanel').hide(); + } + if (this.autoRefreshAudioPlaylist) { + setTimeout(jQuery.proxy(this.updateAudioPlaylist, this), 1000); + } + }, + 'error': function (data) { + xbmc.core.displayCommunicationError(); + if (this.autoRefreshAudioPlaylist) { + setTimeout(jQuery.proxy(this.updateAudioPlaylist, this), + 2000); /* Slow down request period */ + } + } + }); + }, + stopAudioPlaylistUpdate: function () { + this.autoRefreshAudioPlaylist = false; + this.updateActiveItemDurationRunOnce = false; + }, + stopVideoPlaylistUpdate: function () { + this.autoRefreshVideoPlaylist = false; + this.updateActiveItemDurationRunOnce = false; + }, + updateActiveItemDurationLoop: function () { + this.activeItemTimer = 0; + this.updatePlayer(); + }, + refreshAudioDataLoop: function () { + this.audioRefreshTimer = 0; + this.refreshAudioData(); + }, + refreshAudioData: function () { + if (this.autoRefreshAudioData && !this.audioRefreshTimer) { + this.audioRefreshTimer = 1; + setTimeout(jQuery.proxy(this.refreshAudioDataLoop, this), 1000); + } + if (this.playing && !this.paused) { + this.trackBaseTime++; + } + if (this.paused) { + this.showPlayButton(); + } else if (this.playing) { + this.showPauseButton(); + } + if (this.activePlaylistItem) { + if (this.activePlaylistItem != this.lastPlaylistItem) { + this.lastPlaylistItem = this.activePlaylistItem; + var imgPath = xbmc.core.DEFAULT_ALBUM_COVER; + if (this.activePlaylistItem.thumbnail) { + imgPath = 'image/' + encodeURI(this.activePlaylistItem.thumbnail); + } + $('#audioCoverArt').html('<img src="' + imgPath + '" alt="' + this.activePlaylistItem.album + + ' cover art">'); + $('#audioTrackTitle').html('<span title="' + this.activePlaylistItem.title + '">' + this + .activePlaylistItem.title + '</span>'); + if (this.activePlaylistItem.album) { + $('#audioAlbumTitle').html('<span title="' + this.activePlaylistItem.album + '">' + this + .activePlaylistItem.album + '</span>') + .show(); + } else { + $('#audioAlbumTitle').hide(); + } + $('#audioArtistTitle').html(this.activePlaylistItem.artist); + $('#progressBar').attr('style', ''); + } + $('#audioDuration').html(xbmc.core.durationToString(this.trackBaseTime) + ' / ' + xbmc.core + .durationToString(this.trackDurationTime)); + var buttonWidth = $('#progressBar .progressIndicator').width(); + var progressBarWidth = (this.trackBaseTime / this.trackDurationTime) * 100; + var progressSliderPosition = Math.ceil(($('#progressBar').width() / 100) * progressBarWidth) - + buttonWidth; + if (progressSliderPosition < 0) { + progressSliderPosition = 0; + } + if (progressBarWidth <= 100) { + $('#progressBar .elapsedTime').width(progressBarWidth + '%'); + $('#progressBar .progressIndicator').css('left', progressSliderPosition); + } + } + }, + refreshVideoDataLoop: function () { + this.videoRefreshTimer = 0; + this.refreshVideoData(); + }, + refreshVideoData: function () { + if (this.autoRefreshVideoData && !this.videoRefreshTimer) { + this.videoRefreshTimer = 1; + setTimeout(jQuery.proxy(this.refreshVideoDataLoop, this), 1500); + } + if (this.playing && !this.paused) { + this.trackBaseTime++; + } + if (this.paused) { + this.showPlayButton(); + } else if (this.playing) { + this.showPauseButton(); + } + if (this.activePlaylistItem) { + if (this.activePlaylistItem != this.lastPlaylistItem) { + this.lastPlaylistItem = this.activePlaylistItem; + var imgPath = xbmc.core.DEFAULT_VIDEO_COVER; + if (this.activePlaylistItem.thumbnail) { + imgPath = 'image/' + encodeURI(this.activePlaylistItem.thumbnail); + } + $('#videoCoverArt').html('<img src="' + imgPath + '" alt="' + this.activePlaylistItem.title + + ' cover art">'); + $('#videoShowTitle').html(this.activePlaylistItem.showtitle || ' '); + var extra = ''; + if (this.activePlaylistItem.season >= 0 && this.activePlaylistItem.episode >= 0) { + extra = this.activePlaylistItem.season + 'x' + this.activePlaylistItem.episode + ' '; + } + $('#videoTitle').html(extra + this.activePlaylistItem.title); + } + $('#videoDuration').html(xbmc.core.durationToString(this.trackBaseTime) + ' / ' + xbmc.core + .durationToString(this.trackDurationTime)); + var buttonWidth = $('#progressBar .progressIndicator').width(); + var progressBarWidth = (this.trackBaseTime / this.trackDurationTime) * 100; + var progressSliderPosition = Math.ceil(($('#progressBar').width() / 100) * progressBarWidth) - + buttonWidth; + if (progressSliderPosition < 0) { + progressSliderPosition = 0; + } + if (progressBarWidth <= 100) { + $('#progressBar .elapsedTime').width(progressBarWidth + '%'); + $('#progressBar .progressIndicator').css('left', progressSliderPosition); + } + } + }, + stopRefreshTime: function () { + this.autoRefreshAudioData = false; + this.autoRefreshVideoData = false; + }, + comparePlaylistItems: function (item1, item2) { + if (!item1 || !item2) { + if (!item1 && !item2) { + return true; + } + return false; + } + if (item1.title != item2.title) { + return false; + } + if (item1.album != item2.album) { + return false; + } + if (item1.artist != item2.artist) { + return false; + } + if (item1.duration != item2.duration) { + return false; + } + if (item1.label != item2.label) { + return false; + } + if (item1.season != item2.season) { + return false; + } + if (item1.episode != item2.episode) { + return false; + } + return true; + }, + updateVideoPlaylist: function () { + xbmc.rpc.request({ + 'context': this, + 'method': 'Playlist.GetItems', + 'params': { + 'playlistid': this.playlistid, + 'properties': [ + 'title', + 'season', + 'episode', + 'plot', + 'runtime', + 'showtitle', + 'thumbnail' + ] + }, + 'success': function (data) { + if (data && data.result && data.result.items && data.result.items.length > 0 && data + .result.limits.total > 0) { + if (this.playlistChanged(data.result.items)) { + var ul = $('<ul>'); + var activeItem; + $.each($(data.result.items), jQuery.proxy(function (i, item) { + var li = $('<li>'); + var extra = ''; + if (item.season >= 0 && item.episode >= 0) { + extra = item.season + 'x' + item.episode + ' '; + } + var code = '<span class="duration">' + xbmc.core + .durationToString(item.runtime) + + '</span><div class="trackInfo" title="' + extra + item + .title + '"><span class="trackTitle">' + extra + item + .title + '</span></div>'; + if (i == this.currentItem) { + activeItem = item; + activeItem.seq = i; + li.addClass('activeItem'); + } + if (i == (this.currentItem + 1)) { + $('#nextTrack').html(code).show(); + } + li.bind('click', jQuery.proxy(this.playPlaylistItem, this)); + ul.append(li.attr('seq', i).html(code)); + }, this)); + if (data.result.limits.total > 1) { + $('#nextText').show(); + if (activeItem && data.result.limits.total == activeItem.seq) { + $('#nextTrack').html( + '<div class="trackInfo">Last track in playlist</div>') + .show(); + } + $('#nowPlayingPlaylist').html('').append(ul); + } else { + $('#nextText').hide(); + $('#nowPlayingPlaylist').hide(); + $('#nextTrack').hide(); + } + if (!this.comparePlaylistItems(activeItem, this.activePlaylistItem)) { + this.activePlaylistItem = activeItem; + if (!this.updateActiveItemDurationRunOnce) { + this.updateActiveItemDurationRunOnce = true; + this.updatePlayer(); + } + } else if (!activeItem) { + this.stopRefreshTime(); + } + this.activePlaylist = data.result.items; + $('#videoDescription').show(); + $('#audioDescription').hide(); + $('#nowPlayingPanel').show(); + } + } else { + xbmc.rpc.request({ + 'context': this, + 'method': 'Player.GetItem', + 'params': { + 'playerid': this.activePlayerId, + 'properties': [ + 'title', + 'season', + 'episode', + 'plot', + 'runtime', + 'showtitle', + 'thumbnail' + ] + }, + 'success': function (data) { + if (data && data.result && data.result.item) { + this.activePlaylistItem = data.result.item; + if (!this.updateActiveItemDurationRunOnce) { + this.updateActiveItemDurationRunOnce = true; + this.updatePlayer(); + } + + $('#nextText').hide(); + $('#nowPlayingPlaylist').hide(); + $('#nextTrack').hide(); + + $('#videoDescription').show(); + $('#audioDescription').hide(); + $('#nowPlayingPanel').show(); + } else { + this.activePlaylist = null; + $('#videoDescription').hide(); + $('#nowPlayingPanel').hide(); + } + }, + 'error': function (data) { + xbmc.core.displayCommunicationError(); + if (this.autoRefreshVideoPlaylist) { + setTimeout(jQuery.proxy(this.updateVideoPlaylist, this), + 2000); /* Slow down request period */ + } + } + }); + } + if (this.autoRefreshVideoPlaylist) { + setTimeout(jQuery.proxy(this.updateVideoPlaylist, this), 1000); + } + }, + 'error': function (data) { + xbmc.core.displayCommunicationError(); + if (this.autoRefreshVideoPlaylist) { + setTimeout(jQuery.proxy(this.updateVideoPlaylist, this), + 2000); /* Slow down request period */ + } + } + }); + } +}
\ No newline at end of file diff --git a/debian/webinterface-default/js/json2.js b/debian/webinterface-default/js/json2.js new file mode 100644 index 0000000..edb7751 --- /dev/null +++ b/debian/webinterface-default/js/json2.js @@ -0,0 +1,492 @@ +/* + json2.js + 2012-10-08 + + Public Domain. + + NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK. + + See http://www.JSON.org/js.html + + + This code should be minified before deployment. + See http://javascript.crockford.com/jsmin.html + + USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO + NOT CONTROL. + + + This file creates a global JSON object containing two methods: stringify + and parse. + + JSON.stringify(value, replacer, space) + value any JavaScript value, usually an object or array. + + replacer an optional parameter that determines how object + values are stringified for objects. It can be a + function or an array of strings. + + space an optional parameter that specifies the indentation + of nested structures. If it is omitted, the text will + be packed without extra whitespace. If it is a number, + it will specify the number of spaces to indent at each + level. If it is a string (such as '\t' or ' '), + it contains the characters used to indent at each level. + + This method produces a JSON text from a JavaScript value. + + When an object value is found, if the object contains a toJSON + method, its toJSON method will be called and the result will be + stringified. A toJSON method does not serialize: it returns the + value represented by the name/value pair that should be serialized, + or undefined if nothing should be serialized. The toJSON method + will be passed the key associated with the value, and this will be + bound to the value + + For example, this would serialize Dates as ISO strings. + + Date.prototype.toJSON = function (key) { + function f(n) { + // Format integers to have at least two digits. + return n < 10 ? '0' + n : n; + } + + return this.getUTCFullYear() + '-' + + f(this.getUTCMonth() + 1) + '-' + + f(this.getUTCDate()) + 'T' + + f(this.getUTCHours()) + ':' + + f(this.getUTCMinutes()) + ':' + + f(this.getUTCSeconds()) + 'Z'; + }; + + You can provide an optional replacer method. It will be passed the + key and value of each member, with this bound to the containing + object. The value that is returned from your method will be + serialized. If your method returns undefined, then the member will + be excluded from the serialization. + + If the replacer parameter is an array of strings, then it will be + used to select the members to be serialized. It filters the results + such that only members with keys listed in the replacer array are + stringified. + + Values that do not have JSON representations, such as undefined or + functions, will not be serialized. Such values in objects will be + dropped; in arrays they will be replaced with null. You can use + a replacer function to replace those with JSON values. + JSON.stringify(undefined) returns undefined. + + The optional space parameter produces a stringification of the + value that is filled with line breaks and indentation to make it + easier to read. + + If the space parameter is a non-empty string, then that string will + be used for indentation. If the space parameter is a number, then + the indentation will be that many spaces. + + Example: + + text = JSON.stringify(['e', {pluribus: 'unum'}]); + // text is '["e",{"pluribus":"unum"}]' + + + text = JSON.stringify(['e', {pluribus: 'unum'}], null, '\t'); + // text is '[\n\t"e",\n\t{\n\t\t"pluribus": "unum"\n\t}\n]' + + text = JSON.stringify([new Date()], function (key, value) { + return this[key] instanceof Date ? + 'Date(' + this[key] + ')' : value; + }); + // text is '["Date(---current time---)"]' + + + JSON.parse(text, reviver) + This method parses a JSON text to produce an object or array. + It can throw a SyntaxError exception. + + The optional reviver parameter is a function that can filter and + transform the results. It receives each of the keys and values, + and its return value is used instead of the original value. + If it returns what it received, then the structure is not modified. + If it returns undefined then the member is deleted. + + Example: + + // Parse the text. Values that look like ISO date strings will + // be converted to Date objects. + + myData = JSON.parse(text, function (key, value) { + var a; + if (typeof value === 'string') { + a = +/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value); + if (a) { + return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4], + +a[5], +a[6])); + } + } + return value; + }); + + myData = JSON.parse('["Date(09/09/2001)"]', function (key, value) { + var d; + if (typeof value === 'string' && + value.slice(0, 5) === 'Date(' && + value.slice(-1) === ')') { + d = new Date(value.slice(5, -1)); + if (d) { + return d; + } + } + return value; + }); + + + This is a reference implementation. You are free to copy, modify, or + redistribute. +*/ + +/*jslint evil: true, regexp: true */ + +/*members "", "\b", "\t", "\n", "\f", "\r", "\"", JSON, "\\", apply, + call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours, + getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join, + lastIndex, length, parse, prototype, push, replace, slice, stringify, + test, toJSON, toString, valueOf +*/ + + +// Create a JSON object only if one does not already exist. We create the +// methods in a closure to avoid creating global variables. + +if (typeof JSON !== 'object') { + JSON = {}; +} + +(function () { + 'use strict'; + + function f(n) { + // Format integers to have at least two digits. + return n < 10 ? '0' + n : n; + } + + if (typeof Date.prototype.toJSON !== 'function') { + + Date.prototype.toJSON = function (key) { + + return isFinite(this.valueOf()) ? + this.getUTCFullYear() + '-' + + f(this.getUTCMonth() + 1) + '-' + + f(this.getUTCDate()) + 'T' + + f(this.getUTCHours()) + ':' + + f(this.getUTCMinutes()) + ':' + + f(this.getUTCSeconds()) + 'Z' : + null; + }; + + String.prototype.toJSON = + Number.prototype.toJSON = + Boolean.prototype.toJSON = function (key) { + return this.valueOf(); + }; + } + + var cx = + /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, + escapable = + /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, + gap, + indent, + meta = { // table of character substitutions + '\b': '\\b', + '\t': '\\t', + '\n': '\\n', + '\f': '\\f', + '\r': '\\r', + '"': '\\"', + '\\': '\\\\' + }, + rep; + + + function quote(string) { + + // If the string contains no control characters, no quote characters, and no + // backslash characters, then we can safely slap some quotes around it. + // Otherwise we must also replace the offending characters with safe escape + // sequences. + + escapable.lastIndex = 0; + return escapable.test(string) ? '"' + string.replace(escapable, function (a) { + var c = meta[a]; + return typeof c === 'string' ? + c : + '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); + }) + '"' : '"' + string + '"'; + } + + + function str(key, holder) { + + // Produce a string from holder[key]. + + var i, // The loop counter. + k, // The member key. + v, // The member value. + length, + mind = gap, + partial, + value = holder[key]; + + // If the value has a toJSON method, call it to obtain a replacement value. + + if (value && typeof value === 'object' && + typeof value.toJSON === 'function') { + value = value.toJSON(key); + } + + // If we were called with a replacer function, then call the replacer to + // obtain a replacement value. + + if (typeof rep === 'function') { + value = rep.call(holder, key, value); + } + + // What happens next depends on the value's type. + + switch (typeof value) { + case 'string': + return quote(value); + + case 'number': + + // JSON numbers must be finite. Encode non-finite numbers as null. + + return isFinite(value) ? String(value) : 'null'; + + case 'boolean': + case 'null': + + // If the value is a boolean or null, convert it to a string. Note: + // typeof null does not produce 'null'. The case is included here in + // the remote chance that this gets fixed someday. + + return String(value); + + // If the type is 'object', we might be dealing with an object or an array or + // null. + + case 'object': + + // Due to a specification blunder in ECMAScript, typeof null is 'object', + // so watch out for that case. + + if (!value) { + return 'null'; + } + + // Make an array to hold the partial results of stringifying this object value. + + gap += indent; + partial = []; + + // Is the value an array? + + if (Object.prototype.toString.apply(value) === '[object Array]') { + + // The value is an array. Stringify every element. Use null as a placeholder + // for non-JSON values. + + length = value.length; + for (i = 0; i < length; i += 1) { + partial[i] = str(i, value) || 'null'; + } + + // Join all of the elements together, separated with commas, and wrap them in + // brackets. + + v = partial.length === 0 ? + '[]' : + gap ? + '[\n' + gap + partial.join(',\n' + gap) + '\n' + mind + ']' : + '[' + partial.join(',') + ']'; + gap = mind; + return v; + } + + // If the replacer is an array, use it to select the members to be stringified. + + if (rep && typeof rep === 'object') { + length = rep.length; + for (i = 0; i < length; i += 1) { + if (typeof rep[i] === 'string') { + k = rep[i]; + v = str(k, value); + if (v) { + partial.push(quote(k) + (gap ? ': ' : ':') + v); + } + } + } + } else { + + // Otherwise, iterate through all of the keys in the object. + + for (k in value) { + if (Object.prototype.hasOwnProperty.call(value, k)) { + v = str(k, value); + if (v) { + partial.push(quote(k) + (gap ? ': ' : ':') + v); + } + } + } + } + + // Join all of the member texts together, separated with commas, + // and wrap them in braces. + + v = partial.length === 0 ? + '{}' : + gap ? + '{\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '}' : + '{' + partial.join(',') + '}'; + gap = mind; + return v; + } + } + + // If the JSON object does not yet have a stringify method, give it one. + + if (typeof JSON.stringify !== 'function') { + JSON.stringify = function (value, replacer, space) { + + // The stringify method takes a value and an optional replacer, and an optional + // space parameter, and returns a JSON text. The replacer can be a function + // that can replace values, or an array of strings that will select the keys. + // A default replacer method can be provided. Use of the space parameter can + // produce text that is more easily readable. + + var i; + gap = ''; + indent = ''; + + // If the space parameter is a number, make an indent string containing that + // many spaces. + + if (typeof space === 'number') { + for (i = 0; i < space; i += 1) { + indent += ' '; + } + + // If the space parameter is a string, it will be used as the indent string. + + } else if (typeof space === 'string') { + indent = space; + } + + // If there is a replacer, it must be a function or an array. + // Otherwise, throw an error. + + rep = replacer; + if (replacer && typeof replacer !== 'function' && + (typeof replacer !== 'object' || + typeof replacer.length !== 'number')) { + throw new Error('JSON.stringify'); + } + + // Make a fake root object containing our value under the key of ''. + // Return the result of stringifying the value. + + return str('', { + '': value + }); + }; + } + + + // If the JSON object does not yet have a parse method, give it one. + + if (typeof JSON.parse !== 'function') { + JSON.parse = function (text, reviver) { + + // The parse method takes a text and an optional reviver function, and returns + // a JavaScript value if the text is a valid JSON text. + + var j; + + function walk(holder, key) { + + // The walk method is used to recursively walk the resulting structure so + // that modifications can be made. + + var k, v, value = holder[key]; + if (value && typeof value === 'object') { + for (k in value) { + if (Object.prototype.hasOwnProperty.call(value, k)) { + v = walk(value, k); + if (v !== undefined) { + value[k] = v; + } else { + delete value[k]; + } + } + } + } + return reviver.call(holder, key, value); + } + + + // Parsing happens in four stages. In the first stage, we replace certain + // Unicode characters with escape sequences. JavaScript handles many characters + // incorrectly, either silently deleting them, or treating them as line endings. + + text = String(text); + cx.lastIndex = 0; + if (cx.test(text)) { + text = text.replace(cx, function (a) { + return '\\u' + + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); + }); + } + + // In the second stage, we run the text against regular expressions that look + // for non-JSON patterns. We are especially concerned with '()' and 'new' + // because they can cause invocation, and '=' because it can cause mutation. + // But just to be safe, we want to reject all unexpected forms. + + // We split the second stage into 4 regexp operations in order to work around + // crippling inefficiencies in IE's and Safari's regexp engines. First we + // replace the JSON backslash pairs with '@' (a non-JSON character). Second, we + // replace all simple value tokens with ']' characters. Third, we delete all + // open brackets that follow a colon or comma or that begin the text. Finally, + // we look to see that the remaining characters are only whitespace or ']' or + // ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval. + + if (/^[\],:{}\s]*$/ + .test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@') + .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']') + .replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) { + + // In the third stage we use the eval function to compile the text into a + // JavaScript structure. The '{' operator is subject to a syntactic ambiguity + // in JavaScript: it can begin a block or an object literal. We wrap the text + // in parens to eliminate the ambiguity. + + j = eval('(' + text + ')'); + + // In the optional fourth stage, we recursively walk the new structure, passing + // each name/value pair to a reviver function for possible transformation. + + return typeof reviver === 'function' ? + walk({ + '': j + }, '') : + j; + } + + // If the text is not JSON parseable, then a SyntaxError is thrown. + + throw new SyntaxError('JSON.parse'); + }; + } +}());
\ No newline at end of file diff --git a/debian/webinterface-default/js/xbmc.core.js b/debian/webinterface-default/js/xbmc.core.js new file mode 100644 index 0000000..2be141c --- /dev/null +++ b/debian/webinterface-default/js/xbmc.core.js @@ -0,0 +1,90 @@ +/* + * Copyright (C) 2005-2013 Team XBMC + * http://xbmc.org + * + * This Program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This Program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with XBMC; see the file COPYING. If not, see + * <http://www.gnu.org/licenses/>. + * + */ + +(function (window) { + "use strict"; + + var xbmc = window.xbmc || {}; + xbmc.core = { + 'DEFAULT_ALBUM_COVER': 'images/DefaultAlbumCover.png', + 'DEFAULT_VIDEO_COVER': 'images/DefaultVideo.png', + 'JSON_RPC': 'jsonrpc', + 'applyDeviceFixes': function () { + window.document.addEventListener('touchmove', function (e) { + e.preventDefault(); + }); + }, + 'displayCommunicationError': function (m) { + window.clearTimeout(xbmc.core.commsErrorTimeout); + var message = m || 'Connection to server lost'; + $('#commsErrorPanel').html(message).show(); + xbmc.core.commsErrorTimeout = window.setTimeout('xbmc.core.hideCommunicationError()', 5000); + }, + 'durationToString': function (duration) { + var total_seconds = duration || 0, + seconds = total_seconds % 60, + minutes = Math.floor(total_seconds / 60) % 60, + hours = Math.floor(total_seconds / 3600), + result = ((hours > 0 && ((hours < 10 ? '0' : '') + hours + ':')) || ''); + result += (minutes < 10 ? '0' : '') + minutes + ':'; + result += (seconds < 10 ? '0' : '') + seconds; + return result; + }, + 'getCookie': function (name) { + var i, + match, + haystack = window.document.cookie.split(';'); + for (i = 0; i < haystack.length; i += 1) { + match = haystack[i].match(/^\s*[\S\s]*=([\s\S]*)\s*$/); + if (match && match.length === 2) { + return match[1]; + } + } + return null; + }, + 'hideCommunicationError': function () { + $('#commsErrorPanel').hide(); + }, + 'setCookie': function (name, value, days) { + var date, + expires; + if (name) { + if (days) { + date = new Date(); + date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000)); + expires = "; expires=" + date.toGMTString(); + } else { + expires = ''; + } + window.document.cookie = name + "=" + value + expires + "; path=/"; + } + }, + 'timeToDuration': function (time) { + var duration; + time = time || {}; + duration = ((time.hours || 0) * 3600); + duration += ((time.minutes || 0) * 60); + duration += (time.seconds || 0); + return duration; + } + }; + + window.xbmc = xbmc; +}(window));
\ No newline at end of file diff --git a/debian/webinterface-default/js/xbmc.init.js b/debian/webinterface-default/js/xbmc.init.js new file mode 100644 index 0000000..c61a81f --- /dev/null +++ b/debian/webinterface-default/js/xbmc.init.js @@ -0,0 +1,27 @@ +/* + * Copyright (C) 2005-2013 Team XBMC + * http://xbmc.org + * + * This Program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This Program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with XBMC; see the file COPYING. If not, see + * <http://www.gnu.org/licenses/>. + * + */ + +(function () { + "use strict" + + var mediaLibrary = new MediaLibrary(), + nowPlayingManager = new NowPlayingManager(); + xbmc.core.applyDeviceFixes(); +}());
\ No newline at end of file diff --git a/debian/webinterface-default/js/xbmc.launcher.js b/debian/webinterface-default/js/xbmc.launcher.js new file mode 100644 index 0000000..4f039d6 --- /dev/null +++ b/debian/webinterface-default/js/xbmc.launcher.js @@ -0,0 +1,46 @@ +/* + * Copyright (C) 2005-2013 Team XBMC + * http://xbmc.org + * + * This Program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This Program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with XBMC; see the file COPYING. If not, see + * <http://www.gnu.org/licenses/>. + * + */ + +(function (document) { + "use strict"; + + var i, + script, + debug = false, + /* Set to true to disable cached javascript */ + version = (debug ? Math.random() : '2.1.0'), + scripts = [ + "js/jquery-1.8.2.min.js", + "js/json2.js", + "js/iscroll-min.js", + "js/xbmc.core.js", + "js/xbmc.rpc.js", + "js/MediaLibrary.js", + "js/NowPlayingManager.js", + "js/xbmc.init.js" + ]; + + for (i = 0; i < scripts.length; i += 1) { + script = '<script type="text/javascript" src="'; + script += scripts[i] + '?' + version; + script += '"><\/script>'; + document.write(script); + } +}(window.document));
\ No newline at end of file diff --git a/debian/webinterface-default/js/xbmc.rpc.js b/debian/webinterface-default/js/xbmc.rpc.js new file mode 100644 index 0000000..60b1d8b --- /dev/null +++ b/debian/webinterface-default/js/xbmc.rpc.js @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2005-2013 Team XBMC + * http://xbmc.org + * + * This Program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This Program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with XBMC; see the file COPYING. If not, see + * <http://www.gnu.org/licenses/>. + * + */ + +(function (window) { + + var xbmc = window.xbmc || {}; + + xbmc.rpc = { + 'default_options': { + 'contentType': 'application/json', + 'dataType': 'json', + 'type': 'POST', + 'success': function () { + $('#spinner').hide(); + } + }, + 'request': function (options) { + var request_options = jQuery.extend({}, this.default_options, options); + request_options.url = xbmc.core.JSON_RPC + '?' + options.method; + request_options.data = JSON.stringify({ + 'jsonrpc': '2.0', + 'method': options.method, + 'id': 1, + 'params': request_options.params + }); + return jQuery.ajax(request_options) + } + }; + + window.xbmc = xbmc; + +}(window));
\ No newline at end of file |