Foren / National / Russian / Тех. поддержка / [Fixed] Не отображается CKeditor, если у textarea более 1 класса

Edward
#41105 26. Oktober 2015, 03:49

Столкнулся с проблемой описанной в заголовке. У меня в шаблоне page.edit.tpl используется тема на bootstrap и имеется несколько textarea такого вида

CSS
1
<textarea class="editor form-control" rows="3"></textarea>

Решил проблему поправив файлик plugins/ckeditor/presets/ckeditor.default.set.js

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
/*
 * Default CKEditor preset and connector
 */
 
var ckeditorClasses = [
                  ['editor','Full'], // textarea class, editor toolbar size
                  ['medieditor','Medium'],
                  ['minieditor','Basic']
                 ];
 
function hasClass(el, selector) {
    var className = " " + selector + " ";
  ,
    if ((" " + el.className + " ").replace(/[\n\t]/g, " ").indexOf(className) > -1) {
        return true;
    }
return false;
}
 
function ckeditorReplace() {
    var textareas = document.getElementsByTagName('textarea');
    for (var i = 0; i < textareas.length; i++) {
         
        if (hasClass(textareas[i], ckeditorClasses[0][0]) || hasClass(textareas[i], ckeditorClasses[1][0]) || hasClass(textareas[i], ckeditorClasses[2][0])) {
            var textareasStyle = getComputedStyle(textareas[i], null) || textareas[i].currentStyle;
            if (hasClass(textareas[i], ckeditorClasses[0][0])) { var toolbars = ckeditorClasses[0][1] }
            if (hasClass(textareas[i], ckeditorClasses[1][0])) { var toolbars = ckeditorClasses[1][1] }
            if (hasClass(textareas[i], ckeditorClasses[2][0])) { var toolbars = ckeditorClasses[2][1] }
            CKEDITOR.replace(textareas[i], {height:textareasStyle.height, width:'100%', toolbar: toolbars});
        }
    }
}
 
if (typeof jQuery == 'undefined') {
    if (window.addEventListener) {
        window.addEventListener('load', ckeditorReplace, false);
    } else if (window.attachEvent) {
        window.attachEvent('onload', ckeditorReplace);
    } else {
        window.onload = ckeditorReplace;
    }
} else {
    $(document).ready(ckeditorReplace);
    ajaxSuccessHandlers.push(ckeditorReplace);
}

Кривоватое решение, но что-то подобное должно быть сразу из коробки, потому как классов у элемента может быть более одного.

Email: ed.gabishev@gmail.com
Telegram: https://t.me/Ed_Gaba

Dieser Beitrag wurde von Macik (am 31. Oktober 2015, 16:40, vor 9 Jahre) bearbeitet