| // Copyright 2017 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. |
| |
| import * as Common from '../common/common.js'; |
| import * as TextUtils from '../text_utils/text_utils.js'; // eslint-disable-line no-unused-vars |
| import * as UI from '../ui/ui.js'; |
| |
| import {FontView} from './FontView.js'; |
| import {ImageView} from './ImageView.js'; |
| import {JSONView} from './JSONView.js'; |
| import {ResourceSourceFrame} from './ResourceSourceFrame.js'; |
| import {XMLView} from './XMLView.js'; |
| |
| export class PreviewFactory { |
| /** |
| * @param {!TextUtils.ContentProvider.ContentProvider} provider |
| * @param {string} mimeType |
| * @returns {!Promise<?UI.Widget.Widget>} |
| */ |
| static async createPreview(provider, mimeType) { |
| let resourceType = Common.ResourceType.ResourceType.fromMimeType(mimeType); |
| if (resourceType === Common.ResourceType.resourceTypes.Other) { |
| resourceType = provider.contentType(); |
| } |
| |
| switch (resourceType) { |
| case Common.ResourceType.resourceTypes.Image: |
| return new ImageView(mimeType, provider); |
| case Common.ResourceType.resourceTypes.Font: |
| return new FontView(mimeType, provider); |
| } |
| |
| const deferredContent = await provider.requestContent(); |
| if (deferredContent.content === null) { |
| return new UI.EmptyWidget.EmptyWidget(deferredContent.error); |
| } |
| if (!deferredContent.content) { |
| return new UI.EmptyWidget.EmptyWidget(Common.UIString.UIString('Nothing to preview')); |
| } |
| |
| let content = deferredContent.content; |
| if (await provider.contentEncoded()) { |
| content = window.atob(content); |
| } |
| |
| const parsedXML = XMLView.parseXML(content, mimeType); |
| if (parsedXML) { |
| return XMLView.createSearchableView(parsedXML); |
| } |
| |
| const jsonView = await JSONView.createView(content); |
| if (jsonView) { |
| return jsonView; |
| } |
| |
| if (resourceType.isTextType()) { |
| const highlighterType = |
| provider.contentType().canonicalMimeType() || mimeType.replace(/;.*/, ''); // remove charset |
| return ResourceSourceFrame.createSearchableView(provider, highlighterType, true /* autoPrettyPrint */); |
| } |
| |
| return null; |
| } |
| } |