136 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			136 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
| <div id="all_sources_container"></div>
 | |
| <form name="feed_subscriptions" action="/user/updatesubscriptions" onsubmit="updateSubscriptionValue()">
 | |
|   <input id="user_feeds" type="hidden" name="user_feeds" value="" />
 | |
|   <button type="submit">Save</button>
 | |
| </form>
 | |
| <script>
 | |
| var user_feeds = [
 | |
| {{ range $i, $v := .TemplateData.User.SubSlugs }}
 | |
|   "{{$v}}",
 | |
| {{ end }}
 | |
| ];
 | |
| 
 | |
| var all_feeds = [
 | |
| {{ range $i, $v := .TemplateData.FeedSources }}
 | |
|   {{ range $vi, $vf := $v.Feeds }}
 | |
|     {
 | |
|       "name": "{{$vf.Name}}",
 | |
|       "author": "{{$vf.Author}}",
 | |
|       "slug": "{{$vf.Slug}}",
 | |
|       "source": "{{$vf.Source}}",
 | |
|       "desc": "{{$vf.Desc}}",
 | |
|       "last_update": "{{$vf.LastUpdate}}"
 | |
|     },
 | |
|   {{ end }}
 | |
| {{ end }}
 | |
| ];
 | |
| 
 | |
| function init() {
 | |
|   var sourcesContainer = document.getElementById("all_sources_container");
 | |
|   var sources = [];
 | |
|   for(var i = 0; i < all_feeds.length; i++) {
 | |
|     if(sources.indexOf(all_feeds[i].source) < 0) {
 | |
|       sources.push(all_feeds[i].source)
 | |
|     }
 | |
|   }
 | |
|   for(var i = 0; i < sources.length; i++) {
 | |
|     sourcesContainer.appendChild(createFeedSourceTable(sources[i]));
 | |
|   }
 | |
| }
 | |
| 
 | |
| function createFeedSourceTable(source) {
 | |
|   var sourceContainer = document.createElement("div");
 | |
|   var sourceTitle = document.createElement("h1");
 | |
|   sourceTitle.innerText = source+"  ";
 | |
|   sourceContainer.appendChild(sourceTitle);
 | |
|   var table = document.createElement("table");
 | |
|   table.classList.add("pure-table","pure-table-bordered","center-all","hidden");
 | |
|   var thead = document.createElement("thead");
 | |
|   var thtr = document.createElement("tr");
 | |
|   var thChk = document.createElement("th");
 | |
|   var thn = document.createElement("th");
 | |
|   thn.innerText = "Name";
 | |
|   var tha = document.createElement("th");
 | |
|   tha.innerText = "Author";
 | |
|   var thl = document.createElement("th");
 | |
|   thl.innerText = "Last Update";
 | |
|   thtr.appendChild(document.createElement("th"));
 | |
|   for(var i = 0; i < all_feeds.length; i++) {
 | |
|     if(all_feeds[i].source == source) {
 | |
|       table.appendChild(createFeedTableRow(all_feeds[i]));
 | |
|     }
 | |
|   }
 | |
|   sourceContainer.appendChild(table);
 | |
|   var sourceShow = document.createElement("a");
 | |
|   sourceShow.style["color"] = "blue";
 | |
|   sourceShow.style["cursor"] = "pointer";
 | |
|   sourceShow.innerText = "v";
 | |
|   sourceShow.onclick = function() {
 | |
|     if(table.classList.contains("hidden")) {
 | |
|       sourceShow.innerText = "^";
 | |
|     } else {
 | |
|       sourceShow.innerText = "v";
 | |
|     }
 | |
|     table.classList.toggle("hidden");
 | |
|   }
 | |
|   sourceTitle.appendChild(sourceShow);
 | |
|   sourceContainer.style["margin-bottom"] = "2em";
 | |
| 
 | |
|   return sourceContainer;
 | |
| }
 | |
| 
 | |
| function createFeedTableRow(feedItem) {
 | |
|   var row = document.createElement("tr");
 | |
|   var chkCell = document.createElement("td");
 | |
|   var chkBox = document.createElement("input");
 | |
|   chkBox.setAttribute("type", "checkbox");
 | |
|   chkBox.setAttribute("data-slug", feedItem["source"]+";"+feedItem["slug"]);
 | |
|   chkBox.onclick = function() {
 | |
|     toggleSubscription(this.getAttribute("data-slug"));
 | |
|   }
 | |
|   if(user_feeds.indexOf(feedItem["source"]+";"+feedItem["slug"]) >= 0) {
 | |
|     chkBox.checked = true;
 | |
|   }
 | |
|   chkCell.append(chkBox);
 | |
|   row.append(chkCell);
 | |
|   var nameCell = document.createElement("td");
 | |
|   nameCell.innerText = feedItem["name"];
 | |
|   row.append(nameCell);
 | |
|   var authCell = document.createElement("td");
 | |
|   authCell.innerText = feedItem["author"];
 | |
|   row.append(authCell);
 | |
|   var updCell = document.createElement("td");
 | |
|   updCell.innerText = feedItem["last_update"];
 | |
|   row.append(updCell);
 | |
|   return row;
 | |
| }
 | |
| 
 | |
| function toggleSubscription(slug) {
 | |
|   if(user_feeds.indexOf(slug) >= 0) {
 | |
|     user_feeds.splice(user_feeds.indexOf(slug), 1);
 | |
|   } else {
 | |
|     user_feeds.push(slug);
 | |
|   }
 | |
|   updateSubscriptionValue();
 | |
| }
 | |
| 
 | |
| function getSubRow(slug) {
 | |
|   return document.getElementById("row_"+slug.replace(";","_"));
 | |
| }
 | |
| function updateSubscriptionTable() {
 | |
|   for(var i = 0; i < user_feeds.length; i++) {
 | |
|     var row = getSubRow(user_feeds[i]);
 | |
|     if(row) {
 | |
|       row.getElementsByTagName("input")[0].checked = true;
 | |
|     }
 | |
|   }
 | |
| }
 | |
| 
 | |
| function updateSubscriptionValue() {
 | |
|   document.getElementById("user_feeds").value = user_feeds;
 | |
| }
 | |
| 
 | |
| init();
 | |
| updateSubscriptionTable();
 | |
| </script>
 |