Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(657)

Side by Side Diff: Source/devtools/front_end/sources/XHRBreakpointsSidebarPane.js

Issue 988663002: DevTools: extract classes from BreakpointsSidebarPane.js (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2015 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.
4
5 /**
6 * @constructor
7 * @extends {WebInspector.BreakpointsSidebarPaneBase}
8 * @implements {WebInspector.TargetManager.Observer}
9 */
10 WebInspector.XHRBreakpointsSidebarPane = function()
11 {
12 WebInspector.BreakpointsSidebarPaneBase.call(this, WebInspector.UIString("XH R Breakpoints"));
13
14 /** @type {!Map.<string, !Element>} */
15 this._breakpointElements = new Map();
16
17 var addButton = this.titleElement.createChild("button", "pane-title-button a dd");
18 addButton.title = WebInspector.UIString("Add XHR breakpoint");
19 addButton.addEventListener("click", this._addButtonClicked.bind(this), false );
20
21 this.emptyElement.addEventListener("contextmenu", this._emptyElementContextM enu.bind(this), true);
22
23 WebInspector.targetManager.observeTargets(this);
24 }
25
26 WebInspector.XHRBreakpointsSidebarPane.prototype = {
27 /**
28 * @override
29 * @param {!WebInspector.Target} target
30 */
31 targetAdded: function(target)
32 {
33 this._restoreBreakpoints(target);
34 },
35
36 /**
37 * @override
38 * @param {!WebInspector.Target} target
39 */
40 targetRemoved: function(target) { },
41
42 _emptyElementContextMenu: function(event)
43 {
44 var contextMenu = new WebInspector.ContextMenu(event);
45 contextMenu.appendItem(WebInspector.UIString.capitalize("Add ^breakpoint "), this._addButtonClicked.bind(this));
46 contextMenu.show();
47 },
48
49 _addButtonClicked: function(event)
50 {
51 if (event)
52 event.consume();
53
54 this.expand();
55
56 var inputElementContainer = createElementWithClass("p", "breakpoint-cond ition");
57 inputElementContainer.textContent = WebInspector.UIString("Break when UR L contains:");
58
59 var inputElement = inputElementContainer.createChild("span", "editing");
60 inputElement.id = "breakpoint-condition-input";
61 this.addListElement(inputElementContainer, /** @type {?Element} */ (this .listElement.firstChild));
62
63 /**
64 * @param {boolean} accept
65 * @param {!Element} e
66 * @param {string} text
67 * @this {WebInspector.XHRBreakpointsSidebarPane}
68 */
69 function finishEditing(accept, e, text)
70 {
71 this.removeListElement(inputElementContainer);
72 if (accept) {
73 this._setBreakpoint(text, true);
74 this._saveBreakpoints();
75 }
76 }
77
78 var config = new WebInspector.InplaceEditor.Config(finishEditing.bind(th is, true), finishEditing.bind(this, false));
79 WebInspector.InplaceEditor.startEditing(inputElement, config);
80 },
81
82 /**
83 * @param {string} url
84 * @param {boolean} enabled
85 * @param {!WebInspector.Target=} target
86 */
87 _setBreakpoint: function(url, enabled, target)
88 {
89 if (enabled)
90 this._updateBreakpointOnTarget(url, true, target);
91
92 if (this._breakpointElements.has(url))
93 return;
94
95 var element = createElement("li");
96 element._url = url;
97 element.addEventListener("contextmenu", this._contextMenu.bind(this, url ), true);
98
99 var label = createCheckboxLabel(undefined, enabled);
100 label.classList.add("checkbox-elem");
101 element.appendChild(label);
102 label.checkboxElement.addEventListener("click", this._checkboxClicked.bi nd(this, url), false);
103 element._checkboxElement = label.checkboxElement;
104
105 var labelElement = label.createChild("span", "cursor-auto");
106 if (!url)
107 labelElement.textContent = WebInspector.UIString("Any XHR");
108 else
109 labelElement.textContent = WebInspector.UIString("URL contains \"%s\ "", url);
110 labelElement.addEventListener("dblclick", this._labelClicked.bind(this, url), false);
111
112 var currentElement = /** @type {?Element} */ (this.listElement.firstChil d);
113 while (currentElement) {
114 if (currentElement._url && currentElement._url < element._url)
115 break;
116 currentElement = /** @type {?Element} */ (currentElement.nextSibling );
117 }
118 this.addListElement(element, currentElement);
119 this._breakpointElements.set(url, element);
120 },
121
122 /**
123 * @param {string} url
124 * @param {!WebInspector.Target=} target
125 */
126 _removeBreakpoint: function(url, target)
127 {
128 var element = this._breakpointElements.get(url);
129 if (!element)
130 return;
131
132 this.removeListElement(element);
133 this._breakpointElements.delete(url);
134 if (element._checkboxElement.checked)
135 this._updateBreakpointOnTarget(url, false, target);
136 },
137
138 /**
139 * @param {string} url
140 * @param {boolean} enable
141 * @param {!WebInspector.Target=} target
142 */
143 _updateBreakpointOnTarget: function(url, enable, target)
144 {
145 var targets = target ? [target] : WebInspector.targetManager.targets();
146 for (var i = 0; i < targets.length; ++i) {
147 if (enable)
148 targets[i].domdebuggerAgent().setXHRBreakpoint(url);
149 else
150 targets[i].domdebuggerAgent().removeXHRBreakpoint(url);
151 }
152 },
153
154 _contextMenu: function(url, event)
155 {
156 var contextMenu = new WebInspector.ContextMenu(event);
157
158 /**
159 * @this {WebInspector.XHRBreakpointsSidebarPane}
160 */
161 function removeBreakpoint()
162 {
163 this._removeBreakpoint(url);
164 this._saveBreakpoints();
165 }
166
167 /**
168 * @this {WebInspector.XHRBreakpointsSidebarPane}
169 */
170 function removeAllBreakpoints()
171 {
172 for (var url of this._breakpointElements.keys())
173 this._removeBreakpoint(url);
174 this._saveBreakpoints();
175 }
176 var removeAllTitle = WebInspector.UIString.capitalize("Remove ^all ^brea kpoints");
177
178 contextMenu.appendItem(WebInspector.UIString.capitalize("Add ^breakpoint "), this._addButtonClicked.bind(this));
179 contextMenu.appendItem(WebInspector.UIString.capitalize("Remove ^breakpo int"), removeBreakpoint.bind(this));
180 contextMenu.appendItem(removeAllTitle, removeAllBreakpoints.bind(this));
181 contextMenu.show();
182 },
183
184 _checkboxClicked: function(url, event)
185 {
186 this._updateBreakpointOnTarget(url, event.target.checked);
187 this._saveBreakpoints();
188 },
189
190 _labelClicked: function(url)
191 {
192 var element = this._breakpointElements.get(url);
193 var inputElement = createElementWithClass("span", "breakpoint-condition editing");
194 inputElement.textContent = url;
195 this.listElement.insertBefore(inputElement, element);
196 element.classList.add("hidden");
197
198 /**
199 * @param {boolean} accept
200 * @param {!Element} e
201 * @param {string} text
202 * @this {WebInspector.XHRBreakpointsSidebarPane}
203 */
204 function finishEditing(accept, e, text)
205 {
206 this.removeListElement(inputElement);
207 if (accept) {
208 this._removeBreakpoint(url);
209 this._setBreakpoint(text, element._checkboxElement.checked);
210 this._saveBreakpoints();
211 } else
212 element.classList.remove("hidden");
213 }
214
215 WebInspector.InplaceEditor.startEditing(inputElement, new WebInspector.I nplaceEditor.Config(finishEditing.bind(this, true), finishEditing.bind(this, fal se)));
216 },
217
218 highlightBreakpoint: function(url)
219 {
220 var element = this._breakpointElements.get(url);
221 if (!element)
222 return;
223 this.expand();
224 element.classList.add("breakpoint-hit");
225 this._highlightedElement = element;
226 },
227
228 clearBreakpointHighlight: function()
229 {
230 if (this._highlightedElement) {
231 this._highlightedElement.classList.remove("breakpoint-hit");
232 delete this._highlightedElement;
233 }
234 },
235
236 _saveBreakpoints: function()
237 {
238 var breakpoints = [];
239 for (var url of this._breakpointElements.keys())
240 breakpoints.push({ url: url, enabled: this._breakpointElements.get(u rl)._checkboxElement.checked });
241 WebInspector.settings.xhrBreakpoints.set(breakpoints);
242 },
243
244 /**
245 * @param {!WebInspector.Target} target
246 */
247 _restoreBreakpoints: function(target)
248 {
249 var breakpoints = WebInspector.settings.xhrBreakpoints.get();
250 for (var i = 0; i < breakpoints.length; ++i) {
251 var breakpoint = breakpoints[i];
252 if (breakpoint && typeof breakpoint.url === "string")
253 this._setBreakpoint(breakpoint.url, breakpoint.enabled, target);
254 }
255 },
256
257 __proto__: WebInspector.BreakpointsSidebarPaneBase.prototype
258 }
OLDNEW
« no previous file with comments | « Source/devtools/front_end/sources/JavaScriptBreakpointsSidebarPane.js ('k') | Source/devtools/front_end/sources/module.json » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698