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.










share|improve this question

























    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.










    share|improve this question























      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.










      share|improve this question













      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






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 10 at 16:49









      Chris Malan

      7617




      7617






















          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.






          share|improve this answer




















            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',
            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
            );



            );













             

            draft saved


            draft discarded


















            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








            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.






            share|improve this answer
























              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.






              share|improve this answer






















                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.






                share|improve this answer












                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.







                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Nov 11 at 7:13









                Chris Malan

                7617




                7617



























                     

                    draft saved


                    draft discarded















































                     


                    draft saved


                    draft discarded














                    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





















































                    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







                    這個網誌中的熱門文章

                    How to read a connectionString WITH PROVIDER in .NET Core?

                    Node.js Script on GitHub Pages or Amazon S3

                    Museum of Modern and Contemporary Art of Trento and Rovereto