Commit 8927f7d06ebb6d8e0aeb8c4f532311ba0d9d021a

Authored by 王通
1 parent ad6f760d

1.js压缩兼容es6内容

src/main/resources/fatso/handle_real_ctl.js
1   -/**
2   - * 处理线调文件
3   - */
4   -var fs = require('fs')
5   - , cheerio = require('cheerio')
6   - , minifier = require('./minifier')
7   - , crypto = require("crypto")
8   - , CleanCSS = require('clean-css')
9   - , UglifyJS = require("uglify-js");
10   -;
11   -
12   -var platform = process.platform;
13   -var iswin = platform=='win32';
14   -var sp = platform=='win32'?'\\':'/';
15   -//不参与的目录
16   -var pName = 'bsth_control'
17   - , path = process.cwd()
18   - //根目录
19   - , root = path.substr(0, path.indexOf(sp + 'src'+sp+'main'))
20   - , workspace = root.substr(0, root.lastIndexOf(sp + pName))
21   - //临时目录
22   - , dest = (workspace + sp + pName + '@fatso_copy')//.replace(/\//g, '\\')
23   - , _static = sp + 'src'+sp+'main'+sp+'resources'+sp+'static';
24   -
25   -
26   -var mainFile = dest + _static + sp + 'real_control_v2'+sp+'main.html';
27   -var aloneMapWrapFile = dest + _static + sp + 'real_control_v2'+sp+'alone_page'+sp+'map'+sp+'alone_wrap.html';
28   -var aloneHomeWrapFile = dest + _static + sp + 'real_control_v2'+sp+'alone_page'+sp+'home'+sp+'home_wrap.html';
29   -var mapFile = dest + _static + sp + 'real_control_v2'+sp+'mapmonitor'+sp+'real.html';
30   -var realCtl = {
31   - /**
32   - * 处理线调首页
33   - */
34   - handleMain: function (cb) {
35   - //处理main.html
36   - var data = fs.readFileSync(mainFile, 'utf-8'),
37   - $ = cheerio.load(data);
38   - handleCss($, function () {
39   - handleJs($, mainFile, cb);
40   - });
41   -
42   -
43   - },
44   - /**
45   - * 处理地图模块
46   - * @param cb
47   - */
48   - handleMap: function (cb) {
49   - //读取文件
50   - var data = fs.readFileSync(mapFile, 'utf-8')
51   - , $ = cheerio.load(data);
52   -
53   - handleCss($, function () {
54   - handleJs($, mapFile, cb);
55   - });
56   - },
57   - /**
58   - * 处理单屏地图页面
59   - * @param cb
60   - */
61   - handleAlonePage: function (cb) {
62   - var data = fs.readFileSync(aloneMapWrapFile, 'utf-8');
63   - var $ = cheerio.load(data);
64   - handleCss($, function () {
65   - handleJs($, aloneMapWrapFile, cb);
66   - });
67   - },
68   - /**
69   - * 处理单屏主页
70   - * @param cb
71   - */
72   - handleAloneHomePage: function (cb) {
73   - var data = fs.readFileSync(aloneHomeWrapFile, 'utf-8');
74   - var $ = cheerio.load(data);
75   - handleCss($, function () {
76   - handleJs($, aloneHomeWrapFile, cb);
77   - });
78   - }
79   -
80   -};
81   -
82   -/**
83   - * 处理css
84   - * @type {any}
85   - */
86   -var handleCss = function ($, cb) {
87   - var cssArray = $('link[rel=stylesheet][merge]');
88   - //按 merge 值分组
89   - var cssMap = {}, mergeName;
90   - for (var i = 0, c; c = cssArray[i++];) {
91   - mergeName = $(c).attr('merge');
92   - if (!cssMap[mergeName])
93   - cssMap[mergeName] = [];
94   - cssMap[mergeName].push(dest + _static + $(c).attr('href'));
95   - //remove
96   - $(c).remove();
97   - }
98   - //按 merge 合并压缩css
99   - var ks = get_keys(cssMap), index = 0;
100   - (function () {
101   - if (index >= ks.length) {
102   - cb && cb();
103   - return;
104   - }
105   - var k = ks[index];
106   - index++;
107   - var f = arguments.callee;
108   - //合并css
109   - new CleanCSS().minify(cssMap[k], function (error, out) {
110   - var data = out.styles;
111   - var fName = (k + '_' + md5(data)) + '.css';
112   - //写入 assets css 目录下
113   - var descFile = dest + _static + sp + 'real_control_v2'+sp+'assets'+sp+'css' + sp + fName;
114   - fs.open(descFile, 'a', function (err, fd) {
115   -
116   - fs.write(fd, data, function () {
117   - var tag = '<link rel="stylesheet" href="/real_control_v2/assets/css/' + fName + '"/>';
118   - if ($('head').length > 0)
119   - $('head').append(tag);
120   - else {
121   - if($('link').length > 0)
122   - $('link').last().before(tag);
123   - else
124   - $('div').first().before(tag);
125   - }
126   - console.log(k + ' css', '结束,下一个');
127   - f();
128   - });
129   - });
130   - });
131   - })();
132   -};
133   -
134   -/**
135   - * 处理js
136   - */
137   -var handleJs = function ($, file, cb) {
138   - var scriptArray = $('script[merge]');
139   - //按 merge 值分组
140   - var jsMap = {}, mergeName;
141   - for (var i = 0, s; s = scriptArray[i++];) {
142   - mergeName = $(s).attr('merge');
143   - if (!jsMap[mergeName])
144   - jsMap[mergeName] = [];
145   - jsMap[mergeName].push(dest + _static + $(s).attr('src'));
146   - //remove
147   - $(s).remove();
148   - }
149   -
150   - //按 merge 合并压缩js
151   - var ks = get_keys(jsMap), index = 0;
152   - (function () {
153   - if (index >= ks.length) {
154   - write(file, $.html());
155   - console.log(file + ' 结束'.green);
156   - cb && cb();
157   - return;
158   - }
159   - var k = ks[index];
160   - index++;
161   - var f = arguments.callee;
162   - //合并压缩js
163   - var result = UglifyJS.minify(jsMap[k]);
164   - var data = result.code;
165   - var fName = (k + '_' + md5(data)) + '.js';
166   - //写入 assets js 目录下
167   - var descFile = dest + _static + sp + 'real_control_v2'+sp+'assets'+sp+'js' + sp + fName;
168   - fs.open(descFile, 'a', function (err, fd) {
169   -
170   - fs.write(fd, data, function () {
171   - var tag = '<script src="/real_control_v2/assets/js/' + fName + '"></script>';
172   - if ($('body').length > 0)
173   - $('body').append(tag);
174   - else {
175   - //没有body 就写在尾部
176   - $('*').last().after(tag);
177   - }
178   - console.log(k + ' js', '结束,下一个');
179   - f();
180   - });
181   - });
182   - })();
183   -};
184   -
185   -var get_keys = function (json) {
186   - var array = [];
187   - for (var key in json) {
188   - array.push(key);
189   - }
190   - return array;
191   -};
192   -
193   -function md5(text) {
194   - return crypto.createHash("md5").update(text).digest("hex");
195   -}
196   -
197   -function write(file, text) {
198   - fs.writeFile(file, text, function (err) {
199   - if (err) {
200   - console.log(err.toString().red);
201   - process.exit();
202   - }
203   - console.log(file.green);
204   - });
205   -}
206   -
  1 +/**
  2 + * 处理线调文件
  3 + */
  4 +var fs = require('fs')
  5 + , cheerio = require('cheerio')
  6 + , minifier = require('./minifier')
  7 + , crypto = require("crypto")
  8 + , CleanCSS = require('clean-css');
  9 +;
  10 +
  11 +var platform = process.platform;
  12 +var iswin = platform=='win32';
  13 +var sp = platform=='win32'?'\\':'/';
  14 +//不参与的目录
  15 +var pName = 'bsth_control'
  16 + , path = process.cwd()
  17 + //根目录
  18 + , root = path.substr(0, path.indexOf(sp + 'src'+sp+'main'))
  19 + , workspace = root.substr(0, root.lastIndexOf(sp + pName))
  20 + //临时目录
  21 + , dest = (workspace + sp + pName + '@fatso_copy')//.replace(/\//g, '\\')
  22 + , _static = sp + 'src'+sp+'main'+sp+'resources'+sp+'static';
  23 +
  24 +
  25 +var mainFile = dest + _static + sp + 'real_control_v2'+sp+'main.html';
  26 +var aloneMapWrapFile = dest + _static + sp + 'real_control_v2'+sp+'alone_page'+sp+'map'+sp+'alone_wrap.html';
  27 +var aloneHomeWrapFile = dest + _static + sp + 'real_control_v2'+sp+'alone_page'+sp+'home'+sp+'home_wrap.html';
  28 +var mapFile = dest + _static + sp + 'real_control_v2'+sp+'mapmonitor'+sp+'real.html';
  29 +var realCtl = {
  30 + /**
  31 + * 处理线调首页
  32 + */
  33 + handleMain: function (cb) {
  34 + //处理main.html
  35 + var data = fs.readFileSync(mainFile, 'utf-8'),
  36 + $ = cheerio.load(data);
  37 + handleCss($, function () {
  38 + handleJs($, mainFile, cb);
  39 + });
  40 +
  41 +
  42 + },
  43 + /**
  44 + * 处理地图模块
  45 + * @param cb
  46 + */
  47 + handleMap: function (cb) {
  48 + //读取文件
  49 + var data = fs.readFileSync(mapFile, 'utf-8')
  50 + , $ = cheerio.load(data);
  51 +
  52 + handleCss($, function () {
  53 + handleJs($, mapFile, cb);
  54 + });
  55 + },
  56 + /**
  57 + * 处理单屏地图页面
  58 + * @param cb
  59 + */
  60 + handleAlonePage: function (cb) {
  61 + var data = fs.readFileSync(aloneMapWrapFile, 'utf-8');
  62 + var $ = cheerio.load(data);
  63 + handleCss($, function () {
  64 + handleJs($, aloneMapWrapFile, cb);
  65 + });
  66 + },
  67 + /**
  68 + * 处理单屏主页
  69 + * @param cb
  70 + */
  71 + handleAloneHomePage: function (cb) {
  72 + var data = fs.readFileSync(aloneHomeWrapFile, 'utf-8');
  73 + var $ = cheerio.load(data);
  74 + handleCss($, function () {
  75 + handleJs($, aloneHomeWrapFile, cb);
  76 + });
  77 + }
  78 +
  79 +};
  80 +
  81 +/**
  82 + * 处理css
  83 + * @type {any}
  84 + */
  85 +var handleCss = function ($, cb) {
  86 + var cssArray = $('link[rel=stylesheet][merge]');
  87 + //按 merge 值分组
  88 + var cssMap = {}, mergeName;
  89 + for (var i = 0, c; c = cssArray[i++];) {
  90 + mergeName = $(c).attr('merge');
  91 + if (!cssMap[mergeName])
  92 + cssMap[mergeName] = [];
  93 + cssMap[mergeName].push(dest + _static + $(c).attr('href'));
  94 + //remove
  95 + $(c).remove();
  96 + }
  97 + //按 merge 合并压缩css
  98 + var ks = get_keys(cssMap), index = 0;
  99 + (function () {
  100 + if (index >= ks.length) {
  101 + cb && cb();
  102 + return;
  103 + }
  104 + var k = ks[index];
  105 + index++;
  106 + var f = arguments.callee;
  107 + //合并css
  108 + new CleanCSS().minify(cssMap[k], function (error, out) {
  109 + var data = out.styles;
  110 + var fName = (k + '_' + md5(data)) + '.css';
  111 + //写入 assets css 目录下
  112 + var descFile = dest + _static + sp + 'real_control_v2'+sp+'assets'+sp+'css' + sp + fName;
  113 + fs.open(descFile, 'a', function (err, fd) {
  114 +
  115 + fs.write(fd, data, function () {
  116 + var tag = '<link rel="stylesheet" href="/real_control_v2/assets/css/' + fName + '"/>';
  117 + if ($('head').length > 0)
  118 + $('head').append(tag);
  119 + else {
  120 + if($('link').length > 0)
  121 + $('link').last().before(tag);
  122 + else
  123 + $('div').first().before(tag);
  124 + }
  125 + console.log(k + ' css', '结束,下一个');
  126 + f();
  127 + });
  128 + });
  129 + });
  130 + })();
  131 +};
  132 +
  133 +/**
  134 + * 处理js
  135 + */
  136 +var handleJs = function ($, file, cb) {
  137 + var scriptArray = $('script[merge]');
  138 + //按 merge 值分组
  139 + var jsMap = {}, mergeName;
  140 + for (var i = 0, s; s = scriptArray[i++];) {
  141 + mergeName = $(s).attr('merge');
  142 + if (!jsMap[mergeName])
  143 + jsMap[mergeName] = [];
  144 + jsMap[mergeName].push(dest + _static + $(s).attr('src'));
  145 + //remove
  146 + $(s).remove();
  147 + }
  148 +
  149 + //按 merge 合并压缩js
  150 + var ks = get_keys(jsMap), index = 0;
  151 + (function () {
  152 + if (index >= ks.length) {
  153 + write(file, $.html());
  154 + console.log(file + ' 结束'); // 移除.green调用
  155 + cb && cb();
  156 + return;
  157 + }
  158 + var k = ks[index];
  159 + index++;
  160 + var f = arguments.callee;
  161 + //合并压缩js
  162 + try {
  163 + // 先合并文件内容
  164 + let code = '';
  165 + for(let j = 0; j < jsMap[k].length; j++) {
  166 + code += fs.readFileSync(jsMap[k][j], 'utf8') + '\n';
  167 + }
  168 + // 使用Terser压缩
  169 + var data = minifier.mini(code);
  170 + if (code !== '' && data === '') {
  171 + console.error('压缩出错')
  172 + process.exit();
  173 + }
  174 + var fName = (k + '_' + md5(data)) + '.js';
  175 + //写入 assets js 目录下
  176 + var descFile = dest + _static + sp + 'real_control_v2'+sp+'assets'+sp+'js' + sp + fName;
  177 + fs.open(descFile, 'a', function (err, fd) {
  178 + fs.write(fd, data, function () {
  179 + var tag = '<script src="/real_control_v2/assets/js/' + fName + '"></script>';
  180 + if ($('body').length > 0)
  181 + $('body').append(tag);
  182 + else {
  183 + //没有body 就写在尾部
  184 + $('*').last().after(tag);
  185 + }
  186 + console.log(k + ' js', '结束,下一个');
  187 + f();
  188 + });
  189 + });
  190 + } catch (e) {
  191 + console.error('合并压缩错误:', e);
  192 + process.exit();
  193 + }
  194 + })();
  195 +};
  196 +
  197 +var get_keys = function (json) {
  198 + var array = [];
  199 + for (var key in json) {
  200 + array.push(key);
  201 + }
  202 + return array;
  203 +};
  204 +
  205 +function md5(text) {
  206 + return crypto.createHash("md5").update(text).digest("hex");
  207 +}
  208 +
  209 +function write(file, text) {
  210 + fs.writeFile(file, text, function (err) {
  211 + if (err) {
  212 + console.log(err.toString()); // 移除.red调用
  213 + process.exit();
  214 + }
  215 + console.log(file); // 移除.green调用
  216 + });
  217 +}
  218 +
207 219 module.exports = realCtl;
208 220 \ No newline at end of file
... ...
src/main/resources/fatso/minifier.js
1   -/**
2   - * @author PanZhao
3   - * @date 2016年3月17日 下午12:44:06
4   - */
5   -var fs = require('fs');
6   -var UglifyJS = require("uglify-js");
7   -
8   -var platform = process.platform;
9   -var iswin = platform=='win32';
10   -var separator = platform=='win32'?'\\':'/';
11   -var minifier = {
12   -
13   - mergeAndMini: function(fileArray,scriptString, root, file){
14   - var len = fileArray.length;
15   - for(var i = 0; i < len; i ++){
16   - fileArray[i] = root + fileArray[i].split('/').join(separator);
17   - }
18   -
19   - var result, indoorRs;
20   -
21   - try {
22   - if(fileArray && len > 0)
23   - result = UglifyJS.minify(fileArray);
24   -
25   - if(scriptString)
26   - indoorRs = UglifyJS.minify(scriptString, {fromString: true});
27   - } catch (e) {
28   - console.log(e);
29   - console.log(file.red);
30   - process.exit();
31   - }
32   -
33   - return {outside: result?result.code:'', inside: indoorRs?indoorRs.code:''};
34   - },
35   - mini: function(file){
36   - return UglifyJS.minify(file).code;
37   - }
38   -}
39   -
  1 +var fs = require('fs');
  2 +var Terser = require('terser');
  3 +
  4 +var platform = process.platform;
  5 +var iswin = platform=='win32';
  6 +var separator = platform=='win32'?'\\':'/';
  7 +var minifier = {
  8 +
  9 + mergeAndMini: function(fileArray, scriptString, root, file) {
  10 + var len = fileArray.length;
  11 + for(var i = 0; i < len; i ++){
  12 + fileArray[i] = root + fileArray[i].split('/').join(separator);
  13 + }
  14 +
  15 + var result, indoorRs;
  16 +
  17 + try {
  18 + if(fileArray && len > 0) {
  19 + // Terser可以直接接受文件路径数组
  20 + result = Terser.minify_sync(fs.readFileSync(fileArray[0], 'utf8'));
  21 + // 如果有多个文件,需要先合并内容
  22 + if(len > 1) {
  23 + let code = '';
  24 + for(let j = 0; j < len; j++) {
  25 + code += fs.readFileSync(fileArray[j], 'utf8') + '\n';
  26 + }
  27 + result = Terser.minify_sync(code);
  28 + }
  29 + }
  30 +
  31 + if(scriptString) {
  32 + // Terser不需要fromString选项,直接传递代码字符串
  33 + indoorRs = Terser.minify_sync(scriptString);
  34 + }
  35 + } catch (e) {
  36 + console.log(e);
  37 + console.log(file); // 移除.red调用,除非有chalk等库
  38 + process.exit();
  39 + }
  40 +
  41 + return {outside: result && !result.error ? result.code : '', inside: indoorRs && !indoorRs.error ? indoorRs.code : ''};
  42 + },
  43 +
  44 + mini: function(file) {
  45 + try {
  46 + // 检查file是文件路径还是代码字符串
  47 + if(typeof file === 'string' && fs.existsSync(file)) {
  48 + const code = fs.readFileSync(file, 'utf8');
  49 + const result = Terser.minify_sync(code);
  50 + return result && !result.error ? result.code : '';
  51 + } else {
  52 + // 假设是代码字符串
  53 + const result = Terser.minify_sync(file);
  54 + return result && !result.error ? result.code : '';
  55 + }
  56 + } catch (e) {
  57 + console.log(e);
  58 + return '';
  59 + }
  60 + }
  61 +};
  62 +
40 63 module.exports = minifier;
41 64 \ No newline at end of file
... ...
src/main/resources/fatso/package.json
1   -{
2   - "name": "fatso",
3   - "version": "1.0.0",
4   - "description": "子页面js检查、合并、压缩等处理",
5   - "main": "start.js",
6   - "scripts": {
7   - "test": "echo \"Error: no test specified\" && exit 1"
8   - },
9   - "author": "panzhaov5",
10   - "license": "ISC",
11   - "dependencies": {
12   - "cheerio": "^0.20.0",
13   - "clean-css": "^4.0.12",
14   - "colors": "^1.3.3",
15   - "eventproxy": "^0.3.4",
16   - "uglify-js": "^2.6.2"
17   - }
18   -}
  1 +{
  2 + "name": "fatso",
  3 + "version": "1.0.0",
  4 + "description": "子页面js检查、合并、压缩等处理",
  5 + "main": "start.js",
  6 + "scripts": {
  7 + "test": "echo \"Error: no test specified\" && exit 1"
  8 + },
  9 + "author": "panzhaov5",
  10 + "license": "ISC",
  11 + "dependencies": {
  12 + "cheerio": "^0.20.0",
  13 + "clean-css": "^4.0.12",
  14 + "colors": "^1.3.3",
  15 + "eventproxy": "^0.3.4",
  16 + "terser": "^5.44.0",
  17 + "uglify-js": "^2.6.2"
  18 + }
  19 +}
... ...
src/main/resources/fatso/start.js
... ... @@ -16,7 +16,7 @@ var platform = process.platform;
16 16 var iswin = platform == 'win32';
17 17 var sp = platform == 'win32' ? '\\' : '/';
18 18 //不参与的目录
19   -var excludes = ['scheduleApp', 'trafficManage', 'control', 'permission' + sp + 'authorize_all','permission' + sp + 'user', 'summary', 'history_sch', 'report' + sp + 'oil', 'base' + sp + 'geo_data_edit', 'base' + sp + 'carpark', 'forms', 'mforms', 'report', 'punctual', 'base' + sp + 'timesmodel', 'base' + sp + 'stationroute', 'kl', 'dsm']
  19 +var excludes = ['scheduleApp', 'trafficManage', 'control', 'permission' + sp + 'authorize_all','permission' + sp + 'user', 'summary', 'history_sch', 'report' + sp + 'oil', 'base' + sp + 'geo_data_edit', 'base' + sp + 'carpark', 'forms', 'mforms', 'report', 'punctual', 'base' + sp + 'timesmodel', 'kl', 'dsm']
20 20 , ep = new EventProxy()
21 21 , pName = 'bsth_control'
22 22 , path = process.cwd()
... ... @@ -134,9 +134,9 @@ ep.tail(&#39;handle-fragment&#39;, function (file) {
134 134 handleJavascript(file, function (mini, $) {
135 135 var jsMini;
136 136 if (mini.inside)
137   - jsMini = '(function(){' + mini.inside + '\n' + mini.outside + '})();';
  137 + jsMini = '(function(){'+ mini.inside + '\n' + mini.outside + '})();';
138 138 else
139   - jsMini = '(function(){' + mini.outside + '})();';
  139 + jsMini = '(function(){'+ mini.outside + '})();';
140 140  
141 141 write(file, $.html() + '<script>' + jsMini + '</script>');
142 142 });
... ...
src/main/resources/message_en_US.properties
... ... @@ -2629,7 +2629,7 @@ txt-2628=Acquisition success
2629 2629 txt-2629=
2630 2630 txt-2630=Consumption
2631 2631 txt-2631=Execute road sign
2632   -txt-2632=Ooperation or not?
  2632 +txt-2632=Operational or not?
2633 2633 txt-2633=Time type
2634 2634 txt-2634=Template type
2635 2635 txt-2635=Bad shift reason
... ... @@ -3034,7 +3034,7 @@ txt-3033=Start date
3034 3034 txt-3034=End date
3035 3035 txt-3035=Report management
3036 3036 txt-3036=Maintenance report
3037   -txt-3037=Change people and cars
  3037 +txt-3037=Change driver and vehicle
3038 3038 txt-3038=Switch the street signs
3039 3039 txt-3039=Calculate complete
3040 3040 txt-3040=Equipment parameter
... ... @@ -4131,7 +4131,7 @@ txt-4130=Mode
4131 4131 txt-4131=Action
4132 4132 txt-4132=Online
4133 4133 txt-4133=Search
4134   -txt-4134=fter
  4134 +txt-4134=After
4135 4135 txt-4135=Out of sale
4136 4136 txt-4136=Radius
4137 4137 txt-4137=Unit
... ...
src/main/resources/static/pages/base/stationroute/js/routes-operation.js
... ... @@ -1429,7 +1429,7 @@ var RoutesOperation = (function () {
1429 1429 if($($("#versions").find("option:selected")[0]).attr("status") > 0){
1430 1430 htm += '<button class="info_win_btn" id="editStation" onclick="RoutesOperation.editSection(' + sectionRoute.id +','+dir+ ')">' + i18n('txt-4028') + '</button>' +
1431 1431 '<button class="info_win_btn" id="addBetweenStationRoad" onclick="RoutesOperation.destroySection('+ sectionRoute.id + ','+sectionRoute.line.id+','+sectionRoute.directions+')">' + i18n('txt-4211') + '</button>' +
1432   - '<button class="info_win_btn" id="addSectionAfter" onclick="RoutesOperation.addSectionAfter('+sectionRoute.id+')">' + i18n('txt-4361') + '(' + i18n('txt-4134') + ')</button>' +
  1432 + '<button class="info_win_btn" id="addSectionAfter" onclick="RoutesOperation.addSectionAfter('+sectionRoute.id+')">' + i18n('txt-4361') + '</button>' +
1433 1433 '</div>';
1434 1434 }
1435 1435  
... ... @@ -1715,7 +1715,7 @@ var RoutesOperation = (function () {
1715 1715 if($($("#versions").find("option:selected")[0]).attr("status") > 0){
1716 1716 htm += '<button class="info_win_btn" id="editStation" onclick="RoutesOperation.editSection_inout(' + sectionRoute.id +','+dir+ ')">' + i18n('txt-4028') + '</button>' +
1717 1717 '<button class="info_win_btn" id="addBetweenStationRoad" onclick="RoutesOperation.destroySection_inout('+ sectionRoute.id + ','+sectionRoute.line.id+','+sectionRoute.directions+')">' + i18n('txt-4211') + '</button>' +
1718   - '<button class="info_win_btn" id="addSectionAfter" onclick="RoutesOperation.addSectionAfter_inout('+sectionRoute.id+')">' + i18n('txt-4361') + '(' + i18n('txt-4134') + ')</button>' +
  1718 + '<button class="info_win_btn" id="addSectionAfter" onclick="RoutesOperation.addSectionAfter_inout('+sectionRoute.id+')">' + i18n('txt-4361') + '</button>' +
1719 1719 '</div>';
1720 1720 }
1721 1721  
... ...