作者 邓超

es kibana

  1 +<?php
  2 +
  3 +namespace Controller;
  4 +
  5 +
  6 +
  7 +use function Swoole\Coroutine\Http\request;
  8 +
  9 +/**
  10 + * @author:dc
  11 + * @time 2025/8/27 15:38
  12 + * Class Kibana
  13 + * @package Controller
  14 + */
  15 +class Kibana extends Base {
  16 +
  17 + public function __construct()
  18 + {
  19 + \Lib\vue\vue::runPath(ROOT_PATH.'/views');
  20 + }
  21 +
  22 + /**
  23 + * @author:dc
  24 + * @time 2025/8/27 15:40
  25 + */
  26 + public function index(){
  27 +
  28 + return \Lib\vue\vue::view('kibana');
  29 + }
  30 +
  31 + public function result(){
  32 + $json = app()->request('json');
  33 + return es()->getClient()->search($json);
  34 + }
  35 +
  36 +}
  37 +
  38 +
  39 +
  40 +
  41 +
  42 +
  43 +
  44 +
  45 +
  46 +
  47 +
  48 +
  49 +
  50 +
  1 +### 这个是使用vue扩展
  2 +* 加载的是element-ui
  3 +* 不能使用<font color=red>ts</font>只能使用js
  4 +* <font color=red>必须使用双标签</font> 这里无法自动补全结束标签
  5 +~~~vue
  6 +<el-table>
  7 +<!--错误-->
  8 +<el-table-column prop="address" label="Address" sortable />
  9 +<!--正确-->
  10 +<el-table-column prop="address" label="Address" sortable ></el-table-column>
  11 +</el-table>
  12 +~~~
  13 +> 使用实例
  14 +~~~injectablephp
  15 + // 必须先设置 vue的运行目录
  16 + Vue::runPath('path');
  17 + // 不含 .vue文件后缀 的模板文件 在 运行目录下面 填写相对路径
  18 + Vue::view('home/index'); // 这个是半组件模式 使用了混淆数据
  19 + Vue::view2('home/index'); // 这个是纯组件模式
  20 + // 数据渲染
  21 + Vue::view('home/index',['data'=>'hello','tableData'=>['id'=>1]]);
  22 +
  23 + // laravel 中
  24 + return response(Vue::view2('home',[]),200,['Content-Type'=>'text/html']);
  25 + // 或者使用异常返回
  26 + throw new HttpResponseException(response(Vue::view2('home',[]),200,['Content-Type'=>'text/html']));
  27 +
  28 + // 混合使用,把vue嵌套在其他html页面上
  29 + $var = Vue::viewBlade('模板名字',['参数,就是需要渲染在页面上的服务器数据'],'这个是模板所在目录');
  30 + // $var = ['html'=>'','css'=>'','js'=>''];
  31 + // 在页面上 {{$var['html']}}{{$var['css']}}{{$var['js']}} 放入对应的位置即可
  32 +
  33 +~~~
  34 +> 混合使用示例 xxx.blade.php
  35 +~~~
  36 +@extends(config('view.layout'))
  37 +
  38 +@section('content')
  39 +<div class="content-wrap">
  40 + <div class="layout-px-spacing">
  41 + <div class="row layout-top-spacing">
  42 + <div class="col-xl-12 col-lg-12 col-md-12">
  43 + <!-- 调用 -->
  44 + @php $vue = \App\Extend\Vue\Vue::viewBlade('robot-chat',['language'=>$language],resource_path('views/applications')) @endphp
  45 + 放入html代码
  46 + {!! $vue['html'] !!}
  47 + </div>
  48 + </div>
  49 + </div>
  50 +</div>
  51 +
  52 +</div>
  53 +@endsection
  54 +<!-- BEGIN GLOBAL MANDATORY SCRIPTS -->
  55 +@section('custom_js')
  56 +放入css代码
  57 + {!! $vue['css'] !!}
  58 +
  59 + 放入js代码
  60 + {!! $vue['js'] !!}
  61 +@endsection
  62 +
  63 +~~~
  64 +
  65 +> 后端数据传入vue进行数据渲染
  66 +* 标签 <{#data#}> 普通数据模式
  67 +~~~vue
  68 +<!-- 模板使用 --->
  69 +<template>
  70 + <{#data#}>
  71 +</template>
  72 +
  73 +<!--最后页面呈现的是-->
  74 +<template>
  75 + hello
  76 +</template>
  77 +~~~
  78 +* 标签 <[{#data#}]> 对象模式 注意 一定要用引号把标签给引起来 否则vue页面会报错
  79 +~~~vue
  80 +<!-- 模板使用 --->
  81 +<script>
  82 + export default {
  83 + data(){
  84 + return {
  85 + tableData:"<[{#tableData#}]>"
  86 + }
  87 + }
  88 + }
  89 +</script>
  90 +
  91 +<!--最后页面呈现的是-->
  92 +<script>
  93 +export default {
  94 + data(){
  95 + return {
  96 + tableData: {id:1}
  97 + }
  98 + }
  99 +}
  100 +</script>
  101 +~~~
  102 +> vue页面的组件使用 组件也必须在运行目录中
  103 +~~~vue
  104 +<template>
  105 +<!-- 使用my_component组件-->
  106 + <my_component></my_component>
  107 +</template>
  108 +<script>
  109 +export default {
  110 + data(){
  111 + return {
  112 + tableData: {id:1}
  113 + }
  114 + },
  115 + components:{
  116 + my_component: "@component(component/my)", // 这里引号可以单双
  117 + }
  118 +}
  119 +</script>
  120 +~~~
  121 +* @component() 必须 括号中间的是组件文件名称
  122 +* <font color=red>不要使用无限嵌套的组件,不要嵌套组件过多</font>
  123 +
  124 +> 使用 axios 进行数据请求
  125 +* axios已做了公共的响应和请求处理 当message有值时 页面会自动弹出提示 非200弹出的是错误提示
  126 +* 后端无需在渲染 X-CSRF-TOKEN了,已在请求时自动加入
  127 +* 如有特殊需求需要用 X-CSRF-TOKEN 在页面使用 常亮 _CSRF_TOKEN_
  128 +~~~vue
  129 +<script>
  130 +export default {
  131 + data(){
  132 + return {
  133 + token: _CSRF_TOKEN_
  134 + }
  135 + }
  136 +}
  137 +</script>
  138 +~~~
  139 +* 后端返回的数据必须是json 格式如下
  140 +~~~json
  141 +{
  142 + "status": 200,
  143 + "message": "提示消息",
  144 + "data": []
  145 +}
  146 +~~~
  147 +
  148 +## 组件的规范
  149 +* 组件示例 如 index.vue
  150 +~~~vue
  151 +<template>
  152 + 我是组件 index
  153 + <div v-html="xx"></div>
  154 +</template>
  155 +
  156 +<script>
  157 +export default { // 必须这样写 这一行
  158 + template:"@slot#template", // 这里必须这样 才可以渲染 上面的template
  159 + // template:"这里写html", // 也可以这样直接html上面的template无法渲染了
  160 + name: "index",
  161 +}
  162 +</script>
  163 +
  164 +<!-- scoped 限定标识是有效的 -->
  165 +<style scoped>
  166 +div{} /*这里的div样式只会作用于当前组件*/
  167 +/* 这样也是合法的 */
  168 +div[scoped]{}
  169 +/* 有特殊情况 动态添加的html */
  170 +div[scoped] span{} /* 这个作用于当前组件下的div下面所有span标签*/
  171 +</style>
  172 +~~~
  173 +* 注意 css 可以加 scoped 限定标识
  174 +
  175 +### ajax() 的使用
  176 +* 是对axios的再次封装
  177 +* ajax()不会执行catch了,已经统一处理过了
  178 +~~~vue
  179 +<script>
  180 +export default { // 必须这样写 这一行
  181 + methods:{
  182 + getList(){
  183 + // post 请求 url 请求数据
  184 + ajax().post('url',{}).then(res=>{
  185 + // 处理结果
  186 + })
  187 + // get 请求
  188 + ajax().get('url').then(res=>{
  189 + // 处理结果
  190 + })
  191 + // delete请求
  192 + ajax().delete('url').then(res=>{
  193 + // 处理结果
  194 + })
  195 + }
  196 + }
  197 +}
  198 +</script>
  199 +~~~
  200 +
  201 +### elMsg 弹窗消息提示
  202 +* elMsg是对element-ui的消息提示进行了缩减写法
  203 +~~~javascript
  204 +elMsg.error('') // 错误提示
  205 +elMsg.success('') // 成功提示
  206 +~~~
  207 +* elMsgBox 弹出确认框
  208 +~~~javascript
  209 +elMsgBox.confirm('提示信息').then(()=>{
  210 + // 你的逻辑代码
  211 +})
  212 +~~~
  213 +
  214 +
  215 +
  216 +
  217 +
  218 +
  219 +
  1 +<!DOCTYPE html>
  2 +<html lang="zh">
  3 +<head>
  4 + <meta charset="UTF-8">
  5 + <meta name="viewport" content="width=device-width,initial-scale=1">
  6 + <title></title>
  7 +
  8 + <link href="https://fonts.googleapis.com/css?family=Nunito:400,600,700" rel="stylesheet">
  9 +
  10 + <!-- Import style -->
  11 + <link rel="stylesheet" href="https://unpkg.com/element-plus@2.10.1/dist/index.css" />
  12 + <!-- Import Vue 3 -->
  13 + <script src="https://unpkg.com/vue@3.5.16/dist/vue.global.js" type="application/javascript"></script>
  14 + <!-- Import component library -->
  15 + <script src="https://unpkg.com/element-plus@2.10.1/dist/index.full.js" type="application/javascript"></script>
  16 + <script src="https://unpkg.com/@element-plus/icons-vue@2.3.1/dist/index.iife.min.js" type="application/javascript"></script>
  17 +
  18 + <script src="https://unpkg.com/axios@1.9.0/dist/axios.min.js" type="application/javascript"></script>
  19 + <!--请不要删除下面注释代码-->
  20 + <!--{#link#}-->
  21 +</head>
  22 +<body>
  23 +<div id="app">
  24 + <component-main></component-main>
  25 +</div>
  26 +</body>
  27 +</html>
  28 +<!--请不要删除下面注释-->
  29 +<!--{#script.src#}-->
  30 +<style>
  31 +body{
  32 + margin: 0;
  33 + padding:0;
  34 + font-size: 12px;
  35 + font-weight: unset;
  36 +}
  37 +.el-table{width: 100%;}
  38 +.mr-2{margin-right: 2rem;}
  39 +.mr-1{margin-right: 1rem;}
  40 +.w-100{width: 100%;}
  41 +</style>
  42 +<!--请不要删除下面注释-->
  43 +<!--{#style#}-->
  44 +<script type="application/javascript">
  45 +// 针对谷歌浏览器调试是出现的 No resource with given URL found
  46 +//# sourceURL=dynamicScript.js
  47 +
  48 +</script>
  49 +<!--请不要删除下面注释-->
  50 +<!--{#script#}-->
  51 +<script type="application/javascript">
  52 +
  53 +const VueApp = {
  54 + data() {
  55 + return {
  56 +
  57 + }
  58 + },
  59 + components:{
  60 + "component-main":"@component(<--{#component_main#}-->)"
  61 + }
  62 + ,created(){
  63 +
  64 + }
  65 +}
  66 +
  67 +// 减少写法
  68 +const elMsg = ElementPlus.ElMessage;
  69 +const elMsgBox = ElementPlus.ElMessageBox;
  70 +
  71 +// 添加请求拦截器
  72 +axios.interceptors.request.use(function (config) {
  73 + // 在发送请求之前做些什么 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content'),
  74 + // config.headers['X-CSRF-TOKEN'] = _CSRF_TOKEN_;
  75 + return config;
  76 +}, function (error) {
  77 + // 对请求错误做些什么
  78 + return Promise.reject(error);
  79 +});
  80 +
  81 +// 添加响应拦截器
  82 +axios.interceptors.response.use(function (response) {
  83 + // 对响应数据做点什么
  84 + // console.log(response);
  85 + // 是否弹出消息
  86 + if(response.data.message){
  87 + if(response.data.status === 200){
  88 + elMsg.success(response.data.message);
  89 + }else {
  90 + elMsg.error(response.data.message);
  91 + }
  92 + }
  93 +
  94 + return response;
  95 +}, function (error) {
  96 + // console.log(error)
  97 + if(error.response.data && error.response.data.message){
  98 + elMsg.error(error.response.data.message);
  99 + }else {
  100 + elMsg.error(error.message);
  101 + }
  102 +
  103 + // 对响应错误做点什么
  104 + return Promise.reject(error);
  105 +});
  106 +
  107 +/**
  108 + * 对axios的再次封装
  109 + */
  110 +class axiosPackage {
  111 + #startCall
  112 + start(call){
  113 + this.#startCall = call;
  114 + return this;
  115 + }
  116 + post(url, data = {}){
  117 + return this.#result(axios.post(url, data));
  118 + }
  119 + get(url){
  120 + return this.#result(axios.get(url))
  121 + }
  122 + delete(url){
  123 + return this.#result(axios.delete(url))
  124 + }
  125 + #result(res){
  126 + return res.then(response=> {
  127 + return response.data
  128 + }).catch(e=>{
  129 + let data = {status:500};
  130 + data.e = e;
  131 + return data;
  132 + })
  133 + }
  134 +}
  135 +// 使用函数 进行 实例
  136 +function ajax(){
  137 + return new axiosPackage()
  138 +}
  139 +
  140 +/**
  141 + * 深拷贝
  142 + * @param obj
  143 + * @returns {*}
  144 + */
  145 +function copy (obj) {
  146 + let newObj = null
  147 + if (typeof obj === 'object' && obj !== null) {
  148 + newObj = obj instanceof Array ? [] : {}
  149 + for (let i in obj) {
  150 + newObj[i] = typeof obj[i] === 'object' ? copy(obj[i]) : obj[i]
  151 + }
  152 + } else {
  153 + newObj = obj
  154 + }
  155 + return newObj
  156 +}
  157 +
  158 +
  159 +
  160 +// 创建应用
  161 +const app = Vue.createApp(VueApp);
  162 +// 加载ele插件
  163 +app.use(ElementPlus);
  164 +
  165 +// 使用图标
  166 +// app.use(ElementPlusIconsVue); // 这个加载方式不可以
  167 +// 下面是正确的加载方式,仅适用于 cdn方式
  168 +for ([name, comp] of Object.entries(ElementPlusIconsVue)) {
  169 + app.component(name, comp);
  170 +}
  171 +
  172 +const vmElm = app.mount('#app');
  173 +</script>
  1 +<?php
  2 +
  3 +namespace Lib\vue;
  4 +
  5 +/**
  6 + * 处理vue的,加载的是element-ui
  7 + * @author:dc
  8 + * @time 2024/12/12 9:53
  9 + * Class VueService
  10 + * @package App\Services
  11 + */
  12 +class vue
  13 +{
  14 + /**
  15 + * 模板html
  16 + * @var string
  17 + */
  18 + protected $html = '';
  19 +
  20 + /**
  21 + * 前端加载的数据
  22 + * @var array
  23 + */
  24 + protected $data = [];
  25 +
  26 + /**
  27 + * 基础模板
  28 + * @var string
  29 + */
  30 + protected $baseHtml = '';
  31 +
  32 + /**
  33 + * 模板存储的文件路径
  34 + * @var string
  35 + */
  36 + protected static $tempPath = '';
  37 +
  38 + /**
  39 + * 样式
  40 + * @var string
  41 + */
  42 + protected $css = '';
  43 +
  44 + /**
  45 + * js
  46 + * @var string
  47 + */
  48 + protected $script = '';
  49 +
  50 + /**
  51 + * 这个是完整的html
  52 + * @var string
  53 + */
  54 + protected $fullHtml = '';
  55 +
  56 +
  57 +
  58 + /**
  59 + * 全组件模式
  60 + * @var string
  61 + */
  62 + protected static $baseVue = 'index';
  63 +
  64 +
  65 + public function __construct(string $html, array $data = [])
  66 + {
  67 +
  68 + $this->baseHtml = file_get_contents(__DIR__.'/template/'.static::$baseVue.'.vue');
  69 +
  70 + $this->html = '';
  71 +
  72 + // 版本2
  73 + $this->baseHtml = str_replace('@component(<--{#component_main#}-->)','@component('.$html.')',$this->baseHtml);
  74 +
  75 + $this->data = $data;
  76 + }
  77 +
  78 +
  79 +
  80 + /**
  81 + * @param string $name vue 文件相对路径 xx/xx
  82 + * @param array $data 传递到前端的数据
  83 + * @return string
  84 + * @throws \Exception
  85 + * @author:dc
  86 + * @time 2024/12/13 9:22
  87 + */
  88 + public static function view(string $name,array $data = []):string {
  89 +
  90 + if(!self::$tempPath){
  91 + throw new \Exception('vue view not found. template path');
  92 + }
  93 +
  94 + if(!is_file(self::$tempPath.'/'.ltrim($name,'/').'.vue')){
  95 + throw new \Exception('vue view not found. path:'.$name);
  96 + }
  97 +
  98 + return (new static($name,$data))->getHtml();
  99 + }
  100 +
  101 +
  102 + /**
  103 + * 设置 模板 放在那个目录
  104 + * @param string $path
  105 + * @author:dc
  106 + * @time 2024/12/12 10:05
  107 + */
  108 + public static function runPath(string $path){
  109 + self::$tempPath = rtrim($path,'/');
  110 + }
  111 +
  112 + /**
  113 + * 处理样式
  114 + * @author:dc
  115 + * @time 2024/12/12 10:19
  116 + */
  117 + protected function renderStyle(){
  118 + // 找到样式 css
  119 + preg_match_all("/<style([\sa-z=\/\"']+)?>([\S\s]*)<\/style>/iU",$this->fullHtml,$style);
  120 + if(!empty($style[0])){
  121 + // 匹配出来的替换为空
  122 + $this->fullHtml = str_replace($style[0],'',$this->fullHtml);
  123 + $style[0] = array_unique(array_map('trim',$style[0]));
  124 + $this->fullHtml = str_replace('<!--{#style#}-->',implode("\n",$style[0]),$this->fullHtml);
  125 + }
  126 +
  127 +
  128 + }
  129 +
  130 + /**
  131 + * 处理js
  132 + * @author:dc
  133 + * @time 2024/12/12 10:27
  134 + */
  135 + protected function renderScript(){
  136 + // 找到样式 css
  137 + if(preg_match("/<script([\sa-z=\/\"']+)?>([\S\s]*)<\/script>/iU",$this->html,$js)){
  138 + $this->html = str_replace($js[0],'',$this->html);
  139 + $this->script .= $js[0];
  140 + }
  141 + $this->baseHtml = str_replace('<!--{#script#}-->',$this->script,$this->baseHtml);
  142 + }
  143 +
  144 + /**
  145 + * 解析组件
  146 + * test.vue 内容如下
  147 + <template> 这个是组件 </template>
  148 +
  149 + <script>
  150 + export default {
  151 + template:"slot#template",
  152 + data(){
  153 +
  154 + }
  155 + }
  156 + </script>
  157 +
  158 + <style scoped>
  159 +
  160 + </style>
  161 +
  162 + * @author:dc
  163 + * @return array|false
  164 + * @time 2024/12/12 14:43
  165 + */
  166 + protected function parseComponent(&$tempHtml){
  167 + // 处理组件
  168 + preg_match_all("/['\"]@component\(([\sa-z0-9_\-\/]+)\)['\"]/iU",$tempHtml,$components);
  169 + if(!empty($components[0])){
  170 + foreach ($components[0] as $k=>$com){
  171 + $component = $components[1][$k];
  172 + // 找到组件文件
  173 + $file = self::$tempPath.'/'.ltrim($component,'/').'.vue';
  174 + if(!is_file($file)){
  175 + throw new \Exception('vue component not found: '.$component);
  176 + }
  177 +
  178 + $html = file_get_contents($file);
  179 +
  180 + // 这个是组件的名称 以 文件名为名称
  181 + $name = str_replace('/','-',$component);
  182 + $uuid = 'data-'.uniqid(); // 这个是唯一id,每个组件唯一,用来隔离css
  183 + // 找到js
  184 + preg_match("/<script([\sa-z=\/\"']+)?>([\S\s]*)<\/script>/i",$html,$js);
  185 + // 找到css
  186 + preg_match("/<style([\sa-z=\/\"']+)?>([\S\s]*)<\/style>/i",$html,$css);
  187 + // 处理css的限定标记 scoped
  188 + $css[0] = array_map(function ($cs) use ($css,$uuid){
  189 + // 是否是最后一行,最后一行不处理
  190 + if(preg_match("/<\s*\/\s*style\s*>/i",$cs)){
  191 + return $cs;
  192 + }
  193 + // 是否存在单独的 scoped
  194 + if(stripos($cs,'[scoped]')!==false){
  195 + return str_replace('[scoped]',"[{$uuid}]",$cs);
  196 + }
  197 + // 这个是 当前组件下是是否全局 scoped 限定
  198 + if(stripos($css[1]??'','scoped')!==false){
  199 + return $cs."[{$uuid}]";
  200 + }
  201 + // 不处理
  202 + return $cs;
  203 + },explode("{",$css[0]??''));
  204 + // 还原css操作
  205 + $css = implode('{',$css[0]);
  206 +
  207 + // 找到template html
  208 + preg_match("/<template(\s*.*)>([\S\s]*)<\/template>/i",$html,$temp);
  209 + $tempAttr = $temp[1]??'';
  210 + $temp[1] = $temp[2]??'';
  211 + // 为每个标签添加uuid 用来隔离css
  212 + // <a></a> 最后是 <a data-xxxx></a>
  213 + if($temp[1]){
  214 + preg_match_all("/<([a-z_\-]+)\s?([\S\s]*)>/iU",$temp[1],$tags);
  215 + foreach ($tags[0] as $tag){
  216 + // 过滤哪些标记不进行 唯一属性
  217 + if(preg_match("/^<(v-for|template|slot|v-if|v-else-if|v-else|transition-group|transition|keep-alive|component)[\n\s>\/]/",$tag)){
  218 + continue;
  219 + }
  220 +
  221 + // 有空格
  222 + if(strpos($tag,' ')!==false){
  223 + $tagHtml = explode(' ',$tag);
  224 + $tagHtml[0] .= " {$uuid} ";
  225 + $tagHtml = implode(' ',$tagHtml);
  226 + }else{
  227 + // 无空格
  228 + $tagHtml = mb_substr($tag,0,-1)." {$uuid} >";
  229 + }
  230 + $temp[1] = str_replace($tag,$tagHtml,$temp[1]);
  231 + }
  232 + }
  233 + // 有 ${{这种情况}} 这个其实是 钱+价额
  234 + $temp[1] = str_replace('${','\\\${',$temp[1]);
  235 + $temp = " template:`<div {$tempAttr}> {$css} ".addcslashes($temp[1],'`').'</div>`,';
  236 +
  237 + $js = preg_replace('/export[\s\n\r]+default[\s\n\r]*{/',"{ \n".$temp,$js[2]??'');
  238 +
  239 + // 替换模板 中用到组件的地方
  240 + $tempHtml = str_replace(
  241 + $com,
  242 + $js,
  243 + $tempHtml
  244 + );
  245 +
  246 + }
  247 + }else{
  248 + return false;
  249 + }
  250 +
  251 + return true;
  252 +
  253 + }
  254 + /**
  255 + * 处理组件 把页面上通过 import导入的html 处理成可用的
  256 + * 类似 @include('xxxx')
  257 + * @author:dc
  258 + * @time 2024/12/12 10:34
  259 + */
  260 + protected function components(){
  261 +
  262 + $forNum = 0;
  263 + while (1) {
  264 + if ($forNum >= 5) {
  265 + throw new \Exception('vue 组件嵌套过多/无限嵌套');
  266 + }
  267 + $forNum++;
  268 +
  269 + if(!$this->parseComponent($this->fullHtml)){
  270 + break;
  271 + }
  272 + }
  273 +
  274 + }
  275 +
  276 + /**
  277 + * 渲染数据
  278 + * 界面上使用 <{#data#}> 这个是 渲染普通数据
  279 + * "<[{#data#}]>" 这个是渲染对象使用的
  280 + * @author:dc
  281 + * @time 2024/12/12 14:29
  282 + */
  283 + protected function renderData(){
  284 + foreach ($this->data as $key=>$datum){
  285 + $datum = is_array($datum) ? json_encode($datum,JSON_UNESCAPED_UNICODE) : $datum;
  286 +
  287 + $this->fullHtml = str_replace(['<{#'.$key.'#}>','"<[{#'.$key.'#}]>"',"'<[{#'.$key.'#}]>'"],$datum,$this->fullHtml);
  288 + }
  289 + }
  290 +
  291 + /**
  292 + * 返回模板代码 html
  293 + * @return string
  294 + * @author:dc
  295 + * @time 2024/12/12 9:58
  296 + */
  297 + public function getHtml():string {
  298 + $this->renderScript();
  299 +
  300 +
  301 + // 找到样式 link
  302 + if(preg_match_all("/<link(.*)\/?>/iU",$this->html,$links)){
  303 + foreach ($links[0] as $link){
  304 + $this->html = str_replace($link,'',$this->html);
  305 + }
  306 + $this->baseHtml = str_replace('<!--{#link#}-->',implode("\r\n",$links[0]),$this->baseHtml);
  307 + }
  308 +
  309 + $this->fullHtml = str_replace('<!--{#body#}-->',$this->html,$this->baseHtml);
  310 +
  311 + $this->components();
  312 +
  313 + $this->renderStyle();
  314 +
  315 + // 模板2 组件模式 <!--{#script.src#}-->
  316 + /**
  317 + * 组件中 用 @import("js/css") 导入的外链资源
  318 + */
  319 + preg_match_all('/\@import\((["\'a-z0-9._\-\/?&=:]{5,})\)/iU',$this->fullHtml,$sc);
  320 + if(!empty($sc[1])){
  321 + $this->fullHtml = str_replace($sc[0],'',$this->fullHtml);
  322 + $this->fullHtml = str_replace('<!--{#script.src#}-->',implode("\n",array_map(function ($v){
  323 + $v = str_replace(['"',"'"],'',$v);
  324 + if(stripos($v,'.js')){
  325 + return '<script type="application/javascript" src="'.$v.'"></script>';
  326 + }elseif (stripos($v,'.css')){
  327 + return '<link rel="stylesheet" href="'.$v.'" />';
  328 + }else{
  329 + return '';
  330 + }
  331 + },$sc[1])),$this->fullHtml);
  332 +
  333 + }
  334 +
  335 + $this->renderData();
  336 +
  337 + return $this->fullHtml;
  338 + }
  339 +
  340 +}
  1 +<?xml version="1.0" encoding="UTF-8" standalone="no"?>
  2 +<svg
  3 + xmlns:dc="http://purl.org/dc/elements/1.1/"
  4 + xmlns:cc="http://creativecommons.org/ns#"
  5 + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  6 + xmlns:svg="http://www.w3.org/2000/svg"
  7 + xmlns="http://www.w3.org/2000/svg"
  8 + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
  9 + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
  10 + width="240"
  11 + height="144"
  12 + id="svg4136"
  13 + version="1.1"
  14 + inkscape:version="0.91 r13725"
  15 + sodipodi:docname="jsoneditor-icons.svg">
  16 + <title
  17 + id="title6512">JSON Editor Icons</title>
  18 + <metadata
  19 + id="metadata4148">
  20 + <rdf:RDF>
  21 + <cc:Work
  22 + rdf:about="">
  23 + <dc:format>image/svg+xml</dc:format>
  24 + <dc:type
  25 + rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
  26 + <dc:title>JSON Editor Icons</dc:title>
  27 + </cc:Work>
  28 + </rdf:RDF>
  29 + </metadata>
  30 + <defs
  31 + id="defs4146" />
  32 + <sodipodi:namedview
  33 + pagecolor="#ff63ff"
  34 + bordercolor="#666666"
  35 + borderopacity="1"
  36 + objecttolerance="10"
  37 + gridtolerance="10"
  38 + guidetolerance="10"
  39 + inkscape:pageopacity="0"
  40 + inkscape:pageshadow="2"
  41 + inkscape:window-width="1920"
  42 + inkscape:window-height="1026"
  43 + id="namedview4144"
  44 + showgrid="true"
  45 + inkscape:zoom="4"
  46 + inkscape:cx="13.229181"
  47 + inkscape:cy="119.82429"
  48 + inkscape:window-x="0"
  49 + inkscape:window-y="0"
  50 + inkscape:window-maximized="1"
  51 + inkscape:current-layer="svg4136"
  52 + showguides="false"
  53 + borderlayer="false"
  54 + inkscape:showpageshadow="true"
  55 + showborder="true">
  56 + <inkscape:grid
  57 + type="xygrid"
  58 + id="grid4640"
  59 + empspacing="24" />
  60 + </sodipodi:namedview>
  61 + <!-- Created with SVG-edit - http://svg-edit.googlecode.com/ -->
  62 + <rect
  63 + style="fill:#4c4c4c;fill-opacity:1;stroke:none;stroke-width:0"
  64 + id="svg_1"
  65 + height="16"
  66 + width="16"
  67 + y="4"
  68 + x="4" />
  69 + <rect
  70 + id="svg_1-7"
  71 + height="16"
  72 + width="16"
  73 + y="3.999995"
  74 + x="28.000006"
  75 + style="fill:#ec3f29;fill-opacity:0.94117647;stroke:none;stroke-width:0" />
  76 + <rect
  77 + style="fill:#4c4c4c;fill-opacity:1;stroke:none;stroke-width:0"
  78 + x="52.000004"
  79 + y="3.999995"
  80 + width="16"
  81 + height="16"
  82 + id="rect4165" />
  83 + <rect
  84 + id="rect4175"
  85 + height="16"
  86 + width="16"
  87 + y="3.9999852"
  88 + x="172.00002"
  89 + style="fill:#4c4c4c;fill-opacity:1;stroke:none;stroke-width:0" />
  90 + <rect
  91 + id="rect4175-3"
  92 + height="16"
  93 + width="16"
  94 + y="3.999995"
  95 + x="196"
  96 + style="fill:#4c4c4c;fill-opacity:1;stroke:none;stroke-width:0" />
  97 + <g
  98 + id="g4299"
  99 + style="stroke:none">
  100 + <rect
  101 + x="7.0000048"
  102 + y="10.999998"
  103 + width="9.9999924"
  104 + height="1.9999986"
  105 + id="svg_1-1"
  106 + style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0" />
  107 + <rect
  108 + x="11.000005"
  109 + y="7.0000114"
  110 + width="1.9999955"
  111 + height="9.9999838"
  112 + id="svg_1-1-1"
  113 + style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0" />
  114 + </g>
  115 + <g
  116 + id="g4299-3"
  117 + transform="matrix(0.70710678,-0.70710678,0.70710678,0.70710678,19.029435,12.000001)"
  118 + style="stroke:none">
  119 + <rect
  120 + x="7.0000048"
  121 + y="10.999998"
  122 + width="9.9999924"
  123 + height="1.9999986"
  124 + id="svg_1-1-0"
  125 + style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0" />
  126 + <rect
  127 + x="11.000005"
  128 + y="7.0000114"
  129 + width="1.9999955"
  130 + height="9.9999838"
  131 + id="svg_1-1-1-9"
  132 + style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0" />
  133 + </g>
  134 + <rect
  135 + id="svg_1-7-5"
  136 + height="6.9999905"
  137 + width="6.9999909"
  138 + y="7.0000048"
  139 + x="55.000004"
  140 + style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0" />
  141 + <rect
  142 + style="fill:#ffffff;fill-opacity:1;stroke:#4c4c4c;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
  143 + x="58"
  144 + y="10.00001"
  145 + width="6.9999909"
  146 + height="6.9999905"
  147 + id="rect4354" />
  148 + <rect
  149 + id="svg_1-7-5-7"
  150 + height="6.9999905"
  151 + width="6.9999909"
  152 + y="10.000005"
  153 + x="58.000004"
  154 + style="fill:#ffffff;fill-opacity:1;stroke:#3c80df;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.94117647" />
  155 + <g
  156 + id="g4378">
  157 + <rect
  158 + style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0"
  159 + x="198"
  160 + y="10.999999"
  161 + width="7.9999909"
  162 + height="1.9999965"
  163 + id="svg_1-7-5-3" />
  164 + <rect
  165 + id="rect4374"
  166 + height="1.9999946"
  167 + width="11.999995"
  168 + y="7.0000005"
  169 + x="198"
  170 + style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0" />
  171 + <rect
  172 + id="rect4376"
  173 + height="1.9999995"
  174 + width="3.9999928"
  175 + y="14.999996"
  176 + x="198"
  177 + style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0" />
  178 + </g>
  179 + <g
  180 + transform="matrix(1,0,0,-1,-23.999995,23.999995)"
  181 + id="g4383">
  182 + <rect
  183 + id="rect4385"
  184 + height="1.9999965"
  185 + width="7.9999909"
  186 + y="10.999999"
  187 + x="198"
  188 + style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0" />
  189 + <rect
  190 + style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0"
  191 + x="198"
  192 + y="7.0000005"
  193 + width="11.999995"
  194 + height="1.9999946"
  195 + id="rect4387" />
  196 + <rect
  197 + style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0"
  198 + x="198"
  199 + y="14.999996"
  200 + width="3.9999928"
  201 + height="1.9999995"
  202 + id="rect4389" />
  203 + </g>
  204 + <rect
  205 + style="fill:#4c4c4c;fill-opacity:1;stroke:none"
  206 + id="rect3754-4"
  207 + width="16"
  208 + height="16"
  209 + x="76"
  210 + y="3.9999199" />
  211 + <path
  212 + style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
  213 + d="m 85.10447,6.0157384 -0.0156,1.4063 c 3.02669,-0.2402 0.33008,3.6507996 2.48438,4.5780996 -2.18694,1.0938 0.49191,4.9069 -2.45313,4.5781 l -0.0156,1.4219 c 5.70828,0.559 1.03264,-5.1005 4.70313,-5.2656 l 0,-1.4063 c -3.61303,-0.027 1.11893,-5.7069996 -4.70313,-5.3124996 z"
  214 + id="path4351"
  215 + inkscape:connector-curvature="0"
  216 + sodipodi:nodetypes="cccccccc" />
  217 + <path
  218 + style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
  219 + d="m 82.78125,5.9984384 0.0156,1.4063 c -3.02668,-0.2402 -0.33007,3.6506996 -2.48437,4.5780996 2.18694,1.0938 -0.49192,4.9069 2.45312,4.5781 l 0.0156,1.4219 c -5.70827,0.559 -1.03263,-5.1004 -4.70312,-5.2656 l 0,-1.4063 c 3.61303,-0.027 -1.11894,-5.7070996 4.70312,-5.3124996 z"
  220 + id="path4351-9"
  221 + inkscape:connector-curvature="0"
  222 + sodipodi:nodetypes="cccccccc" />
  223 + <rect
  224 + style="fill:#4c4c4c;fill-opacity:1;stroke:none"
  225 + id="rect3754-25"
  226 + width="16"
  227 + height="16"
  228 + x="100"
  229 + y="3.9999199" />
  230 + <path
  231 + style="fill:#ffffff;fill-opacity:1;stroke:none"
  232 + d="m 103.719,5.6719384 0,12.7187996 3.03125,0 0,-1.5313 -1.34375,0 0,-9.6249996 1.375,0 0,-1.5625 z"
  233 + id="path2987"
  234 + inkscape:connector-curvature="0" />
  235 + <path
  236 + style="fill:#ffffff;fill-opacity:1;stroke:none"
  237 + d="m 112.2185,5.6721984 0,12.7187996 -3.03125,0 0,-1.5313 1.34375,0 0,-9.6249996 -1.375,0 0,-1.5625 z"
  238 + id="path2987-1"
  239 + inkscape:connector-curvature="0" />
  240 + <rect
  241 + style="fill:#4c4c4c;fill-opacity:1;stroke:none"
  242 + id="rect3754-73"
  243 + width="16"
  244 + height="16"
  245 + x="124"
  246 + y="3.9999199" />
  247 + <path
  248 + style="fill:#ffffff;fill-opacity:1;stroke:none"
  249 + d="m 126.2824,17.602938 1.78957,0 1.14143,-2.8641 5.65364,0 1.14856,2.8641 1.76565,0 -4.78687,-11.1610996 -1.91903,0 z"
  250 + id="path3780"
  251 + inkscape:connector-curvature="0"
  252 + sodipodi:nodetypes="ccccccccc" />
  253 + <path
  254 + style="fill:#4c4c4c;fill-opacity:1;stroke:none"
  255 + d="m 129.72704,13.478838 4.60852,0.01 -2.30426,-5.5497996 z"
  256 + id="path3782"
  257 + inkscape:connector-curvature="0" />
  258 + <rect
  259 + style="fill:#4c4c4c;fill-opacity:1;stroke:none"
  260 + id="rect3754-35"
  261 + width="16"
  262 + height="16"
  263 + x="148"
  264 + y="3.9999199" />
  265 + <path
  266 + style="fill:#ffffff;fill-opacity:1;stroke:none"
  267 + d="m 156.47655,5.8917384 0,2.1797 0.46093,2.3983996 1.82813,0 0.39844,-2.3983996 0,-2.1797 z"
  268 + id="path5008-2"
  269 + inkscape:connector-curvature="0"
  270 + sodipodi:nodetypes="ccccccc" />
  271 + <path
  272 + style="fill:#ffffff;fill-opacity:1;stroke:none"
  273 + d="m 152.51561,5.8906384 0,2.1797 0.46094,2.3983996 1.82812,0 0.39844,-2.3983996 0,-2.1797 z"
  274 + id="path5008-2-8"
  275 + inkscape:connector-curvature="0"
  276 + sodipodi:nodetypes="ccccccc" />
  277 + <rect
  278 + id="svg_1-7-2"
  279 + height="1.9999961"
  280 + width="11.999996"
  281 + y="64"
  282 + x="54"
  283 + style="fill:#4c4c4c;fill-opacity:0.98431373;stroke:none;stroke-width:0" />
  284 + <rect
  285 + id="svg_1-7-2-2"
  286 + height="2.9999905"
  287 + width="2.9999907"
  288 + y="52"
  289 + x="80.000008"
  290 + style="fill:#4c4c4c;fill-opacity:0.98431373;stroke:none;stroke-width:0" />
  291 + <rect
  292 + style="fill:#4c4c4c;fill-opacity:0.98431373;stroke:none;stroke-width:0"
  293 + x="85.000008"
  294 + y="52"
  295 + width="2.9999907"
  296 + height="2.9999905"
  297 + id="rect4561" />
  298 + <rect
  299 + style="fill:#4c4c4c;fill-opacity:0.98431373;stroke:none;stroke-width:0"
  300 + x="80.000008"
  301 + y="58"
  302 + width="2.9999907"
  303 + height="2.9999905"
  304 + id="rect4563" />
  305 + <rect
  306 + id="rect4565"
  307 + height="2.9999905"
  308 + width="2.9999907"
  309 + y="58"
  310 + x="85.000008"
  311 + style="fill:#4c4c4c;fill-opacity:0.98431373;stroke:none;stroke-width:0" />
  312 + <rect
  313 + id="rect4567"
  314 + height="2.9999905"
  315 + width="2.9999907"
  316 + y="64"
  317 + x="80.000008"
  318 + style="fill:#4c4c4c;fill-opacity:0.98431373;stroke:none;stroke-width:0" />
  319 + <rect
  320 + style="fill:#4c4c4c;fill-opacity:0.98431373;stroke:none;stroke-width:0"
  321 + x="85.000008"
  322 + y="64"
  323 + width="2.9999907"
  324 + height="2.9999905"
  325 + id="rect4569" />
  326 + <circle
  327 + style="opacity:1;fill:none;fill-opacity:1;stroke:#4c4c4c;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none"
  328 + id="path4571"
  329 + cx="110.06081"
  330 + cy="57.939209"
  331 + r="4.7438836" />
  332 + <rect
  333 + style="fill:#4c4c4c;fill-opacity:0.98431373;stroke:none;stroke-width:0"
  334 + x="116.64566"
  335 + y="-31.79752"
  336 + width="4.229713"
  337 + height="6.4053884"
  338 + id="rect4563-2"
  339 + transform="matrix(0.70710678,0.70710678,-0.70710678,0.70710678,0,0)" />
  340 + <path
  341 + style="fill:#4c4c4c;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
  342 + d="M 125,56 138.77027,56.095 132,64 Z"
  343 + id="path4613"
  344 + inkscape:connector-curvature="0"
  345 + sodipodi:nodetypes="cccc" />
  346 + <path
  347 + sodipodi:nodetypes="cccc"
  348 + inkscape:connector-curvature="0"
  349 + id="path4615"
  350 + d="M 149,64 162.77027,63.905 156,56 Z"
  351 + style="fill:#4c4c4c;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
  352 + <rect
  353 + style="fill:#4c4c4c;fill-opacity:0.98431373;stroke:none;stroke-width:0"
  354 + x="54"
  355 + y="53"
  356 + width="11.999996"
  357 + height="1.9999961"
  358 + id="rect4638" />
  359 + <rect
  360 + id="svg_1-7-2-24"
  361 + height="1.9999957"
  362 + width="12.99999"
  363 + y="-56"
  364 + x="53"
  365 + style="fill:#4c4c4c;fill-opacity:0.98431373;stroke:none;stroke-width:0"
  366 + transform="matrix(0,1,-1,0,0,0)" />
  367 + <rect
  368 + transform="matrix(0,1,-1,0,0,0)"
  369 + style="fill:#4c4c4c;fill-opacity:0.98431373;stroke:none;stroke-width:0"
  370 + x="53"
  371 + y="-66"
  372 + width="12.99999"
  373 + height="1.9999957"
  374 + id="rect4657" />
  375 + <rect
  376 + id="rect4659"
  377 + height="0.99999291"
  378 + width="11.999999"
  379 + y="57"
  380 + x="54"
  381 + style="fill:#4c4c4c;fill-opacity:0.98431373;stroke:none;stroke-width:0" />
  382 + <rect
  383 + style="fill:#d3d3d3;fill-opacity:1;stroke:none;stroke-width:0;stroke-opacity:1"
  384 + x="54"
  385 + y="88.000122"
  386 + width="11.999996"
  387 + height="1.9999961"
  388 + id="rect4661" />
  389 + <rect
  390 + style="fill:#d3d3d3;fill-opacity:1;stroke:none;stroke-width:0;stroke-opacity:1"
  391 + x="80.000008"
  392 + y="76.000122"
  393 + width="2.9999907"
  394 + height="2.9999905"
  395 + id="rect4663" />
  396 + <rect
  397 + id="rect4665"
  398 + height="2.9999905"
  399 + width="2.9999907"
  400 + y="76.000122"
  401 + x="85.000008"
  402 + style="fill:#d3d3d3;fill-opacity:1;stroke:none;stroke-width:0;stroke-opacity:1" />
  403 + <rect
  404 + id="rect4667"
  405 + height="2.9999905"
  406 + width="2.9999907"
  407 + y="82.000122"
  408 + x="80.000008"
  409 + style="fill:#d3d3d3;fill-opacity:1;stroke:none;stroke-width:0;stroke-opacity:1" />
  410 + <rect
  411 + style="fill:#d3d3d3;fill-opacity:1;stroke:none;stroke-width:0;stroke-opacity:1"
  412 + x="85.000008"
  413 + y="82.000122"
  414 + width="2.9999907"
  415 + height="2.9999905"
  416 + id="rect4669" />
  417 + <rect
  418 + style="fill:#d3d3d3;fill-opacity:1;stroke:none;stroke-width:0;stroke-opacity:1"
  419 + x="80.000008"
  420 + y="88.000122"
  421 + width="2.9999907"
  422 + height="2.9999905"
  423 + id="rect4671" />
  424 + <rect
  425 + id="rect4673"
  426 + height="2.9999905"
  427 + width="2.9999907"
  428 + y="88.000122"
  429 + x="85.000008"
  430 + style="fill:#d3d3d3;fill-opacity:1;stroke:none;stroke-width:0;stroke-opacity:1" />
  431 + <circle
  432 + r="4.7438836"
  433 + cy="81.939331"
  434 + cx="110.06081"
  435 + id="circle4675"
  436 + style="opacity:1;fill:none;fill-opacity:1;stroke:#d3d3d3;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
  437 + <rect
  438 + transform="matrix(0.70710678,0.70710678,-0.70710678,0.70710678,0,0)"
  439 + id="rect4677"
  440 + height="6.4053884"
  441 + width="4.229713"
  442 + y="-14.826816"
  443 + x="133.6163"
  444 + style="fill:#d3d3d3;fill-opacity:1;stroke:#d3d3d3;stroke-width:0;stroke-opacity:1" />
  445 + <path
  446 + sodipodi:nodetypes="cccc"
  447 + inkscape:connector-curvature="0"
  448 + id="path4679"
  449 + d="m 125,80.000005 13.77027,0.09499 L 132,87.999992 Z"
  450 + style="fill:#d3d3d3;fill-opacity:1;fill-rule:evenodd;stroke:#d3d3d3;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
  451 + <path
  452 + style="fill:#d3d3d3;fill-opacity:1;fill-rule:evenodd;stroke:#d3d3d3;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
  453 + d="M 149,88.0002 162.77027,87.9052 156,80.0002 Z"
  454 + id="path4681"
  455 + inkscape:connector-curvature="0"
  456 + sodipodi:nodetypes="cccc" />
  457 + <rect
  458 + id="rect4683"
  459 + height="1.9999961"
  460 + width="11.999996"
  461 + y="77.000122"
  462 + x="54"
  463 + style="fill:#d3d3d3;fill-opacity:1;stroke:none;stroke-width:0;stroke-opacity:1" />
  464 + <rect
  465 + transform="matrix(0,1,-1,0,0,0)"
  466 + style="fill:#d3d3d3;fill-opacity:1;stroke:none;stroke-width:0;stroke-opacity:1"
  467 + x="77.000122"
  468 + y="-56"
  469 + width="12.99999"
  470 + height="1.9999957"
  471 + id="rect4685" />
  472 + <rect
  473 + id="rect4687"
  474 + height="1.9999957"
  475 + width="12.99999"
  476 + y="-66"
  477 + x="77.000122"
  478 + style="fill:#d3d3d3;fill-opacity:1;stroke:none;stroke-width:0;stroke-opacity:1"
  479 + transform="matrix(0,1,-1,0,0,0)" />
  480 + <rect
  481 + style="fill:#d3d3d3;fill-opacity:1;stroke:none;stroke-width:0;stroke-opacity:1"
  482 + x="54"
  483 + y="81.000122"
  484 + width="11.999999"
  485 + height="0.99999291"
  486 + id="rect4689" />
  487 + <rect
  488 + id="rect4761-1"
  489 + height="1.9999945"
  490 + width="15.99999"
  491 + y="101"
  492 + x="76.000008"
  493 + style="fill:#ffffff;fill-opacity:0.8;stroke:none;stroke-width:0" />
  494 + <rect
  495 + id="rect4761-0"
  496 + height="1.9999945"
  497 + width="15.99999"
  498 + y="105"
  499 + x="76.000008"
  500 + style="fill:#ffffff;fill-opacity:0.8;stroke:none;stroke-width:0" />
  501 + <rect
  502 + id="rect4761-7"
  503 + height="1.9999945"
  504 + width="9"
  505 + y="109"
  506 + x="76.000008"
  507 + style="fill:#ffffff;fill-opacity:0.8;stroke:none;stroke-width:0" />
  508 + <rect
  509 + id="rect4761-1-1"
  510 + height="1.9999945"
  511 + width="12"
  512 + y="125"
  513 + x="76.000008"
  514 + style="fill:#ffffff;fill-opacity:0.8;stroke:none;stroke-width:0" />
  515 + <rect
  516 + id="rect4761-1-1-4"
  517 + height="1.9999945"
  518 + width="10"
  519 + y="137"
  520 + x="76.000008"
  521 + style="fill:#ffffff;fill-opacity:0.8;stroke:none;stroke-width:0" />
  522 + <rect
  523 + id="rect4761-1-1-4-4"
  524 + height="1.9999945"
  525 + width="10"
  526 + y="129"
  527 + x="82"
  528 + style="fill:#ffffff;fill-opacity:0.8;stroke:none;stroke-width:0" />
  529 + <rect
  530 + id="rect4761-1-1-4-4-3"
  531 + height="1.9999945"
  532 + width="9"
  533 + y="133"
  534 + x="82"
  535 + style="fill:#ffffff;fill-opacity:0.8;stroke:none;stroke-width:0" />
  536 + <path
  537 + inkscape:connector-curvature="0"
  538 + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.8;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.66157866;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
  539 + d="m 36.398438,100.0254 c -0.423362,-0.013 -0.846847,0.01 -1.265626,0.062 -1.656562,0.2196 -3.244567,0.9739 -4.507812,2.2266 L 29,100.5991 l -2.324219,7.7129 7.826172,-1.9062 -1.804687,-1.9063 c 1.597702,-1.5308 4.048706,-1.8453 5.984375,-0.7207 1.971162,1.1452 2.881954,3.3975 2.308593,5.5508 -0.573361,2.1533 -2.533865,3.6953 -4.830078,3.6953 l 0,3.0742 c 3.550756,0 6.710442,-2.4113 7.650391,-5.9414 0.939949,-3.5301 -0.618463,-7.2736 -3.710938,-9.0703 -1.159678,-0.6738 -2.431087,-1.0231 -3.701171,-1.0625 z"
  540 + id="path4138" />
  541 + <path
  542 + inkscape:connector-curvature="0"
  543 + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.8;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.66157866;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
  544 + d="m 59.722656,99.9629 c -1.270084,0.039 -2.541493,0.3887 -3.701172,1.0625 -3.092475,1.7967 -4.650886,5.5402 -3.710937,9.0703 0.939949,3.5301 4.09768,5.9414 7.648437,5.9414 l 0,-3.0742 c -2.296214,0 -4.256717,-1.542 -4.830078,-3.6953 -0.573361,-2.1533 0.337432,-4.4056 2.308594,-5.5508 1.935731,-1.1246 4.38863,-0.8102 5.986326,0.7207 l -1.806638,1.9063 7.828128,1.9062 -2.32422,-7.7129 -1.62696,1.7168 c -1.26338,-1.2531 -2.848917,-2.0088 -4.505855,-2.2285 -0.418778,-0.055 -0.842263,-0.076 -1.265625,-0.062 z"
  545 + id="path4138-1" />
  546 + <path
  547 + inkscape:connector-curvature="0"
  548 + style="opacity:0.8;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.96599996;stroke-miterlimit:4;stroke-dasharray:none"
  549 + d="m 10.5,100 0,2 -2.4999996,0 L 12,107 l 4,-5 -2.5,0 0,-2 -3,0 z"
  550 + id="path3055-0-77" />
  551 + <path
  552 + style="opacity:0.8;fill:none;stroke:#ffffff;stroke-width:1.96599996;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
  553 + d="m 4.9850574,108.015 14.0298856,-0.03"
  554 + id="path5244-5-0-5"
  555 + inkscape:connector-curvature="0"
  556 + sodipodi:nodetypes="cc" />
  557 + <path
  558 + style="opacity:0.8;fill:none;stroke:#ffffff;stroke-width:1.96599996;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
  559 + d="m 4.9849874,132.015 14.0298866,-0.03"
  560 + id="path5244-5-0-5-8"
  561 + inkscape:connector-curvature="0"
  562 + sodipodi:nodetypes="cc" />
  563 + <path
  564 + inkscape:connector-curvature="0"
  565 + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.4;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#4d4d4d;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.66157866;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
  566 + d="m 36.398438,123.9629 c -0.423362,-0.013 -0.846847,0.01 -1.265626,0.062 -1.656562,0.2196 -3.244567,0.9739 -4.507812,2.2266 L 29,124.5366 l -2.324219,7.7129 7.826172,-1.9062 -1.804687,-1.9063 c 1.597702,-1.5308 4.048706,-1.8453 5.984375,-0.7207 1.971162,1.1453 2.881954,3.3975 2.308593,5.5508 -0.573361,2.1533 -2.533864,3.6953 -4.830078,3.6953 l 0,3.0742 c 3.550757,0 6.710442,-2.4093 7.650391,-5.9394 0.939949,-3.5301 -0.618463,-7.2756 -3.710938,-9.0723 -1.159678,-0.6737 -2.431087,-1.0231 -3.701171,-1.0625 z"
  567 + id="path4138-12" />
  568 + <path
  569 + inkscape:connector-curvature="0"
  570 + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.4;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#4d4d4d;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.66157866;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
  571 + d="m 59.722656,123.9629 c -1.270084,0.039 -2.541493,0.3888 -3.701172,1.0625 -3.092475,1.7967 -4.650886,5.5422 -3.710937,9.0723 0.939949,3.5301 4.09768,5.9394 7.648437,5.9394 l 0,-3.0742 c -2.296214,0 -4.256717,-1.542 -4.830078,-3.6953 -0.573361,-2.1533 0.337432,-4.4055 2.308594,-5.5508 1.935731,-1.1246 4.38863,-0.8102 5.986326,0.7207 l -1.806638,1.9063 7.828128,1.9062 -2.32422,-7.7129 -1.62696,1.7168 c -1.26338,-1.2531 -2.848917,-2.0088 -4.505855,-2.2285 -0.418778,-0.055 -0.842263,-0.076 -1.265625,-0.062 z"
  572 + id="path4138-1-3" />
  573 + <path
  574 + id="path6191"
  575 + d="m 10.5,116 0,-2 -2.4999996,0 L 12,109 l 4,5 -2.5,0 0,2 -3,0 z"
  576 + style="opacity:0.8;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.96599996;stroke-miterlimit:4;stroke-dasharray:none"
  577 + inkscape:connector-curvature="0" />
  578 + <path
  579 + inkscape:connector-curvature="0"
  580 + style="opacity:0.8;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.96599996;stroke-miterlimit:4;stroke-dasharray:none"
  581 + d="m 10.5,129 0,-2 -2.4999996,0 L 12,122 l 4,5 -2.5,0 0,2 -3,0 z"
  582 + id="path6193" />
  583 + <path
  584 + id="path6195"
  585 + d="m 10.5,135 0,2 -2.4999996,0 L 12,142 l 4,-5 -2.5,0 0,-2 -3,0 z"
  586 + style="opacity:0.8;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.96599996;stroke-miterlimit:4;stroke-dasharray:none"
  587 + inkscape:connector-curvature="0" />
  588 + <path
  589 + sodipodi:type="star"
  590 + style="fill:#4d4d4d;fill-opacity:0.90196078;stroke:#d3d3d3;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none"
  591 + id="path4500"
  592 + sodipodi:sides="3"
  593 + sodipodi:cx="11.55581"
  594 + sodipodi:cy="60.073242"
  595 + sodipodi:r1="5.1116104"
  596 + sodipodi:r2="2.5558052"
  597 + sodipodi:arg1="0"
  598 + sodipodi:arg2="1.0471976"
  599 + inkscape:flatsided="false"
  600 + inkscape:rounded="0"
  601 + inkscape:randomized="0"
  602 + d="m 16.66742,60.073242 -3.833708,2.213392 -3.8337072,2.213393 0,-4.426785 0,-4.426784 3.8337082,2.213392 z"
  603 + inkscape:transform-center-x="-1.2779026" />
  604 + <path
  605 + inkscape:transform-center-x="1.277902"
  606 + d="m -31.500004,60.073242 -3.833708,2.213392 -3.833707,2.213393 0,-4.426785 0,-4.426784 3.833707,2.213392 z"
  607 + inkscape:randomized="0"
  608 + inkscape:rounded="0"
  609 + inkscape:flatsided="false"
  610 + sodipodi:arg2="1.0471976"
  611 + sodipodi:arg1="0"
  612 + sodipodi:r2="2.5558052"
  613 + sodipodi:r1="5.1116104"
  614 + sodipodi:cy="60.073242"
  615 + sodipodi:cx="-36.611614"
  616 + sodipodi:sides="3"
  617 + id="path4502"
  618 + style="fill:#4d4d4d;fill-opacity:0.90196078;stroke:#d3d3d3;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none"
  619 + sodipodi:type="star"
  620 + transform="scale(-1,1)" />
  621 + <path
  622 + d="m 16.66742,60.073212 -3.833708,2.213392 -3.8337072,2.213392 0,-4.426784 0,-4.426785 3.8337082,2.213392 z"
  623 + inkscape:randomized="0"
  624 + inkscape:rounded="0"
  625 + inkscape:flatsided="false"
  626 + sodipodi:arg2="1.0471976"
  627 + sodipodi:arg1="0"
  628 + sodipodi:r2="2.5558052"
  629 + sodipodi:r1="5.1116104"
  630 + sodipodi:cy="60.073212"
  631 + sodipodi:cx="11.55581"
  632 + sodipodi:sides="3"
  633 + id="path4504"
  634 + style="fill:#4d4d4d;fill-opacity:0.90196078;stroke:#d3d3d3;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none"
  635 + sodipodi:type="star"
  636 + transform="matrix(0,1,-1,0,72.0074,71.7877)"
  637 + inkscape:transform-center-y="1.2779029" />
  638 + <path
  639 + inkscape:transform-center-y="-1.2779026"
  640 + transform="matrix(0,-1,-1,0,96,96)"
  641 + sodipodi:type="star"
  642 + style="fill:#4d4d4d;fill-opacity:0.90196078;stroke:#d3d3d3;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none"
  643 + id="path4506"
  644 + sodipodi:sides="3"
  645 + sodipodi:cx="11.55581"
  646 + sodipodi:cy="60.073212"
  647 + sodipodi:r1="5.1116104"
  648 + sodipodi:r2="2.5558052"
  649 + sodipodi:arg1="0"
  650 + sodipodi:arg2="1.0471976"
  651 + inkscape:flatsided="false"
  652 + inkscape:rounded="0"
  653 + inkscape:randomized="0"
  654 + d="m 16.66742,60.073212 -3.833708,2.213392 -3.8337072,2.213392 0,-4.426784 0,-4.426785 3.8337082,2.213392 z" />
  655 + <path
  656 + sodipodi:nodetypes="cccc"
  657 + inkscape:connector-curvature="0"
  658 + id="path4615-5"
  659 + d="m 171.82574,65.174193 16.34854,0 -8.17427,-13.348454 z"
  660 + style="fill:#fbb917;fill-opacity:1;fill-rule:evenodd;stroke:#fbb917;stroke-width:1.65161395;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
  661 + <path
  662 + style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
  663 + d="m 179,55 0,6 2,0 0,-6"
  664 + id="path4300"
  665 + inkscape:connector-curvature="0"
  666 + sodipodi:nodetypes="cccc" />
  667 + <path
  668 + style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
  669 + d="m 179,62 0,2 2,0 0,-2"
  670 + id="path4300-6"
  671 + inkscape:connector-curvature="0"
  672 + sodipodi:nodetypes="cccc" />
  673 + <path
  674 + style="fill:#ffffff;fill-opacity:0.8;fill-rule:evenodd;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:0.8"
  675 + d="M 99.994369,113.0221 102,114.98353 l 7,-6.9558 3,0.97227 2,-1 1,-2 0,-3 -3,3 -3,-3 3,-3 -3,0 -2,1 -1,2 0.99437,3.0221 z"
  676 + id="path4268"
  677 + inkscape:connector-curvature="0"
  678 + sodipodi:nodetypes="ccccccccccccccc" />
  679 + <rect
  680 + id="rect4175-3-5"
  681 + height="16"
  682 + width="16"
  683 + y="4"
  684 + x="220"
  685 + style="fill:#4c4c4c;fill-opacity:1;stroke:none;stroke-width:0" />
  686 + <path
  687 + style="fill:#ffffff;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
  688 + d="m 234,6 0,2 -5,5 0,5 -2,0 0,-5 -5,-5 0,-2"
  689 + id="path3546"
  690 + inkscape:connector-curvature="0"
  691 + sodipodi:nodetypes="cccccccc" />
  692 + <g
  693 + transform="matrix(1.3333328,0,0,-1.5999992,-139.9999,127.19999)"
  694 + id="g4383-6">
  695 + <rect
  696 + id="rect4385-2"
  697 + height="1.2499905"
  698 + width="5.9999924"
  699 + y="12.625005"
  700 + x="198.00002"
  701 + style="fill:#ffffff;fill-opacity:0.8;stroke:#000000;stroke-width:0" />
  702 + <rect
  703 + style="fill:#ffffff;fill-opacity:0.8;stroke:#000000;stroke-width:0"
  704 + x="198.00002"
  705 + y="15.125007"
  706 + width="7.4999928"
  707 + height="1.2499949"
  708 + id="rect4387-9" />
  709 + <rect
  710 + style="fill:#ffffff;fill-opacity:0.8;stroke:#000000;stroke-width:0"
  711 + x="198.00002"
  712 + y="7.6250024"
  713 + width="2.9999909"
  714 + height="1.2499905"
  715 + id="rect4389-1-0" />
  716 + <rect
  717 + style="fill:#ffffff;fill-opacity:0.8;stroke:#000000;stroke-width:0"
  718 + x="198.00002"
  719 + y="10.125004"
  720 + width="4.4999919"
  721 + height="1.2499905"
  722 + id="rect4389-1-9" />
  723 + <path
  724 + style="fill:#ffffff;fill-opacity:0.8;fill-rule:evenodd;stroke:none;stroke-width:0.68465352px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
  725 + d="m 207.00001,16.375004 0,-5.625005 -2.25,0 3,-3.1250014 3,3.1250014 -2.25,0 0,5.625005 -1.5,0"
  726 + id="path4402"
  727 + inkscape:connector-curvature="0"
  728 + sodipodi:nodetypes="cccccccc" />
  729 + </g>
  730 + <path
  731 + style="fill:#ffffff;fill-opacity:0.8;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
  732 + d="m 164,100 0,3 -6,6 0,7 -4,0 0,-7 -6,-6 0,-3"
  733 + id="path3546-2-2"
  734 + inkscape:connector-curvature="0"
  735 + sodipodi:nodetypes="cccccccc" />
  736 + <rect
  737 + style="fill:#4c4c4c;fill-opacity:1;stroke:none;stroke-width:0"
  738 + id="svg_1-3"
  739 + height="16"
  740 + width="16"
  741 + y="28"
  742 + x="4" />
  743 + <path
  744 + sodipodi:nodetypes="ccccccccc"
  745 + inkscape:connector-curvature="0"
  746 + id="path4402-5-7"
  747 + d="m 15,41 0,-7 -4,0 0,3 -5,-4 5,-4 0,3 6,0 0,9"
  748 + style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.68465352px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
  749 +</svg>
  1 +.jsoneditor input, .jsoneditor input:not([type]), .jsoneditor input[type=search], .jsoneditor input[type=text], .jsoneditor-modal input, .jsoneditor-modal input:not([type]), .jsoneditor-modal input[type=search], .jsoneditor-modal input[type=text] {
  2 + height: auto;
  3 + border: inherit;
  4 + box-shadow: none;
  5 + font-size: inherit;
  6 + box-sizing: inherit;
  7 + padding: inherit;
  8 + font-family: inherit;
  9 + transition: none;
  10 + line-height: inherit
  11 +}
  12 +
  13 +.jsoneditor input:focus, .jsoneditor input:not([type]):focus, .jsoneditor input[type=search]:focus, .jsoneditor input[type=text]:focus, .jsoneditor-modal input:focus, .jsoneditor-modal input:not([type]):focus, .jsoneditor-modal input[type=search]:focus, .jsoneditor-modal input[type=text]:focus {
  14 + border: inherit;
  15 + box-shadow: inherit
  16 +}
  17 +
  18 +.jsoneditor textarea, .jsoneditor-modal textarea {
  19 + height: inherit
  20 +}
  21 +
  22 +.jsoneditor select, .jsoneditor-modal select {
  23 + display: inherit;
  24 + height: inherit
  25 +}
  26 +
  27 +.jsoneditor label, .jsoneditor-modal label {
  28 + font-size: inherit;
  29 + font-weight: inherit;
  30 + color: inherit
  31 +}
  32 +
  33 +.jsoneditor table, .jsoneditor-modal table {
  34 + border-collapse: collapse;
  35 + width: auto
  36 +}
  37 +
  38 +.jsoneditor td, .jsoneditor th, .jsoneditor-modal td, .jsoneditor-modal th {
  39 + padding: 0;
  40 + display: table-cell;
  41 + text-align: left;
  42 + vertical-align: inherit;
  43 + border-radius: inherit
  44 +}
  45 +
  46 +.jsoneditor .autocomplete.dropdown {
  47 + position: absolute;
  48 + background: #fff;
  49 + box-shadow: 2px 2px 12px rgba(128, 128, 128, .3);
  50 + border: 1px solid #d3d3d3;
  51 + overflow-x: hidden;
  52 + overflow-y: auto;
  53 + cursor: default;
  54 + margin: 0;
  55 + padding: 5px;
  56 + text-align: left;
  57 + outline: 0;
  58 + font-family: "dejavu sans mono", "droid sans mono", consolas, monaco, "lucida console", "courier new", courier, monospace, sans-serif;
  59 + font-size: 10pt
  60 +}
  61 +
  62 +.jsoneditor .autocomplete.dropdown .item {
  63 + color: #1a1a1a
  64 +}
  65 +
  66 +.jsoneditor .autocomplete.dropdown .item.hover {
  67 + background-color: #ebebeb
  68 +}
  69 +
  70 +.jsoneditor .autocomplete.hint {
  71 + color: #a1a1a1;
  72 + top: 4px;
  73 + left: 4px
  74 +}
  75 +
  76 +.jsoneditor-contextmenu-root {
  77 + position: relative;
  78 + width: 0;
  79 + height: 0
  80 +}
  81 +
  82 +.jsoneditor-contextmenu {
  83 + position: absolute;
  84 + box-sizing: content-box;
  85 + z-index: 2
  86 +}
  87 +
  88 +.jsoneditor-contextmenu .jsoneditor-menu {
  89 + position: relative;
  90 + left: 0;
  91 + top: 0;
  92 + width: 128px;
  93 + height: auto;
  94 + background: #fff;
  95 + border: 1px solid #d3d3d3;
  96 + box-shadow: 2px 2px 12px rgba(128, 128, 128, .3);
  97 + list-style: none;
  98 + margin: 0;
  99 + padding: 0
  100 +}
  101 +
  102 +.jsoneditor-contextmenu .jsoneditor-menu button {
  103 + position: relative;
  104 + padding: 0 8px 0 0;
  105 + margin: 0;
  106 + width: 128px;
  107 + height: auto;
  108 + border: none;
  109 + cursor: pointer;
  110 + color: #4d4d4d;
  111 + background: 0 0;
  112 + font-size: 10pt;
  113 + font-family: arial, sans-serif;
  114 + box-sizing: border-box;
  115 + text-align: left
  116 +}
  117 +
  118 +.jsoneditor-contextmenu .jsoneditor-menu button::-moz-focus-inner {
  119 + padding: 0;
  120 + border: 0
  121 +}
  122 +
  123 +.jsoneditor-contextmenu .jsoneditor-menu button.jsoneditor-default {
  124 + width: 96px
  125 +}
  126 +
  127 +.jsoneditor-contextmenu .jsoneditor-menu button.jsoneditor-expand {
  128 + float: right;
  129 + width: 32px;
  130 + height: 24px;
  131 + border-left: 1px solid #e5e5e5
  132 +}
  133 +
  134 +.jsoneditor-contextmenu .jsoneditor-menu li {
  135 + overflow: hidden
  136 +}
  137 +
  138 +.jsoneditor-contextmenu .jsoneditor-menu li ul {
  139 + display: none;
  140 + position: relative;
  141 + left: -10px;
  142 + top: 0;
  143 + border: none;
  144 + box-shadow: inset 0 0 10px rgba(128, 128, 128, .5);
  145 + padding: 0 10px;
  146 + -webkit-transition: all .3s ease-out;
  147 + -moz-transition: all .3s ease-out;
  148 + -o-transition: all .3s ease-out;
  149 + transition: all .3s ease-out
  150 +}
  151 +
  152 +.jsoneditor-contextmenu .jsoneditor-menu li ul .jsoneditor-icon {
  153 + margin-left: 24px
  154 +}
  155 +
  156 +.jsoneditor-contextmenu .jsoneditor-menu li ul li button {
  157 + padding-left: 24px;
  158 + animation: all ease-in-out 1s
  159 +}
  160 +
  161 +.jsoneditor-contextmenu .jsoneditor-menu li button .jsoneditor-expand {
  162 + position: absolute;
  163 + top: 0;
  164 + right: 0;
  165 + width: 24px;
  166 + height: 24px;
  167 + padding: 0;
  168 + margin: 0 4px 0 0;
  169 + background-image: url(./img/jsoneditor-icons.svg);
  170 + background-position: 0 -72px
  171 +}
  172 +
  173 +.jsoneditor-contextmenu .jsoneditor-icon {
  174 + position: absolute;
  175 + top: 0;
  176 + left: 0;
  177 + width: 24px;
  178 + height: 24px;
  179 + border: none;
  180 + padding: 0;
  181 + margin: 0;
  182 + background-image: url(./img/jsoneditor-icons.svg)
  183 +}
  184 +
  185 +.jsoneditor-contextmenu .jsoneditor-text {
  186 + padding: 4px 0 4px 24px;
  187 + word-wrap: break-word
  188 +}
  189 +
  190 +.jsoneditor-contextmenu .jsoneditor-text.jsoneditor-right-margin {
  191 + padding-right: 24px
  192 +}
  193 +
  194 +.jsoneditor-contextmenu .jsoneditor-separator {
  195 + height: 0;
  196 + border-top: 1px solid #e5e5e5;
  197 + padding-top: 5px;
  198 + margin-top: 5px
  199 +}
  200 +
  201 +.jsoneditor-contextmenu button.jsoneditor-remove .jsoneditor-icon {
  202 + background-position: -24px 0
  203 +}
  204 +
  205 +.jsoneditor-contextmenu button.jsoneditor-append .jsoneditor-icon {
  206 + background-position: 0 0
  207 +}
  208 +
  209 +.jsoneditor-contextmenu button.jsoneditor-insert .jsoneditor-icon {
  210 + background-position: 0 0
  211 +}
  212 +
  213 +.jsoneditor-contextmenu button.jsoneditor-duplicate .jsoneditor-icon {
  214 + background-position: -48px 0
  215 +}
  216 +
  217 +.jsoneditor-contextmenu button.jsoneditor-sort-asc .jsoneditor-icon {
  218 + background-position: -168px 0
  219 +}
  220 +
  221 +.jsoneditor-contextmenu button.jsoneditor-sort-desc .jsoneditor-icon {
  222 + background-position: -192px 0
  223 +}
  224 +
  225 +.jsoneditor-contextmenu button.jsoneditor-transform .jsoneditor-icon {
  226 + background-position: -216px 0
  227 +}
  228 +
  229 +.jsoneditor-contextmenu button.jsoneditor-extract .jsoneditor-icon {
  230 + background-position: 0 -24px
  231 +}
  232 +
  233 +.jsoneditor-contextmenu button.jsoneditor-type-string .jsoneditor-icon {
  234 + background-position: -144px 0
  235 +}
  236 +
  237 +.jsoneditor-contextmenu button.jsoneditor-type-auto .jsoneditor-icon {
  238 + background-position: -120px 0
  239 +}
  240 +
  241 +.jsoneditor-contextmenu button.jsoneditor-type-object .jsoneditor-icon {
  242 + background-position: -72px 0
  243 +}
  244 +
  245 +.jsoneditor-contextmenu button.jsoneditor-type-array .jsoneditor-icon {
  246 + background-position: -96px 0
  247 +}
  248 +
  249 +.jsoneditor-contextmenu button.jsoneditor-type-modes .jsoneditor-icon {
  250 + background-image: none;
  251 + width: 6px
  252 +}
  253 +
  254 +.jsoneditor-contextmenu li, .jsoneditor-contextmenu ul {
  255 + box-sizing: content-box;
  256 + position: relative
  257 +}
  258 +
  259 +.jsoneditor-contextmenu .jsoneditor-menu button:focus, .jsoneditor-contextmenu .jsoneditor-menu button:hover {
  260 + color: #1a1a1a;
  261 + background-color: #f5f5f5;
  262 + outline: 0
  263 +}
  264 +
  265 +.jsoneditor-contextmenu .jsoneditor-menu li button.jsoneditor-selected, .jsoneditor-contextmenu .jsoneditor-menu li button.jsoneditor-selected:focus, .jsoneditor-contextmenu .jsoneditor-menu li button.jsoneditor-selected:hover {
  266 + color: #fff;
  267 + background-color: #ee422e
  268 +}
  269 +
  270 +.jsoneditor-contextmenu .jsoneditor-menu li ul li button:focus, .jsoneditor-contextmenu .jsoneditor-menu li ul li button:hover {
  271 + background-color: #f5f5f5
  272 +}
  273 +
  274 +.jsoneditor-modal {
  275 + max-width: 95%;
  276 + border-radius: 2px !important;
  277 + padding: 45px 15px 15px 15px !important;
  278 + box-shadow: 2px 2px 12px rgba(128, 128, 128, .3);
  279 + color: #4d4d4d;
  280 + line-height: 1.3em
  281 +}
  282 +
  283 +.jsoneditor-modal.jsoneditor-modal-transform {
  284 + width: 600px !important
  285 +}
  286 +
  287 +.jsoneditor-modal .pico-modal-header {
  288 + position: absolute;
  289 + box-sizing: border-box;
  290 + top: 0;
  291 + left: 0;
  292 + width: 100%;
  293 + padding: 0 10px;
  294 + height: 30px;
  295 + line-height: 30px;
  296 + font-family: arial, sans-serif;
  297 + font-size: 11pt;
  298 + background: #3883fa;
  299 + color: #fff
  300 +}
  301 +
  302 +.jsoneditor-modal table {
  303 + width: 100%
  304 +}
  305 +
  306 +.jsoneditor-modal table td {
  307 + padding: 3px 0
  308 +}
  309 +
  310 +.jsoneditor-modal table td.jsoneditor-modal-input {
  311 + text-align: right;
  312 + padding-right: 0;
  313 + white-space: nowrap
  314 +}
  315 +
  316 +.jsoneditor-modal table td.jsoneditor-modal-actions {
  317 + padding-top: 15px
  318 +}
  319 +
  320 +.jsoneditor-modal table th {
  321 + vertical-align: middle
  322 +}
  323 +
  324 +.jsoneditor-modal p:first-child {
  325 + margin-top: 0
  326 +}
  327 +
  328 +.jsoneditor-modal a {
  329 + color: #3883fa
  330 +}
  331 +
  332 +.jsoneditor-modal .jsoneditor-jmespath-block {
  333 + margin-bottom: 10px
  334 +}
  335 +
  336 +.jsoneditor-modal .pico-close {
  337 + background: 0 0 !important;
  338 + font-size: 24px !important;
  339 + top: 7px !important;
  340 + right: 7px !important;
  341 + color: #fff
  342 +}
  343 +
  344 +.jsoneditor-modal input {
  345 + padding: 4px
  346 +}
  347 +
  348 +.jsoneditor-modal input[type=text] {
  349 + cursor: inherit
  350 +}
  351 +
  352 +.jsoneditor-modal input[disabled] {
  353 + background: #d3d3d3;
  354 + color: grey
  355 +}
  356 +
  357 +.jsoneditor-modal .jsoneditor-select-wrapper {
  358 + position: relative;
  359 + display: inline-block
  360 +}
  361 +
  362 +.jsoneditor-modal .jsoneditor-select-wrapper:after {
  363 + content: "";
  364 + width: 0;
  365 + height: 0;
  366 + border-left: 5px solid transparent;
  367 + border-right: 5px solid transparent;
  368 + border-top: 6px solid #666;
  369 + position: absolute;
  370 + right: 8px;
  371 + top: 14px;
  372 + pointer-events: none
  373 +}
  374 +
  375 +.jsoneditor-modal select {
  376 + padding: 3px 24px 3px 10px;
  377 + min-width: 180px;
  378 + max-width: 350px;
  379 + -webkit-appearance: none;
  380 + -moz-appearance: none;
  381 + appearance: none;
  382 + text-indent: 0;
  383 + text-overflow: "";
  384 + font-size: 10pt;
  385 + line-height: 1.5em
  386 +}
  387 +
  388 +.jsoneditor-modal select::-ms-expand {
  389 + display: none
  390 +}
  391 +
  392 +.jsoneditor-modal .jsoneditor-button-group input {
  393 + padding: 4px 10px;
  394 + margin: 0;
  395 + border-radius: 0;
  396 + border-left-style: none
  397 +}
  398 +
  399 +.jsoneditor-modal .jsoneditor-button-group input.jsoneditor-button-first {
  400 + border-top-left-radius: 3px;
  401 + border-bottom-left-radius: 3px;
  402 + border-left-style: solid
  403 +}
  404 +
  405 +.jsoneditor-modal .jsoneditor-button-group input.jsoneditor-button-last {
  406 + border-top-right-radius: 3px;
  407 + border-bottom-right-radius: 3px
  408 +}
  409 +
  410 +.jsoneditor-modal .jsoneditor-transform-preview {
  411 + background: #f5f5f5;
  412 + height: 200px
  413 +}
  414 +
  415 +.jsoneditor-modal .jsoneditor-transform-preview.jsoneditor-error {
  416 + color: #ee422e
  417 +}
  418 +
  419 +.jsoneditor-modal .jsoneditor-jmespath-wizard {
  420 + line-height: 1.2em;
  421 + width: 100%;
  422 + padding: 0;
  423 + border-radius: 3px
  424 +}
  425 +
  426 +.jsoneditor-modal .jsoneditor-jmespath-label {
  427 + font-weight: 700;
  428 + color: #1e90ff;
  429 + margin-top: 20px;
  430 + margin-bottom: 5px
  431 +}
  432 +
  433 +.jsoneditor-modal .jsoneditor-jmespath-wizard-table {
  434 + width: 100%;
  435 + border-collapse: collapse
  436 +}
  437 +
  438 +.jsoneditor-modal .jsoneditor-jmespath-wizard-label {
  439 + font-style: italic;
  440 + margin: 4px 0 2px 0
  441 +}
  442 +
  443 +.jsoneditor-modal .jsoneditor-inline {
  444 + position: relative;
  445 + display: inline-block;
  446 + width: 100%;
  447 + padding-top: 2px;
  448 + padding-bottom: 2px
  449 +}
  450 +
  451 +.jsoneditor-modal .jsoneditor-inline:not(:last-child) {
  452 + padding-right: 2px
  453 +}
  454 +
  455 +.jsoneditor-modal .jsoneditor-jmespath-filter {
  456 + display: flex;
  457 + flex-wrap: wrap
  458 +}
  459 +
  460 +.jsoneditor-modal .jsoneditor-jmespath-filter-field {
  461 + width: 180px
  462 +}
  463 +
  464 +.jsoneditor-modal .jsoneditor-jmespath-filter-relation {
  465 + width: 100px
  466 +}
  467 +
  468 +.jsoneditor-modal .jsoneditor-jmespath-filter-value {
  469 + min-width: 180px;
  470 + flex: 1
  471 +}
  472 +
  473 +.jsoneditor-modal .jsoneditor-jmespath-sort-field {
  474 + width: 170px
  475 +}
  476 +
  477 +.jsoneditor-modal .jsoneditor-jmespath-sort-order {
  478 + width: 150px
  479 +}
  480 +
  481 +.jsoneditor-modal .jsoneditor-jmespath-select-fields {
  482 + width: 100%
  483 +}
  484 +
  485 +.jsoneditor-modal .selectr-selected {
  486 + border-color: #d3d3d3;
  487 + padding: 4px 28px 4px 8px
  488 +}
  489 +
  490 +.jsoneditor-modal .selectr-selected .selectr-tag {
  491 + background-color: #3883fa;
  492 + border-radius: 5px
  493 +}
  494 +
  495 +.jsoneditor-modal table td, .jsoneditor-modal table th {
  496 + text-align: left;
  497 + vertical-align: middle;
  498 + font-weight: 400;
  499 + color: #4d4d4d;
  500 + border-spacing: 0;
  501 + border-collapse: collapse
  502 +}
  503 +
  504 +.jsoneditor-modal #query, .jsoneditor-modal input, .jsoneditor-modal input[type=text], .jsoneditor-modal input[type=text]:focus, .jsoneditor-modal select, .jsoneditor-modal textarea {
  505 + background: #fff;
  506 + border: 1px solid #d3d3d3;
  507 + color: #4d4d4d;
  508 + border-radius: 3px;
  509 + padding: 4px
  510 +}
  511 +
  512 +.jsoneditor-modal, .jsoneditor-modal #query, .jsoneditor-modal input, .jsoneditor-modal input[type=text], .jsoneditor-modal option, .jsoneditor-modal select, .jsoneditor-modal table td, .jsoneditor-modal table th, .jsoneditor-modal textarea {
  513 + font-size: 10.5pt;
  514 + font-family: arial, sans-serif
  515 +}
  516 +
  517 +.jsoneditor-modal #query, .jsoneditor-modal .jsoneditor-transform-preview {
  518 + font-family: "dejavu sans mono", "droid sans mono", consolas, monaco, "lucida console", "courier new", courier, monospace, sans-serif;
  519 + font-size: 10pt;
  520 + width: 100%;
  521 + box-sizing: border-box
  522 +}
  523 +
  524 +.jsoneditor-modal input[type=button], .jsoneditor-modal input[type=submit] {
  525 + background: #f5f5f5;
  526 + padding: 4px 20px
  527 +}
  528 +
  529 +.jsoneditor-modal input, .jsoneditor-modal select {
  530 + cursor: pointer
  531 +}
  532 +
  533 +.jsoneditor-modal .jsoneditor-button-group.jsoneditor-button-group-value-asc input.jsoneditor-button-asc, .jsoneditor-modal .jsoneditor-button-group.jsoneditor-button-group-value-desc input.jsoneditor-button-desc {
  534 + background: #3883fa;
  535 + border-color: #3883fa;
  536 + color: #fff
  537 +}
  538 +
  539 +.jsoneditor {
  540 + color: #1a1a1a;
  541 + border: thin solid #3883fa;
  542 + -moz-box-sizing: border-box;
  543 + -webkit-box-sizing: border-box;
  544 + box-sizing: border-box;
  545 + width: 100%;
  546 + height: 100%;
  547 + position: relative;
  548 + padding: 0;
  549 + line-height: 100%
  550 +}
  551 +
  552 +div.jsoneditor-default, div.jsoneditor-field, div.jsoneditor-readonly, div.jsoneditor-value {
  553 + border: 1px solid transparent;
  554 + min-height: 16px;
  555 + min-width: 32px;
  556 + padding: 2px;
  557 + margin: 1px;
  558 + word-wrap: break-word;
  559 + float: left
  560 +}
  561 +
  562 +div.jsoneditor-field p, div.jsoneditor-value p {
  563 + margin: 0
  564 +}
  565 +
  566 +div.jsoneditor-value {
  567 + word-break: break-word
  568 +}
  569 +
  570 +div.jsoneditor-value.jsoneditor-empty::after {
  571 + content: "value"
  572 +}
  573 +
  574 +div.jsoneditor-value.jsoneditor-string {
  575 + color: #006000
  576 +}
  577 +
  578 +div.jsoneditor-value.jsoneditor-number {
  579 + color: #ee422e
  580 +}
  581 +
  582 +div.jsoneditor-value.jsoneditor-boolean {
  583 + color: #ff8c00
  584 +}
  585 +
  586 +div.jsoneditor-value.jsoneditor-null {
  587 + color: #004ed0
  588 +}
  589 +
  590 +div.jsoneditor-value.jsoneditor-color-value {
  591 + color: #1a1a1a
  592 +}
  593 +
  594 +div.jsoneditor-value.jsoneditor-invalid {
  595 + color: #1a1a1a
  596 +}
  597 +
  598 +div.jsoneditor-readonly {
  599 + min-width: 16px;
  600 + color: grey
  601 +}
  602 +
  603 +div.jsoneditor-empty {
  604 + border-color: #d3d3d3;
  605 + border-style: dashed;
  606 + border-radius: 2px
  607 +}
  608 +
  609 +div.jsoneditor-field.jsoneditor-empty::after {
  610 + content: "field"
  611 +}
  612 +
  613 +div.jsoneditor td {
  614 + vertical-align: top
  615 +}
  616 +
  617 +div.jsoneditor td.jsoneditor-separator {
  618 + padding: 3px 0;
  619 + vertical-align: top;
  620 + color: grey
  621 +}
  622 +
  623 +div.jsoneditor td.jsoneditor-tree {
  624 + vertical-align: top
  625 +}
  626 +
  627 +div.jsoneditor.busy pre.jsoneditor-preview {
  628 + background: #f5f5f5;
  629 + color: grey
  630 +}
  631 +
  632 +div.jsoneditor.busy div.jsoneditor-busy {
  633 + display: inherit
  634 +}
  635 +
  636 +div.jsoneditor code.jsoneditor-preview {
  637 + background: 0 0
  638 +}
  639 +
  640 +div.jsoneditor.jsoneditor-mode-preview pre.jsoneditor-preview {
  641 + width: 100%;
  642 + height: 100%;
  643 + box-sizing: border-box;
  644 + overflow: auto;
  645 + padding: 2px;
  646 + margin: 0;
  647 + white-space: pre-wrap;
  648 + word-break: break-all
  649 +}
  650 +
  651 +div.jsoneditor-default {
  652 + color: grey;
  653 + padding-left: 10px
  654 +}
  655 +
  656 +div.jsoneditor-tree {
  657 + width: 100%;
  658 + height: 100%;
  659 + position: relative;
  660 + overflow: auto;
  661 + background: #fff
  662 +}
  663 +
  664 +div.jsoneditor-tree button.jsoneditor-button {
  665 + width: 24px;
  666 + height: 24px;
  667 + padding: 0;
  668 + margin: 0;
  669 + border: none;
  670 + cursor: pointer;
  671 + background-color: transparent;
  672 + background-image: url(./img/jsoneditor-icons.svg)
  673 +}
  674 +
  675 +div.jsoneditor-tree button.jsoneditor-button:focus {
  676 + background-color: #f5f5f5;
  677 + outline: #e5e5e5 solid 1px
  678 +}
  679 +
  680 +div.jsoneditor-tree button.jsoneditor-collapsed {
  681 + background-position: 0 -48px
  682 +}
  683 +
  684 +div.jsoneditor-tree button.jsoneditor-expanded {
  685 + background-position: 0 -72px
  686 +}
  687 +
  688 +div.jsoneditor-tree button.jsoneditor-contextmenu-button {
  689 + background-position: -48px -72px
  690 +}
  691 +
  692 +div.jsoneditor-tree button.jsoneditor-invisible {
  693 + visibility: hidden;
  694 + background: 0 0
  695 +}
  696 +
  697 +div.jsoneditor-tree button.jsoneditor-dragarea {
  698 + background-image: url(./img/jsoneditor-icons.svg);
  699 + background-position: -72px -72px;
  700 + cursor: move
  701 +}
  702 +
  703 +div.jsoneditor-tree :focus {
  704 + outline: 0
  705 +}
  706 +
  707 +div.jsoneditor-tree div.jsoneditor-show-more {
  708 + display: inline-block;
  709 + padding: 3px 4px;
  710 + margin: 2px 0;
  711 + background-color: #e5e5e5;
  712 + border-radius: 3px;
  713 + color: grey;
  714 + font-family: arial, sans-serif;
  715 + font-size: 10pt
  716 +}
  717 +
  718 +div.jsoneditor-tree div.jsoneditor-show-more a {
  719 + display: inline-block;
  720 + color: grey
  721 +}
  722 +
  723 +div.jsoneditor-tree div.jsoneditor-color {
  724 + display: inline-block;
  725 + width: 12px;
  726 + height: 12px;
  727 + margin: 4px;
  728 + border: 1px solid grey;
  729 + cursor: pointer
  730 +}
  731 +
  732 +div.jsoneditor-tree div.jsoneditor-date {
  733 + background: #a1a1a1;
  734 + color: #fff;
  735 + font-family: arial, sans-serif;
  736 + border-radius: 3px;
  737 + display: inline-block;
  738 + padding: 3px;
  739 + margin: 0 3px
  740 +}
  741 +
  742 +div.jsoneditor-tree table.jsoneditor-tree {
  743 + border-collapse: collapse;
  744 + border-spacing: 0;
  745 + width: 100%
  746 +}
  747 +
  748 +div.jsoneditor-tree .jsoneditor-button.jsoneditor-schema-error {
  749 + width: 24px;
  750 + height: 24px;
  751 + padding: 0;
  752 + margin: 0 4px 0 0;
  753 + background-image: url(./img/jsoneditor-icons.svg);
  754 + background-position: -168px -48px;
  755 + background-color: transparent
  756 +}
  757 +
  758 +div.jsoneditor-outer {
  759 + position: static;
  760 + width: 100%;
  761 + height: 100%;
  762 + margin: 0;
  763 + padding: 0;
  764 + -moz-box-sizing: border-box;
  765 + -webkit-box-sizing: border-box;
  766 + box-sizing: border-box
  767 +}
  768 +
  769 +div.jsoneditor-outer.has-nav-bar {
  770 + margin-top: -26px;
  771 + padding-top: 26px
  772 +}
  773 +
  774 +div.jsoneditor-outer.has-nav-bar.has-main-menu-bar {
  775 + margin-top: -61px;
  776 + padding-top: 61px
  777 +}
  778 +
  779 +div.jsoneditor-outer.has-status-bar {
  780 + margin-bottom: -26px;
  781 + padding-bottom: 26px
  782 +}
  783 +
  784 +div.jsoneditor-outer.has-main-menu-bar {
  785 + margin-top: -35px;
  786 + padding-top: 35px
  787 +}
  788 +
  789 +div.jsoneditor-busy {
  790 + position: absolute;
  791 + top: 15%;
  792 + left: 0;
  793 + box-sizing: border-box;
  794 + width: 100%;
  795 + text-align: center;
  796 + display: none
  797 +}
  798 +
  799 +div.jsoneditor-busy span {
  800 + background-color: #ffffab;
  801 + border: 1px solid #fe0;
  802 + border-radius: 3px;
  803 + padding: 5px 15px;
  804 + box-shadow: 0 0 5px rgba(0, 0, 0, .4)
  805 +}
  806 +
  807 +div.jsoneditor-field.jsoneditor-empty::after, div.jsoneditor-value.jsoneditor-empty::after {
  808 + pointer-events: none;
  809 + color: #d3d3d3;
  810 + font-size: 8pt
  811 +}
  812 +
  813 +a.jsoneditor-value.jsoneditor-url, div.jsoneditor-value.jsoneditor-url {
  814 + color: #006000;
  815 + text-decoration: underline
  816 +}
  817 +
  818 +a.jsoneditor-value.jsoneditor-url {
  819 + display: inline-block;
  820 + padding: 2px;
  821 + margin: 2px
  822 +}
  823 +
  824 +a.jsoneditor-value.jsoneditor-url:focus, a.jsoneditor-value.jsoneditor-url:hover {
  825 + color: #ee422e
  826 +}
  827 +
  828 +div.jsoneditor-field.jsoneditor-highlight, div.jsoneditor-field[contenteditable=true]:focus, div.jsoneditor-field[contenteditable=true]:hover, div.jsoneditor-value.jsoneditor-highlight, div.jsoneditor-value[contenteditable=true]:focus, div.jsoneditor-value[contenteditable=true]:hover {
  829 + background-color: #ffffab;
  830 + border: 1px solid #fe0;
  831 + border-radius: 2px
  832 +}
  833 +
  834 +div.jsoneditor-field.jsoneditor-highlight-active, div.jsoneditor-field.jsoneditor-highlight-active:focus, div.jsoneditor-field.jsoneditor-highlight-active:hover, div.jsoneditor-value.jsoneditor-highlight-active, div.jsoneditor-value.jsoneditor-highlight-active:focus, div.jsoneditor-value.jsoneditor-highlight-active:hover {
  835 + background-color: #fe0;
  836 + border: 1px solid #ffc700;
  837 + border-radius: 2px
  838 +}
  839 +
  840 +div.jsoneditor-value.jsoneditor-array, div.jsoneditor-value.jsoneditor-object {
  841 + min-width: 16px
  842 +}
  843 +
  844 +div.jsoneditor-tree button.jsoneditor-contextmenu-button.jsoneditor-selected, div.jsoneditor-tree button.jsoneditor-contextmenu-button:focus, div.jsoneditor-tree button.jsoneditor-contextmenu-button:hover, tr.jsoneditor-selected.jsoneditor-first button.jsoneditor-contextmenu-button {
  845 + background-position: -48px -48px
  846 +}
  847 +
  848 +div.jsoneditor-tree div.jsoneditor-show-more a:focus, div.jsoneditor-tree div.jsoneditor-show-more a:hover {
  849 + color: #ee422e
  850 +}
  851 +
  852 +.ace-jsoneditor, textarea.jsoneditor-text {
  853 + min-height: 150px
  854 +}
  855 +
  856 +.ace-jsoneditor *, textarea.jsoneditor-text * {
  857 + font-family: "dejavu sans mono", "droid sans mono", consolas, monaco, "lucida console", "courier new", courier, monospace, sans-serif
  858 +}
  859 +
  860 +textarea.jsoneditor-text {
  861 + width: 100%;
  862 + height: 100%;
  863 + margin: 0;
  864 + -moz-box-sizing: border-box;
  865 + -webkit-box-sizing: border-box;
  866 + box-sizing: border-box;
  867 + outline-width: 0;
  868 + border: none;
  869 + background-color: #fff;
  870 + resize: none
  871 +}
  872 +
  873 +tr.jsoneditor-highlight, tr.jsoneditor-selected {
  874 + background-color: #d3d3d3
  875 +}
  876 +
  877 +tr.jsoneditor-selected button.jsoneditor-contextmenu-button, tr.jsoneditor-selected button.jsoneditor-dragarea {
  878 + visibility: hidden
  879 +}
  880 +
  881 +tr.jsoneditor-selected.jsoneditor-first button.jsoneditor-contextmenu-button, tr.jsoneditor-selected.jsoneditor-first button.jsoneditor-dragarea {
  882 + visibility: visible
  883 +}
  884 +
  885 +div.jsoneditor-tree button.jsoneditor-dragarea:focus, div.jsoneditor-tree button.jsoneditor-dragarea:hover, tr.jsoneditor-selected.jsoneditor-first button.jsoneditor-dragarea {
  886 + background-position: -72px -48px
  887 +}
  888 +
  889 +div.jsoneditor td, div.jsoneditor th, div.jsoneditor tr {
  890 + padding: 0;
  891 + margin: 0
  892 +}
  893 +
  894 +.jsoneditor-popover, .jsoneditor-schema-error, div.jsoneditor td, div.jsoneditor textarea, div.jsoneditor th, div.jsoneditor-field, div.jsoneditor-value, pre.jsoneditor-preview {
  895 + font-family: "dejavu sans mono", "droid sans mono", consolas, monaco, "lucida console", "courier new", courier, monospace, sans-serif;
  896 + font-size: 10pt;
  897 + color: #1a1a1a
  898 +}
  899 +
  900 +.jsoneditor-schema-error {
  901 + cursor: default;
  902 + display: inline-block;
  903 + height: 24px;
  904 + line-height: 24px;
  905 + position: relative;
  906 + text-align: center;
  907 + width: 24px
  908 +}
  909 +
  910 +.jsoneditor-popover {
  911 + background-color: #4c4c4c;
  912 + border-radius: 3px;
  913 + box-shadow: 0 0 5px rgba(0, 0, 0, .4);
  914 + color: #fff;
  915 + padding: 7px 10px;
  916 + position: absolute;
  917 + cursor: auto;
  918 + width: 200px
  919 +}
  920 +
  921 +.jsoneditor-popover.jsoneditor-above {
  922 + bottom: 32px;
  923 + left: -98px
  924 +}
  925 +
  926 +.jsoneditor-popover.jsoneditor-above:before {
  927 + border-top: 7px solid #4c4c4c;
  928 + bottom: -7px
  929 +}
  930 +
  931 +.jsoneditor-popover.jsoneditor-below {
  932 + top: 32px;
  933 + left: -98px
  934 +}
  935 +
  936 +.jsoneditor-popover.jsoneditor-below:before {
  937 + border-bottom: 7px solid #4c4c4c;
  938 + top: -7px
  939 +}
  940 +
  941 +.jsoneditor-popover.jsoneditor-left {
  942 + top: -7px;
  943 + right: 32px
  944 +}
  945 +
  946 +.jsoneditor-popover.jsoneditor-left:before {
  947 + border-left: 7px solid #4c4c4c;
  948 + border-top: 7px solid transparent;
  949 + border-bottom: 7px solid transparent;
  950 + content: "";
  951 + top: 19px;
  952 + right: -14px;
  953 + left: inherit;
  954 + margin-left: inherit;
  955 + margin-top: -7px;
  956 + position: absolute
  957 +}
  958 +
  959 +.jsoneditor-popover.jsoneditor-right {
  960 + top: -7px;
  961 + left: 32px
  962 +}
  963 +
  964 +.jsoneditor-popover.jsoneditor-right:before {
  965 + border-right: 7px solid #4c4c4c;
  966 + border-top: 7px solid transparent;
  967 + border-bottom: 7px solid transparent;
  968 + content: "";
  969 + top: 19px;
  970 + left: -14px;
  971 + margin-left: inherit;
  972 + margin-top: -7px;
  973 + position: absolute
  974 +}
  975 +
  976 +.jsoneditor-popover:before {
  977 + border-right: 7px solid transparent;
  978 + border-left: 7px solid transparent;
  979 + content: "";
  980 + display: block;
  981 + left: 50%;
  982 + margin-left: -7px;
  983 + position: absolute
  984 +}
  985 +
  986 +.jsoneditor-text-errors tr.jump-to-line:hover {
  987 + text-decoration: underline;
  988 + cursor: pointer
  989 +}
  990 +
  991 +.jsoneditor-schema-error:focus .jsoneditor-popover, .jsoneditor-schema-error:hover .jsoneditor-popover {
  992 + display: block;
  993 + animation: fade-in .3s linear 1, move-up .3s linear 1
  994 +}
  995 +
  996 +@keyframes fade-in {
  997 + from {
  998 + opacity: 0
  999 + }
  1000 + to {
  1001 + opacity: 1
  1002 + }
  1003 +}
  1004 +
  1005 +.jsoneditor .jsoneditor-validation-errors-container {
  1006 + max-height: 130px;
  1007 + overflow-y: auto
  1008 +}
  1009 +
  1010 +.jsoneditor .jsoneditor-validation-errors {
  1011 + width: 100%;
  1012 + overflow: hidden
  1013 +}
  1014 +
  1015 +.jsoneditor .jsoneditor-additional-errors {
  1016 + position: absolute;
  1017 + margin: auto;
  1018 + bottom: 31px;
  1019 + left: calc(50% - 92px);
  1020 + color: grey;
  1021 + background-color: #ebebeb;
  1022 + padding: 7px 15px;
  1023 + border-radius: 8px
  1024 +}
  1025 +
  1026 +.jsoneditor .jsoneditor-additional-errors.visible {
  1027 + visibility: visible;
  1028 + opacity: 1;
  1029 + transition: opacity 2s linear
  1030 +}
  1031 +
  1032 +.jsoneditor .jsoneditor-additional-errors.hidden {
  1033 + visibility: hidden;
  1034 + opacity: 0;
  1035 + transition: visibility 0s 2s, opacity 2s linear
  1036 +}
  1037 +
  1038 +.jsoneditor .jsoneditor-text-errors {
  1039 + width: 100%;
  1040 + border-collapse: collapse;
  1041 + border-top: 1px solid #ffc700
  1042 +}
  1043 +
  1044 +.jsoneditor .jsoneditor-text-errors td {
  1045 + padding: 3px 6px;
  1046 + vertical-align: middle
  1047 +}
  1048 +
  1049 +.jsoneditor .jsoneditor-text-errors td pre {
  1050 + margin: 0;
  1051 + white-space: pre-wrap
  1052 +}
  1053 +
  1054 +.jsoneditor .jsoneditor-text-errors tr {
  1055 + background-color: #ffffab
  1056 +}
  1057 +
  1058 +.jsoneditor .jsoneditor-text-errors tr.parse-error {
  1059 + background-color: #ee2e2e70
  1060 +}
  1061 +
  1062 +.jsoneditor-text-errors .jsoneditor-schema-error {
  1063 + border: none;
  1064 + width: 24px;
  1065 + height: 24px;
  1066 + padding: 0;
  1067 + margin: 0 4px 0 0;
  1068 + cursor: pointer
  1069 +}
  1070 +
  1071 +.jsoneditor-text-errors tr .jsoneditor-schema-error {
  1072 + background-image: url(./img/jsoneditor-icons.svg);
  1073 + background-position: -168px -48px;
  1074 + background-color: transparent
  1075 +}
  1076 +
  1077 +.jsoneditor-text-errors tr.parse-error .jsoneditor-schema-error {
  1078 + background-image: url(./img/jsoneditor-icons.svg);
  1079 + background-position: -25px 0;
  1080 + background-color: transparent
  1081 +}
  1082 +
  1083 +.jsoneditor-anchor {
  1084 + cursor: pointer
  1085 +}
  1086 +
  1087 +.jsoneditor-anchor .picker_wrapper.popup.popup_bottom {
  1088 + top: 28px;
  1089 + left: -10px
  1090 +}
  1091 +
  1092 +.fadein {
  1093 + -webkit-animation: fadein .3s;
  1094 + animation: fadein .3s;
  1095 + -moz-animation: fadein .3s;
  1096 + -o-animation: fadein .3s
  1097 +}
  1098 +
  1099 +@keyframes fadein {
  1100 + 0% {
  1101 + opacity: 0
  1102 + }
  1103 + 100% {
  1104 + opacity: 1
  1105 + }
  1106 +}
  1107 +
  1108 +.jsoneditor-modal input[type=search].selectr-input {
  1109 + border: 1px solid #d3d3d3;
  1110 + width: calc(100% - 4px);
  1111 + margin: 2px;
  1112 + padding: 4px;
  1113 + box-sizing: border-box
  1114 +}
  1115 +
  1116 +.jsoneditor-modal button.selectr-input-clear {
  1117 + right: 8px
  1118 +}
  1119 +
  1120 +.jsoneditor-menu {
  1121 + width: 100%;
  1122 + height: 35px;
  1123 + padding: 2px;
  1124 + margin: 0;
  1125 + -moz-box-sizing: border-box;
  1126 + -webkit-box-sizing: border-box;
  1127 + box-sizing: border-box;
  1128 + color: #fff;
  1129 + background-color: #3883fa;
  1130 + border-bottom: 1px solid #3883fa
  1131 +}
  1132 +
  1133 +.jsoneditor-menu > .jsoneditor-modes > button, .jsoneditor-menu > button {
  1134 + width: 26px;
  1135 + height: 26px;
  1136 + margin: 2px;
  1137 + padding: 0;
  1138 + border-radius: 2px;
  1139 + border: 1px solid transparent;
  1140 + background-color: transparent;
  1141 + background-image: url(./img/jsoneditor-icons.svg);
  1142 + color: #fff;
  1143 + opacity: .8;
  1144 + font-family: arial, sans-serif;
  1145 + font-size: 10pt;
  1146 + float: left
  1147 +}
  1148 +
  1149 +.jsoneditor-menu > .jsoneditor-modes > button:hover, .jsoneditor-menu > button:hover {
  1150 + background-color: rgba(255, 255, 255, .2);
  1151 + border: 1px solid rgba(255, 255, 255, .4)
  1152 +}
  1153 +
  1154 +.jsoneditor-menu > .jsoneditor-modes > button:active, .jsoneditor-menu > .jsoneditor-modes > button:focus, .jsoneditor-menu > button:active, .jsoneditor-menu > button:focus {
  1155 + background-color: rgba(255, 255, 255, .3)
  1156 +}
  1157 +
  1158 +.jsoneditor-menu > .jsoneditor-modes > button:disabled, .jsoneditor-menu > button:disabled {
  1159 + opacity: .5;
  1160 + background-color: transparent;
  1161 + border: none
  1162 +}
  1163 +
  1164 +.jsoneditor-menu > button.jsoneditor-collapse-all {
  1165 + background-position: 0 -96px
  1166 +}
  1167 +
  1168 +.jsoneditor-menu > button.jsoneditor-expand-all {
  1169 + background-position: 0 -120px
  1170 +}
  1171 +
  1172 +.jsoneditor-menu > button.jsoneditor-sort {
  1173 + background-position: -120px -96px
  1174 +}
  1175 +
  1176 +.jsoneditor-menu > button.jsoneditor-transform {
  1177 + background-position: -144px -96px
  1178 +}
  1179 +
  1180 +.jsoneditor.jsoneditor-mode-form > .jsoneditor-menu > button.jsoneditor-sort, .jsoneditor.jsoneditor-mode-form > .jsoneditor-menu > button.jsoneditor-transform, .jsoneditor.jsoneditor-mode-view > .jsoneditor-menu > button.jsoneditor-sort, .jsoneditor.jsoneditor-mode-view > .jsoneditor-menu > button.jsoneditor-transform {
  1181 + display: none
  1182 +}
  1183 +
  1184 +.jsoneditor-menu > button.jsoneditor-undo {
  1185 + background-position: -24px -96px
  1186 +}
  1187 +
  1188 +.jsoneditor-menu > button.jsoneditor-undo:disabled {
  1189 + background-position: -24px -120px
  1190 +}
  1191 +
  1192 +.jsoneditor-menu > button.jsoneditor-redo {
  1193 + background-position: -48px -96px
  1194 +}
  1195 +
  1196 +.jsoneditor-menu > button.jsoneditor-redo:disabled {
  1197 + background-position: -48px -120px
  1198 +}
  1199 +
  1200 +.jsoneditor-menu > button.jsoneditor-compact {
  1201 + background-position: -72px -96px
  1202 +}
  1203 +
  1204 +.jsoneditor-menu > button.jsoneditor-format {
  1205 + background-position: -72px -120px
  1206 +}
  1207 +
  1208 +.jsoneditor-menu > button.jsoneditor-repair {
  1209 + background-position: -96px -96px
  1210 +}
  1211 +
  1212 +.jsoneditor-menu > .jsoneditor-modes {
  1213 + display: inline-block;
  1214 + float: left
  1215 +}
  1216 +
  1217 +.jsoneditor-menu > .jsoneditor-modes > button {
  1218 + background-image: none;
  1219 + width: auto;
  1220 + padding-left: 6px;
  1221 + padding-right: 6px
  1222 +}
  1223 +
  1224 +.jsoneditor-menu > .jsoneditor-modes > button.jsoneditor-separator, .jsoneditor-menu > button.jsoneditor-separator {
  1225 + margin-left: 10px
  1226 +}
  1227 +
  1228 +.jsoneditor-menu a {
  1229 + font-family: arial, sans-serif;
  1230 + font-size: 10pt;
  1231 + color: #fff;
  1232 + opacity: .8;
  1233 + vertical-align: middle
  1234 +}
  1235 +
  1236 +.jsoneditor-menu a:hover {
  1237 + opacity: 1
  1238 +}
  1239 +
  1240 +.jsoneditor-menu a.jsoneditor-poweredBy {
  1241 + font-size: 8pt;
  1242 + position: absolute;
  1243 + right: 0;
  1244 + top: 0;
  1245 + padding: 10px
  1246 +}
  1247 +
  1248 +.jsoneditor-navigation-bar {
  1249 + width: 100%;
  1250 + height: 26px;
  1251 + line-height: 26px;
  1252 + padding: 0;
  1253 + margin: 0;
  1254 + border-bottom: 1px solid #d3d3d3;
  1255 + -moz-box-sizing: border-box;
  1256 + -webkit-box-sizing: border-box;
  1257 + box-sizing: border-box;
  1258 + color: grey;
  1259 + background-color: #ebebeb;
  1260 + overflow: hidden;
  1261 + font-family: arial, sans-serif;
  1262 + font-size: 10pt
  1263 +}
  1264 +
  1265 +.jsoneditor-search {
  1266 + font-family: arial, sans-serif;
  1267 + position: absolute;
  1268 + right: 4px;
  1269 + top: 4px;
  1270 + border-collapse: collapse;
  1271 + border-spacing: 0;
  1272 + display: flex
  1273 +}
  1274 +
  1275 +.jsoneditor-search input {
  1276 + color: #1a1a1a;
  1277 + width: 120px;
  1278 + border: none;
  1279 + outline: 0;
  1280 + margin: 1px;
  1281 + line-height: 20px;
  1282 + font-family: arial, sans-serif
  1283 +}
  1284 +
  1285 +.jsoneditor-search button {
  1286 + width: 16px;
  1287 + height: 24px;
  1288 + padding: 0;
  1289 + margin: 0;
  1290 + border: none;
  1291 + background: url(./img/jsoneditor-icons.svg);
  1292 + vertical-align: top
  1293 +}
  1294 +
  1295 +.jsoneditor-search button:hover {
  1296 + background-color: transparent
  1297 +}
  1298 +
  1299 +.jsoneditor-search button.jsoneditor-refresh {
  1300 + width: 18px;
  1301 + background-position: -99px -73px
  1302 +}
  1303 +
  1304 +.jsoneditor-search button.jsoneditor-next {
  1305 + cursor: pointer;
  1306 + background-position: -124px -73px
  1307 +}
  1308 +
  1309 +.jsoneditor-search button.jsoneditor-next:hover {
  1310 + background-position: -124px -49px
  1311 +}
  1312 +
  1313 +.jsoneditor-search button.jsoneditor-previous {
  1314 + cursor: pointer;
  1315 + background-position: -148px -73px;
  1316 + margin-right: 2px
  1317 +}
  1318 +
  1319 +.jsoneditor-search button.jsoneditor-previous:hover {
  1320 + background-position: -148px -49px
  1321 +}
  1322 +
  1323 +.jsoneditor-results {
  1324 + font-family: arial, sans-serif;
  1325 + color: #fff;
  1326 + padding-right: 5px;
  1327 + line-height: 26px
  1328 +}
  1329 +
  1330 +.jsoneditor-frame {
  1331 + border: 1px solid transparent;
  1332 + background-color: #fff;
  1333 + padding: 0 2px;
  1334 + margin: 0
  1335 +}
  1336 +
  1337 +.jsoneditor-statusbar {
  1338 + line-height: 26px;
  1339 + height: 26px;
  1340 + color: grey;
  1341 + background-color: #ebebeb;
  1342 + border-top: 1px solid #d3d3d3;
  1343 + -moz-box-sizing: border-box;
  1344 + -webkit-box-sizing: border-box;
  1345 + box-sizing: border-box;
  1346 + font-size: 10pt
  1347 +}
  1348 +
  1349 +.jsoneditor-statusbar > .jsoneditor-curserinfo-val {
  1350 + margin-right: 12px
  1351 +}
  1352 +
  1353 +.jsoneditor-statusbar > .jsoneditor-curserinfo-count {
  1354 + margin-left: 4px
  1355 +}
  1356 +
  1357 +.jsoneditor-statusbar > .jsoneditor-validation-error-icon {
  1358 + float: right;
  1359 + width: 24px;
  1360 + height: 24px;
  1361 + padding: 0;
  1362 + margin-top: 1px;
  1363 + background-image: url(./img/jsoneditor-icons.svg);
  1364 + background-position: -168px -48px;
  1365 + cursor: pointer
  1366 +}
  1367 +
  1368 +.jsoneditor-statusbar > .jsoneditor-validation-error-count {
  1369 + float: right;
  1370 + margin: 0 4px 0 0;
  1371 + cursor: pointer
  1372 +}
  1373 +
  1374 +.jsoneditor-statusbar > .jsoneditor-parse-error-icon {
  1375 + float: right;
  1376 + width: 24px;
  1377 + height: 24px;
  1378 + padding: 0;
  1379 + margin: 1px;
  1380 + background-image: url(./img/jsoneditor-icons.svg);
  1381 + background-position: -25px 0
  1382 +}
  1383 +
  1384 +.jsoneditor-statusbar .jsoneditor-array-info a {
  1385 + color: inherit
  1386 +}
  1387 +
  1388 +div.jsoneditor-statusbar > .jsoneditor-curserinfo-label, div.jsoneditor-statusbar > .jsoneditor-size-info {
  1389 + margin: 0 4px
  1390 +}
  1391 +
  1392 +.jsoneditor-treepath {
  1393 + padding: 0 5px;
  1394 + overflow: hidden;
  1395 + white-space: nowrap;
  1396 + outline: 0
  1397 +}
  1398 +
  1399 +.jsoneditor-treepath.show-all {
  1400 + word-wrap: break-word;
  1401 + white-space: normal;
  1402 + position: absolute;
  1403 + background-color: #ebebeb;
  1404 + z-index: 1;
  1405 + box-shadow: 2px 2px 12px rgba(128, 128, 128, .3)
  1406 +}
  1407 +
  1408 +.jsoneditor-treepath.show-all span.jsoneditor-treepath-show-all-btn {
  1409 + display: none
  1410 +}
  1411 +
  1412 +.jsoneditor-treepath div.jsoneditor-contextmenu-root {
  1413 + position: absolute;
  1414 + left: 0
  1415 +}
  1416 +
  1417 +.jsoneditor-treepath .jsoneditor-treepath-show-all-btn {
  1418 + position: absolute;
  1419 + background-color: #ebebeb;
  1420 + left: 0;
  1421 + height: 20px;
  1422 + padding: 0 3px;
  1423 + cursor: pointer
  1424 +}
  1425 +
  1426 +.jsoneditor-treepath .jsoneditor-treepath-element {
  1427 + margin: 1px;
  1428 + font-family: arial, sans-serif;
  1429 + font-size: 10pt
  1430 +}
  1431 +
  1432 +.jsoneditor-treepath .jsoneditor-treepath-seperator {
  1433 + margin: 2px;
  1434 + font-size: 9pt;
  1435 + font-family: arial, sans-serif
  1436 +}
  1437 +
  1438 +.jsoneditor-treepath span.jsoneditor-treepath-element:hover, .jsoneditor-treepath span.jsoneditor-treepath-seperator:hover {
  1439 + cursor: pointer;
  1440 + text-decoration: underline
  1441 +}
  1442 +
  1443 +/*!
  1444 + * Selectr 2.4.0
  1445 + * https://github.com/Mobius1/Selectr
  1446 + *
  1447 + * Released under the MIT license
  1448 + */
  1449 +.selectr-container {
  1450 + position: relative
  1451 +}
  1452 +
  1453 +.selectr-container li {
  1454 + list-style: none
  1455 +}
  1456 +
  1457 +.selectr-hidden {
  1458 + position: absolute;
  1459 + overflow: hidden;
  1460 + clip: rect(0, 0, 0, 0);
  1461 + width: 1px;
  1462 + height: 1px;
  1463 + margin: -1px;
  1464 + padding: 0;
  1465 + border: 0 none
  1466 +}
  1467 +
  1468 +.selectr-visible {
  1469 + position: absolute;
  1470 + left: 0;
  1471 + top: 0;
  1472 + width: 100%;
  1473 + height: 100%;
  1474 + opacity: 0;
  1475 + z-index: 11
  1476 +}
  1477 +
  1478 +.selectr-desktop.multiple .selectr-visible {
  1479 + display: none
  1480 +}
  1481 +
  1482 +.selectr-desktop.multiple.native-open .selectr-visible {
  1483 + top: 100%;
  1484 + min-height: 200px !important;
  1485 + height: auto;
  1486 + opacity: 1;
  1487 + display: block
  1488 +}
  1489 +
  1490 +.selectr-container.multiple.selectr-mobile .selectr-selected {
  1491 + z-index: 0
  1492 +}
  1493 +
  1494 +.selectr-selected {
  1495 + position: relative;
  1496 + z-index: 1;
  1497 + box-sizing: border-box;
  1498 + width: 100%;
  1499 + padding: 7px 28px 7px 14px;
  1500 + cursor: pointer;
  1501 + border: 1px solid #999;
  1502 + border-radius: 3px;
  1503 + background-color: #fff
  1504 +}
  1505 +
  1506 +.selectr-selected::before {
  1507 + position: absolute;
  1508 + top: 50%;
  1509 + right: 10px;
  1510 + width: 0;
  1511 + height: 0;
  1512 + content: "";
  1513 + -o-transform: rotate(0) translate3d(0, -50%, 0);
  1514 + -ms-transform: rotate(0) translate3d(0, -50%, 0);
  1515 + -moz-transform: rotate(0) translate3d(0, -50%, 0);
  1516 + -webkit-transform: rotate(0) translate3d(0, -50%, 0);
  1517 + transform: rotate(0) translate3d(0, -50%, 0);
  1518 + border-width: 4px 4px 0 4px;
  1519 + border-style: solid;
  1520 + border-color: #6c7a86 transparent transparent
  1521 +}
  1522 +
  1523 +.selectr-container.native-open .selectr-selected::before, .selectr-container.open .selectr-selected::before {
  1524 + border-width: 0 4px 4px 4px;
  1525 + border-style: solid;
  1526 + border-color: transparent transparent #6c7a86
  1527 +}
  1528 +
  1529 +.selectr-label {
  1530 + display: none;
  1531 + overflow: hidden;
  1532 + width: 100%;
  1533 + white-space: nowrap;
  1534 + text-overflow: ellipsis
  1535 +}
  1536 +
  1537 +.selectr-placeholder {
  1538 + color: #6c7a86
  1539 +}
  1540 +
  1541 +.selectr-tags {
  1542 + margin: 0;
  1543 + padding: 0;
  1544 + white-space: normal
  1545 +}
  1546 +
  1547 +.has-selected .selectr-tags {
  1548 + margin: 0 0 -2px
  1549 +}
  1550 +
  1551 +.selectr-tag {
  1552 + list-style: none;
  1553 + position: relative;
  1554 + float: left;
  1555 + padding: 2px 25px 2px 8px;
  1556 + margin: 0 2px 2px 0;
  1557 + cursor: default;
  1558 + color: #fff;
  1559 + border: medium none;
  1560 + border-radius: 10px;
  1561 + background: #acb7bf none repeat scroll 0 0
  1562 +}
  1563 +
  1564 +.selectr-container.multiple.has-selected .selectr-selected {
  1565 + padding: 5px 28px 5px 5px
  1566 +}
  1567 +
  1568 +.selectr-options-container {
  1569 + position: absolute;
  1570 + z-index: 10000;
  1571 + top: calc(100% - 1px);
  1572 + left: 0;
  1573 + display: none;
  1574 + box-sizing: border-box;
  1575 + width: 100%;
  1576 + border-width: 0 1px 1px;
  1577 + border-style: solid;
  1578 + border-color: transparent #999 #999;
  1579 + border-radius: 0 0 3px 3px;
  1580 + background-color: #fff
  1581 +}
  1582 +
  1583 +.selectr-container.open .selectr-options-container {
  1584 + display: block
  1585 +}
  1586 +
  1587 +.selectr-input-container {
  1588 + position: relative;
  1589 + display: none
  1590 +}
  1591 +
  1592 +.selectr-clear, .selectr-input-clear, .selectr-tag-remove {
  1593 + position: absolute;
  1594 + top: 50%;
  1595 + right: 22px;
  1596 + width: 20px;
  1597 + height: 20px;
  1598 + padding: 0;
  1599 + cursor: pointer;
  1600 + -o-transform: translate3d(0, -50%, 0);
  1601 + -ms-transform: translate3d(0, -50%, 0);
  1602 + -moz-transform: translate3d(0, -50%, 0);
  1603 + -webkit-transform: translate3d(0, -50%, 0);
  1604 + transform: translate3d(0, -50%, 0);
  1605 + border: medium none;
  1606 + background-color: transparent;
  1607 + z-index: 11
  1608 +}
  1609 +
  1610 +.selectr-clear, .selectr-input-clear {
  1611 + display: none
  1612 +}
  1613 +
  1614 +.selectr-container.has-selected .selectr-clear, .selectr-input-container.active .selectr-input-clear {
  1615 + display: block
  1616 +}
  1617 +
  1618 +.selectr-selected .selectr-tag-remove {
  1619 + right: 2px
  1620 +}
  1621 +
  1622 +.selectr-clear::after, .selectr-clear::before, .selectr-input-clear::after, .selectr-input-clear::before, .selectr-tag-remove::after, .selectr-tag-remove::before {
  1623 + position: absolute;
  1624 + top: 5px;
  1625 + left: 9px;
  1626 + width: 2px;
  1627 + height: 10px;
  1628 + content: " ";
  1629 + background-color: #6c7a86
  1630 +}
  1631 +
  1632 +.selectr-tag-remove::after, .selectr-tag-remove::before {
  1633 + top: 4px;
  1634 + width: 3px;
  1635 + height: 12px;
  1636 + background-color: #fff
  1637 +}
  1638 +
  1639 +.selectr-clear:before, .selectr-input-clear::before, .selectr-tag-remove::before {
  1640 + -o-transform: rotate(45deg);
  1641 + -ms-transform: rotate(45deg);
  1642 + -moz-transform: rotate(45deg);
  1643 + -webkit-transform: rotate(45deg);
  1644 + transform: rotate(45deg)
  1645 +}
  1646 +
  1647 +.selectr-clear:after, .selectr-input-clear::after, .selectr-tag-remove::after {
  1648 + -o-transform: rotate(-45deg);
  1649 + -ms-transform: rotate(-45deg);
  1650 + -moz-transform: rotate(-45deg);
  1651 + -webkit-transform: rotate(-45deg);
  1652 + transform: rotate(-45deg)
  1653 +}
  1654 +
  1655 +.selectr-input-container.active, .selectr-input-container.active .selectr-clear {
  1656 + display: block
  1657 +}
  1658 +
  1659 +.selectr-input {
  1660 + top: 5px;
  1661 + left: 5px;
  1662 + box-sizing: border-box;
  1663 + width: calc(100% - 30px);
  1664 + margin: 10px 15px;
  1665 + padding: 7px 30px 7px 9px;
  1666 + border: 1px solid #999;
  1667 + border-radius: 3px
  1668 +}
  1669 +
  1670 +.selectr-notice {
  1671 + display: none;
  1672 + box-sizing: border-box;
  1673 + width: 100%;
  1674 + padding: 8px 16px;
  1675 + border-top: 1px solid #999;
  1676 + border-radius: 0 0 3px 3px;
  1677 + background-color: #fff
  1678 +}
  1679 +
  1680 +.selectr-container.notice .selectr-notice {
  1681 + display: block
  1682 +}
  1683 +
  1684 +.selectr-container.notice .selectr-selected {
  1685 + border-radius: 3px 3px 0 0
  1686 +}
  1687 +
  1688 +.selectr-options {
  1689 + position: relative;
  1690 + top: calc(100% + 2px);
  1691 + display: none;
  1692 + overflow-x: auto;
  1693 + overflow-y: scroll;
  1694 + max-height: 200px;
  1695 + margin: 0;
  1696 + padding: 0
  1697 +}
  1698 +
  1699 +.selectr-container.notice .selectr-options-container, .selectr-container.open .selectr-input-container, .selectr-container.open .selectr-options {
  1700 + display: block
  1701 +}
  1702 +
  1703 +.selectr-option {
  1704 + position: relative;
  1705 + display: block;
  1706 + padding: 5px 20px;
  1707 + list-style: outside none none;
  1708 + cursor: pointer;
  1709 + font-weight: 400
  1710 +}
  1711 +
  1712 +.selectr-options.optgroups > .selectr-option {
  1713 + padding-left: 25px
  1714 +}
  1715 +
  1716 +.selectr-optgroup {
  1717 + font-weight: 700;
  1718 + padding: 0
  1719 +}
  1720 +
  1721 +.selectr-optgroup--label {
  1722 + font-weight: 700;
  1723 + margin-top: 10px;
  1724 + padding: 5px 15px
  1725 +}
  1726 +
  1727 +.selectr-match {
  1728 + text-decoration: underline
  1729 +}
  1730 +
  1731 +.selectr-option.selected {
  1732 + background-color: #ddd
  1733 +}
  1734 +
  1735 +.selectr-option.active {
  1736 + color: #fff;
  1737 + background-color: #5897fb
  1738 +}
  1739 +
  1740 +.selectr-option.disabled {
  1741 + opacity: .4
  1742 +}
  1743 +
  1744 +.selectr-option.excluded {
  1745 + display: none
  1746 +}
  1747 +
  1748 +.selectr-container.open .selectr-selected {
  1749 + border-color: #999 #999 transparent #999;
  1750 + border-radius: 3px 3px 0 0
  1751 +}
  1752 +
  1753 +.selectr-container.open .selectr-selected::after {
  1754 + -o-transform: rotate(180deg) translate3d(0, 50%, 0);
  1755 + -ms-transform: rotate(180deg) translate3d(0, 50%, 0);
  1756 + -moz-transform: rotate(180deg) translate3d(0, 50%, 0);
  1757 + -webkit-transform: rotate(180deg) translate3d(0, 50%, 0);
  1758 + transform: rotate(180deg) translate3d(0, 50%, 0)
  1759 +}
  1760 +
  1761 +.selectr-disabled {
  1762 + opacity: .6
  1763 +}
  1764 +
  1765 +.has-selected .selectr-placeholder, .selectr-empty {
  1766 + display: none
  1767 +}
  1768 +
  1769 +.has-selected .selectr-label {
  1770 + display: block
  1771 +}
  1772 +
  1773 +.taggable .selectr-selected {
  1774 + padding: 4px 28px 4px 4px
  1775 +}
  1776 +
  1777 +.taggable .selectr-selected::after {
  1778 + display: table;
  1779 + content: " ";
  1780 + clear: both
  1781 +}
  1782 +
  1783 +.taggable .selectr-label {
  1784 + width: auto
  1785 +}
  1786 +
  1787 +.taggable .selectr-tags {
  1788 + float: left;
  1789 + display: block
  1790 +}
  1791 +
  1792 +.taggable .selectr-placeholder {
  1793 + display: none
  1794 +}
  1795 +
  1796 +.input-tag {
  1797 + float: left;
  1798 + min-width: 90px;
  1799 + width: auto
  1800 +}
  1801 +
  1802 +.selectr-tag-input {
  1803 + border: medium none;
  1804 + padding: 3px 10px;
  1805 + width: 100%;
  1806 + font-family: inherit;
  1807 + font-weight: inherit;
  1808 + font-size: inherit
  1809 +}
  1810 +
  1811 +.selectr-input-container.loading::after {
  1812 + position: absolute;
  1813 + top: 50%;
  1814 + right: 20px;
  1815 + width: 20px;
  1816 + height: 20px;
  1817 + content: "";
  1818 + -o-transform: translate3d(0, -50%, 0);
  1819 + -ms-transform: translate3d(0, -50%, 0);
  1820 + -moz-transform: translate3d(0, -50%, 0);
  1821 + -webkit-transform: translate3d(0, -50%, 0);
  1822 + transform: translate3d(0, -50%, 0);
  1823 + -o-transform-origin: 50% 0 0;
  1824 + -ms-transform-origin: 50% 0 0;
  1825 + -moz-transform-origin: 50% 0 0;
  1826 + -webkit-transform-origin: 50% 0 0;
  1827 + transform-origin: 50% 0 0;
  1828 + -moz-animation: .5s linear 0s normal forwards infinite running selectr-spin;
  1829 + -webkit-animation: .5s linear 0s normal forwards infinite running selectr-spin;
  1830 + animation: .5s linear 0s normal forwards infinite running selectr-spin;
  1831 + border-width: 3px;
  1832 + border-style: solid;
  1833 + border-color: #aaa #ddd #ddd;
  1834 + border-radius: 50%
  1835 +}
  1836 +
  1837 +@-webkit-keyframes selectr-spin {
  1838 + 0% {
  1839 + -webkit-transform: rotate(0) translate3d(0, -50%, 0);
  1840 + transform: rotate(0) translate3d(0, -50%, 0)
  1841 + }
  1842 + 100% {
  1843 + -webkit-transform: rotate(360deg) translate3d(0, -50%, 0);
  1844 + transform: rotate(360deg) translate3d(0, -50%, 0)
  1845 + }
  1846 +}
  1847 +
  1848 +@keyframes selectr-spin {
  1849 + 0% {
  1850 + -webkit-transform: rotate(0) translate3d(0, -50%, 0);
  1851 + transform: rotate(0) translate3d(0, -50%, 0)
  1852 + }
  1853 + 100% {
  1854 + -webkit-transform: rotate(360deg) translate3d(0, -50%, 0);
  1855 + transform: rotate(360deg) translate3d(0, -50%, 0)
  1856 + }
  1857 +}
  1858 +
  1859 +.selectr-container.open.inverted .selectr-selected {
  1860 + border-color: transparent #999 #999;
  1861 + border-radius: 0 0 3px 3px
  1862 +}
  1863 +
  1864 +.selectr-container.inverted .selectr-options-container {
  1865 + border-width: 1px 1px 0;
  1866 + border-color: #999 #999 transparent;
  1867 + border-radius: 3px 3px 0 0;
  1868 + background-color: #fff
  1869 +}
  1870 +
  1871 +.selectr-container.inverted .selectr-options-container {
  1872 + top: auto;
  1873 + bottom: calc(100% - 1px)
  1874 +}
  1875 +
  1876 +.selectr-container ::-webkit-input-placeholder {
  1877 + color: #6c7a86;
  1878 + opacity: 1
  1879 +}
  1880 +
  1881 +.selectr-container ::-moz-placeholder {
  1882 + color: #6c7a86;
  1883 + opacity: 1
  1884 +}
  1885 +
  1886 +.selectr-container :-ms-input-placeholder {
  1887 + color: #6c7a86;
  1888 + opacity: 1
  1889 +}
  1890 +
  1891 +.selectr-container ::placeholder {
  1892 + color: #6c7a86;
  1893 + opacity: 1
  1894 +}
此 diff 太大无法显示。
@@ -94,6 +94,12 @@ return [ @@ -94,6 +94,12 @@ return [
94 // 附件预览 94 // 附件预览
95 ,'show.attachment.fob' => [\Controller\Attachment::class,'show'] 95 ,'show.attachment.fob' => [\Controller\Attachment::class,'show']
96 96
  97 + // es
  98 + ,'kibana' => [\Controller\Kibana::class,'index']
  99 + ,'kibana.result' => [\Controller\Kibana::class,'result']
  100 +
  101 +
  102 +
97 ]; 103 ];
98 104
99 105
  1 +<template>
  2 + <div class="main">
  3 + <div id="edit">
  4 +
  5 + </div>
  6 + <div id="result">
  7 +
  8 + </div>
  9 + <el-button class="submit" @click="submit" :loading="loading">提交</el-button>
  10 + </div>
  11 +</template>
  12 +
  13 +<script>
  14 +@import("/static/css/jsoneditor.min.css")
  15 +@import("/static/js/jsoneditor.min.js")
  16 +export default {
  17 + name: "kibana",
  18 + data() {
  19 + return {
  20 + loading:false,
  21 + editor: null,
  22 + result: null
  23 + }
  24 + },
  25 + created() {},
  26 + methods: {
  27 + submit(){
  28 + const data = {
  29 + json:this.editor.get()
  30 + };
  31 + console.log(data)
  32 + this.loading = true;
  33 + ajax().post('/kibana.result',data).then(res=>{
  34 + console.log(res)
  35 + this.loading = false;
  36 + this.result.set(res.data);
  37 + })
  38 + }
  39 + },
  40 + mounted() {
  41 +
  42 + this.editor = new JSONEditor(document.getElementById("edit"), {
  43 + mode:"code",
  44 + enableSort: false,
  45 + enableTransform: false,
  46 + });
  47 +
  48 + this.result = new JSONEditor(document.getElementById("result"), {
  49 + mode:"code",
  50 + enableSort: false,
  51 + enableTransform: false,
  52 + editable : false,
  53 + mainMenuBar : false
  54 + });
  55 +
  56 + }
  57 +}
  58 +</script>
  59 +
  60 +<style scoped>
  61 +.main{
  62 + display: flex;
  63 + position: fixed;
  64 + top: 0;
  65 + left: 0;
  66 + width: 100%;
  67 + height: 100%;
  68 +}
  69 +#edit{
  70 + width: 50%;
  71 +}
  72 +#result{
  73 + width: 50%;
  74 +}
  75 +.submit{
  76 + position: fixed;
  77 + top: 2px;
  78 + left: calc(50% - 82px);
  79 + z-index: 9999;
  80 + width: 80px;
  81 +}
  82 +</style>