2 <div id="quick_edit_input_dialogs"></div>
3 <div id="cursor" style="border: 1px dotted gray; position: absolute; display: none; opacity: 0.5; z-index:99;"> </div>
7 function quick_edit_log(message){
8 if(typeof console !== "undefined" && typeof console.log !=="undefined")
9 console.log("quick_edit: "+message);
13 var offsetY = /[?&]offsetY=(\d+).*/g.exec(location.href);
15 window.scrollTo(0, offsetY[1]);
18 quick_edit_drag_and_drop_init();
20 function quick_edit_drag_and_drop_init() {
21 if ($("body").hasClass("controller-issues action-index")) {
22 $("tr.issue").draggable({
24 start: function (event, ui) {
25 drag_element = $(this);
26 if (!drag_element.hasClass("context-menu-selection")) {
27 drag_element.addClass("context-menu-selection");
31 "top": drag_element.css("top"),
32 "left": $("#content").css("padding-left"),
33 "width": drag_element.css("width"),
34 "height": drag_element.css("height"),
35 "background-color": drag_element.css("background-color"),
38 stop: function (event, ui) { $("#cursor").css({"display": "none"}); },
39 drag: function (event, ui) { $("#cursor").css({"top": event.pageY}); }
42 $("tr.issue").droppable({
43 drop: function (event, ui) {
44 var update_ids = quick_edit_get_selections();
45 var new_parent_id = quick_edit_get_issue_id_from_element(this);
46 if (!new_parent_id) return;
49 url: '<%= quick_edit_issues_edit_path() %>?' + update_ids.join("&") + '&target_specifier=issue[parent_issue_id]&default_value='+new_parent_id,
51 success : function (html) { $("#quick_edit_dialogs").html(html); }
58 function quick_edit_drag_and_drop_enable(){
59 $("tr.issue.ui-draggable").each( function () {
61 issue.draggable("enable");
63 $("tr.issue.ui-droppable").each( function () {
65 issue.droppable("enable");
68 quick_edit_log("issue d&d enabled.");
71 function quick_edit_drag_and_drop_disable(){
72 $("tr.issue.ui-draggable").each( function () {
74 issue.draggable("disable");
76 $("tr.issue.ui-droppable").each( function () {
78 issue.droppable("disable");
81 quick_edit_log("issue d&d disabled.");
84 function quick_edit_get_selections() {
86 $(".context-menu-selection").each(function (index,element) {
87 var id = quick_edit_get_issue_id_from_element(element);
88 ids.push("ids[]="+id);
93 function quick_edit_get_issue_id_from_element(element) {
94 var id = $(element).attr("id");
95 var m = /issue-(.*)/.exec(id);
99 function quick_edit_input_dialog_switch_page() {
100 var dialog = $("#quick_edit_input_dialog");
102 var switchers = dialog.find(".page-switcher");
105 var pages = dialog.find(".page");
108 if (dialog.find("#replace_switcher:hidden").length == 1) {
109 dialog.dialog("option", "buttons",
110 [ { text: "Preview", click: quick_edit_input_dialog_preview_replace},
111 { text: "Submit", click: quick_edit_input_dialog_replace_submit},
112 { text: "Cancel", click: quick_edit_input_dialog_cancel}]);
115 dialog.dialog("option", "buttons",
116 [ { text: "Submit", click: quick_edit_input_dialog_edit_submit},
117 { text: "Cancel", click: quick_edit_input_dialog_cancel}]);
121 function quick_edit_input_dialog_preview_replace() {
122 var replace_page = $("#quick_edit_input_dialog #replace-page");
124 var target_specifier = replace_page.find("#target_specifier").val();
125 var find = replace_page.find("#find").val();
126 var replace = replace_page.find("#replace").val();
128 replace_page.find("#ids").each( function () { ids.push($(this).val()); });
129 var url="<%= quick_edit_issues_replace_preview_path() %>";
132 alert('<%=l(:text_is_required)%>');
138 data: {ids: ids, target_specifier: target_specifier, find: find, replace: replace},
139 dataType: 'script'});
142 function quick_edit_input_dialog_replace_submit() {
143 var replace_page = $("#quick_edit_input_dialog #replace-page");
145 var find = replace_page.find("#find").val();
147 alert('<%=l(:text_is_required)%>');
151 replace_page.find("form").submit();
154 function quick_edit_input_dialog_open(){
155 quick_edit_drag_and_drop_disable();
158 function quick_edit_input_dialog_close(){
159 quick_edit_drag_and_drop_enable();
160 $("#quick_edit_input_dialog").remove();
163 function quick_edit_input_dialog_cancel(){
164 $("#quick_edit_input_dialog").dialog("close");
167 function quick_edit_clear(){
170 function quick_edit_input_dialog_edit_submit(){
171 var edit_page = $("#quick_edit_input_dialog #edit-page");
173 var target_specifier = edit_page.find("#target_specifier").val();
174 var new_value_element = edit_page.find("#new_value");
175 var clr_value_element = edit_page.find("#clear");
177 if (edit_page.find("#clear:checked").length > 0){
178 new_value_element.attr("name", "_quick_edit_tmp");
179 clr_value_element.attr("name", target_specifier);
182 new_value_element.attr("name", target_specifier);
183 clr_value_element.attr("name", "_quick_edit_tmp");
185 var new_value = edit_page.find("#new_value").val();
186 if(new_value === null) return;
188 var pattern = new RegExp(edit_page.find("#validation_pattern").val());
190 if(new_value == "") {
191 alert('<%=l(:text_is_required)%>');
196 if(pattern && !pattern.test(new_value)){
197 alert('<%=l(:text_invalid_format)%>');
204 edit_page.find("#ids").each(function (index,element) {
205 issue_ids.push($(this).val());
207 if(issue_ids.length>1){
208 if(!confirm('<%=l(:text_multiple_update_confirm)%>')) return;
211 var offsetY = (window.pageYOffset !== undefined) ? window.pageYOffset : (document.documentElement || document.body.parentNode || document.body).scrollTop;
212 var back_url = edit_page.find("#back_url").val();
213 if (back_url.indexOf("?") == -1) {
214 back_url = back_url + "?offsetY=" + offsetY;
216 back_url = back_url + "&offsetY=" + offsetY;
218 edit_page.find("#back_url").val(back_url);
220 edit_page.find("form").submit();
223 function quick_edit_show_new_relation_dialog(first_issue_id, second_issue_id, back_url){
224 $("#quick_edit_new_relation_dialog > form > #issue_id").val(first_issue_id);
225 $("#quick_edit_new_relation_dialog > form > #relation_issue_to_id").val(second_issue_id);
226 $("#quick_edit_new_relation_dialog > form > #back_url").val(back_url);
227 $("#quick_edit_new_relation_dialog").dialog({
229 closeOnEscape: false,
232 open: quick_edit_new_relation_dialog_open,
233 close: quick_edit_new_relation_dialog_close
236 quick_edit_log("new_relation dialog open.");
239 function quick_edit_new_relation_dialog_cancel(){
240 $('#quick_edit_new_relation_dialog').dialog("close");
243 function quick_edit_new_relation_dialog_open(){
244 quick_edit_drag_and_drop_disable();
247 function quick_edit_new_relation_dialog_close(){
248 quick_edit_drag_and_drop_enable();