OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2011 Google Inc. All rights reserved. | 2 * Copyright (C) 2011 Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
6 * met: | 6 * met: |
7 * | 7 * |
8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
43 /** @type {?WebInspector.SearchableView} */ | 43 /** @type {?WebInspector.SearchableView} */ |
44 this._searchableView; | 44 this._searchableView; |
45 /** @type {!WebInspector.ObjectPropertiesSection} */ | 45 /** @type {!WebInspector.ObjectPropertiesSection} */ |
46 this._treeOutline; | 46 this._treeOutline; |
47 /** @type {number} */ | 47 /** @type {number} */ |
48 this._currentSearchFocusIndex = 0; | 48 this._currentSearchFocusIndex = 0; |
49 /** @type {!Array.<!TreeElement>} */ | 49 /** @type {!Array.<!TreeElement>} */ |
50 this._currentSearchTreeElements = []; | 50 this._currentSearchTreeElements = []; |
51 /** @type {?RegExp} */ | 51 /** @type {?RegExp} */ |
52 this._searchRegex = null; | 52 this._searchRegex = null; |
53 } | 53 }; |
54 | 54 |
55 /** | 55 /** |
56 * @param {!WebInspector.ParsedJSON} parsedJSON | 56 * @param {!WebInspector.ParsedJSON} parsedJSON |
57 * @return {!WebInspector.SearchableView} | 57 * @return {!WebInspector.SearchableView} |
58 */ | 58 */ |
59 WebInspector.JSONView.createSearchableView = function(parsedJSON) | 59 WebInspector.JSONView.createSearchableView = function(parsedJSON) |
60 { | 60 { |
61 var jsonView = new WebInspector.JSONView(parsedJSON); | 61 var jsonView = new WebInspector.JSONView(parsedJSON); |
62 var searchableView = new WebInspector.SearchableView(jsonView); | 62 var searchableView = new WebInspector.SearchableView(jsonView); |
63 searchableView.setPlaceholder(WebInspector.UIString("Find")); | 63 searchableView.setPlaceholder(WebInspector.UIString("Find")); |
64 jsonView._searchableView = searchableView; | 64 jsonView._searchableView = searchableView; |
65 jsonView.show(searchableView.element); | 65 jsonView.show(searchableView.element); |
66 jsonView.element.setAttribute("tabIndex", 0); | 66 jsonView.element.setAttribute("tabIndex", 0); |
67 return searchableView; | 67 return searchableView; |
68 } | 68 }; |
69 | 69 |
70 /** | 70 /** |
71 * @param {?string} text | 71 * @param {?string} text |
72 * @return {!Promise<?WebInspector.ParsedJSON>} | 72 * @return {!Promise<?WebInspector.ParsedJSON>} |
73 */ | 73 */ |
74 WebInspector.JSONView.parseJSON = function(text) | 74 WebInspector.JSONView.parseJSON = function(text) |
75 { | 75 { |
76 var returnObj = null; | 76 var returnObj = null; |
77 if (text) | 77 if (text) |
78 returnObj = WebInspector.JSONView._extractJSON(/** @type {string} */ (te
xt)); | 78 returnObj = WebInspector.JSONView._extractJSON(/** @type {string} */ (te
xt)); |
79 if (!returnObj) | 79 if (!returnObj) |
80 return Promise.resolve(/** @type {?WebInspector.ParsedJSON} */ (null)); | 80 return Promise.resolve(/** @type {?WebInspector.ParsedJSON} */ (null)); |
81 return WebInspector.formatterWorkerPool.runTask("relaxedJSONParser", {conten
t: returnObj.data}) | 81 return WebInspector.formatterWorkerPool.runTask("relaxedJSONParser", {conten
t: returnObj.data}) |
82 .then(handleReturnedJSON) | 82 .then(handleReturnedJSON); |
83 | 83 |
84 /** | 84 /** |
85 * @param {?MessageEvent} event | 85 * @param {?MessageEvent} event |
86 * @return {?WebInspector.ParsedJSON} | 86 * @return {?WebInspector.ParsedJSON} |
87 */ | 87 */ |
88 function handleReturnedJSON(event) | 88 function handleReturnedJSON(event) |
89 { | 89 { |
90 if (!event || !event.data) | 90 if (!event || !event.data) |
91 return null; | 91 return null; |
92 returnObj.data = event.data; | 92 returnObj.data = event.data; |
93 return returnObj; | 93 return returnObj; |
94 } | 94 } |
95 } | 95 }; |
96 | 96 |
97 /** | 97 /** |
98 * @param {string} text | 98 * @param {string} text |
99 * @return {?WebInspector.ParsedJSON} | 99 * @return {?WebInspector.ParsedJSON} |
100 */ | 100 */ |
101 WebInspector.JSONView._extractJSON = function(text) | 101 WebInspector.JSONView._extractJSON = function(text) |
102 { | 102 { |
103 // Do not treat HTML as JSON. | 103 // Do not treat HTML as JSON. |
104 if (text.startsWith("<")) | 104 if (text.startsWith("<")) |
105 return null; | 105 return null; |
106 var inner = WebInspector.JSONView._findBrackets(text, "{", "}"); | 106 var inner = WebInspector.JSONView._findBrackets(text, "{", "}"); |
107 var inner2 = WebInspector.JSONView._findBrackets(text, "[", "]"); | 107 var inner2 = WebInspector.JSONView._findBrackets(text, "[", "]"); |
108 inner = inner2.length > inner.length ? inner2 : inner; | 108 inner = inner2.length > inner.length ? inner2 : inner; |
109 | 109 |
110 // Return on blank payloads or on payloads significantly smaller than origin
al text. | 110 // Return on blank payloads or on payloads significantly smaller than origin
al text. |
111 if (inner.length === -1 || text.length - inner.length > 80) | 111 if (inner.length === -1 || text.length - inner.length > 80) |
112 return null; | 112 return null; |
113 | 113 |
114 var prefix = text.substring(0, inner.start); | 114 var prefix = text.substring(0, inner.start); |
115 var suffix = text.substring(inner.end + 1); | 115 var suffix = text.substring(inner.end + 1); |
116 text = text.substring(inner.start, inner.end + 1); | 116 text = text.substring(inner.start, inner.end + 1); |
117 | 117 |
118 // Only process valid JSONP. | 118 // Only process valid JSONP. |
119 if (suffix.trim().length && !(suffix.trim().startsWith(")") && prefix.trim()
.endsWith("("))) | 119 if (suffix.trim().length && !(suffix.trim().startsWith(")") && prefix.trim()
.endsWith("("))) |
120 return null; | 120 return null; |
121 | 121 |
122 return new WebInspector.ParsedJSON(text, prefix, suffix); | 122 return new WebInspector.ParsedJSON(text, prefix, suffix); |
123 } | 123 }; |
124 | 124 |
125 /** | 125 /** |
126 * @param {string} text | 126 * @param {string} text |
127 * @param {string} open | 127 * @param {string} open |
128 * @param {string} close | 128 * @param {string} close |
129 * @return {{start: number, end: number, length: number}} | 129 * @return {{start: number, end: number, length: number}} |
130 */ | 130 */ |
131 WebInspector.JSONView._findBrackets = function(text, open, close) | 131 WebInspector.JSONView._findBrackets = function(text, open, close) |
132 { | 132 { |
133 var start = text.indexOf(open); | 133 var start = text.indexOf(open); |
134 var end = text.lastIndexOf(close); | 134 var end = text.lastIndexOf(close); |
135 var length = end - start - 1; | 135 var length = end - start - 1; |
136 if (start === -1 || end === -1 || end < start) | 136 if (start === -1 || end === -1 || end < start) |
137 length = -1; | 137 length = -1; |
138 return {start: start, end: end, length: length}; | 138 return {start: start, end: end, length: length}; |
139 } | 139 }; |
140 | 140 |
141 WebInspector.JSONView.prototype = { | 141 WebInspector.JSONView.prototype = { |
142 wasShown: function() | 142 wasShown: function() |
143 { | 143 { |
144 this._initialize(); | 144 this._initialize(); |
145 }, | 145 }, |
146 | 146 |
147 _initialize: function() | 147 _initialize: function() |
148 { | 148 { |
149 if (this._initialized) | 149 if (this._initialized) |
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
289 /** | 289 /** |
290 * @override | 290 * @override |
291 * @return {boolean} | 291 * @return {boolean} |
292 */ | 292 */ |
293 supportsRegexSearch: function() | 293 supportsRegexSearch: function() |
294 { | 294 { |
295 return true; | 295 return true; |
296 }, | 296 }, |
297 | 297 |
298 __proto__: WebInspector.VBox.prototype | 298 __proto__: WebInspector.VBox.prototype |
299 } | 299 }; |
300 | 300 |
301 /** | 301 /** |
302 * @constructor | 302 * @constructor |
303 * @param {*} data | 303 * @param {*} data |
304 * @param {string} prefix | 304 * @param {string} prefix |
305 * @param {string} suffix | 305 * @param {string} suffix |
306 */ | 306 */ |
307 WebInspector.ParsedJSON = function(data, prefix, suffix) | 307 WebInspector.ParsedJSON = function(data, prefix, suffix) |
308 { | 308 { |
309 this.data = data; | 309 this.data = data; |
310 this.prefix = prefix; | 310 this.prefix = prefix; |
311 this.suffix = suffix; | 311 this.suffix = suffix; |
312 } | 312 }; |
OLD | NEW |