diff options
author | Dieter Hametner <dh (plus) vdr (at) gekrumbel (dot) de> | 2008-03-23 01:01:32 +0100 |
---|---|---|
committer | Dieter Hametner <dh (plus) vdr (at) gekrumbel (dot) de> | 2008-03-23 01:01:32 +0100 |
commit | 78ffd15e485fe3ba341bf7d5e7479ff9a5a6de4b (patch) | |
tree | 76f900ca7235290c88a2fce69b451714de734bbf | |
parent | 0f276e51c7dbf0e36baf35823f8b17163d094b39 (diff) | |
download | vdr-plugin-live-78ffd15e485fe3ba341bf7d5e7479ff9a5a6de4b.tar.gz vdr-plugin-live-78ffd15e485fe3ba341bf7d5e7479ff9a5a6de4b.tar.bz2 |
Some clean up in the timer editing call.
Prepeared timer edititing to be a popup like the epg-data. This is not
finished yet and seems to have some problems with the form and the
popup. So the overall functionality is disabled. Never the less some of
the changes for this are of general interrest, so current work was
commited.
Changes in the styles for this.
-rw-r--r-- | epg_events.cpp | 10 | ||||
-rw-r--r-- | live/js/live/pageenhance.js | 28 | ||||
-rw-r--r-- | pages/edit_timer.ecpp | 23 | ||||
-rw-r--r-- | pages/timers.ecpp | 10 | ||||
-rw-r--r-- | timers.cpp | 18 | ||||
-rw-r--r-- | timers.h | 11 | ||||
-rw-r--r-- | tools.cpp | 18 | ||||
-rw-r--r-- | tools.h | 7 |
8 files changed, 107 insertions, 18 deletions
diff --git a/epg_events.cpp b/epg_events.cpp index 7d22cdf..962fcfc 100644 --- a/epg_events.cpp +++ b/epg_events.cpp @@ -214,8 +214,9 @@ namespace vdrlive string channelId(chanId.ToString()); string eventId("event_"); - replace(channelId.begin(), channelId.end(), '.', 'p'); - replace(channelId.begin(), channelId.end(), '-', 'm'); + channelId = vdrlive::EncodeDomId(channelId, ".-", "pm"); + // replace(channelId.begin(), channelId.end(), '.', 'p'); + // replace(channelId.begin(), channelId.end(), '-', 'm'); eventId += channelId; eventId += '_'; @@ -230,8 +231,9 @@ namespace vdrlive size_t delimPos = epgid.find_last_of('_'); string cIdStr = epgid.substr(eventStr.length(), delimPos - eventStr.length()); - replace(cIdStr.begin(), cIdStr.end(), 'm', '-'); - replace(cIdStr.begin(), cIdStr.end(), 'p', '.'); + cIdStr = vdrlive::DecodeDomId(cIdStr, "mp", "-."); + // replace(cIdStr.begin(), cIdStr.end(), 'm', '-'); + // replace(cIdStr.begin(), cIdStr.end(), 'p', '.'); string const eIdStr = epgid.substr(delimPos+1); diff --git a/live/js/live/pageenhance.js b/live/js/live/pageenhance.js index d98b374..5ca90c0 100644 --- a/live/js/live/pageenhance.js +++ b/live/js/live/pageenhance.js @@ -16,6 +16,7 @@ var PageEnhance = new Class({ vlcWinOptions: { size: { width: 720, height: 640 } }, + editTimerSelector: 'a[href^="edit_timer.html?timerid"]', hintTipSelector: '*[title]', hintClassName: 'hint', infoWinOptions: { @@ -46,6 +47,9 @@ var PageEnhance = new Class({ $$(this.options.actionLinkSelector).each(this.vdrRequest.bind(this)); $$(this.options.vlcLinkSelector).each(this.vlcRequest.bind(this)); $$(this.options.datePickerSelector).each(this.datePicker.bind(this)); + // the following line activates timer editing in popup window. + // but it does not yet work like expected. So we leave it deactivated currently. + // $$(this.options.editTimerSelector).each(this.editTimer.bind(this)); }, // actions applied on mouse down. @@ -85,6 +89,30 @@ var PageEnhance = new Class({ } }, + // Edit Timer Popup function. Apply to all elements that should + // pop up a timer edit windows based on InfoWin window. + editTimer: function(el){ + var href = el.href; + var timerid = $pick(href, ""); + if (timerid != "") { + var extractId = /timerid=(.+)/; + var found = extractId.exec(timerid); + if ($defined(found) && found.length > 1) { + timerid = found[1]; + el.addEvent('click', function(event){ + var event = new Event(event); + new InfoWin.Ajax(timerid, href, $merge(this.options.infoWinOptions, { + bodyselect: '', + modal: true, + onDomExtend: this.domExtend.bind(this) + })).show(event); + event.stop(); + return false; + }.bind(this)); + } + } + }, + // function that requests an action from the server vdr. vdrRequest: function(el){ el.addEvent('click', function(event, element){ diff --git a/pages/edit_timer.ecpp b/pages/edit_timer.ecpp index 7b92551..f1c6ca2 100644 --- a/pages/edit_timer.ecpp +++ b/pages/edit_timer.ecpp @@ -20,6 +20,7 @@ using namespace vdrlive; // input parameters string timerid; string epgid; + string async; // form parameters tChannelID channel; bool active = true; @@ -53,6 +54,8 @@ cTimer* timer; <%cpp> if (!logged_in && LiveSetup().UseAuth()) return reply.redirect("login.html"); + bool ajaxReq = !async.empty() && (lexical_cast<int>(async) != 0); + tChannelID channelid = tChannelID(); tEventID eventid = tEventID(); @@ -62,7 +65,9 @@ cTimer* timer; timer = 0; if ( !timerid.empty() ) { - timer = timers.GetByTimerId( timerid ); + string tId = SortedTimers::DecodeDomId(timerid); + dsyslog("DEBUG: TIMER: tId = %s", tId.c_str()); + timer = timers.GetByTimerId(tId); if ( timer == 0 ) throw HtmlError( tr("Couldn't find timer. Maybe you mistyped your request?") ); } @@ -134,19 +139,31 @@ cTimer* timer; <html> <head> <title>VDR Live - <$ timer ? tr("Edit timer") : tr("New timer") $></title> +<%cpp> + if (!ajaxReq) { +</%cpp> <& pageelems.stylesheets &> <& pageelems.ajax_js &> +<%cpp> + } +</%cpp> </head> <body> +<%cpp> + if (!ajaxReq) { +</%cpp> <& pageelems.logo &> <& menu active=("timers") &> +<%cpp> + } +</%cpp> <div class="inhalt"> - <form method="post" name="edit_timer" action="edit_timer.ecpp"> + <form method="post" name="edit_timer" id="<$ timerid $>" action="edit_timer.ecpp"> <input type="hidden" name="timerid" value="<$ timerid $>"/> <input type="hidden" name="aux" value="<$ aux $>"/> <table class="formular" cellpadding="0" cellspacing="0"> <tr class="head"> - <td class="toprow leftcol rightcol" colspan="2"><div class="boxheader"><div><div><$ timer ? tr("Edit timer") : tr("New timer") $></div></div></div></td> + <td class="toprow leftcol rightcol" colspan="2"><div class="boxheader"><div><div class="caption"><$ timer ? tr("Edit timer") : tr("New timer") $></div></div></div></td> </tr> <tr> diff --git a/pages/timers.ecpp b/pages/timers.ecpp index 9af9425..654484f 100644 --- a/pages/timers.ecpp +++ b/pages/timers.ecpp @@ -38,7 +38,9 @@ static const size_t maximumDescriptionLength = 300; timer = 0; if ( !timerid.empty() ) { - timer = timers.GetByTimerId( timerid ); + string tId = SortedTimers::DecodeDomId(timerid); + dsyslog("DEBUG: TIMER: tId = %s", tId.c_str()); + timer = timers.GetByTimerId(tId); if ( timer == 0 ) throw HtmlError( tr("Couldn't find timer. Maybe you mistyped your request?") ); if (action == "delete") { @@ -143,9 +145,9 @@ static const size_t maximumDescriptionLength = 300; % } ><$ timer->File() $></a></div> </td> - <td class="action <? bottom ? "bottomrow" ?>"><a href="timers.html?timerid=<$ timers.GetTimerId(*timer) $>&action=toggle"><img src="<$ LiveSetup().GetThemedLink("img", (timer->Flags() & tfActive) ? "active.png" : "inactive.png") $>" alt="" <& tooltip.hint text=(tr("Toggle timer active/inactive")) &>></img></a></td> - <td class="action <? bottom ? "bottomrow" ?>"><a href="edit_timer.html?timerid=<$ timers.GetTimerId(*timer) $>"><img src="<$ LiveSetup().GetThemedLink("img", "edit.png") $>" alt="" <& tooltip.hint text=(tr("Edit timer")) &>></img></a></td> - <td class="action rightcol <? bottom ? "bottomrow" ?>"><a href="timers.html?timerid=<$ timers.GetTimerId(*timer) $>&action=delete"><img src="<$ LiveSetup().GetThemedLink("img", "del.png") $>" alt="" <& tooltip.hint text=(tr("Delete timer")) &>></img></a></td> + <td class="action <? bottom ? "bottomrow" ?>"><a href="timers.html?timerid=<$ SortedTimers::EncodeDomId(timers.GetTimerId(*timer)) $>&action=toggle"><img src="<$ LiveSetup().GetThemedLink("img", (timer->Flags() & tfActive) ? "active.png" : "inactive.png") $>" alt="" <& tooltip.hint text=(tr("Toggle timer active/inactive")) &>></img></a></td> + <td class="action <? bottom ? "bottomrow" ?>"><a href="edit_timer.html?timerid=<$ SortedTimers::EncodeDomId(timers.GetTimerId(*timer)) $>"><img src="<$ LiveSetup().GetThemedLink("img", "edit.png") $>" alt="" <& tooltip.hint text=(tr("Edit timer")) &>></img></a></td> + <td class="action rightcol <? bottom ? "bottomrow" ?>"><a href="timers.html?timerid=<$ SortedTimers::EncodeDomId(timers.GetTimerId(*timer)) $>&action=delete"><img src="<$ LiveSetup().GetThemedLink("img", "del.png") $>" alt="" <& tooltip.hint text=(tr("Delete timer")) &>></img></a></td> </tr> <%cpp> } @@ -65,6 +65,24 @@ namespace vdrlive { return 0; } + + string SortedTimers::EncodeDomId(string const& timerid) + { + string tId("timer_"); + tId += vdrlive::EncodeDomId(timerid, ".-:", "pmc"); + return tId; + } + + string SortedTimers::DecodeDomId(string const &timerDomId) + { + string const timerStr("timer_"); + + string tId = timerDomId.substr(timerStr.length()); + + return vdrlive::DecodeDomId(tId, "pmc", ".-:"); + } + + void SortedTimers::ReloadTimers( bool initial ) { dsyslog("live reloading timers"); @@ -16,10 +16,15 @@ namespace vdrlive { friend class TimerManager; public: - std::string GetTimerId( cTimer const& timer ); - cTimer* GetByTimerId( std::string const& timerid ); + static std::string GetTimerId(cTimer const& timer); + cTimer* GetByTimerId(std::string const& timerid); + + // en- or decodes a timer into an id usable for DOM Ids. + static std::string EncodeDomId(std::string const& timerid); + static std::string DecodeDomId(std::string const &timerDomId); + + bool Modified() { return Timers.Modified(m_state); } - bool Modified() { return Timers.Modified( m_state ); } static std::string GetTimerDays(cTimer const& timer); static std::string GetTimerInfo(cTimer const& timer); @@ -293,5 +293,23 @@ namespace vdrlive { return FormatDateTime(cformat.c_str(), date); } + std::string EncodeDomId(std::string const & toEncode, char const * from, char const * to) + { + std::string encoded = toEncode; + for (; *from && *to; from++, to++) { + replace(encoded.begin(), encoded.end(), *from, *to); + } + return encoded; + } + + std::string DecodeDomId(std::string const & toDecode, char const * from, char const * to) + { + std::string decoded = toDecode; + for (; *from && *to; from++, to++) { + replace(decoded.begin(), decoded.end(), *from, *to); + } + return decoded; + } + } // namespace vdrlive @@ -33,7 +33,6 @@ namespace vdrlive { std::string StringRepeat(int times, const std::string& input); std::string StringWordTruncate(const std::string& input, size_t maxLen, bool& truncated); - inline std::string StringWordTruncate(const std::string& input, size_t maxLen) { bool dummy; return StringWordTruncate(input, maxLen, dummy); } std::string StringEscapeAndBreak( std::string const& input ); @@ -41,13 +40,11 @@ namespace vdrlive { std::string StringFormatBreak(std::string const& input); std::string StringTrim(const std::string& str); - std::string ZeroPad(int number); std::string MD5Hash(std::string const& str); time_t GetTimeT(std::string timestring); - std::string ExpandTimeString(std::string timestring); std::string StringUrlEncode( std::string const& input ); @@ -55,9 +52,11 @@ namespace vdrlive { std::string GetXMLValue( std::string const& xml, std::string const& element ); time_t GetDateFromDatePicker(std::string const& datestring, std::string const& format); - std::string DatePickerToC(time_t date, std::string const& format); + std::string EncodeDomId(std::string const & toEncode, char const * from = ".-:", char const * to = "pmc"); + std::string DecodeDomId(std::string const & toDecode, char const * from = "pmc", char const * to = ".-:"); + struct bad_lexical_cast: std::runtime_error { bad_lexical_cast(): std::runtime_error( "bad lexical cast" ) {} |