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
.getBackgroundPage((bg
) => bg
.restoreNow(backupName
));
147 /*if (!confirm("Open Windows & Tabs of backup '" + backupName + "'?")) {
155 var deleteFuncHandler = function() {
158 bootbox
.confirm("Delete backup '" + backupName
+ "'?", function(confirmed
) {
160 chrome
.runtime
.getBackgroundPage((bg
) => {
161 bg
.deleteBackup(backupName
, () => updateStorageInfo());
164 //if (elem.parentNode) {
165 // elem.parentNode.removeChild(elem);
167 removeBackupItemDiv (backupName
);
174 if (insertAtBeginning
&& backupsDiv
.childNodes
.length
> 0) {
175 // some items already exist
176 var firstNode
= backupsDiv
.childNodes
[0];
177 backupsDiv
.insertBefore(elem
, firstNode
);
179 backupsDiv
.appendChild(elem
);
183 document
.getElementById(restoreButtonId
).addEventListener('click', restoreFuncHandler
);
184 document
.getElementById(deleteButtonId
).addEventListener('click', deleteFuncHandler
);
187 var divIdJQ
= jq(divId
);
188 $(divIdJQ
).slideDown(1000);
190 /*obj.animate({ height: 1, opacity: 1 }, {
192 complete: function(){obj.css('display', 'block');}
198 //$(divId).display = 'none';
199 //$(divId).slideUp();
200 //$(divId).fadeOut(1000);
201 /*var bkp = $("backupsDiv");
205 /*setTimeout( function() {
206 var obj = $("#" + divId);
213 return '#' + myid
.replace(/(:|\.| )/g,'\\$1');
216 function removeBackupItemDiv (backupName
) {
217 var divId
= 'div_' + backupName
;
218 var divIdClean
= jq(divId
);
219 var obj
= $(divIdClean
);
222 obj
.animate({ height
: 0, opacity
: 0 }, {
224 complete: function(){obj
.remove();}
227 //var backupItemDiv = document.getElementById (divId);
228 //if (backupItemDiv.parentNode) {
229 // backupItemDiv.parentNode.removeChild(backupItemDiv);
233 function initBackupsList(showAll
, callback
) {
234 var backupsDiv
= document
.getElementById ('backupsDiv');
235 //var node = backupsDiv.childNodes[0];
236 backupsDiv
.innerHTML
= '';
237 //backupsDiv.style = 'display: none';
238 //$("#backupsDiv").html("");
239 /*while (backupsDiv.hasChildNodes()) {
240 backupsDiv.removeChild(backupsDiv.lastChild);
243 $("#showOlderBackupsDiv").hide();
246 $("#backupsDiv").hide();
249 chrome
.storage
.local
.get(null, function(items
) {
250 var backupsList
= [];
251 if(items
.backups_list
) {
252 backupsList
= items
.backups_list
;
255 var numInsertedItems
= 0;
256 for (var i
= backupsList
.length
-1; i
>= 0; i
--) {
257 //for (var i = 0; i < backupsList.length; i++) {
258 var backupName
= backupsList
[i
];
259 var backupObj
= items
[backupName
];
265 if (backupObj
.isAutomatic
=== undefined) {
266 backupObj
.isAutomatic
= true;
270 if (numInsertedItems
>= 10) {
271 $("#showOlderBackupsDiv").show();
276 insertBackupItem(backupName
, backupObj
, false /*insertAtBeginning*/, false /*doAnimation*/);
282 $("#backupsDiv").slideDown();
295 function updateStorageInfo() {
296 chrome
.storage
.local
.getBytesInUse(null, function(bytesInUse
) {
298 if (bytesInUse
< 1024) {
299 storageText
= bytesInUse
.toFixed(2) + " bytes";
300 } else if (bytesInUse
< 1024 * 1024) {
301 storageText
= (bytesInUse
/ 1024).toFixed(2) + " KiB";
303 storageText
= (bytesInUse
/ (1024 * 1024)).toFixed(2) + " MiB";
306 var storageSpan
= document
.getElementById("storageSpan");
307 storageSpan
.innerHTML
= storageText
;
311 var lastTimeBackupNowClicked
= 0;
313 function menu_backupNow() {
314 // Ignore clicks if less than 1 second has passed since last click (avoids rapid useless backups)
315 if (lastTimeBackupNowClicked
!= 0) {
316 var diffTime
= Math
.abs(new Date().getTime() - lastTimeBackupNowClicked
);
317 if (diffTime
< 1000) {
322 lastTimeBackupNowClicked
= new Date().getTime();
324 chrome
.runtime
.getBackgroundPage((bg
) => bg
.backupNowManual(function(success
, backupName
, backupObj
) {
326 //updateBackupsList();
327 insertBackupItem (backupName
, backupObj
, true /*insertAtBeginning*/, true /*doAnimation*/);
330 //bootbox.alert("Backup successfully created!");
332 alert('An error occured while creating the backup..');
338 function menu_restoreNow() {
339 chrome
.runtime
.getBackgroundPage((bg
) => bg
.restoreNow('full_backup'));