示例#1
0
    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))
示例#2
0
    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))
示例#3
0
    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))