How to get Grails not to escape html tags generated by CK Editor
This question was asked and answered in 2012. Unfortunately, none of the answers work with Grails 3.3.8 and the Fields plugin. I tried $raw(value) and whatever I could find. It still shows things like <b>Hello </b> <em>world</em>. $raw(value) is recommended in the latest Grails documentation here
I'm stuck and will appreciate any ideas.
grails ckeditor gsp
add a comment |
This question was asked and answered in 2012. Unfortunately, none of the answers work with Grails 3.3.8 and the Fields plugin. I tried $raw(value) and whatever I could find. It still shows things like <b>Hello </b> <em>world</em>. $raw(value) is recommended in the latest Grails documentation here
I'm stuck and will appreciate any ideas.
grails ckeditor gsp
add a comment |
This question was asked and answered in 2012. Unfortunately, none of the answers work with Grails 3.3.8 and the Fields plugin. I tried $raw(value) and whatever I could find. It still shows things like <b>Hello </b> <em>world</em>. $raw(value) is recommended in the latest Grails documentation here
I'm stuck and will appreciate any ideas.
grails ckeditor gsp
This question was asked and answered in 2012. Unfortunately, none of the answers work with Grails 3.3.8 and the Fields plugin. I tried $raw(value) and whatever I could find. It still shows things like <b>Hello </b> <em>world</em>. $raw(value) is recommended in the latest Grails documentation here
I'm stuck and will appreciate any ideas.
grails ckeditor gsp
grails ckeditor gsp
asked Nov 10 '18 at 16:49
Chris MalanChris Malan
7617
7617
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
OK, this is how one does it:
First, you need Unbescape. Add this to build.gradle:
compile "org.unbescape:unbescape:1.1.6.RELEASE" // to unbescape html
Next do grails create-tag-lib Unbescape. Here's your whole tag lib class:
import org.unbescape.*
import org.unbescape.html.*
class UnbescapeTagLib
static defaultEncodeAs = [taglib:'text']
//static encodeAsForTags = [tagName: [taglib:'html'], otherTagName: [taglib:'none']]
static final namespace = 'ubs'
def unescape = attrs, body ->
out << HtmlEscape.unescapeHtml(body.call().toString())
Now create a directory called 'show' and inside that a directory called 'description'. This is of course in your views directory for the particular domain object. Description is the name of the field. Inside the directory 'description' create a file called _displayWidget.gsp. This is what the file looks like:
<ubs:unescape>$raw(value)</ubs:unescape>
Calling the raw function on value returns a org.grails.taglib.TagBodyClosure object which is passed to your tag lib. That's why you have to do a call on the body and turn the result to a String in your tag lib.
This is easy to implement if one knows how to do it, but finding out how to do it was not easy. The documentation is not good. The Fields plugin really complicated things a lot. Before Fields, this was easy to do.
add a comment |
Your Answer
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53241186%2fhow-to-get-grails-not-to-escape-html-tags-generated-by-ck-editor%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
OK, this is how one does it:
First, you need Unbescape. Add this to build.gradle:
compile "org.unbescape:unbescape:1.1.6.RELEASE" // to unbescape html
Next do grails create-tag-lib Unbescape. Here's your whole tag lib class:
import org.unbescape.*
import org.unbescape.html.*
class UnbescapeTagLib
static defaultEncodeAs = [taglib:'text']
//static encodeAsForTags = [tagName: [taglib:'html'], otherTagName: [taglib:'none']]
static final namespace = 'ubs'
def unescape = attrs, body ->
out << HtmlEscape.unescapeHtml(body.call().toString())
Now create a directory called 'show' and inside that a directory called 'description'. This is of course in your views directory for the particular domain object. Description is the name of the field. Inside the directory 'description' create a file called _displayWidget.gsp. This is what the file looks like:
<ubs:unescape>$raw(value)</ubs:unescape>
Calling the raw function on value returns a org.grails.taglib.TagBodyClosure object which is passed to your tag lib. That's why you have to do a call on the body and turn the result to a String in your tag lib.
This is easy to implement if one knows how to do it, but finding out how to do it was not easy. The documentation is not good. The Fields plugin really complicated things a lot. Before Fields, this was easy to do.
add a comment |
OK, this is how one does it:
First, you need Unbescape. Add this to build.gradle:
compile "org.unbescape:unbescape:1.1.6.RELEASE" // to unbescape html
Next do grails create-tag-lib Unbescape. Here's your whole tag lib class:
import org.unbescape.*
import org.unbescape.html.*
class UnbescapeTagLib
static defaultEncodeAs = [taglib:'text']
//static encodeAsForTags = [tagName: [taglib:'html'], otherTagName: [taglib:'none']]
static final namespace = 'ubs'
def unescape = attrs, body ->
out << HtmlEscape.unescapeHtml(body.call().toString())
Now create a directory called 'show' and inside that a directory called 'description'. This is of course in your views directory for the particular domain object. Description is the name of the field. Inside the directory 'description' create a file called _displayWidget.gsp. This is what the file looks like:
<ubs:unescape>$raw(value)</ubs:unescape>
Calling the raw function on value returns a org.grails.taglib.TagBodyClosure object which is passed to your tag lib. That's why you have to do a call on the body and turn the result to a String in your tag lib.
This is easy to implement if one knows how to do it, but finding out how to do it was not easy. The documentation is not good. The Fields plugin really complicated things a lot. Before Fields, this was easy to do.
add a comment |
OK, this is how one does it:
First, you need Unbescape. Add this to build.gradle:
compile "org.unbescape:unbescape:1.1.6.RELEASE" // to unbescape html
Next do grails create-tag-lib Unbescape. Here's your whole tag lib class:
import org.unbescape.*
import org.unbescape.html.*
class UnbescapeTagLib
static defaultEncodeAs = [taglib:'text']
//static encodeAsForTags = [tagName: [taglib:'html'], otherTagName: [taglib:'none']]
static final namespace = 'ubs'
def unescape = attrs, body ->
out << HtmlEscape.unescapeHtml(body.call().toString())
Now create a directory called 'show' and inside that a directory called 'description'. This is of course in your views directory for the particular domain object. Description is the name of the field. Inside the directory 'description' create a file called _displayWidget.gsp. This is what the file looks like:
<ubs:unescape>$raw(value)</ubs:unescape>
Calling the raw function on value returns a org.grails.taglib.TagBodyClosure object which is passed to your tag lib. That's why you have to do a call on the body and turn the result to a String in your tag lib.
This is easy to implement if one knows how to do it, but finding out how to do it was not easy. The documentation is not good. The Fields plugin really complicated things a lot. Before Fields, this was easy to do.
OK, this is how one does it:
First, you need Unbescape. Add this to build.gradle:
compile "org.unbescape:unbescape:1.1.6.RELEASE" // to unbescape html
Next do grails create-tag-lib Unbescape. Here's your whole tag lib class:
import org.unbescape.*
import org.unbescape.html.*
class UnbescapeTagLib
static defaultEncodeAs = [taglib:'text']
//static encodeAsForTags = [tagName: [taglib:'html'], otherTagName: [taglib:'none']]
static final namespace = 'ubs'
def unescape = attrs, body ->
out << HtmlEscape.unescapeHtml(body.call().toString())
Now create a directory called 'show' and inside that a directory called 'description'. This is of course in your views directory for the particular domain object. Description is the name of the field. Inside the directory 'description' create a file called _displayWidget.gsp. This is what the file looks like:
<ubs:unescape>$raw(value)</ubs:unescape>
Calling the raw function on value returns a org.grails.taglib.TagBodyClosure object which is passed to your tag lib. That's why you have to do a call on the body and turn the result to a String in your tag lib.
This is easy to implement if one knows how to do it, but finding out how to do it was not easy. The documentation is not good. The Fields plugin really complicated things a lot. Before Fields, this was easy to do.
answered Nov 11 '18 at 7:13
Chris MalanChris Malan
7617
7617
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53241186%2fhow-to-get-grails-not-to-escape-html-tags-generated-by-ck-editor%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown