<%#-- copyright OpenProject is an open source project management software. Copyright (C) 2012-2020 the OpenProject GmbH This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 3. OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: Copyright (C) 2006-2017 Jean-Philippe Lang Copyright (C) 2010-2013 the ChiliProject Team This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. See docs/COPYRIGHT.rdoc for more details. ++#%> (function($) { $(function() { $('#settings_session_ttl_enabled').on('change', function(){ $('#settings_session_ttl_container').toggle($(this).is(':checked')); }).trigger('change'); /** Sync SCM vendor select when enabled SCMs are changed */ $('[name="settings[enabled_scm][]"]').change(function() { var wasDisabled = !this.checked, vendor = this.value, select = $('#settings_repositories_automatic_managed_vendor'), option = select.find('option[value="' + vendor + '"]'); // Skip non-manageable SCMs if (option.length === 0) { return; } option.prop('disabled', wasDisabled); if (wasDisabled && option.prop('selected')) { select.val(''); } }); /* Javascript for Settings::TextSettingCell */ let langSelectSwitchData = function(select) { let self = $(select); let id = self.attr("id"); let settingName = id.replace('lang-for-', ''); let newLang = self.val(); let textArea =$(`#settings-${settingName}`) let editor = textArea.siblings('ckeditor-augmented-textarea').data('editor'); return { id: id, settingName: settingName, newLang: newLang, textArea: textArea, editor: editor } }; // Upon focusing: // * store the current value of the editor in the hidden field for that lang. // Upon change: // * get the current value from the hidden field for that lang and set the editor text to that value. // * Set the name of the textarea to reflect the current lang so that the value stored in the hidden field // is overwritten. $(".lang-select-switch") .focus(function() { let data = langSelectSwitchData(this); $(`#${data.id}-${data.newLang}`).val(data.editor.getData()); }) .change(function() { let data = langSelectSwitchData(this); let storedValue = $(`#${data.id}-${data.newLang}`).val(); data.editor.setData(storedValue); data.textArea.attr('name', `settings[${data.settingName}][${data.newLang}]`) }); /* end Javascript for Settings::TextSettingCell */ $('.admin-settings--form').submit(function() { /* Update consent time if consent required */ if ($('#settings_consent_required').is(':checked') && $('#toggle_consent_time').is(':checked')) { $('#settings_consent_time') .val(new Date().toISOString()) .prop('disabled', false); } return true; }); /** Toggle notification settings fields */ $("#email_delivery_method_switch").on("change", function() { delivery_method = $(this).val(); $(".email_delivery_method_settings").hide(); $("#email_delivery_method_" + delivery_method).show(); }).trigger("change"); $('#settings_smtp_authentication').on('change', function() { var isNone = $(this).val() === 'none'; $('#settings_smtp_user_name,#settings_smtp_password') .closest('.form--field') .toggle(!isNone); }); /** Toggle repository checkout fieldsets required when option is disabled */ $('.settings-repositories--checkout-toggle').change(function() { var wasChecked = this.checked, fieldset = $(this).closest('fieldset'); fieldset .find('input,select') .filter(':not([type=checkbox])') .filter(':not([type=hidden])') .removeAttr('required') // Rails 4.0 still seems to use attribute .prop('required', wasChecked); }) /** Toggle highlighted attributes visibility depending on if the highlighting mode 'inline' was selected*/ $('.settings--highlighting-mode select').change(function() { var highlightingMode = $(this).val(); $(".settings--highlighted-attributes").toggle(highlightingMode === "inline") }) /** Initialize hightlighted attributes checkboxes. If none is selected, it means we want them all. So let's * show them all as selected. * On submitting the form, we remove all checkboxes before sending to communicate, we actually want all and not * only the selected.*/ if ($(".settings--highlighted-attributes input[type='checkbox']:checked").length == 0) { $(".settings--highlighted-attributes input[type='checkbox']").prop("checked", true); } $('#tab-content-work_packages form').submit(function() { var availableAttributes = $(".settings--highlighted-attributes input[type='checkbox']"); var selectedAttributes = $(".settings--highlighted-attributes input[type='checkbox']:checked"); if (selectedAttributes.length == availableAttributes.length) { availableAttributes.prop("checked", false); } }) }); }(jQuery));