@subiz/widget-v4 4.1.45 → 4.1.48

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.
Files changed (103) hide show
  1. package/assets/less/message.less +6 -0
  2. package/compiled_src/chatbox/Header.js +1 -2
  3. package/compiled_src/chatbox/ImageAttachments.js +103 -13
  4. package/compiled_src/chatbox/PoweredBy.js +2 -2
  5. package/compiled_src/chatbox/main.js +2 -0
  6. package/compiled_src/store/store.js +18 -2
  7. package/dist/178.js +406 -0
  8. package/dist/18bb951fa49.178.js +1 -0
  9. package/dist/18bb951fa49.213.js +1 -0
  10. package/dist/18bb951fa49.335.js +1 -0
  11. package/dist/18bb951fa49.362.js +1 -0
  12. package/dist/18bb951fa49.605.js +1 -0
  13. package/dist/18bb951fa49.678.js +1 -0
  14. package/dist/18bb951fa49.782.js +1 -0
  15. package/dist/18bb951fa49.841.js +1 -0
  16. package/dist/18bb951fa49.app.js +1 -0
  17. package/dist/18bb951fa49.index.html +33 -0
  18. package/dist/18bb951fa49.library.html +33 -0
  19. package/dist/18bb951fa49.library.js +1 -0
  20. package/dist/18bb951fa49.preview.html +759 -0
  21. package/dist/18bb951fa49.preview.js +1 -0
  22. package/dist/18bb951fa49.screenshoot.js +1 -0
  23. package/dist/18bb951fa49.webview.js +1 -0
  24. package/dist/213.js +2796 -0
  25. package/dist/335.js +372 -0
  26. package/dist/362.js +107 -0
  27. package/dist/605.js +305 -0
  28. package/dist/678.js +107 -0
  29. package/dist/782.js +107 -0
  30. package/dist/841.js +6670 -0
  31. package/dist/HASH +1 -0
  32. package/dist/assets/img/Facebook.64607ec.png +0 -0
  33. package/dist/assets/img/Zalo.6845707.png +0 -0
  34. package/dist/assets/img/award1a.1a58e10.png +0 -0
  35. package/dist/assets/img/award3a.3b74423.png +0 -0
  36. package/dist/assets/img/award4a.ed6ccd4.png +0 -0
  37. package/dist/assets/img/award5.39eb7ae.png +0 -0
  38. package/dist/assets/img/bubble_default.7d5e4ab.svg +20 -0
  39. package/dist/assets/img/caret.998eb8f.svg +1 -0
  40. package/dist/assets/img/convos_empty.2353007.svg +72 -0
  41. package/dist/assets/img/default.06e6ee0.jpg +0 -0
  42. package/dist/assets/img/default_avatar.5b74dc1.png +0 -0
  43. package/dist/assets/img/done_gray.d7e8203.svg +4 -0
  44. package/dist/assets/img/done_green.b817fd4.svg +4 -0
  45. package/dist/assets/img/emoji/messenger/sub_23.529_58.824.d5faf14.png +0 -0
  46. package/dist/assets/img/emoji/messenger/sub_23.529_60.784.1420241.png +0 -0
  47. package/dist/assets/img/emoji/messenger/sub_25.490_0.000.1e6b2c0.png +0 -0
  48. package/dist/assets/img/emoji/messenger/sub_25.490_45.098.3dfbc08.png +0 -0
  49. package/dist/assets/img/emoji/messenger/sub_25.490_5.882.4b49e94.png +0 -0
  50. package/dist/assets/img/emoji/messenger/sub_27.451_72.549.7114f58.png +0 -0
  51. package/dist/assets/img/emoji/messenger/sub_27.451_84.314.231e2b7.png +0 -0
  52. package/dist/assets/img/emoji/messenger/sub_27.451_96.078.ddbb008.png +0 -0
  53. package/dist/assets/img/emoji/messenger/sub_29.412_5.882.61f3359.png +0 -0
  54. package/dist/assets/img/emoji/messenger/sub_58.824_100.000.6df72bc.png +0 -0
  55. package/dist/assets/img/emoji/messenger/sub_58.824_45.098.3d7a7ad.png +0 -0
  56. package/dist/assets/img/emoji/messenger/sub_58.824_47.059.0f4d6e2.png +0 -0
  57. package/dist/assets/img/emoji/messenger/sub_58.824_54.902.65724c1.png +0 -0
  58. package/dist/assets/img/emoji/messenger/sub_58.824_64.706.9da3cba.png +0 -0
  59. package/dist/assets/img/emoji/messenger/sub_58.824_72.549.edca5cf.png +0 -0
  60. package/dist/assets/img/emoji/messenger/sub_58.824_78.431.f910f2a.png +0 -0
  61. package/dist/assets/img/emoji/messenger/sub_58.824_88.235.def4e71.png +0 -0
  62. package/dist/assets/img/emoji/messenger/sub_60.784_11.765.49c03d0.png +0 -0
  63. package/dist/assets/img/emoji/messenger/sub_60.784_27.451.46b54e5.png +0 -0
  64. package/dist/assets/img/emoji/messenger/sub_60.784_29.412.e36d284.png +0 -0
  65. package/dist/assets/img/emoji/messenger/sub_60.784_3.922.bb191b0.png +0 -0
  66. package/dist/assets/img/emoji/messenger/sub_60.784_35.294.af7b927.png +0 -0
  67. package/dist/assets/img/emoji/messenger/sub_60.784_7.843.98f2a99.png +0 -0
  68. package/dist/assets/img/empty.29bed2d.svg +23 -0
  69. package/dist/assets/img/empty_1.0b98af0.svg +11 -0
  70. package/dist/assets/img/examplte_logo.f86535f.svg +1 -0
  71. package/dist/assets/img/external-link.90577cc.svg +1 -0
  72. package/dist/assets/img/fb_inverse_circle.36c2cfc.png +0 -0
  73. package/dist/assets/img/ghn.070f8e3.svg +17 -0
  74. package/dist/assets/img/ghtk.326eac1.svg +18 -0
  75. package/dist/assets/img/image_default.be0698b.png +0 -0
  76. package/dist/assets/img/info.ebce7ea.svg +1 -0
  77. package/dist/assets/img/loader.37000a7.svg +1 -0
  78. package/dist/assets/img/loading_static.a27f0ac.svg +10 -0
  79. package/dist/assets/img/main-service1.d536cc2.png +0 -0
  80. package/dist/assets/img/main-service2.9b99549.png +0 -0
  81. package/dist/assets/img/not_found_search.2ddb8d1.png +0 -0
  82. package/dist/assets/img/package.8d37d0f.svg +5 -0
  83. package/dist/assets/img/package_fade.763c001.svg +1 -0
  84. package/dist/assets/img/rating--average.1ea492c.svg +12 -0
  85. package/dist/assets/img/rating--great.e3d712e.svg +16 -0
  86. package/dist/assets/img/rating--poor.2938a25.svg +12 -0
  87. package/dist/assets/img/search.f9705ff.svg +1 -0
  88. package/dist/assets/img/send.6db52a9.svg +3 -0
  89. package/dist/assets/img/shop.f7dc7d8.svg +1 -0
  90. package/dist/assets/img/shop_faded.df7845a.svg +1 -0
  91. package/dist/assets/img/subiz-mono.877e9f5.svg +3 -0
  92. package/dist/assets/img/x.26fdfa3.svg +5 -0
  93. package/dist/malicious-app.js +18 -0
  94. package/dist/screenshoot.html +7 -0
  95. package/dist/screenshoot.js +6455 -0
  96. package/malicious-app.js +8 -3
  97. package/package.json +5 -5
  98. package/src/chatbox/Header.js +1 -1
  99. package/src/chatbox/ImageAttachments.js +109 -15
  100. package/src/chatbox/PoweredBy.js +2 -2
  101. package/src/chatbox/main.js +2 -0
  102. package/src/plugin.js +1 -0
  103. package/src/store/store.js +15 -2
package/malicious-app.js CHANGED
@@ -7,7 +7,12 @@ tag.async = 1
7
7
  tag.src = 'https://public-gcs.subiz-cdn.com/widget-v4/public/' + hash + '.app.js'
8
8
  document.body.appendChild(tag)
9
9
 
10
+ if (document.readyState === "interactive" || document.readyState === "complete") document.body.appendChild(tag)
11
+ else document.addEventListener("DOMContentLoaded", function(event) {
12
+ document.body.appendChild(tag)
13
+ }) //
14
+
10
15
  // record which domain still use old code
11
- // var xhttp = new XMLHttpRequest()
12
- // xhttp.open('GET', 'https://api.sbz.vn/4.0/old', true)
13
- // xhttp.send()
16
+ var xhttp = new XMLHttpRequest()
17
+ xhttp.open('GET', 'https://api.sbz.vn/4.0/old', true)
18
+ xhttp.send()
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@subiz/widget-v4",
3
- "version": "4.1.45",
3
+ "version": "4.1.48",
4
4
  "main": "./compiled_src/lib.js",
5
5
  "scripts": {
6
6
  "dev": "npx webpack serve --config webpack.dev.js",
@@ -19,19 +19,19 @@
19
19
  "file-loader": "^6.2.0",
20
20
  "less": "^4.2.0",
21
21
  "less-loader": "^11.1.3",
22
- "preact": "^10.18.1"
22
+ "preact": "^10.18.2"
23
23
  },
24
24
  "devDependencies": {
25
25
  "@babel/cli": "^7.23.0",
26
- "@babel/core": "^7.23.0",
26
+ "@babel/core": "^7.23.3",
27
27
  "@babel/plugin-proposal-class-properties": "^7.18.6",
28
28
  "@babel/plugin-transform-react-jsx": "^7.22.15",
29
- "@babel/preset-env": "^7.22.20",
29
+ "@babel/preset-env": "^7.23.3",
30
30
  "babel-loader": "^9.1.3",
31
31
  "babel-plugin-syntax-jsx": "^6.18.0",
32
32
  "html-webpack-plugin": "^5.5.3",
33
33
  "prettier": "^3.0.3",
34
- "puppeteer": "^21.3.8",
34
+ "puppeteer": "^21.5.1",
35
35
  "webpack": "^5.88.2",
36
36
  "webpack-bundle-analyzer": "^4.9.1",
37
37
  "webpack-cli": "^5.1.4",
@@ -84,7 +84,7 @@ export default class Header extends Com {
84
84
 
85
85
  return (
86
86
  <div>
87
- <a href={link.url} target='_blank' title={link.url} rel='noreferrer'>
87
+ <a href={link.url} target='_blank' title={link.url}>
88
88
  <i class={`social__links-logo social__links-logo--${link.type}`}></i>
89
89
  </a>
90
90
  </div>
@@ -1,10 +1,107 @@
1
1
  import sb from '../util/index.js'
2
2
  import {Com} from '../common.js'
3
- import {h} from 'preact'
3
+ import {h, createRef} from 'preact'
4
4
 
5
5
  export default class ImageAttachment extends Com {
6
6
  constructor(props) {
7
7
  super(props)
8
+ this.setState({
9
+ ready: false,
10
+ errorIndecies: [],
11
+ })
12
+ }
13
+
14
+ containerRef = createRef()
15
+ componentDidMount() {
16
+ this.setImageFrameDimension()
17
+ }
18
+
19
+ setImageFrameDimension() {
20
+ const MAX_HEIGHT = 240
21
+ const DEFAULT_MAX_WIDTH = 267
22
+
23
+ let $container = this.containerRef.current
24
+ this.frameWidth = $container ? $container.offsetWidth : DEFAULT_MAX_WIDTH
25
+ this.frameHeight = MAX_HEIGHT
26
+ this.setState({
27
+ ready: true,
28
+ })
29
+ }
30
+
31
+ onErrorImage(index) {
32
+ let indecies = this.state.errorIndecies || []
33
+ indecies.push(index)
34
+ indecies = [...indecies]
35
+
36
+ this.setState({errorIndecies: indecies})
37
+ }
38
+
39
+ calculateImageDimension(image) {
40
+ if (!image.width || !image.height) return {width: this.frameWidth, height: this.frameHeight}
41
+
42
+ let ratio = image.width / image.height - this.frameWidth / this.frameHeight
43
+ if (ratio >= 0) {
44
+ let width = this.frameWidth
45
+ let height = (image.height * this.frameWidth) / image.width
46
+ height = Math.round(height)
47
+ return {width, height}
48
+ } else {
49
+ let height = this.frameHeight
50
+ let width = (image.width * this.frameHeight) / image.height
51
+ width = Math.round(width)
52
+ return {width, height}
53
+ }
54
+ }
55
+
56
+ renderImage(image, index) {
57
+ if (!this.state.ready) {
58
+ return
59
+ }
60
+ let byType = sb.get(this.props.ev, 'by.type')
61
+
62
+ if (!image.width || !image.height) {
63
+ return (
64
+ <div class={`image-attachment image-attachment--${byType}`}>
65
+ <a href={this.props.store.replaceFileUrl(image.url)} target='_blank'>
66
+ <img
67
+ alt
68
+ class='image-attachment__img'
69
+ src={this.props.store.replaceFileUrl(image.thumbnail_url || image.url)}
70
+ onload={(e) => this.props.onLoad && this.props.onLoad()}
71
+ />
72
+ </a>
73
+ </div>
74
+ )
75
+ }
76
+
77
+ let {width, height} = this.calculateImageDimension(image)
78
+ let url = this.props.store.replaceFileUrl(image.thumbnail_url || image.url)
79
+ let trueUrl = this.props.store.replaceFileUrl(image.url)
80
+ if (this.state.errorIndecies.includes(index)) {
81
+ url = require('../../assets/img/default.jpg')
82
+ trueUrl = url
83
+ }
84
+
85
+ return (
86
+ <div class={`image-attachment image-attachment--${byType}`}>
87
+ <a href={trueUrl} target='_blank'>
88
+ <img
89
+ alt
90
+ ref={(el) => {
91
+ if (el) {
92
+ // must use this trick because React doesn't support set style important directly
93
+ el.style.setProperty('width', `${width}px`, 'important')
94
+ el.style.setProperty('height', `${height}px`, 'important')
95
+ }
96
+ }}
97
+ class='image-attachment__img'
98
+ src={url}
99
+ onload={(e) => this.props.onLoad && this.props.onLoad()}
100
+ onerror={(e) => this.onErrorImage(index)}
101
+ />
102
+ </a>
103
+ </div>
104
+ )
8
105
  }
9
106
 
10
107
  render() {
@@ -31,23 +128,20 @@ export default class ImageAttachment extends Com {
31
128
 
32
129
  if (images.length === 0) return null
33
130
 
34
- var $images = sb.map(images, (image, index) => (
35
- <div class={`image-attachment image-attachment--${byType}`}>
36
- <a href={this.props.store.replaceFileUrl(image.thumbnail_url || image.url)} target='_blank'>
37
- <img
38
- alt
39
- class='image-attachment__img'
40
- src={this.props.store.replaceFileUrl(image.thumbnail_url || image.url)}
41
- onload={(e) => this.props.onLoad && this.props.onLoad()}
42
- />
43
- </a>
44
- </div>
45
- ))
131
+ let $images = sb.map(images, (image, index) => this.renderImage(image, index))
46
132
 
47
133
  if (byType === 'agent') {
48
- return <div class='message-agent'>{$images}</div>
134
+ return (
135
+ <div class='message-agent' ref={this.containerRef}>
136
+ {$images}
137
+ </div>
138
+ )
49
139
  } else {
50
- return <div class='message-user'>{$images}</div>
140
+ return (
141
+ <div class='message-user message-user-images-container' ref={this.containerRef}>
142
+ {$images}
143
+ </div>
144
+ )
51
145
  }
52
146
  }
53
147
  }
@@ -17,8 +17,8 @@ export default class PoweredBy extends Com {
17
17
 
18
18
  return (
19
19
  <div class='poweredby'>
20
- <a href={link} class='poweredby--text' target='_blank' rel='noreferrer'>
21
- <img width='14' height='10' class='poweredby--subiz-logo' src={logo} alt='power by' /> Subiz
20
+ <a href={link} class='poweredby--text' target='_blank' title='Subiz'>
21
+ <img width='14' height='10' class='poweredby--subiz-logo' src={logo} alt='power by subiz' /> Subiz
22
22
  </a>
23
23
  </div>
24
24
  )
@@ -192,6 +192,7 @@ export default class Main extends Com {
192
192
  function restoreViewport() {
193
193
  // restore scroll attribute for background document
194
194
  if (document.body && document.body.classList) document.body.classList.remove('sbz_no_scroll')
195
+ if (document.documentElement && document.documentElement.classList) document.documentElement.classList.remove('sbz_no_scroll')
195
196
  let metatag = document.getElementById('subiz-meta-viewport')
196
197
  if (metatag) metatag.remove()
197
198
  }
@@ -199,6 +200,7 @@ function restoreViewport() {
199
200
  function modifyViewport() {
200
201
  // dont allow to scroll background document
201
202
  if (document.body && document.body.classList) document.body.classList.add('sbz_no_scroll')
203
+ if (document.documentElement && document.documentElement.classList) document.documentElement.classList.add('sbz_no_scroll')
202
204
  let metatag = document.createElement('meta')
203
205
  metatag.httpEquiv = 'X-UA-Compatible'
204
206
  metatag.name = 'viewport'
package/src/plugin.js CHANGED
@@ -11,6 +11,7 @@ function Plugin(plugin, store, $container, lib) {
11
11
  if (!$container) throw '$div must is a valid html node'
12
12
  var $div = document.createElement('div')
13
13
  $div.id = plugin.id
14
+ $div.setAttribute('sbz-plugin-type', plugin.type)
14
15
  $container.appendChild($div) // use body as container
15
16
 
16
17
  // auto detect language first
@@ -913,7 +913,10 @@ export default class Store {
913
913
  if (!att._file) return
914
914
  files.push(att)
915
915
  if (ImageTypes.includes(att._file.type)) {
916
- att.url = await loadImage(att._file)
916
+ let {width, height, url} = await loadImage(att._file)
917
+ att.url = url
918
+ att.width = width
919
+ att.height = height
917
920
  }
918
921
  })
919
922
  }
@@ -1163,7 +1166,17 @@ function loadImage(file) {
1163
1166
  reader.onload = (e) => {
1164
1167
  // after load all img data into the RAM, find update the corresponse attachment
1165
1168
  // since the attachment is very deep, we must force rerender
1166
- rs(e.target.result) // url
1169
+ //rs(e.target.result) // url
1170
+ let src = e.target.result
1171
+ let img = new Image()
1172
+ img.onload = () => {
1173
+ rs({
1174
+ url: src,
1175
+ width: img.width,
1176
+ height: img.height,
1177
+ })
1178
+ }
1179
+ img.src = src
1167
1180
  }
1168
1181
  reader.readAsDataURL(file)
1169
1182
  })