scale-web 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,45 @@
1
+ <!--
2
+ * @Author: liujie tiandiweb@qq.com
3
+ * @Date: 2022-11-28 11:14:46
4
+ * @LastEditors: liujie tiandiweb@qq.com
5
+ * @LastEditTime: 2022-11-28 11:53:56
6
+ * @FilePath: \mk-webd:\work\svgdemo\css-scale2\README.md
7
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
8
+ -->
9
+ # css-scale
10
+ 屏幕适配插件,采用scale模式,只需要简单配置即可实现scale。
11
+ # Usage
12
+ 调用函数 cssScale(_scaleSplitPix,_effectScreen,__config);
13
+ _scaleSplitPix:决定缩放时基于的像素。
14
+
15
+ 例子:var _scaleSplitPix = {
16
+ minPix: 1766,//当屏幕在小屏时候,以1766进行缩放。
17
+ maxPix: 1920,//当屏幕在大屏时候,以1920进行缩放。
18
+ };
19
+
20
+ _effectScreen:生效的屏幕尺寸
21
+
22
+ 例子:var _effectScreen = {
23
+ minScreenSize: 1540,//宽度小于1540像素的屏幕为小屏
24
+ maxScreenSize: 1920,//宽度大于1920像素的屏幕为大屏。
25
+ };
26
+
27
+ __config:其他配置
28
+
29
+ 例子:var __config = {
30
+ forceMinScale:false,//在大屏时是否强制开启缩放。
31
+ forbidMinScale:false,//在大屏时候,是否禁止进行缩放
32
+ selector:'#response',//需要缩放的容器,
33
+ parentSelector:'#app',//需要缩放容器的父容器,父容器的父节点的宽高需要100%,如果是body,则 body和html都要 width:100%,height:100%。
34
+ // boxMinWidth:900,
35
+ // boxMinHeight:450,
36
+ // enable:false,//是否开启功能 false禁用,true 任何情况都缩放 ,不设置则按照条件
37
+ onScale:function(scale){//缩放后调用
38
+ //参数 scale:缩放率
39
+ console.log('缩放完成,缩放率:'+scale)
40
+ },
41
+ onReady:function(isScale){//准备缩放时候调用
42
+ //参数 isScale:根据屏幕判断是否需要进行缩放
43
+ console.log('你的屏幕是否需要缩放:'+isScale)
44
+ },
45
+ };
Binary file
@@ -0,0 +1,85 @@
1
+ <!--
2
+ * @Author: liujie tiandiweb@qq.com
3
+ * @Date: 2022-10-26 16:10:38
4
+ * @LastEditors: liujie tiandiweb@qq.com
5
+ * @LastEditTime: 2022-11-28 10:58:00
6
+ * @FilePath: \mk-webd:\work\svgdemo\scale.html
7
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
8
+ -->
9
+ <!DOCTYPE html>
10
+ <html>
11
+
12
+ <head>
13
+ <meta charset="utf-8">
14
+ <title></title>
15
+ <style>
16
+ html,
17
+ body {
18
+ width: 100%;
19
+ height: 100%;
20
+ }
21
+
22
+ * {
23
+ margin: 0;
24
+ padding: 0;
25
+ }
26
+ /* html {
27
+ overflow: hidden;
28
+ }
29
+ body {
30
+ overflow: scroll;
31
+ } */
32
+ #app{
33
+ width: 100%;
34
+ height: 100%;
35
+
36
+ }
37
+
38
+ </style>
39
+ </head>
40
+
41
+ <body>
42
+ <div id="app">
43
+ <div id="response"
44
+ style="overflow: auto;"
45
+ >
46
+ <div
47
+ id="content"
48
+ style="
49
+ width: 100%; height:100%;
50
+ ">
51
+ <img id="img" width="100%" height="100%" src="./big-screen.png" alt="" style="display:block;">
52
+ </div>
53
+ </div>
54
+ </div>
55
+ <script src="../dist/css-scale-min.js"></script>
56
+ <script>
57
+ var _scaleSplitPix = {
58
+ minPix: 1766,
59
+ maxPix: 1920,
60
+ };
61
+ var _effectScreen = {
62
+ minScreenSize: 1540,
63
+ maxScreenSize: 1920,
64
+ };
65
+ var __config = {
66
+ forceMinScale:false,//For Middle Screen
67
+ forbidMinScale:false,//ForBigScreen
68
+ selector:'#response',
69
+ parentSelector:'#app',
70
+ // boxMinWidth:900,
71
+ // boxMinHeight:450,
72
+ // enable:false,//是否开启功能 false禁用,true 任何情况都缩放 ,不设置则按照条件
73
+ onScale:function(scale){
74
+ console.log('缩放完成,缩放率:'+scale)
75
+ },
76
+ onReady:function(isScale){
77
+ console.log('你的屏幕是否需要缩放:'+isScale)
78
+ },
79
+ };
80
+
81
+ cssScale(_scaleSplitPix,_effectScreen,__config);
82
+ </script>
83
+ </body>
84
+
85
+ </html>
@@ -0,0 +1,110 @@
1
+ <!--
2
+ * @Author: liujie tiandiweb@qq.com
3
+ * @Date: 2022-10-26 16:10:38
4
+ * @LastEditors: liujie tiandiweb@qq.com
5
+ * @LastEditTime: 2022-11-28 10:58:00
6
+ * @FilePath: \mk-webd:\work\svgdemo\scale.html
7
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
8
+ -->
9
+ <!DOCTYPE html>
10
+ <html>
11
+
12
+ <head>
13
+ <meta charset="utf-8">
14
+ <title></title>
15
+ <style>
16
+ html,
17
+ body {
18
+ width: 100%;
19
+ height: 100%;
20
+ }
21
+
22
+ * {
23
+ margin: 0;
24
+ padding: 0;
25
+ }
26
+ /* html {
27
+ overflow: hidden;
28
+ }
29
+ body {
30
+ overflow: scroll;
31
+ } */
32
+ #app{
33
+ width: 100%;
34
+ height: 100%;
35
+
36
+ }
37
+
38
+ </style>
39
+ </head>
40
+
41
+ <body>
42
+ <div id="app">
43
+ <div id="response"
44
+ style="overflow: auto;"
45
+ >
46
+ <div
47
+ id="content"
48
+ style="
49
+ width: 100%; height:100%;
50
+ background-color: royalblue;
51
+ ">
52
+ <div style="font-size: 12px;">12PX d 的文字</div>
53
+ <div style="font-size: 13px;width: 900px;">13PX d 的文字</div>
54
+ <div style="font-size: 14px;">14PX d 的文字</div>
55
+ <div style="font-size: 15px;">15PX d 的文字</div>
56
+ <div style="font-size: 16px;">16PX d 的文字</div>
57
+ <div style="font-size: 17px;">17PX d 的文字</div>
58
+ <div style="font-size: 18px;">18PX d 的文字</div>
59
+ <div style="font-size: 20px;">20PX d 的文字</div>
60
+
61
+ <h1 id="msg"></h1>
62
+
63
+ </div>
64
+ </div>
65
+ </div>
66
+ <script src="../dist/scale-web-min.js"></script>
67
+ <script>
68
+ var _scaleSplitPix = {
69
+ minPix: 1766,
70
+ maxPix: 1920,
71
+ };
72
+ var _effectScreen = {
73
+ minScreenSize: 1540,
74
+ maxScreenSize: 1920,
75
+ };
76
+ if(window.screen.width>_effectScreen.minScreenSize || window.screen.width<=_effectScreen.maxScreenSize){
77
+ //不生效。
78
+ var msg = "缩放效果在你的屏幕不会生效,因为你的 屏幕宽:"+window.screen.width+"px 介于 "+_effectScreen.minScreenSize+" 和 "+_effectScreen.maxScreenSize+"(含)之间,在此配置期间是不会产生缩放效果。";
79
+ document.getElementById('msg').innerText = msg;
80
+ }else {
81
+ //生效
82
+ if(window.screen.width<=_effectScreen.minScreenSize) {
83
+ var msg = "你的屏幕宽:window.screen.width 小于或等于 _effectScreen.minScreenSize,属于小屏幕,达到缩放条件,会将你的内容缩小以适配屏幕。";
84
+ document.getElementById('msg').innerText = msg;
85
+ } else if(window.screen.width>_effectScreen.maxScreenSize) {
86
+ var msg = "你的屏幕宽:window.screen.width 大于 _effectScreen.minScreenSize,属于超大屏幕,达到缩放条件,会将你的内容放大以适配屏幕。";
87
+ document.getElementById('msg').innerText = msg;
88
+ }
89
+ }
90
+ var __config = {
91
+ forceMinScale:false,//For Middle Screen
92
+ forbidMinScale:false,//ForBigScreen
93
+ selector:'#response',
94
+ parentSelector:'#app',
95
+ // boxMinWidth:900,
96
+ // boxMinHeight:450,
97
+ // enable:false,//是否开启功能 false禁用,true 任何情况都缩放 ,不设置则按照条件
98
+ onScale:function(scale){
99
+ console.log('缩放完成,缩放率:'+scale)
100
+ },
101
+ onReady:function(isScale){
102
+ console.log('你的屏幕是否需要缩放:'+isScale)
103
+ },
104
+ };
105
+
106
+ cssScale(_scaleSplitPix,_effectScreen,__config);
107
+ </script>
108
+ </body>
109
+
110
+ </html>
package/dist/index.js ADDED
@@ -0,0 +1,9 @@
1
+ /*
2
+ * @Author: liujie tiandiweb@qq.com
3
+ * @Date: 2022-11-28 11:15:02
4
+ * @LastEditors: liujie tiandiweb@qq.com
5
+ * @LastEditTime: 2022-11-28 11:40:21
6
+ * @FilePath: \mk-webd:\work\svgdemo\css-scale2\dist\index.js
7
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
8
+ */
9
+ module.exports=function cssScale(_scaleSplitPix,_effectScreen,__config) {var _0x533b=['maxScreenSize','forceMinScale','html','minHeight','offsetWidth','enable','onReady','body','screen','querySelector','overflow','maxScreenSizeSplit','transform','offsetHeight','maxPix','addEventListener','top\x20left','minWidth','height','boxMinHeight','parentSelector','onScale','selector','width','resize','forbidMinScale','style','boxMinWidth'];var _0x48bf=function(_0x533b64,_0x48bf56){_0x533b64=_0x533b64-0x0;var _0x4140fe=_0x533b[_0x533b64];return _0x4140fe;};(function(_0x4fe8aa,_0x14ff67,_0xe24ac0){let _0x23e0b1=_0x4fe8aa['minPix']||0x556;var _0x96cee6=_0x4fe8aa[_0x48bf('0xe')]==undefined?_0x14ff67[_0x48bf('0x0')]?_0x14ff67['maxScreenSize']:![]:_0x4fe8aa[_0x48bf('0xe')];let _0x1be0ad=_0xe24ac0?_0xe24ac0:{};_0x1be0ad[_0x48bf('0x1b')]=_0x1be0ad[_0x48bf('0x1b')]?_0x1be0ad['boxMinWidth']:0x384;_0x1be0ad['boxMinHeight']=_0x1be0ad[_0x48bf('0x13')]?_0x1be0ad['boxMinHeight']:0x384*(0x384/window[_0x48bf('0x8')][_0x48bf('0x17')]);_0x1be0ad[_0x48bf('0x16')]=_0x1be0ad[_0x48bf('0x16')]?_0x1be0ad['selector']:_0x48bf('0x7');_0x1be0ad[_0x48bf('0x14')]=_0x1be0ad['parentSelector']?_0x1be0ad['parentSelector']:_0x48bf('0x2');_0x1be0ad['minScreenSizeSplit']=_0x14ff67['minScreenSize']?_0x14ff67['minScreenSize']:0x5a0;_0x1be0ad['maxScreenSizeSplit']=_0x14ff67[_0x48bf('0x0')]?_0x14ff67['maxScreenSize']:0x780;var _0x395a99=![];var _0x5de370=![];var _0x552cbb=_0xbe9c9e(_0x1be0ad['selector']);_0x552cbb['style']['width']='100%';_0x552cbb[_0x48bf('0x1a')]['height']='100%';if(_0x1be0ad['enable']==![]){_0x1be0ad[_0x48bf('0x6')]&&_0x1be0ad['onReady'](![]);return;}window[_0x48bf('0xf')]('load',function(){_0x115da8();},![]);window[_0x48bf('0xf')](_0x48bf('0x18'),function(){_0x115da8();},![]);window['addEventListener']('fullscreenchange',function(){_0x115da8();},![]);var _0x1111a8=null;var _0x42126d=0x1;function _0x115da8(){_0x291e73();if(!_0x3e30fd()){_0x3039a4(![]);return;}var _0xded359=_0xbe9c9e(_0x1be0ad['selector']);_0xded359['style']['transformOrigin']=_0x48bf('0x10');if(_0x1111a8['offsetWidth']<=_0x23e0b1||_0x96cee6&&_0x1111a8['offsetWidth']>_0x96cee6){if(_0x1111a8['offsetWidth']<=_0x23e0b1){_0x42126d=_0x1111a8[_0x48bf('0x4')]/_0x23e0b1;}else{_0x42126d=_0x1111a8['offsetWidth']/_0x96cee6;}var _0x313be8=_0x1111a8[_0x48bf('0x4')]/_0x42126d;var _0x3a1f18=_0x1111a8['offsetHeight']/_0x42126d;setTimeout(function(){var _0x250f55=_0x1111a8[_0x48bf('0xd')]/_0x42126d;if(_0x3a1f18!==_0x250f55){_0xded359['style'][_0x48bf('0x12')]=_0x250f55+'px';}_0x3039a4(!![]);_0x1be0ad['onScale']&&_0x1be0ad[_0x48bf('0x15')](_0x42126d);},0x1);_0xded359['style']['width']=_0x313be8+'px';_0xded359[_0x48bf('0x1a')]['height']=_0x3a1f18+'px';_0x1111a8[_0x48bf('0x1a')]['overflow']='hidden';_0xded359[_0x48bf('0x1a')][_0x48bf('0xc')]='scale('+_0x42126d+')';_0x5de370=!![];}else{_0x3039a4(![]);if(_0x5de370==!![]){_0xded359[_0x48bf('0x1a')]['transform']='scale(1)';_0xded359[_0x48bf('0x1a')]['width']='100%';_0xded359[_0x48bf('0x1a')]['height']='100%';_0x1111a8['style'][_0x48bf('0xa')]='hidden';}}}function _0xbe9c9e(_0x34bb00){return document[_0x48bf('0x9')](_0x34bb00);}function _0x3039a4(_0x316a72){if(_0x395a99==![]){_0x1be0ad['onReady']&&_0x1be0ad[_0x48bf('0x6')](_0x316a72);_0x395a99=!![];}}function _0x291e73(){if(_0x1111a8==null){_0x1111a8=_0xbe9c9e(_0x1be0ad['parentSelector']);if(_0x1be0ad['boxMinWidth']){_0x1111a8['style'][_0x48bf('0x11')]=_0x1be0ad[_0x48bf('0x1b')]+'px';}if(_0x1be0ad[_0x48bf('0x13')]){_0x1111a8[_0x48bf('0x1a')][_0x48bf('0x3')]=_0x1be0ad['boxMinHeight']+'px';}}}function _0x51849f(){return window['screen'][_0x48bf('0x17')]<=_0x1be0ad['minScreenSizeSplit']?!![]:![]||window['screen']['width']>_0x1be0ad['maxScreenSizeSplit']?!![]:![];}function _0x3e30fd(){if(_0x1be0ad[_0x48bf('0x5')]){return!![];}if(_0x1be0ad[_0x48bf('0x1')]&&_0x1111a8[_0x48bf('0x4')]<=_0x1be0ad['minScreenSizeSplit']&&window['screen'][_0x48bf('0x17')]<=_0x1be0ad[_0x48bf('0xb')]){return!![];}if(_0x1be0ad[_0x48bf('0x19')]&&_0x1111a8['offsetWidth']<=_0x1be0ad['minScreenSizeSplit']&&window[_0x48bf('0x8')][_0x48bf('0x17')]>_0x1be0ad[_0x48bf('0xb')]){return![];}return _0x51849f();}}(_scaleSplitPix,_effectScreen,__config));}
@@ -0,0 +1,9 @@
1
+ /*
2
+ * @Author: liujie tiandiweb@qq.com
3
+ * @Date: 2022-11-28 11:15:02
4
+ * @LastEditors: liujie tiandiweb@qq.com
5
+ * @LastEditTime: 2022-11-28 11:36:10
6
+ * @FilePath: \mk-webd:\work\svgdemo\css-scale2\dist\css-scale-min.js
7
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
8
+ */
9
+ function cssScale(_scaleSplitPix,_effectScreen,__config) {var _0x533b=['maxScreenSize','forceMinScale','html','minHeight','offsetWidth','enable','onReady','body','screen','querySelector','overflow','maxScreenSizeSplit','transform','offsetHeight','maxPix','addEventListener','top\x20left','minWidth','height','boxMinHeight','parentSelector','onScale','selector','width','resize','forbidMinScale','style','boxMinWidth'];var _0x48bf=function(_0x533b64,_0x48bf56){_0x533b64=_0x533b64-0x0;var _0x4140fe=_0x533b[_0x533b64];return _0x4140fe;};(function(_0x4fe8aa,_0x14ff67,_0xe24ac0){let _0x23e0b1=_0x4fe8aa['minPix']||0x556;var _0x96cee6=_0x4fe8aa[_0x48bf('0xe')]==undefined?_0x14ff67[_0x48bf('0x0')]?_0x14ff67['maxScreenSize']:![]:_0x4fe8aa[_0x48bf('0xe')];let _0x1be0ad=_0xe24ac0?_0xe24ac0:{};_0x1be0ad[_0x48bf('0x1b')]=_0x1be0ad[_0x48bf('0x1b')]?_0x1be0ad['boxMinWidth']:0x384;_0x1be0ad['boxMinHeight']=_0x1be0ad[_0x48bf('0x13')]?_0x1be0ad['boxMinHeight']:0x384*(0x384/window[_0x48bf('0x8')][_0x48bf('0x17')]);_0x1be0ad[_0x48bf('0x16')]=_0x1be0ad[_0x48bf('0x16')]?_0x1be0ad['selector']:_0x48bf('0x7');_0x1be0ad[_0x48bf('0x14')]=_0x1be0ad['parentSelector']?_0x1be0ad['parentSelector']:_0x48bf('0x2');_0x1be0ad['minScreenSizeSplit']=_0x14ff67['minScreenSize']?_0x14ff67['minScreenSize']:0x5a0;_0x1be0ad['maxScreenSizeSplit']=_0x14ff67[_0x48bf('0x0')]?_0x14ff67['maxScreenSize']:0x780;var _0x395a99=![];var _0x5de370=![];var _0x552cbb=_0xbe9c9e(_0x1be0ad['selector']);_0x552cbb['style']['width']='100%';_0x552cbb[_0x48bf('0x1a')]['height']='100%';if(_0x1be0ad['enable']==![]){_0x1be0ad[_0x48bf('0x6')]&&_0x1be0ad['onReady'](![]);return;}window[_0x48bf('0xf')]('load',function(){_0x115da8();},![]);window[_0x48bf('0xf')](_0x48bf('0x18'),function(){_0x115da8();},![]);window['addEventListener']('fullscreenchange',function(){_0x115da8();},![]);var _0x1111a8=null;var _0x42126d=0x1;function _0x115da8(){_0x291e73();if(!_0x3e30fd()){_0x3039a4(![]);return;}var _0xded359=_0xbe9c9e(_0x1be0ad['selector']);_0xded359['style']['transformOrigin']=_0x48bf('0x10');if(_0x1111a8['offsetWidth']<=_0x23e0b1||_0x96cee6&&_0x1111a8['offsetWidth']>_0x96cee6){if(_0x1111a8['offsetWidth']<=_0x23e0b1){_0x42126d=_0x1111a8[_0x48bf('0x4')]/_0x23e0b1;}else{_0x42126d=_0x1111a8['offsetWidth']/_0x96cee6;}var _0x313be8=_0x1111a8[_0x48bf('0x4')]/_0x42126d;var _0x3a1f18=_0x1111a8['offsetHeight']/_0x42126d;setTimeout(function(){var _0x250f55=_0x1111a8[_0x48bf('0xd')]/_0x42126d;if(_0x3a1f18!==_0x250f55){_0xded359['style'][_0x48bf('0x12')]=_0x250f55+'px';}_0x3039a4(!![]);_0x1be0ad['onScale']&&_0x1be0ad[_0x48bf('0x15')](_0x42126d);},0x1);_0xded359['style']['width']=_0x313be8+'px';_0xded359[_0x48bf('0x1a')]['height']=_0x3a1f18+'px';_0x1111a8[_0x48bf('0x1a')]['overflow']='hidden';_0xded359[_0x48bf('0x1a')][_0x48bf('0xc')]='scale('+_0x42126d+')';_0x5de370=!![];}else{_0x3039a4(![]);if(_0x5de370==!![]){_0xded359[_0x48bf('0x1a')]['transform']='scale(1)';_0xded359[_0x48bf('0x1a')]['width']='100%';_0xded359[_0x48bf('0x1a')]['height']='100%';_0x1111a8['style'][_0x48bf('0xa')]='hidden';}}}function _0xbe9c9e(_0x34bb00){return document[_0x48bf('0x9')](_0x34bb00);}function _0x3039a4(_0x316a72){if(_0x395a99==![]){_0x1be0ad['onReady']&&_0x1be0ad[_0x48bf('0x6')](_0x316a72);_0x395a99=!![];}}function _0x291e73(){if(_0x1111a8==null){_0x1111a8=_0xbe9c9e(_0x1be0ad['parentSelector']);if(_0x1be0ad['boxMinWidth']){_0x1111a8['style'][_0x48bf('0x11')]=_0x1be0ad[_0x48bf('0x1b')]+'px';}if(_0x1be0ad[_0x48bf('0x13')]){_0x1111a8[_0x48bf('0x1a')][_0x48bf('0x3')]=_0x1be0ad['boxMinHeight']+'px';}}}function _0x51849f(){return window['screen'][_0x48bf('0x17')]<=_0x1be0ad['minScreenSizeSplit']?!![]:![]||window['screen']['width']>_0x1be0ad['maxScreenSizeSplit']?!![]:![];}function _0x3e30fd(){if(_0x1be0ad[_0x48bf('0x5')]){return!![];}if(_0x1be0ad[_0x48bf('0x1')]&&_0x1111a8[_0x48bf('0x4')]<=_0x1be0ad['minScreenSizeSplit']&&window['screen'][_0x48bf('0x17')]<=_0x1be0ad[_0x48bf('0xb')]){return!![];}if(_0x1be0ad[_0x48bf('0x19')]&&_0x1111a8['offsetWidth']<=_0x1be0ad['minScreenSizeSplit']&&window[_0x48bf('0x8')][_0x48bf('0x17')]>_0x1be0ad[_0x48bf('0xb')]){return![];}return _0x51849f();}}(_scaleSplitPix,_effectScreen,__config));}
package/package.json ADDED
@@ -0,0 +1,19 @@
1
+ {
2
+ "name": "scale-web",
3
+ "version": "1.0.2",
4
+ "description": "web page zoom",
5
+ "main": "dist/index.js",
6
+ "repository": "https://github.com/qew4/scale-web.git",
7
+ "scripts": {
8
+ "test": "echo \"Error: no test specified\" && exit 1"
9
+ },
10
+ "keywords": [
11
+ "web",
12
+ "page",
13
+ "zoom",
14
+ "web",
15
+ "scale"
16
+ ],
17
+ "author": "liujie",
18
+ "license": "ISC"
19
+ }