~kosova/+junk/tuxfamily-twiki

« back to all changes in this revision

Viewing changes to foswiki/pub/System/TinyMCEPlugin/tinymce/jscripts/tiny_mce/plugins/foswikiimage/jscripts/functions_src.js

  • Committer: James Michael DuPont
  • Date: 2009-07-18 19:58:49 UTC
  • Revision ID: jamesmikedupont@gmail.com-20090718195849-vgbmaht2ys791uo2
added foswiki

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* Functions for the foswikiimage plugin popup */
 
2
 
 
3
var preloadImg = null;
 
4
var orgImageWidth, orgImageHeight;
 
5
 
 
6
function preinit() {
 
7
        // Initialize
 
8
        tinyMCE.setWindowArg('mce_windowresize', false);
 
9
 
 
10
        // Import external list url javascript
 
11
        var url = tinyMCE.getParam("external_image_list_url");
 
12
        if (url != null) {
 
13
                // Fix relative
 
14
                if (url.charAt(0) != '/' && url.indexOf('://') == -1)
 
15
                        url = tinyMCE.documentBasePath + "/" + url;
 
16
 
 
17
                document.write('<sc'+'ript language="javascript" type="text/javascript" src="'
 
18
                       + url + '"></sc'+'ript>');
 
19
        }
 
20
}
 
21
 
 
22
function pubURL(url, node, on_save) {
 
23
        return eval("tinyMCEPopup.windowOpener."
 
24
                + tinyMCE.settings['foswikipuburl_callback']
 
25
                + "(url, node, on_save);");
 
26
}
 
27
 
 
28
function getImageSrc(str) {
 
29
        var pos = -1;
 
30
 
 
31
        if (!str)
 
32
                return "";
 
33
 
 
34
        if ((pos = str.indexOf('this.src=')) != -1) {
 
35
                var src = str.substring(pos + 10);
 
36
 
 
37
                src = src.substring(0, src.indexOf('\''));
 
38
 
 
39
                if (tinyMCE.getParam('convert_urls'))
 
40
                        src = pubURL(src, null, true);
 
41
 
 
42
                return src;
 
43
        }
 
44
 
 
45
        return "";
 
46
}
 
47
 
 
48
function init() {
 
49
        tinyMCEPopup.resizeToInnerSize();
 
50
 
 
51
        var formObj = document.forms[0];
 
52
        var inst = tinyMCE.getInstanceById(tinyMCE.getWindowArg('editor_id'));
 
53
        var elm = inst.getFocusElement();
 
54
        var action = "insert";
 
55
        var html = "";
 
56
 
 
57
        // Image list src
 
58
        html = getImageListHTML('imagelistsrc','src','onSelectMainImage');
 
59
        if (html == "")
 
60
                document.getElementById("imagelistsrcrow").style.display = 'none';
 
61
        else
 
62
                document.getElementById("imagelistsrccontainer").innerHTML = html;
 
63
 
 
64
        // Image list oversrc
 
65
        html = getImageListHTML('imagelistover','onmouseoversrc');
 
66
        if (html == "")
 
67
                document.getElementById("imagelistoverrow").style.display = 'none';
 
68
        else
 
69
                document.getElementById("imagelistovercontainer").innerHTML = html;
 
70
 
 
71
        // Image list outsrc
 
72
        html = getImageListHTML('imagelistout','onmouseoutsrc');
 
73
        if (html == "")
 
74
                document.getElementById("imagelistoutrow").style.display = 'none';
 
75
        else
 
76
                document.getElementById("imagelistoutcontainer").innerHTML = html;
 
77
 
 
78
        // Src browser
 
79
        html = getBrowserHTML('srcbrowser','src','image','foswikiimage');
 
80
        document.getElementById("srcbrowsercontainer").innerHTML = html;
 
81
 
 
82
        // Over browser
 
83
        html = getBrowserHTML('oversrcbrowser', 'onmouseoversrc', 'image',
 
84
                          'foswikiimage');
 
85
        document.getElementById("onmouseoversrccontainer").innerHTML = html;
 
86
 
 
87
        // Out browser
 
88
        html = getBrowserHTML('outsrcbrowser', 'onmouseoutsrc',
 
89
                          'image', 'foswikiimage');
 
90
        document.getElementById("onmouseoutsrccontainer").innerHTML = html;
 
91
 
 
92
        // Longdesc browser
 
93
        html = getBrowserHTML('longdescbrowser','longdesc','file','foswikiimage');
 
94
        document.getElementById("longdesccontainer").innerHTML = html;
 
95
 
 
96
        // Resize some elements
 
97
        if (isVisible('srcbrowser'))
 
98
                document.getElementById('src').style.width = '260px';
 
99
 
 
100
        if (isVisible('oversrcbrowser'))
 
101
                document.getElementById('onmouseoversrc').style.width = '260px';
 
102
 
 
103
        if (isVisible('outsrcbrowser'))
 
104
                document.getElementById('onmouseoutsrc').style.width = '260px';
 
105
 
 
106
        if (isVisible('longdescbrowser'))
 
107
                document.getElementById('longdesc').style.width = '180px';
 
108
 
 
109
        // Check action
 
110
        if (elm != null && elm.nodeName == "IMG")
 
111
                action = "update";
 
112
 
 
113
        formObj.insert.value = tinyMCE.getLang('lang_' + action, 'Insert', true); 
 
114
 
 
115
        if (action == "update") {
 
116
                var src = tinyMCE.getAttrib(elm, 'src');
 
117
                var onmouseoversrc =
 
118
            getImageSrc(tinyMCE.cleanupEventStr(
 
119
                            tinyMCE.getAttrib(elm, 'onmouseover')));
 
120
                var onmouseoutsrc =
 
121
            getImageSrc(tinyMCE.cleanupEventStr(
 
122
                            tinyMCE.getAttrib(elm, 'onmouseout')));
 
123
 
 
124
                src = pubURL(src, elm, true);
 
125
 
 
126
                // Use mce_src if found
 
127
                var mceRealSrc = tinyMCE.getAttrib(elm, 'mce_src');
 
128
                if (mceRealSrc != "") {
 
129
                        src = mceRealSrc;
 
130
 
 
131
                        if (tinyMCE.getParam('convert_urls'))
 
132
                                src = pubURL(src, elm, true);
 
133
                }
 
134
 
 
135
                if (onmouseoversrc != "" && tinyMCE.getParam('convert_urls'))
 
136
                        onmouseoversrc = pubURL(onmouseoversrc, elm, true);
 
137
 
 
138
                if (onmouseoutsrc != "" && tinyMCE.getParam('convert_urls'))
 
139
                        onmouseoutsrc = pubURL(onmouseoutsrc, elm, true);
 
140
 
 
141
                // Setup form data
 
142
                var style = tinyMCE.parseStyle(tinyMCE.getAttrib(elm, "style"));
 
143
 
 
144
                // Store away old size
 
145
                orgImageWidth = trimSize(getStyle(elm, 'width'))
 
146
                orgImageHeight = trimSize(getStyle(elm, 'height'));
 
147
 
 
148
                formObj.src.value    = src;
 
149
                formObj.alt.value    = tinyMCE.getAttrib(elm, 'alt');
 
150
                formObj.title.value  = tinyMCE.getAttrib(elm, 'title');
 
151
                formObj.border.value =
 
152
            trimSize(getStyle(elm, 'border', 'borderWidth'));
 
153
                formObj.vspace.value = tinyMCE.getAttrib(elm, 'vspace');
 
154
                formObj.hspace.value = tinyMCE.getAttrib(elm, 'hspace');
 
155
                formObj.width.value  = orgImageWidth;
 
156
                formObj.height.value = orgImageHeight;
 
157
                formObj.onmouseoversrc.value = onmouseoversrc;
 
158
                formObj.onmouseoutsrc.value  = onmouseoutsrc;
 
159
                formObj.id.value  = tinyMCE.getAttrib(elm, 'id');
 
160
                formObj.dir.value  = tinyMCE.getAttrib(elm, 'dir');
 
161
                formObj.lang.value  = tinyMCE.getAttrib(elm, 'lang');
 
162
                formObj.longdesc.value  = tinyMCE.getAttrib(elm, 'longdesc');
 
163
                formObj.usemap.value  = tinyMCE.getAttrib(elm, 'usemap');
 
164
                formObj.style.value  = tinyMCE.serializeStyle(style);
 
165
 
 
166
                // Select by the values
 
167
                if (tinyMCE.isMSIE)
 
168
                        selectByValue(formObj, 'align', getStyle(
 
169
                              elm, 'align', 'styleFloat'));
 
170
                else
 
171
                        selectByValue(formObj, 'align', getStyle(
 
172
                              elm, 'align', 'cssFloat'));
 
173
 
 
174
                addClassesToList('classlist', 'foswikiimage_styles');
 
175
 
 
176
                selectByValue(formObj, 'classlist', tinyMCE.getAttrib(elm, 'class'));
 
177
                selectByValue(formObj, 'imagelistsrc', src);
 
178
                selectByValue(formObj, 'imagelistover', onmouseoversrc);
 
179
                selectByValue(formObj, 'imagelistout', onmouseoutsrc);
 
180
 
 
181
                updateStyle();
 
182
                showPreviewImage(src, true);
 
183
                changeAppearance();
 
184
 
 
185
                window.focus();
 
186
        } else
 
187
                addClassesToList('classlist', 'foswikiimage_styles');
 
188
 
 
189
        // If option enabled default contrain proportions to checked
 
190
        if (tinyMCE.getParam("foswikiimage_constrain_proportions", true))
 
191
                formObj.constrain.checked = true;
 
192
 
 
193
        // Check swap image if valid data
 
194
        if (formObj.onmouseoversrc.value != ""
 
195
        || formObj.onmouseoutsrc.value != "")
 
196
                setSwapImageDisabled(false);
 
197
        else
 
198
                setSwapImageDisabled(true);
 
199
}
 
200
 
 
201
function setSwapImageDisabled(state) {
 
202
        var formObj = document.forms[0];
 
203
 
 
204
        formObj.onmousemovecheck.checked = !state;
 
205
 
 
206
        setBrowserDisabled('overbrowser', state);
 
207
        setBrowserDisabled('outbrowser', state);
 
208
 
 
209
        if (formObj.imagelistover)
 
210
                formObj.imagelistover.disabled = state;
 
211
 
 
212
        if (formObj.imagelistout)
 
213
                formObj.imagelistout.disabled = state;
 
214
 
 
215
        formObj.onmouseoversrc.disabled = state;
 
216
        formObj.onmouseoutsrc.disabled  = state;
 
217
}
 
218
 
 
219
function setAttrib(elm, attrib, value) {
 
220
        var formObj = document.forms[0];
 
221
        var valueElm = formObj.elements[attrib];
 
222
 
 
223
        if (typeof(value) == "undefined" || value == null) {
 
224
                value = "";
 
225
 
 
226
                if (valueElm)
 
227
                        value = valueElm.value;
 
228
        }
 
229
 
 
230
        if (value != "") {
 
231
                elm.setAttribute(attrib, value);
 
232
 
 
233
                if (attrib == "style")
 
234
                        attrib = "style.cssText";
 
235
 
 
236
                if (attrib == "longdesc")
 
237
                        attrib = "longDesc";
 
238
 
 
239
                if (attrib == "width") {
 
240
                        attrib = "style.width";
 
241
                        value = value + "px";
 
242
                        value = value.replace(/%px/g, 'px');
 
243
                }
 
244
 
 
245
                if (attrib == "height") {
 
246
                        attrib = "style.height";
 
247
                        value = value + "px";
 
248
                        value = value.replace(/%px/g, 'px');
 
249
                }
 
250
 
 
251
                if (attrib == "class")
 
252
                        attrib = "className";
 
253
 
 
254
                eval('elm.' + attrib + "=value;");
 
255
        } else {
 
256
                if (attrib == 'class')
 
257
                        elm.className = '';
 
258
 
 
259
                elm.removeAttribute(attrib);
 
260
        }
 
261
}
 
262
 
 
263
function makeAttrib(attrib, value) {
 
264
        var formObj = document.forms[0];
 
265
        var valueElm = formObj.elements[attrib];
 
266
 
 
267
        if (typeof(value) == "undefined" || value == null) {
 
268
                value = "";
 
269
 
 
270
                if (valueElm)
 
271
                        value = valueElm.value;
 
272
        }
 
273
 
 
274
        if (value == "")
 
275
                return "";
 
276
 
 
277
        // XML encode it
 
278
        value = value.replace(/&/g, '&amp;');
 
279
        value = value.replace(/\"/g, '&quot;');
 
280
        value = value.replace(/</g, '&lt;');
 
281
        value = value.replace(/>/g, '&gt;');
 
282
 
 
283
        return ' ' + attrib + '="' + value + '"';
 
284
}
 
285
 
 
286
function insertAction() {
 
287
        var inst = tinyMCE.getInstanceById(tinyMCE.getWindowArg('editor_id'));
 
288
        var elm = inst.getFocusElement();
 
289
        var formObj = document.forms[0];
 
290
    // Always expand the URL, and keep it expanded
 
291
        var src = pubURL(formObj.src.value, tinyMCE.imgElement);
 
292
        var onmouseoversrc = formObj.onmouseoversrc.value;
 
293
        var onmouseoutsrc = formObj.onmouseoutsrc.value;
 
294
 
 
295
        if (!AutoValidator.validate(formObj)) {
 
296
                alert(tinyMCE.getLang('lang_invalid_data'));
 
297
                return false;
 
298
        }
 
299
 
 
300
        if (tinyMCE.getParam("accessibility_warnings")) {
 
301
                if (formObj.alt.value == "" &&
 
302
            !confirm(tinyMCE.getLang('lang_foswikiimage_missing_alt', '', true)))
 
303
                        return;
 
304
        }
 
305
 
 
306
        if (onmouseoversrc && onmouseoversrc != "")
 
307
                onmouseoversrc = "this.src='" +
 
308
            pubURL(onmouseoversrc, tinyMCE.imgElement) + "';";
 
309
 
 
310
        if (onmouseoutsrc && onmouseoutsrc != "")
 
311
                onmouseoutsrc = "this.src='" +
 
312
            pubURL(onmouseoutsrc, tinyMCE.imgElement) + "';";
 
313
 
 
314
        if (elm != null && elm.nodeName == "IMG") {
 
315
                setAttrib(elm, 'src', src);
 
316
                setAttrib(elm, 'mce_src', src);
 
317
                setAttrib(elm, 'alt');
 
318
                setAttrib(elm, 'title');
 
319
                setAttrib(elm, 'border');
 
320
                setAttrib(elm, 'vspace');
 
321
                setAttrib(elm, 'hspace');
 
322
                setAttrib(elm, 'width');
 
323
                setAttrib(elm, 'height');
 
324
                setAttrib(elm, 'onmouseover', onmouseoversrc);
 
325
                setAttrib(elm, 'onmouseout', onmouseoutsrc);
 
326
                setAttrib(elm, 'id');
 
327
                setAttrib(elm, 'dir');
 
328
                setAttrib(elm, 'lang');
 
329
                setAttrib(elm, 'longdesc');
 
330
                setAttrib(elm, 'usemap');
 
331
                setAttrib(elm, 'style');
 
332
                setAttrib(elm, 'class', getSelectValue(formObj, 'classlist'));
 
333
                setAttrib(elm, 'align', getSelectValue(formObj, 'align'));
 
334
 
 
335
                //tinyMCEPopup.execCommand("mceRepaint");
 
336
 
 
337
                // Repaint if dimensions changed
 
338
                if (formObj.width.value != orgImageWidth
 
339
            || formObj.height.value != orgImageHeight)
 
340
                        inst.repaint();
 
341
 
 
342
                // Refresh in old MSIE
 
343
                if (tinyMCE.isMSIE5)
 
344
                        elm.outerHTML = elm.outerHTML;
 
345
        } else {
 
346
                var html = "<img";
 
347
 
 
348
                html += makeAttrib('src', src);
 
349
                html += makeAttrib('mce_src', src);
 
350
                html += makeAttrib('alt');
 
351
                html += makeAttrib('title');
 
352
                html += makeAttrib('border');
 
353
                html += makeAttrib('vspace');
 
354
                html += makeAttrib('hspace');
 
355
                html += makeAttrib('width');
 
356
                html += makeAttrib('height');
 
357
                html += makeAttrib('onmouseover', onmouseoversrc);
 
358
                html += makeAttrib('onmouseout', onmouseoutsrc);
 
359
                html += makeAttrib('id');
 
360
                html += makeAttrib('dir');
 
361
                html += makeAttrib('lang');
 
362
                html += makeAttrib('longdesc');
 
363
                html += makeAttrib('usemap');
 
364
                html += makeAttrib('style');
 
365
                html += makeAttrib('class', getSelectValue(formObj, 'classlist'));
 
366
                html += makeAttrib('align', getSelectValue(formObj, 'align'));
 
367
                html += " />";
 
368
 
 
369
                tinyMCEPopup.execCommand("mceInsertContent", false, html);
 
370
        }
 
371
 
 
372
        tinyMCE._setEventsEnabled(inst.getBody(), false);
 
373
        tinyMCEPopup.close();
 
374
}
 
375
 
 
376
function cancelAction() {
 
377
        tinyMCEPopup.close();
 
378
}
 
379
 
 
380
function changeAppearance() {
 
381
        var formObj = document.forms[0];
 
382
        var img = document.getElementById('alignSampleImg');
 
383
 
 
384
        if (img) {
 
385
                img.align = formObj.align.value;
 
386
                img.border = formObj.border.value;
 
387
                img.hspace = formObj.hspace.value;
 
388
                img.vspace = formObj.vspace.value;
 
389
        }
 
390
}
 
391
 
 
392
function changeMouseMove() {
 
393
        var formObj = document.forms[0];
 
394
 
 
395
        setSwapImageDisabled(!formObj.onmousemovecheck.checked);
 
396
}
 
397
 
 
398
function updateStyle() {
 
399
        var formObj = document.forms[0];
 
400
        var st = tinyMCE.parseStyle(formObj.style.value);
 
401
 
 
402
        if (tinyMCE.getParam('inline_styles', false)) {
 
403
                st['width'] = formObj.width.value == '' ? ''
 
404
            : formObj.width.value + "px";
 
405
                st['height'] = formObj.height.value == '' ? ''
 
406
            : formObj.height.value + "px";
 
407
                st['border-width'] = formObj.border.value == '' ? ''
 
408
            : formObj.border.value + "px";
 
409
                st['margin-top'] = formObj.vspace.value == '' ? ''
 
410
            : formObj.vspace.value + "px";
 
411
                st['margin-bottom'] = formObj.vspace.value == '' ? ''
 
412
            : formObj.vspace.value + "px";
 
413
                st['margin-left'] = formObj.hspace.value == '' ? ''
 
414
            : formObj.hspace.value + "px";
 
415
                st['margin-right'] = formObj.hspace.value == '' ? ''
 
416
            : formObj.hspace.value + "px";
 
417
        } else {
 
418
                st['width'] = st['height'] = st['border-width'] = null;
 
419
 
 
420
                if (st['margin-top'] == st['margin-bottom'])
 
421
                        st['margin-top'] = st['margin-bottom'] = null;
 
422
 
 
423
                if (st['margin-left'] == st['margin-right'])
 
424
                        st['margin-left'] = st['margin-right'] = null;
 
425
        }
 
426
 
 
427
        formObj.style.value = tinyMCE.serializeStyle(st);
 
428
}
 
429
 
 
430
function styleUpdated() {
 
431
        var formObj = document.forms[0];
 
432
        var st = tinyMCE.parseStyle(formObj.style.value);
 
433
 
 
434
        if (st['width'])
 
435
                formObj.width.value = st['width'].replace('px', '');
 
436
 
 
437
        if (st['height'])
 
438
                formObj.height.value = st['height'].replace('px', '');
 
439
 
 
440
        if (st['margin-top'] && st['margin-top'] == st['margin-bottom'])
 
441
                formObj.vspace.value = st['margin-top'].replace('px', '');
 
442
 
 
443
        if (st['margin-left'] && st['margin-left'] == st['margin-right'])
 
444
                formObj.hspace.value = st['margin-left'].replace('px', '');
 
445
 
 
446
        if (st['border-width'])
 
447
                formObj.border.value = st['border-width'].replace('px', '');
 
448
}
 
449
 
 
450
function changeHeight() {
 
451
        var formObj = document.forms[0];
 
452
 
 
453
        if (!formObj.constrain.checked || !preloadImg) {
 
454
                updateStyle();
 
455
                return;
 
456
        }
 
457
 
 
458
        if (formObj.width.value == "" || formObj.height.value == "")
 
459
                return;
 
460
 
 
461
        var temp = (parseInt(formObj.width.value) / parseInt(preloadImg.width))
 
462
        * preloadImg.height;
 
463
        formObj.height.value = temp.toFixed(0);
 
464
        updateStyle();
 
465
}
 
466
 
 
467
function changeWidth() {
 
468
        var formObj = document.forms[0];
 
469
 
 
470
        if (!formObj.constrain.checked || !preloadImg) {
 
471
                updateStyle();
 
472
                return;
 
473
        }
 
474
 
 
475
        if (formObj.width.value == "" || formObj.height.value == "")
 
476
                return;
 
477
 
 
478
        var temp = (parseInt(formObj.height.value) / parseInt(preloadImg.height))
 
479
        * preloadImg.width;
 
480
        formObj.width.value = temp.toFixed(0);
 
481
        updateStyle();
 
482
}
 
483
 
 
484
function onSelectMainImage(target_form_element, name, value) {
 
485
        var formObj = document.forms[0];
 
486
 
 
487
        formObj.alt.value = name;
 
488
        formObj.title.value = name;
 
489
 
 
490
        resetImageData();
 
491
        showPreviewImage(formObj.elements[target_form_element].value, false);
 
492
}
 
493
 
 
494
function showPreviewImage(src, start) {
 
495
        var formObj = document.forms[0];
 
496
 
 
497
        selectByValue(document.forms[0], 'imagelistsrc', src);
 
498
 
 
499
        var elm = document.getElementById('prev');
 
500
        var src = pubURL(src, null, false);
 
501
 
 
502
        if (!start && tinyMCE.getParam("foswikiimage_update_dimensions_onchange",
 
503
                                   true))
 
504
                resetImageData();
 
505
 
 
506
        if (src == "")
 
507
                elm.innerHTML = "";
 
508
        else
 
509
                elm.innerHTML =
 
510
            '<img id="previewImg" src="' + src
 
511
            + '" border="0" onload="updateImageData('
 
512
            + start + ');" onerror="resetImageData();" />'
 
513
}
 
514
 
 
515
function updateImageData(start) {
 
516
        var formObj = document.forms[0];
 
517
 
 
518
        preloadImg = document.getElementById('previewImg');
 
519
 
 
520
        if (!start && formObj.width.value == "")
 
521
                formObj.width.value = preloadImg.width;
 
522
 
 
523
        if (!start && formObj.height.value == "")
 
524
                formObj.height.value = preloadImg.height;
 
525
 
 
526
        updateStyle();
 
527
}
 
528
 
 
529
function resetImageData() {
 
530
        var formObj = document.forms[0];
 
531
        formObj.width.value = formObj.height.value = "";        
 
532
}
 
533
 
 
534
function getSelectValue(form_obj, field_name) {
 
535
        var elm = form_obj.elements[field_name];
 
536
 
 
537
        if (elm == null || elm.options == null)
 
538
                return "";
 
539
 
 
540
        return elm.options[elm.selectedIndex].value;
 
541
}
 
542
 
 
543
function getImageListHTML(elm_id, target_form_element, onchange_func) {
 
544
        if (typeof(tinyMCEImageList) == "undefined"
 
545
        || tinyMCEImageList.length == 0)
 
546
                return "";
 
547
 
 
548
        var html = "";
 
549
 
 
550
        html += '<select id="' + elm_id + '" name="' + elm_id + '"';
 
551
        html += ' class="mceImageList" onfocus="tinyMCE.addSelectAccessibility(event, this, window);" onchange="this.form.'
 
552
        + target_form_element + '.value=';
 
553
        html += 'this.options[this.selectedIndex].value;';
 
554
 
 
555
        if (typeof(onchange_func) != "undefined")
 
556
                html += onchange_func + '(\'' + target_form_element
 
557
            + '\',this.options[this.selectedIndex].text,this.options[this.selectedIndex].value);';
 
558
 
 
559
        html += '"><option value="">---</option>';
 
560
 
 
561
        for (var i=0; i<tinyMCEImageList.length; i++)
 
562
                html += '<option value="' + tinyMCEImageList[i][1] + '">'
 
563
            + tinyMCEImageList[i][0] + '</option>';
 
564
 
 
565
        html += '</select>';
 
566
 
 
567
        return html;
 
568
 
 
569
        // tinyMCE.debug('-- image list start --', html, '-- image list end --');
 
570
}
 
571
 
 
572
// While loading
 
573
preinit();