WebBrowser/Tools/Scripts.py

changeset 6127
128d9567a533
parent 6048
82ad8ec9548c
child 6129
049ab6ad3144
--- a/WebBrowser/Tools/Scripts.py	Fri Feb 09 19:44:25 2018 +0100
+++ b/WebBrowser/Tools/Scripts.py	Sat Feb 10 17:24:42 2018 +0100
@@ -27,41 +27,49 @@
     @rtype str
     """
     source = """
-        (function() {{
-            {0}
-            
-            function registerExternal(e) {{
-                window.external = e;
-                if (window.external) {{
-                    var event = document.createEvent('Event');
-                    event.initEvent('_eric_external_created', true, true);
-                    document.dispatchEvent(event);
-                }}
-            }}
-            
-            if (self !== top) {{
-                if (top.external)
+(function() {{
+    {0}
+    
+    function registerExternal(e) {{
+        window.external = e;
+        if (window.external) {{
+            var event = document.createEvent('Event');
+            event.initEvent('_eric_external_created', true, true);
+            document.dispatchEvent(event);
+        }}
+    }}
+    
+    if (self !== top) {{
+        if (top.external)
+            registerExternal(top.external);
+        else
+            top.document.addEventListener(
+                '_eric_external_created', function() {{
                     registerExternal(top.external);
-                else
-                    top.document.addEventListener(
-                        '_eric_external_created', function() {{
-                            registerExternal(top.external);
-                    }});
-                return;
-            }}
+            }});
+        return;
+    }}
 
-            function registerWebChannel() {{
-                try {{
-                   new QWebChannel(qt.webChannelTransport, function(channel) {{
-                        registerExternal(channel.objects.eric_object);
-                   }});
-                }} catch (e) {{
-                    setTimeout(registerWebChannel, 100);
+    function registerWebChannel() {{
+        try {{
+           new QWebChannel(qt.webChannelTransport, function(channel) {{
+                registerExternal(channel.objects.eric_object);
+                var external = channel.objects.eric_object;
+                external.extra = {{}};
+                for (var key in channel.objects) {{
+                    if (key != 'eric_object' && key.startsWith('eric_')) {{
+                        external.extra[key.substr(3)] = channel.objects[key];
+                    }}
                 }}
-            }}
-            registerWebChannel();
+                registerExternal(external);
+           }});
+        }} catch (e) {{
+            setTimeout(registerWebChannel, 100);
+        }}
+    }}
+    registerWebChannel();
 
-        }})()"""
+}})()"""
     
     return source.format(readAllFileContents(":/javascript/qwebchannel.js"))
 
@@ -76,12 +84,12 @@
     @rtype str
     """
     source = """
-        (function() {{
-            var css = document.createElement('style');
-            css.setAttribute('type', 'text/css');
-            css.appendChild(document.createTextNode('{0}'));
-            document.getElementsByTagName('head')[0].appendChild(css);
-        }})()"""
+(function() {{
+    var css = document.createElement('style');
+    css.setAttribute('type', 'text/css');
+    css.appendChild(document.createTextNode('{0}'));
+    document.getElementsByTagName('head')[0].appendChild(css);
+}})()"""
     
     style = css.replace("'", "\\'").replace("\n", "\\n")
     return source.format(style)
@@ -97,30 +105,30 @@
     @rtype str
     """
     source = """
-        (function() {{
-            var e = document.elementFromPoint({0}, {1});
-            if (!e || e.tagName != 'INPUT')
-                return;
-            var fe = e.parentElement;
-            while (fe) {{
-                if (fe.tagName == 'FORM')
-                    break;
-                fe = fe.parentElement;
-            }}
-            if (!fe)
-                return;
-            var res = {{
-                method: fe.method.toLowerCase(),
-                action: fe.action,
-                inputName: e.name,
-                inputs: [],
-            }};
-            for (var i = 0; i < fe.length; ++i) {{
-                var input = fe.elements[i];
-                res.inputs.push([input.name, input.value]);
-            }}
-            return res;
-        }})()"""
+(function() {{
+    var e = document.elementFromPoint({0}, {1});
+    if (!e || e.tagName != 'INPUT')
+        return;
+    var fe = e.parentElement;
+    while (fe) {{
+        if (fe.tagName == 'FORM')
+            break;
+        fe = fe.parentElement;
+    }}
+    if (!fe)
+        return;
+    var res = {{
+        method: fe.method.toLowerCase(),
+        action: fe.action,
+        inputName: e.name,
+        inputs: [],
+    }};
+    for (var i = 0; i < fe.length; ++i) {{
+        var input = fe.elements[i];
+        res.inputs.push([input.name, input.value]);
+    }}
+    return res;
+}})()"""
     return source.format(pos.x(), pos.y())
 
 
@@ -132,18 +140,18 @@
     @rtype str
     """
     source = """
-        (function() {
-            var out = [];
-            var imgs = document.getElementsByTagName('img');
-            for (var i = 0; i < imgs.length; ++i) {
-                var e = imgs[i];
-                out.push({
-                    src: e.src,
-                    alt: e.alt
-                });
-            }
-            return out;
-        })()"""
+(function() {
+    var out = [];
+    var imgs = document.getElementsByTagName('img');
+    for (var i = 0; i < imgs.length; ++i) {
+        var e = imgs[i];
+        out.push({
+            src: e.src,
+            alt: e.alt
+        });
+    }
+    return out;
+})()"""
     return source
 
 
@@ -155,20 +163,20 @@
     @rtype str
     """
     source = """
-        (function() {
-            var out = [];
-            var meta = document.getElementsByTagName('meta');
-            for (var i = 0; i < meta.length; ++i) {
-                var e = meta[i];
-                out.push({
-                    name: e.getAttribute('name'),
-                    content: e.getAttribute('content'),
-                    httpequiv: e.getAttribute('http-equiv'),
-                    charset: e.getAttribute('charset')
-                });
-            }
-            return out;
-        })()"""
+(function() {
+    var out = [];
+    var meta = document.getElementsByTagName('meta');
+    for (var i = 0; i < meta.length; ++i) {
+        var e = meta[i];
+        out.push({
+            name: e.getAttribute('name'),
+            content: e.getAttribute('content'),
+            httpequiv: e.getAttribute('http-equiv'),
+            charset: e.getAttribute('charset')
+        });
+    }
+    return out;
+})()"""
     return source
 
 
@@ -180,20 +188,20 @@
     @rtype str
     """
     source = """
-        (function() {
-            var out = [];
-            var links = document.getElementsByTagName('link');
-            for (var i = 0; i < links.length; ++i) {
-                var e = links[i];
-                if (e.type == 'application/opensearchdescription+xml') {
-                    out.push({
-                        url: e.getAttribute('href'),
-                        title: e.getAttribute('title')
-                    });
-                }
-            }
-            return out;
-        })()"""
+(function() {
+    var out = [];
+    var links = document.getElementsByTagName('link');
+    for (var i = 0; i < links.length; ++i) {
+        var e = links[i];
+        if (e.type == 'application/opensearchdescription+xml') {
+            out.push({
+                url: e.getAttribute('href'),
+                title: e.getAttribute('title')
+            });
+        }
+    }
+    return out;
+})()"""
     return source
 
 
@@ -209,21 +217,21 @@
     @rtype str
     """
     source = """
-        (function() {{
-            var form = document.createElement('form');
-            form.setAttribute('method', 'POST');
-            form.setAttribute('action', '{0}');
-            var val;
-            {1}
-            form.submit();
-        }})()"""
+(function() {{
+    var form = document.createElement('form');
+    form.setAttribute('method', 'POST');
+    form.setAttribute('action', '{0}');
+    var val;
+    {1}
+    form.submit();
+}})()"""
     
     valueSource = """
-        val = document.createElement('input');
-        val.setAttribute('type', 'hidden');
-        val.setAttribute('name', '{0}');
-        val.setAttribute('value', '{1}');
-        form.appendChild(val);"""
+val = document.createElement('input');
+val.setAttribute('type', 'hidden');
+val.setAttribute('name', '{0}');
+val.setAttribute('value', '{1}');
+form.appendChild(val);"""
     
     values = ""
     query = QUrlQuery(data)
@@ -243,68 +251,68 @@
     @rtype str
     """
     source = """
-        (function() {
-            function findUsername(inputs) {
-                var usernameNames = ['user', 'name', 'login'];
-                for (var i = 0; i < usernameNames.length; ++i) {
-                    for (var j = 0; j < inputs.length; ++j)
-                        if (inputs[j].type == 'text' &&
-                            inputs[j].value.length &&
-                            inputs[j].name.indexOf(usernameNames[i]) != -1)
-                            return inputs[j].value;
-                }
-                for (var i = 0; i < inputs.length; ++i)
-                    if (inputs[i].type == 'text' && inputs[i].value.length)
-                        return inputs[i].value;
-                for (var i = 0; i < inputs.length; ++i)
-                    if (inputs[i].type == 'email' && inputs[i].value.length)
-                        return inputs[i].value;
-                return '';
+(function() {
+    function findUsername(inputs) {
+        var usernameNames = ['user', 'name', 'login'];
+        for (var i = 0; i < usernameNames.length; ++i) {
+            for (var j = 0; j < inputs.length; ++j)
+                if (inputs[j].type == 'text' &&
+                    inputs[j].value.length &&
+                    inputs[j].name.indexOf(usernameNames[i]) != -1)
+                    return inputs[j].value;
+        }
+        for (var i = 0; i < inputs.length; ++i)
+            if (inputs[i].type == 'text' && inputs[i].value.length)
+                return inputs[i].value;
+        for (var i = 0; i < inputs.length; ++i)
+            if (inputs[i].type == 'email' && inputs[i].value.length)
+                return inputs[i].value;
+        return '';
+    }
+    
+    function registerForm(form) {
+        form.addEventListener('submit', function() {
+            var form = this;
+            var data = '';
+            var password = '';
+            var inputs = form.getElementsByTagName('input');
+            for (var i = 0; i < inputs.length; ++i) {
+                var input = inputs[i];
+                var type = input.type.toLowerCase();
+                if (type != 'text' && type != 'password' &&
+                    type != 'email')
+                    continue;
+                if (!password && type == 'password')
+                    password = input.value;
+                data += encodeURIComponent(input.name);
+                data += '=';
+                data += encodeURIComponent(input.value);
+                data += '&';
             }
-            
-            function registerForm(form) {
-                form.addEventListener('submit', function() {
-                    var form = this;
-                    var data = '';
-                    var password = '';
-                    var inputs = form.getElementsByTagName('input');
-                    for (var i = 0; i < inputs.length; ++i) {
-                        var input = inputs[i];
-                        var type = input.type.toLowerCase();
-                        if (type != 'text' && type != 'password' &&
-                            type != 'email')
-                            continue;
-                        if (!password && type == 'password')
-                            password = input.value;
-                        data += encodeURIComponent(input.name);
-                        data += '=';
-                        data += encodeURIComponent(input.value);
-                        data += '&';
-                    }
-                    if (!password)
-                        return;
-                    data = data.substring(0, data.length - 1);
-                    var url = window.location.href;
-                    var username = findUsername(inputs);
-                    external.passwordManager.formSubmitted(
-                        url, username, password, data);
-                }, true);
-            }
-            
-            for (var i = 0; i < document.forms.length; ++i)
-                registerForm(document.forms[i]);
-            
-            var observer = new MutationObserver(function(mutations) {
-                for (var i = 0; i < mutations.length; ++i)
-                    for (var j = 0; j < mutations[i].addedNodes.length; ++j)
-                        if (mutations[i].addedNodes[j].tagName == 'FORM')
-                            registerForm(mutations[i].addedNodes[j]);
-            });
-            observer.observe(document.documentElement, {
-                childList: true, subtree: true
-            });
-            
-        })()"""
+            if (!password)
+                return;
+            data = data.substring(0, data.length - 1);
+            var url = window.location.href;
+            var username = findUsername(inputs);
+            external.passwordManager.formSubmitted(
+                url, username, password, data);
+        }, true);
+    }
+    
+    for (var i = 0; i < document.forms.length; ++i)
+        registerForm(document.forms[i]);
+    
+    var observer = new MutationObserver(function(mutations) {
+        for (var i = 0; i < mutations.length; ++i)
+            for (var j = 0; j < mutations[i].addedNodes.length; ++j)
+                if (mutations[i].addedNodes[j].tagName == 'FORM')
+                    registerForm(mutations[i].addedNodes[j]);
+    });
+    observer.observe(document.documentElement, {
+        childList: true, subtree: true
+    });
+    
+})()"""
     return source
 
 
@@ -318,28 +326,28 @@
     @rtype str
     """
     source = """
-        (function() {{
-            var data = '{0}'.split('&');
-            var inputs = document.getElementsByTagName('input');
-            
-            for (var i = 0; i < data.length; ++i) {{
-                var pair = data[i].split('=');
-                if (pair.length != 2)
-                    continue;
-                var key = decodeURIComponent(pair[0]);
-                var val = decodeURIComponent(pair[1]);
-                for (var j = 0; j < inputs.length; ++j) {{
-                    var input = inputs[j];
-                    var type = input.type.toLowerCase();
-                    if (type != 'text' && type != 'password' &&
-                        type != 'email')
-                        continue;
-                    if (input.name == key)
-                        input.value = val;
-                }}
-            }}
-            
-        }})()"""
+(function() {{
+    var data = '{0}'.split('&');
+    var inputs = document.getElementsByTagName('input');
+    
+    for (var i = 0; i < data.length; ++i) {{
+        var pair = data[i].split('=');
+        if (pair.length != 2)
+            continue;
+        var key = decodeURIComponent(pair[0]);
+        var val = decodeURIComponent(pair[1]);
+        for (var j = 0; j < inputs.length; ++j) {{
+            var input = inputs[j];
+            var type = input.type.toLowerCase();
+            if (type != 'text' && type != 'password' &&
+                type != 'email')
+                continue;
+            if (input.name == key)
+                input.value = val;
+        }}
+    }}
+    
+}})()"""
     
     data = bytes(data).decode("utf-8")
     data = data.replace("'", "\\'")
@@ -356,12 +364,12 @@
     @rtype str
     """
     source = """
-        (function() {{
-            var css = document.createElement('style');
-            css.setAttribute('type', 'text/css');
-            css.appendChild(document.createTextNode('{0}'));
-            document.getElementsByTagName('head')[0].appendChild(css);
-            }})()"""
+(function() {{
+    var css = document.createElement('style');
+    css.setAttribute('type', 'text/css');
+    css.appendChild(document.createTextNode('{0}'));
+    document.getElementsByTagName('head')[0].appendChild(css);
+    }})()"""
     style = css.replace("'", "\\'").replace("\n", "\\n")
     return source.format(style)
 
@@ -378,22 +386,22 @@
     @rtype str
     """
     source = """
-        (function() {
-            var out = [];
-            var links = document.getElementsByTagName('link');
-            for (var i = 0; i < links.length; ++i) {
-                var e = links[i];
-                if ((e.rel == 'alternate') &&
-                    ((e.type == 'application/atom+xml') ||
-                     (e.type == 'application/rss+xml')
-                    )
-                   ) {
-                    out.push({
-                        url: e.getAttribute('href'),
-                        title: e.getAttribute('title')
-                    });
-                }
-            }
-            return out;
-        })()"""
+(function() {
+    var out = [];
+    var links = document.getElementsByTagName('link');
+    for (var i = 0; i < links.length; ++i) {
+        var e = links[i];
+        if ((e.rel == 'alternate') &&
+            ((e.type == 'application/atom+xml') ||
+             (e.type == 'application/rss+xml')
+            )
+           ) {
+            out.push({
+                url: e.getAttribute('href'),
+                title: e.getAttribute('title')
+            });
+        }
+    }
+    return out;
+})()"""
     return source

eric ide

mercurial