Guest User

Untitled

a guest
Jun 24th, 2018
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.65 KB | None | 0 0
  1. var Commentary = new Class({
  2. Implements: [Events, Options, Chain],
  3. options: {
  4. comment_form : ""
  5. },
  6. initialize: function(container, options) {
  7. this.setOptions(options);
  8. this.container = container;
  9. this.definition_id = this.options.definition_id;
  10. this.toggler = this.options.toggler;
  11. this.el_storage = this.options.el_storage;
  12.  
  13. this.comments_forms_fx = {};
  14.  
  15. this.hide_comments();
  16. this.set_add_comment_handler();
  17. this.set_hide_show_comments_handler();
  18. this.show_hide_reply();
  19.  
  20. },
  21. debug: function() {
  22. console.log(this);
  23. },
  24. /*
  25. Creates for for creating root comments
  26. */
  27. init_form: function(container) {
  28.  
  29. if (SLANGRN.user.status == 'logged_in') {
  30. _container = (container.getElement('ul')) ? container.getElement('ul') : container;
  31.  
  32. MyCommentForm = new SubtleTemplate($('_comment_form').clone());
  33. comment_form = new MyCommentForm( {
  34. 'id' : this.definition_id,
  35. 'user_id' : SLANGRN.user.id,
  36. 'authenticity_token' : window._token,
  37. 'parent_id' : 0
  38. }).inject(_container);
  39.  
  40. comment_form.element.setStyle('display', 'none');
  41.  
  42. $(comment_form.element).set('reveal', {
  43. mode: 'vertical',
  44. transition: 'bounce:out',
  45. onComplete: this.fix_heights.bind(this)
  46. }).reveal();
  47.  
  48. this.handle_comments_create(comment_form.element, container.getElement('ul'));
  49. } else {
  50. this.display_login_form(container);
  51. }
  52.  
  53. },
  54. /*
  55. * function that displays comments form
  56. * container
  57. * el - number in the storage to retrieve id
  58. */
  59. display_comments_form: function(container, el) {
  60.  
  61. parent_id = $defined(el) && $defined(el.getParent('li[rel=comment]')) ? SLANGRN.words.retrieve('comments').get(el.getParent('li[rel=comment]').id) : 0;
  62.  
  63. MyCommentForm = new SubtleTemplate($('_comment_form').clone());
  64. comment_form = new MyCommentForm({
  65. 'id' : this.definition_id,
  66. 'user_id' : SLANGRN.user.id,
  67. 'authenticity_token' : window._token,
  68. 'parent_id' : parent_id
  69. }).inject(container);
  70.  
  71. comment_form.element.setStyle('display', 'none');
  72.  
  73. $(comment_form.element).set('reveal', {
  74. mode: 'vertical',
  75. transition: 'bounce:out',
  76. onComplete: this.fix_heights.bind(this)
  77. }).reveal();
  78.  
  79. this.handle_comments_create(comment_form.element, container);
  80.  
  81. },
  82. handle_comments_create: function(el, container) {
  83. el.addEvent('submit', function(ef) {
  84. ef.preventDefault();
  85.  
  86. $(ef.target).set('send', {
  87. // url: '/comments/create',
  88. // method: 'post',
  89. onSuccess: function(responseText, responseXML) {
  90. xml_response = new Element('xml', {
  91. html : responseText
  92. });
  93.  
  94. el.nix(true);
  95.  
  96. _container = (container.getParent('li[rel=comment]')) ? container.getParent('li[rel=comment]') : container;
  97. tier = (container.getParent('li[rel=comment]')) ? SLANGRN.words.retrieve('tiers').get(container.getParent('li[rel=comment]').id).toInt()+1 : 1;
  98.  
  99. MyComment = new SubtleTemplate($('_comment').clone());
  100. comment = new MyComment({
  101. 'action' : '/comments/create',
  102. 'content' : xml_response.getElement('content').get('html'),
  103. 'user' : SLANGRN.user.login,
  104. 'definition_id' : this.definition_id,
  105. 'tier' : tier,
  106. 'date' : 'today'
  107. }).inject(_container);
  108.  
  109. }.bind(this)
  110. });
  111. $(ef.target).send(); //Sends the form.
  112.  
  113. }.bind(this));
  114. },
  115. /*
  116. method that displays login form
  117. takes container and el as parameter
  118. container - Element that form is going to be injected in
  119. el - toggler that opens/closes the container
  120. */
  121. display_login_form: function(container, el) {
  122.  
  123. MyLoginForm = new SubtleTemplate($('_login_form').clone().setStyle('display', 'block'));
  124. var login_form = new MyLoginForm({
  125. 'authenticity_token' : window._token
  126. }).inject(container);
  127.  
  128. login_form.element.setStyle('display', 'none');
  129.  
  130. $(login_form.element).set('reveal', {
  131. mode: 'vertical',
  132. transition: 'bounce:out',
  133. onComplete: this.fix_heights.bind(this)
  134. }).reveal();
  135.  
  136. login_form.element.addEvent('submit', function(ef) {
  137. ef.preventDefault();
  138.  
  139. ef.target.set('send', {url: '/users/login', method: 'post',
  140. onSuccess: function(responseText, responseXML) {
  141. response = JSON.decode(responseText);
  142. if (response.status == 200) {
  143. SLANGRN.user.id = response.user_id;
  144. SLANGRN.user.login = response.login;
  145. SLANGRN.user.status = 'logged_in';
  146. SLANGRN.user.fresh_login = 1;
  147.  
  148. this.container.getElement('form').nix(true);
  149. this.display_comments_form(this.container, el);
  150. } else {
  151. $$('div.error')[0].set('html', 'Login unsuccessful. Please try again');
  152. }
  153. }.bind(this)
  154. });
  155. ef.target.send(); //Sends the form.
  156.  
  157. }.bind(this));
  158.  
  159. },
  160. set_add_comment_handler: function() {
  161. var status = [];
  162. var label = {
  163. 'open' : 'Add Comment',
  164. 'closed' : 'Close'
  165. };
  166.  
  167. if ($defined(this.toggler)) {
  168. this.toggler.addEvent('click', function(e) {
  169.  
  170. if (!$defined(status[e.target.id])) status[e.target.id] = 'closed';
  171. e.target.set('html', label.closed);
  172.  
  173. if (SLANGRN.user.status == 'logged_in') {
  174. if (status[e.target.id] == 'closed') {
  175. this.display_comments_form(e.target.getParent('div'), e.target);
  176. status[e.target.id] = 'open';
  177. } else {
  178. status[e.target.id] = 'closed';
  179. e.target.set('html', label.open);
  180. e.target.getNext('form').nix(true);
  181. }
  182. } else {
  183. if (status[e.target.id] == 'closed') {
  184. this.display_login_form(e.target.getParent('div'), e.target);
  185. status[e.target.id] = 'open';
  186. } else {
  187. e.target.getNext('form').nix(true);
  188. status[e.target.id] = 'closed';
  189. e.target.set('html', label.open);
  190. }
  191. }
  192. e.stop();
  193. e.target.getParent('div').focus();
  194. }.bind(this));
  195. }
  196. },
  197. hide_comments: function() {
  198. var commentary_block = this.container.getFirst('ul.commentary_block');
  199. if ($defined(commentary_block)) {
  200. this.container.getElement('ul.commentary_block').set('reveal', {
  201. transition: 'bounce:out'
  202. }).dissolve();
  203. }
  204. },
  205. show_hide_reply: function() {
  206. this.container.getElements('div.paragraphs').addEvents({
  207. 'mouseenter' : function(e) {
  208. if ($defined($(e.target).getParent('div.comment').getElement('p.reply'))) {
  209. $(e.target).getParent('div.comment').getElement('p.reply').setStyle('visibility', 'visible');
  210. }
  211. }.bind(this),
  212. 'mouseleave' : function(e) {
  213. if ($defined($(e.target).getParent('div.comment').getElement('p.reply'))) {
  214. $(e.target).getParent('div.comment').getElement('p.reply').setStyle('visibility', 'hidden');
  215. }
  216. }.bind(this)
  217. });
  218. },
  219. /*
  220. attaches handler to clamshell
  221. */
  222. set_hide_show_comments_handler: function() {
  223. var toggle_comment = this.container.getElements('img.toggle_comment, h3');
  224.  
  225. if ($defined(this.container.getElement('ul.commentary_block'))) {
  226. toggle_comment.addEvent('click', function(e) {
  227.  
  228. commentary_block = this.container.getElement('ul.commentary_block');
  229.  
  230. commentary_block.set('reveal', {
  231. onComplete: function() {
  232. if (!commentary_block.get('reveal').hidden) {
  233. this.init_form(this.container);
  234. } else {
  235. this.container.getElement('form').nix(true);
  236. }
  237. this.fix_heights.bind(this);
  238. }.bind(this)
  239. }).get('reveal').toggle();
  240.  
  241. }.bind(this));
  242. }
  243. },
  244. fix_heights: function() {
  245. var heightValue = (window.ie6) ? '100%' : '';
  246. var element = this.container;
  247. if (element && element.offsetHeight>0) element.getElement('form').setStyle('height', heightValue);
  248. }
  249. });
Add Comment
Please, Sign In to add comment