1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 // Add event listeners once the DOM has fully loaded by listening for the
6 // `DOMContentLoaded` event on the document, and adding your listeners to
7 // specific elements when it triggers.
8 document
.addEventListener('DOMContentLoaded', function () {
9 //document.querySelector('button').addEventListener('click', testf);
10 document
.getElementById("menuItem_backupNow").addEventListener('click', menu_backupNow
);
11 //document.getElementById("menuItem_restoreNow").addEventListener('click', menu_restoreNow);
12 document
.getElementById("menuItem_options").addEventListener('click', menu_ShowOptions
);
13 document
.getElementById("menuItem_showOlderBackups").addEventListener('click', menu_ShowOlderBackups
);
14 document
.getElementById("menuItem_showAdvancedView").addEventListener('click', menu_ShowAdvancedView
);
17 initBackupsList (false /*showAll*/);
20 $( "#dialog-confirm" ).dialog({
25 "Delete all items": function() {
26 $( this ).dialog( "close" );
29 $( this ).dialog( "close" );
36 function menu_ShowOptions () {
37 chrome
.runtime
.openOptionsPage();
40 function menu_ShowAdvancedView() {
41 chrome
.tabs
.create({url
: "/advanced.html"});
44 function menu_ShowOlderBackups () {
45 // save current scrollbar position
46 //var scrollPosition = $(document).scrollTop();
48 // Re-initialize backups list
49 //initBackupsList(true /*showAll*/, function () {
50 // Update the scrollbar position to the saved one
51 // $(document).scrollTop(scrollPosition);
56 var oldestVisibleBackupItem
= $(".backupItem:last");
57 var oldestVisibleBackupItemId
= oldestVisibleBackupItem
.attr('id');
58 // the id is in the form 'div_' + backupName
59 var oldestVisibleBackupName
= oldestVisibleBackupItemId
.substring(4);
62 var backupsDiv
= document
.getElementById ('backupsDiv');
64 chrome
.storage
.local
.get(null, function(items
) {
66 if(items
.backups_list
) {
67 backupsList
= items
.backups_list
;
70 var shouldInsert
= false;
72 for (var i
= backupsList
.length
-1; i
>= 0; i
--) {
73 var backupName
= backupsList
[i
];
74 var backupObj
= items
[backupName
];
80 if (backupObj
.isAutomatic
=== undefined) {
81 backupObj
.isAutomatic
= true;
84 if (oldestVisibleBackupName
== backupName
) {
85 // found last visible item, start inserting
90 insertBackupItem(backupName
, backupObj
, false /*insertAtBeginning*/, false /*doAnimation*/);
95 // Hide the "show all" link
96 $("#showOlderBackupsDiv").hide();
101 function insertBackupItem (backupName
, backupObj
, insertAtBeginning
, doAnimation
) {
102 var backupsDiv
= document
.getElementById ('backupsDiv');
104 var restoreButtonId
= 'restoreSelectedBackup_' + backupName
;
105 var deleteButtonId
= 'deleteSelectedBackup_' + backupName
;
106 var divId
= 'div_' + backupName
;
108 var elem
= document
.createElement("div");
110 // start with hidden element (only if we are doing the animation later)
111 elem
.style
.cssText
= 'display: none';
115 elem
.className
= 'backupItem';
116 elem
.innerHTML
= '<div class="backupItemWrapper">' +
117 '<div class="backupItemContent">' +
118 '<div class="backupItemTitle">' + backupName
+ "</div>" +
119 '<div class="backupItemDetails">' +
120 'Nr. Windows:<span class="backupItemDetailsNr">' + backupObj
.windows
.length
+ '</span><br />' +
121 'Nr. Tabs:<span class="backupItemDetailsNr">' + backupObj
.totNumTabs
+ '</span>' +
124 '<div class="backupItemToolbar">' +
125 '<a id="' + restoreButtonId
+ '"><img src="icon_48.png" title="Open Windows & Tabs" style="border: 0; width: 24px; height: 24px" /></a>' +
126 '<a id="' + deleteButtonId
+ '"><img src="trash_48.png" title="Delete Backup" style="border: 0; width: 22px; height: 22px" /></a>' +
129 '<div class="backupItemFooter">' +
130 (backupObj
.isAutomatic
? '<span class="backupItemFooterAutoBackup">AUTO BACKUP</span>' :
131 '<span class="backupItemFooterManualBackup">MANUAL BACKUP</span>') +
136 //elem.innerHTML += "# Windows: " +
137 //backupsDiv.appendChild(elem);
139 var restoreFuncHandler
= (function(backupName
) {
140 return function(event
) {
141 bootbox
.confirm("Open Windows & Tabs of backup '" + backupName
+ "'?", function(confirmed
) {
143 chrome
.runtime
.sendMessage({
144 action
: 'restoreNow',
150 /*if (!confirm("Open Windows & Tabs of backup '" + backupName + "'?")) {
158 var deleteFuncHandler = function() {
161 bootbox
.confirm("Delete backup '" + backupName
+ "'?", function(confirmed
) {
163 chrome
.runtime
.sendMessage({
164 action
: 'deleteBackup',
166 }, () => updateStorageInfo());
168 //if (elem.parentNode) {
169 // elem.parentNode.removeChild(elem);
171 removeBackupItemDiv (backupName
);
178 if (insertAtBeginning
&& backupsDiv
.childNodes
.length
> 0) {
179 // some items already exist
180 var firstNode
= backupsDiv
.childNodes
[0];
181 backupsDiv
.insertBefore(elem
, firstNode
);
183 backupsDiv
.appendChild(elem
);
187 document
.getElementById(restoreButtonId
).addEventListener('click', restoreFuncHandler
);
188 document
.getElementById(deleteButtonId
).addEventListener('click', deleteFuncHandler
);
191 var divIdJQ
= jq(divId
);
192 $(divIdJQ
).slideDown(1000);
194 /*obj.animate({ height: 1, opacity: 1 }, {
196 complete: function(){obj.css('display', 'block');}
202 //$(divId).display = 'none';
203 //$(divId).slideUp();
204 //$(divId).fadeOut(1000);
205 /*var bkp = $("backupsDiv");
209 /*setTimeout( function() {
210 var obj = $("#" + divId);
217 return '#' + myid
.replace(/(:|\.| )/g,'\\$1');
220 function removeBackupItemDiv (backupName
) {
221 var divId
= 'div_' + backupName
;
222 var divIdClean
= jq(divId
);
223 var obj
= $(divIdClean
);
226 obj
.animate({ height
: 0, opacity
: 0 }, {
228 complete: function(){obj
.remove();}
231 //var backupItemDiv = document.getElementById (divId);
232 //if (backupItemDiv.parentNode) {
233 // backupItemDiv.parentNode.removeChild(backupItemDiv);
237 function initBackupsList(showAll
, callback
) {
238 var backupsDiv
= document
.getElementById ('backupsDiv');
239 //var node = backupsDiv.childNodes[0];
240 backupsDiv
.innerHTML
= '';
241 //backupsDiv.style = 'display: none';
242 //$("#backupsDiv").html("");
243 /*while (backupsDiv.hasChildNodes()) {
244 backupsDiv.removeChild(backupsDiv.lastChild);
247 $("#showOlderBackupsDiv").hide();
250 $("#backupsDiv").hide();
253 chrome
.storage
.local
.get(null, function(items
) {
254 var backupsList
= [];
255 if(items
.backups_list
) {
256 backupsList
= items
.backups_list
;
259 var numInsertedItems
= 0;
260 for (var i
= backupsList
.length
-1; i
>= 0; i
--) {
261 //for (var i = 0; i < backupsList.length; i++) {
262 var backupName
= backupsList
[i
];
263 var backupObj
= items
[backupName
];
269 if (backupObj
.isAutomatic
=== undefined) {
270 backupObj
.isAutomatic
= true;
274 if (numInsertedItems
>= 10) {
275 $("#showOlderBackupsDiv").show();
280 insertBackupItem(backupName
, backupObj
, false /*insertAtBeginning*/, false /*doAnimation*/);
286 $("#backupsDiv").slideDown();
299 function updateStorageInfo() {
300 chrome
.storage
.local
.getBytesInUse(null, function(bytesInUse
) {
302 if (bytesInUse
< 1024) {
303 storageText
= bytesInUse
.toFixed(2) + " bytes";
304 } else if (bytesInUse
< 1024 * 1024) {
305 storageText
= (bytesInUse
/ 1024).toFixed(2) + " KiB";
307 storageText
= (bytesInUse
/ (1024 * 1024)).toFixed(2) + " MiB";
310 var storageSpan
= document
.getElementById("storageSpan");
311 storageSpan
.innerHTML
= storageText
;
315 var lastTimeBackupNowClicked
= 0;
317 function menu_backupNow() {
318 // Ignore clicks if less than 1 second has passed since last click (avoids rapid useless backups)
319 if (lastTimeBackupNowClicked
!= 0) {
320 var diffTime
= Math
.abs(new Date().getTime() - lastTimeBackupNowClicked
);
321 if (diffTime
< 1000) {
326 lastTimeBackupNowClicked
= new Date().getTime();
328 chrome
.runtime
.sendMessage({
329 action
: 'backupNowManual',
330 }, function({success
, backupName
, backupObj
}) {
332 //updateBackupsList();
333 insertBackupItem (backupName
, backupObj
, true /*insertAtBeginning*/, true /*doAnimation*/);
336 //bootbox.alert("Backup successfully created!");
338 alert('An error occured while creating the backup..');
344 function menu_restoreNow() {
345 chrome
.runtime
.sendMessage({
346 action
: 'restoreNow',
347 args
: ['full_backup'],