Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

CKEditor 4: Uncaught TypeError: Cannot read property 'langEntries' of null

I'm using the Ruby gem for CK Editor (https://github.com/galetahub/ckeditor) and I'm getting this error:

Uncaught TypeError: Cannot read property 'langEntries' of null

Here's where it's occurring in the code:

CKEDITOR.plugins.load = CKEDITOR.tools.override(CKEDITOR.plugins.load, function (a) {
var d = {};
return function (b, c, e) {
    var i = {},
        g = function (b) {
            a.call(this, b, function (a) {
                CKEDITOR.tools.extend(i, a);
                var b = [],
                    l;
                for (l in a) {
                    var s = a[l],
                        q = s && s.requires;
                    if (!d[l]) {
                        if (s.icons)
                            for (var u = s.icons.split(","), f = u.length; f--;) CKEDITOR.skin.addIcon(u[f], s.path + "icons/" + (CKEDITOR.env.hidpi && s.hidpi ? "hidpi/" : "") + u[f] + ".png");
                        d[l] = 1
                    }
                    if (q) {
                        q.split && (q = q.split(","));
                        for (s = 0; s < q.length; s++) i[q[s]] || b.push(q[s])
                    }
                }
                if (b.length) g.call(this,
                    b);
                else { *ERRORING HERE*
                    for (l in i) {
                        s = i[l];
                        if (s.onLoad && !s.onLoad._called) {
                            s.onLoad() === false && delete i[l];
                            s.onLoad._called = 1
                        }
                    }
                    c && c.call(e || window, i)
                }
            }, this)
        };
    g.call(this, b)
}
});
CKEDITOR.plugins.setLang = function (a, d, b) {
var c = this.get(a),
    a = c.langEntries || (c.langEntries = {}),
    c = c.lang || (c.lang = []);
c.split && (c = c.split(","));
CKEDITOR.tools.indexOf(c, d) == -1 && c.push(d);
a[d] = b
};
CKEDITOR.ui = function (a) {
 if (a.ui) return a.ui;
this.items = {};
this.instances = {};
this.editor = a;
this._ = {
    handlers: {}
};
return this
};

I'm trying to use this Simple Uploads plugin and it has a whole bunch of languages. My directory structure is like this: enter image description here

Here's the documentation for CK Editor for this error:

http://docs.ckeditor.com/#!/api/CKEDITOR.plugins-method-setLang

All of my plugin's language files are formatted correctly, so struggling to find what the issue is.

Any help with resolving this would be greatly appreciated

EDIT: Here's the English lang file -

CKEDITOR.plugins.setLang( 'simpleuploads', 'en',
{
    // Tooltip for the "add file" toolbar button
    addFile : 'Add a file',
    // Tooltip for the "add image" toolbar button
    addImage: 'Add an image',

    // Shown after the data has been sent to the server and we're waiting for the response
    processing: 'Processing...',

    // File size is over config.simpleuploads_maxFileSize OR the server returns HTTP status 413
    fileTooBig : 'The file is too big, please use a smaller one.',

    // The extension matches one of the blacklisted ones in config.simpleuploads_invalidExtensions
    invalidExtension : 'Invalid file type, please use only valid files.',

    // The extension isn't included in config.simpleuploads_acceptedExtensions
    nonAcceptedExtension: 'The file type is not valid, please use only valid files:\r\n%0',

    // The file isn't an accepted type for images
    nonImageExtension: 'You must select an image',

    // The width of the image is over the allowed maximum
    imageTooWide: 'The image is too wide',

    // The height of the image is over the allowed maximum
    imageTooTall: 'The image is too tall'
});
like image 633
Ryan Drake Avatar asked Jun 30 '14 23:06

Ryan Drake


3 Answers

The problem comes from the way rails compiles the assets. It generates one big js file and if your plugin.js code does not load before the files in the /lang it throws an error and stops the execution of the generated by rails big js file. This means if you have any js code past the point where the error occurred it won't be executed as well. Here is what helped me solve the problem:

//= require ckeditor/init
//= require ckeditor/config
//= require ckeditor/plugins/YOUR_PLUGIN/plugin    // plugin.js in folder
//= require ckeditor/plugins/YOUR_PLUGIN/lang/en   // en.js in folder
//= require_directory .
like image 187
Radi Totev Avatar answered Nov 07 '22 07:11

Radi Totev


Remove the following line from application.js

// = require_tree ./ckeditor
like image 38
Mavis Avatar answered Nov 07 '22 07:11

Mavis


If you are using ckeditor-rails In app/assets/javascripts/application.js, add:

//= require ckeditor-jquery

and ensure that language value is like this:

config.language = 'en';
config.language_list = [ 'en:English', 'es:Spanish' ];
like image 25
Fran Martinez Avatar answered Nov 07 '22 07:11

Fran Martinez