Guest User

Untitled

a guest
Jun 18th, 2018
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.92 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. comment_form.element.addEvent('submit', function(ef) {
  80. ef.preventDefault();
  81.  
  82. ef.target.set('send', {url: '/comments/create', method: 'post',
  83. onSuccess: function(responseText, responseXML) {
  84. alert('test');
  85. }.bind(this)
  86. });
  87. ef.target.send(); //Sends the form.
  88. }.bind(this));
  89.  
  90. // this.handle_comments_create(comment_form.element, container);
  91.  
  92. },
  93. handle_comments_create: function(el, container) {
  94. el.addEvent('submit', function(ef) {
  95. ef.preventDefault();
  96.  
  97. $(ef.target).set('send', {
  98. url: '/comments/create',
  99. method: 'post',
  100. onSuccess: function(responseText, responseXML) {
  101. xml_response = new Element('xml', {
  102. html : responseText
  103. });
  104.  
  105. el.nix(true);
  106.  
  107. _container = (container.getParent('li[rel=comment]')) ? container.getParent('li[rel=comment]') : container;
  108. tier = (container.getParent('li[rel=comment]')) ? SLANGRN.words.retrieve('tiers').get(container.getParent('li[rel=comment]').id).toInt()+1 : 1;
  109.  
  110. MyComment = new SubtleTemplate($('_comment').clone());
  111. comment = new MyComment({
  112. 'content' : xml_response.getElement('content').get('html'),
  113. 'user' : SLANGRN.user.login,
  114. 'definition_id' : this.definition_id,
  115. 'tier' : tier,
  116. 'date' : 'today'
  117. }).inject(_container);
  118.  
  119. }.bind(this)
  120. });
  121. $(ef.target).send(); //Sends the form.
  122.  
  123. }.bind(this));
  124. },
  125. /*
  126. method that displays login form
  127. takes container and el as parameter
  128. container - Element that form is going to be injected in
  129. el - toggler that opens/closes the container
  130. */
  131. display_login_form: function(container, el) {
  132.  
  133. MyLoginForm = new SubtleTemplate($('_login_form').clone().setStyle('display', 'block'));
  134. var login_form = new MyLoginForm({
  135. 'authenticity_token' : window._token
  136. }).inject(container);
  137.  
  138. login_form.element.setStyle('display', 'none');
  139.  
  140. $(login_form.element).set('reveal', {
  141. mode: 'vertical',
  142. transition: 'bounce:out',
  143. onComplete: this.fix_heights.bind(this)
  144. }).reveal();
  145.  
  146. login_form.element.addEvent('submit', function(ef) {
  147. ef.preventDefault();
  148.  
  149. ef.target.set('send', {url: '/users/login', method: 'post',
  150. onSuccess: function(responseText, responseXML) {
  151. response = JSON.decode(responseText);
  152. if (response.status == 200) {
  153. SLANGRN.user.id = response.user_id;
  154. SLANGRN.user.login = response.login;
  155. SLANGRN.user.status = 'logged_in';
  156. SLANGRN.user.fresh_login = 1;
  157.  
  158. this.container.getElement('form').nix(true);
  159. this.display_comments_form(this.container, el);
  160. } else {
  161. $$('div.error')[0].set('html', 'Login unsuccessful. Please try again');
  162. }
  163. }.bind(this)
  164. });
  165. ef.target.send(); //Sends the form.
  166. }.bind(this));
  167.  
  168. },
  169. set_add_comment_handler: function() {
  170. var status = [];
  171. var label = {
  172. 'open' : 'Add Comment',
  173. 'closed' : 'Close'
  174. };
  175.  
  176. if ($defined(this.toggler)) {
  177. this.toggler.addEvent('click', function(e) {
  178.  
  179. if (!$defined(status[e.target.id])) status[e.target.id] = 'closed';
  180. e.target.set('html', label.closed);
  181.  
  182. if (SLANGRN.user.status == 'logged_in') {
  183. if (status[e.target.id] == 'closed') {
  184. this.display_comments_form(e.target.getParent('div'), e.target);
  185. status[e.target.id] = 'open';
  186. } else {
  187. status[e.target.id] = 'closed';
  188. e.target.set('html', label.open);
  189. e.target.getNext('form').nix(true);
  190. }
  191. } else {
  192. if (status[e.target.id] == 'closed') {
  193. this.display_login_form(e.target.getParent('div'), e.target);
  194. status[e.target.id] = 'open';
  195. } else {
  196. e.target.getNext('form').nix(true);
  197. status[e.target.id] = 'closed';
  198. e.target.set('html', label.open);
  199. }
  200. }
  201. e.stop();
  202. e.target.getParent('div').focus();
  203. }.bind(this));
  204. }
  205. },
  206. hide_comments: function() {
  207. var commentary_block = this.container.getFirst('ul.commentary_block');
  208. if ($defined(commentary_block)) {
  209. this.container.getElement('ul.commentary_block').set('reveal', {
  210. transition: 'bounce:out'
  211. }).dissolve();
  212. }
  213. },
  214. show_hide_reply: function() {
  215. this.container.getElements('div.paragraphs').addEvents({
  216. 'mouseenter' : function(e) {
  217. if ($defined($(e.target).getParent('div.comment').getElement('p.reply'))) {
  218. $(e.target).getParent('div.comment').getElement('p.reply').setStyle('visibility', 'visible');
  219. }
  220. }.bind(this),
  221. 'mouseleave' : function(e) {
  222. if ($defined($(e.target).getParent('div.comment').getElement('p.reply'))) {
  223. $(e.target).getParent('div.comment').getElement('p.reply').setStyle('visibility', 'hidden');
  224. }
  225. }.bind(this)
  226. });
  227. },
  228. /*
  229. attaches handler to clamshell
  230. */
  231. set_hide_show_comments_handler: function() {
  232. var toggle_comment = this.container.getElements('img.toggle_comment, h3');
  233.  
  234. if ($defined(this.container.getElement('ul.commentary_block'))) {
  235. toggle_comment.addEvent('click', function(e) {
  236.  
  237. commentary_block = this.container.getElement('ul.commentary_block');
  238.  
  239. commentary_block.set('reveal', {
  240. onComplete: function() {
  241. if (!commentary_block.get('reveal').hidden) {
  242. this.init_form(this.container);
  243. } else {
  244. this.container.getElement('form').nix(true);
  245. }
  246. this.fix_heights.bind(this);
  247. }.bind(this)
  248. }).get('reveal').toggle();
  249.  
  250. }.bind(this));
  251. }
  252. },
  253. fix_heights: function() {
  254. var heightValue = (window.ie6) ? '100%' : '';
  255. var element = this.container;
  256. if (element && element.offsetHeight>0) element.getElement('form').setStyle('height', heightValue);
  257. }
  258. });
Add Comment
Please, Sign In to add comment