diff options
Diffstat (limited to 'http/src/js/pages.timer.js')
-rw-r--r-- | http/src/js/pages.timer.js | 743 |
1 files changed, 743 insertions, 0 deletions
diff --git a/http/src/js/pages.timer.js b/http/src/js/pages.timer.js new file mode 100644 index 0000000..44b1cd7 --- /dev/null +++ b/http/src/js/pages.timer.js @@ -0,0 +1,743 @@ +epgd.sortTable = function (options) { + this.o = $.extend({ + conSel: epgd.$con, + empty: '', + right: 1 + }, options); +} +epgd.sortTable.prototype = { + sortIcons: '<span class="iAsButton i-sort-name-down sort"></span><span class="iAsButton i-sort-name-up sort"></span>', + update: function () { }, + hideHead: function(){ + var $ths = this.$con.find('thead:first').hide().find('>tr>th'); + this.$con.find('tbody:first').html('<tr><td colspan="' + $ths.length + '">' + this.o.empty + + ($ths.last().find('.i-doc-new').wrapAll('<div />').parent().html() || '') + '</td></tr>'); + }, + showHead: function(){ + this.$con.find('>table>thead').show();
+ this.filter();
+ this.sort();
+ }, + getTable: function () { }, + action: function ($el, iconName, data) { + switch (iconName) { + case 'refresh': + this.update(); + break; + case 'detail': + if (!$el[0].eventDetail) + $el[0].eventDetail = new epgd.eventDetail(data); + epgd.utils.loader.process(function () { + $el[0].eventDetail.render(); + }); + break; + } + }, + render: function ($con, searchData) { + this.trs = []; + this.$con = $con || $(this.o.conSel); + this.$con.empty(); + if (!(epgd.login.rights & this.o.right) == this.o.right) return epgd.utils.popup(epgd.tr.error.forbidden, { title: epgd.tr.error.error }); + this.$con.html(this.getTable()); + this.init(); + this.update(searchData); + }, + init: function () {
+ var list = this, + cIndex = 0;
+ this.$con.find('>table').click(function (ev) {
+ var $el = $(ev.target), + el = $el[0], + data = el.getAttribute('data-evId'), + d, + $lastSel; + if (data) + list.action($el, 'detail', data); + else if (ev.target.className == 'i-tv') {
+ epgd.vdrs.current.switchChannel(ev.target.parentNode.id);
+ } else {
+ //if (!searchData || searchData.fromEventDetail != true) + // $(window).trigger("epgd_close.eventDetail"); + $el = $el.closest('span.sort'); + if ($el.length) {
+ $el.parent().parent().find('.ui-state-highlight').removeClass('ui-state-highlight'); + $el.addClass("ui-state-highlight"); + list.sort($el);
+ } else {
+ $el = $(el).closest('span.edit'); + if ($el.length) {
+ list.action($el, $el[0].className.match(/i-([a-z0-9-]+)/)[1]);
+ } if (list.o.selectable) {
+ if (el.nodeName == 'TD') {
+ $el = $(el).parent().toggleClass('selected'); + if (ev.shiftKey && this.lastSel) {
+ $lastSel = $(this.lastSel); + d = $el.index() - $lastSel.index(); + if (d > 0) + $lastSel.nextAll(':lt(' + d + '):visible').toggleClass('selected', $lastSel.hasClass('selected')); + else + $lastSel.prevAll(':lt(' + -d + '):visible').toggleClass('selected', $lastSel.hasClass('selected'));
+ } + else + this.lastSel = $el[0];
+ } else if (el.nodeName == 'B') {
+ d = el.getAttribute('data-t'); + $(list.trs).filter(":visible").toggleClass('selected', d == 1 ? true : d == 0 ? false : undefined); + return false;
+ }
+ }
+ } + return false;
+ }
+ }).find('>thead>tr').find('>th').each(function () {
+ this.cIndex = cIndex;
+ cIndex += this.colSpan;
+ }).end().find('[data-defaultSort="1"]>span.sort:last,[data-defaultSort="-1"]>span.sort:first').addClass('ui-state-highlight'); + this.$con.find('>table>thead input.filter').keyup(function () {
+ list.filter();
+ }).each(function () {
+ if (!this.result)
+ this.result = $('<i style="padding-left:5px;font-weight:normal"></i>').insertAfter(this)[0];
+ }); + }, + sort: function ($el) {
+ $el = $el || this.$con.find('>table>thead .ui-state-highlight');
+ if (!$el.length) return;
+ var i = $el.parent()[0], + d = ($el.hasClass('i-sort-name-down') ? -1 : 1), + trs = this.trs, + l,td; + if (!i.sortInfo) {
+ i = i.cIndex; + for (l = 0; l < trs.length; l++) {
+ td = trs[l].cells[i]; + td.sort = td.getAttribute('data-sort') || $(td).text().toLowerCase();
+ };
+ } else + i = i.cIndex; + trs.sort(function (a, b) {
+ var va = a.cells[i].sort, + vb = b.cells[i].sort; + return (va > vb ? 1 * d : va == vb ? 0 : -1 * d);
+ }); + this.$con.find('>table>tbody').append(trs.slice()); + }, + filter: function(){ + var cells = {},
+ l, i,
+ tr, hide;
+ this.$con.find('>table>thead input.filter').each(function () {
+ if (this.value)
+ cells[this.parentNode.cIndex] = [this.value.toLowerCase(),0,this.result || {}];
+ else if (this.result)
+ this.result.innerHTML= '';
+ });
+ for (l = 0; l < this.trs.length; l++) {
+ tr = this.trs[l];
+ hide = '';
+ for (i in cells) {
+ if (tr.cells[i].innerHTML.toLowerCase().indexOf(cells[i][0]) == -1)
+ hide = 'none';
+ else
+ cells[i][1]++;
+ }
+ tr.style.display = hide;
+ };
+ for (i in cells)
+ if (cells[i][2].innerHTML = cells[i][1]);
+ } +} + +epgd.timerEditChFormat = function (input) {
+ var formats = ',SD,HD,3D', + values = input.value, + i; + if (values) {
+ values = values.split(','); + for (i = 0; i < values.length; i++) + formats = formats.replace(',' + values[i] + ',', ',');
+ } + $('<div title="' + epgd.tr.pages.timerList.chFormat + '"><ol style="float:left; border:2px inset #ddd; min-height:50px; margin-right:20px;">' + + (values.length ? '<li>' + values.join('</li><li>') + '</li>' : '') + + '</ol><ul style="float:left; border:2px inset #ddd; min-height:50px;list-style-type:none">' + + (formats.length > 1 ? '<li>' + formats.slice(1).replace(/,/g, '</li><li>') + '</li>' : '') + '</div>') + .dialog({
+ modal: true, + buttons: [{
+ text: epgd.tr.apply, + click: function () {
+ var val = ''; + $(this).find('ol > li').each(function () { val += ',' + this.innerHTML; }); + input.value = val.slice(1); + $(this).dialog("close");
+ }
+ }, {
+ text: epgd.tr.cancel, + click: function () {
+ $(this).dialog("close");
+ }
+ }]
+ }).find('ul,ol').sortable({
+ connectWith: "ul,ol"
+ }).disableSelection();
+}; + + +// Timer Listen Base Klasse +epgd.timerListBase = epgd.utils.inherits(function (options, dialog) { + this.dialog = dialog; + if (this.dialog) + this.dialog.list = this; + if (!options.conSel) options.conSel = '#content';//'#tabCon'; + if (!options.empty) options.empty = epgd.tr.pages.timerList.empty; + epgd.sortTable.call(this,options); +}, epgd.sortTable); +epgd.timerListBase.prototype.getTable = function () { + var tr = epgd.tr.pages.timerList; + return '<table id="timerList" class="timerTable"><thead><tr><th style="min-width:120px">' + epgd.tr.channel + this.sortIcons + + '</th><th></th><th data-defaultSort="1" colspan="2">' + tr.startTime + this.sortIcons + ' <input type="text" class="filter" style="width:50px" /></th><th>' + + tr.endTime + '</th><th style="min-width:120px">' + epgd.tr.pages.eventDetail.title + this.sortIcons + + ' <input type="text" class="filter" style="width:100px" /></th><th style="min-width:120px">VDR' + this.sortIcons + + ' <input type="text" class="filter" style="width:50px" /></th><th style="min-width:130px">' + this.sortIcons + + (this.o.addNew ? '<span class="iAsButton i-doc-new edit" title="' + tr.newTimer + '"></span>' + + '<span class="iAsButton i-refresh edit" title="' + epgd.tr.reload + '"></span>' : '') + + (this.o.selectable ? '<br clear="all" /><span style="margin-top:3px" class="iAsButton i-trash edit" title="' + epgd.tr.del + '"></span>' + + '<div class="selMarkBlock" style="width:auto"><b title="' + epgd.tr.markAll + '" class="selected" data-t="1"></b><b title="' + epgd.tr.markNone + + '" data-t="0"></b><b title="' + epgd.tr.markToggle + '"><b class="selected"></b></b></div>' : '') + + '</th></tr></thead><tbody></tbody></table>'; +} +epgd.timerListBase.prototype.update = function () { + var timerList = this; + epgd.utils.loader.process(function () {
+ timerList.$con.find('tbody').empty(); + epgd.ajax({ url: epgd.login.url + timerList.o.updateUrl, async: false, cache: false }, function (data) {
+ if (!data.timers.length) {
+ timerList.hideHead();
+ } else {
+ var trs = [], + editIcons = timerList.editIcons, + noEditStates = 'DF', + stateIcons = {
+ 'D': '<div class="i-trash">' + epgd.tr.pages.timerList.timerStates.D + '</div>', // gelöscht + 'E': '<div class="i-warning">' + epgd.tr.pages.timerList.timerStates.E + '</div>', // Fehler + 'F': '<div class="i-ok">' + epgd.tr.pages.timerList.timerStates.F + '</div>', // Aufnahme erfolgreich + 'R': '<div class="i-progress">' + epgd.tr.pages.timerList.timerStates.R + '</div>', // nimmt gerade auf + 'P': '<div class="i-clock">' + epgd.tr.pages.timerList.timerStates.P + '</div>', // wartet auf Aufnhemebeginn + 'U': '<div class="i-help">' + epgd.tr.pages.timerList.timerStates.U + '</div>' // unbekannt + }, + timerActions = epgd.tr.pages.timerList.timerActions, + searchTimerIcon = '<span class="iAsButton i-flashlight edit" title="' + epgd.tr.pages.timer.searchTimerList + ' ' + epgd.tr.edit + '" data-id="$id$">$title$</span>'; + $.each(data.timers, function (id, t) {
+ t.action = t.action ? t.action.toUpperCase() : 'A'; + t.state = t.state ? t.state.toUpperCase() : 'U'; + var vdr = epgd.vdrs.list[t.vdruuid] || { name: '--' }, + //start = t.day ? t.day + parseInt(t.starttime / 100, 10) * 60 * 60 + (t.starttime % 100) * 60 : new String(100 + parseInt(t.endtime / 100, 10)).slice(1) + ':' + (t.endtime % 100), + // searchTimer = t.aux && t.aux.match(/<epgd>.*<expression>([^<]+)<\/expression>/), + tr = $('<tr' + (t.active ? '' : ' class="ui-state-disabled"') + '><td>' + + epgd.channels.getHtml(t.channelid) + '</td><td>' + + (t.action != 'A' + ? '<div class="i-wait">' + timerActions[t.action] + '</div>' + : stateIcons[t.state] + ) + (t.info || '') + '</td>' + + '<td data-sort="' + new String(t.day) + new String(10000 + t.starttime).slice(1) + '">' + + (t.day ? epgd.utils.formatDate(t.day) : '-') + + '</td><td>' + + new String(100 + parseInt(t.starttime / 100, 10)).slice(1) + ':' + new String(100 + parseInt(t.starttime % 100, 10)).slice(1) + + '</td><td>' + + new String(100 + parseInt(t.endtime / 100, 10)).slice(1) + ':' + new String(100 + parseInt(t.endtime % 100, 10)).slice(1) + + '</td><td' + (t.eventid ? ' data-evId="' + t.eventid + '">' + (t.title || '') + '<br />' + (t.shorttext || '') : '>') + '</td><td>' + + vdr.name + '<br />' + (t.directory ? t.directory + '~' : '') + (t.file || '') + '</td><td>' + + (t.autotimerid ? searchTimerIcon.replace('$id$', t.autotimerid).replace('$title$', t.autotimername || t.expression || epgd.tr.pages.timer.searchTimerList) : '') + + (noEditStates.indexOf(t.state) == -1 ? editIcons : '') + '</td></tr>')[0]; + tr.tData = t; + trs.push(tr);
+ }); + timerList.trs = trs; + timerList.showHead(); + /*timerList.$con.find('>table>tbody>tr').find('>td:eq(1)').tooltip({ + items: "div", content: function () { + return this.innerHTML; + } + })*/
+ } + epgd.utils.loader.close(); + $(window).trigger('timerlist_updated', timerList);
+ });
+ },true); +} +epgd.timerListBase.prototype.action = function ($el, iconName,data) { + //this.dialog && this.dialog.close && this.dialog.close(); + var id; + switch (iconName) { + case 'edit': + case 'doc-new': + this.dialog.render($el.closest('tr')[0].tData); + break; + case 'trash': + this.del(this.getSelectedIds($el)); + break; + case 'flashlight': + id = $el.attr('data-id'), + list = this; + $(window).one('searchTimerList_updated', function () { + list.$con.find('tbody>tr').each(function () { + if (this.tData.id == id) { + epgd.pages.searchTimerList.dialog.render(this.tData); + return false; + } + }); + }); + epgd.$menu.menu("select", { target: "#menu_searchTimerList" }); + break; + default: + epgd.sortTable.prototype.action.call(this,$el, iconName, data); + } +}; +epgd.timerListBase.prototype.editIcons = '<span class="iAsButton i-trash edit" title="' + epgd.tr.del + '"></span><span class="iAsButton i-edit edit" title="' + epgd.tr.edit + '"></span>'; +epgd.timerListBase.prototype.getSelectedIds = function ($el) {
+ var ids = [];
+ if ($el[0].parentNode.nodeName == 'TH') {
+ $(this.trs).filter(".selected:visible").each(function () {
+ ids.push(this.tData.id);
+ });
+ } else
+ ids.push($el.closest('tr')[0].tData.id);
+ return ids;
+} +epgd.timerListBase.prototype.del = function (ids, succFunc, arrayName) {
+ var self = this, + allIDs= $.isArray(ids) ? ids : [parseInt(ids,10)]; + ids && allIDs.length && epgd.utils.confirm(epgd.tr.confirmDelete + (allIDs.length > 1 ? '<br />' + allIDs.length + epgd.tr.entries : ''), function (ok) {
+ ok && self.saveArray(allIDs, arrayName || "delete", succFunc);
+ });
+} +epgd.timerListBase.prototype.saveArray = function (ids, arrayName, succFunc) { + var self = this, + allIDs= $.isArray(ids) ? ids : [parseInt(ids,10)], + data= {}; + data[arrayName] = allIDs; + ids && allIDs.length && this.save(data, null, function (jqxhr) {
+ try {
+ var ids = ','; + $(jqxhr.responseJSON.result.failed).each(function () {
+ ids += allIDs[this] + ',';
+ }); + if (ids.length > 1) {
+ $(self.trs).each(function () {
+ if (ids.indexOf(',' + this.tData.id + ',') >= 0) + this.style.backgroundColor = 'red';
+ });
+ }
+ } catch (e) { } + return false;
+ }, succFunc); +}; +epgd.timerListBase.prototype.save = function (data, url, failFunc, succFunc) { + if (!data) return false; + var timerList = this; + epgd.utils.loader.process(function () {
+ epgd.ajax({
+ url: epgd.login.url + (url || timerList.o.saveUrl), + type: 'post', + data: JSON.stringify(data)
+ }, function (data) {
+ data = data.result; + if (data.state == 200) + epgd.utils.topInfo(epgd.tr.dataSaved); + else + epgd.utils.topInfo(data.message, { isError: 1 }); + epgd.utils.loader.close(); + timerList.$con && timerList.$con.parent().length && timerList.update();
+ succFunc && succFunc.call(timerList);
+ }, failFunc);
+ },true); + return true; +} + +// searchResult List - Klasse +epgd.searchResultList = epgd.utils.inherits(function (options, dialog) {
+ epgd.timerListBase.call(this, $.extend({
+ saveUrl: 'data/save-searchtimer'
+ }, options),dialog);
+}, epgd.timerListBase); +epgd.searchResultList.prototype.getTable = function () {
+ var tr = epgd.tr.pages.timerList; + return '<table id="searchResultList" class="timerTable"><thead><tr><th style="min-width:120px">' + epgd.tr.channel + this.sortIcons + '</th><th data-defaultSort="1" colspan="2">' + tr.startTime + this.sortIcons + '</th><th>' + + tr.endTime + '</th><th>' + epgd.tr.pages.eventDetail.title + this.sortIcons + '</th><th></th></tr></thead><tbody></tbody></table>';
+} +epgd.searchResultList.prototype.update = function (d) {
+ if (!d) + return false; + var timerList = this; + d.id && delete d.id;
+ d.name && delete d.name;
+ d.max = epgd.profile.maxListEntries; + epgd.utils.loader.process(function () {
+ timerList.$con.find('tbody').empty();
+ epgd.ajax({
+ url: epgd.login.url + "data/search", + type: 'post', + data: JSON.stringify(d)
+ }, function (data) {
+ var trs = [], i; + if (!data.events || !data.events.length) {
+ timerList.hideHead();
+ } else {
+ data.count > d.max && epgd.utils.popup('Achtung! Es wurden ' + data.count + ' Ergebnisse gefunden. Angezeigt werden aber nur ' + d.max + '.<br /> Das Nachladen ist noch nicht implementiert! Der Wert kann in den Einstellungen angepasst werden');
+ $.each(data.events, function (id, e) {
+ var trClass = '', + icons = '', + d; + if (e.dones) {
+ for (i in e.dones) {
+ d = e.dones[i]; + icons += '<span class="iAsButton" title="' + epgd.tr.pages.timerList.doneStates[d.state] + ' data-id=' + d.id + '">' + d.state + '</span>'; + if (d.state == 'R') + trClass = ' class="ui-state-disabled"';
+ }
+ } + trs.push($('<tr' + trClass + '><td>' + + epgd.channels.getHtml(e.channelid) + '</td><td data-sort="' + e.starttime + '">' + + epgd.utils.formatDate(e.starttime) + '</td><td>' + + epgd.utils.formatTime(e.starttime) + '</td><td>' + + epgd.utils.formatTime(e.starttime + e.duration) + + '</td><td data-evId="' + e.id + '">' + e.title + '<br />' + (e.shorttext || '') + + '</td><td>' + icons + '</td></tr>').tooltip()[0]);
+ }); + timerList.trs = trs; + timerList.showHead();
+ } + epgd.utils.loader.close(); + timerList.dialog && timerList.dialog.resize && window.setTimeout(function(){timerList.dialog.resize();},100); + });
+ },true);
+}; +// Timerliste eines Suchtimers - Klasse +epgd.searchTimerTimerList = epgd.utils.inherits(function (options, dialog) {
+ epgd.timerListBase.call(this, $.extend({
+ saveUrl: 'data/save-timer', + updateUrl: 'data/timers?state=P,R'
+ }, options), dialog);
+}, epgd.timerListBase); +epgd.searchTimerTimerList.prototype.getTable = function () {
+ var tr = epgd.tr.pages.timerList; + return '<table class="timerTable"><thead><tr><th>' + epgd.tr.channel + this.sortIcons + '</th><th data-defaultSort="1" colspan="2">' + tr.startTime + this.sortIcons + '</th><th>' + + tr.endTime + '</th><th>' + epgd.tr.pages.eventDetail.title + this.sortIcons + '</th><th>VDR' + this.sortIcons + '</th><th>' + + '</th></tr></thead><tbody></tbody></table>';
+} +epgd.searchTimerTimerList.prototype.update = function (d) {
+ if (!d) + return false;
+ var timerList = this; + epgd.utils.loader.process(function () {
+ timerList.$con.find('tbody').empty();
+ epgd.ajax({ url: epgd.login.url + timerList.o.updateUrl + '&autotimerid=' + d.id, async: true, cache: false }, function (data) {
+ var trs = [], + editIcons = '<span class="iAsButton i-trash edit" title="' + epgd.tr.del + '"></span>'; + if (!data.timers.length) {
+ timerList.hideHead();
+ } else {
+ $.each(data.timers, function (id, t) {
+ var vdr = epgd.vdrs.list[t.vdruuid] || { name: '--' }, + tr = $('<tr' + (t.active ? '' : ' class="ui-state-disabled"') + '><td>' + + epgd.channels.getHtml(t.channelid) + '</td><td data-sort="' + new String(t.day) + new String(10000 + t.starttime).slice(1) + '">' + + (t.day ? $.datepicker.formatDate(epgd.tr.dateTimePicker.dateFormat, epgd.utils.date(t.day)) : '-') + + '</td><td>' + + new String(100 + parseInt(t.starttime / 100, 10)).slice(1) + ':' + new String(100 + parseInt(t.starttime % 100, 10)).slice(1) + + '</td><td>' + + new String(100 + parseInt(t.endtime / 100, 10)).slice(1) + ':' + new String(100 + parseInt(t.endtime % 100, 10)).slice(1) + + '</td><td' + (t.eventid ? ' data-evId="' + t.eventid + '">' + t.title + '<br />' + (t.shorttext || '') : '>') + '</td><td>' + + vdr.name + '<br />' + t.file + '</td><td>' + + editIcons + '</td></tr>')[0]; + tr.tData = t; + trs.push(tr);
+ }); + timerList.trs = trs; + timerList.showHead();
+ } + timerList.dialog && timerList.dialog.resize && window.setTimeout(function () { timerList.dialog.resize(); }, 100); + epgd.utils.loader.close();
+ });
+ });
+} + +// anstehende Timer +epgd.pages.timerList = new epgd.timerListBase({
+ updateUrl: 'data/timers?state=P,R',
+ saveUrl: 'data/save-timer',
+ selectable: true,
+ addNew: true,
+ right: epgd.rights.umTimer
+}, new epgd.timerDialog()); +// Küzlich erledigte Timer +epgd.pages.timersDone = new epgd.timerListBase({
+ updateUrl: 'data/timers?state=D,F,E&action=A',
+ right: epgd.rights.umTimer
+}); +epgd.pages.timersDone.getTable = function () {
+ return epgd.timerListBase.prototype.getTable.call(this).replace('data-defaultSort="1"', 'data-defaultSort="-1"')
+} +// Timerhistorie +epgd.pages.timerListDone = new epgd.timerListBase({
+ updateUrl: 'data/donetimers', saveUrl: 'data/store-donetimers',
+ selectable: true,
+ right: epgd.rights.umTimer
+}); +epgd.pages.timerListDone.getTable = function () { + return '<table id="timerListDone" class="timerTable"><thead><tr><th style="min-width:120px"><input type="text" class="filter" style="width:40px" />' + + this.sortIcons + '</th><th data-defaultSort="-1" style="min-width:180px">' + + epgd.tr.pages.timerList.recordTime + this.sortIcons + '</th><th>' + + epgd.tr.pages.eventDetail.title + ' <input type="text" class="filter" />' + this.sortIcons + '</th><th style="min-width:120px">' + + epgd.tr.channel + this.sortIcons + '</th><th style="min-width:100px">' + this.sortIcons + + '<span style="margin-top:3px" class="iAsButton i-trash edit" title="' + epgd.tr.del + '"></span>' + + '<div class="selMarkBlock" style="width:auto"><b title="' + epgd.tr.markAll + '" class="selected" data-t="1"></b><b title="' + epgd.tr.markNone + + '" data-t="0"></b><b title="' + epgd.tr.markToggle + '"><b class="selected"></b></b></div>' + + '</th></tr></thead><tbody></tbody></table>'; +} +epgd.pages.timerListDone.action = function ($el, iconName,data) {
+ if (iconName == 'detail' && !$el[0].eventDetail)
+ $el[0].eventDetail = new epgd.doneTimerDetail($el.parent()[0]);
+ epgd.timerListBase.prototype.action.call(this, $el, iconName, data);
+} +epgd.pages.timerListDone.stateIcons = {
+ 'D': '<div class="i-trash">' + epgd.tr.pages.timerList.doneStates.D + '</div>', // gelöscht + 'F': '<div class="i-warning">' + epgd.tr.pages.timerList.doneStates.F + '</div>', // Aufnahme fehlgeschlagen + 'f': '<div class="i-warning">' + epgd.tr.pages.timerList.doneStates.f + '</div>', // Timer konnte nicht erstellt werden + 'R': '<div class="i-ok">' + epgd.tr.pages.timerList.doneStates.R + '</div>', // Aufnahme fertig + 'C': '<div class="i-buffer">' + epgd.tr.pages.timerList.doneStates.C + '</div>', // Timer bereits erstellt + 'Q': '<div class="i-clock">' + epgd.tr.pages.timerList.doneStates.Q + '</div>' // Timer in Vorbereitung +} +epgd.pages.timerListDone.update = function () { + var timerList = this; + epgd.utils.loader.process(function () {
+ epgd.ajax({ url: epgd.login.url + timerList.o.updateUrl, async: false, cache: false }, function (data) {
+ timerList.$con.find('tbody').empty(); + if (!data.donetimers.length) {
+ timerList.hideHead();
+ } else {
+ var trs = [], + tr, i, t, + searchTimerIcon = '<span class="iAsButton i-flashlight edit" title="' + epgd.tr.pages.timer.searchTimerList + ' ' + epgd.tr.edit + '" data-id="$id$">$title$</span>'; + for (i in data.donetimers) {
+ t = data.donetimers[i]; + tr = $('<tr><td>' + + (t.state && timerList.stateIcons[t.state] || '') + '</td>' + + '<td data-sort="' + t.starttime + '">' + + epgd.utils.formatDateTime(t.starttime) + '<br />' + parseInt(t.duration / 60, 10) + ' ' + epgd.tr.minutes + + '</td><td data-evId="' + t.id + '">' + (t.title || '') + '<br />' + (t.shorttext || '') + '</td><td data-sort="' + t.channelid + '">' + + epgd.channels.getHtml(t.channelid) + '</td><td>' + + '<span class="iAsButton i-trash edit" title="' + epgd.tr.del + '"></span>' + + (t.autotimerid ? searchTimerIcon.replace('$id$', t.autotimerid).replace('$title$', t.autotimername || t.expression || epgd.tr.pages.timer.searchTimerList) : '') + + '</td></tr>')[0]; + tr.tData = t; + trs.push(tr);
+ }; + timerList.trs = trs; + timerList.showHead();
+ } + epgd.utils.loader.close(); + $(window).trigger('timerlist_updated', timerList);
+ });
+ },true); +} +// ungesyncte Aufträge +epgd.pages.timerJobList = new epgd.timerListBase({
+ updateUrl: "data/timers?notaction=A",
+ saveUrl: 'data/delete-timerjobs',
+ selectable: true,
+ right: epgd.rights.umTimer
+}, new epgd.timerDialog()); + +// Suchtimer +epgd.pages.searchTimerList = new epgd.timerListBase({
+ saveUrl: 'data/save-searchtimer',
+ right: epgd.rights.umSearchTimer
+}, new epgd.searchTimerDialog()); +epgd.pages.searchTimerList.getTable = function () { + var tr = epgd.tr.pages.timerList; + return '<table id="timerSearchList" class="timerTable"><thead><tr><th data-defaultSort="1">' + + epgd.tr.pages.search.searchName + '/' + epgd.tr.pages.search.searchExpression + ' <input type="text" class="filter" />' + this.sortIcons + '</th><th>' + 'hits' + this.sortIcons + + '</th><th style="min-width:120px">VDR' + this.sortIcons + '</th><th>' + + '<span class="iAsButton i-doc-new edit" title="' + tr.newTimer + '"></span>' + + '<span class="iAsButton i-refresh edit" title="' + epgd.tr.reload + '"></span>' + + '<span class="iAsButton i-link-ext edit" title="' + tr.searchTimerReload + '"></span>' + + '</th></tr></thead><tbody></tbody></table>'; +} +epgd.pages.searchTimerList.action = function ($el, iconName, data) { + epgd.timerListBase.prototype.action.call(this,$el, iconName, data); + switch (iconName) { + case 'link-ext': + this.triggerUpdate(); + break; + case 'down-dir': + if (!$el[0].tList) { + var dialog={
+ $td: $el.parent().css("position", "relative"),
+ tdHeight: $el.parent().outerHeight() + 10,
+ data: $el.parent().parent()[0].tData,
+ resize: function () {
+ var $table = this.list.$con.find('>table').addClass("sub"); + $table.width(this.$td.parent().outerWidth()); + this.$td.height(this.tdHeight + $table.outerHeight(true) + 10); + //this.$td.append(this.list.$con); + },
+ toggle : function (doShow) {
+ this.list.$con.toggle(doShow); + if (doShow) {
+ this.$td.css("height", "100px");
+ this.list.update(this.data);
+ } else + this.$td.css("height", "auto");
+ } + }, + options= {
+ conSel: $('<div style="position:absolute;z-index:5;top:' + dialog.tdHeight + 'px" />').appendTo(document.body) + }; + $el[0].tList = dialog.data.type == 'S' ? new epgd.searchResultList(options, dialog) : new epgd.searchTimerTimerList(options, dialog); + $el[0].tList.render(); + dialog.$td.append(dialog.list.$con); + } + $el[0].tList.dialog.toggle(true); + $el.removeClass('i-down-dir').addClass('i-right-dir'); + break; + case 'right-dir': + $el.removeClass('i-right-dir').addClass('i-down-dir'); + if ($el[0].tList) + $el[0].tList.dialog.toggle(false); + break; + } +} +epgd.pages.searchTimerList.update = function () { + var timerList = this; + this.$con.find('tbody').empty(); + epgd.utils.loader.process(function () {
+ epgd.ajax({ url: epgd.login.url + "data/searchtimers", async: false, cache: false }, function (data) {
+ var trs = [], + editIcons = timerList.editIcons, + typeIcons = { 'V': 'i-tv', 'R': 'i-record', 'S': 'i-search' }; + if (!data.searchtimers.length) {
+ timerList.hideHead();
+ } else {
+ $.each(data.searchtimers, function (id, t) {
+ var vdr = epgd.vdrs.list[t.vdruuid] || { name: '--' }, + tr = $('<tr' + (t.active ? '' : ' class="ui-state-disabled"') + '><td>' + + '<span class="iAsButton i-down-dir edit" title="' + epgd.tr.pages.timer.timerList + '"></span>' + + '<div class="' + typeIcons[t.type] + '">' + (t.name || t.expression) + '</div></td><td' + + (t.type == 'S' ? '>--' : ' data-sort="' + new String('00000' + t.hits).slice(-5) + '">' + t.hits) + '</td><td>' + + vdr.name + '</td><td>' + editIcons + '</td></tr>')[0]; + tr.tData = t; + trs.push(tr);
+ }); + timerList.trs = trs; + timerList.showHead();
+ } + epgd.utils.loader.close(); + $(window).trigger('searchTimerList_updated', timerList);
+ });
+ }); +} +epgd.pages.searchTimerList.triggerUpdate = function () { + var timerList = this; + epgd.ajax({url: epgd.login.url + 'data/updatesearchtimer'},function (data) { + if (data.result.state == 200) + epgd.utils.topInfo(epgd.tr.dataSaved); + else + epgd.utils.topInfo(data.message, { isError: 1 }); + timerList.update(); + }); +} + +epgd.pages.search = new epgd.searchDialog(); + +//message List +epgd.pages.messageList = new epgd.timerListBase({
+ saveUrl: 'data/markmessages',
+ selectable: true
+}) +epgd.pages.messageList.getTable = function () {
+ return '<table id="messageList" class="timerTable"><thead><tr><th style="width:70px">id' + this.sortIcons + '</th>' + + '<th style="width:120px">' + 'Typ' + ' <input type="text" class="filter" style="width:18px" />' + this.sortIcons + '</th>' + + '<th style="width:140px">' + 'Zeit' + this.sortIcons + '</th>' + + '<th style="width:100px">' + 'Titel' + ' <input type="text" class="filter" style="width:50px" />' + this.sortIcons + '</th>' + + '<th style="min-width:140px">' + 'infotext' + ' <input type="text" class="filter" />' + this.sortIcons + '</th>' + + '<th style="min-width:190px"><div class="selMarkBlock" style="width:auto;float: right;">' + +'<b title="' + epgd.tr.markAll + '" class="selected" data-t="1"></b><b title="' + epgd.tr.markNone + '" data-t="0"></b><b title="' + epgd.tr.markToggle + '"><b class="selected"></b></b></div>' + + 'Status' + ' <input type="text" class="filter" style="width:20px" />' + '<br />' + this.sortIcons + + '<span class="iAsButton i-refresh edit" title="' + epgd.tr.reload + '"></span>' + + '<span style="margin-top:3px" class="iAsButton i-trash edit" title="' + epgd.tr.del + '"></span>' + + '<span style="margin-top:3px" class="iAsButton i-check edit" title="' + epgd.tr.pages.timerList.messageStates.R + '"></span>' + + '<span style="margin-top:3px" class="iAsButton i-check-empty edit" title="' + epgd.tr.pages.timerList.messageStates.N + '"></span></th>' + + '</tr></thead><tbody></tbody></table>';
+} +epgd.pages.messageList.update = function (d) {
+ var messList = this; + epgd.utils.loader.process(function () {
+ epgd.ajax({ url: epgd.login.url + "data/messages", async: false, cache: false }, function (data) {
+ messList.$con.find('tbody').empty(); + if (!data.messages.length) {
+ messList.hideHead();
+ } else {
+ var trs = [], + tr, i, t, + icons = {
+ 'N': '<span class="iAsButton i-check-empty edit">' + epgd.tr.pages.timerList.messageStates.N + '</span>', + 'R': '<span class="iAsButton i-check edit">' + epgd.tr.pages.timerList.messageStates.R + '</span>'
+ }, + types = {
+ 'E': '<div class="i-error">' + epgd.tr.pages.timerList.timerStates.E + '</div>', + 'F': '<div class="i-flash-outline">' + epgd.tr.pages.timerList.timerStates.F + '</div>', + 'I': '<div class="i-info">' + epgd.tr.pages.timerList.messageTypes.I + '</div>',
+ 'W': '<div class="i-warning">' + epgd.tr.pages.timerList.messageTypes.W + '</div>'
+ }; + for (i in data.messages) {
+ t = data.messages[i]; + tr = $('<tr><td data-sort="' + new String('0000000' + t.id).slice(-7) + '">' + t.id + '</td>' + + '<td>' + (types[t.type] ||'') +'</td>' + + '<td data-sort="' + t.updsp + '">' + + epgd.utils.formatDateTime(t.updsp) + '</td>' + + '<td>' + t.title + '</td>' + + '<td>' + t.text + '</td>' + + '<td data-sort="' + t.state + t.updsp + '"><span class="iAsButton i-trash edit" title="' + epgd.tr.del + '"></span>' + (icons[t.state] || '') + '</td>' + + '</tr>')[0]; + tr.tData = t; + trs.push(tr);
+ }; + messList.trs = trs; + messList.$con.find('>table>tbody').append(trs.sort(function (a,b) { + return a.tData.state == b.tData.state + ? a.tData.state.updsp > b.tData.state.updsp ? -1 : 1 + : a.tData.state > b.tData.state
+ }).slice()); + messList.showHead();
+ } + epgd.utils.loader.close(); + $(window).trigger('messagelist_updated', messList);
+ });
+ }, true);
+};
+epgd.pages.messageList.action = function ($el, iconName, data) {
+ var ids = this.getSelectedIds($el), + state= null, + i; + if (ids) {
+ switch (iconName) {
+ case 'check': + state = $el[0].parentNode.nodeName == 'TH' ? 'R' : 'N'; + break; + case 'check-empty': + state = $el[0].parentNode.nodeName == 'TH' ? 'N' : 'R'; + break;
+ case 'trash': + state = 'D' + break;
+ }
+ if (state) {
+ for (i in ids)
+ ids[i]= {"id":ids[i], "state":state}
+ state == 'D' ? this.del(ids, null,"messages") : this.saveArray(ids, "messages");
+ return true;
+ }
+ }
+ return epgd.timerListBase.prototype.action.call(this, $el, iconName, data);
+}
+
|