WhatsApp Chat WP - Version 4.5.0

Version Description

Hello! We've recently acquired this plugin and included tons of new features.

Download this release

Release Info

Developer quadlayers
Plugin Icon 128x128 WhatsApp Chat WP
Version 4.5.0
Comparing to
See all releases

Code changes from version 4.4.9 to 4.5.0

Files changed (62) hide show
  1. assets/css/qlwapp-admin.css +115 -99
  2. assets/css/qlwapp-admin.css.map +1 -0
  3. assets/css/qlwapp-admin.min.css +2 -0
  4. assets/css/qlwapp-select2.css +409 -409
  5. assets/css/qlwapp-select2.min.css +1 -0
  6. assets/css/qlwapp.css +908 -908
  7. assets/css/qlwapp.min.css +1 -1
  8. assets/js/qlwapp-admin.js +146 -4
  9. assets/js/qlwapp-admin.min.js +1 -1
  10. assets/js/qlwapp-contact-modal.js +379 -0
  11. assets/js/qlwapp-contact-modal.min.js +1 -0
  12. assets/js/qlwapp-modal.js +0 -357
  13. assets/js/qlwapp-modal.min.js +0 -1
  14. assets/js/qlwapp.js +2 -0
  15. assets/js/qlwapp.min.js +1 -1
  16. changelog.txt +5 -1
  17. includes/backend.php +112 -0
  18. includes/controllers/BoxController.php +53 -0
  19. includes/controllers/ButtonController.php +54 -0
  20. includes/controllers/ContactController.php +148 -0
  21. includes/controllers/DisplayController.php +78 -0
  22. includes/controllers/PremiumController.php +31 -0
  23. includes/controllers/QLWAPP_Controller.php +24 -0
  24. includes/controllers/SchemeController.php +54 -0
  25. includes/controllers/SuggestionsController.php +60 -0
  26. includes/controllers/WelcomeController.php +33 -0
  27. includes/defaults.php +0 -290
  28. includes/frontend.php +39 -21
  29. includes/helpers.php +47 -0
  30. includes/models/Box.php +36 -0
  31. includes/models/Button.php +59 -0
  32. includes/models/Chat.php +16 -0
  33. includes/models/Contact.php +136 -0
  34. includes/models/Display.php +24 -0
  35. includes/models/License.php +17 -0
  36. includes/models/QLWAPP_Model.php +69 -0
  37. includes/models/Scheme.php +27 -0
  38. includes/{suggestions.php → models/Suggestions.php} +132 -132
  39. includes/models/Welcome.php +12 -0
  40. includes/pages/box.php +0 -205
  41. includes/pages/button.php +0 -113
  42. includes/pages/colors.php +0 -49
  43. includes/pages/contacts.php +0 -64
  44. includes/pages/display.php +0 -126
  45. includes/pages/premium.php +0 -71
  46. includes/pages/welcome.php +0 -35
  47. includes/settings.php +139 -550
  48. includes/view/backend/pages/box.php +46 -0
  49. includes/view/backend/pages/button.php +121 -0
  50. includes/view/backend/pages/contacts.php +73 -0
  51. includes/view/backend/pages/display.php +133 -0
  52. includes/view/backend/pages/modals/contact-modal.php +126 -0
  53. includes/view/backend/pages/modals/icons-modal.php +60 -0
  54. includes/view/backend/pages/parts/header.php +51 -0
  55. includes/view/backend/pages/premium.php +73 -0
  56. includes/view/backend/pages/scheme.php +56 -0
  57. includes/{pages → view/backend/pages}/suggestions.php +1 -5
  58. includes/view/backend/pages/welcome.php +37 -0
  59. readme.txt +1 -1
  60. template/box.php +36 -36
  61. wp-whatsapp-chat.php +142 -132
  62. wpml-config.xml +1 -3
assets/css/qlwapp-admin.css CHANGED
@@ -1,100 +1,116 @@
1
- #qlwapp_modal .attachments-browser .attachments {
2
- top: 0;
3
- left: 0;
4
- right: 0;
5
- }
6
- #qlwapp_modal .wp-core-ui .attachment .thumbnail,
7
- #qlwapp_modal .wp-core-ui .attachment-info .thumbnail {
8
- vertical-align: middle;
9
- text-align: center;
10
- }
11
- #qlwapp_modal .wp-core-ui .attachment .thumbnail:before,
12
- #qlwapp_modal .wp-core-ui .attachment-info .thumbnail:before {
13
- content: '';
14
- display: inline-block;
15
- width: 0px;
16
- height: 100%;
17
- vertical-align: middle;
18
- }
19
- #qlwapp_modal .wp-core-ui .attachment .thumbnail > i,
20
- #qlwapp_modal .wp-core-ui .attachment-info .thumbnail > i {
21
- text-align: center;
22
- font-size: 3vw;
23
- display: inline-block;
24
- vertical-align: middle;
25
- height: auto;
26
- width: auto;
27
- }
28
- #qlwapp_modal .wp-core-ui .attachment-info .thumbnail {
29
- width: 60px;
30
- height: 60px;
31
- background-color: #fff;
32
- }
33
- #qlwapp_modal .wp-core-ui .attachment-info .thumbnail > i {
34
- font-size: 2em;
35
- position: relative;
36
- left: -1px;
37
- }
38
- #qlwapp_modal .wp-core-ui .attachment-info .qlwapp-color-picker .container {
39
- box-sizing: border-box;
40
- width: 100%;
41
- border-bottom: 1px solid #ddd;
42
- padding: 11px 0;
43
- }
44
- #qlwapp_modal .wp-core-ui .attachment-info .qlwapp-color-picker #qlwapp-input-color {
45
- box-sizing: border-box;
46
- margin: 1px;
47
- width: 65%;
48
- float: right;
49
- }
50
- #qlwapp_modal .wp-core-ui .attachment-info .qlwapp-color-picker .wp-picker-container .wp-color-result {
51
- width: 100%;
52
- margin-top: 5px!important;
53
- }
54
- #qlwapp_modal .wp-core-ui .attachment-info .qlwapp-color-picker .wp-picker-container .wp-color-result-text {
55
- z-index: 1;
56
- position: relative;
57
- }
58
- .about-wrap .form-table td img.qlwapp-avatar {
59
- width: 50px;
60
- height: 50px;
61
- }
62
- .qlwrap .nav-tab i {
63
- line-height: 26px;
64
- }
65
- .qlwrap .form-table td {
66
- vertical-align: middle;
67
- }
68
- .qlwrap .qlwapp-input,
69
- .qlwrap .qlwapp-select2 {
70
- width: 350px;
71
- max-width: 100%;
72
- }
73
- .qlwrap .qlwapp-input {
74
- margin: 0;
75
- padding: 6px;
76
- box-sizing: border-box;
77
- vertical-align: top;
78
- }
79
- #qlwapp_modal.qlwapp-modal-contact {
80
- max-width: 890px;
81
- max-height: 800px;
82
- margin: auto;
83
- }
84
- #qlwapp_modal.qlwapp-modal-contact table {
85
- width: 100%;
86
- padding: 15px;
87
- }
88
- #qlwapp_modal.qlwapp-modal-contact table:not(:last-child) {
89
- border-bottom: 1px solid #ddd;
90
- }
91
- #qlwapp_modal.qlwapp-modal-contact table th {
92
- width: 60px;
93
- }
94
- #qlwapp_modal.qlwapp-modal-contact table td {
95
- max-width: calc(50%-60px);
96
- }
97
- #qlwapp_modal .qlwapp-modal-contact-content {
98
- bottom: 61px;
99
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
100
  /*# sourceMappingURL=qlwapp-admin.css.map */
1
+ /* re-order td */
2
+ #qlwapp_contacts_table td,
3
+ #qlwapp_contacts_table th {
4
+ padding: 1em!important;
5
+ vertical-align: top;
6
+ line-height: 1.75em;
7
+ }
8
+ #qlwapp_contacts_table td img.qlwapp-avatar {
9
+ width: 50px;
10
+ height: 50px;
11
+ }
12
+ #qlwapp_contacts_table tbody.ui-sortable .wc-item-reorder-nav button {
13
+ position: relative;
14
+ overflow: hidden;
15
+ float: left;
16
+ display: block;
17
+ width: 24px;
18
+ height: 24px;
19
+ margin: 0;
20
+ background: 0 0;
21
+ border: none;
22
+ box-shadow: none;
23
+ color: #82878c;
24
+ text-indent: -9999px;
25
+ cursor: pointer;
26
+ outline: 0;
27
+ }
28
+ #qlwapp_contacts_table tbody.ui-sortable .wc-item-reorder-nav button::before {
29
+ display: inline-block;
30
+ position: absolute;
31
+ top: 0;
32
+ right: 0;
33
+ width: 100%;
34
+ height: 100%;
35
+ font: normal 20px/23px dashicons;
36
+ text-align: center;
37
+ text-indent: 0;
38
+ -webkit-font-smoothing: antialiased;
39
+ -moz-osx-font-smoothing: grayscale;
40
+ }
41
+ #qlwapp_contacts_table tbody.ui-sortable .wc-item-reorder-nav button.wc-move-up::before {
42
+ content: "\f343";
43
+ }
44
+ #qlwapp_contacts_table tbody.ui-sortable .wc-item-reorder-nav button.wc-move-down::before {
45
+ content: "\f347";
46
+ }
47
+ #qlwapp_contacts_table tbody.ui-sortable .wc-item-reorder-nav button.wc-move-disabled {
48
+ color: #d5d5d5!important;
49
+ cursor: default;
50
+ pointer-events: none;
51
+ }
52
+ #qlwapp_contacts_table tbody.ui-sortable .wc-item-reorder-nav::before {
53
+ content: "\f333";
54
+ font-family: Dashicons;
55
+ text-align: center;
56
+ line-height: 1;
57
+ color: #999;
58
+ display: block;
59
+ width: 24px;
60
+ float: left;
61
+ height: 100%;
62
+ line-height: 24px;
63
+ cursor: move;
64
+ }
65
+ /*end re-order*/
66
+ #qlwapp_modal .edit-attachment-frame .attachment-media-view {
67
+ width: 75% ;
68
+ }
69
+ #qlwapp_modal .edit-attachment-frame .attachment-info {
70
+ width: 25%;
71
+ }
72
+ #qlwapp_modal input[type=time] {
73
+ height: 30px;
74
+ }
75
+ #qlwapp_modal.qlwapp-modal-contact {
76
+ max-width: 890px;
77
+ max-height: 560px;
78
+ margin: auto;
79
+ }
80
+ #qlwapp_modal.qlwapp-modal-contact table {
81
+ width: 100%;
82
+ padding: 15px;
83
+ border-width: 1px 0 0 0;
84
+ box-shadow: none;
85
+ table-layout: fixed;
86
+ }
87
+ #qlwapp_modal.qlwapp-modal-contact table th {
88
+ width: 70px;
89
+ }
90
+ #qlwapp_modal.qlwapp-modal-contact table td {
91
+ width: calc(50% - 70px);
92
+ }
93
+ .settings-save-status .spinner {
94
+ float: none;
95
+ display: inline-block;
96
+ margin: 0 10px;
97
+ }
98
+ .settings-save-status .saved {
99
+ font-size: 12px;
100
+ display: none;
101
+ }
102
+ .settings-save-status .saved.is-active {
103
+ display: inline-block;
104
+ }
105
+ .qlwapp-input,
106
+ .qlwapp-select2 {
107
+ width: 350px;
108
+ max-width: 100%;
109
+ }
110
+ .qlwapp-input {
111
+ margin: 0;
112
+ padding: 6px;
113
+ box-sizing: border-box;
114
+ vertical-align: top;
115
+ }
116
  /*# sourceMappingURL=qlwapp-admin.css.map */
assets/css/qlwapp-admin.css.map ADDED
@@ -0,0 +1 @@
 
1
+ {"version":3,"sources":["../less/qlwapp-admin.less"],"names":[],"mappings":";AAEA,sBACE;AADF,sBAEE;EACE,sBAAA;EACA,mBAAA;EACA,mBAAA;;AALJ,sBAQE,GAAG,IAAG;EACJ,WAAA;EACA,YAAA;;AAIA,sBADF,MACG,YACC,qBACE;EACE,kBAAA;EACA,gBAAA;EACA,WAAA;EACA,cAAA;EACA,WAAA;EACA,YAAA;EACA,SAAA;EACA,eAAA;EACA,YAAA;EACA,gBAAA;EACA,cAAA;EACA,oBAAA;EACA,eAAA;EACA,UAAA;;AACA,sBAlBR,MACG,YACC,qBACE,OAeG;EACC,qBAAA;EACA,kBAAA;EACA,MAAA;EACA,QAAA;EACA,WAAA;EACA,YAAA;EACA,gCAAA;EACA,kBAAA;EACA,cAAA;EACA,mCAAA;EACA,kCAAA;;AAEF,sBA/BR,MACG,YACC,qBACE,OA4BG,WAAW;EACV,SAAS,OAAT;;AAEF,sBAlCR,MACG,YACC,qBACE,OA+BG,aAAa;EACZ,SAAS,OAAT;;AAEF,sBArCR,MACG,YACC,qBACE,OAkCG;EACC,wBAAA;EACA,eAAA;EACA,oBAAA;;AAGJ,sBA3CN,MACG,YACC,qBAyCG;EACC,SAAS,OAAT;EACA,sBAAA;EACA,kBAAA;EACA,cAAA;EACA,WAAA;EACA,cAAA;EACA,WAAA;EACA,WAAA;EACA,YAAA;EACA,iBAAA;EACA,YAAA;;;AAYV,aAEE,uBAAuB;EACrB,WAAA;;AAHJ,aAKE,uBAAuB;EACrB,UAAA;;AANJ,aASE,MAAK;EACH,YAAA;;AAGF,aAAC;EACC,gBAAA;EACA,iBAAA;EACA,YAAA;;AAHF,aAAC,qBAKC;EACE,WAAA;EACA,aAAA;EACA,uBAAA;EACA,gBAAA;EACA,mBAAA;;AAVJ,aAAC,qBAKC,MAOE;EACE,WAAA;;AAbN,aAAC,qBAKC,MAWE;EACE,uBAAA;;AAOR,qBAEE;EACE,WAAA;EACA,qBAAA;EACA,cAAA;;AALJ,qBAQE;EACE,eAAA;EACA,aAAA;;AACA,qBAHF,OAGG;EACC,qBAAA;;AAKN;AACA;EACE,YAAA;EACA,eAAA;;AAGF;EACE,SAAA;EACA,YAAA;EACA,sBAAA;EACA,mBAAA","file":"qlwapp-admin.css"}
assets/css/qlwapp-admin.min.css CHANGED
@@ -0,0 +1,2 @@
 
 
1
+
2
+ .ui-sortable .wc-item-reorder-nav button{position:relative;overflow:hidden;float:left;display:block;width:24px;height:24px;margin:0;background:0;border:0;box-shadow:none;color:#82878c;text-indent:-9999px;cursor:pointer;outline:0}.ui-sortable .wc-item-reorder-nav button::before{display:inline-block;position:absolute;top:0;right:0;width:100%;height:100%;font:normal 20px/23px dashicons;text-align:center;text-indent:0;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.ui-sortable .wc-item-reorder-nav button.wc-move-up::before{content:"\f343"}.ui-sortable .wc-item-reorder-nav button.wc-move-down::before{content:"\f347"}.ui-sortable .wc-item-reorder-nav button.wc-move-disabled{color:#d5d5d5!important;cursor:default;pointer-events:none}.ui-sortable .wc-item-reorder-nav::before{content:"\f333";font-family:Dashicons;text-align:center;line-height:1;color:#999;display:block;width:24px;float:left;height:100%;line-height:24px;cursor:move}#qlwapp_modal .edit-attachment-frame .attachment-info .details,#qlwapp_modal .edit-attachment-frame .attachment-info .settings{border-bottom:0}#qlwapp_modal .edit-attachment-frame .attachment-media-view{width:75%}#qlwapp_modal .edit-attachment-frame .attachment-media-view .titleTable{padding-left:15px;padding-top:5px;border-bottom:1px solid #f1f1f1}#qlwapp_modal .edit-attachment-frame .attachment-info{width:25%;padding-top:32px}#qlwapp_modal .edit-attachment-frame .attachment-info .settings-save-status .is-active{display:inline;color:rgba(13,144,29,0.8)}#qlwapp_modal .media-modal-close{float:left}.settings-save-status .spinner{float:none;display:inline-block;margin:0 10px}.settings-save-status .saved{display:none}.settings-save-status .saved.is-active{display:inline-block;color:rgba(13,144,29,0.8)}#qlwapp_modal .attachments-browser .attachments{top:0;left:0;right:0}#qlwapp_modal .wp-core-ui .attachment .thumbnail,#qlwapp_modal .wp-core-ui .attachment-info .thumbnail{vertical-align:middle;text-align:center}#qlwapp_modal .wp-core-ui .attachment .thumbnail:before,#qlwapp_modal .wp-core-ui .attachment-info .thumbnail:before{content:'';display:inline-block;width:0;height:100%;vertical-align:middle}#qlwapp_modal .wp-core-ui .attachment .thumbnail>i,#qlwapp_modal .wp-core-ui .attachment-info .thumbnail>i{text-align:center;font-size:3vw;display:inline-block;vertical-align:middle;height:auto;width:auto}#qlwapp_modal .wp-core-ui .attachment-info .thumbnail{width:60px;height:60px;background-color:#fff}#qlwapp_modal .wp-core-ui .attachment-info .thumbnail>i{font-size:2em;position:relative;left:-1px}#qlwapp_modal .wp-core-ui .attachment-info .qlwapp-color-picker .container{box-sizing:border-box;width:100%;border-bottom:1px solid #ddd;padding:11px 0}#qlwapp_modal .wp-core-ui .attachment-info .qlwapp-color-picker #qlwapp-input-color{box-sizing:border-box;margin:1px;width:75%;float:right}#qlwapp_modal .wp-core-ui .attachment-info .qlwapp-color-picker .wp-picker-container .wp-color-result{width:100%;margin-top:5px!important}#qlwapp_modal .wp-core-ui .attachment-info .qlwapp-color-picker .wp-picker-container .wp-color-result-text{z-index:1;position:relative}.about-wrap .form-table td img.qlwapp-avatar{width:50px;height:50px}.qlwrap .nav-tab i{line-height:26px}.qlwrap .form-table td{vertical-align:middle}.qlwrap .qlwapp-input,.qlwrap .qlwapp-select2{width:350px;max-width:100%}.qlwrap .qlwapp-input{margin:0;padding:6px;box-sizing:border-box;vertical-align:top}#qlwapp_modal.qlwapp-modal-contact{max-width:890px;max-height:800px;margin:auto}#qlwapp_modal.qlwapp-modal-contact table{width:100%;padding:15px}#qlwapp_modal.qlwapp-modal-contact table:not(:last-child){border-bottom:1px solid #ddd}#qlwapp_modal.qlwapp-modal-contact table th{width:60px}#qlwapp_modal.qlwapp-modal-contact table td{max-width:calc(-10%)}#qlwapp_modal .qlwapp-modal-contact-content{bottom:61px}.submit_up p.submit{text-align:left;max-width:100%;margin-top:20px;padding-top:10px}
assets/css/qlwapp-select2.css CHANGED
@@ -1,409 +1,409 @@
1
- .select2-container {
2
- box-sizing: border-box;
3
- display: inline-block;
4
- margin: 0;
5
- position: relative;
6
- vertical-align: middle
7
- }
8
-
9
- .select2-container .select2-selection--single {
10
- box-sizing: border-box;
11
- cursor: pointer;
12
- display: block;
13
- height: 28px;
14
- margin: 0 0 -4px;
15
- -moz-user-select: none;
16
- -ms-user-select: none;
17
- user-select: none;
18
- -webkit-user-select: none
19
- }
20
-
21
- .select2-container .select2-selection--single .select2-selection__rendered {
22
- display: block;
23
- padding-left: 8px;
24
- padding-right: 20px;
25
- overflow: hidden;
26
- text-overflow: ellipsis;
27
- white-space: nowrap
28
- }
29
-
30
- .select2-container .select2-selection--single .select2-selection__clear {
31
- position: relative
32
- }
33
-
34
- .select2-container[dir=rtl] .select2-selection--single .select2-selection__rendered {
35
- padding-right: 8px;
36
- padding-left: 20px
37
- }
38
-
39
- .select2-container .select2-selection {
40
- box-sizing: border-box;
41
- cursor: pointer;
42
- display: block;
43
- min-height: 32px;
44
- -moz-user-select: none;
45
- -ms-user-select: none;
46
- user-select: none;
47
- -webkit-user-select: none
48
- }
49
-
50
- .select2-container .select2-selection .select2-selection__rendered {
51
- display: inline-block;
52
- overflow: hidden;
53
- padding-left: 8px;
54
- text-overflow: ellipsis;
55
- white-space: nowrap
56
- }
57
-
58
- .select2-container .select2-search--inline {
59
- float: left;
60
- padding: 0
61
- }
62
-
63
- .select2-container .select2-search--inline .select2-search__field {
64
- box-sizing: border-box;
65
- border: none;
66
- font-size: 100%;
67
- margin: 0;
68
- padding: 0
69
- }
70
-
71
- .select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button {
72
- -webkit-appearance: none
73
- }
74
-
75
- .select2-dropdown {
76
- background-color: #fff;
77
- border: 1px solid #ccc;
78
- border-radius: 2px;
79
- box-sizing: border-box;
80
- display: block;
81
- position: absolute;
82
- left: -100000px;
83
- width: 100%;
84
- z-index: 1051
85
- }
86
-
87
- .select2-results {
88
- display: block
89
- }
90
-
91
- .select2-results__options {
92
- list-style: none;
93
- margin: 0;
94
- padding: 0
95
- }
96
-
97
- .select2-results__option {
98
- margin: 0;
99
- padding: 8px;
100
- -moz-user-select: none;
101
- -ms-user-select: none;
102
- user-select: none;
103
- -webkit-user-select: none
104
- }
105
-
106
- .select2-results__option[aria-selected],
107
- .select2-results__option[data-selected] {
108
- cursor: pointer
109
- }
110
-
111
- .select2-container--open .select2-dropdown {
112
- left: 0
113
- }
114
-
115
- .select2-container--open .select2-dropdown--above {
116
- border-bottom: none;
117
- border-bottom-left-radius: 0;
118
- border-bottom-right-radius: 0
119
- }
120
-
121
- .select2-container--open .select2-dropdown--below {
122
- border-top: none;
123
- border-top-left-radius: 0;
124
- border-top-right-radius: 0
125
- }
126
-
127
- .select2-search--dropdown {
128
- display: block;
129
- padding: 4px
130
- }
131
-
132
- .select2-search--dropdown .select2-search__field {
133
- padding: 4px;
134
- width: 100%;
135
- box-sizing: border-box
136
- }
137
-
138
- .select2-search--dropdown .select2-search__field::-webkit-search-cancel-button {
139
- -webkit-appearance: none
140
- }
141
-
142
- .select2-search--dropdown.select2-search--hide {
143
- display: none
144
- }
145
-
146
- .select2-close-mask {
147
- border: 0;
148
- margin: 0;
149
- padding: 0;
150
- display: block;
151
- position: fixed;
152
- left: 0;
153
- top: 0;
154
- min-height: 100%;
155
- min-width: 100%;
156
- height: auto;
157
- width: auto;
158
- opacity: 0;
159
- z-index: 99;
160
- background-color: #fff
161
- }
162
-
163
- .select2-hidden-accessible {
164
- border: 0!important;
165
- clip: rect(0 0 0 0)!important;
166
- height: 1px!important;
167
- margin: -1px!important;
168
- overflow: hidden!important;
169
- padding: 0!important;
170
- position: absolute!important;
171
- width: 1px!important
172
- }
173
-
174
- .select2-container--default .select2-selection--single {
175
- background-color: #fff;
176
- border: 1px solid #ccc;
177
- border-radius: 4px
178
- }
179
-
180
- .select2-container--default .select2-selection--single .select2-selection__rendered {
181
- color: #444;
182
- line-height: 28px
183
- }
184
-
185
- .select2-container--default .select2-selection--single .select2-selection__clear {
186
- cursor: pointer;
187
- float: right;
188
- font-weight: 700
189
- }
190
-
191
- .select2-container--default .select2-selection--single .select2-selection__placeholder {
192
- color: #999
193
- }
194
-
195
- .select2-container--default .select2-selection--single .select2-selection__arrow {
196
- height: 32px;
197
- position: absolute;
198
- top: 0px;
199
- right: 1px;
200
- width: 20px
201
- }
202
-
203
- .select2-container--default .select2-selection--single .select2-selection__arrow b {
204
- border-color: #888 transparent transparent transparent;
205
- border-style: solid;
206
- border-width: 5px 4px 0 4px;
207
- height: 0;
208
- left: 50%;
209
- margin-left: -4px;
210
- margin-top: -2px;
211
- position: absolute;
212
- top: 50%;
213
- width: 0
214
- }
215
-
216
- .select2-container--default[dir=rtl] .select2-selection--single .select2-selection__clear {
217
- float: left
218
- }
219
-
220
- .select2-container--default[dir=rtl] .select2-selection--single .select2-selection__arrow {
221
- left: 1px;
222
- right: auto
223
- }
224
-
225
- .select2-container--default.select2-container--disabled .select2-selection--single {
226
- background-color: #eee;
227
- cursor: default
228
- }
229
-
230
- .select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear {
231
- display: none
232
- }
233
-
234
- .select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b {
235
- border-color: transparent transparent #888 transparent;
236
- border-width: 0 4px 5px 4px
237
- }
238
-
239
- .select2-container--default .select2-selection {
240
- background-color: #fff;
241
- border: 1px solid #ccc;
242
- border-radius: 2px;
243
- cursor: text
244
- }
245
-
246
- .select2-container--default .select2-selection .select2-selection__rendered {
247
- box-sizing: border-box;
248
- list-style: none;
249
- margin: 0;
250
- padding: 0 5px;
251
- width: 100%
252
- }
253
-
254
- .select2-container--default .select2-selection .select2-selection__rendered li {
255
- list-style: none;
256
- margin: 5px 5px 0 0
257
- }
258
-
259
- .select2-container--default .select2-selection .select2-selection__rendered li:before {
260
- content: '';
261
- display: none
262
- }
263
-
264
- .select2-container--default .select2-selection .select2-selection__placeholder {
265
- color: #999;
266
- margin-top: 5px;
267
- float: left
268
- }
269
-
270
- .select2-container--default .select2-selection .select2-selection__clear {
271
- cursor: pointer;
272
- float: right;
273
- font-weight: 700;
274
- margin-top: 5px;
275
- margin-right: 10px
276
- }
277
-
278
- .select2-container--default .select2-selection .select2-selection__choice {
279
- background-color: #e4e4e4;
280
- border: 1px solid #ccc;
281
- border-radius: 2px;
282
- cursor: default;
283
- float: left;
284
- margin-right: 5px;
285
- margin-top: 5px;
286
- padding: 0 5px
287
- }
288
-
289
- .select2-container--default .select2-selection .select2-selection__choice__remove {
290
- color: #999;
291
- cursor: pointer;
292
- display: inline-block;
293
- font-weight: 700;
294
- margin-right: 2px
295
- }
296
-
297
- .select2-container--default .select2-selection .select2-selection__choice__remove:hover {
298
- color: #333
299
- }
300
-
301
- .select2-container--default[dir=rtl] .select2-selection .select2-search--inline,
302
- .select2-container--default[dir=rtl] .select2-selection .select2-selection__choice,
303
- .select2-container--default[dir=rtl] .select2-selection .select2-selection__placeholder {
304
- float: right
305
- }
306
-
307
- .select2-container--default[dir=rtl] .select2-selection .select2-selection__choice {
308
- margin-left: 5px;
309
- margin-right: auto
310
- }
311
-
312
- .select2-container--default[dir=rtl] .select2-selection .select2-selection__choice__remove {
313
- margin-left: 2px;
314
- margin-right: auto
315
- }
316
-
317
- .select2-container--default.select2-container--focus .select2-selection {
318
- outline: 0
319
- }
320
-
321
- .select2-container--default.select2-container--disabled .select2-selection {
322
- background-color: #eee;
323
- cursor: default
324
- }
325
-
326
- .select2-container--default.select2-container--disabled .select2-selection__choice__remove {
327
- display: none
328
- }
329
-
330
- .select2-container--default.select2-container--open.select2-container--above .select2-selection,
331
- .select2-container--default.select2-container--open.select2-container--above .select2-selection--single {
332
- border-top-left-radius: 0;
333
- border-top-right-radius: 0
334
- }
335
-
336
- .select2-container--default.select2-container--open.select2-container--below .select2-selection,
337
- .select2-container--default.select2-container--open.select2-container--below .select2-selection--single {
338
- border-bottom-left-radius: 0;
339
- border-bottom-right-radius: 0
340
- }
341
-
342
- .select2-container--default .select2-search--dropdown .select2-search__field {
343
- border: 1px solid #ccc
344
- }
345
-
346
- .select2-container--default .select2-search--inline .select2-search__field {
347
- background: 0 0;
348
- border: none;
349
- outline: 0;
350
- box-shadow: none;
351
- -webkit-appearance: textfield
352
- }
353
-
354
- .select2-container--default .select2-results>.select2-results__options {
355
- max-height: 200px;
356
- overflow-y: auto
357
- }
358
-
359
- .select2-container--default .select2-results__option[role=group] {
360
- padding: 0
361
- }
362
-
363
- .select2-container--default .select2-results__option[aria-disabled=true] {
364
- color: #999
365
- }
366
-
367
- .select2-container--default .select2-results__option[aria-selected=true],
368
- .select2-container--default .select2-results__option[data-selected=true] {
369
- background-color: #ddd
370
- }
371
-
372
- .select2-container--default .select2-results__option .select2-results__option {
373
- padding-left: 1em
374
- }
375
-
376
- .select2-container--default .select2-results__option .select2-results__option .select2-results__group {
377
- padding-left: 0
378
- }
379
-
380
- .select2-container--default .select2-results__option .select2-results__option .select2-results__option {
381
- margin-left: -1em;
382
- padding-left: 2em
383
- }
384
-
385
- .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
386
- margin-left: -2em;
387
- padding-left: 3em
388
- }
389
-
390
- .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
391
- margin-left: -3em;
392
- padding-left: 4em
393
- }
394
-
395
- .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
396
- margin-left: -4em;
397
- padding-left: 5em
398
- }
399
-
400
- .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
401
- margin-left: -5em;
402
- padding-left: 6em
403
- }
404
-
405
- .select2-container--default .select2-results__option--highlighted[aria-selected],
406
- .select2-container--default .select2-results__option--highlighted[data-selected] {
407
- background-color: #0073aa;
408
- color: #fff
409
- }
1
+ .select2-container {
2
+ box-sizing: border-box;
3
+ display: inline-block;
4
+ margin: 0;
5
+ position: relative;
6
+ vertical-align: middle
7
+ }
8
+
9
+ .select2-container .select2-selection--single {
10
+ box-sizing: border-box;
11
+ cursor: pointer;
12
+ display: block;
13
+ height: 28px;
14
+ margin: 0 0 -4px;
15
+ -moz-user-select: none;
16
+ -ms-user-select: none;
17
+ user-select: none;
18
+ -webkit-user-select: none
19
+ }
20
+
21
+ .select2-container .select2-selection--single .select2-selection__rendered {
22
+ display: block;
23
+ padding-left: 8px;
24
+ padding-right: 20px;
25
+ overflow: hidden;
26
+ text-overflow: ellipsis;
27
+ white-space: nowrap
28
+ }
29
+
30
+ .select2-container .select2-selection--single .select2-selection__clear {
31
+ position: relative
32
+ }
33
+
34
+ .select2-container[dir=rtl] .select2-selection--single .select2-selection__rendered {
35
+ padding-right: 8px;
36
+ padding-left: 20px
37
+ }
38
+
39
+ .select2-container .select2-selection {
40
+ box-sizing: border-box;
41
+ cursor: pointer;
42
+ display: block;
43
+ min-height: 32px;
44
+ -moz-user-select: none;
45
+ -ms-user-select: none;
46
+ user-select: none;
47
+ -webkit-user-select: none
48
+ }
49
+
50
+ .select2-container .select2-selection .select2-selection__rendered {
51
+ display: inline-block;
52
+ overflow: hidden;
53
+ padding-left: 8px;
54
+ text-overflow: ellipsis;
55
+ white-space: nowrap
56
+ }
57
+
58
+ .select2-container .select2-search--inline {
59
+ float: left;
60
+ padding: 0
61
+ }
62
+
63
+ .select2-container .select2-search--inline .select2-search__field {
64
+ box-sizing: border-box;
65
+ border: none;
66
+ font-size: 100%;
67
+ margin: 0;
68
+ padding: 0
69
+ }
70
+
71
+ .select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button {
72
+ -webkit-appearance: none
73
+ }
74
+
75
+ .select2-dropdown {
76
+ background-color: #fff;
77
+ border: 1px solid #ccc;
78
+ border-radius: 2px;
79
+ box-sizing: border-box;
80
+ display: block;
81
+ position: absolute;
82
+ left: -100000px;
83
+ width: 100%;
84
+ z-index: 1051
85
+ }
86
+
87
+ .select2-results {
88
+ display: block
89
+ }
90
+
91
+ .select2-results__options {
92
+ list-style: none;
93
+ margin: 0;
94
+ padding: 0
95
+ }
96
+
97
+ .select2-results__option {
98
+ margin: 0;
99
+ padding: 8px;
100
+ -moz-user-select: none;
101
+ -ms-user-select: none;
102
+ user-select: none;
103
+ -webkit-user-select: none
104
+ }
105
+
106
+ .select2-results__option[aria-selected],
107
+ .select2-results__option[data-selected] {
108
+ cursor: pointer
109
+ }
110
+
111
+ .select2-container--open .select2-dropdown {
112
+ left: 0
113
+ }
114
+
115
+ .select2-container--open .select2-dropdown--above {
116
+ border-bottom: none;
117
+ border-bottom-left-radius: 0;
118
+ border-bottom-right-radius: 0
119
+ }
120
+
121
+ .select2-container--open .select2-dropdown--below {
122
+ border-top: none;
123
+ border-top-left-radius: 0;
124
+ border-top-right-radius: 0
125
+ }
126
+
127
+ .select2-search--dropdown {
128
+ display: block;
129
+ padding: 4px
130
+ }
131
+
132
+ .select2-search--dropdown .select2-search__field {
133
+ padding: 4px;
134
+ width: 100%;
135
+ box-sizing: border-box
136
+ }
137
+
138
+ .select2-search--dropdown .select2-search__field::-webkit-search-cancel-button {
139
+ -webkit-appearance: none
140
+ }
141
+
142
+ .select2-search--dropdown.select2-search--hide {
143
+ display: none
144
+ }
145
+
146
+ .select2-close-mask {
147
+ border: 0;
148
+ margin: 0;
149
+ padding: 0;
150
+ display: block;
151
+ position: fixed;
152
+ left: 0;
153
+ top: 0;
154
+ min-height: 100%;
155
+ min-width: 100%;
156
+ height: auto;
157
+ width: auto;
158
+ opacity: 0;
159
+ z-index: 99;
160
+ background-color: #fff
161
+ }
162
+
163
+ .select2-hidden-accessible {
164
+ border: 0!important;
165
+ clip: rect(0 0 0 0)!important;
166
+ height: 1px!important;
167
+ margin: -1px!important;
168
+ overflow: hidden!important;
169
+ padding: 0!important;
170
+ position: absolute!important;
171
+ width: 1px!important
172
+ }
173
+
174
+ .select2-container--default .select2-selection--single {
175
+ background-color: #fff;
176
+ border: 1px solid #ccc;
177
+ border-radius: 4px
178
+ }
179
+
180
+ .select2-container--default .select2-selection--single .select2-selection__rendered {
181
+ color: #444;
182
+ line-height: 28px
183
+ }
184
+
185
+ .select2-container--default .select2-selection--single .select2-selection__clear {
186
+ cursor: pointer;
187
+ float: right;
188
+ font-weight: 700
189
+ }
190
+
191
+ .select2-container--default .select2-selection--single .select2-selection__placeholder {
192
+ color: #999
193
+ }
194
+
195
+ .select2-container--default .select2-selection--single .select2-selection__arrow {
196
+ height: 32px;
197
+ position: absolute;
198
+ top: 0px;
199
+ right: 1px;
200
+ width: 20px
201
+ }
202
+
203
+ .select2-container--default .select2-selection--single .select2-selection__arrow b {
204
+ border-color: #888 transparent transparent transparent;
205
+ border-style: solid;
206
+ border-width: 5px 4px 0 4px;
207
+ height: 0;
208
+ left: 50%;
209
+ margin-left: -4px;
210
+ margin-top: -2px;
211
+ position: absolute;
212
+ top: 50%;
213
+ width: 0
214
+ }
215
+
216
+ .select2-container--default[dir=rtl] .select2-selection--single .select2-selection__clear {
217
+ float: left
218
+ }
219
+
220
+ .select2-container--default[dir=rtl] .select2-selection--single .select2-selection__arrow {
221
+ left: 1px;
222
+ right: auto
223
+ }
224
+
225
+ .select2-container--default.select2-container--disabled .select2-selection--single {
226
+ background-color: #eee;
227
+ cursor: default
228
+ }
229
+
230
+ .select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear {
231
+ display: none
232
+ }
233
+
234
+ .select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b {
235
+ border-color: transparent transparent #888 transparent;
236
+ border-width: 0 4px 5px 4px
237
+ }
238
+
239
+ .select2-container--default .select2-selection {
240
+ background-color: #fff;
241
+ border: 1px solid #ccc;
242
+ border-radius: 2px;
243
+ cursor: text
244
+ }
245
+
246
+ .select2-container--default .select2-selection .select2-selection__rendered {
247
+ box-sizing: border-box;
248
+ list-style: none;
249
+ margin: 0;
250
+ padding: 0 5px;
251
+ width: 100%
252
+ }
253
+
254
+ .select2-container--default .select2-selection .select2-selection__rendered li {
255
+ list-style: none;
256
+ margin: 5px 5px 0 0
257
+ }
258
+
259
+ .select2-container--default .select2-selection .select2-selection__rendered li:before {
260
+ content: '';
261
+ display: none
262
+ }
263
+
264
+ .select2-container--default .select2-selection .select2-selection__placeholder {
265
+ color: #999;
266
+ margin-top: 5px;
267
+ float: left
268
+ }
269
+
270
+ .select2-container--default .select2-selection .select2-selection__clear {
271
+ cursor: pointer;
272
+ float: right;
273
+ font-weight: 700;
274
+ margin-top: 5px;
275
+ margin-right: 10px
276
+ }
277
+
278
+ .select2-container--default .select2-selection .select2-selection__choice {
279
+ background-color: #e4e4e4;
280
+ border: 1px solid #ccc;
281
+ border-radius: 2px;
282
+ cursor: default;
283
+ float: left;
284
+ margin-right: 5px;
285
+ margin-top: 5px;
286
+ padding: 0 5px
287
+ }
288
+
289
+ .select2-container--default .select2-selection .select2-selection__choice__remove {
290
+ color: #999;
291
+ cursor: pointer;
292
+ display: inline-block;
293
+ font-weight: 700;
294
+ margin-right: 2px
295
+ }
296
+
297
+ .select2-container--default .select2-selection .select2-selection__choice__remove:hover {
298
+ color: #333
299
+ }
300
+
301
+ .select2-container--default[dir=rtl] .select2-selection .select2-search--inline,
302
+ .select2-container--default[dir=rtl] .select2-selection .select2-selection__choice,
303
+ .select2-container--default[dir=rtl] .select2-selection .select2-selection__placeholder {
304
+ float: right
305
+ }
306
+
307
+ .select2-container--default[dir=rtl] .select2-selection .select2-selection__choice {
308
+ margin-left: 5px;
309
+ margin-right: auto
310
+ }
311
+
312
+ .select2-container--default[dir=rtl] .select2-selection .select2-selection__choice__remove {
313
+ margin-left: 2px;
314
+ margin-right: auto
315
+ }
316
+
317
+ .select2-container--default.select2-container--focus .select2-selection {
318
+ outline: 0
319
+ }
320
+
321
+ .select2-container--default.select2-container--disabled .select2-selection {
322
+ background-color: #eee;
323
+ cursor: default
324
+ }
325
+
326
+ .select2-container--default.select2-container--disabled .select2-selection__choice__remove {
327
+ display: none
328
+ }
329
+
330
+ .select2-container--default.select2-container--open.select2-container--above .select2-selection,
331
+ .select2-container--default.select2-container--open.select2-container--above .select2-selection--single {
332
+ border-top-left-radius: 0;
333
+ border-top-right-radius: 0
334
+ }
335
+
336
+ .select2-container--default.select2-container--open.select2-container--below .select2-selection,
337
+ .select2-container--default.select2-container--open.select2-container--below .select2-selection--single {
338
+ border-bottom-left-radius: 0;
339
+ border-bottom-right-radius: 0
340
+ }
341
+
342
+ .select2-container--default .select2-search--dropdown .select2-search__field {
343
+ border: 1px solid #ccc
344
+ }
345
+
346
+ .select2-container--default .select2-search--inline .select2-search__field {
347
+ background: 0 0;
348
+ border: none;
349
+ outline: 0;
350
+ box-shadow: none;
351
+ -webkit-appearance: textfield
352
+ }
353
+
354
+ .select2-container--default .select2-results>.select2-results__options {
355
+ max-height: 200px;
356
+ overflow-y: auto
357
+ }
358
+
359
+ .select2-container--default .select2-results__option[role=group] {
360
+ padding: 0
361
+ }
362
+
363
+ .select2-container--default .select2-results__option[aria-disabled=true] {
364
+ color: #999
365
+ }
366
+
367
+ .select2-container--default .select2-results__option[aria-selected=true],
368
+ .select2-container--default .select2-results__option[data-selected=true] {
369
+ background-color: #ddd
370
+ }
371
+
372
+ .select2-container--default .select2-results__option .select2-results__option {
373
+ padding-left: 1em
374
+ }
375
+
376
+ .select2-container--default .select2-results__option .select2-results__option .select2-results__group {
377
+ padding-left: 0
378
+ }
379
+
380
+ .select2-container--default .select2-results__option .select2-results__option .select2-results__option {
381
+ margin-left: -1em;
382
+ padding-left: 2em
383
+ }
384
+
385
+ .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
386
+ margin-left: -2em;
387
+ padding-left: 3em
388
+ }
389
+
390
+ .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
391
+ margin-left: -3em;
392
+ padding-left: 4em
393
+ }
394
+
395
+ .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
396
+ margin-left: -4em;
397
+ padding-left: 5em
398
+ }
399
+
400
+ .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
401
+ margin-left: -5em;
402
+ padding-left: 6em
403
+ }
404
+
405
+ .select2-container--default .select2-results__option--highlighted[aria-selected],
406
+ .select2-container--default .select2-results__option--highlighted[data-selected] {
407
+ background-color: #0073aa;
408
+ color: #fff
409
+ }
assets/css/qlwapp-select2.min.css CHANGED
@@ -1 +1,2 @@
 
1
  .select2-container{box-sizing:border-box;display:inline-block;margin:0;position:relative;vertical-align:middle}.select2-container .select2-selection--single{box-sizing:border-box;cursor:pointer;display:block;height:28px;margin:0 0 -4px;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--single .select2-selection__rendered{display:block;padding-left:8px;padding-right:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-selection--single .select2-selection__clear{position:relative}.select2-container[dir=rtl] .select2-selection--single .select2-selection__rendered{padding-right:8px;padding-left:20px}.select2-container .select2-selection{box-sizing:border-box;cursor:pointer;display:block;min-height:32px;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-user-select:none}.select2-container .select2-selection .select2-selection__rendered{display:inline-block;overflow:hidden;padding-left:8px;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-search--inline{float:left;padding:0}.select2-container .select2-search--inline .select2-search__field{box-sizing:border-box;border:0;font-size:100%;margin:0;padding:0}.select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-dropdown{background-color:#fff;border:1px solid #ccc;border-radius:2px;box-sizing:border-box;display:block;position:absolute;left:-100000px;width:100%;z-index:1051}.select2-results{display:block}.select2-results__options{list-style:none;margin:0;padding:0}.select2-results__option{margin:0;padding:8px;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-user-select:none}.select2-results__option[aria-selected],.select2-results__option[data-selected]{cursor:pointer}.select2-container--open .select2-dropdown{left:0}.select2-container--open .select2-dropdown--above{border-bottom:0;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--open .select2-dropdown--below{border-top:0;border-top-left-radius:0;border-top-right-radius:0}.select2-search--dropdown{display:block;padding:4px}.select2-search--dropdown .select2-search__field{padding:4px;width:100%;box-sizing:border-box}.select2-search--dropdown .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-search--dropdown.select2-search--hide{display:none}.select2-close-mask{border:0;margin:0;padding:0;display:block;position:fixed;left:0;top:0;min-height:100%;min-width:100%;height:auto;width:auto;opacity:0;z-index:99;background-color:#fff}.select2-hidden-accessible{border:0!important;clip:rect(0 0 0 0)!important;height:1px!important;margin:-1px!important;overflow:hidden!important;padding:0!important;position:absolute!important;width:1px!important}.select2-container--default .select2-selection--single{background-color:#fff;border:1px solid #ccc;border-radius:4px}.select2-container--default .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--default .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:700}.select2-container--default .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--default .select2-selection--single .select2-selection__arrow{height:32px;position:absolute;top:0;right:1px;width:20px}.select2-container--default .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--default[dir=rtl] .select2-selection--single .select2-selection__clear{float:left}.select2-container--default[dir=rtl] .select2-selection--single .select2-selection__arrow{left:1px;right:auto}.select2-container--default.select2-container--disabled .select2-selection--single{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear{display:none}.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--default .select2-selection{background-color:#fff;border:1px solid #ccc;border-radius:2px;cursor:text}.select2-container--default .select2-selection .select2-selection__rendered{box-sizing:border-box;list-style:none;margin:0;padding:0 5px;width:100%}.select2-container--default .select2-selection .select2-selection__rendered li{list-style:none;margin:5px 5px 0 0}.select2-container--default .select2-selection .select2-selection__rendered li:before{content:'';display:none}.select2-container--default .select2-selection .select2-selection__placeholder{color:#999;margin-top:5px;float:left}.select2-container--default .select2-selection .select2-selection__clear{cursor:pointer;float:right;font-weight:700;margin-top:5px;margin-right:10px}.select2-container--default .select2-selection .select2-selection__choice{background-color:#e4e4e4;border:1px solid #ccc;border-radius:2px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--default .select2-selection .select2-selection__choice__remove{color:#999;cursor:pointer;display:inline-block;font-weight:700;margin-right:2px}.select2-container--default .select2-selection .select2-selection__choice__remove:hover{color:#333}.select2-container--default[dir=rtl] .select2-selection .select2-search--inline,.select2-container--default[dir=rtl] .select2-selection .select2-selection__choice,.select2-container--default[dir=rtl] .select2-selection .select2-selection__placeholder{float:right}.select2-container--default[dir=rtl] .select2-selection .select2-selection__choice{margin-left:5px;margin-right:auto}.select2-container--default[dir=rtl] .select2-selection .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--default.select2-container--focus .select2-selection{outline:0}.select2-container--default.select2-container--disabled .select2-selection{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection__choice__remove{display:none}.select2-container--default.select2-container--open.select2-container--above .select2-selection,.select2-container--default.select2-container--open.select2-container--above .select2-selection--single{border-top-left-radius:0;border-top-right-radius:0}.select2-container--default.select2-container--open.select2-container--below .select2-selection,.select2-container--default.select2-container--open.select2-container--below .select2-selection--single{border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--default .select2-search--dropdown .select2-search__field{border:1px solid #ccc}.select2-container--default .select2-search--inline .select2-search__field{background:0;border:0;outline:0;box-shadow:none;-webkit-appearance:textfield}.select2-container--default .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--default .select2-results__option[role=group]{padding:0}.select2-container--default .select2-results__option[aria-disabled=true]{color:#999}.select2-container--default .select2-results__option[aria-selected=true],.select2-container--default .select2-results__option[data-selected=true]{background-color:#ddd}.select2-container--default .select2-results__option .select2-results__option{padding-left:1em}.select2-container--default .select2-results__option .select2-results__option .select2-results__group{padding-left:0}.select2-container--default .select2-results__option .select2-results__option .select2-results__option{margin-left:-1em;padding-left:2em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-2em;padding-left:3em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-3em;padding-left:4em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-4em;padding-left:5em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-5em;padding-left:6em}.select2-container--default .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-results__option--highlighted[data-selected]{background-color:#0073aa;color:#fff}
1
+
2
  .select2-container{box-sizing:border-box;display:inline-block;margin:0;position:relative;vertical-align:middle}.select2-container .select2-selection--single{box-sizing:border-box;cursor:pointer;display:block;height:28px;margin:0 0 -4px;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--single .select2-selection__rendered{display:block;padding-left:8px;padding-right:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-selection--single .select2-selection__clear{position:relative}.select2-container[dir=rtl] .select2-selection--single .select2-selection__rendered{padding-right:8px;padding-left:20px}.select2-container .select2-selection{box-sizing:border-box;cursor:pointer;display:block;min-height:32px;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-user-select:none}.select2-container .select2-selection .select2-selection__rendered{display:inline-block;overflow:hidden;padding-left:8px;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-search--inline{float:left;padding:0}.select2-container .select2-search--inline .select2-search__field{box-sizing:border-box;border:0;font-size:100%;margin:0;padding:0}.select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-dropdown{background-color:#fff;border:1px solid #ccc;border-radius:2px;box-sizing:border-box;display:block;position:absolute;left:-100000px;width:100%;z-index:1051}.select2-results{display:block}.select2-results__options{list-style:none;margin:0;padding:0}.select2-results__option{margin:0;padding:8px;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-user-select:none}.select2-results__option[aria-selected],.select2-results__option[data-selected]{cursor:pointer}.select2-container--open .select2-dropdown{left:0}.select2-container--open .select2-dropdown--above{border-bottom:0;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--open .select2-dropdown--below{border-top:0;border-top-left-radius:0;border-top-right-radius:0}.select2-search--dropdown{display:block;padding:4px}.select2-search--dropdown .select2-search__field{padding:4px;width:100%;box-sizing:border-box}.select2-search--dropdown .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-search--dropdown.select2-search--hide{display:none}.select2-close-mask{border:0;margin:0;padding:0;display:block;position:fixed;left:0;top:0;min-height:100%;min-width:100%;height:auto;width:auto;opacity:0;z-index:99;background-color:#fff}.select2-hidden-accessible{border:0!important;clip:rect(0 0 0 0)!important;height:1px!important;margin:-1px!important;overflow:hidden!important;padding:0!important;position:absolute!important;width:1px!important}.select2-container--default .select2-selection--single{background-color:#fff;border:1px solid #ccc;border-radius:4px}.select2-container--default .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--default .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:700}.select2-container--default .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--default .select2-selection--single .select2-selection__arrow{height:32px;position:absolute;top:0;right:1px;width:20px}.select2-container--default .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--default[dir=rtl] .select2-selection--single .select2-selection__clear{float:left}.select2-container--default[dir=rtl] .select2-selection--single .select2-selection__arrow{left:1px;right:auto}.select2-container--default.select2-container--disabled .select2-selection--single{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear{display:none}.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--default .select2-selection{background-color:#fff;border:1px solid #ccc;border-radius:2px;cursor:text}.select2-container--default .select2-selection .select2-selection__rendered{box-sizing:border-box;list-style:none;margin:0;padding:0 5px;width:100%}.select2-container--default .select2-selection .select2-selection__rendered li{list-style:none;margin:5px 5px 0 0}.select2-container--default .select2-selection .select2-selection__rendered li:before{content:'';display:none}.select2-container--default .select2-selection .select2-selection__placeholder{color:#999;margin-top:5px;float:left}.select2-container--default .select2-selection .select2-selection__clear{cursor:pointer;float:right;font-weight:700;margin-top:5px;margin-right:10px}.select2-container--default .select2-selection .select2-selection__choice{background-color:#e4e4e4;border:1px solid #ccc;border-radius:2px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--default .select2-selection .select2-selection__choice__remove{color:#999;cursor:pointer;display:inline-block;font-weight:700;margin-right:2px}.select2-container--default .select2-selection .select2-selection__choice__remove:hover{color:#333}.select2-container--default[dir=rtl] .select2-selection .select2-search--inline,.select2-container--default[dir=rtl] .select2-selection .select2-selection__choice,.select2-container--default[dir=rtl] .select2-selection .select2-selection__placeholder{float:right}.select2-container--default[dir=rtl] .select2-selection .select2-selection__choice{margin-left:5px;margin-right:auto}.select2-container--default[dir=rtl] .select2-selection .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--default.select2-container--focus .select2-selection{outline:0}.select2-container--default.select2-container--disabled .select2-selection{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection__choice__remove{display:none}.select2-container--default.select2-container--open.select2-container--above .select2-selection,.select2-container--default.select2-container--open.select2-container--above .select2-selection--single{border-top-left-radius:0;border-top-right-radius:0}.select2-container--default.select2-container--open.select2-container--below .select2-selection,.select2-container--default.select2-container--open.select2-container--below .select2-selection--single{border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--default .select2-search--dropdown .select2-search__field{border:1px solid #ccc}.select2-container--default .select2-search--inline .select2-search__field{background:0;border:0;outline:0;box-shadow:none;-webkit-appearance:textfield}.select2-container--default .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--default .select2-results__option[role=group]{padding:0}.select2-container--default .select2-results__option[aria-disabled=true]{color:#999}.select2-container--default .select2-results__option[aria-selected=true],.select2-container--default .select2-results__option[data-selected=true]{background-color:#ddd}.select2-container--default .select2-results__option .select2-results__option{padding-left:1em}.select2-container--default .select2-results__option .select2-results__option .select2-results__group{padding-left:0}.select2-container--default .select2-results__option .select2-results__option .select2-results__option{margin-left:-1em;padding-left:2em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-2em;padding-left:3em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-3em;padding-left:4em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-4em;padding-left:5em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-5em;padding-left:6em}.select2-container--default .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-results__option--highlighted[data-selected]{background-color:#0073aa;color:#fff}
assets/css/qlwapp.css CHANGED
@@ -1,909 +1,909 @@
1
- @font-face {
2
- font-family: 'qlwapp-whatsapp';
3
- src: url(data:application/x-font-woff;charset=utf-8;base64,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) format('woff');
4
- font-weight: normal;
5
- font-style: normal;
6
- }
7
- .qlwapp-whatsapp-icon {
8
- font-family: 'qlwapp-whatsapp' !important;
9
- speak: none;
10
- font-style: normal;
11
- font-weight: normal;
12
- font-variant: normal;
13
- text-transform: none;
14
- line-height: 1;
15
- -webkit-font-smoothing: antialiased;
16
- -moz-osx-font-smoothing: grayscale;
17
- }
18
- .qlwapp-whatsapp-icon:before {
19
- content: "\e900";
20
- }
21
- #qlwapp {
22
- pointer-events: none;
23
- box-sizing: border-box;
24
- /*&.qlwapp-middle-left {
25
- &.qlwapp-button {
26
- .qlwapp-developer,
27
- .qlwapp-toggle {
28
- margin-left: -48px;
29
- padding-left: 60px;
30
- }
31
- }
32
- }
33
-
34
- &.qlwapp-middle-right {
35
- &.qlwapp-button {
36
- .qlwapp-developer,
37
- .qlwapp-toggle {
38
- margin-right: -48px;
39
- padding-right: 60px;
40
- }
41
-
42
- }
43
- }
44
-
45
- &.qlwapp-bottom-left {
46
- &.qlwapp-bubble,
47
- &.qlwapp-button {
48
- .qlwapp-developer,
49
- .qlwapp-toggle {
50
- margin-left: 20px;
51
- }
52
- }
53
-
54
- &.qlwapp-bubble {
55
- .qlwapp-toggle {
56
- .qlwapp-text {
57
- right: auto;
58
- left: 60px;
59
- }
60
- }
61
- }
62
-
63
- .qlwapp-box {
64
- &:before {
65
- right: auto;
66
- left: 20px;
67
- }
68
- }
69
-
70
- }
71
-
72
- &.qlwapp-bottom-right {
73
- &.qlwapp-bubble,
74
- &.qlwapp-button {
75
-
76
- .qlwapp-developer,
77
- .qlwapp-toggle {
78
- margin-right: 20px;
79
- }
80
- }
81
- }*/
82
- }
83
- @media (min-width: 430px) {
84
- #qlwapp {
85
- width: 430px;
86
- }
87
- }
88
- #qlwapp * {
89
- box-sizing: border-box;
90
- }
91
- #qlwapp.qlwapp-js-ready {
92
- display: block;
93
- }
94
- #qlwapp.qlwapp-hide,
95
- #qlwapp.qlwapp-desktop.mobile,
96
- #qlwapp.qlwapp-mobile.desktop {
97
- display: none;
98
- }
99
- #qlwapp .qlwapp-readonly,
100
- #qlwapp.qlwapp-readonly {
101
- pointer-events: none!important;
102
- opacity: 0.5!important;
103
- }
104
- #qlwapp .qlwapp-disabled,
105
- #qlwapp.qlwapp-disabled {
106
- display: none;
107
- visibility: hidden;
108
- }
109
- #qlwapp.qlwapp-middle-left,
110
- #qlwapp.qlwapp-bottom-left,
111
- #qlwapp.qlwapp-middle-right,
112
- #qlwapp.qlwapp-bottom-right {
113
- position: fixed;
114
- z-index: 9999999;
115
- }
116
- #qlwapp.qlwapp-middle-left,
117
- #qlwapp.qlwapp-bottom-left {
118
- right: auto;
119
- left: 0;
120
- }
121
- #qlwapp.qlwapp-middle-left .qlwapp-toggle .qlwapp-time,
122
- #qlwapp.qlwapp-bottom-left .qlwapp-toggle .qlwapp-time {
123
- left: 0;
124
- right: auto;
125
- }
126
- #qlwapp.qlwapp-middle-left.qlwapp-bubble .qlwapp-developer,
127
- #qlwapp.qlwapp-bottom-left.qlwapp-bubble .qlwapp-developer,
128
- #qlwapp.qlwapp-middle-left.qlwapp-button .qlwapp-developer,
129
- #qlwapp.qlwapp-bottom-left.qlwapp-button .qlwapp-developer,
130
- #qlwapp.qlwapp-middle-left.qlwapp-bubble .qlwapp-toggle,
131
- #qlwapp.qlwapp-bottom-left.qlwapp-bubble .qlwapp-toggle,
132
- #qlwapp.qlwapp-middle-left.qlwapp-button .qlwapp-toggle,
133
- #qlwapp.qlwapp-bottom-left.qlwapp-button .qlwapp-toggle {
134
- margin-left: 20px;
135
- }
136
- #qlwapp.qlwapp-middle-left.qlwapp-bubble .qlwapp-toggle .qlwapp-text,
137
- #qlwapp.qlwapp-bottom-left.qlwapp-bubble .qlwapp-toggle .qlwapp-text {
138
- right: auto;
139
- left: 60px;
140
- }
141
- #qlwapp.qlwapp-middle-left .qlwapp-box:before,
142
- #qlwapp.qlwapp-bottom-left .qlwapp-box:before {
143
- right: auto;
144
- left: 20px;
145
- }
146
- #qlwapp.qlwapp-middle-right,
147
- #qlwapp.qlwapp-bottom-right {
148
- left: auto;
149
- right: 0;
150
- }
151
- #qlwapp.qlwapp-middle-right .qlwapp-toggle .qlwapp-time,
152
- #qlwapp.qlwapp-bottom-right .qlwapp-toggle .qlwapp-time {
153
- left: auto;
154
- right: 0;
155
- }
156
- #qlwapp.qlwapp-middle-right.qlwapp-bubble .qlwapp-developer,
157
- #qlwapp.qlwapp-bottom-right.qlwapp-bubble .qlwapp-developer,
158
- #qlwapp.qlwapp-middle-right.qlwapp-button .qlwapp-developer,
159
- #qlwapp.qlwapp-bottom-right.qlwapp-button .qlwapp-developer,
160
- #qlwapp.qlwapp-middle-right.qlwapp-bubble .qlwapp-toggle,
161
- #qlwapp.qlwapp-bottom-right.qlwapp-bubble .qlwapp-toggle,
162
- #qlwapp.qlwapp-middle-right.qlwapp-button .qlwapp-toggle,
163
- #qlwapp.qlwapp-bottom-right.qlwapp-button .qlwapp-toggle {
164
- margin-right: 20px;
165
- }
166
- #qlwapp.qlwapp-middle-left,
167
- #qlwapp.qlwapp-middle-right {
168
- top: 40%;
169
- bottom: auto;
170
- }
171
- #qlwapp.qlwapp-middle-left .qlwapp-developer,
172
- #qlwapp.qlwapp-middle-right .qlwapp-developer {
173
- padding: 0 24px;
174
- }
175
- #qlwapp.qlwapp-middle-left.qlwapp-button .qlwapp-developer,
176
- #qlwapp.qlwapp-middle-left.qlwapp-button .qlwapp-toggle {
177
- margin-left: -48px;
178
- padding-left: 60px;
179
- }
180
- #qlwapp.qlwapp-middle-right.qlwapp-button .qlwapp-developer,
181
- #qlwapp.qlwapp-middle-right.qlwapp-button .qlwapp-toggle {
182
- margin-right: -48px;
183
- padding-right: 60px;
184
- }
185
- #qlwapp.qlwapp-bottom-left,
186
- #qlwapp.qlwapp-bottom-right {
187
- top: auto;
188
- bottom: 0;
189
- }
190
- #qlwapp.qlwapp-rounded.qlwapp-bubble .qlwapp-toggle {
191
- border-radius: 50%;
192
- }
193
- #qlwapp.qlwapp-rounded.qlwapp-button .qlwapp-toggle {
194
- border-radius: 50px;
195
- }
196
- @media (min-width: 430px) {
197
- #qlwapp.qlwapp-rounded .qlwapp-box {
198
- border-radius: 8px;
199
- }
200
- }
201
- #qlwapp.qlwapp-rounded .qlwapp-box .qlwapp-user,
202
- #qlwapp.qlwapp-rounded .qlwapp-box .qlwapp-message {
203
- border-radius: 4px;
204
- }
205
- #qlwapp p:last-child {
206
- margin: 0;
207
- }
208
- #qlwapp time {
209
- opacity: 0.8;
210
- font-style: italic;
211
- font-size: 10px;
212
- }
213
- #qlwapp .qlwapp-container {
214
- display: flex;
215
- flex-direction: column;
216
- }
217
- #qlwapp .qlwapp-clearfix:before,
218
- #qlwapp .qlwapp-clearfix:after {
219
- content: '';
220
- display: block;
221
- clear: both;
222
- }
223
- #qlwapp .qlwapp-previous,
224
- #qlwapp .qlwapp-close {
225
- display: block;
226
- opacity: 0.8;
227
- font-style: unset;
228
- font-size: 24px;
229
- font-weight: bold;
230
- width: 24px;
231
- height: 24px;
232
- cursor: pointer;
233
- text-align: center;
234
- line-height: 24px;
235
- z-index: 1;
236
- }
237
- #qlwapp .qlwapp-previous {
238
- width: 16px;
239
- height: 36px;
240
- cursor: pointer;
241
- text-align: center;
242
- line-height: 36px;
243
- margin-right: auto;
244
- }
245
- #qlwapp .qlwapp-developer {
246
- font-size: 8px;
247
- top: -20px;
248
- position: relative;
249
- }
250
- #qlwapp .qlwapp-developer,
251
- #qlwapp .qlwapp-toggle {
252
- display: inline-flex;
253
- align-items: center;
254
- justify-content: center;
255
- margin-left: auto;
256
- margin-right: auto;
257
- }
258
- #qlwapp .qlwapp-toggle {
259
- pointer-events: all;
260
- cursor: pointer;
261
- box-shadow: 0 1px 6px 0 rgba(0, 0, 0, 0.06), 0 2px 32px 0 rgba(0, 0, 0, 0.16);
262
- margin-top: 24px;
263
- margin-bottom: 24px;
264
- position: relative;
265
- text-decoration: none;
266
- }
267
- #qlwapp .qlwapp-toggle,
268
- #qlwapp .qlwapp-toggle:active,
269
- #qlwapp .qlwapp-toggle:focus,
270
- #qlwapp .qlwapp-toggle:hover {
271
- outline: none;
272
- text-decoration: none;
273
- }
274
- #qlwapp .qlwapp-toggle .qlwapp-time {
275
- position: absolute;
276
- bottom: -2em;
277
- color: initial;
278
- font-size: 10px;
279
- display: inline-block;
280
- top: auto;
281
- width: 120px;
282
- }
283
- #qlwapp .qlwapp-avatar .qlwapp-avatar-container {
284
- overflow: hidden;
285
- border-radius: 50%;
286
- width: inherit;
287
- height: inherit;
288
- }
289
- #qlwapp .qlwapp-avatar .qlwapp-avatar-container img {
290
- width: 100%;
291
- height: auto;
292
- }
293
- #qlwapp.qlwapp-bubble .qlwapp-toggle {
294
- width: 60px;
295
- height: 60px;
296
- }
297
- #qlwapp.qlwapp-bubble .qlwapp-toggle .qlwapp-icon,
298
- #qlwapp.qlwapp-bubble .qlwapp-toggle .qlwapp-close {
299
- position: absolute;
300
- display: block;
301
- pointer-events: none;
302
- font-size: 24px;
303
- }
304
- #qlwapp.qlwapp-bubble .qlwapp-toggle .qlwapp-text {
305
- position: absolute;
306
- right: 60px;
307
- height: 60px;
308
- margin: 0 24px;
309
- display: flex;
310
- align-items: center;
311
- justify-content: flex-end;
312
- font-weight: bold;
313
- white-space: pre;
314
- }
315
- #qlwapp.qlwapp-button .qlwapp-toggle {
316
- height: 40px;
317
- white-space: nowrap;
318
- padding: 12px 24px;
319
- }
320
- #qlwapp.qlwapp-button .qlwapp-toggle .qlwapp-icon {
321
- margin: 0 12px 0 0;
322
- }
323
- #qlwapp.qlwapp-button .qlwapp-toggle .qlwapp-close {
324
- display: none;
325
- }
326
- #qlwapp .qlwapp-box {
327
- pointer-events: all;
328
- padding-bottom: 56px;
329
- position: fixed;
330
- top: auto;
331
- bottom: 0;
332
- left: 0;
333
- right: 0;
334
- z-index: 99999;
335
- box-shadow: 0px 5px 40px 5px rgba(0, 0, 0, 0.5);
336
- }
337
- @media (min-width: 430px) {
338
- #qlwapp .qlwapp-box {
339
- position: relative;
340
- top: auto;
341
- bottom: auto;
342
- left: auto;
343
- right: auto;
344
- box-shadow: 0 8px 25px -5px rgba(45, 62, 79, 0.15);
345
- margin-top: 24px;
346
- margin-left: 24px;
347
- margin-right: 24px;
348
- margin-bottom: 12px;
349
- }
350
- #qlwapp .qlwapp-box:before {
351
- content: '';
352
- position: absolute;
353
- bottom: -6px;
354
- right: 24px;
355
- width: 13px;
356
- height: 13px;
357
- transform: rotate(45deg);
358
- }
359
- #qlwapp .qlwapp-box .qlwapp-header {
360
- border-top-left-radius: inherit;
361
- border-top-right-radius: inherit;
362
- }
363
- #qlwapp .qlwapp-box .qlwapp-footer,
364
- #qlwapp .qlwapp-box .qlwapp-response {
365
- border-bottom-left-radius: inherit;
366
- border-bottom-right-radius: inherit;
367
- }
368
- }
369
- #qlwapp .qlwapp-box .qlwapp-header {
370
- position: relative;
371
- overflow: hidden;
372
- }
373
- #qlwapp .qlwapp-box .qlwapp-header:before {
374
- content: '';
375
- position: absolute;
376
- top: 0;
377
- bottom: 0;
378
- left: 0;
379
- right: 0;
380
- background: linear-gradient(135deg, transparent 0%, rgba(0, 0, 0, 0.3) 100%);
381
- }
382
- #qlwapp .qlwapp-box .qlwapp-header .qlwapp-close {
383
- position: absolute;
384
- top: 12px;
385
- right: 12px;
386
- }
387
- @media (min-width: 430px) {
388
- #qlwapp .qlwapp-box .qlwapp-header .qlwapp-close {
389
- position: absolute;
390
- top: 7px;
391
- right: 7px;
392
- font-size: 16px;
393
- }
394
- }
395
- #qlwapp .qlwapp-box .qlwapp-header .qlwapp-description {
396
- position: relative;
397
- }
398
- #qlwapp .qlwapp-box .qlwapp-description,
399
- #qlwapp .qlwapp-box .qlwapp-contact {
400
- padding: 24px 36px;
401
- height: 100%;
402
- }
403
- #qlwapp .qlwapp-box .qlwapp-description p,
404
- #qlwapp .qlwapp-box .qlwapp-description h3 {
405
- color: inherit;
406
- font-family: inherit;
407
- margin: 0;
408
- }
409
- #qlwapp .qlwapp-box .qlwapp-description h3 {
410
- margin: 0 0 0.25em 0;
411
- }
412
- #qlwapp .qlwapp-box .qlwapp-contact {
413
- display: flex;
414
- justify-content: flex-end;
415
- align-items: center;
416
- text-align: right;
417
- }
418
- #qlwapp .qlwapp-box .qlwapp-contact .qlwapp-previous {
419
- position: relative;
420
- left: -16px;
421
- }
422
- #qlwapp .qlwapp-box .qlwapp-contact .qlwapp-previous > i {
423
- line-height: 36px;
424
- }
425
- #qlwapp .qlwapp-box .qlwapp-contact .qlwapp-avatar {
426
- width: 42px;
427
- height: 42px;
428
- }
429
- #qlwapp .qlwapp-box .qlwapp-contact .qlwapp-label,
430
- #qlwapp .qlwapp-box .qlwapp-contact .qlwapp-name {
431
- color: inherit;
432
- }
433
- #qlwapp .qlwapp-box .qlwapp-account {
434
- color: inherit;
435
- padding: 16px 36px;
436
- display: flex;
437
- align-items: center;
438
- overflow: hidden;
439
- position: relative;
440
- cursor: pointer;
441
- width: 100%;
442
- text-decoration: none;
443
- }
444
- #qlwapp .qlwapp-box .qlwapp-account:only-of-type {
445
- padding-top: 36px;
446
- padding-bottom: 36px;
447
- }
448
- #qlwapp .qlwapp-box .qlwapp-info {
449
- padding: 0 16px;
450
- }
451
- #qlwapp .qlwapp-box .qlwapp-avatar {
452
- position: relative;
453
- width: 62px;
454
- height: 62px;
455
- }
456
- #qlwapp .qlwapp-box .qlwapp-avatar:after {
457
- content: '';
458
- display: block;
459
- width: 15px;
460
- height: 15px;
461
- position: absolute;
462
- bottom: 2px;
463
- right: 2px;
464
- background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAXgklEQVR4Ad2aCXhV9Zn/scv/P/N02mfmmc50anWqdUHUouwLYSFhCQlhIYEkLEnYF1SkoriXKkWxLo+2OlintopOq9UiewJJSEJCErKHsBAWCIshYSFAWO5y7zvf833uub78nnNvEhaxc9oP7295f+/vPd/znuXmsZ2I3Eh+AO4FkWAe+D3IAlWgDtSD4+AI2AMKwQrwEkgC3cGtV7y/X2j9bAdsG7kRoj0ApoOPwWHglqs7zoGt4AUwCvzw/6KAt4JnQC7wyvU9joAPQRz47t+7gBHgU3BKbsyxAzwGbvl7E7ArWCffnOMkWAD++Zsu4O3gXeCTb+axB6R8EwW8CTwK6uUqDq/fJxd9F6XJc0aOXqqXAxfqZN+FA3Lo4hFpcB2XZm+zuP1uuQZHOuj0TRHwDrBeruA47joh287tkM+OrZKlB96UZ2oXyy92PSNzdyyQ6TXzZPK2hyRt2xyZuu1hmbF9vjy8c6Es3L1IFu1dKv916H3JOVkAkQ/JBe9FuYLjLHjkRgs4EjQA8avM/MqaxzFXg2SeyJGl+9+kSBOrZ0pS1VQZXzWd7UnVsySlerakQrg0Mtdqg9kYn0WfCVUzrDVgGn3mQ/TlRz+R8jNV4vK1uUI/Av9yIwScBnxKNmK3TPV2Ne+RPxz+iKKNq5wsyTh5CGWLdBXMoaiJlVMkqXKqPF37omw4kS1nPefMS6p7Zj8f/9z5dQq4lBubledQc7XNe+X1g++wssbhJCdVzZLU6jkB5gbbaQYcUz5psIRt1d/GMViuYSWPrUiTeTufki8a1soF3wXhYSjmB/gH2ANyEP92u94C3gSW+UUlYBvjaHA1yjuH/sAqG4uKg7XFUszWVo8bY87tFFpHIOQMCvnozqcl92SBUX5+ctn//IA/G6XP9RTwbaoVwA+YiKHippObZWbNfEnACUysmikpVbMpYAgLwoxXKapb2VYkV06DkJPllf1vybFLDepp46cJikc43gi6ot+uFbRJwBe5SaiNRfgJ8tuD71nCIfHpuF1nK2YpZpuWmH3tn6L8w8d0JqE8VWbV/EK2NpWrYgzmT6s4Au66lgIm6w1MrKMR32mL9iyVMWUpMrFyZjDxiQr2Kwnb2sfsc8zyNcbVfPg5rDV9Eivwtq+cISsb7K8uJZzQakpgfgjahaM14g2A44Vw4u09v1/m1Dwu8bjKEI9MoNVgzGjThm2HjxFunOvNOBA1uWK6dZH5ReDz+4IiivP5rQA3XU0F/iucDoYTb9e5WplS/bAklKUFkp3BqwxrMBPjnP/Kr4JW+ygwb/Rpnf3NuXB+zG9U6UR5p+59LWIonrwaAf8cTrz95+soXnx5GsSY0QLTJTnQtu3Vrmk5jukPKu32dBkJEd879KHw8IcU0QV6XomAY8OJd9rdJA/VLJTRpSl2Qn93JFVMkxGlE+Tz+lUtVWGRz+f7DmhnEqo0fwB2OYrnF/6g//We17l5cjkSKZ8mpAKwD9g25zim0P7GOgOHtQpjjLGIsbexF8bGlU3B42eyFJwqbknE2X4IZhBSwGfDVd8fDn0ssVuTJREJtMSYslSJ2zpe4ooJiS9NY/KJ14WppDV+OseUyjly9GJ9OBEbwA9NrZzE+xE4HUq8sqYq3rZjy6YwiXEWZZrgGMWaV/GUfH54tWyoz5aM+ixZcWStPFz5pIwumQSfaSHXJhL2ac15WO0La7a1jzOJNvCJKxkvz+9+WTx+TzgRf+ODRhonAX8TSrxmz3mZu+0JGVkykaU/1gTJ2O3hRcny2q635bzngphHw4VGSSmZI2NKU+lrMs45bqsZ12ofWNWO3Zok6xo2BgX0EVsDtl3gznAC3gwC33w+U0D57MtVMqw4UcaW4rkBxpZODrQB2gSJxBQlyYvbXxUJrHO6GO/v+5h+WEvwHGI8xmWf7QBsG33urfY3maxQa/jMU37qPEbhrphS+YiccZ/96q3sA5cL+Wo4ARdiQUB5n/i42CfWccp1WlIq5nKTeGwIgknp/oitE2Va6Tw5danJUTxbwMPNR2VMYSqqMI3rHClR8Q0SuM5uE91X88CcM9vKDitKlA8Pf6Jy90lAE1vML9H+vpOA34bDbryahahF1vHBoU9kaNE4iS9JkzEgaEsvb0cXjJPs+rywbzT76i7Z8QarkDHsmGb8UJS2zneM9jVRuduMRAFMKp8jDZeOC46ADtQEWthF5Z/m9BKJ8mEWgtHZRvysPkmreEhGFE/AJqlBRm9VbRDLl8bT4va6TQFNOF94vISCc31o7Hljb2D2wRgQZr05xzWm7+DCBPn06ErmqAvKbiP/dCcBl9HBwDrWN2Qx6ChsRphsCmwKrN3GxlsS+GzT4oUT0OV1ydzyhRJblMz1Ohas2kNh7w/sOW11bnrchHspH733cBTClMp50uQ+wwIyBQTWe6K9FvA7oMoQj7ev1++VhdtfkOiixODmI4NM0m2Jzh8nhY0l4QU0RFy+/1OJyh9tnOCkr/YpDozBcj9iCsJ5Iz9jPdfpPuPZeyk4zoLJPb4lWIUmyH+yFrCHD4dT9dWc2YkHaxJu34kASQC0A5awPdy6vQvT5Mvz9W0SsPHCCUkumsHbH3EUdmxjLzVnjjn7me2W18NSwFf2/DacgH/SAs4KcfvyWRBVMIaixRUBWA3GSQxuw+TiGXLGdbZlAQ0Rf7v7v1GF8cI9uI/C2Ic+GuVn2xFFpo+9Dtbw174j6EfLx0pi6XR8TZy2b2OTo8j/+7aA7zncvnz7PF6zyHq2YbMJZHjAmgwrTJLEounSdOlMmwVce2SjRG4ebceGnch2sK+IM+ZUXoafczu8n+6Pl+jCRKlu2h6qCn3I/16I5/t/aO8yJql648XjEr91MsUZXjiBIDDseIm1LIAFEySmMFli88fL/rMH2yzg0h1vSWQ+BQzGB4wbWwjQJvZ+dh6Yty19uS5gbfS4BdfYbe7BGPYa2GCsgcjpo0OfmQIq/DHtUGk/QafZ6fbddXaPRG9JgoDJEkO4AduEbfY5PiB3pKw/mtmmZ2BRY5kM25zIi6Tjxqr47Ks50w97G7loP2LnreI5Wu2DizpGntq++PJb2Kut/zkI6Otov0C8hoCZDbkyIH+UDNvCk4Ml7NNqMN8vb6S8tvOdVn/G1J07LPEFk/GMjed6jblPjLEXrTlXaFi2DR9zXBWIEZN5zah4TPhdqz5jlJCfWxXYlx2FLeC7Bz6QvnkjhFUIYMMyqCBBJhXNkXPu5nAicu7kpVMypfhR6b95lI6t2q2nTesLwsfQDMpPkKSSmXLWfU4Ekni9XhSZhY8WOhW2w4siwcfBAErA53csZVUNLUhskWjLbkmUPpuGy4Yvc0IKKH7h8cK2V6VXTgwTbTm+sU/r0bmBtq0bnD+Wz078bmfeFA4iUi9aX3U7/DOXyhIlIBbMr36OAg4pGKdIFNp8NabonzdKZpc8zosRUkQcy2o/kF6bYpioETssat+2+3Gs9UBAfl7VNO0UHNRHA0FrLQGfMif8gc+YuZVPUkAECjDOuW0QkT1cNtXnhxXw9KUmSSyYTsGHhIxNa2LMh/PlvNlv5Xr2ef4lJyu0gJoDloC/NCcwRjur4gnpmztCBiFQkM12O4GgD9i2fbhpcsFMOe8+H1bEgoZiiB0nUZvjsc6Iq2KiDfTeHDPyUvPKEq43c+a4eU5qnH2ef8Hx4lACHrIEfNacsF8msyFgRK51ggkgntZsm1AM2J7ZMbJ42+vCwx9axLd2vifds4aGi6dI0O1WM6hVfvGOY31y4yDg1lAC1rXDfTzfSUCxbuGKJ6V3znCJzIsPDzYyxwZuHiM9MofJ2sOZYV8oHp9Hnq74tXTPjmYc4BgTfWPe9B0TPi+2w2DGBQMRMwIVWHaqOpSA+ywBU9kx4Euk6nnpiQc9Al0RETlxEpMzXuovNIa9lc+6zknqloctEbGOiX8j6J87mqLWnt1HPRx02mHdwkMcBcSxZOeb0g0nNQCBguSZ7TAgiW64PReULWrxrXy0uZ7PTcsf64BTPG1J4EKNkK6ZQ3ix++eOCsyNcfLnOG146NcXcWMLJsrxiyfs70CTUlSgt5snhID/U/c36ZI1RPrnjGJiuCLAbGsLbF811mXjYFm2+4MWP67rzx+TyYXzpPPGQdJPxe5H60yvTbEyKi9Vfl+7XB4ueUr6ZA6XrrgIENX24XqdO2I7526M98Y3bWLRDLwML4jf679cI4/H+h7c2A7/3IkBl9eDQaAFLD5RzpdB35yR0g/CEKudq9pAt4HyJzyZ7huiZcPRnJZE5K+YZytekq4bhlAcey9zP8AT7Js5UqpPbg++rGpO7cL6lyUyO1464UL02RSn1lo2dDyT7tnDZHrpY4GXqlc8wPhaecsS8Afo1CtlYT0s2f1n66yrwST6bqIwNuiPMPq0BkEfXoj+maOkuLGsJRF5rKhbJ0OyE+XBjVG8AEZsjnXKGCSfHVwdjKePA2cPySs1v5Oo7AR5YEMkxTZyb5HOmYPlJTzGcFA8j8cDLGtXoG9iO4hmkWFNKvghfc7VLKO3TJYeWcMkApv2ARFhCDvP59RQiDJO9jTtCy8itRD+aeyx0kWsRlQTRIgLxuuYMVBerHb8TGJfC/nStrdkYFY8hVQxWqQLnquZx/ICAlIX8SqNIGA3W8BnDQGpsnW8tOMtqwpYhSSbVnqzrdgUihGc7w3QxvNtiMTlTGrV3w3tY0tDCV5Ev5KeG2IpQof0vjK/5DlxeV2tjQEh61iRvfGMRDUyfxLifHplD7fuKl4A8YkpHtreZgh4sy3gGE4YWMf6L7OYNDYCw024kXM/znkNxh5ENcXmTJTdTXvDCmBW066mPfJi1et8RuLTx1zbGiEh/PPcX+fWK5CrPpfOqL60rY+Iy+PiM9DUBprlQMCbbAF/jMGThhPfPA3nj8vQvCTplhktvbKszWKlJ+iVBdgHsCY9Lew5+iswbp1EVFaCFDWUqdswrJDmoeZbL+JzFS/j9o9kTgGYZ8/g+TA/uT9jgHxw4FPBoTXRAi7gfx+IBsHgqlBV+NquZXIfAmKTID2C7Ri0ae2+QvsDY6wTPm+6pw+T5Xv/qkW5LtgXYGbhAtxRUcKc7NwNumcOYwHU4llt374mEK8fBUTHZr6DIzcuO1HFZxcCgxjSQ1kNx7JAK/26bBwq968bIIur3uD3lqrGa4r9IojPncoLp3PSICdW3zPVLzEPPOucqq8G4v1/U8AfgSbTGQH4Rp5dulDuSx9AEW26KfSYwsnfoR0tHdb1lYTcaVLYUHpdqtE6tuMbsWvGUOmK/fT+mm4bo1Ghg6T4eDkFDHH7/sYSzxCQrAhVhTnHtuDZESVdUTHYRMFNMR5NIdhW47SGPzHHkfzP0wfKg+ui5PmKV2TX6T2C45pUpH08Xb4EF6qfnScxc7s3vZ/MLXuKRaOrT3ERwt0TFNDtcWv6W05uhyoUBJxZ8jg26E+Bum4AG4fCAvRxK2pL9DzbRp/WZgMtHxXt10VIj/QYWVT5quw8XSuijysU7+O9n/NR0Rn76r01na3vzQ2DpeREpfHscwutm9W3geIFBXR7NN+B41YtYKDNgJUna+TBjChu0gVCdA6Atok5H8Z/iNAacw/iNrp7bR/plh4tqfmPyKq6DOvD3hBTWhKOf8R4rQYvwbX9GVPvbXI3LtzCysXmrWu+PAZdJiAEMnAPBlSbGLfyku1vyj14XuFqkU4ZAcs+yNDWxHmuk2EVuGCDuN89a/rK4MxEWVi6WPKOFcmx840S7nDjhZFbXyhJebPknrV9KZ4ZW4HHR6REZI2UunNHWCy2Bm63G+D8YVF9+RDtu0YFuk2+BTIAF1mBAm0G3nfmAK/WA+lREG+wwRBagzb6QbQQ8/enD2RVdljbT3qnx8m0LY/Jst0fyhd16bLxaJ5kgpWo1Hd3L5exuTOkw5p+EL9fS3vyIt21ro98fmit4FDC6fNn9fWwhVMvEa8To4wAgBUouccK5d71/SHgIGw8WIhq6/4DRI0TY10628Z605dtOxbsIFZMe1TWHWt6yV2r+8jdqyMs2L5zdS++LODnvK+R88/W9MSt++vAc0+Jp4RE9S03xQt8SPs0xOP1PsKFBtbxdu2fmDQEbD0ZrfGLor1qMtq0D88lrfhRaXadF5/HZ54zgagnIdbtIQT0aggWpJtB8CbmCyVpy2zcRhHSEYl8bay/5jEp3p1re8vgTUlSbz1PfeIkHvF5ffN9Pn87BxwF/A+8ts+ZQcQrcvDsYbwAhsp9+Bz4+fooEKmsE1EGkaQj0OuJ2Q+/1tw/9LzdTw+0AxfkzjW9pW/maNnZVBtWPOixEZX2LdCutRU40CEQN8k4miN3YOP71w8ETIgWOPbhp+cI2+aYOW6sDUf4HJzj3766pwzIipftp3eL+EOLhzuxESL91BRN43T7vhlKwAXlL8htq3rgg3QgqpDYbSRm9INtwDlgrlNrTJz8ibkPrQn9HPYdID9d1U1G5KXxr+0tiOeCQLEUqg0Cfg8LD5rBfHj+XXJdkmE5E1n6djKaezlGq+ZhnX2B3Ufb8MccUHOGv7ku1Lxazzf2rRDvF+W/kjOXzoa7bQnESaFIbRTwPiz2AeP558dv0718ltyDbzCe4FoSbHcA7TH3M3xC3LqyG650d/aVT8usI8aa/i2vUe0OwBzHXcM+viD4LBePP6x4+BJ5gQJdgYAzHQKy1N+tXS63rOwCofoHuXtNhPxsVU8I1lVuh+24fpDEb54uv9v9R3l5++9we0VSzPZr+lJgrPnauAfwYiK3sfkzpexEdfDPU+Erz/ua9d+Nt1pABAyCz5QNbrfLUcCHSp6RW77oIrdBKFgm1jl9qMTlpspzVa9Idn2+7D9TF/QH/IvKo2W/pIA/wRp86PLEUMW0ZA2wx9g2oa/2AdYY0HMUjmOsuFuQ36DsJPn04Gq55HaFv2Vdwdt2iSVe2wRUzz8EOeJymc8/v9Q3N8iD64fwio7OmypPVi6RPx/4gr8bXUiOgvmAF/9XX+/oc7zkeJXMK32OFXnzik5y28oeFBVC2KDfMtqXVrXvXN0neGGH56bIH/d9Yn0cq6pz2UIRV1A8jOOAGPMpXhsF1D/fohDHr4MDbO5jZX2w769SeXJ78I1M0bx+9btRV66L4GJoIVmRy2o/xAmmyk9Xdpebv+jMW/yO1b3lLuunGERtHx763LUmgoLhsYHK7sw4D6wfLE9ULJb0o5vkgusi8/NBOJwLoHi2WGrMZeV/3O/zRVO4KxPQY7PUhYAUD9Y+eYyhqrzBCqNgLpUELPtKsMuSpQW2kH6Ri+6Lkn+sWN7e/SeZtOUR6Zo+jJVEUVd0lh+jSq1b/icruqCqutKqcTx38SWwNlIis8bK05Uvy19xmx44c8i+E5gv8lGVRrGCeTEngHMu8vt9D1C0qxUQwmzUAtptWjsBigSUpQ/9VLKEcYyLYV8Qz1dVHHhE1JzcJdlf5sv7e/8iL1a/IY+W/lJmFi+UGcVPyKytT8rCiiXy2o535W9162RrY4XsbToo5y41Mw5BHO5hiMZ+IAcSuGXxyHoVQn3PEuHqBPR6LG5DzHO2MIRtbKhE4Jj24Rx9QqP8GYcE1/Ck/R6rbMQWVT1TFT5j3GNXmo6n28754lGVCYH6UCRw1QJ6UX0gOXiyenN90u6WROLfzBpxZT9GRX/kwkVuQVBTTIW+5YBDDI61AeS03fo41iJdMwFx4m+0IRldPedRvVsQaIHP5++Gjf/N3hxCdkXSf4GfG8iNgcLtQT5Tkdc/UZxrLSA2+EcIUdtKwZrgXw5x3sbiGGx0e6jN4UML7sOaV9Ue1x3sdQZ7pmPvkVq46yVgB2zqC5GIF/PFEOP3cJ6MwLeYG7UsINo+tv8BxKJi30HMkusg2jHE/Rv2eAI5/KfO53oLOMcQ7ABO/l1MpiFQRzPwVQho0gU+qdhvKcjE3odxt593upgGrsCdsA3rl4P5iDUc+/67zuHrFPB9JLE6INj94Hs60HUU0OT74DbQEfQE/RAjMsBA9CNAZ9Ae/Ah829z3Rgj4v+tgYwWlsH1vAAAAAElFTkSuQmCC);
465
- background-color: transparent;
466
- background-repeat: no-repeat;
467
- background-position: center center;
468
- background-size: cover;
469
- z-index: 4;
470
- }
471
- #qlwapp .qlwapp-box .qlwapp-time,
472
- #qlwapp .qlwapp-box .qlwapp-label,
473
- #qlwapp .qlwapp-box .qlwapp-offline-text {
474
- font-size: 12px;
475
- line-height: 1.5em;
476
- opacity: 0.6;
477
- display: block;
478
- }
479
- #qlwapp .qlwapp-box .qlwapp-time {
480
- font-size: 11px;
481
- font-style: italic;
482
- }
483
- #qlwapp .qlwapp-box .qlwapp-name {
484
- display: block;
485
- font-weight: bold;
486
- line-height: 1.5em;
487
- }
488
- #qlwapp .qlwapp-box .qlwapp-body {
489
- overflow-x: hidden;
490
- overflow-y: auto;
491
- }
492
- #qlwapp .qlwapp-box .qlwapp-body .qlwapp-carousel {
493
- max-height: 470px;
494
- min-height: 134px;
495
- }
496
- #qlwapp .qlwapp-box .qlwapp-chat {
497
- display: flex;
498
- flex-direction: column;
499
- overflow: hidden;
500
- }
501
- #qlwapp .qlwapp-box .qlwapp-user,
502
- #qlwapp .qlwapp-box .qlwapp-message {
503
- padding: 16px 24px;
504
- margin: 36px;
505
- position: relative;
506
- word-wrap: break-word;
507
- width: calc(100% - 36px*2);
508
- }
509
- #qlwapp .qlwapp-box .qlwapp-user:before,
510
- #qlwapp .qlwapp-box .qlwapp-message:before {
511
- content: '';
512
- position: absolute;
513
- top: -6px;
514
- right: 24px;
515
- width: 13px;
516
- height: 13px;
517
- transform: rotate(45deg);
518
- }
519
- #qlwapp .qlwapp-box .qlwapp-user {
520
- width: auto;
521
- max-width: 75%;
522
- align-self: flex-start;
523
- justify-self: flex-end;
524
- margin-top: 0;
525
- }
526
- #qlwapp .qlwapp-box .qlwapp-user:before {
527
- top: auto;
528
- bottom: -6px;
529
- left: 24px;
530
- }
531
- #qlwapp .qlwapp-box .qlwapp-padding {
532
- padding-bottom: 56px;
533
- }
534
- #qlwapp .qlwapp-box .qlwapp-footer,
535
- #qlwapp .qlwapp-box .qlwapp-response {
536
- position: absolute;
537
- bottom: 0;
538
- left: 0;
539
- right: 0;
540
- height: auto;
541
- width: 100%;
542
- }
543
- #qlwapp .qlwapp-box .qlwapp-footer,
544
- #qlwapp .qlwapp-box .qlwapp-response,
545
- #qlwapp .qlwapp-box .qlwapp-footer pre,
546
- #qlwapp .qlwapp-box .qlwapp-response pre,
547
- #qlwapp .qlwapp-box .qlwapp-footer textarea,
548
- #qlwapp .qlwapp-box .qlwapp-response textarea {
549
- max-height: 160px;
550
- }
551
- #qlwapp .qlwapp-box .qlwapp-footer pre,
552
- #qlwapp .qlwapp-box .qlwapp-response pre,
553
- #qlwapp .qlwapp-box .qlwapp-footer textarea,
554
- #qlwapp .qlwapp-box .qlwapp-response textarea {
555
- color: inherit;
556
- background-color: inherit;
557
- }
558
- #qlwapp .qlwapp-box .qlwapp-footer:before,
559
- #qlwapp .qlwapp-box .qlwapp-response:before {
560
- pointer-events: none;
561
- position: absolute;
562
- content: '';
563
- height: 59px;
564
- top: -59px;
565
- background-image: linear-gradient(transparent, rgba(0, 0, 0, 0.05));
566
- left: 0;
567
- right: 0;
568
- }
569
- #qlwapp .qlwapp-box .qlwapp-footer {
570
- min-height: 56px;
571
- display: flex;
572
- align-items: center;
573
- justify-content: center;
574
- text-align: center;
575
- font-size: 12px;
576
- padding: 12px 36px;
577
- }
578
- #qlwapp .qlwapp-box .qlwapp-footer p {
579
- padding: 0;
580
- font-size: inherit;
581
- }
582
- #qlwapp .qlwapp-box .qlwapp-footer p:last-child {
583
- margin-bottom: 0;
584
- }
585
- #qlwapp .qlwapp-box .qlwapp-response,
586
- #qlwapp .qlwapp-box .qlwapp-response pre,
587
- #qlwapp .qlwapp-box .qlwapp-response textarea,
588
- #qlwapp .qlwapp-box .qlwapp-response .qlwapp-buttons {
589
- min-height: 56px;
590
- }
591
- #qlwapp .qlwapp-box .qlwapp-response pre,
592
- #qlwapp .qlwapp-box .qlwapp-response textarea {
593
- width: 100%;
594
- height: 100%;
595
- resize: none;
596
- border: none;
597
- padding: 18px 56px 18px 36px;
598
- font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
599
- font-size: 14px;
600
- font-weight: normal;
601
- line-height: 20px;
602
- white-space: pre-wrap;
603
- word-wrap: break-word;
604
- border-radius: inherit;
605
- margin: 0;
606
- }
607
- #qlwapp .qlwapp-box .qlwapp-response pre {
608
- visibility: hidden;
609
- }
610
- #qlwapp .qlwapp-box .qlwapp-response textarea {
611
- position: absolute;
612
- bottom: 0;
613
- left: 0;
614
- }
615
- #qlwapp .qlwapp-box .qlwapp-response textarea:focus {
616
- outline: none;
617
- }
618
- #qlwapp .qlwapp-box .qlwapp-response .qlwapp-buttons {
619
- position: absolute;
620
- top: 0;
621
- right: 21px;
622
- display: flex;
623
- align-items: center;
624
- }
625
- #qlwapp .qlwapp-box .qlwapp-response .qlwapp-buttons.active > i {
626
- display: none;
627
- }
628
- #qlwapp .qlwapp-box .qlwapp-response .qlwapp-buttons.active > i.qlwf-emoji {
629
- display: block;
630
- }
631
- #qlwapp .qlwapp-box .qlwapp-response .qlwapp-buttons > i {
632
- opacity: 0.4;
633
- }
634
- #qlwapp .qlwapp-box .qlwapp-response .qlwapp-buttons > i,
635
- #qlwapp .qlwapp-box .qlwapp-response .qlwapp-buttons > a {
636
- cursor: pointer;
637
- margin: 0 0 0 10px;
638
- display: inherit;
639
- font-size: 18px;
640
- line-height: 24px;
641
- }
642
- #qlwapp .qlwapp-previous,
643
- #qlwapp .qlwapp-close,
644
- #qlwapp .qlwapp-toggle,
645
- #qlwapp .qlwapp-box .qlwapp-header,
646
- #qlwapp .qlwapp-box .qlwapp-contact,
647
- #qlwapp .qlwapp-box .qlwapp-user {
648
- color: #ffffff;
649
- }
650
- #qlwapp.qlwapp-bubble .qlwapp-toggle .qlwapp-text {
651
- color: #303030;
652
- }
653
- #qlwapp .qlwapp-box,
654
- #qlwapp .qlwapp-box:before {
655
- background-color: #fff;
656
- }
657
- #qlwapp .qlwapp-box .qlwapp-account {
658
- background-color: #fff;
659
- }
660
- #qlwapp .qlwapp-box .qlwapp-account:not(:first-child) {
661
- border-top: 1px solid #f5f5f5;
662
- }
663
- #qlwapp .qlwapp-box .qlwapp-avatar .qlwapp-avatar-container {
664
- background-color: #eee;
665
- }
666
- #qlwapp .qlwapp-box .qlwapp-message,
667
- #qlwapp .qlwapp-box .qlwapp-message:before {
668
- background-color: #eee;
669
- }
670
- #qlwapp .qlwapp-box .qlwapp-footer,
671
- #qlwapp .qlwapp-box .qlwapp-response {
672
- color: #303030;
673
- background-color: #fff;
674
- border-top: 1px solid #e6e6e6;
675
- }
676
- #qlwapp .qlwapp-toggle,
677
- #qlwapp .qlwapp-box .qlwapp-header,
678
- #qlwapp .qlwapp-box .qlwapp-user,
679
- #qlwapp .qlwapp-box .qlwapp-user:before {
680
- background-color: #303030;
681
- }
682
- #qlwapp {
683
- display: none;
684
- }
685
- #qlwapp.qlwapp-show .qlwapp-box {
686
- visibility: visible;
687
- opacity: 1;
688
- transform: translateY(0) scale(1);
689
- display: block;
690
- }
691
- #qlwapp.qlwapp-transition .qlwapp-box {
692
- visibility: visible;
693
- display: block;
694
- }
695
- #qlwapp.qlwapp-bubble.qlwapp-show .qlwapp-toggle .qlwapp-icon {
696
- transform: scale(0, 0);
697
- opacity: 0;
698
- }
699
- #qlwapp.qlwapp-bubble.qlwapp-show .qlwapp-toggle .qlwapp-close {
700
- transform: scale(1, 1);
701
- opacity: 1;
702
- }
703
- #qlwapp.qlwapp-bubble .qlwapp-toggle .qlwapp-close {
704
- transform: scale(0, 0);
705
- opacity: 0;
706
- }
707
- #qlwapp.qlwapp-bubble .qlwapp-toggle .qlwapp-icon {
708
- transform: scale(1, 1);
709
- opacity: 1;
710
- }
711
- #qlwapp.qlwapp-bubble .qlwapp-toggle .qlwapp-icon,
712
- #qlwapp.qlwapp-bubble .qlwapp-toggle .qlwapp-close {
713
- transition: transform 300ms cubic-bezier(0.215, 0.61, 0.355, 1), opacity 300ms ease-in;
714
- }
715
- #qlwapp .qlwapp-box {
716
- display: none;
717
- opacity: 0;
718
- visibility: hidden;
719
- transform: translateY(50px);
720
- transition: transform 300ms cubic-bezier(0.215, 0.61, 0.355, 1), opacity 300ms ease-in;
721
- }
722
- @media (min-width: 430px) {
723
- #qlwapp .qlwapp-box {
724
- transform: translateY(50px) scale(0.9);
725
- }
726
- }
727
- #qlwapp .qlwapp-box .qlwapp-carousel {
728
- display: flex;
729
- width: 200%;
730
- height: 100%;
731
- }
732
- #qlwapp .qlwapp-box .qlwapp-carousel .qlwapp-slide {
733
- width: 50%;
734
- transition: max-height 500ms cubic-bezier(0.215, 0.61, 0.355, 1) 1000ms, transform 300ms cubic-bezier(0.215, 0.61, 0.355, 1) 500ms, opacity 500ms ease-in 500ms;
735
- height: 100%;
736
- overflow: hidden;
737
- }
738
- #qlwapp .qlwapp-box .qlwapp-header .qlwapp-slide {
739
- max-height: 300px;
740
- }
741
- #qlwapp .qlwapp-box .qlwapp-header .qlwapp-name,
742
- #qlwapp .qlwapp-box .qlwapp-header .qlwapp-label,
743
- #qlwapp .qlwapp-box .qlwapp-header .qlwapp-avatar {
744
- opacity: 0;
745
- transition: transform cubic-bezier(0.215, 0.61, 0.355, 1) 0.3s, opacity ease-in 0.3s;
746
- }
747
- #qlwapp .qlwapp-box .qlwapp-header .qlwapp-name,
748
- #qlwapp .qlwapp-box .qlwapp-header .qlwapp-label {
749
- transform: translateX(56px);
750
- }
751
- #qlwapp .qlwapp-box .qlwapp-header .qlwapp-avatar {
752
- transform: scale(0.5);
753
- }
754
- #qlwapp .qlwapp-box .qlwapp-header .qlwapp-name {
755
- transition-delay: 800ms;
756
- }
757
- #qlwapp .qlwapp-box .qlwapp-header .qlwapp-label {
758
- transition-delay: 850ms;
759
- }
760
- #qlwapp .qlwapp-box .qlwapp-header .qlwapp-avatar {
761
- transition-delay: 900ms;
762
- }
763
- #qlwapp .qlwapp-box .qlwapp-footer,
764
- #qlwapp .qlwapp-box .qlwapp-response,
765
- #qlwapp .qlwapp-box .qlwapp-previous,
766
- #qlwapp .qlwapp-box .qlwapp-message,
767
- #qlwapp .qlwapp-box .qlwapp-user {
768
- transition: transform cubic-bezier(0.215, 0.61, 0.355, 1) 600ms, opacity ease-in 200ms;
769
- }
770
- #qlwapp .qlwapp-box .qlwapp-response,
771
- #qlwapp .qlwapp-box .qlwapp-previous,
772
- #qlwapp .qlwapp-box .qlwapp-user {
773
- opacity: 0;
774
- }
775
- #qlwapp .qlwapp-box .qlwapp-response {
776
- pointer-events: none;
777
- }
778
- #qlwapp .qlwapp-box .qlwapp-previous {
779
- transform: translateX(56px);
780
- }
781
- #qlwapp .qlwapp-box .qlwapp-user {
782
- transform: translateY(56px);
783
- }
784
- #qlwapp .qlwapp-box .qlwapp-close {
785
- transition: opacity 300ms cubic-bezier(0.215, 0.61, 0.355, 1);
786
- }
787
- #qlwapp .qlwapp-box .qlwapp-description {
788
- transition: transform 600ms cubic-bezier(0.215, 0.61, 0.355, 1), opacity 900ms cubic-bezier(0.215, 0.61, 0.355, 1);
789
- }
790
- #qlwapp .qlwapp-box .qlwapp-account {
791
- transition: transform 600ms cubic-bezier(0.215, 0.61, 0.355, 1), opacity 150ms ease-in;
792
- }
793
- #qlwapp .qlwapp-box .qlwapp-previous {
794
- transition-delay: 800ms;
795
- }
796
- #qlwapp .qlwapp-box .qlwapp-message {
797
- transition-delay: 900ms;
798
- }
799
- #qlwapp .qlwapp-box .qlwapp-close,
800
- #qlwapp .qlwapp-box .qlwapp-description {
801
- transition-delay: 900ms;
802
- }
803
- #qlwapp .qlwapp-box .qlwapp-user {
804
- transition-delay: 200ms;
805
- }
806
- #qlwapp .qlwapp-box .qlwapp-account:nth-of-type(6) {
807
- transition-delay: 600ms;
808
- }
809
- #qlwapp .qlwapp-box .qlwapp-account:nth-of-type(5) {
810
- transition-delay: 500ms;
811
- }
812
- #qlwapp .qlwapp-box .qlwapp-account:nth-of-type(4) {
813
- transition-delay: 400ms;
814
- }
815
- #qlwapp .qlwapp-box .qlwapp-account:nth-of-type(3) {
816
- transition-delay: 300ms;
817
- }
818
- #qlwapp .qlwapp-box .qlwapp-account:nth-of-type(2) {
819
- transition-delay: 200ms;
820
- }
821
- #qlwapp .qlwapp-box .qlwapp-account:nth-of-type(1) {
822
- transition-delay: 100ms;
823
- }
824
- #qlwapp .qlwapp-box .qlwapp-slide .qlwapp-message {
825
- opacity: 0;
826
- transform: translateY(-56px);
827
- }
828
- #qlwapp .qlwapp-box .qlwapp-slide .qlwapp-box .qlwapp-account:hover {
829
- background-color: #fafafa;
830
- }
831
- #qlwapp .qlwapp-box.response .qlwapp-carousel .qlwapp-slide {
832
- transform: translateX(-100%);
833
- }
834
- #qlwapp .qlwapp-box.response .qlwapp-body .qlwapp-carousel {
835
- overflow: hidden;
836
- max-height: 134px!important;
837
- min-height: 122px;
838
- }
839
- #qlwapp .qlwapp-box.response .qlwapp-close {
840
- transition-delay: 0ms;
841
- }
842
- #qlwapp .qlwapp-box.response .qlwapp-close,
843
- #qlwapp .qlwapp-box.response .qlwapp-footer,
844
- #qlwapp .qlwapp-box.response .qlwapp-description,
845
- #qlwapp .qlwapp-box.response .qlwapp-account {
846
- opacity: 0;
847
- }
848
- #qlwapp .qlwapp-box.response .qlwapp-account {
849
- transform: translateY(-33.333%);
850
- border-top-color: transparent!important;
851
- }
852
- #qlwapp .qlwapp-box.response .qlwapp-user {
853
- display: block;
854
- }
855
- #qlwapp .qlwapp-box.response .qlwapp-message,
856
- #qlwapp .qlwapp-box.response .qlwapp-previous,
857
- #qlwapp .qlwapp-box.response .qlwapp-response {
858
- opacity: 1;
859
- }
860
- #qlwapp .qlwapp-box.response .qlwapp-response {
861
- pointer-events: all;
862
- }
863
- #qlwapp .qlwapp-box.response .qlwapp-message,
864
- #qlwapp .qlwapp-box.response .qlwapp-previous {
865
- transform: translate(0);
866
- }
867
- #qlwapp .qlwapp-box.response .qlwapp-header .qlwapp-slide {
868
- max-height: 84px;
869
- }
870
- #qlwapp .qlwapp-box.response .qlwapp-header .qlwapp-name,
871
- #qlwapp .qlwapp-box.response .qlwapp-header .qlwapp-avatar {
872
- opacity: 1;
873
- }
874
- #qlwapp .qlwapp-box.response .qlwapp-header .qlwapp-label {
875
- opacity: 0.5;
876
- }
877
- #qlwapp .qlwapp-box.response .qlwapp-header .qlwapp-name,
878
- #qlwapp .qlwapp-box.response .qlwapp-header .qlwapp-label {
879
- transform: translateX(0);
880
- }
881
- #qlwapp .qlwapp-box.response .qlwapp-header .qlwapp-avatar {
882
- transform: scale(1);
883
- }
884
- #qlwapp .qlwapp-box.response.opening .qlwapp-footer,
885
- #qlwapp .qlwapp-box.response.opening .qlwapp-response,
886
- #qlwapp .qlwapp-box.response.opening .qlwapp-close,
887
- #qlwapp .qlwapp-box.response.opening .qlwapp-previous,
888
- #qlwapp .qlwapp-box.response.opening .qlwapp-description,
889
- #qlwapp .qlwapp-box.response.opening .qlwapp-header .qlwapp-name,
890
- #qlwapp .qlwapp-box.response.opening .qlwapp-header .qlwapp-label {
891
- visibility: visible;
892
- }
893
- #qlwapp .qlwapp-box.texting .qlwapp-body {
894
- overflow-y: auto;
895
- }
896
- #qlwapp .qlwapp-box.texting .qlwapp-user {
897
- opacity: 1;
898
- transform: translate(0);
899
- }
900
- #qlwapp .qlwapp-box.closing .qlwapp-previous {
901
- transition-delay: 0ms;
902
- transform: translateX(-24px);
903
- opacity: 0;
904
- transition: transform cubic-bezier(0.215, 0.61, 0.355, 1) 300ms, opacity ease-out 200ms;
905
- }
906
- #qlwapp .qlwapp-box.closing .qlwapp-description {
907
- opacity: 0;
908
- }
909
  /*# sourceMappingURL=qlwapp.css.map */
1
+ @font-face {
2
+ font-family: 'qlwapp-whatsapp';
3
+ src: url(data:application/x-font-woff;charset=utf-8;base64,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) format('woff');
4
+ font-weight: normal;
5
+ font-style: normal;
6
+ }
7
+ .qlwapp-whatsapp-icon {
8
+ font-family: 'qlwapp-whatsapp' !important;
9
+ speak: none;
10
+ font-style: normal;
11
+ font-weight: normal;
12
+ font-variant: normal;
13
+ text-transform: none;
14
+ line-height: 1;
15
+ -webkit-font-smoothing: antialiased;
16
+ -moz-osx-font-smoothing: grayscale;
17
+ }
18
+ .qlwapp-whatsapp-icon:before {
19
+ content: "\e900";
20
+ }
21
+ #qlwapp {
22
+ pointer-events: none;
23
+ box-sizing: border-box;
24
+ /*&.qlwapp-middle-left {
25
+ &.qlwapp-button {
26
+ .qlwapp-developer,
27
+ .qlwapp-toggle {
28
+ margin-left: -48px;
29
+ padding-left: 60px;
30
+ }
31
+ }
32
+ }
33
+
34
+ &.qlwapp-middle-right {
35
+ &.qlwapp-button {
36
+ .qlwapp-developer,
37
+ .qlwapp-toggle {
38
+ margin-right: -48px;
39
+ padding-right: 60px;
40
+ }
41
+
42
+ }
43
+ }
44
+
45
+ &.qlwapp-bottom-left {
46
+ &.qlwapp-bubble,
47
+ &.qlwapp-button {
48
+ .qlwapp-developer,
49
+ .qlwapp-toggle {
50
+ margin-left: 20px;
51
+ }
52
+ }
53
+
54
+ &.qlwapp-bubble {
55
+ .qlwapp-toggle {
56
+ .qlwapp-text {
57
+ right: auto;
58
+ left: 60px;
59
+ }
60
+ }
61
+ }
62
+
63
+ .qlwapp-box {
64
+ &:before {
65
+ right: auto;
66
+ left: 20px;
67
+ }
68
+ }
69
+
70
+ }
71
+
72
+ &.qlwapp-bottom-right {
73
+ &.qlwapp-bubble,
74
+ &.qlwapp-button {
75
+
76
+ .qlwapp-developer,
77
+ .qlwapp-toggle {
78
+ margin-right: 20px;
79
+ }
80
+ }
81
+ }*/
82
+ }
83
+ @media (min-width: 430px) {
84
+ #qlwapp {
85
+ width: 430px;
86
+ }
87
+ }
88
+ #qlwapp * {
89
+ box-sizing: border-box;
90
+ }
91
+ #qlwapp.qlwapp-js-ready {
92
+ display: block;
93
+ }
94
+ #qlwapp.qlwapp-hide,
95
+ #qlwapp.qlwapp-desktop.mobile,
96
+ #qlwapp.qlwapp-mobile.desktop {
97
+ display: none;
98
+ }
99
+ #qlwapp .qlwapp-readonly,
100
+ #qlwapp.qlwapp-readonly {
101
+ pointer-events: none!important;
102
+ opacity: 0.5!important;
103
+ }
104
+ #qlwapp .qlwapp-disabled,
105
+ #qlwapp.qlwapp-disabled {
106
+ display: none;
107
+ visibility: hidden;
108
+ }
109
+ #qlwapp.qlwapp-middle-left,
110
+ #qlwapp.qlwapp-bottom-left,
111
+ #qlwapp.qlwapp-middle-right,
112
+ #qlwapp.qlwapp-bottom-right {
113
+ position: fixed;
114
+ z-index: 9999999;
115
+ }
116
+ #qlwapp.qlwapp-middle-left,
117
+ #qlwapp.qlwapp-bottom-left {
118
+ right: auto;
119
+ left: 0;
120
+ }
121
+ #qlwapp.qlwapp-middle-left .qlwapp-toggle .qlwapp-time,
122
+ #qlwapp.qlwapp-bottom-left .qlwapp-toggle .qlwapp-time {
123
+ left: 0;
124
+ right: auto;
125
+ }
126
+ #qlwapp.qlwapp-middle-left.qlwapp-bubble .qlwapp-developer,
127
+ #qlwapp.qlwapp-bottom-left.qlwapp-bubble .qlwapp-developer,
128
+ #qlwapp.qlwapp-middle-left.qlwapp-button .qlwapp-developer,
129
+ #qlwapp.qlwapp-bottom-left.qlwapp-button .qlwapp-developer,
130
+ #qlwapp.qlwapp-middle-left.qlwapp-bubble .qlwapp-toggle,
131
+ #qlwapp.qlwapp-bottom-left.qlwapp-bubble .qlwapp-toggle,
132
+ #qlwapp.qlwapp-middle-left.qlwapp-button .qlwapp-toggle,
133
+ #qlwapp.qlwapp-bottom-left.qlwapp-button .qlwapp-toggle {
134
+ margin-left: 20px;
135
+ }
136
+ #qlwapp.qlwapp-middle-left.qlwapp-bubble .qlwapp-toggle .qlwapp-text,
137
+ #qlwapp.qlwapp-bottom-left.qlwapp-bubble .qlwapp-toggle .qlwapp-text {
138
+ right: auto;
139
+ left: 60px;
140
+ }
141
+ #qlwapp.qlwapp-middle-left .qlwapp-box:before,
142
+ #qlwapp.qlwapp-bottom-left .qlwapp-box:before {
143
+ right: auto;
144
+ left: 20px;
145
+ }
146
+ #qlwapp.qlwapp-middle-right,
147
+ #qlwapp.qlwapp-bottom-right {
148
+ left: auto;
149
+ right: 0;
150
+ }
151
+ #qlwapp.qlwapp-middle-right .qlwapp-toggle .qlwapp-time,
152
+ #qlwapp.qlwapp-bottom-right .qlwapp-toggle .qlwapp-time {
153
+ left: auto;
154
+ right: 0;
155
+ }
156
+ #qlwapp.qlwapp-middle-right.qlwapp-bubble .qlwapp-developer,
157
+ #qlwapp.qlwapp-bottom-right.qlwapp-bubble .qlwapp-developer,
158
+ #qlwapp.qlwapp-middle-right.qlwapp-button .qlwapp-developer,
159
+ #qlwapp.qlwapp-bottom-right.qlwapp-button .qlwapp-developer,
160
+ #qlwapp.qlwapp-middle-right.qlwapp-bubble .qlwapp-toggle,
161
+ #qlwapp.qlwapp-bottom-right.qlwapp-bubble .qlwapp-toggle,
162
+ #qlwapp.qlwapp-middle-right.qlwapp-button .qlwapp-toggle,
163
+ #qlwapp.qlwapp-bottom-right.qlwapp-button .qlwapp-toggle {
164
+ margin-right: 20px;
165
+ }
166
+ #qlwapp.qlwapp-middle-left,
167
+ #qlwapp.qlwapp-middle-right {
168
+ top: 40%;
169
+ bottom: auto;
170
+ }
171
+ #qlwapp.qlwapp-middle-left .qlwapp-developer,
172
+ #qlwapp.qlwapp-middle-right .qlwapp-developer {
173
+ padding: 0 24px;
174
+ }
175
+ #qlwapp.qlwapp-middle-left.qlwapp-button .qlwapp-developer,
176
+ #qlwapp.qlwapp-middle-left.qlwapp-button .qlwapp-toggle {
177
+ margin-left: -48px;
178
+ padding-left: 60px;
179
+ }
180
+ #qlwapp.qlwapp-middle-right.qlwapp-button .qlwapp-developer,
181
+ #qlwapp.qlwapp-middle-right.qlwapp-button .qlwapp-toggle {
182
+ margin-right: -48px;
183
+ padding-right: 60px;
184
+ }
185
+ #qlwapp.qlwapp-bottom-left,
186
+ #qlwapp.qlwapp-bottom-right {
187
+ top: auto;
188
+ bottom: 0;
189
+ }
190
+ #qlwapp.qlwapp-rounded.qlwapp-bubble .qlwapp-toggle {
191
+ border-radius: 50%;
192
+ }
193
+ #qlwapp.qlwapp-rounded.qlwapp-button .qlwapp-toggle {
194
+ border-radius: 50px;
195
+ }
196
+ @media (min-width: 430px) {
197
+ #qlwapp.qlwapp-rounded .qlwapp-box {
198
+ border-radius: 8px;
199
+ }
200
+ }
201
+ #qlwapp.qlwapp-rounded .qlwapp-box .qlwapp-user,
202
+ #qlwapp.qlwapp-rounded .qlwapp-box .qlwapp-message {
203
+ border-radius: 4px;
204
+ }
205
+ #qlwapp p:last-child {
206
+ margin: 0;
207
+ }
208
+ #qlwapp time {
209
+ opacity: 0.8;
210
+ font-style: italic;
211
+ font-size: 10px;
212
+ }
213
+ #qlwapp .qlwapp-container {
214
+ display: flex;
215
+ flex-direction: column;
216
+ }
217
+ #qlwapp .qlwapp-clearfix:before,
218
+ #qlwapp .qlwapp-clearfix:after {
219
+ content: '';
220
+ display: block;
221
+ clear: both;
222
+ }
223
+ #qlwapp .qlwapp-previous,
224
+ #qlwapp .qlwapp-close {
225
+ display: block;
226
+ opacity: 0.8;
227
+ font-style: unset;
228
+ font-size: 24px;
229
+ font-weight: bold;
230
+ width: 24px;
231
+ height: 24px;
232
+ cursor: pointer;
233
+ text-align: center;
234
+ line-height: 24px;
235
+ z-index: 1;
236
+ }
237
+ #qlwapp .qlwapp-previous {
238
+ width: 16px;
239
+ height: 36px;
240
+ cursor: pointer;
241
+ text-align: center;
242
+ line-height: 36px;
243
+ margin-right: auto;
244
+ }
245
+ #qlwapp .qlwapp-developer {
246
+ font-size: 8px;
247
+ top: -20px;
248
+ position: relative;
249
+ }
250
+ #qlwapp .qlwapp-developer,
251
+ #qlwapp .qlwapp-toggle {
252
+ display: inline-flex;
253
+ align-items: center;
254
+ justify-content: center;
255
+ margin-left: auto;
256
+ margin-right: auto;
257
+ }
258
+ #qlwapp .qlwapp-toggle {
259
+ pointer-events: all;
260
+ cursor: pointer;
261
+ box-shadow: 0 1px 6px 0 rgba(0, 0, 0, 0.06), 0 2px 32px 0 rgba(0, 0, 0, 0.16);
262
+ margin-top: 24px;
263
+ margin-bottom: 24px;
264
+ position: relative;
265
+ text-decoration: none;
266
+ }
267
+ #qlwapp .qlwapp-toggle,
268
+ #qlwapp .qlwapp-toggle:active,
269
+ #qlwapp .qlwapp-toggle:focus,
270
+ #qlwapp .qlwapp-toggle:hover {
271
+ outline: none;
272
+ text-decoration: none;
273
+ }
274
+ #qlwapp .qlwapp-toggle .qlwapp-time {
275
+ position: absolute;
276
+ bottom: -2em;
277
+ color: initial;
278
+ font-size: 10px;
279
+ display: inline-block;
280
+ top: auto;
281
+ width: 120px;
282
+ }
283
+ #qlwapp .qlwapp-avatar .qlwapp-avatar-container {
284
+ overflow: hidden;
285
+ border-radius: 50%;
286
+ width: inherit;
287
+ height: inherit;
288
+ }
289
+ #qlwapp .qlwapp-avatar .qlwapp-avatar-container img {
290
+ width: 100%;
291
+ height: auto;
292
+ }
293
+ #qlwapp.qlwapp-bubble .qlwapp-toggle {
294
+ width: 60px;
295
+ height: 60px;
296
+ }
297
+ #qlwapp.qlwapp-bubble .qlwapp-toggle .qlwapp-icon,
298
+ #qlwapp.qlwapp-bubble .qlwapp-toggle .qlwapp-close {
299
+ position: absolute;
300
+ display: block;
301
+ pointer-events: none;
302
+ font-size: 24px;
303
+ }
304
+ #qlwapp.qlwapp-bubble .qlwapp-toggle .qlwapp-text {
305
+ position: absolute;
306
+ right: 60px;
307
+ height: 60px;
308
+ margin: 0 24px;
309
+ display: flex;
310
+ align-items: center;
311
+ justify-content: flex-end;
312
+ font-weight: bold;
313
+ white-space: pre;
314
+ }
315
+ #qlwapp.qlwapp-button .qlwapp-toggle {
316
+ height: 40px;
317
+ white-space: nowrap;
318
+ padding: 12px 24px;
319
+ }
320
+ #qlwapp.qlwapp-button .qlwapp-toggle .qlwapp-icon {
321
+ margin: 0 12px 0 0;
322
+ }
323
+ #qlwapp.qlwapp-button .qlwapp-toggle .qlwapp-close {
324
+ display: none;
325
+ }
326
+ #qlwapp .qlwapp-box {
327
+ pointer-events: all;
328
+ padding-bottom: 56px;
329
+ position: fixed;
330
+ top: auto;
331
+ bottom: 0;
332
+ left: 0;
333
+ right: 0;
334
+ z-index: 99999;
335
+ box-shadow: 0px 5px 40px 5px rgba(0, 0, 0, 0.5);
336
+ }
337
+ @media (min-width: 430px) {
338
+ #qlwapp .qlwapp-box {
339
+ position: relative;
340
+ top: auto;
341
+ bottom: auto;
342
+ left: auto;
343
+ right: auto;
344
+ box-shadow: 0 8px 25px -5px rgba(45, 62, 79, 0.15);
345
+ margin-top: 24px;
346
+ margin-left: 24px;
347
+ margin-right: 24px;
348
+ margin-bottom: 12px;
349
+ }
350
+ #qlwapp .qlwapp-box:before {
351
+ content: '';
352
+ position: absolute;
353
+ bottom: -6px;
354
+ right: 24px;
355
+ width: 13px;
356
+ height: 13px;
357
+ transform: rotate(45deg);
358
+ }
359
+ #qlwapp .qlwapp-box .qlwapp-header {
360
+ border-top-left-radius: inherit;
361
+ border-top-right-radius: inherit;
362
+ }
363
+ #qlwapp .qlwapp-box .qlwapp-footer,
364
+ #qlwapp .qlwapp-box .qlwapp-response {
365
+ border-bottom-left-radius: inherit;
366
+ border-bottom-right-radius: inherit;
367
+ }
368
+ }
369
+ #qlwapp .qlwapp-box .qlwapp-header {
370
+ position: relative;
371
+ overflow: hidden;
372
+ }
373
+ #qlwapp .qlwapp-box .qlwapp-header:before {
374
+ content: '';
375
+ position: absolute;
376
+ top: 0;
377
+ bottom: 0;
378
+ left: 0;
379
+ right: 0;
380
+ background: linear-gradient(135deg, transparent 0%, rgba(0, 0, 0, 0.3) 100%);
381
+ }
382
+ #qlwapp .qlwapp-box .qlwapp-header .qlwapp-close {
383
+ position: absolute;
384
+ top: 12px;
385
+ right: 12px;
386
+ }
387
+ @media (min-width: 430px) {
388
+ #qlwapp .qlwapp-box .qlwapp-header .qlwapp-close {
389
+ position: absolute;
390
+ top: 7px;
391
+ right: 7px;
392
+ font-size: 16px;
393
+ }
394
+ }
395
+ #qlwapp .qlwapp-box .qlwapp-header .qlwapp-description {
396
+ position: relative;
397
+ }
398
+ #qlwapp .qlwapp-box .qlwapp-description,
399
+ #qlwapp .qlwapp-box .qlwapp-contact {
400
+ padding: 24px 36px;
401
+ height: 100%;
402
+ }
403
+ #qlwapp .qlwapp-box .qlwapp-description p,
404
+ #qlwapp .qlwapp-box .qlwapp-description h3 {
405
+ color: inherit;
406
+ font-family: inherit;
407
+ margin: 0;
408
+ }
409
+ #qlwapp .qlwapp-box .qlwapp-description h3 {
410
+ margin: 0 0 0.25em 0;
411
+ }
412
+ #qlwapp .qlwapp-box .qlwapp-contact {
413
+ display: flex;
414
+ justify-content: flex-end;
415
+ align-items: center;
416
+ text-align: right;
417
+ }
418
+ #qlwapp .qlwapp-box .qlwapp-contact .qlwapp-previous {
419
+ position: relative;
420
+ left: -16px;
421
+ }
422
+ #qlwapp .qlwapp-box .qlwapp-contact .qlwapp-previous > i {
423
+ line-height: 36px;
424
+ }
425
+ #qlwapp .qlwapp-box .qlwapp-contact .qlwapp-avatar {
426
+ width: 42px;
427
+ height: 42px;
428
+ }
429
+ #qlwapp .qlwapp-box .qlwapp-contact .qlwapp-label,
430
+ #qlwapp .qlwapp-box .qlwapp-contact .qlwapp-name {
431
+ color: inherit;
432
+ }
433
+ #qlwapp .qlwapp-box .qlwapp-account {
434
+ color: inherit;
435
+ padding: 16px 36px;
436
+ display: flex;
437
+ align-items: center;
438
+ overflow: hidden;
439
+ position: relative;
440
+ cursor: pointer;
441
+ width: 100%;
442
+ text-decoration: none;
443
+ }
444
+ #qlwapp .qlwapp-box .qlwapp-account:only-of-type {
445
+ padding-top: 36px;
446
+ padding-bottom: 36px;
447
+ }
448
+ #qlwapp .qlwapp-box .qlwapp-info {
449
+ padding: 0 16px;
450
+ }
451
+ #qlwapp .qlwapp-box .qlwapp-avatar {
452
+ position: relative;
453
+ width: 62px;
454
+ height: 62px;
455
+ }
456
+ #qlwapp .qlwapp-box .qlwapp-avatar:after {
457
+ content: '';
458
+ display: block;
459
+ width: 15px;
460
+ height: 15px;
461
+ position: absolute;
462
+ bottom: 2px;
463
+ right: 2px;
464
+ background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAXgklEQVR4Ad2aCXhV9Zn/scv/P/N02mfmmc50anWqdUHUouwLYSFhCQlhIYEkLEnYF1SkoriXKkWxLo+2OlintopOq9UiewJJSEJCErKHsBAWCIshYSFAWO5y7zvf833uub78nnNvEhaxc9oP7295f+/vPd/znuXmsZ2I3Eh+AO4FkWAe+D3IAlWgDtSD4+AI2AMKwQrwEkgC3cGtV7y/X2j9bAdsG7kRoj0ApoOPwWHglqs7zoGt4AUwCvzw/6KAt4JnQC7wyvU9joAPQRz47t+7gBHgU3BKbsyxAzwGbvl7E7ArWCffnOMkWAD++Zsu4O3gXeCTb+axB6R8EwW8CTwK6uUqDq/fJxd9F6XJc0aOXqqXAxfqZN+FA3Lo4hFpcB2XZm+zuP1uuQZHOuj0TRHwDrBeruA47joh287tkM+OrZKlB96UZ2oXyy92PSNzdyyQ6TXzZPK2hyRt2xyZuu1hmbF9vjy8c6Es3L1IFu1dKv916H3JOVkAkQ/JBe9FuYLjLHjkRgs4EjQA8avM/MqaxzFXg2SeyJGl+9+kSBOrZ0pS1VQZXzWd7UnVsySlerakQrg0Mtdqg9kYn0WfCVUzrDVgGn3mQ/TlRz+R8jNV4vK1uUI/Av9yIwScBnxKNmK3TPV2Ne+RPxz+iKKNq5wsyTh5CGWLdBXMoaiJlVMkqXKqPF37omw4kS1nPefMS6p7Zj8f/9z5dQq4lBubledQc7XNe+X1g++wssbhJCdVzZLU6jkB5gbbaQYcUz5psIRt1d/GMViuYSWPrUiTeTufki8a1soF3wXhYSjmB/gH2ANyEP92u94C3gSW+UUlYBvjaHA1yjuH/sAqG4uKg7XFUszWVo8bY87tFFpHIOQMCvnozqcl92SBUX5+ctn//IA/G6XP9RTwbaoVwA+YiKHippObZWbNfEnACUysmikpVbMpYAgLwoxXKapb2VYkV06DkJPllf1vybFLDepp46cJikc43gi6ot+uFbRJwBe5SaiNRfgJ8tuD71nCIfHpuF1nK2YpZpuWmH3tn6L8w8d0JqE8VWbV/EK2NpWrYgzmT6s4Au66lgIm6w1MrKMR32mL9iyVMWUpMrFyZjDxiQr2Kwnb2sfsc8zyNcbVfPg5rDV9Eivwtq+cISsb7K8uJZzQakpgfgjahaM14g2A44Vw4u09v1/m1Dwu8bjKEI9MoNVgzGjThm2HjxFunOvNOBA1uWK6dZH5ReDz+4IiivP5rQA3XU0F/iucDoYTb9e5WplS/bAklKUFkp3BqwxrMBPjnP/Kr4JW+ygwb/Rpnf3NuXB+zG9U6UR5p+59LWIonrwaAf8cTrz95+soXnx5GsSY0QLTJTnQtu3Vrmk5jukPKu32dBkJEd879KHw8IcU0QV6XomAY8OJd9rdJA/VLJTRpSl2Qn93JFVMkxGlE+Tz+lUtVWGRz+f7DmhnEqo0fwB2OYrnF/6g//We17l5cjkSKZ8mpAKwD9g25zim0P7GOgOHtQpjjLGIsbexF8bGlU3B42eyFJwqbknE2X4IZhBSwGfDVd8fDn0ssVuTJREJtMSYslSJ2zpe4ooJiS9NY/KJ14WppDV+OseUyjly9GJ9OBEbwA9NrZzE+xE4HUq8sqYq3rZjy6YwiXEWZZrgGMWaV/GUfH54tWyoz5aM+ixZcWStPFz5pIwumQSfaSHXJhL2ac15WO0La7a1jzOJNvCJKxkvz+9+WTx+TzgRf+ODRhonAX8TSrxmz3mZu+0JGVkykaU/1gTJ2O3hRcny2q635bzngphHw4VGSSmZI2NKU+lrMs45bqsZ12ofWNWO3Zok6xo2BgX0EVsDtl3gznAC3gwC33w+U0D57MtVMqw4UcaW4rkBxpZODrQB2gSJxBQlyYvbXxUJrHO6GO/v+5h+WEvwHGI8xmWf7QBsG33urfY3maxQa/jMU37qPEbhrphS+YiccZ/96q3sA5cL+Wo4ARdiQUB5n/i42CfWccp1WlIq5nKTeGwIgknp/oitE2Va6Tw5danJUTxbwMPNR2VMYSqqMI3rHClR8Q0SuM5uE91X88CcM9vKDitKlA8Pf6Jy90lAE1vML9H+vpOA34bDbryahahF1vHBoU9kaNE4iS9JkzEgaEsvb0cXjJPs+rywbzT76i7Z8QarkDHsmGb8UJS2zneM9jVRuduMRAFMKp8jDZeOC46ADtQEWthF5Z/m9BKJ8mEWgtHZRvysPkmreEhGFE/AJqlBRm9VbRDLl8bT4va6TQFNOF94vISCc31o7Hljb2D2wRgQZr05xzWm7+DCBPn06ErmqAvKbiP/dCcBl9HBwDrWN2Qx6ChsRphsCmwKrN3GxlsS+GzT4oUT0OV1ydzyhRJblMz1Ohas2kNh7w/sOW11bnrchHspH733cBTClMp50uQ+wwIyBQTWe6K9FvA7oMoQj7ev1++VhdtfkOiixODmI4NM0m2Jzh8nhY0l4QU0RFy+/1OJyh9tnOCkr/YpDozBcj9iCsJ5Iz9jPdfpPuPZeyk4zoLJPb4lWIUmyH+yFrCHD4dT9dWc2YkHaxJu34kASQC0A5awPdy6vQvT5Mvz9W0SsPHCCUkumsHbH3EUdmxjLzVnjjn7me2W18NSwFf2/DacgH/SAs4KcfvyWRBVMIaixRUBWA3GSQxuw+TiGXLGdbZlAQ0Rf7v7v1GF8cI9uI/C2Ic+GuVn2xFFpo+9Dtbw174j6EfLx0pi6XR8TZy2b2OTo8j/+7aA7zncvnz7PF6zyHq2YbMJZHjAmgwrTJLEounSdOlMmwVce2SjRG4ebceGnch2sK+IM+ZUXoafczu8n+6Pl+jCRKlu2h6qCn3I/16I5/t/aO8yJql648XjEr91MsUZXjiBIDDseIm1LIAFEySmMFli88fL/rMH2yzg0h1vSWQ+BQzGB4wbWwjQJvZ+dh6Yty19uS5gbfS4BdfYbe7BGPYa2GCsgcjpo0OfmQIq/DHtUGk/QafZ6fbddXaPRG9JgoDJEkO4AduEbfY5PiB3pKw/mtmmZ2BRY5kM25zIi6Tjxqr47Ks50w97G7loP2LnreI5Wu2DizpGntq++PJb2Kut/zkI6Otov0C8hoCZDbkyIH+UDNvCk4Ml7NNqMN8vb6S8tvOdVn/G1J07LPEFk/GMjed6jblPjLEXrTlXaFi2DR9zXBWIEZN5zah4TPhdqz5jlJCfWxXYlx2FLeC7Bz6QvnkjhFUIYMMyqCBBJhXNkXPu5nAicu7kpVMypfhR6b95lI6t2q2nTesLwsfQDMpPkKSSmXLWfU4Ekni9XhSZhY8WOhW2w4siwcfBAErA53csZVUNLUhskWjLbkmUPpuGy4Yvc0IKKH7h8cK2V6VXTgwTbTm+sU/r0bmBtq0bnD+Wz078bmfeFA4iUi9aX3U7/DOXyhIlIBbMr36OAg4pGKdIFNp8NabonzdKZpc8zosRUkQcy2o/kF6bYpioETssat+2+3Gs9UBAfl7VNO0UHNRHA0FrLQGfMif8gc+YuZVPUkAECjDOuW0QkT1cNtXnhxXw9KUmSSyYTsGHhIxNa2LMh/PlvNlv5Xr2ef4lJyu0gJoDloC/NCcwRjur4gnpmztCBiFQkM12O4GgD9i2fbhpcsFMOe8+H1bEgoZiiB0nUZvjsc6Iq2KiDfTeHDPyUvPKEq43c+a4eU5qnH2ef8Hx4lACHrIEfNacsF8msyFgRK51ggkgntZsm1AM2J7ZMbJ42+vCwx9axLd2vifds4aGi6dI0O1WM6hVfvGOY31y4yDg1lAC1rXDfTzfSUCxbuGKJ6V3znCJzIsPDzYyxwZuHiM9MofJ2sOZYV8oHp9Hnq74tXTPjmYc4BgTfWPe9B0TPi+2w2DGBQMRMwIVWHaqOpSA+ywBU9kx4Euk6nnpiQc9Al0RETlxEpMzXuovNIa9lc+6zknqloctEbGOiX8j6J87mqLWnt1HPRx02mHdwkMcBcSxZOeb0g0nNQCBguSZ7TAgiW64PReULWrxrXy0uZ7PTcsf64BTPG1J4EKNkK6ZQ3ix++eOCsyNcfLnOG146NcXcWMLJsrxiyfs70CTUlSgt5snhID/U/c36ZI1RPrnjGJiuCLAbGsLbF811mXjYFm2+4MWP67rzx+TyYXzpPPGQdJPxe5H60yvTbEyKi9Vfl+7XB4ueUr6ZA6XrrgIENX24XqdO2I7526M98Y3bWLRDLwML4jf679cI4/H+h7c2A7/3IkBl9eDQaAFLD5RzpdB35yR0g/CEKudq9pAt4HyJzyZ7huiZcPRnJZE5K+YZytekq4bhlAcey9zP8AT7Js5UqpPbg++rGpO7cL6lyUyO1464UL02RSn1lo2dDyT7tnDZHrpY4GXqlc8wPhaecsS8Afo1CtlYT0s2f1n66yrwST6bqIwNuiPMPq0BkEfXoj+maOkuLGsJRF5rKhbJ0OyE+XBjVG8AEZsjnXKGCSfHVwdjKePA2cPySs1v5Oo7AR5YEMkxTZyb5HOmYPlJTzGcFA8j8cDLGtXoG9iO4hmkWFNKvghfc7VLKO3TJYeWcMkApv2ARFhCDvP59RQiDJO9jTtCy8itRD+aeyx0kWsRlQTRIgLxuuYMVBerHb8TGJfC/nStrdkYFY8hVQxWqQLnquZx/ICAlIX8SqNIGA3W8BnDQGpsnW8tOMtqwpYhSSbVnqzrdgUihGc7w3QxvNtiMTlTGrV3w3tY0tDCV5Ev5KeG2IpQof0vjK/5DlxeV2tjQEh61iRvfGMRDUyfxLifHplD7fuKl4A8YkpHtreZgh4sy3gGE4YWMf6L7OYNDYCw024kXM/znkNxh5ENcXmTJTdTXvDCmBW066mPfJi1et8RuLTx1zbGiEh/PPcX+fWK5CrPpfOqL60rY+Iy+PiM9DUBprlQMCbbAF/jMGThhPfPA3nj8vQvCTplhktvbKszWKlJ+iVBdgHsCY9Lew5+iswbp1EVFaCFDWUqdswrJDmoeZbL+JzFS/j9o9kTgGYZ8/g+TA/uT9jgHxw4FPBoTXRAi7gfx+IBsHgqlBV+NquZXIfAmKTID2C7Ri0ae2+QvsDY6wTPm+6pw+T5Xv/qkW5LtgXYGbhAtxRUcKc7NwNumcOYwHU4llt374mEK8fBUTHZr6DIzcuO1HFZxcCgxjSQ1kNx7JAK/26bBwq968bIIur3uD3lqrGa4r9IojPncoLp3PSICdW3zPVLzEPPOucqq8G4v1/U8AfgSbTGQH4Rp5dulDuSx9AEW26KfSYwsnfoR0tHdb1lYTcaVLYUHpdqtE6tuMbsWvGUOmK/fT+mm4bo1Ghg6T4eDkFDHH7/sYSzxCQrAhVhTnHtuDZESVdUTHYRMFNMR5NIdhW47SGPzHHkfzP0wfKg+ui5PmKV2TX6T2C45pUpH08Xb4EF6qfnScxc7s3vZ/MLXuKRaOrT3ERwt0TFNDtcWv6W05uhyoUBJxZ8jg26E+Bum4AG4fCAvRxK2pL9DzbRp/WZgMtHxXt10VIj/QYWVT5quw8XSuijysU7+O9n/NR0Rn76r01na3vzQ2DpeREpfHscwutm9W3geIFBXR7NN+B41YtYKDNgJUna+TBjChu0gVCdA6Atok5H8Z/iNAacw/iNrp7bR/plh4tqfmPyKq6DOvD3hBTWhKOf8R4rQYvwbX9GVPvbXI3LtzCysXmrWu+PAZdJiAEMnAPBlSbGLfyku1vyj14XuFqkU4ZAcs+yNDWxHmuk2EVuGCDuN89a/rK4MxEWVi6WPKOFcmx840S7nDjhZFbXyhJebPknrV9KZ4ZW4HHR6REZI2UunNHWCy2Bm63G+D8YVF9+RDtu0YFuk2+BTIAF1mBAm0G3nfmAK/WA+lREG+wwRBagzb6QbQQ8/enD2RVdljbT3qnx8m0LY/Jst0fyhd16bLxaJ5kgpWo1Hd3L5exuTOkw5p+EL9fS3vyIt21ro98fmit4FDC6fNn9fWwhVMvEa8To4wAgBUouccK5d71/SHgIGw8WIhq6/4DRI0TY10628Z605dtOxbsIFZMe1TWHWt6yV2r+8jdqyMs2L5zdS++LODnvK+R88/W9MSt++vAc0+Jp4RE9S03xQt8SPs0xOP1PsKFBtbxdu2fmDQEbD0ZrfGLor1qMtq0D88lrfhRaXadF5/HZ54zgagnIdbtIQT0aggWpJtB8CbmCyVpy2zcRhHSEYl8bay/5jEp3p1re8vgTUlSbz1PfeIkHvF5ffN9Pn87BxwF/A+8ts+ZQcQrcvDsYbwAhsp9+Bz4+fooEKmsE1EGkaQj0OuJ2Q+/1tw/9LzdTw+0AxfkzjW9pW/maNnZVBtWPOixEZX2LdCutRU40CEQN8k4miN3YOP71w8ETIgWOPbhp+cI2+aYOW6sDUf4HJzj3766pwzIipftp3eL+EOLhzuxESL91BRN43T7vhlKwAXlL8htq3rgg3QgqpDYbSRm9INtwDlgrlNrTJz8ibkPrQn9HPYdID9d1U1G5KXxr+0tiOeCQLEUqg0Cfg8LD5rBfHj+XXJdkmE5E1n6djKaezlGq+ZhnX2B3Ufb8MccUHOGv7ku1Lxazzf2rRDvF+W/kjOXzoa7bQnESaFIbRTwPiz2AeP558dv0718ltyDbzCe4FoSbHcA7TH3M3xC3LqyG650d/aVT8usI8aa/i2vUe0OwBzHXcM+viD4LBePP6x4+BJ5gQJdgYAzHQKy1N+tXS63rOwCofoHuXtNhPxsVU8I1lVuh+24fpDEb54uv9v9R3l5++9we0VSzPZr+lJgrPnauAfwYiK3sfkzpexEdfDPU+Erz/ua9d+Nt1pABAyCz5QNbrfLUcCHSp6RW77oIrdBKFgm1jl9qMTlpspzVa9Idn2+7D9TF/QH/IvKo2W/pIA/wRp86PLEUMW0ZA2wx9g2oa/2AdYY0HMUjmOsuFuQ36DsJPn04Gq55HaFv2Vdwdt2iSVe2wRUzz8EOeJymc8/v9Q3N8iD64fwio7OmypPVi6RPx/4gr8bXUiOgvmAF/9XX+/oc7zkeJXMK32OFXnzik5y28oeFBVC2KDfMtqXVrXvXN0neGGH56bIH/d9Yn0cq6pz2UIRV1A8jOOAGPMpXhsF1D/fohDHr4MDbO5jZX2w769SeXJ78I1M0bx+9btRV66L4GJoIVmRy2o/xAmmyk9Xdpebv+jMW/yO1b3lLuunGERtHx763LUmgoLhsYHK7sw4D6wfLE9ULJb0o5vkgusi8/NBOJwLoHi2WGrMZeV/3O/zRVO4KxPQY7PUhYAUD9Y+eYyhqrzBCqNgLpUELPtKsMuSpQW2kH6Ri+6Lkn+sWN7e/SeZtOUR6Zo+jJVEUVd0lh+jSq1b/icruqCqutKqcTx38SWwNlIis8bK05Uvy19xmx44c8i+E5gv8lGVRrGCeTEngHMu8vt9D1C0qxUQwmzUAtptWjsBigSUpQ/9VLKEcYyLYV8Qz1dVHHhE1JzcJdlf5sv7e/8iL1a/IY+W/lJmFi+UGcVPyKytT8rCiiXy2o535W9162RrY4XsbToo5y41Mw5BHO5hiMZ+IAcSuGXxyHoVQn3PEuHqBPR6LG5DzHO2MIRtbKhE4Jj24Rx9QqP8GYcE1/Ck/R6rbMQWVT1TFT5j3GNXmo6n28754lGVCYH6UCRw1QJ6UX0gOXiyenN90u6WROLfzBpxZT9GRX/kwkVuQVBTTIW+5YBDDI61AeS03fo41iJdMwFx4m+0IRldPedRvVsQaIHP5++Gjf/N3hxCdkXSf4GfG8iNgcLtQT5Tkdc/UZxrLSA2+EcIUdtKwZrgXw5x3sbiGGx0e6jN4UML7sOaV9Ue1x3sdQZ7pmPvkVq46yVgB2zqC5GIF/PFEOP3cJ6MwLeYG7UsINo+tv8BxKJi30HMkusg2jHE/Rv2eAI5/KfO53oLOMcQ7ABO/l1MpiFQRzPwVQho0gU+qdhvKcjE3odxt593upgGrsCdsA3rl4P5iDUc+/67zuHrFPB9JLE6INj94Hs60HUU0OT74DbQEfQE/RAjMsBA9CNAZ9Ae/Ah829z3Rgj4v+tgYwWlsH1vAAAAAElFTkSuQmCC);
465
+ background-color: transparent;
466
+ background-repeat: no-repeat;
467
+ background-position: center center;
468
+ background-size: cover;
469
+ z-index: 4;
470
+ }
471
+ #qlwapp .qlwapp-box .qlwapp-time,
472
+ #qlwapp .qlwapp-box .qlwapp-label,
473
+ #qlwapp .qlwapp-box .qlwapp-offline-text {
474
+ font-size: 12px;
475
+ line-height: 1.5em;
476
+ opacity: .6;
477
+ display: block;
478
+ }
479
+ #qlwapp .qlwapp-box .qlwapp-time {
480
+ font-size: 11px;
481
+ font-style: italic;
482
+ }
483
+ #qlwapp .qlwapp-box .qlwapp-name {
484
+ display: block;
485
+ font-weight: bold;
486
+ line-height: 1.5em;
487
+ }
488
+ #qlwapp .qlwapp-box .qlwapp-body {
489
+ overflow-x: hidden;
490
+ overflow-y: auto;
491
+ }
492
+ #qlwapp .qlwapp-box .qlwapp-body .qlwapp-carousel {
493
+ max-height: 470px;
494
+ min-height: 134px;
495
+ }
496
+ #qlwapp .qlwapp-box .qlwapp-chat {
497
+ display: flex;
498
+ flex-direction: column;
499
+ overflow: hidden;
500
+ }
501
+ #qlwapp .qlwapp-box .qlwapp-user,
502
+ #qlwapp .qlwapp-box .qlwapp-message {
503
+ padding: 16px 24px;
504
+ margin: 36px;
505
+ position: relative;
506
+ word-wrap: break-word;
507
+ width: calc(100% - 36px*2);
508
+ }
509
+ #qlwapp .qlwapp-box .qlwapp-user:before,
510
+ #qlwapp .qlwapp-box .qlwapp-message:before {
511
+ content: '';
512
+ position: absolute;
513
+ top: -6px;
514
+ right: 24px;
515
+ width: 13px;
516
+ height: 13px;
517
+ transform: rotate(45deg);
518
+ }
519
+ #qlwapp .qlwapp-box .qlwapp-user {
520
+ width: auto;
521
+ max-width: 75%;
522
+ align-self: flex-start;
523
+ justify-self: flex-end;
524
+ margin-top: 0;
525
+ }
526
+ #qlwapp .qlwapp-box .qlwapp-user:before {
527
+ top: auto;
528
+ bottom: -6px;
529
+ left: 24px;
530
+ }
531
+ #qlwapp .qlwapp-box .qlwapp-padding {
532
+ padding-bottom: 56px;
533
+ }
534
+ #qlwapp .qlwapp-box .qlwapp-footer,
535
+ #qlwapp .qlwapp-box .qlwapp-response {
536
+ position: absolute;
537
+ bottom: 0;
538
+ left: 0;
539
+ right: 0;
540
+ height: auto;
541
+ width: 100%;
542
+ }
543
+ #qlwapp .qlwapp-box .qlwapp-footer,
544
+ #qlwapp .qlwapp-box .qlwapp-response,
545
+ #qlwapp .qlwapp-box .qlwapp-footer pre,
546
+ #qlwapp .qlwapp-box .qlwapp-response pre,
547
+ #qlwapp .qlwapp-box .qlwapp-footer textarea,
548
+ #qlwapp .qlwapp-box .qlwapp-response textarea {
549
+ max-height: 160px;
550
+ }
551
+ #qlwapp .qlwapp-box .qlwapp-footer pre,
552
+ #qlwapp .qlwapp-box .qlwapp-response pre,
553
+ #qlwapp .qlwapp-box .qlwapp-footer textarea,
554
+ #qlwapp .qlwapp-box .qlwapp-response textarea {
555
+ color: inherit;
556
+ background-color: inherit;
557
+ }
558
+ #qlwapp .qlwapp-box .qlwapp-footer:before,
559
+ #qlwapp .qlwapp-box .qlwapp-response:before {
560
+ pointer-events: none;
561
+ position: absolute;
562
+ content: '';
563
+ height: 59px;
564
+ top: -59px;
565
+ background-image: linear-gradient(transparent, rgba(0, 0, 0, 0.05));
566
+ left: 0;
567
+ right: 0;
568
+ }
569
+ #qlwapp .qlwapp-box .qlwapp-footer {
570
+ min-height: 56px;
571
+ display: flex;
572
+ align-items: center;
573
+ justify-content: center;
574
+ text-align: center;
575
+ font-size: 12px;
576
+ padding: 12px 36px;
577
+ }
578
+ #qlwapp .qlwapp-box .qlwapp-footer p {
579
+ padding: 0;
580
+ font-size: inherit;
581
+ }
582
+ #qlwapp .qlwapp-box .qlwapp-footer p:last-child {
583
+ margin-bottom: 0;
584
+ }
585
+ #qlwapp .qlwapp-box .qlwapp-response,
586
+ #qlwapp .qlwapp-box .qlwapp-response pre,
587
+ #qlwapp .qlwapp-box .qlwapp-response textarea,
588
+ #qlwapp .qlwapp-box .qlwapp-response .qlwapp-buttons {
589
+ min-height: 56px;
590
+ }
591
+ #qlwapp .qlwapp-box .qlwapp-response pre,
592
+ #qlwapp .qlwapp-box .qlwapp-response textarea {
593
+ width: 100%;
594
+ height: 100%;
595
+ resize: none;
596
+ border: none;
597
+ padding: 18px 56px 18px 36px;
598
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
599
+ font-size: 14px;
600
+ font-weight: normal;
601
+ line-height: 20px;
602
+ white-space: pre-wrap;
603
+ word-wrap: break-word;
604
+ border-radius: inherit;
605
+ margin: 0;
606
+ }
607
+ #qlwapp .qlwapp-box .qlwapp-response pre {
608
+ visibility: hidden;
609
+ }
610
+ #qlwapp .qlwapp-box .qlwapp-response textarea {
611
+ position: absolute;
612
+ bottom: 0;
613
+ left: 0;
614
+ }
615
+ #qlwapp .qlwapp-box .qlwapp-response textarea:focus {
616
+ outline: none;
617
+ }
618
+ #qlwapp .qlwapp-box .qlwapp-response .qlwapp-buttons {
619
+ position: absolute;
620
+ top: 0;
621
+ right: 21px;
622
+ display: flex;
623
+ align-items: center;
624
+ }
625
+ #qlwapp .qlwapp-box .qlwapp-response .qlwapp-buttons.active > i {
626
+ display: none;
627
+ }
628
+ #qlwapp .qlwapp-box .qlwapp-response .qlwapp-buttons.active > i.qlwf-emoji {
629
+ display: block;
630
+ }
631
+ #qlwapp .qlwapp-box .qlwapp-response .qlwapp-buttons > i {
632
+ opacity: 0.4;
633
+ }
634
+ #qlwapp .qlwapp-box .qlwapp-response .qlwapp-buttons > i,
635
+ #qlwapp .qlwapp-box .qlwapp-response .qlwapp-buttons > a {
636
+ cursor: pointer;
637
+ margin: 0 0 0 10px;
638
+ display: inherit;
639
+ font-size: 18px;
640
+ line-height: 24px;
641
+ }
642
+ #qlwapp .qlwapp-previous,
643
+ #qlwapp .qlwapp-close,
644
+ #qlwapp .qlwapp-toggle,
645
+ #qlwapp .qlwapp-box .qlwapp-header,
646
+ #qlwapp .qlwapp-box .qlwapp-contact,
647
+ #qlwapp .qlwapp-box .qlwapp-user {
648
+ color: #ffffff;
649
+ }
650
+ #qlwapp.qlwapp-bubble .qlwapp-toggle .qlwapp-text {
651
+ color: #303030;
652
+ }
653
+ #qlwapp .qlwapp-box,
654
+ #qlwapp .qlwapp-box:before {
655
+ background-color: #fff;
656
+ }
657
+ #qlwapp .qlwapp-box .qlwapp-account {
658
+ background-color: #fff;
659
+ }
660
+ #qlwapp .qlwapp-box .qlwapp-account:not(:first-child) {
661
+ border-top: 1px solid #f5f5f5;
662
+ }
663
+ #qlwapp .qlwapp-box .qlwapp-avatar .qlwapp-avatar-container {
664
+ background-color: #eee;
665
+ }
666
+ #qlwapp .qlwapp-box .qlwapp-message,
667
+ #qlwapp .qlwapp-box .qlwapp-message:before {
668
+ background-color: #eee;
669
+ }
670
+ #qlwapp .qlwapp-box .qlwapp-footer,
671
+ #qlwapp .qlwapp-box .qlwapp-response {
672
+ color: #303030;
673
+ background-color: #fff;
674
+ border-top: 1px solid #e6e6e6;
675
+ }
676
+ #qlwapp .qlwapp-toggle,
677
+ #qlwapp .qlwapp-box .qlwapp-header,
678
+ #qlwapp .qlwapp-box .qlwapp-user,
679
+ #qlwapp .qlwapp-box .qlwapp-user:before {
680
+ background-color: #303030;
681
+ }
682
+ #qlwapp {
683
+ display: none;
684
+ }
685
+ #qlwapp.qlwapp-show .qlwapp-box {
686
+ visibility: visible;
687
+ opacity: 1;
688
+ transform: translateY(0) scale(1);
689
+ display: block;
690
+ }
691
+ #qlwapp.qlwapp-transition .qlwapp-box {
692
+ visibility: visible;
693
+ display: block;
694
+ }
695
+ #qlwapp.qlwapp-bubble.qlwapp-show .qlwapp-toggle .qlwapp-icon {
696
+ transform: scale(0, 0);
697
+ opacity: 0;
698
+ }
699
+ #qlwapp.qlwapp-bubble.qlwapp-show .qlwapp-toggle .qlwapp-close {
700
+ transform: scale(1, 1);
701
+ opacity: 1;
702
+ }
703
+ #qlwapp.qlwapp-bubble .qlwapp-toggle .qlwapp-close {
704
+ transform: scale(0, 0);
705
+ opacity: 0;
706
+ }
707
+ #qlwapp.qlwapp-bubble .qlwapp-toggle .qlwapp-icon {
708
+ transform: scale(1, 1);
709
+ opacity: 1;
710
+ }
711
+ #qlwapp.qlwapp-bubble .qlwapp-toggle .qlwapp-icon,
712
+ #qlwapp.qlwapp-bubble .qlwapp-toggle .qlwapp-close {
713
+ transition: transform 300ms cubic-bezier(0.215, 0.61, 0.355, 1), opacity 300ms ease-in;
714
+ }
715
+ #qlwapp .qlwapp-box {
716
+ display: none;
717
+ opacity: 0;
718
+ visibility: hidden;
719
+ transform: translateY(50px);
720
+ transition: transform 300ms cubic-bezier(0.215, 0.61, 0.355, 1), opacity 300ms ease-in;
721
+ }
722
+ @media (min-width: 430px) {
723
+ #qlwapp .qlwapp-box {
724
+ transform: translateY(50px) scale(0.9);
725
+ }
726
+ }
727
+ #qlwapp .qlwapp-box .qlwapp-carousel {
728
+ display: flex;
729
+ width: 200%;
730
+ height: 100%;
731
+ }
732
+ #qlwapp .qlwapp-box .qlwapp-carousel .qlwapp-slide {
733
+ width: 50%;
734
+ transition: max-height 500ms cubic-bezier(0.215, 0.61, 0.355, 1) 1000ms, transform 300ms cubic-bezier(0.215, 0.61, 0.355, 1) 500ms, opacity 500ms ease-in 500ms;
735
+ height: 100%;
736
+ overflow: hidden;
737
+ }
738
+ #qlwapp .qlwapp-box .qlwapp-header .qlwapp-slide {
739
+ max-height: 300px;
740
+ }
741
+ #qlwapp .qlwapp-box .qlwapp-header .qlwapp-name,
742
+ #qlwapp .qlwapp-box .qlwapp-header .qlwapp-label,
743
+ #qlwapp .qlwapp-box .qlwapp-header .qlwapp-avatar {
744
+ opacity: 0;
745
+ transition: transform cubic-bezier(0.215, 0.61, 0.355, 1) 0.3s, opacity ease-in 0.3s;
746
+ }
747
+ #qlwapp .qlwapp-box .qlwapp-header .qlwapp-name,
748
+ #qlwapp .qlwapp-box .qlwapp-header .qlwapp-label {
749
+ transform: translateX(56px);
750
+ }
751
+ #qlwapp .qlwapp-box .qlwapp-header .qlwapp-avatar {
752
+ transform: scale(0.5);
753
+ }
754
+ #qlwapp .qlwapp-box .qlwapp-header .qlwapp-name {
755
+ transition-delay: 800ms;
756
+ }
757
+ #qlwapp .qlwapp-box .qlwapp-header .qlwapp-label {
758
+ transition-delay: 850ms;
759
+ }
760
+ #qlwapp .qlwapp-box .qlwapp-header .qlwapp-avatar {
761
+ transition-delay: 900ms;
762
+ }
763
+ #qlwapp .qlwapp-box .qlwapp-footer,
764
+ #qlwapp .qlwapp-box .qlwapp-response,
765
+ #qlwapp .qlwapp-box .qlwapp-previous,
766
+ #qlwapp .qlwapp-box .qlwapp-message,
767
+ #qlwapp .qlwapp-box .qlwapp-user {
768
+ transition: transform cubic-bezier(0.215, 0.61, 0.355, 1) 600ms, opacity ease-in 200ms;
769
+ }
770
+ #qlwapp .qlwapp-box .qlwapp-response,
771
+ #qlwapp .qlwapp-box .qlwapp-previous,
772
+ #qlwapp .qlwapp-box .qlwapp-user {
773
+ opacity: 0;
774
+ }
775
+ #qlwapp .qlwapp-box .qlwapp-response {
776
+ pointer-events: none;
777
+ }
778
+ #qlwapp .qlwapp-box .qlwapp-previous {
779
+ transform: translateX(56px);
780
+ }
781
+ #qlwapp .qlwapp-box .qlwapp-user {
782
+ transform: translateY(56px);
783
+ }
784
+ #qlwapp .qlwapp-box .qlwapp-close {
785
+ transition: opacity 300ms cubic-bezier(0.215, 0.61, 0.355, 1);
786
+ }
787
+ #qlwapp .qlwapp-box .qlwapp-description {
788
+ transition: transform 600ms cubic-bezier(0.215, 0.61, 0.355, 1), opacity 900ms cubic-bezier(0.215, 0.61, 0.355, 1);
789
+ }
790
+ #qlwapp .qlwapp-box .qlwapp-account {
791
+ transition: transform 600ms cubic-bezier(0.215, 0.61, 0.355, 1), opacity 150ms ease-in;
792
+ }
793
+ #qlwapp .qlwapp-box .qlwapp-previous {
794
+ transition-delay: 800ms;
795
+ }
796
+ #qlwapp .qlwapp-box .qlwapp-message {
797
+ transition-delay: 900ms;
798
+ }
799
+ #qlwapp .qlwapp-box .qlwapp-close,
800
+ #qlwapp .qlwapp-box .qlwapp-description {
801
+ transition-delay: 900ms;
802
+ }
803
+ #qlwapp .qlwapp-box .qlwapp-user {
804
+ transition-delay: 200ms;
805
+ }
806
+ #qlwapp .qlwapp-box .qlwapp-account:nth-of-type(6) {
807
+ transition-delay: 600ms;
808
+ }
809
+ #qlwapp .qlwapp-box .qlwapp-account:nth-of-type(5) {
810
+ transition-delay: 500ms;
811
+ }
812
+ #qlwapp .qlwapp-box .qlwapp-account:nth-of-type(4) {
813
+ transition-delay: 400ms;
814
+ }
815
+ #qlwapp .qlwapp-box .qlwapp-account:nth-of-type(3) {
816
+ transition-delay: 300ms;
817
+ }
818
+ #qlwapp .qlwapp-box .qlwapp-account:nth-of-type(2) {
819
+ transition-delay: 200ms;
820
+ }
821
+ #qlwapp .qlwapp-box .qlwapp-account:nth-of-type(1) {
822
+ transition-delay: 100ms;
823
+ }
824
+ #qlwapp .qlwapp-box .qlwapp-slide .qlwapp-message {
825
+ opacity: 0;
826
+ transform: translateY(-56px);
827
+ }
828
+ #qlwapp .qlwapp-box .qlwapp-slide .qlwapp-box .qlwapp-account:hover {
829
+ background-color: #fafafa;
830
+ }
831
+ #qlwapp .qlwapp-box.response .qlwapp-carousel .qlwapp-slide {
832
+ transform: translateX(-100%);
833
+ }
834
+ #qlwapp .qlwapp-box.response .qlwapp-body .qlwapp-carousel {
835
+ overflow: hidden;
836
+ max-height: 134px!important;
837
+ min-height: 122px;
838
+ }
839
+ #qlwapp .qlwapp-box.response .qlwapp-close {
840
+ transition-delay: 0ms;
841
+ }
842
+ #qlwapp .qlwapp-box.response .qlwapp-close,
843
+ #qlwapp .qlwapp-box.response .qlwapp-footer,
844
+ #qlwapp .qlwapp-box.response .qlwapp-description,
845
+ #qlwapp .qlwapp-box.response .qlwapp-account {
846
+ opacity: 0;
847
+ }
848
+ #qlwapp .qlwapp-box.response .qlwapp-account {
849
+ transform: translateY(-33.333%);
850
+ border-top-color: transparent!important;
851
+ }
852
+ #qlwapp .qlwapp-box.response .qlwapp-user {
853
+ display: block;
854
+ }
855
+ #qlwapp .qlwapp-box.response .qlwapp-message,
856
+ #qlwapp .qlwapp-box.response .qlwapp-previous,
857
+ #qlwapp .qlwapp-box.response .qlwapp-response {
858
+ opacity: 1;
859
+ }
860
+ #qlwapp .qlwapp-box.response .qlwapp-response {
861
+ pointer-events: all;
862
+ }
863
+ #qlwapp .qlwapp-box.response .qlwapp-message,
864
+ #qlwapp .qlwapp-box.response .qlwapp-previous {
865
+ transform: translate(0);
866
+ }
867
+ #qlwapp .qlwapp-box.response .qlwapp-header .qlwapp-slide {
868
+ max-height: 84px;
869
+ }
870
+ #qlwapp .qlwapp-box.response .qlwapp-header .qlwapp-name,
871
+ #qlwapp .qlwapp-box.response .qlwapp-header .qlwapp-avatar {
872
+ opacity: 1;
873
+ }
874
+ #qlwapp .qlwapp-box.response .qlwapp-header .qlwapp-label {
875
+ opacity: 0.5;
876
+ }
877
+ #qlwapp .qlwapp-box.response .qlwapp-header .qlwapp-name,
878
+ #qlwapp .qlwapp-box.response .qlwapp-header .qlwapp-label {
879
+ transform: translateX(0);
880
+ }
881
+ #qlwapp .qlwapp-box.response .qlwapp-header .qlwapp-avatar {
882
+ transform: scale(1);
883
+ }
884
+ #qlwapp .qlwapp-box.response.opening .qlwapp-footer,
885
+ #qlwapp .qlwapp-box.response.opening .qlwapp-response,
886
+ #qlwapp .qlwapp-box.response.opening .qlwapp-close,
887
+ #qlwapp .qlwapp-box.response.opening .qlwapp-previous,
888
+ #qlwapp .qlwapp-box.response.opening .qlwapp-description,
889
+ #qlwapp .qlwapp-box.response.opening .qlwapp-header .qlwapp-name,
890
+ #qlwapp .qlwapp-box.response.opening .qlwapp-header .qlwapp-label {
891
+ visibility: visible;
892
+ }
893
+ #qlwapp .qlwapp-box.texting .qlwapp-body {
894
+ overflow-y: auto;
895
+ }
896
+ #qlwapp .qlwapp-box.texting .qlwapp-user {
897
+ opacity: 1;
898
+ transform: translate(0);
899
+ }
900
+ #qlwapp .qlwapp-box.closing .qlwapp-previous {
901
+ transition-delay: 0ms;
902
+ transform: translateX(-24px);
903
+ opacity: 0;
904
+ transition: transform cubic-bezier(0.215, 0.61, 0.355, 1) 300ms, opacity ease-out 200ms;
905
+ }
906
+ #qlwapp .qlwapp-box.closing .qlwapp-description {
907
+ opacity: 0;
908
+ }
909
  /*# sourceMappingURL=qlwapp.css.map */
assets/css/qlwapp.min.css CHANGED
@@ -1,2 +1,2 @@
1
-
2
  @font-face{font-family:'qlwapp-whatsapp';src:url(data:application/x-font-woff;charset=utf-8;base64,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) format('woff');font-weight:normal;font-style:normal}.qlwapp-whatsapp-icon{font-family:'qlwapp-whatsapp'!important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.qlwapp-whatsapp-icon:before{content:"\e900"}#qlwapp{pointer-events:none;box-sizing:border-box}@media(min-width:430px){#qlwapp{width:430px}}#qlwapp *{box-sizing:border-box}#qlwapp.qlwapp-js-ready{display:block}#qlwapp.qlwapp-hide,#qlwapp.qlwapp-desktop.mobile,#qlwapp.qlwapp-mobile.desktop{display:none}#qlwapp .qlwapp-readonly,#qlwapp.qlwapp-readonly{pointer-events:none!important;opacity:.5!important}#qlwapp .qlwapp-disabled,#qlwapp.qlwapp-disabled{display:none;visibility:hidden}#qlwapp.qlwapp-middle-left,#qlwapp.qlwapp-bottom-left,#qlwapp.qlwapp-middle-right,#qlwapp.qlwapp-bottom-right{position:fixed;z-index:9999999}#qlwapp.qlwapp-middle-left,#qlwapp.qlwapp-bottom-left{right:auto;left:0}#qlwapp.qlwapp-middle-left .qlwapp-toggle .qlwapp-time,#qlwapp.qlwapp-bottom-left .qlwapp-toggle .qlwapp-time{left:0;right:auto}#qlwapp.qlwapp-middle-left.qlwapp-bubble .qlwapp-developer,#qlwapp.qlwapp-bottom-left.qlwapp-bubble .qlwapp-developer,#qlwapp.qlwapp-middle-left.qlwapp-button .qlwapp-developer,#qlwapp.qlwapp-bottom-left.qlwapp-button .qlwapp-developer,#qlwapp.qlwapp-middle-left.qlwapp-bubble .qlwapp-toggle,#qlwapp.qlwapp-bottom-left.qlwapp-bubble .qlwapp-toggle,#qlwapp.qlwapp-middle-left.qlwapp-button .qlwapp-toggle,#qlwapp.qlwapp-bottom-left.qlwapp-button .qlwapp-toggle{margin-left:20px}#qlwapp.qlwapp-middle-left.qlwapp-bubble .qlwapp-toggle .qlwapp-text,#qlwapp.qlwapp-bottom-left.qlwapp-bubble .qlwapp-toggle .qlwapp-text{right:auto;left:60px}#qlwapp.qlwapp-middle-left .qlwapp-box:before,#qlwapp.qlwapp-bottom-left .qlwapp-box:before{right:auto;left:20px}#qlwapp.qlwapp-middle-right,#qlwapp.qlwapp-bottom-right{left:auto;right:0}#qlwapp.qlwapp-middle-right .qlwapp-toggle .qlwapp-time,#qlwapp.qlwapp-bottom-right .qlwapp-toggle .qlwapp-time{left:auto;right:0}#qlwapp.qlwapp-middle-right.qlwapp-bubble .qlwapp-developer,#qlwapp.qlwapp-bottom-right.qlwapp-bubble .qlwapp-developer,#qlwapp.qlwapp-middle-right.qlwapp-button .qlwapp-developer,#qlwapp.qlwapp-bottom-right.qlwapp-button .qlwapp-developer,#qlwapp.qlwapp-middle-right.qlwapp-bubble .qlwapp-toggle,#qlwapp.qlwapp-bottom-right.qlwapp-bubble .qlwapp-toggle,#qlwapp.qlwapp-middle-right.qlwapp-button .qlwapp-toggle,#qlwapp.qlwapp-bottom-right.qlwapp-button .qlwapp-toggle{margin-right:20px}#qlwapp.qlwapp-middle-left,#qlwapp.qlwapp-middle-right{top:40%;bottom:auto}#qlwapp.qlwapp-middle-left .qlwapp-developer,#qlwapp.qlwapp-middle-right .qlwapp-developer{padding:0 24px}#qlwapp.qlwapp-middle-left.qlwapp-button .qlwapp-developer,#qlwapp.qlwapp-middle-left.qlwapp-button .qlwapp-toggle{margin-left:-48px;padding-left:60px}#qlwapp.qlwapp-middle-right.qlwapp-button .qlwapp-developer,#qlwapp.qlwapp-middle-right.qlwapp-button .qlwapp-toggle{margin-right:-48px;padding-right:60px}#qlwapp.qlwapp-bottom-left,#qlwapp.qlwapp-bottom-right{top:auto;bottom:0}#qlwapp.qlwapp-rounded.qlwapp-bubble .qlwapp-toggle{border-radius:50%}#qlwapp.qlwapp-rounded.qlwapp-button .qlwapp-toggle{border-radius:50px}@media(min-width:430px){#qlwapp.qlwapp-rounded .qlwapp-box{border-radius:8px}}#qlwapp.qlwapp-rounded .qlwapp-box .qlwapp-user,#qlwapp.qlwapp-rounded .qlwapp-box .qlwapp-message{border-radius:4px}#qlwapp p:last-child{margin:0}#qlwapp time{opacity:.8;font-style:italic;font-size:10px}#qlwapp .qlwapp-container{display:flex;flex-direction:column}#qlwapp .qlwapp-clearfix:before,#qlwapp .qlwapp-clearfix:after{content:'';display:block;clear:both}#qlwapp .qlwapp-previous,#qlwapp .qlwapp-close{display:block;opacity:.8;font-style:unset;font-size:24px;font-weight:bold;width:24px;height:24px;cursor:pointer;text-align:center;line-height:24px;z-index:1}#qlwapp .qlwapp-previous{width:16px;height:36px;cursor:pointer;text-align:center;line-height:36px;margin-right:auto}#qlwapp .qlwapp-developer{font-size:8px;top:-20px;position:relative}#qlwapp .qlwapp-developer,#qlwapp .qlwapp-toggle{display:inline-flex;align-items:center;justify-content:center;margin-left:auto;margin-right:auto}#qlwapp .qlwapp-toggle{pointer-events:all;cursor:pointer;box-shadow:0 1px 6px 0 rgba(0,0,0,0.06),0 2px 32px 0 rgba(0,0,0,0.16);margin-top:24px;margin-bottom:24px;position:relative;text-decoration:none}#qlwapp .qlwapp-toggle,#qlwapp .qlwapp-toggle:active,#qlwapp .qlwapp-toggle:focus,#qlwapp .qlwapp-toggle:hover{outline:0;text-decoration:none}#qlwapp .qlwapp-toggle .qlwapp-time{position:absolute;bottom:-2em;color:initial;font-size:10px;display:inline-block;top:auto;width:120px}#qlwapp .qlwapp-avatar .qlwapp-avatar-container{overflow:hidden;border-radius:50%;width:inherit;height:inherit}#qlwapp .qlwapp-avatar .qlwapp-avatar-container img{width:100%;height:auto}#qlwapp.qlwapp-bubble .qlwapp-toggle{width:60px;height:60px}#qlwapp.qlwapp-bubble .qlwapp-toggle .qlwapp-icon,#qlwapp.qlwapp-bubble .qlwapp-toggle .qlwapp-close{position:absolute;display:block;pointer-events:none;font-size:24px}#qlwapp.qlwapp-bubble .qlwapp-toggle .qlwapp-text{position:absolute;right:60px;height:60px;margin:0 24px;display:flex;align-items:center;justify-content:flex-end;font-weight:bold;white-space:pre}#qlwapp.qlwapp-button .qlwapp-toggle{height:40px;white-space:nowrap;padding:12px 24px}#qlwapp.qlwapp-button .qlwapp-toggle .qlwapp-icon{margin:0 12px 0 0}#qlwapp.qlwapp-button .qlwapp-toggle .qlwapp-close{display:none}#qlwapp .qlwapp-box{pointer-events:all;padding-bottom:56px;position:fixed;top:auto;bottom:0;left:0;right:0;z-index:99999;box-shadow:0 5px 40px 5px rgba(0,0,0,0.5)}@media(min-width:430px){#qlwapp .qlwapp-box{position:relative;top:auto;bottom:auto;left:auto;right:auto;box-shadow:0 8px 25px -5px rgba(45,62,79,0.15);margin-top:24px;margin-left:24px;margin-right:24px;margin-bottom:12px}#qlwapp .qlwapp-box:before{content:'';position:absolute;bottom:-6px;right:24px;width:13px;height:13px;transform:rotate(45deg)}#qlwapp .qlwapp-box .qlwapp-header{border-top-left-radius:inherit;border-top-right-radius:inherit}#qlwapp .qlwapp-box .qlwapp-footer,#qlwapp .qlwapp-box .qlwapp-response{border-bottom-left-radius:inherit;border-bottom-right-radius:inherit}}#qlwapp .qlwapp-box .qlwapp-header{position:relative;overflow:hidden}#qlwapp .qlwapp-box .qlwapp-header:before{content:'';position:absolute;top:0;bottom:0;left:0;right:0;background:linear-gradient(135deg,transparent 0,rgba(0,0,0,0.3) 100%)}#qlwapp .qlwapp-box .qlwapp-header .qlwapp-close{position:absolute;top:12px;right:12px}@media(min-width:430px){#qlwapp .qlwapp-box .qlwapp-header .qlwapp-close{position:absolute;top:7px;right:7px;font-size:16px}}#qlwapp .qlwapp-box .qlwapp-header .qlwapp-description{position:relative}#qlwapp .qlwapp-box .qlwapp-description,#qlwapp .qlwapp-box .qlwapp-contact{padding:24px 36px;height:100%}#qlwapp .qlwapp-box .qlwapp-description p,#qlwapp .qlwapp-box .qlwapp-description h3{color:inherit;font-family:inherit;margin:0}#qlwapp .qlwapp-box .qlwapp-description h3{margin:0 0 .25em 0}#qlwapp .qlwapp-box .qlwapp-contact{display:flex;justify-content:flex-end;align-items:center;text-align:right}#qlwapp .qlwapp-box .qlwapp-contact .qlwapp-previous{position:relative;left:-16px}#qlwapp .qlwapp-box .qlwapp-contact .qlwapp-previous>i{line-height:36px}#qlwapp .qlwapp-box .qlwapp-contact .qlwapp-avatar{width:42px;height:42px}#qlwapp .qlwapp-box .qlwapp-contact .qlwapp-label,#qlwapp .qlwapp-box .qlwapp-contact .qlwapp-name{color:inherit}#qlwapp .qlwapp-box .qlwapp-account{color:inherit;padding:16px 36px;display:flex;align-items:center;overflow:hidden;position:relative;cursor:pointer;width:100%;text-decoration:none}#qlwapp .qlwapp-box .qlwapp-account:only-of-type{padding-top:36px;padding-bottom:36px}#qlwapp .qlwapp-box .qlwapp-info{padding:0 16px}#qlwapp .qlwapp-box .qlwapp-avatar{position:relative;width:62px;height:62px}#qlwapp .qlwapp-box .qlwapp-avatar:after{content:'';display:block;width:15px;height:15px;position:absolute;bottom:2px;right:2px;background-image:url(data:image/png;base64,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);background-color:transparent;background-repeat:no-repeat;background-position:center center;background-size:cover;z-index:4}#qlwapp .qlwapp-box .qlwapp-time,#qlwapp .qlwapp-box .qlwapp-label,#qlwapp .qlwapp-box .qlwapp-offline-text{font-size:12px;line-height:1.5em;opacity:.6;display:block}#qlwapp .qlwapp-box .qlwapp-time{font-size:11px;font-style:italic}#qlwapp .qlwapp-box .qlwapp-name{display:block;font-weight:bold;line-height:1.5em}#qlwapp .qlwapp-box .qlwapp-body{overflow-x:hidden;overflow-y:auto}#qlwapp .qlwapp-box .qlwapp-body .qlwapp-carousel{max-height:470px;min-height:134px}#qlwapp .qlwapp-box .qlwapp-chat{display:flex;flex-direction:column;overflow:hidden}#qlwapp .qlwapp-box .qlwapp-user,#qlwapp .qlwapp-box .qlwapp-message{padding:16px 24px;margin:36px;position:relative;word-wrap:break-word;width:calc(100% - 36px*2)}#qlwapp .qlwapp-box .qlwapp-user:before,#qlwapp .qlwapp-box .qlwapp-message:before{content:'';position:absolute;top:-6px;right:24px;width:13px;height:13px;transform:rotate(45deg)}#qlwapp .qlwapp-box .qlwapp-user{width:auto;max-width:75%;align-self:flex-start;justify-self:flex-end;margin-top:0}#qlwapp .qlwapp-box .qlwapp-user:before{top:auto;bottom:-6px;left:24px}#qlwapp .qlwapp-box .qlwapp-padding{padding-bottom:56px}#qlwapp .qlwapp-box .qlwapp-footer,#qlwapp .qlwapp-box .qlwapp-response{position:absolute;bottom:0;left:0;right:0;height:auto;width:100%}#qlwapp .qlwapp-box .qlwapp-footer,#qlwapp .qlwapp-box .qlwapp-response,#qlwapp .qlwapp-box .qlwapp-footer pre,#qlwapp .qlwapp-box .qlwapp-response pre,#qlwapp .qlwapp-box .qlwapp-footer textarea,#qlwapp .qlwapp-box .qlwapp-response textarea{max-height:160px}#qlwapp .qlwapp-box .qlwapp-footer pre,#qlwapp .qlwapp-box .qlwapp-response pre,#qlwapp .qlwapp-box .qlwapp-footer textarea,#qlwapp .qlwapp-box .qlwapp-response textarea{color:inherit;background-color:inherit}#qlwapp .qlwapp-box .qlwapp-footer:before,#qlwapp .qlwapp-box .qlwapp-response:before{pointer-events:none;position:absolute;content:'';height:59px;top:-59px;background-image:linear-gradient(transparent,rgba(0,0,0,0.05));left:0;right:0}#qlwapp .qlwapp-box .qlwapp-footer{min-height:56px;display:flex;align-items:center;justify-content:center;text-align:center;font-size:12px;padding:12px 36px}#qlwapp .qlwapp-box .qlwapp-footer p{padding:0;font-size:inherit}#qlwapp .qlwapp-box .qlwapp-footer p:last-child{margin-bottom:0}#qlwapp .qlwapp-box .qlwapp-response,#qlwapp .qlwapp-box .qlwapp-response pre,#qlwapp .qlwapp-box .qlwapp-response textarea,#qlwapp .qlwapp-box .qlwapp-response .qlwapp-buttons{min-height:56px}#qlwapp .qlwapp-box .qlwapp-response pre,#qlwapp .qlwapp-box .qlwapp-response textarea{width:100%;height:100%;resize:none;border:0;padding:18px 56px 18px 36px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-weight:normal;line-height:20px;white-space:pre-wrap;word-wrap:break-word;border-radius:inherit;margin:0}#qlwapp .qlwapp-box .qlwapp-response pre{visibility:hidden}#qlwapp .qlwapp-box .qlwapp-response textarea{position:absolute;bottom:0;left:0}#qlwapp .qlwapp-box .qlwapp-response textarea:focus{outline:0}#qlwapp .qlwapp-box .qlwapp-response .qlwapp-buttons{position:absolute;top:0;right:21px;display:flex;align-items:center}#qlwapp .qlwapp-box .qlwapp-response .qlwapp-buttons.active>i{display:none}#qlwapp .qlwapp-box .qlwapp-response .qlwapp-buttons.active>i.qlwf-emoji{display:block}#qlwapp .qlwapp-box .qlwapp-response .qlwapp-buttons>i{opacity:.4}#qlwapp .qlwapp-box .qlwapp-response .qlwapp-buttons>i,#qlwapp .qlwapp-box .qlwapp-response .qlwapp-buttons>a{cursor:pointer;margin:0 0 0 10px;display:inherit;font-size:18px;line-height:24px}#qlwapp .qlwapp-previous,#qlwapp .qlwapp-close,#qlwapp .qlwapp-toggle,#qlwapp .qlwapp-box .qlwapp-header,#qlwapp .qlwapp-box .qlwapp-contact,#qlwapp .qlwapp-box .qlwapp-user{color:#fff}#qlwapp.qlwapp-bubble .qlwapp-toggle .qlwapp-text{color:#303030}#qlwapp .qlwapp-box,#qlwapp .qlwapp-box:before{background-color:#fff}#qlwapp .qlwapp-box .qlwapp-account{background-color:#fff}#qlwapp .qlwapp-box .qlwapp-account:not(:first-child){border-top:1px solid #f5f5f5}#qlwapp .qlwapp-box .qlwapp-avatar .qlwapp-avatar-container{background-color:#eee}#qlwapp .qlwapp-box .qlwapp-message,#qlwapp .qlwapp-box .qlwapp-message:before{background-color:#eee}#qlwapp .qlwapp-box .qlwapp-footer,#qlwapp .qlwapp-box .qlwapp-response{color:#303030;background-color:#fff;border-top:1px solid #e6e6e6}#qlwapp .qlwapp-toggle,#qlwapp .qlwapp-box .qlwapp-header,#qlwapp .qlwapp-box .qlwapp-user,#qlwapp .qlwapp-box .qlwapp-user:before{background-color:#303030}#qlwapp{display:none}#qlwapp.qlwapp-show .qlwapp-box{visibility:visible;opacity:1;transform:translateY(0) scale(1);display:block}#qlwapp.qlwapp-transition .qlwapp-box{visibility:visible;display:block}#qlwapp.qlwapp-bubble.qlwapp-show .qlwapp-toggle .qlwapp-icon{transform:scale(0,0);opacity:0}#qlwapp.qlwapp-bubble.qlwapp-show .qlwapp-toggle .qlwapp-close{transform:scale(1,1);opacity:1}#qlwapp.qlwapp-bubble .qlwapp-toggle .qlwapp-close{transform:scale(0,0);opacity:0}#qlwapp.qlwapp-bubble .qlwapp-toggle .qlwapp-icon{transform:scale(1,1);opacity:1}#qlwapp.qlwapp-bubble .qlwapp-toggle .qlwapp-icon,#qlwapp.qlwapp-bubble .qlwapp-toggle .qlwapp-close{transition:transform 300ms cubic-bezier(0.215,0.61,0.355,1),opacity 300ms ease-in}#qlwapp .qlwapp-box{display:none;opacity:0;visibility:hidden;transform:translateY(50px);transition:transform 300ms cubic-bezier(0.215,0.61,0.355,1),opacity 300ms ease-in}@media(min-width:430px){#qlwapp .qlwapp-box{transform:translateY(50px) scale(0.9)}}#qlwapp .qlwapp-box .qlwapp-carousel{display:flex;width:200%;height:100%}#qlwapp .qlwapp-box .qlwapp-carousel .qlwapp-slide{width:50%;transition:max-height 500ms cubic-bezier(0.215,0.61,0.355,1) 1000ms,transform 300ms cubic-bezier(0.215,0.61,0.355,1) 500ms,opacity 500ms ease-in 500ms;height:100%;overflow:hidden}#qlwapp .qlwapp-box .qlwapp-header .qlwapp-slide{max-height:300px}#qlwapp .qlwapp-box .qlwapp-header .qlwapp-name,#qlwapp .qlwapp-box .qlwapp-header .qlwapp-label,#qlwapp .qlwapp-box .qlwapp-header .qlwapp-avatar{opacity:0;transition:transform cubic-bezier(0.215,0.61,0.355,1) .3s,opacity ease-in .3s}#qlwapp .qlwapp-box .qlwapp-header .qlwapp-name,#qlwapp .qlwapp-box .qlwapp-header .qlwapp-label{transform:translateX(56px)}#qlwapp .qlwapp-box .qlwapp-header .qlwapp-avatar{transform:scale(0.5)}#qlwapp .qlwapp-box .qlwapp-header .qlwapp-name{transition-delay:800ms}#qlwapp .qlwapp-box .qlwapp-header .qlwapp-label{transition-delay:850ms}#qlwapp .qlwapp-box .qlwapp-header .qlwapp-avatar{transition-delay:900ms}#qlwapp .qlwapp-box .qlwapp-footer,#qlwapp .qlwapp-box .qlwapp-response,#qlwapp .qlwapp-box .qlwapp-previous,#qlwapp .qlwapp-box .qlwapp-message,#qlwapp .qlwapp-box .qlwapp-user{transition:transform cubic-bezier(0.215,0.61,0.355,1) 600ms,opacity ease-in 200ms}#qlwapp .qlwapp-box .qlwapp-response,#qlwapp .qlwapp-box .qlwapp-previous,#qlwapp .qlwapp-box .qlwapp-user{opacity:0}#qlwapp .qlwapp-box .qlwapp-response{pointer-events:none}#qlwapp .qlwapp-box .qlwapp-previous{transform:translateX(56px)}#qlwapp .qlwapp-box .qlwapp-user{transform:translateY(56px)}#qlwapp .qlwapp-box .qlwapp-close{transition:opacity 300ms cubic-bezier(0.215,0.61,0.355,1)}#qlwapp .qlwapp-box .qlwapp-description{transition:transform 600ms cubic-bezier(0.215,0.61,0.355,1),opacity 900ms cubic-bezier(0.215,0.61,0.355,1)}#qlwapp .qlwapp-box .qlwapp-account{transition:transform 600ms cubic-bezier(0.215,0.61,0.355,1),opacity 150ms ease-in}#qlwapp .qlwapp-box .qlwapp-previous{transition-delay:800ms}#qlwapp .qlwapp-box .qlwapp-message{transition-delay:900ms}#qlwapp .qlwapp-box .qlwapp-close,#qlwapp .qlwapp-box .qlwapp-description{transition-delay:900ms}#qlwapp .qlwapp-box .qlwapp-user{transition-delay:200ms}#qlwapp .qlwapp-box .qlwapp-account:nth-of-type(6){transition-delay:600ms}#qlwapp .qlwapp-box .qlwapp-account:nth-of-type(5){transition-delay:500ms}#qlwapp .qlwapp-box .qlwapp-account:nth-of-type(4){transition-delay:400ms}#qlwapp .qlwapp-box .qlwapp-account:nth-of-type(3){transition-delay:300ms}#qlwapp .qlwapp-box .qlwapp-account:nth-of-type(2){transition-delay:200ms}#qlwapp .qlwapp-box .qlwapp-account:nth-of-type(1){transition-delay:100ms}#qlwapp .qlwapp-box .qlwapp-slide .qlwapp-message{opacity:0;transform:translateY(-56px)}#qlwapp .qlwapp-box .qlwapp-slide .qlwapp-box .qlwapp-account:hover{background-color:#fafafa}#qlwapp .qlwapp-box.response .qlwapp-carousel .qlwapp-slide{transform:translateX(-100%)}#qlwapp .qlwapp-box.response .qlwapp-body .qlwapp-carousel{overflow:hidden;max-height:134px!important;min-height:122px}#qlwapp .qlwapp-box.response .qlwapp-close{transition-delay:0ms}#qlwapp .qlwapp-box.response .qlwapp-close,#qlwapp .qlwapp-box.response .qlwapp-footer,#qlwapp .qlwapp-box.response .qlwapp-description,#qlwapp .qlwapp-box.response .qlwapp-account{opacity:0}#qlwapp .qlwapp-box.response .qlwapp-account{transform:translateY(-33.333%);border-top-color:transparent!important}#qlwapp .qlwapp-box.response .qlwapp-user{display:block}#qlwapp .qlwapp-box.response .qlwapp-message,#qlwapp .qlwapp-box.response .qlwapp-previous,#qlwapp .qlwapp-box.response .qlwapp-response{opacity:1}#qlwapp .qlwapp-box.response .qlwapp-response{pointer-events:all}#qlwapp .qlwapp-box.response .qlwapp-message,#qlwapp .qlwapp-box.response .qlwapp-previous{transform:translate(0)}#qlwapp .qlwapp-box.response .qlwapp-header .qlwapp-slide{max-height:84px}#qlwapp .qlwapp-box.response .qlwapp-header .qlwapp-name,#qlwapp .qlwapp-box.response .qlwapp-header .qlwapp-avatar{opacity:1}#qlwapp .qlwapp-box.response .qlwapp-header .qlwapp-label{opacity:.5}#qlwapp .qlwapp-box.response .qlwapp-header .qlwapp-name,#qlwapp .qlwapp-box.response .qlwapp-header .qlwapp-label{transform:translateX(0)}#qlwapp .qlwapp-box.response .qlwapp-header .qlwapp-avatar{transform:scale(1)}#qlwapp .qlwapp-box.response.opening .qlwapp-footer,#qlwapp .qlwapp-box.response.opening .qlwapp-response,#qlwapp .qlwapp-box.response.opening .qlwapp-close,#qlwapp .qlwapp-box.response.opening .qlwapp-previous,#qlwapp .qlwapp-box.response.opening .qlwapp-description,#qlwapp .qlwapp-box.response.opening .qlwapp-header .qlwapp-name,#qlwapp .qlwapp-box.response.opening .qlwapp-header .qlwapp-label{visibility:visible}#qlwapp .qlwapp-box.texting .qlwapp-body{overflow-y:auto}#qlwapp .qlwapp-box.texting .qlwapp-user{opacity:1;transform:translate(0)}#qlwapp .qlwapp-box.closing .qlwapp-previous{transition-delay:0ms;transform:translateX(-24px);opacity:0;transition:transform cubic-bezier(0.215,0.61,0.355,1) 300ms,opacity ease-out 200ms}#qlwapp .qlwapp-box.closing .qlwapp-description{opacity:0}
1
+
2
  @font-face{font-family:'qlwapp-whatsapp';src:url(data:application/x-font-woff;charset=utf-8;base64,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) format('woff');font-weight:normal;font-style:normal}.qlwapp-whatsapp-icon{font-family:'qlwapp-whatsapp'!important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.qlwapp-whatsapp-icon:before{content:"\e900"}#qlwapp{pointer-events:none;box-sizing:border-box}@media(min-width:430px){#qlwapp{width:430px}}#qlwapp *{box-sizing:border-box}#qlwapp.qlwapp-js-ready{display:block}#qlwapp.qlwapp-hide,#qlwapp.qlwapp-desktop.mobile,#qlwapp.qlwapp-mobile.desktop{display:none}#qlwapp .qlwapp-readonly,#qlwapp.qlwapp-readonly{pointer-events:none!important;opacity:.5!important}#qlwapp .qlwapp-disabled,#qlwapp.qlwapp-disabled{display:none;visibility:hidden}#qlwapp.qlwapp-middle-left,#qlwapp.qlwapp-bottom-left,#qlwapp.qlwapp-middle-right,#qlwapp.qlwapp-bottom-right{position:fixed;z-index:9999999}#qlwapp.qlwapp-middle-left,#qlwapp.qlwapp-bottom-left{right:auto;left:0}#qlwapp.qlwapp-middle-left .qlwapp-toggle .qlwapp-time,#qlwapp.qlwapp-bottom-left .qlwapp-toggle .qlwapp-time{left:0;right:auto}#qlwapp.qlwapp-middle-left.qlwapp-bubble .qlwapp-developer,#qlwapp.qlwapp-bottom-left.qlwapp-bubble .qlwapp-developer,#qlwapp.qlwapp-middle-left.qlwapp-button .qlwapp-developer,#qlwapp.qlwapp-bottom-left.qlwapp-button .qlwapp-developer,#qlwapp.qlwapp-middle-left.qlwapp-bubble .qlwapp-toggle,#qlwapp.qlwapp-bottom-left.qlwapp-bubble .qlwapp-toggle,#qlwapp.qlwapp-middle-left.qlwapp-button .qlwapp-toggle,#qlwapp.qlwapp-bottom-left.qlwapp-button .qlwapp-toggle{margin-left:20px}#qlwapp.qlwapp-middle-left.qlwapp-bubble .qlwapp-toggle .qlwapp-text,#qlwapp.qlwapp-bottom-left.qlwapp-bubble .qlwapp-toggle .qlwapp-text{right:auto;left:60px}#qlwapp.qlwapp-middle-left .qlwapp-box:before,#qlwapp.qlwapp-bottom-left .qlwapp-box:before{right:auto;left:20px}#qlwapp.qlwapp-middle-right,#qlwapp.qlwapp-bottom-right{left:auto;right:0}#qlwapp.qlwapp-middle-right .qlwapp-toggle .qlwapp-time,#qlwapp.qlwapp-bottom-right .qlwapp-toggle .qlwapp-time{left:auto;right:0}#qlwapp.qlwapp-middle-right.qlwapp-bubble .qlwapp-developer,#qlwapp.qlwapp-bottom-right.qlwapp-bubble .qlwapp-developer,#qlwapp.qlwapp-middle-right.qlwapp-button .qlwapp-developer,#qlwapp.qlwapp-bottom-right.qlwapp-button .qlwapp-developer,#qlwapp.qlwapp-middle-right.qlwapp-bubble .qlwapp-toggle,#qlwapp.qlwapp-bottom-right.qlwapp-bubble .qlwapp-toggle,#qlwapp.qlwapp-middle-right.qlwapp-button .qlwapp-toggle,#qlwapp.qlwapp-bottom-right.qlwapp-button .qlwapp-toggle{margin-right:20px}#qlwapp.qlwapp-middle-left,#qlwapp.qlwapp-middle-right{top:40%;bottom:auto}#qlwapp.qlwapp-middle-left .qlwapp-developer,#qlwapp.qlwapp-middle-right .qlwapp-developer{padding:0 24px}#qlwapp.qlwapp-middle-left.qlwapp-button .qlwapp-developer,#qlwapp.qlwapp-middle-left.qlwapp-button .qlwapp-toggle{margin-left:-48px;padding-left:60px}#qlwapp.qlwapp-middle-right.qlwapp-button .qlwapp-developer,#qlwapp.qlwapp-middle-right.qlwapp-button .qlwapp-toggle{margin-right:-48px;padding-right:60px}#qlwapp.qlwapp-bottom-left,#qlwapp.qlwapp-bottom-right{top:auto;bottom:0}#qlwapp.qlwapp-rounded.qlwapp-bubble .qlwapp-toggle{border-radius:50%}#qlwapp.qlwapp-rounded.qlwapp-button .qlwapp-toggle{border-radius:50px}@media(min-width:430px){#qlwapp.qlwapp-rounded .qlwapp-box{border-radius:8px}}#qlwapp.qlwapp-rounded .qlwapp-box .qlwapp-user,#qlwapp.qlwapp-rounded .qlwapp-box .qlwapp-message{border-radius:4px}#qlwapp p:last-child{margin:0}#qlwapp time{opacity:.8;font-style:italic;font-size:10px}#qlwapp .qlwapp-container{display:flex;flex-direction:column}#qlwapp .qlwapp-clearfix:before,#qlwapp .qlwapp-clearfix:after{content:'';display:block;clear:both}#qlwapp .qlwapp-previous,#qlwapp .qlwapp-close{display:block;opacity:.8;font-style:unset;font-size:24px;font-weight:bold;width:24px;height:24px;cursor:pointer;text-align:center;line-height:24px;z-index:1}#qlwapp .qlwapp-previous{width:16px;height:36px;cursor:pointer;text-align:center;line-height:36px;margin-right:auto}#qlwapp .qlwapp-developer{font-size:8px;top:-20px;position:relative}#qlwapp .qlwapp-developer,#qlwapp .qlwapp-toggle{display:inline-flex;align-items:center;justify-content:center;margin-left:auto;margin-right:auto}#qlwapp .qlwapp-toggle{pointer-events:all;cursor:pointer;box-shadow:0 1px 6px 0 rgba(0,0,0,0.06),0 2px 32px 0 rgba(0,0,0,0.16);margin-top:24px;margin-bottom:24px;position:relative;text-decoration:none}#qlwapp .qlwapp-toggle,#qlwapp .qlwapp-toggle:active,#qlwapp .qlwapp-toggle:focus,#qlwapp .qlwapp-toggle:hover{outline:0;text-decoration:none}#qlwapp .qlwapp-toggle .qlwapp-time{position:absolute;bottom:-2em;color:initial;font-size:10px;display:inline-block;top:auto;width:120px}#qlwapp .qlwapp-avatar .qlwapp-avatar-container{overflow:hidden;border-radius:50%;width:inherit;height:inherit}#qlwapp .qlwapp-avatar .qlwapp-avatar-container img{width:100%;height:auto}#qlwapp.qlwapp-bubble .qlwapp-toggle{width:60px;height:60px}#qlwapp.qlwapp-bubble .qlwapp-toggle .qlwapp-icon,#qlwapp.qlwapp-bubble .qlwapp-toggle .qlwapp-close{position:absolute;display:block;pointer-events:none;font-size:24px}#qlwapp.qlwapp-bubble .qlwapp-toggle .qlwapp-text{position:absolute;right:60px;height:60px;margin:0 24px;display:flex;align-items:center;justify-content:flex-end;font-weight:bold;white-space:pre}#qlwapp.qlwapp-button .qlwapp-toggle{height:40px;white-space:nowrap;padding:12px 24px}#qlwapp.qlwapp-button .qlwapp-toggle .qlwapp-icon{margin:0 12px 0 0}#qlwapp.qlwapp-button .qlwapp-toggle .qlwapp-close{display:none}#qlwapp .qlwapp-box{pointer-events:all;padding-bottom:56px;position:fixed;top:auto;bottom:0;left:0;right:0;z-index:99999;box-shadow:0 5px 40px 5px rgba(0,0,0,0.5)}@media(min-width:430px){#qlwapp .qlwapp-box{position:relative;top:auto;bottom:auto;left:auto;right:auto;box-shadow:0 8px 25px -5px rgba(45,62,79,0.15);margin-top:24px;margin-left:24px;margin-right:24px;margin-bottom:12px}#qlwapp .qlwapp-box:before{content:'';position:absolute;bottom:-6px;right:24px;width:13px;height:13px;transform:rotate(45deg)}#qlwapp .qlwapp-box .qlwapp-header{border-top-left-radius:inherit;border-top-right-radius:inherit}#qlwapp .qlwapp-box .qlwapp-footer,#qlwapp .qlwapp-box .qlwapp-response{border-bottom-left-radius:inherit;border-bottom-right-radius:inherit}}#qlwapp .qlwapp-box .qlwapp-header{position:relative;overflow:hidden}#qlwapp .qlwapp-box .qlwapp-header:before{content:'';position:absolute;top:0;bottom:0;left:0;right:0;background:linear-gradient(135deg,transparent 0,rgba(0,0,0,0.3) 100%)}#qlwapp .qlwapp-box .qlwapp-header .qlwapp-close{position:absolute;top:12px;right:12px}@media(min-width:430px){#qlwapp .qlwapp-box .qlwapp-header .qlwapp-close{position:absolute;top:7px;right:7px;font-size:16px}}#qlwapp .qlwapp-box .qlwapp-header .qlwapp-description{position:relative}#qlwapp .qlwapp-box .qlwapp-description,#qlwapp .qlwapp-box .qlwapp-contact{padding:24px 36px;height:100%}#qlwapp .qlwapp-box .qlwapp-description p,#qlwapp .qlwapp-box .qlwapp-description h3{color:inherit;font-family:inherit;margin:0}#qlwapp .qlwapp-box .qlwapp-description h3{margin:0 0 .25em 0}#qlwapp .qlwapp-box .qlwapp-contact{display:flex;justify-content:flex-end;align-items:center;text-align:right}#qlwapp .qlwapp-box .qlwapp-contact .qlwapp-previous{position:relative;left:-16px}#qlwapp .qlwapp-box .qlwapp-contact .qlwapp-previous>i{line-height:36px}#qlwapp .qlwapp-box .qlwapp-contact .qlwapp-avatar{width:42px;height:42px}#qlwapp .qlwapp-box .qlwapp-contact .qlwapp-label,#qlwapp .qlwapp-box .qlwapp-contact .qlwapp-name{color:inherit}#qlwapp .qlwapp-box .qlwapp-account{color:inherit;padding:16px 36px;display:flex;align-items:center;overflow:hidden;position:relative;cursor:pointer;width:100%;text-decoration:none}#qlwapp .qlwapp-box .qlwapp-account:only-of-type{padding-top:36px;padding-bottom:36px}#qlwapp .qlwapp-box .qlwapp-info{padding:0 16px}#qlwapp .qlwapp-box .qlwapp-avatar{position:relative;width:62px;height:62px}#qlwapp .qlwapp-box .qlwapp-avatar:after{content:'';display:block;width:15px;height:15px;position:absolute;bottom:2px;right:2px;background-image:url(data:image/png;base64,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);background-color:transparent;background-repeat:no-repeat;background-position:center center;background-size:cover;z-index:4}#qlwapp .qlwapp-box .qlwapp-time,#qlwapp .qlwapp-box .qlwapp-label,#qlwapp .qlwapp-box .qlwapp-offline-text{font-size:12px;line-height:1.5em;opacity:.6;display:block}#qlwapp .qlwapp-box .qlwapp-time{font-size:11px;font-style:italic}#qlwapp .qlwapp-box .qlwapp-name{display:block;font-weight:bold;line-height:1.5em}#qlwapp .qlwapp-box .qlwapp-body{overflow-x:hidden;overflow-y:auto}#qlwapp .qlwapp-box .qlwapp-body .qlwapp-carousel{max-height:470px;min-height:134px}#qlwapp .qlwapp-box .qlwapp-chat{display:flex;flex-direction:column;overflow:hidden}#qlwapp .qlwapp-box .qlwapp-user,#qlwapp .qlwapp-box .qlwapp-message{padding:16px 24px;margin:36px;position:relative;word-wrap:break-word;width:calc(100% - 36px*2)}#qlwapp .qlwapp-box .qlwapp-user:before,#qlwapp .qlwapp-box .qlwapp-message:before{content:'';position:absolute;top:-6px;right:24px;width:13px;height:13px;transform:rotate(45deg)}#qlwapp .qlwapp-box .qlwapp-user{width:auto;max-width:75%;align-self:flex-start;justify-self:flex-end;margin-top:0}#qlwapp .qlwapp-box .qlwapp-user:before{top:auto;bottom:-6px;left:24px}#qlwapp .qlwapp-box .qlwapp-padding{padding-bottom:56px}#qlwapp .qlwapp-box .qlwapp-footer,#qlwapp .qlwapp-box .qlwapp-response{position:absolute;bottom:0;left:0;right:0;height:auto;width:100%}#qlwapp .qlwapp-box .qlwapp-footer,#qlwapp .qlwapp-box .qlwapp-response,#qlwapp .qlwapp-box .qlwapp-footer pre,#qlwapp .qlwapp-box .qlwapp-response pre,#qlwapp .qlwapp-box .qlwapp-footer textarea,#qlwapp .qlwapp-box .qlwapp-response textarea{max-height:160px}#qlwapp .qlwapp-box .qlwapp-footer pre,#qlwapp .qlwapp-box .qlwapp-response pre,#qlwapp .qlwapp-box .qlwapp-footer textarea,#qlwapp .qlwapp-box .qlwapp-response textarea{color:inherit;background-color:inherit}#qlwapp .qlwapp-box .qlwapp-footer:before,#qlwapp .qlwapp-box .qlwapp-response:before{pointer-events:none;position:absolute;content:'';height:59px;top:-59px;background-image:linear-gradient(transparent,rgba(0,0,0,0.05));left:0;right:0}#qlwapp .qlwapp-box .qlwapp-footer{min-height:56px;display:flex;align-items:center;justify-content:center;text-align:center;font-size:12px;padding:12px 36px}#qlwapp .qlwapp-box .qlwapp-footer p{padding:0;font-size:inherit}#qlwapp .qlwapp-box .qlwapp-footer p:last-child{margin-bottom:0}#qlwapp .qlwapp-box .qlwapp-response,#qlwapp .qlwapp-box .qlwapp-response pre,#qlwapp .qlwapp-box .qlwapp-response textarea,#qlwapp .qlwapp-box .qlwapp-response .qlwapp-buttons{min-height:56px}#qlwapp .qlwapp-box .qlwapp-response pre,#qlwapp .qlwapp-box .qlwapp-response textarea{width:100%;height:100%;resize:none;border:0;padding:18px 56px 18px 36px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-weight:normal;line-height:20px;white-space:pre-wrap;word-wrap:break-word;border-radius:inherit;margin:0}#qlwapp .qlwapp-box .qlwapp-response pre{visibility:hidden}#qlwapp .qlwapp-box .qlwapp-response textarea{position:absolute;bottom:0;left:0}#qlwapp .qlwapp-box .qlwapp-response textarea:focus{outline:0}#qlwapp .qlwapp-box .qlwapp-response .qlwapp-buttons{position:absolute;top:0;right:21px;display:flex;align-items:center}#qlwapp .qlwapp-box .qlwapp-response .qlwapp-buttons.active>i{display:none}#qlwapp .qlwapp-box .qlwapp-response .qlwapp-buttons.active>i.qlwf-emoji{display:block}#qlwapp .qlwapp-box .qlwapp-response .qlwapp-buttons>i{opacity:.4}#qlwapp .qlwapp-box .qlwapp-response .qlwapp-buttons>i,#qlwapp .qlwapp-box .qlwapp-response .qlwapp-buttons>a{cursor:pointer;margin:0 0 0 10px;display:inherit;font-size:18px;line-height:24px}#qlwapp .qlwapp-previous,#qlwapp .qlwapp-close,#qlwapp .qlwapp-toggle,#qlwapp .qlwapp-box .qlwapp-header,#qlwapp .qlwapp-box .qlwapp-contact,#qlwapp .qlwapp-box .qlwapp-user{color:#fff}#qlwapp.qlwapp-bubble .qlwapp-toggle .qlwapp-text{color:#303030}#qlwapp .qlwapp-box,#qlwapp .qlwapp-box:before{background-color:#fff}#qlwapp .qlwapp-box .qlwapp-account{background-color:#fff}#qlwapp .qlwapp-box .qlwapp-account:not(:first-child){border-top:1px solid #f5f5f5}#qlwapp .qlwapp-box .qlwapp-avatar .qlwapp-avatar-container{background-color:#eee}#qlwapp .qlwapp-box .qlwapp-message,#qlwapp .qlwapp-box .qlwapp-message:before{background-color:#eee}#qlwapp .qlwapp-box .qlwapp-footer,#qlwapp .qlwapp-box .qlwapp-response{color:#303030;background-color:#fff;border-top:1px solid #e6e6e6}#qlwapp .qlwapp-toggle,#qlwapp .qlwapp-box .qlwapp-header,#qlwapp .qlwapp-box .qlwapp-user,#qlwapp .qlwapp-box .qlwapp-user:before{background-color:#303030}#qlwapp{display:none}#qlwapp.qlwapp-show .qlwapp-box{visibility:visible;opacity:1;transform:translateY(0) scale(1);display:block}#qlwapp.qlwapp-transition .qlwapp-box{visibility:visible;display:block}#qlwapp.qlwapp-bubble.qlwapp-show .qlwapp-toggle .qlwapp-icon{transform:scale(0,0);opacity:0}#qlwapp.qlwapp-bubble.qlwapp-show .qlwapp-toggle .qlwapp-close{transform:scale(1,1);opacity:1}#qlwapp.qlwapp-bubble .qlwapp-toggle .qlwapp-close{transform:scale(0,0);opacity:0}#qlwapp.qlwapp-bubble .qlwapp-toggle .qlwapp-icon{transform:scale(1,1);opacity:1}#qlwapp.qlwapp-bubble .qlwapp-toggle .qlwapp-icon,#qlwapp.qlwapp-bubble .qlwapp-toggle .qlwapp-close{transition:transform 300ms cubic-bezier(0.215,0.61,0.355,1),opacity 300ms ease-in}#qlwapp .qlwapp-box{display:none;opacity:0;visibility:hidden;transform:translateY(50px);transition:transform 300ms cubic-bezier(0.215,0.61,0.355,1),opacity 300ms ease-in}@media(min-width:430px){#qlwapp .qlwapp-box{transform:translateY(50px) scale(0.9)}}#qlwapp .qlwapp-box .qlwapp-carousel{display:flex;width:200%;height:100%}#qlwapp .qlwapp-box .qlwapp-carousel .qlwapp-slide{width:50%;transition:max-height 500ms cubic-bezier(0.215,0.61,0.355,1) 1000ms,transform 300ms cubic-bezier(0.215,0.61,0.355,1) 500ms,opacity 500ms ease-in 500ms;height:100%;overflow:hidden}#qlwapp .qlwapp-box .qlwapp-header .qlwapp-slide{max-height:300px}#qlwapp .qlwapp-box .qlwapp-header .qlwapp-name,#qlwapp .qlwapp-box .qlwapp-header .qlwapp-label,#qlwapp .qlwapp-box .qlwapp-header .qlwapp-avatar{opacity:0;transition:transform cubic-bezier(0.215,0.61,0.355,1) .3s,opacity ease-in .3s}#qlwapp .qlwapp-box .qlwapp-header .qlwapp-name,#qlwapp .qlwapp-box .qlwapp-header .qlwapp-label{transform:translateX(56px)}#qlwapp .qlwapp-box .qlwapp-header .qlwapp-avatar{transform:scale(0.5)}#qlwapp .qlwapp-box .qlwapp-header .qlwapp-name{transition-delay:800ms}#qlwapp .qlwapp-box .qlwapp-header .qlwapp-label{transition-delay:850ms}#qlwapp .qlwapp-box .qlwapp-header .qlwapp-avatar{transition-delay:900ms}#qlwapp .qlwapp-box .qlwapp-footer,#qlwapp .qlwapp-box .qlwapp-response,#qlwapp .qlwapp-box .qlwapp-previous,#qlwapp .qlwapp-box .qlwapp-message,#qlwapp .qlwapp-box .qlwapp-user{transition:transform cubic-bezier(0.215,0.61,0.355,1) 600ms,opacity ease-in 200ms}#qlwapp .qlwapp-box .qlwapp-response,#qlwapp .qlwapp-box .qlwapp-previous,#qlwapp .qlwapp-box .qlwapp-user{opacity:0}#qlwapp .qlwapp-box .qlwapp-response{pointer-events:none}#qlwapp .qlwapp-box .qlwapp-previous{transform:translateX(56px)}#qlwapp .qlwapp-box .qlwapp-user{transform:translateY(56px)}#qlwapp .qlwapp-box .qlwapp-close{transition:opacity 300ms cubic-bezier(0.215,0.61,0.355,1)}#qlwapp .qlwapp-box .qlwapp-description{transition:transform 600ms cubic-bezier(0.215,0.61,0.355,1),opacity 900ms cubic-bezier(0.215,0.61,0.355,1)}#qlwapp .qlwapp-box .qlwapp-account{transition:transform 600ms cubic-bezier(0.215,0.61,0.355,1),opacity 150ms ease-in}#qlwapp .qlwapp-box .qlwapp-previous{transition-delay:800ms}#qlwapp .qlwapp-box .qlwapp-message{transition-delay:900ms}#qlwapp .qlwapp-box .qlwapp-close,#qlwapp .qlwapp-box .qlwapp-description{transition-delay:900ms}#qlwapp .qlwapp-box .qlwapp-user{transition-delay:200ms}#qlwapp .qlwapp-box .qlwapp-account:nth-of-type(6){transition-delay:600ms}#qlwapp .qlwapp-box .qlwapp-account:nth-of-type(5){transition-delay:500ms}#qlwapp .qlwapp-box .qlwapp-account:nth-of-type(4){transition-delay:400ms}#qlwapp .qlwapp-box .qlwapp-account:nth-of-type(3){transition-delay:300ms}#qlwapp .qlwapp-box .qlwapp-account:nth-of-type(2){transition-delay:200ms}#qlwapp .qlwapp-box .qlwapp-account:nth-of-type(1){transition-delay:100ms}#qlwapp .qlwapp-box .qlwapp-slide .qlwapp-message{opacity:0;transform:translateY(-56px)}#qlwapp .qlwapp-box .qlwapp-slide .qlwapp-box .qlwapp-account:hover{background-color:#fafafa}#qlwapp .qlwapp-box.response .qlwapp-carousel .qlwapp-slide{transform:translateX(-100%)}#qlwapp .qlwapp-box.response .qlwapp-body .qlwapp-carousel{overflow:hidden;max-height:134px!important;min-height:122px}#qlwapp .qlwapp-box.response .qlwapp-close{transition-delay:0ms}#qlwapp .qlwapp-box.response .qlwapp-close,#qlwapp .qlwapp-box.response .qlwapp-footer,#qlwapp .qlwapp-box.response .qlwapp-description,#qlwapp .qlwapp-box.response .qlwapp-account{opacity:0}#qlwapp .qlwapp-box.response .qlwapp-account{transform:translateY(-33.333%);border-top-color:transparent!important}#qlwapp .qlwapp-box.response .qlwapp-user{display:block}#qlwapp .qlwapp-box.response .qlwapp-message,#qlwapp .qlwapp-box.response .qlwapp-previous,#qlwapp .qlwapp-box.response .qlwapp-response{opacity:1}#qlwapp .qlwapp-box.response .qlwapp-response{pointer-events:all}#qlwapp .qlwapp-box.response .qlwapp-message,#qlwapp .qlwapp-box.response .qlwapp-previous{transform:translate(0)}#qlwapp .qlwapp-box.response .qlwapp-header .qlwapp-slide{max-height:84px}#qlwapp .qlwapp-box.response .qlwapp-header .qlwapp-name,#qlwapp .qlwapp-box.response .qlwapp-header .qlwapp-avatar{opacity:1}#qlwapp .qlwapp-box.response .qlwapp-header .qlwapp-label{opacity:.5}#qlwapp .qlwapp-box.response .qlwapp-header .qlwapp-name,#qlwapp .qlwapp-box.response .qlwapp-header .qlwapp-label{transform:translateX(0)}#qlwapp .qlwapp-box.response .qlwapp-header .qlwapp-avatar{transform:scale(1)}#qlwapp .qlwapp-box.response.opening .qlwapp-footer,#qlwapp .qlwapp-box.response.opening .qlwapp-response,#qlwapp .qlwapp-box.response.opening .qlwapp-close,#qlwapp .qlwapp-box.response.opening .qlwapp-previous,#qlwapp .qlwapp-box.response.opening .qlwapp-description,#qlwapp .qlwapp-box.response.opening .qlwapp-header .qlwapp-name,#qlwapp .qlwapp-box.response.opening .qlwapp-header .qlwapp-label{visibility:visible}#qlwapp .qlwapp-box.texting .qlwapp-body{overflow-y:auto}#qlwapp .qlwapp-box.texting .qlwapp-user{opacity:1;transform:translate(0)}#qlwapp .qlwapp-box.closing .qlwapp-previous{transition-delay:0ms;transform:translateX(-24px);opacity:0;transition:transform cubic-bezier(0.215,0.61,0.355,1) 300ms,opacity ease-out 200ms}#qlwapp .qlwapp-box.closing .qlwapp-description{opacity:0}
assets/js/qlwapp-admin.js CHANGED
@@ -1,6 +1,39 @@
1
  (function ($) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2
 
3
- // Validation box.contact.phone number
 
4
  $('form :input').keyup(function (e) {
5
  if (!this.reportValidity()) {
6
  $(this).closest('td').addClass('form-invalid');
@@ -12,7 +45,24 @@
12
  }
13
  });
14
 
15
- //$(document).on('ready', function () {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
16
 
17
  $('.qlwapp-select2').select2({allowClear: false, theme: 'default', minimumResultsForSearch: -1});
18
 
@@ -68,7 +118,7 @@
68
 
69
  wp.media.editor.send.attachment = function (props, attachment) {
70
  $(button).parent().prev().attr('src', attachment.url);
71
- $(button).prev().val(attachment.url);
72
  wp.media.editor.send.attachment = send_attachment_bkp;
73
  }
74
 
@@ -84,11 +134,103 @@
84
 
85
  $(this).parent().prev().attr('src', src);
86
 
87
- $(this).prev().prev().val('');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
88
 
89
  return false;
90
  });
91
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
92
 
93
 
94
  })(jQuery);
1
  (function ($) {
2
+ //
3
+ // $.fn.serializeArrayAll = function () {
4
+ // var o = {};
5
+ // var a = this.serializeArray();
6
+ // $.each(a, function () {
7
+ // if (o[this.name] !== undefined) {
8
+ // if (!o[this.name].push) {
9
+ // o[this.name] = [o[this.name]];
10
+ // }
11
+ // o[this.name].push(this.value || '');
12
+ // } else {
13
+ // o[this.name] = this.value || '';
14
+ // }
15
+ // });
16
+ // var $radio = $('input[type=radio],input[type=checkbox]', this);
17
+ // $.each($radio, function () {
18
+ // if (!o.hasOwnProperty(this.name)) {
19
+ // o[this.name] = '';
20
+ // }
21
+ // });
22
+ // return o;
23
+ // };
24
+
25
+ // Disbled all
26
+ // ---------------------------------------------------------------------------
27
+ function disabled(value) {
28
+ if (value) {
29
+ $('.button-primary').attr('disabled', true);
30
+ } else {
31
+ $('.button-primary').attr('disabled', false);
32
+ }
33
+ }
34
 
35
+ // Validation box.contact.phone number
36
+ // ---------------------------------------------------------------------------
37
  $('form :input').keyup(function (e) {
38
  if (!this.reportValidity()) {
39
  $(this).closest('td').addClass('form-invalid');
45
  }
46
  });
47
 
48
+ $('form').change(function (e) {
49
+ disabled(false);
50
+ });
51
+
52
+ $('.button').click(function () {
53
+ disabled(false);
54
+ });
55
+ $('button').click(function () {
56
+ disabled(false);
57
+ });
58
+
59
+ $('.qlwapp-color-field').wpColorPicker({
60
+ change: function (event, ui) {
61
+ disabled(false);
62
+ },
63
+ });
64
+
65
+ disabled(true);
66
 
67
  $('.qlwapp-select2').select2({allowClear: false, theme: 'default', minimumResultsForSearch: -1});
68
 
118
 
119
  wp.media.editor.send.attachment = function (props, attachment) {
120
  $(button).parent().prev().attr('src', attachment.url);
121
+ $(button).prev().val(attachment.url).trigger('change');
122
  wp.media.editor.send.attachment = send_attachment_bkp;
123
  }
124
 
134
 
135
  $(this).parent().prev().attr('src', src);
136
 
137
+ $(this).prev().prev().val('').trigger('change');
138
+
139
+ return false;
140
+ });
141
+
142
+ // Ajax
143
+ // ---------------------------------------------------------------------------
144
+ $(document).on('qlwapp.save', 'form', function (e, action, nonce) {
145
+
146
+ var $form = $(e.currentTarget),
147
+ $spinner = $form.find('.settings-save-status .spinner'),
148
+ $saved = $form.find('.settings-save-status .saved');
149
+
150
+ $.ajax({
151
+ url: ajaxurl,
152
+ data: {
153
+ action: action,
154
+ nonce: nonce,
155
+ form_data: $form.serialize()
156
+ },
157
+ dataType: 'json',
158
+ type: 'POST',
159
+ beforeSend: function () {
160
+ disabled(true);
161
+ $spinner.addClass('is-active');
162
+ },
163
+ complete: function () {
164
+ $spinner.removeClass('is-active');
165
+ },
166
+ error: function (response) {
167
+ console.log(response);
168
+ },
169
+ success: function (response) {
170
+ $saved.addClass('is-active');
171
+ if (response.success) {
172
+ setTimeout(function () {
173
+ $saved.removeClass('is-active');
174
+ }, 2000);
175
+ console.log(response.data);
176
+ } else {
177
+ alert(response.data);
178
+ }
179
+ }
180
+ });
181
 
182
  return false;
183
  });
184
 
185
+ // Ajax Button Submit
186
+ // ---------------------------------------------------------------------------
187
+ $(document).on('submit', '#qlwapp_button_form', function (e) {
188
+ e.preventDefault();
189
+
190
+ var $form = $(this),
191
+ nonce = $form.find('#qlwapp_button_form_nonce').val();
192
+
193
+ $form.trigger('qlwapp.save', ['qlwapp_save_button', nonce]);
194
+
195
+ });
196
+
197
+ // Ajax BOX Submit
198
+ // ---------------------------------------------------------------------------
199
+ $(document).on('submit', '#qlwapp_box_form', function (e) {
200
+ e.preventDefault();
201
+
202
+ var $form = $(this),
203
+ nonce = $form.find('#qlwapp_box_form_nonce').val();
204
+
205
+ $form.trigger('qlwapp.save', ['qlwapp_save_box', nonce]);
206
+
207
+ });
208
+
209
+ // Ajax Display Submit
210
+ // ---------------------------------------------------------------------------
211
+ $(document).on('submit', '#qlwapp_display_form', function (e) {
212
+
213
+ e.preventDefault();
214
+
215
+ var $form = $(this),
216
+ nonce = $form.find('#qlwapp_display_form_nonce').val();
217
+
218
+ $form.trigger('qlwapp.save', ['qlwapp_save_display', nonce]);
219
+
220
+ });
221
+
222
+ // Ajax Scheme Submit
223
+ // ---------------------------------------------------------------------------
224
+ $(document).on('submit', '#qlwapp_scheme_form', function (e) {
225
+
226
+ e.preventDefault();
227
+
228
+ var $form = $(this),
229
+ nonce = $form.find('#qlwapp_scheme_form_nonce').val();
230
+
231
+ $form.trigger('qlwapp.save', ['qlwapp_save_scheme', nonce]);
232
+
233
+ });
234
 
235
 
236
  })(jQuery);
assets/js/qlwapp-admin.min.js CHANGED
@@ -1 +1 @@
1
- (function(a){a("form :input").keyup(function(b){if(!this.reportValidity()){a(this).closest("td").addClass("form-invalid");a("#btn-save-contact").attr("disabled","disabled")}else{a("#btn-save-contact").removeAttr("disabled");a(this).closest("td").removeClass("form-invalid")}});a(".qlwapp-select2").select2({allowClear:false,theme:"default",minimumResultsForSearch:-1});a(".qlwapp-select2-ajax").each(function(){var c=a(this),b=a(this).data("name");c.select2({allowClear:true,ajax:{url:ajaxurl,dataType:"json",data:function(d){return{name:b,per_page:10,q:d.term||0,selected:c.select2("val")||0,action:"qlwapp_get_posts",nonce:qlwapp.nonce.qlwapp_get_posts}},processResults:function(d){var e=[];if(d){a.each(d,function(f,g){e.push({id:g[0],text:g[1]})})}return{results:e}},cache:true},minimumInputLength:3})});a(".qlwapp-color-field").wpColorPicker();a(document).on("click",".upload_image_button",function(d){d.preventDefault();var b=wp.media.editor.send.attachment,c=a(this);wp.media.editor.send.attachment=function(e,f){a(c).parent().prev().attr("src",f.url);a(c).prev().val(f.url);wp.media.editor.send.attachment=b};wp.media.editor.open(c);return false});a(document).on("click",".remove_image_button",function(b){b.preventDefault();var c=a(this).parent().prev().attr("data-src");a(this).parent().prev().attr("src",c);a(this).prev().prev().val("");return false})})(jQuery);
1
+ (function(b){function a(c){if(c){b(".button-primary").attr("disabled",true)}else{b(".button-primary").attr("disabled",false)}}b("form :input").keyup(function(c){if(!this.reportValidity()){b(this).closest("td").addClass("form-invalid");b("#btn-save-contact").attr("disabled","disabled")}else{b("#btn-save-contact").removeAttr("disabled");b(this).closest("td").removeClass("form-invalid")}});b("form").change(function(c){a(false)});b(".button").click(function(){a(false)});b("button").click(function(){a(false)});b(".qlwapp-color-field").wpColorPicker({change:function(c,d){a(false)},});a(true);b(".qlwapp-select2").select2({allowClear:false,theme:"default",minimumResultsForSearch:-1});b(".qlwapp-select2-ajax").each(function(){var d=b(this),c=b(this).data("name");d.select2({allowClear:true,ajax:{url:ajaxurl,dataType:"json",data:function(e){return{name:c,per_page:10,q:e.term||0,selected:d.select2("val")||0,action:"qlwapp_get_posts",nonce:qlwapp.nonce.qlwapp_get_posts}},processResults:function(e){var f=[];if(e){b.each(e,function(g,h){f.push({id:h[0],text:h[1]})})}return{results:f}},cache:true},minimumInputLength:3})});b(".qlwapp-color-field").wpColorPicker();b(document).on("click",".upload_image_button",function(f){f.preventDefault();var c=wp.media.editor.send.attachment,d=b(this);wp.media.editor.send.attachment=function(e,g){b(d).parent().prev().attr("src",g.url);b(d).prev().val(g.url).trigger("change");wp.media.editor.send.attachment=c};wp.media.editor.open(d);return false});b(document).on("click",".remove_image_button",function(c){c.preventDefault();var d=b(this).parent().prev().attr("data-src");b(this).parent().prev().attr("src",d);b(this).prev().prev().val("").trigger("change");return false});b(document).on("qlwapp.save","form",function(i,h,f){var c=b(i.currentTarget),g=c.find(".settings-save-status .spinner"),d=c.find(".settings-save-status .saved");b.ajax({url:ajaxurl,data:{action:h,nonce:f,form_data:c.serialize()},dataType:"json",type:"POST",beforeSend:function(){a(true);g.addClass("is-active")},complete:function(){g.removeClass("is-active")},error:function(e){console.log(e)},success:function(e){d.addClass("is-active");if(e.success){setTimeout(function(){d.removeClass("is-active")},2000);console.log(e.data)}else{alert(e.data)}}});return false});b(document).on("submit","#qlwapp_button_form",function(f){f.preventDefault();var c=b(this),d=c.find("#qlwapp_button_form_nonce").val();c.trigger("qlwapp.save",["qlwapp_save_button",d])});b(document).on("submit","#qlwapp_box_form",function(f){f.preventDefault();var c=b(this),d=c.find("#qlwapp_box_form_nonce").val();c.trigger("qlwapp.save",["qlwapp_save_box",d])});b(document).on("submit","#qlwapp_display_form",function(f){f.preventDefault();var c=b(this),d=c.find("#qlwapp_display_form_nonce").val();c.trigger("qlwapp.save",["qlwapp_save_display",d])});b(document).on("submit","#qlwapp_scheme_form",function(f){f.preventDefault();var c=b(this),d=c.find("#qlwapp_scheme_form_nonce").val();c.trigger("qlwapp.save",["qlwapp_save_scheme",d])})})(jQuery);
assets/js/qlwapp-contact-modal.js ADDED
@@ -0,0 +1,379 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function ($) {
2
+
3
+ var count = 0,
4
+ timer;
5
+
6
+ _.mixin({
7
+ escapeHtml: function (attribute) {
8
+ return attribute.replace('&', /&/g)
9
+ .replace(/>/g, ">")
10
+ .replace(/&lt;/g, "<")
11
+ .replace(/&quot;/g, '"')
12
+ .replace(/&#039;/g, "'");
13
+ }
14
+ });
15
+
16
+ var Contact = Backbone.Model.extend({
17
+ defaults: qlwapp_contact.args
18
+ });
19
+
20
+ var ContactView = Backbone.View.extend({
21
+ events: {
22
+ 'change input': 'enable',
23
+ 'change textarea': 'enable',
24
+ 'change select': 'enable',
25
+ 'click .media-modal-backdrop': 'close',
26
+ 'click .media-modal-close': 'close',
27
+ 'click .media-modal-prev': 'edit',
28
+ 'click .media-modal-next': 'edit',
29
+ 'change .media-modal-change': 'change',
30
+ 'submit .media-modal-form': 'submit'
31
+ },
32
+ templates: {},
33
+ initialize: function () {
34
+ _.bindAll(this, 'open', 'edit', 'change', 'load', 'render', 'close', 'submit');
35
+ this.init();
36
+ this.open();
37
+
38
+ },
39
+ init: function () {
40
+ this.templates.window = wp.template('qlwapp-modal-window');
41
+ },
42
+ render: function () {
43
+
44
+ var modal = this;
45
+
46
+ // get active tab from the previous modal
47
+ var tab = this.$el.find('ul.wc-tabs li.active a').attr('href');
48
+
49
+ modal.$el.html(modal.templates.window(modal.model.attributes));
50
+
51
+ _.delay(function () {
52
+ // modal.$el.trigger('wooccm-enhanced-options');
53
+ // modal.$el.trigger('wooccm-enhanced-select');
54
+ // modal.$el.trigger('wooccm-tab-panels', tab);
55
+ // modal.$el.trigger('init_tooltips');
56
+ }, 100);
57
+
58
+ },
59
+ load: function () {
60
+ var modal = this;
61
+ if (modal.model.attributes.id == undefined) {
62
+ modal.render();
63
+ return;
64
+ }
65
+ $.ajax({
66
+ url: ajaxurl,
67
+ data: {
68
+ action: 'qlwapp_edit_contact',
69
+ nonce: qlwapp_contact.nonce.qlwapp_edit_contact,
70
+ contact_id: this.model.attributes.id
71
+ },
72
+ dataType: 'json',
73
+ type: 'POST',
74
+ beforeSend: function () {
75
+
76
+ },
77
+ complete: function () {
78
+ //unblock($tr);
79
+ },
80
+ error: function () {
81
+ alert('Error!');
82
+ },
83
+ success: function (response) {
84
+
85
+ if (response.success) {
86
+ modal.model.set(response.data);
87
+ modal.render();
88
+ } else {
89
+ alert(response.data);
90
+ }
91
+ }
92
+ });
93
+ },
94
+ edit: function (e) {
95
+ e.preventDefault();
96
+ var modal = this,
97
+ $button = $(e.target),
98
+ contact_count = parseInt($('#qlwapp_contacts_table tr[data-contact_id]').length),
99
+ order = parseInt(modal.model.get('order'));
100
+ count++;
101
+ if (timer) {
102
+ clearTimeout(timer);
103
+ }
104
+
105
+ timer = setTimeout(function () {
106
+
107
+ if ($button.hasClass('media-modal-next')) {
108
+ order = Math.min(order + count, contact_count);
109
+ } else {
110
+ order = Math.max(order - count, 1);
111
+ }
112
+
113
+ modal.model.set({
114
+ id: parseInt($('#qlwapp_contacts_table tr[data-contact_order=' + order + ']').data('contact_id'))
115
+ });
116
+ count = 0;
117
+ modal.load();
118
+ }, 300);
119
+ },
120
+ open: function (e) {
121
+ this.load();
122
+ $('body').addClass('modal-open').append(this.$el);
123
+ },
124
+ update: function (e) {
125
+
126
+ e.preventDefault();
127
+
128
+ var $field = $(e.target),
129
+ name = $field.attr('name'),
130
+ value = $field.val();
131
+
132
+ if (e.target.type === 'checkbox') {
133
+ value = $field.prop('checked') === true ? 1 : 0;
134
+ }
135
+
136
+ this.model.attributes[name] = value;
137
+ this.model.changed[name] = value;
138
+
139
+ },
140
+ change: function (e) {
141
+ e.preventDefault();
142
+ this.update(e);
143
+ this.render();
144
+
145
+ },
146
+ reload: function (e) {
147
+ if (this.$el.find('#qlwapp_modal').hasClass('reload')) {
148
+ location.reload();
149
+ return;
150
+ }
151
+ this.remove();
152
+ return;
153
+ },
154
+ close: function (e) {
155
+ e.preventDefault();
156
+ this.undelegateEvents();
157
+ $(document).off('focusin');
158
+ $('body').removeClass('modal-open');
159
+ this.reload(e);
160
+ return;
161
+ },
162
+ enable: function (e) {
163
+ $('.media-modal-submit').removeProp('disabled');
164
+ },
165
+ submit: function (e) {
166
+ e.preventDefault();
167
+ var modal = this,
168
+ $modal = modal.$el.find('#qlwapp_modal'),
169
+ $details = $modal.find('.attachment-details');
170
+ $.ajax({
171
+ url: ajaxurl,
172
+ data: {
173
+ action: 'qlwapp_save_contact',
174
+ nonce: qlwapp_contact.nonce.qlwapp_save_contact,
175
+ contact_id: modal.model.attributes.id,
176
+ contact_data: $('form', this.$el).serialize()
177
+ },
178
+ dataType: 'json',
179
+ type: 'POST',
180
+ beforeSend: function () {
181
+ $('.media-modal-submit').prop('disabled', true);
182
+ $details.addClass('save-waiting');
183
+ },
184
+ complete: function () {
185
+ $details.addClass('save-complete');
186
+ $details.removeClass('save-waiting');
187
+ },
188
+ error: function () {
189
+ alert('Error!');
190
+ },
191
+ success: function (response) {
192
+ if (response.success) {
193
+
194
+ if (modal.model.attributes.id == undefined) {
195
+ modal.close(e);
196
+ }
197
+
198
+ $modal.addClass('reload');
199
+
200
+ } else {
201
+ alert(response.data);
202
+ }
203
+ }
204
+ });
205
+ return false;
206
+ }
207
+ });
208
+ var ContactModal = Backbone.View.extend({
209
+ initialize: function (e) {
210
+ var $button = $(e.target),
211
+ contact_id = $button.closest('[data-contact_id]').data('contact_id');
212
+ var model = new Contact();
213
+ model.set({
214
+ id: contact_id
215
+ });
216
+ new ContactView({
217
+ model: model
218
+ });
219
+ },
220
+ });
221
+ $('.qlwapp_settings_edit').on('click', function (e) {
222
+ e.preventDefault();
223
+ new ContactModal(e);
224
+ });
225
+ $('#qlwapp_contact_add').on('click', function (e) {
226
+ e.preventDefault();
227
+ new ContactModal(e);
228
+ });
229
+ $('.qlwapp_settings_delete').on('click', function (e) {
230
+ e.preventDefault();
231
+ var nonce = $('#qlwapp_delete_contact_nonce').val();
232
+ var $button = $(e.target),
233
+ contact_id = $button.closest('[data-contact_id]').data('contact_id');
234
+ if (!confirm(qlwapp_contact.message.contact_confirm_delete)) {
235
+ return false;
236
+ } else {
237
+ $.ajax({
238
+ url: ajaxurl,
239
+ data: {
240
+ action: 'qlwapp_delete_contact',
241
+ nonce: nonce,
242
+ contact_id: contact_id
243
+ },
244
+ dataType: 'json',
245
+ type: 'POST',
246
+ beforeSend: function () {
247
+ // $spinner.addClass('is-active');
248
+ },
249
+ complete: function () {
250
+ // $spinner.removeClass('is-active');
251
+ },
252
+ error: function (response) {
253
+ console.log('response from error ');
254
+ console.log(response);
255
+ /// alert(response);
256
+ },
257
+ success: function (response) {
258
+
259
+ if (response.data) {
260
+ console.log(response.data);
261
+ location.reload();
262
+ } else {
263
+ alert(response.data);
264
+ }
265
+ }
266
+ });
267
+ }
268
+ });
269
+
270
+ // Sorting
271
+ // ---------------------------------------------------------------------------
272
+ $('table#qlwapp_contacts_table tbody').sortable({
273
+ items: 'tr',
274
+ cursor: 'move',
275
+ axis: 'y',
276
+ handle: 'td.sort',
277
+ scrollSensitivity: 40,
278
+ helper: function (event, ui) {
279
+ ui.children().each(function () {
280
+ $(this).width($(this).width());
281
+ });
282
+ ui.css('left', '0');
283
+ return ui;
284
+ },
285
+ start: function (event, ui) {
286
+ ui.item.css('background-color', '#f6f6f6');
287
+ },
288
+ stop: function (event, ui) {
289
+ ui.item.removeAttr('style');
290
+ ui.item.trigger('updateMoveButtons');
291
+ ui.item.trigger('updateSaveButton');
292
+ }
293
+ });
294
+ $(document).on('updateSaveButton', function () {
295
+ $('#qlwapp_contact_order').removeProp('disabled');
296
+ });
297
+ // Re-order buttons
298
+ // ---------------------------------------------------------------------------
299
+ $('.wc-item-reorder-nav').find('.wc-move-up, .wc-move-down').on('click', function () {
300
+
301
+ var moveBtn = $(this),
302
+ $row = moveBtn.closest('tr');
303
+ moveBtn.focus();
304
+ var isMoveUp = moveBtn.is('.wc-move-up'),
305
+ isMoveDown = moveBtn.is('.wc-move-down');
306
+ if (isMoveUp) {
307
+ var $previewRow = $row.prev('tr');
308
+ if ($previewRow && $previewRow.length) {
309
+ $previewRow.before($row);
310
+ // wp.a11y.speak( params.i18n_moved_up );
311
+ }
312
+ } else if (isMoveDown) {
313
+ var $nextRow = $row.next('tr');
314
+ if ($nextRow && $nextRow.length) {
315
+ $nextRow.after($row);
316
+ // wp.a11y.speak( params.i18n_moved_down );
317
+ }
318
+ }
319
+
320
+ moveBtn.focus(); // Re-focus after the container was moved.
321
+ moveBtn.closest('table').trigger('updateMoveButtons');
322
+ moveBtn.closest('table').trigger('updateSaveButton');
323
+ });
324
+ $('.wc-item-reorder-nav').closest('table').on('updateMoveButtons', function () {
325
+ var table = $(this),
326
+ lastRow = $(this).find('tbody tr:last'),
327
+ firstRow = $(this).find('tbody tr:first');
328
+ table.find('.wc-item-reorder-nav .wc-move-disabled').removeClass('wc-move-disabled')
329
+ .attr({'tabindex': '0', 'aria-hidden': 'false'});
330
+ firstRow.find('.wc-item-reorder-nav .wc-move-up').addClass('wc-move-disabled')
331
+ .attr({'tabindex': '-1', 'aria-hidden': 'true'});
332
+ lastRow.find('.wc-item-reorder-nav .wc-move-down').addClass('wc-move-disabled')
333
+ .attr({'tabindex': '-1', 'aria-hidden': 'true'});
334
+ });
335
+ $('table#qlwapp_contacts_table tbody').trigger('updateMoveButtons');
336
+ //save order of contact
337
+ // Ajax order Submit
338
+ $(document).on('submit', '#qlwapp_contacts_form', function (e) {
339
+ e.preventDefault();
340
+ var $form = $(this),
341
+ $spinner = $form.find('.settings-save-status .spinner'),
342
+ $saved = $form.find('.settings-save-status .saved');
343
+ $.ajax({
344
+ url: ajaxurl,
345
+ data: {
346
+ action: 'qlwapp_save_contact_order',
347
+ nonce: qlwapp_contact.nonce.qlwapp_save_contact_order,
348
+ contact_data: $form.serialize()
349
+ },
350
+ dataType: 'json',
351
+ type: 'POST',
352
+ beforeSend: function () {
353
+ $spinner.addClass('is-active');
354
+ },
355
+ complete: function () {
356
+ $spinner.removeClass('is-active');
357
+ },
358
+ error: function (response) {
359
+ console.log('response from error ');
360
+ console.log(response);
361
+ /// alert(response);
362
+ },
363
+ success: function (response) {
364
+ $saved.addClass('is-active');
365
+ $('#qlwapp_contact_order').prop('disabled', true);
366
+ if (response.success) {
367
+ setTimeout(function () {
368
+ $saved.removeClass('is-active');
369
+ }, 1500);
370
+ // console.log(response.data);
371
+ } else {
372
+ console.log(response.data);
373
+ alert(response.data);
374
+ }
375
+ }
376
+ });
377
+ return false;
378
+ });
379
+ })(jQuery);
assets/js/qlwapp-contact-modal.min.js ADDED
@@ -0,0 +1 @@
 
1
+ (function(c){var b=0,f;_.mixin({escapeHtml:function(g){return g.replace("&amp;",/&/g).replace(/&gt;/g,">").replace(/&lt;/g,"<").replace(/&quot;/g,'"').replace(/&#039;/g,"'")}});var e=Backbone.Model.extend({defaults:qlwapp_contact.args});var d=Backbone.View.extend({events:{"change input":"enable","change textarea":"enable","change select":"enable","click .media-modal-backdrop":"close","click .media-modal-close":"close","click .media-modal-prev":"edit","click .media-modal-next":"edit","change .media-modal-change":"change","submit .media-modal-form":"submit"},templates:{},initialize:function(){_.bindAll(this,"open","edit","change","load","render","close","submit");this.init();this.open()},init:function(){this.templates.window=wp.template("qlwapp-modal-window")},render:function(){var h=this;var g=this.$el.find("ul.wc-tabs li.active a").attr("href");h.$el.html(h.templates.window(h.model.attributes));_.delay(function(){},100)},load:function(){var g=this;if(g.model.attributes.id==undefined){g.render();return}c.ajax({url:ajaxurl,data:{action:"qlwapp_edit_contact",nonce:qlwapp_contact.nonce.qlwapp_edit_contact,contact_id:this.model.attributes.id},dataType:"json",type:"POST",beforeSend:function(){},complete:function(){},error:function(){alert("Error!")},success:function(h){if(h.success){g.model.set(h.data);g.render()}else{alert(h.data)}}})},edit:function(k){k.preventDefault();var i=this,j=c(k.target),h=parseInt(c("#qlwapp_contacts_table tr[data-contact_id]").length),g=parseInt(i.model.get("order"));b++;if(f){clearTimeout(f)}f=setTimeout(function(){if(j.hasClass("media-modal-next")){g=Math.min(g+b,h)}else{g=Math.max(g-b,1)}i.model.set({id:parseInt(c("#qlwapp_contacts_table tr[data-contact_order="+g+"]").data("contact_id"))});b=0;i.load()},300)},open:function(g){this.load();c("body").addClass("modal-open").append(this.$el)},update:function(j){j.preventDefault();var h=c(j.target),g=h.attr("name"),i=h.val();if(j.target.type==="checkbox"){i=h.prop("checked")===true?1:0}this.model.attributes[g]=i;this.model.changed[g]=i},change:function(g){g.preventDefault();this.update(g);this.render()},reload:function(g){if(this.$el.find("#qlwapp_modal").hasClass("reload")){location.reload();return}this.remove();return},close:function(g){g.preventDefault();this.undelegateEvents();c(document).off("focusin");c("body").removeClass("modal-open");this.reload(g);return},enable:function(g){c(".media-modal-submit").removeProp("disabled")},submit:function(j){j.preventDefault();var i=this,h=i.$el.find("#qlwapp_modal"),g=h.find(".attachment-details");c.ajax({url:ajaxurl,data:{action:"qlwapp_save_contact",nonce:qlwapp_contact.nonce.qlwapp_save_contact,contact_id:i.model.attributes.id,contact_data:c("form",this.$el).serialize()},dataType:"json",type:"POST",beforeSend:function(){c(".media-modal-submit").prop("disabled",true);g.addClass("save-waiting")},complete:function(){g.addClass("save-complete");g.removeClass("save-waiting")},error:function(){alert("Error!")},success:function(k){if(k.success){if(i.model.attributes.id==undefined){i.close(j)}h.addClass("reload")}else{alert(k.data)}}});return false}});var a=Backbone.View.extend({initialize:function(j){var i=c(j.target),h=i.closest("[data-contact_id]").data("contact_id");var g=new e();g.set({id:h});new d({model:g})},});c(".qlwapp_settings_edit").on("click",function(g){g.preventDefault();new a(g)});c("#qlwapp_contact_add").on("click",function(g){g.preventDefault();new a(g)});c(".qlwapp_settings_delete").on("click",function(j){j.preventDefault();var g=c("#qlwapp_delete_contact_nonce").val();var i=c(j.target),h=i.closest("[data-contact_id]").data("contact_id");if(!confirm(qlwapp_contact.message.contact_confirm_delete)){return false}else{c.ajax({url:ajaxurl,data:{action:"qlwapp_delete_contact",nonce:g,contact_id:h},dataType:"json",type:"POST",beforeSend:function(){},complete:function(){},error:function(k){console.log("response from error ");console.log(k)},success:function(k){if(k.data){console.log(k.data);location.reload()}else{alert(k.data)}}})}});c("table#qlwapp_contacts_table tbody").sortable({items:"tr",cursor:"move",axis:"y",handle:"td.sort",scrollSensitivity:40,helper:function(g,h){h.children().each(function(){c(this).width(c(this).width())});h.css("left","0");return h},start:function(g,h){h.item.css("background-color","#f6f6f6")},stop:function(g,h){h.item.removeAttr("style");h.item.trigger("updateMoveButtons");h.item.trigger("updateSaveButton")}});c(document).on("updateSaveButton",function(){c("#qlwapp_contact_order").removeProp("disabled")});c(".wc-item-reorder-nav").find(".wc-move-up, .wc-move-down").on("click",function(){var l=c(this),g=l.closest("tr");l.focus();var k=l.is(".wc-move-up"),j=l.is(".wc-move-down");if(k){var i=g.prev("tr");if(i&&i.length){i.before(g)}}else{if(j){var h=g.next("tr");if(h&&h.length){h.after(g)}}}l.focus();l.closest("table").trigger("updateMoveButtons");l.closest("table").trigger("updateSaveButton")});c(".wc-item-reorder-nav").closest("table").on("updateMoveButtons",function(){var h=c(this),g=c(this).find("tbody tr:last"),i=c(this).find("tbody tr:first");h.find(".wc-item-reorder-nav .wc-move-disabled").removeClass("wc-move-disabled").attr({tabindex:"0","aria-hidden":"false"});i.find(".wc-item-reorder-nav .wc-move-up").addClass("wc-move-disabled").attr({tabindex:"-1","aria-hidden":"true"});g.find(".wc-item-reorder-nav .wc-move-down").addClass("wc-move-disabled").attr({tabindex:"-1","aria-hidden":"true"})});c("table#qlwapp_contacts_table tbody").trigger("updateMoveButtons");c(document).on("submit","#qlwapp_contacts_form",function(j){j.preventDefault();var g=c(this),i=g.find(".settings-save-status .spinner"),h=g.find(".settings-save-status .saved");c.ajax({url:ajaxurl,data:{action:"qlwapp_save_contact_order",nonce:qlwapp_contact.nonce.qlwapp_save_contact_order,contact_data:g.serialize()},dataType:"json",type:"POST",beforeSend:function(){i.addClass("is-active")},complete:function(){i.removeClass("is-active")},error:function(k){console.log("response from error ");console.log(k)},success:function(k){h.addClass("is-active");c("#qlwapp_contact_order").prop("disabled",true);if(k.success){setTimeout(function(){h.removeClass("is-active")},1500)}else{console.log(k.data);alert(k.data)}}});return false})})(jQuery);
assets/js/qlwapp-modal.js DELETED
@@ -1,357 +0,0 @@
1
- (function ($) {
2
-
3
- var is_blocked = function ($node) {
4
- return $node.is('.processing') || $node.parents('.processing').length;
5
- };
6
- var block = function ($node) {
7
- if (!is_blocked($node)) {
8
- $node.addClass('processing').block({
9
- message: null,
10
- overlayCSS: {
11
- background: '#fff',
12
- opacity: 0.6
13
- }
14
- });
15
- }
16
- };
17
- var unblock = function ($node) {
18
- $node.removeClass('processing').unblock();
19
- };
20
- var wpmi = {
21
- __instance: undefined
22
- };
23
- wpmi.Application = Backbone.View.extend({
24
- id: 'wpmi_modal',
25
- events: {
26
- 'click .media-modal-backdrop': 'Close',
27
- 'click .media-modal-close': 'Close',
28
- 'click .media-modal-delete': 'Delete',
29
- 'click .media-modal-prev': 'update',
30
- 'click .media-modal-next': 'update',
31
- 'submit .media-modal-form': 'Save'
32
- },
33
- templates: {},
34
- initialize: function (e) {
35
- 'use strict';
36
- _.bindAll(this, 'open', 'update', 'render', 'Close', 'Save');
37
- this.init();
38
- this.open(e);
39
- },
40
- init: function () {
41
- this.templates.window = wp.template('wpmi-modal-window');
42
- },
43
- render: function (contact_id) {
44
- 'use strict';
45
- var $modal = this;
46
- $.ajax({
47
- url: ajaxurl,
48
- data: {
49
- action: 'qlwapp_edit_contact',
50
- nonce: qlwapp.nonce.qlwapp_edit_contact,
51
- //options_name: $tr.data('options_name'),
52
- //options_key: $tr.data('options_key'),
53
- contact_id: contact_id
54
- },
55
- dataType: 'json',
56
- type: 'POST',
57
- beforeSend: function () {
58
- //block($tr);
59
- },
60
- complete: function () {
61
- //unblock($tr);
62
- },
63
- error: function (response) {
64
- console.log(response);
65
- /// alert(response);
66
- },
67
- success: function (response) {
68
- $modal.$el.attr('tabindex', '0');
69
- $modal.$el.html($modal.templates.window(response.data));
70
- //$(document).on('focusin', $modal.preserveFocus);
71
- $modal.$el.focus().trigger('wc-init-tabbed-panels');
72
- $modal.$el.focus().trigger('init_tooltips');
73
- }
74
- });
75
- },
76
- update: function (e) {
77
- 'use strict';
78
- e.stopPropagation();
79
- e.preventDefault();
80
- var $button = $(e.target),
81
- contact_id = $button.data('contact_id');
82
- this.render(contact_id);
83
- },
84
- open: function (e) {
85
- 'use strict';
86
- var $button = $(e.target),
87
- $tr = $button.closest('tr'),
88
- contact_id = $tr.data('contact_id');
89
- this.render(contact_id);
90
- $('body').addClass('modal-open').append(this.$el);
91
- },
92
- /*preserveFocus: function (e) {
93
- 'use strict';
94
-
95
- if (this.$el[0] !== e.target && !this.$el.has(e.target).length) {
96
- this.$el.focus();
97
- }
98
- },*/
99
- Close: function (e) {
100
- 'use strict';
101
- e.preventDefault();
102
- this.undelegateEvents();
103
- $(document).off('focusin');
104
- $('body').removeClass('modal-open');
105
- this.remove();
106
- wpmi.__instance = undefined;
107
- },
108
- Save: function (e) {
109
- 'use strict';
110
- e.preventDefault();
111
- var $form = $(e.target),
112
- $modal = this.$el,
113
- $spinner = $modal.find('.settings-save-status .spinner');
114
- $.ajax({
115
- url: ajaxurl,
116
- data: {
117
- action: 'qlwapp_save_contact',
118
- nonce: qlwapp.nonce.qlwapp_save_contact,
119
- contact_id: $form.data('contact_id'),
120
- contact_data: $form.serializeArrayAll()
121
- },
122
- dataType: 'json',
123
- type: 'POST',
124
- beforeSend: function () {
125
- $spinner.addClass('is-active');
126
- // block($modal);
127
- },
128
- complete: function () {
129
- $spinner.removeClass('is-active');
130
-
131
- // unblock($modal);
132
- //$modal.Close(e);
133
- },
134
- error: function () {
135
- alert('Error!');
136
- },
137
- success: function (response) {
138
- $modal.find('.settings-save-status').addClass('save-complete');
139
- console.log(response);
140
- //$modal.$el.attr('tabindex', '0');
141
- //$modal.$el.html($modal.templates.window(response.data));
142
- //$(document).on('focusin', $modal.preserveFocus);
143
- //$modal.$el.focus().trigger('wc-init-tabbed-panels');
144
- }
145
- });
146
- return false;
147
- },
148
- Delete: function (e) {
149
- 'use strict';
150
- e.preventDefault();
151
- var $modal = this;
152
- $modal.Close(e);
153
- }
154
- });
155
-
156
- $('#qlwapp_settings_add').on('click', function (e) {
157
- e.preventDefault();
158
- if (wpmi.__instance === undefined) {
159
- wpmi.__instance = new wpmi.Application(e);
160
- }
161
- });
162
- $('.qlwapp_settings_edit').on('click', function (e) {
163
- e.preventDefault();
164
- if (wpmi.__instance === undefined) {
165
- wpmi.__instance = new wpmi.Application(e);
166
- }
167
- });
168
- $('.qlwapp_settings_delete').on('click', function (e) {
169
- alert('hacer algo ...');
170
- e.preventDefault();
171
-
172
- });
173
-
174
-
175
-
176
- })(jQuery);
177
-
178
-
179
-
180
-
181
- /*(function ($) {
182
-
183
- var wpmi = {
184
- __instance: undefined
185
- };
186
-
187
- wpmi.Application = Backbone.View.extend(
188
- {
189
- id: 'wpmi_modal',
190
- events: {
191
- 'click .close': 'Close',
192
- // 'click .remove': 'Remove',
193
- 'click .save': 'Save'
194
- },
195
- ui: {
196
- // nav: undefined,
197
- // content: undefined,
198
- // media: undefined
199
- },
200
- templates: {},
201
- initialize: function (e) {
202
- 'use strict';
203
- _.bindAll(this, 'render', 'preserveFocus', 'Close', 'Save');//, 'Select', 'Search', 'Remove'
204
- this.initialize_templates();
205
- this.render(e);
206
- this.backdrop(e);
207
- },
208
- backdrop: function (e) {
209
- 'use strict';
210
-
211
- var plugin = this;
212
-
213
- $(document).on('click', '.media-modal-backdrop', function (e) {
214
- plugin.Close(e);
215
- });
216
- },
217
- initialize_templates: function () {
218
- this.templates.window = wp.template('wpmi-modal-window');
219
- this.templates.backdrop = wp.template('wpmi-modal-backdrop');
220
- },
221
- render: function (e) {
222
- 'use strict';
223
- var contact_id = $(e.target).data('contact_id');
224
- $.ajax({
225
- type: 'POST',
226
- url: ajaxurl,
227
- data: {
228
- action: 'qlwapp_get_contact',
229
- nonce: qlwapp.nonce.qlwapp_get_contact,
230
- contact_id:contact_id
231
- },
232
- beforeSend: function () {
233
- // alert('before..');
234
- },
235
- complete: function () {
236
- // alert('complete..');
237
- },
238
- error: function () {
239
- alert('Error!');
240
- },
241
- success: function (response) {
242
- alert(response);
243
- console.log( response.data);
244
-
245
- }
246
- });
247
- this.$el.attr('tabindex', '0')
248
- // .data('menu_item_id', menu_item_id)
249
- .append(this.templates.window())
250
- .append(this.templates.backdrop());
251
-
252
- $(document).on('focusin', this.preserveFocus);
253
- $('body').addClass('modal-open').append(this.$el);
254
- this.$el.focus();
255
- },
256
- preserveFocus: function (e) {
257
- 'use strict';
258
- if (this.$el[0] !== e.target && !this.$el.has(e.target).length) {
259
- this.$el.focus();
260
- }
261
- },
262
- Close: function (e) {
263
- 'use strict';
264
- e.preventDefault();
265
- this.undelegateEvents();
266
- $(document).off('focusin');
267
- $('body').removeClass('modal-open');
268
- this.remove();
269
- wpmi.__instance = undefined;
270
- },
271
- Save: function (e) {
272
- 'use strict';
273
- e.preventDefault();
274
-
275
- var plugin = this,
276
- $form = $('form', this.$el),
277
- menu_item_id = this.$el.data('menu_item_id');
278
-
279
- if (!menu_item_id)
280
- return;
281
-
282
- if (!$form.length)
283
- return;
284
-
285
- var $li = $('#menu-to-edit').find('#menu-item-' + menu_item_id),
286
- $plus = $li.find('.menu-item-wpmi_plus'),
287
- $icon = $li.find('.menu-item-wpmi_icon');
288
-
289
- if (!$li.length)
290
- return;
291
-
292
- $form.find('.wpmi-input').each(function (i) {
293
-
294
- var key = $(this).prop('id').match(/wpmi-input-([a-z]+)/)[1],
295
- value = $(this).val();
296
-
297
- $li.find('input#wpmi-input-' + key).val(value);
298
-
299
- if (key === 'icon') {
300
-
301
- if ($icon.length) {
302
-
303
- $icon.remove();
304
- }
305
-
306
- $plus.before('<i class="menu-item-wpmi_icon ' + value + '"></i>');
307
- }
308
- });
309
-
310
- plugin.Close(e);
311
- }
312
-
313
-
314
- });
315
-
316
- $(document).on('click', '.qlwapp-contact_open', function (e) {
317
-
318
- e.preventDefault();
319
- if (wpmi.__instance === undefined) {
320
- wpmi.__instance = new wpmi.Application(e);
321
- }
322
- });
323
-
324
- $(document).on('click', '#wpmi_metabox', function (e) {
325
-
326
- var menu_font = $('input:checked', $(this)).val(),
327
- menu_id = $('#menu').val();
328
-
329
- if ($(e.target).hasClass('save') && menu_font && menu_id) {
330
-
331
- e.preventDefault();
332
-
333
- $.ajax({
334
- type: 'POST',
335
- url: ajaxurl,
336
- data: {
337
- action: 'wpmi_save_nav_menu',
338
- menu_id: menu_id,
339
- menu_font: menu_font,
340
- nonce: wpmi_l10n.nonce
341
- },
342
- beforeSend: function () {
343
- },
344
- complete: function () {
345
- },
346
- error: function () {
347
- alert('Error!');
348
- },
349
- success: function (response) {
350
- location.reload();
351
- }
352
- });
353
-
354
- }
355
- });
356
-
357
- })(jQuery);*/
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/qlwapp-modal.min.js DELETED
@@ -1 +0,0 @@
1
- (function(c){var d=function(f){return f.is(".processing")||f.parents(".processing").length};var e=function(f){if(!d(f)){f.addClass("processing").block({message:null,overlayCSS:{background:"#fff",opacity:0.6}})}};var b=function(f){f.removeClass("processing").unblock()};var a={__instance:undefined};a.Application=Backbone.View.extend({id:"wpmi_modal",events:{"click .media-modal-backdrop":"Close","click .media-modal-close":"Close","click .media-modal-delete":"Delete","click .media-modal-prev":"update","click .media-modal-next":"update","submit .media-modal-form":"Save"},templates:{},initialize:function(f){_.bindAll(this,"open","update","render","Close","Save");this.init();this.open(f)},init:function(){this.templates.window=wp.template("wpmi-modal-window")},render:function(g){var f=this;c.ajax({url:ajaxurl,data:{action:"qlwapp_edit_contact",nonce:qlwapp.nonce.qlwapp_edit_contact,contact_id:g},dataType:"json",type:"POST",beforeSend:function(){},complete:function(){},error:function(h){console.log(h)},success:function(h){f.$el.attr("tabindex","0");f.$el.html(f.templates.window(h.data));f.$el.focus().trigger("wc-init-tabbed-panels");f.$el.focus().trigger("init_tooltips")}})},update:function(h){h.stopPropagation();h.preventDefault();var g=c(h.target),f=g.data("contact_id");this.render(f)},open:function(i){var h=c(i.target),f=h.closest("tr"),g=f.data("contact_id");this.render(g);c("body").addClass("modal-open").append(this.$el)},Close:function(f){f.preventDefault();this.undelegateEvents();c(document).off("focusin");c("body").removeClass("modal-open");this.remove();a.__instance=undefined},Save:function(i){i.preventDefault();var f=c(i.target),g=this.$el,h=g.find(".settings-save-status .spinner");c.ajax({url:ajaxurl,data:{action:"qlwapp_save_contact",nonce:qlwapp.nonce.qlwapp_save_contact,contact_id:f.data("contact_id"),contact_data:f.serializeArrayAll()},dataType:"json",type:"POST",beforeSend:function(){h.addClass("is-active")},complete:function(){h.removeClass("is-active")},error:function(){alert("Error!")},success:function(j){g.find(".settings-save-status").addClass("save-complete");console.log(j)}});return false},Delete:function(g){g.preventDefault();var f=this;f.Close(g)}});c("#qlwapp_settings_add").on("click",function(f){f.preventDefault();if(a.__instance===undefined){a.__instance=new a.Application(f)}});c(".qlwapp_settings_edit").on("click",function(f){f.preventDefault();if(a.__instance===undefined){a.__instance=new a.Application(f)}});c(".qlwapp_settings_delete").on("click",function(f){alert("hacer algo ...");f.preventDefault()})})(jQuery);
 
assets/js/qlwapp.js CHANGED
@@ -38,6 +38,8 @@
38
  timeto = $contact.data('timeto') || false,
39
  // timeout = $contact.data('timeout'),
40
  timezone = parseInt($contact.data('timezone')) || 0;
 
 
41
 
42
  // Don't scape timezone as could be 0
43
  if (!timeto || !timefrom || (timefrom === timeto)) {
38
  timeto = $contact.data('timeto') || false,
39
  // timeout = $contact.data('timeout'),
40
  timezone = parseInt($contact.data('timezone')) || 0;
41
+
42
+ console.log($contact.data('timezone'));
43
 
44
  // Don't scape timezone as could be 0
45
  if (!timeto || !timefrom || (timefrom === timeto)) {
assets/js/qlwapp.min.js CHANGED
@@ -1 +1 @@
1
- (function(d,c,a,g){var e={};function b(i,h){this.$qlwapp=d(i);this.init(this)}b.prototype={timeDateToString:function(i){var h=""+i.getMinutes();if(h.length===1){h="0"+h}return i.getHours()+":"+h},timeStringToInt:function(i,h){return parseInt(i+h)},init:function(i){var h=this.$qlwapp;h.on("qlwapp.init",function(j){i.mobiledevice=(/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent))});h.on("qlwapp.time",function(p){var j=d(p.target),r=j.data("timefrom")||false,s=j.data("timeto")||false,o=parseInt(j.data("timezone"))||0;if(!s||!r||(r===s)){return true}var v=new Date(),l=v.getTimezoneOffset(),q=-l-o;var u=new Date(),k=new Date();var t,m;t=i.timeStringToInt(r[0],r[1]);m=i.timeStringToInt(r[3],r[4]);k.setHours(t);k.setMinutes(m+q);t=i.timeStringToInt(s[0],s[1]);m=i.timeStringToInt(s[3],s[4]);u.setHours(t);u.setMinutes(m+q);if(!(v.getTime()>=k.getTime()&&v.getTime()<=u.getTime())){j.addClass("qlwapp-readonly")}if(!o){return true}j.find(".from").text(i.timeDateToString(k));j.find(".to").text(i.timeDateToString(u))});h.on("qlwapp.pro",function(j){h.find(".qlwapp-toggle").trigger("qlwapp.time");h.find(".qlwapp-account").each(function(l,k){d(k).trigger("qlwapp.time")})});h.on("qlwapp.resize",function(j){if(d(this).hasClass("qlwapp-show")){d(this).trigger("qlwapp.toggle")}});h.on("qlwapp.init",function(j){if(!i.mobiledevice){h.addClass("desktop").removeClass("mobile")}else{h.addClass("mobile").removeClass("desktop")}h.addClass("qlwapp-js-ready")});h.on("qlwapp.init",function(j){if(h.hasClass("qlwapp-premium")){h.trigger("qlwapp.pro")}});h.addClass("qlwapp-js-ready").trigger("qlwapp.init");h.on("qlwapp.height",function(o){var p=d(o.delegateTarget),n=p.find(".qlwapp-body"),m=n.find(".qlwapp-carousel");var l=p.find(".qlwapp-header"),k=p.find(".qlwapp-footer"),j=(d(c).innerHeight()-l.outerHeight()-k.outerHeight());if(!i.mobiledevice){j=(d(c).innerHeight()*0.7-l.outerHeight()-k.outerHeight())}m.css({"max-height":j+"px"})});h.on("qlwapp.toggle",function(k){var l=d(k.delegateTarget),j=l.find(".qlwapp-box");l.addClass("qlwapp-transition");j.removeClass("response texting");setTimeout(function(){l.toggleClass("qlwapp-show").trigger("qlwapp.height")},10);setTimeout(function(){l.toggleClass("qlwapp-transition")},300)});h.on("click","[data-action=box], [data-action=close]",function(j){j.preventDefault();d(j.delegateTarget).trigger("qlwapp.toggle")});h.on("click","[data-action=open]",function(n){var k="https://api.whatsapp.com/send";if(!i.mobiledevice){k="https://web.whatsapp.com/send"}var m=d(this),l=m.data("message")||"",j=m.data("phone")||"";d(this).attr("href",k+"?phone="+j+"&text="+l)});h.on("click","[data-action=previous]",function(k){k.preventDefault();var l=d(k.delegateTarget),j=l.find(".qlwapp-box");j.addClass("closing");setTimeout(function(){j.removeClass("response").removeClass("closing");j.removeClass("texting")},300)});h.on("click","[data-action=chat]",function(w){w.preventDefault();var n=d(this),t=d(w.delegateTarget),u=t.find(".qlwapp-box"),v=n.find(".qlwapp-avatar img").attr("src"),A=n.find(".qlwapp-name").text(),q=n.find(".qlwapp-label").text(),p=n.find(".qlwapp-time").text(),r=n.data("message"),o=n.data("phone");u.addClass("response").addClass("opening");t.trigger("qlwapp.height");setTimeout(function(){u.removeClass("opening")},300);var k=u.find(".qlwapp-reply"),x=u.find(".qlwapp-header"),j=x.find(".qlwapp-avatar img"),m=x.find(".qlwapp-number"),l=x.find(".qlwapp-name"),z=x.find(".qlwapp-label"),y=u.find(".qlwapp-message");var s=p?p+" - "+q:q;k.data("phone",o);j.attr("src",v);m.html(o);l.html(A);z.html(s);y.html(r)});h.on("click","textarea",function(j){h.off("qlwapp.resize")});h.on("keypress","textarea",function(j){if(j.keyCode==13){h.find(".qlwapp-reply").trigger("click");setTimeout(function(){c.location=h.find(".qlwapp-reply").attr("href")},100)}});h.on("keyup","[data-action=response]",function(m){m.preventDefault();var p=d(this).find("textarea"),o=d(this).find("pre"),j=d(this).find(".qlwapp-reply"),n=d(m.delegateTarget),l=n.find(".qlwapp-box"),k=l.find(".qlwapp-buttons");o.html(p.val());setTimeout(function(){l.addClass("texting").css({"padding-bottom":o.outerHeight()});k.addClass("active");var q=p.val();j.data("message",q);if(q==""){l.removeClass("texting");k.removeClass("active")}},300)})}};d.fn.qlwapp=function(i){var h=arguments;if(i===g||typeof i==="object"){return this.each(function(){if(!d.data(this,"plugin_qlwapp")){d.data(this,"plugin_qlwapp",new b(this,i))}})}else{if(typeof i==="string"&&i[0]!=="_"&&i!=="init"){var j;this.each(function(){var k=d.data(this,"plugin_qlwapp");if(k instanceof b&&typeof k[i]==="function"){j=k[i].apply(k,Array.prototype.slice.call(h,1))}if(i==="destroy"){d.data(this,"plugin_qlwapp",null)}});return j!==g?j:this}}};function f(){d("div#qlwapp").qlwapp()}f();d(c).on("load",function(){f()});d(c).on("click",function(h){if(!d(h.target).closest("#qlwapp.qlwapp-show").length){d("div#qlwapp.qlwapp-show").trigger("qlwapp.toggle")}});d(c).on("resize",function(h){d("div#qlwapp").trigger("qlwapp.resize");d("div#qlwapp").trigger("qlwapp.init")})})(jQuery,window,document);
1
+ (function(d,c,a,g){var e={};function b(i,h){this.$qlwapp=d(i);this.init(this)}b.prototype={timeDateToString:function(i){var h=""+i.getMinutes();if(h.length===1){h="0"+h}return i.getHours()+":"+h},timeStringToInt:function(i,h){return parseInt(i+h)},init:function(i){var h=this.$qlwapp;h.on("qlwapp.init",function(j){i.mobiledevice=(/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent))});h.on("qlwapp.time",function(p){var j=d(p.target),r=j.data("timefrom")||false,s=j.data("timeto")||false,o=parseInt(j.data("timezone"))||0;console.log(j.data("timezone"));if(!s||!r||(r===s)){return true}var v=new Date(),l=v.getTimezoneOffset(),q=-l-o;var u=new Date(),k=new Date();var t,m;t=i.timeStringToInt(r[0],r[1]);m=i.timeStringToInt(r[3],r[4]);k.setHours(t);k.setMinutes(m+q);t=i.timeStringToInt(s[0],s[1]);m=i.timeStringToInt(s[3],s[4]);u.setHours(t);u.setMinutes(m+q);if(!(v.getTime()>=k.getTime()&&v.getTime()<=u.getTime())){j.addClass("qlwapp-readonly")}if(!o){return true}j.find(".from").text(i.timeDateToString(k));j.find(".to").text(i.timeDateToString(u))});h.on("qlwapp.pro",function(j){h.find(".qlwapp-toggle").trigger("qlwapp.time");h.find(".qlwapp-account").each(function(l,k){d(k).trigger("qlwapp.time")})});h.on("qlwapp.resize",function(j){if(d(this).hasClass("qlwapp-show")){d(this).trigger("qlwapp.toggle")}});h.on("qlwapp.init",function(j){if(!i.mobiledevice){h.addClass("desktop").removeClass("mobile")}else{h.addClass("mobile").removeClass("desktop")}h.addClass("qlwapp-js-ready")});h.on("qlwapp.init",function(j){if(h.hasClass("qlwapp-premium")){h.trigger("qlwapp.pro")}});h.addClass("qlwapp-js-ready").trigger("qlwapp.init");h.on("qlwapp.height",function(o){var p=d(o.delegateTarget),n=p.find(".qlwapp-body"),m=n.find(".qlwapp-carousel");var l=p.find(".qlwapp-header"),k=p.find(".qlwapp-footer"),j=(d(c).innerHeight()-l.outerHeight()-k.outerHeight());if(!i.mobiledevice){j=(d(c).innerHeight()*0.7-l.outerHeight()-k.outerHeight())}m.css({"max-height":j+"px"})});h.on("qlwapp.toggle",function(k){var l=d(k.delegateTarget),j=l.find(".qlwapp-box");l.addClass("qlwapp-transition");j.removeClass("response texting");setTimeout(function(){l.toggleClass("qlwapp-show").trigger("qlwapp.height")},10);setTimeout(function(){l.toggleClass("qlwapp-transition")},300)});h.on("click","[data-action=box], [data-action=close]",function(j){j.preventDefault();d(j.delegateTarget).trigger("qlwapp.toggle")});h.on("click","[data-action=open]",function(n){var k="https://api.whatsapp.com/send";if(!i.mobiledevice){k="https://web.whatsapp.com/send"}var m=d(this),l=m.data("message")||"",j=m.data("phone")||"";d(this).attr("href",k+"?phone="+j+"&text="+l)});h.on("click","[data-action=previous]",function(k){k.preventDefault();var l=d(k.delegateTarget),j=l.find(".qlwapp-box");j.addClass("closing");setTimeout(function(){j.removeClass("response").removeClass("closing");j.removeClass("texting")},300)});h.on("click","[data-action=chat]",function(w){w.preventDefault();var n=d(this),t=d(w.delegateTarget),u=t.find(".qlwapp-box"),v=n.find(".qlwapp-avatar img").attr("src"),A=n.find(".qlwapp-name").text(),q=n.find(".qlwapp-label").text(),p=n.find(".qlwapp-time").text(),r=n.data("message"),o=n.data("phone");u.addClass("response").addClass("opening");t.trigger("qlwapp.height");setTimeout(function(){u.removeClass("opening")},300);var k=u.find(".qlwapp-reply"),x=u.find(".qlwapp-header"),j=x.find(".qlwapp-avatar img"),m=x.find(".qlwapp-number"),l=x.find(".qlwapp-name"),z=x.find(".qlwapp-label"),y=u.find(".qlwapp-message");var s=p?p+" - "+q:q;k.data("phone",o);j.attr("src",v);m.html(o);l.html(A);z.html(s);y.html(r)});h.on("click","textarea",function(j){h.off("qlwapp.resize")});h.on("keypress","textarea",function(j){if(j.keyCode==13){h.find(".qlwapp-reply").trigger("click");setTimeout(function(){c.location=h.find(".qlwapp-reply").attr("href")},100)}});h.on("keyup","[data-action=response]",function(m){m.preventDefault();var p=d(this).find("textarea"),o=d(this).find("pre"),j=d(this).find(".qlwapp-reply"),n=d(m.delegateTarget),l=n.find(".qlwapp-box"),k=l.find(".qlwapp-buttons");o.html(p.val());setTimeout(function(){l.addClass("texting").css({"padding-bottom":o.outerHeight()});k.addClass("active");var q=p.val();j.data("message",q);if(q==""){l.removeClass("texting");k.removeClass("active")}},300)})}};d.fn.qlwapp=function(i){var h=arguments;if(i===g||typeof i==="object"){return this.each(function(){if(!d.data(this,"plugin_qlwapp")){d.data(this,"plugin_qlwapp",new b(this,i))}})}else{if(typeof i==="string"&&i[0]!=="_"&&i!=="init"){var j;this.each(function(){var k=d.data(this,"plugin_qlwapp");if(k instanceof b&&typeof k[i]==="function"){j=k[i].apply(k,Array.prototype.slice.call(h,1))}if(i==="destroy"){d.data(this,"plugin_qlwapp",null)}});return j!==g?j:this}}};function f(){d("div#qlwapp").qlwapp()}f();d(c).on("load",function(){f()});d(c).on("click",function(h){if(!d(h.target).closest("#qlwapp.qlwapp-show").length){d("div#qlwapp.qlwapp-show").trigger("qlwapp.toggle")}});d(c).on("resize",function(h){d("div#qlwapp").trigger("qlwapp.resize");d("div#qlwapp").trigger("qlwapp.init")})})(jQuery,window,document);
changelog.txt CHANGED
@@ -1,8 +1,12 @@
 
 
 
 
1
  = 4.4.9 =
2
  * Fix. small css issues
3
 
4
  = 4.4.8 =
5
- * Fix. remove rating request non admin users
6
 
7
  = 4.4.7 =
8
  * Improvement. button timeout readonly
1
+ = 4.5.0 =
2
+ * Improvement. code refactorization with MVC
3
+ * Improvement. new contact tab
4
+
5
  = 4.4.9 =
6
  * Fix. small css issues
7
 
8
  = 4.4.8 =
9
+ * Fix. remove rating request non admin users
10
 
11
  = 4.4.7 =
12
  * Improvement. button timeout readonly
includes/backend.php ADDED
@@ -0,0 +1,112 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class QLWAPP_Admin {
4
+
5
+ protected static $instance;
6
+
7
+ function init() {
8
+ add_action('wp_ajax_qlwapp_get_posts', array($this, 'ajax_get_posts'));
9
+ add_filter('default_option_qlwapp', array($this, 'generate_db'));
10
+ add_filter('sanitize_option_qlwapp', 'wp_unslash');
11
+ add_action('admin_enqueue_scripts', array($this, 'add_js'));
12
+ add_action('admin_head', array($this, 'add_css'));
13
+ }
14
+
15
+ function generate_db() {
16
+ $db = new QLWAPP_Model();
17
+ return $db->options();
18
+ }
19
+
20
+ function includes() {
21
+ include_once 'controllers/WelcomeController.php';
22
+ include_once 'controllers/ButtonController.php';
23
+ include_once 'controllers/BoxController.php';
24
+ include_once 'controllers/ContactController.php';
25
+ include_once 'controllers/DisplayController.php';
26
+ include_once 'controllers/SchemeController.php';
27
+ include_once 'controllers/PremiumController.php';
28
+ include_once 'controllers/SuggestionsController.php';
29
+ }
30
+
31
+ function add_css() {
32
+ ?>
33
+ <style>
34
+ @font-face {
35
+ font-family: 'qlwf-whatsapp';
36
+ src: url(data:application/x-font-woff;charset=utf-8;base64,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) format('woff');
37
+ font-weight: normal;
38
+ font-style: normal;
39
+ }
40
+
41
+ #toplevel_page_qlwapp .wp-menu-image img {
42
+ height: 16px;
43
+ }
44
+ </style>
45
+ <?php
46
+
47
+ }
48
+
49
+ function add_js() {
50
+ if (isset($_GET['page']) && strpos($_GET['page'], QLWAPP_DOMAIN) !== false) {
51
+ wp_register_style('qlwapp-select2', plugins_url('/assets/css/qlwapp-select2' . QLWAPP::is_min() . '.css', QLWAPP_PLUGIN_FILE), array('wp-color-picker'), QLWAPP_PLUGIN_VERSION, 'all');
52
+
53
+ wp_enqueue_style('qlwapp-admin', plugins_url('/assets/css/qlwapp-admin' . QLWAPP::is_min() . '.css', QLWAPP_PLUGIN_FILE), array('wp-color-picker', 'qlwapp-select2'), QLWAPP_PLUGIN_VERSION, 'all');
54
+
55
+ wp_register_script('qlwapp-select2', plugins_url('/assets/js/select2.min.js', QLWAPP_PLUGIN_FILE), array('jquery'), QLWAPP_PLUGIN_VERSION);
56
+ wp_enqueue_script('qlwapp-admin', plugins_url('/assets/js/qlwapp-admin' . QLWAPP::is_min() . '.js', QLWAPP_PLUGIN_FILE), array('jquery', 'qlwapp-select2', 'wp-color-picker'), QLWAPP_PLUGIN_VERSION, true);
57
+
58
+ wp_localize_script('qlwapp-admin', 'qlwapp', array(
59
+ 'nonce' => array(
60
+ 'qlwapp_get_posts' => wp_create_nonce('qlwapp_get_posts'),
61
+ )));
62
+ }
63
+ }
64
+
65
+ function ajax_get_posts() {
66
+
67
+ if (current_user_can('manage_options')) {
68
+
69
+ if (!empty($_REQUEST) && check_admin_referer('qlwapp_get_posts', 'nonce')) {
70
+
71
+ $data = array(
72
+ array('none', esc_html__('Exclude from all', 'wp-whatsapp-chat'))
73
+ );
74
+
75
+ $args = array(
76
+ 'post_type' => sanitize_key($_REQUEST['name']),
77
+ 'post_status' => 'publish',
78
+ 'ignore_sticky_posts' => 1,
79
+ 'posts_per_page' => 10,
80
+ 'exclude' => array_map('intval', (array) $_REQUEST['selected'])
81
+ );
82
+
83
+ if ($_REQUEST['q']) {
84
+ $args['s'] = sanitize_text_field($_REQUEST['q']);
85
+ }
86
+
87
+ $posts = get_posts($args);
88
+
89
+ foreach ($posts as $post) {
90
+ $data[] = array($post->ID, mb_substr($post->post_title, 0, 49));
91
+ }
92
+
93
+ wp_send_json($data);
94
+ }
95
+ }
96
+
97
+ wp_die();
98
+ }
99
+
100
+ public static function instance() {
101
+ if (!isset(self::$instance)) {
102
+ self::$instance = new self();
103
+ self::$instance->includes();
104
+ self::$instance->init();
105
+ }
106
+ return self::$instance;
107
+ }
108
+
109
+ }
110
+
111
+ QLWAPP_Admin::instance();
112
+
includes/controllers/BoxController.php ADDED
@@ -0,0 +1,53 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ include_once(QLWAPP_PLUGIN_DIR . 'includes/models/Box.php');
4
+
5
+ include_once(QLWAPP_PLUGIN_DIR . 'includes/controllers/QLWAPP_Controller.php');
6
+
7
+ class QLWAPP_Box_Controller extends QLWAPP_Controller {
8
+
9
+ protected static $instance;
10
+
11
+ function add_menu() {
12
+ add_submenu_page(QLWAPP_DOMAIN, esc_html__('Box', 'wp-whatsapp-chat'), esc_html__('Box', 'wp-whatsapp-chat'), 'manage_options', QLWAPP_DOMAIN . '_box', array($this, 'add_panel'));
13
+ }
14
+
15
+ function add_panel() {
16
+ $box_model = new QLWAPP_Box();
17
+ $box = $box_model->get();
18
+ include (QLWAPP_PLUGIN_DIR . '/includes/view/backend/pages/parts/header.php');
19
+ include (QLWAPP_PLUGIN_DIR . '/includes/view/backend/pages/box.php');
20
+ }
21
+
22
+ function init() {
23
+ add_action('wp_ajax_qlwapp_save_box', array($this, 'ajax_qlwapp_save_box'));
24
+ add_action('admin_menu', array($this, 'add_menu'));
25
+ }
26
+
27
+ public function ajax_qlwapp_save_box() {
28
+ $box = new QLWAPP_Box();
29
+ if (current_user_can('manage_options')) {
30
+ if (check_ajax_referer('qlwapp_save_box', 'nonce', false) && isset($_REQUEST['form_data'])) {
31
+ $form_data = array();
32
+ parse_str($_REQUEST['form_data'], $form_data);
33
+ if (is_array($form_data)) {
34
+ $box->save($form_data);
35
+ return parent::success_save($form_data);
36
+ }
37
+ return parent::error_reload_page();
38
+ }
39
+ return parent::error_access_denied();
40
+ }
41
+ }
42
+
43
+ public static function instance() {
44
+ if (!isset(self::$instance)) {
45
+ self::$instance = new self();
46
+ self::$instance->init();
47
+ }
48
+ return self::$instance;
49
+ }
50
+
51
+ }
52
+
53
+ QLWAPP_Box_Controller::instance();
includes/controllers/ButtonController.php ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ include_once(QLWAPP_PLUGIN_DIR . 'includes/models/Button.php');
4
+
5
+ include_once(QLWAPP_PLUGIN_DIR . 'includes/controllers/QLWAPP_Controller.php');
6
+
7
+ class QLWAPP_Button_Controller extends QLWAPP_Controller {
8
+
9
+ protected static $instance;
10
+
11
+ function add_menu() {
12
+ add_submenu_page(QLWAPP_DOMAIN, esc_html__('Button', 'wp-whatsapp-chat'), esc_html__('Button', 'wp-whatsapp-chat'), 'manage_options', QLWAPP_DOMAIN . '_button', array($this, 'add_panel'));
13
+ }
14
+
15
+ function add_panel() {
16
+
17
+ $button_model = new QLWAPP_Button();
18
+ $button = $button_model->get();
19
+ include (QLWAPP_PLUGIN_DIR . '/includes/view/backend/pages/parts/header.php');
20
+ include (QLWAPP_PLUGIN_DIR . '/includes/view/backend/pages/button.php');
21
+ }
22
+
23
+ function init() {
24
+ add_action('wp_ajax_qlwapp_save_button', array($this, 'ajax_qlwapp_save_button'));
25
+ add_action('admin_menu', array($this, 'add_menu'));
26
+ }
27
+
28
+ public function ajax_qlwapp_save_button() {
29
+ $button = new QLWAPP_Button();
30
+ if (current_user_can('manage_options')) {
31
+ if (check_ajax_referer('qlwapp_save_button', 'nonce', false) && isset($_REQUEST['form_data'])) {
32
+ $form_data = array();
33
+ parse_str($_REQUEST['form_data'], $form_data);
34
+ if (is_array($form_data)) {
35
+ $button->save($form_data);
36
+ return parent::success_save($form_data);
37
+ }
38
+ return parent::error_reload_page();
39
+ }
40
+ return parent::error_access_denied();
41
+ }
42
+ }
43
+
44
+ public static function instance() {
45
+ if (!isset(self::$instance)) {
46
+ self::$instance = new self();
47
+ self::$instance->init();
48
+ }
49
+ return self::$instance;
50
+ }
51
+
52
+ }
53
+
54
+ QLWAPP_Button_Controller::instance();
includes/controllers/ContactController.php ADDED
@@ -0,0 +1,148 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ include_once(QLWAPP_PLUGIN_DIR . 'includes/models/Contact.php');
4
+
5
+ include_once(QLWAPP_PLUGIN_DIR . 'includes/controllers/QLWAPP_Controller.php');
6
+
7
+ class QLWAPP_Contact_Controller extends QLWAPP_Controller {
8
+
9
+ protected static $instance;
10
+
11
+ function add_menu() {
12
+ add_submenu_page(QLWAPP_DOMAIN, esc_html__('Contacts', 'wp-whatsapp-chat'), esc_html__('Contacts', 'wp-whatsapp-chat'), 'manage_options', QLWAPP_DOMAIN . '_contacts', array($this, 'add_panel'));
13
+ }
14
+
15
+ function add_panel() {
16
+ $contact_model = new QLWAPP_Contact();
17
+ $contacts = $contact_model->get_contacts_reorder();
18
+ $contact_args = $contact_model->get_args();
19
+ include (QLWAPP_PLUGIN_DIR . '/includes/view/backend/pages/parts/header.php');
20
+ include (QLWAPP_PLUGIN_DIR . '/includes/view/backend/pages/contacts.php');
21
+ }
22
+
23
+ function ajax_edit_contact() {
24
+ if (check_ajax_referer('qlwapp_edit_contact', 'nonce', false)) {
25
+ $contact_id = (isset($_REQUEST['contact_id'])) ? absint($_REQUEST['contact_id']) : -1;
26
+ if ($contact_id != -1) {
27
+ $contact_model = new QLWAPP_Contact();
28
+ $contact = $contact_model->get_contact($contact_id);
29
+ if ($contact) {
30
+ return parent::success_ajax($contact);
31
+ }
32
+ }
33
+ parent::error_reload_page();
34
+ }
35
+ parent::error_access_denied();
36
+ }
37
+
38
+ function ajax_save_contact() {
39
+
40
+ if (current_user_can('manage_options')) {
41
+ if (check_ajax_referer('qlwapp_save_contact', 'nonce', false) && isset($_REQUEST['contact_data'])) {
42
+ $contact_data = array();
43
+
44
+ parse_str($_REQUEST['contact_data'], $contact_data);
45
+
46
+ $contact_model = new QLWAPP_Contact();
47
+
48
+ if (is_array($contact_data)) {
49
+ if (isset($contact_data['id'])) {
50
+ return parent::success_save($contact_model->update_contact($contact_data));
51
+ } else {
52
+ return parent::success_save($contact_model->add_contact($contact_data));
53
+ }
54
+ return parent::error_reload_page();
55
+ }
56
+ }
57
+ return parent::error_access_denied();
58
+ }
59
+ }
60
+
61
+ function ajax_save_contact_order() {
62
+ if (current_user_can('manage_options')) {
63
+ if (check_ajax_referer('qlwapp_save_contact_order', 'nonce', false) && isset($_REQUEST['contact_data'])) {
64
+ if (array_key_exists('contact_data', $_REQUEST)) {
65
+ $contact_model = new QLWAPP_Contact();
66
+ $contacts = $contact_model->get_contacts();
67
+ $contact_order = array();
68
+ parse_str($_REQUEST['contact_data'], $contact_order);
69
+ $contact_order = $contact_order['contact_order'];
70
+ $result = -1;
71
+ if (is_array($contact_order) && count($contact_order) > 0) {
72
+ $loop = 1;
73
+ foreach ($contact_order as $contact_id) {
74
+ if (isset($contacts[$contact_id])) {
75
+ $contacts[$contact_id]['order'] = $loop;
76
+ $loop++;
77
+ }
78
+ }
79
+ $result = $contact_model->update_contacts($contacts);
80
+ }
81
+ }
82
+ }
83
+ wp_send_json_success($result);
84
+ }
85
+ }
86
+
87
+ function ajax_delete_contact() {
88
+
89
+ if (check_ajax_referer('qlwapp_delete_contact', 'nonce', false)) {
90
+
91
+ $contact_id = (isset($_REQUEST['contact_id'])) ? absint($_REQUEST['contact_id']) : -1;
92
+
93
+ $contact_model = new QLWAPP_Contact();
94
+ // delete
95
+ $contact = $contact_model->delete($contact_id);
96
+ if ($contact_id) {
97
+
98
+ return parent::success_ajax($contact);
99
+ }
100
+ parent::error_reload_page();
101
+ }
102
+ parent::error_access_denied();
103
+ }
104
+
105
+ function init() {
106
+
107
+ add_action('wp_ajax_qlwapp_add_contact', array($this, 'ajax_add_contact'));
108
+ add_action('wp_ajax_qlwapp_edit_contact', array($this, 'ajax_edit_contact'));
109
+ add_action('wp_ajax_qlwapp_save_contact', array($this, 'ajax_save_contact'));
110
+ add_action('wp_ajax_qlwapp_delete_contact', array($this, 'ajax_delete_contact'));
111
+ add_action('wp_ajax_qlwapp_save_contact_order', array($this, 'ajax_save_contact_order'));
112
+ add_action('admin_enqueue_scripts', array($this, 'add_js'));
113
+ add_action('admin_menu', array($this, 'add_menu'));
114
+ }
115
+
116
+ function add_js() {
117
+ if (isset($_GET['page']) && ($_GET['page'] === 'qlwapp_contacts')) {
118
+ $contact_model = new QLWAPP_Contact();
119
+ wp_enqueue_media();
120
+ wp_enqueue_script('qlwapp-contact-modal', plugins_url('/assets/js/qlwapp-contact-modal' . QLWAPP::is_min() . '.js', QLWAPP_PLUGIN_FILE), array('jquery', 'backbone',), QLWAPP_PLUGIN_VERSION, true);
121
+
122
+ wp_localize_script('qlwapp-contact-modal', 'qlwapp_contact', array(
123
+ 'nonce' => array(
124
+ 'qlwapp_get_contact' => wp_create_nonce('qlwapp_get_contact'),
125
+ 'qlwapp_edit_contact' => wp_create_nonce('qlwapp_edit_contact'),
126
+ 'qlwapp_add_contact' => wp_create_nonce('qlwapp_add_contact'),
127
+ 'qlwapp_save_contact' => wp_create_nonce('qlwapp_save_contact'),
128
+ 'qlwapp_save_contact_order' => wp_create_nonce('qlwapp_save_contact_order')
129
+ ),
130
+ 'message' => array(
131
+ 'contact_confirm_delete' => 'you want to delete the contact',
132
+ 'contact_confirm_delete_title' => 'Contact: confirmation'
133
+ ),
134
+ 'args' => $contact_model->get_args()));
135
+ }
136
+ }
137
+
138
+ public static function instance() {
139
+ if (!isset(self::$instance)) {
140
+ self::$instance = new self();
141
+ self::$instance->init();
142
+ }
143
+ return self::$instance;
144
+ }
145
+
146
+ }
147
+
148
+ QLWAPP_Contact_Controller::instance();
includes/controllers/DisplayController.php ADDED
@@ -0,0 +1,78 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ include_once(QLWAPP_PLUGIN_DIR . 'includes/models/Display.php');
4
+
5
+ include_once(QLWAPP_PLUGIN_DIR . 'includes/controllers/QLWAPP_Controller.php');
6
+
7
+ class QLWAPP_Display_Controller extends QLWAPP_Controller {
8
+
9
+ protected static $instance;
10
+
11
+ function add_menu() {
12
+ add_submenu_page(QLWAPP_DOMAIN, esc_html__('Display', 'wp-whatsapp-chat'), esc_html__('Display', 'wp-whatsapp-chat'), 'manage_options', QLWAPP_DOMAIN . '_display', array($this, 'add_panel'));
13
+ }
14
+
15
+ function add_panel() {
16
+ $display_model = new QLWAPP_Display();
17
+ $display = $display_model->get();
18
+ include (QLWAPP_PLUGIN_DIR . '/includes/view/backend/pages/parts/header.php');
19
+ include (QLWAPP_PLUGIN_DIR . '/includes/view/backend/pages/display.php');
20
+ }
21
+
22
+ function init() {
23
+ add_action('wp_ajax_qlwapp_save_display', array($this, 'ajax_qlwapp_save_display'));
24
+ add_action('admin_menu', array($this, 'add_menu'));
25
+ }
26
+
27
+ public function ajax_qlwapp_save_display() {
28
+ $display = new QLWAPP_Display();
29
+ if (current_user_can('manage_options')) {
30
+ if (check_ajax_referer('qlwapp_save_display', 'nonce', false) && isset($_REQUEST['form_data'])) {
31
+ $form_data = array();
32
+ parse_str($_REQUEST['form_data'], $form_data);
33
+ if (is_array($form_data)) {
34
+ $display->save($form_data);
35
+ return parent::success_save($form_data);
36
+ }
37
+ return parent::error_reload_page();
38
+ }
39
+ return parent::error_access_denied();
40
+ }
41
+ }
42
+
43
+ //// debe ser de compatibilidatda
44
+ function wac_options($options) {
45
+
46
+ if ($mobile = get_option('whatsapp_chat_mobile')) {
47
+ $options['display']['devices'] = 'mobile';
48
+ }
49
+ if (get_option('whatsapp_chat_hide_button')) {
50
+ $options['display']['devices'] = 'hide';
51
+ }
52
+ if (get_option('whatsapp_chat_hide_post')) {
53
+ $options['display']['post'] = array('none');
54
+ }
55
+ if (get_option('whatsapp_chat_hide_page')) {
56
+ $options['display']['page'] = array('none');
57
+ }
58
+ if (get_option('whatsapp_chat_hide_product')) {
59
+ $options['display']['product'] = array('none');
60
+ }
61
+ if (get_option('whatsapp_chat_hide_project')) {
62
+ $options['display']['project'] = array('none');
63
+ }
64
+
65
+ return $options;
66
+ }
67
+
68
+ public static function instance() {
69
+ if (!isset(self::$instance)) {
70
+ self::$instance = new self();
71
+ self::$instance->init();
72
+ }
73
+ return self::$instance;
74
+ }
75
+
76
+ }
77
+
78
+ QLWAPP_Display_Controller::instance();
includes/controllers/PremiumController.php ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class QLWAPP_Premium_Controller {
4
+
5
+ protected static $instance;
6
+
7
+ function add_menu() {
8
+ add_submenu_page(QLWAPP_DOMAIN, esc_html__('Premium', 'wp-whatsapp-chat'), sprintf('%s <i class="dashicons dashicons-awards"></i>', esc_html__('Premium', 'wp-whatsapp-chat')), 'edit_posts', QLWAPP_DOMAIN . '_premium', array($this, 'add_panel'));
9
+ }
10
+
11
+ function add_panel() {
12
+
13
+ include (QLWAPP_PLUGIN_DIR . '/includes/view/backend/pages/parts/header.php');
14
+ include (QLWAPP_PLUGIN_DIR . '/includes/view/backend/pages/premium.php');
15
+ }
16
+
17
+ function init() {
18
+ add_action('admin_menu', array($this, 'add_menu'));
19
+ }
20
+
21
+ public static function instance() {
22
+ if (!isset(self::$instance)) {
23
+ self::$instance = new self();
24
+ self::$instance->init();
25
+ }
26
+ return self::$instance;
27
+ }
28
+
29
+ }
30
+
31
+ QLWAPP_Premium_Controller::instance();
includes/controllers/QLWAPP_Controller.php ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class QLWAPP_Controller {
4
+
5
+ // return data for jquery
6
+ function success_save($data) {
7
+ return wp_send_json_success($data);
8
+ }
9
+
10
+ function success_ajax($data) {
11
+ $this->success_save($data);
12
+ }
13
+
14
+ function error_reload_page() {
15
+ return wp_send_json_error(esc_html__('Please, reload page', 'wp-whatsapp-chat'));
16
+ }
17
+
18
+ function error_access_denied() {
19
+ wp_send_json_error(esc_html__('access denied', 'wp-whatsapp-chat'));
20
+ }
21
+
22
+
23
+
24
+ }
includes/controllers/SchemeController.php ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ include_once(QLWAPP_PLUGIN_DIR . 'includes/models/Scheme.php');
4
+
5
+ include_once(QLWAPP_PLUGIN_DIR . 'includes/controllers/QLWAPP_Controller.php');
6
+
7
+ class QLWAPP_Scheme_Controller extends QLWAPP_Controller {
8
+
9
+ protected static $instance;
10
+ protected $scheme = 'scheme';
11
+
12
+ function add_menu() {
13
+ add_submenu_page(QLWAPP_DOMAIN, esc_html__('Colors', 'wp-whatsapp-chat'), esc_html__('Colors', 'wp-whatsapp-chat'), 'manage_options', QLWAPP_DOMAIN . '_scheme', array($this, 'add_panel'));
14
+ }
15
+
16
+ function add_panel() {
17
+ $scheme_model = new QLWAPP_Scheme();
18
+ $scheme = $scheme_model->get();
19
+ include (QLWAPP_PLUGIN_DIR . '/includes/view/backend/pages/parts/header.php');
20
+ include (QLWAPP_PLUGIN_DIR . '/includes/view/backend/pages/scheme.php');
21
+ }
22
+
23
+ function init() {
24
+ add_action('wp_ajax_qlwapp_save_scheme', array($this, 'ajax_qlwapp_save_scheme'));
25
+ add_action('admin_menu', array($this, 'add_menu'));
26
+ }
27
+
28
+ public function ajax_qlwapp_save_scheme() {
29
+ $scheme = new QLWAPP_Scheme();
30
+ if (current_user_can('manage_options')) {
31
+ if (check_ajax_referer('qlwapp_save_scheme', 'nonce', false) && isset($_REQUEST['form_data'])) {
32
+ $form_data = array();
33
+ parse_str($_REQUEST['form_data'], $form_data);
34
+ if (is_array($form_data)) {
35
+ $scheme->save($form_data);
36
+ return parent::success_save($form_data);
37
+ }
38
+ return parent::error_reload_page();
39
+ }
40
+ return parent::error_access_denied();
41
+ }
42
+ }
43
+
44
+ public static function instance() {
45
+ if (!isset(self::$instance)) {
46
+ self::$instance = new self();
47
+ self::$instance->init();
48
+ }
49
+ return self::$instance;
50
+ }
51
+
52
+ }
53
+
54
+ QLWAPP_Scheme_Controller::instance();
includes/controllers/SuggestionsController.php ADDED
@@ -0,0 +1,60 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class QLWAPP_Suggestions_Controller {
4
+
5
+ protected static $instance;
6
+
7
+ function add_menu() {
8
+ add_submenu_page(QLWAPP_DOMAIN, esc_html__('Suggestions', 'wp-whatsapp-chat'), sprintf('%s', esc_html__('Suggestions', 'wp-whatsapp-chat')), 'edit_posts', QLWAPP_DOMAIN . '_suggestions', array($this, 'add_panel'), 99);
9
+ }
10
+
11
+ function add_panel() {
12
+
13
+ include_once(QLWAPP_PLUGIN_DIR . 'includes/models/Suggestions.php');
14
+
15
+ $wp_list_table = new QLWAPP_Suggestions_List_Table();
16
+ $wp_list_table->prepare_items();
17
+ include (QLWAPP_PLUGIN_DIR . '/includes/view/backend/pages/parts/header.php');
18
+ include (QLWAPP_PLUGIN_DIR . '/includes/view/backend/pages/suggestions.php');
19
+ }
20
+
21
+ // fix for activateUrl on install now button
22
+ public function network_admin_url($url, $path) {
23
+
24
+ if (wp_doing_ajax() && !is_network_admin()) {
25
+ if (isset($_REQUEST['action']) && $_REQUEST['action'] == 'install-plugin') {
26
+ if (strpos($url, 'plugins.php') !== false) {
27
+ $url = self_admin_url($path);
28
+ }
29
+ }
30
+ }
31
+
32
+ return $url;
33
+ }
34
+
35
+ public function add_redirect() {
36
+
37
+ if (isset($_REQUEST['activate']) && $_REQUEST['activate'] == 'true') {
38
+ if (wp_get_referer() == admin_url('admin.php?page=' . QLWAPP_DOMAIN . '_suggestions')) {
39
+ wp_redirect(admin_url('admin.php?page=' . QLWAPP_DOMAIN . '_suggestions'));
40
+ }
41
+ }
42
+ }
43
+
44
+ function init() {
45
+ add_action('admin_menu', array($this, 'add_menu'));
46
+ add_action('admin_init', array($this, 'add_redirect'));
47
+ add_filter('network_admin_url', array($this, 'network_admin_url'), 10, 2);
48
+ }
49
+
50
+ public static function instance() {
51
+ if (!isset(self::$instance)) {
52
+ self::$instance = new self();
53
+ self::$instance->init();
54
+ }
55
+ return self::$instance;
56
+ }
57
+
58
+ }
59
+
60
+ QLWAPP_Suggestions_Controller::instance();
includes/controllers/WelcomeController.php ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+ class QLWAPP_Welcome_Controller {
5
+
6
+ protected static $instance;
7
+
8
+ function add_menu() {
9
+ add_menu_page(QLWAPP_PLUGIN_NAME, QLWAPP_PLUGIN_NAME, 'edit_posts', QLWAPP_DOMAIN, array($this, 'add_panel'), plugins_url('/assets/img/icon.png', QLWAPP_PLUGIN_FILE));
10
+
11
+ add_submenu_page(QLWAPP_DOMAIN, esc_html__('Welcome', 'wp-whatsapp-chat'), esc_html__('Welcome', 'wp-whatsapp-chat'), 'edit_posts', QLWAPP_DOMAIN, array($this, 'add_panel'));
12
+ }
13
+
14
+ function add_panel() {
15
+ include (QLWAPP_PLUGIN_DIR . '/includes/view/backend/pages/parts/header.php');
16
+ include (QLWAPP_PLUGIN_DIR . '/includes/view/backend/pages/welcome.php');
17
+ }
18
+
19
+ function init() {
20
+ add_action('admin_menu', array($this, 'add_menu'));
21
+ }
22
+
23
+ public static function instance() {
24
+ if (!isset(self::$instance)) {
25
+ self::$instance = new self();
26
+ self::$instance->init();
27
+ }
28
+ return self::$instance;
29
+ }
30
+
31
+ }
32
+
33
+ QLWAPP_Welcome_Controller::instance();
includes/defaults.php DELETED
@@ -1,290 +0,0 @@
1
- <?php
2
-
3
- if (!defined('ABSPATH'))
4
- exit;
5
-
6
- if (!class_exists('QLWAPP_Options')) {
7
-
8
- class QLWAPP_Options {
9
-
10
- protected static $instance;
11
- public $defaults;
12
-
13
- function defaults() {
14
-
15
- $this->defaults = array(
16
- 'license' => array(
17
- 'market' => '',
18
- 'key' => '',
19
- 'email' => ''
20
- ),
21
- 'scheme' => array(
22
- 'brand' => '',
23
- 'text' => '',
24
- 'link' => '',
25
- 'message' => '',
26
- 'label' => '',
27
- 'name' => '',
28
- ),
29
- //'user' => array(
30
- // 'message' => sprintf(esc_html__('Hello! I\'m testing the %s plugin @https://quadlayers.com', 'wp-whatsapp-chat'), QLWAPP_PLUGIN_NAME)
31
- //),
32
- 'button' => array(
33
- 'layout' => 'button',
34
- 'position' => 'bottom-right',
35
- 'text' => esc_html__('How can I help you?', 'wp-whatsapp-chat'),
36
- 'message' => sprintf(esc_html__('Hello! I\'m testing the %s plugin @https://quadlayers.com', 'wp-whatsapp-chat'), QLWAPP_PLUGIN_NAME),
37
- 'icon' => 'qlwapp-whatsapp-icon',
38
- 'phone' => '',
39
- 'developer' => 'no',
40
- 'rounded' => 'yes',
41
- 'timefrom' => '00:00',
42
- 'timeto' => '00:00',
43
- 'timezone' => $this->get_current_timezone(),
44
- 'timeout' => 'readonly'
45
- ),
46
- 'box' => array(
47
- 'enable' => 'no',
48
- 'header' => '<h3>Hello!</h3><p>Click one of our representatives below to chat on WhatsApp or send us an email to <a href="mailto:' . get_bloginfo('admin_email') . '">' . get_bloginfo('admin_email') . '</a></p>',
49
- 'footer' => '<p>Powered by <a target="_blank" href="' . QLWAPP_PURCHASE_URL . '">WhatsApp Chat</a>'
50
- // ,'contactstimeout' => 'no'
51
- ),
52
- 'chat' => array(
53
- 'emoji' => 'no',
54
- 'response' => esc_html__('Write a response', 'wp-whatsapp-chat'),
55
- ),
56
- 'contacts' => array(
57
- 0 => array(
58
- 'chat' => true,
59
- 'avatar' => 'https://www.gravatar.com/avatar/00000000000000000000000000000000',
60
- 'phone' => '',
61
- 'firstname' => 'John',
62
- 'lastname' => 'Doe',
63
- 'label' => esc_html__('Support', 'wp-whatsapp-chat'),
64
- 'message' => esc_html__('Hello! I\'m John from the support team.', 'wp-whatsapp-chat'),
65
- 'timefrom' => '00:00',
66
- 'timeto' => '00:00',
67
- 'timezone' => $this->get_current_timezone(),
68
- 'timeout' => 'readonly'
69
- ),
70
- ),
71
- 'display' => array(
72
- 'devices' => 'all',
73
- 'target' => array(),
74
- ),
75
- );
76
-
77
- return $this->defaults;
78
- }
79
-
80
- function wac_options($options) {
81
-
82
- if ($phone = get_option('whatsapp_chat_page')) {
83
- $options['button']['phone'] = $phone;
84
- }
85
-
86
- if ($text = get_option('whatsapp_chat_button')) {
87
- $options['button']['text'] = $text;
88
- }
89
- if (get_option('whatsapp_chat_powered_by')) {
90
- $options['button']['developer'] = 'yes';
91
- }
92
- if (false !== get_option('whatsapp_chat_round')) {
93
- $options['button']['rounded'] = 'no';
94
- }
95
- if ($message = get_option('whatsapp_chat_msg')) {
96
- $options['user']['message'] = $message;
97
- }
98
- if ($mobile = get_option('whatsapp_chat_mobile')) {
99
- $options['display']['devices'] = 'mobile';
100
- }
101
- if (get_option('whatsapp_chat_hide_button')) {
102
- $options['display']['devices'] = 'hide';
103
- }
104
- if (get_option('whatsapp_chat_hide_post')) {
105
- $options['display']['post'] = array('none');
106
- }
107
- if (get_option('whatsapp_chat_hide_page')) {
108
- $options['display']['page'] = array('none');
109
- }
110
- if (get_option('whatsapp_chat_hide_product')) {
111
- $options['display']['product'] = array('none');
112
- }
113
- if (get_option('whatsapp_chat_hide_project')) {
114
- $options['display']['project'] = array('none');
115
- }
116
-
117
- if (false !== get_option('whatsapp_chat_down')) {
118
- $vposition = get_option('whatsapp_chat_down') ? 'bottom' : 'middle';
119
- $hposition = get_option('whatsapp_chat_left_side') ? 'left' : 'right';
120
- $options['button']['position'] = "{$vposition}-{$hposition}";
121
- }
122
-
123
- if (get_option('whatsapp_chat_dark')) {
124
- $options['scheme']['brand'] = '#075E54';
125
- $options['scheme']['text'] = '#ffffff';
126
- } elseif (get_option('whatsapp_chat_white')) {
127
- $options['scheme']['brand'] = '#ffffff';
128
- $options['scheme']['text'] = '#075E54';
129
- } elseif (false !== get_option('whatsapp_chat_white')) {
130
- $options['scheme']['brand'] = '#20B038';
131
- $options['scheme']['text'] = '#ffffff';
132
- }
133
-
134
- return $options;
135
- }
136
-
137
- /* function standar_timezone_gmt($timezone) {
138
- $GMT = 'GMT+00:00';
139
- $minutes = '00';
140
- if (strpos($timezone, 'UTC') !== false) {
141
- $timezone = str_replace(array('.25', '.5', '.75'), array(':15', ':30', ':45'), $timezone);
142
-
143
- $temp = explode(':', $timezone);
144
-
145
- if (isset($temp[1])) {
146
- $minutes = $temp[1];
147
- }
148
- $hours = str_replace(array('UTC'), array('GMT'), $temp[0]);
149
- $hours = str_replace(array('-1', '-2', '-3', '-4', '-5', '-6', '-7', '-8', '-9'), array('-01', '-02', '-03', '-04', '-05', '-06', '-07', '-08', '-09'), $hours);
150
- $hours = str_replace(array('+1', '+2', '+3', '+4', '+5', '+6', '+7', '+8', '+9'), array('+01', '+02', '+03', '+04', '+05', '+06', '+07', '+08', '+09'), $hours);
151
- $GMT = sprintf('%s:%s', $hours, $minutes);
152
- } else {
153
- $target_time_zone = new DateTimeZone($timezone);
154
- $date_time = new DateTime('now', $target_time_zone);
155
- $GMT = sprintf('GMT%s', $date_time->format('P'));
156
- }
157
- return $GMT;
158
- } */
159
-
160
- function get_whatsapp_number($phone) {
161
-
162
- $phone = preg_replace('/[^0-9]/', '', $phone);
163
-
164
- $phone = ltrim($phone, '0');
165
-
166
- return $phone;
167
- }
168
-
169
- function get_timezone_offset($timezone) {
170
- if (strpos($timezone, 'UTC') !== false) {
171
- $offset = preg_replace('/UTC\+?/', '', $timezone) * 60;
172
- } else {
173
- $current = timezone_open($timezone);
174
- $utc = new \DateTime('now', new \DateTimeZone('UTC'));
175
- $offset = $current->getOffset($utc) / 3600 * 60;
176
- }
177
- return $offset;
178
- }
179
-
180
- function get_current_timezone() {
181
- // Get user settings
182
- $current_offset = get_option('gmt_offset');
183
- $tzstring = get_option('timezone_string');
184
-
185
- $check_zone_info = true;
186
-
187
- // Remove old Etc mappings. Fallback to gmt_offset.
188
- if (false !== strpos($tzstring, 'Etc/GMT')) {
189
- $tzstring = '';
190
- }
191
-
192
- if (empty($tzstring)) {
193
- // Create a UTC+- zone if no timezone string exists
194
- $check_zone_info = false;
195
- if (0 == $current_offset) {
196
- $tzstring = 'UTC+0';
197
- } elseif ($current_offset < 0) {
198
- $tzstring = 'UTC' . $current_offset;
199
- } else {
200
- $tzstring = 'UTC+' . $current_offset;
201
- }
202
- }
203
- return $tzstring;
204
- }
205
-
206
- function options() {
207
-
208
- global $qlwapp;
209
-
210
- $options = get_option(QLWAPP_DOMAIN, $this->defaults());
211
-
212
- if (isset($options['user']['message'])) {
213
- $options['button']['message'] = $options['user']['message'];
214
- }
215
-
216
- if (isset($options['button']['rounded']) && $options['button']['rounded'] == 1) {
217
- $options['button']['rounded'] = 'yes';
218
- }
219
- if (isset($options['button']['developer']) && $options['button']['developer'] == 1) {
220
- $options['button']['developer'] = 'yes';
221
- }
222
-
223
- if (!is_admin()) {
224
- if (isset($options['button']['phone'])) {
225
- $options['button']['phone'] = $this->get_whatsapp_number($options['button']['phone']);
226
- }
227
- if (isset($options['button']['timezone'])) {
228
- $options['button']['timezone'] = $this->get_timezone_offset($options['button']['timezone']);
229
- }
230
- }
231
-
232
- if (isset($options['contacts'])) {
233
- if (count($options['contacts'])) {
234
- foreach ($options['contacts'] as $id => $c) {
235
-
236
- $options['contacts'][$id] = wp_parse_args($c, $this->defaults()['contacts'][0]);
237
-
238
- if (!is_admin()) {
239
- if (!empty($options['contacts'][$id]['phone'])) {
240
- $options['contacts'][$id]['phone'] = $this->get_whatsapp_number($options['contacts'][$id]['phone']);
241
- }
242
- if (!empty($options['contacts'][$id]['timezone'])) {
243
- $options['contacts'][$id]['timezone'] = $this->get_timezone_offset($options['contacts'][$id]['timezone']);
244
- }
245
- }
246
- }
247
- }
248
- }
249
- /*
250
- *
251
- * next update
252
- if (isset($options['box']['contactstimeout']) && $options['box']['contactstimeout'] == 'yes') {
253
- $options['box']['contactstimeout'] = 'yes';
254
- } */
255
-
256
- $qlwapp = $this->wp_parse_args($options, $this->defaults());
257
- }
258
-
259
- function wp_parse_args(&$a, $b) {
260
- $a = (array) $a;
261
- $b = (array) $b;
262
- $result = $b;
263
- foreach ($a as $k => &$v) {
264
- if (is_array($v) && isset($result[$k])) {
265
- $result[$k] = $this->wp_parse_args($v, $result[$k]);
266
- } else {
267
- $result[$k] = $v;
268
- }
269
- }
270
- return $result;
271
- }
272
-
273
- function init() {
274
- add_action('init', array($this, 'options'));
275
- add_filter('default_option_qlwapp', array($this, 'wac_options'), 10);
276
- }
277
-
278
- public static function instance() {
279
- if (!isset(self::$instance)) {
280
- self::$instance = new self();
281
- self::$instance->defaults();
282
- self::$instance->init();
283
- }
284
- return self::$instance;
285
- }
286
-
287
- }
288
-
289
- QLWAPP_Options::instance();
290
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/frontend.php CHANGED
@@ -14,7 +14,22 @@ if (!class_exists('QLWAPP_Frontend')) {
14
 
15
  global $qlwapp;
16
 
17
- if ($display = apply_filters('qlwapp_box_display', '__return_true')) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
18
 
19
  if (is_file($file = apply_filters('qlwapp_box_template', QLWAPP_PLUGIN_DIR . 'template/box.php'))) {
20
  include_once $file;
@@ -23,19 +38,20 @@ if (!class_exists('QLWAPP_Frontend')) {
23
  }
24
 
25
  function add_frontend_css() {
26
- global $qlwapp;
 
27
  ?>
28
  <style>
29
  :root {
30
  <?php
31
- foreach ($qlwapp['scheme'] as $key => $value) {
32
  if ($value != '') {
33
  printf('--%s-scheme-%s:%s;', QLWAPP_DOMAIN, $key, $value);
34
  }
35
  }
36
  ?>
37
  }
38
- <?php if ($qlwapp['scheme']['brand']): ?>
39
  #qlwapp .qlwapp-toggle,
40
  #qlwapp .qlwapp-box .qlwapp-header,
41
  #qlwapp .qlwapp-box .qlwapp-user,
@@ -43,7 +59,7 @@ if (!class_exists('QLWAPP_Frontend')) {
43
  background-color: var(--qlwapp-scheme-brand);
44
  }
45
  <?php endif; ?>
46
- <?php if ($qlwapp['scheme']['text']): ?>
47
  #qlwapp .qlwapp-toggle,
48
  #qlwapp .qlwapp-toggle .qlwapp-icon,
49
  #qlwapp .qlwapp-toggle .qlwapp-text,
@@ -56,62 +72,64 @@ if (!class_exists('QLWAPP_Frontend')) {
56
  <?php
57
  }
58
 
59
- function box_display($display) {
60
-
61
- global $qlwapp, $wp_query;
62
 
 
 
 
63
  if (is_customize_preview()) {
64
  return true;
65
  }
66
 
67
- if (count($qlwapp['display']['target'])) {
68
 
69
  if (is_front_page() || is_home() || is_search() || is_404()) {
70
- $display = false;
71
  }
72
 
73
- if (is_front_page() && in_array('home', $qlwapp['display']['target'])) {
74
  return true;
75
  }
76
 
77
- if (is_home() && in_array('blog', $qlwapp['display']['target'])) {
78
  return true;
79
  }
80
 
81
- if (is_search() && in_array('search', $qlwapp['display']['target'])) {
82
  return true;
83
  }
84
 
85
- if (is_404() && in_array('error', $qlwapp['display']['target'])) {
86
  return true;
87
  }
88
  }
89
 
90
  if (is_archive() && isset($wp_query->queried_object->taxonomy)) {
91
 
92
- if (isset($qlwapp['display'][$wp_query->queried_object->taxonomy]) && count($qlwapp['display'][$wp_query->queried_object->taxonomy])) {
93
 
94
- $display = false;
95
 
96
- if (in_array($wp_query->queried_object->term_id, $qlwapp['display'][$wp_query->queried_object->taxonomy])) {
97
  return true;
98
  }
99
 
100
  //backward compatibility for $term->name
101
- if (in_array($wp_query->queried_object->slug, $qlwapp['display'][$wp_query->queried_object->taxonomy])) {
102
  return true;
103
  }
104
  }
105
  }
106
 
107
- return $display;
108
  }
109
 
110
  function do_shortcode($atts, $content = null) {
111
 
112
- global $qlwapp;
 
113
 
114
- $atts = wp_parse_args($atts, $qlwapp['button']);
115
 
116
  ob_start();
117
  ?>
14
 
15
  global $qlwapp;
16
 
17
+ include_once(QLWAPP_PLUGIN_DIR . 'includes/models/Box.php');
18
+ include_once(QLWAPP_PLUGIN_DIR . 'includes/models/Contact.php');
19
+ include_once(QLWAPP_PLUGIN_DIR . 'includes/models/Display.php');
20
+ include_once(QLWAPP_PLUGIN_DIR . 'includes/models/Button.php');
21
+
22
+ $box_model = new QLWAPP_Box();
23
+ $contact_model = new QLWAPP_Contact();
24
+ $button_model = new QLWAPP_Button();
25
+ $display_model = new QLWAPP_Display();
26
+
27
+ $contacts = $contact_model->get_contacts_reorder();
28
+ $display = $display_model->get();
29
+ $button = $button_model->get();
30
+ $box = $box_model->get();
31
+
32
+ if ($show = apply_filters('qlwapp_box_display', '__return_true')) {
33
 
34
  if (is_file($file = apply_filters('qlwapp_box_template', QLWAPP_PLUGIN_DIR . 'template/box.php'))) {
35
  include_once $file;
38
  }
39
 
40
  function add_frontend_css() {
41
+ $scheme_model = new QLWAPP_Scheme();
42
+ $scheme = $scheme_model->get();
43
  ?>
44
  <style>
45
  :root {
46
  <?php
47
+ foreach ($scheme as $key => $value) {
48
  if ($value != '') {
49
  printf('--%s-scheme-%s:%s;', QLWAPP_DOMAIN, $key, $value);
50
  }
51
  }
52
  ?>
53
  }
54
+ <?php if ($scheme['brand']): ?>
55
  #qlwapp .qlwapp-toggle,
56
  #qlwapp .qlwapp-box .qlwapp-header,
57
  #qlwapp .qlwapp-box .qlwapp-user,
59
  background-color: var(--qlwapp-scheme-brand);
60
  }
61
  <?php endif; ?>
62
+ <?php if ($scheme['text']): ?>
63
  #qlwapp .qlwapp-toggle,
64
  #qlwapp .qlwapp-toggle .qlwapp-icon,
65
  #qlwapp .qlwapp-toggle .qlwapp-text,
72
  <?php
73
  }
74
 
75
+ function box_display($show) {
 
 
76
 
77
+ global $wp_query;
78
+ $display_model = new QLWAPP_Display();
79
+ $display = $display_model->get();
80
  if (is_customize_preview()) {
81
  return true;
82
  }
83
 
84
+ if (count($display['target'])) {
85
 
86
  if (is_front_page() || is_home() || is_search() || is_404()) {
87
+ $show = false;
88
  }
89
 
90
+ if (is_front_page() && in_array('home', $display['target'])) {
91
  return true;
92
  }
93
 
94
+ if (is_home() && in_array('blog', $display['target'])) {
95
  return true;
96
  }
97
 
98
+ if (is_search() && in_array('search', $display['target'])) {
99
  return true;
100
  }
101
 
102
+ if (is_404() && in_array('error', $display['target'])) {
103
  return true;
104
  }
105
  }
106
 
107
  if (is_archive() && isset($wp_query->queried_object->taxonomy)) {
108
 
109
+ if (isset($display[$wp_query->queried_object->taxonomy]) && count($display[$wp_query->queried_object->taxonomy])) {
110
 
111
+ $show = false;
112
 
113
+ if (in_array($wp_query->queried_object->term_id, $display[$wp_query->queried_object->taxonomy])) {
114
  return true;
115
  }
116
 
117
  //backward compatibility for $term->name
118
+ if (in_array($wp_query->queried_object->slug, $display[$wp_query->queried_object->taxonomy])) {
119
  return true;
120
  }
121
  }
122
  }
123
 
124
+ return $show;
125
  }
126
 
127
  function do_shortcode($atts, $content = null) {
128
 
129
+ $button_model = new QLWAPP_Button();
130
+ $button = $button_model->get();
131
 
132
+ $atts = wp_parse_args($atts, $button);
133
 
134
  ob_start();
135
  ?>
includes/helpers.php ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ function qlwapp_format_phone($phone) {
4
+
5
+ $phone = preg_replace('/[^0-9]/', '', $phone);
6
+
7
+ $phone = ltrim($phone, '0');
8
+
9
+ return $phone;
10
+ }
11
+
12
+ function qlwapp_get_timezone_offset($timezone) {
13
+ if (strpos($timezone, 'UTC') !== false) {
14
+ $offset = preg_replace('/UTC\+?/', '', $timezone) * 60;
15
+ } else {
16
+ $current = timezone_open($timezone);
17
+ $utc = new \DateTime('now', new \DateTimeZone('UTC'));
18
+ $offset = $current->getOffset($utc) / 3600 * 60;
19
+ }
20
+ return $offset;
21
+ }
22
+
23
+ function qlwapp_get_current_timezone() {
24
+ // Get user settings
25
+ $current_offset = get_option('gmt_offset');
26
+ $tzstring = get_option('timezone_string');
27
+
28
+ $check_zone_info = true;
29
+
30
+ // Remove old Etc mappings. Fallback to gmt_offset.
31
+ if (false !== strpos($tzstring, 'Etc/GMT')) {
32
+ $tzstring = '';
33
+ }
34
+
35
+ if (empty($tzstring)) {
36
+ // Create a UTC+- zone if no timezone string exists
37
+ $check_zone_info = false;
38
+ if (0 == $current_offset) {
39
+ $tzstring = 'UTC+0';
40
+ } elseif ($current_offset < 0) {
41
+ $tzstring = 'UTC' . $current_offset;
42
+ } else {
43
+ $tzstring = 'UTC+' . $current_offset;
44
+ }
45
+ }
46
+ return $tzstring;
47
+ }
includes/models/Box.php ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ include_once 'QLWAPP_Model.php';
4
+
5
+ class QLWAPP_Box extends QLWAPP_Model {
6
+
7
+ protected $table = 'box';
8
+
9
+ function get_args() {
10
+ $args = array(
11
+ 'enable' => 'no',
12
+ 'header' => '<h3>Hello!</h3><p>Click one of our representatives below to chat on WhatsApp or send us an email to <a href="mailto:' . get_bloginfo('admin_email') . '">' . get_bloginfo('admin_email') . '</a></p>',
13
+ 'footer' => '<p>Powered by <a target="_blank" href="' . QLWAPP_PURCHASE_URL . '">WhatsApp Chat</a>',
14
+ 'response' => esc_html__('Write a response', 'wp-whatsapp-chat')
15
+ // ,'contactstimeout' => 'no'
16
+ );
17
+ return $args;
18
+ }
19
+
20
+ function sanitize($settings) {
21
+
22
+ if (isset($settings['header'])) {
23
+ $settings['header'] = wp_kses_post($settings['header']);
24
+ }
25
+ if (isset($settings['footer'])) {
26
+ $settings['footer'] = wp_kses_post($settings['footer']);
27
+ }
28
+ return $settings;
29
+ }
30
+
31
+ function save($box_data = NULL) {
32
+ // return $this->sanitize($box_data);
33
+ return parent::save_data($this->table, $this->sanitize($box_data));
34
+ }
35
+
36
+ }
includes/models/Button.php ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ include_once 'QLWAPP_Model.php';
4
+
5
+ class QLWAPP_Button extends QLWAPP_Model {
6
+
7
+ protected $table = 'button';
8
+
9
+ function get_args() {
10
+
11
+ $args = array(
12
+ 'layout' => 'button',
13
+ 'position' => 'bottom-right',
14
+ 'text' => esc_html__('How can I help you?', 'wp-whatsapp-chat'),
15
+ 'message' => sprintf(esc_html__('Hello! I\'m testing the %s plugin @https://quadlayers.com', 'wp-whatsapp-chat'), QLWAPP_PLUGIN_NAME),
16
+ 'icon' => 'qlwapp-whatsapp-icon',
17
+ 'phone' => '542215677768',
18
+ 'developer' => 'no',
19
+ 'rounded' => 'yes',
20
+ 'timefrom' => '00:00',
21
+ 'timeto' => '00:00',
22
+ 'timezone' => qlwapp_get_current_timezone(),
23
+ 'timeout' => 'readonly'
24
+ );
25
+
26
+ return $args;
27
+ }
28
+
29
+ function sanitize($settings) {
30
+
31
+ if (isset($settings['layout'])) {
32
+ $settings['layout'] = sanitize_html_class($settings['layout']);
33
+ }
34
+ if (isset($settings['position'])) {
35
+ $settings['position'] = sanitize_html_class($settings['position']);
36
+ }
37
+ if (isset($settings['text'])) {
38
+ $settings['text'] = sanitize_text_field($settings['text']);
39
+ }
40
+ if (isset($settings['message'])) {
41
+ $settings['message'] = sanitize_text_field($settings['message']);
42
+ }
43
+ // if (isset($settings['contactstimeout'])) {
44
+ // $settings['box']['contactstimeout'] = sanitize_text_field($settings['box']['contactstimeout']);
45
+ // }
46
+ if (isset($settings['icon'])) {
47
+ $settings['icon'] = sanitize_html_class($settings['icon']);
48
+ }
49
+ if (isset($settings['phone'])) {
50
+ $settings['phone'] = qlwapp_format_phone($settings['phone']);
51
+ }
52
+
53
+ return $settings;
54
+ }
55
+
56
+ function save($button_data = NULL) {
57
+ return parent::save_data($this->table, $this->sanitize($button_data));
58
+ }
59
+ }
includes/models/Chat.php ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class QLWAPP_Chat extends QLWAPP_Model {
4
+
5
+ protected $table = 'chat';
6
+
7
+ function get_args() {
8
+
9
+ $args = array(
10
+ // 'contact' => $contact,
11
+ 'emoji' => 'no',
12
+ );
13
+ return $args;
14
+ }
15
+
16
+ }
includes/models/Contact.php ADDED
@@ -0,0 +1,136 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ include_once(QLWAPP_PLUGIN_DIR . 'includes/helpers.php');
4
+
5
+ class QLWAPP_Contact extends QLWAPP_Model {
6
+
7
+ protected $table = 'contacts';
8
+
9
+ function get_args() {
10
+ $args = array(
11
+ 'id' => null,
12
+ 'order' => 1,
13
+ // Defaults
14
+ // -----------------------------------------------------------------
15
+ 'chat' => true,
16
+ 'avatar' => 'https://www.gravatar.com/avatar/00000000000000000000000000000000',
17
+ 'phone' => '542215677768',
18
+ 'firstname' => 'John',
19
+ 'lastname' => 'Doe',
20
+ 'label' => esc_html__('Support', 'wp-whatsapp-chat'),
21
+ 'message' => esc_html__('Hello! I\'m John from the support team.', 'wp-whatsapp-chat'),
22
+ 'timefrom' => '00:00',
23
+ 'timeto' => '00:00',
24
+ 'timezone' => qlwapp_get_current_timezone(),
25
+ 'timeout' => 'readonly'
26
+ );
27
+ return $args;
28
+ }
29
+
30
+ function get_next_id() {
31
+ $contactos = $this->get_contacts();
32
+ if (count($contactos)) {
33
+ return max(array_keys($contactos)) + 1;
34
+ }
35
+ return 0;
36
+ }
37
+
38
+ function add_contact($contact_data) {
39
+ $contact_data['id'] = $this->get_next_id();
40
+ $contact_data['order'] = count($this->get_contacts()) + 1;
41
+ return $this->save($contact_data);
42
+ }
43
+
44
+ function update_contact($contact_data) {
45
+ return $this->save($contact_data);
46
+ }
47
+
48
+ function update_contacts($contacts) {
49
+ return $this->save_data($this->table, $this->sanitize_value_data($contacts));
50
+ }
51
+
52
+ function save($contact_data = NULL) {
53
+ $contacts = $this->get_contacts();
54
+ $contacts[$contact_data['id']] = wp_parse_args($contact_data, $this->get_args());
55
+ return $this->save_data($this->table, $this->sanitize_value_data($contacts));
56
+ }
57
+
58
+ function delete($id = NULL) {
59
+ $contacts = parent::get_all($this->table);
60
+ if ($contacts) {
61
+ if (count($contacts) > 0) {
62
+ unset($contacts[$id]);
63
+ return $this->save_data($this->table, $this->sanitize_value_data($contacts));
64
+ }
65
+ }
66
+ return false;
67
+ }
68
+
69
+ function settings_sanitize($settings) {
70
+
71
+ if (isset($settings['contacts'])) {
72
+ if (count($settings['contacts'])) {
73
+ foreach ($settings['contacts'] as $id => $c) {
74
+ $settings['contacts'][$id]['id'] = $id;
75
+ $settings['contacts'][$id]['chat'] = (bool) $settings['contacts'][$id]['chat'];
76
+ $settings['contacts'][$id]['avatar'] = sanitize_text_field($settings['contacts'][$id]['avatar']);
77
+ $settings['contacts'][$id]['phone'] = sanitize_text_field($settings['contacts'][$id]['phone']);
78
+ $settings['contacts'][$id]['firstname'] = sanitize_text_field($settings['contacts'][$id]['firstname']);
79
+ $settings['contacts'][$id]['lastname'] = sanitize_text_field($settings['contacts'][$id]['lastname']);
80
+ $settings['contacts'][$id]['label'] = sanitize_text_field($settings['contacts'][$id]['label']);
81
+ $settings['contacts'][$id]['message'] = wp_kses_post($settings['contacts'][$id]['message']);
82
+ $settings['contacts'][$id]['timeto'] = wp_kses_post($settings['contacts'][$id]['timeto']);
83
+ $settings['contacts'][$id]['phone'] = qlwapp_format_phone($settings['contacts'][$id]['phone']);
84
+ }
85
+ }
86
+ }
87
+
88
+ return $settings;
89
+ }
90
+
91
+ function sanitize_value_data($contacts, $args = null) {
92
+ //$contact_sanitized = array();
93
+ foreach ($contacts as $key => $contact) {
94
+ $contacts[$key] = parent::sanitize_value_data($contact, $this->get_args());
95
+ }
96
+ return $contacts;
97
+ }
98
+
99
+ // asumir que el id es igual al orden dentro del array
100
+ function get_contact($id) {
101
+ $parent_id = @max(array_keys(array_column($contacts, 'id'), $id));
102
+ $contacts = $this->get_contacts();
103
+ $contacts[$id];
104
+ return $contacts[$id];
105
+ }
106
+
107
+ function get_contacts() {
108
+ // $this->contacts see how to avoid multiple db calls in the same execution
109
+ $result = parent::get_all($this->table);
110
+ if ($result === NULL || count($result) === 0) {
111
+ $default = array();
112
+ $default[0] = $this->get_args();
113
+ $default[0]['id'] = 0;
114
+ $result = $default;
115
+ }
116
+ return $result;
117
+ }
118
+
119
+ function order_contact($a, $b) {
120
+
121
+ if (!isset($a['order']) || !isset($b['order']))
122
+ return 0;
123
+
124
+ if ($a['order'] == $b['order'])
125
+ return 0;
126
+
127
+ return ( $a['order'] < $b['order'] ) ? -1 : 1;
128
+ }
129
+
130
+ function get_contacts_reorder() {
131
+ $contacts = $this->get_contacts();
132
+ uasort($contacts, array($this, 'order_contact'));
133
+ return $contacts;
134
+ }
135
+
136
+ }
includes/models/Display.php ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class QLWAPP_Display extends QLWAPP_Model {
4
+
5
+ protected $table = 'display';
6
+
7
+ function get_args() {
8
+
9
+ $args = array(
10
+ 'devices' => 'all',
11
+ 'target' => array(),
12
+ 'page' => array(),
13
+ 'post' => array(),
14
+ 'category' => array(),
15
+ );
16
+ return $args;
17
+ }
18
+
19
+ function save($display_data = NULL) {
20
+ return parent::save_data($this->table, $display_data);
21
+ }
22
+
23
+
24
+ }
includes/models/License.php ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class QLWAPP_License extends QLWAPP_Model {
4
+
5
+ protected $table = 'license';
6
+
7
+ function get_args() {
8
+
9
+ $args = array(
10
+ 'market' => 'quadlayers',
11
+ 'key' => '',
12
+ 'email' => ''
13
+ );
14
+ return $args;
15
+ }
16
+
17
+ }
includes/models/QLWAPP_Model.php ADDED
@@ -0,0 +1,69 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ include_once(QLWAPP_PLUGIN_DIR . 'includes/helpers.php');
4
+
5
+ class QLWAPP_Model {
6
+
7
+ // == schema
8
+ function options() {
9
+ $options = array();
10
+ $options['box'] = array();
11
+ $options['button'] = array();
12
+ $options['chat'] = array();
13
+ $options['contacts'] = array();
14
+ $options['display'] = array();
15
+ $options['scheme'] = array();
16
+ $options['license'] = array();
17
+ return $options;
18
+ }
19
+
20
+ function get() {
21
+
22
+ $result = $this->get_all($this->table);
23
+ return wp_parse_args($result, $this->get_args());
24
+ }
25
+
26
+
27
+ public function sanitize_value_data($value_data, $args) {
28
+
29
+ foreach ($value_data as $key => $value) {
30
+
31
+ if (array_key_exists($key, $args)) {
32
+
33
+ $type = $args[$key];
34
+
35
+ if (is_null($type) && !is_numeric($value)) {
36
+ $value_data[$key] = intval($value);
37
+ } elseif (is_bool($type) && !is_bool($value)) {
38
+ $value_data[$key] = ($value === 'true' || $value === '1' || $value === 1);
39
+ } elseif (is_string($type) && !is_string($value)) {
40
+ $value_data[$key] = strval($value);
41
+ } elseif (is_array($type) && !is_array($value)) {
42
+ $value_data[$key] = (array) $type;
43
+ }
44
+ } else {
45
+ unset($value_data[$key]);
46
+ }
47
+ }
48
+
49
+ return $value_data;
50
+ }
51
+
52
+ function save_all($qlwapp) {
53
+ return update_option('qlwapp', $qlwapp);
54
+ }
55
+
56
+ function save_data($key = null, $data = null) {
57
+ $qlwapp = get_option('qlwapp');
58
+ $qlwapp[$key] = $data;
59
+ return $this->save_all($qlwapp);
60
+ }
61
+
62
+ function get_all($key) {
63
+ $qlwapp = get_option('qlwapp', array());
64
+ $qlwapp = wp_parse_args($qlwapp, $this->options());
65
+ $res = $qlwapp[$key];
66
+ return $res;
67
+ }
68
+
69
+ }
includes/models/Scheme.php ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ include_once 'QLWAPP_Model.php';
4
+
5
+ class QLWAPP_Scheme extends QLWAPP_Model {
6
+
7
+ protected $table = 'scheme';
8
+
9
+ function get_args() {
10
+
11
+ $args = array(
12
+ 'brand' => '',
13
+ 'text' => '',
14
+ 'link' => '',
15
+ 'message' => '',
16
+ 'label' => '',
17
+ 'name' => '',
18
+ );
19
+ return $args;
20
+ }
21
+
22
+ function save($scheme = NULL) {
23
+ return parent::save_data($this->table, $scheme);
24
+ }
25
+
26
+
27
+ }
includes/{suggestions.php → models/Suggestions.php} RENAMED
@@ -1,132 +1,132 @@
1
- <?php
2
-
3
- require_once( ABSPATH . 'wp-admin/includes/class-wp-plugin-install-list-table.php' );
4
-
5
- class QLWAPP_Suggestions_List_Table extends WP_Plugin_Install_List_Table {
6
-
7
- public $promote = array(
8
- 'wp-menu-icons',
9
- 'wp-whatsapp-chat',
10
- 'insta-gallery',
11
- 'quadmenu',
12
- 'woocommerce-checkout-manager',
13
- 'woocommerce-direct-checkout',
14
- );
15
-
16
- private function remove_plugins($plugins) {
17
-
18
- $promote = array();
19
-
20
- foreach ($this->promote as $order => $slug) {
21
-
22
- if ($id = @max(array_keys(array_column($plugins, 'slug'), $slug))) {
23
-
24
- $promote[] = $plugins[$id];
25
- }
26
- }
27
-
28
- return $promote;
29
- }
30
-
31
- public function self_admin_url($url, $path) {
32
-
33
- if (strpos($url, 'tab=plugin-information') !== false) {
34
- $url = network_admin_url($path);
35
- }
36
-
37
- return $url;
38
- }
39
-
40
- public function network_admin_url($url, $path) {
41
-
42
- if (strpos($url, 'plugins.php') !== false) {
43
- $url = self_admin_url($path);
44
- }
45
-
46
- return $url;
47
- }
48
-
49
- public function display_rows() {
50
- add_filter('self_admin_url', array($this, 'self_admin_url'), 10, 2);
51
- add_filter('network_admin_url', array($this, 'network_admin_url'), 10, 2);
52
- parent::display_rows();
53
- }
54
-
55
- public function is_connected() {
56
-
57
- global $wp_version;
58
-
59
- $http_args = array(
60
- 'timeout' => 15,
61
- 'user-agent' => 'WordPress/' . $wp_version . '; ' . home_url('/'),
62
- );
63
-
64
- return is_wp_error(wp_remote_get('http://api.wordpress.org/plugins/info/1.2/', $http_args));
65
- }
66
-
67
- public function get_plugins() {
68
-
69
- $plugins = get_transient('ql_suggestions_plugins');
70
-
71
- if ($plugins === false) {
72
-
73
- $args = array(
74
- 'per_page' => 36,
75
- 'author' => 'quadlayers',
76
- 'locale' => get_user_locale(),
77
- );
78
-
79
- $api = plugins_api('query_plugins', $args);
80
-
81
- if (!is_wp_error($api)) {
82
-
83
- $plugins = $this->remove_plugins($api->plugins);
84
-
85
- set_transient('ql_suggestions_plugins', $plugins, 24 * HOUR_IN_SECONDS);
86
- }
87
- }
88
-
89
- return $plugins;
90
- }
91
-
92
- public function prepare_items() {
93
-
94
- include_once( ABSPATH . 'wp-admin/includes/plugin-install.php' );
95
-
96
- global $tabs, $tab;
97
-
98
- wp_enqueue_style('thickbox');
99
- wp_enqueue_script('plugin-install');
100
- wp_enqueue_script('thickbox');
101
- wp_enqueue_script('updates');
102
-
103
- wp_reset_vars(array('tab'));
104
-
105
- $tabs = array();
106
-
107
- if ('search' === $tab) {
108
- $tabs['search'] = __('Search Results');
109
- }
110
- if ($tab === 'beta' || false !== strpos(get_bloginfo('version'), '-')) {
111
- $tabs['beta'] = _x('Beta Testing', 'Plugin Installer');
112
- }
113
- $tabs['featured'] = _x('Featured', 'Plugin Installer');
114
- $tabs['popular'] = _x('Popular', 'Plugin Installer');
115
- $tabs['recommended'] = _x('Recommended', 'Plugin Installer');
116
- $tabs['favorites'] = _x('Favorites', 'Plugin Installer');
117
-
118
- $nonmenu_tabs = array('plugin-information'); // Valid actions to perform which do not have a Menu item.
119
-
120
- $tabs = apply_filters('install_plugins_tabs', $tabs);
121
-
122
- $nonmenu_tabs = apply_filters('install_plugins_nonmenu_tabs', $nonmenu_tabs);
123
-
124
- // If a non-valid menu tab has been selected, And it's not a non-menu action.
125
- if (empty($tab) || (!isset($tabs[$tab]) && !in_array($tab, (array) $nonmenu_tabs) )) {
126
- $tab = key($tabs);
127
- }
128
-
129
- $this->items = $this->get_plugins();
130
- }
131
-
132
- }
1
+ <?php
2
+
3
+ require_once( ABSPATH . 'wp-admin/includes/class-wp-plugin-install-list-table.php' );
4
+
5
+ class QLWAPP_Suggestions_List_Table extends WP_Plugin_Install_List_Table {
6
+
7
+ public $promote = array(
8
+ 'wp-menu-icons',
9
+ 'wp-whatsapp-chat',
10
+ 'insta-gallery',
11
+ 'quadmenu',
12
+ 'woocommerce-checkout-manager',
13
+ 'woocommerce-direct-checkout',
14
+ );
15
+
16
+ private function remove_plugins($plugins) {
17
+
18
+ $promote = array();
19
+
20
+ foreach ($this->promote as $order => $slug) {
21
+
22
+ if ($id = @max(array_keys(array_column($plugins, 'slug'), $slug))) {
23
+
24
+ $promote[] = $plugins[$id];
25
+ }
26
+ }
27
+
28
+ return $promote;
29
+ }
30
+
31
+ public function self_admin_url($url, $path) {
32
+
33
+ if (strpos($url, 'tab=plugin-information') !== false) {
34
+ $url = network_admin_url($path);
35
+ }
36
+
37
+ return $url;
38
+ }
39
+
40
+ public function network_admin_url($url, $path) {
41
+
42
+ if (strpos($url, 'plugins.php') !== false) {
43
+ $url = self_admin_url($path);
44
+ }
45
+
46
+ return $url;
47
+ }
48
+
49
+ public function display_rows() {
50
+ add_filter('self_admin_url', array($this, 'self_admin_url'), 10, 2);
51
+ add_filter('network_admin_url', array($this, 'network_admin_url'), 10, 2);
52
+ parent::display_rows();
53
+ }
54
+
55
+ public function is_connected() {
56
+
57
+ global $wp_version;
58
+
59
+ $http_args = array(
60
+ 'timeout' => 15,
61
+ 'user-agent' => 'WordPress/' . $wp_version . '; ' . home_url('/'),
62
+ );
63
+
64
+ return is_wp_error(wp_remote_get('http://api.wordpress.org/plugins/info/1.2/', $http_args));
65
+ }
66
+
67
+ public function get_plugins() {
68
+
69
+ $plugins = get_transient('ql_suggestions_plugins');
70
+
71
+ if ($plugins === false) {
72
+
73
+ $args = array(
74
+ 'per_page' => 36,
75
+ 'author' => 'quadlayers',
76
+ 'locale' => get_user_locale(),
77
+ );
78
+
79
+ $api = plugins_api('query_plugins', $args);
80
+
81
+ if (!is_wp_error($api)) {
82
+
83
+ $plugins = $this->remove_plugins($api->plugins);
84
+
85
+ set_transient('ql_suggestions_plugins', $plugins, 24 * HOUR_IN_SECONDS);
86
+ }
87
+ }
88
+
89
+ return $plugins;
90
+ }
91
+
92
+ public function prepare_items() {
93
+
94
+ include_once( ABSPATH . 'wp-admin/includes/plugin-install.php' );
95
+
96
+ global $tabs, $tab;
97
+
98
+ wp_enqueue_style('thickbox');
99
+ wp_enqueue_script('plugin-install');
100
+ wp_enqueue_script('thickbox');
101
+ wp_enqueue_script('updates');
102
+
103
+ wp_reset_vars(array('tab'));
104
+
105
+ $tabs = array();
106
+
107
+ if ('search' === $tab) {
108
+ $tabs['search'] = __('Search Results');
109
+ }
110
+ if ($tab === 'beta' || false !== strpos(get_bloginfo('version'), '-')) {
111
+ $tabs['beta'] = _x('Beta Testing', 'Plugin Installer');
112
+ }
113
+ $tabs['featured'] = _x('Featured', 'Plugin Installer');
114
+ $tabs['popular'] = _x('Popular', 'Plugin Installer');
115
+ $tabs['recommended'] = _x('Recommended', 'Plugin Installer');
116
+ $tabs['favorites'] = _x('Favorites', 'Plugin Installer');
117
+
118
+ $nonmenu_tabs = array('plugin-information'); // Valid actions to perform which do not have a Menu item.
119
+
120
+ $tabs = apply_filters('install_plugins_tabs', $tabs);
121
+
122
+ $nonmenu_tabs = apply_filters('install_plugins_nonmenu_tabs', $nonmenu_tabs);
123
+
124
+ // If a non-valid menu tab has been selected, And it's not a non-menu action.
125
+ if (empty($tab) || (!isset($tabs[$tab]) && !in_array($tab, (array) $nonmenu_tabs) )) {
126
+ $tab = key($tabs);
127
+ }
128
+
129
+ $this->items = $this->get_plugins();
130
+ }
131
+
132
+ }
includes/models/Welcome.php ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class QLWAPP_Welcome {
4
+
5
+ function get_args() {
6
+
7
+ $args = array(
8
+ );
9
+ return $args;
10
+ }
11
+
12
+ }
includes/pages/box.php DELETED
@@ -1,205 +0,0 @@
1
- <form method="post" action="options.php">
2
- <?php settings_fields(sanitize_key(QLWAPP_DOMAIN . '-group')); ?>
3
- <?php do_settings_sections(sanitize_key(QLWAPP_DOMAIN . '-group')); ?>
4
- <table class="form-table">
5
- <tbody>
6
- <tr>
7
- <th scope="row"><?php esc_html_e('Disable', 'wp-whatsapp-chat'); ?></th>
8
- <td>
9
- <select name="<?php echo esc_attr(QLWAPP_DOMAIN); ?>[box][enable]" class="qlwapp-select2">
10
- <option value="yes" <?php selected($qlwapp['box']['enable'], 'yes'); ?>><?php esc_html_e('Enable contact box', 'wp-whatsapp-chat'); ?></option>
11
- <option value="no" <?php selected($qlwapp['box']['enable'], 'no'); ?>><?php esc_html_e('Disable contact box', 'wp-whatsapp-chat'); ?></option>
12
- </select>
13
- </td>
14
- </tr>
15
- <tr>
16
- <th scope="row"><?php esc_html_e('Header', 'wp-whatsapp-chat'); ?></th>
17
- <td>
18
- <?php wp_editor($qlwapp['box']['header'], 'qlwapp_box_header', array('editor_height' => 200, 'textarea_name' => esc_attr(QLWAPP_DOMAIN) . '[box][header]')); ?>
19
- </td>
20
- </tr>
21
- <tr>
22
- <th scope="row"><?php esc_html_e('Footer', 'wp-whatsapp-chat'); ?></th>
23
- <td>
24
- <?php wp_editor($qlwapp['box']['footer'], 'qlwapp_box_footer', array('editor_height' => 200, 'textarea_name' => esc_attr(QLWAPP_DOMAIN) . '[box][footer]')); ?>
25
- </td>
26
- </tr>
27
- <tr>
28
- <th scope="row"><?php esc_html_e('Response', 'wp-whatsapp-chat'); ?></th>
29
- <td>
30
- <input type="text" name="<?php echo esc_attr(QLWAPP_DOMAIN . '[chat][response]'); ?>" placeholder="<?php echo esc_html($this->defaults['chat']['response']); ?>" value="<?php echo esc_attr($qlwapp['chat']['response']); ?>" class="qlwapp-input"/>
31
- <p class="description hidden"><?php esc_html_e('Write a response text.', 'wp-whatsapp-chat'); ?></p>
32
- </td>
33
- </tr>
34
- <!-- // sal de momento, ver el js y el defaults
35
- <tr>
36
- <th scope="row"><?php// esc_html_e('Contacts time is over, what to do if there are no contacts in the time range', 'wp-whatsapp-chat'); ?></th>
37
- <td class="qlwapp-premium-field">
38
- <select name="<?php //echo esc_attr(QLWAPP_DOMAIN . '[box][contactstimeout]'); ?>" class="qlwapp-select2">
39
- <option value="yes" <?php //selected($qlwapp['box']['contactstimeout'], 'yes'); ?>><?php //esc_html_e('Show the button as read only', 'wp-whatsapp-chat'); ?></option>
40
- <option value="no" <?php //selected($qlwapp['box']['contactstimeout'], 'no'); ?>><?php //esc_html_e('Do not show the button', 'wp-whatsapp-chat'); ?></option>
41
- </select>
42
- <p class="description"><?php //esc_html_e('Contacts time is over, what to do if there are no contacts in the time range', 'wp-whatsapp-chat'); ?></span>
43
- <p class="description hidden"><small><?php //esc_html_e('This is a premium feature', 'wp-whatsapp-chat'); ?></small></p>
44
- </td>
45
- </tr>-->
46
- <tr>
47
- <th scope="row">
48
- <?php esc_html_e('Contacts', 'wp-whatsapp-chat'); ?>
49
- </th>
50
- <td>
51
- <table id="qlwapp-contact-form" class="form-table widefat hidden" data-editindex="-1">
52
- <?php $this->contact_table(); ?>
53
- <tfoot>
54
- <tr>
55
- <td colspan="2">
56
- <?php submit_button(esc_html__('Save Contact', 'wp-whatsapp-chat'), 'primary', null, false, array('id' => 'btn-save-contact')); ?>
57
- <span class="spinner"></span>
58
- </td>
59
- </tr>
60
- <tfoot>
61
- </table>
62
- <div class="submit qlwapp-premium-field">
63
- <?php submit_button(esc_html__('Add Contact', 'wp-whatsapp-chat'), 'secondary', null, false, array('id' => 'btn-add-contact')); ?>
64
- <p class="description hidden"><small><?php esc_html_e('This is a premium feature', 'wp-whatsapp-chat'); ?></small></p>
65
- </div>
66
- <table id="qlwapp-contacts-table" class="form-table widefat striped">
67
- <thead>
68
- <tr>
69
- <td><b><?php esc_html_e('Avatar', 'wp-whatsapp-chat'); ?></b></td>
70
- <td><b><?php esc_html_e('Phone', 'wp-whatsapp-chat'); ?></b></td>
71
- <td><b><?php esc_html_e('Name', 'wp-whatsapp-chat'); ?></b></td>
72
- <td><b><?php esc_html_e('Label', 'wp-whatsapp-chat'); ?></b></td>
73
- <td><b><?php esc_html_e('Message', 'wp-whatsapp-chat'); ?></b></td>
74
- <td><b><?php esc_html_e('Chat', 'wp-whatsapp-chat'); ?></b></td>
75
- <td><b><?php esc_html_e('Actions', 'wp-whatsapp-chat'); ?></b></td>
76
- </tr>
77
- </thead>
78
- <tbody>
79
- </tbody>
80
- </table>
81
- </td>
82
- </tr>
83
- </tbody>
84
- </table>
85
- <?php submit_button() ?>
86
- </form>
87
- <script>
88
- (function($) {
89
- let qlwapp_contacts = <?php echo json_encode($qlwapp['contacts']) ?>;
90
- let tableBody = document.querySelector('#qlwapp-contacts-table tbody');
91
- $(document).on('click', '#btn-edit-contact', function() {
92
- esc_html_edit_contact(this.dataset.cid);
93
- return false;
94
- });
95
-
96
-
97
- $('#btn-save-contact').click(function(e) {
98
-
99
- e.preventDefault();
100
- let contact = {
101
-
102
- firstname: $('#qlwapp-contact-form #cfirstname').val(),
103
- lastname: $('#qlwapp-contact-form #clastname').val(),
104
- phone: $('#qlwapp-contact-form #cphone').val(),
105
- label: $('#qlwapp-contact-form #clabel').val(),
106
- message: $('#qlwapp-contact-form #cmessage').val(),
107
- chat: $('#qlwapp-contact-form .cchat:checked').val(),
108
- avatar: $('#qlwapp-contact-form #cavatar').val(),
109
- timefrom: $('#qlwapp-contact-form #ctimefrom').val(),
110
- timeto: $('#qlwapp-contact-form #ctimeto').val(),
111
- // timeout: $('#qlwapp-contact-form #ctimeout').val(),
112
- timezone: $('#qlwapp-contact-form #ctimezone').val()
113
- }
114
-
115
- let index = document.querySelector('#qlwapp-contact-form').dataset.editindex;
116
- if (index != '-1') {
117
- qlwapp_contacts[parseInt(index)] = contact;
118
- } else {
119
- qlwapp_contacts.push(contact);
120
- }
121
- qlwapp_show_contacts();
122
- $('#qlwapp-contact-form').slideToggle();
123
- return false;
124
- });
125
- $(document).on('click', '#btn-delete-contact', function () {
126
- let index = this.dataset.cid;
127
- if (!qlwapp_contacts[index])
128
- return false;
129
- qlwapp_contacts.splice(index, 1);
130
- qlwapp_show_contacts();
131
- return false;
132
- });
133
- function qlwapp_show_contacts() {
134
- tableBody.innerHTML = '';
135
- let i = 0;
136
- for (let contact of qlwapp_contacts) {
137
- let tr = document.createElement('tr');
138
- tr.dataset.cid = i;
139
- let td1 = document.createElement('td');
140
- let td2 = document.createElement('td');
141
- let td3 = document.createElement('td');
142
- let td4 = document.createElement('td');
143
- let td5 = document.createElement('td');
144
- let td6 = document.createElement('td');
145
- let tda = document.createElement('td');
146
- let avatar = contact.avatar ? contact.avatar : 'https://www.gravatar.com/avatar/00000000000000000000000000000000';
147
- //td0.innerHTML = (i + 1);
148
- tda.innerHTML = '<img class="qlwapp-avatar" src="' + avatar + '" alt="" width="100" height="100" />' +
149
- '<input type="hidden" name="<?php echo esc_attr(QLWAPP_DOMAIN . '[contacts]'); ?>[' + i + '][avatar]" value="' + avatar + '" />';
150
- td1.innerHTML = contact.phone +
151
- '<input type="hidden" name="<?php echo esc_attr(QLWAPP_DOMAIN . '[contacts]'); ?>[' + i + '][phone]" value="' + contact.phone + '" />';
152
- td2.innerHTML = contact.firstname + ' ' + contact.lastname +
153
- '<input type="hidden" name="<?php echo esc_attr(QLWAPP_DOMAIN . '[contacts]'); ?>[' + i + '][firstname]" value="' + contact.firstname + '" />' +
154
- '<input type="hidden" name="<?php echo esc_attr(QLWAPP_DOMAIN . '[contacts]'); ?>[' + i + '][lastname]" value="' + contact.lastname + '" />';
155
- td3.innerHTML = contact.label +
156
- '<input type="hidden" name="<?php echo esc_attr(QLWAPP_DOMAIN . '[contacts]'); ?>[' + i + '][label]" value="' + contact.label + '" />';
157
- td4.innerHTML = contact.message + ' - ' + '<?php esc_html_e('Availability', 'wp-whatsapp-chat'); ?>: '+ contact.timefrom +'-'+ contact.timeto +
158
- ' - <?php esc_html_e('Timezone', 'wp-whatsapp-chat'); ?>: '+ contact.timezone+
159
- '<input type="hidden" name="<?php echo esc_attr(QLWAPP_DOMAIN . '[contacts]'); ?>[' + i + '][message]" value="' + contact.message + '" />'+
160
- '<input type="hidden" name="<?php echo esc_attr(QLWAPP_DOMAIN . '[contacts]'); ?>[' + i + '][timeto]" value="' + contact.timeto + '" />'+
161
- '<input type="hidden" name="<?php echo esc_attr(QLWAPP_DOMAIN . '[contacts]'); ?>[' + i + '][timefrom]" value="' + contact.timefrom+ '" />'+
162
- // '<input type="hidden" name="<?php // echo esc_attr(QLWAPP_DOMAIN . '[contacts]'); ?>[' + i + '][timeout]" value="' + contact.timeout + '" />'+
163
- '<input type="hidden" name="<?php echo esc_attr(QLWAPP_DOMAIN . '[contacts]'); ?>[' + i + '][timezone]" value="' + contact.timezone + '" />' ;
164
-
165
- td5.innerHTML = (Number(contact.chat) ? 'Enabled' : 'Disabled') +
166
- '<input type="hidden" name="<?php echo esc_attr(QLWAPP_DOMAIN . '[contacts]'); ?>[' + i + '][chat]" value="' + Number(contact.chat) + '" />';
167
- td6.innerHTML = '<a href="javascript:;" id="btn-delete-contact" data-cid="' + i + '">Remove</a> | ' +
168
- '<a href="javascript:;" id="btn-edit-contact" data-cid="' + i + '">Edit</a>';
169
- //tr.appendChild(td0);
170
- tr.appendChild(tda);
171
- tr.appendChild(td1);
172
- tr.appendChild(td2);
173
- tr.appendChild(td3);
174
- tr.appendChild(td4);
175
- tr.appendChild(td5);
176
- tr.appendChild(td6);
177
- tableBody.appendChild(tr);
178
- i++;
179
- }
180
- }
181
-
182
- function esc_html_edit_contact(index) {
183
- let contact = qlwapp_contacts[index] || null;
184
- if (!contact)
185
- return false;
186
- document.querySelector('#qlwapp-contact-form').dataset.editindex = index;
187
- $('#qlwapp-contact-form #cfirstname').val(contact.firstname);
188
- $('#qlwapp-contact-form #clastname').val(contact.lastname);
189
- $('#qlwapp-contact-form #cphone').val(contact.phone);
190
- $('#qlwapp-contact-form #clabel').val(contact.label);
191
- $('#qlwapp-contact-form .cchat[value="1"]').attr('checked', contact.chat);
192
- $('#qlwapp-contact-form .cchat[value="0"]').attr('checked', !contact.chat);
193
- $('#qlwapp-contact-form #cmessage').val(contact.message);
194
- $('#qlwapp-contact-form #cavatar').val(contact.avatar);
195
- $('#qlwapp-contact-form #cavatar-img').attr('src', contact.avatar);
196
- $('#qlwapp-contact-form #ctimefrom').val(contact.timefrom);
197
- $('#qlwapp-contact-form #ctimeto').val(contact.timeto);
198
- // $('#qlwapp-contact-form #ctimeout').val(contact.timeout);
199
- $('#qlwapp-contact-form #ctimezone').val(contact.timezone);
200
-
201
- $('#qlwapp-contact-form').slideToggle();
202
- }
203
- qlwapp_show_contacts();
204
- })(jQuery);
205
- </script>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/pages/button.php DELETED
@@ -1,113 +0,0 @@
1
- <form method="post" action="options.php">
2
- <?php settings_fields(sanitize_key(QLWAPP_DOMAIN . '-group')); ?>
3
- <?php do_settings_sections(sanitize_key(QLWAPP_DOMAIN . '-group')); ?>
4
- <table class="form-table">
5
- <tbody>
6
- <tr>
7
- <th scope="row"><?php esc_html_e('Layout', 'wp-whatsapp-chat'); ?></th>
8
- <td>
9
- <select name="<?php echo esc_attr(QLWAPP_DOMAIN); ?>[button][layout]" class="qlwapp-select2">
10
- <option value="button" <?php selected($qlwapp['button']['layout'], 'button'); ?>><?php esc_html_e('Button', 'wp-whatsapp-chat'); ?></option>
11
- <option value="bubble" <?php selected($qlwapp['button']['layout'], 'bubble'); ?>><?php esc_html_e('Bubble', 'wp-whatsapp-chat'); ?></option>
12
- </select>
13
- <p class="description hidden"><?php esc_html_e('Switch to change the button layout.', 'wp-whatsapp-chat'); ?></p>
14
- </td>
15
- </tr>
16
- <tr>
17
- <th scope="row"><?php esc_html_e('Rounded', 'wp-whatsapp-chat'); ?></th>
18
- <td>
19
- <select name="<?php echo esc_attr(QLWAPP_DOMAIN); ?>[button][rounded]" class="qlwapp-select2">
20
- <option value="yes" <?php selected($qlwapp['button']['rounded'], 'yes'); ?>><?php esc_html_e('Add rounded border', 'wp-whatsapp-chat'); ?></option>
21
- <option value="no" <?php selected($qlwapp['button']['rounded'], 'no'); ?>><?php esc_html_e('Remove rounded border', 'wp-whatsapp-chat'); ?></option>
22
- </select>
23
- <p class="description hidden"><?php esc_html_e('Add rounded border to the button.', 'wp-whatsapp-chat'); ?></p>
24
- </td>
25
- </tr>
26
- <tr>
27
- <th scope="row"><?php esc_html_e('Position', 'wp-whatsapp-chat'); ?></th>
28
- <td>
29
- <select name="<?php echo esc_attr(QLWAPP_DOMAIN); ?>[button][position]" class="qlwapp-select2">
30
- <option value="middle-left" <?php selected($qlwapp['button']['position'], 'middle-left'); ?>><?php esc_html_e('Middle Left', 'wp-whatsapp-chat'); ?></option>
31
- <option value="middle-right" <?php selected($qlwapp['button']['position'], 'middle-right'); ?>><?php esc_html_e('Middle Right', 'wp-whatsapp-chat'); ?></option>
32
- <option value="bottom-left" <?php selected($qlwapp['button']['position'], 'bottom-left'); ?>><?php esc_html_e('Bottom Left', 'wp-whatsapp-chat'); ?></option>
33
- <option value="bottom-right" <?php selected($qlwapp['button']['position'], 'bottom-right'); ?>><?php esc_html_e('Bottom Right', 'wp-whatsapp-chat'); ?></option>
34
- </select>
35
- <p class="description hidden"><?php esc_html_e('Switch to change the button position.', 'wp-whatsapp-chat'); ?></p>
36
- </td>
37
- </tr>
38
- <tr>
39
- <th scope="row"><?php esc_html_e('Icon', 'wp-whatsapp-chat'); ?></th>
40
- <td>
41
- <div class="submit qlwapp-premium-field">
42
- <?php submit_button(esc_html__('Add Icon', 'wp-whatsapp-chat'), 'secondary', null, false, array('id' => 'btn-add-icon')); ?>
43
- <p class="description hidden"><small><?php esc_html_e('This is a premium feature', 'wp-whatsapp-chat'); ?></small></p>
44
- </div>
45
- <input type="text" name="<?php echo esc_attr(QLWAPP_DOMAIN); ?>[button][icon]" placeholder="<?php echo esc_html($this->defaults['button']['icon']); ?>" value="<?php echo esc_attr($qlwapp['button']['icon']); ?>" class="qlwapp-input"/>
46
- </td>
47
- </tr>
48
- <!--<tr>
49
- <th scope="row"><?php esc_html_e('Discreet link', 'wp-whatsapp-chat'); ?></th>
50
- <td>
51
- <select name="<?php echo esc_attr(QLWAPP_DOMAIN); ?>[button][developer]" class="qlwapp-select2">
52
- <option value="yes" <?php selected($qlwapp['button']['developer'], 'yes'); ?>><?php esc_html_e('Show developer link', 'wp-whatsapp-chat'); ?></option>
53
- <option value="no" <?php selected($qlwapp['button']['developer'], 'no'); ?>><?php esc_html_e('Hide developer link', 'wp-whatsapp-chat'); ?></option>
54
- </select>
55
- <p class="description hidden"><?php esc_html_e('Leave a discrete link to developer to help and keep new updates and support.', 'wp-whatsapp-chat'); ?></p>
56
- </td>
57
- </tr>-->
58
- <tr>
59
- <th scope="row"><?php esc_html_e('Text', 'wp-whatsapp-chat'); ?></th>
60
- <td>
61
- <input type="text" name="<?php echo esc_attr(QLWAPP_DOMAIN . '[button][text]'); ?>" placeholder="<?php echo esc_html($this->defaults['button']['text']); ?>" value="<?php echo esc_attr($qlwapp['button']['text']); ?>" class="qlwapp-input"/>
62
- <p class="description hidden"><?php esc_html_e('Customize your text.', 'wp-whatsapp-chat'); ?></p>
63
- </td>
64
- </tr>
65
- <tr>
66
- <th scope="row"><?php esc_html_e('Phone', 'wp-whatsapp-chat'); ?></th>
67
- <td>
68
- <input type="text" name="<?php echo esc_attr(QLWAPP_DOMAIN . '[button][phone]'); ?>" placeholder="<?php echo esc_html('+542215677768'); ?>" value="<?php echo esc_attr($qlwapp['button']['phone']); ?>" class="qlwapp-input" required="required"/>
69
- <p class="description hidden"><?php esc_html_e('Full phone number in international format.', 'wp-whatsapp-chat'); ?></p>
70
-
71
- </td>
72
- </tr>
73
- <tr>
74
- <th scope="row"><?php esc_html_e('Message', 'wp-whatsapp-chat'); ?></th>
75
- <td>
76
- <textarea maxlength="500" style="width:100%;height: 100px;padding: 8px;" name="<?php echo esc_attr(QLWAPP_DOMAIN); ?>[button][message]" placeholder="<?php echo esc_html($this->defaults['button']['message']); ?>" ><?php echo esc_html(trim($qlwapp['button']['message'])); ?></textarea>
77
- <p class="description hidden"><?php esc_html_e('Message that will automatically appear in the text field of a chat.', 'wp-whatsapp-chat'); ?></p>
78
- </td>
79
- </tr>
80
- <tr>
81
- <th scope="row"><?php esc_html_e('Schedule', 'wp-whatsapp-chat'); ?></th>
82
- <td class="qlwapp-premium-field">
83
- <b><?php esc_html_e('From', 'wp-whatsapp-chat'); ?></b>
84
- <input type="time" name="<?php echo esc_attr(QLWAPP_DOMAIN . '[button][timefrom]'); ?>" placeholder="<?php echo esc_html($this->defaults['button']['timefrom']); ?>" value="<?php echo esc_html($qlwapp['button']['timefrom']); ?>" />
85
- <b><?php esc_html_e('To', 'wp-whatsapp-chat'); ?></b>
86
- <input type="time" name="<?php echo esc_attr(QLWAPP_DOMAIN . '[button][timeto]'); ?>" placeholder="<?php echo esc_html($this->defaults['button']['timeto']); ?>" value="<?php echo esc_html($qlwapp['button']['timeto']); ?>" />
87
- <p class="description hidden"><small><?php esc_html_e('This is a premium feature', 'wp-whatsapp-chat'); ?></small></p>
88
- </td>
89
- </tr>
90
- <tr>
91
- <th scope="row"><?php esc_html_e('Timezone', 'wp-whatsapp-chat'); ?></th>
92
- <td class="qlwapp-premium-field">
93
- <select name="<?php echo esc_attr(QLWAPP_DOMAIN . '[button][timezone]'); ?>" aria-describedby="timezone-description" required="" class="qlwapp-select2">
94
- <?php echo wp_timezone_choice($qlwapp['button']['timezone'], get_user_locale()); ?>
95
- </select>
96
- <p class="description"><small><?php esc_html_e('Hide button if the user is out of the available hours.', 'wp-whatsapp-chat'); ?></small></p>
97
- <p class="description hidden"><small><?php esc_html_e('This is a premium feature', 'wp-whatsapp-chat'); ?></small></p>
98
- </td>
99
- </tr>
100
- <!-- <tr>
101
- <th scope="row"><?php // esc_html_e('Timeout', 'wp-whatsapp-chat'); ?></th>
102
- <td class="qlwapp-premium-field">
103
- <select name="<?php // echo esc_attr(QLWAPP_DOMAIN); ?>[button][timeout]" class="qlwapp-select2">
104
- <option value="yes" <?php // selected($qlwapp['button']['timeout'], 'yes'); ?>><?php esc_html_e('Show the button as read only', 'wp-whatsapp-chat'); ?></option>
105
- <option value="no" <?php // selected($qlwapp['button']['timeout'], 'no'); ?>><?php esc_html_e('Do not show the button', 'wp-whatsapp-chat'); ?></option>
106
- </select>
107
- <p class="description hidden"><small><?php //esc_html_e('This is a premium feature', 'wp-whatsapp-chat'); ?></small></p>
108
- </td>
109
- </tr> -->
110
- </tbody>
111
- </table>
112
- <?php submit_button() ?>
113
- </form>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/pages/colors.php DELETED
@@ -1,49 +0,0 @@
1
- <form method="post" action="options.php">
2
- <?php settings_fields(sanitize_key(QLWAPP_DOMAIN . '-group')); ?>
3
- <?php do_settings_sections(sanitize_key(QLWAPP_DOMAIN . '-group')); ?>
4
- <table class="form-table">
5
- <tbody>
6
- <tr>
7
- <th scope="row"><?php esc_html_e('Background', 'wp-whatsapp-chat'); ?></th>
8
- <td>
9
- <input class="qlwapp-color-field" type="text" name="<?php echo esc_attr(QLWAPP_DOMAIN . '[scheme][brand]'); ?>" value="<?php echo esc_attr($qlwapp['scheme']['brand']); ?>" />
10
- </td>
11
- </tr>
12
- <tr>
13
- <th scope="row"><?php esc_html_e('Color', 'wp-whatsapp-chat'); ?></th>
14
- <td>
15
- <input class="qlwapp-color-field" type="text" name="<?php echo esc_attr(QLWAPP_DOMAIN . '[scheme][text]'); ?>" value="<?php echo esc_attr($qlwapp['scheme']['text']); ?>" />
16
- </td>
17
- </tr>
18
- <tr class="qlwapp-premium-field">
19
- <th scope="row"><?php esc_html_e('Link', 'wp-whatsapp-chat'); ?></th>
20
- <td>
21
- <input class="qlwapp-color-field" type="link" name="<?php echo esc_attr(QLWAPP_DOMAIN . '[scheme][link]'); ?>" value="<?php echo esc_attr($qlwapp['scheme']['link']); ?>" />
22
- <p class="description hidden"><small><?php esc_html_e('This is a premium feature', 'wp-whatsapp-chat'); ?></small></p>
23
- </td>
24
- </tr>
25
- <tr class="qlwapp-premium-field">
26
- <th scope="row"><?php esc_html_e('Message', 'wp-whatsapp-chat'); ?></th>
27
- <td>
28
- <input class="qlwapp-color-field" type="link" name="<?php echo esc_attr(QLWAPP_DOMAIN . '[scheme][message]'); ?>" value="<?php echo esc_attr($qlwapp['scheme']['message']); ?>" />
29
- <p class="description hidden"><small><?php esc_html_e('This is a premium feature', 'wp-whatsapp-chat'); ?></small></p>
30
- </td>
31
- </tr>
32
- <tr class="qlwapp-premium-field">
33
- <th scope="row"><?php esc_html_e('Label', 'wp-whatsapp-chat'); ?></th>
34
- <td>
35
- <input class="qlwapp-color-field" type="link" name="<?php echo esc_attr(QLWAPP_DOMAIN . '[scheme][label]'); ?>" value="<?php echo esc_attr($qlwapp['scheme']['label']); ?>" />
36
- <p class="description hidden"><small><?php esc_html_e('This is a premium feature', 'wp-whatsapp-chat'); ?></small></p>
37
- </td>
38
- </tr>
39
- <tr class="qlwapp-premium-field">
40
- <th scope="row"><?php esc_html_e('Name', 'wp-whatsapp-chat'); ?></th>
41
- <td>
42
- <input class="qlwapp-color-field" type="link" name="<?php echo esc_attr(QLWAPP_DOMAIN . '[scheme][name]'); ?>" value="<?php echo esc_attr($qlwapp['scheme']['name']); ?>" />
43
- <p class="description hidden"><small><?php esc_html_e('This is a premium feature', 'wp-whatsapp-chat'); ?></small></p>
44
- </td>
45
- </tr>
46
- </tbody>
47
- </table>
48
- <?php submit_button() ?>
49
- </form>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/pages/contacts.php DELETED
@@ -1,64 +0,0 @@
1
-
2
- <div class="submit qlwapp-premium-field">
3
-
4
- <a href="javascript:;" id="qlwapp_settings_add" contact_id ="-1" class="button button-primary"><?php esc_html_e('+ New Contact', 'woocommerce-checkout-manager') ?></a>
5
-
6
- </div>
7
-
8
- <table id="qlwapp-contacts-table" class="form-table widefat striped">
9
- <thead>
10
- <tr>
11
- <td><b><?php esc_html_e('Avatar', 'wp-whatsapp-chat'); ?></b></td>
12
- <td><b><?php esc_html_e('Phone', 'wp-whatsapp-chat'); ?></b></td>
13
- <td><b><?php esc_html_e('Name', 'wp-whatsapp-chat'); ?></b></td>
14
- <td><b><?php esc_html_e('Label', 'wp-whatsapp-chat'); ?></b></td>
15
- <td><b><?php esc_html_e('Message', 'wp-whatsapp-chat'); ?></b></td>
16
- <td><b><?php esc_html_e('Chat', 'wp-whatsapp-chat'); ?></b></td>
17
- <td><b><?php esc_html_e('Availability', 'wp-whatsapp-chat'); ?></b></td>
18
- <td><b><?php esc_html_e('Timezone', 'wp-whatsapp-chat'); ?></b></td>
19
- <td><b><?php esc_html_e('Actions', 'wp-whatsapp-chat'); ?></b></td>
20
- </tr>
21
- </thead>
22
- <tbody>
23
- <?php
24
- foreach ($qlwapp['contacts'] as $id => $c) {
25
- ?>
26
- <tr data-contact_id="<?php echo esc_attr($id) ?>" >
27
- <td>
28
- <img class="qlwapp-avatar" src="<?php echo $c['avatar']; ?>" alt="" width="50" height="50" /> </td>
29
- <td><b><?php echo esc_attr($c['phone']); ?></b></td>
30
- <td><b><?php echo $c['firstname'] . ', ' . $c['lastname']; ?> </b></td>
31
- <td><b><?php echo $c['label']; ?></b></td>
32
- <td><b>
33
- <?php
34
- if (strlen(wp_trim_words($c['message'])) > 13) {
35
- echo substr(wp_trim_words($c['message']),0, 11).'...';
36
- } else {
37
- echo wp_trim_words( $c['message']);
38
- }
39
- ?>
40
- </b></td>
41
- <td><b>
42
- <?php
43
- if ($c['chat'])
44
- esc_html_e('active', 'wp-whatsapp-chat');
45
- else
46
- esc_html_e('inactive', 'wp-whatsapp-chat');
47
- ?>
48
- </b></td>
49
- <td><b><?php echo $c['timefrom']; ?> to <?php echo $c['timeto']; ?></b></td>
50
- <td><b><?php echo $c['timezone']; ?></b></td>
51
- <td><b>
52
- <a class="qlwapp_settings_edit button" aria-label="<?php esc_html_e('Edit checkout field', 'wp-whatsapp-chat'); ?>" href="javascript:;"><?php esc_html_e('Edit'); ?></a>
53
- <a class="qlwapp_settings_delete" aria-label="<?php esc_html_e('Edit checkout field', 'wp-whatsapp-chat'); ?>" href="javascript:;"><?php esc_html_e('Delete'); ?></a>
54
- </b>
55
- </td>
56
- </tr>
57
- <?php
58
- }
59
- ?>
60
- </tbody>
61
-
62
- </table>
63
-
64
- <?php include_once('modals/contact.php'); ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/pages/display.php DELETED
@@ -1,126 +0,0 @@
1
- <form method="post" action="options.php">
2
- <?php settings_fields(sanitize_key(QLWAPP_DOMAIN . '-group')); ?>
3
- <?php do_settings_sections(sanitize_key(QLWAPP_DOMAIN . '-group')); ?>
4
- <table class="form-table">
5
- <tbody>
6
- <tr>
7
- <th scope="row"><?php esc_html_e('Devices', 'wp-whatsapp-chat'); ?></th>
8
- <td>
9
- <select name="<?php echo esc_attr(QLWAPP_DOMAIN); ?>[display][devices]" style="width:350px" data-placeholder="<?php echo esc_attr('Choose target&hellip;', 'wp-whatsapp-chat'); ?>" aria-label="<?php echo esc_attr('Posts', 'wp-whatsapp-chat'); ?>" class="qlwapp-select2">
10
- <option value="all" <?php selected('all', $qlwapp['display']['devices']); ?>><?php esc_html_e('Show in all devices', 'wp-whatsapp-chat'); ?></option>
11
- <option value="mobile" <?php selected('mobile', $qlwapp['display']['devices']); ?>><?php esc_html_e('Show in mobile devices', 'wp-whatsapp-chat'); ?></option>
12
- <option value="desktop" <?php selected('desktop', $qlwapp['display']['devices']); ?>><?php esc_html_e('Show in desktop devices', 'wp-whatsapp-chat'); ?></option>
13
- <option value="hide" <?php selected('hide', $qlwapp['display']['devices']); ?>><?php esc_html_e('Hide in all devices', 'wp-whatsapp-chat'); ?></option>
14
- </select>
15
- </td>
16
- </tr>
17
- <tr>
18
- <th scope="row"><?php esc_html_e('Target', 'wp-whatsapp-chat'); ?></th>
19
- <td>
20
- <select multiple="multiple" name="<?php echo esc_attr(QLWAPP_DOMAIN . '[display][target][]'); ?>" style="width:350px" data-placeholder="<?php echo esc_attr('Choose target&hellip;', 'wp-whatsapp-chat'); ?>" aria-label="<?php echo esc_attr('Posts', 'wp-whatsapp-chat'); ?>" class="qlwapp-select2">
21
- <option value="none" <?php echo selected(true, in_array('none', (array) $qlwapp['display']['target'])); ?>><?php echo esc_html__('Exclude from all', 'wp-whatsapp-chat'); ?></option>
22
- <option value="home" <?php echo selected(true, in_array('home', (array) $qlwapp['display']['target'])); ?>><?php echo esc_html__('Home', 'wp-whatsapp-chat'); ?></option>
23
- <option value="blog" <?php echo selected(true, in_array('blog', (array) $qlwapp['display']['target'])); ?>><?php echo esc_html__('Blog', 'wp-whatsapp-chat'); ?></option>
24
- <option value="search" <?php echo selected(true, in_array('search', (array) $qlwapp['display']['target'])); ?>><?php echo esc_html__('Search', 'wp-whatsapp-chat'); ?></option>
25
- <option value="error" <?php echo selected(true, in_array('error', (array) $qlwapp['display']['target'])); ?>><?php echo esc_html('404'); ?></option>
26
- </select>
27
- <p class="description hidden"><?php esc_html_e('If you select an option all the other will be excluded', 'wp-whatsapp-chat'); ?></p>
28
- </td>
29
- </tr>
30
- <?php
31
- foreach (get_post_types(array('public' => true, 'show_in_nav_menus' => true), 'objects') as $type) {
32
- if (!isset($qlwapp['display'][$type->name])) {
33
- $qlwapp['display'][$type->name] = array();
34
- }
35
-
36
- if ($count = wp_count_posts($type->name)) {
37
- ?>
38
- <tr class="qlwapp-premium-field">
39
- <th scope="row"><?php esc_html_e(ucwords($type->label)); ?></th>
40
- <td>
41
- <!-- <select style="width:80px" class="qlwapp-select2">
42
- <option value="include">Include</option>
43
- <option value="include">Exclude</option>
44
- </select>-->
45
- <select id="qlwapp_select2_<?php echo esc_attr($type->name); ?>" multiple="multiple" name="<?php echo esc_attr(QLWAPP_DOMAIN . '[display][' . $type->name . '][]'); ?>" style="width:350px" data-placeholder="<?php printf(esc_html__('Select for %s&hellip;', 'wp-whatsapp-chat'), $type->label); ?>" aria-label="<?php echo esc_attr($type->label); ?>" data-name="<?php echo esc_attr($type->name); ?>" class="qlwapp-select2-ajax">
46
- <option value="none" <?php echo selected(true, in_array('none', (array) $qlwapp['display'][$type->name])); ?>><?php echo esc_html__('Exclude from all', 'wp-whatsapp-chat'); ?></option>
47
- <!--<option value="archive" <?php echo selected(true, in_array('archive', (array) $qlwapp['display'][$type->name])); ?>><?php echo esc_html__('Archive', 'wp-whatsapp-chat'); ?></option>-->
48
- <?php
49
- // Print selected posts
50
- // -------------------------------------------------------------
51
- if (isset($qlwapp['display'][$type->name]) && count($qlwapp['display'][$type->name])) {
52
- foreach ($qlwapp['display'][$type->name] as $post_id) {
53
-
54
- if (!$post = get_post($post_id)) {
55
- //backward compatibility for $post->post_name
56
- $post = get_page_by_path($post_id);
57
- }
58
-
59
- if (isset($post->ID)) {
60
- ?>
61
- <option value="<?php echo esc_attr($post->ID); ?>" selected="selected"><?php echo esc_html(mb_substr($post->post_title, 0, 49)); ?></option>
62
- <?php
63
- }
64
- }
65
- }
66
- // Print firsts 10 posts
67
- // -------------------------------------------------------------
68
- /* if ($count->publish < 11) {
69
- $posts = get_posts(array(
70
- 'post_type' => $type->name,
71
- 'post_status' => 'publish',
72
- 'numberposts' => 10
73
- ));
74
- foreach ($posts as $post) {
75
- ?>
76
- <option value="<?php echo esc_attr($post->post_name); ?>" <?php echo selected(true, in_array($post->post_name, (array) $qlwapp['display'][$type->name])); ?>><?php echo esc_html($post->post_title); ?></option>
77
- <?php
78
- }
79
- } */
80
- ?>
81
- </select>
82
- <p class="description hidden"><small><?php esc_html_e('This is a premium feature', 'wp-whatsapp-chat'); ?></small></p>
83
- </td>
84
- </tr>
85
- <?php
86
- }
87
- }
88
- ?>
89
- <?php
90
- foreach ($taxonomies = get_taxonomies(array('public' => true), 'objects') as $taxonomy) {
91
-
92
- if (!isset($qlwapp['display'][$taxonomy->name])) {
93
- $qlwapp['display'][$taxonomy->name] = array();
94
- }
95
-
96
- $terms = get_terms(array(
97
- 'taxonomy' => $taxonomy->name,
98
- 'hide_empty' => false,
99
- ));
100
-
101
- if (count($terms)) {
102
- ?>
103
- <tr>
104
- <th scope="row"><?php esc_html_e(ucwords($taxonomy->label)); ?></th>
105
- <td>
106
- <select multiple="multiple" name="<?php echo esc_attr(QLWAPP_DOMAIN . '[display][' . $taxonomy->name . '][]'); ?>" style="width:350px" data-placeholder="<?php echo esc_attr('Choose target&hellip;', 'wp-whatsapp-chat'); ?>" aria-label="<?php echo esc_attr($taxonomy->label); ?>" class="qlwapp-select2">
107
- <option value="none" <?php echo selected(true, in_array('none', (array) $qlwapp['display'][$taxonomy->name])); ?>><?php echo esc_html__('Exclude from all', 'wp-whatsapp-chat'); ?></option>
108
- <?php
109
- foreach ($terms as $term) {
110
- //backward compatibility for $term->name
111
- ?>
112
- <option value="<?php echo esc_attr($term->term_id); ?>" <?php echo selected(true, in_array($term->term_id, (array) $qlwapp['display'][$taxonomy->name]) || in_array($term->name, (array) $qlwapp['display'][$taxonomy->name])); ?>><?php echo esc_html($term->name); ?></option>
113
- <?php
114
- }
115
- ?>
116
- </select>
117
- </td>
118
- </tr>
119
- <?php
120
- }
121
- }
122
- ?>
123
- </tbody>
124
- </table>
125
- <?php submit_button() ?>
126
- </form>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/pages/premium.php DELETED
@@ -1,71 +0,0 @@
1
- <div class="has-2-columns is-wider-left" style="max-width: 100%">
2
- <div class="column">
3
- <div class="welcome-header">
4
- <h1><?php esc_html_e('Premium', 'wp-whatsapp-chat'); ?></h1>
5
- <div class="about-description">
6
- <?php printf(esc_html__('Unlock the power of our premium %s plugin which allows you to include unlimited agent accounts with their names and labels inside the box to provide direct contact to the different support areas of your site.', 'wp-whatsapp-chat'), QLWAPP_PLUGIN_NAME); ?>
7
- </div>
8
- <br/>
9
- <a style="background-color: #006cff;color: #ffffff;text-decoration: none;padding: 10px 30px;border-radius: 30px;margin: 10px 0 0 0;display: inline-block;" target="_blank" href="<?php echo esc_url(QLWAPP_PURCHASE_URL); ?>"><?php esc_html_e('Purchase Now', 'wp-whatsapp-chat'); ?></a>
10
- <a style="background-color: #ffffff;color: #626262;text-decoration: none;padding: 10px 30px;border-radius: 30px;margin: 10px 0 0 0;display: inline-block;" target="_blank" href="<?php echo esc_url(QLWAPP_SUPPORT_URL); ?>"><?php esc_html_e('Get Support', 'wp-whatsapp-chat'); ?></a>
11
- </div>
12
- <hr/>
13
- <div class="feature-section">
14
- <h3><?php esc_html_e('Multiple agents', 'wp-whatsapp-chat'); ?></h3>
15
- <p>
16
- <?php printf(esc_html__('%s allows you to include unlimited agent accounts with their names and labels inside the box to provide direct contact to the different support areas of your site.', 'wp-whatsapp-chat'), QLWAPP_PLUGIN_NAME); ?>
17
- </p>
18
- </div>
19
- <div class="feature-section">
20
- <h3><?php esc_html_e('Customize colors', 'wp-whatsapp-chat'); ?></h3>
21
- <p>
22
- <?php esc_html_e('Customize the colors to match your site theme through the WordPress live customizer interface.', 'wp-whatsapp-chat'); ?>
23
- </p>
24
- </div>
25
- <div class="feature-section">
26
- <h3><?php esc_html_e('Custom icons', 'wp-whatsapp-chat'); ?></h3>
27
- <p>
28
- <?php esc_html_e('Our plugin allows you to select between more than forty icons to include in your Whatsapp button.', 'wp-whatsapp-chat'); ?>
29
- </p>
30
- </div>
31
- </div>
32
- <div class="column">
33
- <img src="<?php echo plugins_url('/assets/img/box1.png', QLWAPP_PLUGIN_FILE); ?>">
34
- </div>
35
- </div>
36
- <br/>
37
- <br/>
38
- <div class="has-2-columns is-wider-right" style="max-width: 100%">
39
- <div class="column">
40
- <img src="<?php echo plugins_url('/assets/img/box2.png', QLWAPP_PLUGIN_FILE); ?>">
41
- </div>
42
- <div class="column">
43
- <br/>
44
- <div class="welcome-header">
45
- <h1><?php esc_html_e('Chatbox interface', 'wp-whatsapp-chat'); ?></h1>
46
- <div class="about-description">
47
- <?php printf(esc_html__('%s for WordPress allows you to include a chatbox for each agent where your users can type their first message.', 'wp-whatsapp-chat'), QLWAPP_PLUGIN_NAME); ?>
48
- <?php //esc_html_e('Take in mind that this chat dosent allow .', 'wp-whatsapp-chat'); ?>
49
- </div>
50
- </div>
51
- <hr/>
52
- <div class="feature-section">
53
- <h3><?php esc_html_e('Custom agent message', 'wp-whatsapp-chat'); ?></h3>
54
- <p>
55
- <?php esc_html_e('Allow you to set a custom message for each agent that will be displayed on the chatbox.', 'wp-whatsapp-chat'); ?>
56
- </p>
57
- </div>
58
- <div class="feature-section">
59
- <h3><?php esc_html_e('Custom user message', 'wp-whatsapp-chat'); ?></h3>
60
- <p>
61
- <?php esc_html_e('You can choose the predefined user message that will be sent to the agent phone number.', 'wp-whatsapp-chat'); ?>
62
- </p>
63
- </div>
64
- <div class="feature-section">
65
- <h3><?php esc_html_e('Type user message', 'wp-whatsapp-chat'); ?></h3>
66
- <p>
67
- <?php esc_html_e('Allow your users to type their own messages before sending it to the agent phone number.', 'wp-whatsapp-chat'); ?>
68
- </p>
69
- </div>
70
- </div>
71
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/pages/welcome.php DELETED
@@ -1,35 +0,0 @@
1
- <div class="has-2-columns is-wider-left" style="max-width: 100%">
2
- <div class="column">
3
- <div class="qlwapp-welcome-header">
4
- <h1><?php echo QLWAPP_PLUGIN_NAME; ?> <span style="font-size: 24px;color: #555;">v<?php echo QLWAPP_PLUGIN_VERSION; ?></span></h1>
5
- <div class="about-text">
6
- <?php esc_html_e('Hello we\'re QuadLayers! We\'ve recently acquired this plugin and this is the first update. We have worked very much and very hard to release it, and we will do our absolute best to support it and fix all the issues.', 'wp-whatsapp-chat'); ?>
7
- </div>
8
- </div>
9
- <hr/>
10
- <div class="feature-section" style="padding: 15px 0;">
11
- <h3><?php esc_html_e('Community', 'wp-whatsapp-chat'); ?></h3>
12
- <p>
13
- <?php printf(esc_html__('If you want to get in touch with other %s users or be aware of our promotional discounts join our community now.', 'wp-whatsapp-chat'), QLWAPP_PLUGIN_NAME); ?>
14
- </p>
15
- <a style="background-color: #ffffff;color: #626262;text-decoration: none;padding: 10px 30px;border-radius: 30px;margin: 10px 0 0 0;display: inline-block;" target="_blank" href="<?php echo QLWAPP_GROUP_URL; ?>"><?php esc_html_e('Join us', 'wp-whatsapp-chat'); ?></a>
16
- </div>
17
- <div class="feature-section" style="padding: 15px 0;">
18
- <h3><?php esc_html_e('Demo', 'wp-whatsapp-chat'); ?></h3>
19
- <p>
20
- <?php printf(esc_html__('Thank you for choosing our %s plugin for WordPress! Here you can see our demo and a description about the features we offer in the premium version.', 'wp-whatsapp-chat'), QLWAPP_PLUGIN_NAME); ?>
21
- </p>
22
- <a style="background-color: #006cff;color: #ffffff;text-decoration: none;padding: 10px 30px;border-radius: 30px;margin: 10px 0 0 0;display: inline-block;" target="_blank" href="<?php echo QLWAPP_DEMO_URL; ?>"><?php esc_html_e('View demo', 'wp-whatsapp-chat'); ?></a>
23
- </div>
24
- <div class="feature-section" style="padding: 15px 0;">
25
- <h3><?php esc_html_e('Support', 'wp-whatsapp-chat'); ?></h3>
26
- <p>
27
- <?php printf(esc_html__('If you have any doubt or you find any issue don\'t hesitate to contact us through our ticket system or join our community to meet other %s users.', 'wp-whatsapp-chat'), QLWAPP_PLUGIN_NAME); ?>
28
- </p>
29
- <a style="background-color: #006cff;color: #ffffff;text-decoration: none;padding: 10px 30px;border-radius: 30px;margin: 10px 0 0 0;display: inline-block;" target="_blank" href="<?php echo QLWAPP_SUPPORT_URL; ?>"><?php esc_html_e('Submit ticket', 'wp-whatsapp-chat'); ?></a>
30
- </div>
31
- </div>
32
- <div class="column">
33
- <img src="<?php echo plugins_url('/assets/img/box1.png', QLWAPP_PLUGIN_FILE); ?>">
34
- </div>
35
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/settings.php CHANGED
@@ -1,590 +1,179 @@
1
  <?php
2
- if (!defined('ABSPATH'))
3
- exit;
4
 
5
- if (!class_exists('QLWAPP_Settings')) {
6
 
7
- class QLWAPP_Settings extends QLWAPP_Options {
8
 
9
- protected static $instance;
10
 
11
- // fix for activateUrl on install now button
12
- public function network_admin_url($url, $path) {
13
-
14
- if (wp_doing_ajax() && !is_network_admin()) {
15
- if (isset($_REQUEST['action']) && $_REQUEST['action'] == 'install-plugin') {
16
- if (strpos($url, 'plugins.php') !== false) {
17
- $url = self_admin_url($path);
18
- }
19
- }
20
- }
21
 
22
- return $url;
23
- }
24
 
25
- public function add_redirect() {
26
 
27
- if (isset($_REQUEST['activate']) && $_REQUEST['activate'] == 'true') {
28
- if (wp_get_referer() == admin_url('admin.php?page=' . QLWAPP_DOMAIN . '_suggestions')) {
29
- wp_redirect(admin_url('admin.php?page=' . QLWAPP_DOMAIN . '_suggestions'));
30
- }
31
- }
32
- }
33
-
34
- function add_action_links($links) {
35
-
36
- $links[] = '<a target="_blank" href="' . QLWAPP_PURCHASE_URL . '">' . esc_html__('Premium', 'wp-whatsapp-chat') . '</a>';
37
 
38
- $links[] = '<a href="' . admin_url('admin.php?page=' . QLWAPP_DOMAIN) . '">' . esc_html__('Settings', 'wp-whatsapp-chat') . '</a>';
 
 
 
39
 
40
- return $links;
 
 
 
41
  }
42
-
43
- function ajax_get_posts() {
44
-
45
- if (current_user_can('manage_options')) {
46
-
47
- if (!empty($_REQUEST) && check_admin_referer('qlwapp_get_posts', 'nonce')) {
48
-
49
- $data = array(
50
- array('none', esc_html__('Exclude from all', 'wp-whatsapp-chat'))
51
- );
52
-
53
- $args = array(
54
- 'post_type' => sanitize_key($_REQUEST['name']),
55
- 'post_status' => 'publish',
56
- 'ignore_sticky_posts' => 1,
57
- 'posts_per_page' => 10,
58
- 'exclude' => array_map('intval', (array) $_REQUEST['selected'])
59
- );
60
-
61
- if ($_REQUEST['q']) {
62
- $args['s'] = sanitize_text_field($_REQUEST['q']);
63
- }
64
-
65
- $posts = get_posts($args);
66
-
67
- foreach ($posts as $post) {
68
- $data[] = array($post->ID, mb_substr($post->post_title, 0, 49));
69
- }
70
-
71
- wp_send_json($data);
72
- }
73
- }
74
-
75
- wp_die();
76
  }
77
-
78
- function add_menu() {
79
- add_menu_page(QLWAPP_PLUGIN_NAME, QLWAPP_PLUGIN_NAME, 'edit_posts', QLWAPP_DOMAIN, array($this, 'settings_welcome'), plugins_url('/assets/img/icon.png', QLWAPP_PLUGIN_FILE));
80
- add_submenu_page(QLWAPP_DOMAIN, esc_html__('Welcome', 'wp-whatsapp-chat'), esc_html__('Welcome', 'wp-whatsapp-chat'), 'edit_posts', QLWAPP_DOMAIN, array($this, 'settings_welcome'));
81
- add_submenu_page(QLWAPP_DOMAIN, esc_html__('Button', 'wp-whatsapp-chat'), esc_html__('Button', 'wp-whatsapp-chat'), 'manage_options', QLWAPP_DOMAIN . '_button', array($this, 'settings_button'));
82
- add_submenu_page(QLWAPP_DOMAIN, esc_html__('Box', 'wp-whatsapp-chat'), esc_html__('Box', 'wp-whatsapp-chat'), 'manage_options', QLWAPP_DOMAIN . '_box', array($this, 'settings_box'));
83
- //add_submenu_page(QLWAPP_DOMAIN, esc_html__('Contacts', 'wp-whatsapp-chat'), esc_html__('Contacts', 'wp-whatsapp-chat'), 'manage_options', QLWAPP_DOMAIN . '_contacts', array($this, 'settings_contacts1'));
84
- add_submenu_page(QLWAPP_DOMAIN, esc_html__('Display', 'wp-whatsapp-chat'), esc_html__('Display', 'wp-whatsapp-chat'), 'manage_options', QLWAPP_DOMAIN . '_display', array($this, 'settings_display'));
85
- add_submenu_page(QLWAPP_DOMAIN, esc_html__('Colors', 'wp-whatsapp-chat'), esc_html__('Colors', 'wp-whatsapp-chat'), 'manage_options', QLWAPP_DOMAIN . '_colors', array($this, 'settings_colors'));
86
- add_submenu_page(QLWAPP_DOMAIN, esc_html__('Suggestions', 'wp-whatsapp-chat'), sprintf('%s', esc_html__('Suggestions', 'wp-whatsapp-chat')), 'edit_posts', QLWAPP_DOMAIN . '_suggestions', array($this, 'settings_suggestions'), 99);
87
- add_submenu_page(QLWAPP_DOMAIN, esc_html__('Premium', 'wp-whatsapp-chat'), sprintf('<i class="dashicons dashicons-awards"></i> %s', esc_html__('Premium', 'wp-whatsapp-chat')), 'edit_posts', QLWAPP_DOMAIN . '_premium', array($this, 'settings_premium'));
88
  }
89
-
90
- function settings_header() {
91
- global $submenu;
92
- ?>
93
- <div class="wrap about-wrap full-width-layout qlwrap">
94
-
95
- <h1><?php echo esc_html(QLWAPP_PLUGIN_NAME); ?></h1>
96
-
97
- <p class="about-text"><?php printf(esc_html__('Thanks for using %s! We will do our best to offer you the best and improved communication experience with your users.', 'wp-whatsapp-chat'), QLWAPP_PLUGIN_NAME); ?></p>
98
-
99
- <p class="about-text">
100
- <?php printf('<a href="%s" target="_blank">%s</a>', QLWAPP_DEMO_URL, esc_html__('Demo', 'wp-whatsapp-chat')); ?></a> |
101
- <?php printf('<a href="%s" target="_blank">%s</a>', QLWAPP_DOCUMENTATION_URL, esc_html__('Documentation', 'wp-whatsapp-chat')); ?></a>
102
- </p>
103
-
104
- <?php printf('<a href="%s" target="_blank"><div style="
105
- background: #006bff url(%s) no-repeat;
106
- background-position: top center;
107
- background-size: 130px 130px;
108
- color: #fff;
109
- font-size: 14px;
110
- text-align: center;
111
- font-weight: 600;
112
- margin: 5px 0 0;
113
- padding-top: 120px;
114
- height: 40px;
115
- display: inline-block;
116
- width: 140px;
117
- " class="wp-badge">%s</div></a>', 'https://quadlayers.com/?utm_source=qlwapp_admin', plugins_url('/assets/img/quadlayers.jpg', QLWAPP_PLUGIN_FILE), esc_html__('QuadLayers', 'wp-whatsapp-chat')); ?>
118
-
119
- </div>
120
- <?php
121
- if (isset($submenu[QLWAPP_DOMAIN])) {
122
- if (is_array($submenu[QLWAPP_DOMAIN])) {
123
- ?>
124
- <div class="wrap about-wrap full-width-layout qlwrap">
125
- <h2 class="nav-tab-wrapper">
126
- <?php
127
- foreach ($submenu[QLWAPP_DOMAIN] as $tab) {
128
- if (strpos($tab[2], '.php') !== false)
129
- continue;
130
- ?>
131
- <a href="<?php echo admin_url('admin.php?page=' . esc_attr($tab[2])); ?>" class="nav-tab<?php echo (isset($_GET['page']) && $_GET['page'] == $tab[2]) ? ' nav-tab-active' : ''; ?>"><?php echo $tab[0]; ?></a>
132
- <?php
133
- }
134
- ?>
135
- </h2>
136
- </div>
137
- <?php
138
- }
139
- }
140
  }
141
-
142
- function settings_sanitize($settings) {
143
-
144
- if (isset($settings['button']['layout'])) {
145
- $settings['button']['layout'] = sanitize_html_class($settings['button']['layout']);
146
- }
147
- if (isset($settings['button']['position'])) {
148
- $settings['button']['position'] = sanitize_html_class($settings['button']['position']);
149
- }
150
- if (isset($settings['button']['text'])) {
151
- $settings['button']['text'] = sanitize_text_field($settings['button']['text']);
152
- }
153
- // if (isset($settings['button']['contactstimeout'])) {
154
- // $settings['box']['contactstimeout'] = sanitize_text_field($settings['box']['contactstimeout']);
155
- // }
156
- if (isset($settings['button']['icon'])) {
157
- $settings['button']['icon'] = sanitize_html_class($settings['button']['icon']);
158
- }
159
- if (isset($settings['box']['header'])) {
160
- $settings['box']['header'] = wp_kses_post($settings['box']['header']);
161
- }
162
- if (isset($settings['box']['footer'])) {
163
- $settings['box']['footer'] = wp_kses_post($settings['box']['footer']);
164
- }
165
- if (isset($settings['contacts'])) {
166
- if (count($settings['contacts'])) {
167
- foreach ($settings['contacts'] as $id => $c) {
168
- $settings['contacts'][$id]['chat'] = (bool) $settings['contacts'][$id]['chat'];
169
- $settings['contacts'][$id]['avatar'] = sanitize_text_field($settings['contacts'][$id]['avatar']);
170
- $settings['contacts'][$id]['phone'] = sanitize_text_field($settings['contacts'][$id]['phone']);
171
- $settings['contacts'][$id]['firstname'] = sanitize_text_field($settings['contacts'][$id]['firstname']);
172
- $settings['contacts'][$id]['lastname'] = sanitize_text_field($settings['contacts'][$id]['lastname']);
173
- $settings['contacts'][$id]['label'] = sanitize_text_field($settings['contacts'][$id]['label']);
174
- $settings['contacts'][$id]['message'] = wp_kses_post($settings['contacts'][$id]['message']);
175
- $settings['contacts'][$id]['timeto'] = wp_kses_post($settings['contacts'][$id]['timeto']);
176
- //$settings['contacts'][$id]['message'] = stripslashes($settings['contacts'][$id]['message']);
177
- }
178
- }
179
- }
180
-
181
- return $settings;
182
  }
183
-
184
- function add_settings_register() {
185
- register_setting(sanitize_key(QLWAPP_DOMAIN . '-group'), sanitize_key(QLWAPP_DOMAIN), array($this, 'settings_sanitize'));
186
  }
187
-
188
- function settings_welcome() {
189
-
190
- global $qlwapp;
191
- ?>
192
- <?php $this->settings_header(); ?>
193
- <div class="wrap about-wrap full-width-layout qlwrap">
194
- <?php include_once('pages/welcome.php'); ?>
195
- </div>
196
- <?php
197
- }
198
-
199
- function settings_button() {
200
-
201
- global $qlwapp;
202
- ?>
203
- <?php $this->settings_header(); ?>
204
- <div class="wrap about-wrap full-width-layout qlwrap">
205
- <?php include_once('pages/button.php'); ?>
206
- </div>
207
- <?php
208
- }
209
-
210
- function settings_box() {
211
-
212
- global $qlwapp;
213
- ?>
214
- <?php $this->settings_header(); ?>
215
- <div class="wrap about-wrap full-width-layout qlwrap">
216
- <?php include_once('pages/box.php'); ?>
217
- </div>
218
- <?php
219
- }
220
-
221
- function settings_contacts1() {
222
-
223
- global $qlwapp;
224
- ?>
225
- <?php $this->settings_header(); ?>
226
- <div class="wrap about-wrap full-width-layout qlwrap">
227
- <?php include_once('pages/contacts.php'); ?>
228
- </div>
229
- <?php
230
- }
231
-
232
- function settings_display() {
233
-
234
- global $qlwapp;
235
- ?>
236
- <?php $this->settings_header(); ?>
237
- <div class="wrap about-wrap full-width-layout qlwrap">
238
- <?php include_once('pages/display.php'); ?>
239
- </div>
240
- <?php
241
- }
242
-
243
- function settings_colors() {
244
-
245
- global $qlwapp;
246
- ?>
247
- <?php $this->settings_header(); ?>
248
- <div class="wrap about-wrap full-width-layout qlwrap">
249
- <?php include_once('pages/colors.php'); ?>
250
- </div>
251
- <?php
252
- }
253
-
254
- function settings_premium() {
255
-
256
- global $qlwapp;
257
- ?>
258
- <?php $this->settings_header(); ?>
259
- <div class="wrap about-wrap full-width-layout qlwrap">
260
- <?php include_once('pages/premium.php'); ?>
261
- </div>
262
- <?php
263
- }
264
-
265
- function settings_suggestions() {
266
-
267
- global $qlwapp;
268
- ?>
269
- <?php $this->settings_header(); ?>
270
- <?php include_once('suggestions.php'); ?>
271
- <?php include_once('pages/suggestions.php'); ?>
272
- <?php
273
  }
274
-
275
- function settings_contacts() {
276
- ?>
277
- <table class="form-table widefat" id="qlwapp-contact-form" data-editindex="-1">
278
- <?php
279
- //gestion de la time zone
280
- $current_offset = get_option('gmt_offset');
281
- $tzstring = get_option('timezone_string');
282
-
283
- $check_zone_info = true;
284
-
285
- // Remove old Etc mappings. Fallback to gmt_offset.
286
- if (false !== strpos($tzstring, 'Etc/GMT')) {
287
- $tzstring = '';
288
- }
289
- if (empty($tzstring)) { // Create a UTC+- zone if no timezone string exists
290
- $check_zone_info = false;
291
- if (0 == $current_offset) {
292
- $tzstring = 'UTC+0';
293
- } elseif ($current_offset < 0) {
294
- $tzstring = 'UTC' . $current_offset;
295
- } else {
296
- $tzstring = 'UTC+' . $current_offset;
297
- }
298
- }
299
- // echo 'aca ' . get_option('gmt_offset'). ' aca'.get_option( 'timezone_string');
300
- // gestion de los contactos + gmt
301
- $this->contact_table();
302
- ?>
303
- </table>
304
- <?php
305
- }
306
-
307
- function contact_table($id = 0) {
308
- global $qlwapp;
309
- ?>
310
- <tr>
311
- <td>
312
- <div class="upload">
313
- <img id="cavatar-img" class="qlwapp-avatar" data-src="<?php echo stripslashes(esc_url($qlwapp['contacts'][$id]['avatar'])); ?>" src="<?php echo esc_url($qlwapp['contacts'][$id]['avatar']); ?>" />
314
- <div>
315
- <input type="hidden" name="<?php echo esc_attr(QLWAPP_DOMAIN . '[contacts][' . $id . '][avatar]'); ?>" id="cavatar" value="<?php echo esc_url($qlwapp['contacts'][$id]['avatar']); ?>" />
316
- <button type="button" class="upload_image_button button"><?php esc_html_e('Upload', 'wp-whatsapp-chat'); ?></button>
317
- <button type="button" class="remove_image_button button">&times;</button>
318
- </div>
319
- </div>
320
- </td>
321
- <td>
322
- <table>
323
- <tr>
324
- <td><b><?php esc_html_e('Firstname', 'wp-whatsapp-chat'); ?></b></td>
325
- <td><input type="text" id="cfirstname" name="<?php echo esc_attr(QLWAPP_DOMAIN . '[contacts][' . $id . '][firstname]'); ?>" placeholder="<?php echo esc_html($this->defaults['contacts'][0]['firstname']); ?>" value="<?php echo esc_html($qlwapp['contacts'][$id]['firstname']); ?>" /></td>
326
- <td><b><?php esc_html_e('Lastname', 'wp-whatsapp-chat'); ?></b></td>
327
- <td><input type="text" id="clastname" name="<?php echo esc_attr(QLWAPP_DOMAIN . '[contacts][' . $id . '][lastname]'); ?>" placeholder="<?php echo esc_html($this->defaults['contacts'][0]['lastname']); ?>" value="<?php echo esc_html($qlwapp['contacts'][$id]['lastname']); ?>" /></td>
328
- </tr>
329
- <tr>
330
- <td><b><?php esc_html_e('Phone', 'wp-whatsapp-chat'); ?></b></td><td><input type="text" id="cphone" name="<?php echo esc_attr(QLWAPP_DOMAIN . '[contacts][' . $id . '][phone]'); ?>" placeholder="<?php echo esc_html('+542215677768'); ?>" value="<?php echo esc_html($qlwapp['contacts'][$id]['phone']); ?>"/></td>
331
- <td><b><?php esc_html_e('Label', 'wp-whatsapp-chat'); ?></b></td><td><input type="text" id="clabel" name="<?php echo esc_attr(QLWAPP_DOMAIN . '[contacts][' . $id . '][label]'); ?>" placeholder="<?php echo esc_html($this->defaults['contacts'][0]['label']); ?>" value="<?php echo esc_html($qlwapp['contacts'][$id]['label']); ?>" /></td>
332
- </tr>
333
- <tr>
334
- <td >
335
- <b><?php esc_html_e('From', 'wp-whatsapp-chat'); ?></b></td>
336
- <td class="qlwapp-premium-field">
337
- <input type="time" id="ctimefrom" name="<?php echo esc_attr(QLWAPP_DOMAIN . '[contacts][' . $id . '][timefrom]'); ?>" placeholder="<?php echo esc_html($this->defaults['contacts'][0]['timefrom']); ?>" value="<?php echo esc_html($qlwapp['contacts'][$id]['timefrom']); ?>" />
338
- <p class="description hidden"><small><?php esc_html_e('This is a premium feature', 'wp-whatsapp-chat'); ?></small></p>
339
-
340
- </td>
341
- <td>
342
- <b><?php esc_html_e('To', 'wp-whatsapp-chat'); ?></b></td>
343
- <td class="qlwapp-premium-field">
344
- <input type="time" id="ctimeto" name="<?php echo esc_attr(QLWAPP_DOMAIN . '[contacts][' . $id . '][timeto]'); ?>" placeholder="<?php echo esc_html($this->defaults['contacts'][0]['timeto']); ?>" value="<?php echo esc_html($qlwapp['contacts'][$id]['timeto']); ?>" />
345
- <p class="description hidden"><small><?php esc_html_e('This is a premium feature', 'wp-whatsapp-chat'); ?></small></p>
346
- </td>
347
- </tr>
348
- <!--
349
- <tr>
350
- <td><b><?php esc_html_e('Time is over', 'wp-whatsapp-chat'); ?></b></td>
351
- <td class="qlwapp-premium-field">
352
- <select id="ctimeout" name="<?php echo esc_attr(QLWAPP_DOMAIN . '[contacts][' . $id . '][timeout]'); ?>">
353
- <option value="readonly" ><?php esc_html_e('Show the field as read only', 'wp-whatsapp-chat'); ?></option>
354
- <option value="disabled" > <?php esc_html_e('Do not show the field', 'wp-whatsapp-chat'); ?></option>
355
- </select>
356
- <p class="description hidden"><small><?php esc_html_e('This is a premium feature', 'wp-whatsapp-chat'); ?></small></p>
357
- </td> -->
358
- <td>
359
- <b><label for="timezone"><?php esc_html_e('Timezone', 'wp-whatsapp-chat'); ?></label></b></td>
360
- <td class="qlwapp-premium-field">
361
- <select id="ctimezone" name="<?php echo esc_attr(QLWAPP_DOMAIN . '[contacts][' . $id . '][timezone]'); ?>" aria-describedby="timezone-description">
362
- <?php echo wp_timezone_choice(get_option('timezone_string'), get_user_locale()); ?>
363
- </select>
364
- <p class="description hidden"><small><?php esc_html_e('This is a premium feature', 'wp-whatsapp-chat'); ?></small></p>
365
-
366
- </td>
367
- </tr>
368
- </table>
369
- </td>
370
- </tr>
371
- <tr>
372
- <td><b><?php esc_html_e('Chat', 'wp-whatsapp-chat'); ?></b></td>
373
- <td class="qlwapp-premium-field">
374
- <p>
375
- <label><input type="radio" class="cchat" name="<?php echo esc_attr(QLWAPP_DOMAIN . '[contacts][' . $id . '][chat]'); ?>" value="1" <?php echo checked(true, (bool) $qlwapp['contacts'][$id]['chat']); ?>/><?php esc_html_e('Enabled', 'wp-whatsapp-chat'); ?></label>
376
- <label><input type="radio" class="cchat" name="<?php echo esc_attr(QLWAPP_DOMAIN . '[contacts][' . $id . '][chat]'); ?>" value="0" <?php echo checked(false, (bool) $qlwapp['contacts'][$id]['chat']); ?>/><?php esc_html_e('Disabled', 'wp-whatsapp-chat'); ?></label>
377
- </p>
378
- <p class="description hidden"><small><?php esc_html_e('This is a premium feature', 'wp-whatsapp-chat'); ?></small></p>
379
-
380
- </td>
381
- </tr>
382
- <tr>
383
- <td colspan="2"><b><?php esc_html_e('Message', 'wp-whatsapp-chat'); ?></b></td>
384
- </tr>
385
- <tr class="qlwapp-premium-field">
386
- <td colspan="2"><?php wp_editor($qlwapp['contacts'][$id]['message'], 'cmessage', array('tinymce' => false, 'editor_height' => 150, 'textarea_name' => esc_attr(QLWAPP_DOMAIN . '[contacts][' . $id . '][message]'))); ?></td>
387
- <p class="description hidden"><small><?php esc_html_e('This is a premium feature', 'wp-whatsapp-chat'); ?></small></p>
388
- </tr>
389
- <?php
390
  }
391
-
392
- function add_print_media_templates() {
393
- ?>
394
- <script type="text/html" id='tmpl-qlwapp-modal-backdrop'>
395
- <div class="media-modal-backdrop">&nbsp;</div>
396
- </script>
397
- <script type="text/html" id='tmpl-qlwapp-modal-window'>
398
- <div id="qlwapp_modal" class="media-modal wp-core-ui">
399
- <button type="button" class="media-modal-close close">
400
- <span class="media-modal-icon">
401
- <span class="screen-reader-text"><?php esc_html_e('Close media panel'); ?></span>
402
- </span>
403
- </button>
404
- <div class="media-frame mode-select wp-core-ui hide-menu">
405
- <div class="media-frame-title">
406
- <h1><?php echo esc_html(QLWAPP_PLUGIN_NAME); ?><span class="dashicons dashicons-arrow-down"></span></h1>
407
- </div>
408
- <div class="media-frame-router">
409
- <div class="media-router">
410
- <a href="#" class="media-menu-item active"><?php esc_html_e('Select icon', 'wp-whatsapp-chat'); ?></a>
411
- </div>
412
- </div>
413
- <div class="media-modal-content">
414
- <div class="media-frame mode-select wp-core-ui">
415
- <div class="media-frame-menu">
416
- <div class="media-menu">
417
- <a href="#" class="media-menu-item active"><?php esc_html_e('Featured Image'); ?></a>
418
- </div>
419
- </div>
420
- <div class="media-frame-content" data-columns="10">
421
- <div class="attachments-browser">
422
- <input type="hidden" id="qlwapp_icon" value="{{ data.icon }}">
423
- <ul tabindex="-1" class="attachments">
424
- <?php foreach (explode(',', 'qlwf-chat,qlwf-chat1,qlwf-chat2,qlwf-comments,qlwf-chat3,qlwf-bubble1,qlwf-chat-alt-fill,qlwf-chat-alt-stroke,qlwf-comment-alt2-fill,qlwf-comment-alt2-stroke,qlwf-comment-fill,qlwf-comment-stroke,qlwf-comment,qlwf-comment-alt1-stroke,qlwf-chat4,qlwf-comments1,qlwf-chat5,qlwf-comment1,qlwf-bubble,qlwf-bubbles,qlwf-bubbles2,qlwf-bubble2,qlwf-bubbles3,qlwf-bubbles4,qlwf-whatsapp,qlwf-chat6,qlwf-mode_comment,qlwf-insert_comment,qlwf-chat_bubble_outline,qlwf-chat_bubble,qlwf-bubble_chart,qlwf-comment2,qlwf-chat7,qlwf-commenting-o,qlwf-commenting,qlwf-comments-o,qlwf-comment-o,qlwf-wechat,qlwf-comments2,qlwf-comment3,qlwf-chat8,qlwf-chat-bubble-dots,qlwf-bubbles1,qlwf-bubble3') as $id => $icon) : ?>
425
- <li tabindex="0" role="checkbox" aria-label="<?php echo esc_attr($icon); ?>" aria-checked="false" data-id="<?php echo esc_attr($id); ?>" class="attachment save-ready icon _<?php echo esc_attr(str_replace(' ', '_', trim($icon))); ?>">
426
- <div class="attachment-preview js--select-attachment type-image subtype-jpeg landscape">
427
- <div class="thumbnail">
428
- <i class="<?php echo esc_attr($icon); ?>"></i>
429
- </div>
430
- </div>
431
- <button type="button" class="check" tabindex="-1">
432
- <span class="media-modal-icon"></span>
433
- <span class="screen-reader-text"><?php esc_html_e('Deselect'); ?></span>
434
- </button>
435
- </li>
436
- <?php endforeach; ?>
437
- </ul>
438
- </div>
439
- </div>
440
- <div class="media-frame-toolbar">
441
- <div class="media-toolbar">
442
- <div class="media-toolbar-secondary"></div>
443
- <div class="media-toolbar-primary search-form">
444
- <button type="button" class="button media-button button-large button-primary media-button-select save"><?php esc_html_e('Save'); ?></button>
445
- <button type="button" class="button media-button button-large button-secondary remove"><?php esc_html_e('Remove'); ?></button>
446
- </div>
447
- </div>
448
- </div>
449
- </div>
450
- </div>
451
- </div>
452
- </div>
453
- </script>
454
- <?php
455
  }
456
-
457
- function filter_pre_update_option($value, $old_value, $option) {
458
-
459
- global $qlwapp;
460
-
461
- if (isset($value['display'])) {
462
- unset($qlwapp['display']);
463
  }
464
-
465
- if (isset($value['contacts'])) {
466
- unset($qlwapp['contacts']);
467
  }
 
468
 
469
- return $this->wp_parse_args($value, $qlwapp);
 
 
 
 
 
 
 
 
 
470
  }
471
 
472
- function add_css() {
473
- ?>
474
- <style>
475
- @font-face {
476
- font-family: 'qlwf-whatsapp';
477
- src: url(data:application/x-font-woff;charset=utf-8;base64,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) format('woff');
478
- font-weight: normal;
479
- font-style: normal;
480
- }
481
 
482
- #toplevel_page_qlwapp .wp-menu-image img {
483
- height: 16px;
484
- }
485
- </style>
486
- <?php
487
  }
488
-
489
- function add_js() {
490
- if (isset($_GET['page']) && strpos($_GET['page'], QLWAPP_DOMAIN) !== false) {
491
- wp_register_style('qlwapp-select2', plugins_url('/assets/css/qlwapp-select2' . QLWAPP::is_min() . '.css', QLWAPP_PLUGIN_FILE), array('wp-color-picker'), QLWAPP_PLUGIN_VERSION, 'all');
492
-
493
- wp_enqueue_style('qlwapp-admin', plugins_url('/assets/css/qlwapp-admin' . QLWAPP::is_min() . '.css', QLWAPP_PLUGIN_FILE), array('wp-color-picker', 'qlwapp-select2'), QLWAPP_PLUGIN_VERSION, 'all');
494
-
495
- wp_enqueue_media();
496
- wp_register_script('qlwapp-modal', plugins_url('/assets/js/qlwapp-modal' . QLWAPP::is_min() . '.js', QLWAPP_PLUGIN_FILE), array('jquery', 'backbone'), QLWAPP_PLUGIN_VERSION, true);
497
- wp_register_script('qlwapp-select2', plugins_url('/assets/js/select2.min.js', QLWAPP_PLUGIN_FILE), array('jquery'), QLWAPP_PLUGIN_VERSION);
498
- wp_enqueue_script('qlwapp-admin', plugins_url('/assets/js/qlwapp-admin' . QLWAPP::is_min() . '.js', QLWAPP_PLUGIN_FILE), array('jquery', 'qlwapp-modal', 'qlwapp-select2', 'wp-color-picker'), QLWAPP_PLUGIN_VERSION, true);
499
-
500
- wp_localize_script('qlwapp-admin', 'qlwapp', array('nonce' => array(
501
- 'qlwapp_get_posts' => wp_create_nonce('qlwapp_get_posts'),
502
- 'qlwapp_get_contact' => wp_create_nonce('qlwapp_get_contact'),
503
- 'qlwapp_edit_contact' => wp_create_nonce('qlwapp_edit_contact'),
504
- 'qlwapp_add_contact' => wp_create_nonce('qlwapp_add_contact'),
505
- 'qlwapp_save_contact' => wp_create_nonce('qlwapp_save_contact')
506
- ))
507
- );
508
- }
509
  }
510
-
511
- function init() {
512
- add_action('wp_ajax_qlwapp_get_posts', array($this, 'ajax_get_posts'));
513
- add_action('admin_enqueue_scripts', array($this, 'add_js'));
514
- add_action('admin_head', array($this, 'add_css'));
515
- add_action('admin_menu', array($this, 'add_menu'));
516
- add_action('admin_init', array($this, 'add_settings_register'));
517
- add_action('print_media_templates', array($this, 'add_print_media_templates'));
518
- add_filter('pre_update_option_' . sanitize_key(QLWAPP_DOMAIN), array($this, 'filter_pre_update_option'), -1, 3);
519
- add_filter('plugin_action_links_' . plugin_basename(QLWAPP_PLUGIN_FILE), array($this, 'add_action_links'));
520
-
521
- ////
522
- add_action('wp_ajax_qlwapp_add_contact', array($this, 'ajax_add_contact'));
523
- add_action('wp_ajax_qlwapp_edit_contact', array($this, 'ajax_edit_contact'));
524
- add_action('wp_ajax_qlwapp_save_contact', array($this, 'ajax_save_contact'));
525
-
526
- //
527
- add_action('admin_init', array($this, 'add_redirect'));
528
- add_filter('network_admin_url', array($this, 'network_admin_url'), 10, 2);
529
  }
530
-
531
- ///
532
- function ajax_edit_contact() {
533
- global $qlwapp;
534
-
535
- if (check_ajax_referer('qlwapp_edit_contact', 'nonce', false)) {
536
- // set -1 if the contact not exist beacouse allways exist contact 0
537
- $contact_id = (isset($_REQUEST['contact_id'])) ? absint($_REQUEST['contact_id']) : -1;
538
- if (isset($qlwapp['contacts'][$contact_id])) {
539
- $qlwapp['contacts'][$contact_id]['id'] = $contact_id;
540
- $qlwapp['contacts'][$contact_id]['prev_id'] = $contact_id - 1;
541
- $qlwapp['contacts'][$contact_id]['next_id'] = min($contact_id + 1, count($qlwapp['contacts']) - 1);
542
-
543
- wp_send_json_success($qlwapp['contacts'][$contact_id]);
544
- }
545
- } else {
546
- $this->defaults()['contacts'][0]['id'] = $contact_id;
547
- wp_send_json_success($this->defaults()['contacts'][0]);
548
- }
549
  }
 
 
550
 
551
- function ajax_save_contact() {
552
- global $qlwapp;
553
- if (check_ajax_referer('qlwapp_save_contact', 'nonce', false)) {
554
-
555
- if (array_key_exists('contacts', $qlwapp)) {
556
-
557
- $contact_data = isset($_REQUEST['contact_data']) ? $_REQUEST['contact_data'] : false;
558
- $contact_id = isset($_REQUEST['contact_id']) ? absint($_REQUEST['contact_id']) : 0;
559
-
560
- if (is_array($contact_data)) {
561
-
562
- $qlwapp['contacts'][$contact_id] = wp_parse_args($contact_data, $qlwapp['contacts'][$contact_id]);
563
-
564
- update_option('qlwapp', $qlwapp);
565
-
566
- wp_send_json_success($contact_data);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
567
  }
568
-
569
- wp_send_json_error(esc_html__('Undefined contact', 'qlwapp'));
570
  }
571
  }
572
  }
 
573
 
574
- function ajax_add_contact() {
575
- global $qlwapp;
576
- }
 
 
 
577
 
578
- public static function instance() {
579
- if (!isset(self::$instance)) {
580
- self::$instance = new self();
581
- self::$instance->defaults();
582
- self::$instance->init();
583
- }
584
- return self::$instance;
585
  }
586
-
587
  }
588
 
589
- QLWAPP_Settings::instance();
590
  }
 
 
 
1
  <?php
 
 
2
 
3
+ include_once(QLWAPP_PLUGIN_DIR . 'includes/helpers.php');
4
 
5
+ class QLWAPP_Settings {
6
 
7
+ protected static $instance;
8
 
9
+ // fix required header in license tab
10
+ function settings_header() {
11
+ include (QLWAPP_PLUGIN_DIR . '/includes/view/backend/pages/parts/header.php');
12
+ }
 
 
 
 
 
 
13
 
14
+ // fix settings override with defaults on license save
15
+ function settings_sanitize($qlwapp) {
16
 
17
+ $current = get_option(QLWAPP_DOMAIN, array());
18
 
19
+ return wp_parse_args($qlwapp, $current);
20
+ }
 
 
 
 
 
 
 
 
21
 
22
+ // required to save license
23
+ function settings_register() {
24
+ register_setting(sanitize_key(QLWAPP_DOMAIN . '-group'), sanitize_key(QLWAPP_DOMAIN), array($this, 'settings_sanitize'));
25
+ }
26
 
27
+ function previous_author($qlwapp) {
28
+ //button
29
+ if ($phone = get_option('whatsapp_chat_page')) {
30
+ $qlwapp['button']['phone'] = $phone;
31
  }
32
+ if ($text = get_option('whatsapp_chat_button')) {
33
+ $qlwapp['button']['text'] = $text;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
34
  }
35
+ if (get_option('whatsapp_chat_powered_by')) {
36
+ $qlwapp['button']['developer'] = 'yes';
 
 
 
 
 
 
 
 
 
37
  }
38
+ if (false !== get_option('whatsapp_chat_round')) {
39
+ $qlwapp['button']['rounded'] = 'no';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
40
  }
41
+ if (false !== get_option('whatsapp_chat_down')) {
42
+ $vposition = get_option('whatsapp_chat_down') ? 'bottom' : 'middle';
43
+ $hposition = get_option('whatsapp_chat_left_side') ? 'left' : 'right';
44
+ $qlwapp['button']['position'] = "{$vposition}-{$hposition}";
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
45
  }
46
+ if ($message = get_option('whatsapp_chat_msg')) {
47
+ $qlwapp['button']['message'] = $message;
 
48
  }
49
+ // display
50
+ if ($mobile = get_option('whatsapp_chat_mobile')) {
51
+ $qlwapp['display']['devices'] = 'mobile';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
52
  }
53
+ if (get_option('whatsapp_chat_hide_button')) {
54
+ $qlwapp['display']['devices'] = 'hide';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
55
  }
56
+ if (get_option('whatsapp_chat_hide_post')) {
57
+ $qlwapp['display']['post'] = array('none');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
58
  }
59
+ if (get_option('whatsapp_chat_hide_page')) {
60
+ $qlwapp['display']['page'] = array('none');
61
+ }
62
+ // No se usa mas
63
+ /* if (get_option('whatsapp_chat_hide_product')) {
64
+ $qlwapp['display']['product'] = array('none');
 
65
  }
66
+ // No se usa mas
67
+ if (get_option('whatsapp_chat_hide_project')) {
68
+ $qlwapp['display']['project'] = array('none');
69
  }
70
+ */
71
 
72
+ //scheme
73
+ if (get_option('whatsapp_chat_dark')) {
74
+ $qlwapp['scheme']['brand'] = '#075E54';
75
+ $qlwapp['scheme']['text'] = '#ffffff';
76
+ } elseif (get_option('whatsapp_chat_white')) {
77
+ $qlwapp['scheme']['brand'] = '#ffffff';
78
+ $qlwapp['scheme']['text'] = '#075E54';
79
+ } elseif (false !== get_option('whatsapp_chat_white')) {
80
+ $qlwapp['scheme']['brand'] = '#20B038';
81
+ $qlwapp['scheme']['text'] = '#ffffff';
82
  }
83
 
84
+ return $qlwapp;
85
+ }
 
 
 
 
 
 
 
86
 
87
+ function previous_versions($qlwapp) {
88
+ if (isset($qlwapp['chat']['response']) && !isset($qlwapp['box']['response'])) {
89
+ $qlwapp['box']['response'] = $qlwapp['chat']['response'];
 
 
90
  }
91
+ if (isset($qlwapp['user']['message'])) {
92
+ $qlwapp['button']['message'] = $qlwapp['user']['message'];
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
93
  }
94
+ if (isset($qlwapp['button']['rounded']) && $qlwapp['button']['rounded'] == 1) {
95
+ $qlwapp['button']['rounded'] = 'yes';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
96
  }
97
+ if (isset($qlwapp['button']['developer']) && $qlwapp['button']['developer'] == 1) {
98
+ $qlwapp['button']['developer'] = 'yes';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
99
  }
100
+ return $qlwapp;
101
+ }
102
 
103
+ function premium_version() {
104
+ global $qlwapp;
105
+ //includes
106
+ include_once(QLWAPP_PLUGIN_DIR . 'includes/models/QLWAPP_Model.php');
107
+ include_once(QLWAPP_PLUGIN_DIR . 'includes/models/Button.php');
108
+ include_once(QLWAPP_PLUGIN_DIR . 'includes/models/Box.php');
109
+ include_once(QLWAPP_PLUGIN_DIR . 'includes/models/Contact.php');
110
+ include_once(QLWAPP_PLUGIN_DIR . 'includes/models/Chat.php');
111
+ include_once(QLWAPP_PLUGIN_DIR . 'includes/models/Display.php');
112
+ include_once(QLWAPP_PLUGIN_DIR . 'includes/models/License.php');
113
+ include_once(QLWAPP_PLUGIN_DIR . 'includes/models/Scheme.php');
114
+ // models
115
+ $model = new QLWAPP_Model();
116
+ $license_model = new QLWAPP_License();
117
+ $button_model = new QLWAPP_Button();
118
+ $box_model = new QLWAPP_Box();
119
+ $contact_model = new QLWAPP_Contact();
120
+ $chat_model = new QLWAPP_Chat();
121
+ $display_model = new QLWAPP_Display();
122
+ $scheme_model = new QLWAPP_Scheme();
123
+
124
+ // objects
125
+ $qlwapp = $model->options();
126
+ $qlwapp['button'] = $button_model->get();
127
+ $qlwapp['box'] = $box_model->get();
128
+ $qlwapp['contacts'] = $contact_model->get_contacts_reorder();
129
+ $qlwapp['chat'] = $chat_model->get();
130
+ $qlwapp['display'] = $display_model->get();
131
+ $qlwapp['license'] = $license_model->get();
132
+ $qlwapp['scheme'] = $scheme_model->get();
133
+
134
+ if (!is_admin()) {
135
+ if (isset($qlwapp['button']['phone'])) {
136
+ $qlwapp['button']['phone'] = qlwapp_format_phone($qlwapp['button']['phone']);
137
+ }
138
+ if (isset($qlwapp['button']['timezone'])) {
139
+ $qlwapp['button']['timezone'] = qlwapp_get_timezone_offset($qlwapp['button']['timezone']);
140
+ }
141
+ }
142
+
143
+ if (isset($qlwapp['contacts'])) {
144
+ if (count($qlwapp['contacts'])) {
145
+ foreach ($qlwapp['contacts'] as $id => $c) {
146
+ $qlwapp['contacts'][$id] = wp_parse_args($c, $contact_model->get_args());
147
+
148
+ if (!is_admin()) {
149
+ if (!empty($qlwapp['contacts'][$id]['phone'])) {
150
+ $qlwapp['contacts'][$id]['phone'] = qlwapp_format_phone($qlwapp['contacts'][$id]['phone']);
151
+ }
152
+ if (!empty($qlwapp['contacts'][$id]['timezone'])) {
153
+ $qlwapp['contacts'][$id]['timezone'] = qlwapp_get_timezone_offset($qlwapp['contacts'][$id]['timezone']);
154
+ }
155
  }
 
 
156
  }
157
  }
158
  }
159
+ }
160
 
161
+ function init() {
162
+ add_filter('init', array($this, 'premium_version'));
163
+ add_action('admin_init', array($this, 'settings_register'));
164
+ add_filter('option_qlwapp', array($this, 'previous_versions'));
165
+ add_filter('default_option_qlwapp', array($this, 'previous_author'), 20);
166
+ }
167
 
168
+ public static function instance() {
169
+ if (!isset(self::$instance)) {
170
+ self::$instance = new self();
171
+ self::$instance->init();
 
 
 
172
  }
173
+ return self::$instance;
174
  }
175
 
 
176
  }
177
+
178
+ QLWAPP_Settings::instance();
179
+
includes/view/backend/pages/box.php ADDED
@@ -0,0 +1,46 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div class="wrap about-wrap full-width-layout qlwrap">
2
+ <form id="qlwapp_box_form" method="post" action="options.php">
3
+ <table class="form-table">
4
+ <tbody>
5
+ <tr>
6
+ <th scope="row"><?php esc_html_e('Disable', 'wp-whatsapp-chat'); ?></th>
7
+ <td>
8
+ <select name="enable" class="qlwapp-select2">
9
+ <option value="yes" <?php selected($box['enable'], 'yes'); ?>><?php esc_html_e('Enable contact box', 'wp-whatsapp-chat'); ?></option>
10
+ <option value="no" <?php selected($box['enable'], 'no'); ?>><?php esc_html_e('Disable contact box', 'wp-whatsapp-chat'); ?></option>
11
+ </select>
12
+ </td>
13
+ </tr>
14
+ <tr>
15
+ <th scope="row"><?php esc_html_e('Header', 'wp-whatsapp-chat'); ?></th>
16
+ <td>
17
+ <?php wp_editor($box['header'], 'qlwapp_box_header', array('editor_height' => 100, 'textarea_name' => 'header', 'tinymce' => array('init_instance_callback' => 'function(editor) { editor.on("change", function(){ $(".button-primary").attr("disabled", false);}); }'))); ?>
18
+ </td>
19
+ </tr>
20
+ <tr>
21
+ <th scope="row"><?php esc_html_e('Footer', 'wp-whatsapp-chat'); ?></th>
22
+ <td>
23
+ <?php //wp_editor($box['footer'], 'qlwapp_box_footer', array('editor_height' => 50, 'textarea_name' => 'footer')); ?>
24
+ <?php wp_editor($box['footer'], 'qlwapp_box_footer', array('editor_height' => 50, 'textarea_name' => 'footer', 'tinymce' => array('init_instance_callback' => 'function(editor) { editor.on("change", function(){ $(".button-primary").attr("disabled", false);}); }'))); ?>
25
+ </td>
26
+ </tr>
27
+ <tr>
28
+ <th scope="row"><?php esc_html_e('Response', 'wp-whatsapp-chat'); ?></th>
29
+ <td>
30
+ <input type="text" name="response" placeholder="<?php echo esc_html($box['response']); ?>" value="<?php echo esc_attr($box['response']); ?>" class="qlwapp-input"/>
31
+ <p class="description hidden"><?php esc_html_e('Write a response text.', 'wp-whatsapp-chat'); ?></p>
32
+ </td>
33
+ </tr>
34
+
35
+ </tbody>
36
+ </table>
37
+ <?php wp_nonce_field('qlwapp_save_box', 'qlwapp_box_form_nonce'); ?>
38
+ <p class="submit">
39
+ <?php submit_button(esc_html__('Save', 'wp-whatsapp-chat'), 'primary', 'submit', false); ?>
40
+ <span class="settings-save-status">
41
+ <span class="saved"><?php esc_html_e('Saved successfully!'); ?></span>
42
+ <span class="spinner" style="float: none"></span>
43
+ </span>
44
+ </p>
45
+ </form>
46
+ </div>
includes/view/backend/pages/button.php ADDED
@@ -0,0 +1,121 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div class="wrap about-wrap full-width-layout qlwrap">
2
+ <form id="qlwapp_button_form" method="post" action="options.php" >
3
+ <table class="form-table">
4
+ <tbody>
5
+ <tr>
6
+ <th scope="row"><?php esc_html_e('Layout', 'wp-whatsapp-chat'); ?></th>
7
+ <td>
8
+ <select name="layout" class="qlwapp-select2">
9
+ <option value="button" <?php selected($button['layout'], 'button'); ?>><?php esc_html_e('Button', 'wp-whatsapp-chat'); ?></option>
10
+ <option value="bubble" <?php selected($button['layout'], 'bubble'); ?>><?php esc_html_e('Bubble', 'wp-whatsapp-chat'); ?></option>
11
+ </select>
12
+ <p class="description hidden"><?php esc_html_e('Switch to change the button layout.', 'wp-whatsapp-chat'); ?></p>
13
+ </td>
14
+ </tr>
15
+ <tr>
16
+ <th scope="row"><?php esc_html_e('Rounded', 'wp-whatsapp-chat'); ?></th>
17
+ <td>
18
+ <select name="rounded" class="qlwapp-select2">
19
+ <option value="yes" <?php selected($button['rounded'], 'yes'); ?>><?php esc_html_e('Add rounded border', 'wp-whatsapp-chat'); ?></option>
20
+ <option value="no" <?php selected($button['rounded'], 'no'); ?>><?php esc_html_e('Remove rounded border', 'wp-whatsapp-chat'); ?></option>
21
+ </select>
22
+ <p class="description hidden"><?php esc_html_e('Add rounded border to the button.', 'wp-whatsapp-chat'); ?></p>
23
+ </td>
24
+ </tr>
25
+ <tr>
26
+ <th scope="row"><?php esc_html_e('Position', 'wp-whatsapp-chat'); ?></th>
27
+ <td>
28
+ <select name="position" class="qlwapp-select2">
29
+ <option value="middle-left" <?php selected($button['position'], 'middle-left'); ?>><?php esc_html_e('Middle Left', 'wp-whatsapp-chat'); ?></option>
30
+ <option value="middle-right" <?php selected($button['position'], 'middle-right'); ?>><?php esc_html_e('Middle Right', 'wp-whatsapp-chat'); ?></option>
31
+ <option value="bottom-left" <?php selected($button['position'], 'bottom-left'); ?>><?php esc_html_e('Bottom Left', 'wp-whatsapp-chat'); ?></option>
32
+ <option value="bottom-right" <?php selected($button['position'], 'bottom-right'); ?>><?php esc_html_e('Bottom Right', 'wp-whatsapp-chat'); ?></option>
33
+ </select>
34
+ <p class="description hidden"><?php esc_html_e('Switch to change the button position.', 'wp-whatsapp-chat'); ?></p>
35
+ </td>
36
+ </tr>
37
+ <tr>
38
+ <th scope="row"><?php esc_html_e('Icon', 'wp-whatsapp-chat'); ?></th>
39
+ <td>
40
+ <div class="submit qlwapp-premium-field">
41
+ <?php submit_button(esc_html__('Add Icon', 'wp-whatsapp-chat'), 'secondary', null, false, array('id' => 'btn-add-icon')); ?>
42
+ <p class="description hidden"><small><?php esc_html_e('This is a premium feature', 'wp-whatsapp-chat'); ?></small></p>
43
+ </div>
44
+ <input type="text" name="icon" placeholder="<?php echo esc_html($button['icon']); ?>" value="<?php echo esc_attr($button['icon']); ?>" class="qlwapp-input"/>
45
+ </td>
46
+ </tr>
47
+ <!--<tr>
48
+ <th scope="row"><?php esc_html_e('Discreet link', 'wp-whatsapp-chat'); ?></th>
49
+ <td>
50
+ <select name="developer" class="qlwapp-select2">
51
+ <option value="yes" <?php selected($button['developer'], 'yes'); ?>><?php esc_html_e('Show developer link', 'wp-whatsapp-chat'); ?></option>
52
+ <option value="no" <?php selected($button['developer'], 'no'); ?>><?php esc_html_e('Hide developer link', 'wp-whatsapp-chat'); ?></option>
53
+ </select>
54
+ <p class="description hidden"><?php esc_html_e('Leave a discrete link to developer to help and keep new updates and support.', 'wp-whatsapp-chat'); ?></p>
55
+ </td>
56
+ </tr>-->
57
+ <tr>
58
+ <th scope="row"><?php esc_html_e('Text', 'wp-whatsapp-chat'); ?></th>
59
+ <td>
60
+ <input type="text" name="text" placeholder="<?php echo esc_html($button['text']); ?>" value="<?php echo esc_attr($button['text']); ?>" class="qlwapp-input"/>
61
+ <p class="description hidden"><?php esc_html_e('Customize your text.', 'wp-whatsapp-chat'); ?></p>
62
+ </td>
63
+ </tr>
64
+ <tr>
65
+ <th scope="row"><?php esc_html_e('Phone', 'wp-whatsapp-chat'); ?></th>
66
+ <td>
67
+ <input type="text" name="phone" placeholder="" value="<?php echo esc_attr($button['phone']); ?>" class="qlwapp-input" required="required"/>
68
+ <p class="description hidden"><?php esc_html_e('Full phone number in international format.', 'wp-whatsapp-chat'); ?></p>
69
+
70
+ </td>
71
+ </tr>
72
+ <tr>
73
+ <th scope="row"><?php esc_html_e('Message', 'wp-whatsapp-chat'); ?></th>
74
+ <td>
75
+ <textarea maxlength="500" style="width:75%;height:50px;padding:8px;" name="message" placeholder="<?php echo esc_html($button['message']); ?>"><?php echo esc_html(trim($button['message'])); ?></textarea>
76
+ <p class="description hidden"><?php esc_html_e('Message that will automatically appear in the text field of a chat.', 'wp-whatsapp-chat'); ?></p>
77
+ </td>
78
+ </tr>
79
+ <tr>
80
+ <th scope="row"><?php esc_html_e('Schedule', 'wp-whatsapp-chat'); ?></th>
81
+ <td class="qlwapp-premium-field">
82
+ <b><?php esc_html_e('From', 'wp-whatsapp-chat'); ?></b>
83
+ <input type="time" name="timefrom" placeholder="<?php echo esc_html($button['timefrom']); ?>" value="<?php echo esc_html($button['timefrom']); ?>" />
84
+ <b><?php esc_html_e('To', 'wp-whatsapp-chat'); ?></b>
85
+ <input type="time" name="timeto" placeholder="<?php echo esc_html($button['timeto']); ?>" value="<?php echo esc_html($button['timeto']); ?>" />
86
+ <p class="description hidden"><small><?php esc_html_e('This is a premium feature', 'wp-whatsapp-chat'); ?></small></p>
87
+ </td>
88
+ </tr>
89
+ <tr>
90
+ <th scope="row"><?php esc_html_e('Timezone', 'wp-whatsapp-chat'); ?></th>
91
+ <td class="qlwapp-premium-field">
92
+ <select name="timezone" aria-describedby="timezone-description" required="" class="qlwapp-select2">
93
+ <?php echo wp_timezone_choice($button['timezone'], get_user_locale()); ?>
94
+ </select>
95
+ <p class="description"><small><?php esc_html_e('Hide button if the user is out of the available hours.', 'wp-whatsapp-chat'); ?></small></p>
96
+ <p class="description hidden"><small><?php esc_html_e('This is a premium feature', 'wp-whatsapp-chat'); ?></small></p>
97
+ </td>
98
+ </tr>
99
+ <!-- <tr>
100
+ <th scope="row"><?php // esc_html_e('Timeout', 'wp-whatsapp-chat'); ?></th>
101
+ <td class="qlwapp-premium-field">
102
+ <select name="timeout" class="qlwapp-select2">
103
+ <option value="yes" <?php // selected($button['timeout'], 'yes'); ?>><?php esc_html_e('Show the button as read only', 'wp-whatsapp-chat'); ?></option>
104
+ <option value="no" <?php // selected($button['timeout'], 'no'); ?>><?php esc_html_e('Do not show the button', 'wp-whatsapp-chat'); ?></option>
105
+ </select>
106
+ <p class="description hidden"><small><?php //esc_html_e('This is a premium feature', 'wp-whatsapp-chat'); ?></small></p>
107
+ </td>
108
+ </tr> -->
109
+ </tbody>
110
+ </table>
111
+ <?php wp_nonce_field('qlwapp_save_button', 'qlwapp_button_form_nonce'); ?>
112
+ <p class="submit">
113
+ <?php submit_button(esc_html__('Save', 'wp-whatsapp-chat'), 'primary', 'submit', false); ?>
114
+ <span class="settings-save-status">
115
+ <span class="saved"><?php esc_html_e('Saved successfully!'); ?></span>
116
+ <span class="spinner" style="float: none"></span>
117
+ </span>
118
+ </p>
119
+ </form>
120
+ </div>
121
+ <?php include_once('modals/icons-modal.php'); ?>
includes/view/backend/pages/contacts.php ADDED
@@ -0,0 +1,73 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div class="wrap about-wrap full-width-layout qlwrap">
2
+ <form id="qlwapp_contacts_form" method="post" >
3
+ <p class="submit qlwapp-premium-field">
4
+ <?php submit_button(esc_html__('+ Contact', 'wp-whatsapp-chat'), 'secondary', 'submit', false, array('id' => 'qlwapp_contact_add')); ?>
5
+ <?php submit_button(esc_html__('Save reorder', 'wp-whatsapp-chat'), 'primary', 'submit', false, array('id' => 'qlwapp_contact_order', 'disabled' => 'disabled')); ?>
6
+ <span class="settings-save-status">
7
+ <span class="spinner"></span>
8
+ <span class="saved"><?php esc_html_e('Saved successfully!'); ?></span>
9
+ </span>
10
+ </p>
11
+ <table id="qlwapp_contacts_table" class="form-table widefat striped">
12
+ <thead>
13
+ <tr>
14
+ <th style="text-align: center"><?php esc_html_e('Order', 'wp-whatsapp-chat'); ?></th>
15
+ <th><?php esc_html_e('Avatar', 'wp-whatsapp-chat'); ?></th>
16
+ <th><?php esc_html_e('Phone', 'wp-whatsapp-chat'); ?></th>
17
+ <th><?php esc_html_e('Name', 'wp-whatsapp-chat'); ?></th>
18
+ <th><?php esc_html_e('Label', 'wp-whatsapp-chat'); ?></th>
19
+ <th><?php esc_html_e('Chat', 'wp-whatsapp-chat'); ?></th>
20
+ <th><?php esc_html_e('Message', 'wp-whatsapp-chat'); ?></th>
21
+ <th><?php esc_html_e('Availability', 'wp-whatsapp-chat'); ?></th>
22
+ <th><?php esc_html_e('Timezone', 'wp-whatsapp-chat'); ?></th>
23
+ <th ><?php esc_html_e('Actions', 'wp-whatsapp-chat'); ?></th>
24
+ </tr>
25
+ </thead>
26
+ <tbody class="ui-sortable">
27
+ <?php if (count($contacts)): ?>
28
+ <?php
29
+ $position = 0;
30
+ foreach ($contacts as $id => $c) {
31
+ ?>
32
+ <tr data-contact_id="<?php echo esc_attr($id) ?>" data-contact_order="<?php echo esc_attr($c['order']) ?>">
33
+ <td class="sort ui-sortable-handle">
34
+ <div class="wc-item-reorder-nav">
35
+ <button type="button" class="wc-move-up " tabindex="-1" aria-hidden="true" aria-label="<?php ///echo ///esc_attr(sprintf(__('Move the "%s" payment method up', 'woocommerce-checkout-manager'), $contact['label'])); ?>"><?php esc_html_e('Move up', 'wp-whatsapp-chat'); ?></button>
36
+ <button type="button" class="wc-move-down" tabindex="0" aria-hidden="false" aria-label="<?php ///echo esc_attr(sprintf(__('Move the "%s" payment method down', 'woocommerce-checkout-manager'), $field['label'])); ?>"><?php esc_html_e('Move down', 'wp-whatsapp-chat'); ?></button>
37
+ <input type="hidden" name="contact_order[]" value="<?php echo esc_attr($id); ?>">
38
+ </div>
39
+ </td>
40
+ <td>
41
+ <img class="qlwapp-avatar" src="<?php echo $c['avatar']; ?>" alt="" width="50" height="50" /> </td>
42
+ <td><?php echo esc_attr($c['phone']); ?></td>
43
+ <td><?php echo $c['firstname'] . ', ' . $c['lastname']; ?> </td>
44
+ <td><?php echo $c['label']; ?></td>
45
+ <td>
46
+ <?php
47
+ if ($c['chat'])
48
+ esc_html_e('active', 'wp-whatsapp-chat');
49
+ else
50
+ esc_html_e('inactive', 'wp-whatsapp-chat');
51
+ ?>
52
+ </td>
53
+ <td><?php echo wp_trim_words(substr($c['message'], 0, 36), 3); ?></td>
54
+ <td><?php echo $c['timefrom']; ?> to <?php echo $c['timeto']; ?></td>
55
+ <td><?php echo $c['timezone']; ?></td>
56
+ <td>
57
+ <a class="qlwapp_settings_edit button" aria-label="<?php esc_html_e('Edit checkout field', 'wp-whatsapp-chat'); ?>" href="javascript:;"><?php esc_html_e('Edit'); ?></a>
58
+ <a class="qlwapp_settings_delete" aria-label="<?php esc_html_e('Edit checkout field', 'wp-whatsapp-chat'); ?>" href="javascript:;"><?php esc_html_e('Delete'); ?></a>
59
+
60
+ </td>
61
+ </tr>
62
+ <?php
63
+ }
64
+ ?>
65
+ </tbody>
66
+ <?php endif; ?>
67
+ </table>
68
+ <?php wp_nonce_field('qlwapp_delete_contact', 'qlwapp_delete_contact_nonce'); ?>
69
+ </form>
70
+ <script type="text/html" id='tmpl-qlwapp-modal-window'>
71
+ <?php include_once('modals/contact-modal.php'); ?>
72
+ </script>
73
+ </div>
includes/view/backend/pages/display.php ADDED
@@ -0,0 +1,133 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div class="wrap about-wrap full-width-layout qlwrap">
2
+ <form method="post" id="qlwapp_display_form">
3
+ <table class="form-table">
4
+ <tbody>
5
+ <tr>
6
+ <th scope="row"><?php esc_html_e('Devices', 'wp-whatsapp-chat'); ?></th>
7
+ <td>
8
+ <select name="devices" style="width:350px" data-placeholder="<?php echo esc_attr('Choose target&hellip;', 'wp-whatsapp-chat'); ?>" aria-label="<?php echo esc_attr('Posts', 'wp-whatsapp-chat'); ?>" class="qlwapp-select2">
9
+ <option value="all" <?php selected('all', $display['devices']); ?>><?php esc_html_e('Show in all devices', 'wp-whatsapp-chat'); ?></option>
10
+ <option value="mobile" <?php selected('mobile', $display['devices']); ?>><?php esc_html_e('Show in mobile devices', 'wp-whatsapp-chat'); ?></option>
11
+ <option value="desktop" <?php selected('desktop', $display['devices']); ?>><?php esc_html_e('Show in desktop devices', 'wp-whatsapp-chat'); ?></option>
12
+ <option value="hide" <?php selected('hide', $display['devices']); ?>><?php esc_html_e('Hide in all devices', 'wp-whatsapp-chat'); ?></option>
13
+ </select>
14
+ </td>
15
+ </tr>
16
+ <tr>
17
+ <th scope="row"><?php esc_html_e('Target', 'wp-whatsapp-chat'); ?></th>
18
+ <td>
19
+ <select multiple="multiple" name="target[]" style="width:350px" data-placeholder="<?php echo esc_attr('Choose target&hellip;', 'wp-whatsapp-chat'); ?>" aria-label="<?php echo esc_attr('Posts', 'wp-whatsapp-chat'); ?>" class="qlwapp-select2">
20
+ <option value="none" <?php echo selected(true, in_array('none', (array) $display['target'])); ?>><?php echo esc_html__('Exclude from all', 'wp-whatsapp-chat'); ?></option>
21
+ <option value="home" <?php echo selected(true, in_array('home', (array) $display['target'])); ?>><?php echo esc_html__('Home', 'wp-whatsapp-chat'); ?></option>
22
+ <option value="blog" <?php echo selected(true, in_array('blog', (array) $display['target'])); ?>><?php echo esc_html__('Blog', 'wp-whatsapp-chat'); ?></option>
23
+ <option value="search" <?php echo selected(true, in_array('search', (array) $display['target'])); ?>><?php echo esc_html__('Search', 'wp-whatsapp-chat'); ?></option>
24
+ <option value="error" <?php echo selected(true, in_array('error', (array) $display['target'])); ?>><?php echo esc_html('404'); ?></option>
25
+ </select>
26
+ <p class="description hidden"><?php esc_html_e('If you select an option all the other will be excluded', 'wp-whatsapp-chat'); ?></p>
27
+ </td>
28
+ </tr>
29
+ <?php
30
+ foreach (get_post_types(array('public' => true, 'show_in_nav_menus' => true), 'objects') as $type) {
31
+ if (!isset($display[$type->name])) {
32
+ $display[$type->name] = array();
33
+ }
34
+
35
+ if ($count = wp_count_posts($type->name)) {
36
+ ?>
37
+ <tr class="qlwapp-premium-field">
38
+ <th scope="row"><?php esc_html_e(ucwords($type->label)); ?></th>
39
+ <td>
40
+ <!-- <select style="width:80px" class="qlwapp-select2">
41
+ <option value="include">Include</option>
42
+ <option value="include">Exclude</option>
43
+ </select>-->
44
+ <select id="qlwapp_select2_<?php echo esc_attr($type->name); ?>" multiple="multiple" name="<?php echo esc_attr($type->name . '[]'); ?>" style="width:350px" data-placeholder="<?php printf(esc_html__('Select for %s&hellip;', 'wp-whatsapp-chat'), $type->label); ?>" aria-label="<?php echo esc_attr($type->label); ?>" data-name="<?php echo esc_attr($type->name); ?>" class="qlwapp-select2-ajax">
45
+ <option value="none" <?php echo selected(true, in_array('none', (array) $display[$type->name])); ?>><?php echo esc_html__('Exclude from all', 'wp-whatsapp-chat'); ?></option>
46
+ <!--<option value="archive" <?php echo selected(true, in_array('archive', (array) $display[$type->name])); ?>><?php echo esc_html__('Archive', 'wp-whatsapp-chat'); ?></option>-->
47
+ <?php
48
+ // Print selected posts
49
+ // -------------------------------------------------------------
50
+ if (isset($display[$type->name]) && count($display[$type->name])) {
51
+ foreach ($display[$type->name] as $post_id) {
52
+
53
+ if (!$post = get_post($post_id)) {
54
+ //backward compatibility for $post->post_name
55
+ $post = get_page_by_path($post_id);
56
+ }
57
+
58
+ if (isset($post->ID)) {
59
+ ?>
60
+ <option value="<?php echo esc_attr($post->ID); ?>" selected="selected"><?php echo esc_html(mb_substr($post->post_title, 0, 49)); ?></option>
61
+ <?php
62
+ }
63
+ }
64
+ }
65
+ // Print firsts 10 posts
66
+ // -------------------------------------------------------------
67
+ /* if ($count->publish < 11) {
68
+ $posts = get_posts(array(
69
+ 'post_type' => $type->name,
70
+ 'post_status' => 'publish',
71
+ 'numberposts' => 10
72
+ ));
73
+ foreach ($posts as $post) {
74
+ ?>
75
+ <option value="<?php echo esc_attr($post->post_name); ?>" <?php echo selected(true, in_array($post->post_name, (array) $display[$type->name])); ?>><?php echo esc_html($post->post_title); ?></option>
76
+ <?php
77
+ }
78
+ } */
79
+ ?>
80
+ </select>
81
+ <p class="description hidden"><small><?php esc_html_e('This is a premium feature', 'wp-whatsapp-chat'); ?></small></p>
82
+ </td>
83
+ </tr>
84
+ <?php
85
+ }
86
+ }
87
+ ?>
88
+ <?php
89
+ foreach ($taxonomies = get_taxonomies(array('public' => true), 'objects') as $taxonomy) {
90
+
91
+ if (!isset($display[$taxonomy->name])) {
92
+ $display[$taxonomy->name] = array();
93
+ }
94
+
95
+ $terms = get_terms(array(
96
+ 'taxonomy' => $taxonomy->name,
97
+ 'hide_empty' => false,
98
+ ));
99
+
100
+ if (count($terms)) {
101
+ ?>
102
+ <tr>
103
+ <th scope="row"><?php esc_html_e(ucwords($taxonomy->label)); ?></th>
104
+ <td>
105
+ <select multiple="multiple" name="<?php echo esc_attr($taxonomy->name . '[]'); ?>" style="width:350px" data-placeholder="<?php echo esc_attr('Choose target&hellip;', 'wp-whatsapp-chat'); ?>" aria-label="<?php echo esc_attr($taxonomy->label); ?>" class="qlwapp-select2">
106
+ <option value="none" <?php echo selected(true, in_array('none', (array) $display[$taxonomy->name])); ?>><?php echo esc_html__('Exclude from all', 'wp-whatsapp-chat'); ?></option>
107
+ <?php
108
+ foreach ($terms as $term) {
109
+ //backward compatibility for $term->name
110
+ ?>
111
+ <option value="<?php echo esc_attr($term->term_id); ?>" <?php echo selected(true, in_array($term->term_id, (array) $display[$taxonomy->name]) || in_array($term->name, (array) $display[$taxonomy->name])); ?>><?php echo esc_html($term->name); ?></option>
112
+ <?php
113
+ }
114
+ ?>
115
+ </select>
116
+ </td>
117
+ </tr>
118
+ <?php
119
+ }
120
+ }
121
+ ?>
122
+ </tbody>
123
+ </table>
124
+ <?php wp_nonce_field('qlwapp_save_display', 'qlwapp_display_form_nonce'); ?>
125
+ <p class="submit">
126
+ <?php submit_button(esc_html__('Save', 'wp-whatsapp-chat'), 'primary', 'submit', false); ?>
127
+ <span class="settings-save-status">
128
+ <span class="saved"><?php esc_html_e('Saved successfully!'); ?></span>
129
+ <span class="spinner"></span>
130
+ </span>
131
+ </p>
132
+ </form>
133
+ </div>
includes/view/backend/pages/modals/contact-modal.php ADDED
@@ -0,0 +1,126 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div class="media-modal-backdrop">&nbsp;</div>
2
+ <div tabindex="0" id="<?php echo esc_attr(QLWAPP_DOMAIN . '_modal'); ?>" class="media-modal wp-core-ui upload-php qlwapp-modal-contact" role="dialog" aria-modal="true" aria-labelledby="media-frame-title">
3
+ <div class="media-modal-content" role="document">
4
+ <form class="media-modal-form" method="POST" data-contact_id="{{data.id}}">
5
+ <# if ( data.id != undefined ) { #>
6
+ <input type="hidden" name="id" value="{{data.id}}" />
7
+ <input type="hidden" name="order" value="{{data.order}}" />
8
+ <# } #>
9
+ <div class="edit-attachment-frame mode-select hide-menu hide-router">
10
+ <div class="edit-media-header ">
11
+ <# if (data.id != undefined ) { #>
12
+ <button type="button" class="media-modal-prev left dashicons <# if ( data.order == 1 ) { #>disabled<# } #>"><span class="screen-reader-text"><?php esc_html_e('Edit previous media item'); ?></span></button>
13
+ <button type="button" class="media-modal-next right dashicons <# if ( data.order == <?php echo esc_attr(count($contacts)); ?> ) { #>disabled<# } #>"><span class="screen-reader-text"><?php esc_html_e('Edit next media item'); ?></span></button>
14
+ <# } #>
15
+ <button type="button" class="media-modal-close"><span class="media-modal-icon"><span class="screen-reader-text"><?php esc_html_e('Close dialog'); ?></span></span></button>
16
+ </div>
17
+ <div class="media-frame-title">
18
+ <h1><?php esc_html_e('Edit contact', 'wp-whatsapp-chat'); ?> #<# if ( data.id != undefined ) { #>{{data.id}}<# } else { #><?php echo esc_html_e('new', 'wp-whatsapp-chat'); ?><# } #></h1>
19
+ </div>
20
+ <div class="media-frame-content" style="bottom:61px;">
21
+ <div class="attachment-details">
22
+ <div class="attachment-media-view landscape" style="overflow: hidden;">
23
+ <table class="widefat">
24
+ <tr>
25
+ <th><?php esc_html_e('Firstname', 'wp-whatsapp-chat'); ?></th>
26
+ <td><input type="text" id="cfirstname" name="firstname" placeholder="<?php echo esc_html($contact_args['firstname']); ?>" value="{{data.firstname}}" /></td>
27
+ <th><?php esc_html_e('Lastname', 'wp-whatsapp-chat'); ?></th>
28
+ <td><input type="text" id="clastname" name="lastname" placeholder="<?php echo esc_html($contact_args['lastname']); ?>" value="{{data.lastname}}" /></td>
29
+ </tr>
30
+ <tr>
31
+ <th><?php esc_html_e('Phone', 'wp-whatsapp-chat'); ?></td><td><input type="text" id="cphone" name="phone" placeholder="<?php echo esc_html($contact_args['phone']); ?>" value="{{data.phone}}" required="required" pattern="\d[0-9]{6,15}$"/></th>
32
+ <td><?php esc_html_e('Label', 'wp-whatsapp-chat'); ?></td><td><input type="text" id="clabel" name="label" placeholder="<?php echo esc_html($contact_args['label']); ?>" value="{{data.label}}" /></td>
33
+ </tr>
34
+ </table>
35
+ <table class="widefat">
36
+ <tr>
37
+ <th><?php esc_html_e('From', 'wp-whatsapp-chat'); ?></th>
38
+ <td class="qlwapp-premium-field">
39
+ <input type="time" name="timefrom" placeholder="<?php echo esc_html($contact_args['timefrom']); ?>" value="{{data.timefrom}}" />
40
+ <?php esc_html_e('To', 'wp-whatsapp-chat'); ?>
41
+ <input type="time" name="timeto" placeholder="<?php echo esc_html($contact_args['timeto']); ?>" value="{{data.timeto}}" />
42
+ </td>
43
+ <!-- <td><?php esc_html_e('Time is over', 'wp-whatsapp-chat'); ?></td>
44
+ <td class="qlwapp-premium-field">
45
+ <select id="ctimeout" name="<?php echo esc_attr(QLWAPP_DOMAIN . '[contacts][' . $id . '][timeout]'); ?>">
46
+ <option value="readonly" ><?php esc_html_e('Show the field as read only', 'wp-whatsapp-chat'); ?></option>
47
+ <option value="disabled" > <?php esc_html_e('Do not show the field', 'wp-whatsapp-chat'); ?></option>
48
+ </select>
49
+ <p class="description hidden"><small><?php esc_html_e('This is a premium feature', 'wp-whatsapp-chat'); ?></small></p>
50
+ </td> -->
51
+ <th><?php esc_html_e('Timezone', 'wp-whatsapp-chat'); ?></th>
52
+ <td class="qlwapp-premium-field">
53
+ <select name="timezone" aria-describedby="timezone-description">
54
+ <?php echo preg_replace('/(.*)value="([^"]*)"(.*)/', '$1value="$2"<# if ( data.timezone == "$2" ) { #> selected="selected"<# } #> $3', wp_timezone_choice('__return_null')); ?>
55
+ </select>
56
+ </td>
57
+ </tr>
58
+ </table>
59
+ <table class="widefat">
60
+ <tr>
61
+ <th><?php esc_html_e('Chat', 'wp-whatsapp-chat'); ?></th>
62
+ <td class="qlwapp-premium-field">
63
+ <p>
64
+ <label><input type="radio" class="media-modal-change" name="chat" value="1" <# if(data.chat) {#> checked <#}#> /><?php esc_html_e('Enabled', 'wp-whatsapp-chat'); ?></label>
65
+ <label><input type="radio" class="media-modal-change" name="chat" value="0" <# if(data.chat == false) {#> checked <#}#> /><?php esc_html_e('Disabled', 'wp-whatsapp-chat'); ?></label>
66
+ </p>
67
+ <p class="description hidden"><small><?php esc_html_e('This is a premium feature', 'wp-whatsapp-chat'); ?></small></p>
68
+ </td>
69
+ </tr>
70
+ <tr class="qlwapp-premium-field">
71
+ <th><?php esc_html_e('Message', 'wp-whatsapp-chat'); ?></th>
72
+ <td colspan="2">
73
+ <textarea style="width:100%" name="message" <# if(data.chat == false) { #>readonly="readonly"<# } #>>{{ _.escapeHtml(data.message)}}</textarea>
74
+ </td>
75
+ <p class="description hidden"><small><?php esc_html_e('This is a premium feature', 'wp-whatsapp-chat'); ?></small></p>
76
+ </tr>
77
+ </table>
78
+ </div>
79
+
80
+ <div class="attachment-info">
81
+
82
+ <span class="settings-save-status">
83
+ <span class="spinner"></span>
84
+ <span class="saved"><?php esc_html_e('Saved.'); ?></span>
85
+ </span>
86
+
87
+ <div class="details">
88
+ <div class="filename"><strong><?php esc_html_e('Contact id', 'wp-whatsapp-chat'); ?>:</strong> {{data.id}}</div>
89
+ </div>
90
+
91
+ <div class="settings">
92
+ <div class="upload">
93
+ <img id="cavatar-img" class="qlwapp-avatar" data-src="{{data.avatar}}" src="{{data.avatar}}" width="150" height="150"/>
94
+ <div>
95
+ <input type="hidden" name="avatar" id="cavatar" value="{{data.avatar}}" />
96
+ <button type="button" class="upload_image_button button"><?php esc_html_e('Upload', 'wp-whatsapp-chat'); ?></button>
97
+ <button type="button" class="remove_image_button button">&times;</button>
98
+ </div>
99
+ </div>
100
+ </div>
101
+
102
+ <div class="actions">
103
+ <a target="_blank" href="<?php echo QLWAPP_PURCHASE_URL; ?>"><?php esc_html_e('Premium', 'wp-whatsapp-chat'); ?></a> |
104
+ <a target="_blank" href="<?php echo QLWAPP_DOCUMENTATION_URL; ?>"><?php esc_html_e('Documentation', 'wp-whatsapp-chat'); ?></a>
105
+ </div>
106
+
107
+ </div>
108
+ </div>
109
+ </div>
110
+ <div class="media-frame-toolbar" style="left:0;">
111
+ <div class="media-toolbar">
112
+ <div class="media-toolbar-secondary"></div>
113
+ <div class="media-toolbar-primary search-form">
114
+ <button type="submit" class="media-modal-submit button button-primary media-button button-large" disabled="disabled"><?php esc_html_e('Save'); ?></button>
115
+ <button type="button" class="media-modal-close button button-secondary media-button button-large" style="
116
+ float: none;
117
+ position: inherit;
118
+ padding: inherit;
119
+ "><?php esc_html_e('Close'); ?></button>
120
+ </div>
121
+ </div>
122
+ </div>
123
+ </div>
124
+ </form>
125
+ </div>
126
+ </div>
includes/view/backend/pages/modals/icons-modal.php ADDED
@@ -0,0 +1,60 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <script type="text/html" id='tmpl-qlwapp-modal-backdrop'>
2
+ <div class="media-modal-backdrop">&nbsp;</div>
3
+ </script>
4
+ <script type="text/html" id='tmpl-qlwapp-modal-window'>
5
+ <div id="qlwapp_modal" class="media-modal wp-core-ui">
6
+ <button type="button" class="media-modal-close close">
7
+ <span class="media-modal-icon">
8
+ <span class="screen-reader-text"><?php esc_html_e('Close media panel'); ?></span>
9
+ </span>
10
+ </button>
11
+ <div class="media-frame mode-select wp-core-ui hide-menu">
12
+ <div class="media-frame-title">
13
+ <h1><?php echo esc_html(QLWAPP_PLUGIN_NAME); ?><span class="dashicons dashicons-arrow-down"></span></h1>
14
+ </div>
15
+ <div class="media-frame-router">
16
+ <div class="media-router">
17
+ <a href="#" class="media-menu-item active"><?php esc_html_e('Select icon', 'wp-whatsapp-chat'); ?></a>
18
+ </div>
19
+ </div>
20
+ <div class="media-modal-content">
21
+ <div class="media-frame mode-select wp-core-ui">
22
+ <div class="media-frame-menu">
23
+ <div class="media-menu">
24
+ <a href="#" class="media-menu-item active"><?php esc_html_e('Featured Image'); ?></a>
25
+ </div>
26
+ </div>
27
+ <div class="media-frame-content" data-columns="10">
28
+ <div class="attachments-browser">
29
+ <input type="hidden" id="qlwapp_icon" value="{{ data.icon }}">
30
+ <ul tabindex="-1" class="attachments">
31
+ <?php foreach (explode(',', 'qlwf-chat,qlwf-chat1,qlwf-chat2,qlwf-comments,qlwf-chat3,qlwf-bubble1,qlwf-chat-alt-fill,qlwf-chat-alt-stroke,qlwf-comment-alt2-fill,qlwf-comment-alt2-stroke,qlwf-comment-fill,qlwf-comment-stroke,qlwf-comment,qlwf-comment-alt1-stroke,qlwf-chat4,qlwf-comments1,qlwf-chat5,qlwf-comment1,qlwf-bubble,qlwf-bubbles,qlwf-bubbles2,qlwf-bubble2,qlwf-bubbles3,qlwf-bubbles4,qlwf-whatsapp,qlwf-chat6,qlwf-mode_comment,qlwf-insert_comment,qlwf-chat_bubble_outline,qlwf-chat_bubble,qlwf-bubble_chart,qlwf-comment2,qlwf-chat7,qlwf-commenting-o,qlwf-commenting,qlwf-comments-o,qlwf-comment-o,qlwf-wechat,qlwf-comments2,qlwf-comment3,qlwf-chat8,qlwf-chat-bubble-dots,qlwf-bubbles1,qlwf-bubble3') as $id => $icon) : ?>
32
+ <li tabindex="0" role="checkbox" aria-label="<?php echo esc_attr($icon); ?>" aria-checked="false" data-id="<?php echo esc_attr($id); ?>" class="attachment save-ready icon _<?php echo esc_attr(str_replace(' ', '_', trim($icon))); ?>">
33
+ <div class="attachment-preview js--select-attachment type-image subtype-jpeg landscape">
34
+ <div class="thumbnail">
35
+ <i class="<?php echo esc_attr($icon); ?>"></i>
36
+ </div>
37
+ </div>
38
+ <button type="button" class="check" tabindex="-1">
39
+ <span class="media-modal-icon"></span>
40
+ <span class="screen-reader-text"><?php esc_html_e('Deselect'); ?></span>
41
+ </button>
42
+ </li>
43
+ <?php endforeach; ?>
44
+ </ul>
45
+ </div>
46
+ </div>
47
+ <div class="media-frame-toolbar">
48
+ <div class="media-toolbar">
49
+ <div class="media-toolbar-secondary"></div>
50
+ <div class="media-toolbar-primary search-form">
51
+ <button type="button" class="button media-button button-large button-primary media-button-select save"><?php esc_html_e('Save'); ?></button>
52
+ <button type="button" class="button media-button button-large button-secondary remove"><?php esc_html_e('Remove'); ?></button>
53
+ </div>
54
+ </div>
55
+ </div>
56
+ </div>
57
+ </div>
58
+ </div>
59
+ </div>
60
+ </script>
includes/view/backend/pages/parts/header.php ADDED
@@ -0,0 +1,51 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ global $submenu;
3
+ ?>
4
+ <div class="wrap about-wrap full-width-layout qlwrap">
5
+
6
+ <h1><?php echo esc_html(QLWAPP_PLUGIN_NAME); ?></h1>
7
+
8
+ <p class="about-text"><?php printf(esc_html__('Thanks for using %s! We will do our best to offer you the best and improved communication experience with your users.', 'wp-whatsapp-chat'), QLWAPP_PLUGIN_NAME); ?></p>
9
+
10
+ <p class="about-text">
11
+ <?php printf('<a href="%s" target="_blank">%s</a>', QLWAPP_DEMO_URL, esc_html__('Purchase', 'wp-whatsapp-chat')); ?></a> |
12
+ <?php printf('<a href="%s" target="_blank">%s</a>', QLWAPP_DEMO_URL, esc_html__('Demo', 'wp-whatsapp-chat')); ?></a> |
13
+ <?php printf('<a href="%s" target="_blank">%s</a>', QLWAPP_DEMO_URL, esc_html__('Documentation', 'wp-whatsapp-chat')); ?></a>
14
+ </p>
15
+
16
+ <?php printf('<a href="%s" target="_blank"><div style="
17
+ background: #006bff url(%s) no-repeat;
18
+ background-position: top center;
19
+ background-size: 130px 130px;
20
+ color: #fff;
21
+ font-size: 14px;
22
+ text-align: center;
23
+ font-weight: 600;
24
+ margin: 5px 0 0;
25
+ padding-top: 120px;
26
+ height: 40px;
27
+ display: inline-block;
28
+ width: 140px;
29
+ " class="wp-badge">%s</div></a>', 'https://quadlayers.com/?utm_source=qlwapp_admin', plugins_url('/assets/img/quadlayers.jpg', QLWAPP_PLUGIN_FILE), esc_html__('QuadLayers', 'wp-whatsapp-chat')); ?>
30
+
31
+ </div>
32
+ <?php
33
+ if (isset($submenu[QLWAPP_DOMAIN])) {
34
+ if (is_array($submenu[QLWAPP_DOMAIN])) {
35
+ ?>
36
+ <div class="wrap about-wrap full-width-layout qlwrap">
37
+ <h2 class="nav-tab-wrapper">
38
+ <?php
39
+ foreach ($submenu[QLWAPP_DOMAIN] as $tab) {
40
+ if (strpos($tab[2], '.php') !== false)
41
+ continue;
42
+ ?>
43
+ <a href="<?php echo admin_url('admin.php?page=' . esc_attr($tab[2])); ?>" class="nav-tab<?php echo (isset($_GET['page']) && $_GET['page'] == $tab[2]) ? ' nav-tab-active' : ''; ?>"><?php echo $tab[0]; ?></a>
44
+ <?php
45
+ }
46
+ ?>
47
+ </h2>
48
+ </div>
49
+ <?php
50
+ }
51
+ }
includes/view/backend/pages/premium.php ADDED
@@ -0,0 +1,73 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div class="wrap about-wrap full-width-layout qlwrap">
2
+ <div class="has-2-columns is-wider-left" style="max-width: 100%">
3
+ <div class="column">
4
+ <div class="welcome-header">
5
+ <h1><?php esc_html_e('Premium', 'wp-whatsapp-chat'); ?></h1>
6
+ <div class="about-description">
7
+ <?php printf(esc_html__('Unlock the power of our premium %s plugin which allows you to include unlimited agent accounts with their names and labels inside the box to provide direct contact to the different support areas of your site.', 'wp-whatsapp-chat'), QLWAPP_PLUGIN_NAME); ?>
8
+ </div>
9
+ <br/>
10
+ <a style="background-color: #006cff;color: #ffffff;text-decoration: none;padding: 10px 30px;border-radius: 30px;margin: 10px 0 0 0;display: inline-block;" target="_blank" href="<?php echo esc_url(QLWAPP_PURCHASE_URL); ?>"><?php esc_html_e('Purchase Now', 'wp-whatsapp-chat'); ?></a>
11
+ <a style="background-color: #ffffff;color: #626262;text-decoration: none;padding: 10px 30px;border-radius: 30px;margin: 10px 0 0 0;display: inline-block;" target="_blank" href="<?php echo esc_url(QLWAPP_SUPPORT_URL); ?>"><?php esc_html_e('Get Support', 'wp-whatsapp-chat'); ?></a>
12
+ </div>
13
+ <hr/>
14
+ <div class="feature-section">
15
+ <h3><?php esc_html_e('Multiple agents', 'wp-whatsapp-chat'); ?></h3>
16
+ <p>
17
+ <?php printf(esc_html__('%s allows you to include unlimited agent accounts with their names and labels inside the box to provide direct contact to the different support areas of your site.', 'wp-whatsapp-chat'), QLWAPP_PLUGIN_NAME); ?>
18
+ </p>
19
+ </div>
20
+ <div class="feature-section">
21
+ <h3><?php esc_html_e('Customize colors', 'wp-whatsapp-chat'); ?></h3>
22
+ <p>
23
+ <?php esc_html_e('Customize the colors to match your site theme through the WordPress live customizer interface.', 'wp-whatsapp-chat'); ?>
24
+ </p>
25
+ </div>
26
+ <div class="feature-section">
27
+ <h3><?php esc_html_e('Custom icons', 'wp-whatsapp-chat'); ?></h3>
28
+ <p>
29
+ <?php esc_html_e('Our plugin allows you to select between more than forty icons to include in your Whatsapp button.', 'wp-whatsapp-chat'); ?>
30
+ </p>
31
+ </div>
32
+ </div>
33
+ <div class="column">
34
+ <img src="<?php echo plugins_url('/assets/img/box1.png', QLWAPP_PLUGIN_FILE); ?>">
35
+ </div>
36
+ </div>
37
+ <br/>
38
+ <br/>
39
+ <div class="has-2-columns is-wider-right" style="max-width: 100%">
40
+ <div class="column">
41
+ <img src="<?php echo plugins_url('/assets/img/box2.png', QLWAPP_PLUGIN_FILE); ?>">
42
+ </div>
43
+ <div class="column">
44
+ <br/>
45
+ <div class="welcome-header">
46
+ <h1><?php esc_html_e('Chatbox interface', 'wp-whatsapp-chat'); ?></h1>
47
+ <div class="about-description">
48
+ <?php printf(esc_html__('%s for WordPress allows you to include a chatbox for each agent where your users can type their first message.', 'wp-whatsapp-chat'), QLWAPP_PLUGIN_NAME); ?>
49
+ <?php //esc_html_e('Take in mind that this chat dosent allow .', 'wp-whatsapp-chat'); ?>
50
+ </div>
51
+ </div>
52
+ <hr/>
53
+ <div class="feature-section">
54
+ <h3><?php esc_html_e('Custom agent message', 'wp-whatsapp-chat'); ?></h3>
55
+ <p>
56
+ <?php esc_html_e('Allow you to set a custom message for each agent that will be displayed on the chatbox.', 'wp-whatsapp-chat'); ?>
57
+ </p>
58
+ </div>
59
+ <div class="feature-section">
60
+ <h3><?php esc_html_e('Custom user message', 'wp-whatsapp-chat'); ?></h3>
61
+ <p>
62
+ <?php esc_html_e('You can choose the predefined user message that will be sent to the agent phone number.', 'wp-whatsapp-chat'); ?>
63
+ </p>
64
+ </div>
65
+ <div class="feature-section">
66
+ <h3><?php esc_html_e('Type user message', 'wp-whatsapp-chat'); ?></h3>
67
+ <p>
68
+ <?php esc_html_e('Allow your users to type their own messages before sending it to the agent phone number.', 'wp-whatsapp-chat'); ?>
69
+ </p>
70
+ </div>
71
+ </div>
72
+ </div
73
+ </div>
includes/view/backend/pages/scheme.php ADDED
@@ -0,0 +1,56 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div class="wrap about-wrap full-width-layout qlwrap">
2
+ <form method="post" id="qlwapp_scheme_form">
3
+ <table class="form-table">
4
+ <tbody>
5
+ <tr>
6
+ <th scope="row"><?php esc_html_e('Background', 'wp-whatsapp-chat'); ?></th>
7
+ <td>
8
+ <input class="qlwapp-color-field" type="text" name="brand" value="<?php echo esc_attr($scheme['brand']); ?>" />
9
+ </td>
10
+ </tr>
11
+ <tr>
12
+ <th scope="row"><?php esc_html_e('Color', 'wp-whatsapp-chat'); ?></th>
13
+ <td>
14
+ <input class="qlwapp-color-field" type="text" name="text" value="<?php echo esc_attr($scheme['text']); ?>" />
15
+ </td>
16
+ </tr>
17
+ <tr class="qlwapp-premium-field">
18
+ <th scope="row"><?php esc_html_e('Link', 'wp-whatsapp-chat'); ?></th>
19
+ <td>
20
+ <input class="qlwapp-color-field" type="link" name="link" value="<?php echo esc_attr($scheme['link']); ?>" />
21
+ <p class="description hidden"><small><?php esc_html_e('This is a premium feature', 'wp-whatsapp-chat'); ?></small></p>
22
+ </td>
23
+ </tr>
24
+ <tr class="qlwapp-premium-field">
25
+ <th scope="row"><?php esc_html_e('Message', 'wp-whatsapp-chat'); ?></th>
26
+ <td>
27
+ <input class="qlwapp-color-field" type="link" name="message" value="<?php echo esc_attr($scheme['message']); ?>" />
28
+ <p class="description hidden"><small><?php esc_html_e('This is a premium feature', 'wp-whatsapp-chat'); ?></small></p>
29
+ </td>
30
+ </tr>
31
+ <tr class="qlwapp-premium-field">
32
+ <th scope="row"><?php esc_html_e('Label', 'wp-whatsapp-chat'); ?></th>
33
+ <td>
34
+ <input class="qlwapp-color-field" type="link" name="label" value="<?php echo esc_attr($scheme['label']); ?>" />
35
+ <p class="description hidden"><small><?php esc_html_e('This is a premium feature', 'wp-whatsapp-chat'); ?></small></p>
36
+ </td>
37
+ </tr>
38
+ <tr class="qlwapp-premium-field">
39
+ <th scope="row"><?php esc_html_e('Name', 'wp-whatsapp-chat'); ?></th>
40
+ <td>
41
+ <input class="qlwapp-color-field" type="link" name="name" value="<?php echo esc_attr($scheme['name']); ?>" />
42
+ <p class="description hidden"><small><?php esc_html_e('This is a premium feature', 'wp-whatsapp-chat'); ?></small></p>
43
+ </td>
44
+ </tr>
45
+ </tbody>
46
+ </table>
47
+ <?php wp_nonce_field('qlwapp_save_scheme', 'qlwapp_scheme_form_nonce'); ?>
48
+ <p class="submit">
49
+ <?php submit_button(esc_html__('Save', 'wp-whatsapp-chat'), 'primary', 'submit', false); ?>
50
+ <span class="settings-save-status">
51
+ <span class="saved"><?php esc_html_e('Saved successfully!'); ?></span>
52
+ <span class="spinner" style="float: none"></span>
53
+ </span>
54
+ </p>
55
+ </form>
56
+ </div>
includes/{pages → view/backend/pages}/suggestions.php RENAMED
@@ -1,11 +1,7 @@
1
  <div class="wrap" style="
2
  position: relative;
3
  margin: 25px 40px 0 20px;
4
- max-width: 1200px;">
5
- <?php
6
- $wp_list_table = new QLWAPP_Suggestions_List_Table();
7
- $wp_list_table->prepare_items();
8
- ?>
9
  <form id="plugin-filter" method="post" class="importer-item">
10
  <?php $wp_list_table->display(); ?>
11
  </form>
1
  <div class="wrap" style="
2
  position: relative;
3
  margin: 25px 40px 0 20px;
4
+ max-width: 1200px;">
 
 
 
 
5
  <form id="plugin-filter" method="post" class="importer-item">
6
  <?php $wp_list_table->display(); ?>
7
  </form>
includes/view/backend/pages/welcome.php ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div class="wrap about-wrap full-width-layout qlwrap">
2
+ <div class="has-2-columns is-wider-left" style="max-width: 100%">
3
+ <div class="column">
4
+ <div class="qlwapp-welcome-header">
5
+ <h1><?php echo QLWAPP_PLUGIN_NAME; ?> <span style="font-size: 24px;color: #555;">v<?php echo QLWAPP_PLUGIN_VERSION; ?></span></h1>
6
+ <div class="about-text">
7
+ <?php esc_html_e('Hello we\'re QuadLayers! We\'ve recently acquired this plugin and this is the first update. We have worked very much and very hard to release it, and we will do our absolute best to support it and fix all the issues.', 'wp-whatsapp-chat'); ?>
8
+ </div>
9
+ </div>
10
+ <hr/>
11
+ <div class="feature-section" style="padding: 15px 0;">
12
+ <h3><?php esc_html_e('Community', 'wp-whatsapp-chat'); ?></h3>
13
+ <p>
14
+ <?php printf(esc_html__('If you want to get in touch with other %s users or be aware of our promotional discounts join our community now.', 'wp-whatsapp-chat'), QLWAPP_PLUGIN_NAME); ?>
15
+ </p>
16
+ <a style="background-color: #ffffff;color: #626262;text-decoration: none;padding: 10px 30px;border-radius: 30px;margin: 10px 0 0 0;display: inline-block;" target="_blank" href="<?php echo QLWAPP_GROUP_URL; ?>"><?php esc_html_e('Join us', 'wp-whatsapp-chat'); ?></a>
17
+ </div>
18
+ <div class="feature-section" style="padding: 15px 0;">
19
+ <h3><?php esc_html_e('Demo', 'wp-whatsapp-chat'); ?></h3>
20
+ <p>
21
+ <?php printf(esc_html__('Thank you for choosing our %s plugin for WordPress! Here you can see our demo and a description about the features we offer in the premium version.', 'wp-whatsapp-chat'), QLWAPP_PLUGIN_NAME); ?>
22
+ </p>
23
+ <a style="background-color: #006cff;color: #ffffff;text-decoration: none;padding: 10px 30px;border-radius: 30px;margin: 10px 0 0 0;display: inline-block;" target="_blank" href="<?php echo QLWAPP_DEMO_URL; ?>"><?php esc_html_e('View demo', 'wp-whatsapp-chat'); ?></a>
24
+ </div>
25
+ <div class="feature-section" style="padding: 15px 0;">
26
+ <h3><?php esc_html_e('Support', 'wp-whatsapp-chat'); ?></h3>
27
+ <p>
28
+ <?php printf(esc_html__('If you have any doubt or you find any issue don\'t hesitate to contact us through our ticket system or join our community to meet other %s users.', 'wp-whatsapp-chat'), QLWAPP_PLUGIN_NAME); ?>
29
+ </p>
30
+ <a style="background-color: #006cff;color: #ffffff;text-decoration: none;padding: 10px 30px;border-radius: 30px;margin: 10px 0 0 0;display: inline-block;" target="_blank" href="<?php echo QLWAPP_SUPPORT_URL; ?>"><?php esc_html_e('Submit ticket', 'wp-whatsapp-chat'); ?></a>
31
+ </div>
32
+ </div>
33
+ <div class="column">
34
+ <img src="<?php echo plugins_url('/assets/img/box1.png', QLWAPP_PLUGIN_FILE); ?>">
35
+ </div>
36
+ </div>
37
+ </div>
readme.txt CHANGED
@@ -4,7 +4,7 @@ Donate link: https://quadlayers.com/portfolio/wordpress-whatsapp-chat/
4
  Tags: whatsapp, whatsapp button, whatsapp chat, whatsapp support, contact, click to chat, directly message whatsapp, floating whatsapp, whatsapp business, messaging, help desk
5
  Requires at least: 4.6
6
  Tested up to: 5.2.2
7
- Stable tag: 4.4.9
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
4
  Tags: whatsapp, whatsapp button, whatsapp chat, whatsapp support, contact, click to chat, directly message whatsapp, floating whatsapp, whatsapp business, messaging, help desk
5
  Requires at least: 4.6
6
  Tested up to: 5.2.2
7
+ Stable tag: 4.5.0
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
template/box.php CHANGED
@@ -1,49 +1,49 @@
1
- <div id="qlwapp" class="qlwapp-free <?php printf("qlwapp-%s qlwapp-%s qlwapp-%s qlwapp-%s", esc_attr($qlwapp['button']['layout']), esc_attr($qlwapp['button']['position']), esc_attr($qlwapp['display']['devices']), esc_attr($qlwapp['button']['rounded'] === 'yes' ? 'rounded' : 'square')); ?>">
2
  <div class="qlwapp-container">
3
- <?php if ($qlwapp['box']['enable'] === 'yes'): ?>
4
- <div class="qlwapp-box">
5
- <?php if (!empty($qlwapp['box']['header'])): ?>
6
- <div class="qlwapp-header">
7
- <i class="qlwapp-close" data-action="close">&times;</i>
8
- <div class="qlwapp-description">
9
- <?php echo wpautop(wp_kses_post(wpautop($qlwapp['box']['header']))); ?>
10
- </div>
11
- </div>
12
- <?php endif; ?>
13
- <div class="qlwapp-body">
14
- <?php if (isset($qlwapp['contacts'][0])): ?>
15
- <a class="qlwapp-account" data-action="open" data-phone="<?php echo esc_attr($qlwapp['contacts'][0]['phone']); ?>" data-message="<?php echo esc_html($qlwapp['button']['message']); ?>" href="javascript:void(0);" target="_blank">
16
- <?php if (!empty($qlwapp['contacts'][0]['avatar'])): ?>
17
- <div class="qlwapp-avatar">
18
- <div class="qlwapp-avatar-container">
19
- <img alt="<?php printf("%s %s", esc_html($qlwapp['contacts'][0]['firstname']), esc_html($qlwapp['contacts'][0]['lastname'])); ?>" src="<?php echo esc_url($qlwapp['contacts'][0]['avatar']); ?>">
20
- </div>
21
  </div>
22
- <?php endif; ?>
23
- <div class="qlwapp-info">
24
- <span class="qlwapp-label"><?php echo esc_html($qlwapp['contacts'][0]['label']); ?></span>
25
- <span class="qlwapp-name"><?php printf("%s %s", esc_html($qlwapp['contacts'][0]['firstname']), esc_html($qlwapp['contacts'][0]['lastname'])); ?></span>
26
  </div>
27
- </a>
28
  <?php endif; ?>
29
- </div>
30
- <?php if (!empty($qlwapp['box']['footer'])): ?>
31
- <div class="qlwapp-footer">
32
- <?php echo wpautop(wp_kses_post($qlwapp['box']['footer'])); ?>
 
 
 
 
 
 
 
 
 
 
 
 
33
  </div>
34
- <?php endif; ?>
35
- </div>
 
 
 
 
36
  <?php endif; ?>
37
- <a class="qlwapp-toggle" data-action="<?php echo ($qlwapp['box']['enable'] === 'yes' ? 'box' : 'open'); ?>" data-phone="<?php echo esc_attr($qlwapp['button']['phone']); ?>" data-message="<?php echo esc_html($qlwapp['button']['message']); ?>" href="#" target="_blank">
38
- <?php if ($qlwapp['button']['icon']): ?>
39
- <i class="qlwapp-icon <?php echo esc_attr($qlwapp['button']['icon']); ?>"></i>
40
  <?php endif; ?>
41
  <i class="qlwapp-close" data-action="close">&times;</i>
42
- <?php if ($qlwapp['button']['text']): ?>
43
- <span class="qlwapp-text"><?php echo esc_html($qlwapp['button']['text']); ?></span>
44
  <?php endif; ?>
45
  </a>
46
- <!--<?php //if ($qlwapp['button']['developer'] === 'yes'): ?>
47
  <a class="qlwapp-developer" href="<?php echo esc_url(QLWAPP_DEMO_URL); ?>" target="_blank"><?php esc_html_e('Powered by QuadLayers'); ?></a>
48
  <?php //endif; ?>-->
49
  </div>
1
+ <div id="qlwapp" class="qlwapp-free <?php printf("qlwapp-%s qlwapp-%s qlwapp-%s qlwapp-%s", esc_attr($button['layout']), esc_attr($button['position']), esc_attr($display['devices']), esc_attr($button['rounded'] === 'yes' ? 'rounded' : 'square')); ?>">
2
  <div class="qlwapp-container">
3
+ <?php if ($box['enable'] === 'yes'): ?>
4
+ <div class="qlwapp-box">
5
+ <?php if (!empty($box['header'])): ?>
6
+ <div class="qlwapp-header">
7
+ <i class="qlwapp-close" data-action="close">&times;</i>
8
+ <div class="qlwapp-description">
9
+ <?php echo wpautop(wp_kses_post(wpautop($box['header']))); ?>
 
 
 
 
 
 
 
 
 
 
 
10
  </div>
 
 
 
 
11
  </div>
 
12
  <?php endif; ?>
13
+ <div class="qlwapp-body">
14
+ <?php if (isset($contacts[0])): ?>
15
+ <a class="qlwapp-account" data-action="open" data-phone="<?php echo esc_attr($contacts[0]['phone']); ?>" data-message="<?php echo esc_html($button['message']); ?>" href="javascript:void(0);" target="_blank">
16
+ <?php if (!empty($contacts[0]['avatar'])): ?>
17
+ <div class="qlwapp-avatar">
18
+ <div class="qlwapp-avatar-container">
19
+ <img alt="<?php printf("%s %s", esc_html($contacts[0]['firstname']), esc_html($contacts[0]['lastname'])); ?>" src="<?php echo esc_url($contacts[0]['avatar']); ?>">
20
+ </div>
21
+ </div>
22
+ <?php endif; ?>
23
+ <div class="qlwapp-info">
24
+ <span class="qlwapp-label"><?php echo esc_html($contacts[0]['label']); ?></span>
25
+ <span class="qlwapp-name"><?php printf("%s %s", esc_html($contacts[0]['firstname']), esc_html($contacts[0]['lastname'])); ?></span>
26
+ </div>
27
+ </a>
28
+ <?php endif; ?>
29
  </div>
30
+ <?php if (!empty($box['footer'])): ?>
31
+ <div class="qlwapp-footer">
32
+ <?php echo wpautop(wp_kses_post($box['footer'])); ?>
33
+ </div>
34
+ <?php endif; ?>
35
+ </div>
36
  <?php endif; ?>
37
+ <a class="qlwapp-toggle" data-action="<?php echo ($box['enable'] === 'yes' ? 'box' : 'open'); ?>" data-phone="<?php echo esc_attr($button['phone']); ?>" data-message="<?php echo esc_html($button['message']); ?>" href="#" target="_blank">
38
+ <?php if ($button['icon']): ?>
39
+ <i class="qlwapp-icon <?php echo esc_attr($button['icon']); ?>"></i>
40
  <?php endif; ?>
41
  <i class="qlwapp-close" data-action="close">&times;</i>
42
+ <?php if ($button['text']): ?>
43
+ <span class="qlwapp-text"><?php echo esc_html($button['text']); ?></span>
44
  <?php endif; ?>
45
  </a>
46
+ <!--<?php //if ($button['developer'] === 'yes'): ?>
47
  <a class="qlwapp-developer" href="<?php echo esc_url(QLWAPP_DEMO_URL); ?>" target="_blank"><?php esc_html_e('Powered by QuadLayers'); ?></a>
48
  <?php //endif; ?>-->
49
  </div>
wp-whatsapp-chat.php CHANGED
@@ -3,7 +3,7 @@
3
  * Plugin Name: WhatsApp Chat
4
  * Plugin URI: https://quadlayers.com/portfolio/wordpress-whatsapp-chat/
5
  * Description: WhatsApp Chat allows your visitors to contact you or your team through WhatsApp chat with a single click.
6
- * Version: 4.4.9
7
  * Author: QuadLayers
8
  * Author URI: https://quadlayers.com
9
  * License: GPL-2.0+
@@ -12,168 +12,178 @@
12
  * Domain Path: /languages
13
  */
14
  if (!defined('ABSPATH')) {
15
- die('-1');
16
  }
17
  if (!defined('QLWAPP_PLUGIN_NAME')) {
18
- define('QLWAPP_PLUGIN_NAME', 'WhatsApp Chat');
19
  }
20
  if (!defined('QLWAPP_PLUGIN_VERSION')) {
21
- define('QLWAPP_PLUGIN_VERSION', '4.4.9');
22
  }
23
  if (!defined('QLWAPP_PLUGIN_FILE')) {
24
- define('QLWAPP_PLUGIN_FILE', __FILE__);
25
  }
26
  if (!defined('QLWAPP_PLUGIN_DIR')) {
27
- define('QLWAPP_PLUGIN_DIR', __DIR__ . DIRECTORY_SEPARATOR);
28
  }
29
  if (!defined('QLWAPP_DOMAIN')) {
30
- define('QLWAPP_DOMAIN', 'qlwapp');
31
  }
32
  if (!defined('QLWAPP_WORDPRESS_URL')) {
33
- define('QLWAPP_WORDPRESS_URL', 'https://wordpress.org/plugins/wp-whatsapp-chat/');
34
  }
35
  if (!defined('QLWAPP_REVIEW_URL')) {
36
- define('QLWAPP_REVIEW_URL', 'https://wordpress.org/support/plugin/wp-whatsapp-chat/reviews/?filter=5#new-post');
37
  }
38
  if (!defined('QLWAPP_DEMO_URL')) {
39
- define('QLWAPP_DEMO_URL', 'https://quadlayers.com/portfolio/wordpress-whatsapp-chat/?utm_source=qlwapp_admin');
40
  }
41
  if (!defined('QLWAPP_PURCHASE_URL')) {
42
- define('QLWAPP_PURCHASE_URL', QLWAPP_DEMO_URL);
43
  }
44
  if (!defined('QLWAPP_SUPPORT_URL')) {
45
- define('QLWAPP_SUPPORT_URL', 'https://quadlayers.com/account/support/?utm_source=qlwapp_admin');
46
  }
47
  if (!defined('QLWAPP_DOCUMENTATION_URL')) {
48
  define('QLWAPP_DOCUMENTATION_URL', 'https://quadlayers.com/documentation/whatsapp-chat/?utm_source=qlwapp_admin');
49
  }
50
  if (!defined('QLWAPP_GROUP_URL')) {
51
- define('QLWAPP_GROUP_URL', 'https://www.facebook.com/groups/quadlayers');
52
  }
53
 
54
  if (!class_exists('QLWAPP')) {
55
 
56
- class QLWAPP {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
57
 
58
- protected static $instance;
59
-
60
- function ajax_dismiss_notice() {
61
-
62
- if (check_admin_referer('qlwapp_dismiss_notice', 'nonce') && isset($_REQUEST['notice_id'])) {
63
-
64
- $notice_id = sanitize_key($_REQUEST['notice_id']);
65
-
66
- update_user_meta(get_current_user_id(), $notice_id, true);
67
-
68
- wp_send_json($notice_id);
69
- }
70
-
71
- wp_die();
72
- }
73
-
74
- function add_notices() {
75
-
76
- if (!get_transient('qlwapp-first-rating') && !get_user_meta(get_current_user_id(), 'qlwapp-user-rating', true)) {
77
- ?>
78
- <div id="qlwapp-admin-rating" class="qlwapp-notice notice is-dismissible" data-notice_id="qlwapp-user-rating">
79
- <div class="notice-container" style="padding-top: 10px; padding-bottom: 10px; display: flex; justify-content: left; align-items: center;">
80
- <div class="notice-image">
81
- <img style="border-radius:50%;max-width: 90px;" src="<?php echo plugins_url('/assets/img/logo.jpg', QLWAPP_PLUGIN_FILE); ?>" alt="<?php echo esc_html(QLWAPP_PLUGIN_NAME); ?>>">
82
- </div>
83
- <div class="notice-content" style="margin-left: 15px;">
84
- <p>
85
- <?php printf(esc_html__('Hello! Thank you for choosing the %s plugin!', 'wp-whatsapp-chat'), QLWAPP_PLUGIN_NAME); ?>
86
- <br/>
87
- <?php esc_html_e('Could you please give it a 5-star rating on WordPress? We know its a big favor, but we\'ve worked very much and very hard to release this great product. Your feedback will boost our motivation and help us promote and continue to improve this product.', 'wp-whatsapp-chat'); ?>
88
- </p>
89
- <a href="<?php echo esc_url(QLWAPP_REVIEW_URL); ?>" class="button-primary" target="_blank">
90
- <?php esc_html_e('Yes, of course!', 'wp-whatsapp-chat'); ?>
91
- </a>
92
- <a href="<?php echo esc_url(QLWAPP_SUPPORT_URL); ?>" class="button-secondary" target="_blank">
93
- <?php esc_html_e('Report a bug', 'wp-whatsapp-chat'); ?>
94
- </a>
95
- </div>
96
- </div>
97
- </div>
98
- <script>
99
- (function ($) {
100
- $('.qlwapp-notice').on('click', '.notice-dismiss', function (e) {
101
- e.preventDefault();
102
- var notice_id = $(e.delegateTarget).data('notice_id');
103
- $.ajax({
104
- type: 'POST',
105
- url: ajaxurl,
106
- data: {
107
- notice_id: notice_id,
108
- action: 'qlwapp_dismiss_notice',
109
- nonce: '<?php echo wp_create_nonce('qlwapp_dismiss_notice'); ?>'
110
- },
111
- success: function (response) {
112
- console.log(response);
113
- },
114
- });
115
- });
116
- })(jQuery);
117
- </script>
118
- <?php
119
- }
120
- }
121
-
122
- function includes() {
123
- include_once('includes/defaults.php');
124
- include_once('includes/frontend.php');
125
- include_once('includes/settings.php');
126
- }
127
-
128
- public static function is_min() {
129
- if (!defined('SCRIPT_DEBUG') || !SCRIPT_DEBUG) {
130
- return '.min';
131
- }
132
  }
133
 
134
- function languages() {
135
- load_plugin_textdomain('wp-whatsapp-chat', false, dirname(plugin_basename(__FILE__)) . '/languages/');
136
- }
137
-
138
- function add_premium_js() {
139
- if (!class_exists('QLWAPP_PRO')) {
140
- ?>
141
- <style>
142
- .qlwapp-premium-field {
143
- opacity: 0.5;
144
- pointer-events: none;
145
- }
146
- .qlwapp-premium-field .description {
147
- display: block!important;
148
- }
149
- </style>
150
- <?php
151
- }
152
- }
153
-
154
- function init() {
155
- add_action('admin_footer', array($this, 'add_premium_js'));
156
- add_action('admin_notices', array($this, 'add_notices'));
157
- add_action('wp_ajax_qlwapp_dismiss_notice', array($this, 'ajax_dismiss_notice'));
158
- }
159
-
160
- public static function do_activation() {
161
- set_transient('qlwapp-first-rating', true, MONTH_IN_SECONDS);
162
- }
163
-
164
- public static function instance() {
165
- if (!isset(self::$instance)) {
166
- self::$instance = new self();
167
- self::$instance->languages();
168
- self::$instance->includes();
169
- self::$instance->init();
170
- }
171
- return self::$instance;
172
- }
173
-
174
- }
175
-
176
- add_action('plugins_loaded', array('QLWAPP', 'instance'));
177
 
178
- register_activation_hook(QLWAPP_PLUGIN_FILE, array('QLWAPP', 'do_activation'));
179
  }
3
  * Plugin Name: WhatsApp Chat
4
  * Plugin URI: https://quadlayers.com/portfolio/wordpress-whatsapp-chat/
5
  * Description: WhatsApp Chat allows your visitors to contact you or your team through WhatsApp chat with a single click.
6
+ * Version: 4.5.0
7
  * Author: QuadLayers
8
  * Author URI: https://quadlayers.com
9
  * License: GPL-2.0+
12
  * Domain Path: /languages
13
  */
14
  if (!defined('ABSPATH')) {
15
+ die('-1');
16
  }
17
  if (!defined('QLWAPP_PLUGIN_NAME')) {
18
+ define('QLWAPP_PLUGIN_NAME', 'WhatsApp Chat');
19
  }
20
  if (!defined('QLWAPP_PLUGIN_VERSION')) {
21
+ define('QLWAPP_PLUGIN_VERSION', '4.5.0');
22
  }
23
  if (!defined('QLWAPP_PLUGIN_FILE')) {
24
+ define('QLWAPP_PLUGIN_FILE', __FILE__);
25
  }
26
  if (!defined('QLWAPP_PLUGIN_DIR')) {
27
+ define('QLWAPP_PLUGIN_DIR', __DIR__ . DIRECTORY_SEPARATOR);
28
  }
29
  if (!defined('QLWAPP_DOMAIN')) {
30
+ define('QLWAPP_DOMAIN', 'qlwapp');
31
  }
32
  if (!defined('QLWAPP_WORDPRESS_URL')) {
33
+ define('QLWAPP_WORDPRESS_URL', 'https://wordpress.org/plugins/wp-whatsapp-chat/');
34
  }
35
  if (!defined('QLWAPP_REVIEW_URL')) {
36
+ define('QLWAPP_REVIEW_URL', 'https://wordpress.org/support/plugin/wp-whatsapp-chat/reviews/?filter=5#new-post');
37
  }
38
  if (!defined('QLWAPP_DEMO_URL')) {
39
+ define('QLWAPP_DEMO_URL', 'https://quadlayers.com/portfolio/wordpress-whatsapp-chat/?utm_source=qlwapp_admin');
40
  }
41
  if (!defined('QLWAPP_PURCHASE_URL')) {
42
+ define('QLWAPP_PURCHASE_URL', QLWAPP_DEMO_URL);
43
  }
44
  if (!defined('QLWAPP_SUPPORT_URL')) {
45
+ define('QLWAPP_SUPPORT_URL', 'https://quadlayers.com/account/support/?utm_source=qlwapp_admin');
46
  }
47
  if (!defined('QLWAPP_DOCUMENTATION_URL')) {
48
  define('QLWAPP_DOCUMENTATION_URL', 'https://quadlayers.com/documentation/whatsapp-chat/?utm_source=qlwapp_admin');
49
  }
50
  if (!defined('QLWAPP_GROUP_URL')) {
51
+ define('QLWAPP_GROUP_URL', 'https://www.facebook.com/groups/quadlayers');
52
  }
53
 
54
  if (!class_exists('QLWAPP')) {
55
 
56
+ class QLWAPP {
57
+
58
+ protected static $instance;
59
+
60
+ function ajax_dismiss_notice() {
61
+
62
+ if (check_admin_referer('qlwapp_dismiss_notice', 'nonce') && isset($_REQUEST['notice_id'])) {
63
+
64
+ $notice_id = sanitize_key($_REQUEST['notice_id']);
65
+
66
+ update_user_meta(get_current_user_id(), $notice_id, true);
67
+
68
+ wp_send_json($notice_id);
69
+ }
70
+
71
+ wp_die();
72
+ }
73
+
74
+ function add_notices() {
75
+
76
+ if (!get_transient('qlwapp-first-rating') && !get_user_meta(get_current_user_id(), 'qlwapp-user-rating', true)) {
77
+ ?>
78
+ <div id="qlwapp-admin-rating" class="qlwapp-notice notice is-dismissible" data-notice_id="qlwapp-user-rating">
79
+ <div class="notice-container" style="padding-top: 10px; padding-bottom: 10px; display: flex; justify-content: left; align-items: center;">
80
+ <div class="notice-image">
81
+ <img style="border-radius:50%;max-width: 90px;" src="<?php echo plugins_url('/assets/img/logo.jpg', QLWAPP_PLUGIN_FILE); ?>" alt="<?php echo esc_html(QLWAPP_PLUGIN_NAME); ?>>">
82
+ </div>
83
+ <div class="notice-content" style="margin-left: 15px;">
84
+ <p>
85
+ <?php printf(esc_html__('Hello! Thank you for choosing the %s plugin!', 'wp-whatsapp-chat'), QLWAPP_PLUGIN_NAME); ?>
86
+ <br/>
87
+ <?php esc_html_e('Could you please give it a 5-star rating on WordPress? We know its a big favor, but we\'ve worked very much and very hard to release this great product. Your feedback will boost our motivation and help us promote and continue to improve this product.', 'wp-whatsapp-chat'); ?>
88
+ </p>
89
+ <a href="<?php echo esc_url(QLWAPP_REVIEW_URL); ?>" class="button-primary" target="_blank">
90
+ <?php esc_html_e('Yes, of course!', 'wp-whatsapp-chat'); ?>
91
+ </a>
92
+ <a href="<?php echo esc_url(QLWAPP_SUPPORT_URL); ?>" class="button-secondary" target="_blank">
93
+ <?php esc_html_e('Report a bug', 'wp-whatsapp-chat'); ?>
94
+ </a>
95
+ </div>
96
+ </div>
97
+ </div>
98
+ <script>
99
+ (function ($) {
100
+ $('.qlwapp-notice').on('click', '.notice-dismiss', function (e) {
101
+ e.preventDefault();
102
+ var notice_id = $(e.delegateTarget).data('notice_id');
103
+ $.ajax({
104
+ type: 'POST',
105
+ url: ajaxurl,
106
+ data: {
107
+ notice_id: notice_id,
108
+ action: 'qlwapp_dismiss_notice',
109
+ nonce: '<?php echo wp_create_nonce('qlwapp_dismiss_notice'); ?>'
110
+ },
111
+ success: function (response) {
112
+ console.log(response);
113
+ },
114
+ });
115
+ });
116
+ })(jQuery);
117
+ </script>
118
+ <?php
119
+ }
120
+ }
121
+
122
+ function includes() {
123
+ include_once('includes/settings.php');
124
+ include_once('includes/frontend.php');
125
+ include_once('includes/backend.php');
126
+ }
127
+
128
+ public static function is_min() {
129
+ if (!defined('SCRIPT_DEBUG') || !SCRIPT_DEBUG) {
130
+ return '.min';
131
+ }
132
+ }
133
+
134
+ function languages() {
135
+ load_plugin_textdomain('wp-whatsapp-chat', false, dirname(plugin_basename(__FILE__)) . '/languages/');
136
+ }
137
+
138
+ function add_premium_js() {
139
+ if (!class_exists('QLWAPP_PRO')) {
140
+ ?>
141
+ <style>
142
+ .qlwapp-premium-field {
143
+ opacity: 0.5;
144
+ pointer-events: none;
145
+ }
146
+ .qlwapp-premium-field .description {
147
+ display: block!important;
148
+ }
149
+ </style>
150
+ <?php
151
+ }
152
+ }
153
+
154
+ function add_action_links($links) {
155
+
156
+ $links[] = '<a target="_blank" href="' . QLWAPP_PURCHASE_URL . '">' . esc_html__('Premium', 'wp-whatsapp-chat') . '</a>';
157
+
158
+ $links[] = '<a href="' . admin_url('admin.php?page=' . QLWAPP_DOMAIN) . '">' . esc_html__('Settings', 'wp-whatsapp-chat') . '</a>';
159
+
160
+ return $links;
161
+ }
162
+
163
+ function init() {
164
+ add_filter('plugin_action_links_' . plugin_basename(QLWAPP_PLUGIN_FILE), array($this, 'add_action_links'));
165
+ add_action('admin_footer', array($this, 'add_premium_js'));
166
+ add_action('admin_notices', array($this, 'add_notices'));
167
+ add_action('wp_ajax_qlwapp_dismiss_notice', array($this, 'ajax_dismiss_notice'));
168
+ }
169
+
170
+ public static function do_activation() {
171
+ set_transient('qlwapp-first-rating', true, MONTH_IN_SECONDS);
172
+ }
173
+
174
+ public static function instance() {
175
+ if (!isset(self::$instance)) {
176
+ self::$instance = new self();
177
+ self::$instance->languages();
178
+ self::$instance->includes();
179
+ self::$instance->init();
180
+ }
181
+ return self::$instance;
182
+ }
183
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
184
  }
185
 
186
+ add_action('plugins_loaded', array('QLWAPP', 'instance'));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
187
 
188
+ register_activation_hook(QLWAPP_PLUGIN_FILE, array('QLWAPP', 'do_activation'));
189
  }
wpml-config.xml CHANGED
@@ -4,10 +4,8 @@
4
  <key name="box">
5
  <key name="header"></key>
6
  <key name="footer"></key>
7
- </key>
8
- <key name="chat">
9
  <key name="response"></key>
10
- </key>
11
  <key name="button">
12
  <key name="text"></key>
13
  <key name="phone"></key>
4
  <key name="box">
5
  <key name="header"></key>
6
  <key name="footer"></key>
 
 
7
  <key name="response"></key>
8
+ </key>
9
  <key name="button">
10
  <key name="text"></key>
11
  <key name="phone"></key>