@kui-shell/plugin-wskflow
Version:
Visualizations for Composer apps
107 lines • 4.41 kB
JavaScript
/*
* Copyright 2018 The Kubernetes Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
import Debug from 'debug';
const debug = Debug('plugins/wskflow/util');
const strings = {
'1:1': 'Zoom 1:1',
Fit: 'Zoom to Fit'
};
export const textualPropertiesOfCode = (code) => {
const lines = code.split(/[\n\r]/);
const nLines = lines.length;
const maxLineLength = lines.reduce((max, line) => Math.max(max, line.length), 0);
return { nLines, maxLineLength };
};
/**
* Render the wskflow visualization for the given fsm.
*
* `container` is optional; wskflow will render in the default way in
* the sidecar if we don't pass a container in
*
* @return { view, controller } where controller is the API exported by graph2doms
*/
export const wskflow = (tab, visualize, { ast, viewOptions, container }) => __awaiter(void 0, void 0, void 0, function* () {
debug('wskflow', viewOptions);
const isPartOfRule = false;
/* const isPartOfRule = await tab.REPL.qexec<{ action: { name: string; path: string } }[]>('wsk rule list')
.then(rules =>
rules.find(({ action: ruleAction }) => {
return ruleAction.name === name && ruleAction.path === namespace
})
)
.catch(() => []) */
return visualize(tab, ast, container, undefined, undefined, undefined, viewOptions, isPartOfRule);
});
/**
* Zoom to fit buttons
*
* @param controller an output of graph2doms()
* @param visibleWhenShowing only show the zoom buttons when the given mode is active
*
*/
export const zoomToFitButtons = (controller, { visibleWhenShowing = 'visualization' } = {}) => {
if (controller && controller.register) {
// eslint-disable-next-line @typescript-eslint/no-var-requires
const events = require('events');
const zoom1to1Bus = new events.EventEmitter();
const zoomToFitBus = new events.EventEmitter();
const listener = event => {
zoom1to1Bus.emit('change', event.applyAutoScale === false && !event.customZoom);
zoomToFitBus.emit('change', event.applyAutoScale === true && !event.customZoom);
};
controller.register(listener);
return [
{
mode: 'zoom-one-to-one',
label: strings['1:1'],
balloon: 'Use a fixed-size canvas',
selected: controller.is1to1(),
// selectionController: zoom1to1Bus,
visibleWhen: visibleWhenShowing,
kind: 'view',
command: () => {
controller.zoom1to1();
}
},
{
mode: 'zoom-to-fit',
label: strings['Fit'],
balloon: 'Use a zoom to fit canvas',
selected: !controller.is1to1(),
// selectionController: zoomToFitBus,
visibleWhen: visibleWhenShowing,
kind: 'view',
command: () => {
controller.zoomToFit();
}
}
];
}
else {
// probably some error initializing wskflow; try to safeguard against that
return [];
}
};
//# sourceMappingURL=util.js.map