diff --git a/src/js/background.js b/src/js/background.js
index ef0ec53..36cedc5 100644
--- a/src/js/background.js
+++ b/src/js/background.js
@@ -112,10 +112,12 @@ core.Bookmarks.getItem = function(bookmarkItem, path){ // Return BookmarkItem fr
core.SiteInfos = {} // Siteinfos helper object
core.SiteInfos.loadInfos = function(url, args, callback){ // args: { icon: false; screenshot: false }, callback( { url, title, (/!\ Not handled now)icon, screenshot } || error: {} )
- function pageLoaded(last){
+ function pageLoaded(){
+ if(!iframe) return;
var docTitle = iframe.contentWindow.document.title;
var docIcon = null;
var docScreenshot = null;
+ if(docTitle == '') docTitle = url;
if(args && args.icon){
//
}
@@ -134,26 +136,29 @@ core.SiteInfos.loadInfos = function(url, args, callback){ // args: { icon: false
docScreenshot = canvas.toDataURL();
}
- if(last) document.body.removeChild(iframe);
+ document.body.removeChild(iframe);
+ iframe = null;
if(callback) callback({ url: url, title: docTitle, icon: docIcon, screenshot:docScreenshot });
}
- var previewWidth = 1200; // Need to be linked to settings
+ var previewWidth = 1200; // Need to be linked to settings
var previewHeight = 710; // Need to be linked to settings
- var iframe = document.createElement('iframe');
- iframe.width = previewWidth
- iframe.height = previewHeight
- iframe.style.position = 'absolute';
- iframe.style.visibility = 'hidden';
+ var iframe;
var xmlHttp = new XMLHttpRequest();
xmlHttp.timeout = 10000
xmlHttp.open('GET', url, true);
xmlHttp.onload = function(){
+ iframe = document.createElement('iframe');
+ iframe.referrerPolicy = "unsafe-url";
+ iframe.width = previewWidth
+ iframe.height = previewHeight
+ iframe.style.position = 'absolute';
+ iframe.style.visibility = 'hidden';
document.body.appendChild(iframe);
- iframe.srcdoc = xmlHttp.responseText.replace('
', '');
- //iframe.srcdoc = xmlHttp.responseText.replace('', '');
- setTimeout(function(){ pageLoaded(); }, 2000); // /!\ Caution function can be shortcuted and sendtimeout is not the best way
- setTimeout(function(){ pageLoaded(true); }, 6000); // /!\ Caution function can be shortcuted and sendtimeout is not the best way
+ var content = xmlHttp.responseText.replace('', '');
+ iframe.srcdoc = content;
+ iframe.onload = function(){ pageLoaded(); }
+ setTimeout(function(){ pageLoaded(); }, 6000);
}
xmlHttp.onabort = function(){ if(callback) callback(); }
xmlHttp.onerror = function(){ if(callback) callback(); }
@@ -230,6 +235,8 @@ core.GridNodes.getNode = function(gridNode, path){ // Return GridNode from RootG
return null;
}
core.GridNodes.refreshNode = function(gridNode, callback){ // Refresh content of a GridNode
+ if(gridNode.__isLoading == true) return;
+ gridNode.__isLoading = true;
core.SiteInfos.loadInfos(gridNode.url, { screenshot: true }, function(infos){
if(infos){
gridNode.title = infos.title;
@@ -239,6 +246,7 @@ core.GridNodes.refreshNode = function(gridNode, callback){ // Refresh content of
}).then(function(bookmarkItem){}, function(){});
core.Settings.save();
}
+ gridNode.__isLoading = false;
if(callback) callback(infos);
});
}
@@ -270,6 +278,33 @@ core.GridNodes.setNodeIndex = function(gridNode, index, newIndex, callback){ //
if(callback) callback();
browser.runtime.sendMessage({ command: 'gridNodesSynced'}).then(function(){}, function(){});
}
+core.GridNodes.capturePage = function(gridNode, callback){
+ browser.tabs.create({url: gridNode.url, active: false}).then(function(tab){
+ setTimeout(function(){
+ tab.active = true;
+ browser.tabs.update(tab.id, {active: true}).then(function(){
+ browser.tabs.captureVisibleTab().then(function(img){
+ //gridNode.title = tab.title
+ browser.tabs.remove(tab.id);
+ gridNode.image = img;
+ browser.bookmarks.update(gridNode.id, {
+ title: gridNode.title
+ }).then(function(bookmarkItem){}, function(){});
+ core.Settings.save();
+ if(callback) callback();
+ browser.runtime.sendMessage({ command: 'gridNodesSynced'}).then(function(){}, function(){});
+ }, function(){
+ browser.tabs.remove(tab.id);
+ if(callback) callback();
+ });
+ }, function(){
+ if(callback) callback();
+ });
+ }, 4000);
+ }, function(){
+ if(callback) callback();
+ });
+}
// Public functions
app.refreshNode = core.GridNodes.refreshNode;
@@ -278,3 +313,4 @@ app.createFolder = core.GridNodes.createFolder;
app.createBookmark = core.GridNodes.createBookmark;
app.deleteNode = core.GridNodes.delete;
app.setNodeIndex = core.GridNodes.setNodeIndex;
+app.capturePage = core.GridNodes.capturePage;
\ No newline at end of file
diff --git a/src/js/dial.js b/src/js/dial.js
index 21c0d4a..3ac8138 100644
--- a/src/js/dial.js
+++ b/src/js/dial.js
@@ -108,13 +108,19 @@ dial.initMenus = function(){
dial.ItemMenuCreateFolder = document.createElement('menuitem');
dial.ItemMenuCreateFolder.label = browser.i18n.getMessage("menuAddFolder");
dial.ItemMenuCreateFolder.onclick = dial.createFolder;
+ /*
dial.ItemMenuEdit = document.createElement('menuitem');
dial.ItemMenuEdit.label = 'Edit';
//dial.ItemMenuEdit.onclick = dial.test;
+ */
dial.ItemMenuRefresh = document.createElement('menuitem');
- dial.ItemMenuRefresh.label = 'Refresh';
dial.ItemMenuRefresh.label = browser.i18n.getMessage("menuRefreshItem");
dial.ItemMenuRefresh.onclick = dial.refreshNode;
+
+ dial.ItemMenuCapture = document.createElement('menuitem');
+ dial.ItemMenuCapture.label = 'Capture' // browser.i18n.getMessage("menuRefreshItem");
+ dial.ItemMenuCapture.onclick = dial.capturePage;
+
dial.ItemMenuDelete = document.createElement('menuitem');
dial.ItemMenuDelete.label = browser.i18n.getMessage("menuDeleteItem");
dial.ItemMenuDelete.onclick = dial.deleteNode;
@@ -123,6 +129,7 @@ dial.initMenus = function(){
dial.ItemMenu.appendChild(document.createElement('hr'));
//dial.ItemMenu.appendChild(dial.ItemMenuEdit);
dial.ItemMenu.appendChild(dial.ItemMenuRefresh);
+ dial.ItemMenu.appendChild(dial.ItemMenuCapture);
dial.ItemMenu.appendChild(dial.ItemMenuDelete);
dial.Body.appendChild(dial.ItemMenu);
}
@@ -307,4 +314,10 @@ dial.deleteNode = function(){
if(confirm(browser.i18n.getMessage("deleteItemConfimation", dial._selectedItem.Node.title))){
app.deleteNode(dial._selectedItem.Node.id);
}
+}
+
+dial.capturePage = function(){
+ app.capturePage(dial._selectedItem.Node, function(){
+ //
+ })
}
\ No newline at end of file
diff --git a/src/manifest.json b/src/manifest.json
index dcc63f9..083918d 100644
--- a/src/manifest.json
+++ b/src/manifest.json
@@ -2,7 +2,7 @@
"manifest_version": 2,
"name": "Quick Dial",
- "version": "0.0.5",
+ "version": "0.0.1",
"description": "__MSG_extensionDescription__",
@@ -18,6 +18,8 @@
"tabs",
""
],
+
+ "content_security_policy": "default-src * moz-extension: 'self' 'unsafe-inline' 'unsafe-eval'; script-src * moz-extension: 'self' 'unsafe-inline' 'unsafe-eval'; child-src * moz-extension: 'self' 'unsafe-inline' 'unsafe-eval'; frame-src * moz-extension: 'self' 'unsafe-inline' 'unsafe-eval'; object-src * moz-extension: 'self' 'unsafe-inline' 'unsafe-eval'; style-src * moz-extension: 'self' 'unsafe-inline' 'unsafe-eval'",
"background": {
"scripts": ["js/background.js"]
diff --git a/src/src.zip b/src/src.zip
new file mode 100644
index 0000000..8f68dca
Binary files /dev/null and b/src/src.zip differ