/* * Power BI Visual CLI * * Copyright (c) Microsoft Corporation * All rights reserved. * MIT License * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the ""Software""), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ "use strict"; import powerbi from "powerbi-visuals-api"; import { FormattingSettingsService } from "powerbi-visuals-utils-formattingmodel"; import VisualConstructorOptions = powerbi.extensibility.visual.VisualConstructorOptions; import VisualUpdateOptions = powerbi.extensibility.visual.VisualUpdateOptions; import IVisual = powerbi.extensibility.visual.IVisual; import DataView = powerbi.DataView; import IViewport = powerbi.IViewport; import { VisualFormattingSettingsModel } from "./settings"; export class Visual implements IVisual { private imageDiv: HTMLDivElement; private imageElement: HTMLImageElement; private formattingSettings: VisualFormattingSettingsModel; private formattingSettingsService: FormattingSettingsService; public constructor(options: VisualConstructorOptions) { this.formattingSettingsService = new FormattingSettingsService(); this.imageDiv = document.createElement("div"); this.imageDiv.className = "rcv_autoScaleImageContainer"; this.imageElement = document.createElement("img"); this.imageElement.className = "rcv_autoScaleImage"; this.imageDiv.appendChild(this.imageElement); options.element.appendChild(this.imageDiv); } public update(options: VisualUpdateOptions): void { if (!options || !options.type || !options.viewport || !options.dataViews || options.dataViews.length === 0 || !options.dataViews[0]) { return; } const dataView: DataView = options.dataViews[0]; this.formattingSettings = this.formattingSettingsService.populateFormattingSettingsModel(VisualFormattingSettingsModel, options.dataViews[0]); let imageUrl: string = null; if (dataView.scriptResult && dataView.scriptResult.payloadBase64) { imageUrl = "data:image/png;base64," + dataView.scriptResult.payloadBase64; } if (imageUrl) { this.imageElement.src = imageUrl; } else { this.imageElement.src = null; } this.onResizing(options.viewport); } public onResizing(finalViewport: IViewport): void { this.imageDiv.style.height = finalViewport.height + "px"; this.imageDiv.style.width = finalViewport.width + "px"; } /** * Returns properties pane formatting model content hierarchies, properties and latest formatting values, Then populate properties pane. * This method is called once every time we open properties pane or when the user edit any format property. */ public getFormattingModel(): powerbi.visuals.FormattingModel { return this.formattingSettingsService.buildFormattingModel(this.formattingSettings); } }