PageRenderTime 40ms CodeModel.GetById 17ms RepoModel.GetById 0ms app.codeStats 1ms

/js/polls.js

https://bitbucket.org/jonarano/joneame
JavaScript | 357 lines | 234 code | 107 blank | 16 comment | 42 complexity | ff47fd737ffb0a880db6734ed7811e55 MD5 | raw file
Possible License(s): AGPL-1.0
  1. // It's licensed under the AFFERO GENERAL PUBLIC LICENSE unless stated otherwise.
  2. // You can get copies of the licenses here:
  3. // http://www.affero.org/oagpl.html
  4. // AFFERO GENERAL PUBLIC LICENSE is also included in the file called "COPYING".
  5. // By Jon Arano <arano.jon@gmail.com>
  6. function update_votes_counter(id){
  7. var votos= $('#votos-e-' + id).html()
  8. var votos_totales= $('#usuarios-totales-' + id).html()
  9. votos ++;
  10. votos_totales ++;
  11. $('#votos-e-'+id).html(votos);
  12. $('#usuarios-totales-'+id).html(votos_totales);
  13. }
  14. function update_comments_counter(id){
  15. var comentarios= $('#opiniones-' + id).html()
  16. comentarios ++;
  17. $('#opiniones-'+id).html(comentarios);
  18. }
  19. function ajax_poll_vote(id) {
  20. var httpreq = new XMLHttpRequest();
  21. var cuenta = document.getElementById("cuenta_"+id).value;
  22. var valores = new Array();
  23. var opciones = new Array();
  24. for (i=0; i < cuenta ; i++) {
  25. valores[i] = document.getElementById("opcion_"+id+"["+i+"]").checked;
  26. }
  27. for (i=0; i < cuenta; i++) {
  28. if (valores[i] == true) {
  29. opciones[i] = document.getElementById("opcion_"+id+"["+i+"]").value; // si está votado mete el id de la opción en el array
  30. } else opciones[i] = 0;
  31. }
  32. if (httpreq) {
  33. httpreq.onreadystatechange=function() {
  34. if (httpreq.readyState == 4) {
  35. var serverResponse = httpreq.responseText;
  36. /* Sobreescribe sobre el div el texto de la respuesta */
  37. document.getElementById("pollvotes"+id).innerHTML = String(serverResponse);
  38. update_votes_counter(id);
  39. return true;
  40. }
  41. }
  42. httpreq.open('POST', '/ajax/poll_vote.php', true);
  43. httpreq.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
  44. httpreq.send('poll_id='+id+'&opciones='+opciones);
  45. }
  46. }
  47. // Free software licensed under AGPL
  48. // (c) David <neikokz at gmail dot com>
  49. function setOpacity(opacity) {
  50. obj = document.getElementById("ajaxcomments");
  51. container = document.getElementById("ajaxcontainer");
  52. obj.style.filter = "alpha(opacity:"+opacity+")";
  53. obj.style.KHTMLOpacity = opacity/100;
  54. obj.style.MozOpacity = opacity/100;
  55. obj.style.opacity = opacity/100;
  56. container.style.height = (opacity*obj.offsetHeight/100)+10+"px";
  57. }
  58. function fadeIn(opacity) {
  59. if (opacity <= 100) {
  60. setOpacity(opacity);
  61. opacity += 50;
  62. window.setTimeout("fadeIn("+opacity+")", 25);
  63. }
  64. }
  65. function startFade() {
  66. setOpacity(document.getElementById("ajaxcomments"), 0);
  67. document.getElementById("ajaxcomments").style.visibility = 'visible';
  68. fadeIn(0);
  69. }
  70. function submit_comment() {
  71. if (document.getElementById("poll_content").value == "") {
  72. document.getElementById("error_com").innerHTML = "Comentario vacío";
  73. document.getElementById("spinner").className = 'ko';
  74. document.getElementById("poll_content").focus();
  75. return false;
  76. }
  77. var poll_content = document.getElementById("poll_content").value;
  78. var process = document.getElementById("process").value;
  79. var poll_id = document.getElementById("poll_id").value;
  80. var user_id = document.getElementById("user_id").value;
  81. var httpreq = new XMLHttpRequest();
  82. if (httpreq) {
  83. document.getElementById("submit_com").disabled = true;
  84. document.getElementById("poll_content").disabled = true;
  85. document.getElementById("spinner").className = 'loading';
  86. httpreq.onreadystatechange=function() {
  87. if (httpreq.readyState == 4) {
  88. var serverResponse = httpreq.responseText;
  89. if (String(serverResponse).substring(0, 3) == "OK:") {
  90. document.getElementById("spinner").className = 'ok';
  91. document.getElementById("poll_content").value = "";
  92. document.getElementById("ajaxcomments").innerHTML = String(serverResponse).substring(3);
  93. startFade();
  94. update_comments_counter(id);
  95. return true;
  96. } else {
  97. document.getElementById("spinner").className = 'ko';
  98. document.getElementById("submit_com").disabled = false;
  99. document.getElementById("plol_content").disabled = false;
  100. document.getElementById("error_com").innerHTML = String(serverResponse).substring(3);
  101. return false;
  102. }
  103. }
  104. }
  105. httpreq.open('POST', '/ajax/poll_com.php', true);
  106. httpreq.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
  107. httpreq.send('poll_content='+encodeURIComponent(poll_content)+'&process='+process+'&poll_id='+poll_id+'&user_id='+user_id);
  108. }
  109. }
  110. function edit_comment(com_id) {
  111. if (document.getElementById('comment_'+com_id).value == "") {
  112. document.getElementById('error_com_'+com_id).innerHTML = "Comentario vacío";
  113. document.getElementById('spinner_'+com_id).className = 'spinner ko';
  114. document.getElementById('comment_'+com_id).focus();
  115. return false;
  116. }
  117. var comment_content = document.getElementById("comment_"+com_id).value;
  118. var poll_id = document.getElementById("poll_id_"+com_id).value;
  119. var user_id = document.getElementById("user_id_"+com_id).value;
  120. var httpreq = new XMLHttpRequest();
  121. if (httpreq) {
  122. document.getElementById("submit_com_"+com_id).disabled = true;
  123. document.getElementById("comment_"+com_id).disabled = true;
  124. document.getElementById("spinner_"+com_id).className = 'spinner loading';
  125. httpreq.onreadystatechange=function() {
  126. if (httpreq.readyState == 4) {
  127. var serverResponse = httpreq.responseText;
  128. if (String(serverResponse).substring(0, 3) == "OK:") {
  129. document.getElementById("spinner_"+com_id).className = 'spinner ok';
  130. document.getElementById("comment_"+com_id).value = "";
  131. document.getElementById("ccontainer-"+com_id).innerHTML = String(serverResponse).substring(3);
  132. return true;
  133. } else {
  134. document.getElementById("spinner_"+com_id).className = 'spinner ko';
  135. document.getElementById("submit_com_"+com_id).disabled = false;
  136. document.getElementById("comment_"+com_id).disabled = false;
  137. document.getElementById("error_com_"+com_id).innerHTML = String(serverResponse).substring(3);
  138. return false;
  139. }
  140. }
  141. }
  142. httpreq.open('POST', '/ajax/edit_poll_comment.php?id='+com_id, true);
  143. httpreq.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
  144. httpreq.send('id='+com_id+'&poll_content='+encodeURIComponent(comment_content)+'&process=editcomment&poll_id='+poll_id+'&user_id='+user_id);
  145. var serverResponse = httpreq.responseText;
  146. }
  147. }
  148. function edit_poll(id){
  149. var httpreq = new XMLHttpRequest();
  150. var process = document.getElementById("process-"+id).value;
  151. if (process == 'save_settings'){
  152. var cuenta = document.getElementById("cuenta"+id).value;
  153. var titulo = document.getElementById("titulo").value;
  154. var descripcion = document.getElementById("descripcion").value;
  155. var opciones = new Array();
  156. var ids = new Array();
  157. for (i=0; i < cuenta; i++) {
  158. ids[i] = document.getElementById("opcion"+i).value;
  159. }
  160. for (i in ids) {
  161. opciones[i] = document.getElementById("valor"+i).value;
  162. }
  163. }
  164. if (httpreq) {
  165. httpreq.onreadystatechange=function() {
  166. if (httpreq.readyState == 4) {
  167. var serverResponse = httpreq.responseText;
  168. /* Sobreescribe sobre el div el texto de la respuesta */
  169. document.getElementById("editbox-"+id).innerHTML = String(serverResponse);
  170. if (process == 'save_settings') save_options(id, opciones, process, titulo, descripcion)
  171. return true;
  172. }
  173. }
  174. httpreq.open('POST', '/ajax/polls_utils.php', true);
  175. httpreq.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
  176. httpreq.send('poll_id='+id+'&process='+process);
  177. }
  178. }
  179. function save_options(id, opciones, process, titulo, descripcion) {
  180. var httpreq = new XMLHttpRequest();
  181. if (httpreq) {
  182. httpreq.onreadystatechange=function() {
  183. if (httpreq.readyState == 4) {
  184. var serverResponse = httpreq.responseText;
  185. /* Sobreescribe sobre el div el texto de la respuesta */
  186. document.getElementById("pollvotes"+id).innerHTML = String(serverResponse);
  187. return true;
  188. }
  189. }
  190. httpreq.open('POST', '/ajax/polls_utils.php', true);
  191. httpreq.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
  192. httpreq.send('poll_id='+id+'&process='+process+'&opciones='+opciones+'&titulo='+titulo+'&descripcion='+descripcion);
  193. }
  194. }
  195. function delete_poll(id) {
  196. var httpreq = new XMLHttpRequest();
  197. if (httpreq) {
  198. httpreq.onreadystatechange=function() {
  199. if (httpreq.readyState == 4) {
  200. var serverResponse = httpreq.responseText;
  201. document.getElementById("encuesta"+id).innerHTML = '';
  202. return true;
  203. }
  204. }
  205. httpreq.open('POST', '/ajax/poll_delete.php', true);
  206. httpreq.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
  207. httpreq.send('poll_id='+id);
  208. }
  209. }
  210. function add_option(){
  211. var allParas = document.getElementsByTagName('dt');
  212. var num = allParas.length;
  213. var capa = document.getElementById("encuesta-opciones");
  214. var dt = document.createElement('dt');
  215. var dd = document.createElement('dd');
  216. if (num == 15 ) {
  217. alert('Has superado el número de opciones máximas');
  218. return true;
  219. }
  220. previous = parseInt(num)- 1;
  221. /* Quitar enlace de eliminar en la opción anterior */
  222. eliminar = document.getElementById('delete-'+previous);
  223. padre3 = eliminar.parentNode;
  224. padre3.removeChild(eliminar);
  225. original = num; // número de opciones actuales
  226. /* Añadir texto */
  227. dt.id = 'opcion-'+original;
  228. siguiente = parseInt(original) + parseInt(1);
  229. dt.innerHTML = 'opción '+ siguiente ;
  230. /* Añadir cuadro de texto */
  231. dd.id = 'opcion-t-'+original;
  232. dd.innerHTML = '<input type="text" value="" size="70" name="opts['+original+']" id="opts['+original+']"> <span id="delete-'+original+'"> <a href="javascript:delete_option('+original+')"> <img class="icon delete" alt="eliminar opción" title="eliminar opción"></a></span>';
  233. /* Crear objetos */
  234. capa.appendChild(dt);
  235. capa.appendChild(dd);
  236. }
  237. function delete_option(number){
  238. previous = parseInt(number)- 1;
  239. opcion = document.getElementById('opcion-'+number);
  240. cuadro = document.getElementById('opcion-t-'+number);
  241. contenido = document.getElementById('opts['+previous+']').value; // para no perder el valor de la opción anterior
  242. /* Eliminar texto y cuadro de texto de la opción */
  243. padre = opcion.parentNode;
  244. padre.removeChild(opcion);
  245. padre2 = cuadro.parentNode;
  246. padre2.removeChild(cuadro);
  247. /* Devolver enlace para eliminar la opción anterior */
  248. dd = document.getElementById("opcion-t-"+previous);
  249. dd.innerHTML = '<input type="text" value="'+contenido+'" size="70" name="opts['+previous+']" id="opts['+previous+']"><span id="delete-'+previous+'"><a href="javascript:delete_option('+previous+')" > <img class="icon delete" alt="eliminar opción" title="eliminar opción"></a></span>'; // añadimos el enlace de eliminar opción anterior
  250. }