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

Unified Diff: third_party/WebKit/Source/devtools/front_end/components/CustomPreviewComponent.js

Issue 2712513002: DevTools: extract ObjectUI module from Components (Closed)
Patch Set: fix build.gn Created 3 years, 10 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 side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/devtools/front_end/components/CustomPreviewComponent.js
diff --git a/third_party/WebKit/Source/devtools/front_end/components/CustomPreviewComponent.js b/third_party/WebKit/Source/devtools/front_end/components/CustomPreviewComponent.js
deleted file mode 100644
index b7f2e1c2502f25c7cf4423513e15c9afd9db24a1..0000000000000000000000000000000000000000
--- a/third_party/WebKit/Source/devtools/front_end/components/CustomPreviewComponent.js
+++ /dev/null
@@ -1,241 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-/**
- * @unrestricted
- */
-Components.CustomPreviewSection = class {
- /**
- * @param {!SDK.RemoteObject} object
- */
- constructor(object) {
- this._sectionElement = createElementWithClass('span', 'custom-expandable-section');
- this._object = object;
- this._expanded = false;
- this._cachedContent = null;
- var customPreview = object.customPreview();
-
- try {
- var headerJSON = JSON.parse(customPreview.header);
- } catch (e) {
- Common.console.error('Broken formatter: header is invalid json ' + e);
- return;
- }
- this._header = this._renderJSONMLTag(headerJSON);
- if (this._header.nodeType === Node.TEXT_NODE) {
- Common.console.error('Broken formatter: header should be an element node.');
- return;
- }
-
- if (customPreview.hasBody) {
- this._header.classList.add('custom-expandable-section-header');
- this._header.addEventListener('click', this._onClick.bind(this), false);
- this._expandIcon = UI.Icon.create('smallicon-triangle-right', 'custom-expand-icon');
- this._header.insertBefore(this._expandIcon, this._header.firstChild);
- }
-
- this._sectionElement.appendChild(this._header);
- }
-
- /**
- * @return {!Element}
- */
- element() {
- return this._sectionElement;
- }
-
- /**
- * @param {*} jsonML
- * @return {!Node}
- */
- _renderJSONMLTag(jsonML) {
- if (!Array.isArray(jsonML))
- return createTextNode(jsonML + '');
-
- var array = /** @type {!Array.<*>} */ (jsonML);
- return array[0] === 'object' ? this._layoutObjectTag(array) : this._renderElement(array);
- }
-
- /**
- *
- * @param {!Array.<*>} object
- * @return {!Node}
- */
- _renderElement(object) {
- var tagName = object.shift();
- if (!Components.CustomPreviewSection._tagsWhiteList.has(tagName)) {
- Common.console.error('Broken formatter: element ' + tagName + ' is not allowed!');
- return createElement('span');
- }
- var element = createElement(/** @type {string} */ (tagName));
- if ((typeof object[0] === 'object') && !Array.isArray(object[0])) {
- var attributes = object.shift();
- for (var key in attributes) {
- var value = attributes[key];
- if ((key !== 'style') || (typeof value !== 'string'))
- continue;
-
- element.setAttribute(key, value);
- }
- }
-
- this._appendJsonMLTags(element, object);
- return element;
- }
-
- /**
- * @param {!Array.<*>} objectTag
- * @return {!Node}
- */
- _layoutObjectTag(objectTag) {
- objectTag.shift();
- var attributes = objectTag.shift();
- var remoteObject = this._object.target().runtimeModel.createRemoteObject(
- /** @type {!Protocol.Runtime.RemoteObject} */ (attributes));
- if (remoteObject.customPreview())
- return (new Components.CustomPreviewSection(remoteObject)).element();
-
- var sectionElement = Components.ObjectPropertiesSection.defaultObjectPresentation(remoteObject);
- sectionElement.classList.toggle('custom-expandable-section-standard-section', remoteObject.hasChildren);
- return sectionElement;
- }
-
- /**
- * @param {!Node} parentElement
- * @param {!Array.<*>} jsonMLTags
- */
- _appendJsonMLTags(parentElement, jsonMLTags) {
- for (var i = 0; i < jsonMLTags.length; ++i)
- parentElement.appendChild(this._renderJSONMLTag(jsonMLTags[i]));
- }
-
- /**
- * @param {!Event} event
- */
- _onClick(event) {
- event.consume(true);
- if (this._cachedContent)
- this._toggleExpand();
- else
- this._loadBody();
- }
-
- _toggleExpand() {
- this._expanded = !this._expanded;
- this._header.classList.toggle('expanded', this._expanded);
- this._cachedContent.classList.toggle('hidden', !this._expanded);
- if (this._expanded)
- this._expandIcon.setIconType('smallicon-triangle-down');
- else
- this._expandIcon.setIconType('smallicon-triangle-right');
- }
-
- _loadBody() {
- /**
- * @suppressReceiverCheck
- * @suppressGlobalPropertiesCheck
- * @suppress {undefinedVars}
- * @this {Object}
- * @param {function(!Object, *):*} bindRemoteObject
- * @param {*=} formatter
- * @param {*=} config
- */
- function load(bindRemoteObject, formatter, config) {
- /**
- * @param {*} jsonMLObject
- * @throws {string} error message
- */
- function substituteObjectTagsInCustomPreview(jsonMLObject) {
- if (!jsonMLObject || (typeof jsonMLObject !== 'object') || (typeof jsonMLObject.splice !== 'function'))
- return;
-
- var obj = jsonMLObject.length;
- if (!(typeof obj === 'number' && obj >>> 0 === obj && (obj > 0 || 1 / obj > 0)))
- return;
-
- var startIndex = 1;
- if (jsonMLObject[0] === 'object') {
- var attributes = jsonMLObject[1];
- var originObject = attributes['object'];
- var config = attributes['config'];
- if (typeof originObject === 'undefined')
- throw 'Illegal format: obligatory attribute "object" isn\'t specified';
-
- jsonMLObject[1] = bindRemoteObject(originObject, config);
- startIndex = 2;
- }
- for (var i = startIndex; i < jsonMLObject.length; ++i)
- substituteObjectTagsInCustomPreview(jsonMLObject[i]);
- }
-
- try {
- var body = formatter.body(this, config);
- substituteObjectTagsInCustomPreview(body);
- return body;
- } catch (e) {
- console.error('Custom Formatter Failed: ' + e);
- return null;
- }
- }
-
- var customPreview = this._object.customPreview();
- var args = [{objectId: customPreview.bindRemoteObjectFunctionId}, {objectId: customPreview.formatterObjectId}];
- if (customPreview.configObjectId)
- args.push({objectId: customPreview.configObjectId});
- this._object.callFunctionJSON(load, args, onBodyLoaded.bind(this));
-
- /**
- * @param {*} bodyJsonML
- * @this {Components.CustomPreviewSection}
- */
- function onBodyLoaded(bodyJsonML) {
- if (!bodyJsonML)
- return;
-
- this._cachedContent = this._renderJSONMLTag(bodyJsonML);
- this._sectionElement.appendChild(this._cachedContent);
- this._toggleExpand();
- }
- }
-};
-
-/**
- * @unrestricted
- */
-Components.CustomPreviewComponent = class {
- /**
- * @param {!SDK.RemoteObject} object
- */
- constructor(object) {
- this._object = object;
- this._customPreviewSection = new Components.CustomPreviewSection(object);
- this.element = createElementWithClass('span', 'source-code');
- var shadowRoot = UI.createShadowRootWithCoreStyles(this.element, 'components/customPreviewComponent.css');
- this.element.addEventListener('contextmenu', this._contextMenuEventFired.bind(this), false);
- shadowRoot.appendChild(this._customPreviewSection.element());
- }
-
- expandIfPossible() {
- if (this._object.customPreview().hasBody && this._customPreviewSection)
- this._customPreviewSection._loadBody();
- }
-
- /**
- * @param {!Event} event
- */
- _contextMenuEventFired(event) {
- var contextMenu = new UI.ContextMenu(event);
- if (this._customPreviewSection)
- contextMenu.appendItem(Common.UIString.capitalize('Show as Javascript ^object'), this._disassemble.bind(this));
- contextMenu.appendApplicableItems(this._object);
- contextMenu.show();
- }
-
- _disassemble() {
- this.element.shadowRoot.textContent = '';
- this._customPreviewSection = null;
- this.element.shadowRoot.appendChild(Components.ObjectPropertiesSection.defaultObjectPresentation(this._object));
- }
-};
-
-Components.CustomPreviewSection._tagsWhiteList = new Set(['span', 'div', 'ol', 'li', 'table', 'tr', 'td']);

Powered by Google App Engine
This is Rietveld 408576698