def config(name='ckeditor', language=None, height=None, width=None, code_theme=None, file_uploader=None, file_browser=None, markdown=False, codesnippet=False, custom_config=''): """Config CKEditor. :param name: The target input field's name. If you use Flask-WTF/WTForms, it need to set to field's name. Default to 'ckeditor'. :param language: The lang code string to set UI language in ISO 639 format, for example: ``zh``, ``zh-cn``, ``ko``, ``ja``, ``es``, ``fr``, ``de``, ``en`` etc, default to ``en``(i.e. English). :param height: The height of CKEditor window, default to 200. :param width: The width of CKEditor window. :param code_theme: The theme's name in string used for code snippets, default to ``monokai_sublime``. :param file_uploader: The url or endpoint to send the upload data. The related view function should return the ``upload_success()`` or ``upload_fail()`` call. Check ``examples/image-upload/app.py`` for more detail. :param file_browser: The url or endpoint to link a file browser. :param markdown: Enable/disable the `Markdown <https://ckeditor.com/cke4/addon/markdown>`_ plugin. :param codesnippet: Enable/disable the `Code Snippet <https://ckeditor.com/cke4/addon/codesnippet>`_ plugin. :param custom_config: The addition config, for example ``uiColor: '#9AB8F3'``. The proper syntax for each option is ``configuration name : configuration value``. You can use comma to separate multiple key-value pairs. See the list of available configuration settings on `CKEditor documentation <https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.config>`_. .. versionadded:: 0.3 """ extra_plugins = current_app.config['CKEDITOR_EXTRA_PLUGINS'] file_uploader = file_uploader or current_app.config['CKEDITOR_FILE_UPLOADER'] file_browser = file_browser or current_app.config['CKEDITOR_FILE_BROWSER'] if file_uploader != '': file_uploader = get_url(file_uploader) if file_browser != '': file_browser = get_url(file_browser) if file_uploader or file_browser and 'filebrowser' not in extra_plugins: extra_plugins.append('filebrowser') language = language or current_app.config['CKEDITOR_LANGUAGE'] height = height or current_app.config['CKEDITOR_HEIGHT'] width = width or current_app.config['CKEDITOR_WIDTH'] code_theme = code_theme or current_app.config['CKEDITOR_CODE_THEME'] enable_codesnippet = codesnippet or current_app.config['CKEDITOR_ENABLE_CODESNIPPET'] if enable_codesnippet and 'codesnippet' not in extra_plugins: extra_plugins.append('codesnippet') enable_md = markdown or current_app.config['CKEDITOR_ENABLE_MARKDOWN'] if enable_md and 'markdown' not in extra_plugins: extra_plugins.append('markdown') return Markup(''' <script type="text/javascript"> CKEDITOR.replace( "%s", { language: "%s", height: %s, width: %s, //toolbarCanCollapse: true, codeSnippet_theme: "%s", imageUploadUrl: "%s", filebrowserUploadUrl: "%s", filebrowserBrowseUrl: "%s", extraPlugins: "%s", %s }); </script>''' % ( name, language, height, width, code_theme, file_uploader, file_uploader, file_browser, ','.join(extra_plugins), custom_config))
def config(name='ckeditor', custom_config='', **kwargs): """Config CKEditor. :param name: The target input field's name. If you use Flask-WTF/WTForms, it need to set to field's name. Default to ``'ckeditor'``. :param custom_config: The addition config, for example ``uiColor: '#9AB8F3'``. The proper syntax for each option is ``configuration name : configuration value``. You can use comma to separate multiple key-value pairs. See the list of available configuration settings on `CKEditor documentation <https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.config>`_. :param kwargs: Mirror arguments to overwritten configuration variables, see docs for more details. .. versionadded:: 0.3 """ extra_plugins = kwargs.get( 'extra_plugins', current_app.config['CKEDITOR_EXTRA_PLUGINS']) file_uploader = kwargs.get( 'file_uploader', current_app.config['CKEDITOR_FILE_UPLOADER']) file_browser = kwargs.get('file_browser', current_app.config['CKEDITOR_FILE_BROWSER']) if file_uploader != '': file_uploader = get_url(file_uploader) if file_browser != '': file_browser = get_url(file_browser) if file_uploader or file_browser and 'filebrowser' not in extra_plugins: extra_plugins.append('filebrowser') language = kwargs.get('language', current_app.config['CKEDITOR_LANGUAGE']) height = kwargs.get('height', current_app.config['CKEDITOR_HEIGHT']) width = kwargs.get('width', current_app.config['CKEDITOR_WIDTH']) code_theme = kwargs.get('code_theme', current_app.config['CKEDITOR_CODE_THEME']) wrong_key_arg = kwargs.get('codesnippet', None) if wrong_key_arg: warnings.warn( 'Argument codesnippet was renamed to enable_codesnippet and will be removed in future.' ) enable_codesnippet = kwargs.get('enable_codesnippet', wrong_key_arg) or \ current_app.config['CKEDITOR_ENABLE_CODESNIPPET'] if enable_codesnippet and 'codesnippet' not in extra_plugins: extra_plugins.append('codesnippet') enable_csrf = kwargs.get('enable_csrf', current_app.config['CKEDITOR_ENABLE_CSRF']) if enable_csrf: if 'csrf' not in current_app.extensions: raise RuntimeError( "CSRFProtect is not initialized. It's required to enable CSRF protect, \ see docs for more details.") csrf_header = render_template_string(''' fileTools_requestHeaders: { 'X-CSRFToken': '{{ csrf_token() }}', },''') else: csrf_header = '' return Markup(''' <script type="text/javascript"> CKEDITOR.replace( "%s", { language: "%s", height: %s, width: %s, codeSnippet_theme: "%s", imageUploadUrl: "%s", filebrowserUploadUrl: "%s", filebrowserBrowseUrl: "%s", extraPlugins: "%s", %s // CSRF token header for XHR request %s }); </script>''' % (name, language, height, width, code_theme, file_uploader, file_uploader, file_browser, ','.join(extra_plugins), csrf_header, custom_config))
def config(name='ckeditor', language=None, height=None, width=None, code_theme=None, file_uploader=None, file_browser=None, custom_config=''): """Config CKEditor. :param name: The target input field's name. If you use Flask-WTF/WTForms, it need to set to field's name. Default to 'ckeditor'. :param language: The lang code string to set UI language in ISO 639 format, one of ``zh``, ``zh-cn``, ``ko``, ``ja``, ``es``, ``fr``, ``de`` and ``en``, default to ``en``(i.e. English). :param height: The heighe of CKEditor window, default to 200. :param width: The heighe of CKEditor window. :param code_theme: The theme's name in string used for code snippets, default to ``monokai_sublime``. :param file_uploader: The url or endpoint to send the upload data. The releated view function must be decorated with ``ckeditor.uploader`` and return the uploaded image's url. For example:: @app.route('/files/<filename>') def files(filename): path = app.config['UPLOADED_PATH'] return send_from_directory(path, filename) @app.route('/upload', methods=['POST']) @ckeditor.uploader def upload(): f = request.files.get('upload') f.save(os.path.join(app.config['UPLOADED_PATH'], f.filename)) url = url_for('files', filename=f.filename) return url :param file_browser: The url or endpoint to link a file browser. :param custom_config: The addition config, for example ``uiColor: '#9AB8F3'``. The proper syntax for each option is ``configuration name : configuration value``. You can use comma to separate multiple key-value pairs. See the list of available configuration settings on `CKEditor documentation <https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.config>`_. .. versionadded:: 0.3 """ file_uploader = file_uploader or current_app.config['CKEDITOR_FILE_UPLOADER'] file_browser = file_browser or current_app.config['CKEDITOR_FILE_BROWSER'] if file_uploader != '': file_uploader = get_url(file_uploader) if file_browser != '': file_browser = get_url(file_browser) language = language or current_app.config['CKEDITOR_LANGUAGE'] height = height or current_app.config['CKEDITOR_HEIGHT'] width = width or current_app.config['CKEDITOR_WIDTH'] code_theme = code_theme or current_app.config['CKEDITOR_CODE_THEME'] return Markup(''' <script type="text/javascript"> CKEDITOR.replace( %r, { language: %r, height: %r, width: %r, //toolbarCanCollapse: true, codeSnippet_theme: %r, filebrowserUploadUrl: %r, filebrowserBrowseUrl: %r, %s }); </script>''' % (name, language, height, width, code_theme, file_uploader, file_browser, custom_config))