mirror of
https://github.com/Mibew/mibew.git
synced 2025-06-25 17:28:38 +03:00
Compare commits
374 Commits
Author | SHA1 | Date | |
---|---|---|---|
320d814df4 | |||
8953017b9d | |||
874e896178 | |||
973632b4ae | |||
5fa9663d99 | |||
1ed31ad638 | |||
da94f781b3 | |||
d4640219a6 | |||
1fc048fec9 | |||
d6d5477022 | |||
691bcfa061 | |||
3148db54b5 | |||
|
58ee240c80 | ||
ca090638da | |||
4f05231b04 | |||
730577b4a4 | |||
51f2c41b31 | |||
|
2de3ac9044 | ||
|
09f632cc6d | ||
339da62a23 | |||
5a4d3d420f | |||
cd1e8adce3 | |||
|
e676ca47dc | ||
637758c13e | |||
6a0c067cef | |||
a956f85fc7 | |||
1a137bb683 | |||
57eacfb953 | |||
88247f0de3 | |||
eb0bc9ae5c | |||
7f133f17f7 | |||
944b0fe6c5 | |||
eae2b3df81 | |||
3b3abe615d | |||
756014d568 | |||
6d4c438d62 | |||
5c2743c01a | |||
eeb660293c | |||
01261f8c92 | |||
06078cc8e7 | |||
a37ea34670 | |||
56418b1551 | |||
dc9f128b79 | |||
2533b362ab | |||
0c416c7d7c | |||
fd94b0108c | |||
99fb30b0ec | |||
81e2e345a7 | |||
ce5071c3e3 | |||
1210561448 | |||
9294697d58 | |||
3a92a54cd5 | |||
b6a70659b1 | |||
cd22f3e9d8 | |||
8aba48a1d2 | |||
|
423ef8d36f | ||
098abccde7 | |||
|
75aaaf21b7 | ||
622027302f | |||
5b999eff2d | |||
562eeceac2 | |||
f9e0755b23 | |||
74b9faf7af | |||
|
9978074fbc | ||
2df50d9096 | |||
14aba49194 | |||
17df9c8dbc | |||
6dae66540d | |||
0317979c92 | |||
a4b3824a42 | |||
f1200c4999 | |||
d7365d719f | |||
42f5c1a20a | |||
74e69aa520 | |||
20da5d2f36 | |||
fe951ad050 | |||
|
8edcc7e57f | ||
|
62ad932aa7 | ||
33fb35bd34 | |||
|
003f98b18c | ||
6e3720f8e4 | |||
|
4f3d0a57f9 | ||
|
f28659a025 | ||
|
026b463fb7 | ||
bfe0065f1c | |||
91a1b1872c | |||
cf67b11295 | |||
dd4169f815 | |||
dbe04bb342 | |||
98f2b68560 | |||
805bb610a5 | |||
3148d0eb2a | |||
67439317c4 | |||
5e90541918 | |||
704862faad | |||
c8df65baee | |||
49d86a55be | |||
de3db5527b | |||
d115befab9 | |||
6b20d0c8b6 | |||
b296525e39 | |||
7a16536341 | |||
aa94e21602 | |||
bb932e5b9c | |||
a9ca845c80 | |||
b8bad36510 | |||
1c3d9c98b4 | |||
dc9577ff6a | |||
2336e406f4 | |||
84f5bca0a9 | |||
fb35d4fff9 | |||
ace1423a13 | |||
3b9a8e5456 | |||
c60b247ef7 | |||
89f0f5c688 | |||
7bdf01d344 | |||
c0d9a461af | |||
1844d91893 | |||
1a3594311b | |||
8b6dcf4db0 | |||
9d8e057410 | |||
8a2586d01b | |||
be5d5d182b | |||
38b653d075 | |||
88a1b978ce | |||
a2946bd67d | |||
410b925b8d | |||
4f9b48135c | |||
5bc4698520 | |||
0f64ad3674 | |||
93f949d914 | |||
b971d2d85c | |||
edd279ca8e | |||
525b7de7e2 | |||
b6bfc39cbf | |||
3f4420181c | |||
94eaed0b2c | |||
|
d747568575 | ||
2cda0cbb66 | |||
d41db57211 | |||
bc99761b7a | |||
fc2c9d791a | |||
f9b6eeb92c | |||
2d60df2417 | |||
6dc0bc8d34 | |||
110322ab47 | |||
e40be770c3 | |||
d32f9c02ce | |||
83185a6b32 | |||
a9644ddec1 | |||
e9b29737c9 | |||
4f03a73f9a | |||
647bd84995 | |||
eb60d6b39f | |||
4d038b0777 | |||
67b0a6005e | |||
d605c80332 | |||
98954281d5 | |||
58e0ddc952 | |||
f1030c0298 | |||
9cb71e62c1 | |||
60ff2c853c | |||
6c4e883a8a | |||
25a4a3db40 | |||
5f2aab1501 | |||
8a2fbc6f38 | |||
2b6779af8f | |||
efa1372cdc | |||
|
64e902c5a1 | ||
ee97a2f932 | |||
4960397655 | |||
da03edb665 | |||
712117dfc4 | |||
048e2dd3f0 | |||
3beed6b2ec | |||
c62a98b22a | |||
20d97e5bce | |||
2581119295 | |||
95c55aa931 | |||
059bc5ac39 | |||
324a85fb7f | |||
28e968b15f | |||
9d2c4404c0 | |||
d61b142e40 | |||
d1a1f51bf0 | |||
0cf963ac5e | |||
5921115af0 | |||
87d7478864 | |||
3179d5b669 | |||
8ced21fe86 | |||
84e4de1e7a | |||
39309d1914 | |||
194b396788 | |||
7dd32257d1 | |||
6de62a6929 | |||
1c6433eb73 | |||
762998cd4b | |||
73abafebac | |||
81cd6f75fe | |||
42f28a72da | |||
69916d8f6d | |||
ec2e29083b | |||
98a5570ef6 | |||
3ec1610fff | |||
bc39c22c29 | |||
2e3b718fe2 | |||
be8182ffcc | |||
dfaaffcff4 | |||
de782c7fea | |||
3ea37e0e11 | |||
0f1407682e | |||
e40e821b5f | |||
31ad9138ef | |||
9cd07fe829 | |||
4dec01bdaa | |||
e64670e5aa | |||
7c07d7f3e2 | |||
f9c5d4dbaf | |||
52f203b43d | |||
35d80bdcee | |||
a6b7367002 | |||
75c04cae38 | |||
915b6786d9 | |||
b561f7eec8 | |||
89556ae68f | |||
33149aafb9 | |||
edf8850952 | |||
393bf21f30 | |||
03a2051ad7 | |||
51ad3e70d3 | |||
9417960281 | |||
a312bc5e8f | |||
a617eebeec | |||
38e53aaa6a | |||
8b6d411d58 | |||
1b436f9535 | |||
64fccc272c | |||
ead790853e | |||
|
47e7a81f6f | ||
|
73b11b48af | ||
|
5bb282b3bd | ||
|
9608c5a83d | ||
568e539e49 | |||
|
8c99b13e12 | ||
35bbb22c56 | |||
|
169b8d3b76 | ||
d8a63bc2cd | |||
f105a0b5d2 | |||
843a6e11ae | |||
a5320b07d7 | |||
3eafe870bc | |||
82704cfbd6 | |||
88ba0f148e | |||
|
19376e7f6c | ||
|
3ae6e5cdb4 | ||
29c9d8dc7d | |||
7c822661e6 | |||
3a85c9060b | |||
834e75cdd6 | |||
6ea5f5af11 | |||
e2099735e1 | |||
|
8b1e218862 | ||
e718518698 | |||
cc55a13151 | |||
0fc11b3885 | |||
16b7297d19 | |||
1683b7c72a | |||
f4ad0a2351 | |||
7f6b193656 | |||
15dbe153f5 | |||
547efb38e4 | |||
f44ccdc4e1 | |||
1549125665 | |||
cf76dd744d | |||
57afba72e8 | |||
3f97ad09df | |||
00213f806c | |||
d0f1c50f51 | |||
bc16b7c25f | |||
5424424eaf | |||
7aed881f08 | |||
ca169c5bc7 | |||
7041adcdfb | |||
ffcdb223cc | |||
c70bdfcd90 | |||
d512573af8 | |||
0527a9def1 | |||
09ef31e750 | |||
9213453bc3 | |||
|
8c3cbf0489 | ||
|
45ac4ec1ee | ||
e3123d7c45 | |||
680059dece | |||
e9526daf1c | |||
a2774b8fb9 | |||
5618a334d9 | |||
|
8b32bebdc2 | ||
788a18f7f1 | |||
ad186da482 | |||
345cb1748a | |||
e8f07d27ef | |||
e64fe1eb17 | |||
|
e6dfd1dfec | ||
|
a56e775ab9 | ||
|
ce3a59b13c | ||
|
85d1acad5e | ||
|
13dd999158 | ||
|
cb3bd91b76 | ||
|
d5130ed655 | ||
|
199438285c | ||
|
a149731c46 | ||
|
2e629df611 | ||
|
fcdc1021af | ||
|
ce5cbaa850 | ||
dcd243505d | |||
|
4d32e942a3 | ||
|
95909d7ed4 | ||
|
fad8ca5854 | ||
|
cd3778ca0d | ||
|
8fe1498847 | ||
|
0edc9657b4 | ||
9fe423db62 | |||
|
a9e7114375 | ||
|
e150bd1d26 | ||
|
4c9f963aa7 | ||
|
9d81661cfe | ||
fcd3cacfbc | |||
|
3edc959096 | ||
|
d656d8fe38 | ||
|
eccbb59bcc | ||
|
8457e51717 | ||
|
227c7a9410 | ||
|
9c92fda11b | ||
|
896f090aba | ||
|
5363698020 | ||
|
aa0c213cc3 | ||
|
5009f51342 | ||
|
b340206d3a | ||
|
2cbb0c4134 | ||
|
8c574ec88c | ||
|
5af9f92102 | ||
|
6bf331b355 | ||
|
4b74ceb854 | ||
|
25054c4e0f | ||
|
fbe53e3b29 | ||
|
5397f7014a | ||
|
ebb3cf8ab1 | ||
|
55e7dbe704 | ||
|
f13d938bde | ||
|
0ff5c7c28a | ||
|
fc789e6ef9 | ||
|
9f3ce28877 | ||
|
4e7f9eac50 | ||
|
2fc85b1068 | ||
|
930ea9a6ac | ||
|
d4ebd68052 | ||
|
e9d41c4869 | ||
|
577c2be622 | ||
|
8e7fe6bcd7 | ||
|
973cc5746e | ||
|
8326eb3ebf | ||
|
e9baceb039 | ||
|
720b72f8e4 | ||
a3ebe57f1f | |||
|
d9dc5e0ed7 | ||
|
bc024c3253 | ||
|
137d92624e | ||
|
5d13afd8f6 | ||
|
5628f42782 | ||
|
eae5b8bb06 | ||
|
40fef4e360 | ||
|
ab35143e18 | ||
|
f176ac628b | ||
|
7a09546198 |
18
.gitignore
vendored
18
.gitignore
vendored
@ -1,6 +1,11 @@
|
||||
# IDE folders
|
||||
.idea
|
||||
|
||||
src/mibew/install/package
|
||||
src/absent_*
|
||||
src/release*
|
||||
src/upload*
|
||||
src/*.po
|
||||
|
||||
# Do not index actual configuration files
|
||||
src/mibew/configs/config.yml
|
||||
@ -33,17 +38,18 @@ src/mibew/js/vendor
|
||||
|
||||
# Do not index node.js modules that are used for building
|
||||
src/node_modules
|
||||
src/package-lock.json
|
||||
|
||||
# Do not index compiled js files of the core
|
||||
src/mibew/js/compiled/*
|
||||
!src/mibew/js/compiled/.keep
|
||||
|
||||
# Do not index compiled files of chat styles
|
||||
src/mibew/styles/chats/default/templates_compiled/client_side/*
|
||||
!src/mibew/styles/chats/default/templates_compiled/client_side/.keep
|
||||
src/mibew/styles/chats/default/js/compiled/*
|
||||
!src/mibew/styles/chats/default/js/compiled/.keep
|
||||
src/mibew/styles/chats/*/templates_compiled/client_side/*
|
||||
!src/mibew/styles/chats/*/templates_compiled/client_side/.keep
|
||||
src/mibew/styles/chats/*/js/compiled/*
|
||||
!src/mibew/styles/chats/*/js/compiled/.keep
|
||||
|
||||
# Do not index compiled files of page styles
|
||||
src/mibew/styles/pages/default/templates_compiled/client_side/*
|
||||
!src/mibew/styles/pages/default/templates_compiled/client_side/.keep
|
||||
src/mibew/styles/pages/*/templates_compiled/client_side/*
|
||||
!src/mibew/styles/pages/*/templates_compiled/client_side/.keep
|
||||
|
3
.gitmodules
vendored
Normal file
3
.gitmodules
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
[submodule "src/i18n"]
|
||||
path = src/i18n
|
||||
url = git@github.com:Mibew/i18n.git
|
12
ISSUE_TEMPLATE.md
Normal file
12
ISSUE_TEMPLATE.md
Normal file
@ -0,0 +1,12 @@
|
||||
### Environment
|
||||
* Mibew Messenger version:
|
||||
* OS:
|
||||
* Web server:
|
||||
* PHP:
|
||||
* PHP extensions:
|
||||
* MySQL:
|
||||
### Expected behavior
|
||||
|
||||
### Actual behavior
|
||||
|
||||
### Steps to reproduce the behavior
|
8
PULL_REQUEST_TEMPLATE.md
Normal file
8
PULL_REQUEST_TEMPLATE.md
Normal file
@ -0,0 +1,8 @@
|
||||
Fixes # .
|
||||
|
||||
Changes proposed in this pull request:
|
||||
-
|
||||
-
|
||||
-
|
||||
|
||||
@Mibew/core-developers
|
38
README.md
38
README.md
@ -11,7 +11,7 @@ This repository contains the core of Mibew Messenger application.
|
||||
## Server requirements
|
||||
|
||||
1. A webserver or web hosting account running on any major Operating System
|
||||
2. PHP (5.3.3 and above) with PDO, pdo_mysql and gd extensions
|
||||
2. PHP (7.2.5 and above) with PDO, pdo_mysql, cURL, mbstring and gd extensions
|
||||
3. MySQL 5.0 and above
|
||||
|
||||
## Build from sources
|
||||
@ -33,7 +33,39 @@ Mibew Messenger is licensed under the terms of [Apache License, Version 2.0](htt
|
||||
|
||||
## Other repositories of the Mibew project
|
||||
|
||||
### Actual
|
||||
1. [Mibew Messenger i18n repository](https://github.com/Mibew/i18n)
|
||||
2. [Mibew Messenger design repository](https://github.com/Mibew/design)
|
||||
3. [Mibew Java applications repository](https://github.com/Mibew/java)
|
||||
4. [Mibew Tray repository](https://github.com/Mibew/tray)
|
||||
3. [Mibew documentation repository](https://github.com/Mibew/docs.mibew.org)
|
||||
|
||||
### Obsolete
|
||||
1. [Mibew Java applications repository](https://github.com/Mibew/java)
|
||||
2. [Mibew Tray repository](https://github.com/Mibew/tray)
|
||||
|
||||
### Plugins
|
||||
|
||||
1. [Mibew Boilerplate plugin](https://github.com/Mibew/boilerplate-plugin) - a template for a real plugin
|
||||
|
||||
#### Ready for production use
|
||||
|
||||
1. [Mibew Advanced Button plugin](https://github.com/Mibew/advanced-button-plugin)
|
||||
2. [Mibew Auto Invite plugin](https://github.com/Mibew/auto-invite-plugin)
|
||||
3. [Mibew Auto Reply plugin](https://github.com/Mibew/auto-reply-plugin)
|
||||
4. [Mibew Broadcast plugin](https://github.com/Mibew/broadcast-plugin)
|
||||
5. [Mibew Bulk Logs Operations plugin](https://github.com/Mibew/bulk-logs-operations-plugin)
|
||||
6. [Mibew Button Refresh plugin](https://github.com/Mibew/button-refresh-plugin)
|
||||
7. [Mibew Emoji plugin](https://github.com/Mibew/emoji-plugin)
|
||||
8. [Mibew Filter Visitors By Operator Code plugin](https://github.com/Mibew/filter-visitors-by-operator-code-plugin)
|
||||
9. [Mibew First Message plugin](https://github.com/Mibew/first-message-plugin)
|
||||
10. [Mibew Geo IP plugin](https://github.com/Mibew/geo-ip-plugin)
|
||||
11. [Mibew Google Maps plugin](https://github.com/Mibew/google-maps-plugin)
|
||||
12. [Mibew Open Street Map plugin](https://github.com/Mibew/open-street-map-plugin)
|
||||
13. [Mibew Operator Status plugin](https://github.com/Mibew/mibew-operator-status-plugin)
|
||||
14. [Mibew Purge History plugin](https://github.com/Mibew/purge-history-plugin)
|
||||
15. [Mibew Real Ban plugin](https://github.com/Mibew/real-ban-plugin)
|
||||
16. [Mibew Slack plugin](https://github.com/Mibew/mibew_slack)
|
||||
17. [Mibew Title Notification plugin](https://github.com/Mibew/title-notification-plugin)
|
||||
|
||||
#### Not ready for production use (not stable, broken, obsolete, etc.)
|
||||
|
||||
1. [Mibew External API plugin](https://github.com/Mibew/external-api-plugin)
|
||||
|
27
src/.eslintrc
Normal file
27
src/.eslintrc
Normal file
@ -0,0 +1,27 @@
|
||||
{
|
||||
"extends": "eslint:recommended",
|
||||
"rules": {
|
||||
"indent": ["error", 4, {"SwitchCase": 1}],
|
||||
"no-trailing-spaces": "error",
|
||||
"semi": ["error", "always"],
|
||||
"guard-for-in": "error",
|
||||
"no-unused-vars": ["error", {"caughtErrors": "none", "args": "none"}]
|
||||
},
|
||||
"globals": {
|
||||
"Mibew": true,
|
||||
"MibewAPI": true,
|
||||
"MibewAPIInteraction": true,
|
||||
"MibewAPIChatInteraction": true,
|
||||
"MibewAPIUsersInteraction": true,
|
||||
"MibewAPIExecutionContext": true,
|
||||
"Handlebars": true,
|
||||
"_": true,
|
||||
"Backbone": true,
|
||||
"jQuery": true,
|
||||
"vex": true,
|
||||
"validator": true
|
||||
},
|
||||
"env":{
|
||||
"browser": true
|
||||
}
|
||||
}
|
@ -3,13 +3,13 @@
|
||||
"private": true,
|
||||
"dependencies": {
|
||||
"underscore": "1.8.2",
|
||||
"json": "2012.10.08",
|
||||
"jquery": "1.11.2",
|
||||
"json": "https://github.com/douglascrockford/JSON-js.git#c98948ae1944a28e2e8ebc3717894e580aeaaa05",
|
||||
"jquery": "1.11.3",
|
||||
"backbone": "1.1.2",
|
||||
"marionette": "2.4.1",
|
||||
"handlebars": "3.0.0",
|
||||
"handlebars": "4.3.0",
|
||||
"vex": "2.3.2",
|
||||
"validator-js": "3.34.0"
|
||||
"validator-js": "3.40.0"
|
||||
},
|
||||
"resolutions": {
|
||||
"underscore": "1.8.2"
|
||||
|
@ -1,39 +1,49 @@
|
||||
{
|
||||
"name": "mibew/mibew",
|
||||
"version": "2.0.0",
|
||||
"version": "3.6.0",
|
||||
"description": "Mibew Messenger - open-source live support application",
|
||||
"type": "project",
|
||||
"homepage": "http://mibew.org",
|
||||
"homepage": "https://mibew.org",
|
||||
"license": "Apache-2.0",
|
||||
"authors": [
|
||||
{
|
||||
"name": "Mibew Messenger Project",
|
||||
"homepage": "http://mibew.org/credits"
|
||||
"homepage": "https://mibew.org/credits"
|
||||
}
|
||||
],
|
||||
"support": {
|
||||
"email": "support@mibew.org",
|
||||
"issues": "https://github.com/mibew/mibew/issues",
|
||||
"forum": "http://mibew.org/forums",
|
||||
"forum": "https://mibew.org/forums",
|
||||
"source": "https://github.com/mibew/mibew"
|
||||
},
|
||||
"repositories": [
|
||||
{
|
||||
"type": "vcs",
|
||||
"url": "https://github.com/mibew/handlebars.php"
|
||||
},
|
||||
{
|
||||
"type": "vcs",
|
||||
"url": "https://github.com/mibew/handlebars.php-helpers"
|
||||
}
|
||||
],
|
||||
"require": {
|
||||
"xamin/handlebars.php": "0.10.*",
|
||||
"justblackbird/handlebars.php-helpers": "~0.2.1",
|
||||
"symfony/http-foundation": "2.6.*",
|
||||
"symfony/routing": "2.6.*",
|
||||
"symfony/config": "2.6.*",
|
||||
"symfony/yaml": "2.6.*",
|
||||
"mibew/handlebars.php": "~0.10.5",
|
||||
"mibew/handlebars.php-helpers": "1.*",
|
||||
"symfony/http-foundation": "4.4.*",
|
||||
"symfony/routing": "4.4.*",
|
||||
"symfony/config": "4.4.*",
|
||||
"symfony/yaml": "^5.2",
|
||||
"symfony/translation": "2.6.*",
|
||||
"tedivm/stash": "0.12.*",
|
||||
"canteen/html5": "1.1.*",
|
||||
"mibew/html5": "1.1.*",
|
||||
"vierbergenlars/php-semver": "3.0.*",
|
||||
"swiftmailer/swiftmailer": "~5.4.0",
|
||||
"ua-parser/uap-php": "~3.4.1",
|
||||
"ua-parser/uap-php": "^3.9",
|
||||
"true/punycode": "~1.1"
|
||||
},
|
||||
"require-dev": {
|
||||
"squizlabs/php_codesniffer": "2.*"
|
||||
"squizlabs/php_codesniffer": "3.*"
|
||||
},
|
||||
"config": {
|
||||
"vendor-dir": "mibew/vendor"
|
||||
|
474
src/gulpfile.js
474
src/gulpfile.js
@ -1,8 +1,9 @@
|
||||
// Initialize requirements
|
||||
var fs = require('fs'),
|
||||
https = require('https'),
|
||||
exec = require('child_process').exec,
|
||||
eventStream = require('event-stream'),
|
||||
runSequence = require('run-sequence'),
|
||||
runSequence = require('gulp4-run-sequence'),
|
||||
through = require('through2'),
|
||||
lodash = require('lodash'),
|
||||
PoFile = require('pofile'),
|
||||
@ -24,9 +25,12 @@ var fs = require('fs'),
|
||||
chmod = require('gulp-chmod'),
|
||||
xgettext = require('gulp-xgettext'),
|
||||
concatPo = require('gulp-concat-po'),
|
||||
rename = require('gulp-rename');
|
||||
rename = require('gulp-rename'),
|
||||
eslint = require('gulp-eslint'),
|
||||
removeDuplicateHeaders = require('mibew-gulp-greh'),
|
||||
mkdirp = require('mkdirp');
|
||||
|
||||
// Set global configs.
|
||||
// Set global configuration
|
||||
var config = {
|
||||
mibewPath: 'mibew',
|
||||
configsPath: 'mibew/configs',
|
||||
@ -38,61 +42,83 @@ var config = {
|
||||
jsPath: 'mibew/js',
|
||||
chatStylesPath: 'mibew/styles/chats',
|
||||
pageStylesPath: 'mibew/styles/pages',
|
||||
i18nPath: 'i18n',
|
||||
i18nPrefix: 'mibew-i18n-',
|
||||
releasePath: 'release',
|
||||
uploadPath: 'upload',
|
||||
compiledTemplatesHeader: fs.readFileSync('tools/compiled_templates_header.txt'),
|
||||
getComposerUrl: 'https://getcomposer.org/installer',
|
||||
phpBin: 'php -d "suhosin.executor.include.whitelist = phar"',
|
||||
package: require('./composer.json')
|
||||
phpBin: 'php -d "suhosin.executor.include.whitelist = phar" -d "memory_limit=512M"',
|
||||
package: require('./composer.json'),
|
||||
msginit: 'msginit',
|
||||
msgcat: 'msgcat'
|
||||
}
|
||||
config.i18nSuffix = '-' + config.package.version + '-' + strftime('%Y%m%d');
|
||||
|
||||
// Tasks for cleaning //////////////////
|
||||
|
||||
// Cleans all built files
|
||||
gulp.task('clean', function(callback) {
|
||||
del([
|
||||
'release',
|
||||
return del([
|
||||
config.releasePath,
|
||||
'composer.lock',
|
||||
config.phpVendorPath,
|
||||
config.jsVendorPath,
|
||||
config.jsPath + '/compiled/**/*',
|
||||
'!' + config.jsPath + '/compiled/.keep',
|
||||
config.chatStylesPath + '/default/templates_compiled/client_side/*.js',
|
||||
config.chatStylesPath + '/default/js/compiled/*.js',
|
||||
config.pageStylesPath + '/default/templates_compiled/client_side/*.js'
|
||||
config.chatStylesPath + '/*/templates_compiled/client_side/*.js',
|
||||
config.chatStylesPath + '/*/js/compiled/*.js',
|
||||
config.pageStylesPath + '/*/templates_compiled/client_side/*.js'
|
||||
], callback);
|
||||
});
|
||||
|
||||
// Checks all PHP files with PHP Code Sniffer.
|
||||
gulp.task('phpcs', ['composer-install-dev'], function() {
|
||||
return gulp.src([
|
||||
config.mibewPath + '/**/*.php',
|
||||
'!' + config.phpVendorPath + '/**/*.*',
|
||||
'!' + config.pluginsPath + '/**/*.*',
|
||||
'!' + config.cachePath + '/**/*.*'
|
||||
], {
|
||||
// Content of the cache directory is readable only for webserver. Thus
|
||||
// we must to set "strict" option to false to prevent "EACCES" errors.
|
||||
// At the same we need to see all errors that take place.
|
||||
strict: false,
|
||||
silent: false
|
||||
})
|
||||
.pipe(phpcs({
|
||||
bin: config.phpVendorPath + '/bin/phpcs',
|
||||
standard: 'PSR2',
|
||||
warningSeverity: 0
|
||||
}))
|
||||
.pipe(phpcs.reporter('log'))
|
||||
.pipe(phpcs.reporter('fail'));
|
||||
// Cleans temporary English translation in the release dir
|
||||
gulp.task('clean-tmp-po', function(callback) {
|
||||
return del([config.releasePath + '/translation.po'], callback);
|
||||
});
|
||||
|
||||
// Cleans temporary files of translations in the release dir
|
||||
gulp.task('clean-tmp-i18n-files', function(callback) {
|
||||
return del([
|
||||
config.releasePath + '/**/*',
|
||||
'!' + config.releasePath + '/*.zip',
|
||||
'!' + config.releasePath + '/*.tar.gz',
|
||||
'!' + config.releasePath + '/*.pot'
|
||||
], callback);
|
||||
});
|
||||
|
||||
// Cleans all files prepared for uploading to CDN
|
||||
gulp.task('clean-upload', function(callback) {
|
||||
return del([config.uploadPath], callback);
|
||||
});
|
||||
|
||||
// Cleans everything
|
||||
gulp.task('clean-all', function(callback) {
|
||||
runSequence( ['clean', 'clean-upload'],
|
||||
callback );
|
||||
});
|
||||
|
||||
|
||||
// Watcher tasks ///////////////////////
|
||||
|
||||
// Watch styles
|
||||
gulp.task('watch', function() {
|
||||
gulp.watch(config.pageStylesPath + '/**/*.handlebars', gulp.series('page-styles'));
|
||||
gulp.watch(config.chatStylesPath + '/**/js/source/**/*.js', gulp.series('chat-styles-js'));
|
||||
gulp.watch(config.chatStylesPath + '/**/*.handlebars', gulp.series('chat-styles-handlebars'));
|
||||
});
|
||||
|
||||
// Service tasks //////////////////
|
||||
|
||||
// Get and install PHP Composer
|
||||
gulp.task('get-composer', function(callback) {
|
||||
// Check if Composer already in place
|
||||
// Check whether Composer is already in place
|
||||
if (fs.existsSync('./composer.phar')) {
|
||||
callback(null);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
// Get installer from the internet
|
||||
// Get installer from the Internet
|
||||
https.get(config.getComposerUrl, function(response) {
|
||||
// Run PHP to install Composer
|
||||
var php = exec(config.phpBin, function(error, stdout, stderr) {
|
||||
@ -104,18 +130,20 @@ gulp.task('get-composer', function(callback) {
|
||||
});
|
||||
|
||||
// Install Composer dependencies excluding development ones
|
||||
gulp.task('composer-install', ['get-composer'], function(callback) {
|
||||
exec(config.phpBin + ' composer.phar install --no-dev', function(error, stdout, stderr) {
|
||||
gulp.task('composer-install', gulp.series('get-composer', function(callback) {
|
||||
exec(config.phpBin + ' composer.phar install --no-dev',
|
||||
function(error, stdout, stderr) {
|
||||
callback(error ? stderr : null);
|
||||
});
|
||||
});
|
||||
}));
|
||||
|
||||
// Install all Composer dependencies
|
||||
gulp.task('composer-install-dev', ['get-composer'], function(callback) {
|
||||
exec(config.phpBin + ' composer.phar install', function(error, stdout, stderr) {
|
||||
gulp.task('composer-install-dev', gulp.series('get-composer', function(callback) {
|
||||
exec(config.phpBin + ' composer.phar install',
|
||||
function(error, stdout, stderr) {
|
||||
callback(error ? stderr : null);
|
||||
});
|
||||
});
|
||||
}));
|
||||
|
||||
// Installs bower dependencies
|
||||
gulp.task('bower-install', function(callback) {
|
||||
@ -125,14 +153,15 @@ gulp.task('bower-install', function(callback) {
|
||||
})
|
||||
.on('end', function() {
|
||||
// We should manually minify JavaScript files that was not minified
|
||||
// by bower packages' authors.
|
||||
// by bower packages' authors
|
||||
// TODO: This is a temproary workaround and should be removed once
|
||||
// the packages will be fixed.
|
||||
// the packages will be fixed
|
||||
var stream = eventStream.merge(
|
||||
gulp.src(config.jsVendorPath + '/backbone/backbone.js', {base: config.jsVendorPath})
|
||||
gulp.src(config.jsVendorPath + '/backbone/backbone.js',
|
||||
{base: config.jsVendorPath})
|
||||
.pipe(uglify({preserveComments: 'some'}))
|
||||
// There are neither "@license" tag nor "!preserve" in the
|
||||
// header. Add the header manually.
|
||||
// header. Add the header manually
|
||||
.pipe(header(
|
||||
"// Backbone.js 1.1.2\n"
|
||||
+ "// (c) 2010-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n"
|
||||
@ -141,10 +170,11 @@ gulp.task('bower-install', function(callback) {
|
||||
+ "// http://backbonejs.org\n"
|
||||
))
|
||||
.pipe(rename('backbone/backbone-min.js')),
|
||||
gulp.src(config.jsVendorPath + '/json/json2.js', {base: config.jsVendorPath})
|
||||
gulp.src(config.jsVendorPath + '/json/json2.js',
|
||||
{base: config.jsVendorPath})
|
||||
.pipe(uglify({preserveComments: 'some'}))
|
||||
// There are neither "@license" tag nor "!preserve" in the
|
||||
// header. Add the header manually.
|
||||
// header, add the header manually
|
||||
.pipe(header("// json2.js. Public Domain. See http://www.JSON.org/js.html\n"))
|
||||
.pipe(rename('json/json2.min.js'))
|
||||
)
|
||||
@ -156,7 +186,51 @@ gulp.task('bower-install', function(callback) {
|
||||
});
|
||||
});
|
||||
|
||||
// Compile all JavaScript files of the Mibew Core
|
||||
// Tasks for checking //////////////////
|
||||
|
||||
// Checks all PHP files with PHP Code Sniffer
|
||||
gulp.task('phpcs', gulp.series('composer-install-dev', function() {
|
||||
return gulp.src([
|
||||
config.mibewPath + '/**/*.php',
|
||||
'!' + config.phpVendorPath + '/**/*.*',
|
||||
'!' + config.pluginsPath + '/**/*.*',
|
||||
'!' + config.cachePath + '/**/*.*'
|
||||
], {
|
||||
// Content of the cache directory is readable only for webserver.
|
||||
// Thus we must to set "strict" option to false to prevent "EACCES"
|
||||
// errors. At the same we need to see all errors that take place.
|
||||
strict: false,
|
||||
silent: false
|
||||
})
|
||||
.pipe(phpcs({
|
||||
bin: config.phpVendorPath + '/bin/phpcs',
|
||||
standard: 'PSR2',
|
||||
warningSeverity: 0
|
||||
}))
|
||||
.pipe(phpcs.reporter('log'))
|
||||
.pipe(phpcs.reporter('fail'));
|
||||
}));
|
||||
|
||||
// Checks all JavaScript Source files with ESLint
|
||||
gulp.task('eslint', function() {
|
||||
return gulp.src(config.jsPath + '/source/**/*.js')
|
||||
.pipe(eslint())
|
||||
.pipe(eslint.format())
|
||||
.pipe(eslint.failAfterError());
|
||||
});
|
||||
|
||||
|
||||
// Restore empty English translation in the source code
|
||||
gulp.task('post-pack-cleanup', function(callback) {
|
||||
gulp.src('translation.po')
|
||||
.pipe(gulp.dest(config.mibewPath + '/locales/en/'));
|
||||
|
||||
del(['translation.po', config.releasePath + '/translation.po'], callback);
|
||||
});
|
||||
|
||||
// Tasks of compiling //////////////////
|
||||
|
||||
// Compile all JavaScript files of the Mibew Messenger Core
|
||||
gulp.task('js', function() {
|
||||
return eventStream.merge(
|
||||
getClientSideApp('default'),
|
||||
@ -166,21 +240,18 @@ gulp.task('js', function() {
|
||||
gulp.src(config.jsPath + '/source/**/*.js')
|
||||
)
|
||||
.pipe(uglify({preserveComments: 'some'}))
|
||||
.pipe(removeDuplicateHeaders())
|
||||
.pipe(gulp.dest(config.jsPath + '/compiled'));
|
||||
});
|
||||
|
||||
// Performs all job related with chat styles.
|
||||
gulp.task('chat-styles', ['chat-styles-handlebars', 'chat-styles-js'], function() {
|
||||
// This task is just a combination of other tasks. That is why there is no
|
||||
// real code.
|
||||
});
|
||||
|
||||
// Compile and concatenate handlebars files for all chat styles.
|
||||
// Compile and concatenate Handlebars templates for all chat styles
|
||||
gulp.task('chat-styles-handlebars', function() {
|
||||
// TODO: Process all available styles, not only the default one.
|
||||
var stylePath = config.chatStylesPath + '/default';
|
||||
|
||||
return gulp.src(stylePath + '/templates_src/client_side/**/*.handlebars')
|
||||
return getChildDirs(config.chatStylesPath)
|
||||
.then(function (dirs) {
|
||||
return Promise.all(dirs.map(function (dir) {
|
||||
return new Promise(function(resolve, reject) {
|
||||
gulp.src(config.chatStylesPath + '/' + dir
|
||||
+ '/templates_src/client_side/**/*.handlebars')
|
||||
.pipe(handlebars({
|
||||
// Use specific version of Handlebars.js
|
||||
handlebars: handlebarsEngine
|
||||
@ -189,26 +260,42 @@ gulp.task('chat-styles-handlebars', function() {
|
||||
.pipe(concat('templates.js'))
|
||||
.pipe(uglify({preserveComments: 'some'}))
|
||||
.pipe(header(config.compiledTemplatesHeader))
|
||||
.pipe(gulp.dest(stylePath + '/templates_compiled/client_side'));
|
||||
.pipe(gulp.dest(config.chatStylesPath + '/' + dir
|
||||
+ '/templates_compiled/client_side'))
|
||||
.on('end', resolve)
|
||||
.on('error', reject);
|
||||
});
|
||||
}));
|
||||
});
|
||||
});
|
||||
|
||||
// Compile and concatenate js files for all chat styles.
|
||||
// Compile and concatenate js files for all chat styles
|
||||
gulp.task('chat-styles-js', function() {
|
||||
// TODO: Process all available styles, not only the default one.
|
||||
var stylePath = config.chatStylesPath + '/default';
|
||||
|
||||
return gulp.src(stylePath + '/js/source/**/*.js')
|
||||
return getChildDirs(config.chatStylesPath)
|
||||
.then(function (dirs) {
|
||||
return Promise.all(dirs.map(function (dir) {
|
||||
return new Promise(function(resolve, reject) {
|
||||
gulp.src(config.chatStylesPath + '/' + dir
|
||||
+ '/js/source/**/*.js')
|
||||
.pipe(concat('scripts.js'))
|
||||
.pipe(uglify({preserveComments: 'some'}))
|
||||
.pipe(gulp.dest(stylePath + '/js/compiled'));
|
||||
.pipe(gulp.dest(config.chatStylesPath + '/' + dir
|
||||
+ '/js/compiled'))
|
||||
.on('end', resolve)
|
||||
.on('error', reject);
|
||||
});
|
||||
}));
|
||||
});
|
||||
});
|
||||
|
||||
// Performs all job related with pages styles.
|
||||
// Performs all job related to pages styles
|
||||
gulp.task('page-styles', function() {
|
||||
// TODO: Process all available styles, not only the default one.
|
||||
var stylePath = config.pageStylesPath + '/default';
|
||||
|
||||
return gulp.src(stylePath + '/templates_src/client_side/**/*.handlebars')
|
||||
return getChildDirs(config.pageStylesPath)
|
||||
.then(function (dirs) {
|
||||
return Promise.all(dirs.map(function (dir) {
|
||||
return new Promise(function(resolve, reject){
|
||||
gulp.src(config.pageStylesPath + '/' + dir
|
||||
+ '/templates_src/client_side/**/*.handlebars')
|
||||
.pipe(handlebars({
|
||||
// Use specific version of Handlebars.js
|
||||
handlebars: handlebarsEngine
|
||||
@ -217,10 +304,32 @@ gulp.task('page-styles', function() {
|
||||
.pipe(concat('templates.js'))
|
||||
.pipe(uglify({preserveComments: 'some'}))
|
||||
.pipe(header(config.compiledTemplatesHeader))
|
||||
.pipe(gulp.dest(stylePath + '/templates_compiled/client_side'));
|
||||
.pipe(gulp.dest(config.pageStylesPath + '/' + dir
|
||||
+ '/templates_compiled/client_side'))
|
||||
.on('end', resolve)
|
||||
.on('error', reject);
|
||||
});
|
||||
}));
|
||||
});
|
||||
});
|
||||
|
||||
// Generate .pot files based on the sources
|
||||
// Performs all job related to chat styles
|
||||
gulp.task('chat-styles', gulp.series('chat-styles-handlebars', 'chat-styles-js'));
|
||||
|
||||
// Prepares ready to use development version of Mibew Messenger without
|
||||
// packing or validating it
|
||||
gulp.task('rebuild', function(callback) {
|
||||
runSequence(
|
||||
'clean',
|
||||
['js', 'chat-styles', 'page-styles', 'composer-install',
|
||||
'bower-install'],
|
||||
callback
|
||||
);
|
||||
});
|
||||
|
||||
// Tasks for localization issues ///////
|
||||
|
||||
// Generate POT-file based upon the source code
|
||||
gulp.task('generate-pot', function() {
|
||||
return eventStream.merge(
|
||||
gulp.src([
|
||||
@ -229,9 +338,10 @@ gulp.task('generate-pot', function() {
|
||||
'!' + config.pluginsPath + '/**/*.*',
|
||||
'!' + config.cachePath + '/**/*.*'
|
||||
], {
|
||||
// Content of the cache directory is readable only for webserver.
|
||||
// Thus we must to set "strict" option to false to prevent "EACCES"
|
||||
// errors. At the same we need to see all errors that take place.
|
||||
// Content of the cache directory is readable only for
|
||||
// webserver. Thus we must to set "strict" option to false
|
||||
// to prevent "EACCES" errors. At the same we need to see all
|
||||
// errors that take place.
|
||||
strict: false,
|
||||
silent: false
|
||||
})
|
||||
@ -257,9 +367,12 @@ gulp.task('generate-pot', function() {
|
||||
], {base: config.mibewPath})
|
||||
.pipe(xgettextHandlebars())
|
||||
)
|
||||
.pipe(concatPo('translation.pot', {
|
||||
.pipe(concatPo(config.i18nPrefix + 'translation'
|
||||
+ config.i18nSuffix + '.pot',
|
||||
{
|
||||
headers: {
|
||||
'Project-Id-Version': 'Mibew Messenger ' + config.package.version,
|
||||
'Project-Id-Version': 'Mibew Messenger '
|
||||
+ config.package.version,
|
||||
'Report-Msgid-Bugs-To': config.package.support.email,
|
||||
'POT-Creation-Date': strftime('%Y-%m-%d %H:%M%z'),
|
||||
'PO-Revision-Date': '',
|
||||
@ -267,12 +380,70 @@ gulp.task('generate-pot', function() {
|
||||
'Language-Team': '',
|
||||
'Content-Type': 'text/plain; charset=UTF-8'
|
||||
}
|
||||
}))
|
||||
.pipe(gulp.dest('release'));
|
||||
})
|
||||
)
|
||||
.pipe(gulp.dest(config.releasePath));
|
||||
});
|
||||
|
||||
// Pack sources to .zip and .tar.gz archives.
|
||||
gulp.task('pack-sources', ['composer-install', 'bower-install'], function() {
|
||||
// Generate temporary English translation to be used in the release
|
||||
gulp.task('generate-tmp-po', gulp.series('generate-pot', function(callback) {
|
||||
return exec(config.msginit + ' --no-translator --no-wrap -i '
|
||||
+ config.releasePath + '/' + config.i18nPrefix + 'translation'
|
||||
+ config.i18nSuffix + '.pot' + ' -l en -o '
|
||||
+ config.releasePath + '/translation.po',
|
||||
function(error, stdout, stderr) {
|
||||
callback(error ? stderr : null);
|
||||
});
|
||||
}));
|
||||
|
||||
// Generate complete translations (that includes missed strings) to be used
|
||||
// in the release
|
||||
gulp.task('generate-pos', gulp.series('generate-tmp-po', function(callback) {
|
||||
|
||||
return getChildDirs(config.i18nPath + '/translations')
|
||||
.then(function (dirs) {
|
||||
return Promise.all(dirs.map(function (dir) {
|
||||
return new Promise(function(resolve, reject) {
|
||||
mkdirp(config.releasePath + '/' + dir, function (error) {
|
||||
if (error) {
|
||||
reject(error);
|
||||
}
|
||||
});
|
||||
exec(config.msgcat + ' ' + config.i18nPath + '/translations/'
|
||||
+ dir + '/translation.po ' + config.releasePath
|
||||
+ '/translation.po --no-location --no-wrap --use-first'
|
||||
+ ' -o ' + config.releasePath + '/' + dir
|
||||
+ '/translation.po',
|
||||
function(error, stdout, stderr) {
|
||||
if (error) {
|
||||
reject(error);
|
||||
}
|
||||
});
|
||||
|
||||
var sources = [
|
||||
config.i18nPath + '/translations/' + dir + '/**/*',
|
||||
'!' + config.i18nPath + '/translations/' + dir
|
||||
+ '/translation.po'
|
||||
];
|
||||
|
||||
gulp.src(sources)
|
||||
.pipe(gulp.dest(config.releasePath + '/' + dir))
|
||||
.on('error', reject)
|
||||
.on('end', resolve);
|
||||
});
|
||||
}));
|
||||
});
|
||||
}));
|
||||
|
||||
// Packaging tasks /////////////////////
|
||||
|
||||
// Pack sources for release as .zip and .tar.gz archives
|
||||
gulp.task('pack-sources', gulp.series('composer-install', 'bower-install', function() {
|
||||
gulp.src(config.mibewPath + '/locales/en/translation.po')
|
||||
.pipe(gulp.dest('.'));
|
||||
gulp.src(config.releasePath + '/translation.po')
|
||||
.pipe(gulp.dest(config.mibewPath + '/locales/en/'));
|
||||
|
||||
var sources = [
|
||||
config.mibewPath + '/**/*',
|
||||
// Exclude user's config
|
||||
@ -315,13 +486,15 @@ gulp.task('pack-sources', ['composer-install', 'bower-install'], function() {
|
||||
'!' + config.jsVendorPath + '/vex/coffee{,/**}'
|
||||
];
|
||||
var srcOptions = {
|
||||
// Dot files (.htaccess, .keep, etc.) must be included in the package.
|
||||
// Dot files (.htaccess, .keep, etc.) must be included in the package
|
||||
dot: true,
|
||||
// Content of the cache directory is readable only for webserver. Thus
|
||||
// we must to set "strict" option to false to prevent "EACCES" errors.
|
||||
// At the same we need to see all errors that take place.
|
||||
strict: false,
|
||||
silent: false
|
||||
silent: false,
|
||||
// Preserve root directory name (i.e. 'mibew/')
|
||||
base: '.'
|
||||
}
|
||||
var version = config.package.version;
|
||||
|
||||
@ -332,35 +505,111 @@ gulp.task('pack-sources', ['composer-install', 'bower-install'], function() {
|
||||
.pipe(tar('mibew-' + version + '.tar'))
|
||||
.pipe(gzip())
|
||||
)
|
||||
.pipe(chmod(0644))
|
||||
.pipe(gulp.dest('release'));
|
||||
.pipe(chmod(644))
|
||||
.pipe(gulp.dest(config.releasePath));
|
||||
}));
|
||||
|
||||
// Pack translations for release as .zip and .tar.gz archives
|
||||
gulp.task('pack-i18n', function(callback) {
|
||||
return getChildDirs(config.i18nPath + '/translations')
|
||||
.then(function (dirs) {
|
||||
return Promise.all(dirs.map(function (dir) {
|
||||
return new Promise(function(resolve, reject) {
|
||||
|
||||
var srcOptions = {
|
||||
base: config.releasePath
|
||||
};
|
||||
|
||||
eventStream.merge(
|
||||
gulp.src(config.releasePath + '/' + dir
|
||||
+ '/**/*', srcOptions)
|
||||
.pipe(zip(config.i18nPrefix + dir
|
||||
+ config.i18nSuffix + '.zip')),
|
||||
gulp.src(config.releasePath + '/' + dir
|
||||
+ '/**/*', srcOptions)
|
||||
.pipe(tar(config.i18nPrefix + dir
|
||||
+ config.i18nSuffix + '.tar'))
|
||||
.pipe(gzip())
|
||||
)
|
||||
.pipe(chmod(644))
|
||||
.pipe(gulp.dest(config.releasePath))
|
||||
.on('error', reject)
|
||||
.on('end', resolve);
|
||||
|
||||
});
|
||||
}));
|
||||
});
|
||||
});
|
||||
|
||||
// Performs all tasks in the correct order.
|
||||
// Tasks of releasing //////////////////
|
||||
|
||||
// Prepare release of Mibew Messenger
|
||||
gulp.task('prepare-release', function(callback) {
|
||||
runSequence(
|
||||
'clean',
|
||||
['phpcs', 'js', 'chat-styles', 'page-styles', 'generate-pot'],
|
||||
['phpcs', 'js', 'chat-styles', 'page-styles', 'generate-pot',
|
||||
'generate-tmp-po'],
|
||||
'pack-sources',
|
||||
'post-pack-cleanup',
|
||||
callback
|
||||
);
|
||||
});
|
||||
|
||||
// Builds the sources
|
||||
// Prepare releases of translations for Mibew Messenger
|
||||
gulp.task('prepare-i18n-release', function(callback) {
|
||||
runSequence( 'clean-tmp-po',
|
||||
'generate-pos',
|
||||
'pack-i18n',
|
||||
'clean-tmp-i18n-files',
|
||||
callback
|
||||
);
|
||||
});
|
||||
|
||||
// Mirror prepared releases of Mibew Messenger and its translations in a form
|
||||
// intended for uploading into the CDN
|
||||
gulp.task('prepare-for-upload', function(callback) {
|
||||
gulp.src(config.releasePath + '/mibew-' + config.package.version + '.*')
|
||||
.pipe(gulp.dest(config.uploadPath + '/core/' + config.package.version + '/'));
|
||||
|
||||
gulp.src(config.releasePath + '/mibew-i18n-translation-' + config.package.version + '-*.pot')
|
||||
.pipe(gulp.dest(config.uploadPath + '/i18n/_pot/' + config.package.version + '/'));
|
||||
|
||||
return getChildDirs(config.i18nPath + '/translations')
|
||||
.then(function (dirs) {
|
||||
return Promise.all(dirs.map(function (dir) {
|
||||
return new Promise(function(resolve, reject) {
|
||||
gulp.src(config.releasePath + '/mibew-i18n-' + dir + '-' + config.package.version + '-*.*')
|
||||
.pipe(gulp.dest(config.uploadPath + '/i18n/' + dir + '/' + config.package.version + '/'))
|
||||
.on('error', reject)
|
||||
.on('end', resolve);
|
||||
});
|
||||
}));
|
||||
});
|
||||
});
|
||||
|
||||
// Perform all preparations before uploading the release of Mibew Messenger and
|
||||
// its translations into the CDN
|
||||
gulp.task('prepare-all', function(callback) {
|
||||
runSequence('clean-all', 'prepare-release', 'prepare-i18n-release',
|
||||
'prepare-for-upload', callback);
|
||||
});
|
||||
|
||||
// Prepare release archives of the development version of Mibew Messenger
|
||||
gulp.task('default', function(callback) {
|
||||
runSequence(
|
||||
['js', 'chat-styles', 'page-styles'],
|
||||
'clean',
|
||||
['js', 'chat-styles', 'page-styles', 'generate-tmp-po'],
|
||||
'pack-sources',
|
||||
['post-pack-cleanup', 'clean-tmp-po'],
|
||||
callback
|
||||
);
|
||||
});
|
||||
|
||||
|
||||
/**
|
||||
* Loads and prepare js file for a client side application with the specified
|
||||
* name.
|
||||
*
|
||||
* @param {String} name Application name
|
||||
* @param {String} name Application name.
|
||||
* @returns A files stream that can be piped to any gulp plugin.
|
||||
*/
|
||||
var getClientSideApp = function(name) {
|
||||
@ -430,7 +679,7 @@ var xgettextHandlebars = function() {
|
||||
contents = file.contents.toString();
|
||||
|
||||
while (match = helperRegExp.exec(contents)) {
|
||||
// Try to find item in the .po file by its name.
|
||||
// Try to find item in the .po file by its name
|
||||
var item = lodash.find(po.items, function(item) {
|
||||
return match[2] === item.msgid;
|
||||
});
|
||||
@ -438,7 +687,7 @@ var xgettextHandlebars = function() {
|
||||
var line = contents.substr(0, match.index).split(/\r?\n|\r/g).length;
|
||||
|
||||
if (!item) {
|
||||
// There is no such item. Create new one.
|
||||
// There is no such item, create new one
|
||||
item = new PoFile.Item();
|
||||
item.msgid = match[2].replace(/\\'/g, "'").replace(/\\"/g, '"');
|
||||
po.items.push(item);
|
||||
@ -449,9 +698,46 @@ var xgettextHandlebars = function() {
|
||||
}
|
||||
|
||||
// Update file contents
|
||||
file.contents = new Buffer(po.toString());
|
||||
file.contents = Buffer.from(po.toString());
|
||||
this.push(file);
|
||||
|
||||
callback();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves list of all dirs which are placed in the specified one.
|
||||
*
|
||||
* @param {String} srcDir A dir to search.
|
||||
* @returns Promise A promise which will be resolved with list of child dirs or
|
||||
* rejected with the occured error.
|
||||
*/
|
||||
var getChildDirs = function(srcDir) {
|
||||
return (new Promise(function(resolve, reject) {
|
||||
fs.readdir(srcDir, function (err, files) {
|
||||
if (err) {
|
||||
reject(err);
|
||||
} else {
|
||||
resolve(files);
|
||||
}
|
||||
});
|
||||
})).then(function (files) {
|
||||
// Replace all files that are not a directory with nulls.
|
||||
return Promise.all(files.map(function (file) {
|
||||
return new Promise(function (resolve, reject) {
|
||||
fs.lstat(srcDir + '/' + file, function (err, stat) {
|
||||
if (err) {
|
||||
reject(err);
|
||||
} else {
|
||||
resolve(stat.isDirectory() ? file : null);
|
||||
}
|
||||
});
|
||||
});
|
||||
}));
|
||||
}).then(function(dirs) {
|
||||
// Remove all nulls from the array.
|
||||
return dirs.filter(function (dir) {
|
||||
return null !== dir;
|
||||
});
|
||||
});
|
||||
}
|
||||
|
1
src/i18n
Submodule
1
src/i18n
Submodule
@ -0,0 +1 @@
|
||||
Subproject commit 55868d9973f531c3550575481bde4233cc625b91
|
@ -36,7 +36,7 @@ Options +FollowSymLinks
|
||||
# Use separate front controller for the system installator
|
||||
RewriteCond %{REQUEST_FILENAME} !-f
|
||||
RewriteCond %{REQUEST_FILENAME} !-d
|
||||
RewriteRule ^install(|/(.*))$ install.php [QSA,L]
|
||||
RewriteRule ^install(/(.*))?$ install.php [QSA,L]
|
||||
|
||||
# Rewrite all other requests for files and directories that do not exist to
|
||||
# the main front controller
|
||||
@ -46,9 +46,10 @@ Options +FollowSymLinks
|
||||
</IfModule>
|
||||
|
||||
<IfModule !mod_rewrite.c>
|
||||
# There is no mod_rewrite in the system. For the root Mibew directory
|
||||
# index_fallback.php should be loaded first to activate old-fashioned URLs.
|
||||
# For all other directories index.php is just a directory index file.
|
||||
# There is no mod_rewrite in the system. For the root Mibew Messenger
|
||||
# directory index_fallback.php should be loaded first to activate
|
||||
# old-fashioned URLs. For all other directories index.php is just a
|
||||
# directory index file.
|
||||
DirectoryIndex index_fallback.php index.php
|
||||
</IfModule>
|
||||
|
||||
|
@ -1,12 +1,12 @@
|
||||
Mibew Messenger
|
||||
Copyright 2005-2015 the original author or authors.
|
||||
Copyright 2005-2023 the original author or authors.
|
||||
|
||||
REQUIREMENTS
|
||||
|
||||
* Apache web server 1.3.34 or above with the ability to use local .htaccess
|
||||
files (mod_rewrite module is optional, but recommended)
|
||||
* MySQL database 5.0 or above
|
||||
* PHP 5.3.3 or above with PDO, pdo_mysql and gd extensions
|
||||
* PHP 7.2.5 or above with PDO, pdo_mysql, cURL, mbstring and gd extensions
|
||||
|
||||
INSTALLATION
|
||||
|
||||
@ -37,3 +37,20 @@ On unix/linux platforms change the owner of /mibew/files/avatar and
|
||||
(for instance, www). The owner should have all rights on the folders
|
||||
/mibew/files/avatar and /mibew/cache
|
||||
(chmod 0700 /mibew/files/avatar && chmod 0700 /mibew/cache).
|
||||
|
||||
UPDATE
|
||||
|
||||
1. Backup your actual installation (i.e. code and database).
|
||||
2. Disable all plugins.
|
||||
3. Delete all items in your Mibew Messenger directory on the server.
|
||||
4. Unpack the archive with the official distrubition in that directory.
|
||||
5. Remove install.php file.
|
||||
6. Restore configuration (configs/ directory), plugins (plugins/ directory),
|
||||
(maybe) custom styles (if you have any), (maybe) additional
|
||||
locales (if you use any), and avatars (files/avatar/ directory) from the
|
||||
backup you've made at the step 1.
|
||||
7. Visit http://<yourdomain>/<path to your Mibew Messenger>/update and follow
|
||||
the instructions to update the database tables (if needed).
|
||||
8. Enable disabled plugins.
|
||||
|
||||
|
||||
|
@ -1 +1 @@
|
||||
Mibew/2.0
|
||||
Mibew/3.6.0
|
@ -72,7 +72,7 @@ thread:
|
||||
useragent: "varchar(255)"
|
||||
# Total count of user's messages related with the thread.
|
||||
messagecount: "varchar(16)"
|
||||
# ID of the group at Mibew side related with the thread.
|
||||
# ID of the group at Mibew Messenger side related with the thread.
|
||||
groupid: "int references {opgroup}(groupid)"
|
||||
|
||||
# Contains "by thread" statistics
|
||||
@ -104,7 +104,7 @@ requestcallback:
|
||||
fields:
|
||||
callbackid: "int NOT NULL auto_increment PRIMARY KEY"
|
||||
token: "varchar(64) NOT NULL DEFAULT ''"
|
||||
function: "varchar(64) NOT NULL"
|
||||
func: "varchar(64) NOT NULL"
|
||||
arguments: "varchar(1024)"
|
||||
indexes:
|
||||
token: [token]
|
||||
@ -129,12 +129,23 @@ translation:
|
||||
# Contains locales info
|
||||
locale:
|
||||
fields:
|
||||
# Artificial primary key
|
||||
# Artificial primary key.
|
||||
localeid: "int NOT NULL auto_increment PRIMARY KEY"
|
||||
# Locale code
|
||||
code: "varchar(5) NOT NULL"
|
||||
# Indicates if a locale is enabled or not.
|
||||
# Human readable name of the locale.
|
||||
name: "varchar(128) NOT NULL DEFAULT ''"
|
||||
# Indicates if the locale is enabled or not.
|
||||
enabled: "tinyint NOT NULL DEFAULT 0"
|
||||
# Indicates if the locale uses RTL writing.
|
||||
rtl: "tinyint NOT NULL DEFAULT 0"
|
||||
# Name of the locale which is used with PHP's setlocale to format dates.
|
||||
time_locale: "varchar(128) NOT NULL DEFAULT 'en_US'"
|
||||
# Serialized array of various date formats.
|
||||
date_format: "text"
|
||||
unique_keys:
|
||||
# Make sure locale code can be duplicated
|
||||
code: [code]
|
||||
|
||||
# Contains localized mail templates
|
||||
mailtemplate:
|
||||
@ -215,7 +226,7 @@ operatorstatistics:
|
||||
|
||||
revision:
|
||||
fields:
|
||||
id: "INT NOT NULL"
|
||||
id: "INT NOT NULL PRIMARY KEY"
|
||||
|
||||
# Contains relations between operators and groups
|
||||
operatortoopgroup:
|
||||
@ -303,5 +314,23 @@ plugin:
|
||||
installed: "tinyint NOT NULL DEFAULT 0"
|
||||
# Indicates if the plugin is enabled or not.
|
||||
enabled: "tinyint NOT NULL DEFAULT 0"
|
||||
# Indicates if the plugin is initialized or not.
|
||||
initialized: "tinyint NOT NULL DEFAULT 0"
|
||||
unique_keys:
|
||||
name: [name]
|
||||
|
||||
# Contains info about all available updates
|
||||
availableupdate:
|
||||
fields:
|
||||
# Artificial ID
|
||||
id: "INT NOT NULL auto_increment PRIMARY KEY"
|
||||
# Can be either "core" or fully qualified plugin's name
|
||||
target: "varchar(255) NOT NULL"
|
||||
# The latest available version of the plugin
|
||||
version: "varchar(255) NOT NULL"
|
||||
# A URL where the new version can be downloaded
|
||||
url: "text"
|
||||
# Description of the update
|
||||
description: "text"
|
||||
unique_keys:
|
||||
target: [target]
|
||||
|
@ -1,5 +1,5 @@
|
||||
# IMPORTANT: Before install mibew copy this file to config.yml and fill it with
|
||||
# your own settings!
|
||||
# IMPORTANT: Before install Mibew Messenger copy this file to config.yml and
|
||||
# fill it with your own settings!
|
||||
|
||||
|
||||
# MySQL Database parameters
|
||||
@ -13,7 +13,7 @@ database:
|
||||
use_persistent_connection: false
|
||||
|
||||
# Mail
|
||||
## This value will be used as sender address in all e-mails Mibew send.
|
||||
## This value will be used as sender address in all e-mails Mibew Messenger send.
|
||||
mailbox: mibew@yourdomain.com
|
||||
|
||||
## Mailer parameters
|
||||
@ -61,8 +61,8 @@ cache:
|
||||
memcached_servers:
|
||||
- host: localhost
|
||||
port: 11211
|
||||
# The "weight" field is optional and can be omitted.
|
||||
weight: 0
|
||||
# The "weight" field is optional and can be omitted and it's only positive int number.
|
||||
weight: 1
|
||||
# Actually, one can use any number of memcached servers he wants. Just
|
||||
# add servers description like the one above.
|
||||
|
||||
@ -77,10 +77,19 @@ default_locale: en
|
||||
# http://php.net/manual/en/timezones.php
|
||||
timezone: ""
|
||||
|
||||
# List of proxy's IP Mibew Messenger should trust. You should set this option
|
||||
# if you use Mibew Messenger with a load balancer or behind a proxy.
|
||||
trusted_proxies: []
|
||||
# Here is an example of what values this option can take:
|
||||
# trusted_proxies:
|
||||
# - 127.0.0.1
|
||||
# - ::1
|
||||
# - 10.0.0.0/8
|
||||
|
||||
# Plugins
|
||||
plugins: []
|
||||
|
||||
## Exapmle of plugins configuration
|
||||
## Example of plugins configuration
|
||||
# plugins:
|
||||
# "VendorName:PluginName":
|
||||
# weight: 100
|
||||
|
@ -49,6 +49,14 @@ chat_user:
|
||||
thread_id: \d{1,10}
|
||||
token: \d{1,10}
|
||||
|
||||
chat_user_check:
|
||||
path: /chat/{thread_id}/{token}/check
|
||||
defaults:
|
||||
_controller: Mibew\Controller\Chat\UserChatController::checkAction
|
||||
requirements:
|
||||
thread_id: \d{1,10}
|
||||
token: \d{1,10}
|
||||
|
||||
chat_user_invitation:
|
||||
path: /chat/invitation
|
||||
defaults:
|
||||
@ -80,11 +88,25 @@ chat_user_popup_style:
|
||||
requirements:
|
||||
style: "[0-9A-Za-z_]*"
|
||||
|
||||
chat_user_popup_style_force_secure:
|
||||
path: /chat/style/popup/{style}/force_secure
|
||||
defaults:
|
||||
_controller: Mibew\Controller\Chat\StyleController::loadPopupStyleAction
|
||||
style: ""
|
||||
force_secure: on
|
||||
requirements:
|
||||
style: "[0-9A-Za-z_]*"
|
||||
|
||||
chat_user_start:
|
||||
path: /chat
|
||||
defaults:
|
||||
_controller: Mibew\Controller\Chat\UserChatController::startAction
|
||||
|
||||
chat_user_cookie_set_permission:
|
||||
path: /chat/cookies-set-permission
|
||||
defaults:
|
||||
_controller: Mibew\Controller\Chat\UserChatController::cookieSetPermissionAction
|
||||
|
||||
# Pages that are available for all users
|
||||
button:
|
||||
path: /b
|
||||
@ -178,21 +200,24 @@ canned_message_add:
|
||||
path: /operator/canned-message/add
|
||||
defaults:
|
||||
_controller: Mibew\Controller\CannedMessageController::showEditFormAction
|
||||
_access_check: Mibew\AccessControl\Check\LoggedInCheck
|
||||
_access_check: Mibew\AccessControl\Check\PermissionsCheck
|
||||
_access_permissions: [CAN_ADMINISTRATE]
|
||||
methods: [GET]
|
||||
|
||||
canned_message_add_save:
|
||||
path: /operator/canned-message/add
|
||||
defaults:
|
||||
_controller: Mibew\Controller\CannedMessageController::submitEditFormAction
|
||||
_access_check: Mibew\AccessControl\Check\LoggedInCheck
|
||||
_access_check: Mibew\AccessControl\Check\PermissionsCheck
|
||||
_access_permissions: [CAN_ADMINISTRATE]
|
||||
methods: [POST]
|
||||
|
||||
canned_message_delete:
|
||||
path: /operator/canned-message/{message_id}/delete
|
||||
defaults:
|
||||
_controller: Mibew\Controller\CannedMessageController::deleteAction
|
||||
_access_check: Mibew\AccessControl\Check\LoggedInCheck
|
||||
_access_check: Mibew\AccessControl\Check\PermissionsCheck
|
||||
_access_permissions: [CAN_ADMINISTRATE]
|
||||
requirements:
|
||||
message_id: \d{1,10}
|
||||
|
||||
@ -200,7 +225,8 @@ canned_message_edit:
|
||||
path: /operator/canned-message/{message_id}/edit
|
||||
defaults:
|
||||
_controller: Mibew\Controller\CannedMessageController::showEditFormAction
|
||||
_access_check: Mibew\AccessControl\Check\LoggedInCheck
|
||||
_access_check: Mibew\AccessControl\Check\PermissionsCheck
|
||||
_access_permissions: [CAN_ADMINISTRATE]
|
||||
requirements:
|
||||
message_id: \d{1,10}
|
||||
methods: [GET]
|
||||
@ -209,7 +235,8 @@ canned_message_edit_save:
|
||||
path: /operator/canned-message/{message_id}/edit
|
||||
defaults:
|
||||
_controller: Mibew\Controller\CannedMessageController::submitEditFormAction
|
||||
_access_check: Mibew\AccessControl\Check\LoggedInCheck
|
||||
_access_check: Mibew\AccessControl\Check\PermissionsCheck
|
||||
_access_permissions: [CAN_ADMINISTRATE]
|
||||
requirements:
|
||||
message_id: \d{1,10}
|
||||
methods: [POST]
|
||||
@ -218,7 +245,8 @@ canned_messages:
|
||||
path: /operator/canned-message
|
||||
defaults:
|
||||
_controller: Mibew\Controller\CannedMessageController::indexAction
|
||||
_access_check: Mibew\AccessControl\Check\LoggedInCheck
|
||||
_access_check: Mibew\AccessControl\Check\PermissionsCheck
|
||||
_access_permissions: [CAN_ADMINISTRATE]
|
||||
|
||||
## Groups
|
||||
group_add:
|
||||
@ -349,7 +377,27 @@ locale_disable:
|
||||
_access_check: Mibew\AccessControl\Check\PermissionsCheck
|
||||
_access_permissions: [CAN_ADMINISTRATE]
|
||||
requirements:
|
||||
locale: "[a-z\-]{2,5}"
|
||||
locale: "[a-z\\-]{2,5}"
|
||||
|
||||
locale_edit:
|
||||
path: /operator/locale/{locale}/edit
|
||||
defaults:
|
||||
_controller: Mibew\Controller\Localization\LocaleController::showEditFormAction
|
||||
_access_check: Mibew\AccessControl\Check\PermissionsCheck
|
||||
_access_permissions: [CAN_ADMINISTRATE]
|
||||
requirements:
|
||||
locale: "[a-z\\-]{2,5}"
|
||||
methods: [GET]
|
||||
|
||||
locale_edit_save:
|
||||
path: /operator/locale/{locale}/edit
|
||||
defaults:
|
||||
_controller: Mibew\Controller\Localization\LocaleController::submitEditFormAction
|
||||
_access_check: Mibew\AccessControl\Check\PermissionsCheck
|
||||
_access_permissions: [CAN_ADMINISTRATE]
|
||||
requirements:
|
||||
locale: "[a-z\\-]{2,5}"
|
||||
methods: [POST]
|
||||
|
||||
locale_enable:
|
||||
path: /operator/locale/{locale}/enable
|
||||
@ -358,7 +406,7 @@ locale_enable:
|
||||
_access_check: Mibew\AccessControl\Check\PermissionsCheck
|
||||
_access_permissions: [CAN_ADMINISTRATE]
|
||||
requirements:
|
||||
locale: "[a-z\-]{2,5}"
|
||||
locale: "[a-z\\-]{2,5}"
|
||||
|
||||
locales:
|
||||
path: /operator/locale
|
||||
@ -650,7 +698,8 @@ statistics:
|
||||
defaults:
|
||||
type: "by-date"
|
||||
_controller: Mibew\Controller\StatisticsController::indexAction
|
||||
_access_check: Mibew\AccessControl\Check\LoggedInCheck
|
||||
_access_check: Mibew\AccessControl\Check\PermissionsCheck
|
||||
_access_permissions: [CAN_VIEWSTATISTICS]
|
||||
requirements:
|
||||
type: by-date|by-operator|by-page
|
||||
|
||||
@ -672,7 +721,7 @@ translation_edit:
|
||||
_access_check: Mibew\AccessControl\Check\PermissionsCheck
|
||||
_access_permissions: [CAN_ADMINISTRATE]
|
||||
requirements:
|
||||
string_id: "\d{1,10}"
|
||||
string_id: "\\d{1,10}"
|
||||
methods: [GET]
|
||||
|
||||
translation_edit_save:
|
||||
@ -682,7 +731,7 @@ translation_edit_save:
|
||||
_access_check: Mibew\AccessControl\Check\PermissionsCheck
|
||||
_access_permissions: [CAN_ADMINISTRATE]
|
||||
requirements:
|
||||
string_id: "\d{1,10}"
|
||||
string_id: "\\d{1,10}"
|
||||
methods: [POST]
|
||||
|
||||
translation_export:
|
||||
@ -739,6 +788,13 @@ update_run:
|
||||
_access_check: Mibew\AccessControl\Check\PermissionsCheck
|
||||
_access_permissions: [CAN_ADMINISTRATE]
|
||||
|
||||
update_check:
|
||||
path: /update/check
|
||||
defaults:
|
||||
_controller: Mibew\Controller\UpdateController::checkUpdatesAction
|
||||
_access_check: Mibew\AccessControl\Check\PermissionsCheck
|
||||
_access_permissions: [CAN_ADMINISTRATE]
|
||||
|
||||
## Users (visitors avaiting page)
|
||||
users:
|
||||
path: /operator/users
|
||||
|
@ -2,7 +2,7 @@
|
||||
/*
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2015 the original author or authors.
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@ -22,6 +22,7 @@ require_once(dirname(__FILE__) . '/libs/init.php');
|
||||
|
||||
use Mibew\Cache\CacheFactory;
|
||||
use Mibew\Maintenance\CronWorker;
|
||||
use Mibew\Plugin\PluginManager;
|
||||
|
||||
$configs = load_system_configs();
|
||||
|
||||
@ -30,6 +31,13 @@ $cache_factory = new CacheFactory($configs['cache']);
|
||||
// For now directory for cache files cannot be changed via the configs file.
|
||||
$cache_factory->setOption('path', MIBEW_FS_ROOT . '/cache/stash');
|
||||
|
||||
// Run plugins
|
||||
if (get_maintenance_mode() === false) {
|
||||
$plugin_manager = PluginManager::getInstance();
|
||||
$plugin_manager->setCache($cache_factory->getCache());
|
||||
$plugin_manager->loadPlugins($configs['plugins']);
|
||||
}
|
||||
|
||||
// Do the job.
|
||||
$worker = new CronWorker($cache_factory->getCache());
|
||||
$success = $worker->run();
|
||||
|
@ -2,7 +2,7 @@
|
||||
/*
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2015 the original author or authors.
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@ -24,6 +24,7 @@ use Mibew\Application;
|
||||
use Mibew\Authentication\AuthenticationManager;
|
||||
use Mibew\Cache\CacheFactory;
|
||||
use Mibew\Mail\MailerFactory;
|
||||
use Mibew\Plugin\PluginManager;
|
||||
use Mibew\Routing\Router;
|
||||
use Mibew\Routing\Loader\CacheLoader;
|
||||
use Mibew\Routing\Loader\PluginLoader;
|
||||
@ -40,6 +41,13 @@ $cache_factory = new CacheFactory($configs['cache']);
|
||||
// TODO: Evaluate possibility of using custom cache directory.
|
||||
$cache_factory->setOption('path', MIBEW_FS_ROOT . '/cache/stash');
|
||||
|
||||
// Run plugins
|
||||
if (get_maintenance_mode() === false) {
|
||||
$plugin_manager = PluginManager::getInstance();
|
||||
$plugin_manager->setCache($cache_factory->getCache());
|
||||
$plugin_manager->loadPlugins($configs['plugins']);
|
||||
}
|
||||
|
||||
// The main route loader which loads nothig but works as a cache proxy for other
|
||||
// loaders.
|
||||
$route_loader = new CacheLoader($cache_factory->getCache());
|
||||
|
@ -2,7 +2,7 @@
|
||||
/*
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2015 the original author or authors.
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@ -20,4 +20,4 @@
|
||||
// Force the user to specify the entry point. This should be done only when
|
||||
// mod_rewrite is not used by apache.
|
||||
header('HTTP/1.0 301 Moved Permanently');
|
||||
header('Location: index.php/');
|
||||
header('Location: index.php');
|
||||
|
@ -2,7 +2,7 @@
|
||||
/*
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2015 the original author or authors.
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -1,40 +0,0 @@
|
||||
/*!
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2015 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
(function (Mibew, $) {
|
||||
Mibew.updateVersion = function(data) {
|
||||
if (!data.core || !data.core.stable) {
|
||||
return;
|
||||
}
|
||||
|
||||
$(document).ready(function() {
|
||||
var currentVersion = $("#current-version").html(),
|
||||
core = data.core.stable;
|
||||
|
||||
if (currentVersion != core.version) {
|
||||
if (currentVersion < core.version) {
|
||||
$("#current-version").css("color", "red");
|
||||
}
|
||||
$("#latest-version").html(core.version + ", Download <a href=\"" + core.download + "\">" + core.title + "</a>");
|
||||
} else {
|
||||
$("#current-version").css("color", "green");
|
||||
$("#latest-version").html(core.version);
|
||||
}
|
||||
});
|
||||
}
|
||||
})(Mibew, jQuery);
|
@ -1,7 +1,7 @@
|
||||
/*!
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2015 the original author or authors.
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
26
src/mibew/js/source/button_code.js
Normal file
26
src/mibew/js/source/button_code.js
Normal file
@ -0,0 +1,26 @@
|
||||
/*!
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
(function(Mibew, $) {
|
||||
$(document).ready(function(){
|
||||
$('#copy-button-code').click(function(e){
|
||||
$("#button-code").select();
|
||||
document.execCommand('copy');
|
||||
});
|
||||
});
|
||||
})(Mibew, jQuery);
|
@ -1,7 +1,7 @@
|
||||
/*!
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2015 the original author or authors.
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@ -51,8 +51,7 @@
|
||||
app.Invitation.start(options.invitationOptions);
|
||||
break;
|
||||
default:
|
||||
throw new Error('Dont know how to start!');
|
||||
break;
|
||||
throw new Error("Don't know how to start!");
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*!
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2015 the original author or authors.
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*!
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2015 the original author or authors.
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*!
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2015 the original author or authors.
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@ -119,7 +119,7 @@
|
||||
eventArgs = {
|
||||
'messageData': messageData,
|
||||
'model': false
|
||||
}
|
||||
};
|
||||
|
||||
// Trigger event. See description of eventName and eventArgs
|
||||
// above.
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*!
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2015 the original author or authors.
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*!
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2015 the original author or authors.
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*!
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2015 the original author or authors.
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@ -59,7 +59,7 @@
|
||||
return {
|
||||
page: models.page.toJSON(),
|
||||
user: models.user.toJSON()
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
);
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*!
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2015 the original author or authors.
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*!
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2015 the original author or authors.
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@ -51,7 +51,7 @@
|
||||
serializeData: function() {
|
||||
return {
|
||||
page: Mibew.Objects.Models.page.toJSON()
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
);
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*!
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2015 the original author or authors.
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@ -50,7 +50,7 @@
|
||||
serializeData: function() {
|
||||
return {
|
||||
page: Mibew.Objects.Models.page.toJSON()
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
);
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*!
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2015 the original author or authors.
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@ -40,6 +40,6 @@ MibewAPIChatInteraction = function() {
|
||||
return [
|
||||
'result'
|
||||
];
|
||||
}
|
||||
}
|
||||
};
|
||||
};
|
||||
MibewAPIChatInteraction.prototype = new MibewAPIInteraction();
|
@ -1,7 +1,7 @@
|
||||
/*!
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2015 the original author or authors.
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*!
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2015 the original author or authors.
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@ -49,7 +49,7 @@
|
||||
*/
|
||||
closeThread: function() {
|
||||
// Show confirmation message if can
|
||||
var confirmMessage = Mibew.Localization.trans('Are you sure want to leave chat?'),
|
||||
var confirmMessage = Mibew.Localization.trans('Are you sure that you want to leave the chat?'),
|
||||
context = this;
|
||||
if (confirmMessage !== false) {
|
||||
Mibew.Utils.confirm(confirmMessage, function(value) {
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*!
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2015 the original author or authors.
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@ -45,7 +45,7 @@
|
||||
),
|
||||
|
||||
/**
|
||||
* Dispalay history window
|
||||
* Display history window
|
||||
*/
|
||||
showHistory: function() {
|
||||
var user = Mibew.Objects.Models.user;
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*!
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2015 the original author or authors.
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*!
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2015 the original author or authors.
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*!
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2015 the original author or authors.
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@ -48,11 +48,15 @@
|
||||
* Move to secure chat
|
||||
*/
|
||||
secure: function() {
|
||||
var link = this.model.get('link')
|
||||
if (window.location.protocol == 'https:') {
|
||||
return;
|
||||
}
|
||||
var link = this.model.get('link');
|
||||
if (link) {
|
||||
var style = Mibew.Objects.Models.page.get('style');
|
||||
window.location.href = link.replace(/\&\;/g, '&')
|
||||
+ (style ? ('&style=' + style) : '');
|
||||
+ (style ? ((link.indexOf('?') > -1 ? '&' : '?')
|
||||
+ 'style=' + style) : '');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*!
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2015 the original author or authors.
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@ -44,6 +44,17 @@
|
||||
}
|
||||
),
|
||||
|
||||
/**
|
||||
* Override Backbone.Marionette.ItemView.serializeData to pass some
|
||||
* extra fields to template.
|
||||
* @returns {Object} Template data
|
||||
*/
|
||||
serializeData: function() {
|
||||
var data = this.model.toJSON();
|
||||
data.user = Mibew.Objects.Models.user.toJSON();
|
||||
return data;
|
||||
},
|
||||
|
||||
/**
|
||||
* Load and display send mail window
|
||||
*/
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*!
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2015 the original author or authors.
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -0,0 +1,68 @@
|
||||
/*!
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
(function(Mibew, Handlebars, _) {
|
||||
/**
|
||||
* @class Represents Tracked path control view
|
||||
*/
|
||||
Mibew.Views.TrackedPathControl = Mibew.Views.Control.extend(
|
||||
/** @lends Mibew.Views.TrackedPathControl.prototype */
|
||||
{
|
||||
/**
|
||||
* Template function
|
||||
* @type Function
|
||||
*/
|
||||
template: Handlebars.templates['chat/controls/tracked_path'],
|
||||
|
||||
/**
|
||||
* Map ui events to view methods
|
||||
* The view inherits events from
|
||||
* {@link Mibew.Views.Control.prototype.events}.
|
||||
* @type Object
|
||||
*/
|
||||
events: _.extend(
|
||||
{},
|
||||
Mibew.Views.Control.prototype.events,
|
||||
{
|
||||
'click': 'showTrackedPath'
|
||||
}
|
||||
),
|
||||
|
||||
/**
|
||||
* Display tracked path window
|
||||
*/
|
||||
showTrackedPath: function() {
|
||||
var user = Mibew.Objects.Models.user;
|
||||
var link = this.model.get('link');
|
||||
if (user.get('isAgent') && link) {
|
||||
var winParams = Mibew.Utils.buildWindowParams(this.model.get('windowParams'));
|
||||
|
||||
// TODO: Kill & at the server side
|
||||
link = link.replace('&', '&', 'g');
|
||||
|
||||
var newWindow = window.open(link, 'UserTrackedPath', winParams);
|
||||
if (newWindow !== null) {
|
||||
newWindow.focus();
|
||||
newWindow.opener=window;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
})(Mibew, Handlebars, _);
|
@ -1,7 +1,7 @@
|
||||
/*!
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2015 the original author or authors.
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*!
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2015 the original author or authors.
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@ -42,7 +42,7 @@
|
||||
serializeData: function() {
|
||||
return {
|
||||
page: Mibew.Objects.Models.page.toJSON()
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
);
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*!
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2015 the original author or authors.
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@ -81,7 +81,7 @@
|
||||
|
||||
// Update group id
|
||||
if (this.model.get('groups')) {
|
||||
values.groupId = this.ui.groupSelect.val()
|
||||
values.groupId = this.ui.groupSelect.val();
|
||||
}
|
||||
|
||||
// Update name
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*!
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2015 the original author or authors.
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@ -42,7 +42,7 @@
|
||||
serializeData: function() {
|
||||
return {
|
||||
page: Mibew.Objects.Models.page.toJSON()
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
);
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*!
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2015 the original author or authors.
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*!
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2015 the original author or authors.
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@ -84,6 +84,9 @@
|
||||
* Get, check and post message
|
||||
*/
|
||||
postMessage: function() {
|
||||
if (this.isDisabledInput()){
|
||||
return;
|
||||
}
|
||||
var msg = this.ui.message.val();
|
||||
// TODO: Think about it
|
||||
// Cut multiple line breaks
|
||||
@ -129,6 +132,13 @@
|
||||
},
|
||||
|
||||
/**
|
||||
* Check is disabled message input area
|
||||
*/
|
||||
isDisabledInput: function() {
|
||||
return this.ui.message.attr('disabled') == 'disabled';
|
||||
},
|
||||
|
||||
/**svn
|
||||
* Clear message input area
|
||||
*/
|
||||
clearInput: function() {
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*!
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2015 the original author or authors.
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*!
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2015 the original author or authors.
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*!
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2015 the original author or authors.
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*!
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2015 the original author or authors.
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@ -39,7 +39,7 @@
|
||||
*/
|
||||
ui: {
|
||||
groupSelect: 'select[name="group"]',
|
||||
groupDescription: '#groupDescription',
|
||||
groupDescription: '#group-description',
|
||||
name: 'input[name="name"]',
|
||||
email: 'input[name="email"]',
|
||||
message: 'textarea[name="message"]',
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*!
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2015 the original author or authors.
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@ -58,7 +58,7 @@
|
||||
|
||||
// Update group id
|
||||
if (this.model.get('groups')) {
|
||||
values.groupId = this.ui.groupSelect.val()
|
||||
values.groupId = this.ui.groupSelect.val();
|
||||
}
|
||||
|
||||
// Update name
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*!
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2015 the original author or authors.
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*!
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2015 the original author or authors.
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@ -57,7 +57,7 @@
|
||||
* Not applicable for agents.
|
||||
* @type Boolean
|
||||
*/
|
||||
dafaultName: true
|
||||
defaultName: true
|
||||
}
|
||||
)
|
||||
}
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*!
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2015 the original author or authors.
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*!
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2015 the original author or authors.
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*!
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2015 the original author or authors.
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*!
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2015 the original author or authors.
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*!
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2015 the original author or authors.
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*!
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2015 the original author or authors.
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*!
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2015 the original author or authors.
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@ -60,7 +60,7 @@
|
||||
* @returns {String} Model type
|
||||
*/
|
||||
getModelType: function() {
|
||||
return 'SoundControl'
|
||||
return 'SoundControl';
|
||||
}
|
||||
}
|
||||
);
|
||||
|
63
src/mibew/js/source/chat/models/controls/tracked_path.js
Normal file
63
src/mibew/js/source/chat/models/controls/tracked_path.js
Normal file
@ -0,0 +1,63 @@
|
||||
/*!
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
(function(Mibew, _){
|
||||
|
||||
/**
|
||||
* @class Tracked path control model
|
||||
*/
|
||||
Mibew.Models.TrackedPathControl = Mibew.Models.Control.extend(
|
||||
/** @lends Mibew.Models.TrackedPathControl.prototype */
|
||||
{
|
||||
/**
|
||||
* A list of default model values.
|
||||
*
|
||||
* The model inherits defaults from
|
||||
* {@link Mibew.Models.Control.prototype.defaults}.
|
||||
* @type Object
|
||||
*/
|
||||
defaults: _.extend(
|
||||
{},
|
||||
Mibew.Models.Control.prototype.defaults,
|
||||
{
|
||||
/**
|
||||
* An URL of the tracked path page or false by default.
|
||||
* @type String|Boolean
|
||||
*/
|
||||
link: false,
|
||||
|
||||
/**
|
||||
* Params string for tracked path popup window
|
||||
* @type String
|
||||
*/
|
||||
windowParams: ''
|
||||
}
|
||||
),
|
||||
|
||||
/**
|
||||
* Returns model type
|
||||
* @returns {String} Model type
|
||||
*/
|
||||
getModelType: function() {
|
||||
return 'TrackedPathControl';
|
||||
}
|
||||
|
||||
}
|
||||
);
|
||||
|
||||
})(Mibew, _);
|
@ -1,7 +1,7 @@
|
||||
/*!
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2015 the original author or authors.
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*!
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2015 the original author or authors.
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*!
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2015 the original author or authors.
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*!
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2015 the original author or authors.
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*!
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2015 the original author or authors.
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*!
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2015 the original author or authors.
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*!
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2015 the original author or authors.
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@ -53,7 +53,7 @@
|
||||
* @returns {String} Model type
|
||||
*/
|
||||
getModelType: function() {
|
||||
return 'StatusMessage'
|
||||
return 'StatusMessage';
|
||||
},
|
||||
|
||||
/**
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*!
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2015 the original author or authors.
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@ -55,7 +55,7 @@
|
||||
* @returns {String} Model type
|
||||
*/
|
||||
getModelType: function() {
|
||||
return 'StatusTyping'
|
||||
return 'StatusTyping';
|
||||
},
|
||||
|
||||
/**
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*!
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2015 the original author or authors.
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*!
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2015 the original author or authors.
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@ -61,6 +61,18 @@
|
||||
* @param Object attributes Attributes hash for test
|
||||
*/
|
||||
validate: function(attributes) {
|
||||
// Check visitor's name
|
||||
if (this.get('canChangeName') && typeof attributes.name != 'undefined') {
|
||||
var trimmedName = attributes.name
|
||||
// Remove leading spaces from the name
|
||||
.replace(/^\s+/, '')
|
||||
// Remove trailing spaces from the name
|
||||
.replace(/\s+$/, '');
|
||||
if (trimmedName.length === 0) {
|
||||
return Mibew.Localization.trans('Name is required.');
|
||||
}
|
||||
}
|
||||
|
||||
// Check email
|
||||
if (this.get('showEmail')) {
|
||||
if (typeof attributes.email != 'undefined') {
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*!
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2015 the original author or authors.
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@ -101,6 +101,15 @@
|
||||
windowParams: options.windowsParams.history
|
||||
});
|
||||
ctrlsCollection.add(controls.history);
|
||||
|
||||
if (options.links.tracked) {
|
||||
controls.tracked_path = new Mibew.Models.TrackedPathControl({
|
||||
weight: 170,
|
||||
link: options.links.tracked,
|
||||
windowParams: options.windowsParams.trackedPath
|
||||
});
|
||||
ctrlsCollection.add(controls.tracked_path);
|
||||
}
|
||||
}
|
||||
|
||||
// Create toggle sound button
|
||||
@ -225,7 +234,7 @@
|
||||
"user": (! user.get('isAgent'))
|
||||
}
|
||||
}
|
||||
]
|
||||
];
|
||||
},
|
||||
function(args) {
|
||||
// Check if there was an error
|
||||
@ -258,7 +267,7 @@
|
||||
// Restart server updater because module just started and there are no
|
||||
// reasons to wait refresh time to get results of previous request
|
||||
Mibew.Objects.server.restartUpdater();
|
||||
})
|
||||
});
|
||||
|
||||
// Add module finalizer
|
||||
chat.addFinalizer(function() {
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*!
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2015 the original author or authors.
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@ -78,7 +78,7 @@
|
||||
"user": true
|
||||
}
|
||||
}
|
||||
]
|
||||
];
|
||||
},
|
||||
function() {}
|
||||
)
|
||||
@ -90,7 +90,7 @@
|
||||
// Restart server updater because module just started and there are no
|
||||
// reasons to wait refresh time to get results of previous request
|
||||
Mibew.Objects.server.restartUpdater();
|
||||
})
|
||||
});
|
||||
|
||||
// Add module finalizer
|
||||
invitation.addFinalizer(function() {
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*!
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2015 the original author or authors.
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*!
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2015 the original author or authors.
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*!
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2015 the original author or authors.
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*!
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2015 the original author or authors.
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@ -38,6 +38,6 @@
|
||||
// Just close the window.
|
||||
window.close();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
})(Mibew);
|
@ -1,7 +1,7 @@
|
||||
/*!
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2015 the original author or authors.
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@ -17,7 +17,7 @@
|
||||
*/
|
||||
|
||||
/**
|
||||
* @namespace Holds all Mibew functionality
|
||||
* @namespace Holds all Mibew Messenger functionality
|
||||
*/
|
||||
var Mibew = Mibew || {};
|
||||
|
||||
@ -57,12 +57,28 @@ var Mibew = Mibew || {};
|
||||
* omitted a session cookie will be created.
|
||||
*/
|
||||
Mibew.Utils.createCookie = function(name, value, expires) {
|
||||
var domain = /([^\.]+\.[^\.]+)$/.exec(document.location.hostname);
|
||||
if (navigator.cookieEnabled) {
|
||||
var domain_parts = document.location.hostname.split('.').reverse();
|
||||
var domain = domain_parts[0];
|
||||
var position = 0;
|
||||
do {
|
||||
document.cookie = "" + name + "=" + value + "; "
|
||||
+ "path=/; "
|
||||
+ (domain ? ("domain=" + domain[1] + "; ") : '')
|
||||
+ (document.location.protocol == 'https:' ? "SameSite=None; secure; " : '')
|
||||
+ "domain=" + (Mibew.Utils.cookiesDomain || domain) + "; "
|
||||
+ (expires ? ('expires=' + expires.toUTCString() + '; ') : '');
|
||||
if (Mibew.Utils.readCookie(name) == value) {
|
||||
if (!Mibew.Utils.cookiesDomain) {
|
||||
Mibew.Utils.cookiesDomain = domain;
|
||||
}
|
||||
}
|
||||
else {
|
||||
position++;
|
||||
domain = domain_parts[position] + '.' + domain;
|
||||
}
|
||||
} while((position < domain_parts.length) && !Mibew.Utils.cookiesDomain);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Try to read cookie.
|
||||
@ -82,7 +98,7 @@ var Mibew = Mibew || {};
|
||||
}
|
||||
}
|
||||
return value;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Deletes cookie.
|
||||
@ -91,7 +107,7 @@ var Mibew = Mibew || {};
|
||||
*/
|
||||
Mibew.Utils.deleteCookie = function(name) {
|
||||
Mibew.Utils.createCookie(name, '', (new Date(0)));
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Sets correct prototypes chain.
|
||||
@ -119,7 +135,7 @@ var Mibew = Mibew || {};
|
||||
ctor.prototype = new Tmp();
|
||||
Tmp.prototype = null;
|
||||
ctor.prototype.constructor = ctor;
|
||||
}
|
||||
};
|
||||
})();
|
||||
|
||||
/**
|
||||
@ -169,7 +185,7 @@ var Mibew = Mibew || {};
|
||||
document.getElementsByTagName('head')[0].appendChild(styleSheet);
|
||||
|
||||
return styleSheet;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Loads JavaScript file and attach it to DOM.
|
||||
@ -189,7 +205,7 @@ var Mibew = Mibew || {};
|
||||
document.getElementsByTagName('head')[0].appendChild(script);
|
||||
|
||||
return script;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Initialize a proper chat popup.
|
||||
@ -203,9 +219,8 @@ var Mibew = Mibew || {};
|
||||
Mibew.ChatPopup.init = function(options) {
|
||||
var canUseIFrame = (window.postMessage && options.preferIFrame),
|
||||
Popup = canUseIFrame ? Mibew.ChatPopup.IFrame : Mibew.ChatPopup.Window;
|
||||
|
||||
Mibew.Objects.ChatPopups[options.id] = new Popup(options);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* A constructor for base (abstract) popup object.
|
||||
@ -260,7 +275,14 @@ var Mibew = Mibew || {};
|
||||
* @type {Boolean}
|
||||
*/
|
||||
this.modSecurity = options.modSecurity || false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Chat style
|
||||
* @type {String}
|
||||
*/
|
||||
this.styleName = options.style;
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
* Builds an URL that initializes a chat.
|
||||
@ -279,7 +301,7 @@ var Mibew = Mibew || {};
|
||||
return this.url
|
||||
+ ((this.url.indexOf('?') === -1) ? '?' : '&') + 'url=' + encodeURIComponent(href)
|
||||
+ '&referrer=' + encodeURIComponent(referrer);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Constructs IFrame popup.
|
||||
@ -292,18 +314,48 @@ var Mibew = Mibew || {};
|
||||
// Call parent constructor.
|
||||
BasePopup.call(this, options);
|
||||
|
||||
/**
|
||||
* Store options in case we need some of them later.
|
||||
* @type {Object}
|
||||
*/
|
||||
this.options = options;
|
||||
|
||||
/**
|
||||
* Wrapper for popup iframe DOM Element.
|
||||
* @type {Node}
|
||||
*/
|
||||
this.wrapperDiv = null;
|
||||
|
||||
/**
|
||||
* Popup iframe DOM Element.
|
||||
* @type {Node}
|
||||
*/
|
||||
this.iframe = null;
|
||||
|
||||
/**
|
||||
* Toggle iframe DOM Element.
|
||||
* @type {Node}
|
||||
*/
|
||||
this.toggleDiv = null;
|
||||
|
||||
/**
|
||||
* Indicates if the popup is opened.
|
||||
* @type {Boolean}
|
||||
*/
|
||||
this.isOpened = false;
|
||||
|
||||
/**
|
||||
* Indicates if the popup is minified.
|
||||
* @type {Boolean}
|
||||
*/
|
||||
this.isMinified = false;
|
||||
|
||||
/**
|
||||
* Indicates if cookies are blocked.
|
||||
* @type {Boolean}
|
||||
*/
|
||||
this.cookiesBlocked = false;
|
||||
|
||||
// Load default styles. These styles hide the popup while real styles
|
||||
// are loading.
|
||||
this.attachDefaultStyles();
|
||||
@ -315,10 +367,22 @@ var Mibew = Mibew || {};
|
||||
if (openedChatUrl) {
|
||||
// The chat was not closed so the popup should be reopened when a
|
||||
// new page is visited.
|
||||
this.open(openedChatUrl);
|
||||
}
|
||||
this.safeOpen(openedChatUrl);
|
||||
}
|
||||
|
||||
// Check if it's possible to set cookies at all
|
||||
var rnd = Math.random();
|
||||
Mibew.Utils.createCookie('mibewCheckToken', rnd);
|
||||
var checkCookiesBlock = Mibew.Utils.loadScript(options.url.split('?')[0] + '/cookies-set-permission' + '?rnd=' + rnd);
|
||||
checkCookiesBlock.popup = this;
|
||||
checkCookiesBlock.onload = function() {
|
||||
this.popup.cookiesBlocked = false;
|
||||
};
|
||||
checkCookiesBlock.onerror = function() {
|
||||
this.popup.cookiesBlocked = true;
|
||||
};
|
||||
};
|
||||
|
||||
// Set correct prototype chain for IFrame popup.
|
||||
Mibew.Utils.inherits(Mibew.ChatPopup.IFrame, BasePopup);
|
||||
|
||||
@ -367,26 +431,81 @@ var Mibew = Mibew || {};
|
||||
return;
|
||||
}
|
||||
|
||||
if (!this.iframe) {
|
||||
// Create new iframe.
|
||||
if (this.cookiesBlocked) {
|
||||
// Last resort. Replace this iframe-based popup with window-based popup
|
||||
// and try to open a chat in a separate window.
|
||||
Mibew.Objects.ChatPopups[this.id] = new Mibew.ChatPopup.Window(this.options);
|
||||
Mibew.Objects.ChatPopups[this.id].open(url);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!this.wrapperDiv) {
|
||||
// Create new iframe and its wrapper.
|
||||
// There is a bug in IE <= 7 that make "name" attribute unchangeble
|
||||
// for elements that already exist. Thus a temporary div is used
|
||||
// here as a workaround.
|
||||
var tmpDiv = document.createElement('div');
|
||||
tmpDiv.innerHTML = '<iframe name="mibewChat' + this.id + '"></iframe>';
|
||||
this.wrapperDiv = document.createElement('div');
|
||||
this.wrapperDiv.className = 'mibew-chat-wrapper';
|
||||
this.wrapperDiv.setAttribute('id', 'mibew-chat-wrapper-' + this.id);
|
||||
this.wrapperDiv.style.display = 'none';
|
||||
this.wrapperDiv.innerHTML = '<iframe name="mibewChat' + this.id + '"></iframe>';
|
||||
|
||||
this.iframe = tmpDiv.getElementsByTagName('iframe')[0];
|
||||
this.iframe = this.wrapperDiv.getElementsByTagName('iframe')[0];
|
||||
this.iframe.setAttribute('id', 'mibew-chat-frame-' + this.id);
|
||||
this.iframe.className = 'mibew-chat-frame';
|
||||
this.iframe.setAttribute('frameBorder', 0);
|
||||
this.iframe.style.display = 'none';
|
||||
document.getElementsByTagName('body')[0].appendChild(this.iframe);
|
||||
|
||||
document.getElementsByTagName('body')[0].appendChild(this.wrapperDiv);
|
||||
|
||||
// Setup toggle element. As it's not a part of the iframe, it should be
|
||||
// treated separately.
|
||||
this.toggleDiv = document.createElement('div');
|
||||
this.toggleDiv.setAttribute('id', 'mibew-chat-frame-toggle-' + this.id);
|
||||
this.toggleDiv.className = 'mibew-chat-frame-toggle mibew-chat-frame-toggle-on';
|
||||
Mibew.Utils.addEventListener(this.toggleDiv, 'click', function(event) {
|
||||
var popups = Mibew.Objects.ChatPopups,
|
||||
matches = /^mibew-chat-frame-toggle-([0-9A-Za-z]+)$/.exec(this.id);
|
||||
|
||||
if (matches && popups[matches[1]]) {
|
||||
popups[matches[1]].toggle();
|
||||
}
|
||||
});
|
||||
document.getElementsByTagName('body')[0].appendChild(this.toggleDiv);
|
||||
}
|
||||
|
||||
this.iframe.style.display = 'block';
|
||||
this.wrapperDiv.style.display = 'block';
|
||||
this.toggleDiv.style.display = 'block';
|
||||
this.iframe.src = url || this.buildChatUrl();
|
||||
this.isOpened = true;
|
||||
|
||||
// Store style name in case we need it during iframe reopening
|
||||
Mibew.Utils.createCookie('mibew-chat-frame-style-' + this.id, this.styleName);
|
||||
|
||||
// Check minification status of the popup and toggle it if needed.
|
||||
var minifiedPopup = Mibew.Utils.readCookie('mibew-chat-frame-minified-' + this.id);
|
||||
if (minifiedPopup === 'true') {
|
||||
this.toggle();
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Check chat URL via special request, open the chat if check passes,
|
||||
* close the popup if the check fails.
|
||||
*
|
||||
* @param {String} [url] The URL to open in the popup
|
||||
*/
|
||||
Mibew.ChatPopup.IFrame.prototype.safeOpen = function(url) {
|
||||
var check = Mibew.Utils.loadScript(url + '/check', 'mibew-check-iframe-' + this.id);
|
||||
check.popup = this;
|
||||
check.url = url;
|
||||
var style = Mibew.Utils.readCookie('mibew-chat-frame-style-' + this.id);
|
||||
check.onload = function() {
|
||||
this.popup.open(this.url + (style ? '?style=' + style : ''));
|
||||
};
|
||||
check.onerror = function() {
|
||||
this.popup.close();
|
||||
};
|
||||
};
|
||||
|
||||
/**
|
||||
* Closes the popup.
|
||||
@ -397,11 +516,24 @@ var Mibew = Mibew || {};
|
||||
return;
|
||||
}
|
||||
|
||||
this.iframe.style.display = 'none';
|
||||
this.wrapperDiv.style.display = 'none';
|
||||
this.iframe.src = '';
|
||||
this.isOpened = false;
|
||||
this.toggleDiv.style.display = 'none';
|
||||
Mibew.Utils.deleteCookie('mibew-chat-frame-' + this.id);
|
||||
}
|
||||
Mibew.Utils.deleteCookie('mibew-chat-frame-minified-' + this.id);
|
||||
};
|
||||
|
||||
/**
|
||||
* Toggles the popup.
|
||||
*/
|
||||
Mibew.ChatPopup.IFrame.prototype.toggle = function() {
|
||||
this.wrapperDiv.style.display = this.isMinified ? "block" : "none";
|
||||
this.isMinified = !this.isMinified;
|
||||
this.toggleDiv.className = 'mibew-chat-frame-toggle mibew-chat-frame-toggle-'
|
||||
+ (this.isMinified ? 'off' : 'on');
|
||||
Mibew.Utils.createCookie('mibew-chat-frame-minified-' + this.id, this.isMinified);
|
||||
};
|
||||
|
||||
/**
|
||||
* Constructs Window popup.
|
||||
@ -414,7 +546,7 @@ var Mibew = Mibew || {};
|
||||
BasePopup.call(this, options);
|
||||
|
||||
this.window = null;
|
||||
}
|
||||
};
|
||||
|
||||
// Set correct prototype chain for Window popup.
|
||||
Mibew.Utils.inherits(Mibew.ChatPopup.Window, BasePopup);
|
||||
@ -426,6 +558,10 @@ var Mibew = Mibew || {};
|
||||
* value is omitted, the chat initialization URL will be loaded.
|
||||
*/
|
||||
Mibew.ChatPopup.Window.prototype.open = function(url) {
|
||||
// Windows is already opened, nothing to do.
|
||||
if (this.window != null && !this.window.closed) {
|
||||
return;
|
||||
}
|
||||
this.window = window.open(
|
||||
url || this.buildChatUrl(),
|
||||
'mibewChat' + this.id,
|
||||
@ -433,7 +569,7 @@ var Mibew = Mibew || {};
|
||||
);
|
||||
this.window.focus();
|
||||
this.window.opener = window;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Closes the popup.
|
||||
@ -446,7 +582,7 @@ var Mibew = Mibew || {};
|
||||
|
||||
this.window.close();
|
||||
this.window = null;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Builds window params string.
|
||||
@ -468,13 +604,12 @@ var Mibew = Mibew || {};
|
||||
'height=' + this.height.toString(),
|
||||
'resizable=' + (this.resizable ? '1' : '0')
|
||||
].join(',');
|
||||
}
|
||||
};
|
||||
|
||||
// Attach a listener to window's "message" event to get the url of the chat
|
||||
// which is opened in iframe popup.
|
||||
Mibew.Utils.addEventListener(window, 'message', function(event) {
|
||||
var matches = /^mibew-chat-started\:mibewChat([0-9A-Za-z]+)\:(.*)$/.exec(event.data);
|
||||
|
||||
if (matches) {
|
||||
Mibew.Utils.createCookie('mibew-chat-frame-' + matches[1], matches[2]);
|
||||
}
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*!
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2015 the original author or authors.
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@ -41,7 +41,7 @@
|
||||
} else {
|
||||
return new ChildViewType(options);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* @class Represents base collection view
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*!
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2015 the original author or authors.
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*!
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2015 the original author or authors.
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*!
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2015 the original author or authors.
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@ -41,7 +41,7 @@
|
||||
/**
|
||||
* Register 'urlReplace' Handlebars helper.
|
||||
*
|
||||
* This helper serch URLs and replace them by 'a' tag
|
||||
* This helper seeks URLs and replaces them by 'a' tag
|
||||
*/
|
||||
Handlebars.registerHelper('urlReplace', function(text) {
|
||||
return new Handlebars.SafeString(
|
||||
@ -193,14 +193,17 @@
|
||||
* </code>
|
||||
*/
|
||||
Handlebars.registerHelper('replace', function(search, replacement, options) {
|
||||
// Convert serch value to string and escape special regexp characters
|
||||
var searchPattern = search.toString().replace(
|
||||
/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,
|
||||
"\\$&"
|
||||
),
|
||||
re = new RegExp(searchPattern, 'g');
|
||||
var unescapedSearch = search
|
||||
// Allow using new line character
|
||||
.replace(/\\n/g, '\n')
|
||||
// Allow using tab character
|
||||
.replace(/\\t/g, '\t')
|
||||
// Allow using all UTF characters in \uXXX format.
|
||||
.replace(/\\u([A-Za-z0-9])/g, function(match, code) {
|
||||
return String.fromCharCode(parseInt(code, 16));
|
||||
});
|
||||
|
||||
return options.fn(this).replace(re, replacement);
|
||||
return options.fn(this).split(unescapedSearch).join(replacement);
|
||||
});
|
||||
|
||||
/**
|
||||
@ -287,7 +290,7 @@
|
||||
* </code>
|
||||
*/
|
||||
Handlebars.registerHelper('override', function(name, options) {
|
||||
// We need to provide unlimited inheritence level. Rendering is started
|
||||
// We need to provide unlimited inheritance level. Rendering is started
|
||||
// from the deepest level template. If the content is in the block
|
||||
// storage it is related with the deepest level template. Thus we do not
|
||||
// need to override it.
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*!
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2015 the original author or authors.
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@ -26,7 +26,7 @@ var Mibew = {};
|
||||
// Use Backbone.Marionette with handlebars.js
|
||||
Backbone.Marionette.TemplateCache.prototype.compileTemplate = function(rawTemplate) {
|
||||
return Handlebars.compile(rawTemplate);
|
||||
}
|
||||
};
|
||||
|
||||
// Use all handlebars template as partials too
|
||||
// We does not use Handlebars.partials property because of it can be changed
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*!
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2015 the original author or authors.
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@ -47,7 +47,7 @@
|
||||
return localized.replace(/\{([0-9]+)\}/g, function(match, index) {
|
||||
return placeholders[parseInt(index)] || '';
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Store localization object. Can be call multiple times, localization
|
||||
@ -56,6 +56,6 @@
|
||||
*/
|
||||
Mibew.Localization.set = function(strs) {
|
||||
_.extend(localStrings, strs);
|
||||
}
|
||||
};
|
||||
|
||||
})(Mibew, _);
|
@ -1,7 +1,7 @@
|
||||
/*!
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2015 the original author or authors.
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@ -74,7 +74,7 @@
|
||||
}
|
||||
return {
|
||||
'class': classes.join(' ')
|
||||
}
|
||||
};
|
||||
},
|
||||
|
||||
/**
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*!
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2015 the original author or authors.
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*!
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2015 the original author or authors.
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*!
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2015 the original author or authors.
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*!
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2015 the original author or authors.
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*!
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2015 the original author or authors.
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*!
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2015 the original author or authors.
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*!
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2015 the original author or authors.
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*!
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2015 the original author or authors.
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@ -41,6 +41,8 @@
|
||||
// Pause before restarting updater using Server.restartUpdater
|
||||
// function (in seconds)
|
||||
reconnectPause: 1,
|
||||
// Call on successful response
|
||||
onReceiveResponse: function() {},
|
||||
// Call on request timeout
|
||||
onTimeout: function() {},
|
||||
// Call when transport error was caught
|
||||
@ -92,7 +94,7 @@
|
||||
* @type Object
|
||||
* @private
|
||||
*/
|
||||
this.functions = {}
|
||||
this.functions = {};
|
||||
|
||||
/**
|
||||
* Id of the last registered function
|
||||
@ -107,7 +109,7 @@
|
||||
* @private
|
||||
*/
|
||||
this.mibewAPI = new MibewAPI(new this.options['interactionType']());
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Make call to the server
|
||||
@ -148,7 +150,7 @@
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Call function at every request to build functions list
|
||||
@ -165,7 +167,7 @@
|
||||
callbackFunction: callbackFunction
|
||||
};
|
||||
return this.callPeriodicallyLastId;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Stop calling function at every request.
|
||||
@ -177,7 +179,7 @@
|
||||
if (id in this.callPeriodically) {
|
||||
delete this.callPeriodically[id];
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Generates unique request token
|
||||
@ -195,7 +197,7 @@
|
||||
// Check token uniqueness
|
||||
} while(token in this.callbacks);
|
||||
return token;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Process request
|
||||
@ -236,7 +238,7 @@
|
||||
delete this.callbacks[requestObject.token];
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Process function
|
||||
@ -266,7 +268,7 @@
|
||||
|
||||
// Add function results to the execution context
|
||||
context.storeFunctionResults(functionObject, results);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Send the request to the server
|
||||
@ -291,14 +293,14 @@
|
||||
success: _.bind(self.receiveResponse, self),
|
||||
error: _.bind(self.onError, self)
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Start automatic updater
|
||||
*/
|
||||
Mibew.Server.prototype.runUpdater = function() {
|
||||
this.update();
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Call Mibew.Server.update after specified timeout
|
||||
@ -310,7 +312,7 @@
|
||||
_.bind(this.update, this),
|
||||
time * 1000
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Restarts the automatic updater
|
||||
@ -326,7 +328,7 @@
|
||||
}
|
||||
// Restart updater. Try to reconnect after a while
|
||||
this.updateAfter(this.options.reconnectPause);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Send request to server
|
||||
@ -360,7 +362,7 @@
|
||||
// Handle errors
|
||||
this.options.onUpdateError(e);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Process response from the Server
|
||||
@ -371,15 +373,15 @@
|
||||
* @private
|
||||
*/
|
||||
Mibew.Server.prototype.receiveResponse = function(data, textStatus, jqXHR) {
|
||||
// Call hook on successful request
|
||||
this.options.onReceiveResponse();
|
||||
// Do not parse empty responses
|
||||
if (data == '') {
|
||||
this.updateAfter(this.options.requestsFrequency);
|
||||
}
|
||||
try {
|
||||
var packageObject = this.mibewAPI.decodePackage(data);
|
||||
// TODO: Try to use 'for' loop instead of 'for in' loop
|
||||
// or use hasOwnProperty method
|
||||
for (var i in packageObject.requests) {
|
||||
for (var i = 0, len = packageObject.requests.length; i < len; i++) {
|
||||
this.processRequest(packageObject.requests[i]);
|
||||
}
|
||||
} catch (e) {
|
||||
@ -387,7 +389,7 @@
|
||||
} finally {
|
||||
this.updateAfter(this.options.requestsFrequency);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Add function that can be called by the Server
|
||||
@ -403,7 +405,7 @@
|
||||
}
|
||||
this.functions[functionName][this.functionsLastId] = handler;
|
||||
return this.functionsLastId;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Remove function that can be called by Server
|
||||
@ -423,7 +425,7 @@
|
||||
delete this.functions[i];
|
||||
}
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
/**
|
||||
* Call on AJAX errors
|
||||
@ -442,6 +444,6 @@
|
||||
this.options.onTransportError();
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
})(Mibew, MibewAPI, $, _);
|
||||
})(Mibew, MibewAPI, jQuery, _);
|
@ -1,7 +1,7 @@
|
||||
/*!
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2015 the original author or authors.
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@ -36,7 +36,7 @@
|
||||
return str;
|
||||
}
|
||||
return str.substring(0, 1).toUpperCase() + str.substring(1);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Cast string in camel case to dash format.
|
||||
@ -61,7 +61,7 @@
|
||||
}
|
||||
|
||||
return parts.join('-');
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Check if email address valid or not.
|
||||
@ -99,10 +99,10 @@
|
||||
// The regular exprassion is base on RFC 2822. It's not fully compatible
|
||||
// with RFC but is sutabe for most real cases.
|
||||
return /^(([a-zA-Z0-9!#$%&'*+\-/=?\^_`{|}~]+(\.[a-zA-Z0-9!#$%&'*+\-/=?\^_`{|}~]+)*)|(\".+\"))$/.test(localPart);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Play .wav or .mp3 sound file
|
||||
* Play .wav, or .mp3, or .ogg sound file
|
||||
* @param {String} file File path (without extension)
|
||||
*/
|
||||
Mibew.Utils.playSound = function (file) {
|
||||
@ -114,6 +114,7 @@
|
||||
var audioTag = $("<audio>", {autoplay: true, style: "display: none"}).append(
|
||||
'<source src="' + file + '.wav" type="audio/x-wav" />' +
|
||||
'<source src="' + file + '.mp3" type="audio/mpeg" codecs="mp3" />' +
|
||||
'<source src="' + file + '.ogg" type="audio/ogg" codecs="vorbis" />' +
|
||||
'<embed src="' + file + '.wav" type="audio/x-wav" hidden="true" autostart="true" loop="false" />'
|
||||
);
|
||||
$('body').append(audioTag);
|
||||
@ -121,7 +122,7 @@
|
||||
audioTag.attr('data-file', file);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Builds params string for window.open method.
|
||||
@ -150,7 +151,7 @@
|
||||
'height=' + allOptions.height,
|
||||
'resizable=' + (allOptions.resizable ? '1' : '0')
|
||||
].join(',');
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Sets default options for Vex dialogs.
|
||||
@ -170,7 +171,22 @@
|
||||
*/
|
||||
var isVexOpened = function () {
|
||||
return (vex.getAllVexes().length > 0);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Sanitize message used in Vex dialog
|
||||
* @type {Function}
|
||||
* @param {String} message A message to sanitize.
|
||||
* @returns {String}
|
||||
*/
|
||||
|
||||
var sanitizeMessage = function(message) {
|
||||
return message.replace(/&/g, "&")
|
||||
.replace(/</g, "<")
|
||||
.replace(/>/g, ">")
|
||||
.replace(/"/g, """)
|
||||
.replace(/'/g, "'");
|
||||
};
|
||||
|
||||
/**
|
||||
* Alerts a message.
|
||||
@ -182,8 +198,8 @@
|
||||
// Do not open alert if one already opened.
|
||||
return;
|
||||
}
|
||||
vex.dialog.alert({message: message});
|
||||
}
|
||||
return vex.dialog.alert({message: sanitizeMessage(message)});
|
||||
};
|
||||
|
||||
/**
|
||||
* Requires user confirmation.
|
||||
@ -195,10 +211,10 @@
|
||||
Mibew.Utils.confirm = function(message, callback) {
|
||||
setVexDefaults();
|
||||
vex.dialog.confirm({
|
||||
message: message,
|
||||
message: sanitizeMessage(message),
|
||||
callback: callback
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Requests some info from the user.
|
||||
@ -210,9 +226,17 @@
|
||||
Mibew.Utils.prompt = function(message, callback) {
|
||||
setVexDefaults();
|
||||
vex.dialog.prompt({
|
||||
message: message,
|
||||
message: sanitizeMessage(message),
|
||||
callback: callback
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Close alert.
|
||||
* @param {Object} alert instance.
|
||||
*/
|
||||
Mibew.Utils.closeAlert = function(alertInstance) {
|
||||
var res = vex.close(alertInstance.id);
|
||||
};
|
||||
|
||||
})(Mibew, jQuery, _, vex, validator);
|
@ -1,7 +1,7 @@
|
||||
/*!
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2015 the original author or authors.
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@ -17,6 +17,14 @@
|
||||
*/
|
||||
|
||||
(function($) {
|
||||
function updateSendEmail() {
|
||||
if ($("#user-can-send-email").is(":checked")) {
|
||||
$(".under-user-can-send-email").show();
|
||||
} else {
|
||||
$(".under-user-can-send-email").hide();
|
||||
}
|
||||
}
|
||||
|
||||
function updateSurvey() {
|
||||
if ($("#enable-presurvey").is(":checked")) {
|
||||
$(".under-survey").show();
|
||||
@ -49,7 +57,18 @@
|
||||
}
|
||||
}
|
||||
|
||||
function updatePrivacyPolicy() {
|
||||
if ($("#enable-privacy-policy").is(":checked")) {
|
||||
$(".under-privacy-policy").show();
|
||||
} else {
|
||||
$(".under-privacy-policy").hide();
|
||||
}
|
||||
}
|
||||
|
||||
$(function() {
|
||||
$("#user-can-send-email").change(function() {
|
||||
updateSendEmail();
|
||||
});
|
||||
$("#enable-presurvey").change(function() {
|
||||
updateSurvey();
|
||||
});
|
||||
@ -62,9 +81,14 @@
|
||||
$("#enable-tracking").change(function() {
|
||||
updateTracking();
|
||||
});
|
||||
$("#enable-privacy-policy").change(function() {
|
||||
updatePrivacyPolicy();
|
||||
});
|
||||
updateSendEmail();
|
||||
updateSurvey();
|
||||
updateSSL();
|
||||
updateGroups();
|
||||
updateTracking();
|
||||
updatePrivacyPolicy();
|
||||
});
|
||||
})(jQuery);
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*!
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2015 the original author or authors.
|
||||
* Copyright 2005-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user