Freescreencast Extra Functionality

Freescreencast sort by date or time

  1. // ==UserScript==
  2. // @name Freescreencast Extra Functionality
  3. // @namespace http://userscripts.org/users/75950
  4. // @description Freescreencast sort by date or time
  5. // @include http://freescreencast.com/screencasts
  6. // @version 1.0.7
  7. // ==/UserScript==
  8.  
  9. var listelem = Array();
  10. var elem = Array();
  11. var listelements = Array();
  12. var dates = Array();
  13. var newelem;
  14. var anzahl;
  15. var seitenzahl;
  16. var currpage;
  17. var ResultCount;
  18.  
  19. function trim(str, chars) {
  20. return ltrim(rtrim(str, chars), chars);
  21. }
  22. function ltrim(str, chars) {
  23. chars = chars || "\\s";
  24. return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
  25. }
  26. function rtrim(str, chars) {
  27. chars = chars || "\\s";
  28. return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
  29. }
  30.  
  31. function DoRequest() {
  32. GM_xmlhttpRequest({
  33. method: 'GET',
  34. url: 'http://freescreencast.com/screencasts?page='+currpage,
  35. headers: {
  36. 'User-agent': 'Mozilla/4.0 (compatible) Greasemonkey',
  37. 'Accept': 'text/html',
  38. },
  39. onload: function(responseDetails) {
  40. newelem=document.createElement('div');
  41. newelem.innerHTML=responseDetails.responseText;
  42. newelem=newelem.getElementsByClassName('scList')[0].getElementsByTagName('li');
  43. insertNodes(newelem);
  44. }
  45. });
  46. }
  47.  
  48. function insertNodes(nodesdom) {
  49. listelem = document.getElementsByClassName('scList')[0].getElementsByTagName('li');
  50. firstelem = listelem[0];
  51. for(i=0; i<nodesdom.length; i++) {
  52. newli=document.createElement('li');
  53. newli.innerHTML = nodesdom[i].innerHTML;
  54. document.getElementsByClassName('scList')[0].insertBefore(newli,firstelem);
  55. }
  56. currpage++;
  57. if(currpage<=seitenzahl) {
  58. ResultCount=document.getElementById('resultCount');
  59. ResultCount.innerHTML='Loading.... page '+currpage+' of '+seitenzahl;
  60. DoRequest();
  61. } else {
  62. ResultCount=document.getElementById('resultCount');
  63. ResultCount.innerHTML='Sorting...';
  64. window.setTimeout(SortThemByDate, 1000);
  65. }
  66. }
  67.  
  68. function SortThemByDate() {
  69. dates=Array();
  70. listelements=Array();
  71. ResultCount=document.getElementById('resultCount');
  72. listelem = document.getElementsByClassName('scList')[0].getElementsByTagName('li');
  73. for(i=0; i<listelem.length; i++) {
  74. listelements.push(trim(listelem[i].innerHTML));
  75. }
  76. elem = document.getElementsByClassName('scCreated');
  77. for(i=0; i<elem.length; i++) {
  78. var aContent = elem[i].innerHTML;
  79. if(aContent.indexOf('/')!=-1) {
  80. dates.push(trim(aContent.substring(aContent.indexOf('/')-2)));
  81. dates[i]='20'+dates[i].substring(6,8)+'-'+dates[i].substring(0,2)+'-'+dates[i].substring(3,5);
  82. } else {
  83. dates.push(aContent.substring(aContent.indexOf('-')-4));
  84. }
  85. }
  86. for(i=0; i<dates.length-1; i++) {
  87. for(j=i+1; j<dates.length; j++) {
  88. if(dates[i]<dates[j]) {
  89. // Tauschen
  90. helpme = dates[i];
  91. dates[i]=dates[j];
  92. dates[j]=helpme;
  93. helpme = listelements[i];
  94. listelements[i]=listelements[j];
  95. listelements[j]=helpme;
  96. }
  97. }
  98. }
  99. for(i=0; i<dates.length; i++) {
  100. listelem[i].innerHTML=listelements[i];
  101. }
  102. elem = document.getElementsByClassName('scCreated');
  103. for(i=0; i<elem.length; i++) {
  104. elem[i].innerHTML = 'created: '+dates[i];
  105. }
  106. ResultCount.innerHTML='<a href="#" id="Sortlink">Sort by time</a> / Results: 1 - '+anzahl+' of '+anzahl+' sorted by date descending';
  107. document.getElementById('pagination').innerHTML='';
  108. document.getElementById('Sortlink').addEventListener(
  109. 'click', function (event) {
  110. ResultCount.innerHTML='Sorting...';
  111. window.setTimeout(SortThemByTime, 1000);
  112. event.preventDefault();
  113. }, false);
  114. }
  115.  
  116. function SortThemByTime() {
  117. dates=Array();
  118. listelements=Array();
  119. ResultCount=document.getElementById('resultCount');
  120. listelem = document.getElementsByClassName('scList')[0].getElementsByTagName('li');
  121. for(i=0; i<listelem.length; i++) {
  122. listelements.push(trim(listelem[i].innerHTML));
  123. }
  124. elem = document.getElementsByClassName('scLength');
  125. for(i=0; i<elem.length; i++) {
  126. var aContent = elem[i].innerHTML;
  127. dates.push(trim(aContent.substring(aContent.indexOf(':')+2)));
  128. if(dates[i].substring(dates[i].length-1)=='s') dates[i]='00:'+dates[i].substring(0,2);
  129. if(dates[i].length<5) dates[i]='0'+dates[i];
  130. }
  131. for(i=0; i<dates.length-1; i++) {
  132. for(j=i+1; j<dates.length; j++) {
  133. if(dates[i]<dates[j]) {
  134. // Tauschen
  135. helpme = dates[i];
  136. dates[i]=dates[j];
  137. dates[j]=helpme;
  138. helpme = listelements[i];
  139. listelements[i]=listelements[j];
  140. listelements[j]=helpme;
  141. }
  142. }
  143. }
  144. for(i=0; i<dates.length; i++) {
  145. listelem[i].innerHTML=listelements[i];
  146. }
  147. elem = document.getElementsByClassName('scLength');
  148. for(i=0; i<elem.length; i++) {
  149. elem[i].innerHTML = 'time: '+dates[i];
  150. }
  151. ResultCount.innerHTML='<a href="#" id="Sortlink">Sort by date</a> / Results: 1 - '+anzahl+' of '+anzahl+' sorted by time descending';
  152. document.getElementById('pagination').innerHTML='';
  153. document.getElementById('Sortlink').addEventListener(
  154. 'click', function (event) {
  155. ResultCount.innerHTML='Sorting...';
  156. window.setTimeout(SortThemByDate, 1000);
  157. event.preventDefault();
  158. }, false);
  159. }
  160.  
  161. window.addEventListener(
  162. 'load',
  163. function () {
  164. ResultCount=document.getElementById('resultCount');
  165. anzahl = ResultCount.innerHTML.substring(19);
  166. seitenzahl = Math.floor(anzahl / 20);
  167. if(anzahl % 20 != 0) seitenzahl++;
  168. currpage=2;
  169. ResultCount.innerHTML='Loading.... page '+currpage+' of '+seitenzahl;
  170. DoRequest();
  171. },
  172. true);