diff options
-rw-r--r-- | javascript/treeview.js | 79 | ||||
-rw-r--r-- | pages/recordings.ecpp | 12 |
2 files changed, 90 insertions, 1 deletions
diff --git a/javascript/treeview.js b/javascript/treeview.js index e9edbdd..5047966 100644 --- a/javascript/treeview.js +++ b/javascript/treeview.js @@ -72,12 +72,91 @@ function Toggle(node) if (imgChild != null) setImages(imgChild, "img/minus.png", "img/folder_open.png"); sibling.style.display = 'block'; + updateCookieOnExpand( sibling.id ); } // Collapse the branch if it IS visible else { + updateCookieOnCollapse( sibling.id ); if (imgChild != null) setImages(imgChild, "img/plus.png", "img/folder_closed.png"); sibling.style.display = 'none'; } } + +function updateCookieOnExpand( id ){ + var openNodes = readCookie( cookieNameRec ); + if (openNodes == null || openNodes == "") + openNodes = id; + else + openNodes += "," + id; + createCookie( cookieNameRec, openNodes, 14 ); +} + +function updateCookieOnCollapse( id ){ + var openNodes = readCookie( cookieNameRec ); + if (openNodes != null) + openNodes = openNodes.split(","); + else + openNodes = []; + for (var z=0; z<openNodes.length; z++){ + if (openNodes[z] === sibling.id){ + openNodes.splice(z,1); + break; + } + } + openNodes = openNodes.join(","); + createCookie( cookieNameRec, openNodes, 14 ); +} + +function openNodesOnPageLoad(){ + var openNodes = readCookie( cookieNameRec ); + if (openNodes != null && openNodes !== "") + openNodes = openNodes.split(",.,"); + else + openNodes = []; + for (var z=0; z<openNodes.length; z++){ + var ul = document.getElementById(openNodes[z]); + if (ul){ + ul.style.display = 'block'; + //var imgChild = findChildNode(ul.parentNode, "recording_imgs"); + var imgChild = ul.parentNode.children[0].children[0]; + if (imgChild != null) + setImages(imgChild, "img/minus.png", "img/folder_open.png"); + } + } +} + +var cookieNameRec = "VDR-Live-Recordings-Tree-Open-Nodes"; + +window.addEvent('domready', function(){ + openNodesOnPageLoad(); +}); + + +//The following cookie functions are taken from http://www.quirksmode.org/js/cookies.html + +function createCookie(name,value,days) { + if (days) { + var date = new Date(); + date.setTime(date.getTime()+(days*24*60*60*1000)); + var expires = "; expires="+date.toGMTString(); + } + else var expires = ""; + document.cookie = name+"="+value+expires+"; path=/"; +} + +function readCookie(name) { + var nameEQ = name + "="; + var ca = document.cookie.split(';'); + for(var i=0;i < ca.length;i++) { + var c = ca[i]; + while (c.charAt(0)==' ') c = c.substring(1,c.length); + if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length); + } + return null; +} + +function eraseCookie(name) { + createCookie(name,"",-1); +} diff --git a/pages/recordings.ecpp b/pages/recordings.ecpp index 69deece..9ef8a0a 100644 --- a/pages/recordings.ecpp +++ b/pages/recordings.ecpp @@ -96,10 +96,12 @@ diskinfo = cString::sprintf("%s %d%% - %2d:%02d %s", trVDR("Disk"), Percent, H } function ExpandAll() { + var openNodes = ""; recordingNodes = window.document.getElementsBySelector("ul.recordingslist"); for (idx = 0; idx < recordingNodes.length; idx++) { if (recordingNodes[idx].parentNode.className != 'recordings') { recordingNodes[idx].style.display = 'block'; + openNodes += recordingNodes[idx].id + ","; } } expandNodes = window.document.getElementsBySelector("img.recording_expander"); @@ -110,6 +112,7 @@ diskinfo = cString::sprintf("%s %d%% - %2d:%02d %s", trVDR("Disk"), Percent, H for (idx = 0; idx < folderNodes.length; idx++) { folderNodes[idx].src = "img/folder_open.png"; } + createCookie( cookieNameRec, openNodes, 14 ); } function CollapseAll() { @@ -127,6 +130,7 @@ diskinfo = cString::sprintf("%s %d%% - %2d:%02d %s", trVDR("Disk"), Percent, H for (idx = 0; idx < folderNodes.length; idx++) { folderNodes[idx].src = "img/folder_closed.png"; } + eraseCookie( cookieNameRec ); } //--></script> </head> @@ -186,6 +190,8 @@ if (!deleteResult.empty()) { filter; path[]; int level = 0; + int counter = 0; + string idHash = ""; </%args> <%cpp> RecordingsTreePtr recordingsTree(LiveRecordingsManager()->GetRecordingsTree()); @@ -206,6 +212,7 @@ else recItems.sort(RecordingsItemPtrCompare::ByAscendingName); for (recIter = recItems.begin(); recIter != recItems.end(); ++recIter) { RecordingsItemPtr recItem = *recIter; + counter++; </%cpp> <li class="recording"> <& rec_item_dir name=(recItem->Name()) level=(recItem->Level()) &> @@ -221,8 +228,11 @@ for (recIter = recItems.begin(); recIter != recItems.end(); ++recIter) { recItemParams.add("path", recItem->Name()); recItemParams.add("level", lexical_cast<string, int>(level + 1)); recItemParams.add("filter", filter); + string combinedId = recItem->Name() + "_"; + combinedId += counter + "_" + level; + idHash = MD5Hash(combinedId); </%cpp> - <ul class="recordingslist" style="display: none;"> + <ul id="fldr_<$ idHash $>" class="recordingslist" style="display: none;"> <%cpp> callComp("recordings.recordings_item", request, reply, recItemParams); </%cpp> |