Skip to content

Commit cd42b74

Browse files
committed
partial fix to popup
1 parent 76b2f30 commit cd42b74

File tree

4 files changed

+234
-206
lines changed

4 files changed

+234
-206
lines changed

debug.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ debug.addDebugUI = function(document){
5959
var footer = document.getElementById('footer');
6060
var url = chrome.extension.getURL("do_not_package/view_log.html");
6161
var link = ' - <a href="javascript:chrome.tabs.create({url:\'' + url + '\'});">View logs</a>';
62-
footer.innerHTML = footer.innerHTML + link;
62+
// footer.innerHTML = footer.innerHTML + link;
6363
};
6464

6565
/* EVENT LISTENERS for logging */

localStorage.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
// helper function to restore from localStorage
2+
function restoreFromLocalStorage(key, defaultValue) {
3+
if (localStorage[key]) {
4+
return JSON.parse(localStorage[key]);
5+
} else {
6+
localStorage[key] = JSON.stringify(defaultValue);
7+
return defaultValue;
8+
}
9+
}

popup.html

Lines changed: 10 additions & 205 deletions
Original file line numberDiff line numberDiff line change
@@ -3,230 +3,35 @@
33

44
<link id="style" rel="stylesheet" type="text/css" href="popup.css" />
55

6-
<script type="text/javascript">
7-
8-
// FEATURE: support drag & drop re-ordering
9-
// FEATURE: support drag & drop merging
10-
11-
var backgroundPage = chrome.extension.getBackgroundPage();
12-
var savedWindowListEl, formEl, nameInput, template;
13-
var undo = new Object();
14-
15-
16-
function init() {
17-
// CSS buster - only used when developing locally
18-
style = document.getElementById("style");
19-
style.href = style.href + "?salt=" + Math.random();
20-
21-
// initialize variables we'll need
22-
savedWindowListEl = document.getElementById("savedWindowList");
23-
formEl = document.getElementById("form");
24-
nameInput = document.getElementById("nameInput");
25-
template = document.getElementById("template");
26-
27-
// populate list of windows
28-
chrome.windows.getCurrent(function(currentWindow) {
29-
var currentWindowName = backgroundPage.windowIdToName[currentWindow.id];
30-
var savedWindows = backgroundPage.savedWindows;
31-
var savedWindowNames = backgroundPage.savedWindowNames;
32-
for (var i in savedWindowNames) {
33-
var name = savedWindowNames[i];
34-
var savedWindow = savedWindows[name];
35-
appendWindowToList(savedWindow, currentWindowName);
36-
}
37-
if (!currentWindowName) {
38-
if (currentWindow.incognito) {
39-
document.getElementById("incognitoMsg").style.display = "block";
40-
} else {
41-
nameInput.value = backgroundPage.DEFAULT_NAME;
42-
formEl.style.display = "block";
43-
nameInput.focus();
44-
nameInput.select();
45-
}
46-
}
47-
});
48-
49-
// decrement update message counter
50-
var count = backgroundPage.updateMsgCount;
51-
if (count > 0) {
52-
backgroundPage.updateMsgCount = count - 1;
53-
localStorage.updateMsgCount = count - 1;
54-
document.getElementById("update").style.display = "block";
55-
} else {
56-
backgroundPage.updateBadgeForAllWindows();
57-
}
58-
59-
// this does nothing in the packaged extension
60-
backgroundPage.debug.addDebugUI(document);
61-
}
62-
63-
64-
// add window to HTML list of windows
65-
function appendWindowToList(savedWindow, currentWindowName) {
66-
var li = template.cloneNode(true);
67-
li.removeAttribute("id");
68-
li.setAttribute("data-name", savedWindow.name);
69-
70-
var count = savedWindow.tabs.length;
71-
var text = savedWindow.displayName + " (" + count + ")";
72-
if (savedWindow.name == currentWindowName) {
73-
li.className = "current";
74-
li.onclick = null;
75-
text = "This is <b>" + text + "<\/b>.";
76-
} else if (savedWindow.id) {
77-
li.className = "open";
78-
li.onclick = function() { focusOpenWindow(savedWindow.id); };
79-
}
80-
setText(li, text);
81-
82-
// FEATURE: add "add to this set" to add current tabs to existing one
83-
84-
savedWindowListEl.insertBefore(li, savedWindowListEl.firstChild);
85-
}
86-
87-
88-
// save window in background page and update display
89-
function saveWindow() {
90-
chrome.windows.getCurrent(function(currentWindow) {
91-
chrome.tabs.getAllInWindow(null, function(tabs) {
92-
currentWindow.tabs = tabs;
93-
savedWindow = backgroundPage.saveWindow(currentWindow, nameInput.value);
94-
formEl.style.display = "none";
95-
appendWindowToList(savedWindow, nameInput.value);
96-
backgroundPage._gaq.push(['_trackEvent', 'popup', 'saveWindow', 'Value is tab count.', savedWindow.tabs.length]);
97-
});
98-
});
99-
return false;
100-
}
101-
102-
103-
// open a saved window
104-
// called when the user clicks the name of a saved window that is closed.
105-
function openSavedWindow(element) {
106-
// TODO: refactor to just use name as argument
107-
name = element.getAttribute("data-name");
108-
backgroundPage.openWindow(name);
109-
110-
var savedWindow = backgroundPage.savedWindows[name];
111-
backgroundPage._gaq.push(['_trackEvent', 'popup', 'openWindow', 'Value is tab count.', savedWindow.tabs.length]);
112-
}
113-
114-
115-
// focus an open window
116-
// called when the user clicks the name of a saved window that is open.
117-
function focusOpenWindow(windowId) {
118-
chrome.windows.update(windowId, {focused: true});
119-
backgroundPage._gaq.push(['_trackEvent', 'popup', 'focusWindow']);
120-
}
121-
122-
123-
// delete a saved window
124-
// called when the user presses the delete button
125-
function deleteSavedWindow(event, element) {
126-
event.stopPropagation();
127-
128-
// get data
129-
var li = element.parentNode;
130-
var name = li.getAttribute("data-name");
131-
var savedWindow = backgroundPage.savedWindows[name]
132-
var text = li.childNodes[1].innerHTML;
133-
134-
// save information for undo
135-
undo[name] = {
136-
className: li.className,
137-
text: text,
138-
savedWindow: savedWindow,
139-
id: savedWindow.id
140-
};
141-
// we save this separately since deleteSavedWindow nixes it.
142-
if (savedWindow.id) {
143-
undo[name].id = savedWindow.id
144-
}
145-
146-
// actually perform the deletion
147-
backgroundPage.deleteSavedWindow(name);
148-
149-
// update display
150-
li.className = "deleted";
151-
setText(li, "<b>" + getDisplayName(savedWindow) + "<\/b> was deleted.");
152-
// TODO: show the form if current window
153-
154-
backgroundPage._gaq.push(['_trackEvent', 'popup', 'deleteWindow', 'Value is tab count.', savedWindow.tabs.length]);
155-
}
156-
157-
158-
// undo a deletion
159-
// called when the user presse the undo button
160-
function undoDeleteSavedWindow(event, element) {
161-
event.stopPropagation();
162-
163-
// get data
164-
var li = element.parentNode;
165-
var name = li.getAttribute("data-name");
166-
var undoInfo = undo[name];
167-
var savedWindow = undoInfo.savedWindow;
168-
169-
// restore the window id
170-
if (undoInfo.id) {
171-
savedWindow.id = undoInfo.id;
172-
}
173-
174-
// resave the window
175-
backgroundPage.saveWindow(savedWindow, name);
176-
177-
// update display
178-
li.className = undoInfo.className;
179-
setText(li, undoInfo.text);
180-
181-
// clean up
182-
delete undo[name];
183-
// TODO: hide the form if current window
184-
185-
backgroundPage._gaq.push(['_trackEvent', 'popup', 'undoDeleteWindow', 'Value is tab count.', savedWindow.tabs.length]);
186-
}
187-
188-
189-
// given a list element, sets the text
190-
function setText(element, text) {
191-
element.childNodes[1].innerHTML = text;
192-
}
193-
194-
195-
// formats the name for display
196-
function getDisplayName(savedWindow) {
197-
return savedWindow.displayName + " (" + savedWindow.tabs.length + ")";
198-
}
199-
200-
201-
</script>
6+
<script type="text/javascript" src="popup.js"></script>
2027

2038
</head>
2049

20510

206-
<body onload="init();">
11+
<body>
20712

20813
<div>
209-
<form id="form" onsubmit="return saveWindow();">
14+
<form id="form">
21015
Save as: <input type="text" id="nameInput" />
21116
</form>
21217
<div id="incognitoMsg">Note: you can't save incognito windows.</div>
21318
<ul id="savedWindowList">
214-
<li id="template" onclick="openSavedWindow(this);">
19+
<li id="template">
21520
<span class="text">Name</span><!--
216-
--><span class="delete" onclick="deleteSavedWindow(event, this);">
21+
--><span id="delete" class="delete">
21722
&times;
21823
</span><!--
219-
--><span class="undo" onclick="undoDeleteSavedWindow(event, this);">
24+
--><span id="undo" class="undo">
22025
undo
22126
</span>
22227
</li>
22328
</ul>
22429
<div id="footer">
225-
<span id="update">
226-
<img src="new.png" /> The extension has been updated (<a href="" onclick="chrome.tabs.create({url: 'https://chrome.google.com/extensions/detail/fpfmklldfnlcblofkhdeoohfppdoejdc'});">details</a>)<br/>
227-
If you like this extension, please <a href="" onclick="chrome.tabs.create({url: 'https://chrome.google.com/extensions/detail/fpfmklldfnlcblofkhdeoohfppdoejdc'});">rate it</a>. Thanks!<br/>
30+
<span id="updated">
31+
<img src="new.png" /> The extension has been updated (<a id="updated" href="">details</a>)<br/>
32+
If you like this extension, please <a href="" id="rate">rate it</a>. Thanks!<br/>
22833
</span>
229-
Bugs or suggestions? <a href="" onclick="chrome.tabs.create({url:'mailto:[email protected]'});">Contact me.</a>
34+
Bugs or suggestions? <a href="" id="contact">Contact me.</a>
23035
</div>
23136
</div>
23237

0 commit comments

Comments
 (0)