jaroslav@1941: /** jaroslav@1941: * Back 2 Browser Bytecode Translator jaroslav@1941: * Copyright (C) 2012-2015 Jaroslav Tulach jaroslav@1941: * jaroslav@1941: * This program is free software: you can redistribute it and/or modify jaroslav@1941: * it under the terms of the GNU General Public License as published by jaroslav@1941: * the Free Software Foundation, version 2 of the License. jaroslav@1941: * jaroslav@1941: * This program is distributed in the hope that it will be useful, jaroslav@1941: * but WITHOUT ANY WARRANTY; without even the implied warranty of jaroslav@1941: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the jaroslav@1941: * GNU General Public License for more details. jaroslav@1941: * jaroslav@1941: * You should have received a copy of the GNU General Public License jaroslav@1941: * along with this program. Look for COPYING file in the top folder. jaroslav@1941: * If not, see http://opensource.org/licenses/GPL-2.0. jaroslav@1941: */ jaroslav@1941: package org.apidesign.bck2brwsr.kosample; jaroslav@1941: jaroslav@1941: import net.java.html.json.ComputedProperty; jaroslav@1941: import net.java.html.json.Function; jaroslav@1941: import net.java.html.json.Model; jaroslav@1941: import net.java.html.json.Property; jaroslav@1941: import org.apidesign.bck2brwsr.kosample.js.Dialogs; jaroslav@1941: jaroslav@1941: /** Model annotation generates class Data with jaroslav@1941: * one message property, boolean property and read only words property jaroslav@1941: */ jaroslav@1941: @Model(className = "Data", targetId="", properties = { jaroslav@1941: @Property(name = "message", type = String.class), jaroslav@1941: @Property(name = "rotating", type = boolean.class) jaroslav@1941: }) jaroslav@1941: final class DataModel { jaroslav@1941: @ComputedProperty static java.util.List words(String message) { jaroslav@1941: String[] arr = new String[6]; jaroslav@1941: String[] words = message == null ? new String[0] : message.split(" ", 6); jaroslav@1941: for (int i = 0; i < 6; i++) { jaroslav@1941: arr[i] = words.length > i ? words[i] : "!"; jaroslav@1941: } jaroslav@1941: return java.util.Arrays.asList(arr); jaroslav@1941: } jaroslav@1941: jaroslav@1941: @Function static void turnAnimationOn(Data model) { jaroslav@1941: model.setRotating(true); jaroslav@1941: } jaroslav@1941: jaroslav@1941: @Function static void turnAnimationOff(final Data model) { jaroslav@1941: Dialogs.confirmByUser("Really turn off?", new Runnable() { jaroslav@1941: @Override jaroslav@1941: public void run() { jaroslav@1941: model.setRotating(false); jaroslav@1941: } jaroslav@1941: }); jaroslav@1941: } jaroslav@1941: jaroslav@1941: @Function static void rotate5s(final Data model) { jaroslav@1941: model.setRotating(true); jaroslav@1941: java.util.Timer timer = new java.util.Timer("Rotates a while"); jaroslav@1941: timer.schedule(new java.util.TimerTask() { jaroslav@1941: @Override jaroslav@1941: public void run() { jaroslav@1941: model.setRotating(false); jaroslav@1941: } jaroslav@1941: }, 5000); jaroslav@1941: } jaroslav@1941: jaroslav@1941: @Function static void showScreenSize(Data model) { jaroslav@1941: model.setMessage(Dialogs.screenSize()); jaroslav@1941: } jaroslav@1941: private static Data ui; jaroslav@1941: /** jaroslav@1941: * Called when the page is ready. jaroslav@1941: */ jaroslav@1941: static void onPageLoad() throws Exception { jaroslav@1941: ui = new Data(); jaroslav@1941: ui.setMessage("Hello World from HTML and Java!"); jaroslav@1941: ui.applyBindings(); jaroslav@1941: } jaroslav@1941: }