PageSourceSearch

https://service.georgsmarienhuette.de/o/vr-portlet/vr/js/vr.js?781ede144575eb34725db0ebc5a1069289fb766b

js georgsmarienhuette.de collected 2026-10-02 10:32:09 UTC 12,593 bytes, 320 lines download raw bytes

1/**
2 * Encapsulates methods for the application in order to
3 * avoid namespace pollution.
4 *
5 * @constructor
6 */
7var VrApplication = function () {
8
9    this.initFileInput = function () {
10        //Bootstrap4 fileupload
11        bsCustomFileInput.init();
12    };
13
14    this.initSpinner = function () {
15        $(".vr-app input.spinner").inputSpinner();
16        // Remove the class spinner when it exists
17        // Call toggle only with fields with the class spinner, so toggle can only remove the class
18        $(".vr-app input.spinner").toggleClass("spinner");
19    };
20
21    this.initHugeRte = function () {
22        hugerte.remove('.vr-app textarea.hugerte-enabled-opt-in:not([readonly])');
23        hugerte.remove('.vr-app textarea.hugerte-enabled-opt-in-basic:not([readonly])');
24
25        var fallbackAriaText = 'Textinput';
26
27        var getTextareaLabel = function (editor) {
28
29            var textareaElement = editor && editor.targetElm ? editor.targetElm : null;
30
31            if (textareaElement && textareaElement.id) {
32                var labelElement = $('label[for="' + textareaElement.id + '"]');
33                if (labelElement.length > 0) {
34                    var labelText = $.trim(labelElement.first().text());
35                    if (labelText.length > 0) {
36                        return labelText;
37                    }
38                }
39            }
40            return fallbackAriaText;
41        };
42
43        var applyHugeRteAccessibilityAttributes = function (editor) {
44
45            var iframeElement = document.getElementById(editor.id + '_ifr');
46            var editorBody = editor && editor.getBody ? editor.getBody() : null;
47
48            var label = getTextareaLabel(editor);
49            var pressAlt0FoprHelp = editorBody.getAttribute('aria-label');
50
51            label = pressAlt0FoprHelp ? label + '. ' + pressAlt0FoprHelp : label;
52
53            if (iframeElement) {
54                iframeElement.setAttribute('title', label); // for Firefox
55            }
56
57            if (editorBody) {
58                editorBody.setAttribute('aria-label', label); // for Chrome
59                editorBody.setAttribute('role', 'textbox');
60                editorBody.setAttribute('aria-required', 'true');
61            }
62        };
63
64        var setupHugeRteEditor = function (editor) {
65            editor.on('change', function () {
66                hugerte.triggerSave();
67            });
68            editor.on('init', function () {
69                applyHugeRteAccessibilityAttributes(editor);
70            });
71        };
72
73        var hugeRteSettings = {
74            selector: '.vr-app textarea.hugerte-enabled-opt-in:not([readonly])',
75            content_style: 'body{font-size: 14px !important;line-height: 20px; font-family: "Helvetica Neue",Helvetica,Arial,sans-serif !important;}',
76            language: 'de',
77            language_url: '/o/vr-portlet/portlet/common/hugerte/i18n/de.js',
78            plugins: [
79                'advlist','autoresize','autolink','lists','link','charmap','preview',
80                'searchreplace','wordcount','visualblocks','visualchars','fullscreen',
81                'directionality','image', 'help'
82            ],
83            menubar: 'insert format',
84            toolbar: 'undo redo | styles | bold italic underline strikethrough | alignleft aligncenter alignright al
84ignjustify | bullist numlist outdent indent | link | language | help',
85            content_langs: [
86                { title: 'englisch', code: 'en' }
87            ],
88            statusbar: false,
89            autoresize_bottom_margin: 0,
90            entity_encoding: 'raw',
91            help_accessibility: true,
92            remove_script_host: false,
93            relative_urls: false,
94            setup: setupHugeRteEditor,
95            promotion: false,
96            iframe_attrs: {
97                role: 'textbox',
98                'aria-multiline': 'true',
99            },
100        };
101        var hugeRteSettingsBasic = {
102            selector: '.vr-app textarea.hugerte-enabled-opt-in-basic:not([readonly])',
103            content_style: 'body{font-size: 14px !important;line-height: 20px; font-family: "Helvetica Neue",Helvetica,Arial,sans-serif !important;}',
104            language: 'de',
105            language_url: '/o/vr-portlet/portlet/common/hugerte/i18n/de.js',
106            plugins: [
107                'advlist','autoresize','autolink','lists','link','charmap','preview',
108                'searchreplace','wordcount','visualblocks','visualchars','fullscreen',
109                'directionality','image', 'help'
110            ],
111            menubar: '',
112            toolbar: 'undo redo | bold italic | bullist numlist | link | blockquote | superscript subscript code | help',
113            statusbar: false,
114            autoresize_bottom_margin: 0,
115            help_accessibility: true,
116            entity_encoding: 'raw',
117            remove_script_host: false,
118            relative_urls: false,
119            setup: setupHugeRteEditor,
120            promotion: false,
121            iframe_attrs: {
122                role: 'textbox',
123                'aria-multiline': 'true',
124            }
125        }
126        if ($('.vr-app textarea.hugerte-enabled-opt-in-basic:not([readonly])').length > 0) {
127            hugerte.init(hugeRteSettingsBasic);
128        }
129        if ($('.vr-app textarea.hugerte-enabled-opt-in:not([readonly])').length > 0 && $('#hugeRteConfigLink').length > 0) {
130            $.ajax({
131                method: "GET",
132                dataType: "json",
133                url: $('#hugeRteConfigLink').val(),
134                success: function (data, textStatus, jqXHR) {
135                    if (data.customNewlineEnabled === true) hugeRteSettings.newline_behavior = "invert";
136                    if (data.tableEnabled === true) {
137                        hugeRteSettings.plugins = hugeRteSettings.plugins + " table";
138                        hugeRteSettings.toolbar = hugeRteSettings.toolbar + " table |";
139                    }
140                    if (data.codeEnabled === true) {
141                        hugeRteSettings.plugins = hugeRteSettings.plugins + " code";
142                        hugeRteSettings.toolbar = hugeRteSettings.toolbar + " code |";
143                    }
144                    for (var prop in data.languages) {
145                        if (Object.prototype.hasOwnProperty.call(data.languages, prop)) {
146                            hugeRteSettings.content_langs.push({title: data.languages[prop], code: prop});
147                        }
148                    }
149                    hugerte.init(hugeRteSettings);
150                },
151                error: function (jqXHR, textStatus, errorThrown) {
152                    hugerte.init(hugeRteSettings);
153                }
154            });
155        }
156    };
157
158    this.initHugeRteDisabled = function () {
159        hugerte.remove('.vr-app textarea.hugerte-enabled-opt-in[readonly]');
160        var hugeRteSettings = {
161            selector: '.vr-app textarea.hugerte-enabled-opt-in[readonly]',
162            content_style: 'body{font-size: 14px !important;line-height: 20px; font-family: "Helvetica Neue",Helvetica,Arial,sans-serif !important;}',
163            language: 'de',
164            language_url: '/o/vr-portlet/portlet/common/hugerte/i18n/de.js',
165            plugins: [],
166            menubar: '',
167            toolbar: '',
168            statusbar: false,
169            autoresize_bottom_margin: 0,
170            entity_encoding: 'raw',
171            remove_script_host: false,
172            relative_urls: false,
173            readonly: true,
174            promotion: false,
175        };
176
177        hugerte.init(hugeRteSettings);
178    };
179
180    this.validateHugeRteRequired = function () {
181        $('.vr-app textarea.hugerte-enabled-opt-in[required], .vr-app textarea.hugerte-enabled-opt-in-basic[required]').each(function() {
182            var form = $(this).closest('form');
183            $('button[type="submit"]', form).on('click', function() {
184                form.addClass('was-validated');
185            });
186        })
187    };
188
189    this.initRequiredFieldsHint = function () {
190        var requiredFieldsHint = window.vrRequiredFieldsHint;
191
192        if (!requiredFieldsHint) {
193            return;
194        }
195
196        $('.portlet form').each(function (index) {
197            var form = $(this);
198            var formDescription = form.find('#form-description').first();
199
200            if (form.find('.required .control-label').length === 0) {
201                return;
202            }
203
204            if (formDescription.length > 0) {
205                if (formDescription.find('.required-fields-hint').length > 0 || $.trim(formDescription.text()).indexOf(requiredFieldsHint) >= 0) {
206                    return;
207                }
208
209                formDescription.append($('<span/>', {
210                    'class': 'required-fields-hint d-block',
211                    text: requiredFieldsHint
212                }));
213
214                return;
215            }
216
217            var formDescriptionId = 'form-description-' + (form.attr('id') || index);
218            var requiredFieldsHintElement = $('<p/>', {
219                id: formDescriptionId,
220                'class': 'form-text required-fields-hint mb-3',
221                text: requiredFieldsHint
222            });
223            var firstFormElement = form.find('.sheet-fieldset, .fieldset, .form-row, .form-group').first();
224            var ariaDescribedBy = $.trim(form.attr('aria-describedby') || '');
225
226            form.attr('aria-describedby', $.trim((ariaDescribedBy.replace(/\bform-description\b/g, '') + ' ' + formDescriptionId).replace(/\s+/g, ' ')));
227
228            if (firstFormElement.length > 0) {
229                requiredFieldsHintElement.insertBefore(firstFormElement);
230            } else {
231                form.prepend(requiredFieldsHintElement);
232            }
233        });
234    };
235
236    this.preventDoubleSubmit = function () {
237
238        $(".double-submit-safe").on('submit', function(e) {
239            $(this).find(':button[type=submit]').on('click', function (e) {
240                e.preventDefault();
241            });
242        });
243    };
244
245    this.initLanguageSwitch = function () {
246
247        $("#language-select").change(function() {
248            window.location = $(this).find(":selected").val();
249        });
250    };
251
252    this.initEnabledIfChecked = function () {
253        $('[data-enabled-if-checked]:not([data-enabled-if-checked=""])').each(function (index) {
254            var $dependentElement = $(this);
255            var $controllingElement = $($dependentElement.attr('data-enabled-if-checked'));
256
257            if ($controllingElement.length === 0) {
258                return;
259            }
260
261            var updateDependentElement = function () {
262                $dependentElement.prop('disabled', !$controllingElement.is(':checked'));
263            };
264
265            // namespaced-change-event: Der Handler reagiert weiterhin
266            // auf jedes native 'change'-Event, kann aber gezielt wieder abgemeldet werden, ohne fremde
267            // 'change'-Handler zu treffen. Ein eigener Namespace je abhängigem Element sorgt dafür, dass
268            // mehrere abhängige Elemente an derselben steuernden Checkbox sich nicht gegenseitig abmelden.
269            var eventName = 'change.enabledIfChecked-' + ($dependentElement.attr('id') || index);
270
271            $controllingElement.off(eventName).on(eventName, updateDependentElement);
272            updateDependentElement();
273        });
274    };
275};
276
277$(window).on("load",function () {
278
279    /**
280     * Make application functions available under the global
281     * variable 'vrApp'.
282     *
283     * @type {VrApplication}
284     */
285    var vrAppReady = new VrApplication();
286
287    vrAppReady.initFileInput();
288    vrAppReady.initSpinner();
289    vrAppReady.initHugeRte();
290    vrAppReady.initHugeRteDisabled();
291    vrAppReady.validateHugeRteRequired();
292    vrAppReady.initRequiredFieldsHint();
293    vrAppReady.preventDoubleSubmit();
294    vrAppReady.initLanguageSwitch();
295    vrAppReady.initEnabledIfChecked();
296});
297
298Liferay.on('endNavigate', function (event) {
299
300    /**
301     * Make application functions available under the global
302     * variable 'vrApp'.
303     *
304     * @type {VrApplication}
305     */
306    var vrAppEndNavigate = new VrApplication();
307
308    vrAppEndNavigate.initFileInput();
309    vrAppEndNavigate.initSpinner();
310    vrAppEndNavigate.initHugeRte();
311    vrAppEndNavigate.initHugeRteDisabled();
312    vrAppEndNavigate.validateHugeRteRequired();
313    vrAppEndNavigate.initRequiredFieldsHint();
314    vrAppEndNavigate.preventDoubleSubmit();
315    vrAppEndNavigate.initLanguageSwitch();
316    vrAppEndNavigate.initEnabledIfChecked();
317});
318
319DataTable.defaults.column.orderSequence = ['asc', 'desc'];
320DataTable.ext.errMode = 'throw';

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.