2
var gPref = Components.classes["@mozilla.org/preferences-service;1"]
3
.getService(Components.interfaces.nsIPrefService)
4
.QueryInterface(Components.interfaces.nsIPrefBranch2);
5
var cacheService = Components.classes["@uworks.net/speeddialcache;1"].getService().wrappedJSObject;
9
// Configuration parameters
10
var thumbnailTooltipTitle = true;
11
var thumbnailTooltipURL = true;
12
var showThumbnailOpenButton = true;
13
var showThumbnailReloadButton = true;
14
var showThumbnailDeassignButton = true;
15
var showThumbnailNewTabButton = true;
16
var showThumbnailBackgroundTabButton = true;
17
var showThumbnailNewWindowButton = true;
18
var showThumbnailEditButton = true;
19
var wheelScrollAmount = 10;
20
var enableCache = true;
21
var hideThumbnailNumbers;
22
var enableGroups = false;
24
var thumbnailDragDropExclude;
25
var thumbnailSequentialUpdate;
26
var screenColumns = 3;
28
var imageFormat = "png";
29
var marginVertical = -1;
30
var marginHorizontal = -1;
31
var numberThumbnails = 9;
32
var boardMinimumWidth;
33
var boardMaximumWidth;
34
var boardWidthModifier;
35
var boardWidthModifierType;
36
var boardMinimumHeight;
37
var boardMaximumHeight;
38
var boardHeightModifier;
39
var boardHeightModifierType;
41
var oldResampling = false;
42
var colorizeTabs = false;
43
var rememberTabLastGroup = false;
46
var thumbnailCanvasWidth = 0;
47
var thumbnailCanvasHeight = 0;
48
var updateTimer = null;
49
var updateItems = new Array(9);
50
var updateLayout = false;
53
var isFirefox3 = false;
55
var lastCreatedCell = null;
58
function speeddialStartup() {
60
speedDialBundle = document.getElementById("bundle_speeddial");
62
cacheService.addInstance();
65
var appInfo = Components.classes["@mozilla.org/xre/app-info;1"]
66
.getService(Components.interfaces.nsIXULAppInfo)
67
var versionChecker = Components.classes["@mozilla.org/xpcom/version-comparator;1"]
68
.getService(Components.interfaces.nsIVersionComparator);
69
// only if the platform version is 1.9 or greater
70
if (versionChecker.compare(appInfo.platformVersion, "1.9a1") >= 0) {
75
thumbnailTooltipTitle = gPref.getBoolPref("extensions.speeddial.thumbnailTooltipTitle");
76
thumbnailTooltipURL = gPref.getBoolPref("extensions.speeddial.thumbnailTooltipURL");
77
thumbnailDragDropExclude = gPref.getBoolPref("extensions.speeddial.thumbnailDragDropExclude");
78
thumbnailSequentialUpdate = gPref.getBoolPref("extensions.speeddial.thumbnailSequentialUpdate");
79
showThumbnailReloadButton = gPref.getBoolPref("extensions.speeddial.showThumbnailReloadButton");
80
showThumbnailDeassignButton = gPref.getBoolPref("extensions.speeddial.showThumbnailDeassignButton");
81
showThumbnailNewTabButton = gPref.getBoolPref("extensions.speeddial.showThumbnailNewTabButton");
82
showThumbnailNewWindowButton = gPref.getBoolPref("extensions.speeddial.showThumbnailNewWindowButton");
83
showThumbnailOpenButton = gPref.getBoolPref("extensions.speeddial.showThumbnailOpenButton");
84
showThumbnailBackgroundTabButton = gPref.getBoolPref("extensions.speeddial.showThumbnailBackgroundTabButton");
85
showThumbnailEditButton = gPref.getBoolPref("extensions.speeddial.showThumbnailEditButton");
86
enableCache = gPref.getBoolPref("extensions.speeddial.enableCache");
87
wheelScrollAmount = gPref.getIntPref("extensions.speeddial.wheelScrollAmount");
88
screenRows = gPref.getIntPref("extensions.speeddial.rows");
89
screenColumns = gPref.getIntPref("extensions.speeddial.columns");
90
boardMinimumWidth = gPref.getIntPref("extensions.speeddial.minimumWidth");
91
boardWidthModifier = gPref.getIntPref("extensions.speeddial.widthModifier");
92
boardWidthModifierType = gPref.getIntPref("extensions.speeddial.widthModifierType");
93
boardMaximumWidth = gPref.getIntPref("extensions.speeddial.maximumWidth");
94
boardMinimumHeight = gPref.getIntPref("extensions.speeddial.minimumHeight");
95
boardHeightModifier = gPref.getIntPref("extensions.speeddial.heightModifier");
96
boardHeightModifierType = gPref.getIntPref("extensions.speeddial.heightModifierType");
97
boardMaximumHeight = gPref.getIntPref("extensions.speeddial.maximumHeight");
98
boardMaximumHeight = gPref.getIntPref("extensions.speeddial.maximumHeight");
99
rightClickAction = gPref.getIntPref("extensions.speeddial.rightClickAction");
100
hideThumbnailNumbers = gPref.getBoolPref("extensions.speeddial.hideThumbnailNumbers");
101
enableGroups = gPref.getBoolPref("extensions.speeddial.enableGroups");
102
imageFormat = gPref.getCharPref("extensions.speeddial.imageFormat");
104
numGroups = gPref.getIntPref("extensions.speeddial.numGroups");
105
colorizeTabs = gPref.getBoolPref("extensions.speeddial.colorizeTabs");
106
rememberTabLastGroup = gPref.getBoolPref("extensions.speeddial.rememberTabLastGroup");
108
document.getElementById("speeddialTabbox-tabs").setAttribute("collapsed", false);
110
if (numGroups < 1) numGroups = 1;
111
if (currentGroup >= numGroups) {
112
currentGroup = numGroups;
115
numberThumbnails = screenRows * screenColumns * numGroups;
118
oldResampling = gPref.getBoolPref("extensions.speeddial.oldResampling");
121
if (gPref.getBoolPref("extensions.speeddial.mouseOverThumbnailButtons")) {
122
document.getElementById("speeddialTabbox").setAttribute("hideThumbButtons", "true");
125
if (gPref.getBoolPref("extensions.speeddial.hideThumbnailIcons")) {
126
document.getElementById("speeddialTabbox").setAttribute("hideThumbIcons", "true");
130
var speedDialTab = null;
131
if (rememberTabLastGroup) {
133
topWindow = QueryInterface(Components.interfaces.nsIInterfaceRequestor).getInterface(Components.interfaces.nsIWebNavigation).QueryInterface(Components.interfaces.nsIDocShellTreeItem).rootTreeItem.QueryInterface(Components.interfaces.nsIInterfaceRequestor).getInterface(Components.interfaces.nsIDOMWindow);
135
var tabbrowser = topWindow.getBrowser();
136
for (var i = 0; (i < tabbrowser.mTabContainer.childNodes.length) && !speedDialTab; i++) {
137
var tab = tabbrowser.mTabContainer.childNodes[i];
138
if (tab.linkedBrowser.contentWindow == window) {
143
if ((speedDialTab) && (speedDialTab.hasAttribute("speedDialLastGroup"))) {
144
currentGroup = parseInt(speedDialTab.getAttribute("speedDialLastGroup"));
146
// Retrieve current group if necessary
147
if (window.location.search) {
148
var groupParameter = window.location.search.substr("?group=".length, window.location.search.length);
149
currentGroup = parseInt(groupParameter);
157
} catch (e) { alert(e); }
159
calculateBoardSize();
160
restoreCanvasSize(false);
162
// Register observers
163
SpeedDialPrefObserver.addPrefObserver();
164
window.addEventListener("resize", sizeChanged, false);
165
window.addEventListener("mousedown", windowMouseDown, true);
168
if (gPref.getBoolPref("extensions.speeddial.clearURLBarOnLoad")) {
169
// Save selection ranges
170
var parentWindow = getParentWindow();
171
var urlBar = parentWindow.document.getElementById("urlbar");
172
selectionStart = urlBar.selectionStart;
173
selectionEnd = urlBar.selectionEnd;
177
//setTimeout(speeddialAfterLoad, 0);
180
function speeddialAfterLoad() {
181
var parentWindow = getParentWindow();
182
var urlBar = parentWindow.document.getElementById("urlbar");
184
if (gPref.getBoolPref("extensions.speeddial.clearURLBarOnLoad")) {
185
urlBar.editor.undo(2);
186
// Restore selection ranges
187
urlBar.setSelectionRange(selectionStart, selectionEnd);
190
if (gPref.getBoolPref("extensions.speeddial.focusURLBarOnLoad")) {
191
setTimeout(speeddialFocusURLBar, 0);
196
function tabDragOverEvent(event) {
198
var foundNode = null;
199
var currentNode = event.target;
201
while ((currentNode.parentNode) && !found) {
202
if (currentNode.localName == "tab") {
204
foundNode = currentNode;
206
currentNode = currentNode.parentNode;
209
if (currentGroup != foundNode.getAttribute("group")) {
210
var tabContainer = document.getElementById("speeddialTabbox-tabs");
211
tabContainer.selectedItem = foundNode;
216
function generateContent() {
217
var tabContainer = document.getElementById("speeddialTabbox-tabs");
218
var panelContainer = document.getElementById("speeddialTabbox-panelContainer");
219
var selectedPanel = null;
221
for (var b=1; b<=numGroups; b++) {
223
var newTab = document.createElement("tab");
224
var newTabPanel = document.createElement("tabpanel");
226
newTab.setAttribute("group", b);
227
if (gPref.prefHasUserValue("extensions.speeddial.group-" + b + "-title")) {
228
newTab.setAttribute("label", gPref.getComplexValue("extensions.speeddial.group-" + b + "-title", Components.interfaces.nsISupportsString).data);
230
newTab.setAttribute("label", speedDialBundle.getFormattedString("untitledGroup.label", [b]));
233
newTab.setAttribute("ondragover", "tabDragOverEvent(event);");
235
if (gPref.prefHasUserValue("extensions.speeddial.group-" + b + "-backgroundColor")) {
236
newTabPanel.style.backgroundColor = gPref.getCharPref("extensions.speeddial.group-" + b + "-backgroundColor") + " !important";
238
newTab.style.backgroundColor = newTabPanel.style.backgroundColor;
239
newTab.style.MozAppearance = "none !important";
243
if (gPref.prefHasUserValue("extensions.speeddial.group-" + b + "-textColor")) {
244
newTabPanel.style.color = gPref.getCharPref("extensions.speeddial.group-" + b + "-textColor") + " !important";
246
newTab.style.color = gPref.getCharPref("extensions.speeddial.group-" + b + "-textColor") + " !important";
250
var newGrid = document.createElement("grid");
251
newGrid.setAttribute("flex", 1);
253
var columns = document.createElement("columns");
254
var column = document.createElement("column");
255
var rows = document.createElement("rows");
257
column.setAttribute("flex", 1);
258
newTab.linkedPanel = "speedDialPanel" + b;
259
newTabPanel.setAttribute("id", newTab.linkedPanel);
260
newTabPanel.setAttribute("group", b);
261
rows.setAttribute("id", newTab.linkedPanel + "-rows");
263
columns.appendChild(column);
264
newGrid.appendChild(columns);
265
newGrid.appendChild(rows);
266
newTabPanel.appendChild(newGrid);
267
panelContainer.appendChild(newTabPanel);
268
tabContainer.appendChild(newTab);
270
if (b == currentGroup) {
271
newTab.setAttribute("selected", "true");
272
selectedPanel = newTabPanel;
277
generateTabCells(currentGroup);
280
panelContainer.selectedPanel = selectedPanel;
283
function generateTabCells(selectedGroup) {
284
var targetPanelRows = document.getElementById("speedDialPanel" + selectedGroup + "-rows");
285
var currentDial = (selectedGroup - 1) * screenRows * screenColumns + 1;
286
var cellMaxWidth = Math.floor(100/screenColumns);
287
for (var c=1; c<=screenRows; c++) {
288
var newRow = document.createElement("row");
289
newRow.setAttribute("flex", 1);
290
var newRowBox = document.createElement("hbox");
291
newRowBox.setAttribute("flex", 1);
292
for (var d=1; d<=screenColumns; d++) {
293
var newCell = document.createElement("box");
294
newCell.setAttribute("id", "speeddial" + currentDial);
295
newCell.setAttribute("speeddial", currentDial);
296
newCell.setAttribute("class", "speeddialThumb");
297
if (rightClickAction == 6) {
298
newCell.setAttribute("context", "thumbMenu");
300
newCell.style.maxWidth = cellMaxWidth + "%";
301
newCell.style.width = newCell.style.maxWidth;
302
newCell.style.minWidth = newCell.style.maxWidth;
303
newRowBox.appendChild(newCell);
304
lastCreatedCell = newCell;
307
newRow.appendChild(newRowBox);
308
targetPanelRows.appendChild(newRow);
310
document.getElementById("speedDialPanel" + selectedGroup).setAttribute("initiated", true);
313
function checkSelectedPanel() {
314
var panelContainer = document.getElementById("speeddialTabbox-panelContainer");
316
if (currentGroup != (panelContainer.selectedIndex + 1)) {
317
currentGroup = panelContainer.selectedIndex + 1;
319
if (!panelContainer.selectedPanel.hasAttribute("initiated")) {
320
generateTabCells(currentGroup);
325
var initialDial = currentGroup * screenRows * screenColumns + 1;
327
for (var c=initialDial; c<=(initialDial + screenRows * screenColumns); c++) {
328
var currentThumbnail = document.getElementById("speeddial" + c);
329
if (currentThumbnail) {
330
currentThumbnail.updateThumbnail();
332
updateItems[c] = false;
337
function destroyContent() {
338
var tabContainer = document.getElementById("speeddialTabbox-tabs");
339
var panelContainer = document.getElementById("speeddialTabbox-panelContainer");
341
for (var c=tabContainer.childNodes.length-1; c>=0; c--) {
342
var currentElement = tabContainer.childNodes[c];
343
if (currentElement.localName == "tab") {
344
var targetPanel = document.getElementById(currentElement.linkedPanel);
347
panelContainer.removeChild(targetPanel);
348
tabContainer.removeChild(currentElement);
353
function checkThumbnailDragDropExcludeCanvas(event) {
354
if (thumbnailDragDropExclude) {
355
event.stopPropagation();
359
function speeddialFocusURLBar() {
360
var parentWindow = getParentWindow();
361
var urlBar = parentWindow.document.getElementById("urlbar");
366
function speeddialUnload() {
367
// Unregister observers
368
SpeedDialPrefObserver.removePrefObserver();
369
window.removeEventListener("resize", sizeChanged, false);
370
window.removeEventListener("mousedown", windowMouseDown, true);
372
cacheService.removeInstance();
374
if (cacheService.getNumberInstances() <= 0) {
376
for (var c=0; c<numberThumbnails; c++) {
377
cacheService.setImage(null, c);
382
if (rememberTabLastGroup) {
383
// Remember current group
384
var tabbrowser = topWindow.getBrowser();
385
var foundTab = false;
386
for (var i = 0; (i < tabbrowser.mTabContainer.childNodes.length) && !foundTab; i++) {
387
var tab = tabbrowser.mTabContainer.childNodes[i];
388
if (tab.linkedBrowser.contentWindow == window) {
389
tab.setAttribute("speedDialLastGroup", currentGroup);
396
function restoreCanvasSize(sequentialUpdate) {
397
// if (marginHorizontal < 0) {
398
var canvasBox = document.getBoxObjectFor(lastCreatedCell.getCanvasBox());
399
thumbnailCanvasWidth = canvasBox.width;
400
thumbnailCanvasHeight = canvasBox.height;
401
marginHorizontal = boardWidth - screenColumns * thumbnailCanvasWidth;
402
marginVertical = boardHeight - screenRows * thumbnailCanvasHeight;
405
// if (thumbnailCanvasWidth < 0) {
406
// thumbnailCanvasWidth = Math.floor((boardWidth - marginHorizontal) / screenColumns);
407
// thumbnailCanvasHeight = Math.floor((boardHeight - marginVertical) / screenRows);
410
// Update thumbnails for current group
411
var initialDial = (currentGroup - 1) * screenRows * screenColumns + 1;
413
for (var c=initialDial; c<=(initialDial + screenRows * screenColumns); c++) {
414
var currentThumbnail = document.getElementById("speeddial" + c);
415
if (currentThumbnail) {
416
currentThumbnail.updateThumbnail();
418
updateItems[c] = false;
422
function nullifyCanvasSize() {
423
for (var c=1; c<=numberThumbnails; c++) {
424
var currentThumbnail = document.getElementById("speeddial" + c);
425
if (currentThumbnail) {
426
currentThumbnail.nullifyCanvas();
431
function updatePendingItems() {
432
for (var c=1; c<=numberThumbnails; c++) {
433
if (updateItems[c]) {
434
var currentThumbnail = document.getElementById("speeddial" + c);
435
if (currentThumbnail) {
436
currentThumbnail.updateThumbnail();
438
updateItems[c] = false;
443
function openURL(url, where) {
446
var parentWindow = getParentWindow();
447
if (where == "current") {
448
document.location = url;
450
parentWindow.openUILinkIn(url, where);
454
function contextEditGroup() {
457
var currentNode = document.popupNode;
459
while ((currentNode.parentNode) && !found) {
460
if (currentNode.localName == "tab") {
462
foundIndex = currentNode.getAttribute("group");
464
currentNode = currentNode.parentNode;
467
openDialog("chrome://speeddial/content/editGroup.xul", "",
468
"centerscreen,chrome,dialog,resizable,dependent", [ foundIndex ]);
472
function contextAddGroup() {
473
openDialog("chrome://speeddial/content/editGroup.xul", "",
474
"centerscreen,chrome,dialog,resizable,dependent", [ -1 ]);
477
function contextRemoveGroup() {
480
var currentNode = document.popupNode;
482
while ((currentNode.parentNode) && !found) {
483
if (currentNode.localName == "tab") {
485
foundIndex = parseInt(currentNode.getAttribute("group"));
487
currentNode = currentNode.parentNode;
490
var totalGroups = gPref.getIntPref("extensions.speeddial.numGroups");
492
if (totalGroups < 2) return;
495
for (var c=foundIndex; c<totalGroups; c++) {
497
if (gPref.prefHasUserValue("extensions.speeddial.group-" + (c+1) + "-title")) {
498
gPref.setComplexValue("extensions.speeddial.group-" + c + "-title", Components.interfaces.nsISupportsString, gPref.getComplexValue("extensions.speeddial.group-" + (c+1) + "-title", Components.interfaces.nsISupportsString));
499
gPref.clearUserPref("extensions.speeddial.group-" + (c+1) + "-title");
500
} else if (gPref.prefHasUserValue("extensions.speeddial.group-" + c + "-title")) {
501
gPref.clearUserPref("extensions.speeddial.group-" + c + "-title");
504
// Move background color
505
if (gPref.prefHasUserValue("extensions.speeddial.group-" + (c+1) + "-backgroundColor")) {
506
gPref.setCharPref("extensions.speeddial.group-" + c + "-backgroundColor", gPref.getCharPref("extensions.speeddial.group-" + (c+1) + "-backgroundColor"));
507
gPref.clearUserPref("extensions.speeddial.group-" + (c+1) + "-backgroundColor");
508
} else if (gPref.prefHasUserValue("extensions.speeddial.group-" + c + "-backgroundColor")) {
509
gPref.clearUserPref("extensions.speeddial.group-" + c + "-backgroundColor");
513
if (gPref.prefHasUserValue("extensions.speeddial.group-" + (c+1) + "-textColor")) {
514
gPref.setCharPref("extensions.speeddial.group-" + c + "-textColor", gPref.getCharPref("extensions.speeddial.group-" + (c+1) + "-textColor"));
515
gPref.clearUserPref("extensions.speeddial.group-" + (c+1) + "-textColor");
516
} else if (gPref.prefHasUserValue("extensions.speeddial.group-" + c + "-textColor")) {
517
gPref.clearUserPref("extensions.speeddial.group-" + c + "-textColor");
522
gPref.setIntPref("extensions.speeddial.numGroups", totalGroups - 1);
523
if (currentGroup == totalGroups) {
529
function editThumbnail(thumbNumber) {
530
openDialog("chrome://speeddial/content/editDial.xul", "",
531
"centerscreen,chrome,dialog,resizable,dependent", [ thumbNumber ]);
534
function refreshThumbnail(thumbNumber) {
535
gPref.setBoolPref("extensions.speeddial.thumbnail-" + thumbNumber + "-manualrefresh", true);
538
function refreshAllThumbnails() {
539
for (var c=0; c<=numberThumbnails; c++) {
540
if (gPref.prefHasUserValue("extensions.speeddial.thumbnail-" + c + "-url")) {
541
gPref.setBoolPref("extensions.speeddial.thumbnail-" + c + "-manualrefresh", true);
546
function showingThumbnailTooltip(event) {
547
event.stopPropagation();
549
var currentTitle = document.getElementById("thumbnailTooltipTitle");
550
var currentURL = document.getElementById("thumbnailTooltipURL");
551
var showTooltip = false;
553
var targetNode = document.tooltipNode;
554
while (targetNode && (!targetNode.parentThumbnail)) {
555
targetNode = targetNode.parentNode;
557
if (targetNode.parentThumbnail)
558
targetNode = targetNode.parentThumbnail;
560
if (thumbnailTooltipTitle && targetNode.hasAttribute("thumbnailTitle")) {
561
currentTitle.removeAttribute("hidden");
562
currentTitle.value = targetNode.getAttribute("thumbnailTitle");
565
currentTitle.setAttribute("hidden", true);
568
if (thumbnailTooltipURL && targetNode.hasAttribute("thumbnailURL")) {
569
currentURL.removeAttribute("hidden");
570
currentURL.value = targetNode.getAttribute("thumbnailURL");
573
currentURL.setAttribute("hidden", true);
578
function getParentWindow() {
580
return window.opener;
582
return QueryInterface(Components.interfaces.nsIInterfaceRequestor).getInterface(Components.interfaces.nsIWebNavigation).QueryInterface(Components.interfaces.nsIDocShellTreeItem).rootTreeItem.QueryInterface(Components.interfaces.nsIInterfaceRequestor).getInterface(Components.interfaces.nsIDOMWindow);
586
function getThumbnailImageURL(thumbnailNumber) {
587
var file = Components.classes["@mozilla.org/file/directory_service;1"]
588
.getService(Components.interfaces.nsIProperties)
589
.get("ProfD", Components.interfaces.nsIFile);
590
var fileExtension = imageFormat;
591
if (gPref.prefHasUserValue("extensions.speeddial.thumbnail-" + thumbnailNumber + "-format")) {
592
fileExtension = gPref.getCharPref("extensions.speeddial.thumbnail-" + thumbnailNumber + "-format");
594
file.append(SpeedDialUtils.thumbFolder);
595
if (!gPref.prefHasUserValue("extensions.speeddial.thumbnail-" + thumbnailNumber + "-lastsaved")) {
596
file.append("thumbnail-" + thumbnailNumber + "." + fileExtension);
598
file.append("thumbnail-" + thumbnailNumber + "-" + gPref.getCharPref("extensions.speeddial.thumbnail-" + thumbnailNumber + "-lastsaved") + "." + fileExtension);
600
if (file.exists() && !file.isDirectory()) {
601
var ios = Components.classes["@mozilla.org/network/io-service;1"]
602
.getService(Components.interfaces.nsIIOService);
603
return ios.newFileURI(file).spec;
609
function moveThumbnailImage(originalNumber, destinationNumber) {
610
var file = Components.classes["@mozilla.org/file/directory_service;1"]
611
.getService(Components.interfaces.nsIProperties)
612
.get("ProfD", Components.interfaces.nsIFile);
613
file.append(SpeedDialUtils.thumbFolder);
614
var thumbFolder = file.clone();
616
var fileExtension = imageFormat;
617
if (gPref.prefHasUserValue("extensions.speeddial.thumbnail-" + originalNumber + "-format")) {
618
fileExtension = gPref.getCharPref("extensions.speeddial.thumbnail-" + originalNumber + "-format");
619
} else if (gPref.prefHasUserValue("extensions.speeddial.thumbnail-" + destinationNumber + "-format")) {
620
fileExtension = gPref.getCharPref("extensions.speeddial.thumbnail-" + destinationNumber + "-format");
623
if (gPref.prefHasUserValue("extensions.speeddial.thumbnail-" + originalNumber + "-lastsaved")) {
624
file.append("thumbnail-" + originalNumber + "-" + gPref.getCharPref("extensions.speeddial.thumbnail-" + originalNumber + "-lastsaved") + "." + fileExtension);
626
file.append("thumbnail-" + originalNumber + "." + fileExtension);
630
if (gPref.prefHasUserValue("extensions.speeddial.thumbnail-" + destinationNumber + "-lastsaved")) {
631
destFileName = "thumbnail-" + destinationNumber + "-" + gPref.getCharPref("extensions.speeddial.thumbnail-" + destinationNumber + "-lastsaved") + "." + fileExtension;
633
destFileName = "thumbnail-" + destinationNumber + "." + fileExtension;
635
//alert("file: " + file.path + ", to: " + destFileName);
636
if (file.exists() && !file.isDirectory()) {
637
file.moveTo(thumbFolder, destFileName);
641
function copyThumbnailData(originalDial, targetDial) {
643
if (gPref.prefHasUserValue("extensions.speeddial.thumbnail-" + originalDial + "-url")) {
644
gPref.setCharPref("extensions.speeddial.thumbnail-" + targetDial + "-url", gPref.getCharPref("extensions.speeddial.thumbnail-" + originalDial + "-url"));
647
if (gPref.prefHasUserValue("extensions.speeddial.thumbnail-" + originalDial + "-icon")) {
648
gPref.setCharPref("extensions.speeddial.thumbnail-" + targetDial + "-icon", gPref.getCharPref("extensions.speeddial.thumbnail-" + originalDial + "-icon"));
651
if (gPref.prefHasUserValue("extensions.speeddial.thumbnail-" + originalDial + "-label")) {
652
gPref.setComplexValue("extensions.speeddial.thumbnail-" + targetDial + "-label", Components.interfaces.nsISupportsString, gPref.getComplexValue("extensions.speeddial.thumbnail-" + originalDial + "-label", Components.interfaces.nsISupportsString));
655
if (gPref.prefHasUserValue("extensions.speeddial.thumbnail-" + originalDial + "-lastsaved")) {
656
gPref.setCharPref("extensions.speeddial.thumbnail-" + targetDial + "-lastsaved", gPref.getCharPref("extensions.speeddial.thumbnail-" + originalDial + "-lastsaved"));
659
if (gPref.prefHasUserValue("extensions.speeddial.thumbnail-" + originalDial + "-dynamictitle")) {
660
gPref.setBoolPref("extensions.speeddial.thumbnail-" + targetDial + "-dynamictitle", gPref.getBoolPref("extensions.speeddial.thumbnail-" + originalDial + "-dynamictitle"));
663
if (gPref.prefHasUserValue("extensions.speeddial.thumbnail-" + originalDial + "-refreshinterval")) {
664
gPref.setIntPref("extensions.speeddial.thumbnail-" + targetDial + "-refreshinterval", gPref.getIntPref("extensions.speeddial.thumbnail-" + originalDial + "-refreshinterval"));
667
if (gPref.prefHasUserValue("extensions.speeddial.thumbnail-" + originalDial + "-manualrefresh")) {
668
gPref.setBoolPref("extensions.speeddial.thumbnail-" + targetDial + "-manualrefresh", gPref.getBoolPref("extensions.speeddial.thumbnail-" + originalDial + "-manualrefresh"));
671
if (gPref.prefHasUserValue("extensions.speeddial.thumbnail-" + originalDial + "-format")) {
672
gPref.setCharPref("extensions.speeddial.thumbnail-" + targetDial + "-format", gPref.getCharPref("extensions.speeddial.thumbnail-" + originalDial + "-format"));
675
if (gPref.prefHasUserValue("extensions.speeddial.thumbnail-" + originalDial + "-backgroundcolor")) {
676
gPref.setCharPref("extensions.speeddial.thumbnail-" + targetDial + "-backgroundcolor", gPref.getCharPref("extensions.speeddial.thumbnail-" + originalDial + "-backgroundcolor"));
679
if (gPref.prefHasUserValue("extensions.speeddial.thumbnail-" + originalDial + "-layout")) {
680
gPref.setIntPref("extensions.speeddial.thumbnail-" + targetDial + "-layout", gPref.getIntPref("extensions.speeddial.thumbnail-" + originalDial + "-layout"));
683
if (gPref.prefHasUserValue("extensions.speeddial.thumbnail-" + originalDial + "-cropping")) {
684
gPref.setCharPref("extensions.speeddial.thumbnail-" + targetDial + "-cropping", gPref.getCharPref("extensions.speeddial.thumbnail-" + originalDial + "-cropping"));
687
if (gPref.prefHasUserValue("extensions.speeddial.thumbnail-" + originalDial + "-thumbnailurl")) {
688
gPref.setCharPref("extensions.speeddial.thumbnail-" + targetDial + "-thumbnailurl", gPref.getCharPref("extensions.speeddial.thumbnail-" + originalDial + "-thumbnailurl"));
692
function copyThumbnailImage(originalNumber, destinationNumber) {
693
var file = Components.classes["@mozilla.org/file/directory_service;1"]
694
.getService(Components.interfaces.nsIProperties)
695
.get("ProfD", Components.interfaces.nsIFile);
696
file.append(SpeedDialUtils.thumbFolder);
697
var thumbFolder = file.clone();
699
var fileExtension = imageFormat;
700
if (gPref.prefHasUserValue("extensions.speeddial.thumbnail-" + originalNumber + "-format")) {
701
fileExtension = gPref.getCharPref("extensions.speeddial.thumbnail-" + originalNumber + "-format");
702
} else if (gPref.prefHasUserValue("extensions.speeddial.thumbnail-" + destinationNumber + "-format")) {
703
fileExtension = gPref.getCharPref("extensions.speeddial.thumbnail-" + destinationNumber + "-format");
706
if (gPref.prefHasUserValue("extensions.speeddial.thumbnail-" + originalNumber + "-lastsaved")) {
707
file.append("thumbnail-" + originalNumber + "-" + gPref.getCharPref("extensions.speeddial.thumbnail-" + originalNumber + "-lastsaved") + "." + fileExtension);
709
file.append("thumbnail-" + originalNumber + "." + fileExtension);
713
if (gPref.prefHasUserValue("extensions.speeddial.thumbnail-" + destinationNumber + "-lastsaved")) {
714
destFileName = "thumbnail-" + destinationNumber + "-" + gPref.getCharPref("extensions.speeddial.thumbnail-" + destinationNumber + "-lastsaved") + "." + fileExtension;
716
destFileName = "thumbnail-" + destinationNumber + "." + fileExtension;
719
if (file.exists() && !file.isDirectory()) {
720
file.copyTo(thumbFolder, destFileName);
725
function getThumbnailCanvasWidth() {
726
return thumbnailCanvasWidth;
729
function getThumbnailCanvasHeight() {
730
return thumbnailCanvasHeight;
733
function checkShouldShowContextMenu(thumbNumber) {
734
var thumbMenu = document.getElementById("thumbMenu");
737
if (gPref.prefHasUserValue("extensions.speeddial.thumbnail-" + thumbNumber + "-url")) {
743
for (var c=0; c<thumbMenu.childNodes.length; c++) {
744
if ((thumbMenu.childNodes[c].getAttribute("id") != "context-edit") &&
745
(thumbMenu.childNodes[c].getAttribute("id") != "context-refreshall")) {
746
thumbMenu.childNodes[c].setAttribute("hidden", !showItems);
753
function sizeChanged() {
755
var innerBox = document.getElementById("speeddialBox");
757
if ((innerBox.boxObject.width < boardWidth) || (innerBox.boxObject.height < boardHeight)) {
758
boardWidth = innerBox.boxObject.width;
759
boardHeight = innerBox.boxObject.height;
761
setTimeout(restoreCanvasSize, 0);
766
// nullifyCanvasSize();
767
// setTimeout(restoreCanvasSize, 0, false);
768
thumbnailCanvasWidth = -1;
769
thumbnailCanvasHeight = -1;
771
calculateBoardSize();
773
restoreCanvasSize(false);
776
function windowMouseDown(el) {
777
if (el.button == 1) {
778
el.stopPropagation();
779
// el.preventDefault();
783
var SpeedDialPrefObserver =
786
observe: function(subject, topic, data) {
787
// subject is the nsIPrefBranch we're observing (after appropriate QI)
788
// data is the name of the pref that's been changed (relative to subject)
789
var updateAllThumbnails = false;
790
var updatePendingThumbnails = false;
792
if (topic == "nsPref:changed") {
793
if (data.indexOf("extensions.speeddial.thumbnail-") == 0) {
794
// A thumbnail is updated!
795
var number = (data.split("-", 2))[1];
796
if (number <= numberThumbnails) {
797
updateItems[number] = true;
798
updatePendingThumbnails = true;
801
var updateSize = false;
802
if (data == "extensions.speeddial.thumbnailTooltipTitle") {
803
thumbnailTooltipTitle = gPref.getBoolPref("extensions.speeddial.thumbnailTooltipTitle");
804
} else if (data == "extensions.speeddial.thumbnailTooltipTitle") {
805
thumbnailTooltipURL = gPref.getBoolPref("extensions.speeddial.thumbnailTooltipURL");
806
} else if (data == "extensions.speeddial.thumbnailDragDropExclude") {
807
thumbnailDragDropExclude = gPref.getBoolPref("extensions.speeddial.thumbnailDragDropExclude");
808
} else if (data == "extensions.speeddial.showThumbnailReloadButton") {
809
showThumbnailReloadButton = gPref.getBoolPref("extensions.speeddial.showThumbnailReloadButton");
810
updateAllThumbnails = true;
811
} else if (data == "extensions.speeddial.showThumbnailDeassignButton") {
812
showThumbnailDeassignButton = gPref.getBoolPref("extensions.speeddial.showThumbnailDeassignButton");
813
updateAllThumbnails = true;
814
} else if (data == "extensions.speeddial.showThumbnailNewTabButton") {
815
showThumbnailNewTabButton = gPref.getBoolPref("extensions.speeddial.showThumbnailNewTabButton");
816
updateAllThumbnails = true;
817
} else if (data == "extensions.speeddial.showThumbnailNewWindowButton") {
818
showThumbnailNewWindowButton = gPref.getBoolPref("extensions.speeddial.showThumbnailNewWindowButton");
819
updateAllThumbnails = true;
820
} else if (data == "extensions.speeddial.showThumbnailEditButton") {
821
showThumbnailEditButton = gPref.getBoolPref("extensions.speeddial.showThumbnailEditButton");
822
updateAllThumbnails = true;
823
} else if (data == "extensions.speeddial.showThumbnailBackgroundTabButton") {
824
showThumbnailBackgroundTabButton = gPref.getBoolPref("extensions.speeddial.showThumbnailBackgroundTabButton");
825
updateAllThumbnails = true;
826
} else if (data == "extensions.speeddial.showThumbnailOpenButton") {
827
showThumbnailOpenButton = gPref.getBoolPref("extensions.speeddial.showThumbnailOpenButton");
828
updateAllThumbnails = true;
829
} else if (data == "extensions.speeddial.whellScrollAmount") {
830
whellScrollAmount = gPref.getIntPref("extensions.speeddial.whellScrollAmount");
831
} else if (data == "extensions.speeddial.enableCache") {
832
enableCache = gPref.getBoolPref("extensions.speeddial.enableCache");
833
} else if (data == "extensions.speeddial.rows") {
834
screenRows = gPref.getIntPref("extensions.speeddial.rows");
835
updateAllThumbnails = true;
837
numberThumbnails = screenRows * screenColumns;
838
} else if (data == "extensions.speeddial.columns") {
839
screenColumns = gPref.getIntPref("extensions.speeddial.columns");
840
updateAllThumbnails = true;
842
numberThumbnails = screenRows * screenColumns;
843
} else if (data == "extensions.speeddial.minimumWidth") {
844
boardMinimumWidth = gPref.getIntPref("extensions.speeddial.minimumWidth");
846
} else if (data == "extensions.speeddial.widthModifier") {
847
boardWidthModifier = gPref.getIntPref("extensions.speeddial.widthModifier");
849
} else if (data == "extensions.speeddial.widthModifierType") {
850
boardWidthModifierType = gPref.getIntPref("extensions.speeddial.widthModifierType");
852
} else if (data == "extensions.speeddial.maximumWidth") {
853
boardMaximumWidth = gPref.getIntPref("extensions.speeddial.maximumWidth");
855
} else if (data == "extensions.speeddial.minimumHeight") {
856
boardMinimumHeight = gPref.getIntPref("extensions.speeddial.minimumHeight");
858
} else if (data == "extensions.speeddial.heightModifier") {
859
boardHeightModifier = gPref.getIntPref("extensions.speeddial.heightModifier");
861
} else if (data == "extensions.speeddial.heightModifierType") {
862
boardHeightModifierType = gPref.getIntPref("extensions.speeddial.heightModifierType");
864
} else if (data == "extensions.speeddial.maximumHeight") {
865
boardMaximumHeight = gPref.getIntPref("extensions.speeddial.maximumHeight");
867
} else if (data == "extensions.speeddial.rightClickAction") {
868
rightClickAction = gPref.getIntPref("extensions.speeddial.rightClickAction");
869
updateAllThumbnails = true;
871
} else if (data == "extensions.speeddial.imageFormat") {
872
imageFormat = gPref.getCharPref("extensions.speeddial.imageFormat");
873
} else if ((data == "extensions.speeddial.oldResampling") && (!isFirefox3)) {
874
oldResampling = gPref.getBoolPref("extensions.speeddial.oldResampling");
875
} else if (data == "extensions.speeddial.mouseOverThumbnailButtons") {
876
document.getElementById("speeddialTabbox").setAttribute("hideThumbButtons", gPref.getBoolPref("extensions.speeddial.mouseOverThumbnailButtons"));
877
} else if (data == "extensions.speeddial.hideThumbnailNumbers") {
878
hideThumbnailNumbers = gPref.getBoolPref("extensions.speeddial.hideThumbnailNumbers");
879
updateAllThumbnails = true;
880
} else if (data == "extensions.speeddial.hideThumbnailIcons") {
881
document.getElementById("speeddialTabbox").setAttribute("hideThumbIcons", gPref.getBoolPref("extensions.speeddial.hideThumbnailIcons"));
882
} else if (data == "extensions.speeddial.colorizeTabs") {
883
colorizeTabs = gPref.getBoolPref("extensions.speeddial.colorizeTabs");
885
updateAllThumbnails = true;
888
} else if (data == "extensions.speeddial.enableGroups") {
889
enableGroups = gPref.getBoolPref("extensions.speeddial.enableGroups");
891
document.getElementById("speeddialTabbox-tabs").setAttribute("collapsed", false);
892
numGroups = gPref.getIntPref("extensions.speeddial.numGroups");
893
colorizeTabs = gPref.getBoolPref("extensions.speeddial.colorizeTabs");
894
if (numGroups < 1) numGroups = 1;
896
document.getElementById("speeddialTabbox-tabs").setAttribute("collapsed", true);
899
updateAllThumbnails = true;
901
} else if (data == "extensions.speeddial.numGroups") {
903
numGroups = gPref.getIntPref("extensions.speeddial.numGroups");
904
if (numGroups < 1) numGroups = 1;
905
updateAllThumbnails = true;
908
} else if (data.indexOf("extensions.speeddial.group-") == 0) {
909
var number = (data.split("-", 2))[1];
910
if ((number == 1) || (enableGroups)) {
911
updateAllThumbnails = true;
920
if (updateAllThumbnails) {
921
for (var c=1; c<=numberThumbnails; c++) {
922
updateItems[c] = true;
926
if (updateAllThumbnails || updatePendingThumbnails) {
927
if (updateTimer == null) {
928
updateTimer = Components.classes["@mozilla.org/timer;1"].createInstance(Components.interfaces.nsITimer);
930
updateTimer.cancel();
931
updateTimer.initWithCallback(SpeedDialPrefObserver.prefObserver, 100, Components.interfaces.nsITimer.TYPE_ONE_SHOT);
936
QueryInterface : function (aIID) {
937
if (aIID.equals(Components.interfaces.nsIObserver) ||
938
aIID.equals(Components.interfaces.nsITimerCallback) ||
939
aIID.equals(Components.interfaces.nsISupports) ||
940
aIID.equals(Components.interfaces.nsISupportsWeakReference))
942
throw Components.results.NS_NOINTERFACE;
945
notify: function(timer) {
949
thumbnailCanvasWidth = -1;
950
thumbnailCanvasHeight = -1;
952
restoreCanvasSize(false);
954
updatePendingItems();
959
addPrefObserver : function () {
961
gPref.addObserver("extensions.speeddial.", SpeedDialPrefObserver.prefObserver, true);
964
removePrefObserver : function () {
966
gPref.removeObserver("extensions.speeddial.", SpeedDialPrefObserver.prefObserver);
971
var thumbnailObserver = {
972
onDragStart: function (evt,transferData,action) {
973
transferData.data = createTransferDataForEntry(evt.currentTarget.getAttribute("speeddial"));
974
if (transferData.data == null)
979
getSupportedFlavours : function () {
980
var flavours = new FlavourSet();
981
flavours.appendFlavour("text/x-speeddial-entry");
982
flavours.appendFlavour("text/x-moz-url");
983
flavours.appendFlavour("application/x-moz-file", "nsIFile");
987
checkCanDrop: function(aEvent, aDragDropObserver) {
988
// Allow drop on itself
992
onDragOver: function (evt,flavour,session) {
995
onDragExit: function (aEvent, aDragSession) {
998
onDrop: function (aEvent,dropdata,session) {
1000
const kDSIID = Components.interfaces.nsIDragService;
1001
const kCopyAction = kDSIID.DRAGDROP_ACTION_COPY + kDSIID.DRAGDROP_ACTION_LINK;
1002
var moveIfPossible = !(session.dragAction & kCopyAction);
1004
var targetData = getSelectionFromXferData(session);
1005
var targetDial = aEvent.currentTarget.getAttribute("speeddial");
1007
if (targetData.type == "speedDialId") {
1008
var originalDial = targetData.value;
1010
if (originalDial == targetDial) {
1011
// If dropping on itself, just open it
1012
openURL(gPref.getCharPref("extensions.speeddial.thumbnail-" + originalDial + "-url"), "current");
1016
if (moveIfPossible) {
1017
SpeedDialUtils.deassignThumbnail(numberThumbnails+1);
1018
SpeedDialUtils.deassignThumbnail(numberThumbnails+2);
1021
moveThumbnailImage(originalDial, numberThumbnails+1);
1022
moveThumbnailImage(targetDial, numberThumbnails+2);
1025
copyThumbnailData(originalDial, numberThumbnails+1);
1026
SpeedDialUtils.deassignThumbnail(originalDial);
1027
copyThumbnailData(targetDial, originalDial);
1028
SpeedDialUtils.deassignThumbnail(targetDial);
1029
copyThumbnailData(numberThumbnails+1, targetDial);
1031
SpeedDialUtils.deassignThumbnail(numberThumbnails+1);
1033
// Move images back again
1034
moveThumbnailImage(numberThumbnails+1, targetDial);
1035
moveThumbnailImage(numberThumbnails+2, originalDial);
1038
if (enableCache || oldResampling) {
1039
cacheService.setImage(getThumbnailImageURL(originalDial), originalDial);
1040
cacheService.setImage(getThumbnailImageURL(targetDial), targetDial);
1043
SpeedDialUtils.deassignThumbnail(targetDial);
1044
copyThumbnailData(originalDial, targetDial);
1046
copyThumbnailImage(originalDial, targetDial);
1049
if (enableCache || oldResampling) {
1050
cacheService.setImage(getThumbnailImageURL(targetDial), targetDial);
1054
// We're inserting a new URL if possible...
1055
var url = transferUtils.retrieveURLFromData(targetData.data, targetData.contentType);
1057
if (!url || !url.length || url.indexOf(" ", 0) != -1 ||
1058
/^\s*(javascript|data):/.test(url))
1061
// Just add the information...
1062
gPref.setCharPref("extensions.speeddial.thumbnail-" + targetDial + "-url", url);
1064
var str = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);
1066
gPref.setComplexValue("extensions.speeddial.thumbnail-" + targetDial + "-label", Components.interfaces.nsISupportsString, str);
1068
gPref.setCharPref("extensions.speeddial.thumbnail-" + targetDial + "-icon", "data:");
1069
gPref.setBoolPref("extensions.speeddial.thumbnail-" + targetDial + "-dynamictitle", true);
1071
// add time intervals
1072
var defaultRefreshInterval = gPref.getIntPref("extensions.speeddial.defaultRefreshInterval");
1073
if (defaultRefreshInterval > 0) {
1074
gPref.setIntPref("extensions.speeddial.thumbnail-" + targetDial + "-refreshinterval", defaultRefreshInterval);
1076
if (gPref.prefHasUserValue("extensions.speeddial.thumbnail-" + targetDial + "-refreshinterval")) {
1077
gPref.clearUserPref("extensions.speeddial.thumbnail-" + targetDial + "-refreshinterval");
1081
if (gPref.prefHasUserValue("extensions.speeddial.thumbnail-" + targetDial + "-lastsaved")) {
1082
gPref.clearUserPref("extensions.speeddial.thumbnail-" + targetDial + "-lastsaved");
1085
if (gPref.prefHasUserValue("extensions.speeddial.thumbnail-" + targetDial + "-format")) {
1086
gPref.clearUserPref("extensions.speeddial.thumbnail-" + targetDial + "-format");
1089
if (gPref.prefHasUserValue("extensions.speeddial.thumbnail-" + targetDial + "-backgroundcolor")) {
1090
gPref.clearUserPref("extensions.speeddial.thumbnail-" + targetDial + "-backgroundcolor");
1093
if (gPref.prefHasUserValue("extensions.speeddial.thumbnail-" + targetDial + "-layout")) {
1094
gPref.clearUserPref("extensions.speeddial.thumbnail-" + targetDial + "-layout");
1097
if (gPref.prefHasUserValue("extensions.speeddial.thumbnail-" + targetDial + "-cropping")) {
1098
gPref.clearUserPref("extensions.speeddial.thumbnail-" + targetDial + "-cropping");
1101
if (gPref.prefHasUserValue("extensions.speeddial.thumbnail-" + targetDial + "-thumbnailurl")) {
1102
gPref.clearUserPref("extensions.speeddial.thumbnail-" + targetDial + "-thumbnailurl");
1110
canHandleMultipleItems: false
1113
function getSelectionFromXferData(aDragSession) {
1115
var trans = Components.classes["@mozilla.org/widget/transferable;1"]
1116
.createInstance(Components.interfaces.nsITransferable);
1117
trans.addDataFlavor("text/x-speeddial-entry");
1118
trans.addDataFlavor("text/x-moz-url");
1119
trans.addDataFlavor("text/x-moz-file");
1120
trans.addDataFlavor("text/unicode");
1121
var uri, extra, rSource, rParent, parent;
1122
if (aDragSession.numDropItems > 0) {
1123
var bestFlavour = {}, dataObj = {}, len = {};
1124
aDragSession.getData(trans, 0);
1125
trans.getAnyTransferData(bestFlavour, dataObj, len);
1126
dataObj = dataObj.value.QueryInterface(Components.interfaces.nsISupportsString);
1128
var value = dataObj.data.substring(0, len.value);
1130
newValue.value = value;
1131
switch (bestFlavour.value) {
1132
case "text/x-speeddial-entry":
1133
newValue.type = "speedDialId";
1135
case "text/x-moz-url":
1136
case "text/x-moz-file":
1137
case "text/unicode":
1138
newValue.type = "url";
1139
newValue.contentType = bestFlavour.value;
1140
newValue.data = dataObj.data;
1148
function createTransferDataForEntry(targetEntry) {
1152
if (gPref.prefHasUserValue("extensions.speeddial.thumbnail-" + targetEntry + "-url")) {
1153
value = gPref.getCharPref("extensions.speeddial.thumbnail-" + targetEntry + "-url");
1158
if (gPref.prefHasUserValue("extensions.speeddial.thumbnail-" + targetEntry + "-label")) {
1159
title = gPref.getCharPref("extensions.speeddial.thumbnail-" + targetEntry + "-label");
1165
title = speedDialBundle.getString("untitled.label");
1168
var urlString = value + "\n" + title;
1169
var htmlString = "<a href=\"" + value + "\">" + title + "</a>";
1171
var data = new TransferData();
1172
data.addDataForFlavour("text/x-speeddial-entry", targetEntry);
1173
if ((value == "") || (value == "about:blank")) {
1174
data.addDataForFlavour("text/unicode", value);
1176
data.addDataForFlavour("text/x-moz-url", urlString);
1177
data.addDataForFlavour("text/unicode", value);
1178
data.addDataForFlavour("text/html", htmlString);
1184
function calculateBoardSize() {
1185
var innerBox = document.getElementById("speedDialPanel" + currentGroup);
1186
boardWidth = innerBox.boxObject.width;
1187
boardHeight = innerBox.boxObject.height;
1188
if (boardWidthModifierType == 0) {
1189
boardWidth = Math.floor(boardWidth * boardWidthModifier / 100);
1191
boardWidth -= boardWidthModifier;
1193
if ((boardMinimumWidth > 0) && (boardWidth < boardMinimumWidth)) {
1194
boardWidth = boardMinimumWidth;
1196
if ((boardMaximumWidth > 0) && (boardWidth > boardMaximumWidth)) {
1197
boardWidth = boardMaximumWidth;
1200
if (boardHeightModifierType == 0) {
1201
boardHeight = Math.floor(boardHeight * boardHeightModifier / 100);
1203
boardHeight -= boardHeightModifier;
1205
if ((boardMinimumHeight > 0) && (boardHeight < boardMinimumHeight)) {
1206
boardHeight = boardMinimumHeight;
1208
if ((boardMaximumHeight > 0) && (boardHeight > boardMaximumHeight)) {
1209
boardHeight = boardMaximumHeight;
1212
if (boardWidth > innerBox.boxObject.width) boardWidth = innerBox.boxObject.width;
1213
if (boardHeight > innerBox.boxObject.height) boardHeight = innerBox.boxObject.height;
1216
innerBox.style.paddingLeft = Math.floor((innerBox.boxObject.width - boardWidth) / 2) + "px";
1217
innerBox.style.paddingRight = innerBox.style.paddingLeft;
1218
innerBox.style.paddingTop = Math.floor((innerBox.boxObject.height - boardHeight) / 2) + "px";
1219
innerBox.style.paddingBottom = innerBox.style.paddingTop;
1222
function groupContextShowing(event) {
1223
var currentNode = document.popupNode;
1225
while ((currentNode.parentNode) && !found) {
1226
if (currentNode.localName == "tab") {
1229
currentNode = currentNode.parentNode;
1232
// Show edit and remove
1233
document.getElementById("groupcontext-edit").setAttribute("hidden", false);
1234
var contextRemove = document.getElementById("groupcontext-remove");
1235
contextRemove.setAttribute("hidden", false);
1236
if (numGroups < 2) {
1237
contextRemove.setAttribute("disabled", true);
1239
contextRemove.setAttribute("disabled", false);
1242
// hide edit and remove
1243
document.getElementById("groupcontext-edit").setAttribute("hidden", true);
1244
document.getElementById("groupcontext-remove").setAttribute("hidden", true);
1249
window.addEventListener("load", function(e) { speeddialStartup() }, false);