Skip to content

Commit

Permalink
Features/documentation (#7)
Browse files Browse the repository at this point in the history
* Fixed token setting issue. (Azure#1108)

* Fixed refresh logic for shared access signature tokens. Fixed time formatting. (Azure#1112)

* Hide the product subscription name on delegation (Azure#1113)

closes Azure#787

* Cleaned up authentication logic. Fixed issue with read-only props in schema. Fixes Map widget issue. (Azure#1115)

* Added headers in operation response docs (Azure#1117)

close Azure#693

* Operation list improvements (Azure#1116)

* Added toggle to manage operation name wrap
* Added a toggle to manage to show operation urlTemplate or name
* added search operation by urlTemplate
* changed wrap mode to break-word
close Azure#1019

* Added api products widgets (grid and tiles) (Azure#1126)

* Added API products widgets (grid and tiles)

* added style class for tiles

closes Azure#1072

* Fixed tabs for representation contentType (Azure#1127)

closes Azure#1119

* Fixed signout on close user account (Azure#1129)

Fixed signout on close user account
added notification parameter to send an email for the developer portal

* Added basic XSD schema support in API documentation. (Azure#1137)

* Fix for migration between subscription-to-subscription apim developer portal (Azure#1145)

* Fix for migration between subscription to subscription apim dev portal by passing the az login details in parameters

* updated description of parameter

* Fixed PR comments - updated optional description in parameters

* Added header to trace get mapi requests (Azure#1147)

* Process for migration scripts will return error code when scrip fails (Azure#1149)

* Added notification parameter for create user with AAD (Azure#1150)

* Fixed notification parameter for create user with OAuth (Azure#1152)

* Temporarily added supplying state parameter to the client. (Azure#1153)

* Added token retrieve from user activate MAPI request (Azure#1158)

* Added token retrive from user activate MAPI request
close Azure#1157

* Added logic to prevent DOM changes on request to prevent error (Azure#1160)

* Changed variable requestUrl to url (Azure#1159)

Co-authored-by: Erik Mogensen <erik.mogensen@hm.com>

* Added tiles widgets for api products and products list (Azure#1162)

* Changed conflict destToken -> destKey (Azure#1164)

Co-authored-by: Erik Mogensen <erik.mogensen@hm.com>

* Accessibility fix 8954122: removed action from operation name (Azure#1167)

* Upgraded paperbits libraries to 0.1.382. (Azure#1174)

* Fixed several bugs (Azure#1185)

* Bump elliptic from 6.5.3 to 6.5.4 (Azure#1178)

Bumps [elliptic](https://github.com/indutny/elliptic) from 6.5.3 to 6.5.4.
- [Release notes](https://github.com/indutny/elliptic/releases)
- [Commits](indutny/elliptic@v6.5.3...v6.5.4)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump prismjs from 1.22.0 to 1.23.0 (Azure#1169)

Bumps [prismjs](https://github.com/PrismJS/prism) from 1.22.0 to 1.23.0.
- [Release notes](https://github.com/PrismJS/prism/releases)
- [Changelog](https://github.com/PrismJS/prism/blob/master/CHANGELOG.md)
- [Commits](PrismJS/prism@v1.22.0...v1.23.0)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Rolled back azure libraries due to discovered bugs. Upraded node-sass and sass-loader packages. (Azure#1188)

* Added support for tags as a refrence in url for apis and operations (Azure#1189)

* Fixed layout for blocks and inline-blocks. (Azure#1190)

* Fixed layout for navigation items. Fixed bug with "Open in new window" option. (Azure#1193)

* Fixed several accessibility issues. (Azure#1195)

* Added asterisks to required form fields.
* Fixed luminosity contrast ratio for the form group toggle button.
* Unified hyperlink selector controls across components. Fixed tooltip binding.
* Added setting the aria-selected tag to code samples tabs.

* Fixed some issues with hyperlink and anchor resolution. (Azure#1197)

* Increase apiversion to handle minimum apiversion set (Azure#1215)

Co-authored-by: Erik Mogensen <erik.mogensen@hm.com>

* Fixed issues with menu and hyperlink rendering. (Azure#1222)

* Fixed dropdown styles and functionality. Fixed report widgets. (Azure#1223)

* Extended "Operation details" widget with "Use CORS proxy" option. (Azure#1233)

* Fixed delegation actions names (Azure#1234)

Fixed delegation actions names

* Uncommented /portalRevisions endpoint to enable publishing. (Azure#1236)

* Contrast colors fix for try button and focus selection (Azure#1239)

* [scripts.v3] fix: http request fails when response code is 202, which means Accepted (Azure#1242)

Co-authored-by: Benas Taurosevicius <Benas.Taurosevicius@centric.eu>

* Fixes for token refresh logic. (Azure#1252)

* Removed devops scripts v1. (Azure#1259)

* Revise readme.md to point to new documentation (Azure#1263)

* Added support for "resource owner password" grant flow. (Azure#1219)

* Added missing hamburger icon style. (Azure#1270)

* Fixed close account. Reuse sign-out on account close. (Azure#1285)

* Fixed close account. Reuse signout on account close.

* use update instead of init in markdown bindingHandler (Azure#1279)

* Upgraded dependency libraries. Added new widget icons. (Azure#1288)

* Fixed several accessibility issues (Azure#1292)

* Fixed accessibility issues with tab controls.
* Fixed syntax highlight colors to comply with luminosity requirements.
* Added dialog-like behavior to Test console panel.

* Added capture/generate scripts metadata operations. (Azure#1295)

* Removed direct dependency of node-sass module. (Azure#1317)

* Fixed form controls focus highlight. (Azure#1318)

* Fixed serveal accessibility and security issues. Fixed build issues with sass-loader. (Azure#1324)

* Added support sso token in hash (Azure#1339)

* WebSocket APIs (Azure#1297)

Added code templates for ws
Added API type in API list
Improved WebSockets examples
Improved WebSockets support in test console
Merged changes from managed version

* Leveraged B2C signout. Moved AAD/B2C configuration publishing into config.json. Added option to override reply URL(s). (Azure#1346)

* Fixed minor issues with B2C configuration. Switched publishing functionality to portal revisions API. (Azure#1349)

* Added support for setting folders and timestamp (Azure#1365)

Co-authored-by: Erik Mogensen <erik.mogensen@users.noreply.github.com>

* Added support for multipart request body in Test console (Azure#1359)

Co-authored-by: Igor O <igo@microsoft.com>

* Added basic mulitpart form data support to API documentation. (Azure#1381)

* Azure Devops pipeline to migrate APIM dev portal from one instance to another instance of APIM (Azure#1362)

* Revert "Azure Devops pipeline to migrate APIM dev portal from one instance to another instance of APIM (Azure#1362)" (Azure#1390)

This reverts commit 0c618f7.

* Upgraded dependencies. Replaced deprecated awesome-typescript-loader with ts-loader. Fixed Terser build configuration. (Azure#1391)

* Fixed minor issue with AAD signout. Rolled back terser-webpack-plugin version to mitigate build issues. (Azure#1392)

* feat: ignore .DS_Store files (Azure#1397)

* fix aadB2CClientConfig casing (Azure#1395)

* Disabled scrolling to operation name by default. (Azure#1402)

* Fixed widget selection issue in layout editor. (Azure#1418)

* Added functionality to show legal text by default on product page load (Azure#1414)

* script to add GTM to developer portal (Azure#1405)

* Added npm dependencies

* Specify npm dependencies version

* Navigation menu for default layout update

* Import for icons fix

* Material icons import - Added sass logic

* Authentication

- Navigation menu through the widget designer
- Removed icon from B2C button

* Merge branch 'master' into feature/auth

* Testing Sign-in AD B2C

* Redirect to home when unauthorized

* Avatar menu when authenticated

* Fixed config modelBinder

* Custom widget config

* Custom avatar menu

* Fixing widget contract

* Basic widget contract and view model binder

* Removed widget editor

"Visible to" logic is directly set in the code not through the editor

* Code clean-up

* API custom tiles

* Seperating style for API tiles

* Same folder for custom style

* Include custom style in already existing file

* Custom documentation service

- Service to get markdowns from github repository

Co-authored-by: Alexander Zaslonov <zaslonov.alexander@gmail.com>
Co-authored-by: Igor O <ygrik@hotmail.com>
Co-authored-by: Sanjeevi Subramani <ssanjeevi.ss@gmail.com>
Co-authored-by: Marcin Dudek <manekd@gmail.com>
Co-authored-by: Erik Mogensen <ErikMogensen@users.noreply.github.com>
Co-authored-by: Erik Mogensen <erik.mogensen@hm.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Benas Taurosevičius <b.taurosevicius@gmail.com>
Co-authored-by: Benas Taurosevicius <Benas.Taurosevicius@centric.eu>
Co-authored-by: Mike Budzynski <40186513+mikebudzynski@users.noreply.github.com>
Co-authored-by: patst <patrick.steinig@googlemail.com>
Co-authored-by: Erik Mogensen <erik.mogensen@users.noreply.github.com>
Co-authored-by: Igor O <igo@microsoft.com>
Co-authored-by: Bernhard Rode <mail@bernhardrode.de>
Co-authored-by: Travis Whipps <88871562+traviswhipps@users.noreply.github.com>
Co-authored-by: Nik Osvalds <60047271+nosvalds@users.noreply.github.com>
  • Loading branch information
17 people authored Oct 20, 2021
1 parent fda8b9f commit 35596a5
Show file tree
Hide file tree
Showing 50 changed files with 1,198 additions and 143 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import { IInjectorModule, IInjector } from "@paperbits/common/injection";
import { BemoDocumentationEditor } from "./ko/bemoDocumentationEditorViewModel";
import { BemoDocumentationHandlers } from "./bemoDocumentationHandlers";
import { BemoDocumentationViewModel, BemoDocumentationViewModelBinder } from "./ko";
import { BemoDocumentationModelBinder } from "./bemoDocumentationModelBinder";

export class BemoDocumentationDesignModule implements IInjectorModule {
public register(injector: IInjector): void {
injector.bind("bemoDocumentation", BemoDocumentationViewModel);
injector.bind("bemoDocumentationEditor", BemoDocumentationEditor);
injector.bindToCollection("modelBinders", BemoDocumentationModelBinder);
injector.bindToCollection("viewModelBinders", BemoDocumentationViewModelBinder);
injector.bindToCollection("widgetHandlers", BemoDocumentationHandlers);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import { IInjectorModule, IInjector } from "@paperbits/common/injection";
import { BemoDocumentationViewModel } from "./ko/bemoDocumentationViewModel";
import { BemoDocumentationModelBinder } from "./bemoDocumentationModelBinder";
import { BemoDocumentationViewModelBinder } from "./ko/bemoDocumentationViewModelBinder";

export class BemoDocumentationPublishModule implements IInjectorModule {
public register(injector: IInjector): void {
injector.bind("bemoDocumentation", BemoDocumentationViewModel);
injector.bindToCollection("modelBinders", BemoDocumentationModelBinder);
injector.bindToCollection("viewModelBinders", BemoDocumentationViewModelBinder);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import { IInjector, IInjectorModule } from "@paperbits/common/injection";
import { BemoDocumentationRuntime } from "./ko/runtime/bemo-documentation-runtime";

export class BemoDocumentationRuntimeModule implements IInjectorModule {
public register(injector: IInjector): void {
injector.bind("bemoDocumentationRuntime", BemoDocumentationRuntime);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import { Contract } from "@paperbits/common";

export interface BemoDocumentationContract extends Contract {
fileName: string;
}
23 changes: 23 additions & 0 deletions community/widgets/bemo-documentation/bemoDocumentationHandlers.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import { IWidgetOrder, IWidgetHandler } from "@paperbits/common/editing";
import { BemoDocumentationModel } from "./bemoDocumentationModel";
import { widgetName, widgetDisplayName, widgetCategory,defaultFileName } from "./constants";


export class BemoDocumentationHandlers implements IWidgetHandler {
public async getWidgetOrder(): Promise<IWidgetOrder> {
const widgetOrder: IWidgetOrder = {
name: widgetName,
displayName: widgetDisplayName,
category: widgetCategory,
iconClass: "widget-icon widget-icon-component",
requires: ["html"],
createModel: async () => {
const model = new BemoDocumentationModel();
model.fileName = defaultFileName;
return model;
}
};

return widgetOrder;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
export class BemoDocumentationModel {
public fileName: string;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import { IModelBinder } from "@paperbits/common/editing";
import { BemoDocumentationModel } from "./bemoDocumentationModel";
import { Contract } from "@paperbits/common";
import { widgetName, defaultFileName } from "./constants";
import { BemoDocumentationContract } from "./bemoDocumentationContract";

export class BemoDocumentationModelBinder implements IModelBinder<BemoDocumentationModel> {
public canHandleContract(contract: Contract): boolean {
return contract.type === widgetName;
}

public canHandleModel(model: BemoDocumentationModel): boolean {
return model instanceof BemoDocumentationModel;
}

public async contractToModel(contract: BemoDocumentationContract): Promise<BemoDocumentationModel> {
const model = new BemoDocumentationModel();
model.fileName = contract.fileName || defaultFileName;
return model;
}

public modelToContract(model: BemoDocumentationModel): Contract {
const contract:BemoDocumentationContract = {
type: widgetName,
fileName: model.fileName
};

return contract;
}
}
7 changes: 7 additions & 0 deletions community/widgets/bemo-documentation/constants.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
export const widgetName = "bemo-documentation";
export const widgetDisplayName = "Be:Mo Documentation";
export const widgetCategory = "Community";
export const widgetSelector = "bemo-documentation";
export const widgetRuntimeSelector = "bemo-documentation-runtime";
export const widgetEditorSelector = "bemo-documentation-editor";
export const defaultFileName = "sample_document.html";
4 changes: 4 additions & 0 deletions community/widgets/bemo-documentation/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
export * from "./constants";
export * from "./bemoDocumentationHandlers";
export * from "./bemoDocumentationModel";
export * from "./bemoDocumentationModelBinder";
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
<div class="w-100">
<bemo-documentation-runtime data-bind="attr: { params: runtimeConfig }"></bemo-documentation-runtime>
<div>
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<fieldset class="form" data-bind="scrollable: true">
<div class="form-group">
<label class="form-label">
File Name
<button class="btn btn-info" type="button" title="Help"
data-bind="tooltip: 'Name of the file'"></button>
</label>
<input type="string" class="form-control" data-bind="textInput: fileName" />
</div>
</fieldset>
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
import * as ko from "knockout";
import template from "./bemoDocumentationEditorView.html";
import { Component, OnMounted, Param, Event } from "@paperbits/common/ko/decorators";
import { WidgetEditor } from "@paperbits/common/widgets";
import { BemoDocumentationModel } from "../bemoDocumentationModel";
import { widgetEditorSelector } from "..";


@Component({
selector: widgetEditorSelector,
template: template
})
export class BemoDocumentationEditor implements WidgetEditor<BemoDocumentationModel> {
public readonly fileName: ko.Observable<string>;

constructor() {
this.fileName = ko.observable();
}

@Param()
public model: BemoDocumentationModel;

@Event()
public onChange: (model: BemoDocumentationModel) => void;

@OnMounted()
public async initialize(): Promise<void> {
this.fileName(this.model.fileName);
this.fileName.subscribe(this.applyChanges);
}

private applyChanges(): void {
this.model.fileName = this.fileName();
this.onChange(this.model);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import * as ko from "knockout";
import template from "./bemoDocumentation.html";
import { Component } from "@paperbits/common/ko/decorators";
import { widgetSelector } from "../constants";

@Component({
selector: widgetSelector,
template: template
})
export class BemoDocumentationViewModel {
public readonly runtimeConfig: ko.Observable<string>;

constructor() {
this.runtimeConfig = ko.observable();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
import { Bag } from "@paperbits/common";
import { EventManager } from "@paperbits/common/events";
import { IWidgetBinding } from "@paperbits/common/editing";
import { ViewModelBinder } from "@paperbits/common/widgets";
import { BemoDocumentationViewModel } from "./bemoDocumentationViewModel";
import { widgetName, widgetDisplayName, widgetEditorSelector } from "../constants";
import { BemoDocumentationModel } from "../bemoDocumentationModel";

export class BemoDocumentationViewModelBinder implements ViewModelBinder<BemoDocumentationModel, BemoDocumentationViewModel> {
constructor(private readonly eventManager: EventManager) { }

public async updateViewModel(model: BemoDocumentationModel, viewModel: BemoDocumentationViewModel): Promise<void> {
viewModel.runtimeConfig(JSON.stringify({ fileName: model.fileName }));
}

public async modelToViewModel(model: BemoDocumentationModel, viewModel?: BemoDocumentationViewModel, bindingContext?: Bag<any>): Promise<BemoDocumentationViewModel> {
if (!viewModel) {
viewModel = new BemoDocumentationViewModel();

const binding: IWidgetBinding<BemoDocumentationModel, BemoDocumentationViewModel> = {
name: widgetName,
displayName: widgetDisplayName,
readonly: bindingContext?.readonly,
model: model,
flow: "block",
editor: widgetEditorSelector,
draggable: true,
applyChanges: async () => {
await this.updateViewModel(model, viewModel);
this.eventManager.dispatchEvent("onContentUpdate");
}
};
viewModel["widgetBinding"] = binding;
}

this.updateViewModel(model, viewModel);

return viewModel;
}

public canHandleModel(model: BemoDocumentationModel): boolean {
return model instanceof BemoDocumentationModel;
}
}
3 changes: 3 additions & 0 deletions community/widgets/bemo-documentation/ko/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
export * from "./bemoDocumentationEditorViewModel";
export * from "./bemoDocumentationViewModel";
export * from "./bemoDocumentationViewModelBinder";
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<h1><span data-bind="text: api"></span></h1>

<table>
<thead>
<tr>
<th>Path</th>
<th>File name</th>
<th>URL</th>
</tr>
</thead>
<tbody data-bind="foreach: repoStructure">
<tr>
<td data-bind="text: path"></td>
<td data-bind="text: fileName"></td>
<td data-bind="text: url"></td>
</tr>
</tbody>
</table>

<p data-bind="html: sessionDescription"></p>
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@

import * as ko from "knockout";
import template from "./bemo-documentation-runtime.html";
import { Component, RuntimeComponent, Param, OnMounted } from "@paperbits/common/ko/decorators";
import { widgetRuntimeSelector } from "../..";
import { RouteHelper } from "../../../../../src/routing/routeHelper";
import { GithubService } from "../../../../../src/services/githubService";
import { GithubFile } from "../../../../../src/models/githubFile";
import { cpuUsage } from "process";

@RuntimeComponent({
selector: widgetRuntimeSelector
})
@Component({
selector: widgetRuntimeSelector,
template: template
})
export class BemoDocumentationRuntime {
@Param()
public readonly fileName: ko.Observable<string>;
public readonly api: ko.Observable<string>;

public readonly sessionDescription: ko.Observable<string>;
public readonly repoStructure: ko.ObservableArray<GithubFile>;

constructor(private readonly routeHelper: RouteHelper, private readonly githubService: GithubService) {
this.api = ko.observable();
this.repoStructure = ko.observableArray();
this.sessionDescription = ko.observable();
}

@OnMounted()
public async initialize(): Promise<void> {
const fileName = this.routeHelper.getHashParameter("fileName");
const api = this.routeHelper.getApiName();
await this.githubService.getRepositoryStructure().then(resp => {
this.repoStructure(resp);
});

this.api(api);
}
}
Empty file.
1 change: 0 additions & 1 deletion community/widgets/bemo-navbar/bemoNavbarContract.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,4 @@ import { Contract } from "@paperbits/common";
* Data contact (data layer) that defines how widget configuration gets persisted.
*/
export interface BemoNavbarContract extends Contract {
// property: string;
}
11 changes: 5 additions & 6 deletions community/widgets/bemo-navbar/bemoNavbarHandlers.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { widgetName, widgetDisplayName, widgetCategory } from "./constants";
import { IWidgetOrder, IWidgetHandler } from "@paperbits/common/editing";
import { IWidgetOrder, IWidgetHandler } from "@paperbits/common/editing";
import { BemoNavbarModel } from "./bemoNavbarModel";
import { widgetName, widgetDisplayName, widgetCategory } from "./constants";

/**
* Handlers giving the editor required context to manupulate the widget. For example,
Expand All @@ -14,17 +14,16 @@ export class BemoNavbarHandlers implements IWidgetHandler {
public async getWidgetOrder(): Promise<IWidgetOrder> {
const widgetOrder: IWidgetOrder = {
name: widgetName,
displayName: widgetDisplayName,
category: widgetCategory,
requires: [],
displayName: widgetDisplayName,
iconClass: "paperbits-puzzle-10",
iconClass: "widget-icon widget-icon-component",

/**
* This method invoked when the widget gets added to the content.
*/
createModel: async () => {
createModel: async () => {
const model = new BemoNavbarModel();
// model.property = "< initial value >";
return model;
}
};
Expand Down
5 changes: 3 additions & 2 deletions community/widgets/bemo-navbar/bemoNavbarModel.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
import { BuiltInRoles } from "@paperbits/common/user";

/**
* Model (business layer) is a primary representation of the widget in the system,
* which gets updated by editors and rendered by the presentation layer.
*/
export class BemoNavbarModel {
// public property: string;
export class BemoNavbarModel {
}
2 changes: 0 additions & 2 deletions community/widgets/bemo-navbar/bemoNavbarModelBinder.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,14 +19,12 @@ export class BemoNavbarModelBinder implements IModelBinder<BemoNavbarModel> {

public async contractToModel(contract: BemoNavbarContract): Promise<BemoNavbarModel> {
const model = new BemoNavbarModel();
// model.property = contract.property;
return model;
}

public modelToContract(model: BemoNavbarModel): Contract {
const contract: BemoNavbarContract = {
type: widgetName,
// property: model.property
};

return contract;
Expand Down
4 changes: 2 additions & 2 deletions community/widgets/bemo-navbar/constants.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
export const widgetName = "bemo-navbar";
export const widgetDisplayName = "Be:Mo Navbar";
export const widgetCategory = "Be:Mo Widgets";
export const widgetDisplayName = "Avatar Menu";
export const widgetCategory = "Community";
export const widgetSelector = "bemo-navbar";
export const widgetRuntimeSelector = "bemo-navbar-runtime";
export const widgetEditorSelector = "bemo-navbar-editor";
6 changes: 3 additions & 3 deletions community/widgets/bemo-navbar/ko/bemoNavbarEditorView.html
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
<fieldset class="form" data-bind="scrollable: true">
<p>No settings are required for this widget.</p>
</fieldset>
<div class="form" data-bind="scrollable: true">
<span>No configuration for this widget.</span>
</div>
Loading

0 comments on commit 35596a5

Please sign in to comment.