Guest User

Untitled

a guest
Apr 17th, 2018
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.04 KB | None | 0 0
  1. (function() {
  2. query = window.location.href.parseQuery();
  3. Event.observe(window, 'load', initialize);
  4. })();
  5.  
  6. function initialize() {
  7. var current_new_word = '';
  8. per_page = 30;
  9. wordcount = 0;
  10. sort = 'desc';
  11. word_help_text = $F('new_word');
  12. sort_words();
  13. $('new_word').observe('focus', function(e) {
  14. var el = Event.element(e);
  15. if ( $F(el) == word_help_text ) {
  16. el.value = '';
  17. el.style.color = "black";
  18. el.style.border = "1px solid black";
  19. }
  20. }
  21. );
  22.  
  23. $('new_word').observe('blur', function(e) {
  24. var el = Event.element(e);
  25. if ($F(el).blank()) {
  26. el.value = word_help_text;
  27. el.style.color = "grey";
  28. el.style.border = "1px solid #aaa";
  29. }
  30. }
  31. );
  32.  
  33. $('new_word').observe('keydown', submit_new_word );
  34.  
  35. $('languages').observe('change', function(e) {
  36. var el = Event.element(e);
  37. window.location.href="partners_edit.php?mode=ttsfilter&partnerid=" + query.partnerid + "&lang=" + $F(el);
  38. }
  39. );
  40.  
  41. $('replace_word_static_container').observe('click', function(e) {
  42. var el = $('replace_word_static_container');
  43. el.style.display = "none";
  44. $('replace_word').style.display = "inline";
  45. $('replace_word').style.color = 'black';
  46. $('replace_word').select();
  47. $('replace_word').focus();
  48. }
  49. );
  50.  
  51. $('replace_word').observe('blur', submit_replacement);
  52. $('replace_word').observe('keydown', submit_replacement);
  53.  
  54. $$('.word_row').each( function(el) { el.observe('click', toggle_textbox_byevent ); });
  55. $$('input.word_edit').each( function(el) { el.observe('blur', submit_word_edit ); el.observe('keydown', submit_word_edit); });
  56. $$('.delete_word').each( function(el) { el.observe('click', delete_word); } );
  57.  
  58. $('sort_trigger').observe('click', sort_words.curry(null));
  59. $('search_word').observe('keyup', filter_words);
  60. //new Form.Element.Observer($('search_word'), 2, filter_words);
  61. $('add_button').observe('click', submit_new_word );
  62.  
  63. init_words();
  64.  
  65. $$('.larr').first().observe('click', function() {
  66. if ($F('select_page_widget') > 1) {
  67. $('select_page_widget').selectedIndex--;
  68. init_words();
  69. }
  70. });
  71.  
  72. $$('.rarr').first().observe('click', function() {
  73. if ($F('select_page_widget') < parseInt($('pages_total').innerHTML, 10) ) {
  74. $('select_page_widget').selectedIndex++;
  75. init_words();
  76. }
  77. });
  78. }
  79.  
  80. function filter_words(e) {
  81. //alert('here');
  82. var el = Event.element(e);
  83. var str = $F(el).escapeHTML();
  84.  
  85. if (wordcount > per_page || str.blank() )
  86. init_words();
  87. else {
  88. $$('.word_row').each( function(el) { el.style.display = 'none'; } );
  89. var filtered = $$('.word_row').findAll( function(el) { return (el.select('.display_word').first().innerHTML.startsWith(str)); } );
  90. filtered.each( function(el) { el.style.display = 'block'; } );
  91. }
  92. }
  93.  
  94. function toggle_textbox_byevent (e) {
  95. var el = Event.element(e);
  96. toggle_textbox(el);
  97. }
  98.  
  99. function toggle_textbox (el) {
  100. //alert (el);
  101. normalize_list();
  102. //alert ('after' + el);
  103. var id = el.id.substr(2);
  104. var in_id = 'in' + id;
  105.  
  106. if ($(in_id)) {
  107. $('sp' + id).style.display = 'none';
  108. $(in_id).style.display = 'inline';
  109. $('dl' + id).style.display = 'inline';
  110. $(in_id).select();
  111. $(in_id).focus();
  112. }
  113. }
  114.  
  115. function build_page_selector(pages, selected) {
  116. if ($('select_page_widget')) {
  117. $('select_page_widget').stopObserving('click');
  118. }
  119. $('page_selector').innerHTML = '';
  120.  
  121. var html = '<select id="select_page_widget" name="page">';
  122.  
  123. for (var i = 1; i <= pages; i++) {
  124. if (i != selected) {
  125. html += '<option value = "' + i + '">' + i + '</option>';
  126. }
  127. else {
  128. html += '<option value = "' + i + '" selected="yes">' + i + '</option>';
  129. }
  130. }
  131.  
  132. html += '</select>';
  133.  
  134. $('page_selector').innerHTML = html;
  135.  
  136. $('select_page_widget').observe('change', init_words);
  137.  
  138. }
  139.  
  140. function clear_words() {
  141. $$('.word_row').each( function(el) { el.stopObserving('click', toggle_textbox_byevent ); });
  142. $$('input.word_edit').each( function(el) { el.stopObserving('blur', submit_word_edit ); el.stopObserving('keydown', submit_word_edit); });
  143. $$('.delete_word').each( function(el) { el.stopObserving('click', delete_word); } );
  144.  
  145. $('rowlist').innerHTML = '';
  146. }
  147.  
  148. function init_words() {
  149. var lang = query.lang || 1;
  150. var search = $F('search_word');
  151. var words_per_page = per_page;
  152. var page = $('select_page_widget') ? $F('select_page_widget') : 1;
  153.  
  154. clear_words();
  155.  
  156. var url = 'partners_edit.php?mode=ttsfilter&partnerid=' + query.partnerid + '&rand=' + Math.floor(Math.random() * 1000000000);
  157. new Ajax.Request(url, {
  158. parameters: {action: 'fetch', lang: lang, search: search, sortby: sort, items_per_page: words_per_page, page: page},
  159. asynchronous: false,
  160. onSuccess: function(resp) {
  161. var data = resp.responseText.evalJSON();
  162. wordcount = data['count'];
  163. if (data['count'] < 1) return;
  164. for (var id in data['words']) {
  165. display_new_word(id, data['words'][id], true, true);
  166. }
  167. var page_count = Math.ceil(parseFloat(data['count']) / parseFloat(words_per_page));
  168. $('pages_total').innerHTML = page_count;
  169. build_page_selector(page_count, page);
  170. sort_words(true);
  171. },
  172. onFailure: function () {
  173. alert(url + ' is not responding');
  174. }
  175. });
  176.  
  177. }
  178.  
  179.  
  180.  
  181. function submit_new_word(e) {
  182. var el = Event.element(e);
  183. if ( (Event.KEY_RETURN == (e.keyCode || e.which)
  184. || (e.type == 'click' && el.id == 'add_button'))
  185. && $F(el) != word_help_text
  186. ) {
  187. var el = $('new_word');
  188. el.value = $F(el).toLowerCase().escapeHTML();
  189. var blank = el.value.blank();
  190. var exists = word_exists(el.value);
  191.  
  192. if ( !blank && !exists ) {
  193. langs = $('languages');
  194. var url = 'partners_edit.php?mode=ttsfilter&partnerid=' + query.partnerid + '&rand=' + Math.floor(Math.random() * 1000000000);
  195.  
  196. new Ajax.Request(url, {
  197. parameters: {action: 'new', word: $F(el), lang: $F(langs)},
  198. asynchronous: false,
  199. onSuccess: add_new_word,
  200. onFailure: function () {
  201. alert(url + ' is not responding');
  202. }
  203. });
  204. }
  205. else {
  206. el.select();
  207. el.focus();
  208. if (exists) {
  209. new Effect.Appear('already_exists_message', {duration: 0.1})
  210. new Effect.Fade('already_exists_message', {duration: 0.2, queue: 'end', delay: 1});
  211. }
  212. if (blank) {
  213. new Effect.Appear('input_blank_message', {duration: 0.1})
  214. new Effect.Fade('input_blank_message', {duration: 0.2, queue: 'end', delay: 1});
  215. }
  216. }
  217. }
  218. }
  219.  
  220. function add_new_word(resp) {
  221. var newid = parseInt(resp.responseText, 10);
  222. var newword = $('new_word').value;
  223.  
  224. display_new_word(newid, newword);
  225. }
  226.  
  227.  
  228. function display_new_word(newid, newword, no_effect, no_focus) {
  229. var new_row = '<li class="word_row" id ="row' + newid + '"><input class = "word_edit" id="in' + newid + '" value="' + newword + '" type="text" size="30" style="display: none; border: 1px black solid; color: black;"><span class="delete_word" style="display: none;" id="dl'+newid+'">&nbsp;&nbsp;<a href="javascript:void(0)">delete</a></span><span class="display_word" id="sp' + newid + '" style="color: black; cursor: pointer" >' + newword + '</span><span id="ms' + newid + '" style="color: red; display: none"></span></li>';
  230. if ( !($$('.word_row').first()) ) {
  231. $('rowlist').innerHTML = new_row;
  232. }
  233. else {
  234. $$('.word_row').first().insert({before: new_row});
  235. }
  236.  
  237. $('row'+newid).observe('click', toggle_textbox_byevent );
  238. $('in'+newid).observe('blur', submit_word_edit ).observe('keydown', submit_word_edit);
  239. $('dl'+newid).observe('click', delete_word);
  240.  
  241. current_new_word = '';
  242.  
  243. if (!no_focus) {
  244. $('new_word').value = '';
  245. $('new_word').focus();
  246. }
  247.  
  248. if (!no_effect)
  249. new Effect.Highlight('row' + newid);
  250. }
  251.  
  252. function normalize_list() {
  253. $$('.word_edit').each( function(el) {el.style.display = 'none';} );
  254. $$('.delete_word').each( function(el) {el.style.display = 'none';} );
  255. $$('.display_word').each( function(el) {el.style.display = 'inline';} );
  256. }
  257.  
  258. function find_next_word(el) {
  259. var next_row = $$('.word_row')[$$('input.word_edit').indexOf(el) + 1];
  260.  
  261. while (!next_row || next_row.style.display == 'none') {
  262. if (!next_row) next_row = $$('.word_row').first();
  263. else next_row = $$('.word_row')[ $$('.word_row').indexOf(next_row) + 1 ];
  264. }
  265.  
  266. return next_row.select('input.word_edit').first();
  267. }
  268.  
  269. function find_prev_word(el) {
  270. var prev_row = $$('.word_row')[$$('input.word_edit').indexOf(el) - 1];
  271.  
  272. while (!prev_row || prev_row.style.display == 'none') {
  273. if (!prev_row) prev_row = $$('.word_row').last();
  274. else prev_row = $$('.word_row')[ $$('.word_row').indexOf(prev_row) - 1 ];
  275. }
  276.  
  277. return prev_row.select('input.word_edit').first();
  278. }
  279.  
  280. function iterate(e) {
  281. var el = Event.element(e);
  282. if (Event.KEY_TAB == (e.keyCode || e.which)
  283. || (Event.KEY_DOWN == (e.keyCode || e.which))
  284. ) {
  285. e.stop();
  286. toggle_textbox( find_next_word(el) );
  287. }
  288.  
  289. if (Event.KEY_UP == (e.keyCode || e.which)) {
  290. e.stop();
  291. toggle_textbox( find_prev_word(el) );
  292. }
  293. }
  294.  
  295.  
  296. function submit_word_edit(e) {
  297. if ( /*e.type == 'blur'
  298. || */(Event.KEY_RETURN == (e.keyCode || e.which))
  299. || (Event.KEY_TAB == (e.keyCode || e.which))
  300. || (Event.KEY_UP == (e.keyCode || e.which))
  301. || (Event.KEY_DOWN == (e.keyCode || e.which))
  302. || (Event.KEY_ESC == (e.keyCode || e.which))
  303. ) {
  304. //alert (e.type);
  305. var el = Event.element(e);
  306. el.value = $F(el).toLowerCase();
  307. var id = el.id.substr(2);
  308. var sp_id = 'sp' + id;
  309.  
  310. if (Event.KEY_ESC == (e.keyCode || e.which)) {
  311. normalize_list();
  312. return;
  313. }
  314.  
  315. var edited_word = $F(el).escapeHTML();
  316.  
  317. if (word_exists(edited_word, id) ) {
  318. $('ms'+id).innerHTML = 'This word already exists.';
  319. $('in' + id).select();
  320. $('in' + id).focus();
  321. new Effect.Appear('ms' + id, {duration: 0.1});
  322. new Effect.Fade('ms' + id, {duration: 0.2, queue: 'end', delay: 1});
  323. }
  324. else if (edited_word.blank()) {
  325. $('ms'+id).innerHTML = 'Word shouldn\'t be blank.';
  326. $('in' + id).select();
  327. $('in' + id).focus();
  328. new Effect.Appear('ms' + id, {duration: 0.1})
  329. new Effect.Fade('ms' + id, {duration: 0.2, queue: 'end', delay: 1});
  330. }
  331. else if ($(sp_id)) {
  332. $(sp_id).innerHTML = edited_word;
  333. el.style.display = 'none';
  334. $(sp_id).style.display = 'inline';
  335. $('dl'+id).style.display = 'none';
  336.  
  337. var url = 'partners_edit.php?mode=ttsfilter&partnerid=' + query.partnerid + '&rand=' + Math.floor(Math.random() * 1000000000);
  338. new Ajax.Request(url, {
  339. parameters: {action: 'edit', word: edited_word, id: id},
  340. asynchronous: true,
  341. onSuccess: function() {
  342. },
  343. onFailure: function () {
  344. alert(url + ' is not responding');
  345. }
  346. });
  347. iterate(e);
  348. }
  349. }
  350. }
  351.  
  352.  
  353.  
  354. function word_exists(word, exclude_id) {
  355. var exists = 0;
  356. var url = 'partners_edit.php?mode=ttsfilter&partnerid=' + query.partnerid + '&rand=' + Math.floor(Math.random() * 1000000000);
  357. new Ajax.Request(url, {
  358. parameters: {action: 'exist', word: word, exclude: exclude_id, lang: $F('languages') },
  359. asynchronous: false,
  360. onSuccess: function(resp) {
  361. var yes = parseInt(resp.responseText);
  362. if (yes == 1) exists = 1;
  363. },
  364. onFailure: function () {
  365. alert(url + ' is not responding');
  366. }
  367. });
  368.  
  369. return (exists == 1);
  370. /*var elem;
  371. if (exclude_id != null)
  372. elem = $$('input.word_edit').find( function(el) { return ( ($F(el) == word.unescapeHTML() ) && (el.id != ('in' + exclude_id)) ) } );
  373. else
  374. elem = $$('input.word_edit').find( function(el) { return $F(el) == word.unescapeHTML() } );
  375. return (elem?true:false);*/
  376. }
  377.  
  378. function sort_words(no_change) {
  379. if (no_change == null) {
  380. if (sort == 'asc')
  381. sort = 'desc';
  382. else
  383. sort = 'asc';
  384.  
  385. init_words();
  386. }
  387.  
  388. var rows = $$('.word_row').sortBy( function(el) { return el.select('span.display_word').first().innerHTML; } );
  389. var list = $('rowlist');
  390. //list.innerHTML = '';
  391. if (sort == 'asc')
  392. rows.each ( function(el) { list.insert(el) } );
  393. else
  394. rows.each ( function(el) { list.insert( {'top': el} )} );
  395. rows = null;
  396. }
  397.  
  398. function submit_replacement (e) {
  399. if (e.type == 'blur' || (Event.KEY_RETURN == (e.keyCode || e.which)) ) {
  400. var el = Event.element(e);
  401. var st_el = $('replace_word_static_container');
  402. $('replace_word_static').innerHTML = $F(el).escapeHTML();
  403. el.style.display = "none";
  404. st_el.style.display = "inline";
  405.  
  406. var url = 'partners_edit.php?mode=ttsfilter&partnerid=' + query.partnerid + '&rand=' + Math.floor(Math.random() * 1000000000);
  407. new Ajax.Request(url, {
  408. parameters: {action: 'replace', word: $F(el).escapeHTML(), lang: $F('languages')},
  409. asynchronous: true,
  410. onSuccess: function() {
  411. },
  412. onFailure: function () {
  413. alert(url + ' is not responding');
  414. }
  415. });
  416. }
  417. }
  418.  
  419. function delete_word(e) {
  420. var el = Event.element(e);
  421. var id = el.ancestors().first().id.substr(2);
  422.  
  423. var url = 'partners_edit.php?mode=ttsfilter&partnerid=' + query.partnerid + '&rand=' + Math.floor(Math.random() * 1000000000);
  424. new Ajax.Request(url, {
  425. parameters: { action: 'delete', id: id },
  426. asynchronous: true,
  427. onSuccess: function() {
  428. },
  429. onFailure: function () {
  430. alert(url + ' is not responding');
  431. }
  432. });
  433.  
  434. el.ancestors()[1].remove();
  435. }
Add Comment
Please, Sign In to add comment