Skip to content

Instantly share code, notes, and snippets.

@stoikheia
Last active December 15, 2015 23:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save stoikheia/5342707 to your computer and use it in GitHub Desktop.
Save stoikheia/5342707 to your computer and use it in GitHub Desktop.
This is sample app for screen transition in Google Apps Script. This contains two approach. One method is destroy panel and generate new panel. The other method is recycling panel.
/**
* @author stoikheia@gmail.com
*
* GoogleAppScriptでの画面遷移のサンプル.
*
* appに直接UIを追加した場合、
* 画面遷移におけるUIの切り替えが屯雑になる.
*
* いずれもパネル上にUIを構築するが、
* ひとつはパネルを作り直す事で画面遷移を実現.
* もうひとつはパネルをクリアし、同じパネル上に
* 新しいUIを構築する.
*
*/
/**
* リクエスト処理.
*/
function doGet() {
return createPanelTestApp();
}
/**
* 初期状態では1のパネルを作成して表示
*
*/
function createPanelTestApp() {
var app = UiApp.createApplication();
//状態はhiddenで保持する
var hidden = app.createHidden("panelState", "1");
hidden.setId('panelState');
app.add(hidden);
createPanel1();
return app;
}
/**
* パネルを再作成してパネルの交換でUIを切り替えるイベントのボタンをパネルに追加する.
*/
function addButton4Panel(num, panel) {
var app = UiApp.getActiveApplication();
var handler = app.createServerHandler('togglePanel');
handler.addCallbackElement(app.getElementById('panelState'));
var button = app.createButton("Button" + num + "Panel");
button.addClickHandler(handler);
panel.add(button);
}
/**
* パネルをクリアしてウィジェットの交換でUIを切り替えるイベントのボタンをパネルに追加する.
*/
function addButton4Widget(num, panel) {
var app = UiApp.getActiveApplication();
var handler = app.createServerHandler('toggleWidget');
handler.addCallbackElement(app.getElementById('panelState'));
var button = app.createButton("Button" + num + "Widget");
button.addClickHandler(handler);
panel.add(button);
}
/**
* パネル1を作成してappに追加する.
*/
function createPanel1() {
var app = UiApp.getActiveApplication();
var panel = app.createAbsolutePanel();
panel.setSize("100%", "100%");
panel.setId("panel");
app.add(panel);
addButton4Panel(1, panel);
addButton4Widget(1, panel);
}
/**
* パネル2を作成してappに追加する.
*/
function createPanel2() {
var app = UiApp.getActiveApplication();
var panel = app.createAbsolutePanel();
panel.setSize("100%", "100%");
panel.setId("panel");
app.add(panel);
addButton4Panel(2, panel);
addButton4Widget(2, panel);
}
/**
* パネルを破棄して、次のパネルを作成し、appに追加するイベントハンドラ.
*/
function togglePanel(e) {
var app = UiApp.getActiveApplication();
var panelState = e.parameter.panelState;
app.remove(app.getElementById('panel'));
if(panelState == 1) {
createPanel2();
app.getElementById('panelState').setValue(2);
} else {
createPanel1();
app.getElementById('panelState').setValue(1);
}
Logger.log("togglePanel() : " + panelState);
return app;
}
/**
* パネルをクリアして、次のパネルのボタンを作成するイベントハンドラ.
*/
function toggleWidget(e) {
var app = UiApp.getActiveApplication();
var panelState = e.parameter.panelState;
var panel = app.getElementById('panel');
panel.clear();
if(panelState == 1) {
addButton4Panel(2, panel);
addButton4Widget(2, panel);
app.getElementById('panelState').setValue(2);
} else {
addButton4Panel(1, panel);
addButton4Widget(1, panel);
app.getElementById('panelState').setValue(1);
}
Logger.log("toggleWidget() : " + panelState);
return app;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment