1 <script type="text/javascript" src="{{ base_path() }}/{{ constant('GALETTE_THEME') }}ui/semantic.min.js"></script>
2 <script type="text/javascript" src="{{ base_path() }}/assets/js/galette-main.bundle.min.js"></script>
3 {% if login.isDarkModeEnabled() %}
4 <script type="text/javascript" src="{{ base_path() }}/assets/js/darkreader.min.js"></script>
7 <script type="text/javascript">
8 function csrfSafeMethod(method) {
9 // these HTTP methods do not require CSRF protection
10 return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
14 function _darkMode() {
15 var _dark_enabled = Cookies.get('galette_dark_mode');
16 var _cookie_value = 1;
17 if (_dark_enabled && _dark_enabled == 1) {
18 var _cookie_value = 0;
19 {% set darkcssfile = constant('GALETTE_CACHE_DIR') ~ "dark.css" %}
20 {% if not file_exists(darkcssfile) %}
21 function writeDarkTheme() {
27 return DarkReader.exportGeneratedCSS();
29 writeDarkTheme().then(function(cssdata) {
31 url: '{{ url_for("writeDarkCSS") }}',
33 data: cssdata.replaceAll('themes/galette/assets', 'themes/default/ui/themes/galette/assets'),
34 success: function(res) {
35 console.log('Dark theme CSS stored');
38 console.log('Error storing dark theme CSS');
44 $('.darkmode').on('click', function(e) {
54 window.location.reload();
56 if (window.matchMedia) {
57 window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', event => {
69 window.location.reload();
75 $.ajaxPrefilter(function(options, originalOptions, jqXHR){
76 if (options.type.toLowerCase() === "post") {
77 // initialize `data` to empty string if it does not exist
78 options.data = options.data || "";
80 // add leading ampersand if `data` is non-empty
81 options.data += options.data?"&":"";
84 options.data += encodeURIComponent("{{ csrf_name_key }}") + "=" + encodeURIComponent("{{ csrf_name }}") + "&" + encodeURIComponent("{{ csrf_value_key }}") + "=" + encodeURIComponent("{{ csrf_value }}")
88 {% if login.isLogged() %}
89 // Display user menu in compact mode
90 var _compactMenu = function() {
91 var _hidden = Cookies.get('galette_compact_menu');
92 var _menu = document.getElementById('sidemenu');
93 var _content = _menu.nextElementSibling;
94 var _trigger = document.getElementById('compactmenu');
95 if (_hidden & _hidden == 1) {
96 _trigger.checked = true;
97 _menu.classList.add('compact_menu');
98 _content.classList.add('extended');
100 _trigger.addEventListener('change', function() {
101 var _checked = $(this).is(':checked');
103 'galette_compact_menu',
110 window.location.reload();
117 {% if autocomplete %}
118 $('#ville_adh_field, #lieu_naissance_field').search({
120 url: '{{ url_for('suggestTown', {'term': '{query}'}) }}',
122 onFailure: function(response, element, xhr) {
123 console.log(response);
125 onError: function(errorMessage, element, xhr) {
126 {% include "elements/js/modal.js.twig" with {
127 modal_title_twig: _T("An error occurred :(")|e("js"),
128 modal_content: "errorMessage",
130 modal_content_class: "scrolling",
131 modal_deny_only: true,
132 modal_cancel_text: _T("Close")|e("js"),
133 modal_classname: "redalert",
140 $('#pays_adh_field').search({
142 url: '{{ url_for('suggestCountry', {'term': '{query}'}) }}',
144 onFailure: function(response, element, xhr) {
145 console.log(response);
147 onError: function(errorMessage, element, xhr) {
148 {% include "elements/js/modal.js.twig" with {
149 modal_title_twig: _T("An error occurred :(")|e("js"),
150 modal_content: "errorMessage",
152 modal_content_class: "scrolling",
153 modal_deny_only: true,
154 modal_cancel_text: _T("Close")|e("js"),
155 modal_classname: "redalert",
164 {% include "elements/js/calendar.js.twig" %}
166 {% if renew_telemetry is defined %}
167 {% include "modals/telemetry.html.twig" with {part: "jsdialog"} %}
170 {% include "elements/js/messages.js.twig" %}
174 {% if login.isLogged() %}
175 <script type="module" src="{{ base_path() }}/assets/js/sortable.min.js"></script>
177 {% if require_charts %}
178 <script type="module" src="{{ base_path() }}/assets/js/chartjs.min.js"></script>
180 {% if require_mass %}
181 <script type="text/javascript" src="{{ base_path() }}/assets/js/masschanges.min.js"></script>
184 <script type="text/javascript" src="{{ base_path() }}/assets/js/codemirror.js"></script>
185 <script type="text/javascript" src="{{ base_path() }}/assets/js/xml.js"></script>
186 <script type="text/javascript" src="{{ base_path() }}/assets/js/formatting.js"></script>
187 <script type="text/javascript" src="{{ base_path() }}/assets/js/summernote.min.js"></script>
188 <script type="text/javascript" src="{{ base_path() }}/assets/js/lang/summernote-{{ i18n.getID()|replace({'_': '-'}) }}.min.js"></script>
189 <script type="text/javascript">
190 function activateHtmlEditor(elt, basic) {
191 if (basic === true) {
193 ['font', ['bold', 'italic', 'strikethrough', 'clear']],
194 ['para', ['ul', 'ol']],
195 ['insert', ['link']],
196 ['view', ['codeview']]
200 ['style', ['style']],
201 ['font', ['bold', 'italic', 'strikethrough', 'clear']],
202 ['para', ['ul', 'ol', 'paragraph']],
203 ['insert', ['link', 'picture']],
204 ['view', ['codeview']]
208 lang: '{{ i18n.getID()|replace({'_': '-'}) }}',
209 disableDragAndDrop: true,
213 'p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6'
216 onImageUpload: function (data) {
217 //prevent image copypaste
222 elt.summernote('focus');
225 function deactivateHtmlEditor(elt) {
226 elt.summernote('destroy');
229 function activateMailingEditor() {
230 if(!$('#mailing_html').attr('checked')){
231 $('#mailing_html').attr('checked', true);
234 $('input#html_editor_active').attr('value', '1');
235 $('#activate_editor').remove();
236 $('#summernote_toggler').html('<a class="ui blue tertiary button" href="javascript:deactivateMailingEditor();" id="deactivate_editor">{{ _T("Deactivate HTML editor") }}</a>');
238 activateHtmlEditor($('#mailing_corps'));
240 function deactivateMailingEditor() {
241 deactivateHtmlEditor($('#mailing_corps'));
242 $('#deactivate_editor').remove();
243 $('#summernote_toggler').html('<a class="ui blue tertiary button" href="javascript:activateMailingEditor();" id="activate_editor">{{ _T("Activate HTML editor") }}</a>');
245 {% if html_editor_active is defined and html_editor_active == 1 %}
247 activateMailingEditor();
252 {% set localjstracking = constant('_CURRENT_THEME_PATH') ~ "tracking.js" %}
253 {% if file_exists(localjstracking) %}
254 <script type="text/javascript" src="{{ base_path() }}/{{ constant('GALETTE_THEME') }}tracking.js"></script>