Suggested case list:
Using timer to refresh a grid
383guest172.69.33.12125nk0uiMay 7, 2020 7:23:47 AMlinkuser model to move item to another listbox
120guest162.158.193.148d0n3krApr 2, 2020 5:28:28 AMlinkDisabled list item row passed to VM-1981
296fatih123160.83.36.13025nk0uiFeb 13, 2018 4:25:44 PMlinkDisabled list item row passed to VM-1981
295fatih123160.83.36.13025nk0uiFeb 13, 2018 4:25:16 PMlinkDisabled list item row passed to VM-1981
294fatih123160.83.36.13225nk0uiFeb 13, 2018 3:30:44 PMlinkgrid sample with ListModel/RowRenderer
816guest80.82.2.1312vah9ajFeb 21, 2017 11:42:21 AMlinkgrid sample with ListModel/RowRenderer
809guest175.98.113.1622vah9ajJan 26, 2017 9:19:33 AMlinkgrid sample with ListModel/RowRenderer
196guest79.185.142.402vah9ajApr 26, 2014 10:53:57 PMlinkgrid sample with ListModel/RowRenderer
195guest79.185.142.402vah9ajApr 26, 2014 10:53:54 PMlinkgrid sample with ListModel/RowRenderer
194guest79.185.142.402vah9ajApr 26, 2014 10:53:51 PMlinkgrid sample with ListModel/RowRenderer
193guest79.185.142.402vah9ajApr 26, 2014 10:53:48 PMlinkgrid sample with ListModel/RowRenderer
192guest79.185.142.402vah9ajApr 26, 2014 10:53:44 PMlinkgrid sample with ListModel/RowRenderer
191guest79.185.142.402vah9ajApr 26, 2014 10:53:40 PMlinkHierarchy table without using ZK PE/EE
1aaknai151.28.135.2131s871daJul 29, 2013 11:02:46 PMlinkgrid sample with ListModel/RowRenderer
128aaknai151.28.135.2132vah9ajJul 29, 2013 7:20:00 PMlinkuser model to move item to another listbox
1TonyQ114.25.109.94d0n3krApr 21, 2012 10:43:27 AMlinkUsing timer to refresh a grid
1TonyQ220.133.44.3725nk0uiFeb 17, 2012 3:17:34 AMlinkFire a event from child iframe
1TonyQ220.133.44.372eupjotFeb 3, 2012 5:04:52 AMlinkTextbox input restriction sample
1TonyQ72.21.245.2431b3nlr0Dec 20, 2011 10:09:10 AMlinkTest web core taglib in ZUL
1TonyQ198.203.175.175ofqkemDec 17, 2011 3:36:08 AMlinkLatest 10 Fiddles :
Messagebox YES/NO example
2guest188.114.110.41usaoqeJan 18, 2021 12:00:12 PMlinkMessagebox YES/NO example
1guest188.114.110.41usaoqeJan 18, 2021 11:59:57 AMlinkInclude SRC change on button click
1guest188.114.110.42ne3uf4Jan 18, 2021 10:06:35 AMlinkRepVida
3guest172.68.178.58op70anJan 17, 2021 11:42:07 PMlinkRepVida
2guest172.68.178.88op70anJan 17, 2021 11:24:10 PMlinkRepVida
1guest172.68.178.88op70anJan 17, 2021 10:40:22 PMlinkhide button with mouse over
1guest162.158.210.156sgl690Jan 17, 2021 10:22:55 AMlinkResize Window
39guest188.114.110.4158j1fuJan 15, 2021 11:49:26 AMlinkResize Window
38guest188.114.110.4158j1fuJan 15, 2021 11:49:06 AMlinkPDF Viewer in ZK using Iframe
129guest172.69.33.2353ojd4ogJan 15, 2021 5:49:16 AMlinkupload canvas/paste
13cor3000172.68.255.803g4588eJul 8, 2020 4:09:46 AMlinkresources
index.zulzul<zk xmlns:n="native">
<script src="imagehandling.js"/>
<style>
.focussablePasteArea {
background-color: pink;
}
.focussablePasteArea:focus {
outline: 2px auto black;
}
</style>
<window border="normal" title="hello" apply="pkg$.TestComposer">
<n:canvas width="400px" height="300px" id="mycanvas"></n:canvas>
</window>
</zk>
TestComposer.javajavaimport org.zkoss.zk.ui.*;
import org.zkoss.zk.ui.event.*;
import org.zkoss.zk.ui.event.EventListener;
import org.zkoss.zk.ui.util.*;
import org.zkoss.zk.ui.ext.*;
import org.zkoss.util.media.*;
import org.zkoss.zk.au.*;
import org.zkoss.zk.au.out.*;
import org.zkoss.zul.*;
import java.util.*;
public class TestComposer extends GenericForwardComposer{
public void doAfterCompose(Component comp) throws Exception {
super.doAfterCompose(comp);
Image testOutput = new Image();
EventListener<Event> imageUploadListener = new EventListener() {
public void onEvent(Event event) {
Map data = (Map) event.getData();
Clients.log(data.toString());
List<org.zkoss.image.Image> uploads = (List<org.zkoss.image.Image>) desktop.removeAttribute(event.getTarget().getUuid() + "." + data.get("sid"));
//use uploads.get(0).getByteData() / getStreamData() to get the actual data
testOutput.setContent(uploads.get(0));
}
};
comp.appendChild(new Separator());
Button drawButton = new Button("draw");
drawButton.setWidgetListener("onClick", "draw(document.getElementById('mycanvas'));");
comp.appendChild(drawButton);
Button uploadButton = new Button("upload");
uploadButton.setWidgetListener("onClick", "uploadCanvas(this, document.getElementById('mycanvas'));");
uploadButton.addEventListener("onImageUpload", imageUploadListener);
comp.appendChild(uploadButton);
Div pasteArea = new Div();
pasteArea.setWidth("200px");
pasteArea.setHeight("40px");
pasteArea.setSclass("focussablePasteArea");
pasteArea.setTabindex(0);
pasteArea.appendChild(new Label("focus & paste image here"));
pasteArea.setWidgetListener("onBind", "initPasteImage(this);"); //initialize client side paste listener
pasteArea.addEventListener("onImageUpload", imageUploadListener);
comp.appendChild(pasteArea);
comp.appendChild(new Separator());
comp.appendChild(new Label("Test Output"));
comp.appendChild(testOutput);
}
}
imagehandling.jsjavascriptfunction draw(canvas) {
var context = canvas.getContext("2d");
context.fillStyle = "#000000";
context.fillRect(0, 0, 400, 300);
context.fillStyle = "#ff0000";
context.fillRect(50, 50, 300, 200);
}
var sidCounter = 0;
function uploadCanvas(wgt, canvas) {
var blob = zUtl.convertDataURLtoBlob(canvas.toDataURL('image/png'));
uploadImage(wgt, blob);
}
function initPasteImage(wgt) {
wgt.$n().addEventListener('paste', function(e) {
// adapted from: https://stackoverflow.com/questions/6333814/how-does-the-paste-image-from-clipboard-functionality-work-in-gmail-and-google-c
var items = (event.clipboardData || event.originalEvent.clipboardData).items;
console.log(JSON.stringify(items)); // will give you the mime types
// find pasted image among pasted items
var blob = null;
for (var i = 0; i < items.length; i++) {
if (items[i].type.indexOf("image") === 0) {
blob = items[i].getAsFile();
}
}
// load image if there is a pasted image
if (blob !== null) {
uploadImage(wgt, blob);
} else {
zk.error('no image item found in clipboard items');
}
});
}
function uploadImage(wgt, blob) {
var formData = new FormData();
var xhr = new XMLHttpRequest();
var sid = sidCounter++;
formData.append('file', blob);
xhr.onload = function (e) {
if (this.readyState === 4) {
if (this.status === 200) {
wgt.fire('onImageUpload', {sid: sid}, {toServer: true});
} else {
zk.error(xhr.statusText);
}
}
};
zk.UploadUtils.ajaxUpload(wgt, xhr, formData, sid);
}