Announcement

Collapse
No announcement yet.
X
  • Filter
  • Time
Clear All
new posts

    Starting a new Skin based on TreeFrog example

    SmartClient Version: v12.1p_2020-07-31/PowerEdition Deployment (built 2020-07-31)

    Many years ago we created our own skin based on the Graphite skin, and made extensions and changes to the skin over time. It started with a simple copy of the sc/skins directory structure for Graphite at a 6.0x release of SmartGWT. Over time our skin got out of sync with the base Graphite skin and it became an involved manual process of integrating later releases of the SmartGWT skin.

    We have arrived at a stage where we want to update or replace the skin, and take advantage of of the evolution of skin management in the framework. TheTreeFog skin looks like a good starting point, but I have had some questions about getting it started.

    The javadocs on 'skinning' seems to offer 2 choices or methods for self-skinning. Is that correct?
    1. Custom Sass Skinning https://www.smartclient.com/smartgwt...SassSkins.html
    2. Using the skin editor - and our choice would be use it locally as we have the license that should enable it. https://www.smartclient.com/smartgwt...kinEditor.html

    For various reasons accessing the Skin Editor through Reify tool does not meet our requirements or needs.

    However I have attempted to access the online version of Skin Editor to review it as a starting point, but I get an authentication exception:

    javax.servlet.ServletException: Auth failure - see server logs for details
    at com.isomorphic.auth.AuthenticationFilter._doFilter(AuthenticationFilter.java:828)
    at com.isomorphic.servlet.BaseFilter.doFilter(BaseFilter.java:91)

    Do you have to enable something in my profile for me to see this?

    We want to take advantage of CSS3 and Spriting in the new skin. Does the TreeFrog skin support those features, as the doc only mentions, Tahoe, Obsidian and Stratus as relying on CSS3 features?

    How does one invoke the LOCAL version of the skin editor? Is that accessible through the console, or is there another way to access/invoke it? It's not clear from the documentation.


    I modified the *.gwt.xml file to instantiate the TreeFrog skin: <inherits name="com.smartclient.theme.treefrog.TreeFrogResources"/>
    I executed a GWT compile, and then a full compile of our application, and started it up.

    I expected that many of our images in our local skin would be missing, not a big issue, as I have not merged them over to the TreeFog local skin. The app, with missing styles, gave some idea of what it might look like under a derived TreeFrog skin.

    The documentation for CustomSassSkins mentions a template/sass directory. But there is no such directory, following the GWT compile in the skins directory structure? There is a template/sass directory for the Enterprise skin. So how does one support templated skins for TreeFrog skin? Is one expected to use the included Enterprise.../template/sass as the control directory for the new skin?

    The next issue is that while running the app, DSRequests to the SQL DB are being made through a Datasource: war/beer/tools/skinTools/data/userSkin.ds.xml

    Code:
    SELECT
            userSkin.pk, userSkin.name, userSkin.baseSkin, userSkin.userSettings, userSkin.skinStylesCSS, userSkin.thumbnail, userSkin.created_by, userSkin.created_at, userSkin.modified_by, userSkin.modified_at 
        FROM
            userSkin 
        WHERE
            (
                LOWER(userSkin.name)='xyz'
            )

    This is unexpected. Seems like there is missing documentation on what is expected here by the framework? The skin, or any such skin, expects a SQL table to define some of the skin parameters? Are we expected to edit the userSkin.xml to redefine the fields of the table? What is going on here? The userSkin.name is searching for our the old name of our modified skin, which I have changed to 'xyz' in this thread.


    There are a whole new set of Datasources which we have not seen before being included now.

    Looking for some general advice.






    #2
    Lots of different points here:

    1. TreeFrog: this is an older skin which is much more media-heavy and DOM-heavy than the newer skins, it does not feature SASS templating and cannot be modified via the Skin Editort, and Density scaling (as shown in the Showcase - done by Canvas.resizeControls()) necessarily stretches the media files, which doesn't look as good as true CSS scaling. So we wouldn't really recommend using this skin, however, you can quickly reproduce the overall color scheme using the Skin Editor. That's where we would suggest starting, then, if the Skin Editor doesn't do everything you need, you can export the skin and modify it further, via SASS or via direct changes to CSS files and/or load_skin.js for JS-controlled settings

    2. the Reify version of the Skin Editor is basically the same as the other online Skin Editor, and features exporting - in what way does this not meet your needs?

    3. as far as the other Skin Editor (at smartclient.com), can you confirm what URL you were using, and were you using the same account you're posting from?

    4. using Skin Editor locally: if you look at the latest docs it now includes instructions for SmartGWT as well as how to add a skin and where the files are

    5. you should not see requests for userSkin.ds.xml when you load an exported skin - that doesn't make much sense, as exported skins work just like normal skins. It's not clear what you did, perhaps copied some internal code from the skin editor? Please indicate how you attempted to load the skin

    Comment


      #3
      1. Okay, will not start with TreeFrog, but I do like it's rounded and color graded tabs and buttons.

      2. We have been unable to integrate Reify produced samples into our flow. Working with Lee R. to see if this can be addressed, but first impressions not good.

      3. Accessed the skin editor through: https://www.smartclient.com/devlogin...t=%2Fthemes%2F then logged in using my forum user id. Unless they are supposed to be different?

      4. Unless I can't interpret the instructions correctly; I am reading the latest doc on local skin editor invocation.: https://www.smartclient.com/smartgwt...kinEditor.html
      Am doing this: inheriting module com.smartgwtee.tools.Tools. Unless it doesn't become available from the TreeFrog skin?

      Anyway I don't understand this instruction: Always run a GWT compile after any module file change to ensure it's picked up, and then navigate to /tools/skinTools/skinEditor.jsp.
      I guess first off I need to get IT to install compass on our development host. But I don't see errors reporting the absence of compass utility in a console. Lets assume I do get it installed. What does navigate to skinEditor.jsp mean? Navigate in what? The development console? How exactly?

      5. I just modified the *.gwt.xml file to include the TreeFrog skin, removed the old xyz skin reference, GWT compiled, and then compiled the app. The request for userSkin.ds.xml was then generated. No idea what I may have done to cause this.

      Are you saying that of the two choices to sculpt a new skin, Custom Sass Skinning or Iso Skin Editor, you recommend the Skin Editor? If so where do I get documentation on using the Skin Editor to modify a supplied example skin? Just follow the 'Skinning' instructions and when the skin is copied, invoke the Editor (somehow?) to edit the new copied skin?
      Last edited by tece321; 5 Aug 2020, 13:41.

      Comment


        #4
        2. That's very strange considering that what Reify produces are just standard SmartGWT screens. If you can use a Component XML screen definition, you can use what Reify produces - there's no difference (see Reify for Developers).

        Last we heard, the developer working on this had gotten off track by looking at some files that Reify happened to generate but which were not documented as part of the process of using Reify screens, and did not need to be used. We have both explained this to your team and made it so that Reify now generates various README files and other markers to ensure that you cannot go off track even if you don't read the docs first. And, so far as we know, the ball's in your court on what's going wrong.

        Further, whether you can successfully integrate a Reify screen is irrelevant to whether you can use a skin built at Reify.com - that's unrelated.

        3. we're checking on that - yes use the same credentials

        4. no, you're not reading the latest doc. Note your URL has smartgwt-release, ours has smartgwt-latest. The docs were updated post-release.

        Navigate to tools/skinTools/skinEditor.jsp means send your browser to that URL.

        Yes, you do need to install SASS if you want to use SASS locally.

        5. that definitely would not happen given the steps you've shared, as you are basically saying that switching skins *at all* does this, which would make these forums explode with thousand of people reporting such a problem :) So something else must have been done. Let us know if you can figure out how to reproduce it

        6. using the Skin Editor: the Skin Editor allows you to start from several skins that have been set up with SASS templates which the Skin Editor then edits visually. You cannot just provide a skin for editing as it would not be set up for editing - it would not have the expected SASS templates and relationships between the variables (one color deriving from another, say). You can however, export a skin that has been edited in the online Skin Editor and then set that up for local editing - that's what the docs cover.

        Comment


          #5
          Originally posted by tece321 View Post
          However I have attempted to access the online version of Skin Editor to review it as a starting point, but I get an authentication exception:

          javax.servlet.ServletException: Auth failure - see server logs for details
          at com.isomorphic.auth.AuthenticationFilter._doFilter(AuthenticationFilter.java:828)
          at com.isomorphic.servlet.BaseFilter.doFilter(BaseFilter.java:91)

          Do you have to enable something in my profile for me to see this?
          This appears to be because one section of our code wasn't expecting an IPv6 address. We're looking into it, but in the meantime can you hit the server from an IPv4 address?

          Comment


            #6
            With regard to #5 (seeing a request to userSkin DataSource when all you did was include TreeFrogResources), you must have done something to attempt to load the skin - what was that? Script tag, JSP tag (unusual for GWT apps, but, we're reaching here..), something else?

            Comment


              #7
              >> 4. no, you're not reading the latest doc. Note your URL has smartgwt-release, ours has smartgwt-latest. The docs were updated post-release.

              ?>> Navigate to tools/skinTools/skinEditor.jsp means send your browser to that URL.

              I navigated, and got this:

              org.apache.jasper.JasperException: Unable to compile class for JSP<BR>
              &nbsp;&nbsp;&nbsp;&nbsp;at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:579)<BR>
              &nbsp;&nbsp;&nbsp;&nbsp;at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:357)<BR>
              &nbsp;&nbsp;&nbsp;&nbsp;at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:405)<BR>
              &nbsp;&nbsp;&nbsp;&nbsp;at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:349)<BR>
              &nbsp;&nbsp;&nbsp;&nbsp;at org.eclipse.jetty.jsp.JettyJspServlet.service(JettyJspServlet.java:107)<BR>
              &nbsp;&nbsp;&nbsp;&nbsp;at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)<BR>
              &nbsp;&nbsp;&nbsp;&nbsp;at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:812)<BR>
              &nbsp;&nbsp;&nbsp;&nbsp;at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1669)<BR>
              &nbsp;&nbsp;&nbsp;&nbsp;at beer.server.NoCache.doFilter(NoCache.java:31)<BR>
              &nbsp;&nbsp;&nbsp;&nbsp;at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652)<BR>
              &nbsp;&nbsp;&nbsp;&nbsp;at com.isomorphic.servlet.CompressionFilter._doFilter(CompressionFilter.java:263)<BR>
              &nbsp;&nbsp;&nbsp;&nbsp;at com.isomorphic.servlet.BaseFilter.doFilter(BaseFilter.java:91)<BR>
              &nbsp;&nbsp;&nbsp;&nbsp;at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652)<BR>
              &nbsp;&nbsp;&nbsp;&nbsp;at beer.server.DevelopmentAuthenticationFilter.doFilter(DevelopmentAuthenticationFilter.java:49)<BR> &nbsp;&nbsp;&nbsp;&nbsp;at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652)<BR> etc..


              Can I assume this is because compass is not installed on the host yet? Or is there something else I'm doing wrong?

              Also a colleague has tried to post to this thread, but his post keeps getting deleted or not posted. Is there a reason for that?

              Comment


                #8
                You do need compass, but that doesn't look like the problem; this looks more like you are missing server-side jars. There should be more logs about the compilation problem, please share them.

                Your colleague made one attempt to post to this thread, which succeeded. Because it was off topic, we moved it to it's own thread, and responded. He should have received multiple email notifications about all of this.

                Comment


                  #9
                  4. Here is what is seen in the log, when I navigate to <project>/tools/skinTools/skinEditor.jsp.

                  I'm running on a linux box in development mode, with the local eclipse jetty/tomcat service running the app. The Chrome browser on my laptop is connect to the host through the IP:Port address.

                  So I am opening http://IP:Port/beer/tools/skinTools/skinEditor.jsp

                  === 2020-08-10 12:17:15,505 [-126] INFO Compression - /beer/tools/skinTools/: 1.2k -> 385
                  === 2020-08-10 12:17:18,994 [-130] INFO RequestContext - URL: '/beer/tools/skinTools/skinEditor.jsp', User-Agent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36': Safari with Accept-Encoding header
                  === 2020-08-10 12:17:19,013 [-130] ERROR CompressionFilter - BaseFilter Global Exception
                  org.apache.jasper.JasperException: Unable to compile class for JSP
                  at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:579)
                  at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:357)
                  at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:405)
                  at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:349)
                  at org.eclipse.jetty.jsp.JettyJspServlet.service(JettyJspServlet.java:107)
                  at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
                  at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:812)
                  at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1669)
                  at beer.server.NoCache.doFilter(NoCache.java:31)
                  at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652)
                  at com.isomorphic.servlet.CompressionFilter._doFilter(CompressionFilter.java:263)
                  at com.isomorphic.servlet.BaseFilter.doFilter(BaseFilter.java:91)
                  at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652)
                  at beer.server.DevelopmentAuthenticationFilter.doFilter(DevelopmentAuthenticationFilter.java:49)
                  at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652)
                  at org.eclipse.jetty.websocket.server.WebSocketUpgradeFilter.doFilter(WebSocketUpgradeFilter.java:224)
                  at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652)
                  at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:585)
                  at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
                  at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:553)
                  at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:223)
                  at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1127)
                  at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515)
                  at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185)
                  at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1061)
                  at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
                  at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)
                  at org.eclipse.jetty.server.handler.RequestLogHandler.handle(RequestLogHandler.java:95)
                  at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)
                  at org.eclipse.jetty.server.Server.handle(Server.java:499)
                  at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:311)
                  at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257)
                  at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:544)
                  at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635)
                  at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555)
                  at java.lang.Thread.run(Thread.java:748)
                  Caused by: java.lang.NullPointerException
                  at org.apache.tomcat.util.descriptor.tld.TldResourcePath.hashCode(TldResourcePath.java:156)
                  at java.util.HashMap.hash(HashMap.java:338)
                  at java.util.HashMap.get(HashMap.java:556)
                  at org.apache.jasper.compiler.TldCache.getTaglibXml(TldCache.java:95)
                  at org.apache.jasper.compiler.TagLibraryInfoImpl.<init>(TagLibraryInfoImpl.java:179)
                  at org.apache.jasper.compiler.Parser.parseTaglibDirective(Parser.java:411)
                  at org.apache.jasper.compiler.Parser.parseDirective(Parser.java:469)
                  at org.apache.jasper.compiler.Parser.parseElements(Parser.java:1428)
                  at org.apache.jasper.compiler.Parser.parse(Parser.java:139)
                  at org.apache.jasper.compiler.ParserController.doParse(ParserController.java:227)
                  at org.apache.jasper.compiler.ParserController.parse(ParserController.java:100)
                  at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:199)
                  at org.apache.jasper.compiler.Compiler.compile(Compiler.java:356)
                  at org.apache.jasper.compiler.Compiler.compile(Compiler.java:336)
                  at org.apache.jasper.compiler.Compiler.compile(Compiler.java:323)
                  at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:564)
                  ... 35 more
                  === 2020-08-10 12:24:29,870 [izer] DEBUG SQLDataSource - About to clear SQLDriver state for DS instance 3127 from Finalizer
                  === 2020-08-10 12:24:29,870 [izer] DEBUG SQLDataSource - About to clear SQLDriver state for DS instance 3128 from Finalizer

                  Ok. See the other thread. Thanks.

                  Comment


                    #10
                    We've been unable to reproduce that stack trace specifically, but this particular JSP is expecting to find a tag library descriptor at /WEB-INF/iscTaglib.xml. There may be other problems, but it looks like your descriptor is missing. If necessary, you can copy the one from the built-in-ds example that ships with the SDK.

                    Comment


                      #11
                      Manually copying samples/built-in-ds/war/WEB-INF/iscTaglib.xml to the application WEB-INF directory got past the exceptions.

                      The copy target in our ANT deploy.xml does NOT contain any copy of iscTaglib.xml into the WEB-INF directory of the app. Should this be added? How do you recommend we manage the iscTaglib.xml file?

                      However the skin editor still references the 'userSkin' and the logs still contain exceptions on the DSRequest to a userSkin table. Why? What's going on.

                      Click image for larger version  Name:	SkinEditor-userSkin-popup.png Views:	0 Size:	40.2 KB ID:	263312

                      I grepped around the war directory and found these references:

                      Code:
                      beer/tools/visualBuilder/index.jsp:<isomorphic:loadDS ID="vbScreens,vbSettings,vbProjects,vbDataSources,userSkin" />
                      beer/tools/skinTools/skinEditor.jsp:<isomorphic:loadDS ID='Filesystem,baseSkin,userSkin,skinVariables,skinVariableGroups' />
                      beer/tools/skinTools/skinEditor.jsp:        userSkin.fetchData({}, function (response, data) {
                      beer/tools/skinTools/skinEditor.jsp:        userSkin.updateData(skinRecord,
                      beer/tools/skinTools/skinEditor.jsp:        userSkin.removeData(theme, function() {
                      beer/tools/skinTools/skinEditor.jsp:        userSkin.fetchData({name: appState.theme}, function (resp, data) {
                      beer/tools/skinTools/skinEditor.jsp:            userSkin.performCustomOperation("export",
                      beer/tools/skinTools/skinEditor.jsp:        userSkin.fetchData({name: theme}, function (dsResponse, data) {
                      beer/tools/skinTools/skinEditor.jsp:                optionDataSource: "userSkin",
                      beer/tools/skinTools/skinEditor.jsp:            dataSource: "userSkin",
                      beer/tools/skinTools/skinEditor.jsp:            //dataSource: "userSkin",
                      beer/tools/skinTools/skinEditor.jsp:            dataSource: "userSkin",
                      beer/tools/skinTools/skinEditor.jsp:                    optionDataSource: "userSkin",
                      beer/tools/skinTools/data/userSkin.ds.xml:<DataSource ID="userSkin" serverType="sql" tableCharacterSet="utf8mb4" tableCollation="utf8mb4_general_ci">
                      So are we enabling or including something that should be excluded?


                      When I dismissed the popup and attempted to start editing a new skin, based on the Tahoe skin, the editor fails. Here is contents of console (from developer console running on skin editor:

                      Code:
                      *10:50:23.724:INFO:Log:initialized
                      *10:50:24.679:WARN:Log:Usage: action=appShowStartPane, data=showStartPane, data2=
                      *10:50:24.721:WARN:HLayout:themeEditor_headerLayout:members array: [Img ID:themeEditor_headerIcon],[Label ID:themeEditor_headerLabel],[LayoutSpacer ID:isc_LayoutSpacer_1],[LayoutSpacer ID:createThemePlaceholder],[IButton ID:themeEditor_createThemeButton],[DynamicForm ID:themeEditor_editSkinForm],[LayoutSpacer ID:isc_LayoutSpacer_2],,[IButton ID:themeEditor_showHelpButton] includes null entry at position 7. Removing
                      *10:50:24.930:WARN:Log:Usage: action=appTabSelected, data=color
                      *10:50:25.443:XRP6:WARN:RPCManager:Invalid object name 'userSkin'. - response: {operationId: "custom",
                      clientContext: undef,
                      internalClientContext: undef,
                      context: Obj,
                      transactionNum: 2,
                      httpResponseCode: 200,
                      httpResponseText: "//isc_RPCResponseStart-->[{affectedRows:..."[167],
                      xmlHttpRequest: [object XMLHttpRequest],
                      transport: "xmlHttpRequest",
                      status: -1,
                      clientOnly: undef,
                      httpHeaders: Obj,
                      isStructured: true,
                      callbackArgs: null,
                      results: Obj,
                      affectedRows: 0,
                      data: "Invalid object name 'userSkin'.",
                      invalidateCache: false,
                      isDSResponse: true,
                      queueStatus: -1}
                      *10:50:25.493:XRP9:WARN:RPCManager:Invalid object name 'userSkin'. - response: {operationId: "userSkin_fetch",
                      clientContext: Obj,
                      internalClientContext: Obj,
                      context: Obj,
                      transactionNum: 4,
                      httpResponseCode: 200,
                      httpResponseText: "//isc_RPCResponseStart-->[{affectedRows:..."[167],
                      xmlHttpRequest: [object XMLHttpRequest],
                      transport: "xmlHttpRequest",
                      status: -1,
                      clientOnly: undef,
                      httpHeaders: Obj,
                      isStructured: true,
                      callbackArgs: null,
                      results: Obj,
                      affectedRows: 0,
                      data: "Invalid object name 'userSkin'.",
                      invalidateCache: false,
                      isDSResponse: true,
                      queueStatus: -1,
                      operationType: "fetch",
                      startRow: 0,
                      endRow: 0,
                      totalRows: 0}
                      *10:50:26.111:XRP9:INFO:Log:isc.Page is loaded
                      *11:06:57.797:KPR1:WARN:Log:TypeError: Cannot read property 'duplicate' of undefined
                      Stack from error.stack:
                          _3.getCachedThemes(<no args: exited>) on [Class ID:undefined] @ skinEditor.jsp:863:82
                          _3.validate(<no args: exited>) on [DynamicForm ID:themeEditor_startPane_form] @ skinEditor.jsp:1625:37
                          _3.runCreateTheme(<no args: exited>) on [HLayout ID:themeEditor_startPane] @ skinEditor.jsp:1717:27
                          _3.submit(<no args: exited>) on [DynamicForm ID:themeEditor_startPane_form] @ skinEditor.jsp:1639:30
                          DynamicForm.handleKeyPress(<no args: exited>) on [DynamicForm ID:themeEditor_startPane_form] @ ISC_Forms.js:619:381
                          [c]EventHandler.bubbleEvent(<no args: exited>) on [Class EventHandler] @ ISC_Core.js:2440:89
                          [c]EventHandler.handleKeyPress(<no args: exited>) on [Class EventHandler] @ ISC_Core.js:2178:122
                          EventHandler._handleNativeKeyPress(<no args: exited>) on [Class EventHandler] @ ISC_Core.js:2174:11
                          [c]EventHandler.dispatch(_1=>[c]EventHandler.$kd(), _2=>[object KeyboardEvent]) on [Class EventHandler] @ ISC_Core.js:2535:122
                          HTMLDocument.eval(event=>[object KeyboardEvent]) @ [no file]:3:123
                      
                      
                      Remote Debugging unavailable (Messaging endpoint not responding).  To enable Remote Debugging, see the Remote Debugging overview in the reference.
                      Last edited by tece321; 11 Aug 2020, 07:13.

                      Comment


                        #12
                        Yes, the Skin Editor requires a working userSkin DS. So setting up a userSkin table is something you would need to do if you were deploying the Skin Editor as part of your final application, to your end users.

                        Which raises a question: what is it you're trying to accomplish? If you just want to edit skins, then if you run one of the sample projects, the taglib file is already there, and userSkin is already set up in the include HSQLDB database. That's the normal way of doing it, and would have avoided all of these troubles.

                        It seems like right now, you're trying to add the Skin Editor to your actual application, so you are running into all the ways you have applied customizations relative to the default project. You could keep going down this path, using the Admin Console to create a userSkin table in your DB. And then install Compass. But all of those things would need to be later reversed, unless you plan to ship the Skin Editor with your app (which can be done, but is a separate class of license).

                        Comment


                          #13
                          It is not my intention to deploy the Skin Editor along with the application.

                          But the alternative you are offering - generate a skin in a sample project - means that the skin has to be created, copied into a working application, restarted and then tested in the application. There are several applications, each with very many features that have to be tested under the new skin.

                          So the iteration process would be excessive. So why wouldn't a developer style a skin in their own application - perhaps after getting a prototype running in a SmartGWT sample project? The key criteria is how the skin looks in the application.

                          In short I don't see a way around trying to support the Skin Editor in development mode on the real application.

                          By the way my company says it won't install compass as it is licensed from MIT. Don't ask me why - some legal gibberish. Is there an alternative, or is this now a dead end for us? Have you been able to fix the IP6 authentication problem I was having earlier?

                          Comment


                            #14
                            You can just run both projects in parallel and load the skin from the project where it's being edited. That's probably simpler than changing your main application project to enable use of tools, then reversing that once you are ready to deploy.

                            Fear of the MIT license makes no sense. It doesn't require attribution (like BSD) and you can freely sublicense under different terms. It is essentially certain that your company is using MIT licensed code all over the place, the lawyers just don't know this.

                            You can process our SCSS files with any SASS implementation that supports SCSS, but right now the Skin Editor is set up to call Compass in particular, with it's particular way of receiving command-line arguments. If you wanted to use some other SASS implementation, that should be achievable with a small Feature Sponsorship.

                            If you can't install a SASS processor in-house, then we'd recommend just using the online Skin Editors. The IPv6 problem (due to a third-party library not handling IPv6) will be solved shortly.

                            Comment


                              #15
                              Convinced our IT department to install Compass. So we have command line support of the Compass tool in Linux.

                              If we ever get to a point where the Skin Editor needs to call Compass, how is this invoked and resolved in the browser? We have Compass on our Linux boxes, where one needs to set an appropriate ruby version number, and invoke Compass from /tools/bin/compass, where normally /tools/bin is in our Linux PATH. But how does the browser/Skin Editor access this command line version?

                              Comment

                              Working...
                              X