How to get Grails not to escape html tags generated by CK Editor
up vote
0
down vote
favorite
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 |
up vote
0
down vote
favorite
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 |
up vote
0
down vote
favorite
up vote
0
down vote
favorite
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 at 16:49
Chris Malan
7617
7617
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
up vote
0
down vote
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 |
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
0
down vote
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 |
up vote
0
down vote
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 |
up vote
0
down vote
up vote
0
down vote
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 at 7:13
Chris Malan
7617
7617
add a comment |
add a comment |
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