PageRenderTime 54ms CodeModel.GetById 29ms RepoModel.GetById 0ms app.codeStats 0ms

/app/assets/javascripts/application.js

https://bitbucket.org/bilashsaha03/hircle2
JavaScript | 340 lines | 265 code | 47 blank | 28 comment | 19 complexity | 5a7c0fb4006595c8172cfb46c7578b24 MD5 | raw file
  1. // This is a manifest file that'll be compiled into application.js, which will include all the files
  2. // listed below.
  3. //
  4. // Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
  5. // or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path.
  6. //
  7. // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
  8. // the compiled file.
  9. //
  10. // WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT'S TO BE PROCESSED, ANY BLANK LINE SHOULD
  11. // GO AFTER THE REQUIRES BELOW.
  12. //
  13. //= require jquery
  14. //= require jquery_ujs
  15. //= require twitter/bootstrap
  16. //= require jquery-ui
  17. //= require tag-it
  18. //= require date-picker
  19. //= require jquery.purr
  20. //= require best_in_place
  21. //= require_tree .
  22. $(document).ready(function(){
  23. $('.best_in_place').best_in_place()
  24. $("a#new-task-btn").click(function(){
  25. var task_id = 0;
  26. var task = '';
  27. $.ajax({
  28. url: "/tasks",
  29. type: 'POST',
  30. dataType: 'JSON',
  31. data: {task: {title: "Enter New task"}},
  32. success: function(response){
  33. if(eval(response.length) > 0){
  34. alert(response)
  35. }
  36. else
  37. {
  38. task_id = eval(response).id;
  39. task = '<div class="span4 task_'+task_id+'"><div class="task"><div class="task-title"><div class="task-title-text"><span data-type="input" data-attribute="title" data-object="task" data-url="/tasks/'+task_id+'" '+'id="best_in_place_task_'+task_id+'_title" class="best_in_place">Enter News Task</span></div><div class="task-options"><div class="btn-group"><a href="javascript: void(0)" data-toggle="dropdown" class="btn dropdown-toggle"><span class="caret"></span></a><ul class="dropdown-menu"><li task_id="'+task_id+'" class="add-sub-task"><a href="javascript: void(0)"><i class="icon-plus-sign"></i>New Sub Task</a></li><li class="delete-task" task_id="'+task_id+'"><a href="javascript: void(0)"><i class="icon-trash"></i>Delete</a></li><li class="copy-task" task_id="'+task_id+'"><a href="javascript: void(0)"><i class="icon-share"></i>Copy</a></li></ul></div></div><div style="clear: both;"></div><div class="task-date"><input type="text" value="Jun 13" size="10" class="datepicker"></div></div><div class="row-fluid time_tracking"> <div class="span3"> Start Tracking <br> <i class="clock icon-play-circle"></i>00:00:00 </div> <div class="span3"> Today <br> 99:99h </div> <div class="span3"> Yesterday <br> 88:88h </div> <div class="span3"> total <br> 45:78h </div> </div><div class="sub-tasks"></div><div id="task_activities_'+task_id+'"><div class="task-activity"><div class="task-activity-text">0 activites</div><div class="task-activity-action">-</div></div></div></div></div>';
  40. $(".task-row").append(task)
  41. }
  42. }
  43. })
  44. });
  45. $('.span9').delegate('li.add-sub-task', 'click', function() {
  46. addSubTask($(this))
  47. });
  48. $('.span9').delegate('li.delete-task', 'click', function() {
  49. deleteTask($(this))
  50. });
  51. $('.span9').delegate('li.copy-task', 'click', function() {
  52. copyTask($(this))
  53. });
  54. $(".task-row").delegate(".datepicker", "focusin", function(){
  55. $(this).datepicker({format: 'M dd'}).change(function(){
  56. var task_date = $(this);
  57. var task_id = task_date.parent().parent().find("ul li.add-sub-task").attr('task_id');
  58. $.ajax({
  59. url: "/tasks/" + task_id,
  60. type: 'PUT',
  61. dataType: 'JSON',
  62. data: {"task[start_date]" : task_date.val()},
  63. success: function(response){
  64. //alert('---')
  65. }
  66. })
  67. $(this).datepicker('hide')
  68. })
  69. });
  70. $(".span2 .datepicker").datepicker({format: 'M dd'}).on("changeDate", function(ev){
  71. //alert(ev.date)
  72. window.location = "/?start_date=" + ev.date;
  73. })
  74. $('.span9').delegate('.sub-task', 'dblclick', function() {
  75. var sub_task = $(this);
  76. $("#hircle_modal").modal('show');
  77. var subTaskId = 0
  78. str = $(this).find("span.best_in_place").attr('id');
  79. var matches = str.match(/\d+/g);
  80. for (var index = 0; index < matches.length; ++index) {
  81. subTaskId = parseInt(matches[index], 10);
  82. }
  83. $.ajax({
  84. url: "/sub_tasks/" + subTaskId,
  85. type: 'GET',
  86. dataType: 'html',
  87. beforeSend: function(){
  88. $("#modal_loading").html('Loading...')
  89. },
  90. success: function(response){
  91. $("#hircle_modal").html(response)
  92. $('p#priorities span.best_in_place').bind("ajax:success", function(e,best_in_place_sub_task_response){
  93. var sub_task_response = $.parseJSON(best_in_place_sub_task_response);
  94. sub_task.parent().find("div.priority").css('color',sub_task_response.priority.color_code)
  95. });
  96. }
  97. })
  98. });
  99. $('#hircle_modal, #hircle_task_modal').delegate('textarea.comment_description', 'keyup', function(e) {
  100. var text_area = $(this);
  101. if(e.which == 13) {
  102. $.ajax({
  103. url: "/comments",
  104. type: 'POST',
  105. data: text_area.closest('form').serialize(),
  106. success: function(response){
  107. text_area.parent().parent().parent().find(".sub_task_comments").html(response)
  108. text_area.val('')
  109. }
  110. })
  111. e.preventDefault();
  112. }
  113. });
  114. $('#hircle_modal').on('hidden', function () {
  115. var task_id = $("#task_id_modal").val()
  116. $.ajax({
  117. url: "/comments",
  118. data: {id: task_id},
  119. type: 'GET',
  120. success: function(response){
  121. $("#task_activities_" + task_id).html(response)
  122. }
  123. })
  124. });
  125. /*$(".accordion" ).accordion({
  126. collapsible: true ,
  127. active: true,
  128. header: ".task-activity"
  129. });*/
  130. $(".accordion .task-activity").click(function(){
  131. var accordion_action = $(this).find(".task-activity-action")
  132. if(accordion_action.text() == '+'){
  133. $(this).next().show();
  134. accordion_action.text('-')
  135. }
  136. else{
  137. if(accordion_action.text() == '-'){
  138. $(this).next().hide();
  139. accordion_action.text('+')
  140. }
  141. }
  142. });
  143. $("li.status").click(function(){
  144. var status = $(this);
  145. window.location = "/?status_id=" + status.attr('status_id')
  146. });
  147. $('.span9').delegate('.task-title', 'dblclick', function() {
  148. var task_modal = $("#hircle_task_modal").modal('show');
  149. var task_id = $(this).find(".add-sub-task").attr('task_id');
  150. $.ajax({
  151. url: "/tasks/" + task_id,
  152. type: 'GET',
  153. success: function(response){
  154. task_modal.html(response);
  155. $(".people").droppable({
  156. accept: '.member',
  157. drop: function(event, ui) {
  158. var sub_task_id = $(this).attr("sub_task_id")
  159. var user_id = $(ui.draggable).attr('user_id')
  160. var new_member = $(ui.draggable).clone();
  161. var alreadyMemberAdded = false;
  162. new_member.removeClass('member').addClass('new_member')
  163. $(this).find(".new_member").each(function(index,item){
  164. item = $(item)
  165. if(item.attr('user_id') == user_id){
  166. alreadyMemberAdded = true;
  167. return ;
  168. }
  169. });
  170. if(!alreadyMemberAdded){
  171. $(this).append(new_member);
  172. new_member.draggable();
  173. $.ajax({
  174. url: "/sub_tasks/"+sub_task_id+"/add_member?user_id=" + user_id,
  175. type :'POST',
  176. success: function(response){
  177. }
  178. })
  179. }
  180. }
  181. });
  182. $(".member").draggable({
  183. helper: 'clone'
  184. });
  185. $(".task_modal_content").droppable({
  186. accept: '.new_member',
  187. drop: function(event,ui){
  188. var user_id = $(ui.draggable).attr('user_id')
  189. var sub_task_id = $(ui.draggable).parent().attr('sub_task_id')
  190. $.ajax({
  191. url: "/sub_tasks/"+sub_task_id+"/delete_member?user_id=" + user_id,
  192. type: "DELETE",
  193. success: function(response){
  194. ui.draggable.remove();
  195. }
  196. })
  197. }
  198. })
  199. }
  200. })
  201. });
  202. $("i.clock").click(function(){
  203. if($(this).hasClass('icon-play-circle')){
  204. $(this).removeClass('icon-play-circle')
  205. $(this).addClass('icon-stop')
  206. }
  207. else{
  208. $(this).removeClass('icon-stop')
  209. $(this).addClass('icon-play-circle')
  210. }
  211. })
  212. })
  213. function clock()
  214. {
  215. var d=new Date();
  216. ap="am";
  217. h=d.getHours();
  218. m=d.getMinutes();
  219. s=d.getSeconds();
  220. if (h>11) { ap = "pm"; }
  221. if (h>12) { h = h-12; }
  222. if (h==0) { h = 12; }
  223. if (m<10) { m = "0" + m; }
  224. if (s<10) { s = "0" + s; }
  225. document.getElementById('timehere').innerHTML=h + ":" + m + ":" + s + " " + ap;
  226. t=setTimeout('mytime()',500);
  227. }
  228. function buildTask(task_id, response){
  229. var title = response.title;
  230. var task = '<div class="span4 task_'+task_id+'"><div class="task"><div class="task-title"><div class="task-title-text"><span data-type="input" data-attribute="title" data-object="task" data-url="/tasks/'+task_id+'" '+'id="best_in_place_task_'+task_id+'_title" class="best_in_place">'+title+'</span></div><div class="task-options"><div class="btn-group"><a href="javascript: void(0)" data-toggle="dropdown" class="btn dropdown-toggle"><span class="caret"></span></a><ul class="dropdown-menu"><li task_id="'+task_id+'" class="add-sub-task"><a href="javascript: void(0)"><i class="icon-plus-sign"></i>New Sub Task</a></li><li class="delete-task" task_id="'+task_id+'"><a href="javascript: void(0)"><i class="icon-trash"></i>Delete</a></li><li class="copy-task" task_id="'+task_id+'"><a href="javascript: void(0)"><i class="icon-share"></i>Copy</a></li></ul></div></div><div style="clear: both;"></div><div class="task-date"><input type="text" value="Jun 13" size="10" class="datepicker"></div></div><div class="row-fluid time_tracking"> <div class="span3"> Start Tracking <br> <i class="clock icon-play-circle"></i>00:00:00 </div> <div class="span3"> Today <br> 99:99h </div> <div class="span3"> Yesterday <br> 88:88h </div> <div class="span3"> total <br> 45:78h </div> </div><div class="sub-tasks"></div><div id="task_activities_'+task_id+'"><div class="task-activity"><div class="task-activity-text">0 activites</div><div class="task-activity-action">-</div></div></div></div></div>';
  231. var sub_tasks = ""
  232. return task;
  233. }
  234. function buildSubTask(sub_task_id, sub_task_title, sub_task_color_code){
  235. var sub_task = '<div class="sub-task-panel"><div class="sub-task"><div class="priority" style="color: '+sub_task_color_code+'">◥</div><div class="sub-task-title"><span data-type="input" data-attribute="title" data-object="sub_task" data-url="/sub_tasks/'+sub_task_id+'" '+'id="best_in_place_task_'+sub_task_id+'_title" class="best_in_place">'+ sub_task_title+'</span></div><div class="sub-task-date">26 May</div></div></div>';
  236. return sub_task
  237. }
  238. function addSubTask(new_sub_task){
  239. var sub_task_id = 0;
  240. var sub_task = '';
  241. var task_id = new_sub_task.attr('task_id')
  242. $.ajax({
  243. url: "/sub_tasks",
  244. type: 'POST',
  245. dataType: 'JSON',
  246. data: {sub_task: {title: "Enter New Sub task", task_id: task_id}},
  247. success: function(response){
  248. if(eval(response.length) > 0){
  249. alert(response)
  250. }
  251. else
  252. {
  253. sub_task_id = eval(response).id;
  254. sub_task = '<div class="sub-task-panel"><div class="sub-task"><div class="priority" style="color: '+eval(response).priority.color_code+'">◥</div><div class="sub-task-title"><span data-type="input" data-attribute="title" data-object="sub_task" data-url="/sub_tasks/'+sub_task_id+'" '+'id="best_in_place_task_'+sub_task_id+'_title" class="best_in_place">Enter New Sub Task</span></div><div class="sub-task-date">26 May</div></div></div>';
  255. $(".task_" + task_id).find('.sub-tasks').append(sub_task)
  256. }
  257. }
  258. })
  259. }
  260. function deleteTask(task){
  261. if(confirm("Are You Sure?")){
  262. var taskId = task.attr('task_id')
  263. $.ajax({
  264. url: "/tasks/" + taskId,
  265. type: "DELETE",
  266. dataType: 'JSON',
  267. data: {id: taskId},
  268. success: function(){
  269. $(".task_" + taskId).remove()
  270. }
  271. })
  272. }
  273. }
  274. function copyTask(task){
  275. var taskId = task.attr('task_id')
  276. var task = $(".task_" + taskId)
  277. $.ajax({
  278. url: "tasks/new",
  279. type: 'GET',
  280. dataType: 'JSON',
  281. data: {id: taskId},
  282. success: function(response){
  283. var task = buildTask(response.id,response)
  284. task = $(task)
  285. var sub_tasks = ""
  286. $.each(response.sub_tasks, function(index, sub_task){
  287. sub_tasks += buildSubTask(sub_task.id,sub_task.title, sub_task.priority.color_code)
  288. })
  289. task.find('.sub-tasks').html(sub_tasks)
  290. $(".task-row").append(task)
  291. }
  292. })
  293. }