Disable TinyMCE absolute to relative URL Conversions
Asked Answered
S

4

38

Can anyone tell me how to get TinyMCE to stop converting my URLs to relative links in Plone?

For example, if I enter this in the HTML source:

<img src="/images/dir/subdir/my_image.png" />

it will convert it to:

<img src="../../../my_image.png" />

I've edited tiny_mce.js (in portal_skins) to set:

convert_urls:false,
relative_urls:false,

but to no effect. I've read all similar posts here, but none really answer this question.

It's fine if it does the relative thing when users are picking images by browsing the filesystem (i.e. the catalog). I just want it to respect what I type in the html box ... so that I have the option of forcing an absolute path if I deem it appropriate. This is the standard behavior in kupu.

Any ideas?

Salter answered 4/3, 2011 at 16:2 Comment(1)
Possible duplicate of Get TinyMCE to use full image url instead of relative oneDeiform
D
43

Set convert_urls: false in tiny_mce_init.js, not tiny_mce.js. Early in tiny_mce_init.js you'll see a call to window.tinyMCE.init passing a bunch of initialisation options. In the Products.TinyMCE I'm looking at, the last option is fix_list_elements: false. Add your option there.

Edit: tiny_mce_init.js is no longer used in Products.TinyMCE 1.3.x (Plone 4.3). Instead, override the tinymce-jsonconfiguration browser view, e.g.:

Assuming you have a package with a browser layer, add in browser/configure.zcml:

<browser:page
    for="*"
    name="tinymce-jsonconfiguration"
    class=".tinymce.TinyMCEBrowserView"
    permission="zope2.View"
    attribute="jsonConfiguration"
    layer="..interfaces.IMyBrowserLayer"
    />

Then add browser/tinymce.py:

try:
    import simplejson as json
except ImportError:
    import json

from Acquisition import aq_inner
from Products.CMFCore.utils import getToolByName
from Products.TinyMCE.browser.browser import TinyMCEBrowserView as View
from Products.TinyMCE.browser.interfaces.browser import ITinyMCEBrowserView
from zope.interface import implements


class TinyMCEBrowserView(View):
    implements(ITinyMCEBrowserView)

    def jsonConfiguration(self, field):
        """Return the configuration in JSON"""

        utility = getToolByName(aq_inner(self.context), 'portal_tinymce')
        config = utility.getConfiguration(context=self.context,
                                          field=field,
                                          request=self.request)
        config['convert_urls'] = False
        return json.dumps(config)
Desecrate answered 4/3, 2011 at 21:47 Comment(2)
Thanks, Dan. That did it. There are three settings that you can adjust to control URL handling. They are convert_urls, relative_urls and remove_script_host. By adjusting those settings, you can probably get the behavior you want. Those variables are not in tiny_mce_init.js so -- like you said -- you have to add them.Salter
Don't forget to "accept" answers as correct to ensure the answerer gets their "karma points" and that the question is closed.Ergo
S
34

You should add these configs into tinymce.init:

  • relative_urls: false,

  • convert_urls: false,

  • remove_script_host : false,

ref: https://www.tiny.cloud/docs/configure/url-handling/

Sandman answered 7/11, 2013 at 6:59 Comment(0)
F
3

An other solution is to configure TinyMCE with the control panel to use UID for every links and images, instead of path, so you don't modify any existing javascripts and don't have any relative url displayed.

Faria answered 20/9, 2011 at 20:8 Comment(0)
E
2

In Plone 5 is possible disable TinyMCE absolute to relative URL adding variables in Advanced tab of TinyMCE Settings

Site setup > TinyMCE > Advaced

{"relative_urls": false, "convert_urls": false, "remove_script_host": false}

Further variables are available in Products/CMFPlone/static/components/tinymce-builded/js/tinymce/tinymce.js

...
popup_css: '',
plugins: '',
document_base_url: documentBaseUrl,
add_form_submit_trigger: true,
submit_patch: true,
add_unload_trigger: true,
convert_urls: true,
relative_urls: true,
remove_script_host: true,
object_resizing: true,
...
Extraditable answered 20/9, 2018 at 14:18 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.