Gtk = imports.gi.Gtk;
GLib = imports.gi.GLib;
WebKit = imports.gi.WebKit;
+Soup = imports.gi.Soup;
TabbedBrowser = imports.TabbedBrowser;
BrowserSettings = imports.BrowserSettings;
{
// Private
-
+ var sess = WebKit.get_default_session();
+ sess.proxy_uri = new Soup.URI.c_new('http://localhost:3128');
var _t = this;
var tab = BrowserTab;
print("calling update title");
if(title.length > 25)
title = title.slice(0,25) + "...";
-
+
tab.get_tab_label().label = title;
};
+
- var cleanClasses = function (document) {
- // should do it for all rules???
-
- //var rules = document.style_sheets[document.styleSheets.length-1].cssRules;
- //document.style_sheets.item(i).css_rules
-
- var stylesheets = document.style_sheets;
- print("stylesheets length:" + stylesheets.length);
- var sheets = [];
- for (var si = 0; si < stylesheets.length; si++) {
- sheets.push(stylesheets.item(si));
- }
-
- var els = document.query_selector_all('link');
- for (var i = 0;i<els.length;i++) {
- if (els.item(i).get_attribute('type') == 'text/css') {
- print("ADD sylesheet" + els.item(i).get_attribute('href'))
- sheets.push(els.item(i).sheet);
- }
- }
-
-
-
- for (var si = 0; si < sheets.length; si++) {
-
- var rules = sheets[si].get_css_rules();
-
- print('stylesheet' + sheets[si]);
- print('media:' + sheets[si].get_media());
- print('href:' + sheets[si].get_href());
- if (!rules) {
- rules = sheets[si].get_css_rules();
- print('get_rules' +sheets[si].get_rules())
- print('get_css_rules' +sheets[si].get_css_rules())
-
- print('owner_rule' +sheets[si].owner_rule());
- print("MEDIA LEN:"+ sheets[si].get_media().get_length());
- }
- print('RULES: ' + rules);
-
-
- print("RULES LEN: " + rules.get_length());
-
- for (var idx = 0; idx < rules.length ; idx++) {
-
- var text=rules.item(idx).css_text||"{}";
-
- var selector=text.split("{")[0].trim();
-
- var style=text.split(/[\{\}]/g)[1].trim();
- print(selector +' ={ '+ style );
- var els = document.query_selector_all(selector);
-
- for (var i = 0; i<els.length; i++) {
- var elem = els.item(i);
- elem.set_attribute('style', elem.get_attribute('style' ) + style);
-
- }
- }
-
- }
- var els = document.query_selector_all('style');
- for (var i = 0;i<els.length;i++) {
- els.item(i).parent_node.remove_child(els.item(i));
- }
- var els = document.query_selector_all('link');
- for (var i = 0;i<els.length;i++) {
- els.item(i).parent_node.remove_child(els.item(i));
- }
- var els = document.query_selector_all('*');
-
- for (var i = 0; i<els.length; i++) {
- els.item(i).remove_attribute('class');
- }
-
- }
-
-
-
-
-
-
-
- var curdoc = false;
-
-
-
- var traversedom = function(web_frame) {
- //print("TRAVERSE DOM?");
-
- var dom = web_frame.get_dom_document().body;
+ var traversedom = function(doc, fn, sub ) {
+ print("TRAVERSE DOM?");
+ sub = sub || 0;
- cleanClasses(web_frame.get_dom_document());
+ var ret = '<HTML>';
+ var cb = function(s) {
+ //print("CB:" + s);
+ ret+=s;
+ };
+ cb.fn = fn;
+ cb.sub = sub +1;
+ print(doc);
+ print(doc.head);
+ print (doc.body);
- curdoc = web_frame.get_dom_document();
- var ret = '';
- //Roo.select('body > div',true).each(function(el) {
- traverseDOMTree(function(s) { ret+=s; }, dom, 1);
- //print(ret);
- return ret;
+ //Roo.select('body > div',true).each(function(el) {
+ traverseDOMTree(cb, doc.head, 1);
+ traverseDOMTree(cb, doc.body, 1);
+ //print(ret);
+ File.write(cb.fn.replace(/\.html$/, '')+ (sub ? ('.' + sub ) : '') + '.html' , ret +'</HTML>');
};
-
-
+
var traverseDOMTree = function(cb, currentElement, depth) {
if (currentElement) {
//if (currentElement.class_name.match(/roo-dynamic/)) {
// return;
//}
- print(currentElement.node_name);
+ //print(currentElement.node_name);
var j;
var nodeName = currentElement.node_name;
var tagName = currentElement.tag_name;
// Prints the node tagName, such as <A>, <IMG>, etc
var outNodeName = nodeName;
if (nodeName == 'IFRAME') {
- outNodeName = 'DIV';
+ //outNodeName = 'DIV';
}
if (tagName) {
for(i = 0; i < currentElement.attributes.length;i++) {
var aname = currentElement.attributes.item(i).name;
-
+ //if (aname =='class' || aname == 'style') {
+ // continue;
+ //}
+ if (aname =='src' && tagName == 'IFRAME') {
+ continue;
+ }
attr.push(aname + '="' + currentElement.attributes.item(i).value + '"' );
}
-
+ if (tagName == 'IFRAME') {
+ attr.push('src="' + File.basename(cb.fn).replace(/\.html$/, '')+ '.' + cb.sub + '.html"' );
+ }
+
+ //if (nodeName == 'IFRAME') {
+ // attr.push('src="' + currentElement.attributes.item(i).value + embeded_file '"' );
+ //}
+
+ //var style = elClassToStyle(currentElement);
+ //if (style.length) {
+ // attr.push('style="' + style + '"' );
+ //}
+
//if (depth > 1000 && (tagName == 'BODY' || tagName == 'HEAD' )) {
// cb("<DIV"+ ( attr.length ? (' ' + attr.join(' ') ) : '') + ">");
if (nodeName == 'IFRAME') {
- cleanClasses(currentElement.content_document);
- //traverseDOMTree(cb, currentElement.content_document.head, depth+1000);
- traverseDOMTree(cb, currentElement.content_document.body, depth+1000);
-
+
+ traversedom(currentElement.content_document, cb.fn, cb.sub )
+ cb.sub++;
+ cb("</IFRAME>");
return;
}
// Formatting code (indent the tree so it looks nice on the screen)
if (currentElementChild.node_name == '#text') {
- cb(currentElementChild.node_value);
+ // if (currentElementChild.node_value.length) {
+ cb(currentElementChild.node_value);
+ // }
+
i++;
currentElementChild=currentElement.child_nodes.item(i);
continue;
}
allText = false;
- cb("\n");
- for (j = 0; j < depth; j++) {
+ //cb("\n");
+ //for (j = 0; j < depth; j++) {
// ¦ is just a vertical line
- cb(" ");
- }
+ // cb(" ");
+ //}//
// Recursively traverse the tree structure of the child node
}
if (!allText) {
// The remaining code is mostly for formatting the tree
- cb("\n");
- for (j = 0; j < depth - 1; j++) {
- cb(" ");
- }
+ //cb("\n");
+ //for (j = 0; j < depth - 1; j++) {
+ //cb(" ");
+ //}
}
if (tagName) {
// if (depth > 1000 && (tagName == 'BODY' || tagName == 'HEAD' )) {
{
tab.get_statusbar().set_status(url);
};
-
-
+
/*
this.add_inject = function(force)
var load_finished_called = false;
+ var done_print = false;
+ var queue_print = -1;
+
+
+ var load_started = function(fr)
+ {
+ print("load started");
+ queue_print++;
+ }
+
var do_print = function(web_frame) {
-
+
+ var realprint = function() {
+ print("realprint called - queue is " + queue_print);
+ if (queue_print > 0) {
+ print("ignore print - queue is " + queue_print);
+ queue_print--;
+ return;
+ }
+
+ try {
+
+ if (current_url.match(/theindependent\.sg\//) ) {
+ TabbedBrowser.browser.current_tab().get_web_view().execute_script(
+ File.read( __script_path__ + "/domains/theindependent.sg.js")
+ );
+
+ }
+ print("FETCHING");
+ //print(web_frame);
+ if (web_frame && BrowserSettings.export_filename_html ) {
+ var html = traversedom(web_frame.get_dom_document(), BrowserSettings.export_filename_html);
+ //File.write(BrowserSettings.export_filename_html, html);
+
+ }
+
+ if (!BrowserSettings.export_filename) {
+ if (!BrowserSettings.export_filename_html) {
+ print("no export filename / and html filename");
+ return;
+ }
+
+ Seed.quit();
+ }
+ var mf = _t.get_main_frame();
+
+ print("Creating paper");
+ var ar = Gtk.PaperSize.get_paper_sizes();
+ var psetup = new Gtk.PageSetup();
+ for(var i = 0; i < ar.length; i++) {
+ if (ar[i].get_name() =='iso_a2') {
+ psetup.set_paper_size(ar[i]);
+ }
+ }
+ print("doing print operation");
+ var p = new Gtk.PrintOperation({ export_filename : BrowserSettings.export_filename });
+ print("doing print operation - set page");
+
+ p.set_default_page_setup(psetup);
+
+ print("doing print operation - print_full");
+ mf.print_full(p, Gtk.PrintOperationAction.EXPORT);
+ print("made image - exiting");
+
+ Seed.quit();
+ return true;
+ } catch(e) {
+ print("error occured");
+ print(JSON.stringify(e));
+ }
+ };
+
+
+
+ if (done_print) {
+
+ print("do_print called -- while already doing this... - restarting queue...");
+ GLib.timeout_add(GLib.PRIORITY_DEFAULT, BrowserSettings.delay *1, realprint);
+
+ return;
+ }
+ done_print = true;
+ print("do_print called");
+
TabbedBrowser.browser.current_tab().get_web_view().execute_script(
- " var r = document.getElementsByTagName('link');" +
- "for (var i=0;i < r.length;i++) { " +
- "var a = r[i]; if (a.getAttribute('media') == 'screen') { a.removeAttribute('media'); } " +
- "}"
+ File.read( __script_path__ + "/domains/remove_print_css.js")
);
+ var url_p = current_url.split('/');
+ var dom = url_p[2];
+ var dom_p = url_p[2].split('.');
+ var chk = dom_p.pop();
+ chk = dom_p.pop() + '.' + chk;
- if (current_url.match(/\.coconuts\.co\//) ) {
+
+ print("CHECK: " + chk +"\n");
+ if (File.exists( __script_path__ + "/domains/" + chk + '.js')) {
+ print("INCLUDING: " + __script_path__ + "/domains/"+ chk + ".js\n");
TabbedBrowser.browser.current_tab().get_web_view().execute_script(
- File.read( __script_path__ + "/domains/coconuts.co.js")
+ File.read( __script_path__ + "/domains/"+ chk + ".js")
);
+ }
+
+
+ // motorme - requires a scroll to make content appear..
+ if (current_url.match(/\.motorme\.my\//) ) {
+ TabbedBrowser.browser.current_tab().get_web_view().execute_script("window.scrollTo(0,500);");
}
+
+
print("Delay:" + BrowserSettings.delay);
- GLib.timeout_add(GLib.PRIORITY_LOW, BrowserSettings.delay *1, function() {
-
- if (web_frame && BrowserSettings.export_filename_html ) {
- var html = traversedom(web_frame);
- File.write(BrowserSettings.export_filename_html, html);
-
- }
-
- if (!BrowserSettings.export_filename) {
- Seed.quit();
- }
- var mf = _t.get_main_frame();
-
- var ar = Gtk.PaperSize.get_paper_sizes();
- var psetup = new Gtk.PageSetup();
- for(var i = 0; i < ar.length; i++) {
- if (ar[i].get_name() =='iso_a2') {
- psetup.set_paper_size(ar[i]);
- }
- }
-
- var p = new Gtk.PrintOperation({ export_filename : BrowserSettings.export_filename });
- p.set_default_page_setup(psetup);
- mf.print_full(p, Gtk.PrintOperationAction.EXPORT);
- print("made image - exiting");
-
- Seed.quit();
- return true;
- });
+
+
+ GLib.timeout_add(GLib.PRIORITY_DEFAULT, BrowserSettings.delay *1, realprint);
}
load_finished_called = true;
-
-// if(document.location.host=='weibo.com') {
-// // clear login dialog from weibo.
-// //check and hidden the login dialog and overlay .....
-// var els = document.querySelectorAll('div[node-type]');
-// var bbc = [];
-// for (i = 0; i < els.length; i++) {
-// if (els[i].hasAttribute('node-type')) {
-// if(els[i].getAttribute('node-type') == 'outer'){
-// bbc.push(els[i]);
-// }
-// }
-// }
-// for (i = 0; i < bbc.length; i++) {// hide all the outer.....
-// bbc[i].style.display = 'none';
-// }
-//
-// //try to login
-// if(document.location.pathname == '/login.php'){
-//
-// // fills in the user name and password
-// var els = document.querySelectorAll('input[node-type]');
-//
-// for (i = 0; i < els.length; i++) {
-// if (els[i].hasAttribute('node-type')) {
-// if(els[i].getAttribute('node-type') == 'username'){
-// els[i].value = BrowserSettings.username;
-// }
-// if(els[i].getAttribute('node-type') == 'password'){
-// els[i].value = BrowserSettings.passwd;
-// }
-// }
-// }
-//
-//
-// // simulating click event to login ....
-// var elss = document.querySelectorAll('a[node-type]');
-//
-// for (i = 0; i < elss.length; i++) {
-// if (elss[i].hasAttribute('node-type')) {
-// if(elss[i].getAttribute('node-type') == 'submitBtn'){
-// elss[i].click();
-// }
-// }
-// }
-//
-//
-// }
-//
-// }
-
-
- // clear login dialog from weibo.
-// TabbedBrowser.browser.current_tab().get_web_view().execute_script(
-// " if (document.location.host=='weibo.com') { " +
-// " try { " +
-// " var a = document.getElementsByClassName('W_layer')[0]; " +
-// " a.parentNode.removeChild(a.previousSibling); " +
-// " a.parentNode.removeChild(a); " +
-// " } catch(e) { } } " );
-
-
- return;
- GLib.timeout_add(GLib.PRIORITY_LOW, BrowserSettings.delay, function() {
-
- var mf = _t.get_main_frame();
-
- var ar = Gtk.PaperSize.get_paper_sizes();
- var psetup = new Gtk.PageSetup();
- for(var i = 0; i < ar.length; i++) {
- if (ar[i].get_name() =='iso_a2') {
- psetup.set_paper_size(ar[i]);
- }
- }
-
- var p = new Gtk.PrintOperation({ export_filename : BrowserSettings.export_filename });
- p.set_default_page_setup(psetup);
- mf.print_full(p, Gtk.PrintOperationAction.EXPORT);
- print("made image - exiting");
-
- Seed.quit();
- return true;
- });
-
- return;
+
};
-
- var load_committed = function (web_view, web_frame)
- {
- print("load commited");
-
- update_url(web_view, web_frame);
-
- // call load finished after 20seconds??
- // so even if it never complets we try and print the thing.
- GLib.timeout_add(GLib.PRIORITY_LOW, 40000, function() {
- print("load commited - 3000 ms?");
- load_finished();
- });
-
- };
+
var clicked_link = function (web_view, web_frame, request,
action, decision, window)
//this.signal.title_changed.connect(update_title);
//this.signal.load_committed.connect(load_committed);
this.signal.load_finished.connect(load_finished);
+ this.signal.load_started.connect(load_started);
// For some reason, this segfaults seed in the instance init closure handler