1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
|
//Copyright 2013 Endless Mobile, Inc.
const Lang = imports.lang;
const Endless = imports.gi.Endless;
const GLib = imports.gi.GLib;
const Gtk = imports.gi.Gtk;
const WebKit = imports.gi.WebKit;
// WebHelper.js must be copied somewhere in GJS's imports.searchPath
const WebHelper = imports.webhelper;
const TEST_APPLICATION_ID = 'com.endlessm.example.test-webview';
const TestApplication = new Lang.Class({
Name: 'TestApplication',
Extends: WebHelper.Application,
/* *** ACTIONS AVAILABLE FROM THE WEB VIEW *** */
_webActions: {
/* dict['name'] is the name of the page to move to */
'moveToPage': function(dict) {
print('move to page '+dict['name']);
this._pm.visible_page_name = dict['name'];
},
/* dict['msg'] is the message to display */
'showMessageFromParameter': function(dict) {
let dialog = new Gtk.MessageDialog({
buttons: Gtk.ButtonsType.CLOSE,
message_type: Gtk.MessageType.INFO,
text: dict['msg'] });
dialog.set_transient_for(this._window);
dialog.run();
dialog.destroy();
},
/* dict['id'] is the ID of the input field to use */
'showMessageFromInputField': function(dict) {
let input = this._getElementById(this._webview, dict['id']);
// WebKitDOMHTMLInputElement
let msg = input.get_value();
let dialog = new Gtk.MessageDialog({
buttons: Gtk.ButtonsType.CLOSE,
message_type: Gtk.MessageType.INFO,
text: msg });
dialog.set_transient_for(this._window);
dialog.run();
dialog.destroy();
},
/* dict['id'] is the ID of the element to use */
'addStars': function(dict) {
let e = this._getElementById(this._webview, dict['id']);
e.inner_text += '★ ';
}
},
/* *************************** */
vfunc_startup: function() {
this.parent();
this._webview = new WebKit.WebView();
let cwd = GLib.get_current_dir();
let target = cwd + '/test/smoke-tests/webview/first_page.html';
this._webview.load_uri(GLib.filename_to_uri(target, null));
this._webview.connect('notify::load-status',
Lang.bind(this, function (web_view, status) {
if (web_view.load_status == WebKit.LoadStatus.FINISHED) {
// now we translate to Brazilian Portuguese
this._translateHTML (web_view, 'pt_BR');
}
}));
this._webview.connect('navigation-policy-decision-requested',
Lang.bind(this, this._onNavigationRequested));
this._page1 = new Gtk.ScrolledWindow();
this._page1.add(this._webview);
this._page2 = new Gtk.Grid();
let back_button = new Gtk.Button({label:"Go back to page 1"});
back_button.connect('clicked', Lang.bind(this, function() {
this._pm.visible_page_name = 'page1';
}))
this._page2.add(back_button);
this._pm = new Endless.PageManager();
this._pm.set_transition_type(Endless.PageManagerTransitionType.CROSSFADE)
this._pm.add(this._page1, { name: 'page1' });
this._pm.add(this._page2, { name: 'page2' });
this._pm.visible_page = this._page1;
this._window = new Endless.Window({
application: this,
border_width: 16,
page_manager: this._pm
});
this._window.show_all();
}
});
let app = new TestApplication({ application_id: TEST_APPLICATION_ID,
flags: 0 });
app.run(ARGV);
|