bg2e-js 2.3.11 → 2.3.13

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 (148) hide show
  1. package/dist/bg2e-js.js +356 -326
  2. package/dist/bg2e-js.js.map +1 -1
  3. package/package.json +56 -56
  4. package/src/app/AppController.ts +39 -39
  5. package/src/app/Bg2KeyboardEvent.ts +54 -54
  6. package/src/app/Bg2MouseEvent.ts +82 -82
  7. package/src/app/Bg2TouchEvent.ts +18 -18
  8. package/src/app/Canvas.ts +108 -108
  9. package/src/app/EventBase.ts +10 -10
  10. package/src/app/MainLoop.ts +273 -273
  11. package/src/app/index.ts +24 -24
  12. package/src/base/Color.ts +134 -134
  13. package/src/base/Environment.ts +183 -183
  14. package/src/base/Light.ts +192 -192
  15. package/src/base/Material.ts +620 -620
  16. package/src/base/PolyList.ts +365 -365
  17. package/src/base/Texture.ts +620 -620
  18. package/src/base/index.ts +81 -81
  19. package/src/db/Bg2LoaderPlugin.ts +143 -143
  20. package/src/db/DBPluginApi.ts +48 -48
  21. package/src/db/Loader.ts +116 -116
  22. package/src/db/LoaderPlugin.ts +34 -34
  23. package/src/db/MtlParser.ts +7 -7
  24. package/src/db/ObjLoaderPlugin.ts +54 -54
  25. package/src/db/ObjParser.ts +252 -252
  26. package/src/db/ObjWriterPlugin.ts +18 -18
  27. package/src/db/VitscnjLoaderPlugin.ts +112 -112
  28. package/src/db/Writer.ts +52 -52
  29. package/src/db/WriterPlugin.ts +22 -22
  30. package/src/db/index.ts +44 -44
  31. package/src/debug/DebugRenderer.ts +173 -173
  32. package/src/debug/WebGLTextureViewer.ts +75 -75
  33. package/src/debug/index.ts +6 -6
  34. package/src/index.html +11 -11
  35. package/src/index.ts +33 -33
  36. package/src/manipulation/SelectionBuffer.ts +81 -81
  37. package/src/manipulation/SelectionHighlight.ts +105 -84
  38. package/src/manipulation/SelectionIdAssignVisitor.ts +96 -96
  39. package/src/manipulation/SelectionManager.ts +196 -188
  40. package/src/manipulation/SelectionMode.ts +6 -6
  41. package/src/math/Mat3.ts +259 -259
  42. package/src/math/Mat4.ts +710 -710
  43. package/src/math/MatrixStrategy.ts +25 -25
  44. package/src/math/Quat.ts +65 -65
  45. package/src/math/Vec.ts +753 -753
  46. package/src/math/constants.ts +46 -46
  47. package/src/math/functions.ts +103 -103
  48. package/src/math/index.ts +74 -74
  49. package/src/phsics/joint.ts +137 -137
  50. package/src/primitives/arrow.ts +57 -57
  51. package/src/primitives/cone.ts +138 -138
  52. package/src/primitives/cube.ts +60 -60
  53. package/src/primitives/cylinder.ts +216 -216
  54. package/src/primitives/index.ts +13 -13
  55. package/src/primitives/plane.ts +31 -31
  56. package/src/primitives/sphere.ts +809 -809
  57. package/src/react/useBg2e.ts +69 -69
  58. package/src/render/BRDFIntegrationMap.ts +4 -4
  59. package/src/render/Environment.ts +135 -135
  60. package/src/render/FrameBuffer.ts +35 -35
  61. package/src/render/MaterialRenderer.ts +34 -34
  62. package/src/render/Pipeline.ts +108 -108
  63. package/src/render/PolyListRenderer.ts +47 -47
  64. package/src/render/RenderBuffer.ts +197 -197
  65. package/src/render/RenderQueue.ts +198 -198
  66. package/src/render/RenderState.ts +116 -116
  67. package/src/render/Renderer.ts +248 -248
  68. package/src/render/SceneAppController.ts +250 -250
  69. package/src/render/SceneRenderer.ts +387 -387
  70. package/src/render/Shader.ts +32 -32
  71. package/src/render/ShadowRenderer.ts +176 -176
  72. package/src/render/SkyCube.ts +105 -105
  73. package/src/render/SkySphere.ts +117 -117
  74. package/src/render/TextureMergerRenderer.ts +70 -70
  75. package/src/render/TextureRenderer.ts +34 -34
  76. package/src/render/index.ts +67 -67
  77. package/src/render/webgl/FrameBuffer.ts +9 -9
  78. package/src/render/webgl/MaterialRenderer.ts +112 -112
  79. package/src/render/webgl/Pipeline.ts +88 -88
  80. package/src/render/webgl/PolyListRenderer.ts +260 -260
  81. package/src/render/webgl/RenderBuffer.ts +226 -226
  82. package/src/render/webgl/Renderer.ts +262 -262
  83. package/src/render/webgl/SceneRenderer.ts +67 -67
  84. package/src/render/webgl/ShaderProgram.ts +424 -424
  85. package/src/render/webgl/ShadowRenderer.ts +6 -6
  86. package/src/render/webgl/SkyCube.ts +15 -15
  87. package/src/render/webgl/SkySphere.ts +15 -15
  88. package/src/render/webgl/State.ts +152 -152
  89. package/src/render/webgl/TextureRenderer.ts +167 -167
  90. package/src/render/webgl/VertexBuffer.ts +137 -137
  91. package/src/render/webgl/index.ts +35 -35
  92. package/src/scene/Camera.ts +458 -458
  93. package/src/scene/Chain.ts +44 -44
  94. package/src/scene/ChainJoint.ts +58 -58
  95. package/src/scene/Component.ts +177 -177
  96. package/src/scene/ComponentMap.ts +106 -106
  97. package/src/scene/Drawable.ts +154 -154
  98. package/src/scene/EnvironmentComponent.ts +141 -141
  99. package/src/scene/FindNodeVisitor.ts +59 -59
  100. package/src/scene/LightComponent.ts +154 -154
  101. package/src/scene/MatrixState.ts +46 -46
  102. package/src/scene/Node.ts +328 -328
  103. package/src/scene/NodeVisitor.ts +15 -15
  104. package/src/scene/OrbitCameraController.ts +450 -450
  105. package/src/scene/SmoothOrbitCameraController.ts +99 -99
  106. package/src/scene/Transform.ts +73 -73
  107. package/src/scene/index.ts +60 -60
  108. package/src/shaders/BasicDiffuseColorShader.ts +111 -111
  109. package/src/shaders/BasicPBRLightShader.ts +276 -276
  110. package/src/shaders/DebugRenderShader.ts +97 -97
  111. package/src/shaders/DepthRenderShader.ts +127 -127
  112. package/src/shaders/IrradianceMapCubeShader.ts +115 -115
  113. package/src/shaders/PBRLightIBLShader.ts +486 -486
  114. package/src/shaders/PickSelectionShader.ts +101 -101
  115. package/src/shaders/PresentDebugFramebufferShader.ts +118 -118
  116. package/src/shaders/PresentTextureShader.ts +99 -99
  117. package/src/shaders/SelectionHighlightShader.ts +143 -127
  118. package/src/shaders/ShaderFunction.ts +318 -318
  119. package/src/shaders/SkyCubeShader.ts +93 -93
  120. package/src/shaders/SkySphereShader.ts +102 -102
  121. package/src/shaders/SpecularMapCubeShader.ts +164 -164
  122. package/src/shaders/TextureMergerShader.ts +171 -171
  123. package/src/shaders/index.ts +36 -36
  124. package/src/shaders/webgl/color_correction.glsl +47 -47
  125. package/src/shaders/webgl/constants.glsl +6 -6
  126. package/src/shaders/webgl/index.ts +70 -70
  127. package/src/shaders/webgl/normal_map.glsl +9 -9
  128. package/src/shaders/webgl/pbr.glsl +173 -173
  129. package/src/shaders/webgl/uniforms.glsl +91 -91
  130. package/src/shaders/webgl_shader_lib.ts +213 -213
  131. package/src/tools/BinaryResourceProvider.ts +14 -14
  132. package/src/tools/ImageResourceProvider.ts +66 -66
  133. package/src/tools/MaterialModifier.ts +446 -446
  134. package/src/tools/Resource.ts +203 -203
  135. package/src/tools/ResourceProvider.ts +69 -69
  136. package/src/tools/TextResourceProvider.ts +24 -24
  137. package/src/tools/TextureCache.ts +51 -51
  138. package/src/tools/TextureResourceDatabase.ts +100 -100
  139. package/src/tools/UserAgent.ts +362 -362
  140. package/src/tools/VideoResourceProvider.ts +50 -50
  141. package/src/tools/WriteStrategy.ts +22 -22
  142. package/src/tools/base64.ts +11 -11
  143. package/src/tools/crypto.ts +19 -19
  144. package/src/tools/endiantess.ts +13 -13
  145. package/src/tools/image.ts +18 -18
  146. package/src/tools/index.ts +41 -41
  147. package/src/tools/processType.ts +39 -39
  148. package/src/vite-env.d.ts +12 -12
@@ -1,362 +1,362 @@
1
-
2
- interface VersionInfo {
3
- major: number;
4
- minor: number;
5
- revision: number;
6
- stringValue: string;
7
- name: string;
8
- versionString: string;
9
- }
10
-
11
- interface SystemInfo {
12
- OSX: boolean;
13
- Windows: boolean;
14
- iPhone: boolean;
15
- iPodTouch: boolean;
16
- iPad: boolean;
17
- iOS: boolean;
18
- Android: boolean;
19
- Linux: boolean;
20
- OSName: string;
21
- Version: VersionInfo;
22
- }
23
-
24
- interface BrowserInfo {
25
- Version: VersionInfo;
26
- Safari: boolean;
27
- Chrome: boolean;
28
- Opera: boolean;
29
- Firefox: boolean;
30
- Edge: boolean;
31
- Explorer: boolean;
32
- MobileSafari: boolean;
33
- Android: boolean;
34
- IsMobileVersion: boolean;
35
- Name: string;
36
- Vendor: string;
37
- }
38
-
39
- export default class UserAgent {
40
- system: SystemInfo = {
41
- OSX: false,
42
- Windows: false,
43
- iPhone: false,
44
- iPodTouch: false,
45
- iPad: false,
46
- iOS: false,
47
- Android: false,
48
- Linux: false,
49
- OSName: "",
50
- Version: {
51
- major: 0,
52
- minor: 0,
53
- revision: 0,
54
- stringValue: "",
55
- name: "",
56
- versionString: ""
57
- }
58
- }
59
- browser: BrowserInfo = {
60
- Version: {
61
- major: 0,
62
- minor: 0,
63
- revision: 0,
64
- stringValue: "",
65
- name: "",
66
- versionString: ""
67
- },
68
- Safari: false,
69
- Chrome: false,
70
- Opera: false,
71
- Firefox: false,
72
- Edge: false,
73
- Explorer: false,
74
- MobileSafari: false,
75
- Android: false,
76
- IsMobileVersion: false,
77
- Name: "",
78
- Vendor: ""
79
- }
80
-
81
- constructor(userAgentString?: string) {
82
- if (!userAgentString) {
83
- userAgentString = navigator.userAgent;
84
- }
85
- this.parseOperatingSystem(userAgentString);
86
- this.parseBrowser(userAgentString);
87
- }
88
-
89
- parseOperatingSystem(userAgentString: string): void {
90
- this.system.OSX = /Macintosh/.test(userAgentString);
91
- this.system.Windows = /Windows/.test(userAgentString);
92
- this.system.iPhone = /iPhone/.test(userAgentString);
93
- this.system.iPodTouch = /iPod/.test(userAgentString);
94
- this.system.iPad = /iPad/.test(userAgentString);
95
- this.system.iOS = this.system.iPhone || this.system.iPad || this.system.iPodTouch;
96
- this.system.Android = /Android/.test(userAgentString);
97
- this.system.Linux = (this.system.Android) ? false:/Linux/.test(userAgentString);
98
-
99
- if (this.system.OSX) {
100
- this.system.OSName = "OS X";
101
- this.parseOSXVersion(userAgentString);
102
- }
103
- else if (this.system.Windows) {
104
- this.system.OSName = "Windows";
105
- this.parseWindowsVersion(userAgentString);
106
- }
107
- else if (this.system.Linux) {
108
- this.system.OSName = "Linux";
109
- this.parseLinuxVersion(userAgentString);
110
- }
111
- else if (this.system.iOS) {
112
- this.system.OSName = "iOS";
113
- this.parseIOSVersion(userAgentString);
114
- }
115
- else if (this.system.Android) {
116
- this.system.OSName = "Android";
117
- this.parseAndroidVersion(userAgentString);
118
- }
119
- }
120
-
121
- parseBrowser(userAgentString: string): void {
122
- // Safari: Version/X.X.X Safari/XXX
123
- // Chrome: Chrome/XX.X.XX.XX Safari/XXX
124
- // Opera: Opera/X.XX
125
- // Firefox: Gecko/XXXXXX Firefox/XX.XX.XX
126
- // Explorer: MSIE X.X
127
- this.browser.Safari = /Version\/([\d\.]+) Safari\//.test(userAgentString);
128
- if (this.browser.Safari) {
129
- this.browser.Name = "Safari";
130
- this.browser.Vendor = "Apple";
131
- this.browser.Version.versionString = RegExp.$1;
132
- }
133
-
134
- this.browser.Chrome = /Chrome\/([\d\.]+) Safari\//.test(userAgentString);
135
- if (this.browser.Chrome) {
136
- this.browser.Name = "Chrome";
137
- this.browser.Vendor = "Google";
138
- this.browser.Version.versionString = RegExp.$1;
139
- }
140
-
141
- this.browser.Opera = /Opera\/[\d\.]+/.test(userAgentString);
142
- if (this.browser.Opera) {
143
- this.browser.Name = "Opera";
144
- this.browser.Vendor = "Opera Software";
145
- var versionString = /Version\/([\d\.]+)/.test(userAgentString);
146
- this.browser.Version.versionString = RegExp.$1;
147
- }
148
-
149
- this.browser.Firefox = /Gecko\/[\d\.]+ Firefox\/([\d\.]+)/.test(userAgentString);
150
- if (this.browser.Firefox) {
151
- this.browser.Name = "Firefox";
152
- this.browser.Vendor = "Mozilla Foundation";
153
- this.browser.Version.versionString = RegExp.$1;
154
- }
155
-
156
- this.browser.Edge = /Edge\/(.*)/.test(userAgentString);
157
- if (this.browser.Edge) {
158
- var result = /Edge\/(.*)/.exec(userAgentString);
159
- this.browser.Name = "Edge";
160
- this.browser.Chrome = false;
161
- this.browser.Vendor = "Microsoft";
162
- this.browser.Version.versionString = result && result[1] || "unknown";
163
- }
164
-
165
- this.browser.Explorer = /MSIE ([\d\.]+)/.test(userAgentString);
166
- if (!this.browser.Explorer) {
167
- var re = /\Mozilla\/5.0 \(([^)]+)\) like Gecko/
168
- var matches = re.exec(userAgentString);
169
- if (matches) {
170
- re = /rv:(.*)/
171
- var version = re.exec(matches[1]);
172
- this.browser.Explorer = true;
173
- this.browser.Name = "Internet Explorer";
174
- this.browser.Vendor = "Microsoft";
175
- if (version) {
176
- this.browser.Version.versionString = version[1];
177
- }
178
- else {
179
- this.browser.Version.versionString = "unknown";
180
- }
181
- }
182
- }
183
- else {
184
- this.browser.Name = "Internet Explorer";
185
- this.browser.Vendor = "Microsoft";
186
- this.browser.Version.versionString = RegExp.$1;
187
- }
188
-
189
- if (this.system.iOS) {
190
- this.browser.IsMobileVersion = true;
191
- this.browser.MobileSafari = /Version\/([\d\.]+) Mobile/.test(userAgentString);
192
- if (this.browser.MobileSafari) {
193
- this.browser.Name = "Mobile Safari";
194
- this.browser.Vendor = "Apple";
195
- this.browser.Version.versionString = RegExp.$1;
196
- }
197
- this.browser.Android = false;
198
- }
199
- else if (this.system.Android) {
200
- this.browser.IsMobileVersion = true;
201
- this.browser.Android = /Version\/([\d\.]+) Mobile/.test(userAgentString);
202
- if (this.browser.MobileSafari) {
203
- this.browser.Name = "Android Browser";
204
- this.browser.Vendor = "Google";
205
- this.browser.Version.versionString = RegExp.$1;
206
- }
207
- else {
208
- this.browser.Chrome = /Chrome\/([\d\.]+)/.test(userAgentString);
209
- this.browser.Name = "Chrome";
210
- this.browser.Vendor = "Google";
211
- this.browser.Version.versionString = RegExp.$1;
212
- }
213
-
214
- this.browser.Safari = false;
215
- }
216
- else {
217
- this.browser.IsMobileVersion = false;
218
- }
219
-
220
- this.parseBrowserVersion(userAgentString);
221
- }
222
-
223
- parseBrowserVersion(userAgentString: string): void {
224
- if (/([\d]+)\.([\d]+)\.*([\d]*)/.test(this.browser.Version.versionString)) {
225
- this.browser.Version.major = Number(RegExp.$1);
226
- this.browser.Version.minor = Number(RegExp.$2);
227
- this.browser.Version.revision = (RegExp.$3) ? Number(RegExp.$3):0;
228
- }
229
- }
230
-
231
- parseOSXVersion(userAgentString: string): void {
232
- var versionString = (/Mac OS X (\d+_\d+_*\d*)/.test(userAgentString)) ? RegExp.$1:'';
233
- // Safari/Chrome
234
- if (versionString!='') {
235
- if (/(\d+)_(\d+)_*(\d*)/.test(versionString)) {
236
- this.system.Version.major = Number(RegExp.$1);
237
- this.system.Version.minor = Number(RegExp.$2);
238
- this.system.Version.revision = (RegExp.$3) ? Number(RegExp.$3):0;
239
- }
240
- }
241
- // Firefox/Opera
242
- else {
243
- versionString = (/Mac OS X (\d+\.\d+\.*\d*)/.test(userAgentString)) ? RegExp.$1:'Unknown';
244
- if (/(\d+)\.(\d+)\.*(\d*)/.test(versionString)) {
245
- this.system.Version.major = Number(RegExp.$1);
246
- this.system.Version.minor = Number(RegExp.$2);
247
- this.system.Version.revision = (RegExp.$3) ? Number(RegExp.$3):0;
248
- }
249
- }
250
- if (!this.system.Version.major) {
251
- this.system.Version.major = 0;
252
- this.system.Version.minor = 0;
253
- this.system.Version.revision = 0;
254
- }
255
- this.system.Version.stringValue = this.system.Version.major + '.' + this.system.Version.minor + '.' + this.system.Version.revision;
256
- switch (this.system.Version.minor) {
257
- case 0:
258
- this.system.Version.name = "Cheetah";
259
- break;
260
- case 1:
261
- this.system.Version.name = "Puma";
262
- break;
263
- case 2:
264
- this.system.Version.name = "Jaguar";
265
- break;
266
- case 3:
267
- this.system.Version.name = "Panther";
268
- break;
269
- case 4:
270
- this.system.Version.name = "Tiger";
271
- break;
272
- case 5:
273
- this.system.Version.name = "Leopard";
274
- break;
275
- case 6:
276
- this.system.Version.name = "Snow Leopard";
277
- break;
278
- case 7:
279
- this.system.Version.name = "Lion";
280
- break;
281
- case 8:
282
- this.system.Version.name = "Mountain Lion";
283
- break;
284
- }
285
- }
286
-
287
- parseWindowsVersion(userAgentString: string): void {
288
- if (/NT (\d+)\.(\d*)/.test(userAgentString)) {
289
- this.system.Version.major = Number(RegExp.$1);
290
- this.system.Version.minor = Number(RegExp.$2);
291
- this.system.Version.revision = 0; // Solo por compatibilidad
292
- this.system.Version.stringValue = "NT " + this.system.Version.major + "." + this.system.Version.minor;
293
- var major = this.system.Version.major;
294
- var minor = this.system.Version.minor;
295
- var name = 'undefined';
296
- if (major==5) {
297
- if (minor==0) this.system.Version.name = '2000';
298
- else this.system.Version.name = 'XP';
299
- }
300
- else if (major==6) {
301
- if (minor==0) this.system.Version.name = 'Vista';
302
- else if (minor==1) this.system.Version.name = '7';
303
- else if (minor==2) this.system.Version.name = '8';
304
- }
305
- }
306
- else {
307
- this.system.Version.major = 0;
308
- this.system.Version.minor = 0;
309
- this.system.Version.name = "Unknown";
310
- this.system.Version.stringValue = "Unknown";
311
- }
312
- }
313
-
314
- parseLinuxVersion(userAgentString: string): void {
315
- this.system.Version.major = 0;
316
- this.system.Version.minor = 0;
317
- this.system.Version.revision = 0;
318
- this.system.Version.name = "";
319
- this.system.Version.stringValue = "Unknown distribution";
320
- }
321
-
322
- parseIOSVersion(userAgentString: string): void {
323
- if (/iPhone OS (\d+)_(\d+)_*(\d*)/i.test(userAgentString)) {
324
- this.system.Version.major = Number(RegExp.$1);
325
- this.system.Version.minor = Number(RegExp.$2);
326
- this.system.Version.revision = (RegExp.$3) ? Number(RegExp.$3):0;
327
- this.system.Version.stringValue = this.system.Version.major + "." + this.system.Version.minor + '.' + this.system.Version.revision;
328
- this.system.Version.name = "iOS";
329
- }
330
- else {
331
- this.system.Version.major = 0;
332
- this.system.Version.minor = 0;
333
- this.system.Version.name = "Unknown";
334
- this.system.Version.stringValue = "Unknown";
335
- }
336
- }
337
-
338
- parseAndroidVersion(userAgentString: string): void {
339
- if (/Android (\d+)\.(\d+)\.*(\d*)/.test(userAgentString)) {
340
- this.system.Version.major = Number(RegExp.$1);
341
- this.system.Version.minor = Number(RegExp.$2);
342
- this.system.Version.revision = (RegExp.$3) ? Number(RegExp.$3):0;
343
- this.system.Version.stringValue = this.system.Version.major + "." + this.system.Version.minor + '.' + this.system.Version.revision;
344
- }
345
- else {
346
- this.system.Version.major = 0;
347
- this.system.Version.minor = 0;
348
- this.system.Version.revision = 0;
349
- }
350
- if (/Build\/([a-zA-Z]+)/.test(userAgentString)) {
351
- this.system.Version.name = RegExp.$1;
352
- }
353
- else {
354
- this.system.Version.name = "Unknown version";
355
- }
356
- this.system.Version.stringValue = this.system.Version.major + "." + this.system.Version.minor + '.' + this.system.Version.revision;
357
- }
358
-
359
- getInfoString(): string {
360
- return navigator.userAgent;
361
- }
362
- }
1
+
2
+ interface VersionInfo {
3
+ major: number;
4
+ minor: number;
5
+ revision: number;
6
+ stringValue: string;
7
+ name: string;
8
+ versionString: string;
9
+ }
10
+
11
+ interface SystemInfo {
12
+ OSX: boolean;
13
+ Windows: boolean;
14
+ iPhone: boolean;
15
+ iPodTouch: boolean;
16
+ iPad: boolean;
17
+ iOS: boolean;
18
+ Android: boolean;
19
+ Linux: boolean;
20
+ OSName: string;
21
+ Version: VersionInfo;
22
+ }
23
+
24
+ interface BrowserInfo {
25
+ Version: VersionInfo;
26
+ Safari: boolean;
27
+ Chrome: boolean;
28
+ Opera: boolean;
29
+ Firefox: boolean;
30
+ Edge: boolean;
31
+ Explorer: boolean;
32
+ MobileSafari: boolean;
33
+ Android: boolean;
34
+ IsMobileVersion: boolean;
35
+ Name: string;
36
+ Vendor: string;
37
+ }
38
+
39
+ export default class UserAgent {
40
+ system: SystemInfo = {
41
+ OSX: false,
42
+ Windows: false,
43
+ iPhone: false,
44
+ iPodTouch: false,
45
+ iPad: false,
46
+ iOS: false,
47
+ Android: false,
48
+ Linux: false,
49
+ OSName: "",
50
+ Version: {
51
+ major: 0,
52
+ minor: 0,
53
+ revision: 0,
54
+ stringValue: "",
55
+ name: "",
56
+ versionString: ""
57
+ }
58
+ }
59
+ browser: BrowserInfo = {
60
+ Version: {
61
+ major: 0,
62
+ minor: 0,
63
+ revision: 0,
64
+ stringValue: "",
65
+ name: "",
66
+ versionString: ""
67
+ },
68
+ Safari: false,
69
+ Chrome: false,
70
+ Opera: false,
71
+ Firefox: false,
72
+ Edge: false,
73
+ Explorer: false,
74
+ MobileSafari: false,
75
+ Android: false,
76
+ IsMobileVersion: false,
77
+ Name: "",
78
+ Vendor: ""
79
+ }
80
+
81
+ constructor(userAgentString?: string) {
82
+ if (!userAgentString) {
83
+ userAgentString = navigator.userAgent;
84
+ }
85
+ this.parseOperatingSystem(userAgentString);
86
+ this.parseBrowser(userAgentString);
87
+ }
88
+
89
+ parseOperatingSystem(userAgentString: string): void {
90
+ this.system.OSX = /Macintosh/.test(userAgentString);
91
+ this.system.Windows = /Windows/.test(userAgentString);
92
+ this.system.iPhone = /iPhone/.test(userAgentString);
93
+ this.system.iPodTouch = /iPod/.test(userAgentString);
94
+ this.system.iPad = /iPad/.test(userAgentString);
95
+ this.system.iOS = this.system.iPhone || this.system.iPad || this.system.iPodTouch;
96
+ this.system.Android = /Android/.test(userAgentString);
97
+ this.system.Linux = (this.system.Android) ? false:/Linux/.test(userAgentString);
98
+
99
+ if (this.system.OSX) {
100
+ this.system.OSName = "OS X";
101
+ this.parseOSXVersion(userAgentString);
102
+ }
103
+ else if (this.system.Windows) {
104
+ this.system.OSName = "Windows";
105
+ this.parseWindowsVersion(userAgentString);
106
+ }
107
+ else if (this.system.Linux) {
108
+ this.system.OSName = "Linux";
109
+ this.parseLinuxVersion(userAgentString);
110
+ }
111
+ else if (this.system.iOS) {
112
+ this.system.OSName = "iOS";
113
+ this.parseIOSVersion(userAgentString);
114
+ }
115
+ else if (this.system.Android) {
116
+ this.system.OSName = "Android";
117
+ this.parseAndroidVersion(userAgentString);
118
+ }
119
+ }
120
+
121
+ parseBrowser(userAgentString: string): void {
122
+ // Safari: Version/X.X.X Safari/XXX
123
+ // Chrome: Chrome/XX.X.XX.XX Safari/XXX
124
+ // Opera: Opera/X.XX
125
+ // Firefox: Gecko/XXXXXX Firefox/XX.XX.XX
126
+ // Explorer: MSIE X.X
127
+ this.browser.Safari = /Version\/([\d\.]+) Safari\//.test(userAgentString);
128
+ if (this.browser.Safari) {
129
+ this.browser.Name = "Safari";
130
+ this.browser.Vendor = "Apple";
131
+ this.browser.Version.versionString = RegExp.$1;
132
+ }
133
+
134
+ this.browser.Chrome = /Chrome\/([\d\.]+) Safari\//.test(userAgentString);
135
+ if (this.browser.Chrome) {
136
+ this.browser.Name = "Chrome";
137
+ this.browser.Vendor = "Google";
138
+ this.browser.Version.versionString = RegExp.$1;
139
+ }
140
+
141
+ this.browser.Opera = /Opera\/[\d\.]+/.test(userAgentString);
142
+ if (this.browser.Opera) {
143
+ this.browser.Name = "Opera";
144
+ this.browser.Vendor = "Opera Software";
145
+ var versionString = /Version\/([\d\.]+)/.test(userAgentString);
146
+ this.browser.Version.versionString = RegExp.$1;
147
+ }
148
+
149
+ this.browser.Firefox = /Gecko\/[\d\.]+ Firefox\/([\d\.]+)/.test(userAgentString);
150
+ if (this.browser.Firefox) {
151
+ this.browser.Name = "Firefox";
152
+ this.browser.Vendor = "Mozilla Foundation";
153
+ this.browser.Version.versionString = RegExp.$1;
154
+ }
155
+
156
+ this.browser.Edge = /Edge\/(.*)/.test(userAgentString);
157
+ if (this.browser.Edge) {
158
+ var result = /Edge\/(.*)/.exec(userAgentString);
159
+ this.browser.Name = "Edge";
160
+ this.browser.Chrome = false;
161
+ this.browser.Vendor = "Microsoft";
162
+ this.browser.Version.versionString = result && result[1] || "unknown";
163
+ }
164
+
165
+ this.browser.Explorer = /MSIE ([\d\.]+)/.test(userAgentString);
166
+ if (!this.browser.Explorer) {
167
+ var re = /\Mozilla\/5.0 \(([^)]+)\) like Gecko/
168
+ var matches = re.exec(userAgentString);
169
+ if (matches) {
170
+ re = /rv:(.*)/
171
+ var version = re.exec(matches[1]);
172
+ this.browser.Explorer = true;
173
+ this.browser.Name = "Internet Explorer";
174
+ this.browser.Vendor = "Microsoft";
175
+ if (version) {
176
+ this.browser.Version.versionString = version[1];
177
+ }
178
+ else {
179
+ this.browser.Version.versionString = "unknown";
180
+ }
181
+ }
182
+ }
183
+ else {
184
+ this.browser.Name = "Internet Explorer";
185
+ this.browser.Vendor = "Microsoft";
186
+ this.browser.Version.versionString = RegExp.$1;
187
+ }
188
+
189
+ if (this.system.iOS) {
190
+ this.browser.IsMobileVersion = true;
191
+ this.browser.MobileSafari = /Version\/([\d\.]+) Mobile/.test(userAgentString);
192
+ if (this.browser.MobileSafari) {
193
+ this.browser.Name = "Mobile Safari";
194
+ this.browser.Vendor = "Apple";
195
+ this.browser.Version.versionString = RegExp.$1;
196
+ }
197
+ this.browser.Android = false;
198
+ }
199
+ else if (this.system.Android) {
200
+ this.browser.IsMobileVersion = true;
201
+ this.browser.Android = /Version\/([\d\.]+) Mobile/.test(userAgentString);
202
+ if (this.browser.MobileSafari) {
203
+ this.browser.Name = "Android Browser";
204
+ this.browser.Vendor = "Google";
205
+ this.browser.Version.versionString = RegExp.$1;
206
+ }
207
+ else {
208
+ this.browser.Chrome = /Chrome\/([\d\.]+)/.test(userAgentString);
209
+ this.browser.Name = "Chrome";
210
+ this.browser.Vendor = "Google";
211
+ this.browser.Version.versionString = RegExp.$1;
212
+ }
213
+
214
+ this.browser.Safari = false;
215
+ }
216
+ else {
217
+ this.browser.IsMobileVersion = false;
218
+ }
219
+
220
+ this.parseBrowserVersion(userAgentString);
221
+ }
222
+
223
+ parseBrowserVersion(userAgentString: string): void {
224
+ if (/([\d]+)\.([\d]+)\.*([\d]*)/.test(this.browser.Version.versionString)) {
225
+ this.browser.Version.major = Number(RegExp.$1);
226
+ this.browser.Version.minor = Number(RegExp.$2);
227
+ this.browser.Version.revision = (RegExp.$3) ? Number(RegExp.$3):0;
228
+ }
229
+ }
230
+
231
+ parseOSXVersion(userAgentString: string): void {
232
+ var versionString = (/Mac OS X (\d+_\d+_*\d*)/.test(userAgentString)) ? RegExp.$1:'';
233
+ // Safari/Chrome
234
+ if (versionString!='') {
235
+ if (/(\d+)_(\d+)_*(\d*)/.test(versionString)) {
236
+ this.system.Version.major = Number(RegExp.$1);
237
+ this.system.Version.minor = Number(RegExp.$2);
238
+ this.system.Version.revision = (RegExp.$3) ? Number(RegExp.$3):0;
239
+ }
240
+ }
241
+ // Firefox/Opera
242
+ else {
243
+ versionString = (/Mac OS X (\d+\.\d+\.*\d*)/.test(userAgentString)) ? RegExp.$1:'Unknown';
244
+ if (/(\d+)\.(\d+)\.*(\d*)/.test(versionString)) {
245
+ this.system.Version.major = Number(RegExp.$1);
246
+ this.system.Version.minor = Number(RegExp.$2);
247
+ this.system.Version.revision = (RegExp.$3) ? Number(RegExp.$3):0;
248
+ }
249
+ }
250
+ if (!this.system.Version.major) {
251
+ this.system.Version.major = 0;
252
+ this.system.Version.minor = 0;
253
+ this.system.Version.revision = 0;
254
+ }
255
+ this.system.Version.stringValue = this.system.Version.major + '.' + this.system.Version.minor + '.' + this.system.Version.revision;
256
+ switch (this.system.Version.minor) {
257
+ case 0:
258
+ this.system.Version.name = "Cheetah";
259
+ break;
260
+ case 1:
261
+ this.system.Version.name = "Puma";
262
+ break;
263
+ case 2:
264
+ this.system.Version.name = "Jaguar";
265
+ break;
266
+ case 3:
267
+ this.system.Version.name = "Panther";
268
+ break;
269
+ case 4:
270
+ this.system.Version.name = "Tiger";
271
+ break;
272
+ case 5:
273
+ this.system.Version.name = "Leopard";
274
+ break;
275
+ case 6:
276
+ this.system.Version.name = "Snow Leopard";
277
+ break;
278
+ case 7:
279
+ this.system.Version.name = "Lion";
280
+ break;
281
+ case 8:
282
+ this.system.Version.name = "Mountain Lion";
283
+ break;
284
+ }
285
+ }
286
+
287
+ parseWindowsVersion(userAgentString: string): void {
288
+ if (/NT (\d+)\.(\d*)/.test(userAgentString)) {
289
+ this.system.Version.major = Number(RegExp.$1);
290
+ this.system.Version.minor = Number(RegExp.$2);
291
+ this.system.Version.revision = 0; // Solo por compatibilidad
292
+ this.system.Version.stringValue = "NT " + this.system.Version.major + "." + this.system.Version.minor;
293
+ var major = this.system.Version.major;
294
+ var minor = this.system.Version.minor;
295
+ var name = 'undefined';
296
+ if (major==5) {
297
+ if (minor==0) this.system.Version.name = '2000';
298
+ else this.system.Version.name = 'XP';
299
+ }
300
+ else if (major==6) {
301
+ if (minor==0) this.system.Version.name = 'Vista';
302
+ else if (minor==1) this.system.Version.name = '7';
303
+ else if (minor==2) this.system.Version.name = '8';
304
+ }
305
+ }
306
+ else {
307
+ this.system.Version.major = 0;
308
+ this.system.Version.minor = 0;
309
+ this.system.Version.name = "Unknown";
310
+ this.system.Version.stringValue = "Unknown";
311
+ }
312
+ }
313
+
314
+ parseLinuxVersion(userAgentString: string): void {
315
+ this.system.Version.major = 0;
316
+ this.system.Version.minor = 0;
317
+ this.system.Version.revision = 0;
318
+ this.system.Version.name = "";
319
+ this.system.Version.stringValue = "Unknown distribution";
320
+ }
321
+
322
+ parseIOSVersion(userAgentString: string): void {
323
+ if (/iPhone OS (\d+)_(\d+)_*(\d*)/i.test(userAgentString)) {
324
+ this.system.Version.major = Number(RegExp.$1);
325
+ this.system.Version.minor = Number(RegExp.$2);
326
+ this.system.Version.revision = (RegExp.$3) ? Number(RegExp.$3):0;
327
+ this.system.Version.stringValue = this.system.Version.major + "." + this.system.Version.minor + '.' + this.system.Version.revision;
328
+ this.system.Version.name = "iOS";
329
+ }
330
+ else {
331
+ this.system.Version.major = 0;
332
+ this.system.Version.minor = 0;
333
+ this.system.Version.name = "Unknown";
334
+ this.system.Version.stringValue = "Unknown";
335
+ }
336
+ }
337
+
338
+ parseAndroidVersion(userAgentString: string): void {
339
+ if (/Android (\d+)\.(\d+)\.*(\d*)/.test(userAgentString)) {
340
+ this.system.Version.major = Number(RegExp.$1);
341
+ this.system.Version.minor = Number(RegExp.$2);
342
+ this.system.Version.revision = (RegExp.$3) ? Number(RegExp.$3):0;
343
+ this.system.Version.stringValue = this.system.Version.major + "." + this.system.Version.minor + '.' + this.system.Version.revision;
344
+ }
345
+ else {
346
+ this.system.Version.major = 0;
347
+ this.system.Version.minor = 0;
348
+ this.system.Version.revision = 0;
349
+ }
350
+ if (/Build\/([a-zA-Z]+)/.test(userAgentString)) {
351
+ this.system.Version.name = RegExp.$1;
352
+ }
353
+ else {
354
+ this.system.Version.name = "Unknown version";
355
+ }
356
+ this.system.Version.stringValue = this.system.Version.major + "." + this.system.Version.minor + '.' + this.system.Version.revision;
357
+ }
358
+
359
+ getInfoString(): string {
360
+ return navigator.userAgent;
361
+ }
362
+ }