Skip to content

Commit

Permalink
Add other handles to RenderOptions and rename to IRenderOptions (micr…
Browse files Browse the repository at this point in the history
  • Loading branch information
dclaux authored and matthidinger committed Nov 29, 2017
1 parent 6a75a94 commit ad3516d
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 45 deletions.
49 changes: 29 additions & 20 deletions source/nodejs/adaptivecards/src/card-elements.ts
Original file line number Diff line number Diff line change
Expand Up @@ -510,7 +510,7 @@ export class TextBlock extends CardElement {
anchor.classList.add("ac-anchor");
anchor.target = "_blank";
anchor.onclick = (e) => {
if (raiseAnchorClickedEvent(anchor)) {
if (raiseAnchorClickedEvent(this, anchor)) {
e.preventDefault();
}
}
Expand Down Expand Up @@ -3187,42 +3187,50 @@ export class Version {
}
}

function raiseAnchorClickedEvent(anchor: HTMLAnchorElement): boolean {
return AdaptiveCard.onAnchorClicked != null ? AdaptiveCard.onAnchorClicked(anchor) : false;
function raiseAnchorClickedEvent(element: CardElement, anchor: HTMLAnchorElement): boolean {
let card = element.getRootElement() as AdaptiveCard;
let onAnchorClickedHandler = (card && card.onAnchorClicked) ? card.onAnchorClicked : AdaptiveCard.onAnchorClicked;

return onAnchorClickedHandler != null ? onAnchorClickedHandler(anchor) : false;
}

function raiseExecuteActionEvent(action: Action) {
// TODO: is this the best way to get access to the parent card?
var card = action.parent.getRootElement() as AdaptiveCard;
if (card && card.onExecuteAction) {
action.prepare(action.parent.getRootElement().getAllInputs());
card.onExecuteAction(action);
}
let card = action.parent.getRootElement() as AdaptiveCard;
let onExecuteActionHandler = (card && card.onExecuteAction) ? card.onExecuteAction : AdaptiveCard.onExecuteAction;

if (AdaptiveCard.onExecuteAction != null) {
if (onExecuteActionHandler) {
action.prepare(action.parent.getRootElement().getAllInputs());

AdaptiveCard.onExecuteAction(action);
onExecuteActionHandler(action);
}
}

function raiseInlineCardExpandedEvent(action: ShowCardAction, isExpanded: boolean) {
if (AdaptiveCard.onInlineCardExpanded != null) {
AdaptiveCard.onInlineCardExpanded(action, isExpanded);
let card = action.parent.getRootElement() as AdaptiveCard;
let onInlineCardExpandedHandler = (card && card.onInlineCardExpanded) ? card.onInlineCardExpanded : AdaptiveCard.onInlineCardExpanded;

if (onInlineCardExpandedHandler) {
onInlineCardExpandedHandler(action, isExpanded);
}
}

function raiseElementVisibilityChangedEvent(element: CardElement) {
element.getRootElement().updateLayout();

if (AdaptiveCard.onElementVisibilityChanged != null) {
AdaptiveCard.onElementVisibilityChanged(element);
let card = element.getRootElement() as AdaptiveCard;
let onElementVisibilityChangedHandler = (card && card.onElementVisibilityChanged) ? card.onElementVisibilityChanged : AdaptiveCard.onElementVisibilityChanged;

if (onElementVisibilityChangedHandler != null) {
onElementVisibilityChangedHandler(element);
}
}

function raiseParseElementEvent(element: CardElement, json: any) {
if (AdaptiveCard.onParseElement != null) {
AdaptiveCard.onParseElement(element, json);
let card = element.getRootElement() as AdaptiveCard;
let onParseElementHandler = (card && card.onParseElement) ? card.onParseElement : AdaptiveCard.onParseElement;

if (onParseElementHandler != null) {
onParseElementHandler(element, json);
}
}

Expand Down Expand Up @@ -3504,8 +3512,11 @@ export class AdaptiveCard extends ContainerWithActions {
return true;
}

// TODO: Added this as an experiment, if it works we should remove the static handler?
onAnchorClicked: (anchor: HTMLAnchorElement) => boolean = null;
onExecuteAction: (action: Action) => void = null;
onElementVisibilityChanged: (element: CardElement) => void = null;
onInlineCardExpanded: (action: ShowCardAction, isExpanded: boolean) => void = null;
onParseElement: (element: CardElement, json: any) => void = null;

version?: Version = new Version(1, 0);
fallbackText: string;
Expand Down Expand Up @@ -3621,8 +3632,6 @@ class InlineAdaptiveCard extends AdaptiveCard {
}
}

// const defaultHostConfig: HostConfig.HostConfig = new HostConfig.HostConfig();

const defaultHostConfig: HostConfig.HostConfig = new HostConfig.HostConfig(
{
supportsInteractivity: true,
Expand Down
51 changes: 26 additions & 25 deletions source/nodejs/adaptivecards/src/rendercard.ts
Original file line number Diff line number Diff line change
@@ -1,48 +1,49 @@
import { Action, AdaptiveCard, HostConfig } from "./adaptivecards";
import { Action, ShowCardAction, CardElement, AdaptiveCard, HostConfig } from "./adaptivecards";
import { IAdaptiveCard } from "./schema";

export interface RenderOptions {
export interface IRenderOptions {
hostConfig?: HostConfig | string | object;
onAnchorClicked?: (anchor: HTMLAnchorElement) => boolean;
onExecuteAction?: (action: Action) => void;
onValidationError?: (error: string) => void;
onElementVisibilityChanged?: (element: CardElement) => void;
onInlineCardExpanded?: (action: ShowCardAction, isExpanded: boolean) => void;
onParseElement?: (element: CardElement, json: any) => void;
processMarkdown?: (text: string) => string;
}

export function renderCard(card: IAdaptiveCard | string, options?: RenderOptions): HTMLElement {

export function renderCard(card: IAdaptiveCard | string, options?: IRenderOptions): HTMLElement {
if (typeof card === "string") {
card = <IAdaptiveCard>JSON.parse(card);
}

options = options || {};

// Parse the host config
let hostConfig: HostConfig;
if (isHostConfig(options.hostConfig)) {
hostConfig = options.hostConfig;
// Setup a card
let adaptiveCard = new AdaptiveCard();

if (typeof options.hostConfig === "string") {
adaptiveCard.hostConfig = new HostConfig(JSON.parse(options.hostConfig));
}
else if (typeof options.hostConfig === "object" && !(options.hostConfig instanceof HostConfig)) {
adaptiveCard.hostConfig = new HostConfig(options.hostConfig);
}
else if (options.hostConfig instanceof String) {
hostConfig = new HostConfig(JSON.parse(options.hostConfig));
} else {
hostConfig = new HostConfig(options.hostConfig);
else {
adaptiveCard.hostConfig = options.hostConfig;
}

// Parse the card
let adaptiveCard = new AdaptiveCard();
adaptiveCard.parse(card);
adaptiveCard.hostConfig = hostConfig;
adaptiveCard.onAnchorClicked = options.onAnchorClicked;
adaptiveCard.onExecuteAction = options.onExecuteAction;

// Process markdown
adaptiveCard.onElementVisibilityChanged = options.onElementVisibilityChanged;
adaptiveCard.onInlineCardExpanded = options.onInlineCardExpanded;
adaptiveCard.onParseElement = options.onParseElement;

if (options.processMarkdown) {
AdaptiveCard.processMarkdown = options.processMarkdown;
}

// Parse the card
adaptiveCard.parse(card);

// Render the card
return adaptiveCard.render();
}

function isHostConfig(hostConfig: HostConfig | string | any): hostConfig is HostConfig {
// TODO: make this check better
return hostConfig && hostConfig.getContainerStyleDefinition;
}
}

0 comments on commit ad3516d

Please sign in to comment.