Upgrade Your Custom ZK Theme
Christopher Szu, Engineer, Potix Corporation
Jun 21, 2016
ZK 8.0.2
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.
- After git clone and init script, you should have a custom theme based on the master (newest) branch of ZK Theme Template.
- 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.
-
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"
- We will make two changes, one of them will cause git merge conflict when we perform the upgrade later.
- For the first change, we'll edit src/archive/web/zul/less/_zkvariables.less, the file where all the colors are defined.
-
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.
- For the second change, We'll edit src/archive/web/js/zul/wgt/less/toolbar.less, the style file for ZK toolbar component.
-
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 }
-
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"
-
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 .
-
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.
-
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;
-
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"
- 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. |