PageRenderTime 40ms CodeModel.GetById 13ms RepoModel.GetById 0ms app.codeStats 0ms

/branches/2008-new_look/media/js/rcachelib.js

https://github.com/daviddahl/rCache
JavaScript | 517 lines | 349 code | 94 blank | 74 comment | 37 complexity | e3638b6efd6107bfb490d032463ba030 MD5 | raw file
  1. function Querystring(qs) { // optionally pass a querystring to parse
  2. this.params = new Object();
  3. this.get=Querystring_get;
  4. if (qs == null)
  5. qs=location.search.substring(1,location.search.length);
  6. if (qs.length == 0)
  7. return
  8. // Turn <plus> back to <space>
  9. // See: http://www.w3.org/TR/REC-html40/interact/forms.html#h-17.13.4.1
  10. qs = qs.replace(/\+/g, ' ')
  11. var args = qs.split('&') // parse out name/value pairs separated via &
  12. // split out each name=value pair
  13. for (var i=0;i<args.length;i++) {
  14. var value;
  15. var pair = args[i].split('=');
  16. var name = unescape(pair[0]);
  17. if (pair.length == 2)
  18. value = unescape(pair[1]);
  19. else
  20. value = name;
  21. this.params[name] = value;
  22. }
  23. }
  24. String.prototype.trim = function () {
  25. return this.replace(/^\s+|\s+$/g, "");
  26. };
  27. function Querystring_get(key, default_) {
  28. // This silly looking line changes UNDEFINED to NULL
  29. if (default_ == null) default_ = null;
  30. var value=this.params[key]
  31. if (value==null) value=default_;
  32. return value
  33. }
  34. /////////////////////////////////////
  35. //Start rcache_it ///////////////////
  36. /////////////////////////////////////
  37. function rcache_it(){
  38. window.setTimeout("spider.getURI()",2000);
  39. }
  40. var spider = {
  41. init: function(){
  42. cache_results = document.getElementById('caching_status');
  43. },
  44. getURI: function(){
  45. var qs = new Querystring();
  46. var url = '/spider/?url=' + qs.get("url");
  47. //alert(url);
  48. var cObj = YAHOO.util.Connect.asyncRequest('GET', url, spiderCallBk);
  49. //alert(cObj);
  50. },
  51. };
  52. var spiderCallBk = {
  53. success: function(o){
  54. var spider_results = eval('(' + o.responseText + ')');
  55. //display results inside caching_status div
  56. res_div = document.getElementById('caching_status');
  57. res_div.innerHTML = "";
  58. //wrapper div for results
  59. results_data = document.createElement('div');
  60. results_data.className = "spider_results";
  61. //first section: title:
  62. title = document.createElement('div');
  63. title.className = "results_section";
  64. title.innerHTML = spider_results.title;
  65. var form_wrap = createDOM('div');
  66. form_wrap.className = "results_section";
  67. var tag_form = createDOM('form' ,{'action':'javascript:spiderTags()'});
  68. var tag_input = createDOM('input',{'type':'text',
  69. 'name':'tags',
  70. 'maxlength':100,
  71. 'size':40,
  72. 'title':'Enter all tags here: "Politics,Criminals,etc..."'}
  73. );
  74. var tag_entry_id = createDOM('input',{'type':'hidden',
  75. 'name':'entry_id',
  76. 'value':spider_results.id,
  77. 'id':'entry_id'}
  78. );
  79. var form_button = createDOM('input',{'type':'submit',
  80. 'value':'save tags','title':'Separate tags with a comma ","'});
  81. tag_form.appendChild(tag_input);
  82. tag_form.appendChild(form_button);
  83. form_wrap.appendChild(tag_form);
  84. var body = document.createElement('div');
  85. body.innerHTML = '<pre>' + spider_results.txt + '</pre>';
  86. results_data.appendChild(form_wrap);
  87. results_data.appendChild(title);
  88. results_data.appendChild(body);
  89. res_div.appendChild(results_data);
  90. },
  91. failure: function(o){
  92. alert('Your rCache request is being processed, please check your entries list in a few minutes');
  93. },
  94. timeout: 15000
  95. }
  96. /////////////////////////////////////
  97. //Start spiderTags ///////////////////
  98. /////////////////////////////////////
  99. function spiderTags(){
  100. window.setTimeout("tags.submit()",2000);
  101. }
  102. var tags = {
  103. postTags: function(){
  104. var tags = document.getElementById('tags_input').value;
  105. var entry_id = document.getElementById('entry_id').value;
  106. var url = '/spider_tags/?tags=' + tags + '&id=' + entry_id;
  107. //alert(url);
  108. var cObj = YAHOO.util.Connect.asyncRequest('POST', url, spiderTagsCallBk);
  109. //alert(cObj);
  110. },
  111. };
  112. var spiderTagsCallBk = {
  113. success: function(o){
  114. var results = eval('(' + o.responseText + ')');
  115. //display results inside caching_status div
  116. var res_div = document.getElementById('caching_status');
  117. res_div.innerHTML = "";
  118. //wrapper div for results
  119. var results_data = document.createElement('div');
  120. results_data.className = "spider_results";
  121. //first section: title:
  122. var title = document.createElement('div');
  123. title.className = "results_section";
  124. title.innerHTML = spider_results.title;
  125. var form_wrap = createDOM('div');
  126. form_wrap.className = "results_section";
  127. var tag_form = createDOM('form' ,{'action':'javascript:spiderTags.submit()'});
  128. var tag_entry_id = createDOM('input',{'type':'hidden',
  129. 'name':'entry_id',
  130. 'value':results,
  131. 'id':'entry_id'});
  132. var tag_input = createDOM('input',{'type':'text',
  133. 'name':'tags',
  134. 'maxlength':100,
  135. 'size':40,
  136. 'id':'tags_input',
  137. 'title':'Enter all tags here: "Politics,Criminals,etc..."'});
  138. var form_button = createDOM('input',{'type':'submit',
  139. 'value':'save tags','title':'Separate tags with a comma ","'});
  140. tag_form.appendChild(tag_input);
  141. tag_form.appendChild(form_button);
  142. form_wrap.appendChild(tag_form);
  143. var body = document.createElement('div');
  144. body.innerHTML = '<pre>' + spider_results.txt + '</pre>';
  145. results_data.appendChild(form_wrap);
  146. results_data.appendChild(title);
  147. results_data.appendChild(body);
  148. res_div.appendChild(results_data);
  149. },
  150. failure: function(o){
  151. alert('Your rCache request is being processed, please check your entries list in a few minutes');
  152. },
  153. timeout: 10000
  154. }
  155. //////////////////////////////////////////////////
  156. //JSSpider////////////////////////////////////////
  157. //////////////////////////////////////////////////
  158. var jsSpider = {
  159. init: function(){
  160. cache_results = document.getElementById('caching_status');
  161. },
  162. getURI: function(){
  163. var qs = new Querystring();
  164. var url = qs.get("url");
  165. //alert(url);
  166. try {
  167. netscape.security.PrivilegeManager.enablePrivilege("UniversalPreferencesRead")
  168. //netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
  169. var cObj = YAHOO.util.Connect.asyncRequest('GET', url, JsSpiderCallBk);
  170. //alert(cObj);
  171. } catch (e) {
  172. alert("Permission UniversalBrowserRead denied.");
  173. }
  174. },
  175. displayDetails: function(){
  176. //alert("displaying details");
  177. }
  178. };
  179. var JsSpiderCallBk = {
  180. success: function(o){
  181. var spider_results = eval('(' + o.responseText + ')');
  182. //display results inside caching_status div
  183. res_div = document.getElementById('caching_status');
  184. res_div.innerHTML = "";
  185. //wrapper div for results
  186. results_data = document.createElement('div');
  187. results_data.className = "spider_results";
  188. //first section: title:
  189. // title = document.createElement('div');
  190. // title.className = "results_section";
  191. // title.innerHTML = spider_results.title;
  192. body = document.createElement('div');
  193. body.innerHTML = '<pre>' + spider_results + '</pre>';
  194. //results_data.appendChild(title);
  195. results_data.appendChild(body);
  196. res_div.appendChild(results_data);
  197. },
  198. failure: function(o){
  199. alert('Your rCache request is being processed, please check your entries list in a few minutes');
  200. },
  201. timeout: 10000
  202. }
  203. //start new rCache object
  204. var rcache = new Object();
  205. var xhr = new Object();
  206. var entry = new Object();
  207. rcache.entry = entry;
  208. rcache.xhr = xhr;
  209. rcache.entry.new_entry_submit = function(){
  210. // disable the submit button then submit the form
  211. //var loading = $('<img src="/media/img/indeterminate-progress-bar.gif"/>');
  212. $("#progress-bar").show();
  213. //$("#progress-bar").append(loading);
  214. $("#submit").hide();
  215. //$("#uploader")[0].submit();
  216. return true;
  217. }
  218. rcache.xhr.related_add_kword = function(kword){
  219. // add a keyword to the kwords span
  220. var existing_kwords = $('#related-doc-keywords')[0].innerHTML;
  221. //alert(existing_kwords);
  222. if (existing_kwords == ''){
  223. $('#related-doc-keywords')[0].innerHTML = existing_kwords + kword + " ";
  224. } else {
  225. var e_kwords_arr = existing_kwords.split(" ");
  226. if (e_kwords_arr.indexOf(kword) >= 0){
  227. //already in array
  228. } else {
  229. $('#related-doc-keywords')[0].innerHTML = existing_kwords + kword + " ";
  230. }
  231. }
  232. }
  233. rcache.xhr.related_docs_custom_kwords_clear = function(){
  234. $('#related-doc-keywords')[0].innerHTML = '';
  235. }
  236. rcache.xhr.related_docs_custom_kwords = function(){
  237. // get the keywords from the span holding them, pass them to 'related_docs'
  238. var kwords_str = $('#related-doc-keywords')[0].innerHTML;
  239. kwords_str.trim()
  240. if (kwords_str == ''){
  241. alert("Please select one or more keywords.");
  242. } else {
  243. var kwords_arr = kwords_str.split(" ");
  244. var kwords = kwords_arr.join(" AND ");
  245. $("#related-docs")[0].innerHTML = '<img src="/media/img/indeterminate-progress-bar.gif" border="0"/>';
  246. $("#related-docs").css({'border':'1px solid #eee','padding':'4px'});
  247. rcache.xhr.related_docs(kwords);
  248. }
  249. }
  250. rcache.xhr.related_docs = function(kwords){
  251. // fixme: use AND between all keywords!!!!!!!!!!
  252. // get related docs via a docs' keywords
  253. var query = kwords;
  254. //var kwords_arr = kwords.split(' ',3);
  255. //query = query + kwords_arr.join(' ');
  256. var post_data = {'search_str':query};
  257. var url = "/xhr/search/";
  258. $.post(url,post_data,function(data,textStatus){
  259. res = eval('(' + data + ')');
  260. if (res.status == 'success'){
  261. $("#related-docs").children().remove();
  262. $("#related-docs")[0].innerHTML = res.msg;
  263. $("#related-docs").css({'border':'1px solid #eee',
  264. 'padding':'4px',
  265. 'max-height':'200px',
  266. 'overflow':'auto'});
  267. $("#related-docs > table").css({'width':'100%'});
  268. $("#related-docs").show("slow");
  269. } else {
  270. alert(res.msg);
  271. }
  272. });
  273. }
  274. rcache.xhr.clear_input = function(inpt){
  275. // clear search input
  276. inpt.value = "";
  277. inpt.onclick = null;
  278. }
  279. rcache.xhr.search = function(){
  280. // perform a search - use base64 encoding on search query
  281. var qs = encodeURIComponent($('#search-inpt')[0].value);
  282. // get input value
  283. // base64 encode it
  284. // change location to /search/?q=jhfjdhfldhgfkdhfdjh
  285. if (qs){
  286. document.location = "/search/?search_str=" + qs;
  287. } else {
  288. alert("Please enter a search term.");
  289. }
  290. }
  291. rcache.xhr.entries_with_link = function(link_id){
  292. var url = "/xhr/entries/with/link/" + link_id + "/";
  293. $.get(url,function(data){
  294. var res = eval('(' + data + ')');
  295. if (res.status == 'success'){
  296. var entries = $(res.entries);
  297. //alert(res.entries);
  298. $("#link-entries-" + res.link_id).children().remove();
  299. $("#link-entries-" + res.link_id).append(entries);
  300. } else {
  301. //fixme: install jqModal
  302. alert("No other entries contain this link");
  303. }
  304. });
  305. }
  306. function showKeyCode(e)
  307. {
  308. //alert("keyCode for the key pressed: " + e.keyCode + "\n");
  309. }
  310. function checkSubmission(e){
  311. // check for return "13"
  312. // alert(e.keyCode);
  313. if (e.which == 13){
  314. rcache.xhr.search();
  315. return true;
  316. } else {
  317. return false;
  318. }
  319. }
  320. save_link = function(){
  321. var url = encodeURIComponent(document.location);
  322. var title = '';
  323. var description = '';
  324. var keywords = '';
  325. try{
  326. var head = document.getElementsByTagName('head')[0].childNodes;
  327. for(i=0; i<=head.length; i++){
  328. try{
  329. //fixme: evaluate all of the head elements as lowercase
  330. if (head[i].getAttribute('name').toLowerCase()=='description'){
  331. description = encodeURIComponent(
  332. head[i].getAttribute('content'));
  333. }
  334. if (head[i].getAttribute('name').toLowerCase()=='keywords'){
  335. keywords = encodeURIComponent(
  336. head[i].getAttribute('content'));
  337. }
  338. }catch(e){
  339. //do nothing
  340. }
  341. }
  342. } catch(e){
  343. var head = null;
  344. }
  345. try{
  346. title = encodeURIComponent(document.getElementsByTagName('title')[0].innerHTML);
  347. }catch(e){
  348. title = encodeURIComponent('No title');
  349. }
  350. var save_link_url = 'http://127.0.0.1:8000/save/link/?url=' +
  351. url + '&title=' + title + '&description=' + description +
  352. '&keywords=' + keywords;
  353. document.location = save_link_url;
  354. /*return {'url':url,
  355. 'title':title,
  356. 'description':description,
  357. 'keywords':keywords,
  358. 'save_lnk':save_link_url};
  359. */
  360. };
  361. var viz = new Object();
  362. rcache.viz = viz;
  363. rcache.viz.setup = function(){
  364. $(".viz-tag-box > a").hide();
  365. };
  366. rcache.viz.mouse_ovr = function(el){
  367. // do some animation when mouse over occurs
  368. try {
  369. $(".viz-expanded").animate({'padding':'4px','font-size':''});
  370. $(".viz-expanded").css({'font-size':'','float':'left','background':''});
  371. $(".viz-tag-box").removeClass('viz-expanded');
  372. } catch(e){
  373. // do nothing
  374. }
  375. $(el).animate({'padding':'4px','font-size':'12px'});
  376. $(el).css({'font-size':'12px','float':'','background':''});
  377. $(el).addClass('viz-expanded');
  378. };
  379. rcache.viz.mouse_out = function(el){
  380. // do some animation when mouse over occurs
  381. $(el).animate({'padding':'4px','font-size':''});
  382. $(el).css({'font-size':'','float':'left','background':''});
  383. };
  384. rcache.viz.recent_tagged_with = function(id){
  385. // get recently tagged entry titles
  386. var the_div = $("#viz-detail-box");
  387. var url ='/viz/xhr/recent/tagged/with/' + id +"/";
  388. $.get(url,function(data){
  389. var res = eval('(' + data + ')');
  390. if (res.status == 'success'){
  391. var entries = $(res.msg);
  392. //alert(res.msg);
  393. try{
  394. $("._entries").children().remove();
  395. $("._entries").removeClass('_entries');
  396. }catch(e){
  397. // blah!
  398. //alert(e);
  399. }
  400. //the_div.children().remove();
  401. the_div.append(entries);
  402. the_div.addClass("_entries");
  403. } else {
  404. //fixme: install jqModal
  405. alert("could not get entries for tag");
  406. }
  407. });
  408. };
  409. function UnCryptMailto(s) {
  410. var n=0;
  411. var r="";
  412. for(var i=0; i < s.length; i++) {
  413. n=s.charCodeAt(i);
  414. if (n>=8364) {n = 128;}
  415. r += String.fromCharCode(n-(1));
  416. }
  417. return r;
  418. }
  419. $(document).ready(function(){
  420. $(".rounded-top").corner("top round 6px");
  421. $(".rounded").corner("8px");
  422. $("ul.nav-edit li").corner("tr br round 6px");
  423. });