blob: bfd47f28d6bfb1565b5b6bc4262f23c1e4d5b718 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.
*/
import CodeMirror from 'codemirror';
import {YAMLException} from 'js-yaml';
export const yamlState = {
name: 'main.yaml',
url: 'yaml',
template: '<br-yaml-editor value="vm.yaml" type="blueprint"></br-yaml-editor>',
controller: ['$scope', '$rootScope', '$timeout', 'blueprintService', 'brSnackbar', yamlStateController],
controllerAs: 'vm',
data: {
label: 'YAML Editor'
}
};
function yamlStateController($scope, $rootScope, $timeout, blueprintService, brSnackbar) {
let vm = this;
try {
vm.yaml = blueprintService.getAsYaml();
} catch (ex) {
brSnackbar.create(`Cannot load blueprint: ${ex.message}`);
vm.yaml = '';
}
if (!CodeMirror.lint.hasOwnProperty('yaml-composer')) {
CodeMirror.registerGlobalHelper('lint', 'yaml-composer', mode => mode.name === 'yaml', (text, options, cm) => {
let issues = [];
try {
blueprintService.setFromYaml(cm.getValue(), true);
//// the model of types etc is not updated in the YAML view; the line below will fix this
//// but it makes 1 request per type (even if duplicated) on _every_ keypress (modulo a minor debounce)
//// so it isn't worth it for now. we should have a cache at which point the below could be supported again.
//// also it might make sense to do it in the `setFromYaml` method above instead of explicitly below.
// blueprintService.refreshBlueprintMetadata();
} catch (err) {
if (!(err instanceof YAMLException)) {
issues.push({
from: CodeMirror.Pos(0, 0),
to: CodeMirror.Pos(0, 0),
message: err.message
});
}
}
return issues;
});
}
}