Upgrade Your Custom ZK Theme

From Documentation
DocumentationSmall Talks2016JuneUpgrade Your Custom ZK Theme
Upgrade Your Custom ZK Theme

Author
Christopher Szu, Engineer, Potix Corporation
Date
Jun 21, 2016
Version
ZK 8.0.2

WarningTriangle-32x32.png This page is under construction, so we cannot guarantee the accuracy of the content!

Introduction

In the previous smalltalk, we have covered how to build ZK custom theme using the newly introduced ZK Theme Template. If you are not familiar with ZK Theme Template, we recommend a quick read through.

Before ZK Theme Template came along, one sitution that often trouble ZK developers is upgrading their ZK custom theme to match the ZK version of the application. Since there were no mechanism or tools provided officially, upgrading becomes a difficult task.

To mitigate the difficulty, we have built ZK Theme Template with git, making it much easier to switch between versions as we leverage the versioning capabilities of git.

In this smalltalk, we will show you how to build your custom theme based on any version of ZK, and how to switch to a different version.

Steps to Upgrading Your Custom Theme

Follow these steps to upgrade your own custom theme based on ZK's new theme template.
We will assume you have already cloned ZK Theme Template and ran the init script. Please refer to the previous smalltalk for more detail.

  1. After git clone and init script, you should have a custom theme based on the master (newest) branch of ZK Theme Template. But since we are going to checkout another revision, we should commit the changes made by init.sh script.
    ➜ git status
    On branch master
    Your branch is up-to-date with 'origin/master'.
    Changes not staged for commit:
      (use "git add/rm <file>..." to update what will be committed)
      (use "git checkout -- <file>..." to discard changes in working directory)
    
            modified:   pom.xml
            modified:   readme.txt
            modified:   src/archive/metainfo/zk/config.xml
            modified:   src/archive/metainfo/zk/lang-addon.xml
            deleted:    src/org/zkoss/theme/___THEME_NAME___/Version.java
            deleted:    src/org/zkoss/theme/___THEME_NAME___/___THEME_NAME_CAP___ThemeWebAppInit.java
            modified:   version
    
    Untracked files:
      (use "git add <file>..." to include in what will be committed)
    
            src/org/zkoss/theme/red/
    
    no changes added to commit (use "git add" and/or "git commit -a")
    ➜ git add -A
    ➜ git commit -m "init red theme"
    
    • Line 19: for this demostration, the theme is going to be called "red"
  2. Remember your theme version should match the ZK version of your application. For this demostration, we will assume ZK version is 7.0.2 initially and upgrade to 7.0.8 later.
  3. Switch to ZK 7.0.2 with the following command.
    ➜ git checkout -b custom-theme v7.0.2
    
    • This will create a branch called "custom-theme" based on ZK 7.0.2 tag "v7.0.2"
  4. We will make two changes, one of them will cause git merge conflict when we perform the upgrade later.
  5. For the first change, we'll edit src/archive/web/zul/less/_zkvariables.less, the file where all the colors are defined.
  6. Change the background color of the ZK window component
    from
    @windowBackgroundColor: #D9E5EF;
    

    to

    @windowBackgroundColor: #FF8888;
    

    since ZK did not change the window background color between 7.0.2 and 7.0.8, this change should not cause any git merge conflict.

  7. For the second change, We'll edit src/archive/web/js/zul/wgt/less/toolbar.less, the style file for ZK toolbar component.
  8. Change the button height of the ZK toolbar component
    from
    .z-toolbarbutton {
    	display: inline-block;
    	height: @baseButtonHeight;
    	border: 1px solid transparent;
    	//omitted for brevity
    }
    

    to

    .z-toolbarbutton {
    	display: inline-block;
    	height: 30px;
    	border: 1px solid transparent;
    	//omitted for brevity
    }
    
  9. If you build the theme right now, you'll get a ZK 7.0.2 based custom theme. But since we want to upgrade to ZK 7.0.8, let's just commit the changes for now.
    ➜ git add -u
    ➜ git commit -m "made some changes"
    
  10. Let's upgrade from current version ZK 7.0.2 to ZK 7.0.8.
    ➜ git tag -l
    v7.0.0
    v7.0.0-Preview
    v7.0.0-RC
    v7.0.1
    v7.0.2
    v7.0.3
    v7.0.3.1
    v7.0.3.2
    v7.0.4
    v7.0.5
    v7.0.5.1
    v7.0.5.2
    v7.0.6
    v7.0.6.1
    v7.0.7
    v7.0.8
    v8.0.0
    v8.0.0-RC
    v8.0.1
    v8.0.1.1
    v8.0.2
    v8.0.2.1
    v8.0.EL.2.2
    ➜ git fetch origin v7.0.8
    ➜ git diff HEAD v7.0.8
    ...
    diff --git a/src/archive/web/js/zul/wgt/less/toolbar.less b/src/archive/web/js/zul/wgt/less/toolbar.less
    index 72e90d6..b3b51e5 100644
    --- a/src/archive/web/js/zul/wgt/less/toolbar.less
    +++ b/src/archive/web/js/zul/wgt/less/toolbar.less
    @@ -57,7 +57,6 @@
     // Toolbarbutton
     .z-toolbarbutton {
            display: inline-block;
    -       height: 30px;
            border: 1px solid transparent;
            .borderRadius(@borderRadiusSmall);
            margin: 0 2px;
    ...
    ➜ git merge v7.0.8
    Auto-merging src/archive/web/zul/less/_zkvariables.less
    Auto-merging src/archive/web/js/zul/wgt/less/toolbar.less
    CONFLICT (content): Merge conflict in src/archive/web/js/zul/wgt/less/toolbar.less
    Automatic merge failed; fix conflicts and then commit the result.
    
    • Line 17: the tag name for ZK 7.0.8 is "v7.0.8"
    • Line 25: "origin" is being used here, buy you should replace that name with whatever you named the ZK Theme Template repository.
    • Line 36: ZK 7.0.8 removed the height attribute of .z-toolbarbutton class, but we've also made a change to the height attribute, this surely will cause a git auto merge conflict later on.
    • Line 44: git letting us know it cannot figure out how to automatically merge the change ZK 7.0.8 and we both made .
  11. As you can see, our second change creates a git auto merge conflict with ZK v7.0.8. To resolve this conflict, simply open toolbar.less in your editor of choice, and make the following changes.
    // Toolbarbutton
    .z-toolbarbutton {
    	display: inline-block;
    <<<<<<< HEAD
    	height: 30px;
    =======
    >>>>>>> v7.0.8
    	border: 1px solid transparent;
    	.borderRadius(@borderRadiusSmall);
    	margin: 0 2px;
    
    • Line 4-7: We can see that there is no height attribute in v7.0.8, but in the HEAD revision there is, since we decided that the change is needed, we will keep the height attribute.
  12. After removing the conflict message in toolbar.less, this is what we have now.
    // Toolbarbutton
    .z-toolbarbutton {
    	display: inline-block;
    	height: 30px;
    	border: 1px solid transparent;
    	.borderRadius(@borderRadiusSmall);
    	margin: 0 2px;
    
  13. Now we can finish the merge process by commiting the changes we've just made.
    ➜ git status
    On branch v7.0.8
    You have unmerged paths.
      (fix conflicts and run "git commit")
    
    Changes to be committed:
    
            new file:   src/archive/web/js/zkmax/inp/ext/icons-black-2x.png
            new file:   src/archive/web/js/zkmax/inp/ext/icons-black.png
            new file:   src/archive/web/js/zkmax/inp/ext/icons-white-2x.png
            new file:   src/archive/web/js/zkmax/inp/ext/icons-white.png
            new file:   src/archive/web/js/zkmax/inp/less/tbeditor.less
            new file:   src/archive/web/js/zkmax/inp/less/timepicker.less
            new file:   src/archive/web/js/zkmax/layout/less/rowlayout.less
            modified:   src/archive/web/js/zul/grid/less/grid.less
            modified:   src/archive/web/js/zul/inp/less/combo.less
            modified:   src/archive/web/js/zul/mesh/less/paging.less
            modified:   src/archive/web/js/zul/sel/less/listbox.less
            modified:   src/archive/web/js/zul/sel/less/tree.less
            modified:   src/archive/web/js/zul/wgt/less/caption.less
            modified:   src/archive/web/zkmax/less/tablet/_calendar.less
            modified:   src/archive/web/zkmax/less/tablet/_combo.less
            modified:   src/archive/web/zul/less/_reset.less
            modified:   src/archive/web/zul/less/_zkmixins.less
            modified:   src/archive/web/zul/less/_zkvariables.less
            new file:   src/archive/web/zul/less/font/_animated.less
            new file:   src/archive/web/zul/less/font/_bordered-pulled.less
            new file:   src/archive/web/zul/less/font/_fixed-width.less
            new file:   src/archive/web/zul/less/font/_larger.less
            new file:   src/archive/web/zul/less/font/_list.less
            new file:   src/archive/web/zul/less/font/_mixins.less
            new file:   src/archive/web/zul/less/font/_rotated-flipped.less
            new file:   src/archive/web/zul/less/font/_stacked.less
            modified:   src/archive/web/zul/less/norm.less
    
    Unmerged paths:
      (use "git add <file>..." to mark resolution)
    
            both modified:   src/archive/web/js/zul/wgt/less/toolbar.less
    ➜ git add -u
    ➜ git commit
    
    • Line 39: The file with merge conflict will be marked "both modified"
  14. Now we're done with the upgrade. Run mvn clean package to build your newly updated custom theme and test it out in your application.

Known Difficulties

Although this new approach gives ZK developers more freedom to create their own theme, there are still some inconveniences.
ZK developers not familiar with git might find all the git commands intimidating, so here is the official git book and documentation for reference. Alternatively, you can use your favorite GUI git tools like sourcetree to eleminate the need to type in commands manually.
One thing to bear in mind when upgrading version is that some ZK bug fixes might include adjustments in .less files, so if you were to remove any existing styles, make sure they don't break your application before continue.


Comments



Copyright © Potix Corporation. This article is licensed under GNU Free Documentation License.