summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--javascript/treeview.js79
-rw-r--r--pages/recordings.ecpp12
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>