From f6649c6bddaf9e166c63fe049685421a3b5f95b1 Mon Sep 17 00:00:00 2001 From: quanyawei <401863037@qq.com> Date: Mon, 09 Oct 2023 09:17:01 +0800 Subject: [PATCH] fix:地图修改 --- vue.config.js | 3 src/views/UVA/index.vue | 344 ++++++++++++++++++++++++++++---------------------------- 2 files changed, 171 insertions(+), 176 deletions(-) diff --git a/src/views/UVA/index.vue b/src/views/UVA/index.vue index 382c68c..e572986 100644 --- a/src/views/UVA/index.vue +++ b/src/views/UVA/index.vue @@ -7,18 +7,17 @@ > <div style="width: 274px; margin: 13px auto"> <el-date-picker + ref="datePick" + v-model="datenum" :picker-options="pickerOptions" placeholder="������������" popper-class="jlpMySelectPopper" - ref="datePick" - v-model="datenum" + value-format="yyyy-MM-dd" + style="width: 280px" @change="chooseDate" @blur="chooseDate1" @focus="chooseDate2" - value-format="yyyy-MM-dd" - style="width: 280px" - > - </el-date-picker> + /> </div> <!-- <el-card class="box-card" style="width: 274px; margin: 13px auto"> --> @@ -44,10 +43,10 @@ > <!--accordion ���������������--> <el-collapse - accordion - style="box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1)" v-show="shou1 === true" v-loading="loading" + accordion + style="box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1)" > <el-collapse-item style="text-indent: 2em; position: relative; padding-botton: 10px" @@ -56,23 +55,22 @@ <img style="position: absolute; left: 18px" src="../../assets/images/uav/uav.png" - /> + > <span style="display: inline-block; position: absolute; left: 20px" > - ������������������������������</span - > + ������������������������������</span> </template> </el-collapse-item> </el-collapse> <el-collapse + v-show="shou1 === false" + ref="collapse" v-model="asideData.activeNames" + v-loading="loading" accordion style="box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1)" @change="handleChange" - ref="collapse" - v-show="shou1 === false" - v-loading="loading" > <el-collapse-item v-for="(item1, index) in asideData.uavTimeFly" @@ -84,12 +82,11 @@ <img style="position: absolute; left: 18px" src="../../assets/images/uav/uav.png" - /> + > <span style="display: inline-block; position: absolute; left: 20px" > - {{ item1.name }}</span - > + {{ item1.name }}</span> </template> <el-scrollbar style="height: 200px; overflow-x: hidden"> <div @@ -130,34 +127,34 @@ > <div class="numss"> <el-radio-group + v-if="selecttrue === 1" v-model="radioSeven" size="medium" - @change="changeCode" - v-if="selecttrue === 1" style="margin-top: 10px; margin-left: 10px" + @change="changeCode" > - <el-radio-button label="PM2.5"></el-radio-button> - <el-radio-button label="PM10"></el-radio-button> - <el-radio-button label="SO2"></el-radio-button> - <el-radio-button label="NO2"></el-radio-button> - <el-radio-button label="CO"></el-radio-button> - <el-radio-button label="03"></el-radio-button> - <el-radio-button label="TVOC"></el-radio-button> + <el-radio-button label="PM2.5" /> + <el-radio-button label="PM10" /> + <el-radio-button label="SO2" /> + <el-radio-button label="NO2" /> + <el-radio-button label="CO" /> + <el-radio-button label="03" /> + <el-radio-button label="TVOC" /> </el-radio-group> - <div class="Duo" v-if="selecttrue === 2"> + <div v-if="selecttrue === 2" class="Duo"> <div class="spantuu"> <span>���������������������������(���): </span> <el-input - class="inputtu" - v-model="tallone" ref="uvas" - ></el-input> + v-model="tallone" + class="inputtu" + /> -- <el-input - class="inputtu" - v-model="talltwo" ref="uvas" - ></el-input> + v-model="talltwo" + class="inputtu" + /> </div> <!-- <el-select v-model="Duovalue" placeholder="������������" class="slee"> <el-option @@ -169,14 +166,13 @@ </el-option> </el-select> --> <div class="spantu"> - <span>������������(���): </span - ><el-input - class="inputtu" + <span>������������(���): </span><el-input + ref="uvas" v-model="uvasize" + class="inputtu" clearable placeholder="���������������" - ref="uvas" - ></el-input> + /> </div> <el-select v-model="Duovalue" placeholder="������������" class="slee"> <el-option @@ -184,8 +180,7 @@ :key="item.code" :label="item.name" :value="item.name" - > - </el-option> + /> </el-select> <!-- <div class="spantuu"> <span>���������������������������(���): </span> @@ -203,9 +198,11 @@ </div> --> </div> <div v-if="selecttrue === 1" style="margin-left: 10px"> - <el-button type="primary" @click="gengD" style="margin-top: 10px" - >������������</el-button - > + <el-button + type="primary" + style="margin-top: 10px" + @click="gengD" + >������������</el-button> </div> <div v-if="selecttrue === 2" @@ -216,8 +213,7 @@ type="primary" icon="el-icon-setting" @click="dialogFormVisible = true" - >6���������</el-button - > + >6���������</el-button> <el-button class="gengD" @click="shou">������</el-button> <el-button type="primary" @click="selectDuo">������</el-button> </div> @@ -260,8 +256,7 @@ label="PM2.5 | ug/m��" label-class-name="my-label" content-class-name="my-content" - >22</el-descriptions-item - > + >22</el-descriptions-item> <el-descriptions-item label="PM10 | ug/m��">34</el-descriptions-item> <el-descriptions-item label="SO2 | ug/m��">4</el-descriptions-item> <el-descriptions-item label="NO2 | ug/m��">16</el-descriptions-item> @@ -334,7 +329,7 @@ var GPS = { PI: 3.14159265358979324, x_pi: (3.14159265358979324 * 3000.0) / 180.0, - delta: function (lat, lon) { + delta: function(lat, lon) { var a = 6378245.0 // a: ������������������������������������������������������������������ var ee = 0.00669342162296594323 // ee: ��������������������� var dLat = this.transformLat(lon - 105.0, lat - 35.0) @@ -349,7 +344,7 @@ }, // WGS-84 to GCJ-02 - gcj_encrypt: function (wgsLat, wgsLon) { + gcj_encrypt: function(wgsLat, wgsLon) { if (this.outOfChina(wgsLat, wgsLon)) { return { lat: wgsLat, lon: wgsLon } } @@ -358,7 +353,7 @@ return { lat: wgsLat + d.lat, lon: wgsLon + d.lon } }, // GCJ-02 to WGS-84 - gcj_decrypt: function (gcjLat, gcjLon) { + gcj_decrypt: function(gcjLat, gcjLon) { if (this.outOfChina(gcjLat, gcjLon)) { return { lat: gcjLat, lon: gcjLon } } @@ -367,7 +362,7 @@ return { lat: gcjLat - d.lat, lon: gcjLon - d.lon } }, // GCJ-02 to WGS-84 exactly - gcj_decrypt_exact: function (gcjLat, gcjLon) { + gcj_decrypt_exact: function(gcjLat, gcjLon) { var initDelta = 0.01 var threshold = 0.000000001 var dLat = initDelta @@ -399,7 +394,7 @@ return { lat: wgsLat, lon: wgsLon } }, // GCJ-02 to BD-09 - bd_encrypt: function (gcjLat, gcjLon) { + bd_encrypt: function(gcjLat, gcjLon) { var x = gcjLon var y = gcjLat var z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * this.x_pi) @@ -409,7 +404,7 @@ return { lat: this.bdLat, lon: this.bdLon } }, // BD-09 to GCJ-02 - bd_decrypt: function (bdLat, bdLon) { + bd_decrypt: function(bdLat, bdLon) { var x = bdLon - 0.0065 var y = bdLat - 0.006 var z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * this.x_pi) @@ -420,7 +415,7 @@ }, // WGS-84 to Web mercator // mercatorLat -> y mercatorLon -> x - mercator_encrypt: function (wgsLat, wgsLon) { + mercator_encrypt: function(wgsLat, wgsLon) { var x = (wgsLon * 20037508.34) / 180.0 var y = Math.log(Math.tan(((90.0 + wgsLat) * this.PI) / 360.0)) / @@ -430,7 +425,7 @@ }, // Web mercator to WGS-84 // mercatorLat -> y mercatorLon -> x - mercator_decrypt: function (mercatorLat, mercatorLon) { + mercator_decrypt: function(mercatorLat, mercatorLon) { var x = (mercatorLon / 20037508.34) * 180.0 var y = (mercatorLat / 20037508.34) * 180.0 y = @@ -439,7 +434,7 @@ return { lat: y, lon: x } }, // two point's distance - distance: function (latA, lonA, latB, lonB) { + distance: function(latA, lonA, latB, lonB) { var earthR = 6371000.0 var x = Math.cos((latA * this.PI) / 180.0) * @@ -454,7 +449,7 @@ var distance = alpha * earthR return distance }, - outOfChina: function (lat, lon) { + outOfChina: function(lat, lon) { if (lon < 72.004 || lon > 137.8347) { return true } @@ -463,7 +458,7 @@ } return false }, - transformLat: function (x, y) { + transformLat: function(x, y) { var ret = -100.0 + 2.0 * x + @@ -487,7 +482,7 @@ 3.0 return ret }, - transformLon: function (x, y) { + transformLon: function(x, y) { var ret = 300.0 + x + @@ -510,14 +505,14 @@ 2.0) / 3.0 return ret - }, + } } export default { filters: { - sensorFilter: function (value) { + sensorFilter: function(value) { if (!value) return '' return json[value] - }, + } }, data() { return { @@ -532,11 +527,11 @@ selecttrue: 1, pickerOptions: { cellClassName: (time) => { - let timeDate = moment(time.getTime()).format('yyyy-MM-DD') + const timeDate = moment(time.getTime()).format('yyyy-MM-DD') if (this.timeNums.includes(timeDate)) { return 'dateArrClass' // ������������������������������������������ } - }, + } }, tallone: 0, @@ -547,7 +542,7 @@ activeNames: [0], uavTimeFly: [], // ��������������������������������������������� activeKey: -1, - activeAreaKey: 0, + activeAreaKey: 0 }, load: 1, value: [], @@ -559,7 +554,7 @@ { code: 'a21004', name: 'NO2' }, { code: 'a21005', name: 'CO' }, { code: 'a05024', name: 'O3' }, - { code: 'a99054', name: 'TVOC' }, + { code: 'a99054', name: 'TVOC' } ], valuetime: '2023-01-01', defautRadio: { code: 'a34004', name: 'PM2.5' }, @@ -584,7 +579,7 @@ 'CO', 'O3', 'TVOC', - '���������', + '���������' ], changeColor: 0, changeColor1: 0, @@ -616,7 +611,7 @@ } else { return time.getTime() > new Date() } - }, + } }, sensorDate: null, noneData: true, @@ -632,16 +627,16 @@ { code: 'a99054', name: 'TVOC' }, { code: 'a01006', - name: '������', + name: '������' }, { code: 'a01001', - name: '������', + name: '������' }, { code: 'a01002', - name: '������', - }, + name: '������' + } ], sensorTableData: [ { @@ -652,7 +647,7 @@ tab3: '115', tab4: '150', tab5: '250', - tab6: '350', + tab6: '350' }, { sensorName: 'PM10', @@ -662,7 +657,7 @@ tab3: '250', tab4: '350', tab5: '420', - tab6: '500', + tab6: '500' }, { sensorName: 'SO2', @@ -672,7 +667,7 @@ tab3: '475', tab4: '800', tab5: '1600', - tab6: '2100', + tab6: '2100' }, { sensorName: 'NO2', @@ -682,7 +677,7 @@ tab3: '180', tab4: '280', tab5: '565', - tab6: '750', + tab6: '750' }, { sensorName: 'CO', @@ -692,7 +687,7 @@ tab3: '14', tab4: '24', tab5: '36', - tab6: '48', + tab6: '48' }, { sensorName: 'O3', @@ -702,7 +697,7 @@ tab3: '300', tab4: '400', tab5: '800', - tab6: '1000', + tab6: '1000' }, { sensorName: 'TVOC', @@ -712,7 +707,7 @@ tab3: '0.5', tab4: '0.7', tab5: '0.9', - tab6: '1', + tab6: '1' }, { sensorName: '���������', @@ -722,21 +717,21 @@ tab3: '1000', tab4: '10000', tab5: '20000', - tab6: '50000', + tab6: '50000' }, { sensorName: '������', - unit: 'hpa', + unit: 'hpa' }, { sensorName: '������', - unit: '%', + unit: '%' }, { sensorName: '������', - unit: '���', - }, + unit: '���' + } ], carWs: null, map: null, @@ -756,12 +751,12 @@ dataTypeList: [ { value: 'history', - label: '������������', + label: '������������' }, { value: 'webSocket', - label: '������������', - }, + label: '������������' + } ], dataTypeValue: 'history', historyView: true, @@ -778,7 +773,7 @@ uvasize: 20, timeValue: [ new Date(2020, 1, 1, 0, 0, 0), - new Date(2022, 12, 31, 23, 59, 59), + new Date(2022, 12, 31, 23, 59, 59) ], timeNums: [], batchs: '', @@ -792,7 +787,7 @@ tab3: '115', tab4: '150', tab5: '250', - tab6: '350', + tab6: '350' }, { sensorName: 'PM10', @@ -802,7 +797,7 @@ tab3: '250', tab4: '350', tab5: '420', - tab6: '500', + tab6: '500' }, { sensorName: 'SO2', @@ -812,7 +807,7 @@ tab3: '650', tab4: '800', tab5: '', - tab6: '', + tab6: '' }, { sensorName: 'NO2', @@ -822,7 +817,7 @@ tab3: '700', tab4: '1200', tab5: '2340', - tab6: '3090', + tab6: '3090' }, { sensorName: 'CO', @@ -832,7 +827,7 @@ tab3: '35', tab4: '60', tab5: '90', - tab6: '120', + tab6: '120' }, { sensorName: 'O3', @@ -842,7 +837,7 @@ tab3: '300', tab4: '400', tab5: '800', - tab6: '1000', + tab6: '1000' }, { sensorName: 'TVOC', @@ -852,7 +847,7 @@ tab3: '0.5', tab4: '0.7', tab5: '0.9', - tab6: '1', + tab6: '1' }, { sensorName: '���������', @@ -862,17 +857,10 @@ tab3: '1000', tab4: '10000', tab5: '20000', - tab6: '50000', - }, - ], + tab6: '50000' + } + ] } - }, - - mounted() { - this.initStart() - // this.$refs.datePick.focus() - // this.getDate() - // this.flyData() }, watch: { dataTypeValue(n, o) { @@ -895,7 +883,14 @@ // console.log(n) }, deep: true, - immediate: true, + immediate: true + }, + + mounted() { + this.initStart() + // this.$refs.datePick.focus() + // this.getDate() + // this.flyData() }, created() { this.newTime(this.timeValue) @@ -932,9 +927,9 @@ uvasize: this.uvasize, mac: this.macs, height1: this.tallone, - height2: this.talltwo, + height2: this.talltwo // batch: '2023-06-16 16:21:21', - }, + } }).then((res) => { // console.log(res) this.carData = [] @@ -1010,7 +1005,7 @@ h: date.getHours(), i: date.getMinutes(), s: date.getSeconds(), - a: date.getDay(), + a: date.getDay() } const time_str = format.replace(/{([ymdhisa])+}/g, (result, key) => { const value = formatObj[key] @@ -1115,8 +1110,8 @@ method: 'get', params: { organizationId: this.$store.state.orgId, - date: item, - }, + date: item + } }).then((res) => { // console.log(res, 'res.data.vos') if (res.code === -47) { @@ -1174,9 +1169,9 @@ uvasize: this.uvasize, height1: this.tallone, height2: this.talltwo, - mac: mac, + mac: mac // batch: '2023-06-16 16:21:21', - }, + } }).then((res) => { // console.log(res) this.carData = [] @@ -1200,8 +1195,8 @@ url: '/uav/queryDate', method: 'get', params: { - organizationId: this.$store.state.orgId, - }, + organizationId: this.$store.state.orgId + } }).then((res) => { this.asideData.dates = JSON.parse(JSON.stringify(res.data.datesStr)) this.timeNums = this.asideData.dates @@ -1229,10 +1224,13 @@ const that = this if (!res) { that.map = new BMapGL.Map('map_container') + console.log('BMap', BMap) + console.log('BMapGL', BMapGL) + console.log('window', window.BMapGL) that.map.enableScrollWheelZoom(true) // ������������������������������������������������������s that.map.setMapType(BMAP_EARTH_MAP) // ��������������������������������� that.map.setDisplayOptions({ - street: false, // ������������������������������������������������������������ + street: false // ������������������������������������������������������������ }) that.map.setHeading(0) // ������������������ if (that.viewKey === '2D') { @@ -1247,31 +1245,31 @@ elementType: 'all', stylers: { color: '#ffffff', - visibility: 'off', - }, + visibility: 'off' + } }, { featureType: 'building', elementType: 'all', stylers: { - visibility: 'off', - }, + visibility: 'off' + } }, { featureType: 'poilabel', elementType: 'all', stylers: { - visibility: 'off', - }, + visibility: 'off' + } }, { featureType: 'manmade', elementType: 'all', stylers: { - visibility: 'off', - }, - }, - ], + visibility: 'off' + } + } + ] }) showNoPoints() this.loading1 = false @@ -1363,7 +1361,7 @@ if (that.firstPlayFlag) { that.map.centerAndZoom(that.centerPoint, that.mapZoom) that.view = new mapvgl.View({ - map: that.map, + map: that.map }) that.firstPlayFlag = false that.loading1 = false @@ -1372,7 +1370,7 @@ this.map.clearOverlays() that.map.centerAndZoom(that.centerPoint, that.mapZoom) that.view = new mapvgl.View({ - map: that.map, + map: that.map }) that.loading1 = false @@ -1385,7 +1383,7 @@ // drawStartAndEnd() // ��������������������� function draw(sensor, type, carMac) { var levels = getGrading(sensor, type, carMac) - $.each(levels, function (index, value) { + $.each(levels, function(index, value) { var color = value.color var data = value.data if (data.length > 0) { @@ -1396,7 +1394,7 @@ selectedIndex: -1, // ��������� selectedColor: '#ee1111', // ��������������� autoSelect: true, // ������������������������������������������ - riseTime: 1800, // ��������������������������� + riseTime: 1800 // ��������������������������� }) that.shapeLayer.setData(data) that.view.addLayer(that.shapeLayer) @@ -1404,7 +1402,7 @@ }) that.map.setDefaultCursor('default') if (type === '2D') { - $.each(that.showPoints, function (item, point) { + $.each(that.showPoints, function(item, point) { setLabelStyle(point[sensor], point) }) } @@ -1412,7 +1410,7 @@ // ��������������������������������� function drawPolygon(sensor) { - $.each(that.showPoints, function (item, point) { + $.each(that.showPoints, function(item, point) { var sw = getPoint(225, point.lng, point.lat, that.distance) var ne = getPoint(45, point.lng, point.lat, that.distance) var data = point[sensor] @@ -1423,15 +1421,15 @@ new BMapGL.Point(sw.lng, sw.lat), // ��������� new BMapGL.Point(ne.lng, sw.lat), // ��������� new BMapGL.Point(ne.lng, ne.lat), // ��������� - new BMapGL.Point(sw.lng, ne.lat), // ��������� + new BMapGL.Point(sw.lng, ne.lat) // ��������� ], { - strokeWeight: 0.1, //������������������,������������������ + strokeWeight: 0.1, // ������������������,������������������ // strokeOpacity: 0.0, //������������������ - fillColor: color, //��������������������� - fillOpacity: 0.8, //������������������������0~1������ - strokeColor: 'black', //������������������ - strokeStyle: 'solid', //������������������solid���dashed��� + fillColor: color, // ��������������������� + fillOpacity: 0.8, // ������������������������0~1������ + strokeColor: 'black', // ������������������ + strokeStyle: 'solid' // ������������������solid���dashed��� } ) that.map.addOverlay(polygon) @@ -1448,7 +1446,7 @@ ) var startMark = new BMapGL.Marker(that.showPoints[0], { icon: startIcon, - offset: new BMapGL.Size(0, -20), + offset: new BMapGL.Size(0, -20) }) that.map.addOverlay(startMark) var endIcon = new BMapGL.Icon( @@ -1459,7 +1457,7 @@ that.showPoints[that.showPoints.length - 1], { icon: endIcon, - offset: new BMapGL.Size(0, -20), + offset: new BMapGL.Size(0, -20) } ) that.map.addOverlay(endMark) @@ -1469,7 +1467,7 @@ function drawLine() { var data = [] var points = [] - $.each(trackPoints, function (index, value) { + $.each(trackPoints, function(index, value) { var point = [] point.push(value['lng'], value['lat']) points.push(point) @@ -1477,8 +1475,8 @@ data.push({ geometry: { type: '"LineString"', - coordinates: [points], - }, + coordinates: [points] + } }) var lineLayer = new mapvgl.LineLayer({ color: 'red', @@ -1486,7 +1484,7 @@ animation: true, duration: 10, // ������������2s trailLength: 0.1, // ������������������������0.4 - interval: 0.3, // ���������������������������������0.2 + interval: 0.3 // ���������������������������������0.2 }) that.view.addLayer(lineLayer) lineLayer.setData(data) @@ -1568,7 +1566,7 @@ level5.color = '#99004c' level6.color = '#7e0023' - $.each(that.showPoints, function (index, value) { + $.each(that.showPoints, function(index, value) { var sw = getPoint(225, value.lng, value.lat, that.distance) var ne = getPoint(45, value.lng, value.lat, 30) var polygon = [] @@ -1605,77 +1603,77 @@ data0.push({ geometry: { type: 'Polygon', - coordinates: [polygon], + coordinates: [polygon] }, properties: { - height: height, - }, + height: height + } }) break case 1: data1.push({ geometry: { type: 'Polygon', - coordinates: [polygon], + coordinates: [polygon] }, properties: { - height: height, - }, + height: height + } }) break case 2: data2.push({ geometry: { type: 'Polygon', - coordinates: [polygon], + coordinates: [polygon] }, properties: { - height: height, - }, + height: height + } }) break case 3: data3.push({ geometry: { type: 'Polygon', - coordinates: [polygon], + coordinates: [polygon] }, properties: { - height: height, - }, + height: height + } }) break case 4: data4.push({ geometry: { type: 'Polygon', - coordinates: [polygon], + coordinates: [polygon] }, properties: { - height: height, - }, + height: height + } }) break case 5: data5.push({ geometry: { type: 'Polygon', - coordinates: [polygon], + coordinates: [polygon] }, properties: { - height: height, - }, + height: height + } }) break case 6: data6.push({ geometry: { type: 'Polygon', - coordinates: [polygon], + coordinates: [polygon] }, properties: { - height: height, - }, + height: height + } }) break } @@ -1894,7 +1892,7 @@ "<span class='my-maptip'>" + content + '<br /><span>', // ���lable������������ { offset: new BMapGL.Size(-8, -10), // label������������������������label������������������������ - position: point, + position: point } // label��������� ) var offsetSize = new BMapGL.Size(0, 0) @@ -1909,7 +1907,7 @@ lineHeight: '20px', fontFamily: '������������', backgroundColor: '0.05', - fontWeight: 'bold', + fontWeight: 'bold' } label.setStyle(labelStyle) that.map.addOverlay(label) @@ -1918,14 +1916,14 @@ // ������������,������������������ function showNoPoints() { that.map.centerAndZoom('���������', 17) - setTimeout(function () { + setTimeout(function() { document.getElementById('cpm').style.display = 'block' document.getElementById('data').style.display = 'none' }, 250) } // ������������������������ - that.map.addEventListener('zoomend', function () { + that.map.addEventListener('zoomend', function() { // ��������������������������������������� var zoom = that.map.getZoom() $('span.my-maptip').parent()[zoom <= 15.5 ? 'hide' : 'show']() @@ -2002,8 +2000,8 @@ break } this.initStart(this.carData) - }, - }, + } + } } </script> @@ -2266,4 +2264,4 @@ .el-scrollbar__wrap { overflow-x: hidden; } -</style> \ No newline at end of file +</style> diff --git a/vue.config.js b/vue.config.js index dcc1fcb..90e8e90 100644 --- a/vue.config.js +++ b/vue.config.js @@ -28,9 +28,6 @@ productionSourceMap: false, devServer: { port: port, - client: { - webSocketURL: 'ws://0.0.0.0:8080/ws' - }, open: false, overlay: { warnings: false, -- Gitblit v1.8.0