Skip to content
This repository has been archived by the owner on Jan 23, 2021. It is now read-only.

Fix JS for 0.3-stable #351

Open
wants to merge 3 commits into
base: 0.3-stable
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
201 changes: 103 additions & 98 deletions app/views/issue_templates/_issue_select_form.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -58,105 +58,110 @@
</div>
</div>
<script type="text/javascript">
//<![CDATA[
$(function() {
var templateNS = templateNS || new ISSUE_TEMPLATE();
let pulldown_url = '<%= pulldown_url %>';
let tracker = '<%= @issue.tracker.id %>';
templateNS.set_pulldown(tracker, pulldown_url);

$('#template_area').insertBefore($('#issue_subject').parent());

$("#issue_template").change(function(){
let is_triggered_by = '<%= is_triggered_by %>';
let load_url = '<%= url_for(controller: 'issue_templates', action: 'load',
project_id: project_id, is_triggered_by: is_triggered_by) %>';
let should_replaced = '<%= setting.should_replaced %>';
let confirmation = '<%=h l(:label_confirmation) %>';
let general_text_Yes = '<%=h l(:general_text_Yes) %>';
let general_text_No = '<%=h l(:general_text_No) %>';
let confirm_message = undefined;
if (should_replaced) {
confirm_message = '<%=h l(:label_template_applied, default: "Issue template is applied. You can revert with click 'Revert' link.") %>';
}
//<![CDATA[
$(function() {

function confirmMessage(shouldReplaced) {
let confirmMessage = undefined
if (shouldReplaced) {
confirmMessage = '<%=h l(:label_template_applied, default: "Issue template is applied. You can revert with click 'Revert' link.") %>'
}
return confirmMessage
}

var templateConfig = {
pulldownUrl: '<%= pulldown_url %>',
isTriggeredBy: '<%= is_triggered_by %>',
loadUrl: '<%= url_for(controller: 'issue_templates', action: 'load', project_id: project_id, is_triggered_by: is_triggered_by) %>',
shouldReplaced: '<%= setting.should_replaced %>',
confirmation: '<%=h l(:label_confirmation) %>',
generalTextYes: '<%=h l(:general_text_Yes) %>',
generalTextNo : '<%=h l(:general_text_No) %>',
confirmMessage: confirmMessage('<%= setting.should_replaced %>')
}

var templateNS = templateNS || new ISSUE_TEMPLATE(templateConfig);
templateNS.setPulldown('<%= @issue.tracker.id %>');

$('#issue_template').on('change', function() {
templateNS.changeTemplatePlace();
templateNS.loadTemplate();
})

// Show dialog
$('#link_template_dialog').click(function() {
let templateListUrl = '<%= url_for(controller: 'issue_templates',
action:'list_templates', project_id: project_id, issue_tracker_id: @issue.tracker.id) %>';
let templateListTitle = '<%= "#{l(:issue_template)}: #{@issue.tracker.name}".html_safe %>';

templateNS.openDialog(templateListUrl, templateListTitle);
});

templateNS.load_template(load_url, confirm_message, should_replaced, false, confirmation, general_text_Yes, general_text_No);
});

// Show dialog
$('#link_template_dialog').click(function() {
let template_list_url = '<%= url_for(controller: 'issue_templates',
action:'list_templates', project_id: project_id, issue_tracker_id: @issue.tracker.id) %>';
let template_list_title = '<%= "#{l(:issue_template)}: #{@issue.tracker.name}".html_safe %>';

templateNS.openDialog(template_list_url, template_list_title);
});

// revert template
$('#revert_template').click(function() {
templateNS.revertAppliedTemplate();
});

$('#erase_template').click(function() {
templateNS.eraseSubjectAndDescription();
});

// Hide overwrite confirmation dialog using cookie.
$('#issue_template_confirm_to_replace_hide_dialog').click(function () {
if ($(this).is(':checked')) {
// NOTE: Use document.cookie because Redmine itself does not use jquery.cookie.js.
document.cookie = 'issue_template_confirm_to_replace_hide_dialog=1';
} else {
document.cookie = 'issue_template_confirm_to_replace_hide_dialog=0';
}
});

$("input[name='template_search_filter']").on("keydown keyup",function(){
let cols = $('.template_data');
let searchWord = $(this).val();
reg = new RegExp(searchWord,'gi');
cols.each(function(i,val){
let col_name = $(val).children('td').text();
if (col_name.match(reg)) {
$(val).show();
} else {
$(val).hide();
}
})
});

// NOTE: Workaround for GitHub issue: 193
// Start observing the target node for configured mutations
try {
if (CKEDITOR.instances) {
// Create an observer instance linked to the callback function
let observer = new MutationObserver(callback);

// Select the node that will be observed for mutations
let targetNode = document.querySelector('#issue_description_and_toolbar');

// Options for the observer (which mutations to observe)
let config = {attributes: true, childList: true, characterData: true, subtree: true};

// Callback function to execute when mutations are observed
let callback = function (mutationsList) {
for (let i = 0, len = mutationsList.length; i < len; ++i) {
let mutation = mutationsList[i];
if (mutation.type === 'attributes') {
console.log('The ' + mutation.attributeName + ' attribute was modified.');
if (mutation.target.className == 'cke_contents cke_reset') {
// Wait for a while til CKE Editor's textarea is rendered, and after that
// apply template text.
setTimeout('templateNS.replaceCkeContent()', 200);
observer.disconnect();
}
}
}
};
observer.observe(targetNode, config);
}
} catch (e) {
// do nothing.
// revert template
$('#revert_template').click(function() {
templateNS.revertAppliedTemplate();
});

$('#erase_template').click(function() {
templateNS.eraseSubjectAndDescription();
});

// Hide overwrite confirmation dialog using cookie.
$('#issue_template_confirm_to_replace_hide_dialog').click(function () {
if ($(this).is(':checked')) {
// NOTE: Use document.cookie because Redmine itself does not use jquery.cookie.js.
document.cookie = 'issue_template_confirm_to_replace_hide_dialog=1';
} else {
document.cookie = 'issue_template_confirm_to_replace_hide_dialog=0';
}
});

$("input[name='template_search_filter']").on("keydown keyup", function() {
let cols = $('.template_data');
let searchWord = $(this).val();
reg = new RegExp(searchWord,'gi');
cols.each(function(i,val){
let col_name = $(val).children('td').text();
if (col_name.match(reg)) {
$(val).show();
} else {
$(val).hide();
}
})
});

// NOTE: Workaround for GitHub issue: 193
// Start observing the target node for configured mutations
try {
if (CKEDITOR.instances) {
// Create an observer instance linked to the callback function
let observer = new MutationObserver(callback);

// Select the node that will be observed for mutations
let targetNode = document.querySelector('#issue_description_and_toolbar');

// Options for the observer (which mutations to observe)
let config = { attributes: true, childList: true, characterData: true, subtree: true };

// Callback function to execute when mutations are observed
let callback = function (mutationsList) {
for (let i = 0, len = mutationsList.length; i < len; ++i) {
let mutation = mutationsList[i];
if (mutation.type === 'attributes') {
console.log('The ' + mutation.attributeName + ' attribute was modified.');
if (mutation.target.className == 'cke_contents cke_reset') {
// Wait for a while til CKE Editor's textarea is rendered, and after that
// apply template text.
setTimeout('templateNS.replaceCkeContent()', 200);
observer.disconnect();
}
}
}
};
observer.observe(targetNode, config);
}
} catch (e) {
// do nothing.
}
});
</script>
87 changes: 54 additions & 33 deletions app/views/issue_templates/_note_form.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,19 @@

<script type="text/javascript">

var element_id = "<%= element_id %>";
var select_id = "select_" + "<%= element_id %>";
var content = document.querySelectorAll('#' + element_id);
let element_id = "<%= element_id %>";
let select_id = "select_" + "<%= element_id %>";
let content = document.querySelectorAll('#' + element_id);

// Show dialog
let dialog_link = document.getElementById('link_<%= element_id %>_dialog');
let base_template_list_url = '<%= url_for(controller: 'note_templates',
action:'list_templates') %>';

let base_tracker_id = <%= tracker_id %>;
let base_project_id = <%= project_id %>;

let load_note_template_url = '<%= load_note_templates_path %>'

if (content.length == 1) {
if (element_id == 'template_issue_notes') {
Expand All @@ -42,8 +52,8 @@ if (content.length == 1) {
}
}

function setDescription(target, value) {
var element = document.getElementById(target);
function setNoteDescription(target, value) {
let element = document.getElementById(target);
if (element.value.length === 0) {
element.value = value;
} else {
Expand All @@ -61,50 +71,61 @@ function setDescription(target, value) {
}
}

// Show dialog
var dialog_link = document.getElementById('link_<%= element_id %>_dialog');
dialog_link.addEventListener("click",function() {
var template_list_url = '<%= url_for(controller: 'note_templates',
action:'list_templates', project_id: project_id, tracker_id: tracker_id) %>';
var token = document.querySelectorAll('#issue-form input[name="authenticity_token"]')[0];
dialog_link.addEventListener("click", function() {
changeNoteTemplateList(base_template_list_url)
}, false);

var req = new XMLHttpRequest();
function applyNoteTemplate(targetElement) {
let template_id = targetElement.dataset.noteTemplateId
let load_url = targetElement.dataset.noteTemplateLoadUrl
let JSONdata = {
note_template: { note_template_id: template_id }
};
let token = document.querySelectorAll('#issue-form input[name="authenticity_token"]')[0];
let req = new XMLHttpRequest();
req.onreadystatechange = function() {
let container = targetElement.closest('div.overlay');
let target = container.id.replace('template_', '');
target = target.replace('_dialog', '');
if (req.readyState == 4) {
if (req.status == 200) {
var value = req.responseText;
// replace here!
var target = document.querySelectorAll('#<%= element_id %>_dialog .popup .filtered_templates_list')[0];
target.innerHTML = value;
let value = JSON.parse(req.responseText);
setNoteDescription(target, value.note_template.description);
}
}
}
req.open('GET', template_list_url, true);
req.open('POST', load_url, true);
req.setRequestHeader('X-CSRF-Token', token.value);
req.send();
},false);
req.setRequestHeader("Content-Type", "application/json");
req.send(JSON.stringify(JSONdata));
}

function changeNoteTemplateList(base_template_list_url) {
let token = document.querySelectorAll('#issue-form input[name="authenticity_token"]')[0];

function applyNoteTemplate(event, template_id) {
var JSONdata = {
note_template: { note_template_id: template_id }
};
var token = document.querySelectorAll('#issue-form input[name="authenticity_token"]')[0];
var req = new XMLHttpRequest();
let project_id = document.getElementById('issue_project_id').value
let tracker_id = document.getElementById('issue_tracker_id').value
let template_list_url = base_template_list_url
if (tracker_id != undefined && project_id != undefined) {
template_list_url += '?tracker_id=' + tracker_id
template_list_url += '&project_id=' + project_id
} else {
template_list_url += '?tracker_id=' + base_tracker_id + '&project_id=' + base_project_id
}

let req = new XMLHttpRequest();
req.onreadystatechange = function() {
var container = event.closest('div.overlay');
var target = container.id.replace('template_', '');
target = target.replace('_dialog', '');
if (req.readyState == 4) {
if (req.status == 200) {
var value = JSON.parse(req.responseText);
setDescription(target, value.note_template.description);
let value = req.responseText;
// replace here!
let target = document.querySelectorAll('#<%= element_id %>_dialog .popup .filtered_templates_list')[0];
target.innerHTML = value;
}
}
}
req.open('POST', '<%= load_note_templates_path %>', true);
req.open('GET', template_list_url, true);
req.setRequestHeader('X-CSRF-Token', token.value);
req.setRequestHeader("Content-Type", "application/json");
req.send(JSON.stringify(JSONdata));
req.send();
}
</script>
50 changes: 27 additions & 23 deletions app/views/issue_templates/_template_pulldown.html.erb
Original file line number Diff line number Diff line change
@@ -1,33 +1,37 @@
<script type="text/javascript">
var length = $('#issue_template > optgroup > option').length;
if (length < 1) {
$('#template_area').hide();
<% if is_triggered_by.blank? || (is_triggered_by.present? && is_triggered_by == 'issue_tracker_id') %>
if ($('#issue-form.new_issue').length > 0 && <%= should_replaced %> === true) {
// Uncaught ReferenceError: templateNS is not defined
if (typeof templateNS !== 'undefined') {
templateNS.eraseSubjectAndDescription();
}
}
<% end %>
} else {
$('#template_area').show();
var length = $('#issue_template > optgroup > option').length;
if (length < 1) {
$('#template_area').hide();
<% if is_triggered_by.blank? || (is_triggered_by.present? && is_triggered_by == 'issue_tracker_id') %>
if ($('#issue-form.new_issue').length > 0 && <%= should_replaced %> === true) {
// Uncaught ReferenceError: templateNS is not defined
if (typeof templateNS !== 'undefined') {
templateNS.eraseSubjectAndDescription();
}
}
<% end %>
} else {
$('#template_area').show();
}
</script>
<option value="">---</option>
<optgroup label="<%=h @tracker.name %>">
<%= options_for_template_pulldown(grouped_options) %>
</optgroup>
<% if is_triggered_by.blank? || (is_triggered_by.present? && is_triggered_by == 'issue_tracker_id') %>
<script type="text/javascript">
let load_url = '<%= url_for(controller: 'issue_templates', action: 'load', project_id: @project) %>';
let should_replaced = '<%= should_replaced %>';
let confirm_msg = "<%=h escape_javascript((l(:defaulf_template_loaded, tracker: @tracker))) %>";
let confirmation = '<%=h l(:label_confirmation) %>';
let general_text_Yes = '<%=h l(:general_text_Yes) %>';
let general_text_No = '<%=h l(:general_text_No) %>';
<script type="text/javascript">
var templateConfig = {
isTriggeredBy: '<%= is_triggered_by %>',
loadUrl: '<%= url_for(controller: 'issue_templates', action: 'load', project_id: @project) %>',
shouldReplaced: '<%= should_replaced %>',
confirmation: '<%=h l(:label_confirmation) %>',
generalTextYes: '<%=h l(:general_text_Yes) %>',
generalTextNo : '<%=h l(:general_text_No) %>',
};

var templateNS = templateNS || new ISSUE_TEMPLATE();
templateNS.load_template(load_url, confirm_msg, should_replaced, false, confirmation, general_text_Yes, general_text_No);
</script>
var templateNS = templateNS || new ISSUE_TEMPLATE(templateConfig);

templateNS.loadTemplate();
templateNS.changeTemplatePlace();
</script>
<% end %>
Loading