summaryrefslogtreecommitdiff
path: root/test/smoke-tests/webview.js
blob: 98226f349c8fa7607cebdd08eb74dddd2c4c30f2 (plain)
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);