Version Description
Download this release
Release Info
Developer | thethemefoundry |
Plugin | Form builder to get in touch with visitors, grow your email list and collect payments — Happyforms |
Version | 1.3 |
Comparing to | |
See all releases |
Code changes from version 1.2.2 to 1.3
- assets/css/admin.css +25 -0
- assets/css/customize.css +69 -6
- assets/css/frontend.css +1008 -450
- inc/templates/preview-inline.css → assets/css/preview.css +28 -17
- assets/js/customize.js +498 -254
- assets/js/frontend.js +261 -114
- assets/js/frontend/address.js +33 -195
- assets/js/frontend/number.js +50 -0
- assets/js/frontend/phone.js +68 -0
- assets/js/frontend/scale.js +34 -56
- assets/js/parts/part-address.js +39 -34
- assets/js/parts/part-checkbox.js +137 -193
- assets/js/parts/part-date.js +75 -55
- assets/js/parts/part-email.js +36 -38
- assets/js/parts/part-legal.js +55 -47
- assets/js/parts/part-multi-line-text.js +17 -11
- assets/js/parts/part-number.js +112 -57
- assets/js/parts/part-phone.js +148 -121
- assets/js/parts/part-placeholder.js +19 -11
- assets/js/parts/part-radio.js +169 -201
- assets/js/parts/part-rating.js +26 -26
- assets/js/parts/part-scale.js +165 -134
- assets/js/parts/part-select.js +156 -175
- assets/js/parts/part-single-line-text.js +1 -1
- assets/js/parts/part-title.js +1 -1
- assets/js/parts/part-website-url.js +1 -1
- assets/js/preview.js +139 -404
- assets/js/tinymce/form-picker.js +0 -124
- happyforms.php +2 -2
- inc/classes/class-admin-notices.php +12 -8
- inc/classes/class-form-controller.php +305 -132
- inc/classes/class-form-part-library.php +36 -32
- inc/classes/class-form-part.php +2 -2
- inc/classes/class-form-styles.php +493 -717
- inc/classes/class-happyforms-plugin.php +124 -66
- inc/classes/class-message-controller.php +65 -24
- inc/classes/class-message-notices.php +3 -1
- inc/classes/class-wp-customize-form-manager.php +69 -41
- inc/classes/parts/class-part-address.php +133 -200
- inc/classes/parts/class-part-checkbox.php +30 -208
- inc/classes/parts/class-part-date.php +19 -195
- inc/classes/parts/class-part-email.php +35 -184
- inc/classes/parts/class-part-legal.php +17 -56
- inc/classes/parts/class-part-multi-line-text.php +10 -99
- inc/classes/parts/class-part-number.php +87 -232
- inc/classes/parts/class-part-phone.php +99 -215
- inc/classes/parts/class-part-placeholder.php +31 -93
- inc/classes/parts/class-part-radio.php +27 -216
- inc/classes/parts/class-part-rating.php +13 -106
- inc/classes/parts/class-part-scale.php +25 -178
- inc/classes/parts/class-part-select.php +18 -183
- inc/classes/parts/class-part-single-line-text.php +10 -99
- inc/classes/parts/class-part-title.php +21 -118
- inc/classes/parts/class-part-website-url.php +14 -101
- inc/helpers/helper-activation.php +1 -0
- inc/helpers/helper-form-templates.php +379 -74
- inc/helpers/helper-misc.php +29 -1
- inc/helpers/helper-styles.php +17 -0
- inc/templates/admin-form-modal.php +49 -0
- inc/templates/customize-form-build.php +1 -1
- inc/templates/customize-form-part-footer.php +1 -0
- inc/templates/customize-form-part-header.php +1 -1
- inc/templates/customize-form-setup.php +19 -0
- inc/templates/customize-form-style.php +28 -18
- inc/templates/form-styles.css.php +15 -0
- inc/templates/parts/customize-address.php +71 -0
- inc/templates/parts/customize-checkbox.php +81 -0
- inc/templates/parts/customize-date.php +67 -0
- inc/templates/parts/customize-email.php +67 -0
- inc/templates/parts/customize-legal.php +20 -0
- inc/templates/parts/customize-multi-line-text.php +58 -0
- inc/templates/parts/customize-number.php +96 -0
- inc/templates/parts/customize-phone.php +87 -0
- inc/templates/parts/customize-placeholder.php +42 -0
- inc/templates/parts/customize-radio.php +85 -0
- inc/templates/parts/customize-rating.php +52 -0
- inc/templates/parts/customize-scale.php +80 -0
- inc/templates/parts/customize-select.php +75 -0
- inc/templates/parts/customize-single-line-text.php +58 -0
- inc/templates/parts/customize-title.php +52 -0
- inc/templates/parts/customize-website-url.php +58 -0
- inc/templates/parts/frontend-address.php +48 -0
- inc/templates/parts/frontend-checkbox.php +21 -0
- inc/templates/parts/frontend-date.php +92 -0
- inc/templates/parts/frontend-email.php +40 -0
- inc/templates/parts/frontend-legal.php +10 -0
- inc/templates/parts/frontend-multi-line-text.php +18 -0
- inc/templates/parts/frontend-number.php +42 -0
- inc/templates/parts/frontend-phone.php +34 -0
- inc/templates/parts/frontend-placeholder.php +6 -0
- inc/templates/parts/frontend-radio.php +25 -0
- inc/templates/parts/frontend-rating.php +18 -0
- inc/templates/parts/frontend-scale.php +21 -0
- inc/templates/parts/frontend-select.php +19 -0
- inc/templates/parts/frontend-single-line-text.php +18 -0
- inc/templates/parts/frontend-title.php +15 -0
- inc/templates/parts/frontend-website-url.php +18 -0
- inc/templates/preview-form-edit.php +30 -71
- inc/templates/preview-form-new.php +0 -65
- inc/templates/{preview-form-part.php → preview-form-pencil.php} +1 -4
- inc/templates/{frontend-form.php → single-form.php} +5 -11
- readme.txt +19 -18
- trunk/assets/css/admin.css +246 -0
- trunk/assets/css/customize.css +856 -0
- trunk/assets/css/font-awesome.min.css +4 -0
- trunk/assets/css/frontend.css +1445 -0
- trunk/assets/css/preview.css +73 -0
- trunk/assets/fonts/FontAwesome.otf +0 -0
- trunk/assets/fonts/fontawesome-webfont.eot +0 -0
- trunk/assets/fonts/fontawesome-webfont.svg +2106 -0
assets/css/admin.css
CHANGED
@@ -218,4 +218,29 @@ p.welcome-panel-footer a:active {
|
|
218 |
top: 4px;
|
219 |
padding-right: 5px;
|
220 |
color: #888;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
221 |
}
|
218 |
top: 4px;
|
219 |
padding-right: 5px;
|
220 |
color: #888;
|
221 |
+
}
|
222 |
+
|
223 |
+
#happyforms-modal {
|
224 |
+
display: none;
|
225 |
+
}
|
226 |
+
|
227 |
+
.happyforms-dialog {
|
228 |
+
top: calc(50% - 150px) !important;
|
229 |
+
}
|
230 |
+
|
231 |
+
.happyforms-dialog .ui-dialog-title {
|
232 |
+
font-size: 14px;
|
233 |
+
}
|
234 |
+
|
235 |
+
.happyforms-dialog__select {
|
236 |
+
min-width: 290px;
|
237 |
+
}
|
238 |
+
|
239 |
+
.happyforms-dialog__button {
|
240 |
+
float: right;
|
241 |
+
margin-top: 18px !important;
|
242 |
+
}
|
243 |
+
|
244 |
+
#happyforms-notice-happyforms_form_saved_guide {
|
245 |
+
border-color: #46b450;
|
246 |
}
|
assets/css/customize.css
CHANGED
@@ -135,6 +135,16 @@ p.description a {
|
|
135 |
width: 100%;
|
136 |
}
|
137 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
138 |
.happyforms-help-pointer {
|
139 |
z-index: 999999 !important;
|
140 |
}
|
@@ -380,6 +390,10 @@ body.adding-happyforms-parts #customize-preview iframe {
|
|
380 |
text-align: right;
|
381 |
}
|
382 |
|
|
|
|
|
|
|
|
|
383 |
.happyforms-part-widget .options {
|
384 |
border: 1px solid #eee;
|
385 |
padding: 5px 10px 10px;
|
@@ -387,6 +401,11 @@ body.adding-happyforms-parts #customize-preview iframe {
|
|
387 |
|
388 |
.happyforms-part-widget .options h3 {
|
389 |
margin-bottom: 0;
|
|
|
|
|
|
|
|
|
|
|
390 |
}
|
391 |
|
392 |
.happyforms-part-widget .options li {
|
@@ -394,6 +413,15 @@ body.adding-happyforms-parts #customize-preview iframe {
|
|
394 |
border-bottom: 1px solid #eee;
|
395 |
}
|
396 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
397 |
.happyforms-part-widget .options li:last-child {
|
398 |
border-bottom: 0;
|
399 |
}
|
@@ -627,6 +655,7 @@ ul.happyforms-style-controls {
|
|
627 |
position: relative;
|
628 |
float: left;
|
629 |
width: 100%;
|
|
|
630 |
}
|
631 |
|
632 |
ul.happyforms-style-controls .customize-control {
|
@@ -638,7 +667,7 @@ ul.happyforms-style-controls .customize-control {
|
|
638 |
/* Style view */
|
639 |
.happyforms-stack-view.happyforms-style-view {
|
640 |
padding: 0;
|
641 |
-
overflow
|
642 |
top: 0;
|
643 |
bottom: 0;
|
644 |
}
|
@@ -646,6 +675,9 @@ ul.happyforms-style-controls .customize-control {
|
|
646 |
ul.happyforms-style-controls .customize-control.happyforms-divider-control {
|
647 |
margin-bottom: 0;
|
648 |
padding: 0;
|
|
|
|
|
|
|
649 |
}
|
650 |
|
651 |
ul.happyforms-style-controls .customize-control.happyforms-divider-control:first-child {
|
@@ -653,21 +685,48 @@ ul.happyforms-style-controls .customize-control.happyforms-divider-control:first
|
|
653 |
border-top: 1px solid #ddd;
|
654 |
}
|
655 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
656 |
.happyforms-style-controls-group {
|
657 |
position: absolute;
|
658 |
top: 0;
|
659 |
-
left:
|
|
|
|
|
|
|
660 |
width: 100%;
|
|
|
|
|
|
|
|
|
661 |
}
|
662 |
|
663 |
.happyforms-style-controls-group .accordion-section-title {
|
664 |
padding: 10px 10px 11px 14px;
|
665 |
}
|
666 |
|
667 |
-
.happyforms-style-controls-group.
|
668 |
-
|
669 |
-
|
670 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
671 |
}
|
672 |
|
673 |
.control-section h3.accordion-section-title {
|
@@ -782,6 +841,10 @@ li.customize-control .happyforms-buttonset-container .ui-state-active.ui-state-h
|
|
782 |
background-color: #fff;
|
783 |
}
|
784 |
|
|
|
|
|
|
|
|
|
785 |
.happyforms-parts-expand-collapse-wrap {
|
786 |
float: right;
|
787 |
font-weight: normal;
|
135 |
width: 100%;
|
136 |
}
|
137 |
|
138 |
+
.happyforms-customize-heading h2 {
|
139 |
+
border-top: 1px solid #dbdbdb;
|
140 |
+
padding-top: 20px;
|
141 |
+
}
|
142 |
+
|
143 |
+
.panel-meta + .happyforms-customize-heading h2 {
|
144 |
+
padding-top: 0;
|
145 |
+
border-top: 0;
|
146 |
+
}
|
147 |
+
|
148 |
.happyforms-help-pointer {
|
149 |
z-index: 999999 !important;
|
150 |
}
|
390 |
text-align: right;
|
391 |
}
|
392 |
|
393 |
+
.happyforms-part-widget .show-all-options {
|
394 |
+
float: left;
|
395 |
+
}
|
396 |
+
|
397 |
.happyforms-part-widget .options {
|
398 |
border: 1px solid #eee;
|
399 |
padding: 5px 10px 10px;
|
401 |
|
402 |
.happyforms-part-widget .options h3 {
|
403 |
margin-bottom: 0;
|
404 |
+
display: none;
|
405 |
+
}
|
406 |
+
|
407 |
+
.happyforms-part-widget .options p {
|
408 |
+
display: none;
|
409 |
}
|
410 |
|
411 |
.happyforms-part-widget .options li {
|
413 |
border-bottom: 1px solid #eee;
|
414 |
}
|
415 |
|
416 |
+
.happyforms-part-widget .options ul:empty {
|
417 |
+
display: none;
|
418 |
+
}
|
419 |
+
|
420 |
+
.happyforms-part-widget .options ul:empty ~ h3,
|
421 |
+
.happyforms-part-widget .options ul:empty ~ p {
|
422 |
+
display: block;
|
423 |
+
}
|
424 |
+
|
425 |
.happyforms-part-widget .options li:last-child {
|
426 |
border-bottom: 0;
|
427 |
}
|
655 |
position: relative;
|
656 |
float: left;
|
657 |
width: 100%;
|
658 |
+
height: 100%;
|
659 |
}
|
660 |
|
661 |
ul.happyforms-style-controls .customize-control {
|
667 |
/* Style view */
|
668 |
.happyforms-stack-view.happyforms-style-view {
|
669 |
padding: 0;
|
670 |
+
overflow: hidden;
|
671 |
top: 0;
|
672 |
bottom: 0;
|
673 |
}
|
675 |
ul.happyforms-style-controls .customize-control.happyforms-divider-control {
|
676 |
margin-bottom: 0;
|
677 |
padding: 0;
|
678 |
+
transform: translateX(0);
|
679 |
+
transition: .18s transform cubic-bezier(.645, .045, .355, 1),
|
680 |
+
.18s -webkit-transform cubic-bezier(.645, .045, .355, 1);
|
681 |
}
|
682 |
|
683 |
ul.happyforms-style-controls .customize-control.happyforms-divider-control:first-child {
|
685 |
border-top: 1px solid #ddd;
|
686 |
}
|
687 |
|
688 |
+
ul.happyforms-style-controls .customize-control.happyforms-divider-control.inactive {
|
689 |
+
transform: translateX(-100%);
|
690 |
+
}
|
691 |
+
|
692 |
+
ul.happyforms-style-controls .customize-control.happyforms-divider-control.active {
|
693 |
+
transform: translateX(0);
|
694 |
+
}
|
695 |
+
|
696 |
+
ul.happyforms-style-controls .customize-control.happyforms-divider-control h3 {
|
697 |
+
text-transform: capitalize;
|
698 |
+
}
|
699 |
+
|
700 |
.happyforms-style-controls-group {
|
701 |
position: absolute;
|
702 |
top: 0;
|
703 |
+
left: 0;
|
704 |
+
z-index: 9999;
|
705 |
+
height: 0;
|
706 |
+
overflow: hidden;
|
707 |
width: 100%;
|
708 |
+
background-color: #eee;
|
709 |
+
transform: translateX(100%);
|
710 |
+
transition: .18s transform cubic-bezier(.645, .045, .355, 1),
|
711 |
+
.18s -webkit-transform cubic-bezier(.645, .045, .355, 1)
|
712 |
}
|
713 |
|
714 |
.happyforms-style-controls-group .accordion-section-title {
|
715 |
padding: 10px 10px 11px 14px;
|
716 |
}
|
717 |
|
718 |
+
.happyforms-style-controls-group .accordion-section-title .panel-title {
|
719 |
+
text-transform: capitalize;
|
720 |
+
}
|
721 |
+
|
722 |
+
.happyforms-style-controls-group.open {
|
723 |
+
height: 100%;
|
724 |
+
overflow: auto;
|
725 |
+
transform: translateX(0);
|
726 |
+
}
|
727 |
+
|
728 |
+
.happyforms-style-controls-group.closing {
|
729 |
+
transform: translateX(100%);
|
730 |
}
|
731 |
|
732 |
.control-section h3.accordion-section-title {
|
841 |
background-color: #fff;
|
842 |
}
|
843 |
|
844 |
+
li.customize-control.happyforms-buttonset-control + .customize-control h2 {
|
845 |
+
margin-top: 1.8rem;
|
846 |
+
}
|
847 |
+
|
848 |
.happyforms-parts-expand-collapse-wrap {
|
849 |
float: right;
|
850 |
font-weight: normal;
|
assets/css/frontend.css
CHANGED
@@ -1,18 +1,31 @@
|
|
1 |
-
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
16 |
}
|
17 |
|
18 |
.happyforms-flex {
|
@@ -23,39 +36,37 @@
|
|
23 |
padding: 7.5% 0;
|
24 |
}
|
25 |
|
26 |
-
.happyforms-form
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
27 |
margin: 0;
|
28 |
padding: 0 1%;
|
29 |
font-weight: bold;
|
30 |
font-size: 32px;
|
|
|
31 |
color: #000;
|
|
|
32 |
}
|
33 |
|
34 |
-
.happyforms-form h3.happyforms-form__title
|
35 |
-
|
36 |
-
}
|
37 |
-
|
38 |
-
.happyforms-required {
|
39 |
-
color: #ff7550;
|
40 |
}
|
41 |
|
42 |
-
|
43 |
-
position: absolute;
|
44 |
-
border: 0;
|
45 |
-
clip: rect(0 0 0 0);
|
46 |
-
width: 1px;
|
47 |
-
height: 1px;
|
48 |
-
margin: -1px;
|
49 |
-
padding: 0;
|
50 |
-
overflow: hidden;
|
51 |
-
}
|
52 |
|
53 |
-
.happyforms-
|
54 |
position: relative;
|
55 |
display: block;
|
56 |
width: 100%;
|
57 |
margin-bottom: 20px;
|
58 |
-
padding:
|
59 |
}
|
60 |
|
61 |
@media screen and (min-width: 800px) {
|
@@ -72,27 +83,22 @@
|
|
72 |
cursor: pointer;
|
73 |
margin-bottom: 20px;
|
74 |
font-size: 16px;
|
|
|
75 |
}
|
76 |
|
77 |
.happyforms-part__label .label {
|
78 |
font-weight: bold;
|
79 |
color: #000;
|
80 |
-
|
81 |
-
|
82 |
-
.happyforms-part--label-above .happyforms-part__label--confirmation {
|
83 |
-
margin-top: 10px;
|
84 |
-
}
|
85 |
-
|
86 |
-
.happyforms-part--label-below .happyforms-part__label {
|
87 |
-
order: 2;
|
88 |
-
width: 100%;
|
89 |
-
margin-bottom: 5px;
|
90 |
}
|
91 |
|
92 |
.happyforms-part__description {
|
93 |
display: block;
|
94 |
margin: 5px 0 0;
|
95 |
font-size: 14px;
|
|
|
|
|
|
|
96 |
}
|
97 |
|
98 |
.happyforms-part input[type=text],
|
@@ -101,21 +107,37 @@
|
|
101 |
.happyforms-part input[type=number],
|
102 |
.happyforms-part input[type=range],
|
103 |
.happyforms-part textarea {
|
104 |
-
width:
|
|
|
105 |
padding: 10px;
|
106 |
border-width: 1px;
|
107 |
border-style: solid;
|
108 |
border-color: #dbdbdb;
|
|
|
109 |
border-radius: 6px;
|
|
|
110 |
font-style: normal;
|
111 |
font-size: 16px;
|
|
|
112 |
background-color: #fff;
|
|
|
113 |
color: #000;
|
|
|
114 |
transition-property: none;
|
115 |
transition-duration: 0.1s;
|
|
|
116 |
transition-timing-function: ease-in;
|
117 |
}
|
118 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
119 |
.happyforms-part input[type=text]:focus,
|
120 |
.happyforms-part input[type=email]:focus,
|
121 |
.happyforms-part input[type=tel]:focus,
|
@@ -123,7 +145,18 @@
|
|
123 |
.happyforms-part textarea:focus {
|
124 |
border-width: 1px;
|
125 |
border-style: solid;
|
126 |
-
border-color: #
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
127 |
}
|
128 |
|
129 |
.happyforms-part.happyforms-part--error input[type=text],
|
@@ -133,158 +166,78 @@
|
|
133 |
.happyforms-part.happyforms-part--error input[type=range],
|
134 |
.happyforms-part.happyforms-part--error textarea {
|
135 |
border-color: #ff7550;
|
|
|
136 |
}
|
137 |
|
138 |
-
|
139 |
-
.happyforms-part input[type=range] {
|
140 |
-
-webkit-appearance: none;
|
141 |
-
padding: 0;
|
142 |
-
border: 0;
|
143 |
-
width: 100%;
|
144 |
-
}
|
145 |
-
|
146 |
-
.happyforms-part input[type=range]:focus {
|
147 |
-
border: 0;
|
148 |
-
outline: 0;
|
149 |
-
}
|
150 |
-
|
151 |
-
.happyforms-part input[type=range]::-webkit-slider-runnable-track {
|
152 |
-
width: 100%;
|
153 |
-
height: 1px;
|
154 |
-
cursor: pointer;
|
155 |
-
animate: 0.2s;
|
156 |
-
box-shadow: none;
|
157 |
-
background: #000000;
|
158 |
-
}
|
159 |
-
|
160 |
-
.happyforms-part input[type=range]::-webkit-slider-thumb {
|
161 |
-
-webkit-appearance: none;
|
162 |
-
width: 20px;
|
163 |
-
height: 20px;
|
164 |
-
margin-top: -10px;
|
165 |
-
border: 1px solid #000000;
|
166 |
-
border-radius: 50%;
|
167 |
-
box-shadow: none;
|
168 |
-
background: #000000;
|
169 |
-
cursor: pointer;
|
170 |
-
}
|
171 |
-
|
172 |
-
.happyforms-part input[type=range]:focus::-webkit-slider-runnable-track {
|
173 |
-
background: #000000;
|
174 |
-
}
|
175 |
-
|
176 |
-
.happyforms-part input[type=range]::-moz-range-track {
|
177 |
-
width: 100%;
|
178 |
-
height: 1px;
|
179 |
-
cursor: pointer;
|
180 |
-
animate: 0.2s;
|
181 |
-
box-shadow: none;
|
182 |
-
background: #000000;
|
183 |
-
}
|
184 |
-
|
185 |
-
.happyforms-part input[type=range]::-moz-range-thumb {
|
186 |
-
width: 20px;
|
187 |
-
height: 20px;
|
188 |
-
margin-top: -10px;
|
189 |
-
border: 1px solid #000000;
|
190 |
-
border-radius: 50%;
|
191 |
-
box-shadow: none;
|
192 |
-
background: #000000;
|
193 |
-
cursor: pointer;
|
194 |
-
}
|
195 |
-
|
196 |
-
.happyforms-part input[type=range]::-ms-track {
|
197 |
-
width: 100%;
|
198 |
-
height: 1px;
|
199 |
-
cursor: pointer;
|
200 |
-
animate: 0.2s;
|
201 |
-
box-shadow: none;
|
202 |
-
background: #000000;
|
203 |
-
}
|
204 |
-
|
205 |
-
.happyforms-part input[type=range]::-ms-fill-lower {
|
206 |
-
background: #000000;
|
207 |
-
border: 0;
|
208 |
-
box-shadow: none;
|
209 |
-
}
|
210 |
-
|
211 |
-
.happyforms-part input[type=range]::-ms-fill-upper {
|
212 |
-
background: #000000;
|
213 |
-
border: 0;
|
214 |
-
box-shadow: none;
|
215 |
-
}
|
216 |
-
|
217 |
-
.happyforms-part input[type=range]::-ms-thumb {
|
218 |
-
width: 20px;
|
219 |
-
height: 20px;
|
220 |
-
margin-top: -10px;
|
221 |
-
border: 1px solid #000000;
|
222 |
-
border-radius: 50%;
|
223 |
-
box-shadow: none;
|
224 |
-
background: #000000;
|
225 |
-
cursor: pointer;
|
226 |
-
}
|
227 |
-
|
228 |
-
.happyforms-part input[type=range]:focus::-ms-fill-lower {
|
229 |
-
background: #000000;
|
230 |
-
}
|
231 |
-
|
232 |
-
.happyforms-part input[type=range]:focus::-ms-fill-upper {
|
233 |
-
background: #000000;
|
234 |
-
}
|
235 |
-
|
236 |
-
.happyforms-part--scale output {
|
237 |
display: block;
|
238 |
-
position: relative;
|
239 |
-
width: 30px;
|
240 |
-
text-align: center;
|
241 |
-
color: #d0d0d0;
|
242 |
-
}
|
243 |
-
|
244 |
-
.happyforms-part--scale__labels {
|
245 |
-
position: relative;
|
246 |
-
width: 100%;
|
247 |
-
}
|
248 |
-
|
249 |
-
.happyforms-part--scale__labels .label-min {
|
250 |
-
float: left;
|
251 |
}
|
252 |
|
253 |
-
|
254 |
-
float: right;
|
255 |
-
}
|
256 |
|
257 |
-
/* part placeholders */
|
258 |
.happyforms-part ::-webkit-input-placeholder {
|
259 |
font-weight: normal;
|
260 |
font-style: normal;
|
261 |
color: #aaa;
|
|
|
262 |
}
|
263 |
|
264 |
.happyforms-part ::-moz-placeholder {
|
265 |
font-weight: normal;
|
266 |
font-style: normal;
|
267 |
color: #aaa;
|
|
|
268 |
}
|
269 |
|
270 |
.happyforms-part ::-ms-placeholder {
|
271 |
font-weight: normal;
|
272 |
font-style: normal;
|
273 |
color: #aaa;
|
|
|
274 |
}
|
275 |
|
276 |
.happyforms-part ::placeholder {
|
277 |
font-weight: normal;
|
278 |
font-style: normal;
|
279 |
color: #aaa;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
280 |
}
|
281 |
|
282 |
-
|
|
|
|
|
283 |
display: flex;
|
284 |
flex-flow: row wrap-reverse;
|
285 |
align-content: flex-end;
|
286 |
}
|
287 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
288 |
.happyforms-part--label-below input,
|
289 |
.happyforms-part--label-below textarea,
|
290 |
.happyforms-part--label-below select,
|
@@ -330,182 +283,271 @@
|
|
330 |
margin-bottom: 10px;
|
331 |
}
|
332 |
|
333 |
-
|
334 |
-
margin-top: 10px;
|
335 |
-
}
|
336 |
|
337 |
-
.happyforms-part
|
|
|
|
|
|
|
|
|
|
|
338 |
font-size: 16px;
|
339 |
-
|
340 |
}
|
341 |
|
342 |
-
.happyforms-part--
|
343 |
-
margin-
|
344 |
-
|
345 |
-
|
346 |
-
.happyforms-part--placeholder p:last-child {
|
347 |
-
margin-bottom: 0;
|
348 |
}
|
349 |
|
350 |
-
.happyforms-part--
|
351 |
-
position:
|
352 |
-
|
353 |
-
|
354 |
-
|
355 |
width: 100%;
|
356 |
-
|
357 |
border-radius: 6px;
|
358 |
-
border
|
359 |
-
border-
|
360 |
-
border-color:
|
361 |
-
background-color: #
|
362 |
-
|
|
|
363 |
}
|
364 |
|
365 |
-
.happyforms-part--
|
366 |
-
|
|
|
|
|
367 |
}
|
368 |
|
369 |
-
.happyforms-part-
|
370 |
-
|
371 |
}
|
372 |
|
373 |
-
.happyforms-part
|
374 |
-
|
|
|
375 |
}
|
376 |
|
377 |
-
.happyforms-part
|
378 |
-
.happyforms-part
|
379 |
-
|
|
|
|
|
|
|
380 |
}
|
381 |
|
382 |
-
.happyforms-part-
|
383 |
-
.happyforms-part-
|
384 |
-
|
385 |
-
|
|
|
386 |
}
|
387 |
|
388 |
-
.happyforms-
|
389 |
-
|
390 |
-
flex: 1;
|
391 |
-
padding: 0 10px 0 0;
|
392 |
}
|
393 |
|
394 |
-
.happyforms-
|
395 |
-
|
396 |
-
position:
|
397 |
-
|
398 |
-
right: 15px;
|
399 |
-
|
400 |
-
display: block;
|
401 |
-
width: 25px;
|
402 |
-
height: 25px;
|
403 |
-
font-size: 22px;
|
404 |
-
color: #000;
|
405 |
-
fill: #000;
|
406 |
-
stroke: #000;
|
407 |
-
background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIxOCIgdmlld0JveD0iMCAwIDE4IDE4Ij48cGF0aCBkPSJNNSA4bDQgNCA0LTR6Ii8+PC9zdmc+);
|
408 |
-
background-size: cover;
|
409 |
-
background-repeat: no-repeat;
|
410 |
}
|
411 |
|
412 |
-
.happyforms-part
|
413 |
-
|
414 |
-
right: 25px;
|
415 |
}
|
416 |
|
417 |
-
.happyforms-part
|
418 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
419 |
}
|
420 |
|
421 |
-
.happyforms-part--
|
422 |
-
|
423 |
-
outline-color: #000000;
|
424 |
}
|
425 |
|
426 |
-
.happyforms-part--
|
427 |
-
display:
|
|
|
428 |
}
|
429 |
|
430 |
-
.happyforms-
|
431 |
-
|
432 |
}
|
433 |
|
434 |
-
|
435 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
436 |
cursor: pointer;
|
437 |
-
display: inline-block;
|
438 |
-
margin-bottom: 10px;
|
439 |
-
padding: 0 5px 5px 0;
|
440 |
-
font-size: 16px;
|
441 |
}
|
442 |
|
443 |
-
.happyforms-
|
444 |
-
|
445 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
446 |
}
|
447 |
|
448 |
-
.happyforms-
|
449 |
position: absolute;
|
|
|
450 |
top: 0;
|
451 |
-
|
452 |
-
|
453 |
-
|
454 |
-
|
|
|
|
|
455 |
border: 1px solid #dbdbdb;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
456 |
}
|
457 |
|
458 |
-
.happyforms-part
|
459 |
-
|
460 |
-
top: 3px;
|
461 |
}
|
462 |
|
463 |
-
.happyforms-part
|
464 |
-
|
465 |
-
border-color: #000;
|
466 |
}
|
467 |
|
468 |
-
.happyforms-part
|
469 |
-
|
470 |
}
|
471 |
|
472 |
-
.happyforms-part
|
473 |
-
|
474 |
-
display: inline-block;
|
475 |
-
margin-right: 15px;
|
476 |
-
padding: 0 10px 0 20px;
|
477 |
}
|
478 |
|
479 |
-
.happyforms-part-
|
480 |
-
|
481 |
}
|
482 |
|
483 |
-
.happyforms-
|
484 |
-
|
485 |
-
|
486 |
-
|
487 |
-
|
488 |
-
|
489 |
-
|
|
|
|
|
490 |
}
|
491 |
|
492 |
-
.happyforms-
|
493 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
494 |
}
|
495 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
496 |
.happyforms-part--radio .happyforms-part__el {
|
497 |
display: flex;
|
498 |
}
|
499 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
500 |
.happyforms-part--radio .checkmark,
|
501 |
.happyforms-part--checkbox .checkmark {
|
502 |
position: relative;
|
503 |
top: 4px;
|
|
|
504 |
display: inline-block;
|
505 |
width: 20px;
|
506 |
height: 20px;
|
507 |
border-radius: 50%;
|
508 |
-
border: 1px solid
|
|
|
|
|
509 |
}
|
510 |
|
511 |
.happyforms-part--checkbox .checkmark {
|
@@ -516,42 +558,316 @@
|
|
516 |
margin-right: 5px;
|
517 |
}
|
518 |
|
519 |
-
.happyforms-part--radio input:checked
|
520 |
-
.happyforms-part--checkbox input:checked
|
521 |
border-color: #000;
|
|
|
522 |
background-color: #000;
|
|
|
523 |
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAVCAYAAABVAo5cAAAA7UlEQVRIS7XUbRHCMAwG4DcSQAKTgAWQABaQgAW8IGFIAAlgYRJeLru2t6+un8vPNtfn0jYRbBQkdwBOIvIcErKFR/II4G3O7kRkb53q4ASzjkOrgh7MoQCaamAAs+itChiJKVpeYQJ2FpFXUYWpmJY4Akm2ALR/riLyW2uZHGwEkvwCOAyQxofmYg5cwKw7Q0uwHiSpE0Engy8cWopZkBHjrTE5eu2h6H+jL0krvAN4hE6J3F/Fhm9YAw1i019agkZhS32Yg0ZjM1AXEt80CVsEE9BkzAtGoFnYKmjQi2kZna8anZmzn8g2maX9AawIfKa8qZx5AAAAAElFTkSuQmCC);
|
524 |
background-size: 12px auto;
|
525 |
background-repeat: no-repeat;
|
526 |
background-position: center center;
|
527 |
}
|
528 |
|
529 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
530 |
display: block;
|
|
|
|
|
|
|
|
|
531 |
}
|
532 |
|
533 |
-
.happyforms-part
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
534 |
display: block;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
535 |
}
|
536 |
|
537 |
-
.happyforms-part
|
538 |
-
|
|
|
539 |
}
|
540 |
|
541 |
-
.happyforms-part
|
542 |
-
|
|
|
|
|
|
|
543 |
}
|
544 |
|
545 |
-
.happyforms-part .happyforms-
|
546 |
-
|
547 |
}
|
548 |
|
549 |
-
.happyforms-
|
550 |
-
|
551 |
-
border: 2px solid #ff7550;
|
552 |
}
|
553 |
|
554 |
-
/* rating
|
|
|
555 |
.happyforms-part--rating .happyforms-rating-item-wrap {
|
556 |
float: left;
|
557 |
margin-right: 5px;
|
@@ -571,6 +887,7 @@
|
|
571 |
float: left;
|
572 |
margin-right: 5px;
|
573 |
color: #f39c00;
|
|
|
574 |
}
|
575 |
|
576 |
.happyforms-part--rating .happyforms-star__star {
|
@@ -579,103 +896,210 @@
|
|
579 |
stroke-width: 35px;
|
580 |
}
|
581 |
|
582 |
-
.happyforms-part--rating {
|
583 |
fill: #ccc;
|
|
|
584 |
color: transparent;
|
585 |
stroke: #ccc;
|
|
|
586 |
}
|
587 |
|
588 |
-
.happyforms-part--rating:hover {
|
589 |
color: #ccc;
|
590 |
fill: #f39c00;
|
|
|
591 |
stroke: #f39c00;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
592 |
}
|
593 |
|
594 |
-
.happyforms-
|
595 |
-
|
596 |
-
|
597 |
-
|
|
|
|
|
|
|
598 |
}
|
599 |
|
600 |
-
.happyforms-
|
601 |
-
|
602 |
-
|
603 |
-
|
|
|
|
|
|
|
|
|
|
|
604 |
}
|
605 |
|
606 |
-
.happyforms-
|
607 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
608 |
}
|
609 |
|
610 |
-
.happyforms-
|
611 |
-
|
612 |
-
|
613 |
-
.happyforms-part--rating:not(:hover) input:checked+label~label {
|
614 |
-
color: #ccc;
|
615 |
}
|
616 |
|
617 |
-
.happyforms-
|
618 |
-
|
619 |
-
|
620 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
621 |
}
|
622 |
|
|
|
|
|
623 |
.happyforms-part--submit {
|
624 |
width: 100%;
|
625 |
margin-bottom: 0;
|
626 |
}
|
627 |
|
628 |
-
button[type=submit].happyforms-button--submit,
|
629 |
-
button[type=submit][disabled].happyforms-button--submit,
|
630 |
-
button[type=submit][disabled].happyforms-button--submit:hover,
|
631 |
input[type=submit].happyforms-button--submit,
|
632 |
input[type=submit][disabled].happyforms-button--submit,
|
633 |
input[type=submit][disabled].happyforms-button--submit:hover {
|
|
|
634 |
padding: 17px 50px;
|
635 |
border-radius: 6px;
|
636 |
-
border
|
637 |
-
border-color:
|
638 |
font-weight: normal;
|
639 |
font-style: normal;
|
640 |
font-size: 18px;
|
|
|
641 |
color: #fff;
|
|
|
642 |
background-color: #000;
|
|
|
643 |
text-transform: none;
|
644 |
-
transition-property:
|
645 |
-
transition-duration: 0.
|
|
|
646 |
transition-timing-function: ease-in;
|
647 |
}
|
648 |
|
649 |
-
button[type=submit][disabled].happyforms-button--submit,
|
650 |
-
button[type=submit][disabled].happyforms-button--submit:hover,
|
651 |
input[type=submit][disabled].happyforms-button--submit,
|
652 |
input[type=submit][disabled].happyforms-button--submit:hover {
|
653 |
cursor: default;
|
654 |
opacity: 0.5;
|
655 |
}
|
656 |
|
657 |
-
button[type=submit].happyforms-button--submit:hover,
|
658 |
input[type=submit].happyforms-button--submit:hover {
|
659 |
border-radius: 6px;
|
660 |
-
border-color:
|
661 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
662 |
text-transform: none;
|
|
|
|
|
663 |
}
|
664 |
|
|
|
|
|
665 |
.happyforms-message-notice h2 {
|
666 |
margin-top: 0;
|
667 |
margin-bottom: 0;
|
668 |
font-weight: bold;
|
669 |
font-size: 14px !important;
|
670 |
padding: 20px;
|
|
|
|
|
671 |
}
|
672 |
|
673 |
.happyforms-message-notice.error h2 {
|
674 |
margin-top: 0;
|
675 |
margin-bottom: 5px;
|
676 |
padding: 0;
|
677 |
-
color: #ff7550;
|
678 |
font-weight: normal;
|
|
|
|
|
679 |
}
|
680 |
|
681 |
.happyforms-message-notice.success h2,
|
@@ -693,195 +1117,329 @@ input[type=submit].happyforms-button--submit:hover {
|
|
693 |
border: 3px solid;
|
694 |
border-width: 3px;
|
695 |
border-color: #000;
|
696 |
-
|
|
|
697 |
}
|
698 |
|
699 |
.happyforms-message-notice.success h2 {
|
700 |
color: #39b54a;
|
|
|
701 |
}
|
702 |
|
703 |
.happyforms-message-notice.error-submission {
|
704 |
border-color: #ff7550;
|
|
|
705 |
}
|
706 |
|
707 |
-
.happyforms-
|
708 |
-
|
709 |
}
|
710 |
|
711 |
-
.happyforms-
|
712 |
-
|
713 |
-
display: table;
|
714 |
-
clear: both;
|
715 |
}
|
716 |
|
717 |
-
|
718 |
-
.happyforms-
|
719 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
720 |
}
|
721 |
|
722 |
-
|
|
|
|
|
723 |
position: absolute;
|
724 |
-
|
725 |
-
|
726 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
727 |
opacity: 0;
|
728 |
-
width: auto;
|
729 |
-
visibility: hidden;
|
730 |
-
padding: 10px 15px;
|
731 |
-
border: 1px solid #dbdbdb;
|
732 |
-
border-radius: 6px;
|
733 |
-
font-weight: normal;
|
734 |
-
color: #000;
|
735 |
-
text-align: center;
|
736 |
-
background-color: #fff;
|
737 |
-
transition: opacity 0.2s;
|
738 |
}
|
739 |
|
740 |
-
.happyforms-part--
|
741 |
-
|
742 |
}
|
743 |
|
744 |
-
.happyforms-part--
|
745 |
-
|
746 |
-
.happyforms-part--rating .happyforms-part__tooltip .happyforms-part__description,
|
747 |
-
.happyforms-part--scale .happyforms-part__tooltip .happyforms-part__description {
|
748 |
-
top: -50px;
|
749 |
}
|
750 |
|
751 |
-
.happyforms-
|
752 |
-
|
753 |
-
position: absolute;
|
754 |
-
top: 100%;
|
755 |
-
right: 12px;
|
756 |
-
width: 0;
|
757 |
-
height: 0;
|
758 |
-
border: 8px solid transparent;
|
759 |
-
border-top-color: #dbdbdb;
|
760 |
}
|
761 |
|
762 |
-
.happyforms-
|
763 |
-
content: '';
|
764 |
position: absolute;
|
765 |
-
|
766 |
-
|
767 |
-
|
768 |
-
height: 0;
|
769 |
-
border: 7px solid transparent;
|
770 |
-
border-top-color: #fff;
|
771 |
}
|
772 |
|
773 |
-
.happyforms-
|
774 |
-
|
775 |
-
|
776 |
-
|
777 |
-
|
778 |
-
display: inline-block;
|
779 |
-
width: 18px;
|
780 |
-
height: 18px;
|
781 |
-
border-radius: 50%;
|
782 |
-
font-style: normal;
|
783 |
-
font-size: 11px;
|
784 |
-
color: #fff;
|
785 |
-
text-align: center;
|
786 |
-
background-color: #000;
|
787 |
}
|
788 |
|
789 |
-
|
790 |
-
|
791 |
-
|
|
|
792 |
}
|
793 |
|
794 |
-
.happyforms-part
|
795 |
-
|
796 |
-
.happyforms-part--rating .happyforms-tooltip__trigger,
|
797 |
-
.happyforms-part--scale .happyforms-tooltip__trigger {
|
798 |
-
top: 5px;
|
799 |
}
|
800 |
|
801 |
-
|
802 |
-
|
803 |
-
display: flex;
|
804 |
}
|
805 |
|
806 |
-
.happyforms-part--
|
807 |
-
|
|
|
808 |
}
|
809 |
|
810 |
-
.happyforms-part
|
811 |
-
|
812 |
}
|
813 |
|
814 |
-
|
815 |
-
|
816 |
-
|
817 |
-
|
818 |
-
|
819 |
-
|
820 |
-
|
821 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
822 |
display: none;
|
823 |
}
|
824 |
|
825 |
-
|
826 |
-
|
827 |
-
|
828 |
-
|
829 |
-
box-sizing: content-box;
|
830 |
-
text-align: right;
|
831 |
-
display: block;
|
832 |
-
background-image: url(https://maps.gstatic.com/mapfiles/api-3/images/powered-by-google-on-white3.png);
|
833 |
-
background-position: calc(100% - 10px) center;
|
834 |
-
background-repeat: no-repeat;
|
835 |
-
background-size: 120px 14px;
|
836 |
-
border-width: 1px;
|
837 |
-
border-style: solid;
|
838 |
-
border-color: #dbdbdb;
|
839 |
-
border-top: none;
|
840 |
}
|
841 |
|
842 |
-
|
843 |
-
|
844 |
-
border-style: solid;
|
845 |
-
border-color: #dbdbdb;
|
846 |
-
border-width: 1px;
|
847 |
-
font-size: 16px;
|
848 |
-
cursor: pointer;
|
849 |
-
background-color: white;
|
850 |
}
|
851 |
|
852 |
-
|
853 |
-
border-
|
854 |
}
|
855 |
|
856 |
-
|
857 |
-
|
858 |
}
|
859 |
|
860 |
-
|
861 |
-
|
862 |
-
border-radius: 0 !important;
|
863 |
}
|
864 |
|
865 |
-
|
866 |
-
|
867 |
-
border-width: 1px;
|
868 |
-
border-style: solid;
|
869 |
-
border-color: #dbdbdb;
|
870 |
-
border-top-left-radius: 6px;
|
871 |
-
border-top-right-radius: 6px;
|
872 |
-
border-bottom-left-radius: 0px !important;
|
873 |
-
border-bottom-right-radius: 0px !important;
|
874 |
}
|
875 |
|
876 |
-
|
877 |
-
|
878 |
-
border-top-left-radius: 0px !important;
|
879 |
-
border-top-right-radius: 0px !important;
|
880 |
-
border-bottom-left-radius: 6px;
|
881 |
-
border-bottom-right-radius: 6px;
|
882 |
}
|
883 |
|
884 |
-
|
885 |
-
|
886 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
887 |
}
|
1 |
+
:root {
|
2 |
+
/* colors */
|
3 |
+
--happyforms-color-primary: #000;
|
4 |
+
--happyforms-color-success: #39b54a;
|
5 |
+
--happyforms-color-error: #ff7550;
|
6 |
+
--happyforms-color-part-title: #000;
|
7 |
+
--happyforms-color-part-value: #000;
|
8 |
+
--happyforms-color-part-placeholder: #aaa;
|
9 |
+
--happyforms-color-part-required-text: #ff7550;
|
10 |
+
--happyforms-color-part-border: #dbdbdb;
|
11 |
+
--happyforms-color-part-border-focus: #000;
|
12 |
+
--happyforms-color-part-background: #fff;
|
13 |
+
--happyforms-color-part-background-focus: #fff;
|
14 |
+
--happyforms-color-submit-background: #000;
|
15 |
+
--happyforms-color-submit-background-hover: #dbdbdb;
|
16 |
+
--happyforms-color-submit-background-focus: #dbdbdb;
|
17 |
+
--happyforms-color-submit-border: transparent;
|
18 |
+
--happyforms-color-rating: #ccc;
|
19 |
+
--happyforms-color-rating-hover: #f39c00;
|
20 |
+
/* font */
|
21 |
+
--happyforms-form-title-font-size: 32px;
|
22 |
+
--happyforms-form-font-weight: normal;
|
23 |
+
--happyforms-part-title-font-size: 16px;
|
24 |
+
--happyforms-part-description-font-size: 14px;
|
25 |
+
--happyforms-part-value-font-size: 16px;
|
26 |
+
--happyforms-submit-button-font-size: 18px;
|
27 |
+
/* animations and transitions */
|
28 |
+
--happyforms-transition-duration: 0.25s;
|
29 |
}
|
30 |
|
31 |
.happyforms-flex {
|
36 |
padding: 7.5% 0;
|
37 |
}
|
38 |
|
39 |
+
.happyforms-form form {
|
40 |
+
max-width: 100%;
|
41 |
+
border-style: solid;
|
42 |
+
border-width: 0;
|
43 |
+
font-weight: normal;
|
44 |
+
font-weight: var(--happyforms-form-font-weight);
|
45 |
+
background-color: transparent;
|
46 |
+
}
|
47 |
+
|
48 |
+
h3.happyforms-form__title {
|
49 |
margin: 0;
|
50 |
padding: 0 1%;
|
51 |
font-weight: bold;
|
52 |
font-size: 32px;
|
53 |
+
font-size: var(--happyforms-form-title-font-size);
|
54 |
color: #000;
|
55 |
+
color: var(--happyforms-color-primary);
|
56 |
}
|
57 |
|
58 |
+
.happyforms-form--hide-title h3.happyforms-form__title {
|
59 |
+
display: none;
|
|
|
|
|
|
|
|
|
60 |
}
|
61 |
|
62 |
+
/* parts - general */
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
63 |
|
64 |
+
.happyforms-form__part {
|
65 |
position: relative;
|
66 |
display: block;
|
67 |
width: 100%;
|
68 |
margin-bottom: 20px;
|
69 |
+
padding: 5px 1%;
|
70 |
}
|
71 |
|
72 |
@media screen and (min-width: 800px) {
|
83 |
cursor: pointer;
|
84 |
margin-bottom: 20px;
|
85 |
font-size: 16px;
|
86 |
+
font-size: var(--happyforms-part-title-font-size);
|
87 |
}
|
88 |
|
89 |
.happyforms-part__label .label {
|
90 |
font-weight: bold;
|
91 |
color: #000;
|
92 |
+
color: var(--happyforms-color-part-title);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
93 |
}
|
94 |
|
95 |
.happyforms-part__description {
|
96 |
display: block;
|
97 |
margin: 5px 0 0;
|
98 |
font-size: 14px;
|
99 |
+
font-size: var(--happyforms-part-description-font-size);
|
100 |
+
color: #000;
|
101 |
+
color: var(--happyforms-color-primary);
|
102 |
}
|
103 |
|
104 |
.happyforms-part input[type=text],
|
107 |
.happyforms-part input[type=number],
|
108 |
.happyforms-part input[type=range],
|
109 |
.happyforms-part textarea {
|
110 |
+
width: 100%;
|
111 |
+
height: auto !important;
|
112 |
padding: 10px;
|
113 |
border-width: 1px;
|
114 |
border-style: solid;
|
115 |
border-color: #dbdbdb;
|
116 |
+
border-color: var(--happyforms-color-part-border);
|
117 |
border-radius: 6px;
|
118 |
+
box-shadow: none;
|
119 |
font-style: normal;
|
120 |
font-size: 16px;
|
121 |
+
font-size: var(--happyforms-part-value-font-size);
|
122 |
background-color: #fff;
|
123 |
+
background-color: var(--happyforms-color-part-background);
|
124 |
color: #000;
|
125 |
+
color: var(--happyforms-color-part-value);
|
126 |
transition-property: none;
|
127 |
transition-duration: 0.1s;
|
128 |
+
transition-duration: var(--happyforms-transition-duration);
|
129 |
transition-timing-function: ease-in;
|
130 |
}
|
131 |
|
132 |
+
.happyforms-form--part-border-off .happyforms-part input[type=text],
|
133 |
+
.happyforms-form--part-border-off .happyforms-part input[type=email],
|
134 |
+
.happyforms-form--part-border-off .happyforms-part input[type=tel],
|
135 |
+
.happyforms-form--part-border-off .happyforms-part input[type=number],
|
136 |
+
.happyforms-form--part-border-off .happyforms-part input[type=range],
|
137 |
+
.happyforms-form--part-border-off .happyforms-part textarea {
|
138 |
+
border-color: transparent;
|
139 |
+
}
|
140 |
+
|
141 |
.happyforms-part input[type=text]:focus,
|
142 |
.happyforms-part input[type=email]:focus,
|
143 |
.happyforms-part input[type=tel]:focus,
|
145 |
.happyforms-part textarea:focus {
|
146 |
border-width: 1px;
|
147 |
border-style: solid;
|
148 |
+
border-color: #000;
|
149 |
+
border-color: var(--happyforms-color-part-border-focus);
|
150 |
+
background-color: #fff;
|
151 |
+
background-color: var(--happyforms-color-part-background-focus);
|
152 |
+
}
|
153 |
+
|
154 |
+
.happyforms-form--part-border-off .happyforms-part input[type=text]:focus,
|
155 |
+
.happyforms-form--part-border-off .happyforms-part input[type=email]:focus,
|
156 |
+
.happyforms-form--part-border-off .happyforms-part input[type=tel]:focus,
|
157 |
+
.happyforms-form--part-border-off .happyforms-part input[type=number]:focus,
|
158 |
+
.happyforms-form--part-border-off .happyforms-part textarea:focus {
|
159 |
+
border-color: transparent;
|
160 |
}
|
161 |
|
162 |
.happyforms-part.happyforms-part--error input[type=text],
|
166 |
.happyforms-part.happyforms-part--error input[type=range],
|
167 |
.happyforms-part.happyforms-part--error textarea {
|
168 |
border-color: #ff7550;
|
169 |
+
border-color: var(--happyforms-color-error);
|
170 |
}
|
171 |
|
172 |
+
.happyforms-part.display-type--block .happyforms-part__el {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
173 |
display: block;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
174 |
}
|
175 |
|
176 |
+
/* placeholders */
|
|
|
|
|
177 |
|
|
|
178 |
.happyforms-part ::-webkit-input-placeholder {
|
179 |
font-weight: normal;
|
180 |
font-style: normal;
|
181 |
color: #aaa;
|
182 |
+
color: var(--happyforms-color-part-placeholder);
|
183 |
}
|
184 |
|
185 |
.happyforms-part ::-moz-placeholder {
|
186 |
font-weight: normal;
|
187 |
font-style: normal;
|
188 |
color: #aaa;
|
189 |
+
color: var(--happyforms-color-part-placeholder);
|
190 |
}
|
191 |
|
192 |
.happyforms-part ::-ms-placeholder {
|
193 |
font-weight: normal;
|
194 |
font-style: normal;
|
195 |
color: #aaa;
|
196 |
+
color: var(--happyforms-color-part-placeholder);
|
197 |
}
|
198 |
|
199 |
.happyforms-part ::placeholder {
|
200 |
font-weight: normal;
|
201 |
font-style: normal;
|
202 |
color: #aaa;
|
203 |
+
color: var(--happyforms-color-part-placeholder);
|
204 |
+
}
|
205 |
+
|
206 |
+
.happyforms-part-el-wrap {
|
207 |
+
position: relative;
|
208 |
+
}
|
209 |
+
|
210 |
+
.happyforms-part-wrap {
|
211 |
+
position: relative;
|
212 |
+
}
|
213 |
+
|
214 |
+
.happyforms-part-wrap--confirmation {
|
215 |
+
margin-top: 10px;
|
216 |
+
}
|
217 |
+
|
218 |
+
.happyforms-required {
|
219 |
+
color: #ff7550;
|
220 |
+
color: var(--happyforms-color-part-required-text);
|
221 |
}
|
222 |
|
223 |
+
/* label placement */
|
224 |
+
|
225 |
+
.happyforms-part--label-below .happyforms-part-wrap {
|
226 |
display: flex;
|
227 |
flex-flow: row wrap-reverse;
|
228 |
align-content: flex-end;
|
229 |
}
|
230 |
|
231 |
+
.happyforms-part--label-below .happyforms-part__label {
|
232 |
+
order: 2;
|
233 |
+
width: 100%;
|
234 |
+
margin-bottom: 5px;
|
235 |
+
}
|
236 |
+
|
237 |
+
.happyforms-part--label-above .happyforms-part__label--confirmation {
|
238 |
+
margin-top: 10px;
|
239 |
+
}
|
240 |
+
|
241 |
.happyforms-part--label-below input,
|
242 |
.happyforms-part--label-below textarea,
|
243 |
.happyforms-part--label-below select,
|
283 |
margin-bottom: 10px;
|
284 |
}
|
285 |
|
286 |
+
/* parts - option labels */
|
|
|
|
|
287 |
|
288 |
+
.happyforms-part .option-label {
|
289 |
+
position: relative;
|
290 |
+
cursor: pointer;
|
291 |
+
display: inline-block;
|
292 |
+
margin-bottom: 10px;
|
293 |
+
padding: 0 5px 5px 0;
|
294 |
font-size: 16px;
|
295 |
+
font-size: var(--happyforms-part-value-font-size);
|
296 |
}
|
297 |
|
298 |
+
.happyforms-part--radio .option-label {
|
299 |
+
margin-right: 20px;
|
300 |
+
padding: 10px;
|
301 |
+
background-color: #fff;
|
|
|
|
|
302 |
}
|
303 |
|
304 |
+
.happyforms-part--radio .option-label .border {
|
305 |
+
position: absolute;
|
306 |
+
top: 0;
|
307 |
+
left: 0;
|
308 |
+
z-index: 0;
|
309 |
width: 100%;
|
310 |
+
height: 100%;
|
311 |
border-radius: 6px;
|
312 |
+
border: 1px solid;
|
313 |
+
border-color: #dbdbdb;
|
314 |
+
border-color: var(--happyforms-color-part-border);
|
315 |
+
background-color: #fff;
|
316 |
+
background-color: var(--happyforms-color-part-background);
|
317 |
+
transition: border-color var(--happyforms-transition-duration);
|
318 |
}
|
319 |
|
320 |
+
.happyforms-form--part-borders-bottom-only .happyforms-part--radio .option-label .border {
|
321 |
+
border-top-color: transparent;
|
322 |
+
border-left-color: transparent;
|
323 |
+
border-right-color: transparent;
|
324 |
}
|
325 |
|
326 |
+
.happyforms-form--part-border-off .option-label .border {
|
327 |
+
border-color: transparent;
|
328 |
}
|
329 |
|
330 |
+
.happyforms-part--radio .option-label input,
|
331 |
+
.happyforms-part--checkbox .option-label input {
|
332 |
+
top: 3px;
|
333 |
}
|
334 |
|
335 |
+
.happyforms-part--radio input:checked~.border,
|
336 |
+
.happyforms-part--radio .option-label:hover .border {
|
337 |
+
border-color: #000;
|
338 |
+
border-color: var(--happyforms-color-part-border-focus);
|
339 |
+
background-color: #fff;
|
340 |
+
background-color: var(--happyforms-color-part-background-focus);
|
341 |
}
|
342 |
|
343 |
+
.happyforms-form--part-borders-bottom-only .happyforms-part--radio input:checked~.border,
|
344 |
+
.happyforms-form--part-borders-bottom-only .happyforms-part--radio .option-label:hover .border {
|
345 |
+
border-top-color: transparent;
|
346 |
+
border-left-color: transparent;
|
347 |
+
border-right-color: transparent;
|
348 |
}
|
349 |
|
350 |
+
.happyforms-part--radio .option-label input:focus {
|
351 |
+
outline: 0;
|
|
|
|
|
352 |
}
|
353 |
|
354 |
+
.happyforms-part--radio .option-label .label,
|
355 |
+
.happyforms-part--checkbox .option-label .label {
|
356 |
+
position: relative;
|
357 |
+
display: inline-block;
|
358 |
+
margin-right: 15px;
|
359 |
+
padding: 0 10px;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
360 |
}
|
361 |
|
362 |
+
.happyforms-part-option {
|
363 |
+
margin-bottom: 20px;
|
|
|
364 |
}
|
365 |
|
366 |
+
.happyforms-part-option__description {
|
367 |
+
display: block;
|
368 |
+
width: 100%;
|
369 |
+
max-width: 400px;
|
370 |
+
margin-top: 3px;
|
371 |
+
margin-right: 20px;
|
372 |
+
font-size: 12px;
|
373 |
+
color: #000;
|
374 |
+
color: var(--happyforms-color-primary);
|
375 |
}
|
376 |
|
377 |
+
.happyforms-part--radio.display-type--block .happyforms-part-option__description {
|
378 |
+
max-width: none;
|
|
|
379 |
}
|
380 |
|
381 |
+
.happyforms-part.display-type--block .option-label {
|
382 |
+
display: block;
|
383 |
+
margin-right: 0;
|
384 |
}
|
385 |
|
386 |
+
.happyforms-part--checkbox.display-type--block .option-label {
|
387 |
+
margin-bottom: 10px;
|
388 |
}
|
389 |
|
390 |
+
/* tooltips */
|
391 |
+
|
392 |
+
.happyforms-tooltip {
|
393 |
+
position: absolute;
|
394 |
+
bottom: 0;
|
395 |
+
left: 0;
|
396 |
+
right: 10px;
|
397 |
+
height: 50%;
|
398 |
+
overflow: visible;
|
399 |
+
pointer-events: none;
|
400 |
+
}
|
401 |
+
|
402 |
+
.happyforms-tooltip__trigger {
|
403 |
+
display: block;
|
404 |
+
position: absolute;
|
405 |
+
top: 48%;
|
406 |
+
right: 1px;
|
407 |
+
padding: 10px;
|
408 |
+
background-color: transparent;
|
409 |
+
-ms-transform: translate(0, -50%);
|
410 |
+
-webkit-transform: translate(0, -50%);
|
411 |
+
transform: translate(0, -50%);
|
412 |
+
pointer-events: auto;
|
413 |
cursor: pointer;
|
|
|
|
|
|
|
|
|
414 |
}
|
415 |
|
416 |
+
.happyforms-tooltip__trigger:after {
|
417 |
+
content: "?";
|
418 |
+
display: block;
|
419 |
+
width: 18px;
|
420 |
+
height: 18px;
|
421 |
+
border-radius: 50%;
|
422 |
+
font-style: normal;
|
423 |
+
font-size: 11px;
|
424 |
+
line-height: 18px;
|
425 |
+
color: #fff;
|
426 |
+
color: var(--happyforms-color-part-background);
|
427 |
+
text-align: center;
|
428 |
+
background-color: #000;
|
429 |
+
background-color: var(--happyforms-color-part-value);
|
430 |
}
|
431 |
|
432 |
+
.happyforms-tooltip .happyforms-part__description {
|
433 |
position: absolute;
|
434 |
+
z-index: 999;
|
435 |
top: 0;
|
436 |
+
right: 0;
|
437 |
+
transform: translate(0, -115%);
|
438 |
+
opacity: 0;
|
439 |
+
width: auto;
|
440 |
+
visibility: hidden;
|
441 |
+
padding: 10px 15px;
|
442 |
border: 1px solid #dbdbdb;
|
443 |
+
border-radius: 6px;
|
444 |
+
font-weight: normal;
|
445 |
+
color: #000;
|
446 |
+
color: var(--happyforms-color-primary);
|
447 |
+
text-align: center;
|
448 |
+
background-color: #fff;
|
449 |
+
background-color: var(--happyforms-color-part-background);
|
450 |
+
transition: opacity 0.2s;
|
451 |
}
|
452 |
|
453 |
+
.happyforms-form--part-inner-padding-wide .happyforms-tooltip .happyforms-part__description {
|
454 |
+
transform: translate(0, -100%);
|
|
|
455 |
}
|
456 |
|
457 |
+
.happyforms-form--part-inner-padding-wide .happyforms-tooltip {
|
458 |
+
height: 54%;
|
|
|
459 |
}
|
460 |
|
461 |
+
.happyforms-form--part-inner-padding-narrow .happyforms-tooltip .happyforms-part__description {
|
462 |
+
transform: translate(0, -120%);
|
463 |
}
|
464 |
|
465 |
+
.happyforms-form--part-inner-padding-narrow .happyforms-tooltip {
|
466 |
+
height: 42%;
|
|
|
|
|
|
|
467 |
}
|
468 |
|
469 |
+
.happyforms-form--part-inner-padding-wide .happyforms-tooltip .happyforms-part__description {
|
470 |
+
transform: translate(0, -100%);
|
471 |
}
|
472 |
|
473 |
+
.happyforms-tooltip .happyforms-part__description:before {
|
474 |
+
content: '';
|
475 |
+
position: absolute;
|
476 |
+
top: 100%;
|
477 |
+
right: 12px;
|
478 |
+
width: 0;
|
479 |
+
height: 0;
|
480 |
+
border: 8px solid transparent;
|
481 |
+
border-top-color: #dbdbdb;
|
482 |
}
|
483 |
|
484 |
+
.happyforms-tooltip .happyforms-part__description:after {
|
485 |
+
content: '';
|
486 |
+
position: absolute;
|
487 |
+
top: calc(100% - 1px);
|
488 |
+
right: 13px;
|
489 |
+
width: 0;
|
490 |
+
height: 0;
|
491 |
+
border: 7px solid transparent;
|
492 |
+
border-top-color: #fff;
|
493 |
+
border-top-color: var(--happyforms-color-part-background);
|
494 |
}
|
495 |
|
496 |
+
.happyforms-tooltip:hover .happyforms-part__description {
|
497 |
+
visibility: visible;
|
498 |
+
opacity: 1;
|
499 |
+
}
|
500 |
+
|
501 |
+
.happyforms-part--multi_line_text .happyforms-tooltip,
|
502 |
+
.happyforms-part--date .happyforms-tooltip,
|
503 |
+
.happyforms-part--select .happyforms-tooltip,
|
504 |
+
.happyforms-part--rating .happyforms-tooltip,
|
505 |
+
.happyforms-part--scale .happyforms-tooltip,
|
506 |
+
.happyforms-part--checkbox .happyforms-tooltip,
|
507 |
+
.happyforms-part--radio .happyforms-tooltip,
|
508 |
+
.happyforms-part--title .happyforms-tooltip {
|
509 |
+
top: 0;
|
510 |
+
bottom: auto;
|
511 |
+
}
|
512 |
+
|
513 |
+
.happyforms-part--multi_line_text .happyforms-tooltip,
|
514 |
+
.happyforms-part--checkbox .happyforms-tooltip,
|
515 |
+
.happyforms-part--radio .happyforms-tooltip {
|
516 |
+
height: 30px;
|
517 |
+
}
|
518 |
+
|
519 |
+
.happyforms-part--multi_line_text .happyforms-tooltip .happyforms-part__description,
|
520 |
+
.happyforms-part--checkbox .happyforms-tooltip .happyforms-part__description,
|
521 |
+
.happyforms-part--radio .happyforms-tooltip .happyforms-part__description {
|
522 |
+
transform: translate(0, -130%);
|
523 |
+
}
|
524 |
+
|
525 |
+
/* parts - radio, checkbox */
|
526 |
+
|
527 |
.happyforms-part--radio .happyforms-part__el {
|
528 |
display: flex;
|
529 |
}
|
530 |
|
531 |
+
.happyforms-part--radio {
|
532 |
+
margin-bottom: 0;
|
533 |
+
}
|
534 |
+
|
535 |
+
.happyforms-part--radio.display-type--block {
|
536 |
+
margin-bottom: 20px;
|
537 |
+
}
|
538 |
+
|
539 |
.happyforms-part--radio .checkmark,
|
540 |
.happyforms-part--checkbox .checkmark {
|
541 |
position: relative;
|
542 |
top: 4px;
|
543 |
+
z-index: 5;
|
544 |
display: inline-block;
|
545 |
width: 20px;
|
546 |
height: 20px;
|
547 |
border-radius: 50%;
|
548 |
+
border: 1px solid;
|
549 |
+
border-color: #dbdbdb;
|
550 |
+
border-color: var(--happyforms-color-part-border);
|
551 |
}
|
552 |
|
553 |
.happyforms-part--checkbox .checkmark {
|
558 |
margin-right: 5px;
|
559 |
}
|
560 |
|
561 |
+
.happyforms-part--radio input:checked+.checkmark,
|
562 |
+
.happyforms-part--checkbox input:checked+.checkmark {
|
563 |
border-color: #000;
|
564 |
+
border-color: var(--happyforms-color-part-border-focus);
|
565 |
background-color: #000;
|
566 |
+
background-color: var(--happyforms-color-part-border-focus);
|
567 |
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAVCAYAAABVAo5cAAAA7UlEQVRIS7XUbRHCMAwG4DcSQAKTgAWQABaQgAW8IGFIAAlgYRJeLru2t6+un8vPNtfn0jYRbBQkdwBOIvIcErKFR/II4G3O7kRkb53q4ASzjkOrgh7MoQCaamAAs+itChiJKVpeYQJ2FpFXUYWpmJY4Akm2ALR/riLyW2uZHGwEkvwCOAyQxofmYg5cwKw7Q0uwHiSpE0Engy8cWopZkBHjrTE5eu2h6H+jL0krvAN4hE6J3F/Fhm9YAw1i019agkZhS32Yg0ZjM1AXEt80CVsEE9BkzAtGoFnYKmjQi2kZna8anZmzn8g2maX9AawIfKa8qZx5AAAAAElFTkSuQmCC);
|
568 |
background-size: 12px auto;
|
569 |
background-repeat: no-repeat;
|
570 |
background-position: center center;
|
571 |
}
|
572 |
|
573 |
+
/* parts - scale */
|
574 |
+
|
575 |
+
.happyforms-part input[type=range] {
|
576 |
+
-webkit-appearance: none;
|
577 |
+
padding: 0;
|
578 |
+
border: 0;
|
579 |
+
width: 100%;
|
580 |
+
}
|
581 |
+
|
582 |
+
.happyforms-part input[type=range]:focus {
|
583 |
+
border: 0;
|
584 |
+
outline: 0;
|
585 |
+
}
|
586 |
+
|
587 |
+
.happyforms-part input[type=range]::-webkit-slider-runnable-track {
|
588 |
+
width: 100%;
|
589 |
+
height: 1px;
|
590 |
+
cursor: pointer;
|
591 |
+
animate: 0.25s;
|
592 |
+
animate: var(--happyforms-transition-duration);
|
593 |
+
box-shadow: none;
|
594 |
+
background: #000;
|
595 |
+
background: var(--happyforms-color-part-value);
|
596 |
+
}
|
597 |
+
|
598 |
+
.happyforms-part input[type=range]::-webkit-slider-thumb {
|
599 |
+
-webkit-appearance: none;
|
600 |
+
width: 20px;
|
601 |
+
height: 20px;
|
602 |
+
margin-top: -10px;
|
603 |
+
border: 1px solid;
|
604 |
+
border-color: #000;
|
605 |
+
border-color: var(--happyforms-color-part-value);
|
606 |
+
border-radius: 50%;
|
607 |
+
box-shadow: none;
|
608 |
+
background: #000;
|
609 |
+
background: var(--happyforms-color-part-value);
|
610 |
+
cursor: pointer;
|
611 |
+
}
|
612 |
+
|
613 |
+
.happyforms-part input[type=range]:focus::-webkit-slider-runnable-track {
|
614 |
+
background: #000;
|
615 |
+
}
|
616 |
+
|
617 |
+
.happyforms-part input[type=range]::-moz-range-track {
|
618 |
+
width: 100%;
|
619 |
+
height: 1px;
|
620 |
+
cursor: pointer;
|
621 |
+
animate: 0.25s;
|
622 |
+
animate: var(--happyforms-transition-duration);
|
623 |
+
box-shadow: none;
|
624 |
+
background: #000;
|
625 |
+
background: var(--happyforms-color-part-value);
|
626 |
+
}
|
627 |
+
|
628 |
+
.happyforms-part input[type=range]::-moz-range-thumb {
|
629 |
+
width: 20px;
|
630 |
+
height: 20px;
|
631 |
+
margin-top: -10px;
|
632 |
+
border: 1px solid;
|
633 |
+
border-color: #000;
|
634 |
+
border-color: var(--happyforms-color-part-value);
|
635 |
+
border-radius: 50%;
|
636 |
+
box-shadow: none;
|
637 |
+
background: #000;
|
638 |
+
background: var(--happyforms-color-part-value);
|
639 |
+
cursor: pointer;
|
640 |
+
}
|
641 |
+
|
642 |
+
.happyforms-part input[type=range]::-ms-track {
|
643 |
+
width: 100%;
|
644 |
+
height: 1px;
|
645 |
+
cursor: pointer;
|
646 |
+
animate: 0.25s;
|
647 |
+
animate: var(--happyforms-transition-duration);
|
648 |
+
box-shadow: none;
|
649 |
+
background: #000;
|
650 |
+
background: var(--happyforms-color-part-value);
|
651 |
+
}
|
652 |
+
|
653 |
+
.happyforms-part input[type=range]::-ms-fill-lower {
|
654 |
+
background: #000;
|
655 |
+
background: var(--happyforms-color-part-value);
|
656 |
+
border: 0;
|
657 |
+
box-shadow: none;
|
658 |
+
}
|
659 |
+
|
660 |
+
.happyforms-part input[type=range]::-ms-fill-upper {
|
661 |
+
background: #000;
|
662 |
+
background: var(--happyforms-color-part-value);
|
663 |
+
border: 0;
|
664 |
+
box-shadow: none;
|
665 |
+
}
|
666 |
+
|
667 |
+
.happyforms-part input[type=range]::-ms-thumb {
|
668 |
+
width: 20px;
|
669 |
+
height: 20px;
|
670 |
+
margin-top: -10px;
|
671 |
+
border: 1px solid #000;
|
672 |
+
border: var(--happyforms-color-part-value);
|
673 |
+
border-radius: 50%;
|
674 |
+
box-shadow: none;
|
675 |
+
background: #000;
|
676 |
+
background: var(--happyforms-color-part-value);
|
677 |
+
cursor: pointer;
|
678 |
+
}
|
679 |
+
|
680 |
+
.happyforms-part input[type=range]:focus::-ms-fill-lower {
|
681 |
+
background: #000;
|
682 |
+
background: var(--happyforms-color-part-value);
|
683 |
+
}
|
684 |
+
|
685 |
+
.happyforms-part input[type=range]:focus::-ms-fill-upper {
|
686 |
+
background: #000;
|
687 |
+
background: var(--happyforms-color-part-value);
|
688 |
+
}
|
689 |
+
|
690 |
+
.happyforms-part--scale output {
|
691 |
display: block;
|
692 |
+
position: relative;
|
693 |
+
width: 30px;
|
694 |
+
text-align: center;
|
695 |
+
color: #d0d0d0;
|
696 |
}
|
697 |
|
698 |
+
.happyforms-part--scale__labels {
|
699 |
+
position: relative;
|
700 |
+
width: 100%;
|
701 |
+
}
|
702 |
+
|
703 |
+
.happyforms-part--scale__labels .label-min {
|
704 |
+
float: left;
|
705 |
+
}
|
706 |
+
|
707 |
+
.happyforms-part--scale__labels .label-max {
|
708 |
+
float: right;
|
709 |
+
}
|
710 |
+
|
711 |
+
.happyforms-part--label-below input,
|
712 |
+
.happyforms-part--label-below textarea,
|
713 |
+
.happyforms-part--label-below select,
|
714 |
+
.happyforms-part--label-below .happyforms-part__select-wrap,
|
715 |
+
.happyforms-part--label-below .happyforms-part__el {
|
716 |
+
order: 3;
|
717 |
+
}
|
718 |
+
|
719 |
+
.happyforms-part--label-below .happyforms-part__description {
|
720 |
+
order: 1;
|
721 |
+
margin-top: 0;
|
722 |
+
}
|
723 |
+
|
724 |
+
.happyforms-part--label-below.happyforms-part--date .happyforms-part__el {
|
725 |
+
width: 100%;
|
726 |
+
order: 2;
|
727 |
+
}
|
728 |
+
|
729 |
+
.happyforms-part--label-left .happyforms-part__label {
|
730 |
+
float: left;
|
731 |
+
width: 25%;
|
732 |
+
}
|
733 |
+
|
734 |
+
.happyforms-part--label-left input.happyforms-part__el,
|
735 |
+
.happyforms-part--label-left textarea.happyforms-part__el,
|
736 |
+
.happyforms-part--label-left .happyforms-part__select-wrap {
|
737 |
+
float: right;
|
738 |
+
width: 75%;
|
739 |
+
}
|
740 |
+
|
741 |
+
.happyforms-part--label-left .happyforms-part__description {
|
742 |
+
clear: both;
|
743 |
+
float: right;
|
744 |
+
width: 75%;
|
745 |
+
}
|
746 |
+
|
747 |
+
.happyforms-part--label-below .happyforms-part__el,
|
748 |
+
.happyforms-part--label-below input.happyforms-part__el,
|
749 |
+
.happyforms-part--label-below select.happyforms-part__el,
|
750 |
+
.happyforms-part--label-below textarea.happyforms-part__el {
|
751 |
+
position: relative;
|
752 |
+
top: 5px;
|
753 |
+
margin-bottom: 10px;
|
754 |
+
}
|
755 |
+
|
756 |
+
/* parts - placeholder */
|
757 |
+
|
758 |
+
.happyforms-part--placeholder p {
|
759 |
+
font-size: 16px;
|
760 |
+
color: #000;
|
761 |
+
}
|
762 |
+
|
763 |
+
.happyforms-part--placeholder p:first-child {
|
764 |
+
margin-top: 0;
|
765 |
+
}
|
766 |
+
|
767 |
+
.happyforms-part--placeholder p:last-child {
|
768 |
+
margin-bottom: 0;
|
769 |
+
}
|
770 |
+
|
771 |
+
/* parts - select */
|
772 |
+
|
773 |
+
.happyforms-part--select select,
|
774 |
+
.happyforms-part--date select,
|
775 |
+
.happyforms-part--title select {
|
776 |
+
position: relative;
|
777 |
+
-webkit-appearance: none;
|
778 |
+
-moz-appearance: none;
|
779 |
+
appearance: none;
|
780 |
+
width: 100%;
|
781 |
+
padding: 10px;
|
782 |
+
border: 1px solid;
|
783 |
+
border-radius: 6px;
|
784 |
+
border-color: #dbdbdb;
|
785 |
+
border-color: var(--happyforms-color-part-border);
|
786 |
+
line-height: 1.4;
|
787 |
+
background-color: #fff;
|
788 |
+
background-color: var(--happyforms-color-part-background);
|
789 |
+
font-size: 16px;
|
790 |
+
font-size: var(--happyforms-part-value-font-size);
|
791 |
+
}
|
792 |
+
|
793 |
+
.happyforms-form--part-border-off .happyforms-part--select select,
|
794 |
+
.happyforms-form--part-border-off .happyforms-part--date select,
|
795 |
+
.happyforms-form--part-border-off .happyforms-part--title select {
|
796 |
+
border-color: transparent;
|
797 |
+
}
|
798 |
+
|
799 |
+
.happyforms-part-date--date .happyforms-part-date__time-input {
|
800 |
+
display: none;
|
801 |
+
}
|
802 |
+
|
803 |
+
.happyforms-part-date--time .happyforms-part-date__date-input {
|
804 |
+
display: none;
|
805 |
+
}
|
806 |
+
|
807 |
+
.happyforms-part-date--datetime.happyforms-part--width-half .happyforms-part__el,
|
808 |
+
.happyforms-part-date--datetime.happyforms-part--width-third .happyforms-part__el {
|
809 |
+
flex-wrap: wrap;
|
810 |
+
}
|
811 |
+
|
812 |
+
.happyforms-part-date--datetime.happyforms-part--width-half .happyforms-part__select-wrap,
|
813 |
+
.happyforms-part-date--datetime.happyforms-part--width-third .happyforms-part__select-wrap {
|
814 |
+
min-width: 33.333%;
|
815 |
+
margin-bottom: 15px;
|
816 |
+
}
|
817 |
+
|
818 |
+
.happyforms-part__select-wrap {
|
819 |
+
position: relative;
|
820 |
+
flex: 1;
|
821 |
+
padding: 0 0 0 2%;
|
822 |
+
}
|
823 |
+
|
824 |
+
.happyforms-part__select-wrap:first-of-type {
|
825 |
+
padding-left: 0 !important;
|
826 |
+
}
|
827 |
+
|
828 |
+
.happyforms-part__select-wrap:after {
|
829 |
+
content: '';
|
830 |
+
position: absolute;
|
831 |
+
top: 22%;
|
832 |
+
right: 15px;
|
833 |
+
z-index: 999;
|
834 |
display: block;
|
835 |
+
width: 25px;
|
836 |
+
height: 25px;
|
837 |
+
font-size: 22px;
|
838 |
+
color: #000;
|
839 |
+
color: var(--happyforms-color-part-value);
|
840 |
+
fill: #000;
|
841 |
+
fill: var(--happyforms-color-part-value);
|
842 |
+
stroke: #000;
|
843 |
+
stroke: var(--happyforms-color-part-value);
|
844 |
+
background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIxOCIgdmlld0JveD0iMCAwIDE4IDE4Ij48cGF0aCBkPSJNNSA4bDQgNCA0LTR6Ii8+PC9zdmc+);
|
845 |
+
background-size: cover;
|
846 |
+
background-repeat: no-repeat;
|
847 |
}
|
848 |
|
849 |
+
.happyforms-part--date .happyforms-part__select-wrap:after {
|
850 |
+
top: calc(46% - 12px);
|
851 |
+
right: 15px;
|
852 |
}
|
853 |
|
854 |
+
.happyforms-part--select select:focus,
|
855 |
+
.happyforms-part--date select:focus {
|
856 |
+
outline-width: 1px;
|
857 |
+
outline-color: #000000;
|
858 |
+
outline-color: var(--happyforms-color-part-value);
|
859 |
}
|
860 |
|
861 |
+
.happyforms-part--date .happyforms-part__el {
|
862 |
+
display: flex;
|
863 |
}
|
864 |
|
865 |
+
.happyforms-part__select-wrap:last-child {
|
866 |
+
padding-right: 0;
|
|
|
867 |
}
|
868 |
|
869 |
+
/* parts - rating */
|
870 |
+
|
871 |
.happyforms-part--rating .happyforms-rating-item-wrap {
|
872 |
float: left;
|
873 |
margin-right: 5px;
|
887 |
float: left;
|
888 |
margin-right: 5px;
|
889 |
color: #f39c00;
|
890 |
+
color: var(--happyforms-color-rating-hover);
|
891 |
}
|
892 |
|
893 |
.happyforms-part--rating .happyforms-star__star {
|
896 |
stroke-width: 35px;
|
897 |
}
|
898 |
|
899 |
+
.happyforms-part--rating .happyforms-part-wrap {
|
900 |
fill: #ccc;
|
901 |
+
fill: var(--happyforms-color-rating);
|
902 |
color: transparent;
|
903 |
stroke: #ccc;
|
904 |
+
stroke: var(--happyforms-color-rating);
|
905 |
}
|
906 |
|
907 |
+
.happyforms-part--rating:hover .happyforms-part-wrap {
|
908 |
color: #ccc;
|
909 |
fill: #f39c00;
|
910 |
+
fill: var(--happyforms-color-rating-hover);
|
911 |
stroke: #f39c00;
|
912 |
+
stroke: var(--happyforms-color-rating-hover);
|
913 |
+
}
|
914 |
+
|
915 |
+
.happyforms-part--rating label {
|
916 |
+
fill: inherit;
|
917 |
+
color: inherit;
|
918 |
+
stroke: inherit;
|
919 |
+
}
|
920 |
+
|
921 |
+
.happyforms-part--rating .happyforms-star__label {
|
922 |
+
cursor: pointer;
|
923 |
+
float: left;
|
924 |
+
margin-right: 5px;
|
925 |
+
}
|
926 |
+
|
927 |
+
.happyforms-part--rating .happyforms-star__label {
|
928 |
+
color: #f39c00;
|
929 |
+
color: var(--happyforms-color-rating-hover);
|
930 |
+
}
|
931 |
+
|
932 |
+
.happyforms-part--rating:not(:hover) input:first-child:checked~label,
|
933 |
+
.happyforms-part--rating input:hover+label~label:not(:hover),
|
934 |
+
.happyforms-part--rating:hover input:checked+label:hover~label,
|
935 |
+
.happyforms-part--rating:not(:hover) input:checked+label~label {
|
936 |
+
color: #ccc;
|
937 |
+
color: var(--happyforms-color-rating);
|
938 |
+
}
|
939 |
+
|
940 |
+
/* parts - legal */
|
941 |
+
|
942 |
+
.happyforms-part--legal span {
|
943 |
+
margin-left: 5px;
|
944 |
+
font-weight: normal;
|
945 |
+
font-size: 16px;
|
946 |
+
font-size: var(--happyforms-part-value-font-size);
|
947 |
+
}
|
948 |
+
|
949 |
+
/* parts - address */
|
950 |
+
|
951 |
+
.happyforms-part--address.happyforms-part--address-country-city .happyforms-part-el-wrap {
|
952 |
+
display: flex;
|
953 |
+
}
|
954 |
+
|
955 |
+
.happyforms-part--address .happyforms-part__el {
|
956 |
+
position: relative;
|
957 |
+
}
|
958 |
+
|
959 |
+
.happyforms-part--address.happyforms-part--address-country-city .happyforms-part__el {
|
960 |
+
flex: 1;
|
961 |
+
}
|
962 |
+
|
963 |
+
.happyforms-part--address.happyforms-part--address-country-city .happyforms-part__el:first-child {
|
964 |
+
padding-right: 2%;
|
965 |
+
}
|
966 |
+
|
967 |
+
.happyforms-form--part-outer-padding-narrow .happyforms-part--address.happyforms-part--address-country-city .happyforms-part__el:first-child {
|
968 |
+
padding-right: 1%;
|
969 |
+
}
|
970 |
+
|
971 |
+
.happyforms-form--part-outer-padding-wide .happyforms-part--address.happyforms-part--address-country-city .happyforms-part__el:first-child {
|
972 |
+
padding-right: 6%;
|
973 |
}
|
974 |
|
975 |
+
.happyforms-part__el--address--results {
|
976 |
+
position: absolute;
|
977 |
+
z-index: 9999;
|
978 |
+
width: 100%;
|
979 |
+
margin: 2px 0 0;
|
980 |
+
padding: 0;
|
981 |
+
border-radius: 6px;
|
982 |
}
|
983 |
|
984 |
+
.happyforms-part__el--address--results ul {
|
985 |
+
list-style-type: none;
|
986 |
+
padding: 0;
|
987 |
+
border: 1px solid;
|
988 |
+
border-color: #000;
|
989 |
+
border-color: var(--happyforms-color-part-border-focus);
|
990 |
+
border-radius: 6px;
|
991 |
+
background-color: #fff;
|
992 |
+
background-color: var(--happyforms-color-part-background);
|
993 |
}
|
994 |
|
995 |
+
.happyforms-part__el--address--results ul li {
|
996 |
+
cursor: pointer;
|
997 |
+
list-style: none;
|
998 |
+
padding: 3px 10px;
|
999 |
+
border-bottom: 1px solid;
|
1000 |
+
border-color: #dbdbdb;
|
1001 |
+
border-color: var(--happyforms-color-part-border);
|
1002 |
+
font-size: 16px;
|
1003 |
+
font-size: var(--happyforms-part-value-font-size);
|
1004 |
+
color: #000;
|
1005 |
+
color: var(--happyforms-color-part-value);
|
1006 |
}
|
1007 |
|
1008 |
+
.happyforms-part__el--address--results ul li:hover {
|
1009 |
+
border-color: #000;
|
1010 |
+
border-color: var(--happyforms-color-part-border-focus);
|
|
|
|
|
1011 |
}
|
1012 |
|
1013 |
+
.happyforms-part__el--address--results-google ul:after {
|
1014 |
+
content: "";
|
1015 |
+
padding: 5px 10px 0;
|
1016 |
+
height: 16px;
|
1017 |
+
box-sizing: content-box;
|
1018 |
+
text-align: right;
|
1019 |
+
display: block;
|
1020 |
+
background-image: url(https://maps.gstatic.com/mapfiles/api-3/images/powered-by-google-on-white3.png);
|
1021 |
+
background-position: calc(100% - 10px) center;
|
1022 |
+
background-repeat: no-repeat;
|
1023 |
+
background-size: 120px 14px;
|
1024 |
}
|
1025 |
|
1026 |
+
/* submit button */
|
1027 |
+
|
1028 |
.happyforms-part--submit {
|
1029 |
width: 100%;
|
1030 |
margin-bottom: 0;
|
1031 |
}
|
1032 |
|
|
|
|
|
|
|
1033 |
input[type=submit].happyforms-button--submit,
|
1034 |
input[type=submit][disabled].happyforms-button--submit,
|
1035 |
input[type=submit][disabled].happyforms-button--submit:hover {
|
1036 |
+
height: auto;
|
1037 |
padding: 17px 50px;
|
1038 |
border-radius: 6px;
|
1039 |
+
border: 1px solid transparent;
|
1040 |
+
border-color: var(--happyforms-color-submit-border);
|
1041 |
font-weight: normal;
|
1042 |
font-style: normal;
|
1043 |
font-size: 18px;
|
1044 |
+
font-size: var(--happyforms-submit-button-font-size);
|
1045 |
color: #fff;
|
1046 |
+
color: var(--happyforms-color-submit-text);
|
1047 |
background-color: #000;
|
1048 |
+
background-color: var(--happyforms-color-submit-background);
|
1049 |
text-transform: none;
|
1050 |
+
transition-property: all;
|
1051 |
+
transition-duration: 0.25s;
|
1052 |
+
transition-duration: var(--happyforms-transition-duration);
|
1053 |
transition-timing-function: ease-in;
|
1054 |
}
|
1055 |
|
|
|
|
|
1056 |
input[type=submit][disabled].happyforms-button--submit,
|
1057 |
input[type=submit][disabled].happyforms-button--submit:hover {
|
1058 |
cursor: default;
|
1059 |
opacity: 0.5;
|
1060 |
}
|
1061 |
|
|
|
1062 |
input[type=submit].happyforms-button--submit:hover {
|
1063 |
border-radius: 6px;
|
1064 |
+
border-color: transparent;
|
1065 |
+
border-color: var(--happyforms-color-submit-border);
|
1066 |
+
background-color: #dbdbdb;
|
1067 |
+
background-color: var(--happyforms-color-submit-background-hover);
|
1068 |
+
text-transform: none;
|
1069 |
+
color: #000000;
|
1070 |
+
color: var(--happyforms-color-submit-text-hover);
|
1071 |
+
}
|
1072 |
+
|
1073 |
+
input[type=submit].happyforms-button--submit:focus {
|
1074 |
+
border-radius: 6px;
|
1075 |
+
border-color: transparent;
|
1076 |
+
border-color: var(--happyforms-color-submit-border);
|
1077 |
+
background-color: #dbdbdb;
|
1078 |
+
background-color: var(--happyforms-color-submit-background-focus);
|
1079 |
text-transform: none;
|
1080 |
+
color: #000000;
|
1081 |
+
color: var(--happyforms-color-submit-text-hover);
|
1082 |
}
|
1083 |
|
1084 |
+
/* notices */
|
1085 |
+
|
1086 |
.happyforms-message-notice h2 {
|
1087 |
margin-top: 0;
|
1088 |
margin-bottom: 0;
|
1089 |
font-weight: bold;
|
1090 |
font-size: 14px !important;
|
1091 |
padding: 20px;
|
1092 |
+
color: #000;
|
1093 |
+
color: var(--happyforms-color-primary);
|
1094 |
}
|
1095 |
|
1096 |
.happyforms-message-notice.error h2 {
|
1097 |
margin-top: 0;
|
1098 |
margin-bottom: 5px;
|
1099 |
padding: 0;
|
|
|
1100 |
font-weight: normal;
|
1101 |
+
color: #ff7550;
|
1102 |
+
color: var(--happyforms-color-error);
|
1103 |
}
|
1104 |
|
1105 |
.happyforms-message-notice.success h2,
|
1117 |
border: 3px solid;
|
1118 |
border-width: 3px;
|
1119 |
border-color: #000;
|
1120 |
+
border-color: var(--happyforms-color-primary);
|
1121 |
+
background-color: transparent;
|
1122 |
}
|
1123 |
|
1124 |
.happyforms-message-notice.success h2 {
|
1125 |
color: #39b54a;
|
1126 |
+
color: var(--happyforms-color-success);
|
1127 |
}
|
1128 |
|
1129 |
.happyforms-message-notice.error-submission {
|
1130 |
border-color: #ff7550;
|
1131 |
+
border-color: var(--happyforms-color-error);
|
1132 |
}
|
1133 |
|
1134 |
+
.happyforms-part .happyforms-message-notices {
|
1135 |
+
padding: 0;
|
1136 |
}
|
1137 |
|
1138 |
+
.happyforms-part .happyforms-message-notices h2 {
|
1139 |
+
font-size: 14px;
|
|
|
|
|
1140 |
}
|
1141 |
|
1142 |
+
.happyforms-part .happyforms-error+input,
|
1143 |
+
.happyforms-part .happyforms-error+textarea {
|
1144 |
+
border: 2px solid;
|
1145 |
+
border-color: #ff7550;
|
1146 |
+
border-color: var(--happyforms-color-error);
|
1147 |
+
}
|
1148 |
+
|
1149 |
+
.happyforms-form__title+.happyforms-message-notices {
|
1150 |
+
margin-top: 25px;
|
1151 |
+
}
|
1152 |
+
|
1153 |
+
/* umbrella classes */
|
1154 |
+
.happyforms-form--part-border-radius-square .happyforms-part input[type=text],
|
1155 |
+
.happyforms-form--part-border-radius-square .happyforms-part input[type=email],
|
1156 |
+
.happyforms-form--part-border-radius-square .happyforms-part input[type=tel],
|
1157 |
+
.happyforms-form--part-border-radius-square .happyforms-part input[type=number],
|
1158 |
+
.happyforms-form--part-border-radius-square .happyforms-part input[type=range],
|
1159 |
+
.happyforms-form--part-border-radius-square .happyforms-part textarea,
|
1160 |
+
.happyforms-form--part-border-radius-square .happyforms-part select,
|
1161 |
+
.happyforms-form--part-border-radius-square .happyforms-part__el--address--results ul {
|
1162 |
+
border-radius: 0px;
|
1163 |
+
}
|
1164 |
+
|
1165 |
+
.happyforms-form--part-border-radius-square .happyforms-part--radio .option-label .border {
|
1166 |
+
border-radius: 0px;
|
1167 |
+
}
|
1168 |
+
|
1169 |
+
.happyforms-form--part-border-radius-pill .happyforms-part input[type=text],
|
1170 |
+
.happyforms-form--part-border-radius-pill .happyforms-part input[type=email],
|
1171 |
+
.happyforms-form--part-border-radius-pill .happyforms-part input[type=tel],
|
1172 |
+
.happyforms-form--part-border-radius-pill .happyforms-part input[type=number],
|
1173 |
+
.happyforms-form--part-border-radius-pill .happyforms-part input[type=range],
|
1174 |
+
.happyforms-form--part-border-radius-pill .happyforms-part textarea,
|
1175 |
+
.happyforms-form--part-border-radius-pill .happyforms-part select {
|
1176 |
+
border-radius: 25px;
|
1177 |
+
padding-left: 25px;
|
1178 |
+
padding-right: 25px;
|
1179 |
+
}
|
1180 |
+
|
1181 |
+
.happyforms-form--part-border-radius-pill .happyforms-part__el--address--results ul {
|
1182 |
+
border-radius: 25px;
|
1183 |
+
}
|
1184 |
+
|
1185 |
+
.happyforms-form--part-border-radius-pill .happyforms-part--radio .option-label .border {
|
1186 |
+
border-radius: 25px;
|
1187 |
+
}
|
1188 |
+
|
1189 |
+
.happyforms-form--part-placeholder-toggle .happyforms-part ::-webkit-input-placeholder {
|
1190 |
+
color: transparent;
|
1191 |
+
transition: color var(--happyforms-transition-duration);
|
1192 |
+
}
|
1193 |
+
|
1194 |
+
.happyforms-form--part-placeholder-toggle .happyforms-part ::-moz-placeholder {
|
1195 |
+
color: transparent;
|
1196 |
+
transition: color var(--happyforms-transition-duration);
|
1197 |
+
}
|
1198 |
+
|
1199 |
+
.happyforms-form--part-placeholder-toggle .happyforms-part ::-ms-placeholder {
|
1200 |
+
color: transparent;
|
1201 |
+
transition: color var(--happyforms-transition-duration);
|
1202 |
+
}
|
1203 |
+
|
1204 |
+
.happyforms-form--part-placeholder-toggle .happyforms-part ::placeholder {
|
1205 |
+
color: transparent;
|
1206 |
+
transition: color var(--happyforms-transition-duration);
|
1207 |
+
}
|
1208 |
+
|
1209 |
+
.happyforms-form--part-placeholder-toggle .happyforms-part input:focus::-webkit-input-placeholder {
|
1210 |
+
color: #aaa;
|
1211 |
+
}
|
1212 |
+
|
1213 |
+
.happyforms-form--part-placeholder-toggle .happyforms-part input:focus::-moz-placeholder {
|
1214 |
+
color: #aaa;
|
1215 |
+
}
|
1216 |
+
|
1217 |
+
.happyforms-form--part-placeholder-toggle .happyforms-part input:focus::-ms-placeholder {
|
1218 |
+
color: #aaa;
|
1219 |
+
}
|
1220 |
+
|
1221 |
+
.happyforms-form--part-placeholder-toggle .happyforms-part input:focus::placeholder {
|
1222 |
+
color: #aaa;
|
1223 |
}
|
1224 |
|
1225 |
+
/* labels */
|
1226 |
+
|
1227 |
+
.happyforms-part--label-inside label {
|
1228 |
position: absolute;
|
1229 |
+
top: 10px;
|
1230 |
+
left: 11px;
|
1231 |
+
}
|
1232 |
+
|
1233 |
+
.happyforms-part--label-inside input,
|
1234 |
+
.happyforms-part--label-inside textarea,
|
1235 |
+
.happyforms-part--label-as_placeholder input,
|
1236 |
+
.happyforms-part--label-as_placeholder textarea {
|
1237 |
+
padding-top: 35px !important;
|
1238 |
+
}
|
1239 |
+
|
1240 |
+
/* part borders */
|
1241 |
+
.happyforms-form--part-borders-bottom-only .happyforms-part input[type=text],
|
1242 |
+
.happyforms-form--part-borders-bottom-only .happyforms-part input[type=email],
|
1243 |
+
.happyforms-form--part-borders-bottom-only .happyforms-part input[type=number],
|
1244 |
+
.happyforms-form--part-borders-bottom-only .happyforms-part textarea,
|
1245 |
+
.happyforms-form--part-borders-bottom-only .happyforms-part select {
|
1246 |
+
border-top-color: transparent;
|
1247 |
+
border-left-color: transparent;
|
1248 |
+
border-right-color: transparent;
|
1249 |
+
}
|
1250 |
+
|
1251 |
+
/* part border transitions */
|
1252 |
+
.happyforms-form--part-disable-transitions .happyforms-part input[type=text],
|
1253 |
+
.happyforms-form--part-disable-transitions .happyforms-part input[type=email],
|
1254 |
+
.happyforms-form--part-disable-transitions .happyforms-part input[type=number],
|
1255 |
+
.happyforms-form--part-disable-transitions .happyforms-part textarea {
|
1256 |
+
transition-duration: 0s;
|
1257 |
+
}
|
1258 |
+
|
1259 |
+
.happyforms-part input[type=text],
|
1260 |
+
.happyforms-part input[type=email],
|
1261 |
+
.happyforms-part input[type=number],
|
1262 |
+
.happyforms-part textarea {
|
1263 |
+
transition: border-color 0.4s;
|
1264 |
+
transition: border-color var(--happyforms-transition-duration);
|
1265 |
+
}
|
1266 |
+
|
1267 |
+
/* part labels transitions */
|
1268 |
+
.happyforms-part--label-as_placeholder label {
|
1269 |
+
transition-duration: 0.4s;
|
1270 |
+
transition-duration: var(--happyforms-transition-duration);
|
1271 |
+
}
|
1272 |
+
|
1273 |
+
.happyforms-part--label-as_placeholder ::-webkit-input-placeholder {
|
1274 |
opacity: 0;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1275 |
}
|
1276 |
|
1277 |
+
.happyforms-part--label-as_placeholder ::-moz-placeholder {
|
1278 |
+
opacity: 0;
|
1279 |
}
|
1280 |
|
1281 |
+
.happyforms-part--label-as_placeholder ::-ms-placeholder {
|
1282 |
+
opacity: 0;
|
|
|
|
|
|
|
1283 |
}
|
1284 |
|
1285 |
+
.happyforms-part--label-as_placeholder ::placeholder {
|
1286 |
+
opacity: 0;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1287 |
}
|
1288 |
|
1289 |
+
.happyforms-part--label-as_placeholder label {
|
|
|
1290 |
position: absolute;
|
1291 |
+
left: 11px;
|
1292 |
+
top: 25px;
|
1293 |
+
transition-property: top;
|
|
|
|
|
|
|
1294 |
}
|
1295 |
|
1296 |
+
.happyforms-part--label-as_placeholder input:focus~label,
|
1297 |
+
.happyforms-part--label-as_placeholder textarea:focus~label,
|
1298 |
+
.happyforms-part--label-as_placeholder.happyforms-part--filled input~label,
|
1299 |
+
.happyforms-part--label-as_placeholder.happyforms-part--filled textarea~label {
|
1300 |
+
top: 10px;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1301 |
}
|
1302 |
|
1303 |
+
/* part padding */
|
1304 |
+
|
1305 |
+
.happyforms-form--part-outer-padding-narrow .happyforms-form__part {
|
1306 |
+
padding: 0 0.5%;
|
1307 |
}
|
1308 |
|
1309 |
+
.happyforms-form--part-outer-padding-narrow .happyforms-part__select-wrap {
|
1310 |
+
padding: 0 0 0 1%;
|
|
|
|
|
|
|
1311 |
}
|
1312 |
|
1313 |
+
.happyforms-form--part-outer-padding-narrow .happyforms-part-option {
|
1314 |
+
margin-right: -5px;
|
|
|
1315 |
}
|
1316 |
|
1317 |
+
.happyforms-form--part-outer-padding-narrow .happyforms-part.display-type--block .happyforms-part-option {
|
1318 |
+
margin-right: 0;
|
1319 |
+
margin-bottom: 5px;
|
1320 |
}
|
1321 |
|
1322 |
+
.happyforms-form--part-outer-padding-narrow .happyforms-part--radio .option-label {
|
1323 |
+
margin-right: 15px;
|
1324 |
}
|
1325 |
|
1326 |
+
.happyforms-form--part-outer-padding-narrow .happyforms-part--checkbox.display-type--block .option-label {
|
1327 |
+
margin-bottom: 0;
|
1328 |
+
}
|
1329 |
+
|
1330 |
+
.happyforms-form--part-outer-padding-wide .happyforms-form__part {
|
1331 |
+
padding: 20px 3%;
|
1332 |
+
}
|
1333 |
+
|
1334 |
+
.happyforms-form--part-outer-padding-wide .happyforms-part .happyforms-part-option {
|
1335 |
+
margin-right: 15px;
|
1336 |
+
}
|
1337 |
+
|
1338 |
+
.happyforms-form--part-outer-padding-wide .happyforms-part.display-type--block .happyforms-part-option {
|
1339 |
+
margin-right: 0;
|
1340 |
+
margin-bottom: 35px;
|
1341 |
+
}
|
1342 |
+
|
1343 |
+
.happyforms-form--part-inner-padding-narrow .happyforms-part input[type=text],
|
1344 |
+
.happyforms-form--part-inner-padding-narrow .happyforms-part input[type=email],
|
1345 |
+
.happyforms-form--part-inner-padding-narrow .happyforms-part input[type=tel],
|
1346 |
+
.happyforms-form--part-inner-padding-narrow .happyforms-part input[type=number],
|
1347 |
+
.happyforms-form--part-inner-padding-narrow .happyforms-part input[type=range],
|
1348 |
+
.happyforms-form--part-inner-padding-narrow .happyforms-part textarea,
|
1349 |
+
.happyforms-form--part-inner-padding-narrow .happyforms-part select,
|
1350 |
+
.happyforms-form--part-inner-padding-narrow .happyforms-part .option-label {
|
1351 |
+
padding: 5px;
|
1352 |
+
}
|
1353 |
+
|
1354 |
+
.happyforms-form--part-inner-padding-narrow .happyforms-part--checkbox .option-label {
|
1355 |
+
margin-right: 0;
|
1356 |
+
margin-bottom: 0;
|
1357 |
+
padding-left: 0;
|
1358 |
+
padding-right: 0;
|
1359 |
+
}
|
1360 |
+
|
1361 |
+
.happyforms-form--part-inner-padding-narrow .happyforms-part--checkbox .option-label .label {
|
1362 |
+
padding-left: 5px;
|
1363 |
+
}
|
1364 |
+
|
1365 |
+
.happyforms-form--part-inner-padding-wide .happyforms-part input[type=text],
|
1366 |
+
.happyforms-form--part-inner-padding-wide .happyforms-part input[type=email],
|
1367 |
+
.happyforms-form--part-inner-padding-wide .happyforms-part input[type=tel],
|
1368 |
+
.happyforms-form--part-inner-padding-wide .happyforms-part input[type=number],
|
1369 |
+
.happyforms-form--part-inner-padding-wide .happyforms-part input[type=range],
|
1370 |
+
.happyforms-form--part-inner-padding-wide .happyforms-part textarea,
|
1371 |
+
.happyforms-form--part-inner-padding-wide .happyforms-part select,
|
1372 |
+
.happyforms-form--part-inner-padding-wide .happyforms-part .option-label {
|
1373 |
+
padding: 15px;
|
1374 |
+
}
|
1375 |
+
|
1376 |
+
.happyforms-form--part-inner-padding-wide .happyforms-part--checkbox .option-label {
|
1377 |
+
padding-left: 0;
|
1378 |
+
padding-right: 0;
|
1379 |
+
margin-right: 30px;
|
1380 |
+
}
|
1381 |
+
|
1382 |
+
.happyforms-form--part-inner-padding-wide .happyforms-part--checkbox .option-label .label {
|
1383 |
+
padding-left: 15px;
|
1384 |
+
}
|
1385 |
+
|
1386 |
+
.happyforms-form--part-hide-labels .happyforms-part__label {
|
1387 |
display: none;
|
1388 |
}
|
1389 |
|
1390 |
+
/* submit button */
|
1391 |
+
|
1392 |
+
.happyforms-form--submit-button-border-hide input[type=submit].happyforms-button--submit {
|
1393 |
+
border-width: 0;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1394 |
}
|
1395 |
|
1396 |
+
.happyforms-form--submit-button-border-radius-square input[type=submit].happyforms-button--submit {
|
1397 |
+
border-radius: 0;
|
|
|
|
|
|
|
|
|
|
|
|
|
1398 |
}
|
1399 |
|
1400 |
+
.happyforms-form--submit-button-border-radius-pill input[type=submit].happyforms-button--submit {
|
1401 |
+
border-radius: 30px;
|
1402 |
}
|
1403 |
|
1404 |
+
.happyforms-form--submit-button-fullwidth input[type=submit].happyforms-button--submit {
|
1405 |
+
width: 100%;
|
1406 |
}
|
1407 |
|
1408 |
+
.happyforms-form--submit-button-align-center .happyforms-part--submit {
|
1409 |
+
text-align: center;
|
|
|
1410 |
}
|
1411 |
|
1412 |
+
.happyforms-form--submit-button-align-right .happyforms-part--submit {
|
1413 |
+
text-align: right;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1414 |
}
|
1415 |
|
1416 |
+
.happyforms-form--submit-button-bold .happyforms-part--submit input[type=submit] {
|
1417 |
+
font-weight: bold;
|
|
|
|
|
|
|
|
|
1418 |
}
|
1419 |
|
1420 |
+
.happyforms-form--submit-button-disable-transitions input[type=submit] {
|
1421 |
+
transition-duration: 0s !important;
|
1422 |
+
}
|
1423 |
+
|
1424 |
+
.happyforms-form--part-title-font-weight-normal .happyforms-part__label .label {
|
1425 |
+
font-weight: normal;
|
1426 |
+
}
|
1427 |
+
|
1428 |
+
/* helpers */
|
1429 |
+
.happyforms-visuallyhidden {
|
1430 |
+
position: absolute;
|
1431 |
+
border: 0;
|
1432 |
+
clip: rect(0 0 0 0);
|
1433 |
+
width: 1px;
|
1434 |
+
height: 1px;
|
1435 |
+
margin: -1px;
|
1436 |
+
padding: 0;
|
1437 |
+
overflow: hidden;
|
1438 |
+
}
|
1439 |
+
|
1440 |
+
/* widget */
|
1441 |
+
.widget input[type=submit].happyforms-button--submit,
|
1442 |
+
.widget input[type=submit][disabled].happyforms-button--submit,
|
1443 |
+
.widget input[type=submit][disabled].happyforms-button--submit:hover {
|
1444 |
+
width: 100%;
|
1445 |
}
|
inc/templates/preview-inline.css → assets/css/preview.css
RENAMED
@@ -1,62 +1,73 @@
|
|
1 |
-
body {
|
2 |
background-color: #fff !important;
|
|
|
3 |
}
|
|
|
4 |
body::before, body::after {
|
5 |
content: '';
|
6 |
display: none;
|
7 |
}
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
12 |
.notice {
|
13 |
-
|
14 |
-
margin: 0 0 15px;
|
15 |
}
|
|
|
16 |
.notice-success {
|
17 |
padding: 1px 12px;
|
18 |
border-left: 4px solid #46b450;
|
19 |
box-shadow: 0 1px 1px 0 rgba( 0, 0, 0, 0.1 );
|
20 |
background: #fff;
|
21 |
}
|
|
|
22 |
.notice p {
|
23 |
margin: 10px 0;
|
24 |
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
|
25 |
font-size: 13px;
|
26 |
color: #444;
|
27 |
}
|
|
|
28 |
.notice a {
|
29 |
color: #0073aa;
|
30 |
text-decoration: underline;
|
31 |
transition: color 0.05s ease-in-out;
|
|
|
32 |
}
|
|
|
33 |
.notice a:hover {
|
34 |
color: #00a0d2;
|
35 |
}
|
36 |
-
|
37 |
-
|
38 |
-
}
|
39 |
-
.happyforms-flex {
|
40 |
padding: 2.5%;
|
41 |
overflow: visible;
|
42 |
-
}
|
43 |
-
|
|
|
44 |
display: flex !important;
|
45 |
align-items: center;
|
46 |
padding: 0;
|
47 |
-
}
|
|
|
48 |
.happyforms-preview-badge {
|
49 |
padding-left: 10px;
|
50 |
font-weight: 400;
|
51 |
font-size: 16px;
|
52 |
}
|
|
|
53 |
.happyforms-part.highlighted {
|
54 |
outline: 1px solid lightblue;
|
55 |
}
|
|
|
56 |
a.happyforms-ask-link {
|
57 |
cursor: pointer !important;
|
58 |
}
|
59 |
-
.happyforms-part .widget .customize-partial-edit-shortcut,
|
60 |
-
.customize-partial-edit-shortcut {
|
61 |
-
top: 0;
|
62 |
-
}
|
1 |
+
body.happyforms-preview {
|
2 |
background-color: #fff !important;
|
3 |
+
padding: 40px;
|
4 |
}
|
5 |
+
|
6 |
body::before, body::after {
|
7 |
content: '';
|
8 |
display: none;
|
9 |
}
|
10 |
+
|
11 |
+
.happyforms-block-editable {
|
12 |
+
position: relative;
|
13 |
}
|
14 |
+
|
15 |
+
.customize-partial-edit-shortcut.happyforms-partial-edit-shortcut {
|
16 |
+
display: block;
|
17 |
+
position: absolute;
|
18 |
+
top: 0;
|
19 |
+
}
|
20 |
+
|
21 |
.notice {
|
22 |
+
margin-bottom: 15px;
|
|
|
23 |
}
|
24 |
+
|
25 |
.notice-success {
|
26 |
padding: 1px 12px;
|
27 |
border-left: 4px solid #46b450;
|
28 |
box-shadow: 0 1px 1px 0 rgba( 0, 0, 0, 0.1 );
|
29 |
background: #fff;
|
30 |
}
|
31 |
+
|
32 |
.notice p {
|
33 |
margin: 10px 0;
|
34 |
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
|
35 |
font-size: 13px;
|
36 |
color: #444;
|
37 |
}
|
38 |
+
|
39 |
.notice a {
|
40 |
color: #0073aa;
|
41 |
text-decoration: underline;
|
42 |
transition: color 0.05s ease-in-out;
|
43 |
+
cursor: auto;
|
44 |
}
|
45 |
+
|
46 |
.notice a:hover {
|
47 |
color: #00a0d2;
|
48 |
}
|
49 |
+
|
50 |
+
/*.happyforms-flex {
|
|
|
|
|
51 |
padding: 2.5%;
|
52 |
overflow: visible;
|
53 |
+
}*/
|
54 |
+
|
55 |
+
/*.happyforms-form h3.happyforms-form__title {
|
56 |
display: flex !important;
|
57 |
align-items: center;
|
58 |
padding: 0;
|
59 |
+
}*/
|
60 |
+
|
61 |
.happyforms-preview-badge {
|
62 |
padding-left: 10px;
|
63 |
font-weight: 400;
|
64 |
font-size: 16px;
|
65 |
}
|
66 |
+
|
67 |
.happyforms-part.highlighted {
|
68 |
outline: 1px solid lightblue;
|
69 |
}
|
70 |
+
|
71 |
a.happyforms-ask-link {
|
72 |
cursor: pointer !important;
|
73 |
}
|
|
|
|
|
|
|
|
assets/js/customize.js
CHANGED
@@ -9,22 +9,16 @@
|
|
9 |
|
10 |
classes.models.Form = Backbone.Model.extend( {
|
11 |
idAttribute: 'ID',
|
12 |
-
|
13 |
defaults: settings.form,
|
14 |
|
15 |
getPreviewUrl: function() {
|
16 |
-
var previewUrl
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
'&p=' + this.id +
|
22 |
-
'&preview=true';
|
23 |
-
} else {
|
24 |
-
previewUrl = settings.baseUrl + '?happyformsNewForm'
|
25 |
-
}
|
26 |
|
27 |
-
|
28 |
},
|
29 |
|
30 |
isNew: function() {
|
@@ -80,6 +74,25 @@
|
|
80 |
if ( ! this.id ) {
|
81 |
this.set( 'id', _.uniqueId( this.get( 'type' ) + '_' ) );
|
82 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
83 |
}
|
84 |
} );
|
85 |
|
@@ -118,20 +131,24 @@
|
|
118 |
initialize: function( options ) {
|
119 |
Backbone.Router.prototype.initialize( this, arguments );
|
120 |
|
|
|
|
|
|
|
|
|
121 |
this.parts = new Backbone.Collection();
|
122 |
this.parts.reset( _( settings.formParts ).values() );
|
123 |
-
this.form = new classes.models.Form(
|
124 |
this.actions = new classes.views.Actions( { model: this.form } ).render();
|
125 |
this.sidebar = new classes.views.Sidebar( { model: this.form } ).render();
|
126 |
|
127 |
-
|
128 |
-
|
129 |
},
|
130 |
|
131 |
flushBuffer: function() {
|
132 |
if ( this.buffer.length > 0 ) {
|
133 |
_.each( this.buffer, function( response ) {
|
134 |
-
api.previewer.
|
135 |
} );
|
136 |
|
137 |
this.buffer = [];
|
@@ -201,32 +218,6 @@
|
|
201 |
// noop
|
202 |
},
|
203 |
|
204 |
-
onPreviewPencilClick: function( data ) {
|
205 |
-
if ( ! data.step || data.step !== 'build' ) {
|
206 |
-
happyForms.navigate( 'setup', { trigger: true } );
|
207 |
-
|
208 |
-
var $input = $( '[data-attribute='+ data.field_name + ']' );
|
209 |
-
|
210 |
-
$input.focus();
|
211 |
-
} else {
|
212 |
-
happyForms.navigate( 'build', { trigger: true } );
|
213 |
-
|
214 |
-
if (data.part_id) {
|
215 |
-
var $partWidget = $( '[data-part-id="' + data.part_id + '"]' );
|
216 |
-
|
217 |
-
if ( ! $partWidget.hasClass( 'happyforms-widget-expanded' ) ) {
|
218 |
-
$partWidget.find( '.toggle-indicator' ).click();
|
219 |
-
}
|
220 |
-
|
221 |
-
$partWidget.find( 'input[data-bind=label]' ).focus();
|
222 |
-
} else {
|
223 |
-
var $input = $('[name='+ data.field_name +']');
|
224 |
-
|
225 |
-
$input.focus();
|
226 |
-
}
|
227 |
-
}
|
228 |
-
},
|
229 |
-
|
230 |
} );
|
231 |
|
232 |
classes.views.Base = Backbone.View.extend( {
|
@@ -445,6 +436,7 @@
|
|
445 |
this.partViews = new Backbone.Collection();
|
446 |
|
447 |
this.listenTo( happyForms, 'part-add', this.onPartAdd );
|
|
|
448 |
this.listenTo( this.model.get( 'parts' ), 'add', this.onPartModelAdd );
|
449 |
this.listenTo( this.model.get( 'parts' ), 'remove', this.onPartModelRemove );
|
450 |
this.listenTo( this.model.get( 'parts' ), 'change', this.onPartModelChange );
|
@@ -488,17 +480,9 @@
|
|
488 |
onNameChange: function( e ) {
|
489 |
e.preventDefault();
|
490 |
|
491 |
-
var
|
492 |
-
var value = $el.val();
|
493 |
-
|
494 |
this.model.set( 'post_title', value );
|
495 |
-
|
496 |
-
if (happyForms.previewLoaded) {
|
497 |
-
api.previewer.trigger( 'happyforms-part-dom-update', {
|
498 |
-
selector: '.happyforms-form__title .title',
|
499 |
-
text: value
|
500 |
-
} );
|
501 |
-
}
|
502 |
},
|
503 |
|
504 |
onExpandCollapseAllClick: function(e) {
|
@@ -539,29 +523,35 @@
|
|
539 |
this.model.get( 'parts' ).add( partModel, options );
|
540 |
this.model.trigger( 'change', this.model );
|
541 |
|
542 |
-
|
543 |
-
|
544 |
-
|
545 |
-
|
546 |
-
|
547 |
-
|
548 |
} );
|
|
|
549 |
|
550 |
-
|
551 |
-
|
552 |
-
|
553 |
-
|
|
|
|
|
|
|
|
|
|
|
554 |
|
555 |
-
|
556 |
-
|
|
|
|
|
|
|
|
|
557 |
} else {
|
558 |
happyForms.buffer.push( response );
|
559 |
}
|
560 |
} );
|
561 |
-
|
562 |
-
request.fail( function( response ) {
|
563 |
-
// noop
|
564 |
-
} );
|
565 |
},
|
566 |
|
567 |
onPartModelAdd: function( partModel, partsCollection, options ) {
|
@@ -577,11 +567,8 @@
|
|
577 |
|
578 |
this.partViews.remove( partViewModel );
|
579 |
|
580 |
-
if (happyForms.
|
581 |
-
api.previewer.
|
582 |
-
form_id: this.model.id,
|
583 |
-
part_id: partModel.id,
|
584 |
-
} );
|
585 |
}
|
586 |
},
|
587 |
|
@@ -593,15 +580,10 @@
|
|
593 |
this.partViews.reset( _.map( this.model.get( 'parts' ).pluck( 'id' ), function( id ) {
|
594 |
return this.partViews.get( id );
|
595 |
}, this ) );
|
596 |
-
|
597 |
this.model.trigger( 'change' );
|
598 |
|
599 |
-
|
600 |
-
|
601 |
-
form_id: this.model.id,
|
602 |
-
part_ids: this.model.get( 'parts' ).pluck( 'id' ),
|
603 |
-
} );
|
604 |
-
}
|
605 |
},
|
606 |
|
607 |
addViewPart: function( partModel, options ) {
|
@@ -618,14 +600,20 @@
|
|
618 |
view: partView,
|
619 |
} );
|
620 |
|
621 |
-
this.partViews.add( partViewModel );
|
622 |
},
|
623 |
|
624 |
-
onPartViewAdd: function( viewModel ) {
|
625 |
var partView = viewModel.get( 'view' );
|
626 |
$( '.happyforms-form-widgets', this.$el ).append( partView.render().$el );
|
627 |
partView.trigger( 'ready' );
|
628 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
629 |
this.showExpandCollapseButton();
|
630 |
},
|
631 |
|
@@ -728,10 +716,13 @@
|
|
728 |
} );
|
729 |
|
730 |
classes.views.Part = classes.views.Base.extend( {
|
|
|
|
|
731 |
events: {
|
732 |
'click .toggle-indicator': 'onWidgetToggle',
|
733 |
'click .happyforms-form-part-close': 'onWidgetToggle',
|
734 |
'click .happyforms-form-part-remove': 'onPartRemoveClick',
|
|
|
735 |
'keyup [data-bind]': 'onInputChange',
|
736 |
'change [data-bind]': 'onInputChange',
|
737 |
'mouseover': 'onMouseOver',
|
@@ -744,16 +735,19 @@
|
|
744 |
this.settings = options.settings;
|
745 |
|
746 |
// listen to changes in common settings
|
747 |
-
this.listenTo(this.model, 'change:label', this.onPartLabelChange);
|
748 |
-
this.listenTo(this.model, 'change:width', this.onPartWidthChange);
|
749 |
-
this.listenTo(this.model, 'change:required', this.onRequiredCheckboxChange);
|
750 |
-
this.listenTo(this.model, 'change:placeholder', this.onPlaceholderChange);
|
751 |
-
this.listenTo(this.model, 'change:description', this.onDescriptionChange);
|
752 |
-
this.listenTo(this.model, 'change:tooltip_description', this.onTooltipDescriptionChange);
|
753 |
-
this.listenTo(this.model, 'change:label_placement', this.onLabelPlacementChange);
|
754 |
-
|
755 |
-
this.listenTo(this, '
|
756 |
-
this.listenTo(this, '
|
|
|
|
|
|
|
757 |
|
758 |
if ( options.expand ) {
|
759 |
this.listenTo( this, 'ready', this.expandToggle );
|
@@ -777,9 +771,12 @@
|
|
777 |
* @return void
|
778 |
*/
|
779 |
onMouseOver: function() {
|
780 |
-
|
781 |
-
|
782 |
-
|
|
|
|
|
|
|
783 |
},
|
784 |
|
785 |
/**
|
@@ -790,9 +787,12 @@
|
|
790 |
* @return void
|
791 |
*/
|
792 |
onMouseOut: function() {
|
793 |
-
|
794 |
-
|
795 |
-
|
|
|
|
|
|
|
796 |
},
|
797 |
|
798 |
/**
|
@@ -803,13 +803,12 @@
|
|
803 |
* @return void
|
804 |
*/
|
805 |
onPartLabelChange: function() {
|
806 |
-
var
|
807 |
-
|
808 |
-
|
809 |
-
text: this.model.get( 'label' )
|
810 |
};
|
811 |
|
812 |
-
api.previewer.
|
813 |
},
|
814 |
|
815 |
/**
|
@@ -819,30 +818,13 @@
|
|
819 |
*
|
820 |
* @return void
|
821 |
*/
|
822 |
-
onPartWidthChange: function(model, value, options) {
|
823 |
-
var
|
824 |
-
|
825 |
-
|
826 |
-
|
827 |
-
if ($select.val() !== width) {
|
828 |
-
$select.val(width);
|
829 |
-
}
|
830 |
-
|
831 |
-
if (!options.skipGlobalReveal) {
|
832 |
-
var $globalWrap = this.$el.find('.width-options');
|
833 |
-
// reset global checkbox
|
834 |
-
$globalWrap.find('input').prop('checked', false);
|
835 |
-
// fade in the global checkbox wrapper
|
836 |
-
$globalWrap.fadeIn();
|
837 |
-
}
|
838 |
-
|
839 |
-
var eventData = {
|
840 |
-
part_id: this.model.id,
|
841 |
-
selector: 'self',
|
842 |
-
width: width
|
843 |
};
|
844 |
|
845 |
-
api.previewer.
|
846 |
},
|
847 |
|
848 |
/**
|
@@ -853,21 +835,12 @@
|
|
853 |
* @return void
|
854 |
*/
|
855 |
onRequiredCheckboxChange: function() {
|
856 |
-
var
|
857 |
-
|
858 |
-
|
859 |
-
part_id: this.model.id,
|
860 |
-
selector: '.happyforms-required',
|
861 |
-
attributes: {}
|
862 |
};
|
863 |
|
864 |
-
|
865 |
-
eventData.attributes.style = 'display: inline';
|
866 |
-
} else {
|
867 |
-
eventData.attributes.style = 'display: none';
|
868 |
-
}
|
869 |
-
|
870 |
-
api.previewer.trigger( 'happyforms-part-dom-update', eventData );
|
871 |
},
|
872 |
|
873 |
/**
|
@@ -887,9 +860,9 @@
|
|
887 |
|
888 |
/**
|
889 |
* Expand part view.
|
890 |
-
*
|
891 |
* @since 1.1.0.
|
892 |
-
*
|
893 |
* @return void
|
894 |
*/
|
895 |
expand: function() {
|
@@ -902,9 +875,9 @@
|
|
902 |
|
903 |
/**
|
904 |
* Collapse part view.
|
905 |
-
*
|
906 |
* @since 1.1.0.
|
907 |
-
*
|
908 |
* @return void
|
909 |
*/
|
910 |
collapse: function() {
|
@@ -914,7 +887,7 @@
|
|
914 |
$el.removeClass('happyforms-widget-expanded');
|
915 |
});
|
916 |
},
|
917 |
-
|
918 |
/**
|
919 |
* Call expandToggle method on toggle indicator click or 'Close' button click of the part view in Customize pane.
|
920 |
*
|
@@ -940,6 +913,15 @@
|
|
940 |
this.model.collection.remove( this.model );
|
941 |
},
|
942 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
943 |
/**
|
944 |
* Update model with the changed data. Triggered on change event of inputs in the part view.
|
945 |
*
|
@@ -952,8 +934,19 @@
|
|
952 |
var value = $el.val();
|
953 |
var attribute = $el.data( 'bind' );
|
954 |
|
955 |
-
if (
|
956 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
957 |
value = 1;
|
958 |
} else {
|
959 |
value = 0;
|
@@ -971,15 +964,12 @@
|
|
971 |
* @return void
|
972 |
*/
|
973 |
onPlaceholderChange: function() {
|
974 |
-
var
|
975 |
-
|
976 |
-
|
977 |
-
attributes: {
|
978 |
-
'placeholder': this.model.get('placeholder')
|
979 |
-
}
|
980 |
};
|
981 |
|
982 |
-
api.previewer.
|
983 |
},
|
984 |
|
985 |
/**
|
@@ -989,20 +979,20 @@
|
|
989 |
*
|
990 |
* @return void
|
991 |
*/
|
992 |
-
onDescriptionChange: function() {
|
993 |
-
|
994 |
-
this
|
|
|
|
|
|
|
|
|
|
|
995 |
} else {
|
996 |
-
|
|
|
997 |
}
|
998 |
|
999 |
-
|
1000 |
-
part_id: this.model.id,
|
1001 |
-
selector: '.happyforms-part__description',
|
1002 |
-
text: this.model.get('description')
|
1003 |
-
};
|
1004 |
-
|
1005 |
-
api.previewer.trigger('happyforms-part-dom-update', eventData);
|
1006 |
},
|
1007 |
|
1008 |
/**
|
@@ -1013,33 +1003,12 @@
|
|
1013 |
* @return void
|
1014 |
*/
|
1015 |
onTooltipDescriptionChange: function() {
|
1016 |
-
var
|
1017 |
-
|
1018 |
-
|
1019 |
-
if (this.model.get('tooltip_description') === 1) {
|
1020 |
-
tooltipDisplayValue = 'inline-block';
|
1021 |
-
descriptionDisplayValue = 'none';
|
1022 |
-
}
|
1023 |
-
|
1024 |
-
var descriptionEventData = {
|
1025 |
-
part_id: this.model.id,
|
1026 |
-
selector: '.happyforms-tooltip + .happyforms-part__description',
|
1027 |
-
css: {
|
1028 |
-
display: descriptionDisplayValue
|
1029 |
-
}
|
1030 |
-
};
|
1031 |
-
|
1032 |
-
api.previewer.trigger('happyforms-part-dom-update', descriptionEventData);
|
1033 |
-
|
1034 |
-
var tooltipEventData = {
|
1035 |
-
part_id: this.model.id,
|
1036 |
-
selector: '.happyforms-part__tooltip',
|
1037 |
-
css: {
|
1038 |
-
display: tooltipDisplayValue
|
1039 |
-
}
|
1040 |
};
|
1041 |
|
1042 |
-
api.previewer.
|
1043 |
},
|
1044 |
|
1045 |
/**
|
@@ -1049,39 +1018,36 @@
|
|
1049 |
*
|
1050 |
* @return void
|
1051 |
*/
|
1052 |
-
onLabelPlacementChange: function(model, value, options) {
|
1053 |
-
var $select =
|
|
|
1054 |
|
1055 |
-
if (
|
1056 |
-
$
|
1057 |
-
}
|
1058 |
-
|
1059 |
-
if (!options.skipGlobalReveal) {
|
1060 |
-
var $globalWrap = this.$el.find('.label_placement-options');
|
1061 |
// reset global checkbox
|
1062 |
-
|
1063 |
// fade in the global checkbox wrapper
|
1064 |
$globalWrap.fadeIn();
|
1065 |
}
|
1066 |
|
1067 |
-
|
1068 |
-
|
1069 |
-
|
1070 |
-
|
1071 |
-
|
1072 |
-
var removalData = _.extend(eventData, {
|
1073 |
-
classes: 'happyforms-part--label-above happyforms-part--label-below happyforms-part--label-left happyforms-part--label-right',
|
1074 |
-
classMethod: 'remove'
|
1075 |
-
});
|
1076 |
|
1077 |
-
|
|
|
|
|
1078 |
|
1079 |
-
|
1080 |
-
|
1081 |
-
|
1082 |
-
|
|
|
|
|
1083 |
|
1084 |
-
api.previewer.
|
1085 |
},
|
1086 |
|
1087 |
applyOptionGlobally: function(e) {
|
@@ -1099,6 +1065,18 @@
|
|
1099 |
}
|
1100 |
}
|
1101 |
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1102 |
}
|
1103 |
} );
|
1104 |
|
@@ -1120,6 +1098,8 @@
|
|
1120 |
|
1121 |
initialize: function() {
|
1122 |
classes.views.Base.prototype.initialize.apply( this, arguments );
|
|
|
|
|
1123 |
},
|
1124 |
|
1125 |
render: function() {
|
@@ -1162,7 +1142,6 @@
|
|
1162 |
},
|
1163 |
open: function( e, ui ) {
|
1164 |
ui.pointer.css( 'margin-left', '-1px' );
|
1165 |
-
|
1166 |
},
|
1167 |
close: function( e, ui ) {
|
1168 |
ui.pointer.css( 'margin-left', '0' );
|
@@ -1198,7 +1177,7 @@
|
|
1198 |
this.model.set( attribute, value );
|
1199 |
|
1200 |
if ( $el.data( 'preview-selector' ) && happyForms.previewLoaded ) {
|
1201 |
-
api.previewer.
|
1202 |
selector: $el.data( 'preview-selector' ),
|
1203 |
text: value,
|
1204 |
} );
|
@@ -1225,6 +1204,16 @@
|
|
1225 |
}
|
1226 |
},
|
1227 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1228 |
remove: function() {
|
1229 |
_.each( this.editorIds, function( editorId ) {
|
1230 |
wp.editor.remove( editorId );
|
@@ -1240,12 +1229,17 @@
|
|
1240 |
events: {
|
1241 |
'click h3.accordion-section-title': 'onGroupClick',
|
1242 |
'click .customize-panel-back': 'onGroupBackClick',
|
1243 |
-
'change input[type=checkbox]': 'onCheckboxChange',
|
1244 |
-
'keyup #hf_style_required_text': 'onRequiredTextChange',
|
1245 |
-
'change #hf_style_disable_button_until_required_filled': 'onDisableButtonChange',
|
1246 |
-
'change .happyforms-buttonset-container input': 'onInputChange',
|
1247 |
-
'change input[type=number]': 'onInputChange',
|
1248 |
-
'change
|
|
|
|
|
|
|
|
|
|
|
1249 |
},
|
1250 |
|
1251 |
initialize: function() {
|
@@ -1265,26 +1259,89 @@
|
|
1265 |
this.initButtonSet();
|
1266 |
},
|
1267 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1268 |
onGroupClick: function( e ) {
|
1269 |
e.preventDefault();
|
1270 |
|
1271 |
-
$( '.happyforms-style-controls-group', this.$el ).
|
1272 |
|
1273 |
-
$(
|
|
|
|
|
1274 |
|
1275 |
-
$(
|
1276 |
-
left: '-300px',
|
1277 |
-
}, 200 );
|
1278 |
},
|
1279 |
|
1280 |
onGroupBackClick: function( e ) {
|
1281 |
e.preventDefault();
|
1282 |
|
1283 |
-
$( '.happyforms-
|
1284 |
-
|
1285 |
-
|
1286 |
-
|
1287 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
1288 |
},
|
1289 |
|
1290 |
initButtonSet: function() {
|
@@ -1296,15 +1353,21 @@
|
|
1296 |
var $colorInputs = $( '.happyforms-color-input', this.$el );
|
1297 |
|
1298 |
$colorInputs.each( function( index, el ) {
|
|
|
|
|
|
|
1299 |
$( el ).wpColorPicker( {
|
1300 |
change: function( e, ui ) {
|
1301 |
-
var
|
1302 |
|
1303 |
-
self.model.set( $this.attr( 'data-attribute' ),
|
1304 |
|
1305 |
-
|
1306 |
-
|
1307 |
-
|
|
|
|
|
|
|
1308 |
}
|
1309 |
} );
|
1310 |
|
@@ -1315,10 +1378,6 @@
|
|
1315 |
var value = $( el ).attr( 'data-default' );
|
1316 |
|
1317 |
self.model.set( attribute, value );
|
1318 |
-
|
1319 |
-
if (happyForms.previewLoaded) {
|
1320 |
-
api.previewer.trigger( 'happyforms-style-update', self.model );
|
1321 |
-
}
|
1322 |
} );
|
1323 |
} );
|
1324 |
},
|
@@ -1327,8 +1386,13 @@
|
|
1327 |
var self = this;
|
1328 |
var $container = this.$el.find( '.happyforms-range-control' );
|
1329 |
|
1330 |
-
$container.each(
|
1331 |
-
var $this = $(
|
|
|
|
|
|
|
|
|
|
|
1332 |
var $slider = $( '.happyforms-range-slider', $this );
|
1333 |
var $sliderInput = $( 'input', $this );
|
1334 |
|
@@ -1347,9 +1411,12 @@
|
|
1347 |
$sliderInput.val( ui.value );
|
1348 |
self.model.set( $sliderInput.attr( 'data-attribute' ), ui.value );
|
1349 |
|
1350 |
-
|
1351 |
-
|
1352 |
-
|
|
|
|
|
|
|
1353 |
}
|
1354 |
} );
|
1355 |
} );
|
@@ -1362,7 +1429,7 @@
|
|
1362 |
this.model.set( $el.attr( 'data-attribute' ), value );
|
1363 |
|
1364 |
if (happyForms.previewLoaded) {
|
1365 |
-
api.previewer.
|
1366 |
}
|
1367 |
},
|
1368 |
|
@@ -1385,7 +1452,7 @@
|
|
1385 |
eventData.attributes = 'disabled';
|
1386 |
}
|
1387 |
|
1388 |
-
api.previewer.
|
1389 |
}
|
1390 |
},
|
1391 |
|
@@ -1398,7 +1465,7 @@
|
|
1398 |
};
|
1399 |
|
1400 |
this.model.set( $el.attr( 'data-attribute' ), value );
|
1401 |
-
api.previewer.
|
1402 |
},
|
1403 |
|
1404 |
onInputChange: function( e ) {
|
@@ -1408,7 +1475,7 @@
|
|
1408 |
this.model.set( $el.attr('data-attribute'), value );
|
1409 |
|
1410 |
if ( happyForms.previewLoaded ) {
|
1411 |
-
api.previewer.
|
1412 |
}
|
1413 |
}
|
1414 |
} );
|
@@ -1432,17 +1499,194 @@
|
|
1432 |
},
|
1433 |
} );
|
1434 |
|
1435 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1436 |
happyForms.classes = classes;
|
1437 |
happyForms.factory = PartFactory;
|
|
|
1438 |
|
1439 |
api.bind( 'ready', function() {
|
1440 |
-
|
1441 |
-
|
|
|
1442 |
|
1443 |
-
api.previewer.bind( '
|
1444 |
-
happyForms.previewLoaded = true;
|
1445 |
happyForms.flushBuffer();
|
|
|
1446 |
} );
|
1447 |
} );
|
1448 |
|
9 |
|
10 |
classes.models.Form = Backbone.Model.extend( {
|
11 |
idAttribute: 'ID',
|
|
|
12 |
defaults: settings.form,
|
13 |
|
14 |
getPreviewUrl: function() {
|
15 |
+
var previewUrl =
|
16 |
+
settings.baseUrl +
|
17 |
+
'?post_type=' + this.get( 'post_type' ) +
|
18 |
+
'&p=' + this.id +
|
19 |
+
'&preview=true';
|
|
|
|
|
|
|
|
|
|
|
20 |
|
21 |
+
return previewUrl;
|
22 |
},
|
23 |
|
24 |
isNew: function() {
|
74 |
if ( ! this.id ) {
|
75 |
this.set( 'id', _.uniqueId( this.get( 'type' ) + '_' ) );
|
76 |
}
|
77 |
+
},
|
78 |
+
|
79 |
+
fetchHtml: function( success ) {
|
80 |
+
var data = {
|
81 |
+
action: 'happyforms-form-part-add',
|
82 |
+
'happyforms-nonce': api.settings.nonce.happyforms,
|
83 |
+
happyforms: 1,
|
84 |
+
wp_customize: 'on',
|
85 |
+
form_id: happyForms.form.id,
|
86 |
+
part: this.toJSON(),
|
87 |
+
};
|
88 |
+
|
89 |
+
var request = $.ajax( ajaxurl, {
|
90 |
+
type: 'post',
|
91 |
+
dataType: 'html',
|
92 |
+
data: data
|
93 |
+
} );
|
94 |
+
|
95 |
+
request.done( success );
|
96 |
}
|
97 |
} );
|
98 |
|
131 |
initialize: function( options ) {
|
132 |
Backbone.Router.prototype.initialize( this, arguments );
|
133 |
|
134 |
+
this.listenTo( this, 'route', this.onRoute );
|
135 |
+
},
|
136 |
+
|
137 |
+
start: function( options ) {
|
138 |
this.parts = new Backbone.Collection();
|
139 |
this.parts.reset( _( settings.formParts ).values() );
|
140 |
+
this.form = new classes.models.Form( settings.form, { silent: true } );
|
141 |
this.actions = new classes.views.Actions( { model: this.form } ).render();
|
142 |
this.sidebar = new classes.views.Sidebar( { model: this.form } ).render();
|
143 |
|
144 |
+
Backbone.history.start();
|
145 |
+
api.previewer.previewUrl( this.form.getPreviewUrl() );
|
146 |
},
|
147 |
|
148 |
flushBuffer: function() {
|
149 |
if ( this.buffer.length > 0 ) {
|
150 |
_.each( this.buffer, function( response ) {
|
151 |
+
api.previewer.send( 'happyforms-form-part-add', response );
|
152 |
} );
|
153 |
|
154 |
this.buffer = [];
|
218 |
// noop
|
219 |
},
|
220 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
221 |
} );
|
222 |
|
223 |
classes.views.Base = Backbone.View.extend( {
|
436 |
this.partViews = new Backbone.Collection();
|
437 |
|
438 |
this.listenTo( happyForms, 'part-add', this.onPartAdd );
|
439 |
+
this.listenTo( happyForms, 'part-duplicate', this.onPartDuplicate );
|
440 |
this.listenTo( this.model.get( 'parts' ), 'add', this.onPartModelAdd );
|
441 |
this.listenTo( this.model.get( 'parts' ), 'remove', this.onPartModelRemove );
|
442 |
this.listenTo( this.model.get( 'parts' ), 'change', this.onPartModelChange );
|
480 |
onNameChange: function( e ) {
|
481 |
e.preventDefault();
|
482 |
|
483 |
+
var value = $( e.target ).val();
|
|
|
|
|
484 |
this.model.set( 'post_title', value );
|
485 |
+
api.previewer.send( 'happyforms-form-title-update', value );
|
|
|
|
|
|
|
|
|
|
|
|
|
486 |
},
|
487 |
|
488 |
onExpandCollapseAllClick: function(e) {
|
523 |
this.model.get( 'parts' ).add( partModel, options );
|
524 |
this.model.trigger( 'change', this.model );
|
525 |
|
526 |
+
partModel.fetchHtml( function( response ) {
|
527 |
+
if ( happyForms.previewer.ready ) {
|
528 |
+
api.previewer.send( 'happyforms-form-part-add', response );
|
529 |
+
} else {
|
530 |
+
happyForms.buffer.push( response );
|
531 |
+
}
|
532 |
} );
|
533 |
+
},
|
534 |
|
535 |
+
onPartDuplicate: function( part, options ) {
|
536 |
+
var attrs = part.toJSON();
|
537 |
+
delete attrs.id;
|
538 |
+
attrs.label += ' (Copy)';
|
539 |
+
|
540 |
+
var duplicate = PartFactory.model(
|
541 |
+
attrs,
|
542 |
+
{ collection: this.model.get( 'parts' ) },
|
543 |
+
);
|
544 |
|
545 |
+
this.model.get( 'parts' ).add( duplicate, options );
|
546 |
+
this.model.trigger( 'change', this.model );
|
547 |
+
|
548 |
+
duplicate.fetchHtml( function( response ) {
|
549 |
+
if ( happyForms.previewer.ready ) {
|
550 |
+
api.previewer.send( 'happyforms-form-part-add', response );
|
551 |
} else {
|
552 |
happyForms.buffer.push( response );
|
553 |
}
|
554 |
} );
|
|
|
|
|
|
|
|
|
555 |
},
|
556 |
|
557 |
onPartModelAdd: function( partModel, partsCollection, options ) {
|
567 |
|
568 |
this.partViews.remove( partViewModel );
|
569 |
|
570 |
+
if ( happyForms.previewer.ready ) {
|
571 |
+
api.previewer.send( 'happyforms-form-part-remove', partModel.id );
|
|
|
|
|
|
|
572 |
}
|
573 |
},
|
574 |
|
580 |
this.partViews.reset( _.map( this.model.get( 'parts' ).pluck( 'id' ), function( id ) {
|
581 |
return this.partViews.get( id );
|
582 |
}, this ) );
|
|
|
583 |
this.model.trigger( 'change' );
|
584 |
|
585 |
+
var ids = this.model.get( 'parts' ).pluck( 'id' );
|
586 |
+
api.previewer.send( 'happyforms-form-parts-sort', ids );
|
|
|
|
|
|
|
|
|
587 |
},
|
588 |
|
589 |
addViewPart: function( partModel, options ) {
|
600 |
view: partView,
|
601 |
} );
|
602 |
|
603 |
+
this.partViews.add( partViewModel, options );
|
604 |
},
|
605 |
|
606 |
+
onPartViewAdd: function( viewModel, collection, options ) {
|
607 |
var partView = viewModel.get( 'view' );
|
608 |
$( '.happyforms-form-widgets', this.$el ).append( partView.render().$el );
|
609 |
partView.trigger( 'ready' );
|
610 |
+
|
611 |
+
if ( options.scrollto ) {
|
612 |
+
this.$el.parent().animate( {
|
613 |
+
scrollTop: partView.$el.position().top
|
614 |
+
}, 400 );
|
615 |
+
}
|
616 |
+
|
617 |
this.showExpandCollapseButton();
|
618 |
},
|
619 |
|
716 |
} );
|
717 |
|
718 |
classes.views.Part = classes.views.Base.extend( {
|
719 |
+
$: $,
|
720 |
+
|
721 |
events: {
|
722 |
'click .toggle-indicator': 'onWidgetToggle',
|
723 |
'click .happyforms-form-part-close': 'onWidgetToggle',
|
724 |
'click .happyforms-form-part-remove': 'onPartRemoveClick',
|
725 |
+
'click .happyforms-form-part-duplicate': 'onPartDuplicateClick',
|
726 |
'keyup [data-bind]': 'onInputChange',
|
727 |
'change [data-bind]': 'onInputChange',
|
728 |
'mouseover': 'onMouseOver',
|
735 |
this.settings = options.settings;
|
736 |
|
737 |
// listen to changes in common settings
|
738 |
+
this.listenTo( this.model, 'change:label', this.onPartLabelChange );
|
739 |
+
this.listenTo( this.model, 'change:width', this.onPartWidthChange );
|
740 |
+
this.listenTo( this.model, 'change:required', this.onRequiredCheckboxChange );
|
741 |
+
this.listenTo( this.model, 'change:placeholder', this.onPlaceholderChange );
|
742 |
+
this.listenTo( this.model, 'change:description', this.onDescriptionChange );
|
743 |
+
this.listenTo( this.model, 'change:tooltip_description', this.onTooltipDescriptionChange );
|
744 |
+
this.listenTo( this.model, 'change:label_placement', this.onLabelPlacementChange );
|
745 |
+
this.listenTo( this.model, 'change:css_class', this.onCSSClassChange );
|
746 |
+
this.listenTo( this, 'reveal-tooltip-checkbox', this.onRevealTooltipCheckbox );
|
747 |
+
this.listenTo( this, 'conceal-tooltip-checkbox', this.onConcealTooltipCheckbox );
|
748 |
+
|
749 |
+
this.listenTo( this, 'widget-expand', this.expand );
|
750 |
+
this.listenTo( this, 'widget-collapse', this.collapse );
|
751 |
|
752 |
if ( options.expand ) {
|
753 |
this.listenTo( this, 'ready', this.expandToggle );
|
771 |
* @return void
|
772 |
*/
|
773 |
onMouseOver: function() {
|
774 |
+
var data = {
|
775 |
+
id: this.model.id,
|
776 |
+
callback: 'onPartMouseOverCallback',
|
777 |
+
};
|
778 |
+
|
779 |
+
api.previewer.send( 'happyforms-part-dom-update', data );
|
780 |
},
|
781 |
|
782 |
/**
|
787 |
* @return void
|
788 |
*/
|
789 |
onMouseOut: function() {
|
790 |
+
var data = {
|
791 |
+
id: this.model.id,
|
792 |
+
callback: 'onPartMouseOutCallback',
|
793 |
+
};
|
794 |
+
|
795 |
+
api.previewer.send( 'happyforms-part-dom-update', data );
|
796 |
},
|
797 |
|
798 |
/**
|
803 |
* @return void
|
804 |
*/
|
805 |
onPartLabelChange: function() {
|
806 |
+
var data = {
|
807 |
+
id: this.model.id,
|
808 |
+
callback: 'onPartLabelChangeCallback',
|
|
|
809 |
};
|
810 |
|
811 |
+
api.previewer.send( 'happyforms-part-dom-update', data );
|
812 |
},
|
813 |
|
814 |
/**
|
818 |
*
|
819 |
* @return void
|
820 |
*/
|
821 |
+
onPartWidthChange: function( model, value, options ) {
|
822 |
+
var data = {
|
823 |
+
id: this.model.id,
|
824 |
+
callback: 'onPartWidthChangeCallback',
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
825 |
};
|
826 |
|
827 |
+
api.previewer.send( 'happyforms-part-dom-update', data );
|
828 |
},
|
829 |
|
830 |
/**
|
835 |
* @return void
|
836 |
*/
|
837 |
onRequiredCheckboxChange: function() {
|
838 |
+
var data = {
|
839 |
+
id: this.model.id,
|
840 |
+
callback: 'onRequiredCheckboxChangeCallback',
|
|
|
|
|
|
|
841 |
};
|
842 |
|
843 |
+
api.previewer.send( 'happyforms-part-dom-update', data );
|
|
|
|
|
|
|
|
|
|
|
|
|
844 |
},
|
845 |
|
846 |
/**
|
860 |
|
861 |
/**
|
862 |
* Expand part view.
|
863 |
+
*
|
864 |
* @since 1.1.0.
|
865 |
+
*
|
866 |
* @return void
|
867 |
*/
|
868 |
expand: function() {
|
875 |
|
876 |
/**
|
877 |
* Collapse part view.
|
878 |
+
*
|
879 |
* @since 1.1.0.
|
880 |
+
*
|
881 |
* @return void
|
882 |
*/
|
883 |
collapse: function() {
|
887 |
$el.removeClass('happyforms-widget-expanded');
|
888 |
});
|
889 |
},
|
890 |
+
|
891 |
/**
|
892 |
* Call expandToggle method on toggle indicator click or 'Close' button click of the part view in Customize pane.
|
893 |
*
|
913 |
this.model.collection.remove( this.model );
|
914 |
},
|
915 |
|
916 |
+
onPartDuplicateClick: function( e ) {
|
917 |
+
e.preventDefault();
|
918 |
+
|
919 |
+
happyForms.trigger( 'part-duplicate', this.model, {
|
920 |
+
expand: true,
|
921 |
+
scrollto: true,
|
922 |
+
} );
|
923 |
+
},
|
924 |
+
|
925 |
/**
|
926 |
* Update model with the changed data. Triggered on change event of inputs in the part view.
|
927 |
*
|
934 |
var value = $el.val();
|
935 |
var attribute = $el.data( 'bind' );
|
936 |
|
937 |
+
if ( 'label' === attribute ) {
|
938 |
+
var $inWidgetTitle = this.$el.find('.in-widget-title');
|
939 |
+
$inWidgetTitle.find('span').text(value);
|
940 |
+
|
941 |
+
if ( value ) {
|
942 |
+
$inWidgetTitle.show();
|
943 |
+
} else {
|
944 |
+
$inWidgetTitle.hide();
|
945 |
+
}
|
946 |
+
}
|
947 |
+
|
948 |
+
if ( $el.is(':checkbox') ) {
|
949 |
+
if ( $el.is(':checked') ) {
|
950 |
value = 1;
|
951 |
} else {
|
952 |
value = 0;
|
964 |
* @return void
|
965 |
*/
|
966 |
onPlaceholderChange: function() {
|
967 |
+
var data = {
|
968 |
+
id: this.model.id,
|
969 |
+
callback: 'onPlaceholderChangeCallback',
|
|
|
|
|
|
|
970 |
};
|
971 |
|
972 |
+
api.previewer.send( 'happyforms-part-dom-update', data );
|
973 |
},
|
974 |
|
975 |
/**
|
979 |
*
|
980 |
* @return void
|
981 |
*/
|
982 |
+
onDescriptionChange: function( model, value ) {
|
983 |
+
var data = {
|
984 |
+
id: this.model.id,
|
985 |
+
callback: 'onDescriptionChangeCallback',
|
986 |
+
};
|
987 |
+
|
988 |
+
if ( value ) {
|
989 |
+
this.trigger('reveal-tooltip-checkbox');
|
990 |
} else {
|
991 |
+
model.set('tooltip_description', 0);
|
992 |
+
this.trigger('conceal-tooltip-checkbox');
|
993 |
}
|
994 |
|
995 |
+
api.previewer.send( 'happyforms-part-dom-update', data );
|
|
|
|
|
|
|
|
|
|
|
|
|
996 |
},
|
997 |
|
998 |
/**
|
1003 |
* @return void
|
1004 |
*/
|
1005 |
onTooltipDescriptionChange: function() {
|
1006 |
+
var data = {
|
1007 |
+
id: this.model.id,
|
1008 |
+
callback: 'onTooltipDescriptionChangeCallback',
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1009 |
};
|
1010 |
|
1011 |
+
api.previewer.send( 'happyforms-part-dom-update', data );
|
1012 |
},
|
1013 |
|
1014 |
/**
|
1018 |
*
|
1019 |
* @return void
|
1020 |
*/
|
1021 |
+
onLabelPlacementChange: function( model, value, options ) {
|
1022 |
+
var $select = $( '[data-bind=label_placement]', this.$el );
|
1023 |
+
$select.val( this.model.get( 'label_placement' ) );
|
1024 |
|
1025 |
+
if ( ! options.skipGlobalReveal ) {
|
1026 |
+
var $globalWrap = this.$( '.label_placement-options', this.$el );
|
|
|
|
|
|
|
|
|
1027 |
// reset global checkbox
|
1028 |
+
this.$( 'input', $globalWrap ).prop( 'checked', false );
|
1029 |
// fade in the global checkbox wrapper
|
1030 |
$globalWrap.fadeIn();
|
1031 |
}
|
1032 |
|
1033 |
+
this.model.fetchHtml( function( response ) {
|
1034 |
+
var data = {
|
1035 |
+
id: model.get( 'id' ),
|
1036 |
+
html: response,
|
1037 |
+
};
|
|
|
|
|
|
|
|
|
1038 |
|
1039 |
+
api.previewer.send( 'happyforms-form-part-refresh', data );
|
1040 |
+
} );
|
1041 |
+
},
|
1042 |
|
1043 |
+
onCSSClassChange: function( model, value, options ) {
|
1044 |
+
var data = {
|
1045 |
+
id: this.model.id,
|
1046 |
+
callback: 'onCSSClassChangeCallback',
|
1047 |
+
options: options,
|
1048 |
+
};
|
1049 |
|
1050 |
+
api.previewer.send( 'happyforms-part-dom-update', data );
|
1051 |
},
|
1052 |
|
1053 |
applyOptionGlobally: function(e) {
|
1065 |
}
|
1066 |
}
|
1067 |
});
|
1068 |
+
},
|
1069 |
+
|
1070 |
+
onRevealTooltipCheckbox: function() {
|
1071 |
+
this.$el.find('.tooltip-description-wrap').fadeIn();
|
1072 |
+
},
|
1073 |
+
|
1074 |
+
onConcealTooltipCheckbox: function() {
|
1075 |
+
var $descriptionWrap = this.$el.find('.tooltip-description-wrap');
|
1076 |
+
|
1077 |
+
$descriptionWrap.fadeOut(200, function() {
|
1078 |
+
$descriptionWrap.find('input').prop('checked', false);
|
1079 |
+
});
|
1080 |
}
|
1081 |
} );
|
1082 |
|
1098 |
|
1099 |
initialize: function() {
|
1100 |
classes.views.Base.prototype.initialize.apply( this, arguments );
|
1101 |
+
|
1102 |
+
this.listenTo( this.model, 'change:captcha', this.onChangeCaptcha );
|
1103 |
},
|
1104 |
|
1105 |
render: function() {
|
1142 |
},
|
1143 |
open: function( e, ui ) {
|
1144 |
ui.pointer.css( 'margin-left', '-1px' );
|
|
|
1145 |
},
|
1146 |
close: function( e, ui ) {
|
1147 |
ui.pointer.css( 'margin-left', '0' );
|
1177 |
this.model.set( attribute, value );
|
1178 |
|
1179 |
if ( $el.data( 'preview-selector' ) && happyForms.previewLoaded ) {
|
1180 |
+
api.previewer.send( 'happyforms-part-dom-update', {
|
1181 |
selector: $el.data( 'preview-selector' ),
|
1182 |
text: value,
|
1183 |
} );
|
1204 |
}
|
1205 |
},
|
1206 |
|
1207 |
+
onChangeCaptcha: function() {
|
1208 |
+
var $captchaSettings = $( '#happyforms-captcha-settings', this.$el );
|
1209 |
+
|
1210 |
+
if ( this.model.get( 'captcha' ) ) {
|
1211 |
+
$captchaSettings.show();
|
1212 |
+
} else {
|
1213 |
+
$captchaSettings.hide();
|
1214 |
+
}
|
1215 |
+
},
|
1216 |
+
|
1217 |
remove: function() {
|
1218 |
_.each( this.editorIds, function( editorId ) {
|
1219 |
wp.editor.remove( editorId );
|
1229 |
events: {
|
1230 |
'click h3.accordion-section-title': 'onGroupClick',
|
1231 |
'click .customize-panel-back': 'onGroupBackClick',
|
1232 |
+
// 'change input[type=checkbox]': 'onCheckboxChange',
|
1233 |
+
// 'keyup #hf_style_required_text': 'onRequiredTextChange',
|
1234 |
+
// 'change #hf_style_disable_button_until_required_filled': 'onDisableButtonChange',
|
1235 |
+
// 'change .happyforms-buttonset-container input': 'onInputChange',
|
1236 |
+
// 'change input[type=number]': 'onInputChange',
|
1237 |
+
// 'change input[type=text]': 'onInputChange',
|
1238 |
+
// 'change select': 'onInputChange'
|
1239 |
+
'change [data-target="form_class"] input': 'onFormClassChange',
|
1240 |
+
'change [data-target="form_class"] select': 'onFormClassChange',
|
1241 |
+
'change [data-target="form_class"] input[type="checkbox"]': 'onFormClassCheckboxChange',
|
1242 |
+
'change [data-target="css_var"] input[type=radio]': 'onButtonSetCssVarChange'
|
1243 |
},
|
1244 |
|
1245 |
initialize: function() {
|
1259 |
this.initButtonSet();
|
1260 |
},
|
1261 |
|
1262 |
+
onFormClassChange: function( e ) {
|
1263 |
+
e.preventDefault();
|
1264 |
+
|
1265 |
+
var $target = $( e.target );
|
1266 |
+
var attribute = $target.data( 'attribute' );
|
1267 |
+
var value = $target.val();
|
1268 |
+
|
1269 |
+
happyForms.form.set( attribute, value );
|
1270 |
+
|
1271 |
+
var data = {
|
1272 |
+
attribute: attribute,
|
1273 |
+
callback: 'onFormClassChangeCallback',
|
1274 |
+
};
|
1275 |
+
|
1276 |
+
api.previewer.send( 'happyforms-form-class-update', data );
|
1277 |
+
},
|
1278 |
+
|
1279 |
+
onFormClassCheckboxChange: function( e ) {
|
1280 |
+
e.preventDefault();
|
1281 |
+
|
1282 |
+
var $target = $( e.target );
|
1283 |
+
var attribute = $target.data( 'attribute' );
|
1284 |
+
var value = $target.val();
|
1285 |
+
|
1286 |
+
if ( $target.is(':checked') ) {
|
1287 |
+
happyForms.form.set( attribute, value );
|
1288 |
+
} else {
|
1289 |
+
happyForms.form.set( attribute, '' );
|
1290 |
+
}
|
1291 |
+
|
1292 |
+
var data = {
|
1293 |
+
attribute: attribute,
|
1294 |
+
callback: 'onFormClassToggleCallback'
|
1295 |
+
};
|
1296 |
+
|
1297 |
+
api.previewer.send( 'happyforms-form-class-update', data );
|
1298 |
+
},
|
1299 |
+
|
1300 |
+
onButtonSetCssVarChange: function (e) {
|
1301 |
+
e.preventDefault();
|
1302 |
+
|
1303 |
+
var $target = $(e.target);
|
1304 |
+
var attribute = $target.data('attribute');
|
1305 |
+
var variable = $target.parents('.happyforms-buttonset-control').data('variable');
|
1306 |
+
|
1307 |
+
var value = $target.val();
|
1308 |
+
|
1309 |
+
happyForms.form.set(attribute, value);
|
1310 |
+
|
1311 |
+
var data = {
|
1312 |
+
variable: variable,
|
1313 |
+
value: value,
|
1314 |
+
};
|
1315 |
+
|
1316 |
+
api.previewer.send('happyforms-css-variable-update', data);
|
1317 |
+
},
|
1318 |
+
|
1319 |
onGroupClick: function( e ) {
|
1320 |
e.preventDefault();
|
1321 |
|
1322 |
+
$( '.happyforms-style-controls-group', this.$el ).removeClass( 'open' );
|
1323 |
|
1324 |
+
$( '.happyforms-divider-control', this.$el )
|
1325 |
+
.removeClass( 'active' )
|
1326 |
+
.addClass( 'inactive' );
|
1327 |
|
1328 |
+
$( e.target ).parent().next().addClass( 'open' );
|
|
|
|
|
1329 |
},
|
1330 |
|
1331 |
onGroupBackClick: function( e ) {
|
1332 |
e.preventDefault();
|
1333 |
|
1334 |
+
$( '.happyforms-divider-control', this.$el )
|
1335 |
+
.removeClass( 'inactive' )
|
1336 |
+
.addClass( 'active' );
|
1337 |
+
|
1338 |
+
var $section = $( e.target ).closest( '.happyforms-style-controls-group' );
|
1339 |
+
|
1340 |
+
$section.addClass( 'closing' );
|
1341 |
+
|
1342 |
+
setTimeout(function () {
|
1343 |
+
$section.removeClass('closing open');
|
1344 |
+
}, 200);
|
1345 |
},
|
1346 |
|
1347 |
initButtonSet: function() {
|
1353 |
var $colorInputs = $( '.happyforms-color-input', this.$el );
|
1354 |
|
1355 |
$colorInputs.each( function( index, el ) {
|
1356 |
+
var $control = $( el ).parents( '.customize-control' );
|
1357 |
+
var variable = $control.data( 'variable' );
|
1358 |
+
|
1359 |
$( el ).wpColorPicker( {
|
1360 |
change: function( e, ui ) {
|
1361 |
+
var value = ui.color.toString();
|
1362 |
|
1363 |
+
self.model.set( $( this ).attr( 'data-attribute' ), value );
|
1364 |
|
1365 |
+
var data = {
|
1366 |
+
variable: variable,
|
1367 |
+
value: value,
|
1368 |
+
};
|
1369 |
+
|
1370 |
+
api.previewer.send( 'happyforms-css-variable-update', data );
|
1371 |
}
|
1372 |
} );
|
1373 |
|
1378 |
var value = $( el ).attr( 'data-default' );
|
1379 |
|
1380 |
self.model.set( attribute, value );
|
|
|
|
|
|
|
|
|
1381 |
} );
|
1382 |
} );
|
1383 |
},
|
1386 |
var self = this;
|
1387 |
var $container = this.$el.find( '.happyforms-range-control' );
|
1388 |
|
1389 |
+
$container.each(function (el, index) {
|
1390 |
+
var $this = $(this);
|
1391 |
+
var target = $this.data('target');
|
1392 |
+
|
1393 |
+
var variable = $this.data('variable');
|
1394 |
+
var unit = $this.data('unit');
|
1395 |
+
|
1396 |
var $slider = $( '.happyforms-range-slider', $this );
|
1397 |
var $sliderInput = $( 'input', $this );
|
1398 |
|
1411 |
$sliderInput.val( ui.value );
|
1412 |
self.model.set( $sliderInput.attr( 'data-attribute' ), ui.value );
|
1413 |
|
1414 |
+
var data = {
|
1415 |
+
variable: variable,
|
1416 |
+
value: ui.value + '' + unit,
|
1417 |
+
};
|
1418 |
+
|
1419 |
+
api.previewer.send('happyforms-css-variable-update', data);
|
1420 |
}
|
1421 |
} );
|
1422 |
} );
|
1429 |
this.model.set( $el.attr( 'data-attribute' ), value );
|
1430 |
|
1431 |
if (happyForms.previewLoaded) {
|
1432 |
+
// api.previewer.send( 'happyforms-style-update', this.model );
|
1433 |
}
|
1434 |
},
|
1435 |
|
1452 |
eventData.attributes = 'disabled';
|
1453 |
}
|
1454 |
|
1455 |
+
// api.previewer.send('happyforms-part-dom-update', eventData);
|
1456 |
}
|
1457 |
},
|
1458 |
|
1465 |
};
|
1466 |
|
1467 |
this.model.set( $el.attr( 'data-attribute' ), value );
|
1468 |
+
// api.previewer.send( 'happyforms-part-dom-update', eventData );
|
1469 |
},
|
1470 |
|
1471 |
onInputChange: function( e ) {
|
1475 |
this.model.set( $el.attr('data-attribute'), value );
|
1476 |
|
1477 |
if ( happyForms.previewLoaded ) {
|
1478 |
+
// api.previewer.send('happyforms-style-update', this.model);
|
1479 |
}
|
1480 |
}
|
1481 |
} );
|
1499 |
},
|
1500 |
} );
|
1501 |
|
1502 |
+
Previewer = {
|
1503 |
+
$: $,
|
1504 |
+
ready: false,
|
1505 |
+
|
1506 |
+
getPartModel: function( id ) {
|
1507 |
+
return happyForms.form.get( 'parts' ).get( id );
|
1508 |
+
},
|
1509 |
+
|
1510 |
+
getPartElement: function( html ) {
|
1511 |
+
return this.$( html );
|
1512 |
+
},
|
1513 |
+
|
1514 |
+
bind: function() {
|
1515 |
+
this.ready = true;
|
1516 |
+
|
1517 |
+
// Form title pencil
|
1518 |
+
api.previewer.bind(
|
1519 |
+
'happyforms-pencil-click-title',
|
1520 |
+
this.onPreviewPencilClickTitle.bind( this )
|
1521 |
+
);
|
1522 |
+
|
1523 |
+
// Part pencils
|
1524 |
+
api.previewer.bind(
|
1525 |
+
'happyforms-pencil-click-part',
|
1526 |
+
this.onPreviewPencilClickPart.bind( this )
|
1527 |
+
);
|
1528 |
+
},
|
1529 |
+
|
1530 |
+
/**
|
1531 |
+
*
|
1532 |
+
* Previewer callbacks for pencils
|
1533 |
+
*
|
1534 |
+
*/
|
1535 |
+
onPreviewPencilClickPart: function( id ) {
|
1536 |
+
happyForms.navigate( 'build', { trigger: true } );
|
1537 |
+
|
1538 |
+
var $partWidget = $( '[data-part-id="' + id + '"]' );
|
1539 |
+
|
1540 |
+
if ( ! $partWidget.hasClass( 'happyforms-widget-expanded' ) ) {
|
1541 |
+
$partWidget.find( '.toggle-indicator' ).click();
|
1542 |
+
}
|
1543 |
+
|
1544 |
+
$( 'input', $partWidget ).first().focus();
|
1545 |
+
},
|
1546 |
+
|
1547 |
+
onPreviewPencilClickTitle: function( id ) {
|
1548 |
+
happyForms.navigate( 'build', { trigger: true } );
|
1549 |
+
|
1550 |
+
$( 'input[name="post_title"]' ).focus();
|
1551 |
+
},
|
1552 |
+
|
1553 |
+
/**
|
1554 |
+
*
|
1555 |
+
* Previewer callbacks for live part DOM updates
|
1556 |
+
*
|
1557 |
+
*/
|
1558 |
+
onPartMouseOverCallback: function( id, html ) {
|
1559 |
+
var $part = this.$( html );
|
1560 |
+
$part.addClass( 'highlighted' );
|
1561 |
+
},
|
1562 |
+
|
1563 |
+
onPartMouseOutCallback: function( id, html ) {
|
1564 |
+
var $part = this.$( html );
|
1565 |
+
$part.removeClass( 'highlighted' );
|
1566 |
+
},
|
1567 |
+
|
1568 |
+
onPartLabelChangeCallback: function( id, html ) {
|
1569 |
+
var part = happyForms.form.get( 'parts' ).get( id );
|
1570 |
+
var $part = this.$( html );
|
1571 |
+
var $label = this.$( '.happyforms-part__label span.label', $part ).first();
|
1572 |
+
|
1573 |
+
$label.text( part.get( 'label' ) );
|
1574 |
+
},
|
1575 |
+
|
1576 |
+
onRequiredCheckboxChangeCallback: function( id, html ) {
|
1577 |
+
var part = happyForms.form.get( 'parts' ).get( id );
|
1578 |
+
var $part = this.$( html );
|
1579 |
+
var required = part.get( 'required' );
|
1580 |
+
var $required = this.$( '.happyforms-required', $part );
|
1581 |
+
|
1582 |
+
if ( parseInt(required, 10 ) === 1) {
|
1583 |
+
$required.show();
|
1584 |
+
} else {
|
1585 |
+
$required.hide();
|
1586 |
+
}
|
1587 |
+
},
|
1588 |
+
|
1589 |
+
onPartWidthChangeCallback: function( id, html, options ) {
|
1590 |
+
var part = happyForms.form.get( 'parts' ).get( id );
|
1591 |
+
var $part = this.$( html );
|
1592 |
+
var width = part.get( 'width' );
|
1593 |
+
|
1594 |
+
$part.removeClass( 'happyforms-part--width-half' );
|
1595 |
+
$part.removeClass( 'happyforms-part--width-full' );
|
1596 |
+
$part.removeClass( 'happyforms-part--width-third' );
|
1597 |
+
$part.addClass( 'happyforms-part--width-' + width);
|
1598 |
+
},
|
1599 |
+
|
1600 |
+
onPlaceholderChangeCallback: function( id, html ) {
|
1601 |
+
var part = happyForms.form.get( 'parts' ).get( id );
|
1602 |
+
var $part = this.$( html );
|
1603 |
+
|
1604 |
+
this.$( 'input', $part ).attr( 'placeholder', part.get( 'placeholder' ) );
|
1605 |
+
},
|
1606 |
+
|
1607 |
+
onDescriptionChangeCallback: function( id, html ) {
|
1608 |
+
var part = happyForms.form.get( 'parts' ).get( id );
|
1609 |
+
var $part = this.$( html );
|
1610 |
+
var description = part.get('description');
|
1611 |
+
var $description = this.$( '.happyforms-part__description', $part );
|
1612 |
+
|
1613 |
+
$description.text(description);
|
1614 |
+
},
|
1615 |
+
|
1616 |
+
onTooltipDescriptionChangeCallback: function( id, html ) {
|
1617 |
+
var part = happyForms.form.get( 'parts' ).get( id );
|
1618 |
+
var $part = this.$( html );
|
1619 |
+
var $description = this.$( '.happyforms-tooltip + .happyforms-part__description', $part );
|
1620 |
+
var $tooltip = this.$( '.happyforms-part__tooltip', $part );
|
1621 |
+
|
1622 |
+
if ( part.get( 'tooltip_description' ) === 1 ) {
|
1623 |
+
$tooltip.show();
|
1624 |
+
$description.hide();
|
1625 |
+
} else {
|
1626 |
+
$tooltip.hide();
|
1627 |
+
$description.show();
|
1628 |
+
}
|
1629 |
+
},
|
1630 |
+
|
1631 |
+
onLabelPlacementChangeCallback: function( id, html, options ) {
|
1632 |
+
var part = happyForms.form.get( 'parts' ).get( id );
|
1633 |
+
var $part = this.$( html );
|
1634 |
+
|
1635 |
+
$part.removeClass( 'happyforms-part--label-above' );
|
1636 |
+
$part.removeClass( 'happyforms-part--label-below' );
|
1637 |
+
$part.removeClass( 'happyforms-part--label-left' );
|
1638 |
+
$part.removeClass( 'happyforms-part--label-right' );
|
1639 |
+
$part.removeClass( 'happyforms-part--label-inside' );
|
1640 |
+
$part.addClass( 'happyforms-part--label-' + part.get( 'label_placement' ) );
|
1641 |
+
},
|
1642 |
+
|
1643 |
+
onCSSClassChangeCallback: function( id, html, options ) {
|
1644 |
+
var part = happyForms.form.get( 'parts' ).get( id );
|
1645 |
+
var $part = this.$( html );
|
1646 |
+
var previousClass = part.previous( 'css_class' );
|
1647 |
+
var currentClass = part.get( 'css_class' );
|
1648 |
+
|
1649 |
+
$part.removeClass( previousClass );
|
1650 |
+
$part.addClass( currentClass );
|
1651 |
+
},
|
1652 |
+
|
1653 |
+
onSubPartAdded: function( id, partHTML, optionHTML ) {
|
1654 |
+
var partView = happyForms.sidebar.current.partViews.get( id ).get( 'view' );
|
1655 |
+
partView.onSubPartAdded( id, partHTML, optionHTML );
|
1656 |
+
},
|
1657 |
+
|
1658 |
+
onFormClassChangeCallback: function( attribute, html, options ) {
|
1659 |
+
var $form = this.$( html );
|
1660 |
+
var previousClass = happyForms.form.previous( attribute );
|
1661 |
+
var currentClass = happyForms.form.get( attribute );
|
1662 |
+
|
1663 |
+
$form.removeClass( previousClass );
|
1664 |
+
$form.addClass( currentClass );
|
1665 |
+
},
|
1666 |
+
|
1667 |
+
onFormClassToggleCallback: function( attribute, html, options ) {
|
1668 |
+
var $form = this.$( html );
|
1669 |
+
var previousClass = happyForms.form.previous( attribute );
|
1670 |
+
var currentClass = happyForms.form.get( attribute );
|
1671 |
+
|
1672 |
+
$form.removeClass( previousClass );
|
1673 |
+
$form.addClass( currentClass );
|
1674 |
+
}
|
1675 |
+
};
|
1676 |
+
|
1677 |
+
happyForms = window.happyForms = new HappyForms();
|
1678 |
happyForms.classes = classes;
|
1679 |
happyForms.factory = PartFactory;
|
1680 |
+
happyForms.previewer = Previewer;
|
1681 |
|
1682 |
api.bind( 'ready', function() {
|
1683 |
+
happyForms.start();
|
1684 |
+
// Backbone.history.start();
|
1685 |
+
// api.previewer.previewUrl( happyForms.form.getPreviewUrl() );
|
1686 |
|
1687 |
+
api.previewer.bind( 'ready', function() {
|
|
|
1688 |
happyForms.flushBuffer();
|
1689 |
+
happyForms.previewer.bind();
|
1690 |
} );
|
1691 |
} );
|
1692 |
|
assets/js/frontend.js
CHANGED
@@ -1,114 +1,261 @@
|
|
1 |
-
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
( function( $ ) {
|
2 |
+
|
3 |
+
HappyForms.parts = HappyForms.parts || {};
|
4 |
+
|
5 |
+
HappyForms.parts.base = {
|
6 |
+
init: function() {
|
7 |
+
var type = this.$el.data( 'happyforms-type' );
|
8 |
+
|
9 |
+
switch ( type ) {
|
10 |
+
case 'single_line_text':
|
11 |
+
case 'email':
|
12 |
+
case 'website_url':
|
13 |
+
case 'checkbox':
|
14 |
+
case 'radio':
|
15 |
+
case 'number':
|
16 |
+
case 'legal':
|
17 |
+
case 'rating':
|
18 |
+
this.$input = $( 'input', this.$el );
|
19 |
+
break;
|
20 |
+
|
21 |
+
case 'multi_line_text':
|
22 |
+
this.$input = $( 'textarea', this.$el );
|
23 |
+
break;
|
24 |
+
|
25 |
+
case 'select':
|
26 |
+
case 'date':
|
27 |
+
case 'title':
|
28 |
+
this.$input = $( 'select', this.$el );
|
29 |
+
break;
|
30 |
+
|
31 |
+
case 'phone':
|
32 |
+
// Overwritten in phone.js
|
33 |
+
break;
|
34 |
+
|
35 |
+
case 'address':
|
36 |
+
// Overwritten in address.js
|
37 |
+
break;
|
38 |
+
|
39 |
+
case 'scale':
|
40 |
+
// Overwritten in scale.js
|
41 |
+
break;
|
42 |
+
|
43 |
+
default:
|
44 |
+
return;
|
45 |
+
break;
|
46 |
+
}
|
47 |
+
|
48 |
+
this.$input.on( 'keyup change', this.triggerChange.bind( this ) );
|
49 |
+
|
50 |
+
$( 'input, textarea', this.$el ).on( 'blur', this.onBlur.bind( this ) );
|
51 |
+
},
|
52 |
+
|
53 |
+
onBlur: function() {
|
54 |
+
if ( this.$el.is( '.happyforms-part--label-as_placeholder' ) ) {
|
55 |
+
if ( this.getValue() ) {
|
56 |
+
this.$el.addClass( 'happyforms-part--filled' );
|
57 |
+
} else {
|
58 |
+
this.$el.removeClass( 'happyforms-part--filled' );
|
59 |
+
}
|
60 |
+
}
|
61 |
+
},
|
62 |
+
|
63 |
+
triggerChange: function() {
|
64 |
+
this.$el.trigger( 'happyforms-change' );
|
65 |
+
},
|
66 |
+
|
67 |
+
isRequired: function() {
|
68 |
+
return this.$el.is( '[data-happyforms-required]' );
|
69 |
+
},
|
70 |
+
|
71 |
+
getValue: function() {
|
72 |
+
var type = this.$el.data( 'happyforms-type' );
|
73 |
+
|
74 |
+
switch ( type ) {
|
75 |
+
case 'single_line_text':
|
76 |
+
case 'email':
|
77 |
+
case 'website_url':
|
78 |
+
case 'multi_line_text':
|
79 |
+
case 'select':
|
80 |
+
case 'number':
|
81 |
+
case 'scale':
|
82 |
+
case 'title':
|
83 |
+
return this.$input.val();
|
84 |
+
break;
|
85 |
+
|
86 |
+
case 'checkbox':
|
87 |
+
case 'radio':
|
88 |
+
case 'legal':
|
89 |
+
return $( ':checked', this.$el ).val();
|
90 |
+
break;
|
91 |
+
|
92 |
+
case 'rating':
|
93 |
+
return '0' !== $( ':checked', this.$el ).val();
|
94 |
+
break;
|
95 |
+
|
96 |
+
case 'phone':
|
97 |
+
// Overwritten in phone.js
|
98 |
+
break;
|
99 |
+
|
100 |
+
case 'date':
|
101 |
+
case 'address':
|
102 |
+
var value = '';
|
103 |
+
|
104 |
+
var components = $.map( this.$input, function( el ) {
|
105 |
+
var componentValue = $( el ).val();
|
106 |
+
|
107 |
+
if ( componentValue ) {
|
108 |
+
return componentValue;
|
109 |
+
}
|
110 |
+
} );
|
111 |
+
|
112 |
+
if ( components.length === this.$input.length ) {
|
113 |
+
value = components.join( '-' );
|
114 |
+
}
|
115 |
+
|
116 |
+
return value;
|
117 |
+
break;
|
118 |
+
|
119 |
+
default:
|
120 |
+
return;
|
121 |
+
break;
|
122 |
+
}
|
123 |
+
},
|
124 |
+
|
125 |
+
getConfirmationValue: function() {
|
126 |
+
return $( '.happyforms-confirmation-input', this.$el ).val();
|
127 |
+
},
|
128 |
+
|
129 |
+
isValid: function() {
|
130 |
+
var valid = true;
|
131 |
+
|
132 |
+
if ( ! this.$input ) {
|
133 |
+
return valid;
|
134 |
+
}
|
135 |
+
|
136 |
+
if ( this.$input.attr( 'readonly' ) ) {
|
137 |
+
valid = valid && ! this.getValue();
|
138 |
+
}
|
139 |
+
|
140 |
+
if ( this.isRequired() ) {
|
141 |
+
valid = valid && this.getValue();
|
142 |
+
}
|
143 |
+
|
144 |
+
if ( this.isRequired() &&
|
145 |
+
this.$el.is( '[data-happyforms-require-confirmation]' ) ) {
|
146 |
+
|
147 |
+
valid = valid && ( '' !== this.getConfirmationValue() );
|
148 |
+
}
|
149 |
+
|
150 |
+
return valid;
|
151 |
+
},
|
152 |
+
|
153 |
+
destroy: function() {
|
154 |
+
this.$el.data( 'HappyFormPart', false );
|
155 |
+
}
|
156 |
+
}
|
157 |
+
|
158 |
+
HappyForms.wrapPart = function( $part, $form ) {
|
159 |
+
var type = $part.data( 'happyforms-type' );
|
160 |
+
var partMethods = HappyForms.parts.base;
|
161 |
+
|
162 |
+
if ( HappyForms.parts[type] ) {
|
163 |
+
partMethods = $.extend( {}, HappyForms.parts.base, HappyForms.parts[type] );
|
164 |
+
}
|
165 |
+
|
166 |
+
$part.happyFormPart( partMethods, {
|
167 |
+
form: $form,
|
168 |
+
} );
|
169 |
+
}
|
170 |
+
|
171 |
+
HappyForms.Form = function( el ) {
|
172 |
+
this.el = el;
|
173 |
+
this.$el = $( this.el );
|
174 |
+
this.$form = $( 'form', this.$el );
|
175 |
+
this.$parts = $( '[data-happyforms-type]', this.$form );
|
176 |
+
this.$submit = $( '[type="submit"]', this.$form );
|
177 |
+
|
178 |
+
this.init();
|
179 |
+
}
|
180 |
+
|
181 |
+
HappyForms.Form.prototype = {
|
182 |
+
init: function() {
|
183 |
+
var $form = this.$form;
|
184 |
+
var $parts = $( '[data-happyforms-type]', this.$form );
|
185 |
+
|
186 |
+
this.$el.on( 'happyforms-change', this.validate.bind( this ) );
|
187 |
+
|
188 |
+
$parts.each( function() {
|
189 |
+
var $part = $( this );
|
190 |
+
var type = $part.data( 'happyforms-type' );
|
191 |
+
|
192 |
+
HappyForms.wrapPart( $part, $form );
|
193 |
+
} );
|
194 |
+
|
195 |
+
this.$el.trigger( 'happyforms-change' );
|
196 |
+
},
|
197 |
+
|
198 |
+
validate: function() {
|
199 |
+
var isValid = true;
|
200 |
+
|
201 |
+
if ( this.$form.is( '.happyforms-form--disable-until-valid' ) ) {
|
202 |
+
// Check every part
|
203 |
+
var $parts = $( '[data-happyforms-type]', this.$form );
|
204 |
+
|
205 |
+
$parts.each( function() {
|
206 |
+
isValid = isValid && $( this ).happyFormPart( 'isValid' );
|
207 |
+
} );
|
208 |
+
} else {
|
209 |
+
// Check only legal parts
|
210 |
+
var $parts = $( '[data-happyforms-type=legal]', this.$form );
|
211 |
+
|
212 |
+
$parts.each( function() {
|
213 |
+
isValid = isValid && $( this ).happyFormPart( 'isValid' );
|
214 |
+
} );
|
215 |
+
}
|
216 |
+
|
217 |
+
this.$submit.attr( 'disabled', ! isValid );
|
218 |
+
},
|
219 |
+
}
|
220 |
+
|
221 |
+
HappyForms.Part = function( el ) {
|
222 |
+
this.el = el;
|
223 |
+
this.$el = $( this.el );
|
224 |
+
}
|
225 |
+
|
226 |
+
$.fn.happyFormPart = function( method ) {
|
227 |
+
var args = arguments;
|
228 |
+
|
229 |
+
if ( 'object' === typeof method ) {
|
230 |
+
var part = new HappyForms.Part( this );
|
231 |
+
$.extend( part, method );
|
232 |
+
$( this ).data( 'HappyFormPart', part );
|
233 |
+
part.init();
|
234 |
+
} else {
|
235 |
+
var instance = $( this ).data( 'HappyFormPart' );
|
236 |
+
|
237 |
+
if ( instance[method] ) {
|
238 |
+
return instance[method].apply( instance, Array.prototype.slice.call( arguments, 1 ) );
|
239 |
+
}
|
240 |
+
}
|
241 |
+
}
|
242 |
+
|
243 |
+
$.fn.happyForm = function ( method ) {
|
244 |
+
this.each(function () {
|
245 |
+
if ( ! method ) {
|
246 |
+
$.data( this, 'HappyForm', new HappyForms.Form( this, arguments ) );
|
247 |
+
} else {
|
248 |
+
var methods = $.data( this, 'HappyForm' );
|
249 |
+
|
250 |
+
if ( methods && methods[method] ) {
|
251 |
+
return methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 ) );
|
252 |
+
}
|
253 |
+
}
|
254 |
+
} );
|
255 |
+
}
|
256 |
+
|
257 |
+
$( document ).ready( function() {
|
258 |
+
$( '.happyforms-form' ).happyForm();
|
259 |
+
} );
|
260 |
+
|
261 |
+
} )( jQuery );
|
assets/js/frontend/address.js
CHANGED
@@ -1,212 +1,50 @@
|
|
1 |
-
( function ( $,
|
2 |
|
3 |
-
|
4 |
-
var defaults = {
|
5 |
-
libraryUrl: 'https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&libraries=places',
|
6 |
-
};
|
7 |
-
var googleAPIRequested = false;
|
8 |
-
var googleAPILoaded = false;
|
9 |
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
this.$value = $( '[type=hidden]', this.$el );
|
14 |
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
|
|
22 |
|
23 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
24 |
}
|
25 |
|
26 |
-
|
27 |
init: function() {
|
28 |
-
|
29 |
-
return;
|
30 |
-
}
|
31 |
-
|
32 |
-
var libraryUrl = this.options.libraryUrl.replace(
|
33 |
-
'YOUR_API_KEY',
|
34 |
-
this.options.apiKey
|
35 |
-
);
|
36 |
-
|
37 |
-
var self = this;
|
38 |
-
var $script = $( '#happyforms-google-autocomplete' );
|
39 |
-
googleAPIRequested = $script.length !== 0
|
40 |
-
|
41 |
-
if ( ! googleAPIRequested ) {
|
42 |
-
$script = $( '<script>' ).prop( {
|
43 |
-
id: 'happyforms-google-autocomplete',
|
44 |
-
type: 'text/javascript',
|
45 |
-
src: libraryUrl
|
46 |
-
} );
|
47 |
-
}
|
48 |
-
|
49 |
-
if ( ! googleAPILoaded ) {
|
50 |
-
$script.on( 'load', function() {
|
51 |
-
googleAPILoaded = true;
|
52 |
-
self.setup();
|
53 |
-
} );
|
54 |
-
} else {
|
55 |
-
self.setup();
|
56 |
-
}
|
57 |
|
58 |
-
|
59 |
-
|
60 |
-
}
|
61 |
-
},
|
62 |
|
63 |
-
|
64 |
-
|
65 |
|
66 |
-
|
67 |
-
|
68 |
-
case 'country': this.setupCountryMode(); break;
|
69 |
-
case 'country-city': this.setupCountryCityMode(); break;
|
70 |
}
|
71 |
-
},
|
72 |
-
|
73 |
-
setupCompleteMode: function() {
|
74 |
-
var self = this;
|
75 |
-
var $address = $( '.happyforms-part__el--address-autocomplete', this.$el );
|
76 |
-
var $results = $( '.happyforms-part__el--address--results-autocomplete', this.$el );
|
77 |
-
|
78 |
-
$address.keyup( function() {
|
79 |
-
var value = $address.val();
|
80 |
-
|
81 |
-
$results.empty();
|
82 |
-
|
83 |
-
if ( ! value ) {
|
84 |
-
return;
|
85 |
-
}
|
86 |
-
|
87 |
-
self.service.getQueryPredictions( {
|
88 |
-
input: value,
|
89 |
-
types: ['address']
|
90 |
-
}, function( results ) {
|
91 |
-
$.each( results, function( i, e ) {
|
92 |
-
$results.append( $( '<div>' ).text( e.description ) );
|
93 |
-
} );
|
94 |
-
|
95 |
-
$results.show();
|
96 |
-
|
97 |
-
$( document ).one( 'click', function() {
|
98 |
-
$results.hide();
|
99 |
-
} );
|
100 |
-
} );
|
101 |
-
} );
|
102 |
-
|
103 |
-
$results.click( 'div', function( e ) {
|
104 |
-
e.stopPropagation();
|
105 |
|
106 |
-
|
107 |
-
self.$value.val( value );
|
108 |
-
$address.val( value );
|
109 |
-
$results.hide();
|
110 |
-
} );
|
111 |
-
},
|
112 |
-
|
113 |
-
setupCountryMode: function() {
|
114 |
-
var self = this;
|
115 |
-
var $country = $( '.happyforms-part__el--address-country', this.$el );
|
116 |
-
var $results = $( '.happyforms-part__el--address--results-country', this.$el );
|
117 |
-
|
118 |
-
$country.keyup( function() {
|
119 |
-
var value = $country.val();
|
120 |
-
$results.empty();
|
121 |
-
|
122 |
-
if ( ! value ) {
|
123 |
-
return;
|
124 |
-
}
|
125 |
-
|
126 |
-
var results = countries.filter( function( name ) {
|
127 |
-
return name.toLowerCase().indexOf( value.toLowerCase() ) >= 0;
|
128 |
-
} );
|
129 |
-
|
130 |
-
$.each( results, function( i, e ) {
|
131 |
-
$results.append( $( '<div>' ).text( e ) );
|
132 |
-
} );
|
133 |
-
|
134 |
-
$results.show();
|
135 |
-
|
136 |
-
$( document ).one( 'click', function() {
|
137 |
-
$results.hide();
|
138 |
-
} );
|
139 |
-
} );
|
140 |
-
|
141 |
-
$results.click( 'li', function( e ) {
|
142 |
-
e.stopPropagation();
|
143 |
-
|
144 |
-
var value = $( e.target ).text()
|
145 |
-
self.$value.val( value );
|
146 |
-
$country.val( value );
|
147 |
-
$results.hide();
|
148 |
-
} );
|
149 |
-
},
|
150 |
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
var $city = $( '.happyforms-part__el--address-city', this.$el );
|
155 |
-
var $countryResults = $( '.happyforms-part__el--address--results-country', this.$el );
|
156 |
-
var address = [];
|
157 |
-
|
158 |
-
$country.keyup( function() {
|
159 |
-
var value = $country.val();
|
160 |
-
$countryResults.empty();
|
161 |
-
|
162 |
-
if ( ! value ) {
|
163 |
-
return;
|
164 |
-
}
|
165 |
-
|
166 |
-
var results = countries.filter( function( name ) {
|
167 |
-
return name.toLowerCase().indexOf( value.toLowerCase() ) >= 0;
|
168 |
-
} );
|
169 |
-
|
170 |
-
$.each( results, function( i, e ) {
|
171 |
-
$countryResults.append( $( '<div>' ).text( e ) );
|
172 |
-
} );
|
173 |
-
|
174 |
-
$countryResults.show();
|
175 |
-
|
176 |
-
$( document ).one( 'click', function() {
|
177 |
-
$countryResults.hide();
|
178 |
-
} );
|
179 |
-
} );
|
180 |
-
|
181 |
-
$city.keyup( function() {
|
182 |
-
var value = $city.val();
|
183 |
-
address[1] = value;
|
184 |
-
self.$value.val( address.join( ', ' ) );
|
185 |
-
} );
|
186 |
-
|
187 |
-
$countryResults.click( 'li', function( e ) {
|
188 |
-
e.stopPropagation();
|
189 |
-
|
190 |
-
var value = $( e.target ).text()
|
191 |
-
address[0] = value;
|
192 |
-
$country.val( value );
|
193 |
-
$countryResults.hide();
|
194 |
-
self.$value.val( address.join( ', ' ) );
|
195 |
} );
|
196 |
}
|
197 |
}
|
198 |
|
199 |
-
|
200 |
-
return this.each(function () {
|
201 |
-
$.data( this, 'plugin_' + pluginName, new Plugin( this, options ) );
|
202 |
-
} );
|
203 |
-
}
|
204 |
-
|
205 |
-
/*
|
206 |
-
* Initialize address instances
|
207 |
-
*/
|
208 |
-
$( '.happyforms-part--address' ).each( function( i, el ) {
|
209 |
-
$( el ).happyFormsAddress();
|
210 |
-
} )
|
211 |
-
|
212 |
-
} )( jQuery, _happyFormsCountries );
|
1 |
+
;( function ( $, settings ) {
|
2 |
|
3 |
+
HappyForms.parts = HappyForms.parts || {};
|
|
|
|
|
|
|
|
|
|
|
4 |
|
5 |
+
var sources = {
|
6 |
+
autocomplete: function( request, response ) {
|
7 |
+
var apiKey = this.$el.attr( 'data-google-apikey' );
|
|
|
8 |
|
9 |
+
$.get( settings.url, {
|
10 |
+
action: settings.action,
|
11 |
+
key: apiKey,
|
12 |
+
term: request.term,
|
13 |
+
}, function( data ) {
|
14 |
+
response( data );
|
15 |
+
} );
|
16 |
+
},
|
17 |
|
18 |
+
get: function( mode, context ) {
|
19 |
+
if ( 'autocomplete' === mode ) {
|
20 |
+
return this.autocomplete.bind( context );
|
21 |
+
} else {
|
22 |
+
return settings.countries;
|
23 |
+
}
|
24 |
+
}
|
25 |
}
|
26 |
|
27 |
+
HappyForms.parts.address = {
|
28 |
init: function() {
|
29 |
+
this.$input = $( 'input', this.$el );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
30 |
|
31 |
+
this.$input.on( 'keyup', this.triggerChange.bind( this ) );
|
32 |
+
this.$input.on( 'change', this.triggerChange.bind( this ) );
|
|
|
|
|
33 |
|
34 |
+
var $input = $( '.happyforms-part__el--address-autocomplete', this.$el );
|
35 |
+
var mode = this.$el.attr( 'data-mode' );
|
36 |
|
37 |
+
if ( 'simple' === mode ) {
|
38 |
+
return;
|
|
|
|
|
39 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
40 |
|
41 |
+
var containerSelector = $( '.happyforms-part__el--address--results', this.$el );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
42 |
|
43 |
+
$input.autocomplete( {
|
44 |
+
appendTo: containerSelector,
|
45 |
+
source: sources.get( mode, this ),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
46 |
} );
|
47 |
}
|
48 |
}
|
49 |
|
50 |
+
} )( jQuery, _happyFormsAddressSettings );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assets/js/frontend/number.js
ADDED
@@ -0,0 +1,50 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
( function( $ ) {
|
2 |
+
|
3 |
+
HappyForms.parts = HappyForms.parts || {};
|
4 |
+
|
5 |
+
HappyForms.parts.number = {
|
6 |
+
init: function() {
|
7 |
+
var masked = this.$el.attr( 'data-mask' );
|
8 |
+
|
9 |
+
this.$input = $( 'input', this.$el );
|
10 |
+
this.cleaveInstances = [];
|
11 |
+
|
12 |
+
this.$input.on( 'keyup', this.triggerChange.bind( this ) );
|
13 |
+
this.$input.on( 'change', this.triggerChange.bind( this ) );
|
14 |
+
|
15 |
+
if ( masked ) {
|
16 |
+
var numeralDecimalMark = this.$el.attr( 'data-decimal-mark' ) || '.';
|
17 |
+
var delimiter = this.$el.attr( 'data-thousands-delimiter' ) || ',';
|
18 |
+
var prefix = this.$el.attr( 'data-prefix' ) || '';
|
19 |
+
var self = this;
|
20 |
+
|
21 |
+
this.$input.each( function() {
|
22 |
+
var $input = $( this );
|
23 |
+
|
24 |
+
var cleave = new Cleave( $input, {
|
25 |
+
numeral: true,
|
26 |
+
numeralDecimalMark: numeralDecimalMark,
|
27 |
+
delimiter: delimiter,
|
28 |
+
prefix: prefix,
|
29 |
+
} );
|
30 |
+
|
31 |
+
self.cleaveInstances.push( cleave );
|
32 |
+
} );
|
33 |
+
}
|
34 |
+
},
|
35 |
+
|
36 |
+
reinit: function() {
|
37 |
+
$.each( this.cleaveInstances, function( i, instance ) {
|
38 |
+
var input = instance.element;
|
39 |
+
var rawValue = instance.getRawValue();
|
40 |
+
|
41 |
+
instance.destroy();
|
42 |
+
|
43 |
+
input.value = rawValue;
|
44 |
+
} );
|
45 |
+
|
46 |
+
this.init();
|
47 |
+
},
|
48 |
+
};
|
49 |
+
|
50 |
+
} )( jQuery );
|
assets/js/frontend/phone.js
ADDED
@@ -0,0 +1,68 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
( function( $ ) {
|
2 |
+
|
3 |
+
HappyForms.parts = HappyForms.parts || {};
|
4 |
+
|
5 |
+
HappyForms.parts.phone = {
|
6 |
+
init: function() {
|
7 |
+
var masked = this.$el.attr( 'data-mask' );
|
8 |
+
|
9 |
+
this.$input = $( 'input', this.$el );
|
10 |
+
this.cleaveInstances = [];
|
11 |
+
|
12 |
+
this.$input.on( 'keyup', this.triggerChange.bind( this ) );
|
13 |
+
this.$input.on( 'change', this.triggerChange.bind( this ) );
|
14 |
+
|
15 |
+
if ( masked ) {
|
16 |
+
var regionCode = '+' + this.$el.attr( 'data-country' );
|
17 |
+
var self = this;
|
18 |
+
|
19 |
+
this.$input.each( function() {
|
20 |
+
var $input = $( this );
|
21 |
+
|
22 |
+
var cleave = new Cleave( $input, {
|
23 |
+
phone: true,
|
24 |
+
} );
|
25 |
+
|
26 |
+
if ( regionCode ) {
|
27 |
+
cleave.setPhoneRegionCode( regionCode );
|
28 |
+
cleave.setRawValue( regionCode );
|
29 |
+
};
|
30 |
+
|
31 |
+
self.cleaveInstances.push( cleave );
|
32 |
+
} );
|
33 |
+
}
|
34 |
+
},
|
35 |
+
|
36 |
+
reinit: function() {
|
37 |
+
$.each( this.cleaveInstances, function( i, instance ) {
|
38 |
+
instance.destroy();
|
39 |
+
} );
|
40 |
+
|
41 |
+
this.init();
|
42 |
+
},
|
43 |
+
|
44 |
+
getValue: function() {
|
45 |
+
var regionCode = this.$el.attr( 'data-country' );
|
46 |
+
var value = this.$input.val();
|
47 |
+
|
48 |
+
if ( regionCode ) {
|
49 |
+
value = value.substring( regionCode.length + 1 ).trim();
|
50 |
+
}
|
51 |
+
|
52 |
+
return value;
|
53 |
+
},
|
54 |
+
|
55 |
+
getConfirmationValue: function() {
|
56 |
+
var regionCode = this.$el.attr( 'data-country' );
|
57 |
+
var $input = $( '.happyforms-confirmation-input', this.$el );
|
58 |
+
var value = $input.val();
|
59 |
+
|
60 |
+
if ( regionCode ) {
|
61 |
+
value = value.substring( regionCode.length + 1 ).trim();
|
62 |
+
}
|
63 |
+
|
64 |
+
return value;
|
65 |
+
}
|
66 |
+
}
|
67 |
+
|
68 |
+
} )( jQuery );
|
assets/js/frontend/scale.js
CHANGED
@@ -1,56 +1,34 @@
|
|
1 |
-
(function
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
}
|
36 |
-
|
37 |
-
self.$output.text(self.$el.val()).css({
|
38 |
-
left: outputPosition + '%'
|
39 |
-
});
|
40 |
-
});
|
41 |
-
|
42 |
-
self.$el.trigger('input');
|
43 |
-
}
|
44 |
-
}
|
45 |
-
|
46 |
-
$.fn[pluginName] = function (options) {
|
47 |
-
return this.each(function () {
|
48 |
-
$.data(this, 'plugin_' + pluginName, new Plugin(this, options));
|
49 |
-
});
|
50 |
-
}
|
51 |
-
|
52 |
-
$('.happyforms-part--scale input').each(function (i, el) {
|
53 |
-
$(el).happyFormsScale();
|
54 |
-
})
|
55 |
-
|
56 |
-
})(jQuery);
|
1 |
+
( function( $ ) {
|
2 |
+
|
3 |
+
HappyForms.parts = HappyForms.parts || {};
|
4 |
+
|
5 |
+
HappyForms.parts.scale = {
|
6 |
+
init: function() {
|
7 |
+
this.$input = $( 'input', this.$el );
|
8 |
+
this.$output = $( 'output', this.$el );
|
9 |
+
|
10 |
+
this.$input.on( 'input', this.refreshOutput.bind( this ) );
|
11 |
+
this.refreshOutput();
|
12 |
+
},
|
13 |
+
|
14 |
+
refreshOutput: function() {
|
15 |
+
var min = parseFloat( this.$input.attr( 'min' ) );
|
16 |
+
var max = parseFloat( this.$input.attr( 'max' ) );
|
17 |
+
var step = parseFloat( this.$input.attr( 'step' ) );
|
18 |
+
|
19 |
+
var rangeWidth = this.$el.width();
|
20 |
+
var outputPosition = (this.$input.val() / this.$input.attr('max')) * 100 - ((this.$output.width() / 2) / rangeWidth) * 100;
|
21 |
+
|
22 |
+
if (outputPosition > 50) {
|
23 |
+
outputPosition = outputPosition - 0.5;
|
24 |
+
} else {
|
25 |
+
outputPosition = outputPosition + 0.2;
|
26 |
+
}
|
27 |
+
|
28 |
+
this.$output.text( this.$input.val() ).css({
|
29 |
+
left: outputPosition + '%'
|
30 |
+
});
|
31 |
+
},
|
32 |
+
};
|
33 |
+
|
34 |
+
} )( jQuery );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assets/js/parts/part-address.js
CHANGED
@@ -11,17 +11,17 @@
|
|
11 |
} );
|
12 |
|
13 |
var AddressView = happyForms.classes.views.Part.extend( {
|
14 |
-
template: '#happyforms-address-template',
|
15 |
|
16 |
events: _.extend( {}, happyForms.classes.views.Part.prototype.events, {
|
17 |
'change [data-bind=apikey]': 'onApiKeyChange',
|
18 |
-
'change [data-bind=mode]': 'onModeChange',
|
19 |
} ),
|
20 |
|
21 |
initialize: function() {
|
22 |
happyForms.classes.views.Part.prototype.initialize.apply( this, arguments );
|
23 |
|
24 |
this.listenTo( this, 'ready', this.toggleApiKey );
|
|
|
25 |
},
|
26 |
|
27 |
toggleApiKey: function() {
|
@@ -33,37 +33,44 @@
|
|
33 |
},
|
34 |
|
35 |
onApiKeyChange: function( e ) {
|
36 |
-
var
|
37 |
-
|
38 |
-
|
39 |
-
attributes: {
|
40 |
-
'data-google-apikey': this.model.get( 'apikey' )
|
41 |
-
},
|
42 |
};
|
43 |
|
44 |
-
api.previewer.
|
45 |
},
|
46 |
|
47 |
onModeChange: function( e ) {
|
48 |
var self = this;
|
|
|
49 |
|
50 |
this.toggleApiKey();
|
51 |
|
52 |
-
var
|
|
|
53 |
'happyforms-nonce': api.settings.nonce.happyforms,
|
54 |
happyforms: 1,
|
55 |
wp_customize: 'on',
|
56 |
form_id: happyForms.form.id,
|
57 |
part: this.model.toJSON(),
|
|
|
|
|
|
|
|
|
|
|
|
|
58 |
} );
|
59 |
|
60 |
request.done( function( response ) {
|
61 |
-
var
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
|
|
|
|
67 |
} else {
|
68 |
happyForms.buffer.push( response );
|
69 |
}
|
@@ -71,6 +78,22 @@
|
|
71 |
}
|
72 |
} );
|
73 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
74 |
happyForms.factory.model = _.wrap( happyForms.factory.model, function( func, attrs, options, BaseClass ) {
|
75 |
if ( 'address' === attrs.type ) {
|
76 |
BaseClass = AddressModel;
|
@@ -87,22 +110,4 @@
|
|
87 |
return func( options, BaseClass );
|
88 |
} );
|
89 |
|
90 |
-
api.bind( 'ready', function() {
|
91 |
-
api.previewer.bind( 'happyforms-part-render', function( $el ) {
|
92 |
-
if ( ! $el.is( '.happyforms-part--address' ) ) {
|
93 |
-
return;
|
94 |
-
}
|
95 |
-
|
96 |
-
$el.happyFormsAddress();
|
97 |
-
} );
|
98 |
-
|
99 |
-
api.previewer.bind( 'happyforms-part-dom-updated', function( $el ) {
|
100 |
-
if ( ! $el.is( '.happyforms-part--address' ) ) {
|
101 |
-
return;
|
102 |
-
}
|
103 |
-
|
104 |
-
$el.happyFormsAddress();
|
105 |
-
} );
|
106 |
-
} );
|
107 |
-
|
108 |
} ) ( jQuery, _, Backbone, wp.customize, _happyFormsSettings );
|
11 |
} );
|
12 |
|
13 |
var AddressView = happyForms.classes.views.Part.extend( {
|
14 |
+
template: '#happyforms-customize-address-template',
|
15 |
|
16 |
events: _.extend( {}, happyForms.classes.views.Part.prototype.events, {
|
17 |
'change [data-bind=apikey]': 'onApiKeyChange',
|
|
|
18 |
} ),
|
19 |
|
20 |
initialize: function() {
|
21 |
happyForms.classes.views.Part.prototype.initialize.apply( this, arguments );
|
22 |
|
23 |
this.listenTo( this, 'ready', this.toggleApiKey );
|
24 |
+
this.listenTo( this.model, 'change:mode', this.onModeChange );
|
25 |
},
|
26 |
|
27 |
toggleApiKey: function() {
|
33 |
},
|
34 |
|
35 |
onApiKeyChange: function( e ) {
|
36 |
+
var data = {
|
37 |
+
id: this.model.get( 'id' ),
|
38 |
+
callback: 'onAddressApiKeyChange',
|
|
|
|
|
|
|
39 |
};
|
40 |
|
41 |
+
api.previewer.send( 'happyforms-part-dom-update', data );
|
42 |
},
|
43 |
|
44 |
onModeChange: function( e ) {
|
45 |
var self = this;
|
46 |
+
var part = this.model;
|
47 |
|
48 |
this.toggleApiKey();
|
49 |
|
50 |
+
var data = {
|
51 |
+
action: 'happyforms-form-part-add',
|
52 |
'happyforms-nonce': api.settings.nonce.happyforms,
|
53 |
happyforms: 1,
|
54 |
wp_customize: 'on',
|
55 |
form_id: happyForms.form.id,
|
56 |
part: this.model.toJSON(),
|
57 |
+
};
|
58 |
+
|
59 |
+
var request = $.ajax( ajaxurl, {
|
60 |
+
type: 'post',
|
61 |
+
dataType: 'html',
|
62 |
+
data: data
|
63 |
} );
|
64 |
|
65 |
request.done( function( response ) {
|
66 |
+
var data = {
|
67 |
+
id: part.get( 'id' ),
|
68 |
+
html: response,
|
69 |
+
callback: 'onAddressModeChangeCallback',
|
70 |
+
};
|
71 |
+
|
72 |
+
if ( happyForms.previewer.ready ) {
|
73 |
+
api.previewer.send( 'happyforms-form-part-refresh', data );
|
74 |
} else {
|
75 |
happyForms.buffer.push( response );
|
76 |
}
|
78 |
}
|
79 |
} );
|
80 |
|
81 |
+
happyForms.previewer = _.extend( happyForms.previewer, {
|
82 |
+
onAddressApiKeyChange: function( id, html, options ) {
|
83 |
+
var part = this.getPartModel( id );
|
84 |
+
var $part = this.getPartElement( html );
|
85 |
+
|
86 |
+
$part.attr( 'data-google-apikey', part.get( 'apikey' ) );
|
87 |
+
},
|
88 |
+
|
89 |
+
onAddressModeChangeCallback: function( id, html, options, $ ) {
|
90 |
+
var part = this.getPartModel( id );
|
91 |
+
var $part = $( html );
|
92 |
+
|
93 |
+
$part.happyFormsAddressAutocomplete();
|
94 |
+
}
|
95 |
+
} );
|
96 |
+
|
97 |
happyForms.factory.model = _.wrap( happyForms.factory.model, function( func, attrs, options, BaseClass ) {
|
98 |
if ( 'address' === attrs.type ) {
|
99 |
BaseClass = AddressModel;
|
110 |
return func( options, BaseClass );
|
111 |
} );
|
112 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
113 |
} ) ( jQuery, _, Backbone, wp.customize, _happyFormsSettings );
|
assets/js/parts/part-checkbox.js
CHANGED
@@ -7,254 +7,198 @@
|
|
7 |
settings.formParts.checkbox.defaults,
|
8 |
_.result( happyForms.classes.models.Part.prototype, 'defaults' ),
|
9 |
);
|
10 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
11 |
} );
|
12 |
|
13 |
var CheckboxView = happyForms.classes.views.Part.extend( {
|
14 |
-
template: '#happyforms-checkbox-template',
|
|
|
15 |
|
16 |
initialize: function() {
|
17 |
happyForms.classes.views.Part.prototype.initialize.apply( this, arguments );
|
18 |
|
19 |
-
this.model.options
|
20 |
-
|
21 |
-
this.listenTo(this.model.options, 'add', this.onOptionsChange);
|
22 |
-
this.listenTo(this.model.options, 'change', this.onOptionsChange);
|
23 |
-
this.listenTo(this.model.options, 'remove', this.onOptionsChange);
|
24 |
},
|
25 |
|
26 |
events: _.extend( {}, happyForms.classes.views.Part.prototype.events, {
|
27 |
'click .add-option': 'onAddOptionClick',
|
28 |
-
'change [name=display_type]': 'onDisplayTypeChange'
|
|
|
|
|
|
|
29 |
} ),
|
30 |
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
var optionModel = new Backbone.Model({
|
36 |
-
id: option.id,
|
37 |
-
is_default: option.is_default,
|
38 |
-
label: option.label
|
39 |
-
});
|
40 |
-
|
41 |
-
this.createNewOption(optionModel);
|
42 |
-
}, this);
|
43 |
},
|
44 |
|
45 |
-
|
46 |
-
|
47 |
-
*
|
48 |
-
* @since 1.0.0.
|
49 |
-
*
|
50 |
-
* @return void
|
51 |
-
*/
|
52 |
-
onAddOptionClick: function() {
|
53 |
-
this.$el.find('.no-options').hide();
|
54 |
-
|
55 |
-
this.createNewOption(false, false);
|
56 |
},
|
57 |
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
* @since 1.0.0.
|
62 |
-
*
|
63 |
-
* @param {object} [optionModel=''] Existing option model.
|
64 |
-
* @param {bool} [skipPreviewTrigger=true] Boolean to tell if creation of new model should trigger preview event or not.
|
65 |
-
*
|
66 |
-
* @return void
|
67 |
-
*/
|
68 |
-
createNewOption: function(optionModel, skipPreviewTrigger) {
|
69 |
-
var self = this;
|
70 |
-
var model = (optionModel) ? optionModel : '';
|
71 |
-
|
72 |
-
if ( typeof skipPreviewTrigger === 'undefined' ) {
|
73 |
-
skipPreviewTrigger = true;
|
74 |
-
}
|
75 |
-
|
76 |
-
if (model === '') {
|
77 |
-
var optionId = _.uniqueId(self.model.get('id') + '_option_');
|
78 |
|
79 |
-
|
80 |
-
|
81 |
-
is_default: 0,
|
82 |
-
label: ''
|
83 |
-
});
|
84 |
-
}
|
85 |
|
86 |
-
|
|
|
87 |
|
88 |
-
var
|
|
|
|
|
89 |
|
90 |
-
|
91 |
|
92 |
-
|
93 |
-
var template = _.template($(view.frontendTemplate).html());
|
94 |
-
var html = template(view.model.toJSON());
|
95 |
|
96 |
-
|
97 |
-
|
98 |
-
'
|
99 |
-
|
100 |
};
|
101 |
|
102 |
-
api.previewer.
|
103 |
-
}
|
104 |
-
},
|
105 |
-
|
106 |
-
/**
|
107 |
-
* Update options in the part model on options collection change.
|
108 |
-
*
|
109 |
-
* @since 1.0.0.
|
110 |
-
*
|
111 |
-
* @param {object} data Backbone collection of options.
|
112 |
-
*
|
113 |
-
* @return {object}
|
114 |
-
*/
|
115 |
-
onOptionsChange: function(data) {
|
116 |
-
var options = this.model.options;
|
117 |
-
var optionsArray = [];
|
118 |
-
|
119 |
-
options.each(function(model, index) {
|
120 |
-
optionsArray.push(model.attributes);
|
121 |
-
});
|
122 |
-
|
123 |
-
this.model.set('options', optionsArray);
|
124 |
-
|
125 |
-
return data;
|
126 |
},
|
127 |
|
128 |
-
|
129 |
-
var
|
130 |
-
var
|
131 |
|
132 |
-
|
133 |
|
134 |
-
var
|
135 |
-
|
136 |
-
|
137 |
-
|
138 |
-
|
|
|
139 |
};
|
140 |
|
141 |
-
|
142 |
-
|
143 |
-
}
|
144 |
|
145 |
-
|
146 |
-
|
147 |
-
|
148 |
|
149 |
-
|
150 |
-
|
|
|
|
|
|
|
151 |
|
152 |
-
|
153 |
-
|
154 |
-
|
|
|
|
|
|
|
|
|
155 |
|
156 |
-
|
157 |
},
|
158 |
|
159 |
-
|
160 |
-
|
161 |
-
'click .delete-option': 'deleteOption',
|
162 |
-
'change .default-option-switch': 'onDefaultOptionCheck'
|
163 |
-
},
|
164 |
|
165 |
-
|
166 |
-
var
|
167 |
-
var html = template(this.model.toJSON());
|
168 |
|
169 |
-
this.
|
|
|
170 |
|
171 |
-
|
172 |
-
|
|
|
173 |
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
-
|
178 |
-
|
179 |
-
|
180 |
-
|
181 |
-
onInputChange: function(e) {
|
182 |
-
var $input = $(e.target);
|
183 |
-
var previewSelector = $input.data('preview-selector');
|
184 |
-
var attribute = $input.attr('data-option-attribute');
|
185 |
-
var value = $input.val();
|
186 |
-
|
187 |
-
this.model.set(attribute, value);
|
188 |
-
|
189 |
-
if (previewSelector) {
|
190 |
-
var eventData = {
|
191 |
-
selector: '#' + this.model.get('id') + ' ' + previewSelector,
|
192 |
-
text: value
|
193 |
-
};
|
194 |
|
195 |
-
|
196 |
-
}
|
197 |
},
|
198 |
|
199 |
-
|
200 |
-
|
201 |
-
|
202 |
-
|
203 |
-
*
|
204 |
-
* @param {object} e JS event.
|
205 |
-
*
|
206 |
-
* @return void
|
207 |
-
*/
|
208 |
-
deleteOption: function(e) {
|
209 |
-
e.preventDefault();
|
210 |
-
|
211 |
-
var eventData = {
|
212 |
-
subpart_id: this.model.get('id')
|
213 |
};
|
214 |
|
215 |
-
api.previewer.
|
|
|
|
|
216 |
|
217 |
-
|
|
|
|
|
|
|
218 |
|
219 |
-
if (
|
220 |
-
|
|
|
|
|
221 |
}
|
|
|
222 |
|
223 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
224 |
},
|
225 |
|
226 |
-
|
227 |
-
|
228 |
-
|
229 |
-
|
230 |
-
|
231 |
-
* @since 1.0.0.
|
232 |
-
*
|
233 |
-
* @param {object} e JS event.
|
234 |
-
*
|
235 |
-
* @return void
|
236 |
-
*/
|
237 |
-
onDefaultOptionCheck: function(e) {
|
238 |
-
var $input = $(e.target);
|
239 |
-
|
240 |
-
if ($input.is(':checked')) {
|
241 |
-
this.model.set('is_default', 1);
|
242 |
-
} else {
|
243 |
-
this.model.set('is_default', 0);
|
244 |
-
}
|
245 |
|
246 |
-
|
247 |
-
|
248 |
-
props: {
|
249 |
-
checked: true
|
250 |
-
}
|
251 |
-
};
|
252 |
|
253 |
-
|
254 |
-
|
255 |
-
|
|
|
256 |
|
257 |
-
|
258 |
}
|
259 |
} );
|
260 |
|
7 |
settings.formParts.checkbox.defaults,
|
8 |
_.result( happyForms.classes.models.Part.prototype, 'defaults' ),
|
9 |
);
|
10 |
+
},
|
11 |
+
|
12 |
+
initialize: function( attrs, options ) {
|
13 |
+
happyForms.classes.models.Part.prototype.initialize.apply( this, arguments );
|
14 |
+
|
15 |
+
this.attributes.options = new OptionCollection( this.get( 'options' ), options );
|
16 |
+
},
|
17 |
+
|
18 |
+
toJSON: function() {
|
19 |
+
var json = Backbone.Model.prototype.toJSON.apply( this, arguments );
|
20 |
+
json.options = json.options.toJSON();
|
21 |
+
|
22 |
+
return json;
|
23 |
+
},
|
24 |
+
} );
|
25 |
+
|
26 |
+
var OptionModel = Backbone.Model.extend( {
|
27 |
+
defaults: {
|
28 |
+
is_default: false,
|
29 |
+
label: '',
|
30 |
+
},
|
31 |
+
} );
|
32 |
+
|
33 |
+
var OptionCollection = Backbone.Collection.extend( {
|
34 |
+
model: OptionModel,
|
35 |
} );
|
36 |
|
37 |
var CheckboxView = happyForms.classes.views.Part.extend( {
|
38 |
+
template: '#customize-happyforms-checkbox-template',
|
39 |
+
itemCustomizeTemplate: '#customize-happyforms-checkbox-item-template',
|
40 |
|
41 |
initialize: function() {
|
42 |
happyForms.classes.views.Part.prototype.initialize.apply( this, arguments );
|
43 |
|
44 |
+
this.listenTo( this.model.get( 'options' ), 'add change remove', this.onOptionsChange );
|
45 |
+
this.listenTo( this, 'ready', this.onReady );
|
|
|
|
|
|
|
46 |
},
|
47 |
|
48 |
events: _.extend( {}, happyForms.classes.views.Part.prototype.events, {
|
49 |
'click .add-option': 'onAddOptionClick',
|
50 |
+
'change [name=display_type]': 'onDisplayTypeChange',
|
51 |
+
'keyup li [name=label]': 'onCheckboxItemLabelChange',
|
52 |
+
'change li [name=is_default]': 'onCheckboxItemDefaultChange',
|
53 |
+
'click li .delete-option': 'onDeleteOptionClick',
|
54 |
} ),
|
55 |
|
56 |
+
onReady: function() {
|
57 |
+
this.model.get( 'options' ).each( function( itemModel ) {
|
58 |
+
this.appendOptionPartial( itemModel );
|
59 |
+
}, this );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
60 |
},
|
61 |
|
62 |
+
onOptionsChange: function() {
|
63 |
+
this.model.trigger( 'change' );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
64 |
},
|
65 |
|
66 |
+
appendOptionPartial: function( itemModel ) {
|
67 |
+
var customizeTemplate = _.template( $( this.itemCustomizeTemplate ).html() );
|
68 |
+
var customizeHTML = customizeTemplate( { item: itemModel.toJSON() } );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
69 |
|
70 |
+
$( '.options ul', this.$el ).append( customizeHTML );
|
71 |
+
},
|
|
|
|
|
|
|
|
|
72 |
|
73 |
+
onAddOptionClick: function( e ) {
|
74 |
+
e.preventDefault();
|
75 |
|
76 |
+
var itemID = _.uniqueId( this.model.get( 'id' ) + '_option_' );
|
77 |
+
var itemModel = new OptionModel( { id: itemID } );
|
78 |
+
this.model.get( 'options' ).add( itemModel );
|
79 |
|
80 |
+
this.appendOptionPartial( itemModel );
|
81 |
|
82 |
+
var model = this.model;
|
|
|
|
|
83 |
|
84 |
+
this.model.fetchHtml( function( response ) {
|
85 |
+
var data = {
|
86 |
+
id: model.get( 'id' ),
|
87 |
+
html: response,
|
88 |
};
|
89 |
|
90 |
+
api.previewer.send( 'happyforms-form-part-refresh', data );
|
91 |
+
} );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
92 |
},
|
93 |
|
94 |
+
onCheckboxItemLabelChange: function( e ) {
|
95 |
+
var itemID = $( e.target ).parents( '[data-item-id]' ).data( 'item-id' );
|
96 |
+
var itemModel = this.model.get( 'options' ).get( itemID );
|
97 |
|
98 |
+
itemModel.set( 'label', $( e.target ).val() );
|
99 |
|
100 |
+
var data = {
|
101 |
+
id: this.model.get( 'id' ),
|
102 |
+
callback: 'onCheckboxItemLabelChangeCallback',
|
103 |
+
options: {
|
104 |
+
itemID: itemID,
|
105 |
+
}
|
106 |
};
|
107 |
|
108 |
+
api.previewer.send( 'happyforms-part-dom-update', data );
|
109 |
+
},
|
|
|
110 |
|
111 |
+
onCheckboxItemDefaultChange: function( e ) {
|
112 |
+
var itemID = $( e.target ).parents( '[data-item-id]' ).data( 'item-id' );
|
113 |
+
var itemModel = this.model.get( 'options' ).get( itemID );
|
114 |
|
115 |
+
if ( $( e.target ).is( ':checked' ) ) {
|
116 |
+
itemModel.set( 'is_default', 1 );
|
117 |
+
} else {
|
118 |
+
itemModel.set( 'is_default', 0 );
|
119 |
+
}
|
120 |
|
121 |
+
var data = {
|
122 |
+
id: this.model.get( 'id' ),
|
123 |
+
callback: 'onCheckboxItemDefaultChangeCallback',
|
124 |
+
options: {
|
125 |
+
itemID: itemID,
|
126 |
+
}
|
127 |
+
};
|
128 |
|
129 |
+
api.previewer.send( 'happyforms-part-dom-update', data );
|
130 |
},
|
131 |
|
132 |
+
onDeleteOptionClick: function( e ) {
|
133 |
+
e.preventDefault();
|
|
|
|
|
|
|
134 |
|
135 |
+
var itemID = $( e.target ).parents( '[data-item-id]' ).data( 'item-id' );
|
136 |
+
var itemModel = this.model.get( 'options' ).get( itemID );
|
|
|
137 |
|
138 |
+
this.model.get( 'options' ).remove( itemModel );
|
139 |
+
$( '[data-item-id="' + itemModel.get( 'id' ) + '"]', this.$el ).remove();
|
140 |
|
141 |
+
if ( this.model.get( 'options' ).length == 0 ) {
|
142 |
+
$( '.options ul', this.$el ).html( '' );
|
143 |
+
}
|
144 |
|
145 |
+
var data = {
|
146 |
+
id: this.model.get( 'id' ),
|
147 |
+
callback: 'onCheckboxItemDeleteCallback',
|
148 |
+
options: {
|
149 |
+
itemID: itemID,
|
150 |
+
}
|
151 |
+
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
152 |
|
153 |
+
api.previewer.send( 'happyforms-part-dom-update', data );
|
|
|
154 |
},
|
155 |
|
156 |
+
onDisplayTypeChange: function(e) {
|
157 |
+
var data = {
|
158 |
+
id: this.model.get( 'id' ),
|
159 |
+
callback: 'onCheckboxDisplayTypeChangeCallback',
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
160 |
};
|
161 |
|
162 |
+
api.previewer.send( 'happyforms-part-dom-update', data );
|
163 |
+
}
|
164 |
+
} );
|
165 |
|
166 |
+
happyForms.previewer = _.extend( happyForms.previewer, {
|
167 |
+
onCheckboxDisplayTypeChangeCallback: function( id, html, options ) {
|
168 |
+
var part = this.getPartModel( id );
|
169 |
+
var $part = this.getPartElement( html );
|
170 |
|
171 |
+
if ( 'block' === part.get( 'display_type' ) ) {
|
172 |
+
$part.addClass( 'display-type--block' );
|
173 |
+
} else {
|
174 |
+
$part.removeClass( 'display-type--block' );
|
175 |
}
|
176 |
+
},
|
177 |
|
178 |
+
onCheckboxItemLabelChangeCallback: function( id, html, options ) {
|
179 |
+
var part = this.getPartModel( id );
|
180 |
+
var $part = this.getPartElement( html );
|
181 |
+
var option = part.get( 'options' ).get( options.itemID );
|
182 |
+
var $option = $( '#' + options.itemID, $part );
|
183 |
+
|
184 |
+
$( 'span.label', $option ).text( option.get( 'label' ) );
|
185 |
},
|
186 |
|
187 |
+
onCheckboxItemDefaultChangeCallback: function( id, html, options ) {
|
188 |
+
var part = this.getPartModel( id );
|
189 |
+
var $part = this.getPartElement( html );
|
190 |
+
var option = part.get( 'options' ).get( options.itemID );
|
191 |
+
var $option = $( '#' + options.itemID, $part );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
192 |
|
193 |
+
$( 'input', $option ).prop( 'checked', option.get( 'is_default' ) );
|
194 |
+
},
|
|
|
|
|
|
|
|
|
195 |
|
196 |
+
onCheckboxItemDeleteCallback: function( id, html, options ) {
|
197 |
+
var part = this.getPartModel( id );
|
198 |
+
var $part = this.getPartElement( html );
|
199 |
+
var $option = $( '#' + options.itemID, $part );
|
200 |
|
201 |
+
$option.remove();
|
202 |
}
|
203 |
} );
|
204 |
|
assets/js/parts/part-date.js
CHANGED
@@ -11,78 +11,98 @@
|
|
11 |
} );
|
12 |
|
13 |
var DateView = happyForms.classes.views.Part.extend( {
|
14 |
-
template: '#happyforms-date-template',
|
15 |
|
16 |
initialize: function () {
|
17 |
-
happyForms.classes.views.Part.prototype.initialize.apply(this, arguments);
|
18 |
|
19 |
-
this.listenTo(this.model, 'change:date_type', this.onDateTypeChange);
|
20 |
-
this.listenTo(this.model, 'change:time_format', this.onTimeFormatChange);
|
21 |
},
|
22 |
|
23 |
-
onDateTypeChange: function(
|
24 |
-
var
|
25 |
-
|
26 |
-
if (value === 'date') {
|
27 |
-
classesToRemove = 'happyforms-part-date--datetime happyforms-part-date--time';
|
28 |
-
this.$el.find('.time-options').hide();
|
29 |
-
} else if (value === 'datetime') {
|
30 |
-
classesToRemove = 'happyforms-part-date--date happyforms-part-date--time';
|
31 |
-
this.$el.find('.time-options').show();
|
32 |
-
} else if (value === 'time') {
|
33 |
-
classesToRemove = 'happyforms-part-date--date happyforms-part-date--datetime';
|
34 |
-
this.$el.find('.time-options').show();
|
35 |
-
}
|
36 |
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
classMethod: 'remove'
|
42 |
-
};
|
43 |
|
44 |
-
|
45 |
-
|
|
|
46 |
|
47 |
-
|
48 |
-
|
|
|
|
|
49 |
|
50 |
-
|
51 |
-
api.previewer.trigger('happyforms-part-dom-update', eventData);
|
52 |
-
},
|
53 |
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
};
|
64 |
|
65 |
-
|
66 |
-
|
67 |
-
display: 'block'
|
68 |
-
};
|
69 |
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
eventData['css'] = {
|
75 |
-
display: 'none'
|
76 |
};
|
77 |
|
78 |
-
|
79 |
-
|
80 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
81 |
}
|
82 |
|
83 |
-
|
84 |
-
|
85 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
86 |
} );
|
87 |
|
88 |
happyForms.factory.model = _.wrap( happyForms.factory.model, function( func, attrs, options, BaseClass ) {
|
11 |
} );
|
12 |
|
13 |
var DateView = happyForms.classes.views.Part.extend( {
|
14 |
+
template: '#happyforms-customize-date-template',
|
15 |
|
16 |
initialize: function () {
|
17 |
+
happyForms.classes.views.Part.prototype.initialize.apply( this, arguments );
|
18 |
|
19 |
+
this.listenTo( this.model, 'change:date_type', this.onDateTypeChange );
|
20 |
+
this.listenTo( this.model, 'change:time_format', this.onTimeFormatChange );
|
21 |
},
|
22 |
|
23 |
+
onDateTypeChange: function() {
|
24 |
+
var $timeOptions = $( '.time-options', this.$el );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
25 |
|
26 |
+
switch ( this.model.get( 'date_type' ) ) {
|
27 |
+
case 'date':
|
28 |
+
$timeOptions.hide();
|
29 |
+
break;
|
|
|
|
|
30 |
|
31 |
+
case 'datetime':
|
32 |
+
$timeOptions.show();
|
33 |
+
break;
|
34 |
|
35 |
+
case 'time':
|
36 |
+
$timeOptions.show();
|
37 |
+
break;
|
38 |
+
}
|
39 |
|
40 |
+
var model = this.model;
|
|
|
|
|
41 |
|
42 |
+
model.fetchHtml( function( response ) {
|
43 |
+
var data = {
|
44 |
+
id: model.get( 'id' ),
|
45 |
+
html: response,
|
46 |
+
};
|
47 |
|
48 |
+
api.previewer.send( 'happyforms-form-part-refresh', data );
|
49 |
+
} );
|
50 |
+
},
|
|
|
51 |
|
52 |
+
onTimeFormatChange: function() {
|
53 |
+
var model = this.model;
|
|
|
|
|
54 |
|
55 |
+
model.fetchHtml( function( response ) {
|
56 |
+
var data = {
|
57 |
+
id: model.get( 'id' ),
|
58 |
+
html: response,
|
|
|
|
|
59 |
};
|
60 |
|
61 |
+
api.previewer.send( 'happyforms-form-part-refresh', data );
|
62 |
+
} );
|
63 |
+
}
|
64 |
+
} );
|
65 |
+
|
66 |
+
happyForms.previewer = _.extend( happyForms.previewer, {
|
67 |
+
onDateDateTypeChangeCallback: function( id, html, options ) {
|
68 |
+
var part = this.getPartModel( id );
|
69 |
+
var $part = this.getPartElement( html );
|
70 |
+
var dateType = part.get( 'date_type' );
|
71 |
+
|
72 |
+
switch ( dateType ) {
|
73 |
+
case 'date':
|
74 |
+
$part.removeClass( 'happyforms-part-date--datetime' );
|
75 |
+
$part.removeClass( 'happyforms-part-date--time' );
|
76 |
+
break;
|
77 |
+
|
78 |
+
case 'datetime':
|
79 |
+
$part.removeClass( 'happyforms-part-date--date' );
|
80 |
+
$part.removeClass( 'happyforms-part-date--time' );
|
81 |
+
break;
|
82 |
+
|
83 |
+
case 'time':
|
84 |
+
$part.removeClass( 'happyforms-part-date--date' );
|
85 |
+
$part.removeClass( 'happyforms-part-date--datetime' );
|
86 |
+
break;
|
87 |
}
|
88 |
|
89 |
+
$part.addClass( 'happyforms-part-date--' + dateType );
|
90 |
+
},
|
91 |
+
|
92 |
+
onDateTimeFormatChange: function( id, html, options ) {
|
93 |
+
var part = this.getPartModel( id );
|
94 |
+
var $part = this.getPartElement( html );
|
95 |
+
var $period = this.$( '.happyforms-part-date__time-input--period', $part );
|
96 |
+
var $hours = this.$( '.format-24', $part );
|
97 |
+
|
98 |
+
if ( '12' === part.get( 'time_format' ) ) {
|
99 |
+
$period.show();
|
100 |
+
$hours.hide();
|
101 |
+
} else {
|
102 |
+
$period.hide();
|
103 |
+
$hours.show();
|
104 |
+
}
|
105 |
+
},
|
106 |
} );
|
107 |
|
108 |
happyForms.factory.model = _.wrap( happyForms.factory.model, function( func, attrs, options, BaseClass ) {
|
assets/js/parts/part-email.js
CHANGED
@@ -11,75 +11,73 @@
|
|
11 |
} );
|
12 |
|
13 |
var EmailView = happyForms.classes.views.Part.extend( {
|
14 |
-
template: '#happyforms-email-template',
|
15 |
-
confirmationFieldTemplate: '#happyforms-email-confirmation-template',
|
16 |
-
|
17 |
-
events: _.extend({}, happyForms.classes.views.Part.prototype.events, {
|
18 |
-
'change .confirmation-checkbox': 'onConfirmationCheckboxChange'
|
19 |
-
}),
|
20 |
|
21 |
initialize: function() {
|
22 |
happyForms.classes.views.Part.prototype.initialize.apply(this, arguments);
|
23 |
|
24 |
-
this.listenTo(this.model, 'change:
|
|
|
25 |
},
|
26 |
|
27 |
/**
|
28 |
* Trigger previewer event on 'Require confirmation of the value' checkbox change.
|
29 |
* Adds a new confirmation field to preview.
|
30 |
-
*
|
31 |
* @since 1.0.0.
|
32 |
-
*
|
33 |
* @param {object} e JS event.
|
34 |
-
*
|
35 |
* @return void
|
36 |
*/
|
37 |
-
|
38 |
-
|
39 |
-
this.model.set('confirmation_field_id', this.model.get('id') + '_confirmation');
|
40 |
-
|
41 |
-
this.$el.find('.confirmation-field-setting').show();
|
42 |
-
|
43 |
-
var template = _.template($(this.confirmationFieldTemplate).html());
|
44 |
-
var html = template(this.model.toJSON());
|
45 |
|
46 |
-
|
47 |
-
|
48 |
-
'element': html
|
49 |
-
};
|
50 |
-
|
51 |
-
api.previewer.trigger('happyforms-sub-part-added', eventData);
|
52 |
} else {
|
53 |
-
|
|
|
54 |
|
55 |
-
|
56 |
-
|
|
|
|
|
|
|
|
|
57 |
};
|
58 |
|
59 |
-
api.previewer.
|
60 |
-
}
|
61 |
},
|
62 |
|
63 |
/**
|
64 |
* Send updated confirmation field label value to previewer.
|
65 |
-
*
|
66 |
* @since 1.0.0.
|
67 |
-
*
|
68 |
* @return void
|
69 |
*/
|
70 |
onConfirmationLabelChange: function() {
|
71 |
-
var
|
72 |
-
|
73 |
-
|
74 |
-
'part_id': this.model.get('id'),
|
75 |
-
'selector': '.happyforms-part__label--confirmation .label',
|
76 |
-
'text': value
|
77 |
};
|
78 |
|
79 |
-
api.previewer.
|
80 |
}
|
81 |
} );
|
82 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
83 |
happyForms.factory.model = _.wrap( happyForms.factory.model, function( func, attrs, options, BaseClass ) {
|
84 |
if ( 'email' === attrs.type ) {
|
85 |
BaseClass = EmailModel;
|
11 |
} );
|
12 |
|
13 |
var EmailView = happyForms.classes.views.Part.extend( {
|
14 |
+
template: '#customize-happyforms-email-template',
|
|
|
|
|
|
|
|
|
|
|
15 |
|
16 |
initialize: function() {
|
17 |
happyForms.classes.views.Part.prototype.initialize.apply(this, arguments);
|
18 |
|
19 |
+
this.listenTo( this.model, 'change:confirmation_field', this.onConfirmationChange );
|
20 |
+
this.listenTo( this.model, 'change:confirmation_field_label', this.onConfirmationLabelChange );
|
21 |
},
|
22 |
|
23 |
/**
|
24 |
* Trigger previewer event on 'Require confirmation of the value' checkbox change.
|
25 |
* Adds a new confirmation field to preview.
|
26 |
+
*
|
27 |
* @since 1.0.0.
|
28 |
+
*
|
29 |
* @param {object} e JS event.
|
30 |
+
*
|
31 |
* @return void
|
32 |
*/
|
33 |
+
onConfirmationChange: function( e ) {
|
34 |
+
$confirmationSettings = $( '.confirmation-field-setting', this.$el );
|
|
|
|
|
|
|
|
|
|
|
|
|
35 |
|
36 |
+
if ( this.model.get( 'confirmation_field' ) ) {
|
37 |
+
$confirmationSettings.show();
|
|
|
|
|
|
|
|
|
38 |
} else {
|
39 |
+
$confirmationSettings.hide();
|
40 |
+
}
|
41 |
|
42 |
+
var model = this.model;
|
43 |
+
|
44 |
+
model.fetchHtml( function( response ) {
|
45 |
+
var data = {
|
46 |
+
id: model.get( 'id' ),
|
47 |
+
html: response,
|
48 |
};
|
49 |
|
50 |
+
api.previewer.send( 'happyforms-form-part-refresh', data );
|
51 |
+
} );
|
52 |
},
|
53 |
|
54 |
/**
|
55 |
* Send updated confirmation field label value to previewer.
|
56 |
+
*
|
57 |
* @since 1.0.0.
|
58 |
+
*
|
59 |
* @return void
|
60 |
*/
|
61 |
onConfirmationLabelChange: function() {
|
62 |
+
var data = {
|
63 |
+
id: this.model.get( 'id' ),
|
64 |
+
callback: 'onEmailConfirmationLabelChangeCallback',
|
|
|
|
|
|
|
65 |
};
|
66 |
|
67 |
+
api.previewer.send( 'happyforms-part-dom-update', data );
|
68 |
}
|
69 |
} );
|
70 |
|
71 |
+
happyForms.previewer = _.extend( happyForms.previewer, {
|
72 |
+
onEmailConfirmationLabelChangeCallback: function( id, html, options ) {
|
73 |
+
var part = this.getPartModel( id );
|
74 |
+
var $part = this.getPartElement( html );
|
75 |
+
var $label = this.$( '.happyforms-part__label--confirmation .label', $part );
|
76 |
+
|
77 |
+
$label.text( part.get( 'confirmation_field_label' ) );
|
78 |
+
},
|
79 |
+
} );
|
80 |
+
|
81 |
happyForms.factory.model = _.wrap( happyForms.factory.model, function( func, attrs, options, BaseClass ) {
|
82 |
if ( 'email' === attrs.type ) {
|
83 |
BaseClass = EmailModel;
|
assets/js/parts/part-legal.js
CHANGED
@@ -1,49 +1,57 @@
|
|
1 |
(function ($, _, Backbone, api, settings) {
|
2 |
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
(function ($, _, Backbone, api, settings) {
|
2 |
|
3 |
+
var LegalModel = happyForms.classes.models.Part.extend( {
|
4 |
+
defaults: function () {
|
5 |
+
return _.extend(
|
6 |
+
{},
|
7 |
+
settings.formParts.legal.defaults,
|
8 |
+
_.result( happyForms.classes.models.Part.prototype, 'defaults' ),
|
9 |
+
);
|
10 |
+
},
|
11 |
+
} );
|
12 |
+
|
13 |
+
var LegalView = happyForms.classes.views.Part.extend( {
|
14 |
+
template: '#happyforms-customize-legal-template',
|
15 |
+
|
16 |
+
initialize: function() {
|
17 |
+
happyForms.classes.views.Part.prototype.initialize.apply( this, arguments );
|
18 |
+
|
19 |
+
this.listenTo( this.model, 'change:legal_text', this.onLegalTextChange );
|
20 |
+
},
|
21 |
+
|
22 |
+
onLegalTextChange: function() {
|
23 |
+
var data = {
|
24 |
+
id: this.model.get( 'id' ),
|
25 |
+
callback: 'onLegalLegalTextChange',
|
26 |
+
};
|
27 |
+
|
28 |
+
api.previewer.send( 'happyforms-part-dom-update', data );
|
29 |
+
}
|
30 |
+
} );
|
31 |
+
|
32 |
+
happyForms.previewer = _.extend( happyForms.previewer, {
|
33 |
+
onLegalLegalTextChange: function( id, html, options ) {
|
34 |
+
var part = this.getPartModel( id );
|
35 |
+
var $part = this.getPartElement( html );
|
36 |
+
|
37 |
+
this.$( 'label span', $part ).text( part.get( 'legal_text' ) );
|
38 |
+
},
|
39 |
+
} );
|
40 |
+
|
41 |
+
happyForms.factory.model = _.wrap( happyForms.factory.model, function ( func, attrs, options, BaseClass ) {
|
42 |
+
if ( 'legal' === attrs.type ) {
|
43 |
+
BaseClass = LegalModel;
|
44 |
+
}
|
45 |
+
|
46 |
+
return func( attrs, options, BaseClass );
|
47 |
+
} );
|
48 |
+
|
49 |
+
happyForms.factory.view = _.wrap( happyForms.factory.view, function ( func, options, BaseClass ) {
|
50 |
+
if ( 'legal' === options.type ) {
|
51 |
+
BaseClass = LegalView;
|
52 |
+
}
|
53 |
+
|
54 |
+
return func( options, BaseClass );
|
55 |
+
} );
|
56 |
+
|
57 |
+
} )( jQuery, _, Backbone, wp.customize, _happyFormsSettings );
|
assets/js/parts/part-multi-line-text.js
CHANGED
@@ -11,34 +11,40 @@
|
|
11 |
} );
|
12 |
|
13 |
var MultiLineTextView = happyForms.classes.views.Part.extend( {
|
14 |
-
template: '#happyforms-multi-line-text-template',
|
15 |
|
16 |
initialize: function() {
|
17 |
happyForms.classes.views.Part.prototype.initialize.apply(this, arguments);
|
18 |
|
19 |
-
this.listenTo(this.model, 'change:placeholder', this.onPlaceholderChange)
|
20 |
},
|
21 |
|
22 |
/**
|
23 |
* Send updated placeholder value to previewer. Added as a special method because of 'textarea' selector used instead of 'input'.
|
24 |
-
*
|
25 |
* @since 1.0.0.
|
26 |
-
*
|
27 |
* @return void
|
28 |
*/
|
29 |
onPlaceholderChange: function() {
|
30 |
-
var
|
31 |
-
|
32 |
-
|
33 |
-
attributes: {
|
34 |
-
'placeholder': this.model.get('placeholder')
|
35 |
-
}
|
36 |
};
|
37 |
|
38 |
-
api.previewer.
|
39 |
}
|
40 |
} );
|
41 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
42 |
happyForms.factory.model = _.wrap( happyForms.factory.model, function( func, attrs, options, BaseClass ) {
|
43 |
if ( 'multi_line_text' === attrs.type ) {
|
44 |
BaseClass = MultiLineTextModel;
|
11 |
} );
|
12 |
|
13 |
var MultiLineTextView = happyForms.classes.views.Part.extend( {
|
14 |
+
template: '#customize-happyforms-multi-line-text-template',
|
15 |
|
16 |
initialize: function() {
|
17 |
happyForms.classes.views.Part.prototype.initialize.apply(this, arguments);
|
18 |
|
19 |
+
this.listenTo( this.model, 'change:placeholder', this.onPlaceholderChange )
|
20 |
},
|
21 |
|
22 |
/**
|
23 |
* Send updated placeholder value to previewer. Added as a special method because of 'textarea' selector used instead of 'input'.
|
24 |
+
*
|
25 |
* @since 1.0.0.
|
26 |
+
*
|
27 |
* @return void
|
28 |
*/
|
29 |
onPlaceholderChange: function() {
|
30 |
+
var data = {
|
31 |
+
id: this.model.get( 'id' ),
|
32 |
+
callback: 'onMultiLineTextPlaceholderChange',
|
|
|
|
|
|
|
33 |
};
|
34 |
|
35 |
+
api.previewer.send( 'happyforms-part-dom-update', data );
|
36 |
}
|
37 |
} );
|
38 |
|
39 |
+
happyForms.previewer = _.extend( happyForms.previewer, {
|
40 |
+
onMultiLineTextPlaceholderChange: function( id, html, options ) {
|
41 |
+
var part = this.getPartModel( id );
|
42 |
+
var $part = this.getPartElement( html );
|
43 |
+
|
44 |
+
this.$( 'textarea', $part ).attr( 'placeholder', part.get( 'placeholder' ) );
|
45 |
+
},
|
46 |
+
} );
|
47 |
+
|
48 |
happyForms.factory.model = _.wrap( happyForms.factory.model, function( func, attrs, options, BaseClass ) {
|
49 |
if ( 'multi_line_text' === attrs.type ) {
|
50 |
BaseClass = MultiLineTextModel;
|
assets/js/parts/part-number.js
CHANGED
@@ -11,107 +11,162 @@
|
|
11 |
} );
|
12 |
|
13 |
var NumberView = happyForms.classes.views.Part.extend( {
|
14 |
-
template: '#happyforms-number-template',
|
15 |
-
confirmationFieldTemplate: '#happyforms-number-confirmation-template',
|
16 |
|
17 |
events: _.extend( {}, happyForms.classes.views.Part.prototype.events, {
|
18 |
'change [name=masked]': 'onMaskedChange',
|
19 |
-
'change .confirmation-checkbox': 'onConfirmationCheckboxChange'
|
20 |
} ),
|
21 |
|
22 |
initialize: function () {
|
23 |
-
happyForms.classes.views.Part.prototype.initialize.apply(this, arguments);
|
24 |
|
25 |
-
this.listenTo(this.model, 'change:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
26 |
},
|
27 |
|
28 |
/**
|
29 |
* Toggle masked input configuration on `Mask this input` checkbox change.
|
30 |
-
*
|
31 |
* @since 1.0.0.
|
32 |
-
*
|
33 |
* @param {object} e JS event.
|
34 |
-
*
|
35 |
* @return void
|
36 |
*/
|
37 |
onMaskedChange: function(e) {
|
38 |
-
var $input = $(e.target);
|
39 |
-
var attribute = $input.data('bind');
|
40 |
-
var $maskWrapper = this.$el.find('.mask-wrapper');
|
41 |
|
42 |
-
if ($input.is(':checked')) {
|
43 |
-
this.model.set(attribute, 1);
|
44 |
|
45 |
// hide inputs for min / max value setting
|
46 |
-
this.$el.find('.min-max-wrapper').hide();
|
47 |
-
|
48 |
// show actual mask input
|
49 |
$maskWrapper.show();
|
50 |
} else {
|
51 |
-
this.model.set(attribute, 0);
|
52 |
|
53 |
// show inputs for min / max value setting
|
54 |
-
this.$el.find('.min-max-wrapper').show();
|
55 |
|
56 |
// empty mask input and hide
|
57 |
-
$maskWrapper.find('input').val('');
|
58 |
$maskWrapper.hide();
|
59 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
60 |
},
|
61 |
|
62 |
/**
|
63 |
-
*
|
64 |
-
*
|
65 |
-
*
|
66 |
* @since 1.0.0.
|
67 |
-
*
|
68 |
-
* @param {object} e JS event.
|
69 |
-
*
|
70 |
* @return void
|
71 |
*/
|
72 |
-
|
73 |
-
|
74 |
-
|
|
|
|
|
75 |
|
76 |
-
|
|
|
77 |
|
78 |
-
|
79 |
-
|
|
|
|
|
|
|
80 |
|
81 |
-
|
82 |
-
|
83 |
-
'element': html
|
84 |
-
};
|
85 |
|
86 |
-
|
87 |
-
|
88 |
-
this
|
|
|
|
|
89 |
|
90 |
-
|
91 |
-
|
92 |
-
};
|
93 |
|
94 |
-
|
95 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
96 |
},
|
97 |
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
* @since 1.0.0.
|
102 |
-
*
|
103 |
-
* @return void
|
104 |
-
*/
|
105 |
-
onConfirmationLabelChange: function () {
|
106 |
-
var value = this.model.get('confirmation_field_label');
|
107 |
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
113 |
|
114 |
-
|
|
|
115 |
}
|
116 |
} );
|
117 |
|
11 |
} );
|
12 |
|
13 |
var NumberView = happyForms.classes.views.Part.extend( {
|
14 |
+
template: '#happyforms-customize-number-template',
|
|
|
15 |
|
16 |
events: _.extend( {}, happyForms.classes.views.Part.prototype.events, {
|
17 |
'change [name=masked]': 'onMaskedChange',
|
|
|
18 |
} ),
|
19 |
|
20 |
initialize: function () {
|
21 |
+
happyForms.classes.views.Part.prototype.initialize.apply( this, arguments );
|
22 |
|
23 |
+
this.listenTo( this.model, 'change:confirmation_field', this.onConfirmationChange );
|
24 |
+
this.listenTo( this.model, 'change:confirmation_field_label', this.onConfirmationLabelChange );
|
25 |
+
this.listenTo( this.model, 'change:mask_numeric_thousands_delimiter', this.onThousandsDelimiterChange );
|
26 |
+
this.listenTo( this.model, 'change:mask_numeric_decimal_mark', this.onDecimalMarkChange );
|
27 |
+
this.listenTo( this.model, 'change:mask_numeric_prefix', this.onPrefixChange );
|
28 |
+
},
|
29 |
+
|
30 |
+
onConfirmationChange: function( e ) {
|
31 |
+
$confirmationSettings = $( '.confirmation-field-setting', this.$el );
|
32 |
+
|
33 |
+
if ( this.model.get( 'confirmation_field' ) ) {
|
34 |
+
$confirmationSettings.show();
|
35 |
+
} else {
|
36 |
+
$confirmationSettings.hide();
|
37 |
+
}
|
38 |
+
|
39 |
+
var model = this.model;
|
40 |
+
|
41 |
+
model.fetchHtml( function( response ) {
|
42 |
+
var data = {
|
43 |
+
id: model.get( 'id' ),
|
44 |
+
html: response,
|
45 |
+
};
|
46 |
+
|
47 |
+
api.previewer.send( 'happyforms-form-part-refresh', data );
|
48 |
+
} );
|
49 |
},
|
50 |
|
51 |
/**
|
52 |
* Toggle masked input configuration on `Mask this input` checkbox change.
|
53 |
+
*
|
54 |
* @since 1.0.0.
|
55 |
+
*
|
56 |
* @param {object} e JS event.
|
57 |
+
*
|
58 |
* @return void
|
59 |
*/
|
60 |
onMaskedChange: function(e) {
|
61 |
+
var $input = $( e.target );
|
62 |
+
var attribute = $input.data( 'bind' );
|
63 |
+
var $maskWrapper = this.$el.find( '.mask-wrapper' );
|
64 |
|
65 |
+
if ( $input.is( ':checked' ) ) {
|
66 |
+
this.model.set( attribute, 1 );
|
67 |
|
68 |
// hide inputs for min / max value setting
|
69 |
+
this.$el.find( '.min-max-wrapper' ).hide();
|
70 |
+
|
71 |
// show actual mask input
|
72 |
$maskWrapper.show();
|
73 |
} else {
|
74 |
+
this.model.set( attribute, 0 );
|
75 |
|
76 |
// show inputs for min / max value setting
|
77 |
+
this.$el.find( '.min-max-wrapper' ).show();
|
78 |
|
79 |
// empty mask input and hide
|
|
|
80 |
$maskWrapper.hide();
|
81 |
}
|
82 |
+
|
83 |
+
var model = this.model;
|
84 |
+
|
85 |
+
this.model.fetchHtml( function( response ) {
|
86 |
+
var data = {
|
87 |
+
id: model.get( 'id' ),
|
88 |
+
html: response,
|
89 |
+
};
|
90 |
+
|
91 |
+
api.previewer.send( 'happyforms-form-part-refresh', data );
|
92 |
+
} );
|
93 |
},
|
94 |
|
95 |
/**
|
96 |
+
* Send updated confirmation field label value to previewer.
|
97 |
+
*
|
|
|
98 |
* @since 1.0.0.
|
99 |
+
*
|
|
|
|
|
100 |
* @return void
|
101 |
*/
|
102 |
+
onConfirmationLabelChange: function () {
|
103 |
+
var data = {
|
104 |
+
id: this.model.get( 'id' ),
|
105 |
+
callback: 'onNumberConfirmationLabelChangeCallback',
|
106 |
+
};
|
107 |
|
108 |
+
api.previewer.send( 'happyforms-part-dom-update', data );
|
109 |
+
},
|
110 |
|
111 |
+
onThousandsDelimiterChange: function() {
|
112 |
+
var data = {
|
113 |
+
id: this.model.get( 'id' ),
|
114 |
+
callback: 'onNumberThousandsDelimiterChangeCallback',
|
115 |
+
};
|
116 |
|
117 |
+
api.previewer.send( 'happyforms-part-dom-update', data );
|
118 |
+
},
|
|
|
|
|
119 |
|
120 |
+
onDecimalMarkChange: function() {
|
121 |
+
var data = {
|
122 |
+
id: this.model.get( 'id' ),
|
123 |
+
callback: 'onNumberDecimalMarkChangeCallback',
|
124 |
+
};
|
125 |
|
126 |
+
api.previewer.send( 'happyforms-part-dom-update', data );
|
127 |
+
},
|
|
|
128 |
|
129 |
+
onPrefixChange: function() {
|
130 |
+
var data = {
|
131 |
+
id: this.model.get( 'id' ),
|
132 |
+
callback: 'onNumberPrefixChangeCallback',
|
133 |
+
};
|
134 |
+
|
135 |
+
api.previewer.send( 'happyforms-part-dom-update', data );
|
136 |
+
}
|
137 |
+
} );
|
138 |
+
|
139 |
+
happyForms.previewer = _.extend( happyForms.previewer, {
|
140 |
+
onNumberConfirmationLabelChangeCallback: function( id, html, options ) {
|
141 |
+
var part = this.getPartModel( id );
|
142 |
+
var $part = this.getPartElement( html );
|
143 |
+
var $confirmationLabel = this.$( '.happyforms-part__label--confirmation .label', $part );
|
144 |
+
|
145 |
+
$confirmationLabel.text( part.get('confirmation_field_label') );
|
146 |
},
|
147 |
|
148 |
+
onNumberThousandsDelimiterChangeCallback: function( id, html, options, $ ) {
|
149 |
+
var part = this.getPartModel( id );
|
150 |
+
var $part = this.getPartElement( html );
|
|
|
|
|
|
|
|
|
|
|
|
|
151 |
|
152 |
+
$part.attr( 'data-thousands-delimiter', part.get( 'mask_numeric_thousands_delimiter' ) );
|
153 |
+
$.fn.happyFormPart.call( $part, 'reinit' );
|
154 |
+
},
|
155 |
+
|
156 |
+
onNumberDecimalMarkChangeCallback: function( id, html, options, $ ) {
|
157 |
+
var part = this.getPartModel( id );
|
158 |
+
var $part = this.getPartElement( html );
|
159 |
+
|
160 |
+
$part.attr( 'data-decimal-mark', part.get( 'mask_numeric_decimal_mark' ) );
|
161 |
+
$.fn.happyFormPart.call( $part, 'reinit' );
|
162 |
+
},
|
163 |
+
|
164 |
+
onNumberPrefixChangeCallback: function( id, html, options, $ ) {
|
165 |
+
var part = this.getPartModel( id );
|
166 |
+
var $part = this.getPartElement( html );
|
167 |
|
168 |
+
$part.attr( 'data-prefix', part.get( 'mask_numeric_prefix' ) );
|
169 |
+
$.fn.happyFormPart.call( $part, 'reinit' );
|
170 |
}
|
171 |
} );
|
172 |
|
assets/js/parts/part-phone.js
CHANGED
@@ -1,130 +1,157 @@
|
|
1 |
-
(function ($, _, Backbone, api, settings) {
|
2 |
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
|
13 |
-
|
14 |
-
|
15 |
-
confirmationFieldTemplate: '#happyforms-phone-confirmation-template',
|
16 |
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
}),
|
21 |
|
22 |
-
|
23 |
-
|
24 |
|
25 |
-
|
26 |
-
|
|
|
|
|
27 |
|
28 |
/**
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
57 |
|
58 |
/**
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
}
|
|
|
|
1 |
+
( function ( $, _, Backbone, api, settings ) {
|
2 |
|
3 |
+
var PhoneModel = happyForms.classes.models.Part.extend( {
|
4 |
+
defaults: function () {
|
5 |
+
return _.extend(
|
6 |
+
{},
|
7 |
+
settings.formParts.phone.defaults,
|
8 |
+
_.result( happyForms.classes.models.Part.prototype, 'defaults' ),
|
9 |
+
);
|
10 |
+
},
|
11 |
+
} );
|
12 |
|
13 |
+
var PhoneView = happyForms.classes.views.Part.extend( {
|
14 |
+
template: '#happyforms-customize-phone-template',
|
|
|
15 |
|
16 |
+
events: _.extend( {}, happyForms.classes.views.Part.prototype.events, {
|
17 |
+
'change [name=masked]': 'onMaskedChange',
|
18 |
+
} ),
|
|
|
19 |
|
20 |
+
initialize: function () {
|
21 |
+
happyForms.classes.views.Part.prototype.initialize.apply( this, arguments );
|
22 |
|
23 |
+
this.listenTo( this.model, 'change:confirmation_field', this.onConfirmationChange );
|
24 |
+
this.listenTo( this.model, 'change:confirmation_field_label', this.onConfirmationLabelChange );
|
25 |
+
this.listenTo( this.model, 'change:mask_phone_country', this.onCountryChange );
|
26 |
+
},
|
27 |
|
28 |
/**
|
29 |
+
* Toggle masked input configuration on `Mask this input` checkbox change.
|
30 |
+
*
|
31 |
+
* @since 1.0.0.
|
32 |
+
*
|
33 |
+
* @param {object} e JS event.
|
34 |
+
*
|
35 |
+
* @return void
|
36 |
+
*/
|
37 |
+
onMaskedChange: function( e ) {
|
38 |
+
var $input = $( e.target );
|
39 |
+
var attribute = $input.data( 'bind' );
|
40 |
+
var $maskWrapper = $( '.number-options--phone', this.$el );
|
41 |
+
|
42 |
+
if ( $input.is( ':checked' ) ) {
|
43 |
+
this.model.set( attribute, 1 );
|
44 |
+
$maskWrapper.show();
|
45 |
+
} else {
|
46 |
+
this.model.set( attribute, 0 );
|
47 |
+
$maskWrapper.hide();
|
48 |
+
}
|
49 |
+
|
50 |
+
var model = this.model;
|
51 |
+
|
52 |
+
this.model.fetchHtml( function( response ) {
|
53 |
+
var data = {
|
54 |
+
id: model.get( 'id' ),
|
55 |
+
html: response,
|
56 |
+
};
|
57 |
+
|
58 |
+
api.previewer.send( 'happyforms-form-part-refresh', data );
|
59 |
+
} );
|
60 |
+
},
|
61 |
+
|
62 |
+
onConfirmationChange: function( e ) {
|
63 |
+
$confirmationSettings = $( '.confirmation-field-setting', this.$el );
|
64 |
+
|
65 |
+
if ( this.model.get( 'confirmation_field' ) ) {
|
66 |
+
$confirmationSettings.show();
|
67 |
+
} else {
|
68 |
+
$confirmationSettings.hide();
|
69 |
+
}
|
70 |
+
|
71 |
+
var model = this.model;
|
72 |
+
|
73 |
+
model.fetchHtml( function( response ) {
|
74 |
+
var data = {
|
75 |
+
id: model.get( 'id' ),
|
76 |
+
html: response,
|
77 |
+
};
|
78 |
+
|
79 |
+
api.previewer.send( 'happyforms-form-part-refresh', data );
|
80 |
+
} );
|
81 |
+
},
|
82 |
|
83 |
/**
|
84 |
+
* Send updated confirmation field label value to previewer.
|
85 |
+
*
|
86 |
+
* @since 1.0.0.
|
87 |
+
*
|
88 |
+
* @return void
|
89 |
+
*/
|
90 |
+
onConfirmationLabelChange: function () {
|
91 |
+
var data = {
|
92 |
+
id: this.model.get( 'id' ),
|
93 |
+
callback: 'onPhoneConfirmationLabelChange',
|
94 |
+
};
|
95 |
+
|
96 |
+
api.previewer.send( 'happyforms-part-dom-update', data );
|
97 |
+
},
|
98 |
+
|
99 |
+
onCountryChange: function() {
|
100 |
+
var data = {
|
101 |
+
id: this.model.get( 'id' ),
|
102 |
+
callback: 'onPhoneCountryChangeCallback',
|
103 |
+
};
|
104 |
+
|
105 |
+
api.previewer.send( 'happyforms-part-dom-update', data );
|
106 |
+
},
|
107 |
+
} );
|
108 |
+
|
109 |
+
happyForms.previewer = _.extend( happyForms.previewer, {
|
110 |
+
onPhoneConfirmationAdd: function( id, html, options ) {
|
111 |
+
var part = this.getPartModel( id );
|
112 |
+
var $part = this.getPartElement( html );
|
113 |
+
|
114 |
+
$part.append( this.$( options.confirmationHTML ) );
|
115 |
+
},
|
116 |
+
|
117 |
+
onPhoneConfirmationRemove: function( id, html, options ) {
|
118 |
+
var part = this.getPartModel( id );
|
119 |
+
var $part = this.getPartElement( html );
|
120 |
+
|
121 |
+
this.$( '#' + part.id + '_confirmation', $part ).remove();
|
122 |
+
},
|
123 |
+
|
124 |
+
onPhoneConfirmationLabelChange: function( id, html, options ) {
|
125 |
+
var part = this.getPartModel( id );
|
126 |
+
var $part = this.getPartElement( html );
|
127 |
+
var $confirmationLabel = this.$( '.happyforms-part__label--confirmation .label', $part );
|
128 |
+
|
129 |
+
$confirmationLabel.text( part.get('confirmation_field_label') );
|
130 |
+
},
|
131 |
+
|
132 |
+
onPhoneCountryChangeCallback: function( id, html, options, $ ) {
|
133 |
+
var part = this.getPartModel( id );
|
134 |
+
var $part = this.getPartElement( html );
|
135 |
+
|
136 |
+
$part.attr( 'data-country', part.get( 'mask_phone_country' ) );
|
137 |
+
$.fn.happyFormPart.call( $part, 'reinit' );
|
138 |
+
},
|
139 |
+
} );
|
140 |
+
|
141 |
+
happyForms.factory.model = _.wrap( happyForms.factory.model, function ( func, attrs, options, BaseClass ) {
|
142 |
+
if ( 'phone' === attrs.type ) {
|
143 |
+
BaseClass = PhoneModel;
|
144 |
+
}
|
145 |
+
|
146 |
+
return func( attrs, options, BaseClass );
|
147 |
+
} );
|
148 |
+
|
149 |
+
happyForms.factory.view = _.wrap( happyForms.factory.view, function ( func, options, BaseClass ) {
|
150 |
+
if ( 'phone' === options.type ) {
|
151 |
+
BaseClass = PhoneView;
|
152 |
+
}
|
153 |
+
|
154 |
+
return func( options, BaseClass );
|
155 |
+
} );
|
156 |
+
|
157 |
+
} )( jQuery, _, Backbone, wp.customize, _happyFormsSettings );
|
assets/js/parts/part-placeholder.js
CHANGED
@@ -11,7 +11,7 @@
|
|
11 |
} );
|
12 |
|
13 |
var PlaceholderView = happyForms.classes.views.Part.extend( {
|
14 |
-
template: '#happyforms-placeholder-template',
|
15 |
editor: null,
|
16 |
|
17 |
ready: function() {
|
@@ -41,32 +41,31 @@
|
|
41 |
|
42 |
/**
|
43 |
* Triggere previewer event on each `keyup` and `change` event in the WP editor.
|
44 |
-
*
|
45 |
* @since 1.0.0.
|
46 |
-
*
|
47 |
* @param {object} editor TinyMCE editor JS object.
|
48 |
-
*
|
49 |
* @return void
|
50 |
*/
|
51 |
onEditorInit: function( editor ) {
|
52 |
editor.on( 'keyup change', function() {
|
53 |
this.model.set( 'placeholder_text', editor.getContent() );
|
54 |
|
55 |
-
var
|
56 |
-
|
57 |
-
|
58 |
-
html: editor.getContent()
|
59 |
};
|
60 |
|
61 |
-
api.previewer.
|
62 |
}.bind( this ) );
|
63 |
},
|
64 |
|
65 |
/**
|
66 |
* Add a special treatment for removing WP editor when the part is removed.
|
67 |
-
*
|
68 |
* @since 1.0.0.
|
69 |
-
*
|
70 |
* @return void
|
71 |
*/
|
72 |
remove: function() {
|
@@ -79,6 +78,15 @@
|
|
79 |
}
|
80 |
} );
|
81 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
82 |
happyForms.factory.model = _.wrap( happyForms.factory.model, function( func, attrs, options, BaseClass ) {
|
83 |
if ( 'placeholder' === attrs.type ) {
|
84 |
BaseClass = PlaceholderModel;
|
11 |
} );
|
12 |
|
13 |
var PlaceholderView = happyForms.classes.views.Part.extend( {
|
14 |
+
template: '#happyforms-customize-placeholder-template',
|
15 |
editor: null,
|
16 |
|
17 |
ready: function() {
|
41 |
|
42 |
/**
|
43 |
* Triggere previewer event on each `keyup` and `change` event in the WP editor.
|
44 |
+
*
|
45 |
* @since 1.0.0.
|
46 |
+
*
|
47 |
* @param {object} editor TinyMCE editor JS object.
|
48 |
+
*
|
49 |
* @return void
|
50 |
*/
|
51 |
onEditorInit: function( editor ) {
|
52 |
editor.on( 'keyup change', function() {
|
53 |
this.model.set( 'placeholder_text', editor.getContent() );
|
54 |
|
55 |
+
var data = {
|
56 |
+
id: this.model.get( 'id' ),
|
57 |
+
callback: 'onPlaceholderTextChange',
|
|
|
58 |
};
|
59 |
|
60 |
+
api.previewer.send( 'happyforms-part-dom-update', data );
|
61 |
}.bind( this ) );
|
62 |
},
|
63 |
|
64 |
/**
|
65 |
* Add a special treatment for removing WP editor when the part is removed.
|
66 |
+
*
|
67 |
* @since 1.0.0.
|
68 |
+
*
|
69 |
* @return void
|
70 |
*/
|
71 |
remove: function() {
|
78 |
}
|
79 |
} );
|
80 |
|
81 |
+
happyForms.previewer = _.extend( happyForms.previewer, {
|
82 |
+
onPlaceholderTextChange: function( id, html, options ) {
|
83 |
+
var part = this.getPartModel( id );
|
84 |
+
var $part = this.getPartElement( html );
|
85 |
+
|
86 |
+
this.$( '.happyforms-part__el', $part ).html( part.get( 'placeholder_text' ) );
|
87 |
+
},
|
88 |
+
} );
|
89 |
+
|
90 |
happyForms.factory.model = _.wrap( happyForms.factory.model, function( func, attrs, options, BaseClass ) {
|
91 |
if ( 'placeholder' === attrs.type ) {
|
92 |
BaseClass = PlaceholderModel;
|
assets/js/parts/part-radio.js
CHANGED
@@ -7,270 +7,238 @@
|
|
7 |
settings.formParts.radio.defaults,
|
8 |
_.result( happyForms.classes.models.Part.prototype, 'defaults' ),
|
9 |
);
|
10 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
11 |
} );
|
12 |
|
13 |
var RadioView = happyForms.classes.views.Part.extend( {
|
14 |
-
template: '#happyforms-radio-template',
|
|
|
15 |
|
16 |
initialize: function() {
|
17 |
happyForms.classes.views.Part.prototype.initialize.apply( this, arguments );
|
18 |
|
19 |
-
this.model.options
|
20 |
-
|
21 |
-
this.listenTo(this.model.options, 'add', this.onOptionsChange);
|
22 |
-
this.listenTo(this.model.options, 'change', this.onOptionsChange);
|
23 |
-
this.listenTo(this.model.options, 'remove', this.onOptionsChange);
|
24 |
},
|
25 |
|
26 |
events: _.extend( {}, happyForms.classes.views.Part.prototype.events, {
|
27 |
'click .add-option': 'onAddOptionClick',
|
|
|
|
|
|
|
|
|
28 |
'change [name=display_type]': 'onDisplayTypeChange'
|
29 |
} ),
|
30 |
|
31 |
-
|
32 |
-
|
|
|
|
|
|
|
33 |
|
34 |
-
|
|
|
|
|
35 |
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
is_default: option.is_default,
|
40 |
-
label: option.label
|
41 |
-
});
|
42 |
|
43 |
-
|
44 |
-
}, this);
|
45 |
},
|
46 |
|
47 |
-
|
48 |
-
|
49 |
-
*
|
50 |
-
* @since 1.0.0.
|
51 |
-
*
|
52 |
-
* @return void
|
53 |
-
*/
|
54 |
-
onAddOptionClick: function() {
|
55 |
-
this.$el.find('.no-options').hide();
|
56 |
-
|
57 |
-
this.createNewOption(false, false);
|
58 |
-
},
|
59 |
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
* @since 1.0.0.
|
64 |
-
*
|
65 |
-
* @param {object} [optionModel=''] Existing option model.
|
66 |
-
* @param {bool} [skipPreviewTrigger=true] Boolean to tell if creation of new model should trigger preview event or not.
|
67 |
-
*
|
68 |
-
* @return void
|
69 |
-
*/
|
70 |
-
createNewOption: function(optionModel, skipPreviewTrigger) {
|
71 |
-
var self = this;
|
72 |
-
var model = (optionModel) ? optionModel : '';
|
73 |
-
|
74 |
-
if ( typeof skipPreviewTrigger === 'undefined' ) {
|
75 |
-
skipPreviewTrigger = true;
|
76 |
-
}
|
77 |
|
78 |
-
|
79 |
-
var optionId = _.uniqueId(self.model.get('id') + '_option_');
|
80 |
|
81 |
-
|
82 |
-
id: optionId,
|
83 |
-
is_default: 0,
|
84 |
-
label: '',
|
85 |
-
description: ''
|
86 |
-
});
|
87 |
-
}
|
88 |
|
89 |
-
this.model.
|
|
|
|
|
|
|
|
|
90 |
|
91 |
-
|
|
|
|
|
92 |
|
93 |
-
|
|
|
94 |
|
95 |
-
|
96 |
-
|
97 |
-
var html = template(view.model.toJSON());
|
98 |
|
99 |
-
|
100 |
-
|
101 |
-
'element': html,
|
102 |
-
'appendTo': '.happyforms-part__el'
|
103 |
-
};
|
104 |
|
105 |
-
|
|
|
106 |
}
|
107 |
|
108 |
-
|
109 |
-
|
|
|
|
|
|
|
|
|
|
|
110 |
|
111 |
-
|
112 |
-
* Update options in the part model on options collection change.
|
113 |
-
*
|
114 |
-
* @since 1.0.0.
|
115 |
-
*
|
116 |
-
* @param {object} data Backbone collection of options.
|
117 |
-
*
|
118 |
-
* @return {object}
|
119 |
-
*/
|
120 |
-
onOptionsChange: function(data) {
|
121 |
-
var options = this.model.options;
|
122 |
-
var optionsArray = [];
|
123 |
-
|
124 |
-
options.each(function(model, index) {
|
125 |
-
optionsArray.push(model.attributes);
|
126 |
-
});
|
127 |
-
|
128 |
-
this.model.set('options', optionsArray);
|
129 |
-
|
130 |
-
return data;
|
131 |
},
|
132 |
|
133 |
-
|
134 |
-
var
|
135 |
-
var
|
136 |
|
137 |
-
|
138 |
|
139 |
-
var
|
140 |
-
|
141 |
-
|
142 |
-
|
143 |
-
|
|
|
144 |
};
|
145 |
|
146 |
-
|
147 |
-
|
148 |
-
}
|
149 |
-
|
150 |
-
api.previewer.trigger('happyforms-part-dom-update', eventData);
|
151 |
-
}
|
152 |
-
} );
|
153 |
-
|
154 |
-
var RadioOptionView = Backbone.View.extend( {
|
155 |
-
template: '#happyforms-radio-option-customize-template',
|
156 |
-
|
157 |
-
initialize: function(options) {
|
158 |
-
this.parent = options.parent;
|
159 |
-
this.frontendTemplate = '#happyforms-radio-option-frontend-template';
|
160 |
|
161 |
-
|
|
|
|
|
162 |
|
163 |
-
|
164 |
|
165 |
-
|
166 |
-
|
|
|
|
|
|
|
|
|
|
|
167 |
|
168 |
-
|
169 |
-
'keyup input': 'onInputChange',
|
170 |
-
'click .delete-option': 'deleteOption',
|
171 |
-
'change .default-option-switch': 'onDefaultOptionCheck'
|
172 |
},
|
173 |
|
174 |
-
|
175 |
-
var
|
176 |
-
var
|
|
|
177 |
|
178 |
-
this.
|
|
|
|
|
179 |
|
180 |
-
|
181 |
-
},
|
182 |
|
183 |
-
|
184 |
-
|
185 |
-
|
186 |
-
* @since 1.0.0.
|
187 |
-
*
|
188 |
-
* @return void
|
189 |
-
*/
|
190 |
-
onInputChange: function(e) {
|
191 |
-
var $input = $(e.target);
|
192 |
-
var previewSelector = $input.data('preview-selector');
|
193 |
-
var attribute = $input.attr('data-option-attribute');
|
194 |
-
var value = $input.val();
|
195 |
-
|
196 |
-
this.model.set(attribute, value);
|
197 |
-
|
198 |
-
if (attribute === 'description') {
|
199 |
-
previewSelector = '+ ' + previewSelector;
|
200 |
}
|
201 |
|
202 |
-
|
203 |
-
|
204 |
-
|
205 |
-
|
206 |
-
|
|
|
|
|
207 |
|
208 |
-
|
209 |
-
}
|
210 |
},
|
211 |
|
212 |
-
|
213 |
-
|
214 |
-
|
215 |
-
* @since 1.0.0.
|
216 |
-
*
|
217 |
-
* @param {object} e JS event.
|
218 |
-
*
|
219 |
-
* @return void
|
220 |
-
*/
|
221 |
-
deleteOption: function(e) {
|
222 |
-
e.preventDefault();
|
223 |
|
224 |
-
|
225 |
-
subpart_id: this.model.get('id')
|
226 |
-
};
|
227 |
|
228 |
-
|
|
|
|
|
|
|
229 |
|
230 |
-
|
|
|
|
|
231 |
|
232 |
-
|
233 |
-
|
234 |
-
|
|
|
|
|
235 |
|
236 |
-
|
237 |
},
|
238 |
|
239 |
-
|
240 |
-
|
241 |
-
|
242 |
-
|
243 |
-
|
244 |
-
|
245 |
-
*
|
246 |
-
* @param {object} e JS event.
|
247 |
-
*
|
248 |
-
* @return void
|
249 |
-
*/
|
250 |
-
onDefaultOptionCheck: function(e) {
|
251 |
-
var $input = $(e.target);
|
252 |
-
|
253 |
-
if ($input.is(':checked')) {
|
254 |
-
this.model.set('is_default', 1);
|
255 |
-
this.parent.$el.find('.default-option-switch').not($input).prop('checked', false).attr('disabled', true);
|
256 |
} else {
|
257 |
-
|
258 |
-
this.parent.$el.find('.default-option-switch').not($input).prop('checked', false).removeAttr('disabled');
|
259 |
}
|
|
|
260 |
|
261 |
-
|
262 |
-
|
263 |
-
|
264 |
-
|
265 |
-
|
266 |
-
};
|
267 |
|
268 |
-
|
269 |
-
|
270 |
-
}
|
271 |
|
272 |
-
|
273 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
274 |
} );
|
275 |
|
276 |
happyForms.factory.model = _.wrap( happyForms.factory.model, function( func, attrs, options, BaseClass ) {
|
7 |
settings.formParts.radio.defaults,
|
8 |
_.result( happyForms.classes.models.Part.prototype, 'defaults' ),
|
9 |
);
|
10 |
+
},
|
11 |
+
|
12 |
+
initialize: function( attrs, options ) {
|
13 |
+
happyForms.classes.models.Part.prototype.initialize.apply( this, arguments );
|
14 |
+
|
15 |
+
this.attributes.options = new OptionCollection( this.get( 'options' ), options );
|
16 |
+
},
|
17 |
+
|
18 |
+
toJSON: function() {
|
19 |
+
var json = Backbone.Model.prototype.toJSON.apply( this, arguments );
|
20 |
+
json.options = json.options.toJSON();
|
21 |
+
|
22 |
+
return json;
|
23 |
+
},
|
24 |
+
} );
|
25 |
+
|
26 |
+
var OptionModel = Backbone.Model.extend( {
|
27 |
+
defaults: {
|
28 |
+
is_default: false,
|
29 |
+
label: '',
|
30 |
+
description: '',
|
31 |
+
},
|
32 |
+
} );
|
33 |
+
|
34 |
+
var OptionCollection = Backbone.Collection.extend( {
|
35 |
+
model: OptionModel,
|
36 |
} );
|
37 |
|
38 |
var RadioView = happyForms.classes.views.Part.extend( {
|
39 |
+
template: '#customize-happyforms-radio-template',
|
40 |
+
itemCustomizeTemplate: '#customize-happyforms-radio-item-template',
|
41 |
|
42 |
initialize: function() {
|
43 |
happyForms.classes.views.Part.prototype.initialize.apply( this, arguments );
|
44 |
|
45 |
+
this.listenTo( this.model.get( 'options' ), 'add change remove', this.onOptionsChange );
|
46 |
+
this.listenTo( this, 'ready', this.onReady );
|
|
|
|
|
|
|
47 |
},
|
48 |
|
49 |
events: _.extend( {}, happyForms.classes.views.Part.prototype.events, {
|
50 |
'click .add-option': 'onAddOptionClick',
|
51 |
+
'click .delete-option': 'onDeleteOptionClick',
|
52 |
+
'keyup li [name=option_label]': 'onItemLabelChange',
|
53 |
+
'keyup li [name=option_description]': 'onItemDescriptionChange',
|
54 |
+
'change li [name=option_is_default]': 'onItemDefaultChange',
|
55 |
'change [name=display_type]': 'onDisplayTypeChange'
|
56 |
} ),
|
57 |
|
58 |
+
onReady: function() {
|
59 |
+
this.model.get( 'options' ).each( function( itemModel ) {
|
60 |
+
this.appendOptionPartial( itemModel );
|
61 |
+
}, this );
|
62 |
+
},
|
63 |
|
64 |
+
onOptionsChange: function() {
|
65 |
+
this.model.trigger( 'change' );
|
66 |
+
},
|
67 |
|
68 |
+
appendOptionPartial: function( itemModel ) {
|
69 |
+
var customizeTemplate = _.template( $( this.itemCustomizeTemplate ).html() );
|
70 |
+
var customizeHTML = customizeTemplate( { item: itemModel.toJSON() } );
|
|
|
|
|
|
|
71 |
|
72 |
+
$( '.options ul', this.$el ).append( customizeHTML );
|
|
|
73 |
},
|
74 |
|
75 |
+
onAddOptionClick: function( e ) {
|
76 |
+
e.preventDefault();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
77 |
|
78 |
+
var itemID = _.uniqueId( this.model.get( 'id' ) + '_option_' );
|
79 |
+
var itemModel = new OptionModel( { id: itemID } );
|
80 |
+
this.model.get( 'options' ).add( itemModel );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
81 |
|
82 |
+
this.appendOptionPartial( itemModel );
|
|
|
83 |
|
84 |
+
var model = this.model;
|
|
|
|
|
|
|
|
|
|
|
|
|
85 |
|
86 |
+
this.model.fetchHtml( function( response ) {
|
87 |
+
var data = {
|
88 |
+
id: model.get( 'id' ),
|
89 |
+
html: response,
|
90 |
+
};
|
91 |
|
92 |
+
api.previewer.send( 'happyforms-form-part-refresh', data );
|
93 |
+
} );
|
94 |
+
},
|
95 |
|
96 |
+
onDeleteOptionClick: function( e ) {
|
97 |
+
e.preventDefault();
|
98 |
|
99 |
+
var itemID = $( e.target ).parents( '[data-item-id]' ).data( 'item-id' );
|
100 |
+
var itemModel = this.model.get( 'options' ).get( itemID );
|
|
|
101 |
|
102 |
+
this.model.get( 'options' ).remove( itemModel );
|
103 |
+
$( '[data-item-id="' + itemID + '"]', this.$el ).remove();
|
|
|
|
|
|
|
104 |
|
105 |
+
if ( this.model.get( 'options' ).length == 0 ) {
|
106 |
+
$( '.options ul', this.$el ).html( '' );
|
107 |
}
|
108 |
|
109 |
+
var data = {
|
110 |
+
id: this.model.get( 'id' ),
|
111 |
+
callback: 'onRadioItemDeleteCallback',
|
112 |
+
options: {
|
113 |
+
itemID: itemID,
|
114 |
+
}
|
115 |
+
};
|
116 |
|
117 |
+
api.previewer.send( 'happyforms-part-dom-update', data );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
118 |
},
|
119 |
|
120 |
+
onItemLabelChange: function( e ) {
|
121 |
+
var itemID = $( e.target ).parents( '[data-item-id]' ).data( 'item-id' );
|
122 |
+
var itemModel = this.model.get( 'options' ).get( itemID );
|
123 |
|
124 |
+
itemModel.set( 'label', $( e.target ).val() );
|
125 |
|
126 |
+
var data = {
|
127 |
+
id: this.model.get( 'id' ),
|
128 |
+
callback: 'onRadioItemLabelChangeCallback',
|
129 |
+
options: {
|
130 |
+
itemID: itemID,
|
131 |
+
}
|
132 |
};
|
133 |
|
134 |
+
api.previewer.send( 'happyforms-part-dom-update', data );
|
135 |
+
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
136 |
|
137 |
+
onItemDescriptionChange: function( e ) {
|
138 |
+
var itemID = $( e.target ).parents( '[data-item-id]' ).data( 'item-id' );
|
139 |
+
var itemModel = this.model.get( 'options' ).get( itemID );
|
140 |
|
141 |
+
itemModel.set( 'description', $( e.target ).val() );
|
142 |
|
143 |
+
var data = {
|
144 |
+
id: this.model.get( 'id' ),
|
145 |
+
callback: 'onRadioItemDescriptionChangeCallback',
|
146 |
+
options: {
|
147 |
+
itemID: itemID,
|
148 |
+
}
|
149 |
+
};
|
150 |
|
151 |
+
api.previewer.send( 'happyforms-part-dom-update', data );
|
|
|
|
|
|
|
152 |
},
|
153 |
|
154 |
+
onItemDefaultChange: function( e ) {
|
155 |
+
var itemID = $( e.target ).parents( '[data-item-id]' ).data( 'item-id' );
|
156 |
+
var itemModel = this.model.get( 'options' ).get( itemID );
|
157 |
+
var isChecked = $( e.target ).is( ':checked' );
|
158 |
|
159 |
+
this.model.get( 'options' ).forEach( function( item ) {
|
160 |
+
item.set( 'is_default', 0 );
|
161 |
+
} );
|
162 |
|
163 |
+
$( 'li [name=option_is_default]', this.$el ).attr( 'checked', false );
|
|
|
164 |
|
165 |
+
if ( isChecked ) {
|
166 |
+
itemModel.set( 'is_default', 1 );
|
167 |
+
$( e.target ).attr( 'checked', true );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
168 |
}
|
169 |
|
170 |
+
var data = {
|
171 |
+
id: this.model.get( 'id' ),
|
172 |
+
callback: 'onRadioItemDefaultChangeCallback',
|
173 |
+
options: {
|
174 |
+
itemID: itemID,
|
175 |
+
}
|
176 |
+
};
|
177 |
|
178 |
+
api.previewer.send( 'happyforms-part-dom-update', data );
|
|
|
179 |
},
|
180 |
|
181 |
+
onDisplayTypeChange: function(e) {
|
182 |
+
var $input = $( e.target );
|
183 |
+
var attribute = $input.data( 'bind' );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
184 |
|
185 |
+
this.model.set( attribute, $input.val() );
|
|
|
|
|
186 |
|
187 |
+
var data = {
|
188 |
+
id: this.model.get( 'id' ),
|
189 |
+
callback: 'onRadioDisplayTypeChangeCallback',
|
190 |
+
};
|
191 |
|
192 |
+
api.previewer.send( 'happyforms-part-dom-update', data );
|
193 |
+
}
|
194 |
+
} );
|
195 |
|
196 |
+
happyForms.previewer = _.extend( happyForms.previewer, {
|
197 |
+
onRadioItemDeleteCallback: function( id, html, options ) {
|
198 |
+
var part = this.getPartModel( id );
|
199 |
+
var $part = this.getPartElement( html );
|
200 |
+
var $option = $( '#' + options.itemID, $part );
|
201 |
|
202 |
+
$option.remove();
|
203 |
},
|
204 |
|
205 |
+
onRadioDisplayTypeChangeCallback: function( id, html, options ) {
|
206 |
+
var part = this.getPartModel( id );
|
207 |
+
var $part = this.getPartElement( html );
|
208 |
+
|
209 |
+
if ( 'block' === part.get( 'display_type' ) ) {
|
210 |
+
$part.addClass( 'display-type--block' );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
211 |
} else {
|
212 |
+
$part.removeClass( 'display-type--block' );
|
|
|
213 |
}
|
214 |
+
},
|
215 |
|
216 |
+
onRadioItemLabelChangeCallback: function( id, html, options ) {
|
217 |
+
var part = this.getPartModel( id );
|
218 |
+
var $part = this.getPartElement( html );
|
219 |
+
var option = part.get( 'options' ).get( options.itemID );
|
220 |
+
var $option = $( '#' + options.itemID, $part );
|
|
|
221 |
|
222 |
+
this.$( 'span.label', $option ).text( option.get( 'label' ) );
|
223 |
+
},
|
|
|
224 |
|
225 |
+
onRadioItemDescriptionChangeCallback: function( id, html, options ) {
|
226 |
+
var part = this.getPartModel( id );
|
227 |
+
var $part = this.getPartElement( html );
|
228 |
+
var option = part.get( 'options' ).get( options.itemID );
|
229 |
+
var $option = $( '#' + options.itemID, $part );
|
230 |
+
|
231 |
+
this.$( '.happyforms-part-option__description', $option ).text( option.get( 'description' ) );
|
232 |
+
},
|
233 |
+
|
234 |
+
onRadioItemDefaultChangeCallback: function( id, html, options ) {
|
235 |
+
var part = this.getPartModel( id );
|
236 |
+
var $part = this.getPartElement( html );
|
237 |
+
var option = part.get( 'options' ).get( options.itemID );
|
238 |
+
var $option = $( '#' + options.itemID, $part );
|
239 |
+
|
240 |
+
this.$( 'input', $option ).prop( 'checked', option.get( 'is_default' ) );
|
241 |
+
},
|
242 |
} );
|
243 |
|
244 |
happyForms.factory.model = _.wrap( happyForms.factory.model, function( func, attrs, options, BaseClass ) {
|
assets/js/parts/part-rating.js
CHANGED
@@ -1,33 +1,33 @@
|
|
1 |
-
(function ($, _, Backbone, api, settings) {
|
2 |
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
|
22 |
-
|
23 |
-
|
24 |
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
|
30 |
-
|
31 |
-
|
32 |
|
33 |
-
})(jQuery, _, Backbone, wp.customize, _happyFormsSettings);
|
1 |
+
( function ( $, _, Backbone, api, settings ) {
|
2 |
|
3 |
+
var RatingModel = happyForms.classes.models.Part.extend({
|
4 |
+
defaults: function () {
|
5 |
+
return _.extend(
|
6 |
+
{},
|
7 |
+
settings.formParts.rating.defaults,
|
8 |
+
_.result( happyForms.classes.models.Part.prototype, 'defaults' ),
|
9 |
+
);
|
10 |
+
},
|
11 |
+
} );
|
12 |
|
13 |
+
var RatingView = happyForms.classes.views.Part.extend( {
|
14 |
+
template: '#happyforms-customize-rating-template'
|
15 |
+
} );
|
16 |
|
17 |
+
happyForms.factory.model = _.wrap( happyForms.factory.model, function ( func, attrs, options, BaseClass ) {
|
18 |
+
if ( 'rating' === attrs.type ) {
|
19 |
+
BaseClass = RatingModel;
|
20 |
+
}
|
21 |
|
22 |
+
return func( attrs, options, BaseClass );
|
23 |
+
} );
|
24 |
|
25 |
+
happyForms.factory.view = _.wrap( happyForms.factory.view, function ( func, options, BaseClass ) {
|
26 |
+
if ( 'rating' === options.type ) {
|
27 |
+
BaseClass = RatingView;
|
28 |
+
}
|
29 |
|
30 |
+
return func( options, BaseClass );
|
31 |
+
} );
|
32 |
|
33 |
+
} )( jQuery, _, Backbone, wp.customize, _happyFormsSettings );
|
assets/js/parts/part-scale.js
CHANGED
@@ -1,134 +1,165 @@
|
|
1 |
-
(function ($, _, Backbone, api, settings) {
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
( function ( $, _, Backbone, api, settings ) {
|
2 |
+
|
3 |
+
var ScaleModel = happyForms.classes.models.Part.extend( {
|
4 |
+
defaults: function () {
|
5 |
+
return _.extend(
|
6 |
+
{},
|
7 |
+
settings.formParts.scale.defaults,
|
8 |
+
_.result( happyForms.classes.models.Part.prototype, 'defaults' ),
|
9 |
+
);
|
10 |
+
},
|
11 |
+
} );
|
12 |
+
|
13 |
+
var ScaleView = happyForms.classes.views.Part.extend( {
|
14 |
+
template: '#happyforms-customize-scale-template',
|
15 |
+
|
16 |
+
initialize: function() {
|
17 |
+
happyForms.classes.views.Part.prototype.initialize.apply( this, arguments );
|
18 |
+
|
19 |
+
this.listenTo( this.model, 'change:min_value', this.onMinValueChange );
|
20 |
+
this.listenTo( this.model, 'change:max_value', this.onMaxValueChange );
|
21 |
+
this.listenTo( this.model, 'change:default_value', this.onDefaultValueChange );
|
22 |
+
this.listenTo( this.model, 'change:step', this.onStepChange );
|
23 |
+
this.listenTo( this.model, 'change:min_label', this.onMinLabelChange );
|
24 |
+
this.listenTo( this.model, 'change:max_label', this.onMaxLabelChange );
|
25 |
+
},
|
26 |
+
|
27 |
+
onMinValueChange: function( model, value ) {
|
28 |
+
this.refreshValues();
|
29 |
+
|
30 |
+
$( '[data-bind=default_value]', this.$el ).val( this.model.get( 'default_value' ) );
|
31 |
+
},
|
32 |
+
|
33 |
+
onMaxValueChange: function( model, value ) {
|
34 |
+
this.refreshValues();
|
35 |
+
|
36 |
+
$( '[data-bind=default_value]', this.$el ).val( this.model.get( 'default_value' ) );
|
37 |
+
},
|
38 |
+
|
39 |
+
onDefaultValueChange: function( model, value ) {
|
40 |
+
this.refreshValues();
|
41 |
+
},
|
42 |
+
|
43 |
+
refreshValues: function() {
|
44 |
+
var minValue = parseInt( this.model.get( 'min_value' ), 10 );
|
45 |
+
var maxValue = parseInt( this.model.get( 'max_value' ) );
|
46 |
+
|
47 |
+
minValue = isNaN( minValue ) ? 0 : minValue;
|
48 |
+
maxValue = isNaN( maxValue ) ? 0 : maxValue;
|
49 |
+
|
50 |
+
defaultValue = Math.floor( minValue + ( maxValue - minValue ) / 2 );
|
51 |
+
|
52 |
+
this.model.set( 'default_value', defaultValue );
|
53 |
+
|
54 |
+
var data = {
|
55 |
+
id: this.model.get( 'id' ),
|
56 |
+
callback: 'onScaleValuesChange',
|
57 |
+
};
|
58 |
+
|
59 |
+
api.previewer.send( 'happyforms-part-dom-update', data );
|
60 |
+
},
|
61 |
+
|
62 |
+
onStepChange: function( model, value ) {
|
63 |
+
var data = {
|
64 |
+
id: this.model.get( 'id' ),
|
65 |
+
callback: 'onScaleStepChange',
|
66 |
+
};
|
67 |
+
|
68 |
+
api.previewer.send( 'happyforms-part-dom-update', data );
|
69 |
+
},
|
70 |
+
|
71 |
+
onMinLabelChange: function( model, value ) {
|
72 |
+
var data = {
|
73 |
+
id: this.model.get( 'id' ),
|
74 |
+
callback: 'onScaleMinLabelChange',
|
75 |
+
};
|
76 |
+
|
77 |
+
api.previewer.send( 'happyforms-part-dom-update', data );
|
78 |
+
},
|
79 |
+
|
80 |
+
onMaxLabelChange: function ( model, value ) {
|
81 |
+
var data = {
|
82 |
+
id: this.model.get( 'id' ),
|
83 |
+
callback: 'onScaleMaxLabelChange',
|
84 |
+
};
|
85 |
+
|
86 |
+
api.previewer.send( 'happyforms-part-dom-update', data );
|
87 |
+
}
|
88 |
+
} );
|
89 |
+
|
90 |
+
happyForms.previewer = _.extend( happyForms.previewer, {
|
91 |
+
onScaleValuesChange: function( id, html, options ) {
|
92 |
+
var part = this.getPartModel( id );
|
93 |
+
var $part = this.getPartElement( html );
|
94 |
+
var $input = this.$( 'input', $part );
|
95 |
+
var $output = this.$( 'output', $part );
|
96 |
+
var min = part.get( 'min_value' );
|
97 |
+
var max = part.get( 'max_value' );
|
98 |
+
var defaultValue = part.get( 'default_value' );
|
99 |
+
|
100 |
+
$input.attr( 'min', min );
|
101 |
+
$input.attr( 'max', max );
|
102 |
+
$input.attr( 'value', defaultValue );
|
103 |
+
$output.text( defaultValue );
|
104 |
+
},
|
105 |
+
|
106 |
+
onScaleStepChange: function( id, html, options ) {
|
107 |
+
var part = this.getPartModel( id );
|
108 |
+
var $part = this.getPartElement( html );
|
109 |
+
var $input = this.$( 'input', $part );
|
110 |
+
|
111 |
+
$input.attr( 'step', part.get( 'step' ) );
|
112 |
+
},
|
113 |
+
|
114 |
+
onScaleMinLabelChange: function( id, html, options ) {
|
115 |
+
var part = this.getPartModel( id );
|
116 |
+
var $part = this.getPartElement( html );
|
117 |
+
var $label = this.$( '.label-min', $part );
|
118 |
+
|
119 |
+
$label.text( part.get( 'min_label' ) );
|
120 |
+
},
|
121 |
+
|
122 |
+
onScaleMaxLabelChange: function( id, html, options ) {
|
123 |
+
var part = this.getPartModel( id );
|
124 |
+
var $part = this.getPartElement( html );
|
125 |
+
var $label = this.$( '.label-max', $part );
|
126 |
+
|
127 |
+
$label.text( part.get( 'max_label' ) );
|
128 |
+
},
|
129 |
+
} );
|
130 |
+
|
131 |
+
happyForms.factory.model = _.wrap( happyForms.factory.model, function( func, attrs, options, BaseClass ) {
|
132 |
+
if ( 'scale' === attrs.type ) {
|
133 |
+
BaseClass = ScaleModel;
|
134 |
+
}
|
135 |
+
|
136 |
+
return func( attrs, options, BaseClass );
|
137 |
+
} );
|
138 |
+
|
139 |
+
happyForms.factory.view = _.wrap( happyForms.factory.view, function ( func, options, BaseClass ) {
|
140 |
+
if ( 'scale' === options.type ) {
|
141 |
+
BaseClass = ScaleView;
|
142 |
+
}
|
143 |
+
|
144 |
+
return func( options, BaseClass );
|
145 |
+
} );
|
146 |
+
|
147 |
+
api.bind( 'ready', function () {
|
148 |
+
api.previewer.bind( 'happyforms-part-render', function ( $el ) {
|
149 |
+
if ( ! $el.is( '.happyforms-part--scale' ) ) {
|
150 |
+
return;
|
151 |
+
}
|
152 |
+
|
153 |
+
$( 'input', $el ).happyFormsScale();
|
154 |
+
} );
|
155 |
+
|
156 |
+
api.previewer.bind( 'happyforms-part-dom-updated', function ( $el ) {
|
157 |
+
if ( ! $el.is( '.happyforms-part--scale' ) ) {
|
158 |
+
return;
|
159 |
+
}
|
160 |
+
|
161 |
+
$( 'input', $el ).happyFormsScale();
|
162 |
+
} );
|
163 |
+
} );
|
164 |
+
|
165 |
+
} )( jQuery, _, Backbone, wp.customize, _happyFormsSettings );
|
assets/js/parts/part-select.js
CHANGED
@@ -7,235 +7,216 @@
|
|
7 |
settings.formParts.select.defaults,
|
8 |
_.result( happyForms.classes.models.Part.prototype, 'defaults' ),
|
9 |
);
|
10 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
11 |
} );
|
12 |
|
13 |
var SelectView = happyForms.classes.views.Part.extend( {
|
14 |
-
template: '#happyforms-select-template',
|
|
|
15 |
|
16 |
initialize: function() {
|
17 |
happyForms.classes.views.Part.prototype.initialize.apply( this, arguments );
|
18 |
|
19 |
-
this.model.options
|
20 |
-
|
21 |
-
this.listenTo(this.model.options, 'add', this.onOptionsChange);
|
22 |
-
this.listenTo(this.model.options, 'change', this.onOptionsChange);
|
23 |
-
this.listenTo(this.model.options, 'remove', this.onOptionsChange);
|
24 |
},
|
25 |
|
26 |
events: _.extend( {}, happyForms.classes.views.Part.prototype.events, {
|
27 |
-
'click .add-option': 'onAddOptionClick'
|
|
|
|
|
|
|
|
|
28 |
} ),
|
29 |
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
var optionModel = new Backbone.Model({
|
35 |
-
id: option.id,
|
36 |
-
is_default: option.is_default,
|
37 |
-
label: option.label
|
38 |
-
});
|
39 |
-
|
40 |
-
this.createNewOption(optionModel);
|
41 |
-
}, this);
|
42 |
},
|
43 |
|
44 |
-
|
45 |
-
|
46 |
-
*
|
47 |
-
* @since 1.0.0.
|
48 |
-
*
|
49 |
-
* @return void
|
50 |
-
*/
|
51 |
-
onAddOptionClick: function() {
|
52 |
-
this.$el.find('.no-options').hide();
|
53 |
-
|
54 |
-
this.createNewOption(false, false);
|
55 |
},
|
56 |
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
* @since 1.0.0.
|
61 |
-
*
|
62 |
-
* @param {object} [optionModel=''] Existing option model.
|
63 |
-
* @param {bool} [skipPreviewTrigger=true] Boolean to tell if creation of new model should trigger preview event or not.
|
64 |
-
*
|
65 |
-
* @return void
|
66 |
-
*/
|
67 |
-
createNewOption: function(optionModel, skipPreviewTrigger) {
|
68 |
-
var self = this;
|
69 |
-
var model = (optionModel) ? optionModel : '';
|
70 |
-
|
71 |
-
if ( typeof skipPreviewTrigger === 'undefined' ) {
|
72 |
-
skipPreviewTrigger = true;
|
73 |
}
|
74 |
|
75 |
-
if (
|
76 |
-
|
|
|
77 |
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
|
|
|
|
|
|
|
|
|
|
83 |
}
|
|
|
84 |
|
85 |
-
|
|
|
86 |
|
87 |
-
var
|
|
|
|
|
88 |
|
89 |
-
|
90 |
|
91 |
-
|
92 |
-
var template = _.template($(view.frontendTemplate).html());
|
93 |
-
var html = template(view.model.toJSON());
|
94 |
|
95 |
-
|
96 |
-
|
97 |
-
'
|
98 |
-
|
99 |
};
|
100 |
|
101 |
-
api.previewer.
|
102 |
-
}
|
103 |
},
|
104 |
|
105 |
-
|
106 |
-
|
107 |
-
*
|
108 |
-
* @since 1.0.0.
|
109 |
-
*
|
110 |
-
* @param {object} data Backbone collection of options.
|
111 |
-
*
|
112 |
-
* @return {object}
|
113 |
-
*/
|
114 |
-
onOptionsChange: function(data) {
|
115 |
-
var options = this.model.options;
|
116 |
-
var optionsArray = [];
|
117 |
-
|
118 |
-
options.each(function(model, index) {
|
119 |
-
optionsArray.push(model.attributes);
|
120 |
-
});
|
121 |
-
|
122 |
-
this.model.set('options', optionsArray);
|
123 |
-
|
124 |
-
return data;
|
125 |
-
}
|
126 |
-
} );
|
127 |
-
|
128 |
-
var SelectOptionView = Backbone.View.extend( {
|
129 |
-
template: '#happyforms-select-option-customize-template',
|
130 |
|
131 |
-
|
132 |
-
this.parent = options.parent;
|
133 |
-
this.frontendTemplate = '#happyforms-select-option-frontend-template';
|
134 |
|
135 |
-
|
136 |
},
|
137 |
|
138 |
-
|
139 |
-
|
140 |
-
|
141 |
-
'change .default-option-switch': 'onDefaultOptionCheck'
|
142 |
-
},
|
143 |
|
144 |
-
|
145 |
-
var template = _.template($(this.template).html());
|
146 |
-
var html = template(this.model.toJSON());
|
147 |
|
148 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
149 |
|
150 |
-
|
151 |
},
|
152 |
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
*/
|
160 |
-
onInputChange: function(e) {
|
161 |
-
var $input = $(e.target);
|
162 |
-
var previewSelector = $input.data('preview-selector');
|
163 |
-
var attribute = $input.attr('data-option-attribute');
|
164 |
-
var value = $input.val();
|
165 |
-
|
166 |
-
this.model.set(attribute, value);
|
167 |
-
|
168 |
-
if (previewSelector) {
|
169 |
-
var eventData = {
|
170 |
-
selector: '#' + this.model.get('id'),
|
171 |
-
text: value
|
172 |
-
};
|
173 |
|
174 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
175 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
176 |
},
|
177 |
|
178 |
-
|
179 |
-
* Triggered on 'Delete' button click in each option.
|
180 |
-
*
|
181 |
-
* @since 1.0.0.
|
182 |
-
*
|
183 |
-
* @param {object} e JS event.
|
184 |
-
*
|
185 |
-
* @return void
|
186 |
-
*/
|
187 |
-
deleteOption: function(e) {
|
188 |
e.preventDefault();
|
189 |
|
190 |
-
var
|
191 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
192 |
};
|
193 |
|
194 |
-
api.previewer.
|
|
|
|
|
195 |
|
196 |
-
|
|
|
|
|
|
|
197 |
|
198 |
-
|
199 |
-
|
200 |
-
|
|
|
|
|
|
|
|
|
|
|
201 |
|
202 |
-
|
203 |
},
|
204 |
|
205 |
-
|
206 |
-
|
207 |
-
|
208 |
-
|
209 |
-
|
210 |
-
* @since 1.0.0.
|
211 |
-
*
|
212 |
-
* @param {object} e JS event.
|
213 |
-
*
|
214 |
-
* @return void
|
215 |
-
*/
|
216 |
-
onDefaultOptionCheck: function(e) {
|
217 |
-
var $input = $(e.target);
|
218 |
-
|
219 |
-
if ($input.is(':checked')) {
|
220 |
-
this.model.set('is_default', 1);
|
221 |
-
this.parent.$el.find('.default-option-switch').not($input).prop('checked', false).attr('disabled', true);
|
222 |
-
} else {
|
223 |
-
this.model.set('is_default', 0);
|
224 |
-
this.parent.$el.find('.default-option-switch').not($input).prop('checked', false).removeAttr('disabled');
|
225 |
-
}
|
226 |
|
227 |
-
|
228 |
-
|
229 |
-
props: {
|
230 |
-
selected: true
|
231 |
-
}
|
232 |
-
};
|
233 |
|
234 |
-
|
235 |
-
|
236 |
-
|
|
|
237 |
|
238 |
-
|
239 |
}
|
240 |
} );
|
241 |
|
7 |
settings.formParts.select.defaults,
|
8 |
_.result( happyForms.classes.models.Part.prototype, 'defaults' ),
|
9 |
);
|
10 |
+
},
|
11 |
+
|
12 |
+
initialize: function( attrs, options ) {
|
13 |
+
happyForms.classes.models.Part.prototype.initialize.apply( this, arguments );
|
14 |
+
|
15 |
+
this.attributes.options = new OptionCollection( this.get( 'options' ), options );
|
16 |
+
},
|
17 |
+
|
18 |
+
toJSON: function() {
|
19 |
+
var json = Backbone.Model.prototype.toJSON.apply( this, arguments );
|
20 |
+
json.options = json.options.toJSON();
|
21 |
+
|
22 |
+
return json;
|
23 |
+
},
|
24 |
+
} );
|
25 |
+
|
26 |
+
var OptionModel = Backbone.Model.extend( {
|
27 |
+
defaults: {
|
28 |
+
is_default: false,
|
29 |
+
label: '',
|
30 |
+
},
|
31 |
+
} );
|
32 |
+
|
33 |
+
var OptionCollection = Backbone.Collection.extend( {
|
34 |
+
model: OptionModel,
|
35 |
} );
|
36 |
|
37 |
var SelectView = happyForms.classes.views.Part.extend( {
|
38 |
+
template: '#customize-happyforms-select-template',
|
39 |
+
itemCustomizeTemplate: '#customize-happyforms-select-item-template',
|
40 |
|
41 |
initialize: function() {
|
42 |
happyForms.classes.views.Part.prototype.initialize.apply( this, arguments );
|
43 |
|
44 |
+
this.listenTo( this.model.get( 'options' ), 'add change remove', this.onOptionsChange );
|
45 |
+
this.listenTo( this, 'ready', this.onReady );
|
|
|
|
|
|
|
46 |
},
|
47 |
|
48 |
events: _.extend( {}, happyForms.classes.views.Part.prototype.events, {
|
49 |
+
'click .add-option': 'onAddOptionClick',
|
50 |
+
'click .show-all-options': 'onShowAllOptionsClick',
|
51 |
+
'keyup li [name=label]': 'onSelectItemLabelChange',
|
52 |
+
'change li [name=is_default]': 'onSelectItemDefaultChange',
|
53 |
+
'click li .delete-option': 'onDeleteOptionClick',
|
54 |
} ),
|
55 |
|
56 |
+
onReady: function() {
|
57 |
+
this.model.get( 'options' ).each( function( itemModel, index ) {
|
58 |
+
this.appendOptionPartial( itemModel, index, this.model.get('options').length );
|
59 |
+
}, this );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
60 |
},
|
61 |
|
62 |
+
onOptionsChange: function() {
|
63 |
+
this.model.trigger( 'change' );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
64 |
},
|
65 |
|
66 |
+
appendOptionPartial: function( itemModel, index, totalItems ) {
|
67 |
+
if ( 'undefined' === typeof index ) {
|
68 |
+
index = false;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
69 |
}
|
70 |
|
71 |
+
if ( 'undefined' === typeof totalItems ) {
|
72 |
+
totalItems = false;
|
73 |
+
}
|
74 |
|
75 |
+
var customizeTemplate = _.template( $( this.itemCustomizeTemplate ).html() );
|
76 |
+
var customizeHTML = customizeTemplate( { item: itemModel.toJSON() } );
|
77 |
+
|
78 |
+
$( '.options ul', this.$el ).append( customizeHTML );
|
79 |
+
|
80 |
+
if (index && index > 4 && index < totalItems) {
|
81 |
+
this.$el.find('[data-item-id='+ itemModel.id +']').hide();
|
82 |
+
|
83 |
+
this.$el.find('.show-all-options span').text(totalItems);
|
84 |
+
this.$el.find('.show-all-options').show();
|
85 |
}
|
86 |
+
},
|
87 |
|
88 |
+
onAddOptionClick: function( e ) {
|
89 |
+
e.preventDefault();
|
90 |
|
91 |
+
var itemID = _.uniqueId( this.model.get( 'id' ) + '_option_' );
|
92 |
+
var itemModel = new OptionModel( { id: itemID } );
|
93 |
+
this.model.get( 'options' ).add( itemModel );
|
94 |
|
95 |
+
this.appendOptionPartial( itemModel );
|
96 |
|
97 |
+
var model = this.model;
|
|
|
|
|
98 |
|
99 |
+
this.model.fetchHtml( function( response ) {
|
100 |
+
var data = {
|
101 |
+
id: model.get( 'id' ),
|
102 |
+
html: response,
|
103 |
};
|
104 |
|
105 |
+
api.previewer.send( 'happyforms-form-part-refresh', data );
|
106 |
+
} );
|
107 |
},
|
108 |
|
109 |
+
onShowAllOptionsClick: function(e) {
|
110 |
+
var $link = $(e.target);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
111 |
|
112 |
+
this.$el.find('.happyforms-part-widget--sub').show();
|
|
|
|
|
113 |
|
114 |
+
$link.hide();
|
115 |
},
|
116 |
|
117 |
+
onSelectItemLabelChange: function( e ) {
|
118 |
+
var itemID = $( e.target ).parents( '[data-item-id]' ).data( 'item-id' );
|
119 |
+
var itemModel = this.model.get( 'options' ).get( itemID );
|
|
|
|
|
120 |
|
121 |
+
itemModel.set( 'label', $( e.target ).val() );
|
|
|
|
|
122 |
|
123 |
+
var data = {
|
124 |
+
id: this.model.get( 'id' ),
|
125 |
+
callback: 'onSelectItemLabelChangeCallback',
|
126 |
+
options: {
|
127 |
+
itemID: itemID,
|
128 |
+
}
|
129 |
+
};
|
130 |
|
131 |
+
api.previewer.send( 'happyforms-part-dom-update', data );
|
132 |
},
|
133 |
|
134 |
+
onSelectItemDefaultChange: function( e ) {
|
135 |
+
var itemID = $( e.target ).parents( '[data-item-id]' ).data( 'item-id' );
|
136 |
+
var itemModel = this.model.get( 'options' ).get( itemID );
|
137 |
+
var checked = $( e.target ).is( ':checked' );
|
138 |
+
|
139 |
+
$( '[name=is_default]', this.$el ).attr( 'checked', false );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
140 |
|
141 |
+
this.model.get( 'options' ).each( function( itemModel ) {
|
142 |
+
itemModel.set( 'is_default', 0 );
|
143 |
+
} );
|
144 |
+
|
145 |
+
if ( checked ) {
|
146 |
+
$( e.target ).attr( 'checked', true );
|
147 |
+
itemModel.set( 'is_default', 1 );
|
148 |
+
} else {
|
149 |
+
itemModel.set( 'is_default', 0 );
|
150 |
}
|
151 |
+
|
152 |
+
var data = {
|
153 |
+
id: this.model.get( 'id' ),
|
154 |
+
callback: 'onSelectItemDefaultChangeCallback',
|
155 |
+
options: {
|
156 |
+
itemID: itemID,
|
157 |
+
}
|
158 |
+
};
|
159 |
+
|
160 |
+
api.previewer.send( 'happyforms-part-dom-update', data );
|
161 |
},
|
162 |
|
163 |
+
onDeleteOptionClick: function( e ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
164 |
e.preventDefault();
|
165 |
|
166 |
+
var itemID = $( e.target ).parents( '[data-item-id]' ).data( 'item-id' );
|
167 |
+
var itemModel = this.model.get( 'options' ).get( itemID );
|
168 |
+
|
169 |
+
this.model.get( 'options' ).remove( itemModel );
|
170 |
+
$( '[data-item-id="' + itemModel.get( 'id' ) + '"]', this.$el ).remove();
|
171 |
+
|
172 |
+
if ( this.model.get( 'options' ).length == 0 ) {
|
173 |
+
$( '.options ul', this.$el ).html( '' );
|
174 |
+
}
|
175 |
+
|
176 |
+
var data = {
|
177 |
+
id: this.model.get( 'id' ),
|
178 |
+
callback: 'onSelectItemDeleteCallback',
|
179 |
+
options: {
|
180 |
+
itemID: itemID,
|
181 |
+
}
|
182 |
};
|
183 |
|
184 |
+
api.previewer.send( 'happyforms-part-dom-update', data );
|
185 |
+
},
|
186 |
+
} );
|
187 |
|
188 |
+
happyForms.previewer = _.extend( happyForms.previewer, {
|
189 |
+
onSelectItemAdd: function( id, html, options ) {
|
190 |
+
var part = this.getPartModel( id );
|
191 |
+
var $part = this.getPartElement( html );
|
192 |
|
193 |
+
this.$( '.happyforms-part__el', $part ).append( this.$( options.optionHTML ) );
|
194 |
+
},
|
195 |
+
|
196 |
+
onSelectItemLabelChangeCallback: function( id, html, options ) {
|
197 |
+
var part = this.getPartModel( id );
|
198 |
+
var $part = this.getPartElement( html );
|
199 |
+
var option = part.get( 'options' ).get( options.itemID );
|
200 |
+
var $option = $( '#' + options.itemID, $part );
|
201 |
|
202 |
+
$option.text( option.get( 'label' ) );
|
203 |
},
|
204 |
|
205 |
+
onSelectItemDefaultChangeCallback: function( id, html, options ) {
|
206 |
+
var part = this.getPartModel( id );
|
207 |
+
var $part = this.getPartElement( html );
|
208 |
+
var option = part.get( 'options' ).get( options.itemID );
|
209 |
+
var $option = $( '#' + options.itemID, $part );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
210 |
|
211 |
+
$option.attr( 'selected', true );
|
212 |
+
},
|
|
|
|
|
|
|
|
|
213 |
|
214 |
+
onSelectItemDeleteCallback: function( id, html, options ) {
|
215 |
+
var part = this.getPartModel( id );
|
216 |
+
var $part = this.getPartElement( html );
|
217 |
+
var $option = $( '#' + options.itemID, $part );
|
218 |
|
219 |
+
$option.remove();
|
220 |
}
|
221 |
} );
|
222 |
|
assets/js/parts/part-single-line-text.js
CHANGED
@@ -11,7 +11,7 @@
|
|
11 |
} );
|
12 |
|
13 |
var SingleLineTextView = happyForms.classes.views.Part.extend( {
|
14 |
-
template: '#happyforms-single-line-text-template'
|
15 |
} );
|
16 |
|
17 |
happyForms.factory.model = _.wrap( happyForms.factory.model, function( func, attrs, options, BaseClass ) {
|
11 |
} );
|
12 |
|
13 |
var SingleLineTextView = happyForms.classes.views.Part.extend( {
|
14 |
+
template: '#customize-happyforms-single-line-text-template'
|
15 |
} );
|
16 |
|
17 |
happyForms.factory.model = _.wrap( happyForms.factory.model, function( func, attrs, options, BaseClass ) {
|
assets/js/parts/part-title.js
CHANGED
@@ -11,7 +11,7 @@
|
|
11 |
});
|
12 |
|
13 |
var TitleView = happyForms.classes.views.Part.extend({
|
14 |
-
template: '#happyforms-title-template'
|
15 |
});
|
16 |
|
17 |
happyForms.factory.model = _.wrap(happyForms.factory.model, function (func, attrs, options, BaseClass) {
|
11 |
});
|
12 |
|
13 |
var TitleView = happyForms.classes.views.Part.extend({
|
14 |
+
template: '#happyforms-customize-title-template'
|
15 |
});
|
16 |
|
17 |
happyForms.factory.model = _.wrap(happyForms.factory.model, function (func, attrs, options, BaseClass) {
|
assets/js/parts/part-website-url.js
CHANGED
@@ -11,7 +11,7 @@
|
|
11 |
} );
|
12 |
|
13 |
var WebsiteUrlView = happyForms.classes.views.Part.extend( {
|
14 |
-
template: '#happyforms-website-url-template'
|
15 |
} );
|
16 |
|
17 |
happyForms.factory.model = _.wrap( happyForms.factory.model, function( func, attrs, options, BaseClass ) {
|
11 |
} );
|
12 |
|
13 |
var WebsiteUrlView = happyForms.classes.views.Part.extend( {
|
14 |
+
template: '#customize-happyforms-website-url-template'
|
15 |
} );
|
16 |
|
17 |
happyForms.factory.model = _.wrap( happyForms.factory.model, function( func, attrs, options, BaseClass ) {
|
assets/js/preview.js
CHANGED
@@ -1,430 +1,165 @@
|
|
1 |
-
( function( $, _, Backbone, api
|
2 |
|
3 |
-
|
4 |
-
var classes = {};
|
5 |
|
6 |
-
|
7 |
-
|
8 |
-
classes.views = {};
|
9 |
|
10 |
-
|
11 |
-
|
12 |
-
});
|
13 |
|
14 |
-
|
15 |
-
|
16 |
-
this.on('add', this.onAdd, this);
|
17 |
-
this.listenTo(this, 'resort', this.onResort);
|
18 |
-
},
|
19 |
|
20 |
-
|
|
|
|
|
21 |
|
22 |
-
|
23 |
-
|
24 |
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
if ($previewCanvas.find('.happyforms-part--submit').length) {
|
30 |
-
$previewCanvas.find('.happyforms-part--submit').before(view.render().$el);
|
31 |
-
} else {
|
32 |
-
$previewCanvas.append(view.render().$el);
|
33 |
-
}
|
34 |
-
},
|
35 |
-
|
36 |
-
onResort: function(data) {
|
37 |
-
this.models = _(this.models).sortBy(function(model) {
|
38 |
-
if (model.get('elementID')) {
|
39 |
-
var newIndex = _.indexOf(data.part_ids, model.get('elementID'));
|
40 |
-
|
41 |
-
var $previewCanvas = happyFormsPreview.$el.contents().find('#happyforms-app');
|
42 |
-
|
43 |
-
model.get('view').$el.insertAfter($previewCanvas.find('.happyforms-part').eq(newIndex));
|
44 |
-
}
|
45 |
-
|
46 |
-
return _.indexOf(data.part_ids, model.get('elementID'));
|
47 |
-
});
|
48 |
}
|
49 |
-
});
|
50 |
-
|
51 |
-
var HappyFormsPreview = Backbone.View.extend({
|
52 |
-
elements: false,
|
53 |
-
|
54 |
-
initialize: function() {
|
55 |
-
this.elements = new classes.collections.Elements();
|
56 |
-
this.itemModel = new classes.models.Item();
|
57 |
-
this.wrapper = '#happyforms-app';
|
58 |
-
|
59 |
-
this.listenTo(this, 'update-part-dom', this.onDOMPartUpdate);
|
60 |
-
this.listenTo(this, 'update-part-width', this.onPartWidthUpdate);
|
61 |
-
this.listenTo(this, 'parts-sorted', this.onPartsSorted);
|
62 |
-
this.listenTo(this, 'highlight-item', this.highlightItem);
|
63 |
-
this.listenTo(this, 'unhighlight-item', this.unhighlightItem);
|
64 |
-
this.listenTo(this, 'update-style', this.updateStyle);
|
65 |
-
this.listenTo(this, 'load-styles', this.loadStyles);
|
66 |
-
this.listenTo(this, 'add-sub-part', this.addSubPart);
|
67 |
-
this.listenTo(this, 'remove-sub-part', this.removeSubPart);
|
68 |
-
|
69 |
-
var self = this;
|
70 |
-
|
71 |
-
setTimeout(function() {
|
72 |
-
self.load();
|
73 |
-
}, 200);
|
74 |
-
},
|
75 |
-
|
76 |
-
load: function() {
|
77 |
-
var $iframe = this.$el.contents();
|
78 |
-
var formID = $iframe.find('#happyforms-app').data('happyforms-form-id');
|
79 |
-
var $items = $iframe.find('.happyforms-part');
|
80 |
-
var self = this;
|
81 |
-
|
82 |
-
_.each($items, function(item) {
|
83 |
-
var itemModel = new classes.models.Item({
|
84 |
-
elementID: $(item).attr('data-happyforms-id'),
|
85 |
-
formID: formID,
|
86 |
-
fieldName: $(item).attr('data-happyforms-field-name'),
|
87 |
-
html: $(item).prop('outerHTML')
|
88 |
-
});
|
89 |
-
|
90 |
-
$(item).remove();
|
91 |
-
|
92 |
-
var item = new classes.views.Item({ el: item, model: itemModel });
|
93 |
-
|
94 |
-
self.elements.add(itemModel);
|
95 |
-
});
|
96 |
-
|
97 |
-
api.previewer.trigger( 'happyforms-preview-ready' );
|
98 |
-
|
99 |
-
this.setPageTitle();
|
100 |
-
},
|
101 |
-
|
102 |
-
addView: function(modelAttributes) {
|
103 |
-
var model = new classes.models.Item(modelAttributes);
|
104 |
-
|
105 |
-
this.elements.add(model);
|
106 |
-
},
|
107 |
-
|
108 |
-
redrawView: function( modelAttributes ) {
|
109 |
-
var model = this.elements.find( {
|
110 |
-
elementID: modelAttributes.elementID
|
111 |
-
} );
|
112 |
-
|
113 |
-
model.set( modelAttributes );
|
114 |
|
115 |
-
|
116 |
-
$previousEl.hide();
|
117 |
-
$previousEl.after( model.get( 'view' ).render().$el );
|
118 |
-
$previousEl.remove();
|
119 |
-
},
|
120 |
|
121 |
-
|
122 |
-
|
123 |
|
124 |
-
|
125 |
-
|
|
|
|
|
126 |
|
127 |
-
|
128 |
-
|
129 |
-
return;
|
130 |
-
}
|
131 |
|
132 |
-
|
|
|
133 |
|
134 |
-
|
135 |
-
|
|
|
136 |
|
137 |
-
|
138 |
-
|
139 |
-
|
140 |
-
|
|
|
141 |
|
142 |
-
|
143 |
-
|
144 |
-
if (data.text) {
|
145 |
-
$element.text(data.text);
|
146 |
-
}
|
147 |
-
|
148 |
-
if (typeof data.html !== 'undefined') {
|
149 |
-
$element.html(data.html);
|
150 |
-
}
|
151 |
-
|
152 |
-
if (data.css) {
|
153 |
-
$element.css(data.css);
|
154 |
-
}
|
155 |
-
|
156 |
-
if (data.attributes) {
|
157 |
-
$element.attr(data.attributes);
|
158 |
-
|
159 |
-
if (data.attributeMethod === 'remove') {
|
160 |
-
$element.removeAttr(data.attributes);
|
161 |
-
}
|
162 |
-
} else {
|
163 |
-
$element.text(data.text);
|
164 |
-
}
|
165 |
-
|
166 |
-
if (data.props) {
|
167 |
-
_.each(data.props, function(value, key) {
|
168 |
-
$element.prop(key, value);
|
169 |
-
});
|
170 |
-
}
|
171 |
-
|
172 |
-
if (!_.isEmpty(data.classes) && !_.isEmpty(data.classMethod)) {
|
173 |
-
if (data.classMethod === 'add') {
|
174 |
-
$element.addClass(data.classes);
|
175 |
-
} else {
|
176 |
-
$element.removeClass(data.classes);
|
177 |
-
}
|
178 |
-
}
|
179 |
-
|
180 |
-
var $updatedEl = this.$el;
|
181 |
-
|
182 |
-
if ( data.part_id ) {
|
183 |
-
$updatedEl = this.elements.findWhere( {
|
184 |
-
elementID: data.part_id
|
185 |
-
} ).get( 'view' ).$el;
|
186 |
-
}
|
187 |
-
|
188 |
-
api.previewer.trigger( 'happyforms-part-dom-updated', $updatedEl );
|
189 |
-
},
|
190 |
-
|
191 |
-
onPartWidthUpdate: function(data) {
|
192 |
-
if (data.selector && data.width) {
|
193 |
-
var width = data.width;
|
194 |
-
var $part = this.$el.contents().find('[data-happyforms-id="'+ data.part_id +'"]');
|
195 |
-
|
196 |
-
$part.removeClass('happyforms-part--width-half happyforms-part--width-full happyforms-part--width-third');
|
197 |
-
|
198 |
-
$part.addClass('happyforms-part--width-'+ width);
|
199 |
-
}
|
200 |
-
},
|
201 |
-
|
202 |
-
onPartsSorted: function(data) {
|
203 |
-
this.elements.trigger('resort', data);
|
204 |
-
},
|
205 |
-
|
206 |
-
highlightItem: function(elementID) {
|
207 |
-
this.$el.contents().find('[data-happyforms-id="'+elementID+'"]').addClass('highlighted');
|
208 |
-
},
|
209 |
-
|
210 |
-
unhighlightItem: function(elementID) {
|
211 |
-
this.$el.contents().find('[data-happyforms-id="'+elementID+'"]').removeClass('highlighted');
|
212 |
-
},
|
213 |
-
|
214 |
-
updateStyle: function(data) {
|
215 |
-
var selector = data.selector;
|
216 |
-
var styles = data.style;
|
217 |
-
|
218 |
-
var $elements = this.$el.contents().find(selector);
|
219 |
-
|
220 |
-
$elements.attr('style', '');
|
221 |
-
|
222 |
-
$elements.css(styles);
|
223 |
-
},
|
224 |
-
|
225 |
-
loadStyles: function(data) {
|
226 |
-
var self = this;
|
227 |
-
|
228 |
-
var data = {
|
229 |
-
action: 'happyforms_load_styles',
|
230 |
-
form: data.toJSON()
|
231 |
-
};
|
232 |
-
|
233 |
-
$.post(ajaxurl, data, function(res) {
|
234 |
-
if (res) {
|
235 |
-
var $styleWrapper = self.$el.contents().find('#happyforms-preview-styles');
|
236 |
-
$styleWrapper.empty().html(res);
|
237 |
-
}
|
238 |
-
});
|
239 |
-
},
|
240 |
-
|
241 |
-
addSubPart: function(data) {
|
242 |
-
if (data) {
|
243 |
-
var $el = this.$el.contents().find('[data-happyforms-id='+data.part_id+']');
|
244 |
-
var $partEl = data.element;
|
245 |
-
|
246 |
-
if (data.appendTo) {
|
247 |
-
var $newEl = $el.find(data.appendTo);
|
248 |
-
|
249 |
-
if (!$newEl.length) {
|
250 |
-
$newEl.html($partEl);
|
251 |
-
return;
|
252 |
-
} else {
|
253 |
-
$el = $newEl;
|
254 |
-
}
|
255 |
-
}
|
256 |
-
|
257 |
-
$el.append($partEl);
|
258 |
-
}
|
259 |
-
},
|
260 |
-
|
261 |
-
removeSubPart: function(data) {
|
262 |
-
if (data) {
|
263 |
-
var $el = this.$el.contents().find('#' + data.subpart_id);
|
264 |
-
|
265 |
-
$el.remove();
|
266 |
-
}
|
267 |
}
|
268 |
-
}
|
269 |
-
|
270 |
-
classes.views.Item = Backbone.View.extend({
|
271 |
-
template: '#happyforms-partial-template',
|
272 |
-
|
273 |
-
events: {
|
274 |
-
'click .happyforms-edit-pencil': 'onPencilClick'
|
275 |
-
},
|
276 |
-
|
277 |
-
initialize: function() {
|
278 |
-
this.pencilTemplate = '#happyforms-pencil-template';
|
279 |
-
|
280 |
-
this.model.on('change', this.onModelChange, this);
|
281 |
-
},
|
282 |
-
|
283 |
-
render: function() {
|
284 |
-
var template = _.template($(this.template).text());
|
285 |
-
var html = template(this.model.toJSON());
|
286 |
-
var partHtml = html;
|
287 |
-
|
288 |
-
if ($(html).hasClass('happyforms-part-editable')) {
|
289 |
-
partHtml = this.addPencil(html);
|
290 |
-
}
|
291 |
-
|
292 |
-
this.setElement(partHtml);
|
293 |
-
api.previewer.trigger( 'happyforms-part-render', this.$el );
|
294 |
|
295 |
-
|
296 |
-
|
|
|
297 |
|
298 |
-
|
299 |
-
|
300 |
|
301 |
-
|
|
|
|
|
|
|
302 |
|
303 |
-
|
304 |
-
|
|
|
|
|
305 |
|
306 |
-
|
307 |
-
|
308 |
-
this.render();
|
309 |
-
}
|
310 |
-
},
|
311 |
|
312 |
-
|
313 |
-
|
|
|
|
|
314 |
|
315 |
-
|
316 |
-
|
317 |
-
|
318 |
-
|
319 |
-
step: 'build'
|
320 |
-
};
|
321 |
|
322 |
-
|
|
|
323 |
}
|
324 |
-
}
|
325 |
-
|
326 |
-
|
327 |
-
|
328 |
-
|
329 |
-
|
330 |
-
|
331 |
-
|
332 |
-
|
333 |
-
|
334 |
-
|
335 |
-
|
336 |
-
|
337 |
-
|
338 |
-
|
339 |
-
|
340 |
-
|
341 |
-
|
342 |
-
|
343 |
-
|
344 |
-
|
345 |
-
|
346 |
-
|
347 |
-
|
348 |
-
|
349 |
-
|
350 |
-
|
351 |
-
|
352 |
-
|
353 |
-
|
354 |
-
|
355 |
-
|
356 |
-
|
357 |
-
|
358 |
-
|
359 |
-
|
360 |
-
|
361 |
-
|
362 |
-
|
363 |
-
|
364 |
-
|
365 |
-
|
366 |
-
|
367 |
-
api.
|
368 |
-
|
369 |
-
|
370 |
-
|
371 |
-
|
372 |
-
|
373 |
-
|
374 |
-
|
375 |
-
|
376 |
-
|
377 |
-
|
378 |
-
|
379 |
-
|
380 |
-
|
381 |
-
|
382 |
-
|
383 |
-
|
384 |
-
|
385 |
-
|
386 |
-
|
387 |
-
|
388 |
-
|
389 |
-
|
390 |
-
|
391 |
-
|
392 |
-
|
393 |
-
|
394 |
-
|
395 |
-
api.
|
396 |
-
|
397 |
-
|
398 |
-
|
399 |
-
});
|
400 |
-
|
401 |
-
api.previewer.bind('happyforms-part-mouseover', function(elementID) {
|
402 |
-
if (happyFormsPreview && elementID) {
|
403 |
-
happyFormsPreview.trigger('highlight-item', elementID);
|
404 |
-
}
|
405 |
-
});
|
406 |
-
|
407 |
-
api.previewer.bind('happyforms-part-mouseout', function(elementID) {
|
408 |
-
if (happyFormsPreview && elementID) {
|
409 |
-
happyFormsPreview.trigger('unhighlight-item', elementID);
|
410 |
-
}
|
411 |
-
});
|
412 |
-
|
413 |
-
api.previewer.bind('happyforms-style-change', function(data) {
|
414 |
-
happyFormsPreview.trigger('update-style', data);
|
415 |
-
});
|
416 |
-
|
417 |
-
api.previewer.bind('happyforms-style-update', function(data) {
|
418 |
-
happyFormsPreview.trigger('load-styles', data);
|
419 |
-
});
|
420 |
-
|
421 |
-
api.previewer.bind('happyforms-sub-part-added', function(data) {
|
422 |
-
happyFormsPreview.trigger('add-sub-part', data);
|
423 |
-
});
|
424 |
-
|
425 |
-
api.previewer.bind('happyforms-sub-part-removed', function(data) {
|
426 |
-
happyFormsPreview.trigger('remove-sub-part', data);
|
427 |
-
});
|
428 |
-
});
|
429 |
-
|
430 |
-
})(jQuery, _, Backbone, wp.customize, _happyFormsSettings);
|
1 |
+
( function( $, _, Backbone, api ) {
|
2 |
|
3 |
+
HappyForms.parts = HappyForms.parts || {};
|
|
|
4 |
|
5 |
+
var handlers = {};
|
6 |
+
var $pencil, $form, $submit, $recaptcha;
|
|
|
7 |
|
8 |
+
handlers.getPart = function( id ) {
|
9 |
+
var $part = $( '[data-happyforms-id="' + id + '"]' );
|
|
|
10 |
|
11 |
+
return $part;
|
12 |
+
}
|
|
|
|
|
|
|
13 |
|
14 |
+
handlers.formTitleUpdate = function( title ) {
|
15 |
+
$( '.happyforms-form__title' ).text( title );
|
16 |
+
}
|
17 |
|
18 |
+
handlers.formPartAdd = function( html ) {
|
19 |
+
$part = $( html );
|
20 |
|
21 |
+
if ( $recaptcha.length ) {
|
22 |
+
$recaptcha.before( $part );
|
23 |
+
} else {
|
24 |
+
$submit.before( $part );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
25 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
26 |
|
27 |
+
$part.prepend( $( $pencil ) );
|
|
|
|
|
|
|
|
|
28 |
|
29 |
+
HappyForms.wrapPart( $part, $form );
|
30 |
+
}
|
31 |
|
32 |
+
handlers.formPartRefresh = function( e ) {
|
33 |
+
var $part = handlers.getPart( e.id );
|
34 |
+
var $next = $part.next();
|
35 |
+
var $refreshedPart = $( e.html );
|
36 |
|
37 |
+
$part.remove();
|
38 |
+
$next.before( $refreshedPart );
|
|
|
|
|
39 |
|
40 |
+
HappyForms.wrapPart( $refreshedPart, $form );
|
41 |
+
}
|
42 |
|
43 |
+
handlers.formPartRemove = function( id ) {
|
44 |
+
handlers.getPart( id ).remove();
|
45 |
+
}
|
46 |
|
47 |
+
handlers.partDomUpdate = function( e ) {
|
48 |
+
var $part = handlers.getPart( e.id );
|
49 |
+
var context = parent.happyForms.previewer;
|
50 |
+
var callback = context[e.callback];
|
51 |
+
var options = e.options || {}
|
52 |
|
53 |
+
if ( callback ) {
|
54 |
+
callback.call( context, e.id, $part, options, $ );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
55 |
}
|
56 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
57 |
|
58 |
+
handlers.formPartsSort = function( ids ) {
|
59 |
+
var $parts = $.map( ids, function( id ) {
|
60 |
+
var $part = handlers.getPart( id ).detach();
|
61 |
|
62 |
+
return $part;
|
63 |
+
} );
|
64 |
|
65 |
+
$.each( $parts, function( i, $part ) {
|
66 |
+
$submit.before( $part );
|
67 |
+
} );
|
68 |
+
}
|
69 |
|
70 |
+
handlers.subPartAdded = function( e ) {
|
71 |
+
var $part = handlers.getPart( e.id );
|
72 |
+
var callback = parent.happyForms.onSubPartAdded;
|
73 |
+
var options = {};
|
74 |
|
75 |
+
callback.call( parent.happyForms, e.id, $part, e.html, options );
|
76 |
+
}
|
|
|
|
|
|
|
77 |
|
78 |
+
handlers.cssVariableUpdate = function( e ) {
|
79 |
+
var formID = parent.happyForms.form.get('ID');
|
80 |
+
document.querySelector('#happyforms-form-'+ formID).style.setProperty( e.variable, e.value );
|
81 |
+
}
|
82 |
|
83 |
+
handlers.formClassUpdate = function( e ) {
|
84 |
+
var context = parent.happyForms.previewer;
|
85 |
+
var callback = context[e.callback];
|
86 |
+
var options = e.options || {}
|
|
|
|
|
87 |
|
88 |
+
if ( callback ) {
|
89 |
+
callback.call( context, e.attribute, $form, options );
|
90 |
}
|
91 |
+
}
|
92 |
+
|
93 |
+
handlers.pencilPartClick = function( e ) {
|
94 |
+
e.preventDefault();
|
95 |
+
|
96 |
+
var id = $( e.target ).parents( '.happyforms-part' ).data( 'happyforms-id' );
|
97 |
+
api.preview.send( 'happyforms-pencil-click-part', id );
|
98 |
+
}
|
99 |
+
|
100 |
+
handlers.pencilTitleClick = function( e ) {
|
101 |
+
e.preventDefault();
|
102 |
+
|
103 |
+
api.preview.send( 'happyforms-pencil-click-title' );
|
104 |
+
}
|
105 |
+
|
106 |
+
handlers.silenceEvent = function( e ) {
|
107 |
+
e.preventDefault();
|
108 |
+
}
|
109 |
+
|
110 |
+
handlers.init = function() {
|
111 |
+
// Populate pointers
|
112 |
+
$pencil = $( '#happyforms-pencil-template' ).html();
|
113 |
+
$form = $( '.happyforms-form form' );
|
114 |
+
$submit = $( '.happyforms-part.happyforms-part--submit', $form );
|
115 |
+
$recaptcha = $( '.happyforms-part.happyforms-part--recaptcha', $form );
|
116 |
+
|
117 |
+
// Append pencils to existing elements
|
118 |
+
$( '.happyforms-block-editable' ).prepend( $( $pencil ) );
|
119 |
+
|
120 |
+
// Remove unpreviewable
|
121 |
+
$( '.happyforms-form form' ).removeClass( 'customize-unpreviewable' );
|
122 |
+
$( '.notice a' ).removeClass( 'customize-unpreviewable' );
|
123 |
+
}
|
124 |
+
|
125 |
+
handlers.bind = function() {
|
126 |
+
// Bind preview handlers
|
127 |
+
api.preview.bind( 'happyforms-form-title-update', handlers.formTitleUpdate );
|
128 |
+
api.preview.bind( 'happyforms-form-part-add', handlers.formPartAdd );
|
129 |
+
api.preview.bind( 'happyforms-form-part-remove', handlers.formPartRemove );
|
130 |
+
api.preview.bind( 'happyforms-form-parts-sort', handlers.formPartsSort );
|
131 |
+
api.preview.bind( 'happyforms-form-part-refresh', handlers.formPartRefresh );
|
132 |
+
api.preview.bind( 'happyforms-part-dom-update', handlers.partDomUpdate );
|
133 |
+
api.preview.bind( 'happyforms-css-variable-update', handlers.cssVariableUpdate );
|
134 |
+
api.preview.bind( 'happyforms-form-class-update', handlers.formClassUpdate );
|
135 |
+
|
136 |
+
// Bind DOM handlers
|
137 |
+
$( document.body ).on(
|
138 |
+
'click',
|
139 |
+
'.happyforms-block-editable--title .customize-partial-edit-shortcut',
|
140 |
+
handlers.pencilTitleClick
|
141 |
+
);
|
142 |
+
|
143 |
+
$( document.body ).on(
|
144 |
+
'click',
|
145 |
+
'.happyforms-block-editable--part .customize-partial-edit-shortcut',
|
146 |
+
handlers.pencilPartClick
|
147 |
+
);
|
148 |
+
|
149 |
+
$( '.happyforms-ask-link' ).on( 'click', function() {
|
150 |
+
window.open( $( this ).attr( 'href' ) );
|
151 |
+
} );
|
152 |
+
|
153 |
+
// Silence unwanted events
|
154 |
+
$( document.body ).on( 'click', 'button', handlers.silenceEvent );
|
155 |
+
$( document.body ).on( 'click', 'input[type=submit]', handlers.silenceEvent );
|
156 |
+
$( '.happyforms-form' ).on( 'submit', handlers.silenceEvent );
|
157 |
+
}
|
158 |
+
|
159 |
+
$( document ).ready( function() {
|
160 |
+
handlers.init();
|
161 |
+
handlers.bind();
|
162 |
+
api.preview.send( 'happyforms-preview-ready' );
|
163 |
+
} );
|
164 |
+
|
165 |
+
} )( jQuery, _, Backbone, wp.customize );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assets/js/tinymce/form-picker.js
DELETED
@@ -1,124 +0,0 @@
|
|
1 |
-
/* global tinymce, jQuery, MakeFormatBuilder */
|
2 |
-
var HappyFormsFormPicker = HappyFormsFormPicker || {};
|
3 |
-
|
4 |
-
(function(tinymce, $, _, formPicker) {
|
5 |
-
tinymce.PluginManager.add('happyforms_form_picker', function (editor, url) {
|
6 |
-
editor.addCommand('HappyForms_Form_Picker', function () {
|
7 |
-
formPicker.open(editor);
|
8 |
-
});
|
9 |
-
|
10 |
-
editor.addButton('happyforms_form_picker', {
|
11 |
-
icon : 'happyforms-form-picker',
|
12 |
-
tooltip: 'HappyForms',
|
13 |
-
cmd : 'HappyForms_Form_Picker'
|
14 |
-
});
|
15 |
-
|
16 |
-
editor.on('init', function () {
|
17 |
-
$.each(formPicker.definitions, function (name, defs) {
|
18 |
-
editor.formatter.register(name, defs);
|
19 |
-
});
|
20 |
-
});
|
21 |
-
});
|
22 |
-
|
23 |
-
var formPickerWindow;
|
24 |
-
|
25 |
-
formPicker = $.extend(formPicker, {
|
26 |
-
editor: {},
|
27 |
-
definitions: {},
|
28 |
-
nodes: {},
|
29 |
-
choices: {},
|
30 |
-
forms: {},
|
31 |
-
currentSelection: {},
|
32 |
-
|
33 |
-
open: function(editor) {
|
34 |
-
this.editor = editor;
|
35 |
-
this.currentSelection = editor.selection;
|
36 |
-
|
37 |
-
var items = [
|
38 |
-
{
|
39 |
-
type: 'form',
|
40 |
-
name: 'listboxForm',
|
41 |
-
items: formPicker.getFormListBox()
|
42 |
-
}
|
43 |
-
];
|
44 |
-
|
45 |
-
var args = {
|
46 |
-
title: 'HappyForms',
|
47 |
-
id: 'happyforms-form-picker',
|
48 |
-
autoScroll: true,
|
49 |
-
maxHeight: 500,
|
50 |
-
items: {
|
51 |
-
type: 'container',
|
52 |
-
name: 'formContainer',
|
53 |
-
layout: 'flex',
|
54 |
-
align: 'stretch',
|
55 |
-
direction: 'column',
|
56 |
-
items: items
|
57 |
-
},
|
58 |
-
buttons: [
|
59 |
-
this.getInsertButton()
|
60 |
-
]
|
61 |
-
};
|
62 |
-
|
63 |
-
formPickerWindow = editor.windowManager.open(args);
|
64 |
-
},
|
65 |
-
|
66 |
-
getFormListBox: function() {
|
67 |
-
var listbox = {
|
68 |
-
type: 'listbox',
|
69 |
-
name: 'form',
|
70 |
-
id: 'happyforms-form-picker-list',
|
71 |
-
minWidth: 300,
|
72 |
-
values: this.getForms(),
|
73 |
-
onPostrender: function() {
|
74 |
-
happyFormsListBox = this;
|
75 |
-
},
|
76 |
-
onselect: function() {
|
77 |
-
var choice = this.value();
|
78 |
-
}
|
79 |
-
};
|
80 |
-
|
81 |
-
return listbox;
|
82 |
-
},
|
83 |
-
|
84 |
-
getInsertButton: function() {
|
85 |
-
var self = this;
|
86 |
-
|
87 |
-
var button = {
|
88 |
-
text: 'Insert',
|
89 |
-
id: 'happyforms-form-picker-insert',
|
90 |
-
name: 'formSubmit',
|
91 |
-
classes: 'button-primary',
|
92 |
-
onclick: function() {
|
93 |
-
var html = '[happyforms id="' + happyFormsListBox.value() + '" /]'
|
94 |
-
|
95 |
-
self.editor.insertContent(html);
|
96 |
-
|
97 |
-
formPickerWindow.fire('submit');
|
98 |
-
}
|
99 |
-
};
|
100 |
-
|
101 |
-
return button;
|
102 |
-
},
|
103 |
-
|
104 |
-
getForms: function() {
|
105 |
-
var choices = [
|
106 |
-
{
|
107 |
-
value: '',
|
108 |
-
text: 'Choose a form',
|
109 |
-
disabled: true,
|
110 |
-
classes: 'listbox-placeholder'
|
111 |
-
}
|
112 |
-
];
|
113 |
-
|
114 |
-
_(happyFormsData).each(function(form, index) {
|
115 |
-
choices.push({
|
116 |
-
value: form.id,
|
117 |
-
text: form.title
|
118 |
-
});
|
119 |
-
});
|
120 |
-
|
121 |
-
return choices;
|
122 |
-
}
|
123 |
-
});
|
124 |
-
})(tinymce, jQuery, _, HappyFormsFormPicker);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
happyforms.php
CHANGED
@@ -5,7 +5,7 @@
|
|
5 |
* Plugin URI: https://happyforms.me
|
6 |
* Description: Your friendly drag and drop contact form builder for creating contact forms, lead generation forms, feedback forms, quote forms, survey forms and more!
|
7 |
* Author: The Theme Foundry
|
8 |
-
* Version: 1.
|
9 |
* Author URI: https://thethemefoundry.com
|
10 |
* Upgrade URI: https://thethemefoundry.com
|
11 |
*/
|
@@ -13,7 +13,7 @@
|
|
13 |
/**
|
14 |
* The current version of the plugin.
|
15 |
*/
|
16 |
-
define( 'HAPPYFORMS_VERSION', '1.
|
17 |
|
18 |
if ( ! function_exists( 'happyforms_plugin_file' ) ):
|
19 |
/**
|
5 |
* Plugin URI: https://happyforms.me
|
6 |
* Description: Your friendly drag and drop contact form builder for creating contact forms, lead generation forms, feedback forms, quote forms, survey forms and more!
|
7 |
* Author: The Theme Foundry
|
8 |
+
* Version: 1.3
|
9 |
* Author URI: https://thethemefoundry.com
|
10 |
* Upgrade URI: https://thethemefoundry.com
|
11 |
*/
|
13 |
/**
|
14 |
* The current version of the plugin.
|
15 |
*/
|
16 |
+
define( 'HAPPYFORMS_VERSION', '1.3' );
|
17 |
|
18 |
if ( ! function_exists( 'happyforms_plugin_file' ) ):
|
19 |
/**
|
inc/classes/class-admin-notices.php
CHANGED
@@ -74,12 +74,10 @@ class HappyForms_Admin_Notices {
|
|
74 |
$notice = array_merge( array( 'message' => $message ), $args );
|
75 |
$this->notices[$id] = $notice;
|
76 |
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
set_transient( $transient_id, $user_notices );
|
82 |
-
}
|
83 |
}
|
84 |
|
85 |
/**
|
@@ -169,7 +167,13 @@ class HappyForms_Admin_Notices {
|
|
169 |
$classes = implode( ' ', $classes );
|
170 |
?>
|
171 |
<div id="happyforms-notice-<?php echo esc_attr( $id ); ?>" class="<?php echo esc_attr( $classes ); ?>"<?php echo $nonce; ?>>
|
172 |
-
<?php
|
|
|
|
|
|
|
|
|
|
|
|
|
173 |
</div>
|
174 |
<?php
|
175 |
}
|
@@ -246,7 +250,7 @@ class HappyForms_Admin_Notices {
|
|
246 |
*
|
247 |
* @return array
|
248 |
*/
|
249 |
-
|
250 |
$dismissed = get_user_meta( $user_id, 'happyforms-dismissed-notices', true );
|
251 |
|
252 |
if ( ! is_array( $dismissed ) ) {
|
74 |
$notice = array_merge( array( 'message' => $message ), $args );
|
75 |
$this->notices[$id] = $notice;
|
76 |
|
77 |
+
$transient_id = $this->get_user_transient_id();
|
78 |
+
$user_notices = $this->get_user_notices();
|
79 |
+
$user_notices[$id] = $notice;
|
80 |
+
set_transient( $transient_id, $user_notices );
|
|
|
|
|
81 |
}
|
82 |
|
83 |
/**
|
167 |
$classes = implode( ' ', $classes );
|
168 |
?>
|
169 |
<div id="happyforms-notice-<?php echo esc_attr( $id ); ?>" class="<?php echo esc_attr( $classes ); ?>"<?php echo $nonce; ?>>
|
170 |
+
<?php
|
171 |
+
if ( 'custom' !== $type ) :
|
172 |
+
echo wpautop( $message );
|
173 |
+
else:
|
174 |
+
echo $message;
|
175 |
+
endif;
|
176 |
+
?>
|
177 |
</div>
|
178 |
<?php
|
179 |
}
|
250 |
*
|
251 |
* @return array
|
252 |
*/
|
253 |
+
public function get_dismissed_notices( $user_id ) {
|
254 |
$dismissed = get_user_meta( $user_id, 'happyforms-dismissed-notices', true );
|
255 |
|
256 |
if ( ! is_array( $dismissed ) ) {
|
inc/classes/class-form-controller.php
CHANGED
@@ -46,10 +46,12 @@ class HappyForms_Form_Controller {
|
|
46 |
*/
|
47 |
public function hook() {
|
48 |
add_action( 'init', array( $this, 'register_post_type' ) );
|
|
|
49 |
add_filter( 'single_template', array( $this, 'single_template' ) );
|
50 |
add_action( 'trashed_post', array( $this, 'trashed_post' ) );
|
51 |
add_action( 'delete_post', array( $this, 'delete_post' ) );
|
52 |
add_action( 'untrashed_post', array( $this, 'untrashed_post' ) );
|
|
|
53 |
}
|
54 |
|
55 |
/**
|
@@ -91,6 +93,40 @@ class HappyForms_Form_Controller {
|
|
91 |
register_post_type( $this->post_type, $args );
|
92 |
}
|
93 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
94 |
/**
|
95 |
* Filter: filter the template path used for
|
96 |
* the Customize screen preview and frontend rendering.
|
@@ -110,132 +146,170 @@ class HappyForms_Form_Controller {
|
|
110 |
if ( is_customize_preview() ) {
|
111 |
$single_template = happyforms_get_include_folder() . '/templates/preview-form-edit.php';
|
112 |
} else {
|
113 |
-
$single_template = happyforms_get_include_folder() . '/templates/
|
114 |
}
|
115 |
}
|
116 |
|
117 |
return $single_template;
|
118 |
}
|
119 |
|
120 |
-
|
121 |
-
* Get the defaults and sanitization configuration
|
122 |
-
* for the fields of the form post object.
|
123 |
-
*
|
124 |
-
* @since 1.0
|
125 |
-
*
|
126 |
-
* @param boolean $key An optional field key
|
127 |
-
* to retrieve configuration for.
|
128 |
-
*
|
129 |
-
* @return array
|
130 |
-
*/
|
131 |
-
private function get_customize_fields( $key = false ) {
|
132 |
$fields = array(
|
133 |
-
'
|
134 |
-
'
|
135 |
-
|
136 |
-
'sanitize' => 'intval',
|
137 |
-
),
|
138 |
-
'post_title' => array(
|
139 |
-
'default' => __( 'Untitled form', 'happyforms' ),
|
140 |
-
'sanitize' => 'sanitize_text_field',
|
141 |
-
),
|
142 |
-
'post_status' => array(
|
143 |
-
'default' => 'publish',
|
144 |
-
'sanitize' => 'happyforms_sanitize_post_status',
|
145 |
-
),
|
146 |
-
'post_type' => array(
|
147 |
-
'default' => $this->post_type,
|
148 |
-
'sanitize' => 'sanitize_text_field',
|
149 |
-
)
|
150 |
),
|
151 |
-
'
|
152 |
-
'
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
'
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
'
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
-
|
166 |
-
|
167 |
-
|
168 |
-
|
169 |
-
|
170 |
-
|
171 |
-
|
172 |
-
'
|
173 |
-
|
174 |
-
|
175 |
-
),
|
176 |
-
'
|
177 |
-
|
178 |
-
|
179 |
-
),
|
180 |
-
'
|
181 |
-
|
182 |
-
|
183 |
-
),
|
184 |
-
'
|
185 |
-
|
186 |
-
|
187 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
188 |
),
|
189 |
);
|
190 |
|
191 |
/**
|
192 |
-
* Filter
|
193 |
-
* for the fields of the form post object.
|
194 |
*
|
195 |
-
* @since 1.
|
196 |
*
|
197 |
-
* @param array $fields
|
198 |
*
|
199 |
* @return array
|
200 |
*/
|
201 |
-
$fields = apply_filters( '
|
202 |
|
203 |
-
|
204 |
-
return $fields[$key];
|
205 |
-
} else {
|
206 |
-
return $fields;
|
207 |
-
}
|
208 |
}
|
209 |
|
210 |
/**
|
211 |
-
* Get the
|
|
|
212 |
*
|
213 |
* @since 1.0
|
214 |
*
|
215 |
-
* @param
|
216 |
-
*
|
217 |
*
|
218 |
* @return array
|
219 |
*/
|
220 |
-
public function
|
221 |
-
$
|
222 |
-
$form_fields = $this->get_customize_fields();
|
223 |
-
|
224 |
-
foreach ( $form_fields as $field_group => $fields ) {
|
225 |
-
$defaults[$field_group] = array();
|
226 |
|
227 |
-
|
228 |
-
|
229 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
230 |
}
|
231 |
|
232 |
-
|
233 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
234 |
}
|
235 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
236 |
return $defaults;
|
237 |
}
|
238 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
239 |
/**
|
240 |
* Validate the form data submitted from the Customize screen.
|
241 |
*
|
@@ -245,27 +319,94 @@ class HappyForms_Form_Controller {
|
|
245 |
*
|
246 |
* @return array
|
247 |
*/
|
248 |
-
public function
|
249 |
-
$
|
250 |
-
$
|
251 |
-
|
252 |
-
|
253 |
-
|
254 |
-
|
255 |
-
|
256 |
-
|
257 |
-
|
258 |
-
|
259 |
-
|
260 |
-
|
261 |
-
|
262 |
-
|
263 |
-
|
264 |
-
|
265 |
-
|
266 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
267 |
|
268 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
269 |
}
|
270 |
|
271 |
/**
|
@@ -276,16 +417,14 @@ class HappyForms_Form_Controller {
|
|
276 |
* @return int|string
|
277 |
*/
|
278 |
public function create() {
|
279 |
-
$
|
280 |
-
|
281 |
-
'
|
282 |
-
|
|
|
283 |
);
|
284 |
-
$post_data = array_merge( $validated_data['post'], $post_attributes );
|
285 |
-
$meta_data = array( 'meta_input' => $validated_data['meta'] );
|
286 |
-
$insert_data = array_merge( $post_data, $meta_data );
|
287 |
|
288 |
-
$result = wp_insert_post( wp_slash( $
|
289 |
|
290 |
if ( is_wp_error( $result ) ) {
|
291 |
return $result;
|
@@ -314,15 +453,17 @@ class HappyForms_Form_Controller {
|
|
314 |
'posts_per_page' => -1,
|
315 |
);
|
316 |
|
317 |
-
|
318 |
-
$query_params['post__in'] = is_array( $post_ids ) ? $post_ids : array( $post_ids );
|
319 |
-
}
|
320 |
|
321 |
if ( true === $only_id ) {
|
322 |
$query_params['fields'] = 'ids';
|
323 |
}
|
324 |
|
325 |
-
|
|
|
|
|
|
|
|
|
326 |
|
327 |
if ( true === $only_id ) {
|
328 |
return $forms;
|
@@ -356,10 +497,18 @@ class HappyForms_Form_Controller {
|
|
356 |
*/
|
357 |
public function to_array( $form ) {
|
358 |
$form_array = $form->to_array();
|
359 |
-
$meta_fields = $this->
|
|
|
|
|
360 |
|
361 |
foreach ( $meta_fields as $field_name => $field_settings ) {
|
362 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
363 |
}
|
364 |
|
365 |
$parts = array();
|
@@ -387,16 +536,19 @@ class HappyForms_Form_Controller {
|
|
387 |
* @return array
|
388 |
*/
|
389 |
public function update( $form_data = array() ) {
|
390 |
-
$validated_data = $this->
|
391 |
|
392 |
-
if ( isset( $validated_data['
|
393 |
$form = $this->create();
|
394 |
-
$validated_data['
|
395 |
}
|
396 |
|
397 |
-
$validated_data
|
398 |
-
$meta_data =
|
399 |
-
$update_data = array_merge( $
|
|
|
|
|
|
|
400 |
$result = wp_update_post( $update_data, true );
|
401 |
|
402 |
if ( is_wp_error( $result ) ) {
|
@@ -548,6 +700,12 @@ class HappyForms_Form_Controller {
|
|
548 |
return $form_data['spam_prevention'];
|
549 |
}
|
550 |
|
|
|
|
|
|
|
|
|
|
|
|
|
551 |
/**
|
552 |
* Get form-wide submission notice definitions.
|
553 |
*
|
@@ -587,12 +745,27 @@ class HappyForms_Form_Controller {
|
|
587 |
}
|
588 |
|
589 |
ob_start();
|
590 |
-
require( happyforms_get_include_folder() . '/templates/
|
591 |
$form_markup = ob_get_clean();
|
592 |
|
593 |
return $form_markup;
|
594 |
}
|
595 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
596 |
}
|
597 |
|
598 |
if ( ! function_exists( 'happyforms_get_form_controller' ) ):
|
46 |
*/
|
47 |
public function hook() {
|
48 |
add_action( 'init', array( $this, 'register_post_type' ) );
|
49 |
+
add_action( 'wp', array( $this, 'inject_new_form' ) );
|
50 |
add_filter( 'single_template', array( $this, 'single_template' ) );
|
51 |
add_action( 'trashed_post', array( $this, 'trashed_post' ) );
|
52 |
add_action( 'delete_post', array( $this, 'delete_post' ) );
|
53 |
add_action( 'untrashed_post', array( $this, 'untrashed_post' ) );
|
54 |
+
add_action( 'happyforms_head', array( $this, 'happyforms_head' ) );
|
55 |
}
|
56 |
|
57 |
/**
|
93 |
register_post_type( $this->post_type, $args );
|
94 |
}
|
95 |
|
96 |
+
/**
|
97 |
+
* Action: inject a virtual HappyForms post object
|
98 |
+
* if we're previewing a new form.
|
99 |
+
*
|
100 |
+
* @since 1.3
|
101 |
+
*
|
102 |
+
* @hooked action template_redirect
|
103 |
+
*
|
104 |
+
* @return void
|
105 |
+
*/
|
106 |
+
public function inject_new_form() {
|
107 |
+
global $wp_query;
|
108 |
+
|
109 |
+
if ( ! is_customize_preview() ) {
|
110 |
+
return;
|
111 |
+
}
|
112 |
+
|
113 |
+
if ( ! isset( $wp_query->query['p'] ) ||
|
114 |
+
! isset( $wp_query->query['post_type'] ) ) {
|
115 |
+
return;
|
116 |
+
}
|
117 |
+
|
118 |
+
$queried_post_type = $wp_query->query['post_type'];
|
119 |
+
$queried_post_id = intval( $wp_query->query['p'] );
|
120 |
+
|
121 |
+
if ( $this->post_type !== $queried_post_type || 0 !== $queried_post_id ) {
|
122 |
+
return;
|
123 |
+
}
|
124 |
+
|
125 |
+
// See https://barn2.co.uk/create-fake-wordpress-post-fly/
|
126 |
+
$post = $this->create_virtual();
|
127 |
+
$this->inject_virtual_post( $post );
|
128 |
+
}
|
129 |
+
|
130 |
/**
|
131 |
* Filter: filter the template path used for
|
132 |
* the Customize screen preview and frontend rendering.
|
146 |
if ( is_customize_preview() ) {
|
147 |
$single_template = happyforms_get_include_folder() . '/templates/preview-form-edit.php';
|
148 |
} else {
|
149 |
+
$single_template = happyforms_get_include_folder() . '/templates/single-form.php';
|
150 |
}
|
151 |
}
|
152 |
|
153 |
return $single_template;
|
154 |
}
|
155 |
|
156 |
+
public function get_post_fields() {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
157 |
$fields = array(
|
158 |
+
'ID' => array(
|
159 |
+
'default' => '0',
|
160 |
+
'sanitize' => 'intval',
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
161 |
),
|
162 |
+
'post_title' => array(
|
163 |
+
'default' => __( 'Untitled form', 'happyforms' ),
|
164 |
+
'sanitize' => 'sanitize_text_field',
|
165 |
+
),
|
166 |
+
'post_status' => array(
|
167 |
+
'default' => 'publish',
|
168 |
+
'sanitize' => 'happyforms_sanitize_post_status',
|
169 |
+
),
|
170 |
+
'post_type' => array(
|
171 |
+
'default' => $this->post_type,
|
172 |
+
'sanitize' => 'sanitize_text_field',
|
173 |
+
)
|
174 |
+
);
|
175 |
+
|
176 |
+
return $fields;
|
177 |
+
}
|
178 |
+
|
179 |
+
public function get_meta_fields() {
|
180 |
+
$fields = array(
|
181 |
+
'email_recipient' => array(
|
182 |
+
'default' => '',
|
183 |
+
'sanitize' => 'happyforms_sanitize_emails',
|
184 |
+
),
|
185 |
+
'confirmation_message' => array(
|
186 |
+
'default' => __( 'Your message has been successfully sent. We appreciate you contacting us and we’ll be in touch soon.', 'happyforms' ),
|
187 |
+
'sanitize' => 'sanitize_text_field',
|
188 |
+
),
|
189 |
+
'confirmation_email_subject' => array(
|
190 |
+
'default' => __( 'We received your message', 'happyforms' ),
|
191 |
+
'sanitize' => 'sanitize_text_field',
|
192 |
+
),
|
193 |
+
'confirmation_email_content' => array(
|
194 |
+
'default' => __( 'Your message has been successfully sent. We appreciate you contacting us and we’ll be in touch soon.', 'happyforms' ),
|
195 |
+
'sanitize' => 'sanitize_text_field',
|
196 |
+
),
|
197 |
+
'redirect_url' => array(
|
198 |
+
'default' => '',
|
199 |
+
'sanitize' => 'sanitize_text_field',
|
200 |
+
),
|
201 |
+
'spam_prevention' => array(
|
202 |
+
'default' => 1,
|
203 |
+
'sanitize' => 'happyforms_sanitize_checkbox',
|
204 |
+
),
|
205 |
+
'submit_button_label' => array(
|
206 |
+
'default' => __( 'Submit Form', 'happyforms' ),
|
207 |
+
'sanitize' => 'sanitize_text_field',
|
208 |
+
),
|
209 |
+
'form_expiration_datetime' => array(
|
210 |
+
'default' => date( 'Y-m-d H:i:s', time() + 3600 * 24 * 7 ),
|
211 |
+
'sanitize' => 'happyforms_sanitize_datetime',
|
212 |
+
),
|
213 |
+
'save_entries' => array(
|
214 |
+
'default' => 1,
|
215 |
+
'sanitize' => 'happyforms_sanitize_checkbox',
|
216 |
+
),
|
217 |
+
'captcha' => array(
|
218 |
+
'default' => '',
|
219 |
+
'sanitize' => 'happyforms_sanitize_checkbox',
|
220 |
+
),
|
221 |
+
'captcha_site_key' => array(
|
222 |
+
'default' => '',
|
223 |
+
'sanitize' => 'sanitize_text_field',
|
224 |
+
),
|
225 |
+
'captcha_secret_key' => array(
|
226 |
+
'default' => '',
|
227 |
+
'sanitize' => 'sanitize_text_field',
|
228 |
),
|
229 |
);
|
230 |
|
231 |
/**
|
232 |
+
* Filter fields stored as form post meta.
|
|
|
233 |
*
|
234 |
+
* @since 1.3
|
235 |
*
|
236 |
+
* @param array $fields Registered post meta fields.
|
237 |
*
|
238 |
* @return array
|
239 |
*/
|
240 |
+
$fields = apply_filters( 'happyforms_meta_fields', $fields );
|
241 |
|
242 |
+
return $fields;
|
|
|
|
|
|
|
|
|
243 |
}
|
244 |
|
245 |
/**
|
246 |
+
* Get the defaults and sanitization configuration
|
247 |
+
* for the fields of the form post object.
|
248 |
*
|
249 |
* @since 1.0
|
250 |
*
|
251 |
+
* @param string $group An optional subset of fields
|
252 |
+
* to retrieve configuration for.
|
253 |
*
|
254 |
* @return array
|
255 |
*/
|
256 |
+
public function get_fields( $group = '' ) {
|
257 |
+
$fields = array();
|
|
|
|
|
|
|
|
|
258 |
|
259 |
+
switch ( $group ) {
|
260 |
+
case 'post':
|
261 |
+
$fields = $this->get_post_fields();
|
262 |
+
break;
|
263 |
+
case 'meta':
|
264 |
+
$fields = $this->get_meta_fields();
|
265 |
+
break;
|
266 |
+
default:
|
267 |
+
$fields = array_merge(
|
268 |
+
$this->get_post_fields(),
|
269 |
+
$this->get_meta_fields()
|
270 |
+
);
|
271 |
+
break;
|
272 |
}
|
273 |
|
274 |
+
return $fields;
|
275 |
+
}
|
276 |
+
|
277 |
+
public function get_field( $field ) {
|
278 |
+
$fields = $this->get_fields();
|
279 |
+
|
280 |
+
if ( isset( $fields[$field] ) ) {
|
281 |
+
return $fields[$field];
|
282 |
}
|
283 |
|
284 |
+
return null;
|
285 |
+
}
|
286 |
+
|
287 |
+
public function get_defaults( $group = '' ) {
|
288 |
+
$fields = $this->get_fields( $group );
|
289 |
+
$defaults = array_combine( array_keys( $fields ), array_column( $fields, 'default' ) );
|
290 |
+
|
291 |
return $defaults;
|
292 |
}
|
293 |
|
294 |
+
public function get_default( $field ) {
|
295 |
+
$defaults = $this->get_defaults();
|
296 |
+
|
297 |
+
if ( isset( $defaults[$field] ) ) {
|
298 |
+
return $defaults[$field];
|
299 |
+
}
|
300 |
+
|
301 |
+
return null;
|
302 |
+
}
|
303 |
+
|
304 |
+
public function validate_field( &$value, $key ) {
|
305 |
+
$field = $this->get_field( $key );
|
306 |
+
|
307 |
+
if ( isset( $field['sanitize'] ) && is_callable( $field['sanitize'] ) ) {
|
308 |
+
$callback = $field['sanitize'];
|
309 |
+
$value = call_user_func( $callback, $value );
|
310 |
+
};
|
311 |
+
}
|
312 |
+
|
313 |
/**
|
314 |
* Validate the form data submitted from the Customize screen.
|
315 |
*
|
319 |
*
|
320 |
* @return array
|
321 |
*/
|
322 |
+
public function validate_fields( $post_data = array() ) {
|
323 |
+
$defaults = $this->get_defaults();
|
324 |
+
$filtered = array_intersect_key( $post_data, $defaults );
|
325 |
+
$validated = wp_parse_args( $post_data, $filtered );
|
326 |
+
array_walk( $validated, array( $this, 'validate_field' ) );
|
327 |
+
|
328 |
+
return $validated;
|
329 |
+
}
|
330 |
+
|
331 |
+
/**
|
332 |
+
* Creates a virtual form post object.
|
333 |
+
*
|
334 |
+
* @since 1.3
|
335 |
+
*
|
336 |
+
* @return WP_Post
|
337 |
+
*/
|
338 |
+
private function create_virtual() {
|
339 |
+
$post_id = 0;
|
340 |
+
$defaults = $this->get_defaults();
|
341 |
+
|
342 |
+
$post = new stdClass();
|
343 |
+
$post->ID = $post_id;
|
344 |
+
$post->post_author = 1;
|
345 |
+
$post->post_date = current_time( 'mysql' );
|
346 |
+
$post->post_date_gmt = current_time( 'mysql', 1 );
|
347 |
+
$post->post_title = $this->get_default( 'post_title' );
|
348 |
+
$post->post_content = '';
|
349 |
+
$post->post_status = 'publish';
|
350 |
+
$post->comment_status = 'closed';
|
351 |
+
$post->ping_status = 'closed';
|
352 |
+
$post->post_name = '';
|
353 |
+
$post->post_type = $this->post_type;
|
354 |
+
$post->filter = 'raw';
|
355 |
+
|
356 |
+
$wp_post = new WP_Post( $post );
|
357 |
+
wp_cache_add( $post_id, $wp_post, 'posts' );
|
358 |
+
|
359 |
+
return $wp_post;
|
360 |
+
}
|
361 |
|
362 |
+
/**
|
363 |
+
* Injects a virtual post object
|
364 |
+
* in the current query.
|
365 |
+
*
|
366 |
+
* @since 1.3
|
367 |
+
*
|
368 |
+
* @return WP_Post
|
369 |
+
*/
|
370 |
+
private function inject_virtual_post( $post ) {
|
371 |
+
global $wp, $wp_query;
|
372 |
+
|
373 |
+
$wp_query->post = $post;
|
374 |
+
$wp_query->posts = array( $post );
|
375 |
+
$wp_query->queried_object = $post;
|
376 |
+
$wp_query->queried_object_id = 0;
|
377 |
+
$wp_query->found_posts = 1;
|
378 |
+
$wp_query->post_count = 1;
|
379 |
+
$wp_query->max_num_pages = 1;
|
380 |
+
$wp_query->is_page = false;
|
381 |
+
$wp_query->is_singular = true;
|
382 |
+
$wp_query->is_single = true;
|
383 |
+
$wp_query->is_attachment = false;
|
384 |
+
$wp_query->is_archive = false;
|
385 |
+
$wp_query->is_category = false;
|
386 |
+
$wp_query->is_tag = false;
|
387 |
+
$wp_query->is_tax = false;
|
388 |
+
$wp_query->is_author = false;
|
389 |
+
$wp_query->is_date = false;
|
390 |
+
$wp_query->is_year = false;
|
391 |
+
$wp_query->is_month = false;
|
392 |
+
$wp_query->is_day = false;
|
393 |
+
$wp_query->is_time = false;
|
394 |
+
$wp_query->is_search = false;
|
395 |
+
$wp_query->is_feed = false;
|
396 |
+
$wp_query->is_comment_feed = false;
|
397 |
+
$wp_query->is_trackback = false;
|
398 |
+
$wp_query->is_home = false;
|
399 |
+
$wp_query->is_embed = false;
|
400 |
+
$wp_query->is_404 = false;
|
401 |
+
$wp_query->is_paged = false;
|
402 |
+
$wp_query->is_admin = false;
|
403 |
+
$wp_query->is_preview = false;
|
404 |
+
$wp_query->is_robots = false;
|
405 |
+
$wp_query->is_posts_page = false;
|
406 |
+
$wp_query->is_post_type_archive = false;
|
407 |
+
|
408 |
+
$GLOBALS['wp_query'] = $wp_query;
|
409 |
+
$wp->register_globals();
|
410 |
}
|
411 |
|
412 |
/**
|
417 |
* @return int|string
|
418 |
*/
|
419 |
public function create() {
|
420 |
+
$post_data = array_merge(
|
421 |
+
$this->get_defaults( 'post' ),
|
422 |
+
array( 'meta_input' => array(
|
423 |
+
$this->get_defaults( 'meta' )
|
424 |
+
) )
|
425 |
);
|
|
|
|
|
|
|
426 |
|
427 |
+
$result = wp_insert_post( wp_slash( $post_data ), true );
|
428 |
|
429 |
if ( is_wp_error( $result ) ) {
|
430 |
return $result;
|
453 |
'posts_per_page' => -1,
|
454 |
);
|
455 |
|
456 |
+
$query_params['post__in'] = is_array( $post_ids ) ? $post_ids : array( $post_ids );
|
|
|
|
|
457 |
|
458 |
if ( true === $only_id ) {
|
459 |
$query_params['fields'] = 'ids';
|
460 |
}
|
461 |
|
462 |
+
if ( 0 !== $post_ids ) {
|
463 |
+
$forms = get_posts( $query_params );
|
464 |
+
} else {
|
465 |
+
$forms = array( $this->create_virtual() );
|
466 |
+
}
|
467 |
|
468 |
if ( true === $only_id ) {
|
469 |
return $forms;
|
497 |
*/
|
498 |
public function to_array( $form ) {
|
499 |
$form_array = $form->to_array();
|
500 |
+
$meta_fields = $this->get_fields( 'meta' );
|
501 |
+
$form_meta_keys = get_post_custom_keys( $form->ID );
|
502 |
+
$form_meta_keys = is_null( $form_meta_keys ) ? array() : $form_meta_keys;
|
503 |
|
504 |
foreach ( $meta_fields as $field_name => $field_settings ) {
|
505 |
+
if ( in_array( $field_name, $form_meta_keys ) ) {
|
506 |
+
// If this meta is defined, use its value.
|
507 |
+
$form_array[$field_name] = get_post_meta( $form->ID, $field_name, true );
|
508 |
+
} else {
|
509 |
+
// Otherwise use the default value.
|
510 |
+
$form_array[$field_name] = $field_settings['default'];
|
511 |
+
}
|
512 |
}
|
513 |
|
514 |
$parts = array();
|
536 |
* @return array
|
537 |
*/
|
538 |
public function update( $form_data = array() ) {
|
539 |
+
$validated_data = $this->validate_fields( $form_data );
|
540 |
|
541 |
+
if ( isset( $validated_data['ID'] ) && 0 === $validated_data['ID'] ) {
|
542 |
$form = $this->create();
|
543 |
+
$validated_data['ID'] = $form->ID;
|
544 |
}
|
545 |
|
546 |
+
$post_data = array_intersect_key( $validated_data, $this->get_defaults( 'post' ) );
|
547 |
+
$meta_data = array_intersect_key( $validated_data, $this->get_defaults( 'meta' ) );
|
548 |
+
$update_data = array_merge( $post_data, array(
|
549 |
+
'meta_input' => $meta_data
|
550 |
+
) );
|
551 |
+
|
552 |
$result = wp_update_post( $update_data, true );
|
553 |
|
554 |
if ( is_wp_error( $result ) ) {
|
700 |
return $form_data['spam_prevention'];
|
701 |
}
|
702 |
|
703 |
+
public function has_recaptcha_protection( $form_data ) {
|
704 |
+
return $form_data['captcha']
|
705 |
+
&& $form_data['captcha_site_key']
|
706 |
+
&& $form_data['captcha_secret_key'];
|
707 |
+
}
|
708 |
+
|
709 |
/**
|
710 |
* Get form-wide submission notice definitions.
|
711 |
*
|
745 |
}
|
746 |
|
747 |
ob_start();
|
748 |
+
require( happyforms_get_include_folder() . '/templates/single-form.php' );
|
749 |
$form_markup = ob_get_clean();
|
750 |
|
751 |
return $form_markup;
|
752 |
}
|
753 |
|
754 |
+
public function happyforms_head( $forms ) {
|
755 |
+
$has_captcha = false;
|
756 |
+
|
757 |
+
foreach ( $forms as $form ) {
|
758 |
+
if ( $form['captcha'] ) {
|
759 |
+
$has_captcha = true;
|
760 |
+
break;
|
761 |
+
}
|
762 |
+
}
|
763 |
+
|
764 |
+
if ( $has_captcha ) : ?>
|
765 |
+
<script src="https://www.google.com/recaptcha/api.js" async defer></script>
|
766 |
+
<?php endif;
|
767 |
+
}
|
768 |
+
|
769 |
}
|
770 |
|
771 |
if ( ! function_exists( 'happyforms_get_form_controller' ) ):
|
inc/classes/class-form-part-library.php
CHANGED
@@ -52,6 +52,8 @@ class HappyForms_Form_Part_Library {
|
|
52 |
public function hook() {
|
53 |
add_action( 'customize_controls_print_footer_scripts', array( $this, 'customize_templates' ) );
|
54 |
add_action( 'customize_controls_enqueue_scripts', array( $this, 'customize_enqueue_scripts' ) );
|
|
|
|
|
55 |
}
|
56 |
|
57 |
/**
|
@@ -118,38 +120,7 @@ class HappyForms_Form_Part_Library {
|
|
118 |
*/
|
119 |
public function customize_templates() {
|
120 |
foreach ( $this->parts as $part ) {
|
121 |
-
|
122 |
-
<script type="text/template" id="<?php echo $part->template_id; ?>">
|
123 |
-
<?php
|
124 |
-
include( happyforms_get_include_folder() . '/templates/customize-form-part-header.php' );
|
125 |
-
$part->customize_template();
|
126 |
-
include( happyforms_get_include_folder() . '/templates/customize-form-part-footer.php' );
|
127 |
-
?>
|
128 |
-
</script>
|
129 |
-
<?php
|
130 |
-
if ( isset( $part->item_customize_template_id ) ) {
|
131 |
-
?>
|
132 |
-
<script type="text/template" id="<?php echo $part->item_customize_template_id; ?>">
|
133 |
-
<?php $part->customize_item_template(); ?>
|
134 |
-
</script>
|
135 |
-
<?php
|
136 |
-
}
|
137 |
-
|
138 |
-
if ( isset( $part->item_frontend_template_id ) ) {
|
139 |
-
?>
|
140 |
-
<script type="text/template" id="<?php echo $part->item_frontend_template_id; ?>">
|
141 |
-
<?php $part->preview_option_template(); ?>
|
142 |
-
</script>
|
143 |
-
<?php
|
144 |
-
}
|
145 |
-
|
146 |
-
if ( isset( $part->preview_confirmation_template_id ) ) {
|
147 |
-
?>
|
148 |
-
<script type="text/template" id="<?php echo $part->preview_confirmation_template_id; ?>">
|
149 |
-
<?php $part->preview_confirmation_template(); ?>
|
150 |
-
</script>
|
151 |
-
<?php
|
152 |
-
}
|
153 |
}
|
154 |
}
|
155 |
|
@@ -243,6 +214,39 @@ class HappyForms_Form_Part_Library {
|
|
243 |
return $validated_data;
|
244 |
}
|
245 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
246 |
}
|
247 |
|
248 |
if ( ! function_exists( 'happyforms_get_part_library' ) ):
|
52 |
public function hook() {
|
53 |
add_action( 'customize_controls_print_footer_scripts', array( $this, 'customize_templates' ) );
|
54 |
add_action( 'customize_controls_enqueue_scripts', array( $this, 'customize_enqueue_scripts' ) );
|
55 |
+
add_filter( 'happyforms_part_class', array( $this, 'html_part_class' ), 10, 3 );
|
56 |
+
add_filter( 'happyforms_part_data_attributes', array( $this, 'html_part_data_attributes' ), 10, 3 );
|
57 |
}
|
58 |
|
59 |
/**
|
120 |
*/
|
121 |
public function customize_templates() {
|
122 |
foreach ( $this->parts as $part ) {
|
123 |
+
$part->customize_templates();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
124 |
}
|
125 |
}
|
126 |
|
214 |
return $validated_data;
|
215 |
}
|
216 |
|
217 |
+
public function html_part_class( $class, $part_data, $form_data ) {
|
218 |
+
$class[] = 'happyforms-form__part';
|
219 |
+
$class[] = 'happyforms-part happyforms-part--' . $part_data['type'];
|
220 |
+
|
221 |
+
if ( isset( $part_data['width'] ) ) {
|
222 |
+
$class[] = 'happyforms-part--width-' . esc_attr( $part_data['width'] );
|
223 |
+
}
|
224 |
+
|
225 |
+
if ( isset( $part_data['label_placement'] ) ) {
|
226 |
+
$class[] = 'happyforms-part--label-' . esc_attr( $part_data['label_placement'] );
|
227 |
+
}
|
228 |
+
|
229 |
+
if ( isset( $part_data['css_class'] ) && ! empty( $part_data['css_class'] ) ) {
|
230 |
+
$class[] = $part_data['css_class'];
|
231 |
+
}
|
232 |
+
|
233 |
+
return $class;
|
234 |
+
}
|
235 |
+
|
236 |
+
public function html_part_data_attributes( $attributes, $part_data, $form_data ) {
|
237 |
+
$attributes['happyforms-type'] = $part_data['type'];
|
238 |
+
|
239 |
+
if ( $part_data['required'] ) {
|
240 |
+
$attributes['happyforms-required'] = '';
|
241 |
+
}
|
242 |
+
|
243 |
+
if ( happyforms_is_preview() ) {
|
244 |
+
$attributes['happyforms-id'] = $part_data['id'];
|
245 |
+
}
|
246 |
+
|
247 |
+
return $attributes;
|
248 |
+
}
|
249 |
+
|
250 |
}
|
251 |
|
252 |
if ( ! function_exists( 'happyforms_get_part_library' ) ):
|
inc/classes/class-form-part.php
CHANGED
@@ -22,7 +22,7 @@ class HappyForms_Form_Part {
|
|
22 |
return $defaults;
|
23 |
}
|
24 |
|
25 |
-
public function
|
26 |
|
27 |
public function customize_enqueue_scripts( $deps = array() ) {}
|
28 |
|
@@ -36,7 +36,7 @@ class HappyForms_Form_Part {
|
|
36 |
return '';
|
37 |
}
|
38 |
|
39 |
-
public function sanitize_value( $part_data ) {}
|
40 |
|
41 |
public function validate_value( $part_data, $value ) {}
|
42 |
|
22 |
return $defaults;
|
23 |
}
|
24 |
|
25 |
+
public function customize_templates() {}
|
26 |
|
27 |
public function customize_enqueue_scripts( $deps = array() ) {}
|
28 |
|
36 |
return '';
|
37 |
}
|
38 |
|
39 |
+
public function sanitize_value( $part_data = array(), $form_data = array() ) {}
|
40 |
|
41 |
public function validate_value( $part_data, $value ) {}
|
42 |
|
inc/classes/class-form-styles.php
CHANGED
@@ -36,868 +36,644 @@ class HappyForms_Form_Styles {
|
|
36 |
* @return void
|
37 |
*/
|
38 |
public function hook() {
|
39 |
-
add_filter( '
|
40 |
-
|
41 |
-
add_action( '
|
42 |
}
|
43 |
|
44 |
-
|
45 |
-
* Get styles by key or all styles as array.
|
46 |
-
*
|
47 |
-
* @param string $key Style key.
|
48 |
-
*
|
49 |
-
* @since 1.0.0.
|
50 |
-
*
|
51 |
-
* @return array
|
52 |
-
*/
|
53 |
-
public function get_styles( $key = false ) {
|
54 |
$fields = array(
|
55 |
-
'
|
56 |
-
'
|
57 |
-
'
|
58 |
-
|
59 |
-
'hf_style_display_form_name' => array(
|
60 |
-
'default' => 1,
|
61 |
-
'type' => 'checkbox',
|
62 |
-
'css' => array(
|
63 |
-
'selector' => array( '.happyforms-form__title' ),
|
64 |
-
'attribute' => array( 'display' ),
|
65 |
-
'value' => array(
|
66 |
-
0 => 'none',
|
67 |
-
1 => 'block'
|
68 |
-
)
|
69 |
-
),
|
70 |
-
'label' => __( 'Display form name', 'happyforms' ),
|
71 |
-
'sanitize' => 'happyforms_sanitize_checkbox'
|
72 |
-
),
|
73 |
-
'hf_style_form_font_size' => array(
|
74 |
-
'default' => 14,
|
75 |
-
'type' => 'range',
|
76 |
-
'min' => 8,
|
77 |
-
'max' => 30,
|
78 |
-
'css' => array(
|
79 |
-
'selector' => array( 'form, .happyforms-part--placeholder p' ),
|
80 |
-
'attribute' => array( 'font-size' ),
|
81 |
-
'tpl' => '{{ value }}px'
|
82 |
-
),
|
83 |
-
'label' => __( 'Font size (px)', 'happyforms' ),
|
84 |
-
'sanitize' => 'intval'
|
85 |
),
|
86 |
-
'
|
87 |
-
'default' => '
|
88 |
-
'
|
89 |
-
'
|
90 |
-
|
91 |
-
'bold' => 'Bold'
|
92 |
-
),
|
93 |
-
'css' => array(
|
94 |
-
'selector' => array( 'form, .happyforms-part--placeholder p' ),
|
95 |
-
'attribute' => array( 'font-weight' )
|
96 |
-
),
|
97 |
-
'label' => __( 'Font weight', 'happyforms' ),
|
98 |
-
'sanitize' => 'sanitize_text_field'
|
99 |
),
|
100 |
-
'
|
101 |
'default' => 'normal',
|
102 |
-
'type' => 'buttonset',
|
103 |
'options' => array(
|
104 |
-
'normal' => 'Normal',
|
105 |
-
'
|
106 |
),
|
107 |
-
'
|
108 |
-
|
109 |
-
'attribute' => array( 'font-style' )
|
110 |
-
),
|
111 |
-
'label' => __( 'Font style', 'happyforms' ),
|
112 |
'sanitize' => 'sanitize_text_field'
|
113 |
),
|
114 |
-
'
|
115 |
'default' => '',
|
116 |
-
'
|
117 |
-
|
118 |
-
'
|
119 |
-
'attribute' => array( 'background-color' )
|
120 |
),
|
121 |
-
'
|
122 |
'sanitize' => 'sanitize_text_field'
|
123 |
),
|
124 |
-
'
|
125 |
-
'default' =>
|
126 |
-
'
|
127 |
-
'min' =>
|
128 |
-
'max' =>
|
129 |
-
'
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
),
|
134 |
-
'label' => __( 'Border width (px)', 'happyforms' ),
|
135 |
-
'sanitize' => 'sanitize_text_field'
|
136 |
),
|
137 |
-
'
|
138 |
-
'default' => '
|
139 |
-
'
|
140 |
-
|
141 |
-
'
|
142 |
-
'attribute' => array( 'border-color' )
|
143 |
),
|
144 |
-
'
|
145 |
'sanitize' => 'sanitize_text_field'
|
146 |
),
|
147 |
-
'
|
148 |
-
'default' =>
|
149 |
-
'type' => 'range',
|
150 |
-
'min' => 0,
|
151 |
-
'max' => 20,
|
152 |
-
'css' => array(
|
153 |
-
'selector' => array( 'form' ),
|
154 |
-
'attribute' => array( 'border-radius' ),
|
155 |
-
'tpl' => '{{ value }}px'
|
156 |
-
),
|
157 |
-
'label' => __( 'Border radius (px)', 'happyforms' ),
|
158 |
-
'sanitize' => 'intval'
|
159 |
-
),
|
160 |
-
'hf_form_parts_title' => array(
|
161 |
-
'type' => 'divider',
|
162 |
-
'label' => __( 'Form parts', 'happyforms' ),
|
163 |
-
),
|
164 |
-
'hf_style_hide_part_titles' => array(
|
165 |
-
'default' => 0,
|
166 |
-
'type' => 'checkbox',
|
167 |
-
'css' => array(
|
168 |
-
'selector' => array( '.happyforms-part__label' ),
|
169 |
-
'attribute' => array( 'display' ),
|
170 |
-
'value' => array(
|
171 |
-
0 => 'inline-block',
|
172 |
-
1 => 'none'
|
173 |
-
)
|
174 |
-
),
|
175 |
-
'label' => __( 'Hide part titles', 'happyforms' ),
|
176 |
-
'sanitize' => 'happyforms_sanitize_checkbox'
|
177 |
-
),
|
178 |
-
'hf_style_part_label_font_weight' => array(
|
179 |
-
'default' => 'bold',
|
180 |
-
'type' => 'buttonset',
|
181 |
'options' => array(
|
182 |
-
'
|
183 |
-
'
|
184 |
-
),
|
185 |
-
'css' => array(
|
186 |
-
'selector' => array( '.happyforms-part .happyforms-part__label .label' ),
|
187 |
-
'attribute' => array( 'font-weight' )
|
188 |
),
|
189 |
-
'
|
190 |
'sanitize' => 'sanitize_text_field'
|
191 |
),
|
192 |
-
'
|
193 |
-
'default' => '
|
194 |
-
'type' => 'buttonset',
|
195 |
'options' => array(
|
196 |
-
'
|
197 |
-
'
|
|
|
198 |
),
|
199 |
-
'
|
200 |
-
'selector' => array( '.happyforms-part .happyforms-part__label .label' ),
|
201 |
-
'attribute' => array( 'font-style' )
|
202 |
-
),
|
203 |
-
'label' => __( 'Title font style', 'happyforms' ),
|
204 |
'sanitize' => 'sanitize_text_field'
|
205 |
),
|
206 |
-
'
|
207 |
-
'default' => '
|
208 |
-
'
|
209 |
-
|
210 |
-
|
211 |
-
|
212 |
-
'selector' => array( '.happyforms-part__description' ),
|
213 |
-
'attribute' => array( 'font-size' ),
|
214 |
-
'tpl' => '{{ value }}px'
|
215 |
),
|
216 |
-
'
|
217 |
'sanitize' => 'sanitize_text_field'
|
218 |
),
|
219 |
-
'
|
220 |
-
'default' => '
|
221 |
-
'type' => 'buttonset',
|
222 |
'options' => array(
|
223 |
-
'
|
224 |
-
'
|
225 |
-
|
226 |
-
'css' => array(
|
227 |
-
'selector' => array( '.happyforms-part .happyforms-part__description' ),
|
228 |
-
'attribute' => array( 'font-weight' )
|
229 |
),
|
230 |
-
'
|
231 |
'sanitize' => 'sanitize_text_field'
|
232 |
),
|
233 |
-
'
|
234 |
-
'default' => '
|
235 |
-
'type' => 'buttonset',
|
236 |
'options' => array(
|
237 |
-
'
|
238 |
-
'
|
239 |
-
),
|
240 |
-
'css' => array(
|
241 |
-
'selector' => array( '.happyforms-part .happyforms-part__description' ),
|
242 |
-
'attribute' => array( 'font-style' )
|
243 |
),
|
244 |
-
'
|
245 |
-
'
|
246 |
),
|
247 |
-
'
|
248 |
-
'default' =>
|
249 |
-
'
|
250 |
-
'
|
251 |
-
'
|
252 |
-
'css' => array(
|
253 |
-
'selector' => array( '.happyforms-part input[type=text], .happyforms-part input[type=email], .happyforms-part input[type=tel], .happyforms-part input[type=number], .happyforms-part input[type=range], .happyforms -part textarea, .happyforms-part select, .happyforms-part__el--address--results > div, .happyforms-part__el--address--results:after' ),
|
254 |
-
'attribute' => array( 'border-width' ),
|
255 |
-
'tpl' => '{{ value }}px'
|
256 |
-
),
|
257 |
-
'label' => __( 'Border width (px)', 'happyforms' ),
|
258 |
-
'sanitize' => 'sanitize_text_field'
|
259 |
),
|
260 |
-
'
|
261 |
-
'default' =>
|
262 |
-
'
|
263 |
-
'
|
264 |
-
|
265 |
-
|
266 |
-
|
267 |
-
'
|
268 |
'sanitize' => 'sanitize_text_field'
|
269 |
),
|
270 |
-
'
|
271 |
-
'default' => '
|
272 |
-
'
|
273 |
-
|
274 |
-
'
|
275 |
-
'attribute' => array( 'border-color' )
|
276 |
),
|
277 |
-
'
|
278 |
'sanitize' => 'sanitize_text_field'
|
279 |
),
|
280 |
-
'
|
281 |
-
'default' =>
|
282 |
-
'
|
283 |
-
'min' =>
|
284 |
'max' => 20,
|
285 |
-
'
|
286 |
-
|
287 |
-
|
288 |
-
'tpl' => '{{ value }}px'
|
289 |
-
),
|
290 |
-
'label' => __( 'Border radius (px)', 'happyforms' ),
|
291 |
-
'sanitize' => 'intval'
|
292 |
-
),
|
293 |
-
'hf_style_part_bg' => array(
|
294 |
-
'default' => '#ffffff',
|
295 |
-
'type' => 'color',
|
296 |
-
'css' => array(
|
297 |
-
'selector' => array( '.happyforms-part input, .happyforms-part textarea, .happyforms-part__el--address--results > div, .happyforms-part__el--address--results:after' ),
|
298 |
-
'attribute' => array( 'background-color' )
|
299 |
-
),
|
300 |
-
'label' => __( 'Background color', 'happyforms' ),
|
301 |
'sanitize' => 'sanitize_text_field'
|
302 |
),
|
303 |
-
'
|
304 |
-
'default' =>
|
305 |
-
'
|
306 |
-
'
|
307 |
-
|
308 |
-
|
309 |
-
|
310 |
-
'
|
311 |
'sanitize' => 'sanitize_text_field'
|
312 |
),
|
313 |
-
'
|
314 |
-
'default' => '
|
315 |
-
'type' => 'buttonset',
|
316 |
'options' => array(
|
317 |
-
'
|
318 |
-
'
|
319 |
-
),
|
320 |
-
'css' => array(
|
321 |
-
'selector' => array( '.happyforms-part input, .happyforms-part textarea, .happyforms-part__el--address--results > div' ),
|
322 |
-
'attribute' => array( 'transition-property' )
|
323 |
),
|
324 |
-
'
|
325 |
'sanitize' => 'sanitize_text_field'
|
326 |
),
|
327 |
-
'
|
328 |
-
'default' => '
|
329 |
-
'
|
330 |
-
|
331 |
-
'
|
332 |
-
'
|
333 |
),
|
334 |
-
'
|
335 |
'sanitize' => 'sanitize_text_field'
|
336 |
),
|
337 |
-
'
|
338 |
-
'default' => '
|
339 |
-
'type' => 'buttonset',
|
340 |
'options' => array(
|
341 |
-
'
|
342 |
-
'' => '
|
343 |
),
|
344 |
-
'
|
345 |
-
'selector' => array( '.happyforms-part input, .happyforms-part textarea' ),
|
346 |
-
'attribute' => array( 'transition-property' )
|
347 |
-
),
|
348 |
-
'label' => __( 'Smooth background change (transition)', 'happyforms' ),
|
349 |
'sanitize' => 'sanitize_text_field'
|
350 |
),
|
351 |
-
'
|
352 |
-
'default' =>
|
353 |
-
'
|
354 |
-
'min' =>
|
355 |
'max' => 40,
|
356 |
-
'
|
357 |
-
|
358 |
-
|
359 |
-
'tpl' => '{{ value }}px'
|
360 |
-
),
|
361 |
-
'label' => __( 'Label font size (px)', 'happyforms' ),
|
362 |
'sanitize' => 'sanitize_text_field'
|
363 |
),
|
364 |
-
'
|
365 |
-
'default' => '
|
366 |
-
'type' => 'color',
|
367 |
-
'css' => array(
|
368 |
-
'selector' => array( 'input::placeholder, textarea::placeholder' ),
|
369 |
-
'attribute' => array( 'color' )
|
370 |
-
),
|
371 |
-
'label' => __( 'Placeholder color', 'happyforms' ),
|
372 |
-
'sanitize' => 'sanitize_text_field'
|
373 |
-
),
|
374 |
-
'hf_style_part_placeholder_font_weight' => array(
|
375 |
-
'default' => 'normal',
|
376 |
-
'type' => 'buttonset',
|
377 |
'options' => array(
|
378 |
-
'
|
379 |
-
'bold' => 'Bold'
|
380 |
-
),
|
381 |
-
'css' => array(
|
382 |
-
'selector' => array( 'input::placeholder, textarea::placeholder' ),
|
383 |
-
'attribute' => array( 'font-weight' )
|
384 |
),
|
385 |
-
'
|
386 |
'sanitize' => 'sanitize_text_field'
|
387 |
),
|
388 |
-
'
|
389 |
-
'default' => '
|
390 |
-
'type' => 'buttonset',
|
391 |
'options' => array(
|
392 |
-
'
|
393 |
-
'
|
|
|
394 |
),
|
395 |
-
'
|
396 |
-
'selector' => array( 'input::placeholder, textarea::placeholder' ),
|
397 |
-
'attribute' => array( 'font-style' )
|
398 |
-
),
|
399 |
-
'label' => __( 'Placeholder font style', 'happyforms' ),
|
400 |
'sanitize' => 'sanitize_text_field'
|
401 |
),
|
402 |
-
'
|
403 |
-
'default' => '
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
404 |
'type' => 'text',
|
405 |
'label' => __( 'Required text', 'happyforms' ),
|
406 |
-
'
|
407 |
),
|
408 |
-
|
409 |
-
'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
410 |
'type' => 'color',
|
411 |
-
'
|
412 |
-
|
413 |
-
'attribute' => array( 'color' )
|
414 |
-
),
|
415 |
-
'label' => __( 'Required text color', 'happyforms' ),
|
416 |
-
'sanitize' => 'sanitize_text_field'
|
417 |
),
|
418 |
-
|
419 |
-
'default' => '#d3422c',
|
420 |
'type' => 'color',
|
421 |
-
'
|
422 |
-
|
423 |
-
'attribute' => array( 'color', 'border-color' )
|
424 |
-
),
|
425 |
-
'label' => __( 'Error color', 'happyforms' ),
|
426 |
-
'sanitize' => 'sanitize_text_field'
|
427 |
),
|
428 |
-
|
429 |
-
'default' => '#39b54a',
|
430 |
'type' => 'color',
|
431 |
-
'
|
432 |
-
|
433 |
-
'attribute' => array( 'color' )
|
434 |
-
),
|
435 |
-
'label' => __( 'Success color', 'happyforms' ),
|
436 |
-
'sanitize' => 'sanitize_text_field'
|
437 |
),
|
438 |
-
|
439 |
'type' => 'divider',
|
440 |
-
'label' => __( '
|
441 |
),
|
442 |
-
|
443 |
-
'
|
444 |
-
'
|
445 |
-
'
|
446 |
-
'css' => array(
|
447 |
-
'selector' => array( '.happyforms-part--rating:not(:hover) input:first-child:checked~label,
|
448 |
-
.happyforms-part--rating input:hover+label~label:not(:hover),
|
449 |
-
.happyforms-part--rating:hover input:checked+label:hover~label,
|
450 |
-
.happyforms-part--rating:not(:hover) input:checked+label~label' ),
|
451 |
-
'attribute' => array( 'color' )
|
452 |
-
),
|
453 |
-
'label' => __( 'Default star color', 'happyforms' ),
|
454 |
-
'sanitize' => 'sanitize_text_field'
|
455 |
),
|
456 |
-
|
457 |
-
'
|
458 |
-
'
|
459 |
-
'
|
460 |
-
'force' => true,
|
461 |
-
'css' => array(
|
462 |
-
'selector' => array( '.happyforms-part--rating .happyforms-star__label' ),
|
463 |
-
'attribute' => array( 'color' )
|
464 |
-
),
|
465 |
-
'sanitize' => 'sanitize_text_field'
|
466 |
),
|
467 |
-
|
468 |
'type' => 'divider',
|
469 |
-
'label' => __( '
|
470 |
),
|
471 |
-
|
472 |
-
'default' => 'left',
|
473 |
'type' => 'buttonset',
|
474 |
-
'
|
475 |
-
|
476 |
-
'center' => 'Center',
|
477 |
-
'right' => 'Right'
|
478 |
-
),
|
479 |
-
'css' => array(
|
480 |
-
'selector' => array( '.happyforms-part--submit' ),
|
481 |
-
'attribute' => array( 'text-align' )
|
482 |
-
),
|
483 |
-
'label' => __( 'Alignment', 'happyforms' ),
|
484 |
-
'sanitize' => 'sanitize_text_field'
|
485 |
),
|
486 |
-
|
487 |
-
'default' => 'auto',
|
488 |
'type' => 'buttonset',
|
489 |
-
'
|
490 |
-
|
491 |
-
'100%' => 'Full width'
|
492 |
-
),
|
493 |
-
'css' => array(
|
494 |
-
'selector' => array( '.happyforms-part--submit, .happyforms-part--submit input, .happyforms-part--submit button' ),
|
495 |
-
'attribute' => array( 'width' )
|
496 |
-
),
|
497 |
-
'label' => __( 'Width', 'happyforms' ),
|
498 |
-
'sanitize' => 'sanitize_text_field'
|
499 |
),
|
500 |
-
|
501 |
-
'default' => 'normal',
|
502 |
'type' => 'buttonset',
|
503 |
-
'
|
504 |
-
|
505 |
-
'bold' => 'Bold'
|
506 |
-
),
|
507 |
-
'css' => array(
|
508 |
-
'selector' => array( '.happyforms-button--submit' ),
|
509 |
-
'attribute' => array( 'font-weight' )
|
510 |
-
),
|
511 |
-
'label' => __( 'Font weight', 'happyforms' ),
|
512 |
-
'sanitize' => 'sanitize_text_field'
|
513 |
),
|
514 |
-
|
515 |
-
'default' => 'normal',
|
516 |
'type' => 'buttonset',
|
517 |
-
'
|
518 |
-
|
519 |
-
'italic' => 'Italic'
|
520 |
-
),
|
521 |
-
'css' => array(
|
522 |
-
'selector' => array( '.happyforms-button--submit' ),
|
523 |
-
'attribute' => array( 'font-style' )
|
524 |
-
),
|
525 |
-
'label' => __( 'Font style', 'happyforms' ),
|
526 |
-
'sanitize' => 'sanitize_text_field'
|
527 |
),
|
528 |
-
|
529 |
-
'
|
530 |
-
'
|
531 |
-
'
|
532 |
-
'max' => 40,
|
533 |
-
'css' => array(
|
534 |
-
'selector' => array( '.happyforms-button--submit' ),
|
535 |
-
'attribute' => array( 'font-size' ),
|
536 |
-
'tpl' => '{{ value }}px'
|
537 |
-
),
|
538 |
-
'label' => __( 'Font size (px)', 'happyforms' ),
|
539 |
-
'sanitize' => 'sanitize_text_field'
|
540 |
),
|
541 |
-
|
542 |
-
'
|
|
|
|
|
|
|
543 |
'type' => 'color',
|
544 |
-
'
|
545 |
-
|
546 |
-
'attribute' => array( 'color' )
|
547 |
-
),
|
548 |
-
'label' => __( 'Text color', 'happyforms' ),
|
549 |
-
'sanitize' => 'sanitize_text_field'
|
550 |
),
|
551 |
-
|
552 |
-
'default' => '#000000',
|
553 |
'type' => 'color',
|
554 |
-
'
|
555 |
-
|
556 |
-
'attribute' => array( 'background-color' )
|
557 |
-
),
|
558 |
-
'label' => __( 'Background color', 'happyforms' ),
|
559 |
-
'sanitize' => 'sanitize_text_field'
|
560 |
),
|
561 |
-
|
562 |
-
'default' => '#555555',
|
563 |
'type' => 'color',
|
564 |
-
'
|
565 |
-
|
566 |
-
|
567 |
-
|
568 |
-
'
|
569 |
-
'
|
|
|
570 |
),
|
571 |
-
|
572 |
-
'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
573 |
'type' => 'buttonset',
|
574 |
-
'
|
575 |
-
|
576 |
-
'background-color' => 'Fade'
|
577 |
-
),
|
578 |
-
'css' => array(
|
579 |
-
'selector' => array( '.happyforms-button--submit' ),
|
580 |
-
'attribute' => array( 'transition-property' )
|
581 |
-
),
|
582 |
-
'label' => __( 'Smooth background change (transition)', 'happyforms' ),
|
583 |
-
'sanitize' => 'sanitize_text_field'
|
584 |
),
|
585 |
-
|
586 |
-
'
|
|
|
|
|
|
|
|
|
587 |
'type' => 'range',
|
588 |
-
'
|
589 |
-
'
|
590 |
-
'css' => array(
|
591 |
-
'selector' => array( '.happyforms-button--submit' ),
|
592 |
-
'attribute' => array( 'border-width' ),
|
593 |
-
'tpl' => '{{ value }}px'
|
594 |
-
),
|
595 |
-
'label' => __( 'Border width (px)', 'happyforms' ),
|
596 |
-
'sanitize' => 'intval'
|
597 |
),
|
598 |
-
|
599 |
-
'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
600 |
'type' => 'color',
|
601 |
-
'
|
602 |
-
|
603 |
-
'attribute' => array( 'border-color' )
|
604 |
-
),
|
605 |
-
'label' => __( 'Border color', 'happyforms' ),
|
606 |
-
'sanitize' => 'sanitize_text_field'
|
607 |
),
|
608 |
-
|
609 |
-
'default' => '#555555',
|
610 |
'type' => 'color',
|
611 |
-
'
|
612 |
-
|
613 |
-
'attribute' => array( 'border-color' )
|
614 |
-
),
|
615 |
-
'label' => __( 'Border color on hover', 'happyforms' ),
|
616 |
-
'sanitize' => 'sanitize_text_field'
|
617 |
),
|
618 |
-
|
619 |
-
'
|
620 |
-
'
|
621 |
-
'
|
622 |
-
'max' => 20,
|
623 |
-
'css' => array(
|
624 |
-
'selector' => array( '.happyforms-button--submit' ),
|
625 |
-
'attribute' => array( 'border-radius' ),
|
626 |
-
'tpl' => '{{ value }}px'
|
627 |
-
),
|
628 |
-
'label' => __( 'Border radius (px)', 'happyforms' ),
|
629 |
-
'sanitize' => 'intval'
|
630 |
),
|
631 |
-
|
632 |
-
'
|
633 |
-
'
|
634 |
-
'
|
635 |
-
'max' => 20,
|
636 |
-
'css' => array(
|
637 |
-
'selector' => array( '.happyforms-button--submit:hover' ),
|
638 |
-
'attribute' => array( 'border-radius' ),
|
639 |
-
'tpl' => '{{ value }}px'
|
640 |
-
),
|
641 |
-
'label' => __( 'Border radius on hover (px)', 'happyforms' ),
|
642 |
-
'sanitize' => 'intval'
|
643 |
),
|
644 |
-
|
645 |
-
'
|
646 |
-
'
|
647 |
-
'
|
648 |
-
|
|
|
|
|
|
|
|
|
649 |
),
|
650 |
-
|
651 |
'type' => 'divider',
|
652 |
-
'label' => __( '
|
653 |
),
|
654 |
-
|
655 |
-
'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
656 |
'type' => 'range',
|
657 |
-
'
|
658 |
-
'
|
659 |
-
'css' => array(
|
660 |
-
'selector' => array( '.happyforms-message-notice.success p, .happyforms-message-notice.error-submission p' ),
|
661 |
-
'attribute' => array( 'font-size' ),
|
662 |
-
'tpl' => '{{ value }}px'
|
663 |
-
),
|
664 |
-
'label' => __( 'Font size (px)', 'happyforms' ),
|
665 |
-
'sanitize' => 'intval'
|
666 |
),
|
667 |
-
|
668 |
-
'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
669 |
'type' => 'color',
|
670 |
-
'
|
671 |
-
|
672 |
-
'attribute' => array( 'color' )
|
673 |
-
),
|
674 |
-
'label' => __( 'Text color', 'happyforms' ),
|
675 |
-
'sanitize' => 'sanitize_text_field'
|
676 |
),
|
677 |
-
|
678 |
-
'default' => '#ffffff',
|
679 |
'type' => 'color',
|
680 |
-
'
|
681 |
-
|
682 |
-
'attribute' => array( 'background-color' )
|
683 |
-
),
|
684 |
-
'label' => __( 'Background color', 'happyforms' ),
|
685 |
-
'sanitize' => 'sanitize_text_field'
|
686 |
),
|
687 |
-
|
688 |
-
'
|
689 |
-
'
|
690 |
-
'
|
691 |
-
'max' => 10,
|
692 |
-
'css' => array(
|
693 |
-
'selector' => array( '.happyforms-message-notice' ),
|
694 |
-
'attribute' => array( 'border-radius' ),
|
695 |
-
'tpl' => '{{ value }}px'
|
696 |
-
),
|
697 |
-
'label' => __( 'Border width (px)', 'happyforms' ),
|
698 |
-
'sanitize' => 'intval'
|
699 |
),
|
700 |
-
|
701 |
-
'default' => '#000000',
|
702 |
'type' => 'color',
|
703 |
-
'
|
704 |
-
|
705 |
-
'attribute' => array( 'border-color' )
|
706 |
-
),
|
707 |
-
'label' => __( 'Border color', 'happyforms' ),
|
708 |
-
'sanitize' => 'sanitize_text_field'
|
709 |
),
|
710 |
-
|
711 |
-
'
|
712 |
-
'
|
713 |
-
'
|
714 |
-
|
715 |
-
|
716 |
-
|
717 |
-
|
718 |
-
|
719 |
-
|
720 |
-
|
721 |
-
'
|
|
|
|
|
722 |
),
|
723 |
);
|
724 |
|
725 |
-
|
726 |
-
return $fields[$key];
|
727 |
-
} else {
|
728 |
-
return $fields;
|
729 |
-
}
|
730 |
}
|
731 |
|
732 |
-
|
733 |
-
|
734 |
-
*
|
735 |
-
* @hooked filter happyforms_fields
|
736 |
-
*
|
737 |
-
* @since 1.0.0.
|
738 |
-
*
|
739 |
-
* @param array $fields Current form style fields.
|
740 |
-
*
|
741 |
-
* @return array
|
742 |
-
*/
|
743 |
-
public function add_fields( $fields ) {
|
744 |
-
$styles = $this->get_styles();
|
745 |
-
|
746 |
-
foreach ( $styles as $key => $style ) {
|
747 |
-
if ( isset( $style['default'] ) ) {
|
748 |
-
$fields['meta'][$key] = array(
|
749 |
-
'default' => $style['default'],
|
750 |
-
'sanitize' => $style['sanitize']
|
751 |
-
);
|
752 |
-
}
|
753 |
-
}
|
754 |
-
|
755 |
-
return $fields;
|
756 |
}
|
757 |
|
758 |
-
|
759 |
-
|
760 |
-
*
|
761 |
-
* @since 1.0.0.
|
762 |
-
*
|
763 |
-
* @return array
|
764 |
-
*/
|
765 |
-
public function get_defaults() {
|
766 |
-
$defaults = array();
|
767 |
-
$fields = $this->get_styles();
|
768 |
-
|
769 |
-
foreach ( $fields as $field_name => $field_settings ) {
|
770 |
-
if ( isset( $field_settings['default'] ) ) {
|
771 |
-
$defaults[$field_name] = $field_settings['default'];
|
772 |
-
}
|
773 |
-
}
|
774 |
-
|
775 |
-
return $defaults;
|
776 |
}
|
777 |
|
778 |
-
|
779 |
-
|
780 |
-
|
781 |
-
* @param array $form Form data.
|
782 |
-
*
|
783 |
-
* @since 1.0.0.
|
784 |
-
*
|
785 |
-
* @param array $form Current form data.
|
786 |
-
*
|
787 |
-
* @return array
|
788 |
-
*/
|
789 |
-
public function parse_styles( $form ) {
|
790 |
-
$all_styles = $this->get_styles();
|
791 |
-
$styles = array();
|
792 |
-
|
793 |
-
foreach ( $all_styles as $key => $style ) {
|
794 |
-
if ( !isset( $form[$key] ) ) {
|
795 |
-
continue;
|
796 |
-
}
|
797 |
-
|
798 |
-
if ( !isset( $style['css'] ) ) {
|
799 |
-
continue;
|
800 |
-
}
|
801 |
-
|
802 |
-
if ( $form[$key] === $style['default'] && !isset( $style['force'] ) ) {
|
803 |
-
continue;
|
804 |
-
}
|
805 |
-
|
806 |
-
$attribute = $style['css']['attribute'];
|
807 |
-
|
808 |
-
if ( is_array( $attribute ) ) {
|
809 |
-
$value = ( isset( $style['css']['value'] ) ) ? $style['css']['value'] : '';
|
810 |
-
|
811 |
-
foreach( $attribute as $attr_key => $attr ) {
|
812 |
-
$data = array();
|
813 |
-
$data[$attr] = array();
|
814 |
-
|
815 |
-
if ( isset( $value ) && is_array( $value ) ) {
|
816 |
-
$value = $value[intval( $form[$key] )];
|
817 |
-
} else {
|
818 |
-
$value = $form[$key];
|
819 |
-
}
|
820 |
-
|
821 |
-
if ( !empty( $value ) ) {
|
822 |
-
if ( isset( $style['css']['tpl'] ) ) {
|
823 |
-
$value = str_replace( '{{ value }}', $value, $style['css']['tpl'] );
|
824 |
-
}
|
825 |
-
|
826 |
-
$data[$attr] = $value;
|
827 |
-
|
828 |
-
$selector = $style['css']['selector'][$attr_key];
|
829 |
|
830 |
-
|
831 |
-
|
832 |
-
|
833 |
-
} else {
|
834 |
-
if ( $attr_key > 0 ) {
|
835 |
-
$styles[$selector[$attr_key]][$attr] = $value;
|
836 |
-
} else {
|
837 |
-
$styles[$selector][$attr] = $value;
|
838 |
-
}
|
839 |
-
}
|
840 |
-
}
|
841 |
-
}
|
842 |
-
}
|
843 |
}
|
844 |
}
|
845 |
|
846 |
-
return $
|
847 |
}
|
848 |
|
849 |
-
|
850 |
-
|
851 |
-
|
852 |
-
* @since 1.0.0.
|
853 |
-
*
|
854 |
-
* @param array $form Current form data.
|
855 |
-
*
|
856 |
-
* @return string
|
857 |
-
*/
|
858 |
-
public function print_css( $form ) {
|
859 |
-
$styles = $this->parse_styles( $form );
|
860 |
|
861 |
-
|
862 |
-
|
863 |
-
$output = '<!-- begin HappyForms CSS --> <style type="text/css">';
|
864 |
-
|
865 |
-
foreach ( $styles as $selector => $style ) {
|
866 |
-
$selector = $id_selector . ' ' . $selector;
|
867 |
-
|
868 |
-
$selector = str_replace( ',', ', ' . $id_selector, $selector );
|
869 |
-
|
870 |
-
$output .= ' ' . $selector . ' { ';
|
871 |
-
|
872 |
-
foreach ( $style as $attr => $value ) {
|
873 |
-
$output .= $attr . ': ' . $value . '; ';
|
874 |
-
}
|
875 |
-
|
876 |
-
$output .= '}';
|
877 |
-
}
|
878 |
-
|
879 |
-
$output .= '</style><!-- end HappyForms CSS -->';
|
880 |
-
|
881 |
-
echo $output;
|
882 |
}
|
883 |
|
884 |
/**
|
885 |
-
*
|
886 |
*
|
887 |
-
* @hooked
|
888 |
*
|
889 |
-
* @since 1.
|
890 |
*
|
891 |
-
* @
|
|
|
|
|
892 |
*/
|
893 |
-
public function
|
894 |
-
$
|
895 |
-
|
896 |
-
$css = $this->print_css( $form );
|
897 |
|
898 |
-
|
899 |
-
|
900 |
-
wp_die();
|
901 |
}
|
902 |
|
903 |
}
|
36 |
* @return void
|
37 |
*/
|
38 |
public function hook() {
|
39 |
+
add_filter( 'happyforms_meta_fields', array( $this, 'meta_fields' ) );
|
40 |
+
add_filter( 'happyforms_form_class', array( $this, 'form_html_class' ), 10, 2 );
|
41 |
+
add_action( 'happyforms_head', array( $this, 'form_html_styles' ), 10, 2 );
|
42 |
}
|
43 |
|
44 |
+
public function get_fields() {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
45 |
$fields = array(
|
46 |
+
'hf_style_required_text' => array(
|
47 |
+
'default' => '*',
|
48 |
+
'sanitize' => 'sanitize_text_field',
|
49 |
+
'target' => '',
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
50 |
),
|
51 |
+
'disable_submit_until_valid' => array(
|
52 |
+
'default' => '',
|
53 |
+
'sanitize' => 'sanitize_text_field',
|
54 |
+
'target' => 'form_class',
|
55 |
+
'value' => 'happyforms-form--disable-until-valid',
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
56 |
),
|
57 |
+
'form_font_weight' => array(
|
58 |
'default' => 'normal',
|
|
|
59 |
'options' => array(
|
60 |
+
'normal' => __( 'Normal', 'happyforms' ),
|
61 |
+
'bold' => __( 'Bold', 'happyforms' )
|
62 |
),
|
63 |
+
'target' => 'css_var',
|
64 |
+
'variable' => '--happyforms-form-font-weight',
|
|
|
|
|
|
|
65 |
'sanitize' => 'sanitize_text_field'
|
66 |
),
|
67 |
+
'form_title' => array(
|
68 |
'default' => '',
|
69 |
+
'options' => array(
|
70 |
+
'' => __( 'Show', 'happyforms' ),
|
71 |
+
'happyforms-form--hide-title' => __( 'Hide', 'happyforms' )
|
|
|
72 |
),
|
73 |
+
'target' => 'form_class',
|
74 |
'sanitize' => 'sanitize_text_field'
|
75 |
),
|
76 |
+
'form_title_font_size' => array(
|
77 |
+
'default' => 32,
|
78 |
+
'unit' => 'px',
|
79 |
+
'min' => 16,
|
80 |
+
'max' => 52,
|
81 |
+
'step' => 1,
|
82 |
+
'sanitize' => 'intval',
|
83 |
+
'target' => 'css_var',
|
84 |
+
'variable' => '--happyforms-form-title-font-size'
|
|
|
|
|
|
|
85 |
),
|
86 |
+
'part_border' => array(
|
87 |
+
'default' => '',
|
88 |
+
'options' => array(
|
89 |
+
'' => __( 'Show', 'happyforms' ),
|
90 |
+
'happyforms-form--part-border-off' => __( 'Hide', 'happyforms' )
|
|
|
91 |
),
|
92 |
+
'target' => 'form_class',
|
93 |
'sanitize' => 'sanitize_text_field'
|
94 |
),
|
95 |
+
'part_border_location' => array(
|
96 |
+
'default' => '',
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
97 |
'options' => array(
|
98 |
+
'' => __( 'All sides', 'happyforms' ),
|
99 |
+
'happyforms-form--part-borders-bottom-only' => __( 'Bottom only', 'happyforms' )
|
|
|
|
|
|
|
|
|
100 |
),
|
101 |
+
'target' => 'form_class',
|
102 |
'sanitize' => 'sanitize_text_field'
|
103 |
),
|
104 |
+
'part_border_radius' => array(
|
105 |
+
'default' => '',
|
|
|
106 |
'options' => array(
|
107 |
+
'happyforms-form--part-border-radius-square' => __( 'Square', 'happyforms' ),
|
108 |
+
'' => __( 'Round', 'happyforms' ),
|
109 |
+
'happyforms-form--part-border-radius-pill' => __( 'Pill', 'happyforms' )
|
110 |
),
|
111 |
+
'target' => 'form_class',
|
|
|
|
|
|
|
|
|
112 |
'sanitize' => 'sanitize_text_field'
|
113 |
),
|
114 |
+
'part_outer_padding' => array(
|
115 |
+
'default' => '',
|
116 |
+
'options' => array(
|
117 |
+
'happyforms-form--part-outer-padding-narrow' => __( 'Narrow', 'happyforms' ),
|
118 |
+
'' => __( 'Default', 'happyforms' ),
|
119 |
+
'happyforms-form--part-outer-padding-wide' => __( 'Wide', 'happyforms' )
|
|
|
|
|
|
|
120 |
),
|
121 |
+
'target' => 'form_class',
|
122 |
'sanitize' => 'sanitize_text_field'
|
123 |
),
|
124 |
+
'part_inner_padding' => array(
|
125 |
+
'default' => '',
|
|
|
126 |
'options' => array(
|
127 |
+
'happyforms-form--part-inner-padding-narrow' => __( 'Narrow', 'happyforms' ),
|
128 |
+
'' => __( 'Default', 'happyforms' ),
|
129 |
+
'happyforms-form--part-inner-padding-wide' => __( 'Wide', 'happyforms' )
|
|
|
|
|
|
|
130 |
),
|
131 |
+
'target' => 'form_class',
|
132 |
'sanitize' => 'sanitize_text_field'
|
133 |
),
|
134 |
+
'part_hide_titles' => array(
|
135 |
+
'default' => '',
|
|
|
136 |
'options' => array(
|
137 |
+
'' => __( 'Show', 'happyforms' ),
|
138 |
+
'happyforms-form--part-hide-labels' => __( 'Hide', 'happyforms' )
|
|
|
|
|
|
|
|
|
139 |
),
|
140 |
+
'sanitize' => 'sanitize_text_field',
|
141 |
+
'target' => 'form_class',
|
142 |
),
|
143 |
+
'part_toggle_placeholders' => array(
|
144 |
+
'default' => '',
|
145 |
+
'value' => 'happyforms-form--part-placeholder-toggle',
|
146 |
+
'sanitize' => 'sanitize_text_field',
|
147 |
+
'target' => 'form_class',
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
148 |
),
|
149 |
+
'part_title_font_size' => array(
|
150 |
+
'default' => 16,
|
151 |
+
'unit' => 'px',
|
152 |
+
'min' => 13,
|
153 |
+
'max' => 30,
|
154 |
+
'step' => 1,
|
155 |
+
'target' => 'css_var',
|
156 |
+
'variable' => '--happyforms-part-title-font-size',
|
157 |
'sanitize' => 'sanitize_text_field'
|
158 |
),
|
159 |
+
'part_title_font_weight' => array(
|
160 |
+
'default' => '',
|
161 |
+
'options' => array(
|
162 |
+
'happyforms-form--part-title-font-weight-normal' => __( 'Normal', 'happyforms' ),
|
163 |
+
'' => __( 'Bold', 'happyforms' )
|
|
|
164 |
),
|
165 |
+
'target' => 'form_class',
|
166 |
'sanitize' => 'sanitize_text_field'
|
167 |
),
|
168 |
+
'part_description_font_size' => array(
|
169 |
+
'default' => 14,
|
170 |
+
'unit' => 'px',
|
171 |
+
'min' => 10,
|
172 |
'max' => 20,
|
173 |
+
'step' => 1,
|
174 |
+
'target' => 'css_var',
|
175 |
+
'variable' => '--happyforms-part-description-font-size',
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
176 |
'sanitize' => 'sanitize_text_field'
|
177 |
),
|
178 |
+
'part_value_font_size' => array(
|
179 |
+
'default' => 16,
|
180 |
+
'unit' => 'px',
|
181 |
+
'min' => 12,
|
182 |
+
'max' => 24,
|
183 |
+
'step' => 1,
|
184 |
+
'target' => 'css_var',
|
185 |
+
'variable' => '--happyforms-part-value-font-size',
|
186 |
'sanitize' => 'sanitize_text_field'
|
187 |
),
|
188 |
+
'submit_button_border' => array(
|
189 |
+
'default' => '',
|
|
|
190 |
'options' => array(
|
191 |
+
'' => __( 'Show', 'happyforms' ),
|
192 |
+
'happyforms-form--submit-button-border-hide' => __( 'Hide', 'happyforms' )
|
|
|
|
|
|
|
|
|
193 |
),
|
194 |
+
'target' => 'form_class',
|
195 |
'sanitize' => 'sanitize_text_field'
|
196 |
),
|
197 |
+
'submit_button_border_radius' => array(
|
198 |
+
'default' => '',
|
199 |
+
'options' => array(
|
200 |
+
'happyforms-form--submit-button-border-radius-square' => __( 'Square', 'happyforms' ),
|
201 |
+
'' => __( 'Round', 'happyforms' ),
|
202 |
+
'happyforms-form--submit-button-border-radius-pill' => __( 'Pill', 'happyforms' )
|
203 |
),
|
204 |
+
'target' => 'form_class',
|
205 |
'sanitize' => 'sanitize_text_field'
|
206 |
),
|
207 |
+
'submit_button_width' => array(
|
208 |
+
'default' => '',
|
|
|
209 |
'options' => array(
|
210 |
+
'' => __( 'Default', 'happyforms' ),
|
211 |
+
'happyforms-form--submit-button-fullwidth' => __( 'Full width', 'happyforms' )
|
212 |
),
|
213 |
+
'target' => 'form_class',
|
|
|
|
|
|
|
|
|
214 |
'sanitize' => 'sanitize_text_field'
|
215 |
),
|
216 |
+
'submit_button_font_size' => array(
|
217 |
+
'default' => 18,
|
218 |
+
'unit' => 'px',
|
219 |
+
'min' => 14,
|
220 |
'max' => 40,
|
221 |
+
'step' => 1,
|
222 |
+
'target' => 'css_var',
|
223 |
+
'variable' => '--happyforms-submit-button-font-size',
|
|
|
|
|
|
|
224 |
'sanitize' => 'sanitize_text_field'
|
225 |
),
|
226 |
+
'submit_button_font_weight' => array(
|
227 |
+
'default' => '',
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
228 |
'options' => array(
|
229 |
+
'' => __( 'Normal', 'happyforms' ),
|
230 |
+
'happyforms-form--submit-button-bold' => __( 'Bold', 'happyforms' )
|
|
|
|
|
|
|
|
|
231 |
),
|
232 |
+
'target' => 'form_class',
|
233 |
'sanitize' => 'sanitize_text_field'
|
234 |
),
|
235 |
+
'submit_button_alignment' => array(
|
236 |
+
'default' => '',
|
|
|
237 |
'options' => array(
|
238 |
+
'' => __( 'Left', 'happyforms' ),
|
239 |
+
'happyforms-form--submit-button-align-center' => __( 'Center', 'happyforms' ),
|
240 |
+
'happyforms-form--submit-button-align-right' => __( 'Right', 'happyforms' )
|
241 |
),
|
242 |
+
'target' => 'form_class',
|
|
|
|
|
|
|
|
|
243 |
'sanitize' => 'sanitize_text_field'
|
244 |
),
|
245 |
+
'color_primary' => array(
|
246 |
+
'default' => '#000000',
|
247 |
+
'sanitize' => 'sanitize_text_field',
|
248 |
+
'target' => 'css_var',
|
249 |
+
'variable' => '--happyforms-color-primary',
|
250 |
+
),
|
251 |
+
'color_success' => array(
|
252 |
+
'default' => '#39b54a',
|
253 |
+
'sanitize' => 'sanitize_text_field',
|
254 |
+
'target' => 'css_var',
|
255 |
+
'variable' => '--happyforms-color-success',
|
256 |
+
),
|
257 |
+
'color_error' => array(
|
258 |
+
'default' => '#ff7550',
|
259 |
+
'sanitize' => 'sanitize_text_field',
|
260 |
+
'target' => 'css_var',
|
261 |
+
'variable' => '--happyforms-color-error',
|
262 |
+
),
|
263 |
+
'color_part_title' => array(
|
264 |
+
'default' => '#000000',
|
265 |
+
'sanitize' => 'sanitize_text_field',
|
266 |
+
'target' => 'css_var',
|
267 |
+
'variable' => '--happyforms-color-part-title',
|
268 |
+
),
|
269 |
+
'color_part_text' => array(
|
270 |
+
'default' => '#000000',
|
271 |
+
'sanitize' => 'sanitize_text_field',
|
272 |
+
'target' => 'css_var',
|
273 |
+
'variable' => '--happyforms-color-part-value',
|
274 |
+
),
|
275 |
+
'color_part_placeholder' => array(
|
276 |
+
'default' => '#aaaaaa',
|
277 |
+
'sanitize' => 'sanitize_text_field',
|
278 |
+
'target' => 'css_var',
|
279 |
+
'variable' => '--happyforms-color-part-placeholder',
|
280 |
+
),
|
281 |
+
'color_part_required' => array(
|
282 |
+
'default' => '#ff7550',
|
283 |
+
'sanitize' => 'sanitize_text_field',
|
284 |
+
'target' => 'css_var',
|
285 |
+
'variable' => '--happyforms-color-part-required-text',
|
286 |
+
),
|
287 |
+
'color_part_border' => array(
|
288 |
+
'default' => '#dbdbdb',
|
289 |
+
'sanitize' => 'sanitize_text_field',
|
290 |
+
'target' => 'css_var',
|
291 |
+
'variable' => '--happyforms-color-part-border',
|
292 |
+
),
|
293 |
+
'color_part_border_focus' => array(
|
294 |
+
'default' => '#000000',
|
295 |
+
'sanitize' => 'sanitize_text_field',
|
296 |
+
'target' => 'css_var',
|
297 |
+
'variable' => '--happyforms-color-part-border-focus',
|
298 |
+
),
|
299 |
+
'color_part_background' => array(
|
300 |
+
'default' => '#ffffff',
|
301 |
+
'sanitize' => 'sanitize_text_field',
|
302 |
+
'target' => 'css_var',
|
303 |
+
'variable' => '--happyforms-color-part-background',
|
304 |
+
),
|
305 |
+
'color_part_background_focus' => array(
|
306 |
+
'default' => '#ffffff',
|
307 |
+
'sanitize' => 'sanitize_text_field',
|
308 |
+
'target' => 'css_var',
|
309 |
+
'variable' => '--happyforms-color-part-background-focus',
|
310 |
+
),
|
311 |
+
'color_disable_part_transitions' => array(
|
312 |
+
'default' => '',
|
313 |
+
'sanitize' => 'sanitize_text_field',
|
314 |
+
'target' => 'form_class',
|
315 |
+
'value' => 'happyforms-form--part-disable-transitions'
|
316 |
+
),
|
317 |
+
'color_submit_background' => array(
|
318 |
+
'default' => '#000000',
|
319 |
+
'sanitize' => 'sanitize_text_field',
|
320 |
+
'target' => 'css_var',
|
321 |
+
'variable' => '--happyforms-color-submit-background',
|
322 |
+
),
|
323 |
+
'color_submit_background_hover' => array(
|
324 |
+
'default' => '#dbdbdb',
|
325 |
+
'sanitize' => 'sanitize_text_field',
|
326 |
+
'target' => 'css_var',
|
327 |
+
'variable' => '--happyforms-color-submit-background-hover',
|
328 |
+
),
|
329 |
+
'color_submit_background_focus' => array(
|
330 |
+
'default' => '#dbdbdb',
|
331 |
+
'sanitize' => 'sanitize_text_field',
|
332 |
+
'target' => 'css_var',
|
333 |
+
'variable' => '--happyforms-color-submit-background-focus',
|
334 |
+
),
|
335 |
+
'color_submit_border' => array(
|
336 |
+
'default' => 'transparent',
|
337 |
+
'sanitize' => 'sanitize_text_field',
|
338 |
+
'target' => 'css_var',
|
339 |
+
'variable' => '--happyforms-color-submit-border',
|
340 |
+
),
|
341 |
+
'color_submit_text' => array(
|
342 |
+
'default' => '#ffffff',
|
343 |
+
'sanitize' => 'sanitize_text_field',
|
344 |
+
'target' => 'css_var',
|
345 |
+
'variable' => '--happyforms-color-submit-text',
|
346 |
+
),
|
347 |
+
'color_submit_text_hover' => array(
|
348 |
+
'default' => '#000000',
|
349 |
+
'sanitize' => 'sanitize_text_field',
|
350 |
+
'target' => 'css_var',
|
351 |
+
'variable' => '--happyforms-color-submit-text-hover',
|
352 |
+
),
|
353 |
+
'color_disable_submit_button_transitions' => array(
|
354 |
+
'default' => '',
|
355 |
+
'sanitize' => 'sanitize_text_field',
|
356 |
+
'target' => 'form_class',
|
357 |
+
'value' => 'happyforms-form--submit-button-disable-transitions'
|
358 |
+
),
|
359 |
+
'color_rating_star' => array(
|
360 |
+
'default' => '#cccccc',
|
361 |
+
'sanitize' => 'sanitize_text_field',
|
362 |
+
'target' => 'css_var',
|
363 |
+
'variable' => '--happyforms-color-rating',
|
364 |
+
),
|
365 |
+
'color_rating_star_hover' => array(
|
366 |
+
'default' => '#f39c00',
|
367 |
+
'sanitize' => 'sanitize_text_field',
|
368 |
+
'target' => 'css_var',
|
369 |
+
'variable' => '--happyforms-color-rating-hover',
|
370 |
+
),
|
371 |
+
);
|
372 |
+
|
373 |
+
return $fields;
|
374 |
+
}
|
375 |
+
|
376 |
+
public function get_controls() {
|
377 |
+
$controls = array(
|
378 |
+
array(
|
379 |
+
'type' => 'divider',
|
380 |
+
'label' => __( 'General', 'happyforms' )
|
381 |
+
),
|
382 |
+
array(
|
383 |
'type' => 'text',
|
384 |
'label' => __( 'Required text', 'happyforms' ),
|
385 |
+
'field' => 'hf_style_required_text',
|
386 |
),
|
387 |
+
array(
|
388 |
+
'type' => 'checkbox',
|
389 |
+
'label' => __( 'Disable submit button until form is valid', 'happyforms' ),
|
390 |
+
'field' => 'disable_submit_until_valid',
|
391 |
+
),
|
392 |
+
array(
|
393 |
+
'type' => 'buttonset',
|
394 |
+
'label' => __( 'Font weight', 'happyforms' ),
|
395 |
+
'field' => 'form_font_weight',
|
396 |
+
),
|
397 |
+
array(
|
398 |
+
'type' => 'heading',
|
399 |
+
'label' => __( 'Colors', 'happyforms' )
|
400 |
+
),
|
401 |
+
array(
|
402 |
'type' => 'color',
|
403 |
+
'label' => __( 'Primary', 'happyforms' ),
|
404 |
+
'field' => 'color_primary',
|
|
|
|
|
|
|
|
|
405 |
),
|
406 |
+
array(
|
|
|
407 |
'type' => 'color',
|
408 |
+
'label' => __( 'Success', 'happyforms' ),
|
409 |
+
'field' => 'color_success',
|
|
|
|
|
|
|
|
|
410 |
),
|
411 |
+
array(
|
|
|
412 |
'type' => 'color',
|
413 |
+
'label' => __( 'Error', 'happyforms' ),
|
414 |
+
'field' => 'color_error',
|
|
|
|
|
|
|
|
|
415 |
),
|
416 |
+
array(
|
417 |
'type' => 'divider',
|
418 |
+
'label' => __( 'Form title', 'happyforms' )
|
419 |
),
|
420 |
+
array(
|
421 |
+
'type' => 'buttonset',
|
422 |
+
'label' => __( 'Form title', 'happyforms' ),
|
423 |
+
'field' => 'form_title',
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
424 |
),
|
425 |
+
array(
|
426 |
+
'type' => 'range',
|
427 |
+
'label' => __( 'Font size', 'happyforms' ),
|
428 |
+
'field' => 'form_title_font_size',
|
|
|
|
|
|
|
|
|
|
|
|
|
429 |
),
|
430 |
+
array(
|
431 |
'type' => 'divider',
|
432 |
+
'label' => __( 'Part borders & spacing', 'happyforms' )
|
433 |
),
|
434 |
+
array(
|
|
|
435 |
'type' => 'buttonset',
|
436 |
+
'label' => __( 'Border', 'happyforms' ),
|
437 |
+
'field' => 'part_border',
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
438 |
),
|
439 |
+
array(
|
|
|
440 |
'type' => 'buttonset',
|
441 |
+
'label' => __( 'Border location', 'happyforms' ),
|
442 |
+
'field' => 'part_border_location',
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
443 |
),
|
444 |
+
array(
|
|
|
445 |
'type' => 'buttonset',
|
446 |
+
'label' => __( 'Border radius', 'happyforms' ),
|
447 |
+
'field' => 'part_border_radius',
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
448 |
),
|
449 |
+
array(
|
|
|
450 |
'type' => 'buttonset',
|
451 |
+
'label' => __( 'Outer padding', 'happyforms' ),
|
452 |
+
'field' => 'part_outer_padding',
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
453 |
),
|
454 |
+
array(
|
455 |
+
'type' => 'buttonset',
|
456 |
+
'label' => __( 'Inner padding', 'happyforms' ),
|
457 |
+
'field' => 'part_inner_padding',
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
458 |
),
|
459 |
+
array(
|
460 |
+
'type' => 'heading',
|
461 |
+
'label' => __( 'Colors', 'happyforms' )
|
462 |
+
),
|
463 |
+
array(
|
464 |
'type' => 'color',
|
465 |
+
'label' => __( 'Border', 'happyforms' ),
|
466 |
+
'field' => 'color_part_border',
|
|
|
|
|
|
|
|
|
467 |
),
|
468 |
+
array(
|
|
|
469 |
'type' => 'color',
|
470 |
+
'label' => __( 'Border on focus', 'happyforms' ),
|
471 |
+
'field' => 'color_part_border_focus',
|
|
|
|
|
|
|
|
|
472 |
),
|
473 |
+
array(
|
|
|
474 |
'type' => 'color',
|
475 |
+
'label' => __( 'Background', 'happyforms' ),
|
476 |
+
'field' => 'color_part_background',
|
477 |
+
),
|
478 |
+
array(
|
479 |
+
'type' => 'color',
|
480 |
+
'label' => __( 'Background on focus', 'happyforms' ),
|
481 |
+
'field' => 'color_part_background_focus',
|
482 |
),
|
483 |
+
array(
|
484 |
+
'type' => 'checkbox',
|
485 |
+
'label' => __( 'Disable transitions on part colors', 'happyforms' ),
|
486 |
+
'field' => 'color_disable_part_transitions'
|
487 |
+
),
|
488 |
+
array(
|
489 |
+
'type' => 'divider',
|
490 |
+
'label' => __( 'Part labels & text', 'happyforms' )
|
491 |
+
),
|
492 |
+
array(
|
493 |
'type' => 'buttonset',
|
494 |
+
'label' => __( 'Part titles', 'happyforms' ),
|
495 |
+
'field' => 'part_hide_titles',
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
496 |
),
|
497 |
+
array(
|
498 |
+
'type' => 'checkbox',
|
499 |
+
'label' => __( 'Toggle placeholder on part focus', 'happyforms' ),
|
500 |
+
'field' => 'part_toggle_placeholders',
|
501 |
+
),
|
502 |
+
array(
|
503 |
'type' => 'range',
|
504 |
+
'label' => __( 'Title font size', 'happyforms' ),
|
505 |
+
'field' => 'part_title_font_size',
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
506 |
),
|
507 |
+
array(
|
508 |
+
'type' => 'buttonset',
|
509 |
+
'label' => __( 'Title font weight', 'happyforms' ),
|
510 |
+
'field' => 'part_title_font_weight',
|
511 |
+
),
|
512 |
+
array(
|
513 |
+
'type' => 'range',
|
514 |
+
'label' => __( 'Description font size', 'happyforms' ),
|
515 |
+
'field' => 'part_description_font_size',
|
516 |
+
),
|
517 |
+
array(
|
518 |
+
'type' => 'range',
|
519 |
+
'label' => __( 'Value font size', 'happyforms' ),
|
520 |
+
'field' => 'part_value_font_size',
|
521 |
+
),
|
522 |
+
array(
|
523 |
+
'type' => 'heading',
|
524 |
+
'label' => __( 'Colors', 'happyforms' )
|
525 |
+
),
|
526 |
+
array(
|
527 |
'type' => 'color',
|
528 |
+
'label' => __( 'Title', 'happyforms' ),
|
529 |
+
'field' => 'color_part_title',
|
|
|
|
|
|
|
|
|
530 |
),
|
531 |
+
array(
|
|
|
532 |
'type' => 'color',
|
533 |
+
'label' => __( 'Value', 'happyforms' ),
|
534 |
+
'field' => 'color_part_text',
|
|
|
|
|
|
|
|
|
535 |
),
|
536 |
+
array(
|
537 |
+
'type' => 'color',
|
538 |
+
'label' => __( 'Placeholder', 'happyforms' ),
|
539 |
+
'field' => 'color_part_placeholder',
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
540 |
),
|
541 |
+
array(
|
542 |
+
'type' => 'color',
|
543 |
+
'label' => __( 'Required text', 'happyforms' ),
|
544 |
+
'field' => 'color_part_required',
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
545 |
),
|
546 |
+
array(
|
547 |
+
'type' => 'color',
|
548 |
+
'label' => __( 'Rating star color', 'happyforms' ),
|
549 |
+
'field' => 'color_rating_star',
|
550 |
+
),
|
551 |
+
array(
|
552 |
+
'type' => 'color',
|
553 |
+
'label' => __( 'Rating star color on hover', 'happyforms' ),
|
554 |
+
'field' => 'color_rating_star_hover',
|
555 |
),
|
556 |
+
array(
|
557 |
'type' => 'divider',
|
558 |
+
'label' => __( 'Submit button', 'happyforms' )
|
559 |
),
|
560 |
+
array(
|
561 |
+
'type' => 'buttonset',
|
562 |
+
'label' => __( 'Border', 'happyforms' ),
|
563 |
+
'field' => 'submit_button_border',
|
564 |
+
),
|
565 |
+
array(
|
566 |
+
'type' => 'buttonset',
|
567 |
+
'label' => __( 'Border radius', 'happyforms' ),
|
568 |
+
'field' => 'submit_button_border_radius',
|
569 |
+
),
|
570 |
+
array(
|
571 |
+
'type' => 'buttonset',
|
572 |
+
'label' => __( 'Width', 'happyforms' ),
|
573 |
+
'field' => 'submit_button_width',
|
574 |
+
),
|
575 |
+
array(
|
576 |
'type' => 'range',
|
577 |
+
'label' => __( 'Font Size', 'happyforms' ),
|
578 |
+
'field' => 'submit_button_font_size',
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
579 |
),
|
580 |
+
array(
|
581 |
+
'type' => 'buttonset',
|
582 |
+
'label' => __( 'Font Weight', 'happyforms' ),
|
583 |
+
'field' => 'submit_button_font_weight',
|
584 |
+
),
|
585 |
+
array(
|
586 |
+
'type' => 'buttonset',
|
587 |
+
'label' => __( 'Alignment', 'happyforms' ),
|
588 |
+
'field' => 'submit_button_alignment',
|
589 |
+
),
|
590 |
+
array(
|
591 |
+
'type' => 'heading',
|
592 |
+
'label' => __( 'Colors', 'happyforms' )
|
593 |
+
),
|
594 |
+
array(
|
595 |
'type' => 'color',
|
596 |
+
'label' => __( 'Background', 'happyforms' ),
|
597 |
+
'field' => 'color_submit_background',
|
|
|
|
|
|
|
|
|
598 |
),
|
599 |
+
array(
|
|
|
600 |
'type' => 'color',
|
601 |
+
'label' => __( 'Background on hover', 'happyforms' ),
|
602 |
+
'field' => 'color_submit_background_hover',
|
|
|
|
|
|
|
|
|
603 |
),
|
604 |
+
array(
|
605 |
+
'type' => 'color',
|
606 |
+
'label' => __( 'Background on focus', 'happyforms' ),
|
607 |
+
'field' => 'color_submit_background_focus',
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
608 |
),
|
609 |
+
array(
|
|
|
610 |
'type' => 'color',
|
611 |
+
'label' => __( 'Border', 'happyforms' ),
|
612 |
+
'field' => 'color_submit_border',
|
|
|
|
|
|
|
|
|
613 |
),
|
614 |
+
array(
|
615 |
+
'type' => 'color',
|
616 |
+
'label' => __( 'Text', 'happyforms' ),
|
617 |
+
'field' => 'color_submit_text',
|
618 |
+
),
|
619 |
+
array(
|
620 |
+
'type' => 'color',
|
621 |
+
'label' => __( 'Text on hover', 'happyforms' ),
|
622 |
+
'field' => 'color_submit_text_hover',
|
623 |
+
),
|
624 |
+
array(
|
625 |
+
'type' => 'checkbox',
|
626 |
+
'label' => __( 'Disable transitions on submit button', 'happyforms' ),
|
627 |
+
'field' => 'color_disable_submit_button_transitions'
|
628 |
),
|
629 |
);
|
630 |
|
631 |
+
return $controls;
|
|
|
|
|
|
|
|
|
632 |
}
|
633 |
|
634 |
+
public function is_class_field( $field ) {
|
635 |
+
return 'form_class' === $field['target'];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
636 |
}
|
637 |
|
638 |
+
public function is_css_var_field( $field ) {
|
639 |
+
return 'css_var' === $field['target'];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
640 |
}
|
641 |
|
642 |
+
public function form_html_class( $class, $form ) {
|
643 |
+
$fields = $this->get_fields();
|
644 |
+
$class_fields = array_filter( $fields, array( $this, 'is_class_field' ) );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
645 |
|
646 |
+
foreach ( $class_fields as $key => $field ) {
|
647 |
+
if ( '' !== $form[$key] ) {
|
648 |
+
$class[] = $form[$key];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
649 |
}
|
650 |
}
|
651 |
|
652 |
+
return $class;
|
653 |
}
|
654 |
|
655 |
+
public function form_html_styles( $forms ) {
|
656 |
+
$fields = $this->get_fields();
|
657 |
+
$css_vars = array_filter( $fields, array( $this, 'is_css_var_field' ) );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
658 |
|
659 |
+
require_once( happyforms_get_include_folder() . '/templates/form-styles.css.php' );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
660 |
}
|
661 |
|
662 |
/**
|
663 |
+
* Filter: add fields to form meta.
|
664 |
*
|
665 |
+
* @hooked filter happyforms_meta_fields
|
666 |
*
|
667 |
+
* @since 1.3.0.
|
668 |
*
|
669 |
+
* @param array $fields Current form meta fields.
|
670 |
+
*
|
671 |
+
* @return array
|
672 |
*/
|
673 |
+
public function meta_fields( $fields ) {
|
674 |
+
$fields = array_merge( $fields, $this->get_fields() );
|
|
|
|
|
675 |
|
676 |
+
return $fields;
|
|
|
|
|
677 |
}
|
678 |
|
679 |
}
|
inc/classes/class-happyforms-plugin.php
CHANGED
@@ -30,6 +30,15 @@ class HappyForms_Plugin {
|
|
30 |
*/
|
31 |
private $landing_page_url = 'https://www.happyforms.me';
|
32 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
33 |
/**
|
34 |
* Action: initialize admin and frontend logic.
|
35 |
*
|
@@ -40,6 +49,9 @@ class HappyForms_Plugin {
|
|
40 |
* @return void
|
41 |
*/
|
42 |
public function initialize_plugin() {
|
|
|
|
|
|
|
43 |
if ( is_admin() ) {
|
44 |
require_once( happyforms_get_include_folder() . '/classes/class-admin-notices.php' );
|
45 |
require_once( happyforms_get_include_folder() . '/classes/class-tracking.php' );
|
@@ -50,7 +62,6 @@ class HappyForms_Plugin {
|
|
50 |
require_once( happyforms_get_include_folder() . '/classes/class-form-part-library.php' );
|
51 |
require_once( happyforms_get_include_folder() . '/classes/class-form-styles.php' );
|
52 |
require_once( happyforms_get_include_folder() . '/classes/class-message-notices.php' );
|
53 |
-
require_once( happyforms_get_include_folder() . '/helpers/helper-misc.php' );
|
54 |
require_once( happyforms_get_include_folder() . '/classes/class-happyforms-widget.php' );
|
55 |
require_once( happyforms_get_include_folder() . '/helpers/helper-form-templates.php' );
|
56 |
|
@@ -59,16 +70,17 @@ class HappyForms_Plugin {
|
|
59 |
add_action( 'admin_bar_menu', array( $this, 'admin_bar_menu' ), 80 );
|
60 |
add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue_scripts' ) );
|
61 |
add_action( 'current_screen', array( $this, 'admin_screens' ) );
|
62 |
-
add_filter( 'mce_external_plugins', array( $this, 'tinymce_register_plugins' ) );
|
63 |
-
add_filter( 'mce_buttons', array( $this, 'tinymce_register_button' ) );
|
64 |
add_filter( 'media_buttons_context', array( $this, 'insert_editor_buttons' ) );
|
65 |
|
66 |
// Widget
|
67 |
add_action( 'widgets_init', array( $this, 'register_widget' ) );
|
68 |
|
|
|
|
|
|
|
69 |
// Common hooks
|
70 |
-
add_action( 'template_redirect', array( $this, 'set_customize_preview_content' ) );
|
71 |
add_shortcode( $this->shortcode, array( $this, 'handle_shortcode' ) );
|
|
|
72 |
add_action( 'wp_head', array( $this, 'wp_head' ) );
|
73 |
add_action( 'wp_enqueue_scripts', array( $this, 'wp_enqueue_scripts' ) );
|
74 |
}
|
@@ -191,14 +203,6 @@ class HappyForms_Plugin {
|
|
191 |
'',
|
192 |
true
|
193 |
);
|
194 |
-
|
195 |
-
$form_data = $this->get_form_data_array();
|
196 |
-
|
197 |
-
wp_localize_script(
|
198 |
-
'happyforms-admin',
|
199 |
-
'happyFormsData',
|
200 |
-
$form_data
|
201 |
-
);
|
202 |
}
|
203 |
|
204 |
/**
|
@@ -288,40 +292,6 @@ class HappyForms_Plugin {
|
|
288 |
);
|
289 |
}
|
290 |
|
291 |
-
/**
|
292 |
-
* Action: inject the form template to be used
|
293 |
-
* in Customize screen previews.
|
294 |
-
*
|
295 |
-
* @since 1.0
|
296 |
-
*
|
297 |
-
* @hooked action template_redirect
|
298 |
-
*
|
299 |
-
* @return void
|
300 |
-
*/
|
301 |
-
public function set_customize_preview_content() {
|
302 |
-
if ( is_customize_preview() && isset( $_GET['happyformsNewForm'] ) ) {
|
303 |
-
return require_once( happyforms_get_include_folder() . '/templates/preview-form-new.php' );
|
304 |
-
}
|
305 |
-
}
|
306 |
-
|
307 |
-
/**
|
308 |
-
* Filter: register the form dropdown plugin
|
309 |
-
* for the post content editor.
|
310 |
-
*
|
311 |
-
* @since 1.0
|
312 |
-
*
|
313 |
-
* @hooked filter mce_external_plugins
|
314 |
-
*
|
315 |
-
* @param array $plugins The currently registered plugins.
|
316 |
-
*
|
317 |
-
* @return array
|
318 |
-
*/
|
319 |
-
public function tinymce_register_plugins( $plugins ) {
|
320 |
-
$plugins['happyforms_form_picker'] = happyforms_get_plugin_url() . 'assets/js/tinymce/form-picker.js';
|
321 |
-
|
322 |
-
return $plugins;
|
323 |
-
}
|
324 |
-
|
325 |
/**
|
326 |
* Filter: register the form dropdown button
|
327 |
* for he post content editor toolbar.
|
@@ -359,16 +329,15 @@ class HappyForms_Plugin {
|
|
359 |
}
|
360 |
|
361 |
/**
|
362 |
-
* Action:
|
363 |
-
* embedded into the current post.
|
364 |
*
|
365 |
-
* @since 1.
|
366 |
*
|
367 |
-
* @hooked action
|
368 |
*
|
369 |
* @return void
|
370 |
*/
|
371 |
-
public function
|
372 |
global $post;
|
373 |
|
374 |
if ( is_a( $post, 'WP_Post' ) && has_shortcode( $post->post_content, $this->shortcode ) ) {
|
@@ -391,19 +360,49 @@ class HappyForms_Plugin {
|
|
391 |
$form_id = $attrs['id'];
|
392 |
$form = $form_controller->get( $form_id );
|
393 |
|
394 |
-
|
395 |
-
|
396 |
-
|
397 |
-
|
398 |
-
|
399 |
-
* @param array $form Current form data.
|
400 |
-
*
|
401 |
-
* @return void
|
402 |
-
*/
|
403 |
-
do_action( 'happyforms_frontend_form_scripts', $form );
|
404 |
}
|
405 |
}
|
406 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
407 |
}
|
408 |
|
409 |
/**
|
@@ -425,11 +424,30 @@ class HappyForms_Plugin {
|
|
425 |
return $context;
|
426 |
}
|
427 |
|
428 |
-
|
|
|
|
|
429 |
|
430 |
return $context . ' ' . $button_html;
|
431 |
}
|
432 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
433 |
/**
|
434 |
* Action: enqueue scripts and styles
|
435 |
* for the frontend part of the plugin.
|
@@ -441,18 +459,58 @@ class HappyForms_Plugin {
|
|
441 |
* @return void
|
442 |
*/
|
443 |
public function wp_enqueue_scripts() {
|
|
|
|
|
|
|
|
|
|
|
|
|
444 |
wp_enqueue_script(
|
445 |
'happyforms-frontend',
|
446 |
happyforms_get_plugin_url() . 'assets/js/frontend.js',
|
447 |
-
|
448 |
-
false,
|
449 |
-
true
|
450 |
);
|
451 |
|
452 |
wp_enqueue_style(
|
453 |
-
'
|
454 |
happyforms_get_plugin_url() . 'assets/css/frontend.css'
|
455 |
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
456 |
}
|
457 |
|
458 |
/**
|
30 |
*/
|
31 |
private $landing_page_url = 'https://www.happyforms.me';
|
32 |
|
33 |
+
/**
|
34 |
+
* List of forms found on current page.
|
35 |
+
*
|
36 |
+
* @since 1.3
|
37 |
+
*
|
38 |
+
* @var array
|
39 |
+
*/
|
40 |
+
private $current_forms = array();
|
41 |
+
|
42 |
/**
|
43 |
* Action: initialize admin and frontend logic.
|
44 |
*
|
49 |
* @return void
|
50 |
*/
|
51 |
public function initialize_plugin() {
|
52 |
+
require_once( happyforms_get_include_folder() . '/helpers/helper-misc.php' );
|
53 |
+
require_once( happyforms_get_include_folder() . '/helpers/helper-styles.php' );
|
54 |
+
|
55 |
if ( is_admin() ) {
|
56 |
require_once( happyforms_get_include_folder() . '/classes/class-admin-notices.php' );
|
57 |
require_once( happyforms_get_include_folder() . '/classes/class-tracking.php' );
|
62 |
require_once( happyforms_get_include_folder() . '/classes/class-form-part-library.php' );
|
63 |
require_once( happyforms_get_include_folder() . '/classes/class-form-styles.php' );
|
64 |
require_once( happyforms_get_include_folder() . '/classes/class-message-notices.php' );
|
|
|
65 |
require_once( happyforms_get_include_folder() . '/classes/class-happyforms-widget.php' );
|
66 |
require_once( happyforms_get_include_folder() . '/helpers/helper-form-templates.php' );
|
67 |
|
70 |
add_action( 'admin_bar_menu', array( $this, 'admin_bar_menu' ), 80 );
|
71 |
add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue_scripts' ) );
|
72 |
add_action( 'current_screen', array( $this, 'admin_screens' ) );
|
|
|
|
|
73 |
add_filter( 'media_buttons_context', array( $this, 'insert_editor_buttons' ) );
|
74 |
|
75 |
// Widget
|
76 |
add_action( 'widgets_init', array( $this, 'register_widget' ) );
|
77 |
|
78 |
+
// Preview scripts
|
79 |
+
add_action( 'wp_footer', array( $this, 'enqueue_scripts_preview' ) );
|
80 |
+
|
81 |
// Common hooks
|
|
|
82 |
add_shortcode( $this->shortcode, array( $this, 'handle_shortcode' ) );
|
83 |
+
add_action( 'wp', array( $this, 'wp' ) );
|
84 |
add_action( 'wp_head', array( $this, 'wp_head' ) );
|
85 |
add_action( 'wp_enqueue_scripts', array( $this, 'wp_enqueue_scripts' ) );
|
86 |
}
|
203 |
'',
|
204 |
true
|
205 |
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
206 |
}
|
207 |
|
208 |
/**
|
292 |
);
|
293 |
}
|
294 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
295 |
/**
|
296 |
* Filter: register the form dropdown button
|
297 |
* for he post content editor toolbar.
|
329 |
}
|
330 |
|
331 |
/**
|
332 |
+
* Action: populate form list with forms found in current post.
|
|
|
333 |
*
|
334 |
+
* @since 1.3
|
335 |
*
|
336 |
+
* @hooked action wp
|
337 |
*
|
338 |
* @return void
|
339 |
*/
|
340 |
+
public function wp() {
|
341 |
global $post;
|
342 |
|
343 |
if ( is_a( $post, 'WP_Post' ) && has_shortcode( $post->post_content, $this->shortcode ) ) {
|
360 |
$form_id = $attrs['id'];
|
361 |
$form = $form_controller->get( $form_id );
|
362 |
|
363 |
+
if ( ! $form ) {
|
364 |
+
continue;
|
365 |
+
}
|
366 |
+
|
367 |
+
$this->current_forms[] = $form;
|
|
|
|
|
|
|
|
|
|
|
368 |
}
|
369 |
}
|
370 |
}
|
371 |
+
|
372 |
+
if ( happyforms_is_preview() ) {
|
373 |
+
$form_controller = happyforms_get_form_controller();
|
374 |
+
$form = $form_controller->get( get_the_ID() );
|
375 |
+
$this->current_forms[] = $form;
|
376 |
+
}
|
377 |
+
}
|
378 |
+
|
379 |
+
/**
|
380 |
+
* Action: output scripts and styles for the forms
|
381 |
+
* embedded into the current post.
|
382 |
+
*
|
383 |
+
* @since 1.0
|
384 |
+
*
|
385 |
+
* @hooked action wp_head
|
386 |
+
*
|
387 |
+
* @return void
|
388 |
+
*/
|
389 |
+
public function wp_head() {
|
390 |
+
/**
|
391 |
+
* Enqueue form-specific scripts.
|
392 |
+
*
|
393 |
+
* @since 1.1
|
394 |
+
*
|
395 |
+
* @param array $forms Array of forms found in page.
|
396 |
+
*
|
397 |
+
* @return void
|
398 |
+
*/
|
399 |
+
do_action( 'happyforms_head', $this->current_forms );
|
400 |
+
|
401 |
+
?>
|
402 |
+
<!-- HappyForms global container -->
|
403 |
+
<script type="text/javascript">HappyForms = {};</script>
|
404 |
+
<!-- End of HappyForms global container -->
|
405 |
+
<?php
|
406 |
}
|
407 |
|
408 |
/**
|
424 |
return $context;
|
425 |
}
|
426 |
|
427 |
+
$button_html = '<a href="#" class="button happyforms-editor-button"><span class="dashicons dashicons-format-status"></span><span>'. __( 'Add HappyForms', 'happyforms' ) .'</span></a>';
|
428 |
+
|
429 |
+
add_action( 'admin_footer', array( $this, 'output_happyforms_modal' ) );
|
430 |
|
431 |
return $context . ' ' . $button_html;
|
432 |
}
|
433 |
|
434 |
+
/**
|
435 |
+
* Render HappyForms dialog in the footer of edit post / page screen. Also
|
436 |
+
* prints a script block for adding shortcode to visual editor.
|
437 |
+
*
|
438 |
+
* @since 1.3.0.
|
439 |
+
*
|
440 |
+
* @hooked action admin_footer
|
441 |
+
*
|
442 |
+
* @return void
|
443 |
+
*/
|
444 |
+
public function output_happyforms_modal() {
|
445 |
+
wp_enqueue_script( 'jquery-ui-dialog' );
|
446 |
+
wp_enqueue_style( 'wp-jquery-ui-dialog' );
|
447 |
+
|
448 |
+
require_once( happyforms_get_include_folder() . '/templates/admin-form-modal.php' );
|
449 |
+
}
|
450 |
+
|
451 |
/**
|
452 |
* Action: enqueue scripts and styles
|
453 |
* for the frontend part of the plugin.
|
459 |
* @return void
|
460 |
*/
|
461 |
public function wp_enqueue_scripts() {
|
462 |
+
$dependencies = array( 'jquery' );
|
463 |
+
$dependencies = apply_filters(
|
464 |
+
'happyforms_frontend_dependencies',
|
465 |
+
$dependencies, $this->current_forms
|
466 |
+
);
|
467 |
+
|
468 |
wp_enqueue_script(
|
469 |
'happyforms-frontend',
|
470 |
happyforms_get_plugin_url() . 'assets/js/frontend.js',
|
471 |
+
$dependencies, false, true
|
|
|
|
|
472 |
);
|
473 |
|
474 |
wp_enqueue_style(
|
475 |
+
'happyforms-frontend',
|
476 |
happyforms_get_plugin_url() . 'assets/css/frontend.css'
|
477 |
);
|
478 |
+
|
479 |
+
if ( happyforms_is_preview() ) {
|
480 |
+
wp_enqueue_style(
|
481 |
+
'happyforms-preview',
|
482 |
+
happyforms_get_plugin_url() . 'assets/css/preview.css'
|
483 |
+
);
|
484 |
+
}
|
485 |
+
}
|
486 |
+
|
487 |
+
/**
|
488 |
+
* Action: enqueue HappyForms styles and scripts
|
489 |
+
* for the Customizer preview part.
|
490 |
+
*
|
491 |
+
* @since 1.3
|
492 |
+
*
|
493 |
+
* @hooked action customize_preview_init
|
494 |
+
*
|
495 |
+
* @return void
|
496 |
+
*/
|
497 |
+
public function enqueue_scripts_preview() {
|
498 |
+
if ( ! happyforms_is_preview() ) {
|
499 |
+
return;
|
500 |
+
}
|
501 |
+
|
502 |
+
$preview_deps = apply_filters(
|
503 |
+
'happyforms_preview_dependencies',
|
504 |
+
array( 'customize-preview' )
|
505 |
+
);
|
506 |
+
|
507 |
+
wp_enqueue_script(
|
508 |
+
'happyforms-preview',
|
509 |
+
happyforms_get_plugin_url() . 'assets/js/preview.js',
|
510 |
+
$preview_deps, false, true
|
511 |
+
);
|
512 |
+
|
513 |
+
require_once( happyforms_get_include_folder() . '/templates/preview-form-pencil.php' );
|
514 |
}
|
515 |
|
516 |
/**
|
inc/classes/class-message-controller.php
CHANGED
@@ -68,14 +68,8 @@ class HappyForms_Message_Controller {
|
|
68 |
*/
|
69 |
public $unread_transient = 'happyforms_unread_messages';
|
70 |
|
71 |
-
|
72 |
-
|
73 |
-
*
|
74 |
-
* @since 1.1
|
75 |
-
*
|
76 |
-
* @var string
|
77 |
-
*/
|
78 |
-
public $honeypot_part_type = 'single_line_text';
|
79 |
|
80 |
/**
|
81 |
* The singleton constructor.
|
@@ -192,18 +186,28 @@ class HappyForms_Message_Controller {
|
|
192 |
}
|
193 |
|
194 |
$nonce = $_REQUEST[$this->nonce_name];
|
195 |
-
$prefix = happyforms_get_message_controller()->nonce_prefix;
|
196 |
$form_id = intval( $_REQUEST[$this->submit_parameter] );
|
197 |
-
$action = "{$prefix}{$form_id}";
|
198 |
|
199 |
-
if ( !
|
200 |
wp_die( $bad_request_error );
|
201 |
}
|
202 |
|
203 |
$form = happyforms_get_form_controller()->get( $form_id );
|
204 |
|
205 |
if ( happyforms_get_form_controller()->has_spam_protection( $form ) ) {
|
206 |
-
if ( ! $this->validate_honeypot( $
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
207 |
$redirect_url = home_url( wp_get_raw_referer() );
|
208 |
|
209 |
// Redirect silently, like everything's good.
|
@@ -283,26 +287,61 @@ class HappyForms_Message_Controller {
|
|
283 |
* @return boolean
|
284 |
*/
|
285 |
private function verify_nonce( $nonce, $form_id ) {
|
286 |
-
|
287 |
-
|
288 |
-
return wp_verify_nonce( $nonce_value, $this->nonce_prefix . $form_id );
|
289 |
}
|
290 |
|
291 |
/**
|
292 |
* Verify honeypot data.
|
293 |
*
|
294 |
-
* @since 1.
|
|
|
|
|
295 |
*
|
296 |
* @return boolean
|
297 |
*/
|
298 |
-
private function validate_honeypot( $
|
299 |
-
$
|
300 |
-
$
|
301 |
-
$validated = isset( $_REQUEST[$honeypot_name] ) && empty( $_REQUEST[$honeypot_name] );
|
302 |
|
303 |
return $validated;
|
304 |
}
|
305 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
306 |
/**
|
307 |
* Create a new message post object.
|
308 |
*
|
@@ -324,17 +363,19 @@ class HappyForms_Message_Controller {
|
|
324 |
$part = happyforms_get_part_library()->get_part( $part_data['type'] );
|
325 |
|
326 |
if ( false !== $part ) {
|
327 |
-
$part_value = $part->sanitize_value( $part_data );
|
328 |
$part_value = $part->validate_value( $part_data, $part_value );
|
|
|
|
|
329 |
|
330 |
if ( ! is_wp_error( $part_value ) ) {
|
331 |
-
$message_meta[$
|
332 |
} else {
|
333 |
$error = null === $error ? new WP_Error(): $error;
|
334 |
-
$messages = $part_value->
|
335 |
|
336 |
foreach ( $messages as $message ) {
|
337 |
-
$error->add( $
|
338 |
}
|
339 |
}
|
340 |
}
|
68 |
*/
|
69 |
public $unread_transient = 'happyforms_unread_messages';
|
70 |
|
71 |
+
public $captcha_verify_url = 'https://www.google.com/recaptcha/api/siteverify';
|
72 |
+
public $captcha_field = 'g-recaptcha-response';
|
|
|
|
|
|
|
|
|
|
|
|
|
73 |
|
74 |
/**
|
75 |
* The singleton constructor.
|
186 |
}
|
187 |
|
188 |
$nonce = $_REQUEST[$this->nonce_name];
|
|
|
189 |
$form_id = intval( $_REQUEST[$this->submit_parameter] );
|
|
|
190 |
|
191 |
+
if ( ! $this->verify_nonce( $nonce, $form_id ) ) {
|
192 |
wp_die( $bad_request_error );
|
193 |
}
|
194 |
|
195 |
$form = happyforms_get_form_controller()->get( $form_id );
|
196 |
|
197 |
if ( happyforms_get_form_controller()->has_spam_protection( $form ) ) {
|
198 |
+
if ( ! $this->validate_honeypot( $form ) ) {
|
199 |
+
$redirect_url = home_url( wp_get_raw_referer() );
|
200 |
+
|
201 |
+
// Redirect silently, like everything's good.
|
202 |
+
wp_safe_redirect( $redirect_url );
|
203 |
+
exit;
|
204 |
+
}
|
205 |
+
}
|
206 |
+
|
207 |
+
if ( happyforms_get_form_controller()->has_recaptcha_protection( $form ) ) {
|
208 |
+
$captcha_value = $this->validate_captcha( $form );
|
209 |
+
|
210 |
+
if ( is_wp_error( $captcha_value ) ) {
|
211 |
$redirect_url = home_url( wp_get_raw_referer() );
|
212 |
|
213 |
// Redirect silently, like everything's good.
|
287 |
* @return boolean
|
288 |
*/
|
289 |
private function verify_nonce( $nonce, $form_id ) {
|
290 |
+
return wp_verify_nonce( $nonce, $this->nonce_prefix . $form_id );
|
|
|
|
|
291 |
}
|
292 |
|
293 |
/**
|
294 |
* Verify honeypot data.
|
295 |
*
|
296 |
+
* @since 1.3
|
297 |
+
*
|
298 |
+
* @param array $form Current form data.
|
299 |
*
|
300 |
* @return boolean
|
301 |
*/
|
302 |
+
private function validate_honeypot( $form ) {
|
303 |
+
$honeypot_name = $form['ID'] . 'single_line_text_-1';
|
304 |
+
$validated = ! isset( $_REQUEST[$honeypot_name] );
|
|
|
305 |
|
306 |
return $validated;
|
307 |
}
|
308 |
|
309 |
+
private function validate_captcha( $form ) {
|
310 |
+
$secret_key = $form['captcha_secret_key'];
|
311 |
+
$captcha_value = isset ( $_REQUEST[$this->captcha_field] ) ? $_REQUEST[$this->captcha_field] : '';
|
312 |
+
$captcha_value = sanitize_text_field( $captcha_value );
|
313 |
+
$request_body = array(
|
314 |
+
'secret' => $secret_key,
|
315 |
+
'response' => $captcha_value,
|
316 |
+
'ip' => $_SERVER['REMOTE_ADDR'],
|
317 |
+
);
|
318 |
+
|
319 |
+
$request = wp_remote_post( $this->captcha_verify_url, array( 'body' => $request_body ) );
|
320 |
+
$response = wp_remote_retrieve_body( $request );
|
321 |
+
|
322 |
+
if ( empty( $response ) ) {
|
323 |
+
return new WP_Error( 'captcha', 'captcha_invalid_configuration' );
|
324 |
+
}
|
325 |
+
|
326 |
+
$response = json_decode( $response, true );
|
327 |
+
|
328 |
+
if ( ! $response['success'] ) {
|
329 |
+
$configuration_errors = array_intersect( array(
|
330 |
+
'missing-input-secret', 'invalid-input-secret', 'bad-request'
|
331 |
+
), $response['error-codes'] );
|
332 |
+
$value_errors = array_intersect( array(
|
333 |
+
'missing-input-response', 'invalid-input-response'
|
334 |
+
), $response['error-codes'] );
|
335 |
+
if ( count( $configuration_errors ) > 0 ) {
|
336 |
+
return new WP_Error( 'captcha', 'captcha_invalid_configuration' );
|
337 |
+
} else if ( count( $value_errors ) > 0 ) {
|
338 |
+
return new WP_Error( 'captcha', 'captcha_not_verified' );
|
339 |
+
}
|
340 |
+
}
|
341 |
+
|
342 |
+
return $captcha_value;
|
343 |
+
}
|
344 |
+
|
345 |
/**
|
346 |
* Create a new message post object.
|
347 |
*
|
363 |
$part = happyforms_get_part_library()->get_part( $part_data['type'] );
|
364 |
|
365 |
if ( false !== $part ) {
|
366 |
+
$part_value = $part->sanitize_value( $part_data, $form );
|
367 |
$part_value = $part->validate_value( $part_data, $part_value );
|
368 |
+
$part_id = $part_data['id'];
|
369 |
+
$part_name = happyforms_get_part_name( $part_data, $form );
|
370 |
|
371 |
if ( ! is_wp_error( $part_value ) ) {
|
372 |
+
$message_meta[$part_id] = $part_value;
|
373 |
} else {
|
374 |
$error = null === $error ? new WP_Error(): $error;
|
375 |
+
$messages = $part_value->get_error_codes();
|
376 |
|
377 |
foreach ( $messages as $message ) {
|
378 |
+
$error->add( $part_name, $message );
|
379 |
}
|
380 |
}
|
381 |
}
|
inc/classes/class-message-notices.php
CHANGED
@@ -140,7 +140,9 @@ class HappyForms_Message_Notices {
|
|
140 |
$is_part_notice = false;
|
141 |
|
142 |
foreach( $form_data['parts'] as $part_data ) {
|
143 |
-
|
|
|
|
|
144 |
$part = $part_library->get_part( $part_data['type'] );
|
145 |
$message_definitions = $part->get_message_definitions();
|
146 |
$message_definition = $message_definitions[$message_key];
|
140 |
$is_part_notice = false;
|
141 |
|
142 |
foreach( $form_data['parts'] as $part_data ) {
|
143 |
+
$part_name = happyforms_get_part_name( $part_data, $form_data );
|
144 |
+
|
145 |
+
if ( $location === $part_name ) {
|
146 |
$part = $part_library->get_part( $part_data['type'] );
|
147 |
$message_definitions = $part->get_message_definitions();
|
148 |
$message_definition = $message_definitions[$message_key];
|
inc/classes/class-wp-customize-form-manager.php
CHANGED
@@ -26,7 +26,9 @@ class HappyForms_WP_Customize_Form_Manager {
|
|
26 |
|
27 |
// Ajax callbacks.
|
28 |
add_action( 'wp_ajax_happyforms-update-form', array( $this, 'ajax_update_form' ) );
|
29 |
-
add_action( 'wp_ajax_happyforms-form-part-
|
|
|
|
|
30 |
}
|
31 |
|
32 |
/**
|
@@ -38,7 +40,7 @@ class HappyForms_WP_Customize_Form_Manager {
|
|
38 |
*/
|
39 |
private function get_current_form() {
|
40 |
$form_id = $_REQUEST['form_id'];
|
41 |
-
$form = happyforms_get_form_controller()->
|
42 |
|
43 |
if ( intval( $form_id ) > 0 ) {
|
44 |
$form = happyforms_get_form_controller()->get( $form_id );
|
@@ -79,8 +81,8 @@ class HappyForms_WP_Customize_Form_Manager {
|
|
79 |
add_filter( 'customize_refresh_nonces', array( $this, 'add_customize_nonce' ) );
|
80 |
// Output header styles
|
81 |
add_filter( 'customize_controls_print_scripts', array( $this, 'customize_controls_print_styles' ) );
|
82 |
-
// Enqueue dynamic controls
|
83 |
-
add_action( 'customize_controls_enqueue_scripts', array( $this, '
|
84 |
// Print templates
|
85 |
add_action( 'customize_controls_print_footer_scripts', array( $this, 'customize_controls_print_footer_scripts' ) );
|
86 |
}
|
@@ -154,18 +156,44 @@ class HappyForms_WP_Customize_Form_Manager {
|
|
154 |
|
155 |
$admin_notices = happyforms_get_admin_notices();
|
156 |
|
157 |
-
$
|
158 |
-
|
159 |
-
'
|
160 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
161 |
|
162 |
$admin_notices->register(
|
163 |
-
|
164 |
$notice_content,
|
165 |
array(
|
166 |
-
'type' =>
|
|
|
167 |
'screen' => array( 'edit-happyform' ),
|
168 |
-
'one-time' =>
|
169 |
)
|
170 |
);
|
171 |
|
@@ -183,7 +211,7 @@ class HappyForms_WP_Customize_Form_Manager {
|
|
183 |
*
|
184 |
* @return void
|
185 |
*/
|
186 |
-
public function
|
187 |
if ( ! check_ajax_referer( 'happyforms', 'happyforms-nonce', false ) ) {
|
188 |
status_header( 400 );
|
189 |
wp_send_json_error( 'bad_nonce' );
|
@@ -200,18 +228,28 @@ class HappyForms_WP_Customize_Form_Manager {
|
|
200 |
wp_send_json_error( 'Missing data' );
|
201 |
}
|
202 |
|
203 |
-
$
|
204 |
$part_data = $_POST['part'];
|
205 |
-
$
|
206 |
|
207 |
-
|
208 |
-
$
|
209 |
-
|
210 |
-
|
211 |
-
|
212 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
213 |
|
214 |
-
|
215 |
}
|
216 |
|
217 |
/**
|
@@ -237,6 +275,7 @@ class HappyForms_WP_Customize_Form_Manager {
|
|
237 |
|
238 |
/**
|
239 |
* Action: enqueue HappyForms styles and scripts
|
|
|
240 |
*
|
241 |
* @since 1.0
|
242 |
*
|
@@ -244,7 +283,7 @@ class HappyForms_WP_Customize_Form_Manager {
|
|
244 |
*
|
245 |
* @return void
|
246 |
*/
|
247 |
-
public function
|
248 |
wp_enqueue_style(
|
249 |
'happyforms-customize',
|
250 |
happyforms_get_plugin_url() . 'assets/css/customize.css',
|
@@ -259,9 +298,8 @@ class HappyForms_WP_Customize_Form_Manager {
|
|
259 |
happyforms_get_plugin_url() . 'assets/css/font-awesome.min.css'
|
260 |
);
|
261 |
|
262 |
-
|
263 |
-
'
|
264 |
-
happyforms_get_plugin_url() . 'assets/js/customize.js',
|
265 |
array(
|
266 |
'backbone',
|
267 |
'underscore',
|
@@ -272,23 +310,15 @@ class HappyForms_WP_Customize_Form_Manager {
|
|
272 |
'jquery-ui-slider',
|
273 |
'jquery-ui-button',
|
274 |
'wp-color-picker',
|
275 |
-
'wp-pointer'
|
276 |
-
|
277 |
-
|
278 |
-
true
|
279 |
-
);
|
280 |
-
|
281 |
-
$preview_deps = apply_filters(
|
282 |
-
'happyforms_preview_dependencies',
|
283 |
-
array( 'backbone', 'underscore', 'jquery' )
|
284 |
);
|
285 |
|
286 |
wp_register_script(
|
287 |
-
'happyforms-
|
288 |
-
happyforms_get_plugin_url() . 'assets/js/
|
289 |
-
$
|
290 |
-
false,
|
291 |
-
true
|
292 |
);
|
293 |
|
294 |
$data = array(
|
@@ -299,7 +329,6 @@ class HappyForms_WP_Customize_Form_Manager {
|
|
299 |
|
300 |
wp_localize_script( 'happyforms-customize', '_happyFormsSettings', $data );
|
301 |
wp_enqueue_script( 'happyforms-customize' );
|
302 |
-
wp_enqueue_script( 'happyforms-preview' );
|
303 |
|
304 |
// Rich text editor
|
305 |
if ( ! class_exists( '_WP_Editors', false ) ) {
|
@@ -329,7 +358,6 @@ class HappyForms_WP_Customize_Form_Manager {
|
|
329 |
require_once( happyforms_get_include_folder() . '/templates/customize-form-build.php' );
|
330 |
require_once( happyforms_get_include_folder() . '/templates/customize-form-parts-drawer.php' );
|
331 |
require_once( happyforms_get_include_folder() . '/templates/customize-form-style.php' );
|
332 |
-
require_once( happyforms_get_include_folder() . '/templates/preview-form-part.php' );
|
333 |
|
334 |
_WP_Editors::print_default_editor_scripts();
|
335 |
}
|
26 |
|
27 |
// Ajax callbacks.
|
28 |
add_action( 'wp_ajax_happyforms-update-form', array( $this, 'ajax_update_form' ) );
|
29 |
+
add_action( 'wp_ajax_happyforms-form-part-add', array( $this, 'ajax_form_part_add' ) );
|
30 |
+
|
31 |
+
add_filter( 'happyforms_part_class', array( $this, 'happyforms_part_class' ) );
|
32 |
}
|
33 |
|
34 |
/**
|
40 |
*/
|
41 |
private function get_current_form() {
|
42 |
$form_id = $_REQUEST['form_id'];
|
43 |
+
$form = happyforms_get_form_controller()->get_defaults();
|
44 |
|
45 |
if ( intval( $form_id ) > 0 ) {
|
46 |
$form = happyforms_get_form_controller()->get( $form_id );
|
81 |
add_filter( 'customize_refresh_nonces', array( $this, 'add_customize_nonce' ) );
|
82 |
// Output header styles
|
83 |
add_filter( 'customize_controls_print_scripts', array( $this, 'customize_controls_print_styles' ) );
|
84 |
+
// Enqueue dynamic controls for the Customizer
|
85 |
+
add_action( 'customize_controls_enqueue_scripts', array( $this, 'enqueue_scripts_customizer' ) );
|
86 |
// Print templates
|
87 |
add_action( 'customize_controls_print_footer_scripts', array( $this, 'customize_controls_print_footer_scripts' ) );
|
88 |
}
|
156 |
|
157 |
$admin_notices = happyforms_get_admin_notices();
|
158 |
|
159 |
+
$dismissed_notices = $admin_notices->get_dismissed_notices( get_current_user_id() );
|
160 |
+
if ( ! in_array( 'happyforms_form_saved_guide', $dismissed_notices ) ) {
|
161 |
+
$notice_name = 'happyforms_form_saved_guide';
|
162 |
+
$notice_type = 'custom';
|
163 |
+
$notice_dismissible = true;
|
164 |
+
$notice_onetime = false;
|
165 |
+
$notice_content = '';
|
166 |
+
$notice_content .= '<h3>' . __( 'Form saved.', 'happyforms' ) . '</h3>';
|
167 |
+
$notice_content .= '<p>' . __( 'Now, there are couple of ways to embed it to your content. Here goes...', 'happyforms' ) . '</p>';
|
168 |
+
$notice_content .= '<h4>' . __( 'Add to your page / post content', 'happyforms' ) . '</h4>';
|
169 |
+
$notice_content .= '<ol><li>' . __( 'In your Edit Post / Edit Page screen, click the <b>Add HappyForms</b> button right above your toolbar. A modal window will appear.', 'happyforms' ) . '</li><li>' . __( 'Select a form in the dropdown, then click <b>Insert</b>.', 'happyforms' ) . '</li><li>' . __( 'That\'s it! You\'ll notice the shortcode was added to your content. Your form will show up there.', 'happyforms' ) . '</li></ol>';
|
170 |
+
$notice_content .= '<h4>' . __( 'Use the HappyForms widget', 'happyforms' ) . '</h4>';
|
171 |
+
$notice_content .= '<ol>';
|
172 |
+
$notice_content .= '<li>' . sprintf( __( 'Head over to <b>Appearance</b> → <b><a href="%s">Widgets</a></b> screen.', 'happyforms' ), get_site_url( NULL, 'wp-admin/widgets.php' ) ) . '</li>';
|
173 |
+
$notice_content .= '<li>' . __( 'Drag the HappyForms widget to your sidebar.', 'happyforms' ) .'</li>';
|
174 |
+
$notice_content .= '<li>' . __( 'Select a form in the Form dropdown.', 'happyforms' ) . '</li>';
|
175 |
+
$notice_content .= '<li>' . __( 'All done!', 'happyforms' ) . '</li>';
|
176 |
+
$notice_content .= '</ol>';
|
177 |
+
$notice_content .= '<p>' . sprintf( __( 'Looking for a full documentation? Head over to our <a href="%s" target="_blank">Help Guide</a>.', 'happyforms' ), 'https://happyforms.me/help-guide' ) . '</p>';
|
178 |
+
} else {
|
179 |
+
$notice_name = 'happyforms_form_saved';
|
180 |
+
$notice_type = 'success';
|
181 |
+
$notice_dismissible = false;
|
182 |
+
$notice_onetime = true;
|
183 |
+
$notice_content = sprintf(
|
184 |
+
__( 'Form saved. You can add this form to any Page, Post and Widget area. Have questions? <a href="%s" target="_blank">Ask for help in our support forums</a>.', 'happyforms' ),
|
185 |
+
'https://wordpress.org/support/plugin/happyforms'
|
186 |
+
);
|
187 |
+
}
|
188 |
|
189 |
$admin_notices->register(
|
190 |
+
$notice_name,
|
191 |
$notice_content,
|
192 |
array(
|
193 |
+
'type' => $notice_type,
|
194 |
+
'dismissible' => $notice_dismissible,
|
195 |
'screen' => array( 'edit-happyform' ),
|
196 |
+
'one-time' => $notice_onetime
|
197 |
)
|
198 |
);
|
199 |
|
211 |
*
|
212 |
* @return void
|
213 |
*/
|
214 |
+
public function ajax_form_part_add() {
|
215 |
if ( ! check_ajax_referer( 'happyforms', 'happyforms-nonce', false ) ) {
|
216 |
status_header( 400 );
|
217 |
wp_send_json_error( 'bad_nonce' );
|
228 |
wp_send_json_error( 'Missing data' );
|
229 |
}
|
230 |
|
231 |
+
$form_data = happyforms_get_form_controller()->get( intval( $_POST['form_id'] ) );
|
232 |
$part_data = $_POST['part'];
|
233 |
+
$template = happyforms_get_form_part( $part_data, $form_data );
|
234 |
|
235 |
+
header( 'Content-type: text/html' );
|
236 |
+
echo( $template );
|
237 |
+
exit();
|
238 |
+
}
|
239 |
+
|
240 |
+
/**
|
241 |
+
* Filter: append -editable class to part templates.
|
242 |
+
*
|
243 |
+
* @since 1.0
|
244 |
+
*
|
245 |
+
* @hooked filter happyforms_part_class
|
246 |
+
*
|
247 |
+
* @return void
|
248 |
+
*/
|
249 |
+
public function happyforms_part_class( $classes ) {
|
250 |
+
$classes[] = 'happyforms-block-editable happyforms-block-editable--part';
|
251 |
|
252 |
+
return $classes;
|
253 |
}
|
254 |
|
255 |
/**
|
275 |
|
276 |
/**
|
277 |
* Action: enqueue HappyForms styles and scripts
|
278 |
+
* for the Customizer part.
|
279 |
*
|
280 |
* @since 1.0
|
281 |
*
|
283 |
*
|
284 |
* @return void
|
285 |
*/
|
286 |
+
public function enqueue_scripts_customizer() {
|
287 |
wp_enqueue_style(
|
288 |
'happyforms-customize',
|
289 |
happyforms_get_plugin_url() . 'assets/css/customize.css',
|
298 |
happyforms_get_plugin_url() . 'assets/css/font-awesome.min.css'
|
299 |
);
|
300 |
|
301 |
+
$customize_deps = apply_filters(
|
302 |
+
'happyforms_customize_dependencies',
|
|
|
303 |
array(
|
304 |
'backbone',
|
305 |
'underscore',
|
310 |
'jquery-ui-slider',
|
311 |
'jquery-ui-button',
|
312 |
'wp-color-picker',
|
313 |
+
'wp-pointer',
|
314 |
+
'customize-controls',
|
315 |
+
)
|
|
|
|
|
|
|
|
|
|
|
|
|
316 |
);
|
317 |
|
318 |
wp_register_script(
|
319 |
+
'happyforms-customize',
|
320 |
+
happyforms_get_plugin_url() . 'assets/js/customize.js',
|
321 |
+
$customize_deps, false, true
|
|
|
|
|
322 |
);
|
323 |
|
324 |
$data = array(
|
329 |
|
330 |
wp_localize_script( 'happyforms-customize', '_happyFormsSettings', $data );
|
331 |
wp_enqueue_script( 'happyforms-customize' );
|
|
|
332 |
|
333 |
// Rich text editor
|
334 |
if ( ! class_exists( '_WP_Editors', false ) ) {
|
358 |
require_once( happyforms_get_include_folder() . '/templates/customize-form-build.php' );
|
359 |
require_once( happyforms_get_include_folder() . '/templates/customize-form-parts-drawer.php' );
|
360 |
require_once( happyforms_get_include_folder() . '/templates/customize-form-style.php' );
|
|
|
361 |
|
362 |
_WP_Editors::print_default_editor_scripts();
|
363 |
}
|
inc/classes/parts/class-part-address.php
CHANGED
@@ -2,15 +2,20 @@
|
|
2 |
|
3 |
class HappyForms_Part_Address extends HappyForms_Form_Part {
|
4 |
|
|
|
|
|
|
|
5 |
public $type = 'address';
|
6 |
-
public $template_id = 'happyforms-address-template';
|
7 |
|
8 |
public function __construct() {
|
9 |
$this->label = __( 'Address', 'happyforms' );
|
10 |
$this->description = __( 'For geographical locations. Includes Google Maps intergration.', 'happyforms' );
|
11 |
|
12 |
-
add_filter( '
|
13 |
-
|
|
|
|
|
|
|
14 |
}
|
15 |
|
16 |
/**
|
@@ -79,74 +84,8 @@ class HappyForms_Part_Address extends HappyForms_Form_Part {
|
|
79 |
*
|
80 |
* @return string
|
81 |
*/
|
82 |
-
public function
|
83 |
-
|
84 |
-
<p>
|
85 |
-
<label for="<%= instance.id %>_title"><?php _e( 'Title', 'happyforms' ); ?></label>
|
86 |
-
<input type="text" id="<%= instance.id %>_title" class="widefat title" value="<%= instance.label %>" data-bind="label" />
|
87 |
-
</p>
|
88 |
-
<p>
|
89 |
-
<label for="<%= instance.id %>_label_placement"><?php _e( 'Title placement', 'happyforms' ); ?></label>
|
90 |
-
<select id="<%= instance.id %>_label_placement" data-bind="label_placement">
|
91 |
-
<option value="above"<%= (instance.label_placement == 'above') ? ' selected' : '' %>><?php _e( 'Above', 'happyforms' ); ?></option>
|
92 |
-
<option value="left"<%= (instance.label_placement == 'left') ? ' selected' : '' %>><?php _e( 'Left', 'happyforms' ); ?></option>
|
93 |
-
<option value="below"<%= (instance.label_placement == 'below') ? ' selected' : '' %>><?php _e( 'Below', 'happyforms' ); ?></option>
|
94 |
-
</select>
|
95 |
-
</p>
|
96 |
-
<p class="label_placement-options" style="display: none">
|
97 |
-
<label>
|
98 |
-
<input type="checkbox" class="checkbox apply-all-check" value="" data-apply-to="label_placement" /> <?php _e( 'Apply to all parts', 'happyforms' ); ?>
|
99 |
-
</label>
|
100 |
-
</p>
|
101 |
-
<p>
|
102 |
-
<label for="<%= instance.id %>_description"><?php _e( 'Description', 'happyforms' ); ?></label>
|
103 |
-
<textarea id="<%= instance.id %>_description" data-bind="description"><%= instance.description %></textarea>
|
104 |
-
</p>
|
105 |
-
<p class="tooltip-description-wrap" style="display: <%= (instance.description != '') ? 'block' : 'none' %>">
|
106 |
-
<label>
|
107 |
-
<input type="checkbox" class="checkbox" value="1" <% if ( instance.tooltip_description ) { %>checked="checked"<% } %> data-bind="tooltip_description" /> <?php _e( 'Show description in a tooltip', 'happyforms' ); ?>
|
108 |
-
</label>
|
109 |
-
</p>
|
110 |
-
<p>
|
111 |
-
<label for="<%= instance.id %>_placeholder"><?php _e( 'Placeholder', 'happyforms' ); ?></label>
|
112 |
-
<input type="text" id="<%= instance.id %>_placeholder" class="widefat title" value="<%= instance.placeholder %>" data-bind="placeholder" />
|
113 |
-
</p>
|
114 |
-
<p>
|
115 |
-
<label for="<%= instance.id %>_width"><?php _e( 'Width', 'happyforms' ); ?></label>
|
116 |
-
<select id="<%= instance.id %>_width" name="width" data-bind="width" class="widefat">
|
117 |
-
<option value="full"<%= (instance.width == 'full') ? ' selected' : '' %>><?php _e( 'Full', 'happyforms' ); ?></option>
|
118 |
-
<option value="half"<%= (instance.width == 'half') ? ' selected' : '' %>><?php _e( 'Half', 'happyforms' ); ?></option>
|
119 |
-
<option value="third"<%= (instance.width == 'third') ? ' selected' : '' %>><?php _e( 'One third', 'happyforms' ); ?></option>
|
120 |
-
</select>
|
121 |
-
</p>
|
122 |
-
<p>
|
123 |
-
<label for="<%= instance.id %>_mode"><?php _e( 'Mode', 'happyforms' ); ?></label>
|
124 |
-
<select id="<%= instance.id %>_mode" name="mode" data-bind="mode" class="widefat">
|
125 |
-
<option value="simple"<%= (instance.mode == 'simple') ? ' selected' : '' %>><?php _e( 'Full', 'happyforms' ); ?></option>
|
126 |
-
<option value="autocomplete"<%= (instance.mode == 'autocomplete') ? ' selected' : '' %>><?php _e( 'Full with autocomplete', 'happyforms' ); ?></option>
|
127 |
-
<option value="country-city"<%= (instance.mode == 'country-city') ? ' selected' : '' %>><?php _e( 'Country and city', 'happyforms' ); ?></option>
|
128 |
-
<option value="country"<%= (instance.mode == 'country') ? ' selected' : '' %>><?php _e( 'Country only', 'happyforms' ); ?></option>
|
129 |
-
</select>
|
130 |
-
</p>
|
131 |
-
<div class="address-apikey">
|
132 |
-
<p>
|
133 |
-
<label for="<%= instance.id %>_apikey"><?php _e( 'Google API Key', 'happyforms' ); ?></label>
|
134 |
-
<input type="text" id="<%= instance.id %>_apikey class="widefat title" value="<%= instance.apikey %>" data-bind="apikey" />
|
135 |
-
</p>
|
136 |
-
<p class="description">
|
137 |
-
Autocomplete mode uses the Google Places API to populate results. <a href="https://developers.google.com/places/web-service/get-api-key" target="_blank"><?php _e( 'Get a key for Google Places API Web Service', 'happyforms' ); ?></a>
|
138 |
-
</p>
|
139 |
-
</div>
|
140 |
-
<p>
|
141 |
-
<label for="<%= instance.id %>_css_class"><?php _e( 'Custom CSS class', 'happyforms' ); ?></label>
|
142 |
-
<input type="text" id="<%= instance.id %>_css_class" class="widefat title" value="<%= instance.css_class %>" data-bind="css_class" />
|
143 |
-
</p>
|
144 |
-
<p>
|
145 |
-
<label>
|
146 |
-
<input type="checkbox" class="checkbox" value="1" <% if ( instance.required ) { %>checked="checked"<% } %> data-bind="required" /> <?php _e( 'This is a required field', 'happyforms' ); ?>
|
147 |
-
</label>
|
148 |
-
</p>
|
149 |
-
<?php
|
150 |
}
|
151 |
|
152 |
/**
|
@@ -160,81 +99,10 @@ class HappyForms_Part_Address extends HappyForms_Form_Part {
|
|
160 |
* @return string Markup for the form part.
|
161 |
*/
|
162 |
public function frontend_template( $part_data = array(), $form_data = array() ) {
|
163 |
-
$
|
164 |
-
$
|
165 |
-
$html_id = 'happyforms-' . $form_data['ID'] . '_' . esc_attr( $part_data['id'] );
|
166 |
-
|
167 |
-
$classes = array( 'happyforms-part--address' );
|
168 |
-
|
169 |
-
if ( $part_data['width'] ) {
|
170 |
-
$classes[] = 'happyforms-part--width-' . esc_attr( $part_data['width'] );
|
171 |
-
}
|
172 |
-
|
173 |
-
if ( $part_data['label_placement'] ) {
|
174 |
-
$classes[] = 'happyforms-part--label-' . esc_attr( $part_data['label_placement'] );
|
175 |
-
}
|
176 |
-
|
177 |
-
if ( ! empty( $part_data['css_class'] ) ) {
|
178 |
-
$classes[] = $part_data['css_class'];
|
179 |
-
}
|
180 |
|
181 |
-
|
182 |
-
$classes[] = 'happyforms-part--address-country-city';
|
183 |
-
}
|
184 |
-
|
185 |
-
$classes = implode( ' ', $classes );
|
186 |
-
?>
|
187 |
-
<div class="happyforms-part happyforms-part-editable <?php echo esc_attr( $classes ); ?>" data-happyforms-id="<?php echo esc_attr( $part_data['id'] ); ?>" data-google-apikey="<?php echo esc_attr( $part_data['apikey'] ); ?>" data-mode="<?php echo esc_attr( $part_data['mode'] ); ?>">
|
188 |
-
<div class="happyforms-part__wrap">
|
189 |
-
<label for="<?php echo esc_attr( $html_id ); ?>" class="happyforms-part__label">
|
190 |
-
<span class="label"><?php echo esc_html( $part_data['label'] ); ?></span>
|
191 |
-
<?php if ( 1 === intval( $part_data['required'] ) ) : ?>
|
192 |
-
<span class="happyforms-required"> <?php echo $required_text; ?></span>
|
193 |
-
<?php endif; ?>
|
194 |
-
<?php happyforms_print_part_description( $part_data ); ?>
|
195 |
-
</label>
|
196 |
-
<?php if ( 'simple' === $part_data['mode'] ) : ?>
|
197 |
-
<div class="happyforms-part__el-wrap">
|
198 |
-
<div class="happyforms-part__el">
|
199 |
-
<input name="<?php echo esc_attr( happyforms_get_part_name( $part_data['id'], $form_data['ID'] ) ); ?>" class="happyforms-part__el--text-input happyforms-part__el--address" type="text" placeholder="<?php echo esc_attr( $part_data['placeholder'] ); ?>" <?php if ( 1 === $part_data['required'] ) : ?>required aria-required="true"<?php endif; ?> />
|
200 |
-
</div>
|
201 |
-
</div>
|
202 |
-
<?php elseif ( 'autocomplete' === $part_data['mode'] ) : ?>
|
203 |
-
<div class="happyforms-part__el-wrap">
|
204 |
-
<div class="happyforms-part__el">
|
205 |
-
<input class="happyforms-part__el--text-input happyforms-part__el--address-autocomplete" type="text" placeholder="<?php echo esc_attr( $part_data['placeholder'] ); ?>" <?php if ( 1 === $part_data['required'] ) : ?>required aria-required="true"<?php endif; ?> autocomplete="off" />
|
206 |
-
<div class="happyforms-part__el--address--results happyforms-part__el--address--results-autocomplete"></div>
|
207 |
-
</div>
|
208 |
-
</div>
|
209 |
-
<?php elseif ( 'country' === $part_data['mode'] ) : ?>
|
210 |
-
<div class="happyforms-part__el-wrap">
|
211 |
-
<div class="happyforms-part__el">
|
212 |
-
<input class="happyforms-part__el--text-input happyforms-part__el--address-country" type="text" placeholder="<?php _e( 'Country', 'happyforms' ); ?>" <?php if ( 1 === $part_data['required'] ) : ?>required aria-required="true"<?php endif; ?> autocomplete="off" />
|
213 |
-
<div class="happyforms-part__el--address--results happyforms-part__el--address--results-country"></div>
|
214 |
-
</div>
|
215 |
-
</div>
|
216 |
-
<?php else: ?>
|
217 |
-
<div class="happyforms-part__el-wrap">
|
218 |
-
<div class="happyforms-part__el">
|
219 |
-
<input class="happyforms-part__el--text-input happyforms-part__el--address-country" type="text" placeholder="<?php _e( 'Country', 'happyforms' ); ?>" <?php if ( 1 === $part_data['required'] ) : ?>required aria-required="true"<?php endif; ?> autocomplete="off" />
|
220 |
-
<div class="happyforms-part__el--address--results happyforms-part__el--address--results-country"></div>
|
221 |
-
</div>
|
222 |
-
<div class="happyforms-part__el">
|
223 |
-
<input class="happyforms-part__el happyforms-part__el--text-input happyforms-part__el--address-city" type="text" placeholder="<?php _e( 'City', 'happyforms' ); ?>" <?php if ( 1 === $part_data['required'] ) : ?>required aria-required="true"<?php endif; ?> />
|
224 |
-
</div>
|
225 |
-
</div>
|
226 |
-
<?php endif; ?>
|
227 |
-
<?php if ( 'simple' !== $part_data['mode'] ) : ?>
|
228 |
-
<input type="hidden" name="<?php echo esc_attr( happyforms_get_part_name( $part_data['id'], $form_data['ID'] ) ); ?>" id="<?php echo esc_attr( $html_id ); ?>">
|
229 |
-
<?php endif; ?>
|
230 |
-
<?php
|
231 |
-
if ( $form_data ) :
|
232 |
-
happyforms_message_notices( $form_data, $part_data['id'] );
|
233 |
-
endif;
|
234 |
-
?>
|
235 |
-
</div>
|
236 |
-
</div>
|
237 |
-
<?php
|
238 |
}
|
239 |
|
240 |
/**
|
@@ -253,6 +121,14 @@ class HappyForms_Part_Address extends HappyForms_Form_Part {
|
|
253 |
);
|
254 |
}
|
255 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
256 |
/**
|
257 |
* Sanitize submitted value before storing it.
|
258 |
*
|
@@ -262,12 +138,26 @@ class HappyForms_Part_Address extends HappyForms_Form_Part {
|
|
262 |
*
|
263 |
* @return string
|
264 |
*/
|
265 |
-
public function sanitize_value( $part_data = array() ) {
|
266 |
$sanitized_value = $this->get_default_value();
|
267 |
-
$
|
268 |
-
|
269 |
-
if ( isset( $_REQUEST[$
|
270 |
-
$sanitized_value =
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
271 |
}
|
272 |
|
273 |
return $sanitized_value;
|
@@ -284,16 +174,82 @@ class HappyForms_Part_Address extends HappyForms_Form_Part {
|
|
284 |
* @return string|object
|
285 |
*/
|
286 |
public function validate_value( $part_data, $value ) {
|
287 |
-
$part_id = $part_data['id'];
|
288 |
$validated_value = $value;
|
289 |
|
290 |
-
if ( 1 === $part_data['required']
|
291 |
-
$
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
292 |
}
|
293 |
|
294 |
return $validated_value;
|
295 |
}
|
296 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
297 |
/**
|
298 |
* Enqueue scripts in customizer area.
|
299 |
*
|
@@ -307,80 +263,57 @@ class HappyForms_Part_Address extends HappyForms_Form_Part {
|
|
307 |
wp_enqueue_script(
|
308 |
'part-address',
|
309 |
happyforms_get_plugin_url() . 'assets/js/parts/part-address.js',
|
310 |
-
$deps,
|
311 |
-
false,
|
312 |
-
true
|
313 |
);
|
314 |
}
|
315 |
|
316 |
-
/**
|
317 |
-
* Filter: dependencies for the preview screen.
|
318 |
-
*
|
319 |
-
* @since 1.0.0.
|
320 |
-
*
|
321 |
-
* @hooked filter happyforms_preview_dependencies
|
322 |
-
*
|
323 |
-
* @param array List of dependencies.
|
324 |
-
*
|
325 |
-
* @return array
|
326 |
-
*/
|
327 |
-
public function preview_dependencies( $deps = array() ) {
|
328 |
-
wp_register_script(
|
329 |
-
'happyforms-part-address',
|
330 |
-
happyforms_get_plugin_url() . 'assets/js/frontend/address.js',
|
331 |
-
array( 'jquery', 'jquery-ui-autocomplete' ),
|
332 |
-
false,
|
333 |
-
true
|
334 |
-
);
|
335 |
-
|
336 |
-
wp_localize_script(
|
337 |
-
'happyforms-part-address',
|
338 |
-
'_happyFormsCountries',
|
339 |
-
happyforms_get_countries()
|
340 |
-
);
|
341 |
-
|
342 |
-
array_push( $deps, 'happyforms-part-address' );
|
343 |
-
|
344 |
-
return $deps;
|
345 |
-
}
|
346 |
-
|
347 |
/**
|
348 |
* Action: enqueue additional scripts on the frontend.
|
349 |
*
|
350 |
-
* @since 1.
|
351 |
*
|
352 |
-
* @hooked action
|
353 |
*
|
354 |
* @param array List of dependencies.
|
355 |
*
|
356 |
* @return array
|
357 |
*/
|
358 |
-
public function
|
|
|
359 |
$form_controller = happyforms_get_form_controller();
|
360 |
|
361 |
-
|
362 |
-
|
|
|
|
|
|
|
363 |
}
|
364 |
|
365 |
-
if (
|
366 |
-
return;
|
367 |
}
|
368 |
|
369 |
wp_register_script(
|
370 |
'happyforms-part-address',
|
371 |
happyforms_get_plugin_url() . 'assets/js/frontend/address.js',
|
372 |
-
array( 'jquery
|
373 |
-
|
374 |
-
|
|
|
|
|
|
|
|
|
375 |
);
|
376 |
|
377 |
wp_localize_script(
|
378 |
'happyforms-part-address',
|
379 |
-
'
|
380 |
-
|
381 |
);
|
382 |
|
383 |
-
|
|
|
|
|
384 |
}
|
385 |
|
386 |
}
|
2 |
|
3 |
class HappyForms_Part_Address extends HappyForms_Form_Part {
|
4 |
|
5 |
+
private $ajax_action = 'happyforms_address_autocomplete';
|
6 |
+
private $api_url = 'https://maps.googleapis.com/maps/api/place/autocomplete/json';
|
7 |
+
|
8 |
public $type = 'address';
|
|
|
9 |
|
10 |
public function __construct() {
|
11 |
$this->label = __( 'Address', 'happyforms' );
|
12 |
$this->description = __( 'For geographical locations. Includes Google Maps intergration.', 'happyforms' );
|
13 |
|
14 |
+
add_filter( 'happyforms_part_class', array( $this, 'html_part_class' ), 10, 3 );
|
15 |
+
add_filter( 'happyforms_part_data_attributes', array( $this, 'html_part_data_attributes' ), 10, 3 );
|
16 |
+
add_filter( 'happyforms_frontend_dependencies', array( $this, 'script_dependencies' ), 10, 2 );
|
17 |
+
add_action( 'wp_ajax_' . $this->ajax_action, array( $this, 'ajax_autocomplete' ) );
|
18 |
+
add_action( 'wp_ajax_nopriv_' . $this->ajax_action, array( $this, 'ajax_autocomplete' ) );
|
19 |
}
|
20 |
|
21 |
/**
|
84 |
*
|
85 |
* @return string
|
86 |
*/
|
87 |
+
public function customize_templates() {
|
88 |
+
require_once( happyforms_get_include_folder() . '/templates/parts/customize-address.php' );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
89 |
}
|
90 |
|
91 |
/**
|
99 |
* @return string Markup for the form part.
|
100 |
*/
|
101 |
public function frontend_template( $part_data = array(), $form_data = array() ) {
|
102 |
+
$part = wp_parse_args( $part_data, $this->get_customize_defaults() );
|
103 |
+
$form = $form_data;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
104 |
|
105 |
+
include( happyforms_get_include_folder() . '/templates/parts/frontend-address.php' );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
106 |
}
|
107 |
|
108 |
/**
|
121 |
);
|
122 |
}
|
123 |
|
124 |
+
public function get_default_value() {
|
125 |
+
return array(
|
126 |
+
'full' => '',
|
127 |
+
'country' => '',
|
128 |
+
'city' => '',
|
129 |
+
);
|
130 |
+
}
|
131 |
+
|
132 |
/**
|
133 |
* Sanitize submitted value before storing it.
|
134 |
*
|
138 |
*
|
139 |
* @return string
|
140 |
*/
|
141 |
+
public function sanitize_value( $part_data = array(), $form_data = array() ) {
|
142 |
$sanitized_value = $this->get_default_value();
|
143 |
+
$part_name = happyforms_get_part_name( $part_data, $form_data );
|
144 |
+
|
145 |
+
if ( isset( $_REQUEST[$part_name] ) ) {
|
146 |
+
$sanitized_value = wp_parse_args( $_REQUEST[$part_name], $sanitized_value );
|
147 |
+
|
148 |
+
switch ( $part_data['mode'] ) {
|
149 |
+
case 'simple':
|
150 |
+
case 'autocomplete':
|
151 |
+
$sanitized_value['full'] = sanitize_text_field( $sanitized_value['full'] );
|
152 |
+
break;
|
153 |
+
case 'country':
|
154 |
+
$sanitized_value['country'] = sanitize_text_field( $sanitized_value['country'] );
|
155 |
+
break;
|
156 |
+
case 'country-city':
|
157 |
+
$sanitized_value['country'] = sanitize_text_field( $sanitized_value['country'] );
|
158 |
+
$sanitized_value['city'] = sanitize_text_field( $sanitized_value['city'] );
|
159 |
+
break;
|
160 |
+
}
|
161 |
}
|
162 |
|
163 |
return $sanitized_value;
|
174 |
* @return string|object
|
175 |
*/
|
176 |
public function validate_value( $part_data, $value ) {
|
|
|
177 |
$validated_value = $value;
|
178 |
|
179 |
+
if ( 1 === $part_data['required'] ) {
|
180 |
+
$is_empty = false;
|
181 |
+
|
182 |
+
switch ( $part_data['mode'] ) {
|
183 |
+
case 'simple':
|
184 |
+
case 'autocomplete':
|
185 |
+
$is_empty = empty( $validated_value['full'] );
|
186 |
+
break;
|
187 |
+
case 'country':
|
188 |
+
$is_empty = empty( $validated_value['country'] );
|
189 |
+
break;
|
190 |
+
case 'country-city':
|
191 |
+
$is_empty = empty( $validated_value['country'] ) || empty( $validated_value['city'] );
|
192 |
+
break;
|
193 |
+
}
|
194 |
+
|
195 |
+
if ( $is_empty ) {
|
196 |
+
$validated_value = new WP_Error( 'missing_required_field' );
|
197 |
+
return $validated_value;
|
198 |
+
}
|
199 |
}
|
200 |
|
201 |
return $validated_value;
|
202 |
}
|
203 |
|
204 |
+
public function ajax_autocomplete() {
|
205 |
+
$results = array();
|
206 |
+
|
207 |
+
if ( isset( $_GET['term'] ) && isset( $_GET['key'] ) ) {
|
208 |
+
$url = $this->api_url;
|
209 |
+
$key = sanitize_text_field( $_GET['key'] );
|
210 |
+
$term = sanitize_text_field( $_GET['term'] );
|
211 |
+
$args = array(
|
212 |
+
'key' => $key,
|
213 |
+
'types' => 'address',
|
214 |
+
'input' => $term,
|
215 |
+
);
|
216 |
+
$query = http_build_query( $args );
|
217 |
+
$response = wp_remote_get( "{$url}?{$query}" );
|
218 |
+
$response = wp_remote_retrieve_body( $response );
|
219 |
+
$response = json_decode( $response, true );
|
220 |
+
|
221 |
+
if ( isset( $response['status'] ) && 'OK' === $response['status'] ) {
|
222 |
+
$results = wp_list_pluck( $response['predictions'], 'description' );
|
223 |
+
}
|
224 |
+
}
|
225 |
+
|
226 |
+
wp_send_json( $results );
|
227 |
+
}
|
228 |
+
|
229 |
+
public function html_part_class( $class, $part_data, $form_data ) {
|
230 |
+
if ( isset( $part_data['mode'] ) && 'country-city' === $part_data['mode'] ) {
|
231 |
+
$class[] = 'happyforms-part--address-country-city';
|
232 |
+
}
|
233 |
+
|
234 |
+
return $class;
|
235 |
+
}
|
236 |
+
|
237 |
+
public function html_part_data_attributes( $attributes, $part, $form ) {
|
238 |
+
if ( $this->type !== $part['type'] ) {
|
239 |
+
return $attributes;
|
240 |
+
}
|
241 |
+
|
242 |
+
if ( isset( $part['mode'] ) ) {
|
243 |
+
$attributes['mode'] = $part['mode'];
|
244 |
+
}
|
245 |
+
|
246 |
+
if ( isset( $part['apikey'] ) ) {
|
247 |
+
$attributes['google-apikey'] = $part['apikey'];
|
248 |
+
}
|
249 |
+
|
250 |
+
return $attributes;
|
251 |
+
}
|
252 |
+
|
253 |
/**
|
254 |
* Enqueue scripts in customizer area.
|
255 |
*
|
263 |
wp_enqueue_script(
|
264 |
'part-address',
|
265 |
happyforms_get_plugin_url() . 'assets/js/parts/part-address.js',
|
266 |
+
$deps, false, true
|
|
|
|
|
267 |
);
|
268 |
}
|
269 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
270 |
/**
|
271 |
* Action: enqueue additional scripts on the frontend.
|
272 |
*
|
273 |
+
* @since 1.3.0.
|
274 |
*
|
275 |
+
* @hooked action happyforms_frontend_dependencies
|
276 |
*
|
277 |
* @param array List of dependencies.
|
278 |
*
|
279 |
* @return array
|
280 |
*/
|
281 |
+
public function script_dependencies( $deps, $forms ) {
|
282 |
+
$contains_address = false;
|
283 |
$form_controller = happyforms_get_form_controller();
|
284 |
|
285 |
+
foreach ( $forms as $form ) {
|
286 |
+
if ( $form_controller->get_first_part_by_type( $form, $this->type ) ) {
|
287 |
+
$contains_address = true;
|
288 |
+
break;
|
289 |
+
}
|
290 |
}
|
291 |
|
292 |
+
if ( ! happyforms_is_preview() && ! $contains_address ) {
|
293 |
+
return $deps;
|
294 |
}
|
295 |
|
296 |
wp_register_script(
|
297 |
'happyforms-part-address',
|
298 |
happyforms_get_plugin_url() . 'assets/js/frontend/address.js',
|
299 |
+
array( 'jquery-ui-autocomplete' ), false, true
|
300 |
+
);
|
301 |
+
|
302 |
+
$settings = array(
|
303 |
+
'url' => admin_url( 'admin-ajax.php' ),
|
304 |
+
'action' => $this->ajax_action,
|
305 |
+
'countries' => happyforms_get_countries()
|
306 |
);
|
307 |
|
308 |
wp_localize_script(
|
309 |
'happyforms-part-address',
|
310 |
+
'_happyFormsAddressSettings',
|
311 |
+
$settings
|
312 |
);
|
313 |
|
314 |
+
$deps[] = 'happyforms-part-address';
|
315 |
+
|
316 |
+
return $deps;
|
317 |
}
|
318 |
|
319 |
}
|
inc/classes/parts/class-part-checkbox.php
CHANGED
@@ -3,13 +3,12 @@
|
|
3 |
class HappyForms_Part_Checkbox extends HappyForms_Form_Part {
|
4 |
|
5 |
public $type = 'checkbox';
|
6 |
-
public $template_id = 'happyforms-checkbox-template';
|
7 |
-
public $item_customize_template_id = 'happyforms-checkbox-option-customize-template';
|
8 |
-
public $item_frontend_template_id = 'happyforms-checkbox-option-frontend-template';
|
9 |
|
10 |
public function __construct() {
|
11 |
$this->label = __( 'Multiple Choice', 'happyforms' );
|
12 |
$this->description = __( 'For checkboxes allowing multiple selections.', 'happyforms' );
|
|
|
|
|
13 |
}
|
14 |
|
15 |
/**
|
@@ -64,14 +63,7 @@ class HappyForms_Part_Checkbox extends HappyForms_Form_Part {
|
|
64 |
);
|
65 |
}
|
66 |
|
67 |
-
|
68 |
-
* Get part option (sub-part) defaults.
|
69 |
-
*
|
70 |
-
* @since 1.0.0.
|
71 |
-
*
|
72 |
-
* @return array
|
73 |
-
*/
|
74 |
-
public function get_option_defaults() {
|
75 |
return array(
|
76 |
'is_default' => 0,
|
77 |
'label' => ''
|
@@ -85,97 +77,8 @@ class HappyForms_Part_Checkbox extends HappyForms_Form_Part {
|
|
85 |
*
|
86 |
* @return string
|
87 |
*/
|
88 |
-
public function
|
89 |
-
|
90 |
-
<p>
|
91 |
-
<label for="<%= instance.id %>_title"><?php _e( 'Title', 'happyforms' ); ?></label>
|
92 |
-
<input type="text" id="<%= instance.id %>_title" class="widefat title" value="<%= instance.label %>" data-bind="label" />
|
93 |
-
</p>
|
94 |
-
<p>
|
95 |
-
<label for="<%= instance.id %>_label_placement"><?php _e( 'Title placement', 'happyforms' ); ?></label>
|
96 |
-
<select id="<%= instance.id %>_label_placement" data-bind="label_placement">
|
97 |
-
<option value="above"<%= (instance.label_placement == 'above') ? ' selected' : '' %>><?php _e( 'Above', 'happyforms' ); ?></option>
|
98 |
-
<option value="left"<%= (instance.label_placement == 'left') ? ' selected' : '' %>><?php _e( 'Left', 'happyforms' ); ?></option>
|
99 |
-
<option value="below"<%= (instance.label_placement == 'below') ? ' selected' : '' %>><?php _e( 'Below', 'happyforms' ); ?></option>
|
100 |
-
</select>
|
101 |
-
</p>
|
102 |
-
<p class="label_placement-options" style="display: none">
|
103 |
-
<label>
|
104 |
-
<input type="checkbox" class="checkbox apply-all-check" value="" data-apply-to="label_placement" /> <?php _e( 'Apply to all parts', 'happyforms' ); ?>
|
105 |
-
</label>
|
106 |
-
</p>
|
107 |
-
<p>
|
108 |
-
<label for="<%= instance.id %>_description"><?php _e( 'Description', 'happyforms' ); ?></label>
|
109 |
-
<textarea id="<%= instance.id %>_description" data-bind="description"><%= instance.description %></textarea>
|
110 |
-
</p>
|
111 |
-
<p class="tooltip-description-wrap" style="display: <%= (instance.description != '') ? 'block' : 'none' %>">
|
112 |
-
<label>
|
113 |
-
<input type="checkbox" class="checkbox" value="1" <% if ( instance.tooltip_description ) { %>checked="checked"<% } %> data-bind="tooltip_description" /> <?php _e( 'Show description in a tooltip', 'happyforms' ); ?>
|
114 |
-
</label>
|
115 |
-
</p>
|
116 |
-
<p>
|
117 |
-
<label for="<%= instance.id %>_display_type"><?php _e( 'Display options', 'happyforms' ); ?></label>
|
118 |
-
<select id="<%= instance.id %>_display_type" name="display_type" data-bind="display_type" class="widefat">
|
119 |
-
<option value="inline"<%= (instance.display_type == 'inline') ? ' selected' : '' %>><?php _e( 'Horizontal', 'happyforms' ); ?></option>
|
120 |
-
<option value="block"<%= (instance.display_type == 'block') ? ' selected' : '' %>><?php _e( 'Vertical', 'happyforms' ); ?></option>
|
121 |
-
</select>
|
122 |
-
</p>
|
123 |
-
<p>
|
124 |
-
<label for="<%= instance.id %>_width"><?php _e( 'Width', 'happyforms' ); ?></label>
|
125 |
-
<select id="<%= instance.id %>_width" name="width" data-bind="width" class="widefat">
|
126 |
-
<option value="full"<%= (instance.width == 'full') ? ' selected' : '' %>><?php _e( 'Full', 'happyforms' ); ?></option>
|
127 |
-
<option value="half"<%= (instance.width == 'half') ? ' selected' : '' %>><?php _e( 'Half', 'happyforms' ); ?></option>
|
128 |
-
<option value="third"<%= (instance.width == 'third') ? ' selected' : '' %>><?php _e( 'One third', 'happyforms' ); ?></option>
|
129 |
-
</select>
|
130 |
-
</p>
|
131 |
-
<p class="width-options" style="display: none">
|
132 |
-
<label>
|
133 |
-
<input type="checkbox" class="checkbox apply-all-check" value="" data-apply-to="width" /> <?php _e( 'Apply to all parts', 'happyforms' ); ?>
|
134 |
-
</label>
|
135 |
-
</p>
|
136 |
-
<p>
|
137 |
-
<label for="<%= instance.id %>_css_class"><?php _e( 'Custom CSS class', 'happyforms' ); ?></label>
|
138 |
-
<input type="text" id="<%= instance.id %>_css_class" class="widefat title" value="<%= instance.css_class %>" data-bind="css_class" />
|
139 |
-
</p>
|
140 |
-
<p>
|
141 |
-
<label>
|
142 |
-
<input type="checkbox" class="checkbox" value="1" <% if ( instance.required ) { %>checked="checked"<% } %> data-bind="required" /> <?php _e( 'This is a required field', 'happyforms' ); ?>
|
143 |
-
</label>
|
144 |
-
</p>
|
145 |
-
<ul class="options">
|
146 |
-
<h3><?php _e( 'Options', 'happyforms' ); ?></h3>
|
147 |
-
<% if ( !instance.options.length ) { %>
|
148 |
-
<p class="no-options"><?php _e( 'No options added yet. Add one by clicking the <i>Add option</i> link below.', 'happyforms' ); ?></p>
|
149 |
-
<% } %>
|
150 |
-
</ul>
|
151 |
-
<p class="links">
|
152 |
-
<a href="#" class="add-option"><?php _e( 'Add option', 'happyforms' ); ?></a>
|
153 |
-
</p>
|
154 |
-
<?php
|
155 |
-
}
|
156 |
-
|
157 |
-
/**
|
158 |
-
* Get template for option / sub-part item in customize pane.
|
159 |
-
*
|
160 |
-
* @since 1.0.0.
|
161 |
-
*
|
162 |
-
* @return string
|
163 |
-
*/
|
164 |
-
public function customize_item_template() {
|
165 |
-
?>
|
166 |
-
<li class="happyforms-part-widget happyforms-part-widget--sub">
|
167 |
-
<label>
|
168 |
-
<?php _e( 'Label', 'happyforms' ); ?>
|
169 |
-
<input type="text" class="widefat" name="" value="<%= label %>" data-option-attribute="label" data-preview-selector=".label">
|
170 |
-
</label>
|
171 |
-
<label>
|
172 |
-
<input type="checkbox" name="" value="1" class="default-option-switch"<% if (is_default == 1) { %> checked="checked"<% } %>> <?php _e( 'Checked by default', 'happyforms' ); ?>
|
173 |
-
</label>
|
174 |
-
<div class="option-actions">
|
175 |
-
<a href="#" class="delete-option"><?php _e( 'Delete', 'happyforms' ); ?></a>
|
176 |
-
</div>
|
177 |
-
</li>
|
178 |
-
<?php
|
179 |
}
|
180 |
|
181 |
/**
|
@@ -189,98 +92,14 @@ class HappyForms_Part_Checkbox extends HappyForms_Form_Part {
|
|
189 |
* @return string Markup for the form part.
|
190 |
*/
|
191 |
public function frontend_template( $part_data = array(), $form_data = array() ) {
|
192 |
-
$
|
193 |
-
$
|
194 |
-
|
195 |
-
$classes = array('happyforms-part--checkbox');
|
196 |
-
|
197 |
-
if ( $part_data['width'] ) {
|
198 |
-
$classes[] = 'happyforms-part--width-' . esc_attr( $part_data['width'] ) . ' ';
|
199 |
-
}
|
200 |
|
201 |
-
|
202 |
-
$
|
203 |
}
|
204 |
|
205 |
-
|
206 |
-
$classes[] = 'happyforms-part--label-' . esc_attr( $part_data['label_placement'] ) . ' ';
|
207 |
-
}
|
208 |
-
|
209 |
-
if ( !empty( $part_data['css_class'] ) ) {
|
210 |
-
$classes[] = $part_data['css_class'];
|
211 |
-
}
|
212 |
-
|
213 |
-
$classes = implode( ' ', $classes );
|
214 |
-
?>
|
215 |
-
<div class="happyforms-part happyforms-part--checkbox happyforms-part-editable <?php echo esc_attr( $classes ); ?>" data-happyforms-id="<?php echo esc_attr( $part_data['id'] ); ?>">
|
216 |
-
<div class="happyforms-part__wrap">
|
217 |
-
<label class="happyforms-part__label">
|
218 |
-
<span class="label"><?php echo esc_html( $part_data['label'] ); ?></span>
|
219 |
-
<?php if ( 1 === intval( $part_data['required'] ) ) : ?>
|
220 |
-
<span class="happyforms-required"> <?php echo $required_text; ?></span>
|
221 |
-
<?php endif; ?>
|
222 |
-
</label>
|
223 |
-
<div class="happyforms-part__el">
|
224 |
-
<?php
|
225 |
-
if ( isset( $part_data['options'] ) ) {
|
226 |
-
$options = $part_data['options'];
|
227 |
-
|
228 |
-
foreach( $options as $option ) {
|
229 |
-
$option = wp_parse_args( $option, $this->get_option_defaults() );
|
230 |
-
|
231 |
-
$this->frontend_item_template( $part_data, $option, $part_data['required'], $form_data );
|
232 |
-
}
|
233 |
-
}
|
234 |
-
?>
|
235 |
-
</div>
|
236 |
-
<?php happyforms_print_part_description( $part_data ); ?>
|
237 |
-
<?php
|
238 |
-
if ( $form_data ) :
|
239 |
-
happyforms_message_notices( $form_data, $part_data['id'] );
|
240 |
-
endif;
|
241 |
-
?>
|
242 |
-
</div>
|
243 |
-
</div>
|
244 |
-
<?php
|
245 |
-
}
|
246 |
-
|
247 |
-
/**
|
248 |
-
* Get front end option (sub-part) template with parsed data.
|
249 |
-
*
|
250 |
-
* @since 1.0.0.
|
251 |
-
*
|
252 |
-
* @param array $part_data Form part data.
|
253 |
-
* @param array $option Option (form sub-part) data.
|
254 |
-
* @param int $requred Required field (1) or not.
|
255 |
-
*
|
256 |
-
* @return string Markup for the part option.
|
257 |
-
*/
|
258 |
-
public function frontend_item_template( $part_data, $option, $required, $form_data = array() ) {
|
259 |
-
?>
|
260 |
-
<label class="option-label" id="<?php echo esc_attr( $option['id'] ); ?>">
|
261 |
-
<input type="checkbox" class="happyforms-visuallyhidden" name="<?php echo esc_attr( happyforms_get_part_name( $part_data['id'], $form_data['ID'] ) ); ?>[]" value="<?php echo esc_attr( $option['label'] ); ?>"<?php if ( $option['is_default'] == 1 ) : ?> checked<?php endif; ?><?php if ( 1 === intval( $required ) ) : ?> required aria-required="true"<?php endif; ?>>
|
262 |
-
<span class="checkmark"></span>
|
263 |
-
|
264 |
-
<span class="label"><?php echo esc_attr( $option['label'] ); ?></span>
|
265 |
-
</label>
|
266 |
-
<?php
|
267 |
-
}
|
268 |
-
|
269 |
-
/**
|
270 |
-
* Get option's Backbone template for preview purposes. Passed to previewer to create a new Backbone view.
|
271 |
-
*
|
272 |
-
* @since 1.0.0.
|
273 |
-
*
|
274 |
-
* @return string Backbone template.
|
275 |
-
*/
|
276 |
-
public function preview_option_template() {
|
277 |
-
?>
|
278 |
-
<label class="option-label" id="<%= id %>">
|
279 |
-
<input type="checkbox" name="" value="<%= label %>">
|
280 |
-
<span class="checkmark"></span>
|
281 |
-
<span class="label"><%= label %></span>
|
282 |
-
</label>
|
283 |
-
<?php
|
284 |
}
|
285 |
|
286 |
/**
|
@@ -335,19 +154,19 @@ class HappyForms_Part_Checkbox extends HappyForms_Form_Part {
|
|
335 |
*
|
336 |
* @return array
|
337 |
*/
|
338 |
-
public function sanitize_value( $part_data = array() ) {
|
339 |
$sanitized_value = $this->get_default_value();
|
340 |
-
$
|
341 |
|
342 |
-
if ( isset( $_REQUEST[$
|
343 |
-
$requested_data = $_REQUEST[$
|
344 |
|
345 |
if ( is_array( $requested_data ) ) {
|
346 |
$sanitized_value = array_map( 'sanitize_text_field', $requested_data );
|
347 |
-
|
348 |
-
return $sanitized_value;
|
349 |
}
|
350 |
}
|
|
|
|
|
351 |
}
|
352 |
|
353 |
/**
|
@@ -361,27 +180,30 @@ class HappyForms_Part_Checkbox extends HappyForms_Form_Part {
|
|
361 |
* @return string|object
|
362 |
*/
|
363 |
public function validate_value( $part_data, $value ) {
|
364 |
-
$part_id = $part_data['id'];
|
365 |
$validated_value = $value;
|
366 |
|
367 |
if ( 1 === $part_data['required'] && empty( $validated_value ) ) {
|
368 |
-
$validated_value = new WP_Error(
|
|
|
369 |
}
|
370 |
|
371 |
-
|
372 |
-
$
|
373 |
|
374 |
-
|
375 |
-
|
|
|
376 |
}
|
377 |
|
378 |
-
|
379 |
-
|
380 |
-
|
381 |
-
|
|
|
|
|
382 |
}
|
383 |
|
384 |
-
return $
|
385 |
}
|
386 |
|
387 |
}
|
3 |
class HappyForms_Part_Checkbox extends HappyForms_Form_Part {
|
4 |
|
5 |
public $type = 'checkbox';
|
|
|
|
|
|
|
6 |
|
7 |
public function __construct() {
|
8 |
$this->label = __( 'Multiple Choice', 'happyforms' );
|
9 |
$this->description = __( 'For checkboxes allowing multiple selections.', 'happyforms' );
|
10 |
+
|
11 |
+
add_filter( 'happyforms_part_class', array( $this, 'html_part_class' ), 10, 3 );
|
12 |
}
|
13 |
|
14 |
/**
|
63 |
);
|
64 |
}
|
65 |
|
66 |
+
private function get_option_defaults() {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
67 |
return array(
|
68 |
'is_default' => 0,
|
69 |
'label' => ''
|
77 |
*
|
78 |
* @return string
|
79 |
*/
|
80 |
+
public function customize_templates() {
|
81 |
+
require_once( happyforms_get_include_folder() . '/templates/parts/customize-checkbox.php' );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
82 |
}
|
83 |
|
84 |
/**
|
92 |
* @return string Markup for the form part.
|
93 |
*/
|
94 |
public function frontend_template( $part_data = array(), $form_data = array() ) {
|
95 |
+
$part = wp_parse_args( $part_data, $this->get_customize_defaults() );
|
96 |
+
$form = $form_data;
|
|
|
|
|
|
|
|
|
|
|
|
|
97 |
|
98 |
+
foreach( $part['options'] as $o => $option ) {
|
99 |
+
$part['options'][$o] = wp_parse_args( $option, $this->get_option_defaults() );
|
100 |
}
|
101 |
|
102 |
+
include( happyforms_get_include_folder() . '/templates/parts/frontend-checkbox.php' );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
103 |
}
|
104 |
|
105 |
/**
|
154 |
*
|
155 |
* @return array
|
156 |
*/
|
157 |
+
public function sanitize_value( $part_data = array(), $form_data = array() ) {
|
158 |
$sanitized_value = $this->get_default_value();
|
159 |
+
$part_name = happyforms_get_part_name( $part_data, $form_data );
|
160 |
|
161 |
+
if ( isset( $_REQUEST[$part_name] ) ) {
|
162 |
+
$requested_data = $_REQUEST[$part_name];
|
163 |
|
164 |
if ( is_array( $requested_data ) ) {
|
165 |
$sanitized_value = array_map( 'sanitize_text_field', $requested_data );
|
|
|
|
|
166 |
}
|
167 |
}
|
168 |
+
|
169 |
+
return $sanitized_value;
|
170 |
}
|
171 |
|
172 |
/**
|
180 |
* @return string|object
|
181 |
*/
|
182 |
public function validate_value( $part_data, $value ) {
|
|
|
183 |
$validated_value = $value;
|
184 |
|
185 |
if ( 1 === $part_data['required'] && empty( $validated_value ) ) {
|
186 |
+
$validated_value = new WP_Error( 'missing_required_field' );
|
187 |
+
return $validated_value;
|
188 |
}
|
189 |
|
190 |
+
$options = wp_list_pluck( $part_data['options'], 'label' );
|
191 |
+
$intersection = array_intersect( $options, $validated_value );
|
192 |
|
193 |
+
if ( ! count( $intersection ) ) {
|
194 |
+
$validated_value = new WP_Error( 'not_valid_value' );
|
195 |
+
return $validated_value;
|
196 |
}
|
197 |
|
198 |
+
return $validated_value;
|
199 |
+
}
|
200 |
+
|
201 |
+
public function html_part_class( $class, $part_data, $form_data ) {
|
202 |
+
if ( isset( $part_data['display_type'] ) && 'block' === $part_data['display_type'] ) {
|
203 |
+
$class[] = 'display-type--block';
|
204 |
}
|
205 |
|
206 |
+
return $class;
|
207 |
}
|
208 |
|
209 |
}
|
inc/classes/parts/class-part-date.php
CHANGED
@@ -3,11 +3,12 @@
|
|
3 |
class HappyForms_Part_Date extends HappyForms_Form_Part {
|
4 |
|
5 |
public $type = 'date';
|
6 |
-
public $template_id = 'happyforms-date-template';
|
7 |
|
8 |
public function __construct() {
|
9 |
$this->label = __( 'Date', 'happyforms' );
|
10 |
$this->description = __( 'For formatted day, month, year and or time fields.', 'happyforms' );
|
|
|
|
|
11 |
}
|
12 |
|
13 |
/**
|
@@ -69,72 +70,8 @@ class HappyForms_Part_Date extends HappyForms_Form_Part {
|
|
69 |
*
|
70 |
* @return string
|
71 |
*/
|
72 |
-
public function
|
73 |
-
|
74 |
-
<p>
|
75 |
-
<label for="<%= instance.id %>_title"><?php _e( 'Title', 'happyforms' ); ?></label>
|
76 |
-
<input type="text" id="<%= instance.id %>_title" class="widefat title" value="<%= instance.label %>" data-bind="label" />
|
77 |
-
</p>
|
78 |
-
<p>
|
79 |
-
<label for="<%= instance.id %>_label_placement"><?php _e( 'Title placement', 'happyforms' ); ?></label>
|
80 |
-
<select id="<%= instance.id %>_label_placement" data-bind="label_placement">
|
81 |
-
<option value="above"<%= (instance.label_placement == 'above') ? ' selected' : '' %>><?php _e( 'Above', 'happyforms' ); ?></option>
|
82 |
-
<option value="left"<%= (instance.label_placement == 'left') ? ' selected' : '' %>><?php _e( 'Left', 'happyforms' ); ?></option>
|
83 |
-
<option value="below"<%= (instance.label_placement == 'below') ? ' selected' : '' %>><?php _e( 'Below', 'happyforms' ); ?></option>
|
84 |
-
</select>
|
85 |
-
</p>
|
86 |
-
<p class="label_placement-options" style="display: none">
|
87 |
-
<label>
|
88 |
-
<input type="checkbox" class="checkbox apply-all-check" value="" data-apply-to="label_placement" /> <?php _e( 'Apply to all parts', 'happyforms' ); ?>
|
89 |
-
</label>
|
90 |
-
</p>
|
91 |
-
<p>
|
92 |
-
<label for="<%= instance.id %>_description"><?php _e( 'Description', 'happyforms' ); ?></label>
|
93 |
-
<textarea id="<%= instance.id %>_description" data-bind="description"><%= instance.description %></textarea>
|
94 |
-
</p>
|
95 |
-
<p class="tooltip-description-wrap" style="display: <%= (instance.description != '') ? 'block' : 'none' %>">
|
96 |
-
<label>
|
97 |
-
<input type="checkbox" class="checkbox" value="1" <% if ( instance.tooltip_description ) { %>checked="checked"<% } %> data-bind="tooltip_description" /> <?php _e( 'Show description in a tooltip', 'happyforms' ); ?>
|
98 |
-
</label>
|
99 |
-
</p>
|
100 |
-
<p>
|
101 |
-
<label for="<%= instance.id %>_date_type"><?php _e( 'Show', 'happyforms' ); ?></label>
|
102 |
-
<select id="<%= instance.id %>_date_type" name="date_type" data-bind="date_type" class="widefat">
|
103 |
-
<option value="date"<%= (instance.date_type == 'date') ? ' selected' : '' %>><?php _e( 'Date', 'happyforms' ); ?></option>
|
104 |
-
<option value="datetime"<%= (instance.date_type == 'datetime') ? ' selected' : '' %>><?php _e( 'Date & Time', 'happyforms' ); ?></option>
|
105 |
-
<option value="time"<%= (instance.date_type == 'time') ? ' selected' : '' %>><?php _e( 'Time', 'happyforms' ); ?></option>
|
106 |
-
</select>
|
107 |
-
</p>
|
108 |
-
<p class="time-options"<%= (instance.date_type == 'date') ? ' style="display: none"' : '' %>>
|
109 |
-
<label for="<%= instance.id %>_time_format"><?php _e( 'Time format', 'happyforms' ); ?></label>
|
110 |
-
<select id="<%= instance.id %>_time_format" name="time_format" data-bind="time_format" class="widefat">
|
111 |
-
<option value="12"<%= (instance.time_format == '12') ? ' selected' : '' %>><?php _e( '12h', 'happyforms' ); ?></option>
|
112 |
-
<option value="24"<%= (instance.time_format == '24') ? ' selected' : '' %>><?php _e( '24h', 'happyforms' ); ?></option>
|
113 |
-
</select>
|
114 |
-
</p>
|
115 |
-
<p>
|
116 |
-
<label for="<%= instance.id %>_width"><?php _e( 'Width', 'happyforms' ); ?></label>
|
117 |
-
<select id="<%= instance.id %>_width" name="width" data-bind="width" class="widefat">
|
118 |
-
<option value="full"<%= (instance.width == 'full') ? ' selected' : '' %>><?php _e( 'Full', 'happyforms' ); ?></option>
|
119 |
-
<option value="half"<%= (instance.width == 'half') ? ' selected' : '' %>><?php _e( 'Half', 'happyforms' ); ?></option>
|
120 |
-
<option value="third"<%= (instance.width == 'third') ? ' selected' : '' %>><?php _e( 'One third', 'happyforms' ); ?></option>
|
121 |
-
</select>
|
122 |
-
</p>
|
123 |
-
<p class="width-options" style="display: none">
|
124 |
-
<label>
|
125 |
-
<input type="checkbox" class="checkbox apply-all-check" value="" data-apply-to="width" /> <?php _e( 'Apply to all parts', 'happyforms' ); ?>
|
126 |
-
</label>
|
127 |
-
</p>
|
128 |
-
<p>
|
129 |
-
<label for="<%= instance.id %>_css_class"><?php _e( 'Custom CSS class', 'happyforms' ); ?></label>
|
130 |
-
<input type="text" id="<%= instance.id %>_css_class" class="widefat title" value="<%= instance.css_class %>" data-bind="css_class" />
|
131 |
-
</p>
|
132 |
-
<p>
|
133 |
-
<label>
|
134 |
-
<input type="checkbox" class="checkbox" value="1" <% if ( instance.required ) { %>checked="checked"<% } %> data-bind="required" /> <?php _e( 'This is a required field', 'happyforms' ); ?>
|
135 |
-
</label>
|
136 |
-
</p>
|
137 |
-
<?php
|
138 |
}
|
139 |
|
140 |
/**
|
@@ -148,131 +85,10 @@ class HappyForms_Part_Date extends HappyForms_Form_Part {
|
|
148 |
* @return string Markup for the form part.
|
149 |
*/
|
150 |
public function frontend_template( $part_data = array(), $form_data = array() ) {
|
151 |
-
$
|
152 |
-
$
|
153 |
-
$html_id = 'happyforms-' . $form_data['ID'] . '_' . esc_attr( $part_data['id'] );
|
154 |
-
|
155 |
-
$classes = array('happyforms-part--date', 'happyforms-part-date');
|
156 |
-
|
157 |
-
if ( $part_data['width'] ) {
|
158 |
-
$classes[] = 'happyforms-part--width-' . esc_attr( $part_data['width'] ) . ' ';
|
159 |
-
}
|
160 |
-
|
161 |
-
if ( $part_data['label_placement'] ) {
|
162 |
-
$classes[] = 'happyforms-part--label-' . esc_attr( $part_data['label_placement'] ) . ' ';
|
163 |
-
}
|
164 |
-
|
165 |
-
if ( !empty( $part_data['css_class'] ) ) {
|
166 |
-
$classes[] = $part_data['css_class'];
|
167 |
-
}
|
168 |
|
169 |
-
|
170 |
-
|
171 |
-
$classes = implode( ' ', $classes );
|
172 |
-
?>
|
173 |
-
<div class="happyforms-part happyforms-part-editable <?php echo esc_attr( $classes ); ?>" data-happyforms-id="<?php echo esc_attr( $part_data['id'] ); ?>">
|
174 |
-
<div class="happyforms-part__wrap">
|
175 |
-
<label for="<?php echo esc_attr( $html_id ); ?>" class="happyforms-part__label">
|
176 |
-
<span class="label"><?php echo esc_html( $part_data['label'] ); ?></span>
|
177 |
-
<?php if ( 1 === intval( $part_data['required'] ) ) : ?>
|
178 |
-
<span class="happyforms-required"> <?php echo $required_text; ?></span>
|
179 |
-
<?php endif; ?>
|
180 |
-
</label>
|
181 |
-
<div class="happyforms-part__el">
|
182 |
-
<?php if ( is_customize_preview() || $part_data['date_type'] === 'datetime' || $part_data['date_type'] === 'date' ) : ?>
|
183 |
-
<div class="happyforms-part__select-wrap happyforms-part-date__date-input">
|
184 |
-
<select name="<?php echo esc_attr( happyforms_get_part_name( $part_data['id'], $form_data['ID'] ) ); ?>[month]"<?php if ( 1 === $part_data['required'] ) : ?> required aria-required="true"<?php endif; ?>>
|
185 |
-
<option value=""><?php _e( 'Month', 'happyforms' ); ?></option>
|
186 |
-
<?php for ( $i = 1; $i <= 12; $i++ ) : ?>
|
187 |
-
<option value="<?php echo $i; ?>"><?php echo date( 'F', mktime( 0, 0, 0, $i) ); ?></option>
|
188 |
-
<?php endfor; ?>
|
189 |
-
</select>
|
190 |
-
</div>
|
191 |
-
<div class="happyforms-part__select-wrap happyforms-part-date__date-input">
|
192 |
-
<select name="<?php echo esc_attr( happyforms_get_part_name( $part_data['id'], $form_data['ID'] ) ); ?>[day]"<?php if ( 1 === $part_data['required'] ) : ?> required aria-required="true"<?php endif; ?>>
|
193 |
-
<option value=""><?php _e( 'Day', 'happyforms' ); ?></option>
|
194 |
-
<?php for ( $i = 1; $i <= 31; $i++ ) : ?>
|
195 |
-
<option value="<?php echo $i; ?>"><?php echo $i; ?></option>
|
196 |
-
<?php endfor; ?>
|
197 |
-
</select>
|
198 |
-
</div>
|
199 |
-
<div class="happyforms-part__select-wrap happyforms-part-date__date-input">
|
200 |
-
<select name="<?php echo esc_attr( happyforms_get_part_name( $part_data['id'], $form_data['ID'] ) ); ?>[year]"<?php if ( 1 === $part_data['required'] ) : ?> required aria-required="true"<?php endif; ?>>
|
201 |
-
<option value=""><?php _e( 'Year', 'happyforms' ); ?></option>
|
202 |
-
<?php
|
203 |
-
$year_cutoff = 1910;
|
204 |
-
$year_current = date('Y');
|
205 |
-
|
206 |
-
for ( $i = $year_current; $i >= $year_cutoff; $i-- ) :
|
207 |
-
?>
|
208 |
-
<option value="<?php echo $i; ?>"><?php echo $i; ?></option>
|
209 |
-
<?php
|
210 |
-
endfor;
|
211 |
-
?>
|
212 |
-
</select>
|
213 |
-
</div>
|
214 |
-
<?php endif; ?>
|
215 |
-
<?php if ( is_customize_preview() || $part_data['date_type'] === 'datetime' || $part_data['date_type'] === 'time' ) : ?>
|
216 |
-
<div class="happyforms-part__select-wrap happyforms-part-date__time-input">
|
217 |
-
<select name="<?php echo esc_attr( happyforms_get_part_name( $part_data['id'], $form_data['ID'] ) ); ?>[hour]"<?php if ( 1 === $part_data['required'] ) : ?> required aria-required="true"<?php endif; ?>>
|
218 |
-
<option value=""><?php _e( 'Hour', 'happyforms' ); ?></option>
|
219 |
-
<?php
|
220 |
-
if ( 24 === $part_data['time_format'] ) :
|
221 |
-
$i_min = 0;
|
222 |
-
$i_max = 24;
|
223 |
-
else:
|
224 |
-
$i_min = 1;
|
225 |
-
$i_max = 13;
|
226 |
-
endif;
|
227 |
-
|
228 |
-
if ( !is_customize_preview() ) :
|
229 |
-
for ( $i = $i_min; $i < $i_max; $i++ ) :
|
230 |
-
?>
|
231 |
-
<option value="<?php echo $i; ?>"><?php echo $i; ?></option>
|
232 |
-
<?php
|
233 |
-
endfor;
|
234 |
-
else:
|
235 |
-
for ( $i = 0; $i < 24; $i++ ) :
|
236 |
-
?>
|
237 |
-
<option value="<?php echo $i; ?>" class="<?php echo ($i > 12) ? 'format-24' : ''; ?>" style="<?php echo ($i > 12 && $part_data['time_format'] == 12) ? 'display: none' : ''; ?>"><?php echo $i; ?></option>
|
238 |
-
<?php
|
239 |
-
endfor;
|
240 |
-
endif;
|
241 |
-
?>
|
242 |
-
</select>
|
243 |
-
</div>
|
244 |
-
<div class="happyforms-part__select-wrap happyforms-part-date__time-input">
|
245 |
-
<select name="<?php echo esc_attr( happyforms_get_part_name( $part_data['id'], $form_data['ID'] ) ); ?>[minute]"<?php if ( 1 === $part_data['required'] ) : ?> required aria-required="true"<?php endif; ?>>
|
246 |
-
<option value=""><?php _e( 'Minute', 'happyforms' ); ?></option>
|
247 |
-
<?php
|
248 |
-
for ( $i = 0; $i < 60; $i++ ) :
|
249 |
-
?>
|
250 |
-
<option value="<?php echo $i; ?>"><?php echo $i; ?></option>
|
251 |
-
<?php
|
252 |
-
endfor;
|
253 |
-
?>
|
254 |
-
</select>
|
255 |
-
</div>
|
256 |
-
<?php if ( is_customize_preview() || 12 == $part_data['time_format'] ) : ?>
|
257 |
-
<div class="happyforms-part__select-wrap happyforms-part-date__time-input happyforms-part-date__time-input--period">
|
258 |
-
<select name="<?php echo esc_attr( happyforms_get_part_name( $part_data['id'], $form_data['ID'] ) ); ?>[period]"<?php if ( 1 === $part_data['required'] ) : ?> required aria-required="true"<?php endif; ?>>
|
259 |
-
<option value=""><?php _e( 'Period', 'happyforms' ); ?></option>
|
260 |
-
<option value="AM"><?php _e( 'AM', 'happyforms' ); ?></option>
|
261 |
-
<option value="PM"><?php _e( 'PM', 'happyforms' ); ?></option>
|
262 |
-
</select>
|
263 |
-
</div>
|
264 |
-
<?php endif; ?>
|
265 |
-
<?php endif; ?>
|
266 |
-
</div>
|
267 |
-
<?php happyforms_print_part_description( $part_data ); ?>
|
268 |
-
<?php
|
269 |
-
if ( $form_data ) :
|
270 |
-
happyforms_message_notices( $form_data, $part_data['id'] );
|
271 |
-
endif;
|
272 |
-
?>
|
273 |
-
</div>
|
274 |
-
</div>
|
275 |
-
<?php
|
276 |
}
|
277 |
|
278 |
/**
|
@@ -308,12 +124,12 @@ class HappyForms_Part_Date extends HappyForms_Form_Part {
|
|
308 |
*
|
309 |
* @return string
|
310 |
*/
|
311 |
-
public function sanitize_value( $part_data = array() ) {
|
312 |
$original_value = $this->get_default_value();
|
313 |
-
$
|
314 |
|
315 |
-
if ( isset( $_REQUEST[$
|
316 |
-
$data = $_REQUEST[$
|
317 |
|
318 |
if ( is_array( $data ) ) {
|
319 |
foreach( $data as $key => $date_part ) {
|
@@ -390,6 +206,14 @@ class HappyForms_Part_Date extends HappyForms_Form_Part {
|
|
390 |
return $validated_value;
|
391 |
}
|
392 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
393 |
/**
|
394 |
* Enqueue scripts in customizer area.
|
395 |
*
|
3 |
class HappyForms_Part_Date extends HappyForms_Form_Part {
|
4 |
|
5 |
public $type = 'date';
|
|
|
6 |
|
7 |
public function __construct() {
|
8 |
$this->label = __( 'Date', 'happyforms' );
|
9 |
$this->description = __( 'For formatted day, month, year and or time fields.', 'happyforms' );
|
10 |
+
|
11 |
+
add_filter( 'happyforms_part_class', array( $this, 'html_part_class' ), 10, 3 );
|
12 |
}
|
13 |
|
14 |
/**
|
70 |
*
|
71 |
* @return string
|
72 |
*/
|
73 |
+
public function customize_templates() {
|
74 |
+
require_once( happyforms_get_include_folder() . '/templates/parts/customize-date.php' );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
75 |
}
|
76 |
|
77 |
/**
|
85 |
* @return string Markup for the form part.
|
86 |
*/
|
87 |
public function frontend_template( $part_data = array(), $form_data = array() ) {
|
88 |
+
$part = wp_parse_args( $part_data, $this->get_customize_defaults() );
|
89 |
+
$form = $form_data;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
90 |
|
91 |
+
include( happyforms_get_include_folder() . '/templates/parts/frontend-date.php' );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
92 |
}
|
93 |
|
94 |
/**
|
124 |
*
|
125 |
* @return string
|
126 |
*/
|
127 |
+
public function sanitize_value( $part_data = array(), $form_data = array() ) {
|
128 |
$original_value = $this->get_default_value();
|
129 |
+
$part_name = happyforms_get_part_name( $part_data, $form_data );
|
130 |
|
131 |
+
if ( isset( $_REQUEST[$part_name] ) ) {
|
132 |
+
$data = $_REQUEST[$part_name];
|
133 |
|
134 |
if ( is_array( $data ) ) {
|
135 |
foreach( $data as $key => $date_part ) {
|
206 |
return $validated_value;
|
207 |
}
|
208 |
|
209 |
+
public function html_part_class( $class, $part_data, $form_data ) {
|
210 |
+
if ( isset( $part_data['date_type'] ) ) {
|
211 |
+
$class[] = 'happyforms-part-date--' . $part_data['date_type'];
|
212 |
+
}
|
213 |
+
|
214 |
+
return $class;
|
215 |
+
}
|
216 |
+
|
217 |
/**
|
218 |
* Enqueue scripts in customizer area.
|
219 |
*
|
inc/classes/parts/class-part-email.php
CHANGED
@@ -3,12 +3,12 @@
|
|
3 |
class HappyForms_Part_Email extends HappyForms_Form_Part {
|
4 |
|
5 |
public $type = 'email';
|
6 |
-
public $template_id = 'happyforms-email-template';
|
7 |
-
public $preview_confirmation_template_id = 'happyforms-email-confirmation-template';
|
8 |
|
9 |
public function __construct() {
|
10 |
$this->label = __( 'Email', 'happyforms' );
|
11 |
$this->description = __( 'For formatted email addresses. The \'@\' symbol is required.', 'happyforms' );
|
|
|
|
|
12 |
}
|
13 |
|
14 |
/**
|
@@ -44,10 +44,6 @@ class HappyForms_Part_Email extends HappyForms_Form_Part {
|
|
44 |
'default' => 0,
|
45 |
'sanitize' => 'intval'
|
46 |
),
|
47 |
-
'confirmation_field_id' => array(
|
48 |
-
'default' => '',
|
49 |
-
'sanitize' => 'sanitize_text_field'
|
50 |
-
),
|
51 |
'confirmation_field_label' => array(
|
52 |
'default' => __( 'Confirm Email', 'happyforms' ),
|
53 |
'sanitize' => 'sanitize_text_field'
|
@@ -78,70 +74,8 @@ class HappyForms_Part_Email extends HappyForms_Form_Part {
|
|
78 |
*
|
79 |
* @return string
|
80 |
*/
|
81 |
-
public function
|
82 |
-
|
83 |
-
<p>
|
84 |
-
<label for="<%= instance.id %>_title"><?php _e( 'Title', 'happyforms' ); ?></label>
|
85 |
-
<input type="text" id="<%= instance.id %>_title" class="widefat title" value="<%= instance.label %>" data-bind="label" />
|
86 |
-
</p>
|
87 |
-
<p>
|
88 |
-
<label for="<%= instance.id %>_label_placement"><?php _e( 'Title placement', 'happyforms' ); ?></label>
|
89 |
-
<select id="<%= instance.id %>_label_placement" data-bind="label_placement">
|
90 |
-
<option value="above"<%= (instance.label_placement == 'above') ? ' selected' : '' %>><?php _e( 'Above', 'happyforms' ); ?></option>
|
91 |
-
<option value="left"<%= (instance.label_placement == 'left') ? ' selected' : '' %>><?php _e( 'Left', 'happyforms' ); ?></option>
|
92 |
-
<option value="below"<%= (instance.label_placement == 'below') ? ' selected' : '' %>><?php _e( 'Below', 'happyforms' ); ?></option>
|
93 |
-
</select>
|
94 |
-
</p>
|
95 |
-
<p class="label_placement-options" style="display: none">
|
96 |
-
<label>
|
97 |
-
<input type="checkbox" class="checkbox apply-all-check" value="" data-apply-to="label_placement" /> <?php _e( 'Apply to all parts', 'happyforms' ); ?>
|
98 |
-
</label>
|
99 |
-
</p>
|
100 |
-
<p>
|
101 |
-
<label for="<%= instance.id %>_description"><?php _e( 'Description', 'happyforms' ); ?></label>
|
102 |
-
<textarea id="<%= instance.id %>_description" data-bind="description"><%= instance.description %></textarea>
|
103 |
-
</p>
|
104 |
-
<p class="tooltip-description-wrap" style="display: <%= (instance.description != '') ? 'block' : 'none' %>">
|
105 |
-
<label>
|
106 |
-
<input type="checkbox" class="checkbox" value="1" <% if ( instance.tooltip_description ) { %>checked="checked"<% } %> data-bind="tooltip_description" /> <?php _e( 'Show description in a tooltip', 'happyforms' ); ?>
|
107 |
-
</label>
|
108 |
-
</p>
|
109 |
-
<p>
|
110 |
-
<label for="<%= instance.id %>_placeholder"><?php _e( 'Placeholder', 'happyforms' ); ?></label>
|
111 |
-
<input type="text" id="<%= instance.id %>_placeholder" class="widefat title" value="<%= instance.placeholder %>" data-bind="placeholder" />
|
112 |
-
</p>
|
113 |
-
<p>
|
114 |
-
<label for="<%= instance.id %>_width"><?php _e( 'Width', 'happyforms' ); ?></label>
|
115 |
-
<select id="<%= instance.id %>_width" name="width" data-bind="width" class="widefat">
|
116 |
-
<option value="full"<%= (instance.width == 'full') ? ' selected' : '' %>><?php _e( 'Full', 'happyforms' ); ?></option>
|
117 |
-
<option value="half"<%= (instance.width == 'half') ? ' selected' : '' %>><?php _e( 'Half', 'happyforms' ); ?></option>
|
118 |
-
<option value="third"<%= (instance.width == 'third') ? ' selected' : '' %>><?php _e( 'One third', 'happyforms' ); ?></option>
|
119 |
-
</select>
|
120 |
-
</p>
|
121 |
-
<p class="width-options" style="display: none">
|
122 |
-
<label>
|
123 |
-
<input type="checkbox" class="checkbox apply-all-check" value="" data-apply-to="width" /> <?php _e( 'Apply to all parts', 'happyforms' ); ?>
|
124 |
-
</label>
|
125 |
-
</p>
|
126 |
-
<p>
|
127 |
-
<label for="<%= instance.id %>_css_class"><?php _e( 'Custom CSS class', 'happyforms' ); ?></label>
|
128 |
-
<input type="text" id="<%= instance.id %>_css_class" class="widefat title" value="<%= instance.css_class %>" data-bind="css_class" />
|
129 |
-
</p>
|
130 |
-
<p>
|
131 |
-
<label>
|
132 |
-
<input type="checkbox" class="checkbox confirmation-checkbox" value="1" <% if ( instance.confirmation_field ) { %>checked="checked"<% } %> data-bind="confirmation_field" /> <?php _e( 'Require confirmation of the value', 'happyforms' ); ?>
|
133 |
-
</label>
|
134 |
-
</p>
|
135 |
-
<p class="confirmation-field-setting" style="display: <%= (instance.confirmation_field == 1) ? 'block' : 'none' %>">
|
136 |
-
<label for="<%= instance.id %>_confirmation_field_label"><?php _e( 'Confirmation field title', 'happyforms' ); ?></label>
|
137 |
-
<input type="text" id="<%= instance.id %>_confirmation_field_label" class="widefat title" value="<%= instance.confirmation_field_label %>" data-bind="confirmation_field_label" />
|
138 |
-
</p>
|
139 |
-
<p>
|
140 |
-
<label>
|
141 |
-
<input type="checkbox" class="checkbox" value="1" <% if ( instance.required ) { %>checked="checked"<% } %> data-bind="required" /> <?php _e( 'This is a required field', 'happyforms' ); ?>
|
142 |
-
</label>
|
143 |
-
</p>
|
144 |
-
<?php
|
145 |
}
|
146 |
|
147 |
/**
|
@@ -155,89 +89,10 @@ class HappyForms_Part_Email extends HappyForms_Form_Part {
|
|
155 |
* @return string Markup for the form part.
|
156 |
*/
|
157 |
public function frontend_template( $part_data = array(), $form_data = array() ) {
|
158 |
-
$
|
159 |
-
$
|
160 |
-
$html_id = 'happyforms-' . $form_data['ID'] . '_' . esc_attr( $part_data['id'] );
|
161 |
-
|
162 |
-
$classes = array('happyforms-part--email');
|
163 |
-
|
164 |
-
if ( $part_data['width'] ) {
|
165 |
-
$classes[] = 'happyforms-part--width-' . esc_attr( $part_data['width'] ) . ' ';
|
166 |
-
}
|
167 |
-
|
168 |
-
if ( $part_data['label_placement'] ) {
|
169 |
-
$classes[] = 'happyforms-part--label-' . esc_attr( $part_data['label_placement'] ) . ' ';
|
170 |
-
}
|
171 |
-
|
172 |
-
if ( !empty( $part_data['css_class'] ) ) {
|
173 |
-
$classes[] = $part_data['css_class'];
|
174 |
-
}
|
175 |
-
|
176 |
-
$message_notices = '';
|
177 |
-
|
178 |
-
if ( $form_data ) {
|
179 |
-
$message_notices = happyforms_get_message_notices()->get_messages( $form_data, $part_data['id'] );
|
180 |
-
|
181 |
-
if ( !empty( $message_notices ) ) {
|
182 |
-
$classes[] = ' happyforms-part--error';
|
183 |
-
}
|
184 |
-
}
|
185 |
|
186 |
-
|
187 |
-
?>
|
188 |
-
<div class="happyforms-part happyforms-part-editable <?php echo esc_attr( $classes ); ?>" data-happyforms-id="<?php echo esc_attr( $part_data['id'] ); ?>">
|
189 |
-
<div class="happyforms-part__wrap">
|
190 |
-
<label for="<?php echo esc_attr( $html_id ); ?>" class="happyforms-part__label">
|
191 |
-
<span class="label"><?php echo esc_html( $part_data['label'] ); ?></span>
|
192 |
-
<?php if ( 1 === intval( $part_data['required'] ) ) : ?>
|
193 |
-
<span class="happyforms-required"> <?php echo $required_text; ?></span>
|
194 |
-
<?php endif; ?>
|
195 |
-
</label>
|
196 |
-
<input type="email" id="<?php echo esc_attr( $html_id ); ?>" name="<?php echo esc_attr( happyforms_get_part_name( $part_data['id'], $form_data['ID'] ) ); ?>" placeholder="<?php echo esc_attr( $part_data['placeholder'] ); ?>" class="happyforms-part__el happyforms-part__el--text-input" <?php if ( 1 === $part_data['required'] ) : ?> required aria-required="true"<?php endif; ?> />
|
197 |
-
<?php happyforms_print_part_description( $part_data ); ?>
|
198 |
-
<?php
|
199 |
-
if ( $form_data ) :
|
200 |
-
happyforms_message_notices( $form_data, $part_data['id'] );
|
201 |
-
endif;
|
202 |
-
?>
|
203 |
-
</div>
|
204 |
-
<?php if ( 1 === $part_data['confirmation_field'] ) : ?>
|
205 |
-
<div class="happyforms-part__wrap happyforms-part__wrap--confirmation" id="<?php echo esc_attr( $part_data['confirmation_field_id'] ); ?>">
|
206 |
-
<div class="happyforms-message-notices" style="display: none">
|
207 |
-
<div class="happyforms-message-notice error">
|
208 |
-
<h2><?php _e( 'Fields do not match.', 'happyforms' ); ?></h2>
|
209 |
-
</div>
|
210 |
-
</div>
|
211 |
-
<label for="<?php echo esc_attr( $part_data['confirmation_field_id'] ); ?>_input" class="happyforms-part__label happyforms-part__label--confirmation">
|
212 |
-
<span class="label"><?php echo esc_html( $part_data['confirmation_field_label'] ); ?></span>
|
213 |
-
<?php if ( 1 === intval( $part_data['required'] ) ) : ?>
|
214 |
-
<span class="happyforms-required"> <?php echo $required_text; ?></span>
|
215 |
-
<?php endif; ?>
|
216 |
-
</label>
|
217 |
-
<input type="email" id="<?php echo esc_attr( $part_data['confirmation_field_id'] ); ?>_input" name="<?php echo esc_attr( $part_data['confirmation_field_id'] ); ?>" class="happyforms-part__el happyforms-part__el--text-input happyforms-confirmation-input" data-confirmation-of="<?php echo esc_attr( $part_data['id'] ); ?>" <?php if ( 1 === $part_data['required'] ) : ?> required aria-required="true"<?php endif; ?> />
|
218 |
-
</div>
|
219 |
-
<?php endif; ?>
|
220 |
-
</div>
|
221 |
-
<?php
|
222 |
-
}
|
223 |
-
|
224 |
-
/**
|
225 |
-
* Get confirmation field Backbone template for preview purposes.
|
226 |
-
*
|
227 |
-
* @since 1.0.0.
|
228 |
-
*
|
229 |
-
* @return string Backbone template.
|
230 |
-
*/
|
231 |
-
public function preview_confirmation_template() {
|
232 |
-
?>
|
233 |
-
<div class="happyforms-part__el happyforms-part__el--confirmation" id="<%= confirmation_field_id %>">
|
234 |
-
<label for="" class="happyforms-part__label happyforms-part__label--confirmation">
|
235 |
-
<span class="label"><%= confirmation_field_label %></span>
|
236 |
-
<span class="happyforms-required"> *</span>
|
237 |
-
</label>
|
238 |
-
<input type="email" class="happyforms-part__el happyforms-part__el--text-input" required aria-required="true" />
|
239 |
-
</div>
|
240 |
-
<?php
|
241 |
}
|
242 |
|
243 |
/**
|
@@ -261,10 +116,6 @@ class HappyForms_Part_Email extends HappyForms_Form_Part {
|
|
261 |
'type' => 'error',
|
262 |
'message' => __( 'Confirmation field is required.', 'happyforms' )
|
263 |
),
|
264 |
-
'not_valid_confirmation_email' => array(
|
265 |
-
'type' => 'error',
|
266 |
-
'message' => __( 'Confirmation address is not a valid e-mail address.', 'happyforms' )
|
267 |
-
),
|
268 |
'emails_not_matching' => array(
|
269 |
'type' => 'error',
|
270 |
'message' => __( 'Email and confirmation email are not matching.', 'happyforms' )
|
@@ -281,18 +132,18 @@ class HappyForms_Part_Email extends HappyForms_Form_Part {
|
|
281 |
*
|
282 |
* @return string
|
283 |
*/
|
284 |
-
public function sanitize_value( $part_data = array() ) {
|
285 |
$sanitized_value = $this->get_default_value();
|
286 |
-
$
|
287 |
|
288 |
-
if ( isset( $_REQUEST[$
|
289 |
-
$sanitized_value =
|
290 |
}
|
291 |
|
292 |
-
if ( isset( $_REQUEST[$
|
293 |
$sanitized_value = array(
|
294 |
$sanitized_value,
|
295 |
-
|
296 |
);
|
297 |
}
|
298 |
|
@@ -310,39 +161,39 @@ class HappyForms_Part_Email extends HappyForms_Form_Part {
|
|
310 |
* @return string|object
|
311 |
*/
|
312 |
public function validate_value( $part_data, $value ) {
|
313 |
-
$
|
314 |
-
$validated_value = $value;
|
315 |
-
$has_confirmation_value = false;
|
316 |
|
317 |
-
if (
|
318 |
-
$
|
319 |
-
|
320 |
-
$validated_value = $validated_value[0];
|
321 |
}
|
322 |
|
323 |
-
if (
|
324 |
-
$validated_value = new
|
|
|
325 |
}
|
326 |
|
327 |
-
if (
|
328 |
-
$validated_value = new
|
|
|
329 |
}
|
330 |
|
331 |
-
|
332 |
-
if ( 1 === $part_data['required'] && empty( $validated_confirmation_value ) ) {
|
333 |
-
$validated_value = new WP_Error( $part_id, 'missing_required_confirmation_field' );
|
334 |
-
}
|
335 |
|
336 |
-
|
337 |
-
|
338 |
-
}
|
339 |
|
340 |
-
|
341 |
-
|
342 |
-
|
343 |
}
|
344 |
|
345 |
-
|
|
|
|
|
|
|
|
|
346 |
}
|
347 |
|
348 |
/**
|
3 |
class HappyForms_Part_Email extends HappyForms_Form_Part {
|
4 |
|
5 |
public $type = 'email';
|
|
|
|
|
6 |
|
7 |
public function __construct() {
|
8 |
$this->label = __( 'Email', 'happyforms' );
|
9 |
$this->description = __( 'For formatted email addresses. The \'@\' symbol is required.', 'happyforms' );
|
10 |
+
|
11 |
+
add_filter( 'happyforms_part_data_attributes', array( $this, 'html_part_data_attributes' ), 10, 3 );
|
12 |
}
|
13 |
|
14 |
/**
|
44 |
'default' => 0,
|
45 |
'sanitize' => 'intval'
|
46 |
),
|
|
|
|
|
|
|
|
|
47 |
'confirmation_field_label' => array(
|
48 |
'default' => __( 'Confirm Email', 'happyforms' ),
|
49 |
'sanitize' => 'sanitize_text_field'
|
74 |
*
|
75 |
* @return string
|
76 |
*/
|
77 |
+
public function customize_templates() {
|
78 |
+
require_once( happyforms_get_include_folder() . '/templates/parts/customize-email.php' );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
79 |
}
|
80 |
|
81 |
/**
|
89 |
* @return string Markup for the form part.
|
90 |
*/
|
91 |
public function frontend_template( $part_data = array(), $form_data = array() ) {
|
92 |
+
$part = wp_parse_args( $part_data, $this->get_customize_defaults() );
|
93 |
+
$form = $form_data;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
94 |
|
95 |
+
include( happyforms_get_include_folder() . '/templates/parts/frontend-email.php' );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
96 |
}
|
97 |
|
98 |
/**
|
116 |
'type' => 'error',
|
117 |
'message' => __( 'Confirmation field is required.', 'happyforms' )
|
118 |
),
|
|
|
|
|
|
|
|
|
119 |
'emails_not_matching' => array(
|
120 |
'type' => 'error',
|
121 |
'message' => __( 'Email and confirmation email are not matching.', 'happyforms' )
|
132 |
*
|
133 |
* @return string
|
134 |
*/
|
135 |
+
public function sanitize_value( $part_data = array(), $form_data = array() ) {
|
136 |
$sanitized_value = $this->get_default_value();
|
137 |
+
$part_name = happyforms_get_part_name( $part_data, $form_data );
|
138 |
|
139 |
+
if ( isset( $_REQUEST[$part_name] ) ) {
|
140 |
+
$sanitized_value = sanitize_text_field( $_REQUEST[$part_name] );
|
141 |
}
|
142 |
|
143 |
+
if ( isset( $_REQUEST[$part_name . '_confirmation'] ) ) {
|
144 |
$sanitized_value = array(
|
145 |
$sanitized_value,
|
146 |
+
sanitize_text_field( $_REQUEST[$part_name . '_confirmation'] )
|
147 |
);
|
148 |
}
|
149 |
|
161 |
* @return string|object
|
162 |
*/
|
163 |
public function validate_value( $part_data, $value ) {
|
164 |
+
$has_confirmation_value = is_array( $value );
|
165 |
+
$validated_value = $has_confirmation_value ? $value[0] : $value;
|
|
|
166 |
|
167 |
+
if ( $part_data['required'] && '' === $validated_value ) {
|
168 |
+
$validated_value = new WP_Error( 'missing_required_field' );
|
169 |
+
return $validated_value;
|
|
|
170 |
}
|
171 |
|
172 |
+
if ( ! is_email( $validated_value ) ) {
|
173 |
+
$validated_value = new WP_error( 'not_valid_email' );
|
174 |
+
return $validated_value;
|
175 |
}
|
176 |
|
177 |
+
if ( $has_confirmation_value && $value[0] !== $value[1] ) {
|
178 |
+
$validated_value = new WP_Error( 'emails_not_matching' );
|
179 |
+
return $validated_value;
|
180 |
}
|
181 |
|
182 |
+
$validated_value = sanitize_email( $validated_value );
|
|
|
|
|
|
|
183 |
|
184 |
+
return $validated_value;
|
185 |
+
}
|
|
|
186 |
|
187 |
+
public function html_part_data_attributes( $attributes, $part, $form ) {
|
188 |
+
if ( $this->type !== $part['type'] ) {
|
189 |
+
return $attributes;
|
190 |
}
|
191 |
|
192 |
+
if ( $part['confirmation_field'] ) {
|
193 |
+
$attributes['happyforms-require-confirmation'] = '';
|
194 |
+
}
|
195 |
+
|
196 |
+
return $attributes;
|
197 |
}
|
198 |
|
199 |
/**
|
inc/classes/parts/class-part-legal.php
CHANGED
@@ -39,6 +39,10 @@ class HappyForms_Part_Legal extends HappyForms_Form_Part {
|
|
39 |
'default' => 1,
|
40 |
'sanitize' => 'happyforms_sanitize_checkbox',
|
41 |
),
|
|
|
|
|
|
|
|
|
42 |
);
|
43 |
}
|
44 |
|
@@ -49,25 +53,8 @@ class HappyForms_Part_Legal extends HappyForms_Form_Part {
|
|
49 |
*
|
50 |
* @return string
|
51 |
*/
|
52 |
-
public function
|
53 |
-
|
54 |
-
<p>
|
55 |
-
<label for="<%= instance.id %>_width"><?php _e( 'Width', 'happyforms' ); ?></label>
|
56 |
-
<select id="<%= instance.id %>_width" name="width" data-bind="width" class="widefat">
|
57 |
-
<option value="full"<%= (instance.width == 'full') ? ' selected' : '' %>><?php _e( 'Full', 'happyforms' ); ?></option>
|
58 |
-
<option value="half"<%= (instance.width == 'half') ? ' selected' : '' %>><?php _e( 'Half', 'happyforms' ); ?></option>
|
59 |
-
<option value="third"<%= (instance.width == 'third') ? ' selected' : '' %>><?php _e( 'One third', 'happyforms' ); ?></option>
|
60 |
-
</select>
|
61 |
-
</p>
|
62 |
-
<p>
|
63 |
-
<label for="<%= instance.id %>_legal_text"><?php _e( 'Legal text', 'happyforms' ); ?></label>
|
64 |
-
<textarea id="<%= instance.id %>_legal_text" rows="5" name="legal_text" data-bind="legal_text" class="widefat"><%= instance.legal_text %></textarea>
|
65 |
-
</p>
|
66 |
-
<p>
|
67 |
-
<label for="<%= instance.id %>_css_class"><?php _e( 'Custom CSS class', 'happyforms' ); ?></label>
|
68 |
-
<input type="text" id="<%= instance.id %>_css_class" class="widefat title" value="<%= instance.css_class %>" data-bind="css_class" />
|
69 |
-
</p>
|
70 |
-
<?php
|
71 |
}
|
72 |
|
73 |
/**
|
@@ -81,37 +68,10 @@ class HappyForms_Part_Legal extends HappyForms_Form_Part {
|
|
81 |
* @return string Markup for the form part.
|
82 |
*/
|
83 |
public function frontend_template( $part_data = array(), $form_data = array() ) {
|
84 |
-
$
|
85 |
-
$
|
86 |
-
$html_id = 'happyforms-' . $form_data['ID'] . '_' . esc_attr( $part_data['id'] );
|
87 |
-
|
88 |
-
$classes = array('happyforms-part--legal');
|
89 |
-
|
90 |
-
if ( $part_data['width'] ) {
|
91 |
-
$classes[] = 'happyforms-part--width-' . esc_attr( $part_data['width'] ) . ' ';
|
92 |
-
}
|
93 |
-
|
94 |
-
if ( !empty( $part_data['css_class'] ) ) {
|
95 |
-
$classes[] = $part_data['css_class'] . ' ';
|
96 |
-
}
|
97 |
|
98 |
-
|
99 |
-
?>
|
100 |
-
<div class="happyforms-part happyforms-part-editable <?php echo esc_attr( $classes ); ?>" data-happyforms-id="<?php echo esc_attr( $part_data['id'] ); ?>">
|
101 |
-
<div class="happyforms-part__wrap">
|
102 |
-
<div class="happyforms-part__el">
|
103 |
-
<label>
|
104 |
-
<input id="<?php echo esc_attr( $html_id ); ?>" type="checkbox" name="<?php echo esc_attr( happyforms_get_part_name( $part_data['id'], $form_data['ID'] ) ); ?>" value="yes" required aria-required="true" /> <span><?php echo $part_data['legal_text']; ?></span>
|
105 |
-
</label>
|
106 |
-
</div>
|
107 |
-
</div>
|
108 |
-
<?php
|
109 |
-
if ( $form_data ) :
|
110 |
-
happyforms_message_notices( $form_data, $part_data['id'] );
|
111 |
-
endif;
|
112 |
-
?>
|
113 |
-
</div>
|
114 |
-
<?php
|
115 |
}
|
116 |
|
117 |
/**
|
@@ -143,12 +103,12 @@ class HappyForms_Part_Legal extends HappyForms_Form_Part {
|
|
143 |
*
|
144 |
* @return string
|
145 |
*/
|
146 |
-
public function sanitize_value( $part_data = array() ) {
|
147 |
$sanitized_value = $this->get_default_value();
|
148 |
-
$
|
149 |
|
150 |
-
if ( isset( $_REQUEST[$
|
151 |
-
$sanitized_value = sanitize_text_field( $_REQUEST[$
|
152 |
}
|
153 |
|
154 |
return $sanitized_value;
|
@@ -165,15 +125,16 @@ class HappyForms_Part_Legal extends HappyForms_Form_Part {
|
|
165 |
* @return string|object
|
166 |
*/
|
167 |
public function validate_value( $part_data, $value ) {
|
168 |
-
$part_id = $part_data['id'];
|
169 |
$validated_value = $value;
|
170 |
|
171 |
if ( empty( $validated_value ) ) {
|
172 |
-
$validated_value = new WP_Error(
|
|
|
173 |
}
|
174 |
|
175 |
if ( $validated_value !== 'yes' ) {
|
176 |
-
$validated_value = new WP_Error(
|
|
|
177 |
}
|
178 |
|
179 |
return $validated_value;
|
39 |
'default' => 1,
|
40 |
'sanitize' => 'happyforms_sanitize_checkbox',
|
41 |
),
|
42 |
+
'label' => array(
|
43 |
+
'default' => __( 'Legal', 'happyforms' ),
|
44 |
+
'sanitize' => 'sanitize_text_field',
|
45 |
+
),
|
46 |
);
|
47 |
}
|
48 |
|
53 |
*
|
54 |
* @return string
|
55 |
*/
|
56 |
+
public function customize_templates() {
|
57 |
+
require_once( happyforms_get_include_folder() . '/templates/parts/customize-legal.php' );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
58 |
}
|
59 |
|
60 |
/**
|
68 |
* @return string Markup for the form part.
|
69 |
*/
|
70 |
public function frontend_template( $part_data = array(), $form_data = array() ) {
|
71 |
+
$part = wp_parse_args( $part_data, $this->get_customize_defaults() );
|
72 |
+
$form = $form_data;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
73 |
|
74 |
+
include( happyforms_get_include_folder() . '/templates/parts/frontend-legal.php' );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
75 |
}
|
76 |
|
77 |
/**
|
103 |
*
|
104 |
* @return string
|
105 |
*/
|
106 |
+
public function sanitize_value( $part_data = array(), $form_data = array() ) {
|
107 |
$sanitized_value = $this->get_default_value();
|
108 |
+
$part_name = happyforms_get_part_name( $part_data, $form_data );
|
109 |
|
110 |
+
if ( isset( $_REQUEST[$part_name] ) ) {
|
111 |
+
$sanitized_value = sanitize_text_field( $_REQUEST[$part_name] );
|
112 |
}
|
113 |
|
114 |
return $sanitized_value;
|
125 |
* @return string|object
|
126 |
*/
|
127 |
public function validate_value( $part_data, $value ) {
|
|
|
128 |
$validated_value = $value;
|
129 |
|
130 |
if ( empty( $validated_value ) ) {
|
131 |
+
$validated_value = new WP_Error( 'missing_required_field' );
|
132 |
+
return $validated_value;
|
133 |
}
|
134 |
|
135 |
if ( $validated_value !== 'yes' ) {
|
136 |
+
$validated_value = new WP_Error( 'not_valid_value' );
|
137 |
+
return $validated_value;
|
138 |
}
|
139 |
|
140 |
return $validated_value;
|
inc/classes/parts/class-part-multi-line-text.php
CHANGED
@@ -3,7 +3,6 @@
|
|
3 |
class HappyForms_Part_MultiLineText extends HappyForms_Form_Part {
|
4 |
|
5 |
public $type = 'multi_line_text';
|
6 |
-
public $template_id = 'happyforms-multi-line-text-template';
|
7 |
|
8 |
public function __construct() {
|
9 |
$this->label = __( 'Long Text', 'happyforms' );
|
@@ -65,61 +64,8 @@ class HappyForms_Part_MultiLineText extends HappyForms_Form_Part {
|
|
65 |
*
|
66 |
* @return string
|
67 |
*/
|
68 |
-
public function
|
69 |
-
|
70 |
-
<p>
|
71 |
-
<label for="<%= instance.id %>_title"><?php _e( 'Title', 'happyforms' ); ?></label>
|
72 |
-
<input type="text" id="<%= instance.id %>_title" class="widefat title" value="<%= instance.label %>" data-bind="label" />
|
73 |
-
</p>
|
74 |
-
<p>
|
75 |
-
<label for="<%= instance.id %>_label_placement"><?php _e( 'Title placement', 'happyforms' ); ?></label>
|
76 |
-
<select id="<%= instance.id %>_label_placement" data-bind="label_placement">
|
77 |
-
<option value="above"<%= (instance.label_placement == 'above') ? ' selected' : '' %>><?php _e( 'Above', 'happyforms' ); ?></option>
|
78 |
-
<option value="left"<%= (instance.label_placement == 'left') ? ' selected' : '' %>><?php _e( 'Left', 'happyforms' ); ?></option>
|
79 |
-
<option value="below"<%= (instance.label_placement == 'below') ? ' selected' : '' %>><?php _e( 'Below', 'happyforms' ); ?></option>
|
80 |
-
</select>
|
81 |
-
</p>
|
82 |
-
<p class="label_placement-options" style="display: none">
|
83 |
-
<label>
|
84 |
-
<input type="checkbox" class="checkbox apply-all-check" value="" data-apply-to="label_placement" /> <?php _e( 'Apply to all parts', 'happyforms' ); ?>
|
85 |
-
</label>
|
86 |
-
</p>
|
87 |
-
<p>
|
88 |
-
<label for="<%= instance.id %>_description"><?php _e( 'Description', 'happyforms' ); ?></label>
|
89 |
-
<textarea id="<%= instance.id %>_description" data-bind="description"><%= instance.description %></textarea>
|
90 |
-
</p>
|
91 |
-
<p class="tooltip-description-wrap" style="display: <%= (instance.description != '') ? 'block' : 'none' %>">
|
92 |
-
<label>
|
93 |
-
<input type="checkbox" class="checkbox" value="1" <% if ( instance.tooltip_description ) { %>checked="checked"<% } %> data-bind="tooltip_description" /> <?php _e( 'Show description in a tooltip', 'happyforms' ); ?>
|
94 |
-
</label>
|
95 |
-
</p>
|
96 |
-
<p>
|
97 |
-
<label for="<%= instance.id %>_placeholder"><?php _e( 'Placeholder', 'happyforms' ); ?></label>
|
98 |
-
<input type="text" id="<%= instance.id %>_placeholder" class="widefat title" value="<%= instance.placeholder %>" data-bind="placeholder" />
|
99 |
-
</p>
|
100 |
-
<p>
|
101 |
-
<label for="<%= instance.id %>_width"><?php _e( 'Width', 'happyforms' ); ?></label>
|
102 |
-
<select id="<%= instance.id %>_width" name="width" data-bind="width" class="widefat">
|
103 |
-
<option value="full"<%= (instance.width == 'full') ? ' selected' : '' %>><?php _e( 'Full', 'happyforms' ); ?></option>
|
104 |
-
<option value="half"<%= (instance.width == 'half') ? ' selected' : '' %>><?php _e( 'Half', 'happyforms' ); ?></option>
|
105 |
-
<option value="third"<%= (instance.width == 'third') ? ' selected' : '' %>><?php _e( 'One third', 'happyforms' ); ?></option>
|
106 |
-
</select>
|
107 |
-
</p>
|
108 |
-
<p class="width-options" style="display: none">
|
109 |
-
<label>
|
110 |
-
<input type="checkbox" class="checkbox apply-all-check" value="" data-apply-to="width" /> <?php _e( 'Apply to all parts', 'happyforms' ); ?>
|
111 |
-
</label>
|
112 |
-
</p>
|
113 |
-
<p>
|
114 |
-
<label for="<%= instance.id %>_css_class"><?php _e( 'Custom CSS class', 'happyforms' ); ?></label>
|
115 |
-
<input type="text" id="<%= instance.id %>_css_class" class="widefat title" value="<%= instance.css_class %>" data-bind="css_class" />
|
116 |
-
</p>
|
117 |
-
<p>
|
118 |
-
<label>
|
119 |
-
<input type="checkbox" class="checkbox" value="1" <% if ( instance.required ) { %>checked="checked"<% } %> data-bind="required" /> <?php _e( 'This is a required field', 'happyforms' ); ?>
|
120 |
-
</label>
|
121 |
-
</p>
|
122 |
-
<?php
|
123 |
}
|
124 |
|
125 |
/**
|
@@ -133,44 +79,10 @@ class HappyForms_Part_MultiLineText extends HappyForms_Form_Part {
|
|
133 |
* @return string Markup for the form part.
|
134 |
*/
|
135 |
public function frontend_template( $part_data = array(), $form_data = array() ) {
|
136 |
-
$
|
137 |
-
$
|
138 |
-
$html_id = 'happyforms-' . $form_data['ID'] . '_' . esc_attr( $part_data['id'] );
|
139 |
|
140 |
-
|
141 |
-
|
142 |
-
if ( $part_data['width'] ) {
|
143 |
-
$classes[] = 'happyforms-part--width-' . esc_attr( $part_data['width'] ) . ' ';
|
144 |
-
}
|
145 |
-
|
146 |
-
if ( $part_data['label_placement'] ) {
|
147 |
-
$classes[] = 'happyforms-part--label-' . esc_attr( $part_data['label_placement'] ) . ' ';
|
148 |
-
}
|
149 |
-
|
150 |
-
if ( !empty( $part_data['css_class'] ) ) {
|
151 |
-
$classes[] = $part_data['css_class'];
|
152 |
-
}
|
153 |
-
|
154 |
-
$classes = implode( ' ', $classes );
|
155 |
-
?>
|
156 |
-
<div class="happyforms-part happyforms-part-editable <?php echo esc_attr( $classes ); ?>" data-happyforms-id="<?php echo esc_attr( $part_data['id'] ); ?>">
|
157 |
-
<div class="happyforms-part__wrap">
|
158 |
-
<label for="<?php echo esc_attr( $html_id ); ?>" class="happyforms-part__label">
|
159 |
-
<span class="label"><?php echo esc_html( $part_data['label'] ); ?></span>
|
160 |
-
<?php if ( 1 === intval( $part_data['required'] ) ) : ?>
|
161 |
-
<span class="happyforms-required"> <?php echo $required_text; ?></span>
|
162 |
-
<?php endif; ?>
|
163 |
-
</label>
|
164 |
-
<textarea id="<?php echo esc_attr( $html_id ); ?>" class="happyforms-part__el happyforms-part__el--text-input" name="<?php echo esc_attr( happyforms_get_part_name( $part_data['id'], $form_data['ID'] ) ); ?>" rows="5" placeholder="<?php echo esc_attr( $part_data['placeholder'] ); ?>"<?php if ( 1 === $part_data['required'] ) : ?> required aria-required="true"<?php endif; ?>></textarea>
|
165 |
-
<?php happyforms_print_part_description( $part_data ); ?>
|
166 |
-
<?php
|
167 |
-
if ( $form_data ) :
|
168 |
-
happyforms_message_notices( $form_data, $part_data['id'] );
|
169 |
-
endif;
|
170 |
-
?>
|
171 |
-
</div>
|
172 |
-
</div>
|
173 |
-
<?php
|
174 |
}
|
175 |
|
176 |
/**
|
@@ -217,12 +129,12 @@ class HappyForms_Part_MultiLineText extends HappyForms_Form_Part {
|
|
217 |
*
|
218 |
* @return string
|
219 |
*/
|
220 |
-
public function sanitize_value( $part_data = array() ) {
|
221 |
$sanitized_value = $this->get_default_value();
|
222 |
-
$
|
223 |
|
224 |
-
if ( isset( $_REQUEST[$
|
225 |
-
$sanitized_value = sanitize_text_field( $_REQUEST[$
|
226 |
}
|
227 |
|
228 |
return $sanitized_value;
|
@@ -239,11 +151,10 @@ class HappyForms_Part_MultiLineText extends HappyForms_Form_Part {
|
|
239 |
* @return string|object
|
240 |
*/
|
241 |
public function validate_value( $part_data, $value ) {
|
242 |
-
$part_id = $part_data['id'];
|
243 |
$validated_value = $value;
|
244 |
|
245 |
if ( 1 === $part_data['required'] && empty( $validated_value ) ) {
|
246 |
-
$validated_value = new WP_Error(
|
247 |
}
|
248 |
|
249 |
return $validated_value;
|
3 |
class HappyForms_Part_MultiLineText extends HappyForms_Form_Part {
|
4 |
|
5 |
public $type = 'multi_line_text';
|
|
|
6 |
|
7 |
public function __construct() {
|
8 |
$this->label = __( 'Long Text', 'happyforms' );
|
64 |
*
|
65 |
* @return string
|
66 |
*/
|
67 |
+
public function customize_templates() {
|
68 |
+
require_once( happyforms_get_include_folder() . '/templates/parts/customize-multi-line-text.php' );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
69 |
}
|
70 |
|
71 |
/**
|
79 |
* @return string Markup for the form part.
|
80 |
*/
|
81 |
public function frontend_template( $part_data = array(), $form_data = array() ) {
|
82 |
+
$part = wp_parse_args( $part_data, $this->get_customize_defaults() );
|
83 |
+
$form = $form_data;
|
|
|
84 |
|
85 |
+
include( happyforms_get_include_folder() . '/templates/parts/frontend-multi-line-text.php' );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
86 |
}
|
87 |
|
88 |
/**
|
129 |
*
|
130 |
* @return string
|
131 |
*/
|
132 |
+
public function sanitize_value( $part_data = array(), $form_data = array() ) {
|
133 |
$sanitized_value = $this->get_default_value();
|
134 |
+
$part_name = happyforms_get_part_name( $part_data, $form_data );
|
135 |
|
136 |
+
if ( isset( $_REQUEST[$part_name] ) ) {
|
137 |
+
$sanitized_value = sanitize_text_field( $_REQUEST[$part_name] );
|
138 |
}
|
139 |
|
140 |
return $sanitized_value;
|
151 |
* @return string|object
|
152 |
*/
|
153 |
public function validate_value( $part_data, $value ) {
|
|
|
154 |
$validated_value = $value;
|
155 |
|
156 |
if ( 1 === $part_data['required'] && empty( $validated_value ) ) {
|
157 |
+
$validated_value = new WP_Error( 'missing_required_field' );
|
158 |
}
|
159 |
|
160 |
return $validated_value;
|
inc/classes/parts/class-part-number.php
CHANGED
@@ -3,12 +3,13 @@
|
|
3 |
class HappyForms_Part_Number extends HappyForms_Form_Part {
|
4 |
|
5 |
public $type = 'number';
|
6 |
-
public $template_id = 'happyforms-number-template';
|
7 |
-
public $preview_confirmation_template_id = 'happyforms-number-confirmation-template';
|
8 |
|
9 |
public function __construct() {
|
10 |
$this->label = __( 'Number', 'happyforms' );
|
11 |
$this->description = __( 'For numeric fields.', 'happyforms' );
|
|
|
|
|
|
|
12 |
}
|
13 |
|
14 |
/**
|
@@ -57,7 +58,7 @@ class HappyForms_Part_Number extends HappyForms_Form_Part {
|
|
57 |
'sanitize' => 'intval'
|
58 |
),
|
59 |
'max_value' => array(
|
60 |
-
'default' =>
|
61 |
'sanitize' => 'intval'
|
62 |
),
|
63 |
'masked' => array(
|
@@ -80,10 +81,6 @@ class HappyForms_Part_Number extends HappyForms_Form_Part {
|
|
80 |
'default' => 0,
|
81 |
'sanitize' => 'intval'
|
82 |
),
|
83 |
-
'confirmation_field_id' => array(
|
84 |
-
'default' => '',
|
85 |
-
'sanitize' => 'sanitize_text_field'
|
86 |
-
),
|
87 |
'confirmation_field_label' => array(
|
88 |
'default' => __( 'Confirm Number', 'happyforms' ),
|
89 |
'sanitize' => 'sanitize_text_field'
|
@@ -102,99 +99,8 @@ class HappyForms_Part_Number extends HappyForms_Form_Part {
|
|
102 |
*
|
103 |
* @return string
|
104 |
*/
|
105 |
-
public function
|
106 |
-
|
107 |
-
<p>
|
108 |
-
<label for="<%= instance.id %>_title"><?php _e( 'Title', 'happyforms' ); ?></label>
|
109 |
-
<input type="text" id="<%= instance.id %>_title" class="widefat title" value="<%= instance.label %>" data-bind="label" />
|
110 |
-
</p>
|
111 |
-
<p>
|
112 |
-
<label for="<%= instance.id %>_label_placement"><?php _e( 'Title placement', 'happyforms' ); ?></label>
|
113 |
-
<select id="<%= instance.id %>_label_placement" data-bind="label_placement">
|
114 |
-
<option value="above"<%= (instance.label_placement == 'above') ? ' selected' : '' %>><?php _e( 'Above', 'happyforms' ); ?></option>
|
115 |
-
<option value="left"<%= (instance.label_placement == 'left') ? ' selected' : '' %>><?php _e( 'Left', 'happyforms' ); ?></option>
|
116 |
-
<option value="below"<%= (instance.label_placement == 'below') ? ' selected' : '' %>><?php _e( 'Below', 'happyforms' ); ?></option>
|
117 |
-
</select>
|
118 |
-
</p>
|
119 |
-
<p class="label_placement-options" style="display: none">
|
120 |
-
<label>
|
121 |
-
<input type="checkbox" class="checkbox apply-all-check" value="" data-apply-to="label_placement" /> <?php _e( 'Apply to all parts', 'happyforms' ); ?>
|
122 |
-
</label>
|
123 |
-
</p>
|
124 |
-
<p>
|
125 |
-
<label for="<%= instance.id %>_description"><?php _e( 'Description', 'happyforms' ); ?></label>
|
126 |
-
<textarea id="<%= instance.id %>_description" data-bind="description"><%= instance.description %></textarea>
|
127 |
-
</p>
|
128 |
-
<p class="tooltip-description-wrap" style="display: <%= (instance.description != '') ? 'block' : 'none' %>">
|
129 |
-
<label>
|
130 |
-
<input type="checkbox" class="checkbox" value="1" <% if ( instance.tooltip_description ) { %>checked="checked"<% } %> data-bind="tooltip_description" /> <?php _e( 'Show description in a tooltip', 'happyforms' ); ?>
|
131 |
-
</label>
|
132 |
-
</p>
|
133 |
-
<p>
|
134 |
-
<label for="<%= instance.id %>_placeholder"><?php _e( 'Placeholder', 'happyforms' ); ?></label>
|
135 |
-
<input type="text" id="<%= instance.id %>_placeholder" class="widefat title" value="<%= instance.placeholder %>" data-bind="placeholder" />
|
136 |
-
</p>
|
137 |
-
<div class="min-max-wrapper" style="display: <%= (instance.masked == 0) ? 'block' : 'none' %>">
|
138 |
-
<p>
|
139 |
-
<label for="<%= instance.id %>_min_value"><?php _e( 'Minimum accepted value', 'happyforms' ); ?></label>
|
140 |
-
<input type="text" id="<%= instance.id %>_min_value" class="widefat title" value="<%= instance.min_value %>" data-bind="min_value" />
|
141 |
-
</p>
|
142 |
-
<p>
|
143 |
-
<label for="<%= instance.id %>_max_value"><?php _e( 'Maximum accepted value', 'happyforms' ); ?></label>
|
144 |
-
<input type="text" id="<%= instance.id %>_max_value" class="widefat title" value="<%= instance.max_value %>" data-bind="max_value" />
|
145 |
-
</p>
|
146 |
-
</div>
|
147 |
-
<p>
|
148 |
-
<label>
|
149 |
-
<input type="checkbox" name="masked" class="checkbox" value="1" <% if ( instance.masked ) { %>checked="checked"<% } %> data-bind="masked" /> <?php _e( 'Mask this input', 'happyforms' ); ?>
|
150 |
-
</label>
|
151 |
-
</p>
|
152 |
-
<div class="mask-wrapper number-options number-options--numeric" style="display: <%= (instance.masked == 1) ? 'block' : 'none' %>">
|
153 |
-
<p>
|
154 |
-
<label for="<%= instance.id %>_mask_numeric_thousands_delimiter"><?php _e( 'Thousands delimiter', 'happyforms' ); ?></label>
|
155 |
-
<input type="text" id="<%= instance.id %>_mask_numeric_thousands_delimiter" class="widefat title" value="<%= instance.mask_numeric_thousands_delimiter %>" data-bind="mask_numeric_thousands_delimiter" />
|
156 |
-
</p>
|
157 |
-
<p>
|
158 |
-
<label for="<%= instance.id %>_mask_numeric_decimal_mark"><?php _e( 'Decimal mark', 'happyforms' ); ?></label>
|
159 |
-
<input type="text" id="<%= instance.id %>_mask_numeric_decimal_mark" class="widefat title" value="<%= instance.mask_numeric_decimal_mark %>" data-bind="mask_numeric_decimal_mark" />
|
160 |
-
</p>
|
161 |
-
<p>
|
162 |
-
<label for="<%= instance.id %>_mask_numeric_prefix"><?php _e( 'Prefix', 'happyforms' ); ?></label>
|
163 |
-
<input type="text" id="<%= instance.id %>_mask_numeric_prefix" class="widefat title" value="<%= instance.mask_numeric_prefix %>" data-bind="mask_numeric_prefix" />
|
164 |
-
</p>
|
165 |
-
</div>
|
166 |
-
<p>
|
167 |
-
<label for="<%= instance.id %>_width"><?php _e( 'Width', 'happyforms' ); ?></label>
|
168 |
-
<select id="<%= instance.id %>_width" name="width" data-bind="width" class="widefat">
|
169 |
-
<option value="full"<%= (instance.width == 'full') ? ' selected' : '' %>><?php _e( 'Full', 'happyforms' ); ?></option>
|
170 |
-
<option value="half"<%= (instance.width == 'half') ? ' selected' : '' %>><?php _e( 'Half', 'happyforms' ); ?></option>
|
171 |
-
<option value="third"<%= (instance.width == 'third') ? ' selected' : '' %>><?php _e( 'One third', 'happyforms' ); ?></option>
|
172 |
-
</select>
|
173 |
-
</p>
|
174 |
-
<p class="width-options" style="display: none">
|
175 |
-
<label>
|
176 |
-
<input type="checkbox" class="checkbox apply-all-check" value="" data-apply-to="width" /> <?php _e( 'Apply to all parts', 'happyforms' ); ?>
|
177 |
-
</label>
|
178 |
-
</p>
|
179 |
-
<p>
|
180 |
-
<label for="<%= instance.id %>_css_class"><?php _e( 'Custom CSS class', 'happyforms' ); ?></label>
|
181 |
-
<input type="text" id="<%= instance.id %>_css_class" class="widefat title" value="<%= instance.css_class %>" data-bind="css_class" />
|
182 |
-
</p>
|
183 |
-
<p>
|
184 |
-
<label>
|
185 |
-
<input type="checkbox" class="checkbox confirmation-checkbox" value="1" <% if ( instance.confirmation_field ) { %>checked="checked"<% } %> data-bind="confirmation_field" /> <?php _e( 'Require confirmation of the value', 'happyforms' ); ?>
|
186 |
-
</label>
|
187 |
-
</p>
|
188 |
-
<p class="confirmation-field-setting" style="display: <%= (instance.confirmation_field == 1) ? 'block' : 'none' %>">
|
189 |
-
<label for="<%= instance.id %>_confirmation_field_label"><?php _e( 'Confirmation field title', 'happyforms' ); ?></label>
|
190 |
-
<input type="text" id="<%= instance.id %>_confirmation_field_label" class="widefat title" value="<%= instance.confirmation_field_label %>" data-bind="confirmation_field_label" />
|
191 |
-
</p>
|
192 |
-
<p>
|
193 |
-
<label>
|
194 |
-
<input type="checkbox" class="checkbox" value="1" <% if ( instance.required ) { %>checked="checked"<% } %> data-bind="required" /> <?php _e( 'This is a required field', 'happyforms' ); ?>
|
195 |
-
</label>
|
196 |
-
</p>
|
197 |
-
<?php
|
198 |
}
|
199 |
|
200 |
/**
|
@@ -208,106 +114,10 @@ class HappyForms_Part_Number extends HappyForms_Form_Part {
|
|
208 |
* @return string Markup for the form part.
|
209 |
*/
|
210 |
public function frontend_template( $part_data = array(), $form_data = array() ) {
|
211 |
-
$
|
212 |
-
$
|
213 |
-
$html_id = 'happyforms-' . $form_data['ID'] . '_' . esc_attr( $part_data['id'] );
|
214 |
-
|
215 |
-
if ( $part_data['masked'] ) {
|
216 |
-
wp_enqueue_script(
|
217 |
-
'cleave',
|
218 |
-
happyforms_get_plugin_url() . 'assets/js/lib/cleave.min.js',
|
219 |
-
array()
|
220 |
-
);
|
221 |
-
}
|
222 |
-
|
223 |
-
$classes = array('happyforms-part--number');
|
224 |
-
|
225 |
-
if ( $part_data['width'] ) {
|
226 |
-
$classes[] = 'happyforms-part--width-' . esc_attr( $part_data['width'] ) . ' ';
|
227 |
-
}
|
228 |
-
|
229 |
-
if ( $part_data['label_placement'] ) {
|
230 |
-
$classes[] = 'happyforms-part--label-' . esc_attr( $part_data['label_placement'] ) . ' ';
|
231 |
-
}
|
232 |
-
|
233 |
-
if ( !empty( $part_data['css_class'] ) ) {
|
234 |
-
$classes[] = $part_data['css_class'];
|
235 |
-
}
|
236 |
|
237 |
-
|
238 |
-
?>
|
239 |
-
<div class="happyforms-part happyforms-part-editable <?php echo esc_attr( $classes ); ?>" data-happyforms-id="<?php echo esc_attr( $part_data['id'] ); ?>">
|
240 |
-
<div class="happyforms-part__wrap">
|
241 |
-
<label for="<?php echo esc_attr( $html_id ); ?>" class="happyforms-part__label">
|
242 |
-
<span class="label"><?php echo esc_html( $part_data['label'] ); ?></span>
|
243 |
-
<?php if ( 1 === intval( $part_data['required'] ) ) : ?>
|
244 |
-
<span class="happyforms-required"> <?php echo $required_text; ?></span>
|
245 |
-
<?php endif; ?>
|
246 |
-
</label>
|
247 |
-
<input id="<?php echo esc_attr( $html_id ); ?>" type="<?php echo ( 1 === $part_data['masked'] ) ? 'text' : 'number'; ?>" name="<?php echo esc_attr( happyforms_get_part_name( $part_data['id'], $form_data['ID'] ) ); ?>" placeholder="<?php echo esc_attr( $part_data['placeholder'] ); ?>"
|
248 |
-
class="happyforms-part__el happyforms-part__el--text-input
|
249 |
-
<?php echo ( 1 === $part_data['masked'] ) ? ' happyforms-masked-input' : ''; ?>"
|
250 |
-
<?php if ( 0 === $part_data['masked'] && $part_data['min_value'] > 0 ) : ?>min="<?php echo esc_attr( $part_data['min_value'] ); ?>"<?php endif; ?>
|
251 |
-
<?php if ( 0 === $part_data['masked'] && $part_data['max_value'] > 0 ) : ?>max="<?php echo esc_attr( $part_data['max_value'] ); ?>"<?php endif; ?>
|
252 |
-
<?php if ( 1 === $part_data['required'] ) : ?>required aria-required="true"<?php endif; ?>
|
253 |
-
<?php if ( 1 === $part_data['masked'] ) : ?>data-mask-type="numeric"<?php endif; ?>
|
254 |
-
<?php if ( 1 === $part_data['masked'] && $part_data['mask_numeric_thousands_delimiter'] ) : ?>data-mask-thousands-delimiter="<?php echo esc_attr( $part_data['mask_numeric_thousands_delimiter'] ); ?>"<?php endif; ?>
|
255 |
-
<?php if ( 1 === $part_data['masked'] && $part_data['mask_numeric_decimal_mark'] ) : ?>data-mask-decimal-mark="<?php echo esc_attr( $part_data['mask_numeric_decimal_mark'] ); ?>"<?php endif; ?>
|
256 |
-
<?php if ( 1 === $part_data['masked'] && $part_data['mask_numeric_prefix'] ) : ?>data-mask-prefix="<?php echo esc_attr( $part_data['mask_numeric_prefix'] ); ?>"<?php endif; ?> />
|
257 |
-
<?php happyforms_print_part_description( $part_data ); ?>
|
258 |
-
<?php
|
259 |
-
if ( $form_data ) :
|
260 |
-
happyforms_message_notices( $form_data, $part_data['id'] );
|
261 |
-
endif;
|
262 |
-
?>
|
263 |
-
</div>
|
264 |
-
<?php if ( 1 === $part_data['confirmation_field'] ) : ?>
|
265 |
-
<div class="happyforms-part__wrap happyforms-part__wrap--confirmation" id="<?php echo esc_attr( $part_data['confirmation_field_id'] ); ?>">
|
266 |
-
<div class="happyforms-message-notices" style="display: none">
|
267 |
-
<div class="happyforms-message-notice error">
|
268 |
-
<h2><?php _e( 'Fields do not match.', 'happyforms' ); ?></h2>
|
269 |
-
</div>
|
270 |
-
</div>
|
271 |
-
<label for="<?php echo esc_attr( $part_data['confirmation_field_id'] ); ?>_input" class="happyforms-part__label happyforms-part__label--confirmation">
|
272 |
-
<span class="label"><?php echo esc_html( $part_data['confirmation_field_label'] ); ?></span>
|
273 |
-
<?php if ( 1 === intval( $part_data['required'] ) ) : ?>
|
274 |
-
<span class="happyforms-required"> <?php echo $required_text; ?></span>
|
275 |
-
<?php endif; ?>
|
276 |
-
</label>
|
277 |
-
<input id="<?php echo esc_attr( $part_data['confirmation_field_id'] ); ?>_input" type="text" name="<?php echo esc_attr( $part_data['confirmation_field_id'] ); ?>"
|
278 |
-
data-confirmation-of="<?php echo esc_attr( $part_data['id'] ); ?>"
|
279 |
-
class="happyforms-part__el happyforms-part__el--text-input happyforms-confirmation-input
|
280 |
-
<?php if ( 1 === $part_data['masked'] ) : ?> happyforms-masked-input<?php endif; ?>"
|
281 |
-
<?php if ( 0 === $part_data['masked'] && $part_data['min_value'] > 0 ) : ?>min="<?php echo esc_attr( $part_data['min_value'] ); ?>"<?php endif; ?>
|
282 |
-
<?php if ( 0 === $part_data['masked'] && $part_data['max_value'] > 0 ) : ?>max="<?php echo esc_attr( $part_data['max_value'] ); ?>"<?php endif; ?>
|
283 |
-
<?php if ( 1 === $part_data['required'] ) : ?>required aria-required="true"<?php endif; ?>
|
284 |
-
<?php if ( 1 === $part_data['masked'] ) : ?>data-mask-type="numeric"<?php endif; ?>
|
285 |
-
<?php if ( $part_data['mask_numeric_thousands_delimiter'] ) : ?>data-mask-thousands-delimiter="<?php echo esc_attr( $part_data['mask_numeric_thousands_delimiter'] ); ?>"<?php endif; ?>
|
286 |
-
<?php if ( $part_data['mask_numeric_decimal_mark'] ) : ?>data-mask-decimal-mark="<?php echo esc_attr( $part_data['mask_numeric_decimal_mark'] ); ?>"<?php endif; ?>
|
287 |
-
<?php if ( $part_data['mask_numeric_prefix'] ) : ?>data-mask-prefix="<?php echo esc_attr( $part_data['mask_numeric_prefix'] ); ?>"<?php endif; ?>
|
288 |
-
</div>
|
289 |
-
<?php endif; ?>
|
290 |
-
</div>
|
291 |
-
<?php
|
292 |
-
}
|
293 |
-
|
294 |
-
/**
|
295 |
-
* Get confirmation field Backbone template for preview purposes.
|
296 |
-
*
|
297 |
-
* @since 1.0.0.
|
298 |
-
*
|
299 |
-
* @return string Backbone template.
|
300 |
-
*/
|
301 |
-
public function preview_confirmation_template() {
|
302 |
-
?>
|
303 |
-
<div class="happyforms-part__el happyforms-part__el--confirmation" id="<%= confirmation_field_id %>">
|
304 |
-
<label for="" class="happyforms-part__label happyforms-part__label--confirmation">
|
305 |
-
<span class="label"><%= confirmation_field_label %></span>
|
306 |
-
<span class="happyforms-required"> *</span>
|
307 |
-
</label>
|
308 |
-
<input type="text" class="happyforms-part__el happyforms-part__el--text-input" required aria-required="true" />
|
309 |
-
</div>
|
310 |
-
<?php
|
311 |
}
|
312 |
|
313 |
/**
|
@@ -351,18 +161,18 @@ class HappyForms_Part_Number extends HappyForms_Form_Part {
|
|
351 |
*
|
352 |
* @return string
|
353 |
*/
|
354 |
-
public function sanitize_value( $part_data = array() ) {
|
355 |
$sanitized_value = $this->get_default_value();
|
356 |
-
$
|
357 |
|
358 |
-
if ( isset( $_REQUEST[$
|
359 |
-
$sanitized_value = sanitize_text_field( $_REQUEST[$
|
360 |
}
|
361 |
|
362 |
-
if ( isset( $_REQUEST[$
|
363 |
$sanitized_value = array(
|
364 |
$sanitized_value,
|
365 |
-
sanitize_text_field( $_REQUEST[$
|
366 |
);
|
367 |
}
|
368 |
|
@@ -380,38 +190,22 @@ class HappyForms_Part_Number extends HappyForms_Form_Part {
|
|
380 |
* @return string|object
|
381 |
*/
|
382 |
public function validate_value( $part_data, $value ) {
|
383 |
-
$
|
384 |
-
$validated_value = $value;
|
385 |
-
$has_confirmation_value = false;
|
386 |
|
387 |
-
if (
|
388 |
-
$
|
389 |
-
|
390 |
-
$validated_value = $validated_value[0];
|
391 |
-
} else {
|
392 |
-
$validated_confirmation_value = $validated_value;
|
393 |
-
}
|
394 |
-
|
395 |
-
if ( 1 === $part_data['required'] && empty( $validated_value ) ) {
|
396 |
-
$validated_value = new WP_Error( $part_id, 'missing_required_field' );
|
397 |
-
}
|
398 |
-
|
399 |
-
if ( true === $has_confirmation_value ) {
|
400 |
-
if ( 1 === $part_data['required'] && empty( $validated_confirmation_value ) ) {
|
401 |
-
$validated_value = new WP_Error( $part_id, 'missing_required_confirmation_field' );
|
402 |
-
}
|
403 |
-
|
404 |
-
if ( $validated_value !== $validated_confirmation_value ) {
|
405 |
-
$validated_value = new WP_Error( $part_id, 'numbers_not_matching' );
|
406 |
-
}
|
407 |
}
|
408 |
|
409 |
-
if ( $part_data['masked']
|
410 |
-
$validated_value = new WP_Error(
|
|
|
411 |
}
|
412 |
|
413 |
-
if (
|
414 |
-
$validated_value = new
|
|
|
415 |
}
|
416 |
|
417 |
return $validated_value;
|
@@ -436,4 +230,65 @@ class HappyForms_Part_Number extends HappyForms_Form_Part {
|
|
436 |
);
|
437 |
}
|
438 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
439 |
}
|
3 |
class HappyForms_Part_Number extends HappyForms_Form_Part {
|
4 |
|
5 |
public $type = 'number';
|
|
|
|
|
6 |
|
7 |
public function __construct() {
|
8 |
$this->label = __( 'Number', 'happyforms' );
|
9 |
$this->description = __( 'For numeric fields.', 'happyforms' );
|
10 |
+
|
11 |
+
add_filter( 'happyforms_part_data_attributes', array( $this, 'html_part_data_attributes' ), 10, 3 );
|
12 |
+
add_filter( 'happyforms_frontend_dependencies', array( $this, 'script_dependencies' ), 10, 2 );
|
13 |
}
|
14 |
|
15 |
/**
|
58 |
'sanitize' => 'intval'
|
59 |
),
|
60 |
'max_value' => array(
|
61 |
+
'default' => 1,
|
62 |
'sanitize' => 'intval'
|
63 |
),
|
64 |
'masked' => array(
|
81 |
'default' => 0,
|
82 |
'sanitize' => 'intval'
|
83 |
),
|
|
|
|
|
|
|
|
|
84 |
'confirmation_field_label' => array(
|
85 |
'default' => __( 'Confirm Number', 'happyforms' ),
|
86 |
'sanitize' => 'sanitize_text_field'
|
99 |
*
|
100 |
* @return string
|
101 |
*/
|
102 |
+
public function customize_templates() {
|
103 |
+
require_once( happyforms_get_include_folder() . '/templates/parts/customize-number.php' );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
104 |
}
|
105 |
|
106 |
/**
|
114 |
* @return string Markup for the form part.
|
115 |
*/
|
116 |
public function frontend_template( $part_data = array(), $form_data = array() ) {
|
117 |
+
$part = wp_parse_args( $part_data, $this->get_customize_defaults() );
|
118 |
+
$form = $form_data;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
119 |
|
120 |
+
include( happyforms_get_include_folder() . '/templates/parts/frontend-number.php' );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
121 |
}
|
122 |
|
123 |
/**
|
161 |
*
|
162 |
* @return string
|
163 |
*/
|
164 |
+
public function sanitize_value( $part_data = array(), $form_data = array() ) {
|
165 |
$sanitized_value = $this->get_default_value();
|
166 |
+
$part_name = happyforms_get_part_name( $part_data, $form_data );
|
167 |
|
168 |
+
if ( isset( $_REQUEST[$part_name] ) ) {
|
169 |
+
$sanitized_value = sanitize_text_field( $_REQUEST[$part_name] );
|
170 |
}
|
171 |
|
172 |
+
if ( isset( $_REQUEST[$part_name . '_confirmation'] ) ) {
|
173 |
$sanitized_value = array(
|
174 |
$sanitized_value,
|
175 |
+
sanitize_text_field( $_REQUEST[$part_name . '_confirmation'] )
|
176 |
);
|
177 |
}
|
178 |
|
190 |
* @return string|object
|
191 |
*/
|
192 |
public function validate_value( $part_data, $value ) {
|
193 |
+
$has_confirmation_value = is_array( $value );
|
194 |
+
$validated_value = $has_confirmation_value ? $value[0] : $value;
|
|
|
195 |
|
196 |
+
if ( $part_data['required'] && '' === $validated_value ) {
|
197 |
+
$validated_value = new WP_Error( 'missing_required_field' );
|
198 |
+
return $validated_value;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
199 |
}
|
200 |
|
201 |
+
if ( ! $part_data['masked'] && ! is_numeric( $validated_value ) ) {
|
202 |
+
$validated_value = new WP_Error( 'not_a_number' );
|
203 |
+
return $validated_value;
|
204 |
}
|
205 |
|
206 |
+
if ( $has_confirmation_value && $value[0] !== $value[1] ) {
|
207 |
+
$validated_value = new WP_Error( 'numbers_not_matching' );
|
208 |
+
return $validated_value;
|
209 |
}
|
210 |
|
211 |
return $validated_value;
|
230 |
);
|
231 |
}
|
232 |
|
233 |
+
public function html_part_data_attributes( $attributes, $part, $form ) {
|
234 |
+
if ( $this->type !== $part['type'] ) {
|
235 |
+
return $attributes;
|
236 |
+
}
|
237 |
+
|
238 |
+
if ( $part['confirmation_field'] ) {
|
239 |
+
$attributes['happyforms-require-confirmation'] = '';
|
240 |
+
}
|
241 |
+
|
242 |
+
if ( $part['masked'] ) {
|
243 |
+
$attributes['mask'] = 'true';
|
244 |
+
$attributes['thousands-delimiter'] = $part['mask_numeric_thousands_delimiter'];
|
245 |
+
$attributes['decimal-mark'] = $part['mask_numeric_decimal_mark'];
|
246 |
+
$attributes['prefix'] = $part['mask_numeric_prefix'];
|
247 |
+
}
|
248 |
+
|
249 |
+
return $attributes;
|
250 |
+
}
|
251 |
+
|
252 |
+
/**
|
253 |
+
* Action: enqueue additional scripts on the frontend.
|
254 |
+
*
|
255 |
+
* @since 1.3.0.
|
256 |
+
*
|
257 |
+
* @hooked action happyforms_frontend_dependencies
|
258 |
+
*
|
259 |
+
* @param array List of dependencies.
|
260 |
+
*
|
261 |
+
* @return array
|
262 |
+
*/
|
263 |
+
public function script_dependencies( $deps, $forms ) {
|
264 |
+
$contains_number = false;
|
265 |
+
$form_controller = happyforms_get_form_controller();
|
266 |
+
|
267 |
+
foreach ( $forms as $form ) {
|
268 |
+
if ( $form_controller->get_first_part_by_type( $form, $this->type ) ) {
|
269 |
+
$contains_number = true;
|
270 |
+
break;
|
271 |
+
}
|
272 |
+
}
|
273 |
+
|
274 |
+
if ( ! happyforms_is_preview() && ! $contains_number ) {
|
275 |
+
return $deps;
|
276 |
+
}
|
277 |
+
|
278 |
+
wp_register_script(
|
279 |
+
'cleave',
|
280 |
+
happyforms_get_plugin_url() . 'assets/js/lib/cleave.min.js'
|
281 |
+
);
|
282 |
+
|
283 |
+
wp_register_script(
|
284 |
+
'happyforms-part-number',
|
285 |
+
happyforms_get_plugin_url() . 'assets/js/frontend/number.js',
|
286 |
+
array( 'cleave' ), false, true
|
287 |
+
);
|
288 |
+
|
289 |
+
$deps[] = 'happyforms-part-number';
|
290 |
+
|
291 |
+
return $deps;
|
292 |
+
}
|
293 |
+
|
294 |
}
|
inc/classes/parts/class-part-phone.php
CHANGED
@@ -3,12 +3,13 @@
|
|
3 |
class HappyForms_Part_Phone extends HappyForms_Form_Part {
|
4 |
|
5 |
public $type = 'phone';
|
6 |
-
public $template_id = 'happyforms-phone-template';
|
7 |
-
public $preview_confirmation_template_id = 'happyforms-phone-confirmation-template';
|
8 |
|
9 |
public function __construct() {
|
10 |
$this->label = __( 'Phone', 'happyforms' );
|
11 |
$this->description = __( 'For phone numbers. Includes country specific formatting.', 'happyforms' );
|
|
|
|
|
|
|
12 |
}
|
13 |
|
14 |
/**
|
@@ -64,10 +65,6 @@ class HappyForms_Part_Phone extends HappyForms_Form_Part {
|
|
64 |
'default' => 0,
|
65 |
'sanitize' => 'intval'
|
66 |
),
|
67 |
-
'confirmation_field_id' => array(
|
68 |
-
'default' => '',
|
69 |
-
'sanitize' => 'sanitize_text_field'
|
70 |
-
),
|
71 |
'confirmation_field_label' => array(
|
72 |
'default' => __( 'Confirm Number', 'happyforms' ),
|
73 |
'sanitize' => 'sanitize_text_field'
|
@@ -86,90 +83,8 @@ class HappyForms_Part_Phone extends HappyForms_Form_Part {
|
|
86 |
*
|
87 |
* @return string
|
88 |
*/
|
89 |
-
public function
|
90 |
-
|
91 |
-
<p>
|
92 |
-
<label for="<%= instance.id %>_title"><?php _e( 'Title', 'happyforms' ); ?></label>
|
93 |
-
<input type="text" id="<%= instance.id %>_title" class="widefat title" value="<%= instance.label %>" data-bind="label" />
|
94 |
-
</p>
|
95 |
-
<p>
|
96 |
-
<label for="<%= instance.id %>_label_placement"><?php _e( 'Title placement', 'happyforms' ); ?></label>
|
97 |
-
<select id="<%= instance.id %>_label_placement" data-bind="label_placement">
|
98 |
-
<option value="above"<%= (instance.label_placement == 'above') ? ' selected' : '' %>><?php _e( 'Above', 'happyforms' ); ?></option>
|
99 |
-
<option value="left"<%= (instance.label_placement == 'left') ? ' selected' : '' %>><?php _e( 'Left', 'happyforms' ); ?></option>
|
100 |
-
<option value="below"<%= (instance.label_placement == 'below') ? ' selected' : '' %>><?php _e( 'Below', 'happyforms' ); ?></option>
|
101 |
-
</select>
|
102 |
-
</p>
|
103 |
-
<p class="label_placement-options" style="display: none">
|
104 |
-
<label>
|
105 |
-
<input type="checkbox" class="checkbox apply-all-check" value="" data-apply-to="label_placement" /> <?php _e( 'Apply to all parts', 'happyforms' ); ?>
|
106 |
-
</label>
|
107 |
-
</p>
|
108 |
-
<p>
|
109 |
-
<label for="<%= instance.id %>_description"><?php _e( 'Description', 'happyforms' ); ?></label>
|
110 |
-
<textarea id="<%= instance.id %>_description" data-bind="description"><%= instance.description %></textarea>
|
111 |
-
</p>
|
112 |
-
<p class="tooltip-description-wrap" style="display: <%= (instance.description != '') ? 'block' : 'none' %>">
|
113 |
-
<label>
|
114 |
-
<input type="checkbox" class="checkbox" value="1" <% if ( instance.tooltip_description ) { %>checked="checked"<% } %> data-bind="tooltip_description" /> <?php _e( 'Show description in a tooltip', 'happyforms' ); ?>
|
115 |
-
</label>
|
116 |
-
</p>
|
117 |
-
<p>
|
118 |
-
<label for="<%= instance.id %>_placeholder"><?php _e( 'Placeholder', 'happyforms' ); ?></label>
|
119 |
-
<input type="text" id="<%= instance.id %>_placeholder" class="widefat title" value="<%= instance.placeholder %>" data-bind="placeholder" />
|
120 |
-
</p>
|
121 |
-
<p>
|
122 |
-
<label>
|
123 |
-
<input type="checkbox" name="masked" class="checkbox" value="1" <% if ( instance.masked ) { %>checked="checked"<% } %> data-bind="masked" /> <?php _e( 'Mask this input', 'happyforms' ); ?>
|
124 |
-
</label>
|
125 |
-
</p>
|
126 |
-
<div class="number-options number-options--phone" style="display: <%= (instance.masked == 1) ? 'block' : 'none' %>">
|
127 |
-
<p>
|
128 |
-
<label for="<%= instance.id %>_mask_phone_country"><?php _e( 'Pre-format phone number region', 'happyforms' ); ?></label>
|
129 |
-
<select id="<%= instance.id %>_mask_phone_country" class="widefat title" data-bind="mask_phone_country">
|
130 |
-
<option value="">- <?php _e( 'Select', 'happyforms' ); ?> -</option>
|
131 |
-
<?php
|
132 |
-
$phone_countries = $this->get_phone_countries_array();
|
133 |
-
|
134 |
-
foreach ( $phone_countries as $country_code => $country ) {
|
135 |
-
echo '<option value="'. $country['code'] .'"<% if (instance.mask_phone_country == "'. $country['code'] .'") { %> selected<% } %>>'. ucwords( strtolower( $country['name'] ) ) .'</option>';
|
136 |
-
}
|
137 |
-
?>
|
138 |
-
</select>
|
139 |
-
</p>
|
140 |
-
</div>
|
141 |
-
<p>
|
142 |
-
<label for="<%= instance.id %>_width"><?php _e( 'Width', 'happyforms' ); ?></label>
|
143 |
-
<select id="<%= instance.id %>_width" name="width" data-bind="width" class="widefat">
|
144 |
-
<option value="full"<%= (instance.width == 'full') ? ' selected' : '' %>><?php _e( 'Full', 'happyforms' ); ?></option>
|
145 |
-
<option value="half"<%= (instance.width == 'half') ? ' selected' : '' %>><?php _e( 'Half', 'happyforms' ); ?></option>
|
146 |
-
<option value="third"<%= (instance.width == 'third') ? ' selected' : '' %>><?php _e( 'One third', 'happyforms' ); ?></option>
|
147 |
-
</select>
|
148 |
-
</p>
|
149 |
-
<p class="width-options" style="display: none">
|
150 |
-
<label>
|
151 |
-
<input type="checkbox" class="checkbox apply-all-check" value="" data-apply-to="width" /> <?php _e( 'Apply to all parts', 'happyforms' ); ?>
|
152 |
-
</label>
|
153 |
-
</p>
|
154 |
-
<p>
|
155 |
-
<label for="<%= instance.id %>_css_class"><?php _e( 'Custom CSS class', 'happyforms' ); ?></label>
|
156 |
-
<input type="text" id="<%= instance.id %>_css_class" class="widefat title" value="<%= instance.css_class %>" data-bind="css_class" />
|
157 |
-
</p>
|
158 |
-
<p>
|
159 |
-
<label>
|
160 |
-
<input type="checkbox" class="checkbox confirmation-checkbox" value="1" <% if ( instance.confirmation_field ) { %>checked="checked"<% } %> data-bind="confirmation_field" /> <?php _e( 'Require confirmation of the value', 'happyforms' ); ?>
|
161 |
-
</label>
|
162 |
-
</p>
|
163 |
-
<p class="confirmation-field-setting" style="display: <%= (instance.confirmation_field == 1) ? 'block' : 'none' %>">
|
164 |
-
<label for="<%= instance.id %>_confirmation_field_label"><?php _e( 'Confirmation field title', 'happyforms' ); ?></label>
|
165 |
-
<input type="text" id="<%= instance.id %>_confirmation_field_label" class="widefat title" value="<%= instance.confirmation_field_label %>" data-bind="confirmation_field_label" />
|
166 |
-
</p>
|
167 |
-
<p>
|
168 |
-
<label>
|
169 |
-
<input type="checkbox" class="checkbox" value="1" <% if ( instance.required ) { %>checked="checked"<% } %> data-bind="required" /> <?php _e( 'This is a required field', 'happyforms' ); ?>
|
170 |
-
</label>
|
171 |
-
</p>
|
172 |
-
<?php
|
173 |
}
|
174 |
|
175 |
/**
|
@@ -183,104 +98,10 @@ class HappyForms_Part_Phone extends HappyForms_Form_Part {
|
|
183 |
* @return string Markup for the form part.
|
184 |
*/
|
185 |
public function frontend_template( $part_data = array(), $form_data = array() ) {
|
186 |
-
$
|
187 |
-
$
|
188 |
-
$html_id = 'happyforms-' . $form_data['ID'] . '_' . esc_attr( $part_data['id'] );
|
189 |
-
|
190 |
-
if ( $part_data['masked'] ) {
|
191 |
-
wp_enqueue_script(
|
192 |
-
'cleave',
|
193 |
-
happyforms_get_plugin_url() . 'assets/js/lib/cleave.min.js',
|
194 |
-
array()
|
195 |
-
);
|
196 |
-
|
197 |
-
wp_enqueue_script(
|
198 |
-
'cleave-phone',
|
199 |
-
happyforms_get_plugin_url() . 'assets/js/lib/cleave-phone.i18n.js',
|
200 |
-
array()
|
201 |
-
);
|
202 |
-
}
|
203 |
-
|
204 |
-
$classes = array('happyforms-part--phone');
|
205 |
-
|
206 |
-
if ( $part_data['width'] ) {
|
207 |
-
$classes[] = 'happyforms-part--width-' . esc_attr( $part_data['width'] ) . ' ';
|
208 |
-
}
|
209 |
|
210 |
-
|
211 |
-
$classes[] = 'happyforms-part--label-' . esc_attr( $part_data['label_placement'] ) . ' ';
|
212 |
-
}
|
213 |
-
|
214 |
-
if ( !empty( $part_data['css_class'] ) ) {
|
215 |
-
$classes[] = $part_data['css_class'];
|
216 |
-
}
|
217 |
-
|
218 |
-
$classes = implode( ' ', $classes );
|
219 |
-
?>
|
220 |
-
<div class="happyforms-part happyforms-part-editable <?php echo esc_attr( $classes ); ?>" data-happyforms-id="<?php echo esc_attr( $part_data['id'] ); ?>">
|
221 |
-
<div class="happyforms-part__wrap">
|
222 |
-
<label for="<?php echo esc_attr( $html_id ); ?>" class="happyforms-part__label">
|
223 |
-
<span class="label"><?php echo esc_html( $part_data['label'] ); ?></span>
|
224 |
-
<?php if ( 1 === intval( $part_data['required'] ) ) : ?>
|
225 |
-
<span class="happyforms-required"> <?php echo $required_text; ?></span>
|
226 |
-
<?php endif; ?>
|
227 |
-
</label>
|
228 |
-
<input id="<?php echo esc_attr( $html_id ); ?>" type="text" name="<?php echo esc_attr( happyforms_get_part_name( $part_data['id'], $form_data['ID'] ) ); ?>" placeholder="<?php echo esc_attr( $part_data['placeholder'] ); ?>"
|
229 |
-
class="happyforms-part__el happyforms-part__el--text-input
|
230 |
-
<?php if ( 1 === $part_data['masked'] ) : ?> happyforms-masked-input<?php endif; ?>"
|
231 |
-
<?php if ( 1 === $part_data['required'] ) : ?>required aria-required="true"<?php endif; ?>
|
232 |
-
<?php if ( 1 === $part_data['masked'] ) : ?>data-mask-type="phone"<?php endif; ?>
|
233 |
-
<?php if ( $part_data['mask_phone_country'] ) : ?>data-mask-phone-country="<?php echo esc_attr( $part_data['mask_phone_country'] ); ?>"<?php endif; ?> />
|
234 |
-
<?php happyforms_print_part_description( $part_data ); ?>
|
235 |
-
<?php
|
236 |
-
if ( $form_data ) :
|
237 |
-
happyforms_message_notices( $form_data, $part_data['id'] );
|
238 |
-
endif;
|
239 |
-
?>
|
240 |
-
</div>
|
241 |
-
<?php if ( 1 === $part_data['confirmation_field'] ) : ?>
|
242 |
-
<div class="happyforms-part__wrap happyforms-part__wrap--confirmation" id="<?php echo esc_attr( $part_data['confirmation_field_id'] ); ?>">
|
243 |
-
<div class="happyforms-message-notices" style="display: none">
|
244 |
-
<div class="happyforms-message-notice error">
|
245 |
-
<h2><?php _e( 'Fields do not match.', 'happyforms' ); ?></h2>
|
246 |
-
</div>
|
247 |
-
</div>
|
248 |
-
<label for="<?php echo esc_attr( $part_data['confirmation_field_id'] ); ?>_input" class="happyforms-part__label happyforms-part__label--confirmation">
|
249 |
-
<span class="label"><?php echo esc_html( $part_data['confirmation_field_label'] ); ?></span>
|
250 |
-
<?php if ( 1 === intval( $part_data['required'] ) ) : ?>
|
251 |
-
<span class="happyforms-required"> <?php echo $required_text; ?></span>
|
252 |
-
<?php endif; ?>
|
253 |
-
</label>
|
254 |
-
<input id="<?php echo esc_attr( $part_data['confirmation_field_id'] ); ?>_input" type="text" name="<?php echo esc_attr( $part_data['confirmation_field_id'] ); ?>"
|
255 |
-
data-confirmation-of="<?php echo esc_attr( $part_data['id'] ); ?>"
|
256 |
-
class="happyforms-part__el happyforms-part__el--text-input happyforms-confirmation-input
|
257 |
-
<?php if ( 1 === $part_data['masked'] ) : ?> happyforms-masked-input<?php endif; ?>"
|
258 |
-
<?php if ( 1 === $part_data['required'] ) : ?>required aria-required="true"<?php endif; ?>
|
259 |
-
<?php if ( 1 === $part_data['masked'] ) : ?>data-mask-type="phone"<?php endif; ?>
|
260 |
-
<?php if ( $part_data['mask_phone_country'] ) : ?>data-mask-phone-country="<?php echo esc_attr( $part_data['mask_phone_country'] ); ?>"<?php endif; ?> />
|
261 |
-
</div>
|
262 |
-
<?php endif; ?>
|
263 |
-
</div>
|
264 |
-
<?php
|
265 |
-
}
|
266 |
-
|
267 |
-
/**
|
268 |
-
* Get confirmation field Backbone template for preview purposes.
|
269 |
-
*
|
270 |
-
* @since 1.0.0.
|
271 |
-
*
|
272 |
-
* @return string Backbone template.
|
273 |
-
*/
|
274 |
-
public function preview_confirmation_template() {
|
275 |
-
?>
|
276 |
-
<div class="happyforms-part__el happyforms-part__el--confirmation" id="<%= confirmation_field_id %>">
|
277 |
-
<label for="" class="happyforms-part__label happyforms-part__label--confirmation">
|
278 |
-
<span class="label"><%= confirmation_field_label %></span>
|
279 |
-
<span class="happyforms-required"> *</span>
|
280 |
-
</label>
|
281 |
-
<input type="text" class="happyforms-part__el happyforms-part__el--text-input" required aria-required="true" />
|
282 |
-
</div>
|
283 |
-
<?php
|
284 |
}
|
285 |
|
286 |
/**
|
@@ -560,19 +381,27 @@ class HappyForms_Part_Phone extends HappyForms_Form_Part {
|
|
560 |
*
|
561 |
* @return string
|
562 |
*/
|
563 |
-
public function sanitize_value( $part_data = array() ) {
|
564 |
$sanitized_value = $this->get_default_value();
|
565 |
-
$
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
566 |
|
567 |
-
if (
|
568 |
-
$
|
|
|
|
|
569 |
}
|
570 |
|
571 |
-
if ( isset( $_REQUEST[$
|
572 |
-
$sanitized_value = array(
|
573 |
-
$sanitized_value,
|
574 |
-
sanitize_text_field( $_REQUEST[$part_id . '_confirmation'] )
|
575 |
-
);
|
576 |
}
|
577 |
|
578 |
return $sanitized_value;
|
@@ -589,33 +418,40 @@ class HappyForms_Part_Phone extends HappyForms_Form_Part {
|
|
589 |
* @return string|object
|
590 |
*/
|
591 |
public function validate_value( $part_data, $value ) {
|
592 |
-
$
|
593 |
-
$validated_value = $value;
|
594 |
-
|
595 |
-
|
596 |
-
|
597 |
-
$
|
598 |
-
$validated_confirmation_value = $validated_value[1];
|
599 |
-
$validated_value = $validated_value[0];
|
600 |
-
} else {
|
601 |
-
$validated_confirmation_value = $validated_value;
|
602 |
}
|
603 |
|
604 |
-
if (
|
605 |
-
$validated_value = new WP_Error(
|
|
|
606 |
}
|
607 |
|
608 |
-
|
609 |
-
|
610 |
-
|
611 |
-
|
|
|
|
|
|
|
612 |
|
613 |
-
|
614 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
615 |
}
|
616 |
}
|
617 |
|
618 |
-
return $
|
619 |
}
|
620 |
|
621 |
/**
|
@@ -637,4 +473,52 @@ class HappyForms_Part_Phone extends HappyForms_Form_Part {
|
|
637 |
);
|
638 |
}
|
639 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
640 |
}
|
3 |
class HappyForms_Part_Phone extends HappyForms_Form_Part {
|
4 |
|
5 |
public $type = 'phone';
|
|
|
|
|
6 |
|
7 |
public function __construct() {
|
8 |
$this->label = __( 'Phone', 'happyforms' );
|
9 |
$this->description = __( 'For phone numbers. Includes country specific formatting.', 'happyforms' );
|
10 |
+
|
11 |
+
add_filter( 'happyforms_part_data_attributes', array( $this, 'html_part_data_attributes' ), 10, 3 );
|
12 |
+
add_filter( 'happyforms_frontend_dependencies', array( $this, 'script_dependencies' ), 10, 2 );
|
13 |
}
|
14 |
|
15 |
/**
|
65 |
'default' => 0,
|
66 |
'sanitize' => 'intval'
|
67 |
),
|
|
|
|
|
|
|
|
|
68 |
'confirmation_field_label' => array(
|
69 |
'default' => __( 'Confirm Number', 'happyforms' ),
|
70 |
'sanitize' => 'sanitize_text_field'
|
83 |
*
|
84 |
* @return string
|
85 |
*/
|
86 |
+
public function customize_templates() {
|
87 |
+
require_once( happyforms_get_include_folder() . '/templates/parts/customize-phone.php' );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
88 |
}
|
89 |
|
90 |
/**
|
98 |
* @return string Markup for the form part.
|
99 |
*/
|
100 |
public function frontend_template( $part_data = array(), $form_data = array() ) {
|
101 |
+
$part = wp_parse_args( $part_data, $this->get_customize_defaults() );
|
102 |
+
$form = $form_data;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
103 |
|
104 |
+
include( happyforms_get_include_folder() . '/templates/parts/frontend-phone.php' );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
105 |
}
|
106 |
|
107 |
/**
|
381 |
*
|
382 |
* @return string
|
383 |
*/
|
384 |
+
public function sanitize_value( $part_data = array(), $form_data = array() ) {
|
385 |
$sanitized_value = $this->get_default_value();
|
386 |
+
$confirmed_value = $sanitized_value;
|
387 |
+
$part_name = happyforms_get_part_name( $part_data, $form_data );
|
388 |
+
|
389 |
+
if ( isset( $_REQUEST[$part_name] ) ) {
|
390 |
+
$sanitized_value = sanitize_text_field( $_REQUEST[$part_name] );
|
391 |
+
}
|
392 |
+
|
393 |
+
if ( isset( $_REQUEST[$part_name . '_confirmation'] ) ) {
|
394 |
+
$confirmed_value = sanitize_text_field( $_REQUEST[$part_name . '_confirmation'] );
|
395 |
+
}
|
396 |
|
397 |
+
if ( $part_data['mask_phone_country'] ) {
|
398 |
+
$prefix_length = strlen( $part_data['mask_phone_country'] ) + 1;
|
399 |
+
$sanitized_value = substr( $sanitized_value, $prefix_length );
|
400 |
+
$confirmed_value = substr( $confirmed_value, $prefix_length );
|
401 |
}
|
402 |
|
403 |
+
if ( isset( $_REQUEST[$part_name . '_confirmation'] ) ) {
|
404 |
+
$sanitized_value = array( $sanitized_value, $confirmed_value );
|
|
|
|
|
|
|
405 |
}
|
406 |
|
407 |
return $sanitized_value;
|
418 |
* @return string|object
|
419 |
*/
|
420 |
public function validate_value( $part_data, $value ) {
|
421 |
+
$has_confirmation_value = is_array( $value );
|
422 |
+
$validated_value = $has_confirmation_value ? $value[0] : $value;
|
423 |
+
|
424 |
+
if ( $part_data['required'] && '' === $validated_value ) {
|
425 |
+
$validated_value = new WP_Error( 'missing_required_field' );
|
426 |
+
return $validated_value;
|
|
|
|
|
|
|
|
|
427 |
}
|
428 |
|
429 |
+
if ( $has_confirmation_value && $value[0] !== $value[1] ) {
|
430 |
+
$validated_value = new WP_Error( 'numbers_not_matching' );
|
431 |
+
return $validated_value;
|
432 |
}
|
433 |
|
434 |
+
return $validated_value;
|
435 |
+
}
|
436 |
+
|
437 |
+
public function html_part_data_attributes( $attributes, $part, $form ) {
|
438 |
+
if ( $this->type !== $part['type'] ) {
|
439 |
+
return $attributes;
|
440 |
+
}
|
441 |
|
442 |
+
if ( $part['confirmation_field'] ) {
|
443 |
+
$attributes['happyforms-require-confirmation'] = '';
|
444 |
+
}
|
445 |
+
|
446 |
+
if ( $part['masked'] ) {
|
447 |
+
$attributes['mask'] = 'true';
|
448 |
+
|
449 |
+
if ( $part['mask_phone_country'] ) {
|
450 |
+
$attributes['country'] = $part['mask_phone_country'];
|
451 |
}
|
452 |
}
|
453 |
|
454 |
+
return $attributes;
|
455 |
}
|
456 |
|
457 |
/**
|
473 |
);
|
474 |
}
|
475 |
|
476 |
+
/**
|
477 |
+
* Action: enqueue additional scripts on the frontend.
|
478 |
+
*
|
479 |
+
* @since 1.0.0.
|
480 |
+
*
|
481 |
+
* @hooked action happyforms_frontend_dependencies
|
482 |
+
*
|
483 |
+
* @param array List of dependencies.
|
484 |
+
*
|
485 |
+
* @return array
|
486 |
+
*/
|
487 |
+
public function script_dependencies( $deps, $forms ) {
|
488 |
+
$contains_phone = false;
|
489 |
+
$form_controller = happyforms_get_form_controller();
|
490 |
+
|
491 |
+
foreach ( $forms as $form ) {
|
492 |
+
if ( $form_controller->get_first_part_by_type( $form, $this->type ) ) {
|
493 |
+
$contains_phone = true;
|
494 |
+
break;
|
495 |
+
}
|
496 |
+
}
|
497 |
+
|
498 |
+
if ( ! happyforms_is_preview() && ! $contains_phone ) {
|
499 |
+
return $deps;
|
500 |
+
}
|
501 |
+
|
502 |
+
wp_register_script(
|
503 |
+
'cleave',
|
504 |
+
happyforms_get_plugin_url() . 'assets/js/lib/cleave.min.js'
|
505 |
+
);
|
506 |
+
|
507 |
+
wp_register_script(
|
508 |
+
'cleave-phone',
|
509 |
+
happyforms_get_plugin_url() . 'assets/js/lib/cleave-phone.i18n.js',
|
510 |
+
array( 'cleave' ), false, true
|
511 |
+
);
|
512 |
+
|
513 |
+
wp_register_script(
|
514 |
+
'happyforms-part-phone',
|
515 |
+
happyforms_get_plugin_url() . 'assets/js/frontend/phone.js',
|
516 |
+
array( 'cleave-phone' ), false, true
|
517 |
+
);
|
518 |
+
|
519 |
+
$deps[] = 'happyforms-part-phone';
|
520 |
+
|
521 |
+
return $deps;
|
522 |
+
}
|
523 |
+
|
524 |
}
|
inc/classes/parts/class-part-placeholder.php
CHANGED
@@ -3,7 +3,6 @@
|
|
3 |
class HappyForms_Part_Placeholder extends HappyForms_Form_Part {
|
4 |
|
5 |
public $type = 'placeholder';
|
6 |
-
public $template_id = 'happyforms-placeholder-template';
|
7 |
|
8 |
public function __construct() {
|
9 |
$this->label = __( 'Placeholder', 'happyforms' );
|
@@ -12,9 +11,9 @@ class HappyForms_Part_Placeholder extends HappyForms_Form_Part {
|
|
12 |
|
13 |
/**
|
14 |
* Get all part meta fields defaults.
|
15 |
-
*
|
16 |
* @since 1.0.0.
|
17 |
-
*
|
18 |
* @return array
|
19 |
*/
|
20 |
public function get_customize_fields() {
|
@@ -39,6 +38,10 @@ class HappyForms_Part_Placeholder extends HappyForms_Form_Part {
|
|
39 |
'default' => '',
|
40 |
'sanitize' => 'sanitize_text_field'
|
41 |
),
|
|
|
|
|
|
|
|
|
42 |
'placeholder_text' => array(
|
43 |
'default' => '',
|
44 |
'sanitize' => 'sanitize_text_field'
|
@@ -48,101 +51,37 @@ class HappyForms_Part_Placeholder extends HappyForms_Form_Part {
|
|
48 |
|
49 |
/**
|
50 |
* Get template for part item in customize pane.
|
51 |
-
*
|
52 |
* @since 1.0.0.
|
53 |
-
*
|
54 |
* @return string
|
55 |
*/
|
56 |
-
public function
|
57 |
-
|
58 |
-
<p>
|
59 |
-
<label for="<%= instance.id %>_title"><?php _e( 'Title', 'happyforms' ); ?></label>
|
60 |
-
<input type="text" id="<%= instance.id %>_title" class="widefat title" value="<%= instance.label %>" data-bind="label" />
|
61 |
-
</p>
|
62 |
-
<p>
|
63 |
-
<label for="<%= instance.id %>_label_placement"><?php _e( 'Title placement', 'happyforms' ); ?></label>
|
64 |
-
<select id="<%= instance.id %>_label_placement" data-bind="label_placement">
|
65 |
-
<option value="above"<%= (instance.label_placement == 'above') ? ' selected' : '' %>><?php _e( 'Above', 'happyforms' ); ?></option>
|
66 |
-
<option value="left"<%= (instance.label_placement == 'left') ? ' selected' : '' %>><?php _e( 'Left', 'happyforms' ); ?></option>
|
67 |
-
<option value="below"<%= (instance.label_placement == 'below') ? ' selected' : '' %>><?php _e( 'Below', 'happyforms' ); ?></option>
|
68 |
-
</select>
|
69 |
-
</p>
|
70 |
-
<p class="label_placement-options" style="display: none">
|
71 |
-
<label>
|
72 |
-
<input type="checkbox" class="checkbox apply-all-check" value="" data-apply-to="label_placement" /> <?php _e( 'Apply to all parts', 'happyforms' ); ?>
|
73 |
-
</label>
|
74 |
-
</p>
|
75 |
-
<p>
|
76 |
-
<label for="<%= instance.id %>_placeholder_text"><?php _e( 'Text', 'happyforms' ); ?></label>
|
77 |
-
<textarea id="<%= instance.id %>_placeholder_text" class="widefat title" name="placeholder_text" data-bind="placeholder_text"><%= instance.placeholder_text %></textarea>
|
78 |
-
</p>
|
79 |
-
<p>
|
80 |
-
<label for="<%= instance.id %>_width"><?php _e( 'Width', 'happyforms' ); ?></label>
|
81 |
-
<select id="<%= instance.id %>_width" name="width" data-bind="width" class="widefat">
|
82 |
-
<option value="full"<%= (instance.width == 'full') ? ' selected' : '' %>><?php _e( 'Full', 'happyforms' ); ?></option>
|
83 |
-
<option value="half"<%= (instance.width == 'half') ? ' selected' : '' %>><?php _e( 'Half', 'happyforms' ); ?></option>
|
84 |
-
<option value="third"<%= (instance.width == 'third') ? ' selected' : '' %>><?php _e( 'One third', 'happyforms' ); ?></option>
|
85 |
-
</select>
|
86 |
-
</p>
|
87 |
-
<p class="width-options" style="display: none">
|
88 |
-
<label>
|
89 |
-
<input type="checkbox" class="checkbox apply-all-check" value="" data-apply-to="width" /> <?php _e( 'Apply to all parts', 'happyforms' ); ?>
|
90 |
-
</label>
|
91 |
-
</p>
|
92 |
-
<p>
|
93 |
-
<label for="<%= instance.id %>_css_class"><?php _e( 'Custom CSS class', 'happyforms' ); ?></label>
|
94 |
-
<input type="text" id="<%= instance.id %>_css_class" class="widefat title" value="<%= instance.css_class %>" data-bind="css_class" />
|
95 |
-
</p>
|
96 |
-
<?php
|
97 |
}
|
98 |
|
99 |
/**
|
100 |
* Get front end part template with parsed data.
|
101 |
-
*
|
102 |
* @since 1.0.0.
|
103 |
-
*
|
104 |
* @param array $part_data Form part data.
|
105 |
* @param array $form_data Form (post) data.
|
106 |
-
*
|
107 |
* @return string Markup for the form part.
|
108 |
*/
|
109 |
public function frontend_template( $part_data = array(), $form_data = array() ) {
|
110 |
-
$
|
111 |
-
|
112 |
-
$classes = array('happyforms-part--placeholder');
|
113 |
-
|
114 |
-
if ( $part_data['width'] ) {
|
115 |
-
$classes[] = 'happyforms-part--width-' . esc_attr( $part_data['width'] ) . ' ';
|
116 |
-
}
|
117 |
-
|
118 |
-
if ( $part_data['label_placement'] ) {
|
119 |
-
$classes[] = 'happyforms-part--label-' . esc_attr( $part_data['label_placement'] ) . ' ';
|
120 |
-
}
|
121 |
|
122 |
-
|
123 |
-
$classes[] = $part_data['css_class'];
|
124 |
-
}
|
125 |
-
|
126 |
-
$classes = implode( ' ', $classes );
|
127 |
-
?>
|
128 |
-
<div class="happyforms-part happyforms-part--placeholder happyforms-part-editable <?php echo esc_attr( $classes ); ?>" data-happyforms-id="<?php echo esc_attr( $part_data['id'] ); ?>">
|
129 |
-
<div class="happyforms-part__wrap">
|
130 |
-
<label class="happyforms-part__label">
|
131 |
-
<span class="label"><?php echo esc_html( $part_data['label'] ); ?></span>
|
132 |
-
</label>
|
133 |
-
<div class="happyforms-part__el">
|
134 |
-
<?php echo $part_data['placeholder_text']; ?>
|
135 |
-
</div>
|
136 |
-
</div>
|
137 |
-
</div>
|
138 |
-
<?php
|
139 |
}
|
140 |
|
141 |
/**
|
142 |
* Get all possible messages definitions.
|
143 |
-
*
|
144 |
* @since 1.0.0.
|
145 |
-
*
|
146 |
* @return array Associative array, specifying message type and copy.
|
147 |
*/
|
148 |
public function get_message_definitions() {
|
@@ -151,19 +90,19 @@ class HappyForms_Part_Placeholder extends HappyForms_Form_Part {
|
|
151 |
|
152 |
/**
|
153 |
* Sanitize submitted value before storing it.
|
154 |
-
*
|
155 |
* @since 1.0.0.
|
156 |
-
*
|
157 |
* @param array $part_data Form part data.
|
158 |
-
*
|
159 |
* @return string
|
160 |
*/
|
161 |
-
public function sanitize_value( $part_data = array() ) {
|
162 |
$sanitized_value = $this->get_default_value();
|
163 |
-
$
|
164 |
|
165 |
-
if ( isset( $_REQUEST[$
|
166 |
-
$sanitized_value = sanitize_text_field( $_REQUEST[$
|
167 |
}
|
168 |
|
169 |
return $sanitized_value;
|
@@ -171,16 +110,15 @@ class HappyForms_Part_Placeholder extends HappyForms_Form_Part {
|
|
171 |
|
172 |
/**
|
173 |
* Validate value before submitting it.
|
174 |
-
*
|
175 |
* @since 1.0.0.
|
176 |
-
*
|
177 |
* @param array $part_data Form part data.
|
178 |
* @param string $value Submitted value.
|
179 |
-
*
|
180 |
* @return string
|
181 |
*/
|
182 |
public function validate_value( $part_data, $value ) {
|
183 |
-
$part_id = $part_data['id'];
|
184 |
$validated_value = esc_attr( $value );
|
185 |
|
186 |
return $validated_value;
|
@@ -188,11 +126,11 @@ class HappyForms_Part_Placeholder extends HappyForms_Form_Part {
|
|
188 |
|
189 |
/**
|
190 |
* Enqueue scripts in customizer area.
|
191 |
-
*
|
192 |
* @since 1.0.0.
|
193 |
-
*
|
194 |
* @param array List of dependencies.
|
195 |
-
*
|
196 |
* @return void
|
197 |
*/
|
198 |
public function customize_enqueue_scripts( $deps = array() ) {
|
3 |
class HappyForms_Part_Placeholder extends HappyForms_Form_Part {
|
4 |
|
5 |
public $type = 'placeholder';
|
|
|
6 |
|
7 |
public function __construct() {
|
8 |
$this->label = __( 'Placeholder', 'happyforms' );
|
11 |
|
12 |
/**
|
13 |
* Get all part meta fields defaults.
|
14 |
+
*
|
15 |
* @since 1.0.0.
|
16 |
+
*
|
17 |
* @return array
|
18 |
*/
|
19 |
public function get_customize_fields() {
|
38 |
'default' => '',
|
39 |
'sanitize' => 'sanitize_text_field'
|
40 |
),
|
41 |
+
'required' => array(
|
42 |
+
'default' => '',
|
43 |
+
'sanitize' => 'happyforms_sanitize_checkbox',
|
44 |
+
),
|
45 |
'placeholder_text' => array(
|
46 |
'default' => '',
|
47 |
'sanitize' => 'sanitize_text_field'
|
51 |
|
52 |
/**
|
53 |
* Get template for part item in customize pane.
|
54 |
+
*
|
55 |
* @since 1.0.0.
|
56 |
+
*
|
57 |
* @return string
|
58 |
*/
|
59 |
+
public function customize_templates() {
|
60 |
+
require_once( happyforms_get_include_folder() . '/templates/parts/customize-placeholder.php' );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
61 |
}
|
62 |
|
63 |
/**
|
64 |
* Get front end part template with parsed data.
|
65 |
+
*
|
66 |
* @since 1.0.0.
|
67 |
+
*
|
68 |
* @param array $part_data Form part data.
|
69 |
* @param array $form_data Form (post) data.
|
70 |
+
*
|
71 |
* @return string Markup for the form part.
|
72 |
*/
|
73 |
public function frontend_template( $part_data = array(), $form_data = array() ) {
|
74 |
+
$part = wp_parse_args( $part_data, $this->get_customize_defaults() );
|
75 |
+
$form = $form_data;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
76 |
|
77 |
+
include( happyforms_get_include_folder() . '/templates/parts/frontend-placeholder.php' );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
78 |
}
|
79 |
|
80 |
/**
|
81 |
* Get all possible messages definitions.
|
82 |
+
*
|
83 |
* @since 1.0.0.
|
84 |
+
*
|
85 |
* @return array Associative array, specifying message type and copy.
|
86 |
*/
|
87 |
public function get_message_definitions() {
|
90 |
|
91 |
/**
|
92 |
* Sanitize submitted value before storing it.
|
93 |
+
*
|
94 |
* @since 1.0.0.
|
95 |
+
*
|
96 |
* @param array $part_data Form part data.
|
97 |
+
*
|
98 |
* @return string
|
99 |
*/
|
100 |
+
public function sanitize_value( $part_data = array(), $form_data = array() ) {
|
101 |
$sanitized_value = $this->get_default_value();
|
102 |
+
$part_name = happyforms_get_part_name( $part_data, $form_data );
|
103 |
|
104 |
+
if ( isset( $_REQUEST[$part_name] ) ) {
|
105 |
+
$sanitized_value = sanitize_text_field( $_REQUEST[$part_name] );
|
106 |
}
|
107 |
|
108 |
return $sanitized_value;
|
110 |
|
111 |
/**
|
112 |
* Validate value before submitting it.
|
113 |
+
*
|
114 |
* @since 1.0.0.
|
115 |
+
*
|
116 |
* @param array $part_data Form part data.
|
117 |
* @param string $value Submitted value.
|
118 |
+
*
|
119 |
* @return string
|
120 |
*/
|
121 |
public function validate_value( $part_data, $value ) {
|
|
|
122 |
$validated_value = esc_attr( $value );
|
123 |
|
124 |
return $validated_value;
|
126 |
|
127 |
/**
|
128 |
* Enqueue scripts in customizer area.
|
129 |
+
*
|
130 |
* @since 1.0.0.
|
131 |
+
*
|
132 |
* @param array List of dependencies.
|
133 |
+
*
|
134 |
* @return void
|
135 |
*/
|
136 |
public function customize_enqueue_scripts( $deps = array() ) {
|
inc/classes/parts/class-part-radio.php
CHANGED
@@ -4,12 +4,12 @@ class HappyForms_Part_Radio extends HappyForms_Form_Part {
|
|
4 |
|
5 |
public $type = 'radio';
|
6 |
public $template_id = 'happyforms-radio-template';
|
7 |
-
public $item_customize_template_id = 'happyforms-radio-option-customize-template';
|
8 |
-
public $item_frontend_template_id = 'happyforms-radio-option-frontend-template';
|
9 |
|
10 |
public function __construct() {
|
11 |
$this->label = __( 'Single Choice', 'happyforms' );
|
12 |
$this->description = __( 'For radio buttons allowing one selection.', 'happyforms' );
|
|
|
|
|
13 |
}
|
14 |
|
15 |
/**
|
@@ -71,7 +71,7 @@ class HappyForms_Part_Radio extends HappyForms_Form_Part {
|
|
71 |
*
|
72 |
* @return array
|
73 |
*/
|
74 |
-
|
75 |
return array(
|
76 |
'is_default' => 0,
|
77 |
'label' => '',
|
@@ -86,101 +86,8 @@ class HappyForms_Part_Radio extends HappyForms_Form_Part {
|
|
86 |
*
|
87 |
* @return string
|
88 |
*/
|
89 |
-
public function
|
90 |
-
|
91 |
-
<p>
|
92 |
-
<label for="<%= instance.id %>_title"><?php _e( 'Title', 'happyforms' ); ?></label>
|
93 |
-
<input type="text" id="<%= instance.id %>_title" class="widefat title" value="<%= instance.label %>" data-bind="label" />
|
94 |
-
</p>
|
95 |
-
<p>
|
96 |
-
<label for="<%= instance.id %>_label_placement"><?php _e( 'Title placement', 'happyforms' ); ?></label>
|
97 |
-
<select id="<%= instance.id %>_label_placement" data-bind="label_placement">
|
98 |
-
<option value="above"<%= (instance.label_placement == 'above') ? ' selected' : '' %>><?php _e( 'Above', 'happyforms' ); ?></option>
|
99 |
-
<option value="left"<%= (instance.label_placement == 'left') ? ' selected' : '' %>><?php _e( 'Left', 'happyforms' ); ?></option>
|
100 |
-
<option value="below"<%= (instance.label_placement == 'below') ? ' selected' : '' %>><?php _e( 'Below', 'happyforms' ); ?></option>
|
101 |
-
</select>
|
102 |
-
</p>
|
103 |
-
<p class="label_placement-options" style="display: none">
|
104 |
-
<label>
|
105 |
-
<input type="checkbox" class="checkbox apply-all-check" value="" data-apply-to="label_placement" /> <?php _e( 'Apply to all parts', 'happyforms' ); ?>
|
106 |
-
</label>
|
107 |
-
</p>
|
108 |
-
<p>
|
109 |
-
<label for="<%= instance.id %>_description"><?php _e( 'Description', 'happyforms' ); ?></label>
|
110 |
-
<textarea id="<%= instance.id %>_description" data-bind="description"><%= instance.description %></textarea>
|
111 |
-
</p>
|
112 |
-
<p class="tooltip-description-wrap" style="display: <%= (instance.description != '') ? 'block' : 'none' %>">
|
113 |
-
<label>
|
114 |
-
<input type="checkbox" class="checkbox" value="1" <% if ( instance.tooltip_description ) { %>checked="checked"<% } %> data-bind="tooltip_description" /> <?php _e( 'Show description in a tooltip', 'happyforms' ); ?>
|
115 |
-
</label>
|
116 |
-
</p>
|
117 |
-
<p>
|
118 |
-
<label for="<%= instance.id %>_display_type"><?php _e( 'Display options', 'happyforms' ); ?></label>
|
119 |
-
<select id="<%= instance.id %>_display_type" name="display_type" data-bind="display_type" class="widefat">
|
120 |
-
<option value="inline"<%= (instance.display_type == 'inline') ? ' selected' : '' %>><?php _e( 'Horizontal', 'happyforms' ); ?></option>
|
121 |
-
<option value="block"<%= (instance.display_type == 'block') ? ' selected' : '' %>><?php _e( 'Vertical', 'happyforms' ); ?></option>
|
122 |
-
</select>
|
123 |
-
</p>
|
124 |
-
<p>
|
125 |
-
<label for="<%= instance.id %>_width"><?php _e( 'Width', 'happyforms' ); ?></label>
|
126 |
-
<select id="<%= instance.id %>_width" name="width" data-bind="width" class="widefat">
|
127 |
-
<option value="full"<%= (instance.width == 'full') ? ' selected' : '' %>><?php _e( 'Full', 'happyforms' ); ?></option>
|
128 |
-
<option value="half"<%= (instance.width == 'half') ? ' selected' : '' %>><?php _e( 'Half', 'happyforms' ); ?></option>
|
129 |
-
<option value="third"<%= (instance.width == 'third') ? ' selected' : '' %>><?php _e( 'One third', 'happyforms' ); ?></option>
|
130 |
-
</select>
|
131 |
-
</p>
|
132 |
-
<p class="width-options" style="display: none">
|
133 |
-
<label>
|
134 |
-
<input type="checkbox" class="checkbox apply-all-check" value="" data-apply-to="width" /> <?php _e( 'Apply to all parts', 'happyforms' ); ?>
|
135 |
-
</label>
|
136 |
-
</p>
|
137 |
-
<p>
|
138 |
-
<label for="<%= instance.id %>_css_class"><?php _e( 'Custom CSS class', 'happyforms' ); ?></label>
|
139 |
-
<input type="text" id="<%= instance.id %>_css_class" class="widefat title" value="<%= instance.css_class %>" data-bind="css_class" />
|
140 |
-
</p>
|
141 |
-
<p>
|
142 |
-
<label>
|
143 |
-
<input type="checkbox" class="checkbox" value="1" <% if ( instance.required ) { %>checked="checked"<% } %> data-bind="required" /> <?php _e( 'This is a required field', 'happyforms' ); ?>
|
144 |
-
</label>
|
145 |
-
</p>
|
146 |
-
<ul class="options">
|
147 |
-
<h3><?php _e( 'Options', 'happyforms' ); ?></h3>
|
148 |
-
<% if ( !instance.options.length ) { %>
|
149 |
-
<p class="no-options"><?php _e( 'No options added yet. Add one by clicking the <i>Add option</i> link below.', 'happyforms' ); ?></p>
|
150 |
-
<% } %>
|
151 |
-
</ul>
|
152 |
-
<p class="links">
|
153 |
-
<a href="#" class="add-option"><?php _e( 'Add option', 'happyforms' ); ?></a>
|
154 |
-
</p>
|
155 |
-
<?php
|
156 |
-
}
|
157 |
-
|
158 |
-
/**
|
159 |
-
* Get template for option / sub-part item in customize pane.
|
160 |
-
*
|
161 |
-
* @since 1.0.0.
|
162 |
-
*
|
163 |
-
* @return string
|
164 |
-
*/
|
165 |
-
public function customize_item_template() {
|
166 |
-
?>
|
167 |
-
<li class="happyforms-part-widget happyforms-part-widget--sub">
|
168 |
-
<label>
|
169 |
-
<?php _e( 'Label', 'happyforms' ); ?>
|
170 |
-
<input type="text" class="widefat" name="" value="<%= label %>" data-option-attribute="label" data-preview-selector=".label">
|
171 |
-
</label>
|
172 |
-
<label class="happyforms-part-item-description">
|
173 |
-
<?php _e( 'Description', 'happyforms' ); ?>
|
174 |
-
<input type="text" class="widefat" name="" value="<%= (typeof description !== 'undefined') ? description : '' %>" data-option-attribute="description" data-preview-selector=".happyforms-part-option__description">
|
175 |
-
</label>
|
176 |
-
<label>
|
177 |
-
<input type="checkbox" name="" value="1" class="default-option-switch"<% if (is_default == 1) { %> checked="checked"<% } %>> <?php _e( 'Make this option default', 'happyforms' ); ?>
|
178 |
-
</label>
|
179 |
-
<div class="option-actions">
|
180 |
-
<a href="#" class="delete-option"><?php _e( 'Delete', 'happyforms' ); ?></a>
|
181 |
-
</div>
|
182 |
-
</li>
|
183 |
-
<?php
|
184 |
}
|
185 |
|
186 |
/**
|
@@ -194,112 +101,14 @@ class HappyForms_Part_Radio extends HappyForms_Form_Part {
|
|
194 |
* @return string Markup for the form part.
|
195 |
*/
|
196 |
public function frontend_template( $part_data = array(), $form_data = array() ) {
|
197 |
-
$
|
198 |
-
$
|
199 |
-
|
200 |
-
$classes = array('happyforms-part--radio');
|
201 |
|
202 |
-
|
203 |
-
$
|
204 |
}
|
205 |
|
206 |
-
|
207 |
-
$classes[] = 'display-type--block ';
|
208 |
-
}
|
209 |
-
|
210 |
-
if ( $part_data['label_placement'] ) {
|
211 |
-
$classes[] = 'happyforms-part--label-' . esc_attr( $part_data['label_placement'] ) . ' ';
|
212 |
-
}
|
213 |
-
|
214 |
-
if ( !empty( $part_data['css_class'] ) ) {
|
215 |
-
$classes[] = $part_data['css_class'];
|
216 |
-
}
|
217 |
-
|
218 |
-
$classes = implode( ' ', $classes );
|
219 |
-
?>
|
220 |
-
<div class="happyforms-part happyforms-part--radio happyforms-part-editable <?php echo esc_attr( $classes ); ?>" data-happyforms-id="<?php echo esc_attr( $part_data['id'] ); ?>">
|
221 |
-
<div class="happyforms-part__wrap">
|
222 |
-
<label class="happyforms-part__label">
|
223 |
-
<span class="label"><?php echo esc_html( $part_data['label'] ); ?></span>
|
224 |
-
<?php if ( 1 === intval( $part_data['required'] ) ) : ?>
|
225 |
-
<span class="happyforms-required"> <?php echo $required_text; ?></span>
|
226 |
-
<?php endif; ?>
|
227 |
-
</label>
|
228 |
-
<div class="happyforms-part__el">
|
229 |
-
<?php
|
230 |
-
if ( isset( $part_data['options']) ) {
|
231 |
-
$options = $part_data['options'];
|
232 |
-
|
233 |
-
foreach( $options as $option ) {
|
234 |
-
$option = wp_parse_args( $option, $this->get_option_defaults() );
|
235 |
-
|
236 |
-
$this->frontend_item_template( $part_data, $option, $part_data['required'], $form_data );
|
237 |
-
}
|
238 |
-
}
|
239 |
-
?>
|
240 |
-
</div>
|
241 |
-
<?php happyforms_print_part_description( $part_data ); ?>
|
242 |
-
<?php
|
243 |
-
if ( $form_data ) :
|
244 |
-
happyforms_message_notices( $form_data, $part_data['id'] );
|
245 |
-
endif;
|
246 |
-
?>
|
247 |
-
</div>
|
248 |
-
</div>
|
249 |
-
<?php
|
250 |
-
}
|
251 |
-
|
252 |
-
/**
|
253 |
-
* Get front end option (sub-part) template with parsed data.
|
254 |
-
*
|
255 |
-
* @since 1.0.0.
|
256 |
-
*
|
257 |
-
* @param array $part_data Form part data.
|
258 |
-
* @param array $option Option (form sub-part) data.
|
259 |
-
* @param int $requred Required field (1) or not.
|
260 |
-
*
|
261 |
-
* @return string Markup for the part option.
|
262 |
-
*/
|
263 |
-
public function frontend_item_template( $part_data, $option, $required, $form_data = array() ) {
|
264 |
-
?>
|
265 |
-
<div class="happyforms-part__option happyforms-part-option" id="<?php echo esc_attr( $option['id'] ); ?>">
|
266 |
-
<label class="option-label">
|
267 |
-
<input type="radio" class="happyforms-visuallyhidden" name="<?php echo esc_attr( happyforms_get_part_name( $part_data['id'], $form_data['ID'] ) ); ?>" value="<?php echo esc_attr( $option['label'] ); ?>"<?php if ( $option['is_default'] == 1 ) : ?> checked<?php endif; ?><?php if ( 1 === intval( $required ) ) : ?> required aria-required="true"<?php endif; ?>>
|
268 |
-
<span class="checkmark"></span>
|
269 |
-
<span class="border"></span>
|
270 |
-
|
271 |
-
<?php if ( is_customize_preview() || !empty( $option['label'] ) ) : ?>
|
272 |
-
<span class="label"><?php echo esc_attr( $option['label'] ); ?></span>
|
273 |
-
<?php endif; ?>
|
274 |
-
</label>
|
275 |
-
<?php if ( is_customize_preview() || !empty( $option['description'] ) ) : ?>
|
276 |
-
<span class="happyforms-part-option__description">
|
277 |
-
<?php echo esc_attr( $option['description'] ); ?>
|
278 |
-
</span>
|
279 |
-
<?php endif; ?>
|
280 |
-
</div>
|
281 |
-
<?php
|
282 |
-
}
|
283 |
-
|
284 |
-
/**
|
285 |
-
* Get option's Backbone template for preview purposes. Passed to previewer to create a new Backbone view.
|
286 |
-
*
|
287 |
-
* @since 1.0.0.
|
288 |
-
*
|
289 |
-
* @return string Backbone template.
|
290 |
-
*/
|
291 |
-
public function preview_option_template() {
|
292 |
-
?>
|
293 |
-
<div class="happyforms-part__option happyforms-part-option">
|
294 |
-
<label class="option-label" id="<%= id %>">
|
295 |
-
<input type="radio" name="" value="<%= label %>">
|
296 |
-
<span class="checkmark"></span>
|
297 |
-
<span class="border"></span>
|
298 |
-
<span class="label"><%= label %></span>
|
299 |
-
</label>
|
300 |
-
<span class="happyforms-part-option__description"><%= description %></span>
|
301 |
-
</div>
|
302 |
-
<?php
|
303 |
}
|
304 |
|
305 |
/**
|
@@ -350,12 +159,12 @@ class HappyForms_Part_Radio extends HappyForms_Form_Part {
|
|
350 |
*
|
351 |
* @return string
|
352 |
*/
|
353 |
-
public function sanitize_value( $part_data = array() ) {
|
354 |
$sanitized_value = $this->get_default_value();
|
355 |
-
$
|
356 |
|
357 |
-
if ( isset( $_REQUEST[$
|
358 |
-
$sanitized_value = sanitize_text_field( $_REQUEST[$
|
359 |
}
|
360 |
|
361 |
return $sanitized_value;
|
@@ -372,27 +181,29 @@ class HappyForms_Part_Radio extends HappyForms_Form_Part {
|
|
372 |
* @return string|object
|
373 |
*/
|
374 |
public function validate_value( $part_data, $value ) {
|
375 |
-
$part_id = $part_data['id'];
|
376 |
$validated_value = $value;
|
377 |
|
378 |
if ( 1 === $part_data['required'] && empty( $validated_value ) ) {
|
379 |
-
$validated_value = new WP_Error(
|
|
|
380 |
}
|
381 |
|
382 |
-
|
383 |
-
$possible_options = array();
|
384 |
|
385 |
-
|
386 |
-
|
|
|
387 |
}
|
388 |
|
389 |
-
|
390 |
-
|
391 |
-
|
392 |
-
|
|
|
|
|
393 |
}
|
394 |
|
395 |
-
return $
|
396 |
}
|
397 |
|
398 |
}
|
4 |
|
5 |
public $type = 'radio';
|
6 |
public $template_id = 'happyforms-radio-template';
|
|
|
|
|
7 |
|
8 |
public function __construct() {
|
9 |
$this->label = __( 'Single Choice', 'happyforms' );
|
10 |
$this->description = __( 'For radio buttons allowing one selection.', 'happyforms' );
|
11 |
+
|
12 |
+
add_filter( 'happyforms_part_class', array( $this, 'html_part_class' ), 10, 3 );
|
13 |
}
|
14 |
|
15 |
/**
|
71 |
*
|
72 |
* @return array
|
73 |
*/
|
74 |
+
private function get_option_defaults() {
|
75 |
return array(
|
76 |
'is_default' => 0,
|
77 |
'label' => '',
|
86 |
*
|
87 |
* @return string
|
88 |
*/
|
89 |
+
public function customize_templates() {
|
90 |
+
require_once( happyforms_get_include_folder() . '/templates/parts/customize-radio.php' );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
91 |
}
|
92 |
|
93 |
/**
|
101 |
* @return string Markup for the form part.
|
102 |
*/
|
103 |
public function frontend_template( $part_data = array(), $form_data = array() ) {
|
104 |
+
$part = wp_parse_args( $part_data, $this->get_customize_defaults() );
|
105 |
+
$form = $form_data;
|
|
|
|
|
106 |
|
107 |
+
foreach( $part['options'] as $o => $option ) {
|
108 |
+
$part['options'][$o] = wp_parse_args( $option, $this->get_option_defaults() );
|
109 |
}
|
110 |
|
111 |
+
include( happyforms_get_include_folder() . '/templates/parts/frontend-radio.php' );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
112 |
}
|
113 |
|
114 |
/**
|
159 |
*
|
160 |
* @return string
|
161 |
*/
|
162 |
+
public function sanitize_value( $part_data = array(), $form_data = array() ) {
|
163 |
$sanitized_value = $this->get_default_value();
|
164 |
+
$part_name = happyforms_get_part_name( $part_data, $form_data );
|
165 |
|
166 |
+
if ( isset( $_REQUEST[$part_name] ) ) {
|
167 |
+
$sanitized_value = sanitize_text_field( $_REQUEST[$part_name] );
|
168 |
}
|
169 |
|
170 |
return $sanitized_value;
|
181 |
* @return string|object
|
182 |
*/
|
183 |
public function validate_value( $part_data, $value ) {
|
|
|
184 |
$validated_value = $value;
|
185 |
|
186 |
if ( 1 === $part_data['required'] && empty( $validated_value ) ) {
|
187 |
+
$validated_value = new WP_Error( 'missing_required_field' );
|
188 |
+
return $validated_value;
|
189 |
}
|
190 |
|
191 |
+
$allowed_values = wp_list_pluck( $part_data['options'], 'label' );
|
|
|
192 |
|
193 |
+
if ( ! in_array( $value, $allowed_values ) ) {
|
194 |
+
$validated_value = new WP_Error( 'not_valid_value' );
|
195 |
+
return $validated_value;
|
196 |
}
|
197 |
|
198 |
+
return $validated_value;
|
199 |
+
}
|
200 |
+
|
201 |
+
public function html_part_class( $class, $part_data, $form_data ) {
|
202 |
+
if ( isset( $part_data['display_type'] ) && 'block' === $part_data['display_type'] ) {
|
203 |
+
$class[] = 'display-type--block';
|
204 |
}
|
205 |
|
206 |
+
return $class;
|
207 |
}
|
208 |
|
209 |
}
|
inc/classes/parts/class-part-rating.php
CHANGED
@@ -65,57 +65,8 @@ class HappyForms_Part_Rating extends HappyForms_Form_Part {
|
|
65 |
*
|
66 |
* @return string
|
67 |
*/
|
68 |
-
public function
|
69 |
-
|
70 |
-
<p>
|
71 |
-
<label for="<%= instance.id %>_title"><?php _e( 'Title', 'happyforms' ); ?></label>
|
72 |
-
<input type="text" id="<%= instance.id %>_title" class="widefat title" value="<%= instance.label %>" data-bind="label" />
|
73 |
-
</p>
|
74 |
-
<p>
|
75 |
-
<label for="<%= instance.id %>_label_placement"><?php _e( 'Title placement', 'happyforms' ); ?></label>
|
76 |
-
<select id="<%= instance.id %>_label_placement" data-bind="label_placement">
|
77 |
-
<option value="above"<%= (instance.label_placement == 'above') ? ' selected' : '' %>><?php _e( 'Above', 'happyforms' ); ?></option>
|
78 |
-
<option value="left"<%= (instance.label_placement == 'left') ? ' selected' : '' %>><?php _e( 'Left', 'happyforms' ); ?></option>
|
79 |
-
<option value="below"<%= (instance.label_placement == 'below') ? ' selected' : '' %>><?php _e( 'Below', 'happyforms' ); ?></option>
|
80 |
-
</select>
|
81 |
-
</p>
|
82 |
-
<p class="label_placement-options" style="display: none">
|
83 |
-
<label>
|
84 |
-
<input type="checkbox" class="checkbox apply-all-check" value="" data-apply-to="label_placement" /> <?php _e( 'Apply to all parts', 'happyforms' ); ?>
|
85 |
-
</label>
|
86 |
-
</p>
|
87 |
-
<p>
|
88 |
-
<label for="<%= instance.id %>_description"><?php _e( 'Description', 'happyforms' ); ?></label>
|
89 |
-
<textarea id="<%= instance.id %>_description" data-bind="description"><%= instance.description %></textarea>
|
90 |
-
</p>
|
91 |
-
<p class="tooltip-description-wrap" style="display: <%= (instance.description != '') ? 'block' : 'none' %>">
|
92 |
-
<label>
|
93 |
-
<input type="checkbox" class="checkbox" value="1" <% if ( instance.tooltip_description ) { %>checked="checked"<% } %> data-bind="tooltip_description" /> <?php _e( 'Show description in a tooltip', 'happyforms' ); ?>
|
94 |
-
</label>
|
95 |
-
</p>
|
96 |
-
<p>
|
97 |
-
<label for="<%= instance.id %>_width"><?php _e( 'Width', 'happyforms' ); ?></label>
|
98 |
-
<select id="<%= instance.id %>_width" name="width" data-bind="width" class="widefat">
|
99 |
-
<option value="full"<%= (instance.width == 'full') ? ' selected' : '' %>><?php _e( 'Full', 'happyforms' ); ?></option>
|
100 |
-
<option value="half"<%= (instance.width == 'half') ? ' selected' : '' %>><?php _e( 'Half', 'happyforms' ); ?></option>
|
101 |
-
<option value="third"<%= (instance.width == 'third') ? ' selected' : '' %>><?php _e( 'One third', 'happyforms' ); ?></option>
|
102 |
-
</select>
|
103 |
-
</p>
|
104 |
-
<p class="width-options" style="display: none">
|
105 |
-
<label>
|
106 |
-
<input type="checkbox" class="checkbox apply-all-check" value="" data-apply-to="width" /> <?php _e( 'Apply to all parts', 'happyforms' ); ?>
|
107 |
-
</label>
|
108 |
-
</p>
|
109 |
-
<p>
|
110 |
-
<label for="<%= instance.id %>_css_class"><?php _e( 'Custom CSS class', 'happyforms' ); ?></label>
|
111 |
-
<input type="text" id="<%= instance.id %>_css_class" class="widefat title" value="<%= instance.css_class %>" data-bind="css_class" />
|
112 |
-
</p>
|
113 |
-
<p>
|
114 |
-
<label>
|
115 |
-
<input type="checkbox" class="checkbox" value="1" <% if ( instance.required ) { %>checked="checked"<% } %> data-bind="required" /> <?php _e( 'This is a required field', 'happyforms' ); ?>
|
116 |
-
</label>
|
117 |
-
</p>
|
118 |
-
<?php
|
119 |
}
|
120 |
|
121 |
/**
|
@@ -129,55 +80,10 @@ class HappyForms_Part_Rating extends HappyForms_Form_Part {
|
|
129 |
* @return string Markup for the form part.
|
130 |
*/
|
131 |
public function frontend_template( $part_data = array(), $form_data = array() ) {
|
132 |
-
$
|
133 |
-
$
|
134 |
-
$html_id = 'happyforms-' . $form_data['ID'] . '_' . esc_attr( $part_data['id'] );
|
135 |
|
136 |
-
|
137 |
-
|
138 |
-
if ( $part_data['width'] ) {
|
139 |
-
$classes[] = 'happyforms-part--width-' . esc_attr( $part_data['width'] ) . ' ';
|
140 |
-
}
|
141 |
-
|
142 |
-
if ( $part_data['label_placement'] ) {
|
143 |
-
$classes[] = 'happyforms-part--label-' . esc_attr( $part_data['label_placement'] ) . ' ';
|
144 |
-
}
|
145 |
-
|
146 |
-
if ( !empty( $part_data['css_class'] ) ) {
|
147 |
-
$classes[] = $part_data['css_class'];
|
148 |
-
}
|
149 |
-
|
150 |
-
$classes = implode( ' ', $classes );
|
151 |
-
?>
|
152 |
-
<div class="happyforms-part <?php echo esc_attr( $classes ); ?>" data-happyforms-id="<?php echo esc_attr( $part_data['id'] ); ?>">
|
153 |
-
<div class="happyforms-part__wrap">
|
154 |
-
<label for="<?php echo esc_attr( $html_id ); ?>" class="happyforms-part__label">
|
155 |
-
<span class="label"><?php echo esc_html( $part_data['label'] ); ?></span>
|
156 |
-
<?php if ( 1 === intval( $part_data['required'] ) ) : ?>
|
157 |
-
<span class="happyforms-required"> <?php echo $required_text; ?></span>
|
158 |
-
<?php endif; ?>
|
159 |
-
<?php happyforms_print_part_description( $part_data ); ?>
|
160 |
-
<?php
|
161 |
-
if ( $form_data ) :
|
162 |
-
happyforms_message_notices( $form_data, $part_data['id'] );
|
163 |
-
endif;
|
164 |
-
?>
|
165 |
-
</label>
|
166 |
-
|
167 |
-
<div class="happyforms-part__el">
|
168 |
-
<input class="happyforms-visuallyhidden" type="radio" value="0" id="<?php echo esc_attr( $part_data['id'] ); ?>_0" name="<?php echo esc_attr( $part_data['id'] ); ?>" checked>
|
169 |
-
|
170 |
-
<?php for ( $i = 1; $i <= $part_data['stars_num']; $i++ ) { ?>
|
171 |
-
<input class="happyforms-visuallyhidden star_<?php echo esc_attr( $i ); ?>" type="radio" value="<?php echo esc_attr( $i ); ?>" id="<?php echo esc_attr( $part_data['id'] ); ?>_<?php echo esc_attr( $i ); ?>" name="<?php echo esc_attr( happyforms_get_part_name( $part_data['id'], $form_data['ID'] ) ); ?>">
|
172 |
-
<label class="happyforms-star__label" for="<?php echo esc_attr( $part_data['id'] ); ?>_<?php echo esc_attr( $i ); ?>">
|
173 |
-
<span class="happyforms-visuallyhidden"><?php echo esc_attr( $i ); ?> <?php _e( 'Stars', 'happyforms' ); ?></span>
|
174 |
-
<svg class="happyforms-star" viewBox="0 0 512 512" fill=""><path class="happyforms-star__star" d="M512 198.525l-176.89-25.704-79.11-160.291-79.108 160.291-176.892 25.704 128 124.769-30.216 176.176 158.216-83.179 158.216 83.179-30.217-176.176 128.001-124.769z"></path></svg>
|
175 |
-
</label>
|
176 |
-
<?php } ?>
|
177 |
-
</div>
|
178 |
-
</div>
|
179 |
-
</div>
|
180 |
-
<?php
|
181 |
}
|
182 |
|
183 |
/**
|
@@ -209,12 +115,12 @@ class HappyForms_Part_Rating extends HappyForms_Form_Part {
|
|
209 |
*
|
210 |
* @return string
|
211 |
*/
|
212 |
-
public function sanitize_value( $part_data = array() ) {
|
213 |
$sanitized_value = $this->get_default_value();
|
214 |
-
$
|
215 |
|
216 |
-
if ( isset( $_REQUEST[$
|
217 |
-
$sanitized_value = intval( $_REQUEST[$
|
218 |
}
|
219 |
|
220 |
return $sanitized_value;
|
@@ -231,15 +137,16 @@ class HappyForms_Part_Rating extends HappyForms_Form_Part {
|
|
231 |
* @return string|object
|
232 |
*/
|
233 |
public function validate_value( $part_data, $value ) {
|
234 |
-
$part_id = $part_data['id'];
|
235 |
$validated_value = $value;
|
236 |
|
237 |
if ( 1 === $part_data['required'] && empty( $validated_value ) ) {
|
238 |
-
$validated_value = new WP_Error(
|
|
|
239 |
}
|
240 |
|
241 |
if ( $validated_value < 1 || $validated_value > 5 ) {
|
242 |
-
$validated_value = new WP_Error(
|
|
|
243 |
}
|
244 |
|
245 |
return $validated_value;
|
65 |
*
|
66 |
* @return string
|
67 |
*/
|
68 |
+
public function customize_templates() {
|
69 |
+
require_once( happyforms_get_include_folder() . '/templates/parts/customize-rating.php' );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
70 |
}
|
71 |
|
72 |
/**
|
80 |
* @return string Markup for the form part.
|
81 |
*/
|
82 |
public function frontend_template( $part_data = array(), $form_data = array() ) {
|
83 |
+
$part = wp_parse_args( $part_data, $this->get_customize_defaults() );
|
84 |
+
$form = $form_data;
|
|
|
85 |
|
86 |
+
include( happyforms_get_include_folder() . '/templates/parts/frontend-rating.php' );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
87 |
}
|
88 |
|
89 |
/**
|
115 |
*
|
116 |
* @return string
|
117 |
*/
|
118 |
+
public function sanitize_value( $part_data = array(), $form_data = array() ) {
|
119 |
$sanitized_value = $this->get_default_value();
|
120 |
+
$part_name = happyforms_get_part_name( $part_data, $form_data );
|
121 |
|
122 |
+
if ( isset( $_REQUEST[$part_name] ) ) {
|
123 |
+
$sanitized_value = intval( $_REQUEST[$part_name] );
|
124 |
}
|
125 |
|
126 |
return $sanitized_value;
|
137 |
* @return string|object
|
138 |
*/
|
139 |
public function validate_value( $part_data, $value ) {
|
|
|
140 |
$validated_value = $value;
|
141 |
|
142 |
if ( 1 === $part_data['required'] && empty( $validated_value ) ) {
|
143 |
+
$validated_value = new WP_Error( 'missing_required_field' );
|
144 |
+
return $validated_value;
|
145 |
}
|
146 |
|
147 |
if ( $validated_value < 1 || $validated_value > 5 ) {
|
148 |
+
$validated_value = new WP_Error( 'incorrect_value' );
|
149 |
+
return $validated_value;
|
150 |
}
|
151 |
|
152 |
return $validated_value;
|
inc/classes/parts/class-part-scale.php
CHANGED
@@ -3,14 +3,12 @@
|
|
3 |
class HappyForms_Part_Scale extends HappyForms_Form_Part {
|
4 |
|
5 |
public $type = 'scale';
|
6 |
-
public $template_id = 'happyforms-scale-template';
|
7 |
|
8 |
public function __construct() {
|
9 |
$this->label = __( 'Scale', 'happyforms' );
|
10 |
$this->description = __( 'For collecting opinions using a horizontal slider.', 'happyforms' );
|
11 |
|
12 |
-
add_filter( '
|
13 |
-
add_action( 'happyforms_frontend_form_scripts', array( $this, 'frontend_enqueue_scripts' ) );
|
14 |
}
|
15 |
|
16 |
/**
|
@@ -88,81 +86,8 @@ class HappyForms_Part_Scale extends HappyForms_Form_Part {
|
|
88 |
*
|
89 |
* @return string
|
90 |
*/
|
91 |
-
public function
|
92 |
-
|
93 |
-
<p>
|
94 |
-
<label for="<%= instance.id %>_title"><?php _e( 'Title', 'happyforms' ); ?></label>
|
95 |
-
<input type="text" id="<%= instance.id %>_title" class="widefat title" value="<%= instance.label %>" data-bind="label" />
|
96 |
-
</p>
|
97 |
-
<p>
|
98 |
-
<label for="<%= instance.id %>_label_placement"><?php _e( 'Title placement', 'happyforms' ); ?></label>
|
99 |
-
<select id="<%= instance.id %>_label_placement" data-bind="label_placement">
|
100 |
-
<option value="above"<%= (instance.label_placement == 'above') ? ' selected' : '' %>><?php _e( 'Above', 'happyforms' ); ?></option>
|
101 |
-
<option value="left"<%= (instance.label_placement == 'left') ? ' selected' : '' %>><?php _e( 'Left', 'happyforms' ); ?></option>
|
102 |
-
<option value="below"<%= (instance.label_placement == 'below') ? ' selected' : '' %>><?php _e( 'Below', 'happyforms' ); ?></option>
|
103 |
-
</select>
|
104 |
-
</p>
|
105 |
-
<p class="label_placement-options" style="display: none">
|
106 |
-
<label>
|
107 |
-
<input type="checkbox" class="checkbox apply-all-check" value="" data-apply-to="label_placement" /> <?php _e( 'Apply to all parts', 'happyforms' ); ?>
|
108 |
-
</label>
|
109 |
-
</p>
|
110 |
-
<p>
|
111 |
-
<label for="<%= instance.id %>_description"><?php _e( 'Description', 'happyforms' ); ?></label>
|
112 |
-
<textarea id="<%= instance.id %>_description" data-bind="description"><%= instance.description %></textarea>
|
113 |
-
</p>
|
114 |
-
<p class="tooltip-description-wrap" style="display: <%= (instance.description != '') ? 'block' : 'none' %>">
|
115 |
-
<label>
|
116 |
-
<input type="checkbox" class="checkbox" value="1" <% if ( instance.tooltip_description ) { %>checked="checked"<% } %> data-bind="tooltip_description" /> <?php _e( 'Show description in a tooltip', 'happyforms' ); ?>
|
117 |
-
</label>
|
118 |
-
</p>
|
119 |
-
<p>
|
120 |
-
<label for="<%= instance.id %>_min_label"><?php _e( 'Minimum value label', 'happyforms' ); ?></label>
|
121 |
-
<input type="text" id="<%= instance.id %>_min_label" class="widefat title" value="<%= instance.min_label %>" data-bind="min_label" />
|
122 |
-
</p>
|
123 |
-
<p>
|
124 |
-
<label for="<%= instance.id %>_max_label"><?php _e( 'Maximum value label', 'happyforms' ); ?></label>
|
125 |
-
<input type="text" id="<%= instance.id %>_max_label" class="widefat title" value="<%= instance.max_label %>" data-bind="max_label" />
|
126 |
-
</p>
|
127 |
-
<p>
|
128 |
-
<label for="<%= instance.id %>_max_value"><?php _e( 'Maximum accepted value', 'happyforms' ); ?></label>
|
129 |
-
<input type="text" id="<%= instance.id %>_max_value" class="widefat title" value="<%= instance.max_value %>" data-bind="max_value" />
|
130 |
-
</p>
|
131 |
-
<p>
|
132 |
-
<label for="<%= instance.id %>_default_value"><?php _e( 'Default value', 'happyforms' ); ?></label>
|
133 |
-
<input type="text" id="<%= instance.id %>_default_value" class="widefat title" value="<%= instance.default_value %>" data-bind="default_value" />
|
134 |
-
</p>
|
135 |
-
<p>
|
136 |
-
<label for="<%= instance.id %>_step"><?php _e( 'Step', 'happyforms' ); ?></label>
|
137 |
-
<select id="<%= instance.id %>_step" data-bind="step" class="widefat">
|
138 |
-
<option value="1"<%= (instance.step == '1') ? ' selected' : '' %>>1</option>
|
139 |
-
<option value="0.1"<%= (instance.width == '0.1') ? ' selected' : '' %>>0.1</option>
|
140 |
-
<option value="10"<%= (instance.width == '10') ? ' selected' : '' %>>10</option>
|
141 |
-
</select>
|
142 |
-
</p>
|
143 |
-
<p>
|
144 |
-
<label for="<%= instance.id %>_width"><?php _e( 'Width', 'happyforms' ); ?></label>
|
145 |
-
<select id="<%= instance.id %>_width" name="width" data-bind="width" class="widefat">
|
146 |
-
<option value="full"<%= (instance.width == 'full') ? ' selected' : '' %>><?php _e( 'Full', 'happyforms' ); ?></option>
|
147 |
-
<option value="half"<%= (instance.width == 'half') ? ' selected' : '' %>><?php _e( 'Half', 'happyforms' ); ?></option>
|
148 |
-
<option value="third"<%= (instance.width == 'third') ? ' selected' : '' %>><?php _e( 'One third', 'happyforms' ); ?></option>
|
149 |
-
</select>
|
150 |
-
</p>
|
151 |
-
<p class="width-options" style="display: none">
|
152 |
-
<label>
|
153 |
-
<input type="checkbox" class="checkbox apply-all-check" value="" data-apply-to="width" /> <?php _e( 'Apply to all parts', 'happyforms' ); ?>
|
154 |
-
</label>
|
155 |
-
</p>
|
156 |
-
<p>
|
157 |
-
<label for="<%= instance.id %>_css_class"><?php _e( 'Custom CSS class', 'happyforms' ); ?></label>
|
158 |
-
<input type="text" id="<%= instance.id %>_css_class" class="widefat title" value="<%= instance.css_class %>" data-bind="css_class" />
|
159 |
-
</p>
|
160 |
-
<p>
|
161 |
-
<label>
|
162 |
-
<input type="checkbox" class="checkbox" value="1" <% if ( instance.required ) { %>checked="checked"<% } %> data-bind="required" /> <?php _e( 'This is a required field', 'happyforms' ); ?>
|
163 |
-
</label>
|
164 |
-
</p>
|
165 |
-
<?php
|
166 |
}
|
167 |
|
168 |
/**
|
@@ -176,54 +101,10 @@ class HappyForms_Part_Scale extends HappyForms_Form_Part {
|
|
176 |
* @return string Markup for the form part.
|
177 |
*/
|
178 |
public function frontend_template( $part_data = array(), $form_data = array() ) {
|
179 |
-
$
|
180 |
-
$
|
181 |
-
$html_id = 'happyforms-' . $form_data['ID'] . '_' . esc_attr( $part_data['id'] );
|
182 |
|
183 |
-
|
184 |
-
|
185 |
-
if ( $part_data['width'] ) {
|
186 |
-
$classes[] = 'happyforms-part--width-' . esc_attr( $part_data['width'] ) . ' ';
|
187 |
-
}
|
188 |
-
|
189 |
-
if ( $part_data['label_placement'] ) {
|
190 |
-
$classes[] = 'happyforms-part--label-' . esc_attr( $part_data['label_placement'] ) . ' ';
|
191 |
-
}
|
192 |
-
|
193 |
-
if ( !empty( $part_data['css_class'] ) ) {
|
194 |
-
$classes[] = $part_data['css_class'] . ' ';
|
195 |
-
}
|
196 |
-
|
197 |
-
$classes = implode( ' ', $classes );
|
198 |
-
?>
|
199 |
-
<div class="happyforms-part happyforms-part-editable <?php echo esc_attr( $classes ); ?>" data-happyforms-id="<?php echo esc_attr( $part_data['id'] ); ?>">
|
200 |
-
<div class="happyforms-part__wrap">
|
201 |
-
<label for="<?php echo esc_attr( $html_id ); ?>" class="happyforms-part__label">
|
202 |
-
<span class="label"><?php echo esc_html( $part_data['label'] ); ?></span>
|
203 |
-
<?php if ( 1 === intval( $part_data['required'] ) ) : ?>
|
204 |
-
<span class="happyforms-required"> <?php echo $required_text; ?></span>
|
205 |
-
<?php endif; ?>
|
206 |
-
</label>
|
207 |
-
<?php if ( !empty( $part_data['min_label'] ) || !empty( $part_data['max_Label'] ) || is_customize_preview() ) : ?>
|
208 |
-
<div class="happyforms-part--scale__labels">
|
209 |
-
<span class="label-min"><?php echo $part_data['min_label']; ?></span>
|
210 |
-
<span class="label-max"><?php echo $part_data['max_label']; ?></span>
|
211 |
-
</div>
|
212 |
-
<?php endif; ?>
|
213 |
-
<input id="<?php echo esc_attr( $html_id ); ?>" type="range" name="<?php echo esc_attr( happyforms_get_part_name( $part_data['id'], $form_data['ID'] ) ); ?>" step="<?php echo esc_attr( $part_data['step'] ); ?>" class="happyforms-part__el happyforms-part__el--text-input"
|
214 |
-
<?php if ( 1 === $part_data['required'] ) : ?>required aria-required="true"<?php endif; ?>
|
215 |
-
min="<?php echo esc_attr( $part_data['min_value'] ); ?>" max="<?php echo esc_attr( $part_data['max_value'] ); ?>" value="<?php echo esc_attr( $part_data['default_value'] ); ?>"
|
216 |
-
/>
|
217 |
-
<?php happyforms_print_part_description( $part_data ); ?>
|
218 |
-
<output for="<?php echo esc_attr( $html_id ); ?>"><?php echo $part_data['default_value']; ?></output>
|
219 |
-
<?php
|
220 |
-
if ( $form_data ) :
|
221 |
-
happyforms_message_notices( $form_data, $part_data['id'] );
|
222 |
-
endif;
|
223 |
-
?>
|
224 |
-
</div>
|
225 |
-
</div>
|
226 |
-
<?php
|
227 |
}
|
228 |
|
229 |
/**
|
@@ -255,12 +136,12 @@ class HappyForms_Part_Scale extends HappyForms_Form_Part {
|
|
255 |
*
|
256 |
* @return string
|
257 |
*/
|
258 |
-
public function sanitize_value( $part_data = array() ) {
|
259 |
$sanitized_value = $this->get_default_value();
|
260 |
-
$
|
261 |
|
262 |
-
if ( isset( $_REQUEST[$
|
263 |
-
$sanitized_value = sanitize_text_field( $_REQUEST[$
|
264 |
}
|
265 |
|
266 |
return $sanitized_value;
|
@@ -277,15 +158,14 @@ class HappyForms_Part_Scale extends HappyForms_Form_Part {
|
|
277 |
* @return string|object
|
278 |
*/
|
279 |
public function validate_value( $part_data, $value ) {
|
280 |
-
$part_id = $part_data['id'];
|
281 |
$validated_value = $value;
|
282 |
|
283 |
if ( 1 === $part_data['required'] && empty( $validated_value ) ) {
|
284 |
-
$validated_value = new WP_Error(
|
285 |
}
|
286 |
|
287 |
if ( !is_numeric( $validated_value ) ) {
|
288 |
-
$validated_value = new WP_Error(
|
289 |
}
|
290 |
|
291 |
return $validated_value;
|
@@ -310,63 +190,30 @@ class HappyForms_Part_Scale extends HappyForms_Form_Part {
|
|
310 |
);
|
311 |
}
|
312 |
|
313 |
-
|
314 |
-
|
315 |
-
* Filter: dependencies for the preview screen.
|
316 |
-
*
|
317 |
-
* @since 1.0.0.
|
318 |
-
*
|
319 |
-
* @hooked filter happyforms_preview_dependencies
|
320 |
-
*
|
321 |
-
* @param array List of dependencies.
|
322 |
-
*
|
323 |
-
* @return array
|
324 |
-
*/
|
325 |
-
public function preview_dependencies( $deps = array() ) {
|
326 |
-
wp_register_script(
|
327 |
-
'happyforms-part-scale',
|
328 |
-
happyforms_get_plugin_url() . 'assets/js/frontend/scale.js',
|
329 |
-
array( 'jquery', 'jquery-ui-autocomplete' ),
|
330 |
-
false,
|
331 |
-
true
|
332 |
-
);
|
333 |
-
|
334 |
-
array_push( $deps, 'happyforms-part-scale' );
|
335 |
-
|
336 |
-
return $deps;
|
337 |
-
}
|
338 |
-
|
339 |
-
/**
|
340 |
-
* Action: enqueue additional scripts on the frontend.
|
341 |
-
*
|
342 |
-
* @since 1.0.0.
|
343 |
-
*
|
344 |
-
* @hooked action happyforms_frontend_form_scripts
|
345 |
-
*
|
346 |
-
* @param array List of dependencies.
|
347 |
-
*
|
348 |
-
* @return array
|
349 |
-
*/
|
350 |
-
public function frontend_enqueue_scripts( $form = array() ) {
|
351 |
$form_controller = happyforms_get_form_controller();
|
352 |
|
353 |
-
|
354 |
-
|
|
|
|
|
|
|
355 |
}
|
356 |
|
357 |
-
if (
|
358 |
-
return;
|
359 |
}
|
360 |
|
361 |
wp_register_script(
|
362 |
'happyforms-part-scale',
|
363 |
happyforms_get_plugin_url() . 'assets/js/frontend/scale.js',
|
364 |
-
array(
|
365 |
-
false,
|
366 |
-
true
|
367 |
);
|
368 |
|
369 |
-
|
|
|
|
|
370 |
}
|
371 |
|
372 |
}
|
3 |
class HappyForms_Part_Scale extends HappyForms_Form_Part {
|
4 |
|
5 |
public $type = 'scale';
|
|
|
6 |
|
7 |
public function __construct() {
|
8 |
$this->label = __( 'Scale', 'happyforms' );
|
9 |
$this->description = __( 'For collecting opinions using a horizontal slider.', 'happyforms' );
|
10 |
|
11 |
+
add_filter( 'happyforms_frontend_dependencies', array( $this, 'script_dependencies' ), 10, 2 );
|
|
|
12 |
}
|
13 |
|
14 |
/**
|
86 |
*
|
87 |
* @return string
|
88 |
*/
|
89 |
+
public function customize_templates() {
|
90 |
+
require_once( happyforms_get_include_folder() . '/templates/parts/customize-scale.php' );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
91 |
}
|
92 |
|
93 |
/**
|
101 |
* @return string Markup for the form part.
|
102 |
*/
|
103 |
public function frontend_template( $part_data = array(), $form_data = array() ) {
|
104 |
+
$part = wp_parse_args( $part_data, $this->get_customize_defaults() );
|
105 |
+
$form = $form_data;
|
|
|
106 |
|
107 |
+
include( happyforms_get_include_folder() . '/templates/parts/frontend-scale.php' );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
108 |
}
|
109 |
|
110 |
/**
|
136 |
*
|
137 |
* @return string
|
138 |
*/
|
139 |
+
public function sanitize_value( $part_data = array(), $form_data = array() ) {
|
140 |
$sanitized_value = $this->get_default_value();
|
141 |
+
$part_name = happyforms_get_part_name( $part_data, $form_data );
|
142 |
|
143 |
+
if ( isset( $_REQUEST[$part_name] ) ) {
|
144 |
+
$sanitized_value = sanitize_text_field( $_REQUEST[$part_name] );
|
145 |
}
|
146 |
|
147 |
return $sanitized_value;
|
158 |
* @return string|object
|
159 |
*/
|
160 |
public function validate_value( $part_data, $value ) {
|
|
|
161 |
$validated_value = $value;
|
162 |
|
163 |
if ( 1 === $part_data['required'] && empty( $validated_value ) ) {
|
164 |
+
$validated_value = new WP_Error( 'missing_required_field' );
|
165 |
}
|
166 |
|
167 |
if ( !is_numeric( $validated_value ) ) {
|
168 |
+
$validated_value = new WP_Error( 'not_a_number' );
|
169 |
}
|
170 |
|
171 |
return $validated_value;
|
190 |
);
|
191 |
}
|
192 |
|
193 |
+
public function script_dependencies( $deps, $forms ) {
|
194 |
+
$contains_scale = false;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
195 |
$form_controller = happyforms_get_form_controller();
|
196 |
|
197 |
+
foreach ( $forms as $form ) {
|
198 |
+
if ( $form_controller->get_first_part_by_type( $form, $this->type ) ) {
|
199 |
+
$contains_scale = true;
|
200 |
+
break;
|
201 |
+
}
|
202 |
}
|
203 |
|
204 |
+
if ( ! happyforms_is_preview() && ! $contains_scale ) {
|
205 |
+
return $deps;
|
206 |
}
|
207 |
|
208 |
wp_register_script(
|
209 |
'happyforms-part-scale',
|
210 |
happyforms_get_plugin_url() . 'assets/js/frontend/scale.js',
|
211 |
+
array(), false, true
|
|
|
|
|
212 |
);
|
213 |
|
214 |
+
$deps[] = 'happyforms-part-scale';
|
215 |
+
|
216 |
+
return $deps;
|
217 |
}
|
218 |
|
219 |
}
|
inc/classes/parts/class-part-select.php
CHANGED
@@ -3,9 +3,6 @@
|
|
3 |
class HappyForms_Part_Select extends HappyForms_Form_Part {
|
4 |
|
5 |
public $type = 'select';
|
6 |
-
public $template_id = 'happyforms-select-template';
|
7 |
-
public $item_customize_template_id = 'happyforms-select-option-customize-template';
|
8 |
-
public $item_frontend_template_id = 'happyforms-select-option-frontend-template';
|
9 |
|
10 |
public function __construct() {
|
11 |
$this->label = __( 'Dropdown', 'happyforms' );
|
@@ -67,7 +64,7 @@ class HappyForms_Part_Select extends HappyForms_Form_Part {
|
|
67 |
*
|
68 |
* @return array
|
69 |
*/
|
70 |
-
|
71 |
return array(
|
72 |
'is_default' => 0,
|
73 |
'label' => ''
|
@@ -81,90 +78,8 @@ class HappyForms_Part_Select extends HappyForms_Form_Part {
|
|
81 |
*
|
82 |
* @return string
|
83 |
*/
|
84 |
-
public function
|
85 |
-
|
86 |
-
<p>
|
87 |
-
<label for="<%= instance.id %>_title"><?php _e( 'Title', 'happyforms' ); ?></label>
|
88 |
-
<input type="text" id="<%= instance.id %>_title" class="widefat title" value="<%= instance.label %>" data-bind="label" />
|
89 |
-
</p>
|
90 |
-
<p>
|
91 |
-
<label for="<%= instance.id %>_label_placement"><?php _e( 'Title placement', 'happyforms' ); ?></label>
|
92 |
-
<select id="<%= instance.id %>_label_placement" data-bind="label_placement">
|
93 |
-
<option value="above"<%= (instance.label_placement == 'above') ? ' selected' : '' %>><?php _e( 'Above', 'happyforms' ); ?></option>
|
94 |
-
<option value="left"<%= (instance.label_placement == 'left') ? ' selected' : '' %>><?php _e( 'Left', 'happyforms' ); ?></option>
|
95 |
-
<option value="below"<%= (instance.label_placement == 'below') ? ' selected' : '' %>><?php _e( 'Below', 'happyforms' ); ?></option>
|
96 |
-
</select>
|
97 |
-
</p>
|
98 |
-
<p class="label_placement-options" style="display: none">
|
99 |
-
<label>
|
100 |
-
<input type="checkbox" class="checkbox apply-all-check" value="" data-apply-to="label_placement" /> <?php _e( 'Apply to all parts', 'happyforms' ); ?>
|
101 |
-
</label>
|
102 |
-
</p>
|
103 |
-
<p>
|
104 |
-
<label for="<%= instance.id %>_description"><?php _e( 'Description', 'happyforms' ); ?></label>
|
105 |
-
<textarea id="<%= instance.id %>_description" data-bind="description"><%= instance.description %></textarea>
|
106 |
-
</p>
|
107 |
-
<p class="tooltip-description-wrap" style="display: <%= (instance.description != '') ? 'block' : 'none' %>">
|
108 |
-
<label>
|
109 |
-
<input type="checkbox" class="checkbox" value="1" <% if ( instance.tooltip_description ) { %>checked="checked"<% } %> data-bind="tooltip_description" /> <?php _e( 'Show description in a tooltip', 'happyforms' ); ?>
|
110 |
-
</label>
|
111 |
-
</p>
|
112 |
-
<p>
|
113 |
-
<label for="<%= instance.id %>_width"><?php _e( 'Width', 'happyforms' ); ?></label>
|
114 |
-
<select id="<%= instance.id %>_width" name="width" data-bind="width" class="widefat">
|
115 |
-
<option value="full"<%= (instance.width == 'full') ? ' selected' : '' %>><?php _e( 'Full', 'happyforms' ); ?></option>
|
116 |
-
<option value="half"<%= (instance.width == 'half') ? ' selected' : '' %>><?php _e( 'Half', 'happyforms' ); ?></option>
|
117 |
-
<option value="third"<%= (instance.width == 'third') ? ' selected' : '' %>><?php _e( 'One third', 'happyforms' ); ?></option>
|
118 |
-
</select>
|
119 |
-
</p>
|
120 |
-
<p class="width-options" style="display: none">
|
121 |
-
<label>
|
122 |
-
<input type="checkbox" class="checkbox apply-all-check" value="" data-apply-to="width" /> <?php _e( 'Apply to all parts', 'happyforms' ); ?>
|
123 |
-
</label>
|
124 |
-
</p>
|
125 |
-
<p>
|
126 |
-
<label for="<%= instance.id %>_css_class"><?php _e( 'Custom CSS class', 'happyforms' ); ?></label>
|
127 |
-
<input type="text" id="<%= instance.id %>_css_class" class="widefat title" value="<%= instance.css_class %>" data-bind="css_class" />
|
128 |
-
</p>
|
129 |
-
<p>
|
130 |
-
<label>
|
131 |
-
<input type="checkbox" class="checkbox" value="1" <% if ( instance.required ) { %>checked="checked"<% } %> data-bind="required" /> <?php _e( 'This is a required field', 'happyforms' ); ?>
|
132 |
-
</label>
|
133 |
-
</p>
|
134 |
-
<ul class="options">
|
135 |
-
<h3><?php _e( 'Options', 'happyforms' ); ?></h3>
|
136 |
-
<% if ( !instance.options.length ) { %>
|
137 |
-
<p class="no-options"><?php _e( 'No options added yet. Add one by clicking the <i>Add option</i> link below.', 'happyforms' ); ?></p>
|
138 |
-
<% } %>
|
139 |
-
</ul>
|
140 |
-
<p class="links">
|
141 |
-
<a href="#" class="add-option"><?php _e( 'Add option', 'happyforms' ); ?></a>
|
142 |
-
</p>
|
143 |
-
<?php
|
144 |
-
}
|
145 |
-
|
146 |
-
/**
|
147 |
-
* Get template for option / sub-part item in customize pane.
|
148 |
-
*
|
149 |
-
* @since 1.0.0.
|
150 |
-
*
|
151 |
-
* @return string
|
152 |
-
*/
|
153 |
-
public function customize_item_template() {
|
154 |
-
?>
|
155 |
-
<li class="happyforms-part-widget happyforms-part-widget--sub">
|
156 |
-
<label>
|
157 |
-
<?php _e( 'Label', 'happyforms' ); ?>
|
158 |
-
<input type="text" class="widefat" name="" value="<%= label %>" data-option-attribute="label" data-preview-selector="self">
|
159 |
-
</label>
|
160 |
-
<label>
|
161 |
-
<input type="checkbox" name="" value="1" class="default-option-switch"<% if (is_default == 1) { %> checked="checked"<% } %>> <?php _e( 'Make this option default', 'happyforms' ); ?>
|
162 |
-
</label>
|
163 |
-
<div class="option-actions">
|
164 |
-
<a href="#" class="delete-option"><?php _e( 'Delete', 'happyforms' ); ?></a>
|
165 |
-
</div>
|
166 |
-
</li>
|
167 |
-
<?php
|
168 |
}
|
169 |
|
170 |
/**
|
@@ -178,88 +93,14 @@ class HappyForms_Part_Select extends HappyForms_Form_Part {
|
|
178 |
* @return string Markup for the form part.
|
179 |
*/
|
180 |
public function frontend_template( $part_data = array(), $form_data = array() ) {
|
181 |
-
$
|
182 |
-
$
|
183 |
-
$html_id = 'happyforms-' . $form_data['ID'] . '_' . esc_attr( $part_data['id'] );
|
184 |
-
|
185 |
-
$classes = array('happyforms-part--select');
|
186 |
|
187 |
-
|
188 |
-
$
|
189 |
}
|
190 |
|
191 |
-
|
192 |
-
$classes[] = 'happyforms-part--label-' . esc_attr( $part_data['label_placement'] ) . ' ';
|
193 |
-
}
|
194 |
-
|
195 |
-
if ( !empty( $part_data['css_class'] ) ) {
|
196 |
-
$classes[] = $part_data['css_class'];
|
197 |
-
}
|
198 |
-
|
199 |
-
$classes = implode( ' ', $classes );
|
200 |
-
?>
|
201 |
-
<div class="happyforms-part happyforms-part--select happyforms-part-editable <?php echo esc_attr( $classes ); ?>" data-happyforms-id="<?php echo esc_attr( $part_data['id'] ); ?>">
|
202 |
-
<div class="happyforms-part__wrap">
|
203 |
-
<label for="<?php echo esc_attr( $html_id ); ?>" class="happyforms-part__label">
|
204 |
-
<span class="label"><?php echo esc_html( $part_data['label'] ); ?></span>
|
205 |
-
<?php if ( 1 === intval( $part_data['required'] ) ) : ?>
|
206 |
-
<span class="happyforms-required"> <?php echo $required_text; ?></span>
|
207 |
-
<?php endif; ?>
|
208 |
-
</label>
|
209 |
-
<div class="happyforms-part__select-wrap">
|
210 |
-
<select id="<?php echo esc_attr( $html_id ); ?>" name="<?php echo esc_attr( happyforms_get_part_name( $part_data['id'], $form_data['ID'] ) ); ?>" class="happyforms-part__el"<?php if ( 1 === $part_data['required'] ) : ?> required aria-required="true"<?php endif; ?>>
|
211 |
-
<?php
|
212 |
-
if ( isset( $part_data['options']) ) {
|
213 |
-
$options = $part_data['options'];
|
214 |
-
|
215 |
-
foreach( $options as $option ) {
|
216 |
-
$option = wp_parse_args( $option, $this->get_option_defaults() );
|
217 |
-
|
218 |
-
$this->frontend_item_template( $part_data, $option );
|
219 |
-
}
|
220 |
-
}
|
221 |
-
?>
|
222 |
-
</select>
|
223 |
-
</div>
|
224 |
-
<?php happyforms_print_part_description( $part_data ); ?>
|
225 |
-
<?php
|
226 |
-
if ( $form_data ) :
|
227 |
-
happyforms_message_notices( $form_data, $part_data['id'] );
|
228 |
-
endif;
|
229 |
-
?>
|
230 |
-
</div>
|
231 |
-
</div>
|
232 |
-
<?php
|
233 |
-
}
|
234 |
-
|
235 |
-
/**
|
236 |
-
* Get front end option (sub-part) template with parsed data.
|
237 |
-
*
|
238 |
-
* @since 1.0.0.
|
239 |
-
*
|
240 |
-
* @param array $part_data Form part data.
|
241 |
-
* @param array $option Option (form sub-part) data.
|
242 |
-
* @param int $requred Required field (1) or not.
|
243 |
-
*
|
244 |
-
* @return string Markup for the part option.
|
245 |
-
*/
|
246 |
-
public function frontend_item_template( $part_data, $option ) {
|
247 |
-
?>
|
248 |
-
<option id="<?php echo esc_attr( $option['id'] ); ?>" value="<?php echo esc_attr( $option['label'] ); ?>"<?php if ( $option['is_default'] == 1 ) : ?> selected<?php endif; ?>><?php echo esc_attr( $option['label'] ); ?></option>
|
249 |
-
<?php
|
250 |
-
}
|
251 |
-
|
252 |
-
/**
|
253 |
-
* Get option's Backbone template for preview purposes. Passed to previewer to create a new Backbone view.
|
254 |
-
*
|
255 |
-
* @since 1.0.0.
|
256 |
-
*
|
257 |
-
* @return string Backbone template.
|
258 |
-
*/
|
259 |
-
public function preview_option_template() {
|
260 |
-
?>
|
261 |
-
<option id="<%= id %>" value="<%= label %>"><%= label %></option>
|
262 |
-
<?php
|
263 |
}
|
264 |
|
265 |
/**
|
@@ -310,15 +151,15 @@ class HappyForms_Part_Select extends HappyForms_Form_Part {
|
|
310 |
*
|
311 |
* @return string
|
312 |
*/
|
313 |
-
public function sanitize_value( $part_data = array() ) {
|
314 |
$sanitized_value = $this->get_default_value();
|
315 |
-
$
|
316 |
|
317 |
-
if ( isset( $_REQUEST[$
|
318 |
-
$sanitized_value = sanitize_text_field( $_REQUEST[$
|
319 |
-
|
320 |
-
return $sanitized_value;
|
321 |
}
|
|
|
|
|
322 |
}
|
323 |
|
324 |
/**
|
@@ -332,22 +173,16 @@ class HappyForms_Part_Select extends HappyForms_Form_Part {
|
|
332 |
* @return string|object
|
333 |
*/
|
334 |
public function validate_value( $part_data, $value ) {
|
335 |
-
$part_id = $part_data['id'];
|
336 |
$validated_value = $value;
|
337 |
|
338 |
if ( 1 === $part_data['required'] && empty( $validated_value ) ) {
|
339 |
-
$validated_value = new WP_Error(
|
340 |
}
|
341 |
|
342 |
-
|
343 |
-
$possible_options = array();
|
344 |
-
|
345 |
-
foreach ( $part_data['options'] as $option ) {
|
346 |
-
array_push( $possible_options, $option['label'] );
|
347 |
-
}
|
348 |
|
349 |
-
if ( !in_array( $
|
350 |
-
$validated_value = new WP_Error(
|
351 |
}
|
352 |
|
353 |
return $validated_value;
|
3 |
class HappyForms_Part_Select extends HappyForms_Form_Part {
|
4 |
|
5 |
public $type = 'select';
|
|
|
|
|
|
|
6 |
|
7 |
public function __construct() {
|
8 |
$this->label = __( 'Dropdown', 'happyforms' );
|
64 |
*
|
65 |
* @return array
|
66 |
*/
|
67 |
+
private function get_option_defaults() {
|
68 |
return array(
|
69 |
'is_default' => 0,
|
70 |
'label' => ''
|
78 |
*
|
79 |
* @return string
|
80 |
*/
|
81 |
+
public function customize_templates() {
|
82 |
+
require_once( happyforms_get_include_folder() . '/templates/parts/customize-select.php' );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
83 |
}
|
84 |
|
85 |
/**
|
93 |
* @return string Markup for the form part.
|
94 |
*/
|
95 |
public function frontend_template( $part_data = array(), $form_data = array() ) {
|
96 |
+
$part = wp_parse_args( $part_data, $this->get_customize_defaults() );
|
97 |
+
$form = $form_data;
|
|
|
|
|
|
|
98 |
|
99 |
+
foreach( $part['options'] as $o => $option ) {
|
100 |
+
$part['options'][$o] = wp_parse_args( $option, $this->get_option_defaults() );
|
101 |
}
|
102 |
|
103 |
+
include( happyforms_get_include_folder() . '/templates/parts/frontend-select.php' );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
104 |
}
|
105 |
|
106 |
/**
|
151 |
*
|
152 |
* @return string
|
153 |
*/
|
154 |
+
public function sanitize_value( $part_data = array(), $form_data = array() ) {
|
155 |
$sanitized_value = $this->get_default_value();
|
156 |
+
$part_name = happyforms_get_part_name( $part_data, $form_data );
|
157 |
|
158 |
+
if ( isset( $_REQUEST[$part_name] ) ) {
|
159 |
+
$sanitized_value = sanitize_text_field( $_REQUEST[$part_name] );
|
|
|
|
|
160 |
}
|
161 |
+
|
162 |
+
return $sanitized_value;
|
163 |
}
|
164 |
|
165 |
/**
|
173 |
* @return string|object
|
174 |
*/
|
175 |
public function validate_value( $part_data, $value ) {
|
|
|
176 |
$validated_value = $value;
|
177 |
|
178 |
if ( 1 === $part_data['required'] && empty( $validated_value ) ) {
|
179 |
+
$validated_value = new WP_Error( 'missing_required_field' );
|
180 |
}
|
181 |
|
182 |
+
$allowed_values = wp_list_pluck( $part_data['options'], 'label' );
|
|
|
|
|
|
|
|
|
|
|
183 |
|
184 |
+
if ( ! in_array( $value, $allowed_values ) ) {
|
185 |
+
$validated_value = new WP_Error( 'not_valid_value' );
|
186 |
}
|
187 |
|
188 |
return $validated_value;
|
inc/classes/parts/class-part-single-line-text.php
CHANGED
@@ -3,7 +3,6 @@
|
|
3 |
class HappyForms_Part_SingleLineText extends HappyForms_Form_Part {
|
4 |
|
5 |
public $type = 'single_line_text';
|
6 |
-
public $template_id = 'happyforms-single-line-text-template';
|
7 |
|
8 |
public function __construct() {
|
9 |
$this->label = __( 'Short Text', 'happyforms' );
|
@@ -65,61 +64,8 @@ class HappyForms_Part_SingleLineText extends HappyForms_Form_Part {
|
|
65 |
*
|
66 |
* @return string
|
67 |
*/
|
68 |
-
public function
|
69 |
-
|
70 |
-
<p>
|
71 |
-
<label for="<%= instance.id %>_title"><?php _e( 'Title', 'happyforms' ); ?></label>
|
72 |
-
<input type="text" id="<%= instance.id %>_title" class="widefat title" value="<%= instance.label %>" data-bind="label" />
|
73 |
-
</p>
|
74 |
-
<p>
|
75 |
-
<label for="<%= instance.id %>_label_placement"><?php _e( 'Title placement', 'happyforms' ); ?></label>
|
76 |
-
<select id="<%= instance.id %>_label_placement" data-bind="label_placement">
|
77 |
-
<option value="above"<%= (instance.label_placement == 'above') ? ' selected' : '' %>><?php _e( 'Above', 'happyforms' ); ?></option>
|
78 |
-
<option value="left"<%= (instance.label_placement == 'left') ? ' selected' : '' %>><?php _e( 'Left', 'happyforms' ); ?></option>
|
79 |
-
<option value="below"<%= (instance.label_placement == 'below') ? ' selected' : '' %>><?php _e( 'Below', 'happyforms' ); ?></option>
|
80 |
-
</select>
|
81 |
-
</p>
|
82 |
-
<p class="label_placement-options" style="display: none">
|
83 |
-
<label>
|
84 |
-
<input type="checkbox" class="checkbox apply-all-check" value="" data-apply-to="label_placement" /> <?php _e( 'Apply to all parts', 'happyforms' ); ?>
|
85 |
-
</label>
|
86 |
-
</p>
|
87 |
-
<p>
|
88 |
-
<label for="<%= instance.id %>_description"><?php _e( 'Description', 'happyforms' ); ?></label>
|
89 |
-
<textarea id="<%= instance.id %>_description" data-bind="description"><%= instance.description %></textarea>
|
90 |
-
</p>
|
91 |
-
<p class="tooltip-description-wrap" style="display: <%= (instance.description != '') ? 'block' : 'none' %>">
|
92 |
-
<label>
|
93 |
-
<input type="checkbox" class="checkbox" value="1" <% if ( instance.tooltip_description ) { %>checked="checked"<% } %> data-bind="tooltip_description" /> <?php _e( 'Show description in a tooltip', 'happyforms' ); ?>
|
94 |
-
</label>
|
95 |
-
</p>
|
96 |
-
<p>
|
97 |
-
<label for="<%= instance.id %>_placeholder"><?php _e( 'Placeholder', 'happyforms' ); ?></label>
|
98 |
-
<input type="text" id="<%= instance.id %>_placeholder" class="widefat title" value="<%= instance.placeholder %>" data-bind="placeholder" />
|
99 |
-
</p>
|
100 |
-
<p>
|
101 |
-
<label for="<%= instance.id %>_width"><?php _e( 'Width', 'happyforms' ); ?></label>
|
102 |
-
<select id="<%= instance.id %>_width" name="width" data-bind="width" class="widefat">
|
103 |
-
<option value="full"<%= (instance.width == 'full') ? ' selected' : '' %>><?php _e( 'Full', 'happyforms' ); ?></option>
|
104 |
-
<option value="half"<%= (instance.width == 'half') ? ' selected' : '' %>><?php _e( 'Half', 'happyforms' ); ?></option>
|
105 |
-
<option value="third"<%= (instance.width == 'third') ? ' selected' : '' %>><?php _e( 'One third', 'happyforms' ); ?></option>
|
106 |
-
</select>
|
107 |
-
</p>
|
108 |
-
<p class="width-options" style="display: none">
|
109 |
-
<label>
|
110 |
-
<input type="checkbox" class="checkbox apply-all-check" value="" data-apply-to="width" /> <?php _e( 'Apply to all parts', 'happyforms' ); ?>
|
111 |
-
</label>
|
112 |
-
</p>
|
113 |
-
<p>
|
114 |
-
<label for="<%= instance.id %>_css_class"><?php _e( 'Custom CSS class', 'happyforms' ); ?></label>
|
115 |
-
<input type="text" id="<%= instance.id %>_css_class" class="widefat title" value="<%= instance.css_class %>" data-bind="css_class" />
|
116 |
-
</p>
|
117 |
-
<p>
|
118 |
-
<label>
|
119 |
-
<input type="checkbox" class="checkbox" value="1" <% if ( instance.required ) { %>checked="checked"<% } %> data-bind="required" /> <?php _e( 'This is a required field', 'happyforms' ); ?>
|
120 |
-
</label>
|
121 |
-
</p>
|
122 |
-
<?php
|
123 |
}
|
124 |
|
125 |
/**
|
@@ -133,44 +79,10 @@ class HappyForms_Part_SingleLineText extends HappyForms_Form_Part {
|
|
133 |
* @return string Markup for the form part.
|
134 |
*/
|
135 |
public function frontend_template( $part_data = array(), $form_data = array() ) {
|
136 |
-
$
|
137 |
-
$
|
138 |
-
$html_id = 'happyforms-' . $form_data['ID'] . '_' . esc_attr( $part_data['id'] );
|
139 |
|
140 |
-
|
141 |
-
|
142 |
-
if ( $part_data['width'] ) {
|
143 |
-
$classes[] = 'happyforms-part--width-' . esc_attr( $part_data['width'] ) . ' ';
|
144 |
-
}
|
145 |
-
|
146 |
-
if ( $part_data['label_placement'] ) {
|
147 |
-
$classes[] = 'happyforms-part--label-' . esc_attr( $part_data['label_placement'] ) . ' ';
|
148 |
-
}
|
149 |
-
|
150 |
-
if ( !empty( $part_data['css_class'] ) ) {
|
151 |
-
$classes[] = $part_data['css_class'] . ' ';
|
152 |
-
}
|
153 |
-
|
154 |
-
$classes = implode( ' ', $classes );
|
155 |
-
?>
|
156 |
-
<div class="happyforms-part happyforms-part-editable <?php echo esc_attr( $classes ); ?>" data-happyforms-id="<?php echo esc_attr( $part_data['id'] ); ?>">
|
157 |
-
<div class="happyforms-part__wrap">
|
158 |
-
<label for="<?php echo esc_attr( $html_id ); ?>" class="happyforms-part__label">
|
159 |
-
<span class="label"><?php echo esc_html( $part_data['label'] ); ?></span>
|
160 |
-
<?php if ( 1 === intval( $part_data['required'] ) ) : ?>
|
161 |
-
<span class="happyforms-required"> <?php echo $required_text; ?></span>
|
162 |
-
<?php endif; ?>
|
163 |
-
</label>
|
164 |
-
<input id="<?php echo esc_attr( $html_id ); ?>" type="text" name="<?php echo esc_attr( happyforms_get_part_name( $part_data['id'], $form_data['ID'] ) ); ?>" placeholder="<?php echo esc_attr( $part_data['placeholder'] ); ?>" class="happyforms-part__el happyforms-part__el--text-input" <?php if ( 1 === $part_data['required'] ) : ?>required aria-required="true"<?php endif; ?> />
|
165 |
-
<?php happyforms_print_part_description( $part_data ); ?>
|
166 |
-
<?php
|
167 |
-
if ( $form_data ) :
|
168 |
-
happyforms_message_notices( $form_data, $part_data['id'] );
|
169 |
-
endif;
|
170 |
-
?>
|
171 |
-
</div>
|
172 |
-
</div>
|
173 |
-
<?php
|
174 |
}
|
175 |
|
176 |
/**
|
@@ -198,12 +110,12 @@ class HappyForms_Part_SingleLineText extends HappyForms_Form_Part {
|
|
198 |
*
|
199 |
* @return string
|
200 |
*/
|
201 |
-
public function sanitize_value( $part_data = array() ) {
|
202 |
$sanitized_value = $this->get_default_value();
|
203 |
-
$
|
204 |
|
205 |
-
if ( isset( $_REQUEST[$
|
206 |
-
$sanitized_value = sanitize_text_field( $_REQUEST[$
|
207 |
}
|
208 |
|
209 |
return $sanitized_value;
|
@@ -220,11 +132,10 @@ class HappyForms_Part_SingleLineText extends HappyForms_Form_Part {
|
|
220 |
* @return string|object
|
221 |
*/
|
222 |
public function validate_value( $part_data, $value ) {
|
223 |
-
$part_id = $part_data['id'];
|
224 |
$validated_value = $value;
|
225 |
|
226 |
if ( 1 === $part_data['required'] && empty( $validated_value ) ) {
|
227 |
-
$validated_value = new WP_Error(
|
228 |
}
|
229 |
|
230 |
return $validated_value;
|
3 |
class HappyForms_Part_SingleLineText extends HappyForms_Form_Part {
|
4 |
|
5 |
public $type = 'single_line_text';
|
|
|
6 |
|
7 |
public function __construct() {
|
8 |
$this->label = __( 'Short Text', 'happyforms' );
|
64 |
*
|
65 |
* @return string
|
66 |
*/
|
67 |
+
public function customize_templates() {
|
68 |
+
require_once( happyforms_get_include_folder() . '/templates/parts/customize-single-line-text.php' );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
69 |
}
|
70 |
|
71 |
/**
|
79 |
* @return string Markup for the form part.
|
80 |
*/
|
81 |
public function frontend_template( $part_data = array(), $form_data = array() ) {
|
82 |
+
$part = wp_parse_args( $part_data, $this->get_customize_defaults() );
|
83 |
+
$form = $form_data;
|
|
|
84 |
|
85 |
+
include( happyforms_get_include_folder() . '/templates/parts/frontend-single-line-text.php' );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
86 |
}
|
87 |
|
88 |
/**
|
110 |
*
|
111 |
* @return string
|
112 |
*/
|
113 |
+
public function sanitize_value( $part_data = array(), $form_data = array() ) {
|
114 |
$sanitized_value = $this->get_default_value();
|
115 |
+
$part_name = happyforms_get_part_name( $part_data, $form_data );
|
116 |
|
117 |
+
if ( isset( $_REQUEST[$part_name] ) ) {
|
118 |
+
$sanitized_value = sanitize_text_field( $_REQUEST[$part_name] );
|
119 |
}
|
120 |
|
121 |
return $sanitized_value;
|
132 |
* @return string|object
|
133 |
*/
|
134 |
public function validate_value( $part_data, $value ) {
|
|
|
135 |
$validated_value = $value;
|
136 |
|
137 |
if ( 1 === $part_data['required'] && empty( $validated_value ) ) {
|
138 |
+
$validated_value = new WP_Error( 'missing_required_field' );
|
139 |
}
|
140 |
|
141 |
return $validated_value;
|
inc/classes/parts/class-part-title.php
CHANGED
@@ -3,7 +3,6 @@
|
|
3 |
class HappyForms_Part_Title extends HappyForms_Form_Part {
|
4 |
|
5 |
public $type = 'title';
|
6 |
-
public $template_id = 'happyforms-title-template';
|
7 |
|
8 |
public function __construct() {
|
9 |
$this->label = __( 'Title', 'happyforms' );
|
@@ -61,57 +60,8 @@ class HappyForms_Part_Title extends HappyForms_Form_Part {
|
|
61 |
*
|
62 |
* @return string
|
63 |
*/
|
64 |
-
public function
|
65 |
-
|
66 |
-
<p>
|
67 |
-
<label for="<%= instance.id %>_title"><?php _e( 'Title', 'happyforms' ); ?></label>
|
68 |
-
<input type="text" id="<%= instance.id %>_title" class="widefat title" value="<%= instance.label %>" data-bind="label" />
|
69 |
-
</p>
|
70 |
-
<p>
|
71 |
-
<label for="<%= instance.id %>_label_placement"><?php _e( 'Title placement', 'happyforms' ); ?></label>
|
72 |
-
<select id="<%= instance.id %>_label_placement" data-bind="label_placement">
|
73 |
-
<option value="above"<%= (instance.label_placement == 'above') ? ' selected' : '' %>><?php _e( 'Above', 'happyforms' ); ?></option>
|
74 |
-
<option value="left"<%= (instance.label_placement == 'left') ? ' selected' : '' %>><?php _e( 'Left', 'happyforms' ); ?></option>
|
75 |
-
<option value="below"<%= (instance.label_placement == 'below') ? ' selected' : '' %>><?php _e( 'Below', 'happyforms' ); ?></option>
|
76 |
-
</select>
|
77 |
-
</p>
|
78 |
-
<p class="label_placement-options" style="display: none">
|
79 |
-
<label>
|
80 |
-
<input type="checkbox" class="checkbox apply-all-check" value="" data-apply-to="label_placement" /> <?php _e( 'Apply to all parts', 'happyforms' ); ?>
|
81 |
-
</label>
|
82 |
-
</p>
|
83 |
-
<p>
|
84 |
-
<label for="<%= instance.id %>_description"><?php _e( 'Description', 'happyforms' ); ?></label>
|
85 |
-
<textarea id="<%= instance.id %>_description" data-bind="description"><%= instance.description %></textarea>
|
86 |
-
</p>
|
87 |
-
<p class="tooltip-description-wrap" style="display: <%= (instance.description != '') ? 'block' : 'none' %>">
|
88 |
-
<label>
|
89 |
-
<input type="checkbox" class="checkbox" value="1" <% if ( instance.tooltip_description ) { %>checked="checked"<% } %> data-bind="tooltip_description" /> <?php _e( 'Show description in a tooltip', 'happyforms' ); ?>
|
90 |
-
</label>
|
91 |
-
</p>
|
92 |
-
<p>
|
93 |
-
<label for="<%= instance.id %>_width"><?php _e( 'Width', 'happyforms' ); ?></label>
|
94 |
-
<select id="<%= instance.id %>_width" name="width" data-bind="width" class="widefat">
|
95 |
-
<option value="full"<%= (instance.width == 'full') ? ' selected' : '' %>><?php _e( 'Full', 'happyforms' ); ?></option>
|
96 |
-
<option value="half"<%= (instance.width == 'half') ? ' selected' : '' %>><?php _e( 'Half', 'happyforms' ); ?></option>
|
97 |
-
<option value="third"<%= (instance.width == 'third') ? ' selected' : '' %>><?php _e( 'One third', 'happyforms' ); ?></option>
|
98 |
-
</select>
|
99 |
-
</p>
|
100 |
-
<p class="width-options" style="display: none">
|
101 |
-
<label>
|
102 |
-
<input type="checkbox" class="checkbox apply-all-check" value="" data-apply-to="width" /> <?php _e( 'Apply to all parts', 'happyforms' ); ?>
|
103 |
-
</label>
|
104 |
-
</p>
|
105 |
-
<p>
|
106 |
-
<label for="<%= instance.id %>_css_class"><?php _e( 'Custom CSS class', 'happyforms' ); ?></label>
|
107 |
-
<input type="text" id="<%= instance.id %>_css_class" class="widefat title" value="<%= instance.css_class %>" data-bind="css_class" />
|
108 |
-
</p>
|
109 |
-
<p>
|
110 |
-
<label>
|
111 |
-
<input type="checkbox" class="checkbox" value="1" <% if ( instance.required ) { %>checked="checked"<% } %> data-bind="required" /> <?php _e( 'This is a required field', 'happyforms' ); ?>
|
112 |
-
</label>
|
113 |
-
</p>
|
114 |
-
<?php
|
115 |
}
|
116 |
|
117 |
/**
|
@@ -125,57 +75,10 @@ class HappyForms_Part_Title extends HappyForms_Form_Part {
|
|
125 |
* @return string Markup for the form part.
|
126 |
*/
|
127 |
public function frontend_template( $part_data = array(), $form_data = array() ) {
|
128 |
-
$
|
129 |
-
$
|
130 |
-
$html_id = 'happyforms-' . $form_data['ID'] . '_' . esc_attr( $part_data['id'] );
|
131 |
|
132 |
-
|
133 |
-
|
134 |
-
if ( $part_data['width'] ) {
|
135 |
-
$classes[] = 'happyforms-part--width-' . esc_attr( $part_data['width'] ) . ' ';
|
136 |
-
}
|
137 |
-
|
138 |
-
if ( $part_data['label_placement'] ) {
|
139 |
-
$classes[] = 'happyforms-part--label-' . esc_attr( $part_data['label_placement'] ) . ' ';
|
140 |
-
}
|
141 |
-
|
142 |
-
if ( !empty( $part_data['css_class'] ) ) {
|
143 |
-
$classes[] = $part_data['css_class'];
|
144 |
-
}
|
145 |
-
|
146 |
-
$classes = implode( ' ', $classes );
|
147 |
-
?>
|
148 |
-
<div class="happyforms-part happyforms-part-editable <?php echo esc_attr( $classes ); ?>" data-happyforms-id="<?php echo esc_attr( $part_data['id'] ); ?>">
|
149 |
-
<div class="happyforms-part__wrap">
|
150 |
-
<label for="<?php echo esc_attr( $html_id ); ?>" class="happyforms-part__label">
|
151 |
-
<span class="label"><?php echo esc_html( $part_data['label'] ); ?></span>
|
152 |
-
<?php if ( 1 === intval( $part_data['required'] ) ) : ?>
|
153 |
-
<span class="happyforms-required"> <?php echo $required_text; ?></span>
|
154 |
-
<?php endif; ?>
|
155 |
-
</label>
|
156 |
-
<div class="happyforms-part__select-wrap">
|
157 |
-
<select id="<?php echo esc_attr( $html_id ); ?>" name="<?php echo esc_attr( happyforms_get_part_name( $part_data['id'], $form_data['ID'] ) ); ?>" class="happyforms-part__el"<?php if ( 1 === $part_data['required'] ) : ?> required aria-required="true"<?php endif; ?>>
|
158 |
-
<option value="">- <?php _e( 'Select', 'happyforms' ); ?> -</option>
|
159 |
-
<?php
|
160 |
-
$honorifics = $this->get_honorifics();
|
161 |
-
|
162 |
-
foreach ( $honorifics as $title ) {
|
163 |
-
?>
|
164 |
-
<option value="<?php echo $title; ?>"><?php echo $title; ?></option>
|
165 |
-
<?php
|
166 |
-
}
|
167 |
-
?>
|
168 |
-
</select>
|
169 |
-
</div>
|
170 |
-
<?php happyforms_print_part_description( $part_data ); ?>
|
171 |
-
<?php
|
172 |
-
if ( $form_data ) :
|
173 |
-
happyforms_message_notices( $form_data, $part_data['id'] );
|
174 |
-
endif;
|
175 |
-
?>
|
176 |
-
</div>
|
177 |
-
</div>
|
178 |
-
<?php
|
179 |
}
|
180 |
|
181 |
/**
|
@@ -187,12 +90,12 @@ class HappyForms_Part_Title extends HappyForms_Form_Part {
|
|
187 |
*/
|
188 |
public function get_honorifics() {
|
189 |
return array(
|
190 |
-
__('Mr.', 'happyforms' ),
|
191 |
-
__('Mrs.', 'happyforms' ),
|
192 |
-
__('Ms.', 'happyforms' ),
|
193 |
-
__('Miss', 'happyforms' ),
|
194 |
-
__('Prof.', 'happyforms' ),
|
195 |
-
__('Dr.', 'happyforms' )
|
196 |
);
|
197 |
}
|
198 |
|
@@ -244,12 +147,12 @@ class HappyForms_Part_Title extends HappyForms_Form_Part {
|
|
244 |
*
|
245 |
* @return string
|
246 |
*/
|
247 |
-
public function sanitize_value( $part_data = array() ) {
|
248 |
$sanitized_value = $this->get_default_value();
|
249 |
-
$
|
250 |
|
251 |
-
if ( isset( $_REQUEST[$
|
252 |
-
$sanitized_value = sanitize_text_field( $_REQUEST[$
|
253 |
|
254 |
return $sanitized_value;
|
255 |
}
|
@@ -266,18 +169,18 @@ class HappyForms_Part_Title extends HappyForms_Form_Part {
|
|
266 |
* @return string|object
|
267 |
*/
|
268 |
public function validate_value( $part_data, $value ) {
|
269 |
-
$part_id = $part_data['id'];
|
270 |
$validated_value = $value;
|
271 |
|
272 |
if ( 1 === $part_data['required'] && empty( $validated_value ) ) {
|
273 |
-
$validated_value = new WP_Error(
|
|
|
274 |
}
|
275 |
|
276 |
-
|
277 |
-
$possible_options = $this->get_honorifics();
|
278 |
|
279 |
-
if ( !in_array( $validated_value, $possible_options ) ) {
|
280 |
-
$validated_value = new WP_Error(
|
|
|
281 |
}
|
282 |
|
283 |
return $validated_value;
|
3 |
class HappyForms_Part_Title extends HappyForms_Form_Part {
|
4 |
|
5 |
public $type = 'title';
|
|
|
6 |
|
7 |
public function __construct() {
|
8 |
$this->label = __( 'Title', 'happyforms' );
|
60 |
*
|
61 |
* @return string
|
62 |
*/
|
63 |
+
public function customize_templates() {
|
64 |
+
require_once( happyforms_get_include_folder() . '/templates/parts/customize-title.php' );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
65 |
}
|
66 |
|
67 |
/**
|
75 |
* @return string Markup for the form part.
|
76 |
*/
|
77 |
public function frontend_template( $part_data = array(), $form_data = array() ) {
|
78 |
+
$part = wp_parse_args( $part_data, $this->get_customize_defaults() );
|
79 |
+
$form = $form_data;
|
|
|
80 |
|
81 |
+
include( happyforms_get_include_folder() . '/templates/parts/frontend-title.php' );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
82 |
}
|
83 |
|
84 |
/**
|
90 |
*/
|
91 |
public function get_honorifics() {
|
92 |
return array(
|
93 |
+
__( 'Mr.', 'happyforms' ),
|
94 |
+
__( 'Mrs.', 'happyforms' ),
|
95 |
+
__( 'Ms.', 'happyforms' ),
|
96 |
+
__( 'Miss', 'happyforms' ),
|
97 |
+
__( 'Prof.', 'happyforms' ),
|
98 |
+
__( 'Dr.', 'happyforms' )
|
99 |
);
|
100 |
}
|
101 |
|
147 |
*
|
148 |
* @return string
|
149 |
*/
|
150 |
+
public function sanitize_value( $part_data = array(), $form_data = array() ) {
|
151 |
$sanitized_value = $this->get_default_value();
|
152 |
+
$part_name = happyforms_get_part_name( $part_data, $form_data );
|
153 |
|
154 |
+
if ( isset( $_REQUEST[$part_name] ) ) {
|
155 |
+
$sanitized_value = sanitize_text_field( $_REQUEST[$part_name] );
|
156 |
|
157 |
return $sanitized_value;
|
158 |
}
|
169 |
* @return string|object
|
170 |
*/
|
171 |
public function validate_value( $part_data, $value ) {
|
|
|
172 |
$validated_value = $value;
|
173 |
|
174 |
if ( 1 === $part_data['required'] && empty( $validated_value ) ) {
|
175 |
+
$validated_value = new WP_Error( 'missing_required_field' );
|
176 |
+
return $validated_value;
|
177 |
}
|
178 |
|
179 |
+
$possible_options = $this->get_honorifics();
|
|
|
180 |
|
181 |
+
if ( ! in_array( $validated_value, $possible_options ) ) {
|
182 |
+
$validated_value = new WP_Error( 'not_valid_value' );
|
183 |
+
return $validated_value;
|
184 |
}
|
185 |
|
186 |
return $validated_value;
|
inc/classes/parts/class-part-website-url.php
CHANGED
@@ -3,7 +3,6 @@
|
|
3 |
class HappyForms_Part_WebsiteUrl extends HappyForms_Form_Part {
|
4 |
|
5 |
public $type = 'website_url';
|
6 |
-
public $template_id = 'happyforms-website-url-template';
|
7 |
|
8 |
public function __construct() {
|
9 |
$this->label = __( 'Website Link', 'happyforms' );
|
@@ -65,61 +64,8 @@ class HappyForms_Part_WebsiteUrl extends HappyForms_Form_Part {
|
|
65 |
*
|
66 |
* @return string
|
67 |
*/
|
68 |
-
public function
|
69 |
-
|
70 |
-
<p>
|
71 |
-
<label for="<%= instance.id %>_title"><?php _e( 'Title', 'happyforms' ); ?></label>
|
72 |
-
<input type="text" id="<%= instance.id %>_title" class="widefat title" value="<%= instance.label %>" data-bind="label" />
|
73 |
-
</p>
|
74 |
-
<p>
|
75 |
-
<label for="<%= instance.id %>_label_placement"><?php _e( 'Title placement', 'happyforms' ); ?></label>
|
76 |
-
<select id="<%= instance.id %>_label_placement" data-bind="label_placement">
|
77 |
-
<option value="above"<%= (instance.label_placement == 'above') ? ' selected' : '' %>><?php _e( 'Above', 'happyforms' ); ?></option>
|
78 |
-
<option value="left"<%= (instance.label_placement == 'left') ? ' selected' : '' %>><?php _e( 'Left', 'happyforms' ); ?></option>
|
79 |
-
<option value="below"<%= (instance.label_placement == 'below') ? ' selected' : '' %>><?php _e( 'Below', 'happyforms' ); ?></option>
|
80 |
-
</select>
|
81 |
-
</p>
|
82 |
-
<p class="label_placement-options" style="display: none">
|
83 |
-
<label>
|
84 |
-
<input type="checkbox" class="checkbox apply-all-check" value="" data-apply-to="label_placement" /> <?php _e( 'Apply to all parts', 'happyforms' ); ?>
|
85 |
-
</label>
|
86 |
-
</p>
|
87 |
-
<p>
|
88 |
-
<label for="<%= instance.id %>_description"><?php _e( 'Description', 'happyforms' ); ?></label>
|
89 |
-
<textarea id="<%= instance.id %>_description" data-bind="description"><%= instance.description %></textarea>
|
90 |
-
</p>
|
91 |
-
<p class="tooltip-description-wrap" style="display: <%= (instance.description != '') ? 'block' : 'none' %>">
|
92 |
-
<label>
|
93 |
-
<input type="checkbox" class="checkbox" value="1" <% if ( instance.tooltip_description ) { %>checked="checked"<% } %> data-bind="tooltip_description" /> <?php _e( 'Show description in a tooltip', 'happyforms' ); ?>
|
94 |
-
</label>
|
95 |
-
</p>
|
96 |
-
<p>
|
97 |
-
<label for="<%= instance.id %>_placeholder"><?php _e( 'Placeholder', 'happyforms' ); ?></label>
|
98 |
-
<input type="text" id="<%= instance.id %>_placeholder" class="widefat title" value="<%= instance.placeholder %>" data-bind="placeholder" />
|
99 |
-
</p>
|
100 |
-
<p>
|
101 |
-
<label for="<%= instance.id %>_width"><?php _e( 'Width', 'happyforms' ); ?></label>
|
102 |
-
<select id="<%= instance.id %>_width" name="width" data-bind="width" class="widefat">
|
103 |
-
<option value="full"<%= (instance.width == 'full') ? ' selected' : '' %>><?php _e( 'Full', 'happyforms' ); ?></option>
|
104 |
-
<option value="half"<%= (instance.width == 'half') ? ' selected' : '' %>><?php _e( 'Half', 'happyforms' ); ?></option>
|
105 |
-
<option value="third"<%= (instance.width == 'third') ? ' selected' : '' %>><?php _e( 'One third', 'happyforms' ); ?></option>
|
106 |
-
</select>
|
107 |
-
</p>
|
108 |
-
<p class="width-options" style="display: none">
|
109 |
-
<label>
|
110 |
-
<input type="checkbox" class="checkbox apply-all-check" value="" data-apply-to="width" /> <?php _e( 'Apply to all parts', 'happyforms' ); ?>
|
111 |
-
</label>
|
112 |
-
</p>
|
113 |
-
<p>
|
114 |
-
<label for="<%= instance.id %>_css_class"><?php _e( 'Custom CSS class', 'happyforms' ); ?></label>
|
115 |
-
<input type="text" id="<%= instance.id %>_css_class" class="widefat title" value="<%= instance.css_class %>" data-bind="css_class" />
|
116 |
-
</p>
|
117 |
-
<p>
|
118 |
-
<label>
|
119 |
-
<input type="checkbox" class="checkbox" value="1" <% if ( instance.required ) { %>checked="checked"<% } %> data-bind="required" /> <?php _e( 'This is a required field', 'happyforms' ); ?>
|
120 |
-
</label>
|
121 |
-
</p>
|
122 |
-
<?php
|
123 |
}
|
124 |
|
125 |
/**
|
@@ -133,44 +79,10 @@ class HappyForms_Part_WebsiteUrl extends HappyForms_Form_Part {
|
|
133 |
* @return string Markup for the form part.
|
134 |
*/
|
135 |
public function frontend_template( $part_data = array(), $form_data = array() ) {
|
136 |
-
$
|
137 |
-
$
|
138 |
-
$html_id = 'happyforms-' . $form_data['ID'] . '_' . esc_attr( $part_data['id'] );
|
139 |
|
140 |
-
|
141 |
-
|
142 |
-
if ( $part_data['width'] ) {
|
143 |
-
$classes[] = 'happyforms-part--width-' . esc_attr( $part_data['width'] ) . ' ';
|
144 |
-
}
|
145 |
-
|
146 |
-
if ( $part_data['label_placement'] ) {
|
147 |
-
$classes[] = 'happyforms-part--label-' . esc_attr( $part_data['label_placement'] ) . ' ';
|
148 |
-
}
|
149 |
-
|
150 |
-
if ( !empty( $part_data['css_class'] ) ) {
|
151 |
-
$classes[] = $part_data['css_class'];
|
152 |
-
}
|
153 |
-
|
154 |
-
$classes = implode( ' ', $classes );
|
155 |
-
?>
|
156 |
-
<div class="happyforms-part happyforms-part-editable <?php echo esc_attr( $classes ); ?>" data-happyforms-id="<?php echo esc_attr( $part_data['id'] ); ?>">
|
157 |
-
<div class="happyforms-part__wrap">
|
158 |
-
<label for="<?php echo esc_attr( $html_id ); ?>" class="happyforms-part__label">
|
159 |
-
<span class="label"><?php echo esc_html( $part_data['label'] ); ?></span>
|
160 |
-
<?php if ( 1 === intval( $part_data['required'] ) ) : ?>
|
161 |
-
<span class="happyforms-required"> <?php echo $required_text; ?></span>
|
162 |
-
<?php endif; ?>
|
163 |
-
</label>
|
164 |
-
<input id="<?php echo esc_attr( $html_id ); ?>" type="text" name="<?php echo esc_attr( happyforms_get_part_name( $part_data['id'], $form_data['ID'] ) ); ?>" placeholder="<?php echo esc_attr( $part_data['placeholder'] ); ?>" class="happyforms-part__el happyforms-part__el--text-input" <?php if ( 1 === $part_data['required'] ) : ?>required aria-required="true"<?php endif; ?> />
|
165 |
-
<?php happyforms_print_part_description( $part_data ); ?>
|
166 |
-
<?php
|
167 |
-
if ( $form_data ) :
|
168 |
-
happyforms_message_notices( $form_data, $part_data['id'] );
|
169 |
-
endif;
|
170 |
-
?>
|
171 |
-
</div>
|
172 |
-
</div>
|
173 |
-
<?php
|
174 |
}
|
175 |
|
176 |
/**
|
@@ -202,12 +114,12 @@ class HappyForms_Part_WebsiteUrl extends HappyForms_Form_Part {
|
|
202 |
*
|
203 |
* @return string
|
204 |
*/
|
205 |
-
public function sanitize_value( $part_data = array() ) {
|
206 |
$sanitized_value = $this->get_default_value();
|
207 |
-
$
|
208 |
|
209 |
-
if ( isset( $_REQUEST[$
|
210 |
-
$sanitized_value = sanitize_text_field( $_REQUEST[$
|
211 |
}
|
212 |
|
213 |
return $sanitized_value;
|
@@ -224,15 +136,16 @@ class HappyForms_Part_WebsiteUrl extends HappyForms_Form_Part {
|
|
224 |
* @return string|object
|
225 |
*/
|
226 |
public function validate_value( $part_data, $value ) {
|
227 |
-
$part_id = $part_data['id'];
|
228 |
$validated_value = $value;
|
229 |
|
230 |
if ( 1 === $part_data['required'] && empty( $validated_value ) ) {
|
231 |
-
$validated_value = new WP_Error(
|
|
|
232 |
}
|
233 |
|
234 |
-
if ( !
|
235 |
-
$validated_value = new WP_Error(
|
|
|
236 |
}
|
237 |
|
238 |
return $validated_value;
|
3 |
class HappyForms_Part_WebsiteUrl extends HappyForms_Form_Part {
|
4 |
|
5 |
public $type = 'website_url';
|
|
|
6 |
|
7 |
public function __construct() {
|
8 |
$this->label = __( 'Website Link', 'happyforms' );
|
64 |
*
|
65 |
* @return string
|
66 |
*/
|
67 |
+
public function customize_templates() {
|
68 |
+
require_once( happyforms_get_include_folder() . '/templates/parts/customize-website-url.php' );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
69 |
}
|
70 |
|
71 |
/**
|
79 |
* @return string Markup for the form part.
|
80 |
*/
|
81 |
public function frontend_template( $part_data = array(), $form_data = array() ) {
|
82 |
+
$part = wp_parse_args( $part_data, $this->get_customize_defaults() );
|
83 |
+
$form = $form_data;
|
|
|
84 |
|
85 |
+
include( happyforms_get_include_folder() . '/templates/parts/frontend-website-url.php' );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
86 |
}
|
87 |
|
88 |
/**
|
114 |
*
|
115 |
* @return string
|
116 |
*/
|
117 |
+
public function sanitize_value( $part_data = array(), $form_data = array() ) {
|
118 |
$sanitized_value = $this->get_default_value();
|
119 |
+
$part_name = happyforms_get_part_name( $part_data, $form_data );
|
120 |
|
121 |
+
if ( isset( $_REQUEST[$part_name] ) ) {
|
122 |
+
$sanitized_value = sanitize_text_field( $_REQUEST[$part_name] );
|
123 |
}
|
124 |
|
125 |
return $sanitized_value;
|
136 |
* @return string|object
|
137 |
*/
|
138 |
public function validate_value( $part_data, $value ) {
|
|
|
139 |
$validated_value = $value;
|
140 |
|
141 |
if ( 1 === $part_data['required'] && empty( $validated_value ) ) {
|
142 |
+
$validated_value = new WP_Error( 'missing_required_field' );
|
143 |
+
return $validated_value;
|
144 |
}
|
145 |
|
146 |
+
if ( '' === esc_url_raw( $validated_value ) || ! wp_parse_url( $validated_value ) ) {
|
147 |
+
$validated_value = new WP_Error( 'not_valid_url' );
|
148 |
+
return $validated_value;
|
149 |
}
|
150 |
|
151 |
return $validated_value;
|
inc/helpers/helper-activation.php
CHANGED
@@ -27,6 +27,7 @@ function happyforms_first_run() {
|
|
27 |
require_once( happyforms_get_include_folder() . '/classes/class-form-controller.php' );
|
28 |
require_once( happyforms_get_include_folder() . '/classes/class-form-styles.php' );
|
29 |
require_once( happyforms_get_include_folder() . '/classes/class-message-controller.php' );
|
|
|
30 |
require_once( happyforms_get_include_folder() . '/helpers/helper-validation.php' );
|
31 |
|
32 |
$part_library = happyforms_get_part_library();
|
27 |
require_once( happyforms_get_include_folder() . '/classes/class-form-controller.php' );
|
28 |
require_once( happyforms_get_include_folder() . '/classes/class-form-styles.php' );
|
29 |
require_once( happyforms_get_include_folder() . '/classes/class-message-controller.php' );
|
30 |
+
require_once( happyforms_get_include_folder() . '/helpers/helper-form-templates.php' );
|
31 |
require_once( happyforms_get_include_folder() . '/helpers/helper-validation.php' );
|
32 |
|
33 |
$part_library = happyforms_get_part_library();
|
inc/helpers/helper-form-templates.php
CHANGED
@@ -62,40 +62,13 @@ function happyforms_redirect_field( $form_data ) {
|
|
62 |
|
63 |
endif;
|
64 |
|
65 |
-
if ( ! function_exists( 'happyforms_honeypot_styles' ) ):
|
66 |
-
/**
|
67 |
-
* Output honeypot styles to push the
|
68 |
-
* honeypot field out of the screen.
|
69 |
-
*
|
70 |
-
* @since 1.0
|
71 |
-
*
|
72 |
-
* @param array $honeypot Current honeypot metadata.
|
73 |
-
* @param array $form Current form data.
|
74 |
-
*
|
75 |
-
* @return void
|
76 |
-
*/
|
77 |
-
function happyforms_honeypot_styles( $form ) {
|
78 |
-
$honeypot_id = happyforms_get_honeypot( $form );
|
79 |
-
?>
|
80 |
-
<style>
|
81 |
-
#<?php echo $honeypot_id; ?> {
|
82 |
-
position: absolute;
|
83 |
-
top: -99999px;
|
84 |
-
left: -99999px;
|
85 |
-
}
|
86 |
-
</style>
|
87 |
-
<?php
|
88 |
-
}
|
89 |
-
|
90 |
-
endif;
|
91 |
-
|
92 |
if ( ! function_exists( 'happyforms_nonce_field' ) ):
|
93 |
/**
|
94 |
* Output the nonce field for the current form.
|
95 |
*
|
96 |
* @since 1.0
|
97 |
*
|
98 |
-
* @param array $form
|
99 |
*
|
100 |
* @return void
|
101 |
*/
|
@@ -110,45 +83,16 @@ function happyforms_nonce_field( $form ) {
|
|
110 |
|
111 |
endif;
|
112 |
|
113 |
-
if ( ! function_exists( '
|
114 |
-
/**
|
115 |
-
* Returns the honeypot field name.
|
116 |
-
*
|
117 |
-
* @since 1.2.2
|
118 |
-
*
|
119 |
-
* @param array $form Current form data.
|
120 |
-
*
|
121 |
-
* @return string
|
122 |
-
*/
|
123 |
-
function happyforms_get_honeypot( $form ) {
|
124 |
-
$form_id = $form['ID'];
|
125 |
-
$part_id = md5( $form_id );
|
126 |
-
$honeypot_id = "happyforms-{$form_id}_single_line_text_{$part_id}";
|
127 |
|
128 |
-
return $honeypot_id;
|
129 |
-
}
|
130 |
-
|
131 |
-
endif;
|
132 |
-
|
133 |
-
if ( ! function_exists( 'happyforms_honeypot' ) ):
|
134 |
-
/**
|
135 |
-
* Output the honeypot field.
|
136 |
-
*
|
137 |
-
* @since 1.2.2
|
138 |
-
*
|
139 |
-
* @param array $form Current form data.
|
140 |
-
*
|
141 |
-
* @return void
|
142 |
-
*/
|
143 |
function happyforms_honeypot( $form ) {
|
144 |
-
|
145 |
-
return;
|
146 |
-
}
|
147 |
|
148 |
-
|
149 |
?>
|
150 |
-
<input
|
151 |
<?php
|
|
|
152 |
}
|
153 |
|
154 |
endif;
|
@@ -165,8 +109,8 @@ if ( ! function_exists( 'happyforms_submit' ) ):
|
|
165 |
*/
|
166 |
function happyforms_submit( $form ) {
|
167 |
?>
|
168 |
-
<div class="happyforms-part happyforms-part--submit">
|
169 |
-
<input type="submit" class="happyforms-submit happyforms-button--submit" <?php if ( ! empty( $form['submit_button_label'] ) ): ?>value="<?php echo esc_attr( $form['submit_button_label'] ); ?>"<?php endif; ?><?php if ( $form
|
170 |
</div>
|
171 |
<?php
|
172 |
}
|
@@ -215,7 +159,7 @@ if ( ! function_exists( 'happyforms_print_part_description' ) ):
|
|
215 |
function happyforms_print_part_description( $part_data ) {
|
216 |
if ( 1 === intval( $part_data['tooltip_description'] ) || is_customize_preview() ) : ?>
|
217 |
<span class="happyforms-part__tooltip happyforms-tooltip"<?php if ( empty( $part_data['tooltip_description'] ) ) : ?> style="display: none"<?php endif; ?>>
|
218 |
-
<span class="happyforms-tooltip__trigger"
|
219 |
<span class="happyforms-part__description"><?php echo esc_html( $part_data['description'] ); ?></span>
|
220 |
</span>
|
221 |
<?php endif; ?>
|
@@ -232,7 +176,7 @@ if ( ! function_exists( 'happyforms_get_form_action' ) ):
|
|
232 |
*
|
233 |
* @since 1.1
|
234 |
*
|
235 |
-
* @param array
|
236 |
*
|
237 |
* @return string
|
238 |
*/
|
@@ -242,7 +186,7 @@ function happyforms_get_form_action( $form_id ) {
|
|
242 |
*
|
243 |
* @since 1.1
|
244 |
*
|
245 |
-
* @param string
|
246 |
*
|
247 |
* @return string The filtered action value.
|
248 |
*/
|
@@ -257,7 +201,7 @@ if ( ! function_exists( 'happyforms_form_action' ) ):
|
|
257 |
*
|
258 |
* @since 1.1
|
259 |
*
|
260 |
-
* @param array
|
261 |
*
|
262 |
* @return void
|
263 |
*/
|
@@ -273,23 +217,384 @@ if ( ! function_exists( 'happyforms_get_part_name' ) ):
|
|
273 |
*
|
274 |
* @since 1.1
|
275 |
*
|
276 |
-
* @param array
|
277 |
-
* @param array
|
278 |
*
|
279 |
* @return string
|
280 |
*/
|
281 |
-
function happyforms_get_part_name( $
|
|
|
|
|
282 |
/**
|
283 |
* Filter the field name for this form part.
|
284 |
*
|
285 |
* @since 1.1
|
286 |
*
|
287 |
-
* @param string
|
288 |
-
* @param
|
|
|
289 |
*
|
290 |
* @return string The filtered part name.
|
291 |
*/
|
292 |
-
return apply_filters( 'happyforms_part_name', $
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
293 |
}
|
294 |
|
295 |
endif;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
62 |
|
63 |
endif;
|
64 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
65 |
if ( ! function_exists( 'happyforms_nonce_field' ) ):
|
66 |
/**
|
67 |
* Output the nonce field for the current form.
|
68 |
*
|
69 |
* @since 1.0
|
70 |
*
|
71 |
+
* @param array $form Current form data.
|
72 |
*
|
73 |
* @return void
|
74 |
*/
|
83 |
|
84 |
endif;
|
85 |
|
86 |
+
if ( ! function_exists( 'happyforms_honeypot' ) ) :
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
87 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
88 |
function happyforms_honeypot( $form ) {
|
89 |
+
$controller = happyforms_get_form_controller();
|
|
|
|
|
90 |
|
91 |
+
if ( $controller->has_spam_protection( $form ) ) :
|
92 |
?>
|
93 |
+
<input type="checkbox" name="<?php echo $form['ID']; ?>single_line_text_-1" value="1" style="display: none;" tabindex="-1" autocomplete="off">
|
94 |
<?php
|
95 |
+
endif;
|
96 |
}
|
97 |
|
98 |
endif;
|
109 |
*/
|
110 |
function happyforms_submit( $form ) {
|
111 |
?>
|
112 |
+
<div class="happyforms-form__part happyforms-part happyforms-part--submit">
|
113 |
+
<input type="submit" class="happyforms-submit happyforms-button--submit" <?php if ( ! empty( $form['submit_button_label'] ) ): ?>value="<?php echo esc_attr( $form['submit_button_label'] ); ?>"<?php endif; ?><?php if ( happyforms_get_form_property( $form, 'disable_submit_until_valid' ) ) : ?> disabled<?php endif; ?>>
|
114 |
</div>
|
115 |
<?php
|
116 |
}
|
159 |
function happyforms_print_part_description( $part_data ) {
|
160 |
if ( 1 === intval( $part_data['tooltip_description'] ) || is_customize_preview() ) : ?>
|
161 |
<span class="happyforms-part__tooltip happyforms-tooltip"<?php if ( empty( $part_data['tooltip_description'] ) ) : ?> style="display: none"<?php endif; ?>>
|
162 |
+
<span class="happyforms-tooltip__trigger"></span>
|
163 |
<span class="happyforms-part__description"><?php echo esc_html( $part_data['description'] ); ?></span>
|
164 |
</span>
|
165 |
<?php endif; ?>
|
176 |
*
|
177 |
* @since 1.1
|
178 |
*
|
179 |
+
* @param array $form_id Current form id.
|
180 |
*
|
181 |
* @return string
|
182 |
*/
|
186 |
*
|
187 |
* @since 1.1
|
188 |
*
|
189 |
+
* @param string $value The default action, an empty string.
|
190 |
*
|
191 |
* @return string The filtered action value.
|
192 |
*/
|
201 |
*
|
202 |
* @since 1.1
|
203 |
*
|
204 |
+
* @param array $form_id Current form id.
|
205 |
*
|
206 |
* @return void
|
207 |
*/
|
217 |
*
|
218 |
* @since 1.1
|
219 |
*
|
220 |
+
* @param array $part_id Current part data.
|
221 |
+
* @param array $form_id Current form data.
|
222 |
*
|
223 |
* @return string
|
224 |
*/
|
225 |
+
function happyforms_get_part_name( $part, $form ) {
|
226 |
+
$name = $form['ID'] . '_' . $part['id'];
|
227 |
+
|
228 |
/**
|
229 |
* Filter the field name for this form part.
|
230 |
*
|
231 |
* @since 1.1
|
232 |
*
|
233 |
+
* @param string $name The default name.
|
234 |
+
* @param array $part Current part data.
|
235 |
+
* @param array $form Current form data.
|
236 |
*
|
237 |
* @return string The filtered part name.
|
238 |
*/
|
239 |
+
return apply_filters( 'happyforms_part_name', $name, $part, $form );
|
240 |
+
}
|
241 |
+
|
242 |
+
endif;
|
243 |
+
|
244 |
+
if ( ! function_exists( 'happyforms_the_part_name' ) ):
|
245 |
+
/**
|
246 |
+
* Output the current form part field name.
|
247 |
+
*
|
248 |
+
* @since 1.3
|
249 |
+
*
|
250 |
+
* @param array $part Current part data.
|
251 |
+
* @param array $form Current form data.
|
252 |
+
*
|
253 |
+
* @return string
|
254 |
+
*/
|
255 |
+
function happyforms_the_part_name( $part, $form ) {
|
256 |
+
echo esc_attr( happyforms_get_part_name( $part, $form ) );
|
257 |
+
}
|
258 |
+
|
259 |
+
endif;
|
260 |
+
|
261 |
+
if ( ! function_exists( 'happyforms_get_form_title' ) ):
|
262 |
+
/**
|
263 |
+
* Return the form title.
|
264 |
+
*
|
265 |
+
* @since 1.3
|
266 |
+
*
|
267 |
+
* @param array $form Current form data.
|
268 |
+
*
|
269 |
+
* @return string
|
270 |
+
*/
|
271 |
+
function happyforms_get_form_title( $form ) {
|
272 |
+
return esc_html( $form['post_title'] );
|
273 |
+
}
|
274 |
+
|
275 |
+
endif;
|
276 |
+
|
277 |
+
if ( ! function_exists( 'happyforms_the_form_title' ) ):
|
278 |
+
/**
|
279 |
+
* Output the form title.
|
280 |
+
*
|
281 |
+
* @since 1.3
|
282 |
+
*
|
283 |
+
* @param array $form Current form data.
|
284 |
+
*
|
285 |
+
* @return void
|
286 |
+
*/
|
287 |
+
function happyforms_the_form_title( $form ) {
|
288 |
+
$before = '<h3 class="happyforms-form__title">';
|
289 |
+
$after = '</h3>';
|
290 |
+
$title = happyforms_get_form_title( $form );
|
291 |
+
$form_title = "{$before}{$title}{$after}";
|
292 |
+
|
293 |
+
/**
|
294 |
+
* Filter the output of a form title.
|
295 |
+
*
|
296 |
+
* @since 1.3
|
297 |
+
*
|
298 |
+
* @param string $form_title Current title markup.
|
299 |
+
* @param string $before Content to output before the title.
|
300 |
+
* @param string $after Content to output after the title.
|
301 |
+
* @param array $form Current form data.
|
302 |
+
*
|
303 |
+
* @return void
|
304 |
+
*/
|
305 |
+
$form_title = apply_filters( 'happyforms_the_form_title', $form_title, $before, $after, $form );
|
306 |
+
|
307 |
+
echo $form_title;
|
308 |
+
}
|
309 |
+
|
310 |
+
endif;
|
311 |
+
|
312 |
+
if ( ! function_exists( 'happyforms_get_form_class' ) ):
|
313 |
+
/**
|
314 |
+
* Get a form's html class.
|
315 |
+
*
|
316 |
+
* @since 1.3
|
317 |
+
*
|
318 |
+
* @param array $form Current form data.
|
319 |
+
*
|
320 |
+
* @return string
|
321 |
+
*/
|
322 |
+
function happyforms_get_form_class( $form ) {
|
323 |
+
/**
|
324 |
+
* Filter the list of classes of a form element.
|
325 |
+
*
|
326 |
+
* @since 1.3
|
327 |
+
*
|
328 |
+
* @param array $classes List of current classes.
|
329 |
+
* @param array $form Current form data.
|
330 |
+
*
|
331 |
+
* @return string
|
332 |
+
*/
|
333 |
+
$classes = apply_filters( 'happyforms_form_class', array(), $form );
|
334 |
+
$classes = implode( ' ', $classes );
|
335 |
+
|
336 |
+
return $classes;
|
337 |
+
}
|
338 |
+
|
339 |
+
endif;
|
340 |
+
|
341 |
+
if ( ! function_exists( 'happyforms_the_form_class' ) ):
|
342 |
+
/**
|
343 |
+
* Output a form's html class.
|
344 |
+
*
|
345 |
+
* @since 1.3
|
346 |
+
*
|
347 |
+
* @param array $form Current form data.
|
348 |
+
*
|
349 |
+
* @return string
|
350 |
+
*/
|
351 |
+
function happyforms_the_form_class( $form ) {
|
352 |
+
echo happyforms_get_form_class( $form );
|
353 |
+
}
|
354 |
+
|
355 |
+
endif;
|
356 |
+
|
357 |
+
if ( ! function_exists( 'happyforms_get_form_part' ) ):
|
358 |
+
/**
|
359 |
+
* Get a part block markup.
|
360 |
+
*
|
361 |
+
* @since 1.3
|
362 |
+
*
|
363 |
+
* @param array $part Current part data.
|
364 |
+
* @param array $form Current form data.
|
365 |
+
*
|
366 |
+
* @return string
|
367 |
+
*/
|
368 |
+
function happyforms_get_form_part( $part, $form ) {
|
369 |
+
$html = happyforms_get_part_library()->get_part_template( $part, $form );
|
370 |
+
|
371 |
+
return $html;
|
372 |
+
}
|
373 |
+
|
374 |
+
endif;
|
375 |
+
|
376 |
+
if ( ! function_exists( 'happyforms_the_form_part' ) ):
|
377 |
+
/**
|
378 |
+
* Output a part block.
|
379 |
+
*
|
380 |
+
* @since 1.3
|
381 |
+
*
|
382 |
+
* @param array $part Current part data.
|
383 |
+
* @param array $form Current form data.
|
384 |
+
*
|
385 |
+
* @return void
|
386 |
+
*/
|
387 |
+
function happyforms_the_form_part( $part, $form ) {
|
388 |
+
echo happyforms_get_form_part( $part, $form );
|
389 |
+
}
|
390 |
+
|
391 |
+
endif;
|
392 |
+
|
393 |
+
if ( ! function_exists( 'happyforms_get_part_class' ) ):
|
394 |
+
/**
|
395 |
+
* Get a part wrapper's html classe.
|
396 |
+
*
|
397 |
+
* @since 1.3
|
398 |
+
*
|
399 |
+
* @param array $part Current part data.
|
400 |
+
* @param array $form Current form data.
|
401 |
+
*
|
402 |
+
* @return string
|
403 |
+
*/
|
404 |
+
function happyforms_get_part_class( $part, $form ) {
|
405 |
+
/**
|
406 |
+
* Filter the list of classes of a form part element.
|
407 |
+
*
|
408 |
+
* @since 1.3
|
409 |
+
*
|
410 |
+
* @param array $classes List of current classes.
|
411 |
+
* @param array $part Current part data.
|
412 |
+
* @param array $form Current form data.
|
413 |
+
*
|
414 |
+
* @return string
|
415 |
+
*/
|
416 |
+
$classes = apply_filters( 'happyforms_part_class', array(), $part, $form );
|
417 |
+
$classes = implode( ' ', $classes );
|
418 |
+
|
419 |
+
return $classes;
|
420 |
+
}
|
421 |
+
|
422 |
+
endif;
|
423 |
+
|
424 |
+
if ( ! function_exists( 'happyforms_the_part_class' ) ):
|
425 |
+
/**
|
426 |
+
* Output a part wrapper's html class.
|
427 |
+
*
|
428 |
+
* @since 1.3
|
429 |
+
*
|
430 |
+
* @param array $part Current part data.
|
431 |
+
* @param array $form Current form data.
|
432 |
+
*
|
433 |
+
* @return string
|
434 |
+
*/
|
435 |
+
function happyforms_the_part_class( $part, $form ) {
|
436 |
+
echo happyforms_get_part_class( $part, $form );
|
437 |
+
}
|
438 |
+
|
439 |
+
endif;
|
440 |
+
|
441 |
+
if ( ! function_exists( 'happyforms_get_part_id' ) ):
|
442 |
+
/**
|
443 |
+
* Get a part wrapper's id.
|
444 |
+
*
|
445 |
+
* @since 1.3
|
446 |
+
*
|
447 |
+
* @param string $part_id Current part id.
|
448 |
+
* @param string $form_id Current form id.
|
449 |
+
*
|
450 |
+
* @return string
|
451 |
+
*/
|
452 |
+
function happyforms_get_part_id( $part_id, $form_id ) {
|
453 |
+
$id = esc_attr( 'happyforms-' . $form_id . '_' . $part_id );
|
454 |
+
|
455 |
+
/**
|
456 |
+
* Filter the html id of a form part element.
|
457 |
+
*
|
458 |
+
* @since 1.3
|
459 |
+
*
|
460 |
+
* @param string $id Current part id.
|
461 |
+
* @param string $part_id Current part id.
|
462 |
+
* @param string $form_id Current form id.
|
463 |
+
*
|
464 |
+
* @return string
|
465 |
+
*/
|
466 |
+
$id = apply_filters( 'happyforms_part_id', $id, $part_id, $form_id );
|
467 |
+
|
468 |
+
return $id;
|
469 |
}
|
470 |
|
471 |
endif;
|
472 |
+
|
473 |
+
if ( ! function_exists( 'happyforms_the_part_id' ) ):
|
474 |
+
/**
|
475 |
+
* Outputs a part wrapper's id.
|
476 |
+
*
|
477 |
+
* @since 1.3
|
478 |
+
*
|
479 |
+
* @param array $part Current part data.
|
480 |
+
* @param array $form Current form data.
|
481 |
+
*
|
482 |
+
* @return string
|
483 |
+
*/
|
484 |
+
function happyforms_the_part_id( $part, $form ) {
|
485 |
+
echo happyforms_get_part_id( $part['id'], $form['ID'] );
|
486 |
+
}
|
487 |
+
|
488 |
+
endif;
|
489 |
+
|
490 |
+
if ( ! function_exists( 'happyforms_get_form_property' ) ):
|
491 |
+
/**
|
492 |
+
* Get a form's style property.
|
493 |
+
*
|
494 |
+
* @since 1.3
|
495 |
+
*
|
496 |
+
* @param array $form Current form data.
|
497 |
+
* @param string $key The key to retrieve the style for.
|
498 |
+
*
|
499 |
+
* @return string
|
500 |
+
*/
|
501 |
+
function happyforms_get_form_property( $form, $key ) {
|
502 |
+
$value = isset( $form[$key] ) ? $form[$key] : '';
|
503 |
+
|
504 |
+
return $value;
|
505 |
+
}
|
506 |
+
|
507 |
+
endif;
|
508 |
+
|
509 |
+
if ( ! function_exists( 'happyforms_get_part_data_attributes' ) ) :
|
510 |
+
/**
|
511 |
+
* Get the html data- attributes of a form part element.
|
512 |
+
*
|
513 |
+
* @since 1.3
|
514 |
+
*
|
515 |
+
* @param array $part Current part data.
|
516 |
+
* @param array $form Current form data.
|
517 |
+
*
|
518 |
+
* @return array
|
519 |
+
*/
|
520 |
+
function happyforms_get_part_data_attributes( $part, $form ) {
|
521 |
+
/**
|
522 |
+
* Filter the html data- attributes of a form part element.
|
523 |
+
*
|
524 |
+
* @since 1.3
|
525 |
+
*
|
526 |
+
* @param array $attributes Current part attributes.
|
527 |
+
* @param string $part_id Current part data.
|
528 |
+
* @param string $form_id Current form data.
|
529 |
+
*
|
530 |
+
* @return string
|
531 |
+
*/
|
532 |
+
$attributes = apply_filters( 'happyforms_part_data_attributes', array(), $part, $form );
|
533 |
+
$data = array();
|
534 |
+
|
535 |
+
foreach ( $attributes as $attribute => $value ) {
|
536 |
+
$data[] = "data-{$attribute}=\"{$value}\"";
|
537 |
+
}
|
538 |
+
|
539 |
+
$data = implode( ' ', $data );
|
540 |
+
|
541 |
+
return $data;
|
542 |
+
}
|
543 |
+
|
544 |
+
endif;
|
545 |
+
|
546 |
+
if ( ! function_exists( 'happyforms_the_part_data_attributes' ) ) :
|
547 |
+
/**
|
548 |
+
* Output a part's html data- attributes
|
549 |
+
*
|
550 |
+
* @since 1.3
|
551 |
+
*
|
552 |
+
* @param array $part Current part data.
|
553 |
+
* @param array $form Current form data.
|
554 |
+
*
|
555 |
+
* @return void
|
556 |
+
*/
|
557 |
+
function happyforms_the_part_data_attributes( $part, $form ) {
|
558 |
+
echo happyforms_get_part_data_attributes( $part, $form );
|
559 |
+
}
|
560 |
+
|
561 |
+
endif;
|
562 |
+
|
563 |
+
if ( ! function_exists( 'happyforms_the_part_label' ) ) :
|
564 |
+
/**
|
565 |
+
* Output a part label
|
566 |
+
*
|
567 |
+
* @since 1.3
|
568 |
+
*
|
569 |
+
* @param string $id Current part id.
|
570 |
+
* @param array $part Current part data.
|
571 |
+
* @param array $form Current form data.
|
572 |
+
*
|
573 |
+
* @return void
|
574 |
+
*/
|
575 |
+
function happyforms_the_part_label( $part, $form ) {
|
576 |
+
?>
|
577 |
+
<label for="<?php happyforms_the_part_id( $part, $form ); ?>" class="happyforms-part__label">
|
578 |
+
<span class="label"><?php echo esc_html( $part['label'] ); ?></span>
|
579 |
+
<?php if ( isset( $part['required'] ) && 1 === intval( $part['required'] ) ) : ?>
|
580 |
+
<span class="happyforms-required"><?php echo happyforms_get_form_property( $form, 'hf_style_required_text' ); ?></span>
|
581 |
+
<?php endif; ?>
|
582 |
+
</label>
|
583 |
+
<?php
|
584 |
+
}
|
585 |
+
|
586 |
+
endif;
|
587 |
+
|
588 |
+
if ( ! function_exists( 'happyforms_recaptcha' ) ) :
|
589 |
+
|
590 |
+
function happyforms_recaptcha( $form ) {
|
591 |
+
if ( $form['captcha'] ): ?>
|
592 |
+
<div class="happyforms-form__part happyforms-part happyforms-part--recaptcha">
|
593 |
+
<div class="happyforms-part-wrap">
|
594 |
+
<div class="g-recaptcha" data-sitekey="<?php echo $form['captcha_site_key']; ?>"></div>
|
595 |
+
</div>
|
596 |
+
</div>
|
597 |
+
<?php endif;
|
598 |
+
}
|
599 |
+
|
600 |
+
endif;
|
inc/helpers/helper-misc.php
CHANGED
@@ -484,4 +484,32 @@ function happyforms_unread_messages_badge() {
|
|
484 |
return $badge;
|
485 |
}
|
486 |
|
487 |
-
endif;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
484 |
return $badge;
|
485 |
}
|
486 |
|
487 |
+
endif;
|
488 |
+
|
489 |
+
if ( ! function_exists( 'happyforms_is_preview' ) ):
|
490 |
+
/**
|
491 |
+
* Returns whether or not we're previewing a HappyForm.
|
492 |
+
*
|
493 |
+
* @since 1.3
|
494 |
+
*
|
495 |
+
* @return void
|
496 |
+
*/
|
497 |
+
function happyforms_is_preview() {
|
498 |
+
$post_type = happyforms_get_form_controller()->post_type;
|
499 |
+
$is_happyform = get_post_type() === $post_type;
|
500 |
+
$happyform_parameter = isset( $_POST['happyforms'] );
|
501 |
+
|
502 |
+
// Preview frame
|
503 |
+
if ( $is_happyform && is_customize_preview() ) {
|
504 |
+
return true;
|
505 |
+
}
|
506 |
+
|
507 |
+
// Ajax calls
|
508 |
+
if ( defined( 'DOING_AJAX' ) && DOING_AJAX && $happyform_parameter ) {
|
509 |
+
return true;
|
510 |
+
}
|
511 |
+
|
512 |
+
return false;
|
513 |
+
}
|
514 |
+
|
515 |
+
endif;
|
inc/helpers/helper-styles.php
ADDED
@@ -0,0 +1,17 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
if ( ! function_exists( 'happyforms_parse_pixel_value' ) ):
|
4 |
+
/**
|
5 |
+
* Sanitize checkbox values.
|
6 |
+
*
|
7 |
+
* @since 1.0
|
8 |
+
*
|
9 |
+
* @param int|string $value The original value.
|
10 |
+
*
|
11 |
+
* @return int|string 1 if value was 1, or empty string.
|
12 |
+
*/
|
13 |
+
function happyforms_parse_pixel_value( $value ) {
|
14 |
+
return is_numeric( $value ) ? "{$value}px" : $value;
|
15 |
+
}
|
16 |
+
|
17 |
+
endif;
|
inc/templates/admin-form-modal.php
ADDED
@@ -0,0 +1,49 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div id="happyforms-modal">
|
2 |
+
<div>
|
3 |
+
<select class="happyforms-dialog__select" id="happyforms-dialog-select">
|
4 |
+
<?php $forms = $this->get_form_data_array(); ?>
|
5 |
+
<option value=""><?php _e( 'Choose a form', 'happyforms' ); ?></option>
|
6 |
+
<?php foreach ( $forms as $form ) : ?>
|
7 |
+
<option value="<?php echo $form['id']; ?>"><?php echo $form['title']; ?></option>
|
8 |
+
<?php endforeach; ?>
|
9 |
+
</select>
|
10 |
+
</div>
|
11 |
+
|
12 |
+
<button class="button-primary happyforms-dialog__button"><?php _e( 'Insert', 'happyforms' ); ?></button>
|
13 |
+
</div>
|
14 |
+
|
15 |
+
<script>
|
16 |
+
jQuery(function($) {
|
17 |
+
$('.happyforms-editor-button').on('click', function() {
|
18 |
+
$('#happyforms-modal').dialog({
|
19 |
+
title: '<?php _e( 'Insert HappyForm', 'happyforms' ); ?>',
|
20 |
+
dialogClass: 'happyforms-dialog wp-dialog',
|
21 |
+
draggable: false,
|
22 |
+
width: 'auto',
|
23 |
+
modal: true,
|
24 |
+
resizable: false,
|
25 |
+
closeOnEscape: true,
|
26 |
+
position: {
|
27 |
+
my: 'center',
|
28 |
+
at: 'center',
|
29 |
+
of: $(window)
|
30 |
+
},
|
31 |
+
open: function() {
|
32 |
+
$('.happyforms-dialog__button').on('click', function(e) {
|
33 |
+
e.preventDefault();
|
34 |
+
e.stopImmediatePropagation();
|
35 |
+
|
36 |
+
var selectedForm = $('#happyforms-dialog-select').val();
|
37 |
+
if (!selectedForm) {
|
38 |
+
return false;
|
39 |
+
}
|
40 |
+
var shortcode = '[happyforms id="' + selectedForm + '" /]';
|
41 |
+
window.parent.send_to_editor(shortcode);
|
42 |
+
$('#happyforms-modal').dialog('close');
|
43 |
+
$('#happyforms-dialog-select').val('');
|
44 |
+
});
|
45 |
+
}
|
46 |
+
});
|
47 |
+
});
|
48 |
+
});
|
49 |
+
</script>
|
inc/templates/customize-form-build.php
CHANGED
@@ -9,7 +9,7 @@
|
|
9 |
<label class="customize-control-title">
|
10 |
<?php _e( 'Form Builder', 'happyforms' ); ?>
|
11 |
<span class="happyforms-parts-expand-collapse-wrap">
|
12 |
-
<a href="#" class="expand-collapse-all collapse" data-collapse-text="<?php _e( 'Collapse all', 'happyforms' ); ?>" data-expand-text="<?php _e( 'Expand all', 'happyforms' ); ?>"
|
13 |
</span>
|
14 |
</label>
|
15 |
<div class="happyforms-parts-placeholder">
|
9 |
<label class="customize-control-title">
|
10 |
<?php _e( 'Form Builder', 'happyforms' ); ?>
|
11 |
<span class="happyforms-parts-expand-collapse-wrap">
|
12 |
+
<a href="#" class="expand-collapse-all <%= ( parts.length > 0 ) ? 'collapse' : 'expand' %>" data-collapse-text="<?php _e( 'Collapse all', 'happyforms' ); ?>" data-expand-text="<?php _e( 'Expand all', 'happyforms' ); ?>"><%= ( parts.length > 0 ) ? '<?php _e( 'Expand all', 'happyforms' ); ?>' : '<?php _e( 'Collapse all', 'happyforms' ); ?>' %></a>
|
13 |
</span>
|
14 |
</label>
|
15 |
<div class="happyforms-parts-placeholder">
|
inc/templates/customize-form-part-footer.php
CHANGED
@@ -1,6 +1,7 @@
|
|
1 |
</div>
|
2 |
<div class="happyforms-widget-actions">
|
3 |
<a href="#" class="happyforms-form-part-remove"><?php _e( 'Delete', 'happyforms' ); ?></a> |
|
|
|
4 |
<a href="#" class="happyforms-form-part-close"><?php _e( 'Close', 'happyforms' ); ?></a>
|
5 |
</div>
|
6 |
</div>
|
1 |
</div>
|
2 |
<div class="happyforms-widget-actions">
|
3 |
<a href="#" class="happyforms-form-part-remove"><?php _e( 'Delete', 'happyforms' ); ?></a> |
|
4 |
+
<a href="#" class="happyforms-form-part-duplicate"><?php _e( 'Duplicate', 'happyforms' ); ?></a> |
|
5 |
<a href="#" class="happyforms-form-part-close"><?php _e( 'Close', 'happyforms' ); ?></a>
|
6 |
</div>
|
7 |
</div>
|
inc/templates/customize-form-part-header.php
CHANGED
@@ -6,7 +6,7 @@
|
|
6 |
</button>
|
7 |
</div>
|
8 |
<div class="happyforms-widget-title">
|
9 |
-
<h3><%= settings.label %></h3>
|
10 |
</div>
|
11 |
</div>
|
12 |
<div class="happyforms-widget-content">
|
6 |
</button>
|
7 |
</div>
|
8 |
<div class="happyforms-widget-title">
|
9 |
+
<h3><%= settings.label %><span class="in-widget-title"<% if (!instance.label) { %> style="display: none"<% } %>>: <span><%= (instance.label) ? instance.label : '' %></span></span></h3>
|
10 |
</div>
|
11 |
</div>
|
12 |
<div class="happyforms-widget-content">
|
inc/templates/customize-form-setup.php
CHANGED
@@ -34,6 +34,22 @@
|
|
34 |
<label for="happyforms-spam-prevention"><?php _e( 'Spam prevention', 'happyforms' ); ?> <i class="fa fa-question-circle" aria-hidden="true" data-pointer="spam_prevention"></i></label>
|
35 |
</div>
|
36 |
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
37 |
<div class="customize-control customize-control-checkbox">
|
38 |
<div class="customize-inside-control-row" data-pointer-target>
|
39 |
<input type="checkbox" value="1" id="happyforms-save-entries" <% if ( save_entries ) { %>checked="checked"<% } %> data-attribute="save_entries" />
|
@@ -60,6 +76,9 @@
|
|
60 |
<script type="text/template" id="happyforms-pointer-spam_prevention">
|
61 |
<?php _e( 'Protect your form against bots by using HoneyPot security.', 'happyforms' ); ?>
|
62 |
</script>
|
|
|
|
|
|
|
63 |
<script type="text/template" id="happyforms-pointer-save_entries">
|
64 |
<?php _e( 'Keep recipients responses stored in your WordPress database.', 'happyforms' ); ?>
|
65 |
</script>
|
34 |
<label for="happyforms-spam-prevention"><?php _e( 'Spam prevention', 'happyforms' ); ?> <i class="fa fa-question-circle" aria-hidden="true" data-pointer="spam_prevention"></i></label>
|
35 |
</div>
|
36 |
</div>
|
37 |
+
<div class="customize-control customize-control-checkbox">
|
38 |
+
<div class="customize-inside-control-row" data-pointer-target>
|
39 |
+
<input type="checkbox" id="happyforms-use-captcha" value="1" <% if ( captcha ) { %>checked="checked"<% } %> data-attribute="captcha" />
|
40 |
+
<label for="happyforms-use-captcha"><?php _e( 'Use', 'happyforms' ); ?> <a href="https://www.google.com/recaptcha" target="_blank"><?php _e( 'Google ReCaptcha', 'happyforms' ); ?></a> <i class="fa fa-question-circle" aria-hidden="true" data-pointer="captcha"></i></label>
|
41 |
+
</div>
|
42 |
+
<div id="happyforms-captcha-settings" <% if ( captcha ) { %>style="display: block;"<% } %>>
|
43 |
+
<p>
|
44 |
+
<label for="" class="customize-control-title"><?php _e( 'ReCaptcha site key', 'happyforms' ); ?></label>
|
45 |
+
<input type="text" value="<%= captcha_site_key %>" data-attribute="captcha_site_key" />
|
46 |
+
</p>
|
47 |
+
<p>
|
48 |
+
<label for="" class="customize-control-title"><?php _e( 'ReCaptcha secret key', 'happyforms' ); ?></label>
|
49 |
+
<input type="text" value="<%= captcha_secret_key %>" data-attribute="captcha_secret_key" />
|
50 |
+
</p>
|
51 |
+
</div>
|
52 |
+
</div>
|
53 |
<div class="customize-control customize-control-checkbox">
|
54 |
<div class="customize-inside-control-row" data-pointer-target>
|
55 |
<input type="checkbox" value="1" id="happyforms-save-entries" <% if ( save_entries ) { %>checked="checked"<% } %> data-attribute="save_entries" />
|
76 |
<script type="text/template" id="happyforms-pointer-spam_prevention">
|
77 |
<?php _e( 'Protect your form against bots by using HoneyPot security.', 'happyforms' ); ?>
|
78 |
</script>
|
79 |
+
<script type="text/template" id="happyforms-pointer-captcha">
|
80 |
+
<?php _e( 'Protect your form against bots using your Google ReCaptcha credentials.', 'happyforms' ); ?>
|
81 |
+
</script>
|
82 |
<script type="text/template" id="happyforms-pointer-save_entries">
|
83 |
<?php _e( 'Keep recipients responses stored in your WordPress database.', 'happyforms' ); ?>
|
84 |
</script>
|
inc/templates/customize-form-style.php
CHANGED
@@ -1,6 +1,6 @@
|
|
1 |
<?php
|
2 |
-
$
|
3 |
-
$
|
4 |
?>
|
5 |
|
6 |
<script type="text/template" id="happyforms-form-style-template">
|
@@ -8,19 +8,23 @@ $style_fields = $styles->get_styles();
|
|
8 |
<ul class="happyforms-form-widgets happyforms-style-controls">
|
9 |
<?php
|
10 |
$f = 0;
|
11 |
-
foreach ( $
|
12 |
-
$type = $
|
13 |
-
$
|
14 |
-
$
|
15 |
-
$
|
|
|
16 |
|
17 |
if ( 'divider' === $type ) : ?>
|
18 |
|
19 |
<?php if ( $f > 0 ): ?></ul></li><?php endif; ?>
|
20 |
|
21 |
-
<li class="customize-control control-section <?php echo $
|
22 |
<h3 class="accordion-section-title"><?php echo $label; ?></h3>
|
23 |
-
|
|
|
|
|
|
|
24 |
<li class="panel-meta customize-info accordion-section">
|
25 |
<button class="customize-panel-back" tabindex="0">
|
26 |
<span class="screen-reader-text"><?php _e( 'Back', 'happyforms' ); ?></span>
|
@@ -32,19 +36,19 @@ $style_fields = $styles->get_styles();
|
|
32 |
|
33 |
<?php elseif ( 'checkbox' === $type ) : ?>
|
34 |
|
35 |
-
<li class="customize-control <?php echo $
|
36 |
<div class="customize-control-content">
|
37 |
<label>
|
38 |
-
<input type="checkbox" name="<?php echo $name; ?>" id="<?php echo $name; ?>" value="
|
39 |
</label>
|
40 |
</div>
|
41 |
</li>
|
42 |
|
43 |
<?php elseif ( 'range' === $type ) : ?>
|
44 |
|
45 |
-
<li class="customize-control <?php echo $
|
46 |
<label class="customize-control-title" for="<?php echo $name; ?>"><?php echo $label; ?></label>
|
47 |
-
<input type="number" name="<?php echo $name; ?>" id="<?php echo $name; ?>" min="<?php echo $field[ 'min' ]; ?>" max="<?php echo $field[ 'max' ]; ?>" step="
|
48 |
<div class="customize-control-content">
|
49 |
<div class="happyforms-range-slider"></div>
|
50 |
</div>
|
@@ -52,7 +56,7 @@ $style_fields = $styles->get_styles();
|
|
52 |
|
53 |
<?php elseif ( 'buttonset' === $type ) : ?>
|
54 |
|
55 |
-
<li class="customize-control <?php echo $
|
56 |
<div class="customize-control-content">
|
57 |
<label class="customize-control-title" for="<?php echo $name; ?>"><?php echo $label; ?></label>
|
58 |
<div class="happyforms-buttonset-container">
|
@@ -68,7 +72,7 @@ $style_fields = $styles->get_styles();
|
|
68 |
|
69 |
<?php elseif ( 'color' === $type ) : ?>
|
70 |
|
71 |
-
<li class="customize-control <?php echo $
|
72 |
<label class="customize-control-title" for="<?php echo $name; ?>"><?php echo $label; ?></label>
|
73 |
<div class="customize-control-content">
|
74 |
<input type="text" name="<?php echo $name; ?>" id="<?php echo $name; ?>" class="happyforms-color-input" data-attribute="<?php echo $name; ?>" value="<%= <?php echo $name; ?> %>" data-default="<?php echo $field['default']; ?>">
|
@@ -77,16 +81,16 @@ $style_fields = $styles->get_styles();
|
|
77 |
|
78 |
<?php elseif ( 'text' === $type ) : ?>
|
79 |
|
80 |
-
<li class="customize-control <?php echo $
|
81 |
<label class="customize-control-title" for="<?php echo $name; ?>"><?php echo $label; ?></label>
|
82 |
<div class="customize-control-content">
|
83 |
<input type="text" name="<?php echo $name; ?>" id="<?php echo $name; ?>" data-attribute="<?php echo $name; ?>" value="<%= <?php echo $name; ?> %>">
|
84 |
</div>
|
85 |
</li>
|
86 |
|
87 |
-
<?php elseif ( '
|
88 |
|
89 |
-
<li class="customize-control <?php echo $
|
90 |
<label class="customize-control-title" for="<?php echo $name; ?>"><?php echo $label; ?></label>
|
91 |
<div class="customize-control-content">
|
92 |
<select name="<?php echo $name; ?>" id="<?php echo $name; ?>" data-attribute="<?php echo $name; ?>" class="widefat">
|
@@ -98,6 +102,12 @@ $style_fields = $styles->get_styles();
|
|
98 |
</div>
|
99 |
</li>
|
100 |
|
|
|
|
|
|
|
|
|
|
|
|
|
101 |
<?php endif; ?>
|
102 |
<?php $f ++; endforeach; ?>
|
103 |
</ul></li>
|
1 |
<?php
|
2 |
+
$controller = happyforms_get_form_controller();
|
3 |
+
$controls = happyforms_get_styles()->get_controls();
|
4 |
?>
|
5 |
|
6 |
<script type="text/template" id="happyforms-form-style-template">
|
8 |
<ul class="happyforms-form-widgets happyforms-style-controls">
|
9 |
<?php
|
10 |
$f = 0;
|
11 |
+
foreach ( $controls as $control ) :
|
12 |
+
$type = $control['type'];
|
13 |
+
$label = $control['label'];
|
14 |
+
$class = esc_attr( "happyforms-{$type}-control" );
|
15 |
+
$name = isset( $control['field'] ) ? $control['field'] : '';
|
16 |
+
$field = ( '' !== $name ) ? $controller->get_field( $control['field'] ) : '';
|
17 |
|
18 |
if ( 'divider' === $type ) : ?>
|
19 |
|
20 |
<?php if ( $f > 0 ): ?></ul></li><?php endif; ?>
|
21 |
|
22 |
+
<li class="customize-control control-section <?php echo $class; ?>">
|
23 |
<h3 class="accordion-section-title"><?php echo $label; ?></h3>
|
24 |
+
</li>
|
25 |
+
|
26 |
+
<li class="happyforms-style-controls-group">
|
27 |
+
<ul>
|
28 |
<li class="panel-meta customize-info accordion-section">
|
29 |
<button class="customize-panel-back" tabindex="0">
|
30 |
<span class="screen-reader-text"><?php _e( 'Back', 'happyforms' ); ?></span>
|
36 |
|
37 |
<?php elseif ( 'checkbox' === $type ) : ?>
|
38 |
|
39 |
+
<li class="customize-control <?php echo $class; ?>" data-target="<?php echo esc_attr( $field['target'] ); ?>">
|
40 |
<div class="customize-control-content">
|
41 |
<label>
|
42 |
+
<input type="checkbox" name="<?php echo $name; ?>" id="<?php echo $name; ?>" value="<?php echo $field['value']; ?>" data-attribute="<?php echo $name; ?>" <% if (<?php echo $name; ?>) { %>checked="checked"<% } %>> <?php echo $label; ?>
|
43 |
</label>
|
44 |
</div>
|
45 |
</li>
|
46 |
|
47 |
<?php elseif ( 'range' === $type ) : ?>
|
48 |
|
49 |
+
<li class="customize-control <?php echo $class; ?>" data-target="<?php echo esc_attr( $field['target'] ); ?>" data-variable="<?php echo $field['variable']; ?>" data-unit="<?php echo $field['unit']; ?>">
|
50 |
<label class="customize-control-title" for="<?php echo $name; ?>"><?php echo $label; ?></label>
|
51 |
+
<input type="number" name="<?php echo $name; ?>" id="<?php echo $name; ?>" min="<?php echo $field[ 'min' ]; ?>" max="<?php echo $field[ 'max' ]; ?>" step="<?php echo $field[ 'step' ]; ?>" value="<%= <?php echo $name; ?> %>" data-attribute="<?php echo $name; ?>">
|
52 |
<div class="customize-control-content">
|
53 |
<div class="happyforms-range-slider"></div>
|
54 |
</div>
|
56 |
|
57 |
<?php elseif ( 'buttonset' === $type ) : ?>
|
58 |
|
59 |
+
<li class="customize-control <?php echo $class; ?>" data-target="<?php echo esc_attr( $field['target'] ); ?>" data-variable="<?php echo ( isset( $field['variable'] ) ) ? esc_attr( $field['variable'] ) : ''; ?>">
|
60 |
<div class="customize-control-content">
|
61 |
<label class="customize-control-title" for="<?php echo $name; ?>"><?php echo $label; ?></label>
|
62 |
<div class="happyforms-buttonset-container">
|
72 |
|
73 |
<?php elseif ( 'color' === $type ) : ?>
|
74 |
|
75 |
+
<li class="customize-control <?php echo $class; ?>" data-target="<?php echo esc_attr( $field['target'] ); ?>" data-variable="<?php echo $field['variable']; ?>">
|
76 |
<label class="customize-control-title" for="<?php echo $name; ?>"><?php echo $label; ?></label>
|
77 |
<div class="customize-control-content">
|
78 |
<input type="text" name="<?php echo $name; ?>" id="<?php echo $name; ?>" class="happyforms-color-input" data-attribute="<?php echo $name; ?>" value="<%= <?php echo $name; ?> %>" data-default="<?php echo $field['default']; ?>">
|
81 |
|
82 |
<?php elseif ( 'text' === $type ) : ?>
|
83 |
|
84 |
+
<li class="customize-control <?php echo $class; ?>" data-target="<?php echo esc_attr( $field['target'] ); ?>">
|
85 |
<label class="customize-control-title" for="<?php echo $name; ?>"><?php echo $label; ?></label>
|
86 |
<div class="customize-control-content">
|
87 |
<input type="text" name="<?php echo $name; ?>" id="<?php echo $name; ?>" data-attribute="<?php echo $name; ?>" value="<%= <?php echo $name; ?> %>">
|
88 |
</div>
|
89 |
</li>
|
90 |
|
91 |
+
<?php elseif ( 'select' === $type ) : ?>
|
92 |
|
93 |
+
<li class="customize-control <?php echo $class; ?>" data-target="<?php echo esc_attr( $field['target'] ); ?>">
|
94 |
<label class="customize-control-title" for="<?php echo $name; ?>"><?php echo $label; ?></label>
|
95 |
<div class="customize-control-content">
|
96 |
<select name="<?php echo $name; ?>" id="<?php echo $name; ?>" data-attribute="<?php echo $name; ?>" class="widefat">
|
102 |
</div>
|
103 |
</li>
|
104 |
|
105 |
+
<?php elseif ( 'heading' === $type ) : ?>
|
106 |
+
|
107 |
+
<li class="customize-control happyforms-customize-heading">
|
108 |
+
<h2><?php echo $label; ?></h2>
|
109 |
+
</li>
|
110 |
+
|
111 |
<?php endif; ?>
|
112 |
<?php $f ++; endforeach; ?>
|
113 |
</ul></li>
|
inc/templates/form-styles.css.php
ADDED
@@ -0,0 +1,15 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<!-- HappyForms CSS variables -->
|
2 |
+
<style>
|
3 |
+
<?php foreach( $forms as $form ): ?>
|
4 |
+
#happyforms-form-<?php echo esc_attr( $form['ID'] ); ?> {
|
5 |
+
<?php foreach( $css_vars as $key => $css_var ) {
|
6 |
+
$variable = $css_var['variable'];
|
7 |
+
$value = $form[$key];
|
8 |
+
$unit = isset( $css_var['unit'] ) ? $css_var['unit']: '';
|
9 |
+
|
10 |
+
echo "{$variable}: {$value}{$unit};\n";
|
11 |
+
} ?>
|
12 |
+
}
|
13 |
+
<?php endforeach; ?>
|
14 |
+
</style>
|
15 |
+
<!-- End of HappyForms CSS variables -->
|
inc/templates/parts/customize-address.php
ADDED
@@ -0,0 +1,71 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<script type="text/template" id="happyforms-customize-address-template">
|
2 |
+
<?php include( happyforms_get_include_folder() . '/templates/customize-form-part-header.php' ); ?>
|
3 |
+
<p>
|
4 |
+
<label for="<%= instance.id %>_title"><?php _e( 'Title', 'happyforms' ); ?></label>
|
5 |
+
<input type="text" id="<%= instance.id %>_title" class="widefat title" value="<%= instance.label %>" data-bind="label" />
|
6 |
+
</p>
|
7 |
+
<p>
|
8 |
+
<label for="<%= instance.id %>_label_placement"><?php _e( 'Title placement', 'happyforms' ); ?></label>
|
9 |
+
<select id="<%= instance.id %>_label_placement" data-bind="label_placement">
|
10 |
+
<option value="above"<%= (instance.label_placement == 'above') ? ' selected' : '' %>><?php _e( 'Above', 'happyforms' ); ?></option>
|
11 |
+
<option value="left"<%= (instance.label_placement == 'left') ? ' selected' : '' %>><?php _e( 'Left', 'happyforms' ); ?></option>
|
12 |
+
<option value="below"<%= (instance.label_placement == 'below') ? ' selected' : '' %>><?php _e( 'Below', 'happyforms' ); ?></option>
|
13 |
+
<option value="inside"<%= (instance.label_placement == 'inside') ? ' selected' : '' %>><?php _e( 'Inside', 'happyforms' ); ?></option>
|
14 |
+
<option value="as_placeholder"<%= (instance.label_placement == 'as_placeholder') ? ' selected' : '' %>><?php _e( 'Display as placeholder', 'happyforms' ); ?></option>
|
15 |
+
</select>
|
16 |
+
</p>
|
17 |
+
<p class="label_placement-options" style="display: none">
|
18 |
+
<label>
|
19 |
+
<input type="checkbox" class="checkbox apply-all-check" value="" data-apply-to="label_placement" /> <?php _e( 'Apply to all parts', 'happyforms' ); ?>
|
20 |
+
</label>
|
21 |
+
</p>
|
22 |
+
<p>
|
23 |
+
<label for="<%= instance.id %>_description"><?php _e( 'Description', 'happyforms' ); ?></label>
|
24 |
+
<textarea id="<%= instance.id %>_description" data-bind="description"><%= instance.description %></textarea>
|
25 |
+
</p>
|
26 |
+
<p class="tooltip-description-wrap" style="display: <%= (instance.description != '') ? 'block' : 'none' %>">
|
27 |
+
<label>
|
28 |
+
<input type="checkbox" class="checkbox" value="1" <% if ( instance.tooltip_description ) { %>checked="checked"<% } %> data-bind="tooltip_description" /> <?php _e( 'Show description in a tooltip', 'happyforms' ); ?>
|
29 |
+
</label>
|
30 |
+
</p>
|
31 |
+
<p>
|
32 |
+
<label for="<%= instance.id %>_placeholder"><?php _e( 'Placeholder', 'happyforms' ); ?></label>
|
33 |
+
<input type="text" id="<%= instance.id %>_placeholder" class="widefat title" value="<%= instance.placeholder %>" data-bind="placeholder" />
|
34 |
+
</p>
|
35 |
+
<p>
|
36 |
+
<label for="<%= instance.id %>_width"><?php _e( 'Width', 'happyforms' ); ?></label>
|
37 |
+
<select id="<%= instance.id %>_width" name="width" data-bind="width" class="widefat">
|
38 |
+
<option value="full"<%= (instance.width == 'full') ? ' selected' : '' %>><?php _e( 'Full', 'happyforms' ); ?></option>
|
39 |
+
<option value="half"<%= (instance.width == 'half') ? ' selected' : '' %>><?php _e( 'Half', 'happyforms' ); ?></option>
|
40 |
+
<option value="third"<%= (instance.width == 'third') ? ' selected' : '' %>><?php _e( 'One third', 'happyforms' ); ?></option>
|
41 |
+
</select>
|
42 |
+
</p>
|
43 |
+
<p>
|
44 |
+
<label for="<%= instance.id %>_mode"><?php _e( 'Mode', 'happyforms' ); ?></label>
|
45 |
+
<select id="<%= instance.id %>_mode" name="mode" data-bind="mode" class="widefat">
|
46 |
+
<option value="simple"<%= (instance.mode == 'simple') ? ' selected' : '' %>><?php _e( 'Full', 'happyforms' ); ?></option>
|
47 |
+
<option value="autocomplete"<%= (instance.mode == 'autocomplete') ? ' selected' : '' %>><?php _e( 'Full with autocomplete', 'happyforms' ); ?></option>
|
48 |
+
<option value="country-city"<%= (instance.mode == 'country-city') ? ' selected' : '' %>><?php _e( 'Country and city', 'happyforms' ); ?></option>
|
49 |
+
<option value="country"<%= (instance.mode == 'country') ? ' selected' : '' %>><?php _e( 'Country only', 'happyforms' ); ?></option>
|
50 |
+
</select>
|
51 |
+
</p>
|
52 |
+
<div class="address-apikey">
|
53 |
+
<p>
|
54 |
+
<label for="<%= instance.id %>_apikey"><?php _e( 'Google API Key', 'happyforms' ); ?></label>
|
55 |
+
<input type="text" id="<%= instance.id %>_apikey class="widefat title" value="<%= instance.apikey %>" data-bind="apikey" />
|
56 |
+
</p>
|
57 |
+
<p class="description">
|
58 |
+
Autocomplete mode uses the Google Places API to populate results. <a href="https://developers.google.com/places/web-service/get-api-key" target="_blank"><?php _e( 'Get a key for Google Places API Web Service', 'happyforms' ); ?></a>
|
59 |
+
</p>
|
60 |
+
</div>
|
61 |
+
<p>
|
62 |
+
<label for="<%= instance.id %>_css_class"><?php _e( 'Custom CSS class', 'happyforms' ); ?></label>
|
63 |
+
<input type="text" id="<%= instance.id %>_css_class" class="widefat title" value="<%= instance.css_class %>" data-bind="css_class" />
|
64 |
+
</p>
|
65 |
+
<p>
|
66 |
+
<label>
|
67 |
+
<input type="checkbox" class="checkbox" value="1" <% if ( instance.required ) { %>checked="checked"<% } %> data-bind="required" /> <?php _e( 'This is a required field', 'happyforms' ); ?>
|
68 |
+
</label>
|
69 |
+
</p>
|
70 |
+
<?php include( happyforms_get_include_folder() . '/templates/customize-form-part-footer.php' ); ?>
|
71 |
+
</script>
|
inc/templates/parts/customize-checkbox.php
ADDED
@@ -0,0 +1,81 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<script type="text/template" id="customize-happyforms-checkbox-template">
|
2 |
+
<?php include( happyforms_get_include_folder() . '/templates/customize-form-part-header.php' ); ?>
|
3 |
+
<p>
|
4 |
+
<label for="<%= instance.id %>_title"><?php _e( 'Title', 'happyforms' ); ?></label>
|
5 |
+
<input type="text" id="<%= instance.id %>_title" class="widefat title" value="<%= instance.label %>" data-bind="label" />
|
6 |
+
</p>
|
7 |
+
<p>
|
8 |
+
<label for="<%= instance.id %>_label_placement"><?php _e( 'Title placement', 'happyforms' ); ?></label>
|
9 |
+
<select id="<%= instance.id %>_label_placement" data-bind="label_placement">
|
10 |
+
<option value="above"<%= (instance.label_placement == 'above') ? ' selected' : '' %>><?php _e( 'Above', 'happyforms' ); ?></option>
|
11 |
+
<option value="left"<%= (instance.label_placement == 'left') ? ' selected' : '' %>><?php _e( 'Left', 'happyforms' ); ?></option>
|
12 |
+
<option value="below"<%= (instance.label_placement == 'below') ? ' selected' : '' %>><?php _e( 'Below', 'happyforms' ); ?></option>
|
13 |
+
</select>
|
14 |
+
</p>
|
15 |
+
<p class="label_placement-options" style="display: none">
|
16 |
+
<label>
|
17 |
+
<input type="checkbox" class="checkbox apply-all-check" value="" /> <?php _e( 'Apply to all parts', 'happyforms' ); ?>
|
18 |
+
</label>
|
19 |
+
</p>
|
20 |
+
<p>
|
21 |
+
<label for="<%= instance.id %>_description"><?php _e( 'Description', 'happyforms' ); ?></label>
|
22 |
+
<textarea id="<%= instance.id %>_description" data-bind="description"><%= instance.description %></textarea>
|
23 |
+
</p>
|
24 |
+
<p class="tooltip-description-wrap" style="display: <%= (instance.description != '') ? 'block' : 'none' %>">
|
25 |
+
<label>
|
26 |
+
<input type="checkbox" class="checkbox" value="1" data-bind="tooltip_description" <% if ( instance.tooltip_description ) { %>checked="checked"<% } %> /> <?php _e( 'Show description in a tooltip', 'happyforms' ); ?>
|
27 |
+
</label>
|
28 |
+
</p>
|
29 |
+
<p>
|
30 |
+
<label for="<%= instance.id %>_display_type"><?php _e( 'Display options', 'happyforms' ); ?></label>
|
31 |
+
<select id="<%= instance.id %>_display_type" name="display_type" data-bind="display_type" class="widefat">
|
32 |
+
<option value="inline"<%= (instance.display_type == 'inline') ? ' selected' : '' %>><?php _e( 'Horizontal', 'happyforms' ); ?></option>
|
33 |
+
<option value="block"<%= (instance.display_type == 'block') ? ' selected' : '' %>><?php _e( 'Vertical', 'happyforms' ); ?></option>
|
34 |
+
</select>
|
35 |
+
</p>
|
36 |
+
<p>
|
37 |
+
<label for="<%= instance.id %>_width"><?php _e( 'Width', 'happyforms' ); ?></label>
|
38 |
+
<select id="<%= instance.id %>_width" name="width" data-bind="width" class="widefat">
|
39 |
+
<option value="full"<%= (instance.width == 'full') ? ' selected' : '' %>><?php _e( 'Full', 'happyforms' ); ?></option>
|
40 |
+
<option value="half"<%= (instance.width == 'half') ? ' selected' : '' %>><?php _e( 'Half', 'happyforms' ); ?></option>
|
41 |
+
<option value="third"<%= (instance.width == 'third') ? ' selected' : '' %>><?php _e( 'One third', 'happyforms' ); ?></option>
|
42 |
+
</select>
|
43 |
+
</p>
|
44 |
+
<p class="width-options" style="display: none">
|
45 |
+
<label>
|
46 |
+
<input type="checkbox" class="checkbox apply-all-check" value="" /> <?php _e( 'Apply to all parts', 'happyforms' ); ?>
|
47 |
+
</label>
|
48 |
+
</p>
|
49 |
+
<p>
|
50 |
+
<label for="<%= instance.id %>_css_class"><?php _e( 'Custom CSS class', 'happyforms' ); ?></label>
|
51 |
+
<input type="text" id="<%= instance.id %>_css_class" class="widefat title" value="<%= instance.css_class %>" data-bind="css_class" />
|
52 |
+
</p>
|
53 |
+
<p>
|
54 |
+
<label>
|
55 |
+
<input type="checkbox" class="checkbox" value="1" <% if ( instance.required ) { %>checked="checked"<% } %> data-bind="required" /> <?php _e( 'This is a required field', 'happyforms' ); ?>
|
56 |
+
</label>
|
57 |
+
</p>
|
58 |
+
<div class="options">
|
59 |
+
<ul></ul>
|
60 |
+
<h3><?php _e( 'Options', 'happyforms' ); ?></h3>
|
61 |
+
<p class="no-options"><?php _e( 'No options added yet. Add one by clicking the <i>Add option</i> link below.', 'happyforms' ); ?></p>
|
62 |
+
</div>
|
63 |
+
<p class="links">
|
64 |
+
<a href="#" class="add-option"><?php _e( 'Add option', 'happyforms' ); ?></a>
|
65 |
+
</p>
|
66 |
+
<?php include( happyforms_get_include_folder() . '/templates/customize-form-part-footer.php' ); ?>
|
67 |
+
</script>
|
68 |
+
<script type="text/template" id="customize-happyforms-checkbox-item-template">
|
69 |
+
<li class="happyforms-part-widget happyforms-part-widget--sub" data-item-id="<%= item.id %>">
|
70 |
+
<label>
|
71 |
+
<?php _e( 'Label', 'happyforms' ); ?>
|
72 |
+
<input type="text" class="widefat" name="label" value="<%= item.label %>">
|
73 |
+
</label>
|
74 |
+
<label>
|
75 |
+
<input type="checkbox" name="is_default" value="1" <% if (item.is_default == 1) { %> checked="checked"<% } %>> <?php _e( 'Checked by default', 'happyforms' ); ?>
|
76 |
+
</label>
|
77 |
+
<div class="option-actions">
|
78 |
+
<a href="#" class="delete-option"><?php _e( 'Delete', 'happyforms' ); ?></a>
|
79 |
+
</div>
|
80 |
+
</li>
|
81 |
+
</script>
|
inc/templates/parts/customize-date.php
ADDED
@@ -0,0 +1,67 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<script type="text/template" id="happyforms-customize-date-template">
|
2 |
+
<?php include( happyforms_get_include_folder() . '/templates/customize-form-part-header.php' ); ?>
|
3 |
+
<p>
|
4 |
+
<label for="<%= instance.id %>_title"><?php _e( 'Title', 'happyforms' ); ?></label>
|
5 |
+
<input type="text" id="<%= instance.id %>_title" class="widefat title" value="<%= instance.label %>" data-bind="label" />
|
6 |
+
</p>
|
7 |
+
<p>
|
8 |
+
<label for="<%= instance.id %>_label_placement"><?php _e( 'Title placement', 'happyforms' ); ?></label>
|
9 |
+
<select id="<%= instance.id %>_label_placement" data-bind="label_placement">
|
10 |
+
<option value="above"<%= (instance.label_placement == 'above') ? ' selected' : '' %>><?php _e( 'Above', 'happyforms' ); ?></option>
|
11 |
+
<option value="left"<%= (instance.label_placement == 'left') ? ' selected' : '' %>><?php _e( 'Left', 'happyforms' ); ?></option>
|
12 |
+
<option value="below"<%= (instance.label_placement == 'below') ? ' selected' : '' %>><?php _e( 'Below', 'happyforms' ); ?></option>
|
13 |
+
</select>
|
14 |
+
</p>
|
15 |
+
<p class="label_placement-options" style="display: none">
|
16 |
+
<label>
|
17 |
+
<input type="checkbox" class="checkbox apply-all-check" value="" data-apply-to="label_placement" /> <?php _e( 'Apply to all parts', 'happyforms' ); ?>
|
18 |
+
</label>
|
19 |
+
</p>
|
20 |
+
<p>
|
21 |
+
<label for="<%= instance.id %>_description"><?php _e( 'Description', 'happyforms' ); ?></label>
|
22 |
+
<textarea id="<%= instance.id %>_description" data-bind="description"><%= instance.description %></textarea>
|
23 |
+
</p>
|
24 |
+
<p class="tooltip-description-wrap" style="display: <%= (instance.description != '') ? 'block' : 'none' %>">
|
25 |
+
<label>
|
26 |
+
<input type="checkbox" class="checkbox" value="1" <% if ( instance.tooltip_description ) { %>checked="checked"<% } %> data-bind="tooltip_description" /> <?php _e( 'Show description in a tooltip', 'happyforms' ); ?>
|
27 |
+
</label>
|
28 |
+
</p>
|
29 |
+
<p>
|
30 |
+
<label for="<%= instance.id %>_date_type"><?php _e( 'Show', 'happyforms' ); ?></label>
|
31 |
+
<select id="<%= instance.id %>_date_type" name="date_type" data-bind="date_type" class="widefat">
|
32 |
+
<option value="date"<%= (instance.date_type == 'date') ? ' selected' : '' %>><?php _e( 'Date', 'happyforms' ); ?></option>
|
33 |
+
<option value="datetime"<%= (instance.date_type == 'datetime') ? ' selected' : '' %>><?php _e( 'Date & Time', 'happyforms' ); ?></option>
|
34 |
+
<option value="time"<%= (instance.date_type == 'time') ? ' selected' : '' %>><?php _e( 'Time', 'happyforms' ); ?></option>
|
35 |
+
</select>
|
36 |
+
</p>
|
37 |
+
<p class="time-options"<%= (instance.date_type == 'date') ? ' style="display: none"' : '' %>>
|
38 |
+
<label for="<%= instance.id %>_time_format"><?php _e( 'Time format', 'happyforms' ); ?></label>
|
39 |
+
<select id="<%= instance.id %>_time_format" name="time_format" data-bind="time_format" class="widefat">
|
40 |
+
<option value="12"<%= (instance.time_format == '12') ? ' selected' : '' %>><?php _e( '12h', 'happyforms' ); ?></option>
|
41 |
+
<option value="24"<%= (instance.time_format == '24') ? ' selected' : '' %>><?php _e( '24h', 'happyforms' ); ?></option>
|
42 |
+
</select>
|
43 |
+
</p>
|
44 |
+
<p>
|
45 |
+
<label for="<%= instance.id %>_width"><?php _e( 'Width', 'happyforms' ); ?></label>
|
46 |
+
<select id="<%= instance.id %>_width" name="width" data-bind="width" class="widefat">
|
47 |
+
<option value="full"<%= (instance.width == 'full') ? ' selected' : '' %>><?php _e( 'Full', 'happyforms' ); ?></option>
|
48 |
+
<option value="half"<%= (instance.width == 'half') ? ' selected' : '' %>><?php _e( 'Half', 'happyforms' ); ?></option>
|
49 |
+
<option value="third"<%= (instance.width == 'third') ? ' selected' : '' %>><?php _e( 'One third', 'happyforms' ); ?></option>
|
50 |
+
</select>
|
51 |
+
</p>
|
52 |
+
<p class="width-options" style="display: none">
|
53 |
+
<label>
|
54 |
+
<input type="checkbox" class="checkbox apply-all-check" value="" data-apply-to="width" /> <?php _e( 'Apply to all parts', 'happyforms' ); ?>
|
55 |
+
</label>
|
56 |
+
</p>
|
57 |
+
<p>
|
58 |
+
<label for="<%= instance.id %>_css_class"><?php _e( 'Custom CSS class', 'happyforms' ); ?></label>
|
59 |
+
<input type="text" id="<%= instance.id %>_css_class" class="widefat title" value="<%= instance.css_class %>" data-bind="css_class" />
|
60 |
+
</p>
|
61 |
+
<p>
|
62 |
+
<label>
|
63 |
+
<input type="checkbox" class="checkbox" value="1" <% if ( instance.required ) { %>checked="checked"<% } %> data-bind="required" /> <?php _e( 'This is a required field', 'happyforms' ); ?>
|
64 |
+
</label>
|
65 |
+
</p>
|
66 |
+
<?php include( happyforms_get_include_folder() . '/templates/customize-form-part-footer.php' ); ?>
|
67 |
+
</script>
|
inc/templates/parts/customize-email.php
ADDED
@@ -0,0 +1,67 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<script type="text/template" id="customize-happyforms-email-template">
|
2 |
+
<?php include( happyforms_get_include_folder() . '/templates/customize-form-part-header.php' ); ?>
|
3 |
+
<p>
|
4 |
+
<label for="<%= instance.id %>_title"><?php _e( 'Title', 'happyforms' ); ?></label>
|
5 |
+
<input type="text" id="<%= instance.id %>_title" class="widefat title" value="<%= instance.label %>" data-bind="label" />
|
6 |
+
</p>
|
7 |
+
<p>
|
8 |
+
<label for="<%= instance.id %>_label_placement"><?php _e( 'Title placement', 'happyforms' ); ?></label>
|
9 |
+
<select id="<%= instance.id %>_label_placement" data-bind="label_placement">
|
10 |
+
<option value="above"<%= (instance.label_placement == 'above') ? ' selected' : '' %>><?php _e( 'Above', 'happyforms' ); ?></option>
|
11 |
+
<option value="left"<%= (instance.label_placement == 'left') ? ' selected' : '' %>><?php _e( 'Left', 'happyforms' ); ?></option>
|
12 |
+
<option value="below"<%= (instance.label_placement == 'below') ? ' selected' : '' %>><?php _e( 'Below', 'happyforms' ); ?></option>
|
13 |
+
<option value="inside"<%= (instance.label_placement == 'inside') ? ' selected' : '' %>><?php _e( 'Inside input', 'happyforms' ); ?></option>
|
14 |
+
<option value="as_placeholder"<%= (instance.label_placement == 'as_placeholder') ? ' selected' : '' %>><?php _e( 'Display as placeholder', 'happyforms' ); ?></option>
|
15 |
+
</select>
|
16 |
+
</p>
|
17 |
+
<p class="label_placement-options" style="display: none">
|
18 |
+
<label>
|
19 |
+
<input type="checkbox" class="checkbox apply-all-check" value="" data-apply-to="label_placement" /> <?php _e( 'Apply to all parts', 'happyforms' ); ?>
|
20 |
+
</label>
|
21 |
+
</p>
|
22 |
+
<p>
|
23 |
+
<label for="<%= instance.id %>_description"><?php _e( 'Description', 'happyforms' ); ?></label>
|
24 |
+
<textarea id="<%= instance.id %>_description" data-bind="description"><%= instance.description %></textarea>
|
25 |
+
</p>
|
26 |
+
<p class="tooltip-description-wrap" style="display: <%= (instance.description != '') ? 'block' : 'none' %>">
|
27 |
+
<label>
|
28 |
+
<input type="checkbox" class="checkbox" value="1" <% if ( instance.tooltip_description ) { %>checked="checked"<% } %> data-bind="tooltip_description" /> <?php _e( 'Show description in a tooltip', 'happyforms' ); ?>
|
29 |
+
</label>
|
30 |
+
</p>
|
31 |
+
<p>
|
32 |
+
<label for="<%= instance.id %>_placeholder"><?php _e( 'Placeholder', 'happyforms' ); ?></label>
|
33 |
+
<input type="text" id="<%= instance.id %>_placeholder" class="widefat title" value="<%= instance.placeholder %>" data-bind="placeholder" />
|
34 |
+
</p>
|
35 |
+
<p>
|
36 |
+
<label for="<%= instance.id %>_width"><?php _e( 'Width', 'happyforms' ); ?></label>
|
37 |
+
<select id="<%= instance.id %>_width" name="width" data-bind="width" class="widefat">
|
38 |
+
<option value="full"<%= (instance.width == 'full') ? ' selected' : '' %>><?php _e( 'Full', 'happyforms' ); ?></option>
|
39 |
+
<option value="half"<%= (instance.width == 'half') ? ' selected' : '' %>><?php _e( 'Half', 'happyforms' ); ?></option>
|
40 |
+
<option value="third"<%= (instance.width == 'third') ? ' selected' : '' %>><?php _e( 'One third', 'happyforms' ); ?></option>
|
41 |
+
</select>
|
42 |
+
</p>
|
43 |
+
<p class="width-options" style="display: none">
|
44 |
+
<label>
|
45 |
+
<input type="checkbox" class="checkbox apply-all-check" value="" data-apply-to="width" /> <?php _e( 'Apply to all parts', 'happyforms' ); ?>
|
46 |
+
</label>
|
47 |
+
</p>
|
48 |
+
<p>
|
49 |
+
<label for="<%= instance.id %>_css_class"><?php _e( 'Custom CSS class', 'happyforms' ); ?></label>
|
50 |
+
<input type="text" id="<%= instance.id %>_css_class" class="widefat title" value="<%= instance.css_class %>" data-bind="css_class" />
|
51 |
+
</p>
|
52 |
+
<p>
|
53 |
+
<label>
|
54 |
+
<input type="checkbox" class="checkbox confirmation-checkbox" value="1" <% if ( instance.confirmation_field ) { %>checked="checked"<% } %> data-bind="confirmation_field" /> <?php _e( 'Require confirmation of the value', 'happyforms' ); ?>
|
55 |
+
</label>
|
56 |
+
</p>
|
57 |
+
<p class="confirmation-field-setting" style="display: <%= (instance.confirmation_field == 1) ? 'block' : 'none' %>">
|
58 |
+
<label for="<%= instance.id %>_confirmation_field_label"><?php _e( 'Confirmation field title', 'happyforms' ); ?></label>
|
59 |
+
<input type="text" id="<%= instance.id %>_confirmation_field_label" class="widefat title" value="<%= instance.confirmation_field_label %>" data-bind="confirmation_field_label" />
|
60 |
+
</p>
|
61 |
+
<p>
|
62 |
+
<label>
|
63 |
+
<input type="checkbox" class="checkbox" value="1" <% if ( instance.required ) { %>checked="checked"<% } %> data-bind="required" /> <?php _e( 'This is a required field', 'happyforms' ); ?>
|
64 |
+
</label>
|
65 |
+
</p>
|
66 |
+
<?php include( happyforms_get_include_folder() . '/templates/customize-form-part-footer.php' ); ?>
|
67 |
+
</script>
|
inc/templates/parts/customize-legal.php
ADDED
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<script type="text/template" id="happyforms-customize-legal-template">
|
2 |
+
<?php include( happyforms_get_include_folder() . '/templates/customize-form-part-header.php' ); ?>
|
3 |
+
<p>
|
4 |
+
<label for="<%= instance.id %>_width"><?php _e( 'Width', 'happyforms' ); ?></label>
|
5 |
+
<select id="<%= instance.id %>_width" name="width" data-bind="width" class="widefat">
|
6 |
+
<option value="full"<%= (instance.width == 'full') ? ' selected' : '' %>><?php _e( 'Full', 'happyforms' ); ?></option>
|
7 |
+
<option value="half"<%= (instance.width == 'half') ? ' selected' : '' %>><?php _e( 'Half', 'happyforms' ); ?></option>
|
8 |
+
<option value="third"<%= (instance.width == 'third') ? ' selected' : '' %>><?php _e( 'One third', 'happyforms' ); ?></option>
|
9 |
+
</select>
|
10 |
+
</p>
|
11 |
+
<p>
|
12 |
+
<label for="<%= instance.id %>_legal_text"><?php _e( 'Legal text', 'happyforms' ); ?></label>
|
13 |
+
<textarea id="<%= instance.id %>_legal_text" rows="5" name="legal_text" data-bind="legal_text" class="widefat"><%= instance.legal_text %></textarea>
|
14 |
+
</p>
|
15 |
+
<p>
|
16 |
+
<label for="<%= instance.id %>_css_class"><?php _e( 'Custom CSS class', 'happyforms' ); ?></label>
|
17 |
+
<input type="text" id="<%= instance.id %>_css_class" class="widefat title" value="<%= instance.css_class %>" data-bind="css_class" />
|
18 |
+
</p>
|
19 |
+
<?php include( happyforms_get_include_folder() . '/templates/customize-form-part-footer.php' ); ?>
|
20 |
+
</script>
|
inc/templates/parts/customize-multi-line-text.php
ADDED
@@ -0,0 +1,58 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<script type="text/template" id="customize-happyforms-multi-line-text-template">
|
2 |
+
<?php include( happyforms_get_include_folder() . '/templates/customize-form-part-header.php' ); ?>
|
3 |
+
<p>
|
4 |
+
<label for="<%= instance.id %>_title"><?php _e( 'Title', 'happyforms' ); ?></label>
|
5 |
+
<input type="text" id="<%= instance.id %>_title" class="widefat title" value="<%= instance.label %>" data-bind="label" />
|
6 |
+
</p>
|
7 |
+
<p>
|
8 |
+
<label for="<%= instance.id %>_label_placement"><?php _e( 'Title placement', 'happyforms' ); ?></label>
|
9 |
+
<select id="<%= instance.id %>_label_placement" data-bind="label_placement">
|
10 |
+
<option value="above"<%= (instance.label_placement == 'above') ? ' selected' : '' %>><?php _e( 'Above', 'happyforms' ); ?></option>
|
11 |
+
<option value="left"<%= (instance.label_placement == 'left') ? ' selected' : '' %>><?php _e( 'Left', 'happyforms' ); ?></option>
|
12 |
+
<option value="below"<%= (instance.label_placement == 'below') ? ' selected' : '' %>><?php _e( 'Below', 'happyforms' ); ?></option>
|
13 |
+
<option value="inside"<%= (instance.label_placement == 'inside') ? ' selected' : '' %>><?php _e( 'Inside', 'happyforms' ); ?></option>
|
14 |
+
<option value="as_placeholder"<%= (instance.label_placement == 'as_placeholder') ? ' selected' : '' %>><?php _e( 'Display as placeholder', 'happyforms' ); ?></option>
|
15 |
+
</select>
|
16 |
+
</p>
|
17 |
+
<p class="label_placement-options" style="display: none">
|
18 |
+
<label>
|
19 |
+
<input type="checkbox" class="checkbox apply-all-check" value="" data-apply-to="label_placement" /> <?php _e( 'Apply to all parts', 'happyforms' ); ?>
|
20 |
+
</label>
|
21 |
+
</p>
|
22 |
+
<p>
|
23 |
+
<label for="<%= instance.id %>_description"><?php _e( 'Description', 'happyforms' ); ?></label>
|
24 |
+
<textarea id="<%= instance.id %>_description" data-bind="description"><%= instance.description %></textarea>
|
25 |
+
</p>
|
26 |
+
<p class="tooltip-description-wrap" style="display: <%= (instance.description != '') ? 'block' : 'none' %>">
|
27 |
+
<label>
|
28 |
+
<input type="checkbox" class="checkbox" value="1" <% if ( instance.tooltip_description ) { %>checked="checked"<% } %> data-bind="tooltip_description" /> <?php _e( 'Show description in a tooltip', 'happyforms' ); ?>
|
29 |
+
</label>
|
30 |
+
</p>
|
31 |
+
<p>
|
32 |
+
<label for="<%= instance.id %>_placeholder"><?php _e( 'Placeholder', 'happyforms' ); ?></label>
|
33 |
+
<input type="text" id="<%= instance.id %>_placeholder" class="widefat title" value="<%= instance.placeholder %>" data-bind="placeholder" />
|
34 |
+
</p>
|
35 |
+
<p>
|
36 |
+
<label for="<%= instance.id %>_width"><?php _e( 'Width', 'happyforms' ); ?></label>
|
37 |
+
<select id="<%= instance.id %>_width" name="width" data-bind="width" class="widefat">
|
38 |
+
<option value="full"<%= (instance.width == 'full') ? ' selected' : '' %>><?php _e( 'Full', 'happyforms' ); ?></option>
|
39 |
+
<option value="half"<%= (instance.width == 'half') ? ' selected' : '' %>><?php _e( 'Half', 'happyforms' ); ?></option>
|
40 |
+
<option value="third"<%= (instance.width == 'third') ? ' selected' : '' %>><?php _e( 'One third', 'happyforms' ); ?></option>
|
41 |
+
</select>
|
42 |
+
</p>
|
43 |
+
<p class="width-options" style="display: none">
|
44 |
+
<label>
|
45 |
+
<input type="checkbox" class="checkbox apply-all-check" value="" data-apply-to="width" /> <?php _e( 'Apply to all parts', 'happyforms' ); ?>
|
46 |
+
</label>
|
47 |
+
</p>
|
48 |
+
<p>
|
49 |
+
<label for="<%= instance.id %>_css_class"><?php _e( 'Custom CSS class', 'happyforms' ); ?></label>
|
50 |
+
<input type="text" id="<%= instance.id %>_css_class" class="widefat title" value="<%= instance.css_class %>" data-bind="css_class" />
|
51 |
+
</p>
|
52 |
+
<p>
|
53 |
+
<label>
|
54 |
+
<input type="checkbox" class="checkbox" value="1" <% if ( instance.required ) { %>checked="checked"<% } %> data-bind="required" /> <?php _e( 'This is a required field', 'happyforms' ); ?>
|
55 |
+
</label>
|
56 |
+
</p>
|
57 |
+
<?php include( happyforms_get_include_folder() . '/templates/customize-form-part-footer.php' ); ?>
|
58 |
+
</script>
|
inc/templates/parts/customize-number.php
ADDED
@@ -0,0 +1,96 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<script type="text/template" id="happyforms-customize-number-template">
|
2 |
+
<?php include( happyforms_get_include_folder() . '/templates/customize-form-part-header.php' ); ?>
|
3 |
+
<p>
|
4 |
+
<label for="<%= instance.id %>_title"><?php _e( 'Title', 'happyforms' ); ?></label>
|
5 |
+
<input type="text" id="<%= instance.id %>_title" class="widefat title" value="<%= instance.label %>" data-bind="label" />
|
6 |
+
</p>
|
7 |
+
<p>
|
8 |
+
<label for="<%= instance.id %>_label_placement"><?php _e( 'Title placement', 'happyforms' ); ?></label>
|
9 |
+
<select id="<%= instance.id %>_label_placement" data-bind="label_placement">
|
10 |
+
<option value="above"<%= (instance.label_placement == 'above') ? ' selected' : '' %>><?php _e( 'Above', 'happyforms' ); ?></option>
|
11 |
+
<option value="left"<%= (instance.label_placement == 'left') ? ' selected' : '' %>><?php _e( 'Left', 'happyforms' ); ?></option>
|
12 |
+
<option value="below"<%= (instance.label_placement == 'below') ? ' selected' : '' %>><?php _e( 'Below', 'happyforms' ); ?></option>
|
13 |
+
<option value="inside"<%= (instance.label_placement == 'inside') ? ' selected' : '' %>><?php _e( 'Inside input', 'happyforms' ); ?></option>
|
14 |
+
<option value="as_placeholder"<%= (instance.label_placement == 'as_placeholder') ? ' selected' : '' %>><?php _e( 'Display as placeholder', 'happyforms' ); ?></option>
|
15 |
+
</select>
|
16 |
+
</p>
|
17 |
+
<p class="label_placement-options" style="display: none">
|
18 |
+
<label>
|
19 |
+
<input type="checkbox" class="checkbox apply-all-check" value="" data-apply-to="label_placement" /> <?php _e( 'Apply to all parts', 'happyforms' ); ?>
|
20 |
+
</label>
|
21 |
+
</p>
|
22 |
+
<p>
|
23 |
+
<label for="<%= instance.id %>_description"><?php _e( 'Description', 'happyforms' ); ?></label>
|
24 |
+
<textarea id="<%= instance.id %>_description" data-bind="description"><%= instance.description %></textarea>
|
25 |
+
</p>
|
26 |
+
<p class="tooltip-description-wrap" style="display: <%= (instance.description != '') ? 'block' : 'none' %>">
|
27 |
+
<label>
|
28 |
+
<input type="checkbox" class="checkbox" value="1" <% if ( instance.tooltip_description ) { %>checked="checked"<% } %> data-bind="tooltip_description" /> <?php _e( 'Show description in a tooltip', 'happyforms' ); ?>
|
29 |
+
</label>
|
30 |
+
</p>
|
31 |
+
<p>
|
32 |
+
<label for="<%= instance.id %>_placeholder"><?php _e( 'Placeholder', 'happyforms' ); ?></label>
|
33 |
+
<input type="text" id="<%= instance.id %>_placeholder" class="widefat title" value="<%= instance.placeholder %>" data-bind="placeholder" />
|
34 |
+
</p>
|
35 |
+
<div class="min-max-wrapper" style="display: <%= (instance.masked == 0) ? 'block' : 'none' %>">
|
36 |
+
<p>
|
37 |
+
<label for="<%= instance.id %>_min_value"><?php _e( 'Minimum accepted value', 'happyforms' ); ?></label>
|
38 |
+
<input type="text" id="<%= instance.id %>_min_value" class="widefat title" value="<%= instance.min_value %>" data-bind="min_value" />
|
39 |
+
</p>
|
40 |
+
<p>
|
41 |
+
<label for="<%= instance.id %>_max_value"><?php _e( 'Maximum accepted value', 'happyforms' ); ?></label>
|
42 |
+
<input type="text" id="<%= instance.id %>_max_value" class="widefat title" value="<%= instance.max_value %>" data-bind="max_value" />
|
43 |
+
</p>
|
44 |
+
</div>
|
45 |
+
<p>
|
46 |
+
<label>
|
47 |
+
<input type="checkbox" name="masked" class="checkbox" value="1" <% if ( instance.masked ) { %>checked="checked"<% } %> data-bind="masked" /> <?php _e( 'Mask this input', 'happyforms' ); ?>
|
48 |
+
</label>
|
49 |
+
</p>
|
50 |
+
<div class="mask-wrapper number-options number-options--numeric" style="display: <%= (instance.masked == 1) ? 'block' : 'none' %>">
|
51 |
+
<p>
|
52 |
+
<label for="<%= instance.id %>_mask_numeric_thousands_delimiter"><?php _e( 'Thousands delimiter', 'happyforms' ); ?></label>
|
53 |
+
<input type="text" id="<%= instance.id %>_mask_numeric_thousands_delimiter" class="widefat title" value="<%= instance.mask_numeric_thousands_delimiter %>" data-bind="mask_numeric_thousands_delimiter" />
|
54 |
+
</p>
|
55 |
+
<p>
|
56 |
+
<label for="<%= instance.id %>_mask_numeric_decimal_mark"><?php _e( 'Decimal mark', 'happyforms' ); ?></label>
|
57 |
+
<input type="text" id="<%= instance.id %>_mask_numeric_decimal_mark" class="widefat title" value="<%= instance.mask_numeric_decimal_mark %>" data-bind="mask_numeric_decimal_mark" />
|
58 |
+
</p>
|
59 |
+
<p>
|
60 |
+
<label for="<%= instance.id %>_mask_numeric_prefix"><?php _e( 'Prefix', 'happyforms' ); ?></label>
|
61 |
+
<input type="text" id="<%= instance.id %>_mask_numeric_prefix" class="widefat title" value="<%= instance.mask_numeric_prefix %>" data-bind="mask_numeric_prefix" />
|
62 |
+
</p>
|
63 |
+
</div>
|
64 |
+
<p>
|
65 |
+
<label for="<%= instance.id %>_width"><?php _e( 'Width', 'happyforms' ); ?></label>
|
66 |
+
<select id="<%= instance.id %>_width" name="width" data-bind="width" class="widefat">
|
67 |
+
<option value="full"<%= (instance.width == 'full') ? ' selected' : '' %>><?php _e( 'Full', 'happyforms' ); ?></option>
|
68 |
+
<option value="half"<%= (instance.width == 'half') ? ' selected' : '' %>><?php _e( 'Half', 'happyforms' ); ?></option>
|
69 |
+
<option value="third"<%= (instance.width == 'third') ? ' selected' : '' %>><?php _e( 'One third', 'happyforms' ); ?></option>
|
70 |
+
</select>
|
71 |
+
</p>
|
72 |
+
<p class="width-options" style="display: none">
|
73 |
+
<label>
|
74 |
+
<input type="checkbox" class="checkbox apply-all-check" value="" data-apply-to="width" /> <?php _e( 'Apply to all parts', 'happyforms' ); ?>
|
75 |
+
</label>
|
76 |
+
</p>
|
77 |
+
<p>
|
78 |
+
<label for="<%= instance.id %>_css_class"><?php _e( 'Custom CSS class', 'happyforms' ); ?></label>
|
79 |
+
<input type="text" id="<%= instance.id %>_css_class" class="widefat title" value="<%= instance.css_class %>" data-bind="css_class" />
|
80 |
+
</p>
|
81 |
+
<p>
|
82 |
+
<label>
|
83 |
+
<input type="checkbox" class="checkbox confirmation-checkbox" value="1" <% if ( instance.confirmation_field ) { %>checked="checked"<% } %> data-bind="confirmation_field" /> <?php _e( 'Require confirmation of the value', 'happyforms' ); ?>
|
84 |
+
</label>
|
85 |
+
</p>
|
86 |
+
<p class="confirmation-field-setting" style="display: <%= (instance.confirmation_field == 1) ? 'block' : 'none' %>">
|
87 |
+
<label for="<%= instance.id %>_confirmation_field_label"><?php _e( 'Confirmation field title', 'happyforms' ); ?></label>
|
88 |
+
<input type="text" id="<%= instance.id %>_confirmation_field_label" class="widefat title" value="<%= instance.confirmation_field_label %>" data-bind="confirmation_field_label" />
|
89 |
+
</p>
|
90 |
+
<p>
|
91 |
+
<label>
|
92 |
+
<input type="checkbox" class="checkbox" value="1" <% if ( instance.required ) { %>checked="checked"<% } %> data-bind="required" /> <?php _e( 'This is a required field', 'happyforms' ); ?>
|
93 |
+
</label>
|
94 |
+
</p>
|
95 |
+
<?php include( happyforms_get_include_folder() . '/templates/customize-form-part-footer.php' ); ?>
|
96 |
+
</script>
|
inc/templates/parts/customize-phone.php
ADDED
@@ -0,0 +1,87 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<script type="text/template" id="happyforms-customize-phone-template">
|
2 |
+
<?php include( happyforms_get_include_folder() . '/templates/customize-form-part-header.php' ); ?>
|
3 |
+
<p>
|
4 |
+
<label for="<%= instance.id %>_title"><?php _e( 'Title', 'happyforms' ); ?></label>
|
5 |
+
<input type="text" id="<%= instance.id %>_title" class="widefat title" value="<%= instance.label %>" data-bind="label" />
|
6 |
+
</p>
|
7 |
+
<p>
|
8 |
+
<label for="<%= instance.id %>_label_placement"><?php _e( 'Title placement', 'happyforms' ); ?></label>
|
9 |
+
<select id="<%= instance.id %>_label_placement" data-bind="label_placement">
|
10 |
+
<option value="above"<%= (instance.label_placement == 'above') ? ' selected' : '' %>><?php _e( 'Above', 'happyforms' ); ?></option>
|
11 |
+
<option value="left"<%= (instance.label_placement == 'left') ? ' selected' : '' %>><?php _e( 'Left', 'happyforms' ); ?></option>
|
12 |
+
<option value="below"<%= (instance.label_placement == 'below') ? ' selected' : '' %>><?php _e( 'Below', 'happyforms' ); ?></option>
|
13 |
+
<option value="inside"<%= (instance.label_placement == 'inside') ? ' selected' : '' %>><?php _e( 'Inside', 'happyforms' ); ?></option>
|
14 |
+
<option value="as_placeholder"<%= (instance.label_placement == 'as_placeholder') ? ' selected' : '' %>><?php _e( 'Display as placeholder', 'happyforms' ); ?></option>
|
15 |
+
</select>
|
16 |
+
</p>
|
17 |
+
<p class="label_placement-options" style="display: none">
|
18 |
+
<label>
|
19 |
+
<input type="checkbox" class="checkbox apply-all-check" value="" data-apply-to="label_placement" /> <?php _e( 'Apply to all parts', 'happyforms' ); ?>
|
20 |
+
</label>
|
21 |
+
</p>
|
22 |
+
<p>
|
23 |
+
<label for="<%= instance.id %>_description"><?php _e( 'Description', 'happyforms' ); ?></label>
|
24 |
+
<textarea id="<%= instance.id %>_description" data-bind="description"><%= instance.description %></textarea>
|
25 |
+
</p>
|
26 |
+
<p class="tooltip-description-wrap" style="display: <%= (instance.description != '') ? 'block' : 'none' %>">
|
27 |
+
<label>
|
28 |
+
<input type="checkbox" class="checkbox" value="1" <% if ( instance.tooltip_description ) { %>checked="checked"<% } %> data-bind="tooltip_description" /> <?php _e( 'Show description in a tooltip', 'happyforms' ); ?>
|
29 |
+
</label>
|
30 |
+
</p>
|
31 |
+
<p>
|
32 |
+
<label for="<%= instance.id %>_placeholder"><?php _e( 'Placeholder', 'happyforms' ); ?></label>
|
33 |
+
<input type="text" id="<%= instance.id %>_placeholder" class="widefat title" value="<%= instance.placeholder %>" data-bind="placeholder" />
|
34 |
+
</p>
|
35 |
+
<p>
|
36 |
+
<label>
|
37 |
+
<input type="checkbox" name="masked" class="checkbox" value="1" <% if ( instance.masked ) { %>checked="checked"<% } %> data-bind="masked" /> <?php _e( 'Mask this input', 'happyforms' ); ?>
|
38 |
+
</label>
|
39 |
+
</p>
|
40 |
+
<div class="number-options number-options--phone" style="display: <%= (instance.masked == 1) ? 'block' : 'none' %>">
|
41 |
+
<p>
|
42 |
+
<label for="<%= instance.id %>_mask_phone_country"><?php _e( 'Pre-format phone number region', 'happyforms' ); ?></label>
|
43 |
+
<select id="<%= instance.id %>_mask_phone_country" class="widefat title" data-bind="mask_phone_country">
|
44 |
+
<option value="">- <?php _e( 'Select', 'happyforms' ); ?> -</option>
|
45 |
+
<?php
|
46 |
+
$phone_countries = $this->get_phone_countries_array();
|
47 |
+
|
48 |
+
foreach ( $phone_countries as $country_code => $country ) {
|
49 |
+
echo '<option value="'. $country['code'] .'"<% if (instance.mask_phone_country == "'. $country['code'] .'") { %> selected<% } %>>'. ucwords( strtolower( $country['name'] ) ) .'</option>';
|
50 |
+
}
|
51 |
+
?>
|
52 |
+
</select>
|
53 |
+
</p>
|
54 |
+
</div>
|
55 |
+
<p>
|
56 |
+
<label for="<%= instance.id %>_width"><?php _e( 'Width', 'happyforms' ); ?></label>
|
57 |
+
<select id="<%= instance.id %>_width" name="width" data-bind="width" class="widefat">
|
58 |
+
<option value="full"<%= (instance.width == 'full') ? ' selected' : '' %>><?php _e( 'Full', 'happyforms' ); ?></option>
|
59 |
+
<option value="half"<%= (instance.width == 'half') ? ' selected' : '' %>><?php _e( 'Half', 'happyforms' ); ?></option>
|
60 |
+
<option value="third"<%= (instance.width == 'third') ? ' selected' : '' %>><?php _e( 'One third', 'happyforms' ); ?></option>
|
61 |
+
</select>
|
62 |
+
</p>
|
63 |
+
<p class="width-options" style="display: none">
|
64 |
+
<label>
|
65 |
+
<input type="checkbox" class="checkbox apply-all-check" value="" data-apply-to="width" /> <?php _e( 'Apply to all parts', 'happyforms' ); ?>
|
66 |
+
</label>
|
67 |
+
</p>
|
68 |
+
<p>
|
69 |
+
<label for="<%= instance.id %>_css_class"><?php _e( 'Custom CSS class', 'happyforms' ); ?></label>
|
70 |
+
<input type="text" id="<%= instance.id %>_css_class" class="widefat title" value="<%= instance.css_class %>" data-bind="css_class" />
|
71 |
+
</p>
|
72 |
+
<p>
|
73 |
+
<label>
|
74 |
+
<input type="checkbox" class="checkbox confirmation-checkbox" value="1" <% if ( instance.confirmation_field ) { %>checked="checked"<% } %> data-bind="confirmation_field" /> <?php _e( 'Require confirmation of the value', 'happyforms' ); ?>
|
75 |
+
</label>
|
76 |
+
</p>
|
77 |
+
<p class="confirmation-field-setting" style="display: <%= (instance.confirmation_field == 1) ? 'block' : 'none' %>">
|
78 |
+
<label for="<%= instance.id %>_confirmation_field_label"><?php _e( 'Confirmation field title', 'happyforms' ); ?></label>
|
79 |
+
<input type="text" id="<%= instance.id %>_confirmation_field_label" class="widefat title" value="<%= instance.confirmation_field_label %>" data-bind="confirmation_field_label" />
|
80 |
+
</p>
|
81 |
+
<p>
|
82 |
+
<label>
|
83 |
+
<input type="checkbox" class="checkbox" value="1" <% if ( instance.required ) { %>checked="checked"<% } %> data-bind="required" /> <?php _e( 'This is a required field', 'happyforms' ); ?>
|
84 |
+
</label>
|
85 |
+
</p>
|
86 |
+
<?php include( happyforms_get_include_folder() . '/templates/customize-form-part-footer.php' ); ?>
|
87 |
+
</script>
|
inc/templates/parts/customize-placeholder.php
ADDED
@@ -0,0 +1,42 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<script type="text/template" id="happyforms-customize-placeholder-template">
|
2 |
+
<?php include( happyforms_get_include_folder() . '/templates/customize-form-part-header.php' ); ?>
|
3 |
+
<p>
|
4 |
+
<label for="<%= instance.id %>_title"><?php _e( 'Title', 'happyforms' ); ?></label>
|
5 |
+
<input type="text" id="<%= instance.id %>_title" class="widefat title" value="<%= instance.label %>" data-bind="label" />
|
6 |
+
</p>
|
7 |
+
<p>
|
8 |
+
<label for="<%= instance.id %>_label_placement"><?php _e( 'Title placement', 'happyforms' ); ?></label>
|
9 |
+
<select id="<%= instance.id %>_label_placement" data-bind="label_placement">
|
10 |
+
<option value="above"<%= (instance.label_placement == 'above') ? ' selected' : '' %>><?php _e( 'Above', 'happyforms' ); ?></option>
|
11 |
+
<option value="left"<%= (instance.label_placement == 'left') ? ' selected' : '' %>><?php _e( 'Left', 'happyforms' ); ?></option>
|
12 |
+
<option value="below"<%= (instance.label_placement == 'below') ? ' selected' : '' %>><?php _e( 'Below', 'happyforms' ); ?></option>
|
13 |
+
</select>
|
14 |
+
</p>
|
15 |
+
<p class="label_placement-options" style="display: none">
|
16 |
+
<label>
|
17 |
+
<input type="checkbox" class="checkbox apply-all-check" value="" data-apply-to="label_placement" /> <?php _e( 'Apply to all parts', 'happyforms' ); ?>
|
18 |
+
</label>
|
19 |
+
</p>
|
20 |
+
<p>
|
21 |
+
<label for="<%= instance.id %>_placeholder_text"><?php _e( 'Text', 'happyforms' ); ?></label>
|
22 |
+
<textarea id="<%= instance.id %>_placeholder_text" class="widefat title" name="placeholder_text" data-bind="placeholder_text"><%= instance.placeholder_text %></textarea>
|
23 |
+
</p>
|
24 |
+
<p>
|
25 |
+
<label for="<%= instance.id %>_width"><?php _e( 'Width', 'happyforms' ); ?></label>
|
26 |
+
<select id="<%= instance.id %>_width" name="width" data-bind="width" class="widefat">
|
27 |
+
<option value="full"<%= (instance.width == 'full') ? ' selected' : '' %>><?php _e( 'Full', 'happyforms' ); ?></option>
|
28 |
+
<option value="half"<%= (instance.width == 'half') ? ' selected' : '' %>><?php _e( 'Half', 'happyforms' ); ?></option>
|
29 |
+
<option value="third"<%= (instance.width == 'third') ? ' selected' : '' %>><?php _e( 'One third', 'happyforms' ); ?></option>
|
30 |
+
</select>
|
31 |
+
</p>
|
32 |
+
<p class="width-options" style="display: none">
|
33 |
+
<label>
|
34 |
+
<input type="checkbox" class="checkbox apply-all-check" value="" data-apply-to="width" /> <?php _e( 'Apply to all parts', 'happyforms' ); ?>
|
35 |
+
</label>
|
36 |
+
</p>
|
37 |
+
<p>
|
38 |
+
<label for="<%= instance.id %>_css_class"><?php _e( 'Custom CSS class', 'happyforms' ); ?></label>
|
39 |
+
<input type="text" id="<%= instance.id %>_css_class" class="widefat title" value="<%= instance.css_class %>" data-bind="css_class" />
|
40 |
+
</p>
|
41 |
+
<?php include( happyforms_get_include_folder() . '/templates/customize-form-part-footer.php' ); ?>
|
42 |
+
</script>
|
inc/templates/parts/customize-radio.php
ADDED
@@ -0,0 +1,85 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<script type="text/template" id="customize-happyforms-radio-template">
|
2 |
+
<?php include( happyforms_get_include_folder() . '/templates/customize-form-part-header.php' ); ?>
|
3 |
+
<p>
|
4 |
+
<label for="<%= instance.id %>_title"><?php _e( 'Title', 'happyforms' ); ?></label>
|
5 |
+
<input type="text" id="<%= instance.id %>_title" class="widefat title" value="<%= instance.label %>" data-bind="label" />
|
6 |
+
</p>
|
7 |
+
<p>
|
8 |
+
<label for="<%= instance.id %>_label_placement"><?php _e( 'Title placement', 'happyforms' ); ?></label>
|
9 |
+
<select id="<%= instance.id %>_label_placement" data-bind="label_placement">
|
10 |
+
<option value="above"<%= (instance.label_placement == 'above') ? ' selected' : '' %>><?php _e( 'Above', 'happyforms' ); ?></option>
|
11 |
+
<option value="left"<%= (instance.label_placement == 'left') ? ' selected' : '' %>><?php _e( 'Left', 'happyforms' ); ?></option>
|
12 |
+
<option value="below"<%= (instance.label_placement == 'below') ? ' selected' : '' %>><?php _e( 'Below', 'happyforms' ); ?></option>
|
13 |
+
</select>
|
14 |
+
</p>
|
15 |
+
<p class="label_placement-options" style="display: none">
|
16 |
+
<label>
|
17 |
+
<input type="checkbox" class="checkbox apply-all-check" value="" data-apply-to="label_placement" /> <?php _e( 'Apply to all parts', 'happyforms' ); ?>
|
18 |
+
</label>
|
19 |
+
</p>
|
20 |
+
<p>
|
21 |
+
<label for="<%= instance.id %>_description"><?php _e( 'Description', 'happyforms' ); ?></label>
|
22 |
+
<textarea id="<%= instance.id %>_description" data-bind="description"><%= instance.description %></textarea>
|
23 |
+
</p>
|
24 |
+
<p class="tooltip-description-wrap" style="display: <%= (instance.description != '') ? 'block' : 'none' %>">
|
25 |
+
<label>
|
26 |
+
<input type="checkbox" class="checkbox" value="1" <% if ( instance.tooltip_description ) { %>checked="checked"<% } %> data-bind="tooltip_description" /> <?php _e( 'Show description in a tooltip', 'happyforms' ); ?>
|
27 |
+
</label>
|
28 |
+
</p>
|
29 |
+
<p>
|
30 |
+
<label for="<%= instance.id %>_display_type"><?php _e( 'Display options', 'happyforms' ); ?></label>
|
31 |
+
<select id="<%= instance.id %>_display_type" name="display_type" data-bind="display_type" class="widefat">
|
32 |
+
<option value="inline"<%= (instance.display_type == 'inline') ? ' selected' : '' %>><?php _e( 'Horizontal', 'happyforms' ); ?></option>
|
33 |
+
<option value="block"<%= (instance.display_type == 'block') ? ' selected' : '' %>><?php _e( 'Vertical', 'happyforms' ); ?></option>
|
34 |
+
</select>
|
35 |
+
</p>
|
36 |
+
<p>
|
37 |
+
<label for="<%= instance.id %>_width"><?php _e( 'Width', 'happyforms' ); ?></label>
|
38 |
+
<select id="<%= instance.id %>_width" name="width" data-bind="width" class="widefat">
|
39 |
+
<option value="full"<%= (instance.width == 'full') ? ' selected' : '' %>><?php _e( 'Full', 'happyforms' ); ?></option>
|
40 |
+
<option value="half"<%= (instance.width == 'half') ? ' selected' : '' %>><?php _e( 'Half', 'happyforms' ); ?></option>
|
41 |
+
<option value="third"<%= (instance.width == 'third') ? ' selected' : '' %>><?php _e( 'One third', 'happyforms' ); ?></option>
|
42 |
+
</select>
|
43 |
+
</p>
|
44 |
+
<p class="width-options" style="display: none">
|
45 |
+
<label>
|
46 |
+
<input type="checkbox" class="checkbox apply-all-check" value="" data-apply-to="width" /> <?php _e( 'Apply to all parts', 'happyforms' ); ?>
|
47 |
+
</label>
|
48 |
+
</p>
|
49 |
+
<p>
|
50 |
+
<label for="<%= instance.id %>_css_class"><?php _e( 'Custom CSS class', 'happyforms' ); ?></label>
|
51 |
+
<input type="text" id="<%= instance.id %>_css_class" class="widefat title" value="<%= instance.css_class %>" data-bind="css_class" />
|
52 |
+
</p>
|
53 |
+
<p>
|
54 |
+
<label>
|
55 |
+
<input type="checkbox" class="checkbox" value="1" <% if ( instance.required ) { %>checked="checked"<% } %> data-bind="required" /> <?php _e( 'This is a required field', 'happyforms' ); ?>
|
56 |
+
</label>
|
57 |
+
</p>
|
58 |
+
<div class="options">
|
59 |
+
<ul></ul>
|
60 |
+
<h3><?php _e( 'Options', 'happyforms' ); ?></h3>
|
61 |
+
<p class="no-options"><?php _e( 'No options added yet. Add one by clicking the <i>Add option</i> link below.', 'happyforms' ); ?></p>
|
62 |
+
</div>
|
63 |
+
<p class="links">
|
64 |
+
<a href="#" class="add-option"><?php _e( 'Add option', 'happyforms' ); ?></a>
|
65 |
+
</p>
|
66 |
+
<?php include( happyforms_get_include_folder() . '/templates/customize-form-part-footer.php' ); ?>
|
67 |
+
</script>
|
68 |
+
<script type="text/template" id="customize-happyforms-radio-item-template">
|
69 |
+
<li class="happyforms-part-widget happyforms-part-widget--sub" data-item-id="<%= item.id %>">
|
70 |
+
<label>
|
71 |
+
<?php _e( 'Label', 'happyforms' ); ?>
|
72 |
+
<input type="text" class="widefat" name="option_label" value="<%= item.label %>" data-option-attribute="label">
|
73 |
+
</label>
|
74 |
+
<label class="happyforms-part-item-description">
|
75 |
+
<?php _e( 'Description', 'happyforms' ); ?>
|
76 |
+
<input type="text" class="widefat" name="option_description" value="<%= (typeof item.description !== 'undefined') ? item.description : '' %>" data-option-attribute="description">
|
77 |
+
</label>
|
78 |
+
<label>
|
79 |
+
<input type="checkbox" name="option_is_default" value="1" class="default-option-switch"<% if (item.is_default == 1) { %> checked="checked"<% } %>> <?php _e( 'Make this option default', 'happyforms' ); ?>
|
80 |
+
</label>
|
81 |
+
<div class="option-actions">
|
82 |
+
<a href="#" class="delete-option"><?php _e( 'Delete', 'happyforms' ); ?></a>
|
83 |
+
</div>
|
84 |
+
</li>
|
85 |
+
</script>
|
inc/templates/parts/customize-rating.php
ADDED
@@ -0,0 +1,52 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<script type="text/template" id="happyforms-customize-rating-template">
|
2 |
+
<?php include( happyforms_get_include_folder() . '/templates/customize-form-part-header.php' ); ?>
|
3 |
+
<p>
|
4 |
+
<label for="<%= instance.id %>_title"><?php _e( 'Title', 'happyforms' ); ?></label>
|
5 |
+
<input type="text" id="<%= instance.id %>_title" class="widefat title" value="<%= instance.label %>" data-bind="label" />
|
6 |
+
</p>
|
7 |
+
<p>
|
8 |
+
<label for="<%= instance.id %>_label_placement"><?php _e( 'Title placement', 'happyforms' ); ?></label>
|
9 |
+
<select id="<%= instance.id %>_label_placement" data-bind="label_placement">
|
10 |
+
<option value="above"<%= (instance.label_placement == 'above') ? ' selected' : '' %>><?php _e( 'Above', 'happyforms' ); ?></option>
|
11 |
+
<option value="left"<%= (instance.label_placement == 'left') ? ' selected' : '' %>><?php _e( 'Left', 'happyforms' ); ?></option>
|
12 |
+
<option value="below"<%= (instance.label_placement == 'below') ? ' selected' : '' %>><?php _e( 'Below', 'happyforms' ); ?></option>
|
13 |
+
</select>
|
14 |
+
</p>
|
15 |
+
<p class="label_placement-options" style="display: none">
|
16 |
+
<label>
|
17 |
+
<input type="checkbox" class="checkbox apply-all-check" value="" data-apply-to="label_placement" /> <?php _e( 'Apply to all parts', 'happyforms' ); ?>
|
18 |
+
</label>
|
19 |
+
</p>
|
20 |
+
<p>
|
21 |
+
<label for="<%= instance.id %>_description"><?php _e( 'Description', 'happyforms' ); ?></label>
|
22 |
+
<textarea id="<%= instance.id %>_description" data-bind="description"><%= instance.description %></textarea>
|
23 |
+
</p>
|
24 |
+
<p class="tooltip-description-wrap" style="display: <%= (instance.description != '') ? 'block' : 'none' %>">
|
25 |
+
<label>
|
26 |
+
<input type="checkbox" class="checkbox" value="1" <% if ( instance.tooltip_description ) { %>checked="checked"<% } %> data-bind="tooltip_description" /> <?php _e( 'Show description in a tooltip', 'happyforms' ); ?>
|
27 |
+
</label>
|
28 |
+
</p>
|
29 |
+
<p>
|
30 |
+
<label for="<%= instance.id %>_width"><?php _e( 'Width', 'happyforms' ); ?></label>
|
31 |
+
<select id="<%= instance.id %>_width" name="width" data-bind="width" class="widefat">
|
32 |
+
<option value="full"<%= (instance.width == 'full') ? ' selected' : '' %>><?php _e( 'Full', 'happyforms' ); ?></option>
|
33 |
+
<option value="half"<%= (instance.width == 'half') ? ' selected' : '' %>><?php _e( 'Half', 'happyforms' ); ?></option>
|
34 |
+
<option value="third"<%= (instance.width == 'third') ? ' selected' : '' %>><?php _e( 'One third', 'happyforms' ); ?></option>
|
35 |
+
</select>
|
36 |
+
</p>
|
37 |
+
<p class="width-options" style="display: none">
|
38 |
+
<label>
|
39 |
+
<input type="checkbox" class="checkbox apply-all-check" value="" data-apply-to="width" /> <?php _e( 'Apply to all parts', 'happyforms' ); ?>
|
40 |
+
</label>
|
41 |
+
</p>
|
42 |
+
<p>
|
43 |
+
<label for="<%= instance.id %>_css_class"><?php _e( 'Custom CSS class', 'happyforms' ); ?></label>
|
44 |
+
<input type="text" id="<%= instance.id %>_css_class" class="widefat title" value="<%= instance.css_class %>" data-bind="css_class" />
|
45 |
+
</p>
|
46 |
+
<p>
|
47 |
+
<label>
|
48 |
+
<input type="checkbox" class="checkbox" value="1" <% if ( instance.required ) { %>checked="checked"<% } %> data-bind="required" /> <?php _e( 'This is a required field', 'happyforms' ); ?>
|
49 |
+
</label>
|
50 |
+
</p>
|
51 |
+
<?php include( happyforms_get_include_folder() . '/templates/customize-form-part-footer.php' ); ?>
|
52 |
+
</script>
|
inc/templates/parts/customize-scale.php
ADDED
@@ -0,0 +1,80 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<script type="text/template" id="happyforms-customize-scale-template">
|
2 |
+
<?php include( happyforms_get_include_folder() . '/templates/customize-form-part-header.php' ); ?>
|
3 |
+
<p>
|
4 |
+
<label for="<%= instance.id %>_title"><?php _e( 'Title', 'happyforms' ); ?></label>
|
5 |
+
<input type="text" id="<%= instance.id %>_title" class="widefat title" value="<%= instance.label %>" data-bind="label" />
|
6 |
+
</p>
|
7 |
+
<p>
|
8 |
+
<label for="<%= instance.id %>_label_placement"><?php _e( 'Title placement', 'happyforms' ); ?></label>
|
9 |
+
<select id="<%= instance.id %>_label_placement" data-bind="label_placement">
|
10 |
+
<option value="above"<%= (instance.label_placement == 'above') ? ' selected' : '' %>><?php _e( 'Above', 'happyforms' ); ?></option>
|
11 |
+
<option value="left"<%= (instance.label_placement == 'left') ? ' selected' : '' %>><?php _e( 'Left', 'happyforms' ); ?></option>
|
12 |
+
<option value="below"<%= (instance.label_placement == 'below') ? ' selected' : '' %>><?php _e( 'Below', 'happyforms' ); ?></option>
|
13 |
+
</select>
|
14 |
+
</p>
|
15 |
+
<p class="label_placement-options" style="display: none">
|
16 |
+
<label>
|
17 |
+
<input type="checkbox" class="checkbox apply-all-check" value="" data-apply-to="label_placement" /> <?php _e( 'Apply to all parts', 'happyforms' ); ?>
|
18 |
+
</label>
|
19 |
+
</p>
|
20 |
+
<p>
|
21 |
+
<label for="<%= instance.id %>_description"><?php _e( 'Description', 'happyforms' ); ?></label>
|
22 |
+
<textarea id="<%= instance.id %>_description" data-bind="description"><%= instance.description %></textarea>
|
23 |
+
</p>
|
24 |
+
<p class="tooltip-description-wrap" style="display: <%= (instance.description != '') ? 'block' : 'none' %>">
|
25 |
+
<label>
|
26 |
+
<input type="checkbox" class="checkbox" value="1" <% if ( instance.tooltip_description ) { %>checked="checked"<% } %> data-bind="tooltip_description" /> <?php _e( 'Show description in a tooltip', 'happyforms' ); ?>
|
27 |
+
</label>
|
28 |
+
</p>
|
29 |
+
<p>
|
30 |
+
<label for="<%= instance.id %>_min_label"><?php _e( 'Minimum value label', 'happyforms' ); ?></label>
|
31 |
+
<input type="text" id="<%= instance.id %>_min_label" class="widefat title" value="<%= instance.min_label %>" data-bind="min_label" />
|
32 |
+
</p>
|
33 |
+
<p>
|
34 |
+
<label for="<%= instance.id %>_max_label"><?php _e( 'Maximum value label', 'happyforms' ); ?></label>
|
35 |
+
<input type="text" id="<%= instance.id %>_max_label" class="widefat title" value="<%= instance.max_label %>" data-bind="max_label" />
|
36 |
+
</p>
|
37 |
+
<p>
|
38 |
+
<label for="<%= instance.id %>_max_value"><?php _e( 'Minimum accepted value', 'happyforms' ); ?></label>
|
39 |
+
<input type="text" id="<%= instance.id %>_max_value" class="widefat title" value="<%= instance.min_value %>" data-bind="min_value" />
|
40 |
+
</p>
|
41 |
+
<p>
|
42 |
+
<label for="<%= instance.id %>_max_value"><?php _e( 'Maximum accepted value', 'happyforms' ); ?></label>
|
43 |
+
<input type="text" id="<%= instance.id %>_max_value" class="widefat title" value="<%= instance.max_value %>" data-bind="max_value" />
|
44 |
+
</p>
|
45 |
+
<p>
|
46 |
+
<label for="<%= instance.id %>_default_value"><?php _e( 'Default value', 'happyforms' ); ?></label>
|
47 |
+
<input type="text" id="<%= instance.id %>_default_value" class="widefat title" value="<%= instance.default_value %>" data-bind="default_value" />
|
48 |
+
</p>
|
49 |
+
<p>
|
50 |
+
<label for="<%= instance.id %>_step"><?php _e( 'Step', 'happyforms' ); ?></label>
|
51 |
+
<select id="<%= instance.id %>_step" data-bind="step" class="widefat">
|
52 |
+
<option value="1"<%= (instance.step == '1') ? ' selected' : '' %>>1</option>
|
53 |
+
<option value="0.1"<%= (instance.width == '0.1') ? ' selected' : '' %>>0.1</option>
|
54 |
+
<option value="10"<%= (instance.width == '10') ? ' selected' : '' %>>10</option>
|
55 |
+
</select>
|
56 |
+
</p>
|
57 |
+
<p>
|
58 |
+
<label for="<%= instance.id %>_width"><?php _e( 'Width', 'happyforms' ); ?></label>
|
59 |
+
<select id="<%= instance.id %>_width" name="width" data-bind="width" class="widefat">
|
60 |
+
<option value="full"<%= (instance.width == 'full') ? ' selected' : '' %>><?php _e( 'Full', 'happyforms' ); ?></option>
|
61 |
+
<option value="half"<%= (instance.width == 'half') ? ' selected' : '' %>><?php _e( 'Half', 'happyforms' ); ?></option>
|
62 |
+
<option value="third"<%= (instance.width == 'third') ? ' selected' : '' %>><?php _e( 'One third', 'happyforms' ); ?></option>
|
63 |
+
</select>
|
64 |
+
</p>
|
65 |
+
<p class="width-options" style="display: none">
|
66 |
+
<label>
|
67 |
+
<input type="checkbox" class="checkbox apply-all-check" value="" data-apply-to="width" /> <?php _e( 'Apply to all parts', 'happyforms' ); ?>
|
68 |
+
</label>
|
69 |
+
</p>
|
70 |
+
<p>
|
71 |
+
<label for="<%= instance.id %>_css_class"><?php _e( 'Custom CSS class', 'happyforms' ); ?></label>
|
72 |
+
<input type="text" id="<%= instance.id %>_css_class" class="widefat title" value="<%= instance.css_class %>" data-bind="css_class" />
|
73 |
+
</p>
|
74 |
+
<p>
|
75 |
+
<label>
|
76 |
+
<input type="checkbox" class="checkbox" value="1" <% if ( instance.required ) { %>checked="checked"<% } %> data-bind="required" /> <?php _e( 'This is a required field', 'happyforms' ); ?>
|
77 |
+
</label>
|
78 |
+
</p>
|
79 |
+
<?php include( happyforms_get_include_folder() . '/templates/customize-form-part-footer.php' ); ?>
|
80 |
+
</script>
|
inc/templates/parts/customize-select.php
ADDED
@@ -0,0 +1,75 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<script type="text/template" id="customize-happyforms-select-template">
|
2 |
+
<?php include( happyforms_get_include_folder() . '/templates/customize-form-part-header.php' ); ?>
|
3 |
+
<p>
|
4 |
+
<label for="<%= instance.id %>_title"><?php _e( 'Title', 'happyforms' ); ?></label>
|
5 |
+
<input type="text" id="<%= instance.id %>_title" class="widefat title" value="<%= instance.label %>" data-bind="label" />
|
6 |
+
</p>
|
7 |
+
<p>
|
8 |
+
<label for="<%= instance.id %>_label_placement"><?php _e( 'Title placement', 'happyforms' ); ?></label>
|
9 |
+
<select id="<%= instance.id %>_label_placement" data-bind="label_placement">
|
10 |
+
<option value="above"<%= (instance.label_placement == 'above') ? ' selected' : '' %>><?php _e( 'Above', 'happyforms' ); ?></option>
|
11 |
+
<option value="left"<%= (instance.label_placement == 'left') ? ' selected' : '' %>><?php _e( 'Left', 'happyforms' ); ?></option>
|
12 |
+
<option value="below"<%= (instance.label_placement == 'below') ? ' selected' : '' %>><?php _e( 'Below', 'happyforms' ); ?></option>
|
13 |
+
</select>
|
14 |
+
</p>
|
15 |
+
<p class="label_placement-options" style="display: none">
|
16 |
+
<label>
|
17 |
+
<input type="checkbox" class="checkbox apply-all-check" value="" data-apply-to="label_placement" /> <?php _e( 'Apply to all parts', 'happyforms' ); ?>
|
18 |
+
</label>
|
19 |
+
</p>
|
20 |
+
<p>
|
21 |
+
<label for="<%= instance.id %>_description"><?php _e( 'Description', 'happyforms' ); ?></label>
|
22 |
+
<textarea id="<%= instance.id %>_description" data-bind="description"><%= instance.description %></textarea>
|
23 |
+
</p>
|
24 |
+
<p class="tooltip-description-wrap" style="display: <%= (instance.description != '') ? 'block' : 'none' %>">
|
25 |
+
<label>
|
26 |
+
<input type="checkbox" class="checkbox" value="1" <% if ( instance.tooltip_description ) { %>checked="checked"<% } %> data-bind="tooltip_description" /> <?php _e( 'Show description in a tooltip', 'happyforms' ); ?>
|
27 |
+
</label>
|
28 |
+
</p>
|
29 |
+
<p>
|
30 |
+
<label for="<%= instance.id %>_width"><?php _e( 'Width', 'happyforms' ); ?></label>
|
31 |
+
<select id="<%= instance.id %>_width" name="width" data-bind="width" class="widefat">
|
32 |
+
<option value="full"<%= (instance.width == 'full') ? ' selected' : '' %>><?php _e( 'Full', 'happyforms' ); ?></option>
|
33 |
+
<option value="half"<%= (instance.width == 'half') ? ' selected' : '' %>><?php _e( 'Half', 'happyforms' ); ?></option>
|
34 |
+
<option value="third"<%= (instance.width == 'third') ? ' selected' : '' %>><?php _e( 'One third', 'happyforms' ); ?></option>
|
35 |
+
</select>
|
36 |
+
</p>
|
37 |
+
<p class="width-options" style="display: none">
|
38 |
+
<label>
|
39 |
+
<input type="checkbox" class="checkbox apply-all-check" value="" data-apply-to="width" /> <?php _e( 'Apply to all parts', 'happyforms' ); ?>
|
40 |
+
</label>
|
41 |
+
</p>
|
42 |
+
<p>
|
43 |
+
<label for="<%= instance.id %>_css_class"><?php _e( 'Custom CSS class', 'happyforms' ); ?></label>
|
44 |
+
<input type="text" id="<%= instance.id %>_css_class" class="widefat title" value="<%= instance.css_class %>" data-bind="css_class" />
|
45 |
+
</p>
|
46 |
+
<p>
|
47 |
+
<label>
|
48 |
+
<input type="checkbox" class="checkbox" value="1" <% if ( instance.required ) { %>checked="checked"<% } %> data-bind="required" /> <?php _e( 'This is a required field', 'happyforms' ); ?>
|
49 |
+
</label>
|
50 |
+
</p>
|
51 |
+
<div class="options">
|
52 |
+
<ul></ul>
|
53 |
+
<h3><?php _e( 'Options', 'happyforms' ); ?></h3>
|
54 |
+
<p class="no-options"><?php _e( 'No options added yet. Add one by clicking the <i>Add option</i> link below.', 'happyforms' ); ?></p>
|
55 |
+
</div>
|
56 |
+
<p class="links">
|
57 |
+
<a href="#" class="show-all-options" style="display: none"><?php _e( 'Show all', 'happyforms' ); ?> <span></span> <?php _e( 'options', 'happyforms' ); ?></a>
|
58 |
+
<a href="#" class="add-option"><?php _e( 'Add option', 'happyforms' ); ?></a>
|
59 |
+
</p>
|
60 |
+
<?php include( happyforms_get_include_folder() . '/templates/customize-form-part-footer.php' ); ?>
|
61 |
+
</script>
|
62 |
+
<script type="text/template" id="customize-happyforms-select-item-template">
|
63 |
+
<li class="happyforms-part-widget happyforms-part-widget--sub" data-item-id="<%= item.id %>">
|
64 |
+
<label>
|
65 |
+
<?php _e( 'Label', 'happyforms' ); ?>
|
66 |
+
<input type="text" class="widefat" name="label" value="<%= item.label %>" data-option-attribute="label">
|
67 |
+
</label>
|
68 |
+
<label>
|
69 |
+
<input type="checkbox" name="is_default" value="1" class="default-option-switch"<% if (item.is_default == 1) { %> checked="checked"<% } %>> <?php _e( 'Make this option default', 'happyforms' ); ?>
|
70 |
+
</label>
|
71 |
+
<div class="option-actions">
|
72 |
+
<a href="#" class="delete-option"><?php _e( 'Delete', 'happyforms' ); ?></a>
|
73 |
+
</div>
|
74 |
+
</li>
|
75 |
+
</script>
|
inc/templates/parts/customize-single-line-text.php
ADDED
@@ -0,0 +1,58 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<script type="text/template" id="customize-happyforms-single-line-text-template">
|
2 |
+
<?php include( happyforms_get_include_folder() . '/templates/customize-form-part-header.php' ); ?>
|
3 |
+
<p>
|
4 |
+
<label for="<%= instance.id %>_title"><?php _e( 'Title', 'happyforms' ); ?></label>
|
5 |
+
<input type="text" id="<%= instance.id %>_title" class="widefat title" value="<%= instance.label %>" data-bind="label" />
|
6 |
+
</p>
|
7 |
+
<p>
|
8 |
+
<label for="<%= instance.id %>_label_placement"><?php _e( 'Title placement', 'happyforms' ); ?></label>
|
9 |
+
<select id="<%= instance.id %>_label_placement" data-bind="label_placement">
|
10 |
+
<option value="above"<%= (instance.label_placement == 'above') ? ' selected' : '' %>><?php _e( 'Above', 'happyforms' ); ?></option>
|
11 |
+
<option value="left"<%= (instance.label_placement == 'left') ? ' selected' : '' %>><?php _e( 'Left', 'happyforms' ); ?></option>
|
12 |
+
<option value="below"<%= (instance.label_placement == 'below') ? ' selected' : '' %>><?php _e( 'Below', 'happyforms' ); ?></option>
|
13 |
+
<option value="inside"<%= (instance.label_placement == 'inside') ? ' selected' : '' %>><?php _e( 'Inside input', 'happyforms' ); ?></option>
|
14 |
+
<option value="as_placeholder"<%= (instance.label_placement == 'as_placeholder') ? ' selected' : '' %>><?php _e( 'Display as placeholder', 'happyforms' ); ?></option>
|
15 |
+
</select>
|
16 |
+
</p>
|
17 |
+
<p class="label_placement-options" style="display: none">
|
18 |
+
<label>
|
19 |
+
<input type="checkbox" class="checkbox apply-all-check" value="" data-apply-to="label_placement" /> <?php _e( 'Apply to all parts', 'happyforms' ); ?>
|
20 |
+
</label>
|
21 |
+
</p>
|
22 |
+
<p>
|
23 |
+
<label for="<%= instance.id %>_description"><?php _e( 'Description', 'happyforms' ); ?></label>
|
24 |
+
<textarea id="<%= instance.id %>_description" data-bind="description"><%= instance.description %></textarea>
|
25 |
+
</p>
|
26 |
+
<p class="tooltip-description-wrap" style="display: <%= (instance.description != '') ? 'block' : 'none' %>">
|
27 |
+
<label>
|
28 |
+
<input type="checkbox" class="checkbox" value="1" <% if ( instance.tooltip_description ) { %>checked="checked"<% } %> data-bind="tooltip_description" /> <?php _e( 'Show description in a tooltip', 'happyforms' ); ?>
|
29 |
+
</label>
|
30 |
+
</p>
|
31 |
+
<p>
|
32 |
+
<label for="<%= instance.id %>_placeholder"><?php _e( 'Placeholder', 'happyforms' ); ?></label>
|
33 |
+
<input type="text" id="<%= instance.id %>_placeholder" class="widefat title" value="<%= instance.placeholder %>" data-bind="placeholder" />
|
34 |
+
</p>
|
35 |
+
<p>
|
36 |
+
<label for="<%= instance.id %>_width"><?php _e( 'Width', 'happyforms' ); ?></label>
|
37 |
+
<select id="<%= instance.id %>_width" name="width" data-bind="width" class="widefat">
|
38 |
+
<option value="full"<%= (instance.width == 'full') ? ' selected' : '' %>><?php _e( 'Full', 'happyforms' ); ?></option>
|
39 |
+
<option value="half"<%= (instance.width == 'half') ? ' selected' : '' %>><?php _e( 'Half', 'happyforms' ); ?></option>
|
40 |
+
<option value="third"<%= (instance.width == 'third') ? ' selected' : '' %>><?php _e( 'One third', 'happyforms' ); ?></option>
|
41 |
+
</select>
|
42 |
+
</p>
|
43 |
+
<p class="width-options" style="display: none">
|
44 |
+
<label>
|
45 |
+
<input type="checkbox" class="checkbox apply-all-check" value="" data-apply-to="width" /> <?php _e( 'Apply to all parts', 'happyforms' ); ?>
|
46 |
+
</label>
|
47 |
+
</p>
|
48 |
+
<p>
|
49 |
+
<label for="<%= instance.id %>_css_class"><?php _e( 'Custom CSS class', 'happyforms' ); ?></label>
|
50 |
+
<input type="text" id="<%= instance.id %>_css_class" class="widefat title" value="<%= instance.css_class %>" data-bind="css_class" />
|
51 |
+
</p>
|
52 |
+
<p>
|
53 |
+
<label>
|
54 |
+
<input type="checkbox" class="checkbox" value="1" <% if ( instance.required ) { %>checked="checked"<% } %> data-bind="required" /> <?php _e( 'This is a required field', 'happyforms' ); ?>
|
55 |
+
</label>
|
56 |
+
</p>
|
57 |
+
<?php include( happyforms_get_include_folder() . '/templates/customize-form-part-footer.php' ); ?>
|
58 |
+
</script>
|
inc/templates/parts/customize-title.php
ADDED
@@ -0,0 +1,52 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<script type="text/template" id="happyforms-customize-title-template">
|
2 |
+
<?php include( happyforms_get_include_folder() . '/templates/customize-form-part-header.php' ); ?>
|
3 |
+
<p>
|
4 |
+
<label for="<%= instance.id %>_title"><?php _e( 'Title', 'happyforms' ); ?></label>
|
5 |
+
<input type="text" id="<%= instance.id %>_title" class="widefat title" value="<%= instance.label %>" data-bind="label" />
|
6 |
+
</p>
|
7 |
+
<p>
|
8 |
+
<label for="<%= instance.id %>_label_placement"><?php _e( 'Title placement', 'happyforms' ); ?></label>
|
9 |
+
<select id="<%= instance.id %>_label_placement" data-bind="label_placement">
|
10 |
+
<option value="above"<%= (instance.label_placement == 'above') ? ' selected' : '' %>><?php _e( 'Above', 'happyforms' ); ?></option>
|
11 |
+
<option value="left"<%= (instance.label_placement == 'left') ? ' selected' : '' %>><?php _e( 'Left', 'happyforms' ); ?></option>
|
12 |
+
<option value="below"<%= (instance.label_placement == 'below') ? ' selected' : '' %>><?php _e( 'Below', 'happyforms' ); ?></option>
|
13 |
+
</select>
|
14 |
+
</p>
|
15 |
+
<p class="label_placement-options" style="display: none">
|
16 |
+
<label>
|
17 |
+
<input type="checkbox" class="checkbox apply-all-check" value="" data-apply-to="label_placement" /> <?php _e( 'Apply to all parts', 'happyforms' ); ?>
|
18 |
+
</label>
|
19 |
+
</p>
|
20 |
+
<p>
|
21 |
+
<label for="<%= instance.id %>_description"><?php _e( 'Description', 'happyforms' ); ?></label>
|
22 |
+
<textarea id="<%= instance.id %>_description" data-bind="description"><%= instance.description %></textarea>
|
23 |
+
</p>
|
24 |
+
<p class="tooltip-description-wrap" style="display: <%= (instance.description != '') ? 'block' : 'none' %>">
|
25 |
+
<label>
|
26 |
+
<input type="checkbox" class="checkbox" value="1" <% if ( instance.tooltip_description ) { %>checked="checked"<% } %> data-bind="tooltip_description" /> <?php _e( 'Show description in a tooltip', 'happyforms' ); ?>
|
27 |
+
</label>
|
28 |
+
</p>
|
29 |
+
<p>
|
30 |
+
<label for="<%= instance.id %>_width"><?php _e( 'Width', 'happyforms' ); ?></label>
|
31 |
+
<select id="<%= instance.id %>_width" name="width" data-bind="width" class="widefat">
|
32 |
+
<option value="full"<%= (instance.width == 'full') ? ' selected' : '' %>><?php _e( 'Full', 'happyforms' ); ?></option>
|
33 |
+
<option value="half"<%= (instance.width == 'half') ? ' selected' : '' %>><?php _e( 'Half', 'happyforms' ); ?></option>
|
34 |
+
<option value="third"<%= (instance.width == 'third') ? ' selected' : '' %>><?php _e( 'One third', 'happyforms' ); ?></option>
|
35 |
+
</select>
|
36 |
+
</p>
|
37 |
+
<p class="width-options" style="display: none">
|
38 |
+
<label>
|
39 |
+
<input type="checkbox" class="checkbox apply-all-check" value="" data-apply-to="width" /> <?php _e( 'Apply to all parts', 'happyforms' ); ?>
|
40 |
+
</label>
|
41 |
+
</p>
|
42 |
+
<p>
|
43 |
+
<label for="<%= instance.id %>_css_class"><?php _e( 'Custom CSS class', 'happyforms' ); ?></label>
|
44 |
+
<input type="text" id="<%= instance.id %>_css_class" class="widefat title" value="<%= instance.css_class %>" data-bind="css_class" />
|
45 |
+
</p>
|
46 |
+
<p>
|
47 |
+
<label>
|
48 |
+
<input type="checkbox" class="checkbox" value="1" <% if ( instance.required ) { %>checked="checked"<% } %> data-bind="required" /> <?php _e( 'This is a required field', 'happyforms' ); ?>
|
49 |
+
</label>
|
50 |
+
</p>
|
51 |
+
<?php include( happyforms_get_include_folder() . '/templates/customize-form-part-footer.php' ); ?>
|
52 |
+
</script>
|
inc/templates/parts/customize-website-url.php
ADDED
@@ -0,0 +1,58 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<script type="text/template" id="customize-happyforms-website-url-template">
|
2 |
+
<?php include( happyforms_get_include_folder() . '/templates/customize-form-part-header.php' ); ?>
|
3 |
+
<p>
|
4 |
+
<label for="<%= instance.id %>_title"><?php _e( 'Title', 'happyforms' ); ?></label>
|
5 |
+
<input type="text" id="<%= instance.id %>_title" class="widefat title" value="<%= instance.label %>" data-bind="label" />
|
6 |
+
</p>
|
7 |
+
<p>
|
8 |
+
<label for="<%= instance.id %>_label_placement"><?php _e( 'Title placement', 'happyforms' ); ?></label>
|
9 |
+
<select id="<%= instance.id %>_label_placement" data-bind="label_placement">
|
10 |
+
<option value="above"<%= (instance.label_placement == 'above') ? ' selected' : '' %>><?php _e( 'Above', 'happyforms' ); ?></option>
|
11 |
+
<option value="left"<%= (instance.label_placement == 'left') ? ' selected' : '' %>><?php _e( 'Left', 'happyforms' ); ?></option>
|
12 |
+
<option value="below"<%= (instance.label_placement == 'below') ? ' selected' : '' %>><?php _e( 'Below', 'happyforms' ); ?></option>
|
13 |
+
<option value="inside"<%= (instance.label_placement == 'inside') ? ' selected' : '' %>><?php _e( 'Inside input', 'happyforms' ); ?></option>
|
14 |
+
<option value="as_placeholder"<%= (instance.label_placement == 'as_placeholder') ? ' selected' : '' %>><?php _e( 'Display as placeholder', 'happyforms' ); ?></option>
|
15 |
+
</select>
|
16 |
+
</p>
|
17 |
+
<p class="label_placement-options" style="display: none">
|
18 |
+
<label>
|
19 |
+
<input type="checkbox" class="checkbox apply-all-check" value="" data-apply-to="label_placement" /> <?php _e( 'Apply to all parts', 'happyforms' ); ?>
|
20 |
+
</label>
|
21 |
+
</p>
|
22 |
+
<p>
|
23 |
+
<label for="<%= instance.id %>_description"><?php _e( 'Description', 'happyforms' ); ?></label>
|
24 |
+
<textarea id="<%= instance.id %>_description" data-bind="description"><%= instance.description %></textarea>
|
25 |
+
</p>
|
26 |
+
<p class="tooltip-description-wrap" style="display: <%= (instance.description != '') ? 'block' : 'none' %>">
|
27 |
+
<label>
|
28 |
+
<input type="checkbox" class="checkbox" value="1" <% if ( instance.tooltip_description ) { %>checked="checked"<% } %> data-bind="tooltip_description" /> <?php _e( 'Show description in a tooltip', 'happyforms' ); ?>
|
29 |
+
</label>
|
30 |
+
</p>
|
31 |
+
<p>
|
32 |
+
<label for="<%= instance.id %>_placeholder"><?php _e( 'Placeholder', 'happyforms' ); ?></label>
|
33 |
+
<input type="text" id="<%= instance.id %>_placeholder" class="widefat title" value="<%= instance.placeholder %>" data-bind="placeholder" />
|
34 |
+
</p>
|
35 |
+
<p>
|
36 |
+
<label for="<%= instance.id %>_width"><?php _e( 'Width', 'happyforms' ); ?></label>
|
37 |
+
<select id="<%= instance.id %>_width" name="width" data-bind="width" class="widefat">
|
38 |
+
<option value="full"<%= (instance.width == 'full') ? ' selected' : '' %>><?php _e( 'Full', 'happyforms' ); ?></option>
|
39 |
+
<option value="half"<%= (instance.width == 'half') ? ' selected' : '' %>><?php _e( 'Half', 'happyforms' ); ?></option>
|
40 |
+
<option value="third"<%= (instance.width == 'third') ? ' selected' : '' %>><?php _e( 'One third', 'happyforms' ); ?></option>
|
41 |
+
</select>
|
42 |
+
</p>
|
43 |
+
<p class="width-options" style="display: none">
|
44 |
+
<label>
|
45 |
+
<input type="checkbox" class="checkbox apply-all-check" value="" data-apply-to="width" /> <?php _e( 'Apply to all parts', 'happyforms' ); ?>
|
46 |
+
</label>
|
47 |
+
</p>
|
48 |
+
<p>
|
49 |
+
<label for="<%= instance.id %>_css_class"><?php _e( 'Custom CSS class', 'happyforms' ); ?></label>
|
50 |
+
<input type="text" id="<%= instance.id %>_css_class" class="widefat title" value="<%= instance.css_class %>" data-bind="css_class" />
|
51 |
+
</p>
|
52 |
+
<p>
|
53 |
+
<label>
|
54 |
+
<input type="checkbox" class="checkbox" value="1" <% if ( instance.required ) { %>checked="checked"<% } %> data-bind="required" /> <?php _e( 'This is a required field', 'happyforms' ); ?>
|
55 |
+
</label>
|
56 |
+
</p>
|
57 |
+
<?php include( happyforms_get_include_folder() . '/templates/customize-form-part-footer.php' ); ?>
|
58 |
+
</script>
|
inc/templates/parts/frontend-address.php
ADDED
@@ -0,0 +1,48 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div class="<?php happyforms_the_part_class( $part, $form ); ?>" id="<?php happyforms_the_part_id( $part, $form ); ?>-part" <?php happyforms_the_part_data_attributes( $part, $form ); ?>>
|
2 |
+
<div class="happyforms-part-wrap">
|
3 |
+
<?php if ( 'as_placeholder' !== $part['label_placement'] ) : ?>
|
4 |
+
<?php happyforms_the_part_label( $part, $form ); ?>
|
5 |
+
<?php endif; ?>
|
6 |
+
<?php if ( 'happyforms-form--part-error-notices-above' === happyforms_get_form_property( $form, 'part_error_notices_location' ) ) : ?>
|
7 |
+
<?php happyforms_message_notices( $form, happyforms_get_part_name( $part, $form ) ); ?>
|
8 |
+
<?php endif; ?>
|
9 |
+
<?php if ( 'simple' === $part['mode'] ) : ?>
|
10 |
+
<div class="happyforms-part-el-wrap">
|
11 |
+
<div class="happyforms-part__el">
|
12 |
+
<input name="<?php happyforms_the_part_name( $part, $form ); ?>[full]" class="happyforms-part__el--text-input happyforms-part__el--address" type="text" placeholder="<?php echo esc_attr( $part['placeholder'] ); ?>" <?php if ( 1 === $part['required'] ) : ?>required aria-required="true"<?php endif; ?> />
|
13 |
+
</div>
|
14 |
+
</div>
|
15 |
+
<?php elseif ( 'autocomplete' === $part['mode'] ) : ?>
|
16 |
+
<div class="happyforms-part-el-wrap">
|
17 |
+
<div class="happyforms-part__el">
|
18 |
+
<input name="<?php happyforms_the_part_name( $part, $form ); ?>[full]" class="happyforms-part__el--text-input happyforms-part__el--address-autocomplete" type="text" placeholder="<?php echo esc_attr( $part['placeholder'] ); ?>" <?php if ( 1 === $part['required'] ) : ?>required aria-required="true"<?php endif; ?> autocomplete="off" />
|
19 |
+
<div class="happyforms-part__el--address--results happyforms-part__el--address--results-google"></div>
|
20 |
+
</div>
|
21 |
+
</div>
|
22 |
+
<?php elseif ( 'country' === $part['mode'] ) : ?>
|
23 |
+
<div class="happyforms-part-el-wrap">
|
24 |
+
<div class="happyforms-part__el">
|
25 |
+
<input name="<?php happyforms_the_part_name( $part, $form ); ?>[country]" class="happyforms-part__el--text-input happyforms-part__el--address-autocomplete" type="text" placeholder="<?php _e( 'Country', 'happyforms' ); ?>" <?php if ( 1 === $part['required'] ) : ?>required aria-required="true"<?php endif; ?> autocomplete="off" />
|
26 |
+
<div class="happyforms-part__el--address--results happyforms-part__el--address--results-country"></div>
|
27 |
+
</div>
|
28 |
+
</div>
|
29 |
+
<?php else: ?>
|
30 |
+
<div class="happyforms-part-el-wrap">
|
31 |
+
<div class="happyforms-part__el">
|
32 |
+
<input name="<?php happyforms_the_part_name( $part, $form ); ?>[country]" class="happyforms-part__el--text-input happyforms-part__el--address-autocomplete" type="text" placeholder="<?php _e( 'Country', 'happyforms' ); ?>" <?php if ( 1 === $part['required'] ) : ?>required aria-required="true"<?php endif; ?> autocomplete="off" />
|
33 |
+
<div class="happyforms-part__el--address--results happyforms-part__el--address--results-country"></div>
|
34 |
+
</div>
|
35 |
+
<div class="happyforms-part__el">
|
36 |
+
<input name="<?php happyforms_the_part_name( $part, $form ); ?>[city]"class="happyforms-part__el happyforms-part__el--text-input happyforms-part__el--address-city" type="text" placeholder="<?php _e( 'City', 'happyforms' ); ?>" <?php if ( 1 === $part['required'] ) : ?>required aria-required="true"<?php endif; ?> />
|
37 |
+
</div>
|
38 |
+
</div>
|
39 |
+
<?php endif; ?>
|
40 |
+
<?php if ( 'inside' === $part['label_placement'] ) : ?>
|
41 |
+
<?php happyforms_the_part_label( $part, $form ); ?>
|
42 |
+
<?php endif; ?>
|
43 |
+
<?php happyforms_print_part_description( $part ); ?>
|
44 |
+
<?php if ( 'happyforms-form--part-error-notices-below' === happyforms_get_form_property( $form, 'part_error_notices_location' ) || empty( happyforms_get_form_property( $form, 'part_error_notices_location' ) ) ) : ?>
|
45 |
+
<?php happyforms_message_notices( $form, happyforms_get_part_name( $part, $form ) ); ?>
|
46 |
+
<?php endif; ?>
|
47 |
+
</div>
|
48 |
+
</div>
|
inc/templates/parts/frontend-checkbox.php
ADDED
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div class="<?php happyforms_the_part_class( $part, $form ); ?>" id="<?php happyforms_the_part_id( $part, $form ); ?>-part" <?php happyforms_the_part_data_attributes( $part, $form ); ?>>
|
2 |
+
<div class="happyforms-part-wrap">
|
3 |
+
<?php happyforms_the_part_label( $part, $form ); ?>
|
4 |
+
<?php if ( 'happyforms-form--part-error-notices-above' === happyforms_get_form_property( $form, 'part_error_notices_location' ) ) : ?>
|
5 |
+
<?php happyforms_message_notices( $form, happyforms_get_part_name( $part, $form ) ); ?>
|
6 |
+
<?php endif; ?>
|
7 |
+
<div class="happyforms-part__el">
|
8 |
+
<?php foreach( $part['options'] as $option ) : ?>
|
9 |
+
<label class="option-label" id="<?php echo esc_attr( $option['id'] ); ?>">
|
10 |
+
<input type="checkbox" class="happyforms-visuallyhidden" name="<?php happyforms_the_part_name( $part, $form ); ?>[]" value="<?php echo esc_attr( $option['label'] ); ?>"<?php if ( $option['is_default'] == 1 ) : ?> checked<?php endif; ?>>
|
11 |
+
<span class="checkmark"></span>
|
12 |
+
<span class="label"><?php echo esc_attr( $option['label'] ); ?></span>
|
13 |
+
</label>
|
14 |
+
<?php endforeach; ?>
|
15 |
+
</div>
|
16 |
+
<?php happyforms_print_part_description( $part ); ?>
|
17 |
+
<?php if ( 'happyforms-form--part-error-notices-below' === happyforms_get_form_property( $form, 'part_error_notices_location' ) || empty( happyforms_get_form_property( $form, 'part_error_notices_location' ) ) ) : ?>
|
18 |
+
<?php happyforms_message_notices( $form, happyforms_get_part_name( $part, $form ) ); ?>
|
19 |
+
<?php endif; ?>
|
20 |
+
</div>
|
21 |
+
</div>
|
inc/templates/parts/frontend-date.php
ADDED
@@ -0,0 +1,92 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div class="<?php happyforms_the_part_class( $part, $form ); ?>" id="<?php happyforms_the_part_id( $part, $form ); ?>-part" <?php happyforms_the_part_data_attributes( $part, $form ); ?>>
|
2 |
+
<div class="happyforms-part-wrap">
|
3 |
+
<?php if ( 'inside' !== $part['label_placement'] ) : ?>
|
4 |
+
<?php happyforms_the_part_label( $part, $form ); ?>
|
5 |
+
<?php endif; ?>
|
6 |
+
<?php if ( 'happyforms-form--part-error-notices-above' === happyforms_get_form_property( $form, 'part_error_notices_location' ) ) : ?>
|
7 |
+
<?php happyforms_message_notices( $form, happyforms_get_part_name( $part, $form ) ); ?>
|
8 |
+
<?php endif; ?>
|
9 |
+
<div class="happyforms-part__el">
|
10 |
+
<?php if ( $part['date_type'] === 'datetime' || $part['date_type'] === 'date' ) : ?>
|
11 |
+
<div class="happyforms-part__select-wrap happyforms-part-date__date-input">
|
12 |
+
<select name="<?php happyforms_the_part_name( $part, $form ); ?>[month]"<?php if ( 1 === $part['required'] ) : ?> required aria-required="true"<?php endif; ?>>
|
13 |
+
<option value=""><?php _e( 'Month', 'happyforms' ); ?></option>
|
14 |
+
<?php for ( $i = 1; $i <= 12; $i++ ) : ?>
|
15 |
+
<option value="<?php echo $i; ?>"><?php echo date( 'F', mktime( 0, 0, 0, $i) ); ?></option>
|
16 |
+
<?php endfor; ?>
|
17 |
+
</select>
|
18 |
+
</div>
|
19 |
+
<div class="happyforms-part__select-wrap happyforms-part-date__date-input">
|
20 |
+
<select name="<?php happyforms_the_part_name( $part, $form ); ?>[day]"<?php if ( 1 === $part['required'] ) : ?> required aria-required="true"<?php endif; ?>>
|
21 |
+
<option value=""><?php _e( 'Day', 'happyforms' ); ?></option>
|
22 |
+
<?php for ( $i = 1; $i <= 31; $i++ ) : ?>
|
23 |
+
<option value="<?php echo $i; ?>"><?php echo $i; ?></option>
|
24 |
+
<?php endfor; ?>
|
25 |
+
</select>
|
26 |
+
</div>
|
27 |
+
<div class="happyforms-part__select-wrap happyforms-part-date__date-input">
|
28 |
+
<select name="<?php happyforms_the_part_name( $part, $form ); ?>[year]"<?php if ( 1 === $part['required'] ) : ?> required aria-required="true"<?php endif; ?>>
|
29 |
+
<option value=""><?php _e( 'Year', 'happyforms' ); ?></option>
|
30 |
+
<?php
|
31 |
+
$year_cutoff = 1910;
|
32 |
+
$year_current = date('Y');
|
33 |
+
|
34 |
+
for ( $i = $year_current; $i >= $year_cutoff; $i-- ) :
|
35 |
+
?>
|
36 |
+
<option value="<?php echo $i; ?>"><?php echo $i; ?></option>
|
37 |
+
<?php
|
38 |
+
endfor;
|
39 |
+
?>
|
40 |
+
</select>
|
41 |
+
</div>
|
42 |
+
<?php endif; ?>
|
43 |
+
<?php if ( $part['date_type'] === 'datetime' || $part['date_type'] === 'time' ) : ?>
|
44 |
+
<div class="happyforms-part__select-wrap happyforms-part-date__time-input">
|
45 |
+
<select name="<?php happyforms_the_part_name( $part, $form ); ?>[hour]"<?php if ( 1 === $part['required'] ) : ?> required aria-required="true"<?php endif; ?>>
|
46 |
+
<option value=""><?php _e( 'Hour', 'happyforms' ); ?></option>
|
47 |
+
<?php
|
48 |
+
if ( 24 === intval( $part['time_format'] ) ) {
|
49 |
+
$i_min = 0;
|
50 |
+
$i_max = 24;
|
51 |
+
} else {
|
52 |
+
$i_min = 1;
|
53 |
+
$i_max = 13;
|
54 |
+
}
|
55 |
+
|
56 |
+
for ( $i = $i_min; $i < $i_max; $i++ ) : ?>
|
57 |
+
<option value="<?php echo $i; ?>"><?php echo $i; ?></option>
|
58 |
+
<?php endfor; ?>
|
59 |
+
</select>
|
60 |
+
</div>
|
61 |
+
<div class="happyforms-part__select-wrap happyforms-part-date__time-input">
|
62 |
+
<select name="<?php happyforms_the_part_name( $part, $form ); ?>[minute]"<?php if ( 1 === $part['required'] ) : ?> required aria-required="true"<?php endif; ?>>
|
63 |
+
<option value=""><?php _e( 'Minute', 'happyforms' ); ?></option>
|
64 |
+
<?php
|
65 |
+
for ( $i = 0; $i < 60; $i++ ) :
|
66 |
+
?>
|
67 |
+
<option value="<?php echo $i; ?>"><?php echo $i; ?></option>
|
68 |
+
<?php
|
69 |
+
endfor;
|
70 |
+
?>
|
71 |
+
</select>
|
72 |
+
</div>
|
73 |
+
<?php if ( 12 == intval( $part['time_format'] ) ) : ?>
|
74 |
+
<div class="happyforms-part__select-wrap happyforms-part-date__time-input happyforms-part-date__time-input--period">
|
75 |
+
<select name="<?php happyforms_the_part_name( $part, $form ); ?>[period]"<?php if ( 1 === $part['required'] ) : ?> required aria-required="true"<?php endif; ?>>
|
76 |
+
<option value=""><?php _e( 'Period', 'happyforms' ); ?></option>
|
77 |
+
<option value="AM"><?php _e( 'AM', 'happyforms' ); ?></option>
|
78 |
+
<option value="PM"><?php _e( 'PM', 'happyforms' ); ?></option>
|
79 |
+
</select>
|
80 |
+
</div>
|
81 |
+
<?php endif; ?>
|
82 |
+
<?php endif; ?>
|
83 |
+
</div>
|
84 |
+
<?php if ( 'inside' === $part['label_placement'] ) : ?>
|
85 |
+
<?php happyforms_the_part_label( $part, $form ); ?>
|
86 |
+
<?php endif; ?>
|
87 |
+
<?php happyforms_print_part_description( $part ); ?>
|
88 |
+
<?php if ( 'happyforms-form--part-error-notices-below' === happyforms_get_form_property( $form, 'part_error_notices_location' ) || empty( happyforms_get_form_property( $form, 'part_error_notices_location' ) ) ) : ?>
|
89 |
+
<?php happyforms_message_notices( $form, happyforms_get_part_name( $part, $form ) ); ?>
|
90 |
+
<?php endif; ?>
|
91 |
+
</div>
|
92 |
+
</div>
|
inc/templates/parts/frontend-email.php
ADDED
@@ -0,0 +1,40 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div class="<?php happyforms_the_part_class( $part, $form ); ?>" id="<?php happyforms_the_part_id( $part, $form ); ?>-part" <?php happyforms_the_part_data_attributes( $part, $form ); ?>>
|
2 |
+
<div class="happyforms-part-wrap">
|
3 |
+
<?php if ( 'as_placeholder' !== $part['label_placement'] ) : ?>
|
4 |
+
<?php happyforms_the_part_label( $part, $form ); ?>
|
5 |
+
<?php endif; ?>
|
6 |
+
<?php if ( 'happyforms-form--part-error-notices-above' === happyforms_get_form_property( $form, 'part_error_notices_location' ) ) : ?>
|
7 |
+
<?php happyforms_message_notices( $form, happyforms_get_part_name( $part, $form ) ); ?>
|
8 |
+
<?php endif; ?>
|
9 |
+
<input type="email" id="<?php happyforms_the_part_id( $part, $form ); ?>" name="<?php happyforms_the_part_name( $part, $form ); ?>" placeholder="<?php echo esc_attr( $part['placeholder'] ); ?>" class="happyforms-part__el happyforms-part__el--text-input" <?php if ( 1 === $part['required'] ) : ?> required aria-required="true"<?php endif; ?> />
|
10 |
+
<?php if ( 'as_placeholder' === $part['label_placement'] ) : ?>
|
11 |
+
<?php happyforms_the_part_label( $part, $form ); ?>
|
12 |
+
<?php endif; ?>
|
13 |
+
<?php happyforms_print_part_description( $part ); ?>
|
14 |
+
<?php if ( 'happyforms-form--part-error-notices-below' === happyforms_get_form_property( $form, 'part_error_notices_location' ) || empty( happyforms_get_form_property( $form, 'part_error_notices_location' ) ) ) : ?>
|
15 |
+
<?php happyforms_message_notices( $form, happyforms_get_part_name( $part, $form ) ); ?>
|
16 |
+
<?php endif; ?>
|
17 |
+
</div>
|
18 |
+
<?php if ( 1 === intval( $part['confirmation_field'] ) ) : ?>
|
19 |
+
<div class="happyforms-part-wrap happyforms-part-wrap--confirmation" id="<?php happyforms_the_part_id( $part, $form ); ?>-part_confirmation">
|
20 |
+
<div class="happyforms-message-notices" style="display: none">
|
21 |
+
<div class="happyforms-message-notice error">
|
22 |
+
<h2><?php _e( 'Fields do not match.', 'happyforms' ); ?></h2>
|
23 |
+
</div>
|
24 |
+
</div>
|
25 |
+
<?php if ( 'as_placeholder' !== $part['label_placement'] ) : ?>
|
26 |
+
<label for="<?php happyforms_the_part_id( $part, $form ); ?>_confirmation" class="happyforms-part__label happyforms-part__label--confirmation">
|
27 |
+
<span class="label"><?php echo esc_html( $part['confirmation_field_label'] ); ?></span>
|
28 |
+
<span class="happyforms-required"><?php echo happyforms_get_form_property( $form, 'hf_style_required_text' ); ?></span>
|
29 |
+
</label>
|
30 |
+
<?php endif; ?>
|
31 |
+
<input type="email" id="<?php happyforms_the_part_id( $part, $form ); ?>_confirmation" name="<?php happyforms_the_part_name( $part, $form ); ?>_confirmation" class="happyforms-part__el happyforms-part__el--text-input happyforms-confirmation-input" data-confirmation-of="<?php echo esc_attr( $part['id'] ); ?>" <?php if ( 1 === $part['required'] ) : ?> required aria-required="true"<?php endif; ?> />
|
32 |
+
<?php if ( 'as_placeholder' === $part['label_placement'] ) : ?>
|
33 |
+
<label for="<?php happyforms_the_part_id( $part, $form ); ?>_confirmation" class="happyforms-part__label happyforms-part__label--confirmation">
|
34 |
+
<span class="label"><?php echo esc_html( $part['confirmation_field_label'] ); ?></span>
|
35 |
+
<span class="happyforms-required"><?php echo happyforms_get_form_property( $form, 'hf_style_required_text' ); ?></span>
|
36 |
+
</label>
|
37 |
+
<?php endif; ?>
|
38 |
+
</div>
|
39 |
+
<?php endif; ?>
|
40 |
+
</div>
|
inc/templates/parts/frontend-legal.php
ADDED
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div class="<?php happyforms_the_part_class( $part, $form ); ?>" id="<?php happyforms_the_part_id( $part, $form ); ?>-part" <?php happyforms_the_part_data_attributes( $part, $form ); ?>>
|
2 |
+
<div class="happyforms-part-wrap">
|
3 |
+
<div class="happyforms-part__el">
|
4 |
+
<label>
|
5 |
+
<input id="<?php happyforms_the_part_id( $part, $form ); ?>" type="checkbox" name="<?php happyforms_the_part_name( $part, $form ); ?>" value="yes" required aria-required="true" /> <span><?php echo $part['legal_text']; ?></span>
|
6 |
+
</label>
|
7 |
+
</div>
|
8 |
+
</div>
|
9 |
+
<?php happyforms_message_notices( $form, happyforms_get_part_name( $part, $form ) ); ?>
|
10 |
+
</div>
|
inc/templates/parts/frontend-multi-line-text.php
ADDED
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div class="<?php happyforms_the_part_class( $part, $form ); ?>" id="<?php happyforms_the_part_id( $part, $form ); ?>-part" <?php happyforms_the_part_data_attributes( $part, $form ); ?>>
|
2 |
+
<div class="happyforms-part-wrap">
|
3 |
+
<?php if ( 'as_placeholder' !== $part['label_placement'] ) : ?>
|
4 |
+
<?php happyforms_the_part_label( $part, $form ); ?>
|
5 |
+
<?php endif; ?>
|
6 |
+
<?php if ( 'happyforms-form--part-error-notices-above' === happyforms_get_form_property( $form, 'part_error_notices_location' ) ) : ?>
|
7 |
+
<?php happyforms_message_notices( $form, happyforms_get_part_name( $part, $form ) ); ?>
|
8 |
+
<?php endif; ?>
|
9 |
+
<textarea id="<?php happyforms_the_part_id( $part, $form ); ?>" class="happyforms-part__el happyforms-part__el--text-input" name="<?php happyforms_the_part_name( $part, $form ); ?>" rows="5" placeholder="<?php echo esc_attr( $part['placeholder'] ); ?>"<?php if ( 1 === $part['required'] ) : ?> required aria-required="true"<?php endif; ?>></textarea>
|
10 |
+
<?php if ( 'as_placeholder' === $part['label_placement'] ) : ?>
|
11 |
+
<?php happyforms_the_part_label( $part, $form ); ?>
|
12 |
+
<?php endif; ?>
|
13 |
+
<?php happyforms_print_part_description( $part ); ?>
|
14 |
+
<?php if ( 'happyforms-form--part-error-notices-below' === happyforms_get_form_property( $form, 'part_error_notices_location' ) || empty( happyforms_get_form_property( $form, 'part_error_notices_location' ) ) ) : ?>
|
15 |
+
<?php happyforms_message_notices( $form, happyforms_get_part_name( $part, $form ) ); ?>
|
16 |
+
<?php endif; ?>
|
17 |
+
</div>
|
18 |
+
</div>
|
inc/templates/parts/frontend-number.php
ADDED
@@ -0,0 +1,42 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div class="<?php happyforms_the_part_class( $part, $form ); ?>" id="<?php happyforms_the_part_id( $part, $form ); ?>-part" <?php happyforms_the_part_data_attributes( $part, $form ); ?>>
|
2 |
+
<div class="happyforms-part-wrap">
|
3 |
+
<?php if ( 'as_placeholder' !== $part['label_placement'] ) : ?>
|
4 |
+
<?php happyforms_the_part_label( $part, $form ); ?>
|
5 |
+
<?php endif; ?>
|
6 |
+
<?php if ( 'happyforms-form--part-error-notices-above' === happyforms_get_form_property( $form, 'part_error_notices_location' ) ) : ?>
|
7 |
+
<?php happyforms_message_notices( $form, happyforms_get_part_name( $part, $form ) ); ?>
|
8 |
+
<?php endif; ?>
|
9 |
+
<?php if ( ! $part['masked'] ) : ?>
|
10 |
+
<input id="<?php happyforms_the_part_id( $part, $form ); ?>" class="happyforms-part__el happyforms-part__el--text-input" type="number" name="<?php happyforms_the_part_name( $part, $form ); ?>" placeholder="<?php echo esc_attr( $part['placeholder'] ); ?>" min="<?php echo esc_attr( $part['min_value'] ); ?>" max="<?php echo esc_attr( $part['max_value'] ); ?>" value="<?php echo esc_attr( $part['min_value'] ); ?>" <?php if ( 1 === $part['required'] ) : ?>required aria-required="true"<?php endif; ?> />
|
11 |
+
<?php else: ?>
|
12 |
+
<input id="<?php happyforms_the_part_id( $part, $form ); ?>" class="happyforms-part__el happyforms-part__el--text-input happyforms-masked-input" type="text" name="<?php happyforms_the_part_name( $part, $form ); ?>" placeholder="<?php echo esc_attr( $part['placeholder'] ); ?>" <?php if ( 1 === $part['required'] ) : ?>required aria-required="true"<?php endif; ?> />
|
13 |
+
<?php endif; ?>
|
14 |
+
<?php if ( 'as_placeholder' === $part['label_placement'] ) : ?>
|
15 |
+
<?php happyforms_the_part_label( $part, $form ); ?>
|
16 |
+
<?php endif; ?>
|
17 |
+
<?php happyforms_print_part_description( $part ); ?>
|
18 |
+
<?php if ( 'happyforms-form--part-error-notices-below' === happyforms_get_form_property( $form, 'part_error_notices_location' ) || empty( happyforms_get_form_property( $form, 'part_error_notices_location' ) ) ) : ?>
|
19 |
+
<?php happyforms_message_notices( $form, happyforms_get_part_name( $part, $form ) ); ?>
|
20 |
+
<?php endif; ?>
|
21 |
+
</div>
|
22 |
+
<?php if ( 1 === intval( $part['confirmation_field'] ) ) : ?>
|
23 |
+
<div class="happyforms-part-wrap happyforms-part-wrap--confirmation" id="<?php happyforms_the_part_id( $part, $form ); ?>-part_confirmation">
|
24 |
+
<div class="happyforms-message-notices" style="display: none">
|
25 |
+
<div class="happyforms-message-notice error">
|
26 |
+
<h2><?php _e( 'Fields do not match.', 'happyforms' ); ?></h2>
|
27 |
+
</div>
|
28 |
+
</div>
|
29 |
+
<label for="<?php happyforms_the_part_id( $part, $form ); ?>_confirmation" class="happyforms-part__label happyforms-part__label--confirmation">
|
30 |
+
<span class="label"><?php echo esc_html( $part['confirmation_field_label'] ); ?></span>
|
31 |
+
<?php if ( 1 === intval( $part['required'] ) ) : ?>
|
32 |
+
<span class="happyforms-required"><?php echo happyforms_get_form_property( $form, 'hf_style_required_text' ); ?></span>
|
33 |
+
<?php endif; ?>
|
34 |
+
</label>
|
35 |
+
<?php if ( ! $part['masked'] ) : ?>
|
36 |
+
<input id="<?php happyforms_the_part_id( $part, $form ); ?>_confirmation" class="happyforms-part__el happyforms-part__el--text-input happyforms-confirmation-input" type="number" name="<?php happyforms_the_part_name( $part, $form ); ?>_confirmation" placeholder="<?php echo esc_attr( $part['placeholder'] ); ?>" min="<?php echo esc_attr( $part['min_value'] ); ?>" max="<?php echo esc_attr( $part['max_value'] ); ?>" value="<?php echo esc_attr( $part['min_value'] ); ?>" <?php if ( 1 === $part['required'] ) : ?>required aria-required="true"<?php endif; ?> />
|
37 |
+
<?php else: ?>
|
38 |
+
<input id="<?php happyforms_the_part_id( $part, $form ); ?>_confirmation" class="happyforms-part__el happyforms-part__el--text-input happyforms-masked-input happyforms-confirmation-input" type="text" name="<?php happyforms_the_part_name( $part, $form ); ?>_confirmation" placeholder="<?php echo esc_attr( $part['placeholder'] ); ?>" <?php if ( 1 === $part['required'] ) : ?>required aria-required="true"<?php endif; ?> />
|
39 |
+
<?php endif; ?>
|
40 |
+
</div>
|
41 |
+
<?php endif; ?>
|
42 |
+
</div>
|
inc/templates/parts/frontend-phone.php
ADDED
@@ -0,0 +1,34 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div class="<?php happyforms_the_part_class( $part, $form ); ?>" id="<?php happyforms_the_part_id( $part, $form ); ?>-part" <?php happyforms_the_part_data_attributes( $part, $form ); ?>>
|
2 |
+
<div class="happyforms-part-wrap">
|
3 |
+
<?php if ( 'as_placeholder' !== $part['label_placement'] ) : ?>
|
4 |
+
<?php happyforms_the_part_label( $part, $form ); ?>
|
5 |
+
<?php endif; ?>
|
6 |
+
<?php if ( 'happyforms-form--part-error-notices-above' === happyforms_get_form_property( $form, 'part_error_notices_location' ) ) : ?>
|
7 |
+
<?php happyforms_message_notices( $form, happyforms_get_part_name( $part, $form ) ); ?>
|
8 |
+
<?php endif; ?>
|
9 |
+
<input id="<?php happyforms_the_part_id( $part, $form ); ?>" type="text" name="<?php happyforms_the_part_name( $part, $form ); ?>" placeholder="<?php echo esc_attr( $part['placeholder'] ); ?>" <?php if ( 1 === $part['required'] ) : ?>required aria-required="true"<?php endif; ?> />
|
10 |
+
<?php if ( 'as_placeholder' === $part['label_placement'] ) : ?>
|
11 |
+
<?php happyforms_the_part_label( $part, $form ); ?>
|
12 |
+
<?php endif; ?>
|
13 |
+
<?php happyforms_print_part_description( $part ); ?>
|
14 |
+
<?php if ( 'happyforms-form--part-error-notices-below' === happyforms_get_form_property( $form, 'part_error_notices_location' ) || empty( happyforms_get_form_property( $form, 'part_error_notices_location' ) ) ) : ?>
|
15 |
+
<?php happyforms_message_notices( $form, happyforms_get_part_name( $part, $form ) ); ?>
|
16 |
+
<?php endif; ?>
|
17 |
+
</div>
|
18 |
+
<?php if ( 1 === intval( $part['confirmation_field'] ) ) : ?>
|
19 |
+
<div class="happyforms-part-wrap happyforms-part-wrap--confirmation" id="<?php happyforms_the_part_id( $part, $form ); ?>-part_confirmation">
|
20 |
+
<div class="happyforms-message-notices" style="display: none">
|
21 |
+
<div class="happyforms-message-notice error">
|
22 |
+
<h2><?php _e( 'Fields do not match.', 'happyforms' ); ?></h2>
|
23 |
+
</div>
|
24 |
+
</div>
|
25 |
+
<label for="<?php happyforms_the_part_id( $part, $form ); ?>_confirmation" class="happyforms-part__label happyforms-part__label--confirmation">
|
26 |
+
<span class="label"><?php echo esc_html( $part['confirmation_field_label'] ); ?></span>
|
27 |
+
<?php if ( 1 === intval( $part['required'] ) ) : ?>
|
28 |
+
<span class="happyforms-required"><?php echo happyforms_get_form_property( $form, 'hf_style_required_text' ); ?></span>
|
29 |
+
<?php endif; ?>
|
30 |
+
</label>
|
31 |
+
<input id="<?php happyforms_the_part_id( $part, $form ); ?>_confirmation" type="text" name="<?php happyforms_the_part_name( $part, $form ); ?>_confirmation" class="happyforms-confirmation-input" <?php if ( 1 === $part['required'] ) : ?>required aria-required="true"<?php endif; ?> />
|
32 |
+
</div>
|
33 |
+
<?php endif; ?>
|
34 |
+
</div>
|
inc/templates/parts/frontend-placeholder.php
ADDED
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div class="<?php happyforms_the_part_class( $part, $form ); ?>" id="<?php happyforms_the_part_id( $part, $form ); ?>-part" <?php happyforms_the_part_data_attributes( $part, $form ); ?>>
|
2 |
+
<div class="happyforms-part-wrap">
|
3 |
+
<?php happyforms_the_part_label( $part, $form ); ?>
|
4 |
+
<div class="happyforms-part__el"><?php echo $part['placeholder_text']; ?></div>
|
5 |
+
</div>
|
6 |
+
</div>
|
inc/templates/parts/frontend-radio.php
ADDED
@@ -0,0 +1,25 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div class="<?php happyforms_the_part_class( $part, $form ); ?>" id="<?php happyforms_the_part_id( $part, $form ); ?>-part" <?php happyforms_the_part_data_attributes( $part, $form ); ?>>
|
2 |
+
<div class="happyforms-part-wrap">
|
3 |
+
<?php happyforms_the_part_label( $part, $form ); ?>
|
4 |
+
<?php if ( 'happyforms-form--part-error-notices-above' === happyforms_get_form_property( $form, 'part_error_notices_location' ) ) : ?>
|
5 |
+
<?php happyforms_message_notices( $form, happyforms_get_part_name( $part, $form ) ); ?>
|
6 |
+
<?php endif; ?>
|
7 |
+
<div class="happyforms-part__el">
|
8 |
+
<?php foreach( $part['options'] as $option ) : ?>
|
9 |
+
<div class="happyforms-part__option happyforms-part-option" id="<?php echo esc_attr( $option['id'] ); ?>">
|
10 |
+
<label class="option-label">
|
11 |
+
<input type="radio" class="happyforms-visuallyhidden" name="<?php happyforms_the_part_name( $part, $form ); ?>" value="<?php echo esc_attr( $option['label'] ); ?>"<?php if ( $option['is_default'] == 1 ) : ?> checked<?php endif; ?>>
|
12 |
+
<span class="checkmark"></span>
|
13 |
+
<span class="border"></span>
|
14 |
+
<span class="label"><?php echo esc_attr( $option['label'] ); ?></span>
|
15 |
+
</label>
|
16 |
+
<span class="happyforms-part-option__description"><?php echo esc_attr( $option['description'] ); ?></span>
|
17 |
+
</div>
|
18 |
+
<?php endforeach; ?>
|
19 |
+
</div>
|
20 |
+
<?php happyforms_print_part_description( $part ); ?>
|
21 |
+
<?php if ( 'happyforms-form--part-error-notices-below' === happyforms_get_form_property( $form, 'part_error_notices_location' ) || empty( happyforms_get_form_property( $form, 'part_error_notices_location' ) ) ) : ?>
|
22 |
+
<?php happyforms_message_notices( $form, happyforms_get_part_name( $part, $form ) ); ?>
|
23 |
+
<?php endif; ?>
|
24 |
+
</div>
|
25 |
+
</div>
|
inc/templates/parts/frontend-rating.php
ADDED
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div class="<?php happyforms_the_part_class( $part, $form ); ?>" id="<?php happyforms_the_part_id( $part, $form ); ?>-part" <?php happyforms_the_part_data_attributes( $part, $form ); ?>>
|
2 |
+
<div class="happyforms-part-wrap">
|
3 |
+
<?php happyforms_the_part_label( $part, $form ); ?>
|
4 |
+
<div class="happyforms-part__el">
|
5 |
+
<input class="happyforms-visuallyhidden" type="radio" value="0" id="<?php echo esc_attr( $part['id'] ); ?>_0" name="<?php happyforms_the_part_name( $part, $form ); ?>" checked>
|
6 |
+
|
7 |
+
<?php for ( $i = 1; $i <= $part['stars_num']; $i++ ) { ?>
|
8 |
+
<input class="happyforms-visuallyhidden star_<?php echo esc_attr( $i ); ?>" type="radio" value="<?php echo esc_attr( $i ); ?>" id="<?php echo esc_attr( $part['id'] ); ?>_<?php echo esc_attr( $i ); ?>" name="<?php happyforms_the_part_name( $part, $form ); ?>">
|
9 |
+
<label class="happyforms-star__label" for="<?php echo esc_attr( $part['id'] ); ?>_<?php echo esc_attr( $i ); ?>">
|
10 |
+
<span class="happyforms-visuallyhidden"><?php echo esc_attr( $i ); ?> <?php _e( 'Stars', 'happyforms' ); ?></span>
|
11 |
+
<svg class="happyforms-star" viewBox="0 0 512 512" fill=""><path class="happyforms-star__star" d="M512 198.525l-176.89-25.704-79.11-160.291-79.108 160.291-176.892 25.704 128 124.769-30.216 176.176 158.216-83.179 158.216 83.179-30.217-176.176 128.001-124.769z"></path></svg>
|
12 |
+
</label>
|
13 |
+
<?php } ?>
|
14 |
+
</div>
|
15 |
+
<?php happyforms_print_part_description( $part ); ?>
|
16 |
+
<?php happyforms_message_notices( $form, happyforms_get_part_name( $part, $form ) ); ?>
|
17 |
+
</div>
|
18 |
+
</div>
|
inc/templates/parts/frontend-scale.php
ADDED
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div class="<?php happyforms_the_part_class( $part, $form ); ?>" id="<?php happyforms_the_part_id( $part, $form ); ?>-part" <?php happyforms_the_part_data_attributes( $part, $form ); ?>>
|
2 |
+
<div class="happyforms-part-wrap">
|
3 |
+
<?php happyforms_the_part_label( $part, $form ); ?>
|
4 |
+
<?php if ( 'happyforms-form--part-error-notices-above' === happyforms_get_form_property( $form, 'part_error_notices_location' ) ) : ?>
|
5 |
+
<?php happyforms_message_notices( $form, happyforms_get_part_name( $part, $form ) ); ?>
|
6 |
+
<?php endif; ?>
|
7 |
+
<div class="happyforms-part--scale__labels">
|
8 |
+
<span class="label-min"><?php echo $part['min_label']; ?></span>
|
9 |
+
<span class="label-max"><?php echo $part['max_label']; ?></span>
|
10 |
+
</div>
|
11 |
+
<input id="<?php happyforms_the_part_id( $part, $form ); ?>" type="range" name="<?php happyforms_the_part_name( $part, $form ); ?>" step="<?php echo esc_attr( $part['step'] ); ?>" class="happyforms-part__el happyforms-part__el--text-input"
|
12 |
+
<?php if ( 1 === $part['required'] ) : ?>required aria-required="true"<?php endif; ?>
|
13 |
+
min="<?php echo esc_attr( $part['min_value'] ); ?>" max="<?php echo esc_attr( $part['max_value'] ); ?>" value="<?php echo esc_attr( $part['default_value'] ); ?>"
|
14 |
+
/>
|
15 |
+
<?php happyforms_print_part_description( $part ); ?>
|
16 |
+
<output for="<?php happyforms_the_part_id( $part, $form ); ?>"><?php echo $part['default_value']; ?></output>
|
17 |
+
<?php if ( 'happyforms-form--part-error-notices-below' === happyforms_get_form_property( $form, 'part_error_notices_location' ) || empty( happyforms_get_form_property( $form, 'part_error_notices_location' ) ) ) : ?>
|
18 |
+
<?php happyforms_message_notices( $form, happyforms_get_part_name( $part, $form ) ); ?>
|
19 |
+
<?php endif; ?>
|
20 |
+
</div>
|
21 |
+
</div>
|
inc/templates/parts/frontend-select.php
ADDED
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div class="<?php happyforms_the_part_class( $part, $form ); ?>" id="<?php happyforms_the_part_id( $part, $form ); ?>-part" <?php happyforms_the_part_data_attributes( $part, $form ); ?>>
|
2 |
+
<div class="happyforms-part-wrap">
|
3 |
+
<?php happyforms_the_part_label( $part, $form ); ?>
|
4 |
+
<?php if ( 'happyforms-form--part-error-notices-above' === happyforms_get_form_property( $form, 'part_error_notices_location' ) ) : ?>
|
5 |
+
<?php happyforms_message_notices( $form, happyforms_get_part_name( $part, $form ) ); ?>
|
6 |
+
<?php endif; ?>
|
7 |
+
<div class="happyforms-part__select-wrap">
|
8 |
+
<select id="<?php happyforms_the_part_id( $part, $form ); ?>" name="<?php happyforms_the_part_name( $part, $form ); ?>" class="happyforms-part__el"<?php if ( 1 === $part['required'] ) : ?> required aria-required="true"<?php endif; ?>>
|
9 |
+
<?php foreach( $part['options'] as $option ) : ?>
|
10 |
+
<option id="<?php echo esc_attr( $option['id'] ); ?>" value="<?php echo esc_attr( $option['label'] ); ?>"<?php if ( $option['is_default'] == 1 ) : ?> selected<?php endif; ?>><?php echo esc_attr( $option['label'] ); ?></option>
|
11 |
+
<?php endforeach; ?>
|
12 |
+
</select>
|
13 |
+
</div>
|
14 |
+
<?php happyforms_print_part_description( $part ); ?>
|
15 |
+
<?php if ( 'happyforms-form--part-error-notices-below' === happyforms_get_form_property( $form, 'part_error_notices_location' ) || empty( happyforms_get_form_property( $form, 'part_error_notices_location' ) ) ) : ?>
|
16 |
+
<?php happyforms_message_notices( $form, happyforms_get_part_name( $part, $form ) ); ?>
|
17 |
+
<?php endif; ?>
|
18 |
+
</div>
|
19 |
+
</div>
|
inc/templates/parts/frontend-single-line-text.php
ADDED
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div class="<?php happyforms_the_part_class( $part, $form ); ?>" id="<?php happyforms_the_part_id( $part, $form ); ?>-part" <?php happyforms_the_part_data_attributes( $part, $form ); ?>>
|
2 |
+
<div class="happyforms-part-wrap">
|
3 |
+
<?php if ( 'as_placeholder' !== $part['label_placement'] ) : ?>
|
4 |
+
<?php happyforms_the_part_label( $part, $form ); ?>
|
5 |
+
<?php endif; ?>
|
6 |
+
<?php if ( 'happyforms-form--part-error-notices-above' === happyforms_get_form_property( $form, 'part_error_notices_location' ) ) : ?>
|
7 |
+
<?php happyforms_message_notices( $form, happyforms_get_part_name( $part, $form ) ); ?>
|
8 |
+
<?php endif; ?>
|
9 |
+
<input id="<?php happyforms_the_part_id( $part, $form ); ?>" type="text" name="<?php happyforms_the_part_name( $part, $form ); ?>" placeholder="<?php echo esc_attr( $part['placeholder'] ); ?>" class="happyforms-part__el happyforms-part__el--text-input" <?php if ( 1 === $part['required'] ) : ?>required aria-required="true"<?php endif; ?> />
|
10 |
+
<?php if ( 'as_placeholder' === $part['label_placement'] ) : ?>
|
11 |
+
<?php happyforms_the_part_label( $part, $form ); ?>
|
12 |
+
<?php endif; ?>
|
13 |
+
<?php happyforms_print_part_description( $part ); ?>
|
14 |
+
<?php if ( 'happyforms-form--part-error-notices-below' === happyforms_get_form_property( $form, 'part_error_notices_location' ) || empty( happyforms_get_form_property( $form, 'part_error_notices_location' ) ) ) : ?>
|
15 |
+
<?php happyforms_message_notices( $form, happyforms_get_part_name( $part, $form ) ); ?>
|
16 |
+
<?php endif; ?>
|
17 |
+
</div>
|
18 |
+
</div>
|
inc/templates/parts/frontend-title.php
ADDED
@@ -0,0 +1,15 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div class="<?php happyforms_the_part_class( $part, $form ); ?>" id="<?php happyforms_the_part_id( $part, $form ); ?>-part" <?php happyforms_the_part_data_attributes( $part, $form ); ?>>
|
2 |
+
<div class="happyforms-part-wrap">
|
3 |
+
<?php happyforms_the_part_label( $part, $form ); ?>
|
4 |
+
<div class="happyforms-part__select-wrap">
|
5 |
+
<select id="<?php happyforms_the_part_id( $part, $form ); ?>" name="<?php happyforms_the_part_name( $part, $form ); ?>" class="happyforms-part__el"<?php if ( 1 === $part['required'] ) : ?> required aria-required="true"<?php endif; ?>>
|
6 |
+
<option value="">- <?php _e( 'Select', 'happyforms' ); ?> -</option>
|
7 |
+
<?php $honorifics = $this->get_honorifics(); foreach ( $honorifics as $title ) : ?>
|
8 |
+
<option value="<?php echo $title; ?>"><?php echo $title; ?></option>
|
9 |
+
<?php endforeach; ?>
|
10 |
+
</select>
|
11 |
+
</div>
|
12 |
+
<?php happyforms_print_part_description( $part ); ?>
|
13 |
+
<?php happyforms_message_notices( $form, happyforms_get_part_name( $part, $form ) ); ?>
|
14 |
+
</div>
|
15 |
+
</div>
|
inc/templates/parts/frontend-website-url.php
ADDED
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div class="<?php happyforms_the_part_class( $part, $form ); ?>" id="<?php happyforms_the_part_id( $part, $form ); ?>-part" <?php happyforms_the_part_data_attributes( $part, $form ); ?>>
|
2 |
+
<div class="happyforms-part-wrap">
|
3 |
+
<?php if ( 'as_placeholder' !== $part['label_placement'] ) : ?>
|
4 |
+
<?php happyforms_the_part_label( $part, $form ); ?>
|
5 |
+
<?php endif; ?>
|
6 |
+
<?php if ( 'happyforms-form--part-error-notices-above' === happyforms_get_form_property( $form, 'part_error_notices_location' ) ) : ?>
|
7 |
+
<?php happyforms_message_notices( $form, happyforms_get_part_name( $part, $form ) ); ?>
|
8 |
+
<?php endif; ?>
|
9 |
+
<input id="<?php happyforms_the_part_id( $part, $form ); ?>" type="text" name="<?php happyforms_the_part_name( $part, $form ); ?>" placeholder="<?php echo esc_attr( $part['placeholder'] ); ?>" class="happyforms-part__el happyforms-part__el--text-input" <?php if ( 1 === $part['required'] ) : ?>required aria-required="true"<?php endif; ?> />
|
10 |
+
<?php if ( 'as_placeholder' === $part['label_placement'] ) : ?>
|
11 |
+
<?php happyforms_the_part_label( $part, $form ); ?>
|
12 |
+
<?php endif; ?>
|
13 |
+
<?php happyforms_print_part_description( $part ); ?>
|
14 |
+
<?php if ( 'happyforms-form--part-error-notices-below' === happyforms_get_form_property( $form, 'part_error_notices_location' ) || empty( happyforms_get_form_property( $form, 'part_error_notices_location' ) ) ) : ?>
|
15 |
+
<?php happyforms_message_notices( $form, happyforms_get_part_name( $part, $form ) ); ?>
|
16 |
+
<?php endif; ?>
|
17 |
+
</div>
|
18 |
+
</div>
|
inc/templates/preview-form-edit.php
CHANGED
@@ -1,82 +1,41 @@
|
|
1 |
-
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); global $post; ?>
|
2 |
<!DOCTYPE html>
|
3 |
-
<html>
|
4 |
-
|
5 |
-
|
6 |
-
|
|
|
|
|
|
|
7 |
|
8 |
-
|
|
|
|
|
9 |
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
<?php $form = happyforms_get_form_controller()->get( $post->ID ); ?>
|
16 |
-
<div id="happyforms-<?php echo esc_attr( $form['ID'] ); ?>" class="happyforms-form happyforms-form-preview happyforms-container">
|
17 |
-
<form>
|
18 |
-
<div id="happyforms-app" class="happyforms-flex" data-happyforms-form-id="<?php echo esc_attr( $form['ID'] ); ?>">
|
19 |
-
<div id="message" class="updated published notice notice-success">
|
20 |
-
<p>
|
21 |
-
<?php
|
22 |
-
printf(
|
23 |
-
wp_kses(
|
24 |
-
__( 'This is a preview of your new HappyForm. Once you’ve finished building, you can add this form to any Page, Post and Widget area. Have questions? <a href="%s" class="happyforms-ask-link" target="_blank">Ask for help in our support forums.</a>', 'happyforms' ),
|
25 |
-
array( 'a' => array( 'class' => true, 'href' => true, 'target' => true ) )
|
26 |
-
),
|
27 |
-
'https://wordpress.org/support/plugin/happyforms'
|
28 |
-
);
|
29 |
-
?>
|
30 |
-
</p>
|
31 |
-
</div>
|
32 |
|
33 |
-
|
34 |
-
|
35 |
-
<span class="title">
|
36 |
-
<?php if ( get_the_title() ) { ?>
|
37 |
-
<?php the_title(); ?>
|
38 |
-
<?php } else { ?>
|
39 |
-
<?php _e( 'Form ID', 'happyforms' ); ?> #<?php echo get_the_ID(); ?>
|
40 |
-
<?php } ?>
|
41 |
-
</span>
|
42 |
-
<span class="happyforms-preview-badge">(<?php _e( 'Preview', 'happyforms' ); ?>)</span>
|
43 |
-
</h3>
|
44 |
-
</div>
|
45 |
|
46 |
-
|
47 |
-
|
48 |
-
happyforms_message_notices( $form, $part['id'] );
|
49 |
-
echo happyforms_get_part_library()->get_part_template( $part, $form );
|
50 |
-
}
|
51 |
-
?>
|
52 |
|
53 |
-
|
54 |
-
|
55 |
-
<button type="submit" class="happyforms-button happyforms-button--submit"><?php echo ( $submit_button_label ) ? $submit_button_label : __( 'Submit Form', 'happyforms' ); ?></button>
|
56 |
-
</div>
|
57 |
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
</div>
|
62 |
-
</div>
|
63 |
-
</form>
|
64 |
|
65 |
-
|
|
|
|
|
|
|
66 |
|
67 |
-
|
68 |
-
jQuery(function($) {
|
69 |
-
$('.happyforms-ask-link').on('click', function() {
|
70 |
-
window.open($(this).attr('href'));
|
71 |
-
});
|
72 |
|
73 |
-
|
74 |
-
e.preventDefault();
|
75 |
-
|
76 |
-
return false;
|
77 |
-
});
|
78 |
-
});
|
79 |
-
</script>
|
80 |
-
</body>
|
81 |
</html>
|
82 |
-
<?php endwhile; endif; ?>
|
|
|
1 |
<!DOCTYPE html>
|
2 |
+
<html>
|
3 |
+
<head>
|
4 |
+
<meta charset="utf-8">
|
5 |
+
<title><?php wp_title(); ?></title>
|
6 |
+
<?php wp_head(); ?>
|
7 |
+
</head>
|
8 |
+
<body class="happyforms-preview">
|
9 |
|
10 |
+
<div id="message" class="updated published notice notice-success">
|
11 |
+
<p><?php printf( __( 'This is a preview of your new HappyForm. Once you’ve finished building, you can add this form to any Page, Post and Widget area. Have questions? <a href="%s" class="happyforms-ask-link" target="_blank">Ask for help in our support forums.</a>', 'happyforms' ), 'https://wordpress.org/support/plugin/happyforms' ); ?></p>
|
12 |
+
</div>
|
13 |
|
14 |
+
<?php
|
15 |
+
function happyforms_the_form_title_preview( $title ) {
|
16 |
+
$before = '<div class="happyforms-block-editable happyforms-block-editable--title">';
|
17 |
+
$after = '</div>';
|
18 |
+
$title = "{$before}{$title}{$after}";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
19 |
|
20 |
+
return $title;
|
21 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
22 |
|
23 |
+
function happyforms_part_class_preview( $classes ) {
|
24 |
+
$classes[] = 'happyforms-block-editable happyforms-block-editable--part';
|
|
|
|
|
|
|
|
|
25 |
|
26 |
+
return $classes;
|
27 |
+
}
|
|
|
|
|
28 |
|
29 |
+
add_filter( 'happyforms_the_form_title', 'happyforms_the_form_title_preview' );
|
30 |
+
add_filter( 'happyforms_part_class', 'happyforms_part_class_preview' );
|
31 |
+
?>
|
|
|
|
|
|
|
32 |
|
33 |
+
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); global $post; ?>
|
34 |
+
<?php $form = happyforms_get_form_controller()->get( $post->ID ); ?>
|
35 |
+
<?php require_once( happyforms_get_include_folder() . '/templates/single-form.php' ); ?>
|
36 |
+
<?php endwhile; endif; ?>
|
37 |
|
38 |
+
<?php wp_footer(); ?>
|
|
|
|
|
|
|
|
|
39 |
|
40 |
+
</body>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
41 |
</html>
|
|
inc/templates/preview-form-new.php
DELETED
@@ -1,65 +0,0 @@
|
|
1 |
-
<!DOCTYPE html>
|
2 |
-
<html>
|
3 |
-
<head>
|
4 |
-
<meta charset="utf-8">
|
5 |
-
|
6 |
-
<?php wp_head(); ?>
|
7 |
-
|
8 |
-
<style type="text/css">
|
9 |
-
<?php require_once( happyforms_get_include_folder() . '/templates/preview-inline.css' ); ?>
|
10 |
-
</style>
|
11 |
-
</head>
|
12 |
-
<body>
|
13 |
-
<div id="happyforms-0" class="happyforms-container">
|
14 |
-
<form class="happyforms-form">
|
15 |
-
<div id="happyforms-app" class="happyforms-flex" data-happyforms-form-id="0">
|
16 |
-
<div id="message" class="updated published notice notice-success">
|
17 |
-
<p>
|
18 |
-
<?php
|
19 |
-
printf(
|
20 |
-
wp_kses(
|
21 |
-
__( 'This is a preview of your new HappyForm. Once you’ve finished building, you can add this form to any Page, Post and Widget area. Have questions? <a href="%s" class="happyforms-ask-link" target="_blank">Ask for help in our support forums.</a>', 'happyforms' ),
|
22 |
-
array( 'a' => array( 'class' => true, 'href' => true, 'target' => true ) )
|
23 |
-
),
|
24 |
-
'https://wordpress.org/support/plugin/happyforms'
|
25 |
-
);
|
26 |
-
?>
|
27 |
-
</p>
|
28 |
-
</div>
|
29 |
-
|
30 |
-
<div class="happyforms-part happyforms-part-editable happyforms-form-title" data-happyforms-form-id="0" data-happyforms-field-name="post_title">
|
31 |
-
<h3 class="happyforms-form__title">
|
32 |
-
<span class="title"><?php _e( 'Untitled form', 'happyforms' ); ?></span>
|
33 |
-
<span class="happyforms-preview-badge">(<?php _e( 'Preview', 'happyforms' ); ?>)</span>
|
34 |
-
</h3>
|
35 |
-
</div>
|
36 |
-
|
37 |
-
<div class="happyforms-part happyforms-part--submit">
|
38 |
-
<button type="submit" class="happyforms-button happyforms-button--submit"><?php _e( 'Submit Form', 'happyforms' ); ?></button>
|
39 |
-
</div>
|
40 |
-
|
41 |
-
<div id="happyforms-preview-styles">
|
42 |
-
<?php do_action( 'happyforms_print_css', 0 ); ?>
|
43 |
-
</div>
|
44 |
-
</div>
|
45 |
-
</div>
|
46 |
-
</form>
|
47 |
-
|
48 |
-
<?php wp_footer(); ?>
|
49 |
-
|
50 |
-
<script>
|
51 |
-
jQuery(function($) {
|
52 |
-
$('.happyforms-ask-link').on('click', function() {
|
53 |
-
window.open($(this).attr('href'));
|
54 |
-
});
|
55 |
-
|
56 |
-
$('.happyforms-form').on('submit', function(e) {
|
57 |
-
e.preventDefault();
|
58 |
-
|
59 |
-
return false;
|
60 |
-
});
|
61 |
-
});
|
62 |
-
</script>
|
63 |
-
</body>
|
64 |
-
</html>
|
65 |
-
<?php exit(); // to prevent extra content loading ?>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/templates/{preview-form-part.php → preview-form-pencil.php}
RENAMED
@@ -1,8 +1,5 @@
|
|
1 |
-
<script type="text/template" id="happyforms-partial-template">
|
2 |
-
<%= html %>
|
3 |
-
</script>
|
4 |
<script type="text/template" id="happyforms-pencil-template">
|
5 |
-
<span class="customize-partial-edit-shortcut">
|
6 |
<button aria-label="<?php _e( 'Click to edit this part.', 'happyforms' ); ?>" title="<?php _e( 'Click to edit this part.', 'happyforms' ); ?>" class="customize-partial-edit-shortcut-button happyforms-edit-pencil"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><path d="M13.89 3.39l2.71 2.72c.46.46.42 1.24.03 1.64l-8.01 8.02-5.56 1.16 1.16-5.58s7.6-7.63 7.99-8.03c.39-.39 1.22-.39 1.68.07zm-2.73 2.79l-5.59 5.61 1.11 1.11 5.54-5.65zm-2.97 8.23l5.58-5.6-1.07-1.08-5.59 5.6z"></path></svg></button>
|
7 |
</span>
|
8 |
</script>
|
|
|
|
|
|
|
1 |
<script type="text/template" id="happyforms-pencil-template">
|
2 |
+
<span class="customize-partial-edit-shortcut happyforms-partial-edit-shortcut">
|
3 |
<button aria-label="<?php _e( 'Click to edit this part.', 'happyforms' ); ?>" title="<?php _e( 'Click to edit this part.', 'happyforms' ); ?>" class="customize-partial-edit-shortcut-button happyforms-edit-pencil"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><path d="M13.89 3.39l2.71 2.72c.46.46.42 1.24.03 1.64l-8.01 8.02-5.56 1.16 1.16-5.58s7.6-7.63 7.99-8.03c.39-.39 1.22-.39 1.68.07zm-2.73 2.79l-5.59 5.61 1.11 1.11 5.54-5.65zm-2.97 8.23l5.58-5.6-1.07-1.08-5.59 5.6z"></path></svg></button>
|
4 |
</span>
|
5 |
</script>
|
inc/templates/{frontend-form.php → single-form.php}
RENAMED
@@ -1,25 +1,19 @@
|
|
1 |
<div class="happyforms-form" id="happyforms-<?php echo esc_attr( $form['ID'] ); ?>">
|
2 |
|
3 |
-
<?php
|
4 |
-
|
5 |
-
<?php happyforms_honeypot_styles( $form ); ?>
|
6 |
-
|
7 |
-
<form action="<?php happyforms_form_action( $form['ID'] ); ?>" id="happyforms-form-<?php echo esc_attr( $form['ID'] ); ?>" method="post">
|
8 |
<?php happyforms_action_field(); ?>
|
9 |
<?php happyforms_redirect_field( $form ); ?>
|
10 |
<?php happyforms_form_field( $form['ID'] ); ?>
|
11 |
<?php happyforms_nonce_field( $form ); ?>
|
12 |
-
|
13 |
-
<h3 class="happyforms-form__title"><?php echo esc_html( $form['post_title'] ); ?></h3>
|
14 |
-
|
15 |
<?php happyforms_message_notices( $form, 'top' ); ?>
|
16 |
|
17 |
<div class="happyforms-flex">
|
18 |
-
<?php foreach ( $form['parts'] as $
|
19 |
-
|
20 |
} ?>
|
21 |
-
|
22 |
<?php happyforms_honeypot( $form ); ?>
|
|
|
23 |
<?php happyforms_submit( $form ); ?>
|
24 |
</div>
|
25 |
|
1 |
<div class="happyforms-form" id="happyforms-<?php echo esc_attr( $form['ID'] ); ?>">
|
2 |
|
3 |
+
<form action="<?php happyforms_form_action( $form['ID'] ); ?>" class="<?php happyforms_the_form_class( $form ); ?>" id="happyforms-form-<?php echo esc_attr( $form['ID'] ); ?>" method="post">
|
|
|
|
|
|
|
|
|
4 |
<?php happyforms_action_field(); ?>
|
5 |
<?php happyforms_redirect_field( $form ); ?>
|
6 |
<?php happyforms_form_field( $form['ID'] ); ?>
|
7 |
<?php happyforms_nonce_field( $form ); ?>
|
8 |
+
<?php happyforms_the_form_title( $form ); ?>
|
|
|
|
|
9 |
<?php happyforms_message_notices( $form, 'top' ); ?>
|
10 |
|
11 |
<div class="happyforms-flex">
|
12 |
+
<?php foreach ( $form['parts'] as $part ) {
|
13 |
+
happyforms_the_form_part( $part, $form );
|
14 |
} ?>
|
|
|
15 |
<?php happyforms_honeypot( $form ); ?>
|
16 |
+
<?php happyforms_recaptcha( $form ); ?>
|
17 |
<?php happyforms_submit( $form ); ?>
|
18 |
</div>
|
19 |
|
readme.txt
CHANGED
@@ -5,7 +5,7 @@ Tags: contact, contact form, email, feedback form, form, form builder, custom fo
|
|
5 |
Requires at least: 4.8
|
6 |
Tested up to: 4.9.2
|
7 |
Requires PHP: 5.2.4
|
8 |
-
Stable tag: 1.
|
9 |
License: GPLv2 or later
|
10 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
11 |
|
@@ -39,7 +39,7 @@ HappyForms is the simplest way for you to manage and respond to conversations wi
|
|
39 |
* Confirmation message on submission.
|
40 |
* Redirect to any webpage after the form is submitted.
|
41 |
* Confirmation email sent to recipient.
|
42 |
-
* One-click HoneyPot spam prevention.
|
43 |
* Over 50 styles controls built-in.
|
44 |
|
45 |
= Included HappyForms Form Parts: =
|
@@ -52,8 +52,12 @@ HappyForms is the simplest way for you to manage and respond to conversations wi
|
|
52 |
* Single Choice — Radio buttons for single selection.
|
53 |
* Dropdown — For long lists and single selection.
|
54 |
* Number — For formatted numeric fields, like phone and price.
|
|
|
55 |
* Date — Includes day and year picker for easy use.
|
56 |
-
*
|
|
|
|
|
|
|
57 |
* Rating — Collect opinions using a zero to five star range.
|
58 |
* Placeholder — For form descriptions and horizontal rules.
|
59 |
|
@@ -70,11 +74,16 @@ Absolutely! HappyForms gets out of the way and is designed to work with any them
|
|
70 |
|
71 |
== Changelog ==
|
72 |
|
73 |
-
= 1.
|
74 |
-
*
|
75 |
-
|
76 |
-
|
77 |
-
*
|
|
|
|
|
|
|
|
|
|
|
78 |
|
79 |
= 1.2.0 =
|
80 |
* Bug fix: an error during the example form creation was preventing plugin activation.
|
@@ -100,16 +109,8 @@ Absolutely! HappyForms gets out of the way and is designed to work with any them
|
|
100 |
|
101 |
== Upgrade Notice ==
|
102 |
|
103 |
-
= 1.
|
104 |
-
*
|
105 |
-
* Improvement: simplified Honeypot protection to avoid corner-cases.
|
106 |
-
* Bug fix: an unset variable caused errors on PHP 7 during message submission storage.
|
107 |
-
* Bug fix: unset, required checkboxes would prevent forms from submitting correctly.
|
108 |
-
* Bug fix: removed misused filter causing fatal error on PHP 7.
|
109 |
-
* Bug fix: mixed shortcodes were causing notices.
|
110 |
-
|
111 |
-
= 1.2.1 =
|
112 |
-
* Bug fix: Address part bug fix.
|
113 |
|
114 |
= 1.2.0 =
|
115 |
* Bug fix: an error during the example form creation was preventing plugin activation.
|
5 |
Requires at least: 4.8
|
6 |
Tested up to: 4.9.2
|
7 |
Requires PHP: 5.2.4
|
8 |
+
Stable tag: 1.3
|
9 |
License: GPLv2 or later
|
10 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
11 |
|
39 |
* Confirmation message on submission.
|
40 |
* Redirect to any webpage after the form is submitted.
|
41 |
* Confirmation email sent to recipient.
|
42 |
+
* One-click HoneyPot and Google ReCaptcha spam prevention.
|
43 |
* Over 50 styles controls built-in.
|
44 |
|
45 |
= Included HappyForms Form Parts: =
|
52 |
* Single Choice — Radio buttons for single selection.
|
53 |
* Dropdown — For long lists and single selection.
|
54 |
* Number — For formatted numeric fields, like phone and price.
|
55 |
+
* Phone - For formatted contact details.
|
56 |
* Date — Includes day and year picker for easy use.
|
57 |
+
* Address — A dropdown listing all available countries.
|
58 |
+
* Scale — Collect opinions using a numeric slider.
|
59 |
+
* Title — Include personal honorific list.
|
60 |
+
* Legal — Required fine print before form submission.
|
61 |
* Rating — Collect opinions using a zero to five star range.
|
62 |
* Placeholder — For form descriptions and horizontal rules.
|
63 |
|
74 |
|
75 |
== Changelog ==
|
76 |
|
77 |
+
= 1.3.0 =
|
78 |
+
* New feature: Parts duplication.
|
79 |
+
* New feature: “Title placement” setting now features options for displaying title as a placeholder with smooth transition, and place the title directly in the input field.
|
80 |
+
* New feature: Google ReCaptcha support.
|
81 |
+
* Improved: Better templates and filter coverage.
|
82 |
+
* Improved: Modal for adding a form to a content has been redesigned and refactored.
|
83 |
+
* Improved: Saving a form now displays an extended “Form saved” notice that contains a guide on how to insert form to a content. This message is dismissible.
|
84 |
+
* Improved: Parts in the Form Builder now show part title for better navigation.
|
85 |
+
* Improved: Dropdown part with lots of options now only reveals first 5 options on load with the option to reveal them all.
|
86 |
+
* Improved: Redesigned Style step with lots of new settings to make your forms even better looking.
|
87 |
|
88 |
= 1.2.0 =
|
89 |
* Bug fix: an error during the example form creation was preventing plugin activation.
|
109 |
|
110 |
== Upgrade Notice ==
|
111 |
|
112 |
+
= 1.3.0 =
|
113 |
+
* Tons of new features, improvements and bugfixes.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
114 |
|
115 |
= 1.2.0 =
|
116 |
* Bug fix: an error during the example form creation was preventing plugin activation.
|
trunk/assets/css/admin.css
ADDED
@@ -0,0 +1,246 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/**
|
2 |
+
*
|
3 |
+
* Admin menus
|
4 |
+
*
|
5 |
+
*/
|
6 |
+
#toplevel_page_happyforms ul.wp-submenu li:nth-child(5) {
|
7 |
+
display: none;
|
8 |
+
}
|
9 |
+
|
10 |
+
#wp-admin-bar-happyforms .ab-icon svg {
|
11 |
+
width: 20px;
|
12 |
+
margin-top: 2px;
|
13 |
+
}
|
14 |
+
|
15 |
+
#wp-admin-bar-happyforms:hover .ab-icon .cls-2 {
|
16 |
+
fill: #00b9eb;
|
17 |
+
}
|
18 |
+
|
19 |
+
i.mce-i-happyforms-form-picker:before, i.mce-i-happyforms-form-picker:before {
|
20 |
+
content: '\f130';
|
21 |
+
display: block;
|
22 |
+
width: 20px;
|
23 |
+
height: 20px;
|
24 |
+
font: 400 20px/1 dashicons;
|
25 |
+
background-size: cover;
|
26 |
+
background-position: center;
|
27 |
+
}
|
28 |
+
|
29 |
+
/**
|
30 |
+
*
|
31 |
+
* Form admin screen
|
32 |
+
*
|
33 |
+
*/
|
34 |
+
.fixed .column-messages {
|
35 |
+
width: 5.5em;
|
36 |
+
padding: 8px 0;
|
37 |
+
text-align: left;
|
38 |
+
}
|
39 |
+
|
40 |
+
.post-type-happyform .column-shortcode {
|
41 |
+
overflow: hidden;
|
42 |
+
}
|
43 |
+
|
44 |
+
.happyforms-shortcode-col span {
|
45 |
+
display: block;
|
46 |
+
margin-bottom: .2em;
|
47 |
+
line-height: 1.5em;
|
48 |
+
}
|
49 |
+
|
50 |
+
.happyforms-shortcode-col input {
|
51 |
+
position: absolute;
|
52 |
+
left: -999px;
|
53 |
+
}
|
54 |
+
|
55 |
+
.happyforms-shortcode-col a.happyforms-shortcode-clipboard {
|
56 |
+
display: none;
|
57 |
+
font-size: 13px;
|
58 |
+
line-height: 1.5em;
|
59 |
+
padding: 2px 0 0;
|
60 |
+
}
|
61 |
+
|
62 |
+
tr.type-happyform:hover .happyforms-shortcode-col a.happyforms-shortcode-clipboard {
|
63 |
+
display: inline-block;
|
64 |
+
}
|
65 |
+
|
66 |
+
/**
|
67 |
+
*
|
68 |
+
* Messages admin table screen
|
69 |
+
*
|
70 |
+
*/
|
71 |
+
tr.happyforms-message-unread {
|
72 |
+
background-color: #e6f6fb !important;
|
73 |
+
}
|
74 |
+
|
75 |
+
.post-type-happyforms-message .page-title-action {
|
76 |
+
display: none;
|
77 |
+
}
|
78 |
+
|
79 |
+
/**
|
80 |
+
*
|
81 |
+
* Message edit screen
|
82 |
+
*
|
83 |
+
*/
|
84 |
+
body.post-type-happyforms-message #post-body {
|
85 |
+
margin-left: -10px;
|
86 |
+
}
|
87 |
+
|
88 |
+
table.happyforms-message-data-table {
|
89 |
+
margin-top: 0;
|
90 |
+
box-shadow: 0 1px 1px rgba(0,0,0,0.04);
|
91 |
+
background: #fff;
|
92 |
+
border: 1px solid #e5e5e5;
|
93 |
+
}
|
94 |
+
|
95 |
+
.happyforms-message-data-table th {
|
96 |
+
padding: 20px 15px;
|
97 |
+
}
|
98 |
+
|
99 |
+
#happyforms-message-details .inside {
|
100 |
+
padding: 0;
|
101 |
+
}
|
102 |
+
|
103 |
+
#happyforms-message-details .inside .happyforms-message-form .logo {
|
104 |
+
color: #82878c;
|
105 |
+
}
|
106 |
+
|
107 |
+
#happyforms-message-details .misc-pub-trash:before {
|
108 |
+
font: normal 20px/1 dashicons;
|
109 |
+
speak: none;
|
110 |
+
display: inline-block;
|
111 |
+
margin-left: -1px;
|
112 |
+
padding-right: 3px;
|
113 |
+
vertical-align: top;
|
114 |
+
-webkit-font-smoothing: antialiased;
|
115 |
+
-moz-osx-font-smoothing: grayscale;
|
116 |
+
content: "\f182";
|
117 |
+
color: #82878c;
|
118 |
+
}
|
119 |
+
|
120 |
+
#happyforms-message-details .misc-pub-trash a {
|
121 |
+
text-decoration: none;
|
122 |
+
color: #a00;
|
123 |
+
}
|
124 |
+
|
125 |
+
p.happyforms-message-nav {
|
126 |
+
text-align: right;
|
127 |
+
}
|
128 |
+
|
129 |
+
p.happyforms-message-nav span.divider:first-child,
|
130 |
+
p.happyforms-message-nav span.divider:last-child {
|
131 |
+
display: none;
|
132 |
+
}
|
133 |
+
|
134 |
+
/**
|
135 |
+
*
|
136 |
+
* Automatic updates notice
|
137 |
+
*
|
138 |
+
*/
|
139 |
+
.notice form#automatic-updates {
|
140 |
+
padding-bottom: 10px;
|
141 |
+
}
|
142 |
+
|
143 |
+
.notice-success #automatic-updates {
|
144 |
+
display: none;
|
145 |
+
}
|
146 |
+
|
147 |
+
.notice form#automatic-updates input {
|
148 |
+
display: inline-block;
|
149 |
+
}
|
150 |
+
|
151 |
+
.notice form#automatic-updates input[type="email"],
|
152 |
+
.notice form#automatic-updates input[type="password"] {
|
153 |
+
display: inline-block;
|
154 |
+
padding: 5px 7px;
|
155 |
+
margin: 0 1px;
|
156 |
+
}
|
157 |
+
|
158 |
+
/**
|
159 |
+
*
|
160 |
+
* Tracking page
|
161 |
+
*
|
162 |
+
*/
|
163 |
+
.happyforms-welcome-panel {
|
164 |
+
max-width: 760px;
|
165 |
+
box-sizing: border-box;
|
166 |
+
position: relative;
|
167 |
+
}
|
168 |
+
|
169 |
+
.happyforms-welcome-panel .welcome-panel-content {
|
170 |
+
width: 460px;
|
171 |
+
margin-right: 33px;
|
172 |
+
padding-bottom: 25px;
|
173 |
+
}
|
174 |
+
|
175 |
+
.happyforms-welcome-panel .welcome-panel-content input[type="email"] {
|
176 |
+
width: 96%;
|
177 |
+
padding: 10px;
|
178 |
+
}
|
179 |
+
|
180 |
+
.happyforms-welcome-panel .welcome-panel-content .button-hero {
|
181 |
+
width: 96%;
|
182 |
+
text-align: center;
|
183 |
+
}
|
184 |
+
|
185 |
+
.happyforms-welcome-panel .welcome-panel-theme {
|
186 |
+
position: absolute;
|
187 |
+
top: 20px;
|
188 |
+
right: 20px;
|
189 |
+
bottom: 20px;
|
190 |
+
width: 250px;
|
191 |
+
background-image: url(../svg/welcome.svg);
|
192 |
+
background-position: center center;
|
193 |
+
background-repeat: no-repeat;
|
194 |
+
background-size: contain;
|
195 |
+
}
|
196 |
+
|
197 |
+
p.welcome-panel-footer {
|
198 |
+
max-width: 760px;
|
199 |
+
text-align: right;
|
200 |
+
color: #72777c;
|
201 |
+
}
|
202 |
+
|
203 |
+
p.welcome-panel-footer a {
|
204 |
+
color: inherit;
|
205 |
+
}
|
206 |
+
|
207 |
+
p.welcome-panel-footer a:hover,
|
208 |
+
p.welcome-panel-footer a:active {
|
209 |
+
color: #0073aa;
|
210 |
+
}
|
211 |
+
|
212 |
+
#available-widgets div[id*='widget-tpl-happyforms_widget-'] .widget-title:before {
|
213 |
+
content: '\f130';
|
214 |
+
}
|
215 |
+
|
216 |
+
.happyforms-editor-button span.dashicons {
|
217 |
+
position: relative;
|
218 |
+
top: 4px;
|
219 |
+
padding-right: 5px;
|
220 |
+
color: #888;
|
221 |
+
}
|
222 |
+
|
223 |
+
#happyforms-modal {
|
224 |
+
display: none;
|
225 |
+
}
|
226 |
+
|
227 |
+
.happyforms-dialog {
|
228 |
+
top: calc(50% - 150px) !important;
|
229 |
+
}
|
230 |
+
|
231 |
+
.happyforms-dialog .ui-dialog-title {
|
232 |
+
font-size: 14px;
|
233 |
+
}
|
234 |
+
|
235 |
+
.happyforms-dialog__select {
|
236 |
+
min-width: 290px;
|
237 |
+
}
|
238 |
+
|
239 |
+
.happyforms-dialog__button {
|
240 |
+
float: right;
|
241 |
+
margin-top: 18px !important;
|
242 |
+
}
|
243 |
+
|
244 |
+
#happyforms-notice-happyforms_form_saved_guide {
|
245 |
+
border-color: #46b450;
|
246 |
+
}
|
trunk/assets/css/customize.css
ADDED
@@ -0,0 +1,856 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/**
|
2 |
+
*
|
3 |
+
* Customizer-wide
|
4 |
+
*
|
5 |
+
*/
|
6 |
+
.wp-full-overlay {
|
7 |
+
z-index: 1000;
|
8 |
+
}
|
9 |
+
|
10 |
+
/**
|
11 |
+
*
|
12 |
+
* Header actions
|
13 |
+
*
|
14 |
+
*/
|
15 |
+
#happyforms-save-button-wrapper {
|
16 |
+
transition: .18s margin ease-in-out;
|
17 |
+
float: right;
|
18 |
+
margin-top: 8px;
|
19 |
+
}
|
20 |
+
|
21 |
+
#happyforms-sidebar-controls {
|
22 |
+
display: relative;
|
23 |
+
}
|
24 |
+
|
25 |
+
#happyforms-close-link {
|
26 |
+
display: block;
|
27 |
+
position: absolute;
|
28 |
+
top: 0;
|
29 |
+
left: 0;
|
30 |
+
width: 45px;
|
31 |
+
height: 41px;
|
32 |
+
padding: 0 2px 0 0;
|
33 |
+
background: #eee;
|
34 |
+
border: none;
|
35 |
+
border-top: 4px solid #eee;
|
36 |
+
border-right: 1px solid #ddd;
|
37 |
+
color: #444;
|
38 |
+
text-align: left;
|
39 |
+
cursor: pointer;
|
40 |
+
transition: color .15s ease-in-out, border-color .15s ease-in-out, background .15s ease-in-out;
|
41 |
+
box-sizing: content-box;
|
42 |
+
text-decoration: none;
|
43 |
+
outline: 0;
|
44 |
+
line-height: 45px;
|
45 |
+
}
|
46 |
+
|
47 |
+
#happyforms-close-link:before {
|
48 |
+
font: normal 22px/45px dashicons;
|
49 |
+
content: "\f335";
|
50 |
+
position: relative;
|
51 |
+
top: -3px;
|
52 |
+
left: 13px;
|
53 |
+
}
|
54 |
+
|
55 |
+
#happyforms-close-link:hover,
|
56 |
+
#happyforms-close-link:focus {
|
57 |
+
background: #fff;
|
58 |
+
color: #0073aa;
|
59 |
+
border-top-color: #0073aa;
|
60 |
+
outline: none;
|
61 |
+
box-shadow: none;
|
62 |
+
}
|
63 |
+
|
64 |
+
/**
|
65 |
+
*
|
66 |
+
* Sidebar stacked view
|
67 |
+
*
|
68 |
+
*/
|
69 |
+
#customize-controls .wp-full-overlay-sidebar-content {
|
70 |
+
bottom: 130px;
|
71 |
+
}
|
72 |
+
|
73 |
+
.happyforms-stack-view {
|
74 |
+
position: absolute;
|
75 |
+
width: 100%;
|
76 |
+
box-sizing: border-box;
|
77 |
+
border: 0;
|
78 |
+
padding: 12px;
|
79 |
+
}
|
80 |
+
|
81 |
+
.happyforms-step-description h1 {
|
82 |
+
font-size: 21px;
|
83 |
+
font-weight: 400;
|
84 |
+
line-height: 1.2;
|
85 |
+
text-align: center;
|
86 |
+
padding: 0;
|
87 |
+
margin: 15px 0;
|
88 |
+
}
|
89 |
+
|
90 |
+
.happyforms-step-description p {
|
91 |
+
font-size: 14px;
|
92 |
+
line-height: 1.5;
|
93 |
+
font-style: normal;
|
94 |
+
text-align: center;
|
95 |
+
margin: 0;
|
96 |
+
}
|
97 |
+
|
98 |
+
p.description a {
|
99 |
+
font-style: normal;
|
100 |
+
}
|
101 |
+
|
102 |
+
.happyforms-step-description p.description {
|
103 |
+
margin: 0 0 30px;
|
104 |
+
}
|
105 |
+
|
106 |
+
.happyforms-step-description ol {
|
107 |
+
font-size: 14px;
|
108 |
+
line-height: 1.5;
|
109 |
+
margin-bottom: 20px;
|
110 |
+
}
|
111 |
+
|
112 |
+
.happyforms-stack-view h2.group-title {
|
113 |
+
font-weight: 700;
|
114 |
+
font-size: 1.5em;
|
115 |
+
margin: 30px 0;
|
116 |
+
}
|
117 |
+
|
118 |
+
.happyforms-stack-view .customize-control:first-child h2.group-title {
|
119 |
+
margin: 5px 0 30px 0;
|
120 |
+
}
|
121 |
+
|
122 |
+
.customize-control {
|
123 |
+
float: none;
|
124 |
+
}
|
125 |
+
|
126 |
+
#customize-controls span.description {
|
127 |
+
display: block;
|
128 |
+
margin-bottom: 10px;
|
129 |
+
color: #999;
|
130 |
+
font-style: normal;
|
131 |
+
line-height: 18px;
|
132 |
+
}
|
133 |
+
|
134 |
+
.customize-control textarea {
|
135 |
+
width: 100%;
|
136 |
+
}
|
137 |
+
|
138 |
+
.happyforms-customize-heading h2 {
|
139 |
+
border-top: 1px solid #dbdbdb;
|
140 |
+
padding-top: 20px;
|
141 |
+
}
|
142 |
+
|
143 |
+
.panel-meta + .happyforms-customize-heading h2 {
|
144 |
+
padding-top: 0;
|
145 |
+
border-top: 0;
|
146 |
+
}
|
147 |
+
|
148 |
+
.happyforms-help-pointer {
|
149 |
+
z-index: 999999 !important;
|
150 |
+
}
|
151 |
+
|
152 |
+
.happyforms-help-pointer .wp-pointer-content {
|
153 |
+
padding: 10px 15px;
|
154 |
+
}
|
155 |
+
|
156 |
+
/**
|
157 |
+
*
|
158 |
+
* Footer steps
|
159 |
+
*
|
160 |
+
*/
|
161 |
+
#customize-footer-actions {
|
162 |
+
height: 120px;
|
163 |
+
padding: 12px;
|
164 |
+
box-sizing: border-box;
|
165 |
+
display: none;
|
166 |
+
}
|
167 |
+
|
168 |
+
.happyforms-action-buttons {
|
169 |
+
margin-bottom: 15px;
|
170 |
+
}
|
171 |
+
|
172 |
+
.happyforms-action-buttons button.button-primary.button-hero,
|
173 |
+
.happyforms-action-buttons button.button-secondary.button-hero {
|
174 |
+
width: 48%;
|
175 |
+
margin: 0 1%;
|
176 |
+
padding: 0;
|
177 |
+
text-align: center;
|
178 |
+
}
|
179 |
+
|
180 |
+
.happyforms-action-buttons button.button-primary.button-hero:only-child,
|
181 |
+
.happyforms-action-buttons button.button-secondary.button-hero:only-child {
|
182 |
+
width: 100%;
|
183 |
+
}
|
184 |
+
|
185 |
+
.button-wide {
|
186 |
+
width: 100%;
|
187 |
+
text-align: center;
|
188 |
+
}
|
189 |
+
|
190 |
+
.happyforms-step-progress {
|
191 |
+
margin: 0 1%;
|
192 |
+
}
|
193 |
+
|
194 |
+
.happyforms-step-progress,
|
195 |
+
.happyforms-step-progress-bar {
|
196 |
+
height: 6px;
|
197 |
+
margin-bottom: 10px;
|
198 |
+
}
|
199 |
+
|
200 |
+
.happyforms-step-progress {
|
201 |
+
background-color: #cccccc;
|
202 |
+
}
|
203 |
+
|
204 |
+
.happyforms-step-progress-bar {
|
205 |
+
background-color: #0185ba;
|
206 |
+
}
|
207 |
+
|
208 |
+
p.happyforms-step-progress-counter {
|
209 |
+
text-align: center;
|
210 |
+
margin-bottom: 0;
|
211 |
+
}
|
212 |
+
|
213 |
+
/**
|
214 |
+
*
|
215 |
+
* Common form widget elements
|
216 |
+
*
|
217 |
+
*/
|
218 |
+
.happyforms-widget {
|
219 |
+
margin: 0 auto 10px;
|
220 |
+
box-sizing: border-box;
|
221 |
+
box-shadow: 0 1px 1px rgba(0,0,0,0.04);
|
222 |
+
}
|
223 |
+
|
224 |
+
.happyforms-widget-top {
|
225 |
+
position: relative;
|
226 |
+
background: #fff;
|
227 |
+
color: #23282d;
|
228 |
+
border: 1px solid #e5e5e5;
|
229 |
+
line-height: 1.4em;
|
230 |
+
-webkit-transition: opacity 0.5s;
|
231 |
+
transition: opacity 0.5s;
|
232 |
+
z-index: 1;
|
233 |
+
}
|
234 |
+
|
235 |
+
.happyforms-widget-title h3 {
|
236 |
+
margin: 0;
|
237 |
+
padding: 13px 15px;
|
238 |
+
font-size: 13px !important;
|
239 |
+
line-height: 1;
|
240 |
+
overflow: hidden;
|
241 |
+
white-space: nowrap;
|
242 |
+
text-overflow: ellipsis;
|
243 |
+
user-select: none;
|
244 |
+
}
|
245 |
+
|
246 |
+
.happyforms-widget-content {
|
247 |
+
padding: 1px 10px 10px 10px;
|
248 |
+
line-height: 16px;
|
249 |
+
background: #fff;
|
250 |
+
border: 1px solid #e5e5e5;
|
251 |
+
border-top: 0;
|
252 |
+
}
|
253 |
+
|
254 |
+
.happyforms-widget-actions {
|
255 |
+
padding-bottom: 5px;
|
256 |
+
}
|
257 |
+
|
258 |
+
a.happyforms-form-remove,
|
259 |
+
a.happyforms-form-part-remove {
|
260 |
+
color: #a00;
|
261 |
+
}
|
262 |
+
|
263 |
+
a.happyforms-form-remove:hover,
|
264 |
+
a.happyforms-form-part-remove:hover {
|
265 |
+
color: #dc3232;
|
266 |
+
}
|
267 |
+
|
268 |
+
.happyforms-form-date {
|
269 |
+
color: #72777c;
|
270 |
+
}
|
271 |
+
|
272 |
+
/**
|
273 |
+
*
|
274 |
+
* Form edit
|
275 |
+
*
|
276 |
+
*/
|
277 |
+
#happyforms-captcha-settings {
|
278 |
+
display: none;
|
279 |
+
}
|
280 |
+
|
281 |
+
/**
|
282 |
+
*
|
283 |
+
* Form build
|
284 |
+
*
|
285 |
+
*/
|
286 |
+
.happyforms-parts-placeholder {
|
287 |
+
display: block;
|
288 |
+
border: 2px dashed #a1a1a1;
|
289 |
+
padding: 30px 30px 40px;
|
290 |
+
box-sizing: border-box;
|
291 |
+
text-align: center;
|
292 |
+
}
|
293 |
+
|
294 |
+
.happyforms-stack-view.has-parts .happyforms-parts-placeholder {
|
295 |
+
display: none;
|
296 |
+
}
|
297 |
+
|
298 |
+
.happyforms-parts-placeholder img {
|
299 |
+
margin-top: 30px;
|
300 |
+
width: 90%;
|
301 |
+
}
|
302 |
+
|
303 |
+
.happyforms-parts-placeholder p {
|
304 |
+
font-size: 14px;
|
305 |
+
color: #444;
|
306 |
+
margin: 0;
|
307 |
+
}
|
308 |
+
|
309 |
+
.happyforms-parts-placeholder p:last-of-type {
|
310 |
+
margin-bottom: 30px;
|
311 |
+
}
|
312 |
+
|
313 |
+
.happyforms-parts-placeholder__placeholder {
|
314 |
+
margin-bottom: 20px;
|
315 |
+
padding: 20px;
|
316 |
+
border: 2px dashed #a1a1a1;
|
317 |
+
}
|
318 |
+
|
319 |
+
.happyforms-parts-placeholder__placeholder:last-child {
|
320 |
+
margin-bottom: 0;
|
321 |
+
}
|
322 |
+
|
323 |
+
ul.happyforms-form-widgets {
|
324 |
+
margin-top: 0;
|
325 |
+
}
|
326 |
+
|
327 |
+
body.adding-happyforms-parts button.happyforms-open-parts-drawer:before {
|
328 |
+
-webkit-transform: rotate(45deg);
|
329 |
+
-ms-transform: rotate(45deg);
|
330 |
+
transform: rotate(45deg);
|
331 |
+
}
|
332 |
+
|
333 |
+
body.adding-happyforms-parts #customize-preview iframe {
|
334 |
+
width: calc(100% - 301px);
|
335 |
+
}
|
336 |
+
|
337 |
+
.happyforms-part-widget-top {
|
338 |
+
cursor: move;
|
339 |
+
}
|
340 |
+
|
341 |
+
.happyforms-part-widget-top:hover {
|
342 |
+
border-color: #999;
|
343 |
+
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
|
344 |
+
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
|
345 |
+
}
|
346 |
+
|
347 |
+
.happyforms-part-widget-title-action {
|
348 |
+
float: right;
|
349 |
+
cursor: pointer;
|
350 |
+
}
|
351 |
+
|
352 |
+
.happyforms-widget-action {
|
353 |
+
display: inline-block;
|
354 |
+
padding: 8px 10px;
|
355 |
+
margin: 0;
|
356 |
+
color: #72777c;
|
357 |
+
border: 0;
|
358 |
+
cursor: pointer;
|
359 |
+
outline: none;
|
360 |
+
border-radius: 0;
|
361 |
+
background-color: transparent;
|
362 |
+
}
|
363 |
+
|
364 |
+
.happyforms-widget-action .toggle-indicator {
|
365 |
+
display: inline-block;
|
366 |
+
font-size: 20px;
|
367 |
+
line-height: 1;
|
368 |
+
}
|
369 |
+
|
370 |
+
.happyforms-widget-action .toggle-indicator:before {
|
371 |
+
display: block;
|
372 |
+
content: '\f140';
|
373 |
+
font: normal 20px/1 dashicons;
|
374 |
+
padding: 1px 2px 1px 0px;
|
375 |
+
border-radius: 50%;
|
376 |
+
-webkit-font-smoothing: antialiased;
|
377 |
+
-moz-osx-font-smoothing: grayscale;
|
378 |
+
text-decoration: none !important;
|
379 |
+
}
|
380 |
+
|
381 |
+
.happyforms-widget-expanded .toggle-indicator:before {
|
382 |
+
content: '\f142';
|
383 |
+
}
|
384 |
+
|
385 |
+
.happyforms-widget-action:focus .toggle-indicator:before {
|
386 |
+
box-shadow: 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, .8);
|
387 |
+
}
|
388 |
+
|
389 |
+
.happyforms-part-widget .links {
|
390 |
+
text-align: right;
|
391 |
+
}
|
392 |
+
|
393 |
+
.happyforms-part-widget .show-all-options {
|
394 |
+
float: left;
|
395 |
+
}
|
396 |
+
|
397 |
+
.happyforms-part-widget .options {
|
398 |
+
border: 1px solid #eee;
|
399 |
+
padding: 5px 10px 10px;
|
400 |
+
}
|
401 |
+
|
402 |
+
.happyforms-part-widget .options h3 {
|
403 |
+
margin-bottom: 0;
|
404 |
+
display: none;
|
405 |
+
}
|
406 |
+
|
407 |
+
.happyforms-part-widget .options p {
|
408 |
+
display: none;
|
409 |
+
}
|
410 |
+
|
411 |
+
.happyforms-part-widget .options li {
|
412 |
+
padding: 10px 0 15px;
|
413 |
+
border-bottom: 1px solid #eee;
|
414 |
+
}
|
415 |
+
|
416 |
+
.happyforms-part-widget .options ul:empty {
|
417 |
+
display: none;
|
418 |
+
}
|
419 |
+
|
420 |
+
.happyforms-part-widget .options ul:empty ~ h3,
|
421 |
+
.happyforms-part-widget .options ul:empty ~ p {
|
422 |
+
display: block;
|
423 |
+
}
|
424 |
+
|
425 |
+
.happyforms-part-widget .options li:last-child {
|
426 |
+
border-bottom: 0;
|
427 |
+
}
|
428 |
+
|
429 |
+
.happyforms-part-widget .options .option-actions {
|
430 |
+
margin: 0;
|
431 |
+
text-align: right;
|
432 |
+
}
|
433 |
+
|
434 |
+
.happyforms-part-widget .options .delete-option {
|
435 |
+
position: relative;
|
436 |
+
top: 5px;
|
437 |
+
color: #a00;
|
438 |
+
}
|
439 |
+
|
440 |
+
.happyforms-part-widget .options .delete-option:hover {
|
441 |
+
color: #dc3232;
|
442 |
+
}
|
443 |
+
|
444 |
+
.happyforms-part-widget .options .delete-option::after {
|
445 |
+
content: '';
|
446 |
+
display: table;
|
447 |
+
clear: both;
|
448 |
+
}
|
449 |
+
|
450 |
+
.happyforms-part-widget--sub label {
|
451 |
+
font-size: 13px;
|
452 |
+
}
|
453 |
+
|
454 |
+
.customize-control .happyforms-part-widget--sub input {
|
455 |
+
margin: 2px 0 5px;
|
456 |
+
}
|
457 |
+
|
458 |
+
/**
|
459 |
+
*
|
460 |
+
* Form parts drawer
|
461 |
+
*
|
462 |
+
*/
|
463 |
+
body.adding-happyforms-parts .wp-full-overlay-main {
|
464 |
+
left: 300px;
|
465 |
+
}
|
466 |
+
|
467 |
+
#happyforms-parts-drawer {
|
468 |
+
position: absolute;
|
469 |
+
top: 0;
|
470 |
+
bottom: 0;
|
471 |
+
left: -301px;
|
472 |
+
overflow-x: hidden;
|
473 |
+
overflow-y: auto;
|
474 |
+
width: 300px;
|
475 |
+
margin: 0;
|
476 |
+
z-index: 4;
|
477 |
+
background: #eee;
|
478 |
+
border-right: 1px solid #ddd;
|
479 |
+
}
|
480 |
+
|
481 |
+
.happyforms-parts-drawer-header {
|
482 |
+
border-bottom: 1px solid #ddd;
|
483 |
+
}
|
484 |
+
|
485 |
+
.happyforms-parts-drawer-header-search {
|
486 |
+
padding: 13px 15px;
|
487 |
+
}
|
488 |
+
|
489 |
+
.happyforms-parts-drawer-header-search input {
|
490 |
+
width: 100%;
|
491 |
+
height: 32px;
|
492 |
+
margin: 1px 0;
|
493 |
+
padding: 6px 30px;
|
494 |
+
}
|
495 |
+
|
496 |
+
.happyforms-parts-drawer-header-search-icon {
|
497 |
+
display: block;
|
498 |
+
position: absolute;
|
499 |
+
top: 15px;
|
500 |
+
left: 16px;
|
501 |
+
width: 30px;
|
502 |
+
height: 30px;
|
503 |
+
line-height: 28px;
|
504 |
+
text-align: center;
|
505 |
+
color: #72777c;
|
506 |
+
}
|
507 |
+
|
508 |
+
.happyforms-parts-drawer-header-search-icon:after {
|
509 |
+
content: '\f179';
|
510 |
+
font: normal 20px/1 dashicons;
|
511 |
+
line-height: 30px;
|
512 |
+
vertical-align: middle;
|
513 |
+
-webkit-font-smoothing: antialiased;
|
514 |
+
}
|
515 |
+
|
516 |
+
input#part-search::placeholder {
|
517 |
+
color: #aaa;
|
518 |
+
}
|
519 |
+
|
520 |
+
ul.happyforms-parts-list {
|
521 |
+
margin: 0;
|
522 |
+
padding: 0;
|
523 |
+
list-style-type: none;
|
524 |
+
}
|
525 |
+
|
526 |
+
ul.happyforms-parts-list li.happyforms-parts-list-item {
|
527 |
+
position: relative;
|
528 |
+
margin-bottom: 0;
|
529 |
+
padding: 20px 15px 20px 60px;
|
530 |
+
background: #fff;
|
531 |
+
border-bottom: 1px solid #ddd;
|
532 |
+
border-left: 4px solid #fff;
|
533 |
+
-webkit-transition: .15s color ease-in-out, .15s background-color ease-in-out, .15s border-color ease-in-out;
|
534 |
+
transition: .15s color ease-in-out, .15s background-color ease-in-out, .15s border-color ease-in-out;
|
535 |
+
cursor: pointer;
|
536 |
+
}
|
537 |
+
|
538 |
+
ul.happyforms-parts-list li.happyforms-parts-list-item:hover {
|
539 |
+
background: #f3f3f5;
|
540 |
+
border-bottom-color: #ccc;
|
541 |
+
color: #0073aa;
|
542 |
+
border-left: 4px solid #0073aa;
|
543 |
+
}
|
544 |
+
|
545 |
+
ul.happyforms-parts-list li .happyforms-parts-list-item-title {
|
546 |
+
position: relative;
|
547 |
+
}
|
548 |
+
|
549 |
+
ul.happyforms-parts-list li .happyforms-parts-list-item-title:before {
|
550 |
+
content: "";
|
551 |
+
position: absolute;
|
552 |
+
top: 0;
|
553 |
+
right: 100%;
|
554 |
+
margin-right: 20px;
|
555 |
+
width: 20px;
|
556 |
+
height: 20px;
|
557 |
+
color: #32373c;
|
558 |
+
text-align: center;
|
559 |
+
box-sizing: border-box;
|
560 |
+
}
|
561 |
+
|
562 |
+
ul.happyforms-parts-list li[data-part-type="single_line_text"] .happyforms-parts-list-item-title:before {
|
563 |
+
background-image: url(../svg/icons/short-text.svg);
|
564 |
+
}
|
565 |
+
|
566 |
+
ul.happyforms-parts-list li[data-part-type="multi_line_text"] .happyforms-parts-list-item-title:before {
|
567 |
+
background-image: url(../svg/icons/long-text.svg);
|
568 |
+
}
|
569 |
+
|
570 |
+
ul.happyforms-parts-list li[data-part-type="email"] .happyforms-parts-list-item-title:before {
|
571 |
+
background-image: url(../svg/icons/email.svg);
|
572 |
+
}
|
573 |
+
|
574 |
+
ul.happyforms-parts-list li[data-part-type="website_url"] .happyforms-parts-list-item-title:before {
|
575 |
+
background-image: url(../svg/icons/website-link.svg);
|
576 |
+
}
|
577 |
+
|
578 |
+
ul.happyforms-parts-list li[data-part-type="number"] .happyforms-parts-list-item-title:before {
|
579 |
+
background-image: url(../svg/icons/number.svg);
|
580 |
+
}
|
581 |
+
|
582 |
+
ul.happyforms-parts-list li[data-part-type="date"] .happyforms-parts-list-item-title:before {
|
583 |
+
background-image: url(../svg/icons/date.svg);
|
584 |
+
}
|
585 |
+
|
586 |
+
ul.happyforms-parts-list li[data-part-type="checkbox"] .happyforms-parts-list-item-title:before {
|
587 |
+
background-image: url(../svg/icons/multiple-choice.svg);
|
588 |
+
}
|
589 |
+
|
590 |
+
ul.happyforms-parts-list li[data-part-type="radio"] .happyforms-parts-list-item-title:before {
|
591 |
+
background-image: url(../svg/icons/single-choice.svg);
|
592 |
+
}
|
593 |
+
|
594 |
+
ul.happyforms-parts-list li[data-part-type="select"] .happyforms-parts-list-item-title:before {
|
595 |
+
background-image: url(../svg/icons/dropdown.svg);
|
596 |
+
}
|
597 |
+
|
598 |
+
ul.happyforms-parts-list li[data-part-type="country"] .happyforms-parts-list-item-title:before {
|
599 |
+
background-image: url(../svg/icons/country.svg);
|
600 |
+
}
|
601 |
+
|
602 |
+
ul.happyforms-parts-list li[data-part-type="address"] .happyforms-parts-list-item-title:before {
|
603 |
+
background-image: url(../svg/icons/country.svg);
|
604 |
+
}
|
605 |
+
|
606 |
+
ul.happyforms-parts-list li[data-part-type="title"] .happyforms-parts-list-item-title:before {
|
607 |
+
background-image: url(../svg/icons/title.svg);
|
608 |
+
}
|
609 |
+
|
610 |
+
ul.happyforms-parts-list li[data-part-type="legal"] .happyforms-parts-list-item-title:before {
|
611 |
+
background-image: url(../svg/icons/legal.svg);
|
612 |
+
}
|
613 |
+
|
614 |
+
ul.happyforms-parts-list li[data-part-type="placeholder"] .happyforms-parts-list-item-title:before {
|
615 |
+
background-image: url(../svg/icons/placeholder.svg);
|
616 |
+
}
|
617 |
+
|
618 |
+
ul.happyforms-parts-list li[data-part-type="rating"] .happyforms-parts-list-item-title:before {
|
619 |
+
background-image: url(../svg/icons/rating.svg);
|
620 |
+
}
|
621 |
+
|
622 |
+
ul.happyforms-parts-list li[data-part-type="scale"] .happyforms-parts-list-item-title:before {
|
623 |
+
background-image: url(../svg/icons/scale.svg);
|
624 |
+
}
|
625 |
+
|
626 |
+
ul.happyforms-parts-list li[data-part-type="phone"] .happyforms-parts-list-item-title:before {
|
627 |
+
background-image: url(../svg/icons/phone.svg);
|
628 |
+
}
|
629 |
+
|
630 |
+
ul.happyforms-parts-list .happyforms-parts-list-item-title h3 {
|
631 |
+
margin: 0;
|
632 |
+
padding: 0 0 5px;
|
633 |
+
font-size: 14px;
|
634 |
+
line-height: 1;
|
635 |
+
overflow: hidden;
|
636 |
+
white-space: nowrap;
|
637 |
+
text-overflow: ellipsis;
|
638 |
+
}
|
639 |
+
|
640 |
+
ul.happyforms-parts-list .happyforms-parts-list-item-description {
|
641 |
+
padding: 0;
|
642 |
+
color: #72777c;
|
643 |
+
font-size: 12px;
|
644 |
+
}
|
645 |
+
|
646 |
+
.happyforms-part-widget .happyforms-widget-content {
|
647 |
+
display: none;
|
648 |
+
}
|
649 |
+
|
650 |
+
.happyforms-widget-expanded .happyforms-widget-content {
|
651 |
+
display: block;
|
652 |
+
}
|
653 |
+
|
654 |
+
ul.happyforms-style-controls {
|
655 |
+
position: relative;
|
656 |
+
float: left;
|
657 |
+
width: 100%;
|
658 |
+
height: 100%;
|
659 |
+
}
|
660 |
+
|
661 |
+
ul.happyforms-style-controls .customize-control {
|
662 |
+
margin-bottom: 20px;
|
663 |
+
padding: 0 12px;
|
664 |
+
box-sizing: border-box;
|
665 |
+
}
|
666 |
+
|
667 |
+
/* Style view */
|
668 |
+
.happyforms-stack-view.happyforms-style-view {
|
669 |
+
padding: 0;
|
670 |
+
overflow: hidden;
|
671 |
+
top: 0;
|
672 |
+
bottom: 0;
|
673 |
+
}
|
674 |
+
|
675 |
+
ul.happyforms-style-controls .customize-control.happyforms-divider-control {
|
676 |
+
margin-bottom: 0;
|
677 |
+
padding: 0;
|
678 |
+
transform: translateX(0);
|
679 |
+
transition: .18s transform cubic-bezier(.645, .045, .355, 1),
|
680 |
+
.18s -webkit-transform cubic-bezier(.645, .045, .355, 1);
|
681 |
+
}
|
682 |
+
|
683 |
+
ul.happyforms-style-controls .customize-control.happyforms-divider-control:first-child {
|
684 |
+
margin-top: 15px;
|
685 |
+
border-top: 1px solid #ddd;
|
686 |
+
}
|
687 |
+
|
688 |
+
ul.happyforms-style-controls .customize-control.happyforms-divider-control.inactive {
|
689 |
+
transform: translateX(-100%);
|
690 |
+
}
|
691 |
+
|
692 |
+
ul.happyforms-style-controls .customize-control.happyforms-divider-control.active {
|
693 |
+
transform: translateX(0);
|
694 |
+
}
|
695 |
+
|
696 |
+
ul.happyforms-style-controls .customize-control.happyforms-divider-control h3 {
|
697 |
+
text-transform: capitalize;
|
698 |
+
}
|
699 |
+
|
700 |
+
.happyforms-style-controls-group {
|
701 |
+
position: absolute;
|
702 |
+
top: 0;
|
703 |
+
left: 0;
|
704 |
+
z-index: 9999;
|
705 |
+
height: 0;
|
706 |
+
overflow: hidden;
|
707 |
+
width: 100%;
|
708 |
+
background-color: #eee;
|
709 |
+
transform: translateX(100%);
|
710 |
+
transition: .18s transform cubic-bezier(.645, .045, .355, 1),
|
711 |
+
.18s -webkit-transform cubic-bezier(.645, .045, .355, 1)
|
712 |
+
}
|
713 |
+
|
714 |
+
.happyforms-style-controls-group .accordion-section-title {
|
715 |
+
padding: 10px 10px 11px 14px;
|
716 |
+
}
|
717 |
+
|
718 |
+
.happyforms-style-controls-group .accordion-section-title .panel-title {
|
719 |
+
text-transform: capitalize;
|
720 |
+
}
|
721 |
+
|
722 |
+
.happyforms-style-controls-group.open {
|
723 |
+
height: 100%;
|
724 |
+
overflow: auto;
|
725 |
+
transform: translateX(0);
|
726 |
+
}
|
727 |
+
|
728 |
+
.happyforms-style-controls-group.closing {
|
729 |
+
transform: translateX(100%);
|
730 |
+
}
|
731 |
+
|
732 |
+
.control-section h3.accordion-section-title {
|
733 |
+
padding-right: 30px;
|
734 |
+
color: #555d66;
|
735 |
+
background-color: #fff;
|
736 |
+
border-bottom: 1px solid #ddd;
|
737 |
+
border-left: 4px solid #fff;
|
738 |
+
transition: .15s color ease-in-out, .15s background-color ease-in-out, .15s border-color ease-in-out;
|
739 |
+
font-size: 14px;
|
740 |
+
cursor: pointer;
|
741 |
+
}
|
742 |
+
|
743 |
+
.control-section h3.accordion-section-title:after {
|
744 |
+
content: "\f345" !important;
|
745 |
+
font: normal 20px/1 dashicons;
|
746 |
+
speak: none;
|
747 |
+
display: block;
|
748 |
+
-webkit-font-smoothing: antialiased;
|
749 |
+
-moz-osx-font-smoothing: grayscale;
|
750 |
+
text-decoration: none !important;
|
751 |
+
position: absolute;
|
752 |
+
top: 12px;
|
753 |
+
right: 10px;
|
754 |
+
z-index: 1;
|
755 |
+
color: #a0a5aa;
|
756 |
+
}
|
757 |
+
|
758 |
+
.control-section h3.accordion-section-title:hover {
|
759 |
+
border-left-color: #0073aa;
|
760 |
+
}
|
761 |
+
|
762 |
+
.control-section h3.accordion-section-title:hover:after {
|
763 |
+
color: #0073aa;
|
764 |
+
}
|
765 |
+
|
766 |
+
/* Tinymce control styles */
|
767 |
+
.customize-control .mce-tinymce {
|
768 |
+
border: 1px solid #ddd;
|
769 |
+
box-sizing: border-box;
|
770 |
+
}
|
771 |
+
|
772 |
+
/* Range control styles */
|
773 |
+
li.customize-control.happyforms-range-control:after {
|
774 |
+
content: '';
|
775 |
+
display: table;
|
776 |
+
clear: both;
|
777 |
+
}
|
778 |
+
|
779 |
+
li.customize-control.happyforms-range-control label {
|
780 |
+
display: block;
|
781 |
+
}
|
782 |
+
|
783 |
+
li.customize-control.happyforms-range-control input {
|
784 |
+
float: left;
|
785 |
+
width: 20%;
|
786 |
+
}
|
787 |
+
|
788 |
+
li.customize-control.happyforms-range-control .happyforms-range-slider {
|
789 |
+
float: left;
|
790 |
+
width: 70%;
|
791 |
+
margin-left: 5%;
|
792 |
+
margin-top: 9px;
|
793 |
+
}
|
794 |
+
|
795 |
+
li.customize-control.happyforms-range-control .ui-slider-handle {
|
796 |
+
position: absolute;
|
797 |
+
z-index: 2;
|
798 |
+
top: -.3em;
|
799 |
+
border-color: #777;
|
800 |
+
background: #777;
|
801 |
+
}
|
802 |
+
|
803 |
+
li.customize-control.happyforms-range-control .ui-slider-horizontal {
|
804 |
+
position: relative;
|
805 |
+
height: .6em;
|
806 |
+
border-color: #fff;
|
807 |
+
background: #fff;
|
808 |
+
}
|
809 |
+
|
810 |
+
li.customize-control.happyforms-range-control .ui-slider-handle {
|
811 |
+
width: 1.2em;
|
812 |
+
height: 1.2em;
|
813 |
+
border-radius: 100%;
|
814 |
+
}
|
815 |
+
|
816 |
+
li.customize-control.happyforms-range-control .ui-slider-handle:hover {
|
817 |
+
cursor: pointer;
|
818 |
+
}
|
819 |
+
|
820 |
+
/* Button set */
|
821 |
+
li.customize-control .happyforms-buttonset-container {
|
822 |
+
margin-top: 10px;
|
823 |
+
}
|
824 |
+
|
825 |
+
li.customize-control .happyforms-buttonset-container label {
|
826 |
+
padding: 7px 10px;
|
827 |
+
border: 1px solid #fff;
|
828 |
+
border-right-width: 0px;
|
829 |
+
}
|
830 |
+
|
831 |
+
li.customize-control .happyforms-buttonset-container label:last-child {
|
832 |
+
border-right-width: 1px;
|
833 |
+
}
|
834 |
+
|
835 |
+
li.customize-control .happyforms-buttonset-container .ui-state-hover {
|
836 |
+
background-color: #dedede;
|
837 |
+
}
|
838 |
+
|
839 |
+
li.customize-control .happyforms-buttonset-container .ui-state-active,
|
840 |
+
li.customize-control .happyforms-buttonset-container .ui-state-active.ui-state-hover {
|
841 |
+
background-color: #fff;
|
842 |
+
}
|
843 |
+
|
844 |
+
li.customize-control.happyforms-buttonset-control + .customize-control h2 {
|
845 |
+
margin-top: 1.8rem;
|
846 |
+
}
|
847 |
+
|
848 |
+
.happyforms-parts-expand-collapse-wrap {
|
849 |
+
float: right;
|
850 |
+
font-weight: normal;
|
851 |
+
font-size: 11px;
|
852 |
+
}
|
853 |
+
|
854 |
+
.happyforms-parts-expand-collapse-wrap .expand-collapse-all {
|
855 |
+
display: none;
|
856 |
+
}
|
trunk/assets/css/font-awesome.min.css
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
1 |
+
/*!
|
2 |
+
* Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome
|
3 |
+
* License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
|
4 |
+
*/@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.7.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}.fa-gitlab:before{content:"\f296"}.fa-wpbeginner:before{content:"\f297"}.fa-wpforms:before{content:"\f298"}.fa-envira:before{content:"\f299"}.fa-universal-access:before{content:"\f29a"}.fa-wheelchair-alt:before{content:"\f29b"}.fa-question-circle-o:before{content:"\f29c"}.fa-blind:before{content:"\f29d"}.fa-audio-description:before{content:"\f29e"}.fa-volume-control-phone:before{content:"\f2a0"}.fa-braille:before{content:"\f2a1"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:"\f2a4"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-signing:before,.fa-sign-language:before{content:"\f2a7"}.fa-low-vision:before{content:"\f2a8"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-pied-piper:before{content:"\f2ae"}.fa-first-order:before{content:"\f2b0"}.fa-yoast:before{content:"\f2b1"}.fa-themeisle:before{content:"\f2b2"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\f2b3"}.fa-fa:before,.fa-font-awesome:before{content:"\f2b4"}.fa-handshake-o:before{content:"\f2b5"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-o:before{content:"\f2b7"}.fa-linode:before{content:"\f2b8"}.fa-address-book:before{content:"\f2b9"}.fa-address-book-o:before{content:"\f2ba"}.fa-vcard:before,.fa-address-card:before{content:"\f2bb"}.fa-vcard-o:before,.fa-address-card-o:before{content:"\f2bc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-circle-o:before{content:"\f2be"}.fa-user-o:before{content:"\f2c0"}.fa-id-badge:before{content:"\f2c1"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-drivers-license-o:before,.fa-id-card-o:before{content:"\f2c3"}.fa-quora:before{content:"\f2c4"}.fa-free-code-camp:before{content:"\f2c5"}.fa-telegram:before{content:"\f2c6"}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-shower:before{content:"\f2cc"}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:"\f2cd"}.fa-podcast:before{content:"\f2ce"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-times-rectangle:before,.fa-window-close:before{content:"\f2d3"}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:"\f2d4"}.fa-bandcamp:before{content:"\f2d5"}.fa-grav:before{content:"\f2d6"}.fa-etsy:before{content:"\f2d7"}.fa-imdb:before{content:"\f2d8"}.fa-ravelry:before{content:"\f2d9"}.fa-eercast:before{content:"\f2da"}.fa-microchip:before{content:"\f2db"}.fa-snowflake-o:before{content:"\f2dc"}.fa-superpowers:before{content:"\f2dd"}.fa-wpexplorer:before{content:"\f2de"}.fa-meetup:before{content:"\f2e0"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}
|
trunk/assets/css/frontend.css
ADDED
@@ -0,0 +1,1445 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
:root {
|
2 |
+
/* colors */
|
3 |
+
--happyforms-color-primary: #000;
|
4 |
+
--happyforms-color-success: #39b54a;
|
5 |
+
--happyforms-color-error: #ff7550;
|
6 |
+
--happyforms-color-part-title: #000;
|
7 |
+
--happyforms-color-part-value: #000;
|
8 |
+
--happyforms-color-part-placeholder: #aaa;
|
9 |
+
--happyforms-color-part-required-text: #ff7550;
|
10 |
+
--happyforms-color-part-border: #dbdbdb;
|
11 |
+
--happyforms-color-part-border-focus: #000;
|
12 |
+
--happyforms-color-part-background: #fff;
|
13 |
+
--happyforms-color-part-background-focus: #fff;
|
14 |
+
--happyforms-color-submit-background: #000;
|
15 |
+
--happyforms-color-submit-background-hover: #dbdbdb;
|
16 |
+
--happyforms-color-submit-background-focus: #dbdbdb;
|
17 |
+
--happyforms-color-submit-border: transparent;
|
18 |
+
--happyforms-color-rating: #ccc;
|
19 |
+
--happyforms-color-rating-hover: #f39c00;
|
20 |
+
/* font */
|
21 |
+
--happyforms-form-title-font-size: 32px;
|
22 |
+
--happyforms-form-font-weight: normal;
|
23 |
+
--happyforms-part-title-font-size: 16px;
|
24 |
+
--happyforms-part-description-font-size: 14px;
|
25 |
+
--happyforms-part-value-font-size: 16px;
|
26 |
+
--happyforms-submit-button-font-size: 18px;
|
27 |
+
/* animations and transitions */
|
28 |
+
--happyforms-transition-duration: 0.25s;
|
29 |
+
}
|
30 |
+
|
31 |
+
.happyforms-flex {
|
32 |
+
display: flex;
|
33 |
+
flex-flow: row wrap;
|
34 |
+
align-items: flex-start;
|
35 |
+
max-width: 100%;
|
36 |
+
padding: 7.5% 0;
|
37 |
+
}
|
38 |
+
|
39 |
+
.happyforms-form form {
|
40 |
+
max-width: 100%;
|
41 |
+
border-style: solid;
|
42 |
+
border-width: 0;
|
43 |
+
font-weight: normal;
|
44 |
+
font-weight: var(--happyforms-form-font-weight);
|
45 |
+
background-color: transparent;
|
46 |
+
}
|
47 |
+
|
48 |
+
h3.happyforms-form__title {
|
49 |
+
margin: 0;
|
50 |
+
padding: 0 1%;
|
51 |
+
font-weight: bold;
|
52 |
+
font-size: 32px;
|
53 |
+
font-size: var(--happyforms-form-title-font-size);
|
54 |
+
color: #000;
|
55 |
+
color: var(--happyforms-color-primary);
|
56 |
+
}
|
57 |
+
|
58 |
+
.happyforms-form--hide-title h3.happyforms-form__title {
|
59 |
+
display: none;
|
60 |
+
}
|
61 |
+
|
62 |
+
/* parts - general */
|
63 |
+
|
64 |
+
.happyforms-form__part {
|
65 |
+
position: relative;
|
66 |
+
display: block;
|
67 |
+
width: 100%;
|
68 |
+
margin-bottom: 20px;
|
69 |
+
padding: 5px 1%;
|
70 |
+
}
|
71 |
+
|
72 |
+
@media screen and (min-width: 800px) {
|
73 |
+
.happyforms-part--width-half {
|
74 |
+
width: 50%;
|
75 |
+
}
|
76 |
+
.happyforms-part--width-third {
|
77 |
+
width: 33.333%;
|
78 |
+
}
|
79 |
+
}
|
80 |
+
|
81 |
+
.happyforms-part__label {
|
82 |
+
display: inline-block;
|
83 |
+
cursor: pointer;
|
84 |
+
margin-bottom: 20px;
|
85 |
+
font-size: 16px;
|
86 |
+
font-size: var(--happyforms-part-title-font-size);
|
87 |
+
}
|
88 |
+
|
89 |
+
.happyforms-part__label .label {
|
90 |
+
font-weight: bold;
|
91 |
+
color: #000;
|
92 |
+
color: var(--happyforms-color-part-title);
|
93 |
+
}
|
94 |
+
|
95 |
+
.happyforms-part__description {
|
96 |
+
display: block;
|
97 |
+
margin: 5px 0 0;
|
98 |
+
font-size: 14px;
|
99 |
+
font-size: var(--happyforms-part-description-font-size);
|
100 |
+
color: #000;
|
101 |
+
color: var(--happyforms-color-primary);
|
102 |
+
}
|
103 |
+
|
104 |
+
.happyforms-part input[type=text],
|
105 |
+
.happyforms-part input[type=email],
|
106 |
+
.happyforms-part input[type=tel],
|
107 |
+
.happyforms-part input[type=number],
|
108 |
+
.happyforms-part input[type=range],
|
109 |
+
.happyforms-part textarea {
|
110 |
+
width: 100%;
|
111 |
+
height: auto !important;
|
112 |
+
padding: 10px;
|
113 |
+
border-width: 1px;
|
114 |
+
border-style: solid;
|
115 |
+
border-color: #dbdbdb;
|
116 |
+
border-color: var(--happyforms-color-part-border);
|
117 |
+
border-radius: 6px;
|
118 |
+
box-shadow: none;
|
119 |
+
font-style: normal;
|
120 |
+
font-size: 16px;
|
121 |
+
font-size: var(--happyforms-part-value-font-size);
|
122 |
+
background-color: #fff;
|
123 |
+
background-color: var(--happyforms-color-part-background);
|
124 |
+
color: #000;
|
125 |
+
color: var(--happyforms-color-part-value);
|
126 |
+
transition-property: none;
|
127 |
+
transition-duration: 0.1s;
|
128 |
+
transition-duration: var(--happyforms-transition-duration);
|
129 |
+
transition-timing-function: ease-in;
|
130 |
+
}
|
131 |
+
|
132 |
+
.happyforms-form--part-border-off .happyforms-part input[type=text],
|
133 |
+
.happyforms-form--part-border-off .happyforms-part input[type=email],
|
134 |
+
.happyforms-form--part-border-off .happyforms-part input[type=tel],
|
135 |
+
.happyforms-form--part-border-off .happyforms-part input[type=number],
|
136 |
+
.happyforms-form--part-border-off .happyforms-part input[type=range],
|
137 |
+
.happyforms-form--part-border-off .happyforms-part textarea {
|
138 |
+
border-color: transparent;
|
139 |
+
}
|
140 |
+
|
141 |
+
.happyforms-part input[type=text]:focus,
|
142 |
+
.happyforms-part input[type=email]:focus,
|
143 |
+
.happyforms-part input[type=tel]:focus,
|
144 |
+
.happyforms-part input[type=number]:focus,
|
145 |
+
.happyforms-part textarea:focus {
|
146 |
+
border-width: 1px;
|
147 |
+
border-style: solid;
|
148 |
+
border-color: #000;
|
149 |
+
border-color: var(--happyforms-color-part-border-focus);
|
150 |
+
background-color: #fff;
|
151 |
+
background-color: var(--happyforms-color-part-background-focus);
|
152 |
+
}
|
153 |
+
|
154 |
+
.happyforms-form--part-border-off .happyforms-part input[type=text]:focus,
|
155 |
+
.happyforms-form--part-border-off .happyforms-part input[type=email]:focus,
|
156 |
+
.happyforms-form--part-border-off .happyforms-part input[type=tel]:focus,
|
157 |
+
.happyforms-form--part-border-off .happyforms-part input[type=number]:focus,
|
158 |
+
.happyforms-form--part-border-off .happyforms-part textarea:focus {
|
159 |
+
border-color: transparent;
|
160 |
+
}
|
161 |
+
|
162 |
+
.happyforms-part.happyforms-part--error input[type=text],
|
163 |
+
.happyforms-part.happyforms-part--error input[type=email],
|
164 |
+
.happyforms-part.happyforms-part--error input[type=tel],
|
165 |
+
.happyforms-part.happyforms-part--error input[type=number],
|
166 |
+
.happyforms-part.happyforms-part--error input[type=range],
|
167 |
+
.happyforms-part.happyforms-part--error textarea {
|
168 |
+
border-color: #ff7550;
|
169 |
+
border-color: var(--happyforms-color-error);
|
170 |
+
}
|
171 |
+
|
172 |
+
.happyforms-part.display-type--block .happyforms-part__el {
|
173 |
+
display: block;
|
174 |
+
}
|
175 |
+
|
176 |
+
/* placeholders */
|
177 |
+
|
178 |
+
.happyforms-part ::-webkit-input-placeholder {
|
179 |
+
font-weight: normal;
|
180 |
+
font-style: normal;
|
181 |
+
color: #aaa;
|
182 |
+
color: var(--happyforms-color-part-placeholder);
|
183 |
+
}
|
184 |
+
|
185 |
+
.happyforms-part ::-moz-placeholder {
|
186 |
+
font-weight: normal;
|
187 |
+
font-style: normal;
|
188 |
+
color: #aaa;
|
189 |
+
color: var(--happyforms-color-part-placeholder);
|
190 |
+
}
|
191 |
+
|
192 |
+
.happyforms-part ::-ms-placeholder {
|
193 |
+
font-weight: normal;
|
194 |
+
font-style: normal;
|
195 |
+
color: #aaa;
|
196 |
+
color: var(--happyforms-color-part-placeholder);
|
197 |
+
}
|
198 |
+
|
199 |
+
.happyforms-part ::placeholder {
|
200 |
+
font-weight: normal;
|
201 |
+
font-style: normal;
|
202 |
+
color: #aaa;
|
203 |
+
color: var(--happyforms-color-part-placeholder);
|
204 |
+
}
|
205 |
+
|
206 |
+
.happyforms-part-el-wrap {
|
207 |
+
position: relative;
|
208 |
+
}
|
209 |
+
|
210 |
+
.happyforms-part-wrap {
|
211 |
+
position: relative;
|
212 |
+
}
|
213 |
+
|
214 |
+
.happyforms-part-wrap--confirmation {
|
215 |
+
margin-top: 10px;
|
216 |
+
}
|
217 |
+
|
218 |
+
.happyforms-required {
|
219 |
+
color: #ff7550;
|
220 |
+
color: var(--happyforms-color-part-required-text);
|
221 |
+
}
|
222 |
+
|
223 |
+
/* label placement */
|
224 |
+
|
225 |
+
.happyforms-part--label-below .happyforms-part-wrap {
|
226 |
+
display: flex;
|
227 |
+
flex-flow: row wrap-reverse;
|
228 |
+
align-content: flex-end;
|
229 |
+
}
|
230 |
+
|
231 |
+
.happyforms-part--label-below .happyforms-part__label {
|
232 |
+
order: 2;
|
233 |
+
width: 100%;
|
234 |
+
margin-bottom: 5px;
|
235 |
+
}
|
236 |
+
|
237 |
+
.happyforms-part--label-above .happyforms-part__label--confirmation {
|
238 |
+
margin-top: 10px;
|
239 |
+
}
|
240 |
+
|
241 |
+
.happyforms-part--label-below input,
|
242 |
+
.happyforms-part--label-below textarea,
|
243 |
+
.happyforms-part--label-below select,
|
244 |
+
.happyforms-part--label-below .happyforms-part__select-wrap,
|
245 |
+
.happyforms-part--label-below .happyforms-part__el {
|
246 |
+
order: 3;
|
247 |
+
}
|
248 |
+
|
249 |
+
.happyforms-part--label-below .happyforms-part__description {
|
250 |
+
order: 1;
|
251 |
+
margin-top: 0;
|
252 |
+
}
|
253 |
+
|
254 |
+
.happyforms-part--label-below.happyforms-part--date .happyforms-part__el {
|
255 |
+
width: 100%;
|
256 |
+
order: 2;
|
257 |
+
}
|
258 |
+
|
259 |
+
.happyforms-part--label-left .happyforms-part__label {
|
260 |
+
float: left;
|
261 |
+
width: 25%;
|
262 |
+
}
|
263 |
+
|
264 |
+
.happyforms-part--label-left input.happyforms-part__el,
|
265 |
+
.happyforms-part--label-left textarea.happyforms-part__el,
|
266 |
+
.happyforms-part--label-left .happyforms-part__select-wrap {
|
267 |
+
float: right;
|
268 |
+
width: 75%;
|
269 |
+
}
|
270 |
+
|
271 |
+
.happyforms-part--label-left .happyforms-part__description {
|
272 |
+
clear: both;
|
273 |
+
float: right;
|
274 |
+
width: 75%;
|
275 |
+
}
|
276 |
+
|
277 |
+
.happyforms-part--label-below .happyforms-part__el,
|
278 |
+
.happyforms-part--label-below input.happyforms-part__el,
|
279 |
+
.happyforms-part--label-below select.happyforms-part__el,
|
280 |
+
.happyforms-part--label-below textarea.happyforms-part__el {
|
281 |
+
position: relative;
|
282 |
+
top: 5px;
|
283 |
+
margin-bottom: 10px;
|
284 |
+
}
|
285 |
+
|
286 |
+
/* parts - option labels */
|
287 |
+
|
288 |
+
.happyforms-part .option-label {
|
289 |
+
position: relative;
|
290 |
+
cursor: pointer;
|
291 |
+
display: inline-block;
|
292 |
+
margin-bottom: 10px;
|
293 |
+
padding: 0 5px 5px 0;
|
294 |
+
font-size: 16px;
|
295 |
+
font-size: var(--happyforms-part-value-font-size);
|
296 |
+
}
|
297 |
+
|
298 |
+
.happyforms-part--radio .option-label {
|
299 |
+
margin-right: 20px;
|
300 |
+
padding: 10px;
|
301 |
+
background-color: #fff;
|
302 |
+
}
|
303 |
+
|
304 |
+
.happyforms-part--radio .option-label .border {
|
305 |
+
position: absolute;
|
306 |
+
top: 0;
|
307 |
+
left: 0;
|
308 |
+
z-index: 0;
|
309 |
+
width: 100%;
|
310 |
+
height: 100%;
|
311 |
+
border-radius: 6px;
|
312 |
+
border: 1px solid;
|
313 |
+
border-color: #dbdbdb;
|
314 |
+
border-color: var(--happyforms-color-part-border);
|
315 |
+
background-color: #fff;
|
316 |
+
background-color: var(--happyforms-color-part-background);
|
317 |
+
transition: border-color var(--happyforms-transition-duration);
|
318 |
+
}
|
319 |
+
|
320 |
+
.happyforms-form--part-borders-bottom-only .happyforms-part--radio .option-label .border {
|
321 |
+
border-top-color: transparent;
|
322 |
+
border-left-color: transparent;
|
323 |
+
border-right-color: transparent;
|
324 |
+
}
|
325 |
+
|
326 |
+
.happyforms-form--part-border-off .option-label .border {
|
327 |
+
border-color: transparent;
|
328 |
+
}
|
329 |
+
|
330 |
+
.happyforms-part--radio .option-label input,
|
331 |
+
.happyforms-part--checkbox .option-label input {
|
332 |
+
top: 3px;
|
333 |
+
}
|
334 |
+
|
335 |
+
.happyforms-part--radio input:checked~.border,
|
336 |
+
.happyforms-part--radio .option-label:hover .border {
|
337 |
+
border-color: #000;
|
338 |
+
border-color: var(--happyforms-color-part-border-focus);
|
339 |
+
background-color: #fff;
|
340 |
+
background-color: var(--happyforms-color-part-background-focus);
|
341 |
+
}
|
342 |
+
|
343 |
+
.happyforms-form--part-borders-bottom-only .happyforms-part--radio input:checked~.border,
|
344 |
+
.happyforms-form--part-borders-bottom-only .happyforms-part--radio .option-label:hover .border {
|
345 |
+
border-top-color: transparent;
|
346 |
+
border-left-color: transparent;
|
347 |
+
border-right-color: transparent;
|
348 |
+
}
|
349 |
+
|
350 |
+
.happyforms-part--radio .option-label input:focus {
|
351 |
+
outline: 0;
|
352 |
+
}
|
353 |
+
|
354 |
+
.happyforms-part--radio .option-label .label,
|
355 |
+
.happyforms-part--checkbox .option-label .label {
|
356 |
+
position: relative;
|
357 |
+
display: inline-block;
|
358 |
+
margin-right: 15px;
|
359 |
+
padding: 0 10px;
|
360 |
+
}
|
361 |
+
|
362 |
+
.happyforms-part-option {
|
363 |
+
margin-bottom: 20px;
|
364 |
+
}
|
365 |
+
|
366 |
+
.happyforms-part-option__description {
|
367 |
+
display: block;
|
368 |
+
width: 100%;
|
369 |
+
max-width: 400px;
|
370 |
+
margin-top: 3px;
|
371 |
+
margin-right: 20px;
|
372 |
+
font-size: 12px;
|
373 |
+
color: #000;
|
374 |
+
color: var(--happyforms-color-primary);
|
375 |
+
}
|
376 |
+
|
377 |
+
.happyforms-part--radio.display-type--block .happyforms-part-option__description {
|
378 |
+
max-width: none;
|
379 |
+
}
|
380 |
+
|
381 |
+
.happyforms-part.display-type--block .option-label {
|
382 |
+
display: block;
|
383 |
+
margin-right: 0;
|
384 |
+
}
|
385 |
+
|
386 |
+
.happyforms-part--checkbox.display-type--block .option-label {
|
387 |
+
margin-bottom: 10px;
|
388 |
+
}
|
389 |
+
|
390 |
+
/* tooltips */
|
391 |
+
|
392 |
+
.happyforms-tooltip {
|
393 |
+
position: absolute;
|
394 |
+
bottom: 0;
|
395 |
+
left: 0;
|
396 |
+
right: 10px;
|
397 |
+
height: 50%;
|
398 |
+
overflow: visible;
|
399 |
+
pointer-events: none;
|
400 |
+
}
|
401 |
+
|
402 |
+
.happyforms-tooltip__trigger {
|
403 |
+
display: block;
|
404 |
+
position: absolute;
|
405 |
+
top: 48%;
|
406 |
+
right: 1px;
|
407 |
+
padding: 10px;
|
408 |
+
background-color: transparent;
|
409 |
+
-ms-transform: translate(0, -50%);
|
410 |
+
-webkit-transform: translate(0, -50%);
|
411 |
+
transform: translate(0, -50%);
|
412 |
+
pointer-events: auto;
|
413 |
+
cursor: pointer;
|
414 |
+
}
|
415 |
+
|
416 |
+
.happyforms-tooltip__trigger:after {
|
417 |
+
content: "?";
|
418 |
+
display: block;
|
419 |
+
width: 18px;
|
420 |
+
height: 18px;
|
421 |
+
border-radius: 50%;
|
422 |
+
font-style: normal;
|
423 |
+
font-size: 11px;
|
424 |
+
line-height: 18px;
|
425 |
+
color: #fff;
|
426 |
+
color: var(--happyforms-color-part-background);
|
427 |
+
text-align: center;
|
428 |
+
background-color: #000;
|
429 |
+
background-color: var(--happyforms-color-part-value);
|
430 |
+
}
|
431 |
+
|
432 |
+
.happyforms-tooltip .happyforms-part__description {
|
433 |
+
position: absolute;
|
434 |
+
z-index: 999;
|
435 |
+
top: 0;
|
436 |
+
right: 0;
|
437 |
+
transform: translate(0, -115%);
|
438 |
+
opacity: 0;
|
439 |
+
width: auto;
|
440 |
+
visibility: hidden;
|
441 |
+
padding: 10px 15px;
|
442 |
+
border: 1px solid #dbdbdb;
|
443 |
+
border-radius: 6px;
|
444 |
+
font-weight: normal;
|
445 |
+
color: #000;
|
446 |
+
color: var(--happyforms-color-primary);
|
447 |
+
text-align: center;
|
448 |
+
background-color: #fff;
|
449 |
+
background-color: var(--happyforms-color-part-background);
|
450 |
+
transition: opacity 0.2s;
|
451 |
+
}
|
452 |
+
|
453 |
+
.happyforms-form--part-inner-padding-wide .happyforms-tooltip .happyforms-part__description {
|
454 |
+
transform: translate(0, -100%);
|
455 |
+
}
|
456 |
+
|
457 |
+
.happyforms-form--part-inner-padding-wide .happyforms-tooltip {
|
458 |
+
height: 54%;
|
459 |
+
}
|
460 |
+
|
461 |
+
.happyforms-form--part-inner-padding-narrow .happyforms-tooltip .happyforms-part__description {
|
462 |
+
transform: translate(0, -120%);
|
463 |
+
}
|
464 |
+
|
465 |
+
.happyforms-form--part-inner-padding-narrow .happyforms-tooltip {
|
466 |
+
height: 42%;
|
467 |
+
}
|
468 |
+
|
469 |
+
.happyforms-form--part-inner-padding-wide .happyforms-tooltip .happyforms-part__description {
|
470 |
+
transform: translate(0, -100%);
|
471 |
+
}
|
472 |
+
|
473 |
+
.happyforms-tooltip .happyforms-part__description:before {
|
474 |
+
content: '';
|
475 |
+
position: absolute;
|
476 |
+
top: 100%;
|
477 |
+
right: 12px;
|
478 |
+
width: 0;
|
479 |
+
height: 0;
|
480 |
+
border: 8px solid transparent;
|
481 |
+
border-top-color: #dbdbdb;
|
482 |
+
}
|
483 |
+
|
484 |
+
.happyforms-tooltip .happyforms-part__description:after {
|
485 |
+
content: '';
|
486 |
+
position: absolute;
|
487 |
+
top: calc(100% - 1px);
|
488 |
+
right: 13px;
|
489 |
+
width: 0;
|
490 |
+
height: 0;
|
491 |
+
border: 7px solid transparent;
|
492 |
+
border-top-color: #fff;
|
493 |
+
border-top-color: var(--happyforms-color-part-background);
|
494 |
+
}
|
495 |
+
|
496 |
+
.happyforms-tooltip:hover .happyforms-part__description {
|
497 |
+
visibility: visible;
|
498 |
+
opacity: 1;
|
499 |
+
}
|
500 |
+
|
501 |
+
.happyforms-part--multi_line_text .happyforms-tooltip,
|
502 |
+
.happyforms-part--date .happyforms-tooltip,
|
503 |
+
.happyforms-part--select .happyforms-tooltip,
|
504 |
+
.happyforms-part--rating .happyforms-tooltip,
|
505 |
+
.happyforms-part--scale .happyforms-tooltip,
|
506 |
+
.happyforms-part--checkbox .happyforms-tooltip,
|
507 |
+
.happyforms-part--radio .happyforms-tooltip,
|
508 |
+
.happyforms-part--title .happyforms-tooltip {
|
509 |
+
top: 0;
|
510 |
+
bottom: auto;
|
511 |
+
}
|
512 |
+
|
513 |
+
.happyforms-part--multi_line_text .happyforms-tooltip,
|
514 |
+
.happyforms-part--checkbox .happyforms-tooltip,
|
515 |
+
.happyforms-part--radio .happyforms-tooltip {
|
516 |
+
height: 30px;
|
517 |
+
}
|
518 |
+
|
519 |
+
.happyforms-part--multi_line_text .happyforms-tooltip .happyforms-part__description,
|
520 |
+
.happyforms-part--checkbox .happyforms-tooltip .happyforms-part__description,
|
521 |
+
.happyforms-part--radio .happyforms-tooltip .happyforms-part__description {
|
522 |
+
transform: translate(0, -130%);
|
523 |
+
}
|
524 |
+
|
525 |
+
/* parts - radio, checkbox */
|
526 |
+
|
527 |
+
.happyforms-part--radio .happyforms-part__el {
|
528 |
+
display: flex;
|
529 |
+
}
|
530 |
+
|
531 |
+
.happyforms-part--radio {
|
532 |
+
margin-bottom: 0;
|
533 |
+
}
|
534 |
+
|
535 |
+
.happyforms-part--radio.display-type--block {
|
536 |
+
margin-bottom: 20px;
|
537 |
+
}
|
538 |
+
|
539 |
+
.happyforms-part--radio .checkmark,
|
540 |
+
.happyforms-part--checkbox .checkmark {
|
541 |
+
position: relative;
|
542 |
+
top: 4px;
|
543 |
+
z-index: 5;
|
544 |
+
display: inline-block;
|
545 |
+
width: 20px;
|
546 |
+
height: 20px;
|
547 |
+
border-radius: 50%;
|
548 |
+
border: 1px solid;
|
549 |
+
border-color: #dbdbdb;
|
550 |
+
border-color: var(--happyforms-color-part-border);
|
551 |
+
}
|
552 |
+
|
553 |
+
.happyforms-part--checkbox .checkmark {
|
554 |
+
border-radius: 0;
|
555 |
+
}
|
556 |
+
|
557 |
+
.happyforms-part.display-type--block .checkmark {
|
558 |
+
margin-right: 5px;
|
559 |
+
}
|
560 |
+
|
561 |
+
.happyforms-part--radio input:checked+.checkmark,
|
562 |
+
.happyforms-part--checkbox input:checked+.checkmark {
|
563 |
+
border-color: #000;
|
564 |
+
border-color: var(--happyforms-color-part-border-focus);
|
565 |
+
background-color: #000;
|
566 |
+
background-color: var(--happyforms-color-part-border-focus);
|
567 |
+
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAVCAYAAABVAo5cAAAA7UlEQVRIS7XUbRHCMAwG4DcSQAKTgAWQABaQgAW8IGFIAAlgYRJeLru2t6+un8vPNtfn0jYRbBQkdwBOIvIcErKFR/II4G3O7kRkb53q4ASzjkOrgh7MoQCaamAAs+itChiJKVpeYQJ2FpFXUYWpmJY4Akm2ALR/riLyW2uZHGwEkvwCOAyQxofmYg5cwKw7Q0uwHiSpE0Engy8cWopZkBHjrTE5eu2h6H+jL0krvAN4hE6J3F/Fhm9YAw1i019agkZhS32Yg0ZjM1AXEt80CVsEE9BkzAtGoFnYKmjQi2kZna8anZmzn8g2maX9AawIfKa8qZx5AAAAAElFTkSuQmCC);
|
568 |
+
background-size: 12px auto;
|
569 |
+
background-repeat: no-repeat;
|
570 |
+
background-position: center center;
|
571 |
+
}
|
572 |
+
|
573 |
+
/* parts - scale */
|
574 |
+
|
575 |
+
.happyforms-part input[type=range] {
|
576 |
+
-webkit-appearance: none;
|
577 |
+
padding: 0;
|
578 |
+
border: 0;
|
579 |
+
width: 100%;
|
580 |
+
}
|
581 |
+
|
582 |
+
.happyforms-part input[type=range]:focus {
|
583 |
+
border: 0;
|
584 |
+
outline: 0;
|
585 |
+
}
|
586 |
+
|
587 |
+
.happyforms-part input[type=range]::-webkit-slider-runnable-track {
|
588 |
+
width: 100%;
|
589 |
+
height: 1px;
|
590 |
+
cursor: pointer;
|
591 |
+
animate: 0.25s;
|
592 |
+
animate: var(--happyforms-transition-duration);
|
593 |
+
box-shadow: none;
|
594 |
+
background: #000;
|
595 |
+
background: var(--happyforms-color-part-value);
|
596 |
+
}
|
597 |
+
|
598 |
+
.happyforms-part input[type=range]::-webkit-slider-thumb {
|
599 |
+
-webkit-appearance: none;
|
600 |
+
width: 20px;
|
601 |
+
height: 20px;
|
602 |
+
margin-top: -10px;
|
603 |
+
border: 1px solid;
|
604 |
+
border-color: #000;
|
605 |
+
border-color: var(--happyforms-color-part-value);
|
606 |
+
border-radius: 50%;
|
607 |
+
box-shadow: none;
|
608 |
+
background: #000;
|
609 |
+
background: var(--happyforms-color-part-value);
|
610 |
+
cursor: pointer;
|
611 |
+
}
|
612 |
+
|
613 |
+
.happyforms-part input[type=range]:focus::-webkit-slider-runnable-track {
|
614 |
+
background: #000;
|
615 |
+
}
|
616 |
+
|
617 |
+
.happyforms-part input[type=range]::-moz-range-track {
|
618 |
+
width: 100%;
|
619 |
+
height: 1px;
|
620 |
+
cursor: pointer;
|
621 |
+
animate: 0.25s;
|
622 |
+
animate: var(--happyforms-transition-duration);
|
623 |
+
box-shadow: none;
|
624 |
+
background: #000;
|
625 |
+
background: var(--happyforms-color-part-value);
|
626 |
+
}
|
627 |
+
|
628 |
+
.happyforms-part input[type=range]::-moz-range-thumb {
|
629 |
+
width: 20px;
|
630 |
+
height: 20px;
|
631 |
+
margin-top: -10px;
|
632 |
+
border: 1px solid;
|
633 |
+
border-color: #000;
|
634 |
+
border-color: var(--happyforms-color-part-value);
|
635 |
+
border-radius: 50%;
|
636 |
+
box-shadow: none;
|
637 |
+
background: #000;
|
638 |
+
background: var(--happyforms-color-part-value);
|
639 |
+
cursor: pointer;
|
640 |
+
}
|
641 |
+
|
642 |
+
.happyforms-part input[type=range]::-ms-track {
|
643 |
+
width: 100%;
|
644 |
+
height: 1px;
|
645 |
+
cursor: pointer;
|
646 |
+
animate: 0.25s;
|
647 |
+
animate: var(--happyforms-transition-duration);
|
648 |
+
box-shadow: none;
|
649 |
+
background: #000;
|
650 |
+
background: var(--happyforms-color-part-value);
|
651 |
+
}
|
652 |
+
|
653 |
+
.happyforms-part input[type=range]::-ms-fill-lower {
|
654 |
+
background: #000;
|
655 |
+
background: var(--happyforms-color-part-value);
|
656 |
+
border: 0;
|
657 |
+
box-shadow: none;
|
658 |
+
}
|
659 |
+
|
660 |
+
.happyforms-part input[type=range]::-ms-fill-upper {
|
661 |
+
background: #000;
|
662 |
+
background: var(--happyforms-color-part-value);
|
663 |
+
border: 0;
|
664 |
+
box-shadow: none;
|
665 |
+
}
|
666 |
+
|
667 |
+
.happyforms-part input[type=range]::-ms-thumb {
|
668 |
+
width: 20px;
|
669 |
+
height: 20px;
|
670 |
+
margin-top: -10px;
|
671 |
+
border: 1px solid #000;
|
672 |
+
border: var(--happyforms-color-part-value);
|
673 |
+
border-radius: 50%;
|
674 |
+
box-shadow: none;
|
675 |
+
background: #000;
|
676 |
+
background: var(--happyforms-color-part-value);
|
677 |
+
cursor: pointer;
|
678 |
+
}
|
679 |
+
|
680 |
+
.happyforms-part input[type=range]:focus::-ms-fill-lower {
|
681 |
+
background: #000;
|
682 |
+
background: var(--happyforms-color-part-value);
|
683 |
+
}
|
684 |
+
|
685 |
+
.happyforms-part input[type=range]:focus::-ms-fill-upper {
|
686 |
+
background: #000;
|
687 |
+
background: var(--happyforms-color-part-value);
|
688 |
+
}
|
689 |
+
|
690 |
+
.happyforms-part--scale output {
|
691 |
+
display: block;
|
692 |
+
position: relative;
|
693 |
+
width: 30px;
|
694 |
+
text-align: center;
|
695 |
+
color: #d0d0d0;
|
696 |
+
}
|
697 |
+
|
698 |
+
.happyforms-part--scale__labels {
|
699 |
+
position: relative;
|
700 |
+
width: 100%;
|
701 |
+
}
|
702 |
+
|
703 |
+
.happyforms-part--scale__labels .label-min {
|
704 |
+
float: left;
|
705 |
+
}
|
706 |
+
|
707 |
+
.happyforms-part--scale__labels .label-max {
|
708 |
+
float: right;
|
709 |
+
}
|
710 |
+
|
711 |
+
.happyforms-part--label-below input,
|
712 |
+
.happyforms-part--label-below textarea,
|
713 |
+
.happyforms-part--label-below select,
|
714 |
+
.happyforms-part--label-below .happyforms-part__select-wrap,
|
715 |
+
.happyforms-part--label-below .happyforms-part__el {
|
716 |
+
order: 3;
|
717 |
+
}
|
718 |
+
|
719 |
+
.happyforms-part--label-below .happyforms-part__description {
|
720 |
+
order: 1;
|
721 |
+
margin-top: 0;
|
722 |
+
}
|
723 |
+
|
724 |
+
.happyforms-part--label-below.happyforms-part--date .happyforms-part__el {
|
725 |
+
width: 100%;
|
726 |
+
order: 2;
|
727 |
+
}
|
728 |
+
|
729 |
+
.happyforms-part--label-left .happyforms-part__label {
|
730 |
+
float: left;
|
731 |
+
width: 25%;
|
732 |
+
}
|
733 |
+
|
734 |
+
.happyforms-part--label-left input.happyforms-part__el,
|
735 |
+
.happyforms-part--label-left textarea.happyforms-part__el,
|
736 |
+
.happyforms-part--label-left .happyforms-part__select-wrap {
|
737 |
+
float: right;
|
738 |
+
width: 75%;
|
739 |
+
}
|
740 |
+
|
741 |
+
.happyforms-part--label-left .happyforms-part__description {
|
742 |
+
clear: both;
|
743 |
+
float: right;
|
744 |
+
width: 75%;
|
745 |
+
}
|
746 |
+
|
747 |
+
.happyforms-part--label-below .happyforms-part__el,
|
748 |
+
.happyforms-part--label-below input.happyforms-part__el,
|
749 |
+
.happyforms-part--label-below select.happyforms-part__el,
|
750 |
+
.happyforms-part--label-below textarea.happyforms-part__el {
|
751 |
+
position: relative;
|
752 |
+
top: 5px;
|
753 |
+
margin-bottom: 10px;
|
754 |
+
}
|
755 |
+
|
756 |
+
/* parts - placeholder */
|
757 |
+
|
758 |
+
.happyforms-part--placeholder p {
|
759 |
+
font-size: 16px;
|
760 |
+
color: #000;
|
761 |
+
}
|
762 |
+
|
763 |
+
.happyforms-part--placeholder p:first-child {
|
764 |
+
margin-top: 0;
|
765 |
+
}
|
766 |
+
|
767 |
+
.happyforms-part--placeholder p:last-child {
|
768 |
+
margin-bottom: 0;
|
769 |
+
}
|
770 |
+
|
771 |
+
/* parts - select */
|
772 |
+
|
773 |
+
.happyforms-part--select select,
|
774 |
+
.happyforms-part--date select,
|
775 |
+
.happyforms-part--title select {
|
776 |
+
position: relative;
|
777 |
+
-webkit-appearance: none;
|
778 |
+
-moz-appearance: none;
|
779 |
+
appearance: none;
|
780 |
+
width: 100%;
|
781 |
+
padding: 10px;
|
782 |
+
border: 1px solid;
|
783 |
+
border-radius: 6px;
|
784 |
+
border-color: #dbdbdb;
|
785 |
+
border-color: var(--happyforms-color-part-border);
|
786 |
+
line-height: 1.4;
|
787 |
+
background-color: #fff;
|
788 |
+
background-color: var(--happyforms-color-part-background);
|
789 |
+
font-size: 16px;
|
790 |
+
font-size: var(--happyforms-part-value-font-size);
|
791 |
+
}
|
792 |
+
|
793 |
+
.happyforms-form--part-border-off .happyforms-part--select select,
|
794 |
+
.happyforms-form--part-border-off .happyforms-part--date select,
|
795 |
+
.happyforms-form--part-border-off .happyforms-part--title select {
|
796 |
+
border-color: transparent;
|
797 |
+
}
|
798 |
+
|
799 |
+
.happyforms-part-date--date .happyforms-part-date__time-input {
|
800 |
+
display: none;
|
801 |
+
}
|
802 |
+
|
803 |
+
.happyforms-part-date--time .happyforms-part-date__date-input {
|
804 |
+
display: none;
|
805 |
+
}
|
806 |
+
|
807 |
+
.happyforms-part-date--datetime.happyforms-part--width-half .happyforms-part__el,
|
808 |
+
.happyforms-part-date--datetime.happyforms-part--width-third .happyforms-part__el {
|
809 |
+
flex-wrap: wrap;
|
810 |
+
}
|
811 |
+
|
812 |
+
.happyforms-part-date--datetime.happyforms-part--width-half .happyforms-part__select-wrap,
|
813 |
+
.happyforms-part-date--datetime.happyforms-part--width-third .happyforms-part__select-wrap {
|
814 |
+
min-width: 33.333%;
|
815 |
+
margin-bottom: 15px;
|
816 |
+
}
|
817 |
+
|
818 |
+
.happyforms-part__select-wrap {
|
819 |
+
position: relative;
|
820 |
+
flex: 1;
|
821 |
+
padding: 0 0 0 2%;
|
822 |
+
}
|
823 |
+
|
824 |
+
.happyforms-part__select-wrap:first-of-type {
|
825 |
+
padding-left: 0 !important;
|
826 |
+
}
|
827 |
+
|
828 |
+
.happyforms-part__select-wrap:after {
|
829 |
+
content: '';
|
830 |
+
position: absolute;
|
831 |
+
top: 22%;
|
832 |
+
right: 15px;
|
833 |
+
z-index: 999;
|
834 |
+
display: block;
|
835 |
+
width: 25px;
|
836 |
+
height: 25px;
|
837 |
+
font-size: 22px;
|
838 |
+
color: #000;
|
839 |
+
color: var(--happyforms-color-part-value);
|
840 |
+
fill: #000;
|
841 |
+
fill: var(--happyforms-color-part-value);
|
842 |
+
stroke: #000;
|
843 |
+
stroke: var(--happyforms-color-part-value);
|
844 |
+
background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIxOCIgdmlld0JveD0iMCAwIDE4IDE4Ij48cGF0aCBkPSJNNSA4bDQgNCA0LTR6Ii8+PC9zdmc+);
|
845 |
+
background-size: cover;
|
846 |
+
background-repeat: no-repeat;
|
847 |
+
}
|
848 |
+
|
849 |
+
.happyforms-part--date .happyforms-part__select-wrap:after {
|
850 |
+
top: calc(46% - 12px);
|
851 |
+
right: 15px;
|
852 |
+
}
|
853 |
+
|
854 |
+
.happyforms-part--select select:focus,
|
855 |
+
.happyforms-part--date select:focus {
|
856 |
+
outline-width: 1px;
|
857 |
+
outline-color: #000000;
|
858 |
+
outline-color: var(--happyforms-color-part-value);
|
859 |
+
}
|
860 |
+
|
861 |
+
.happyforms-part--date .happyforms-part__el {
|
862 |
+
display: flex;
|
863 |
+
}
|
864 |
+
|
865 |
+
.happyforms-part__select-wrap:last-child {
|
866 |
+
padding-right: 0;
|
867 |
+
}
|
868 |
+
|
869 |
+
/* parts - rating */
|
870 |
+
|
871 |
+
.happyforms-part--rating .happyforms-rating-item-wrap {
|
872 |
+
float: left;
|
873 |
+
margin-right: 5px;
|
874 |
+
}
|
875 |
+
|
876 |
+
.happyforms-part--rating .happyforms-rating-item-wrap:last-child {
|
877 |
+
margin-right: 0;
|
878 |
+
}
|
879 |
+
|
880 |
+
.happyforms-part--rating .happyforms-star {
|
881 |
+
width: 35px;
|
882 |
+
height: 35px;
|
883 |
+
}
|
884 |
+
|
885 |
+
.happyforms-part--rating .happyforms-star__label {
|
886 |
+
cursor: pointer;
|
887 |
+
float: left;
|
888 |
+
margin-right: 5px;
|
889 |
+
color: #f39c00;
|
890 |
+
color: var(--happyforms-color-rating-hover);
|
891 |
+
}
|
892 |
+
|
893 |
+
.happyforms-part--rating .happyforms-star__star {
|
894 |
+
fill: currentColor;
|
895 |
+
stroke: currentColor;
|
896 |
+
stroke-width: 35px;
|
897 |
+
}
|
898 |
+
|
899 |
+
.happyforms-part--rating .happyforms-part-wrap {
|
900 |
+
fill: #ccc;
|
901 |
+
fill: var(--happyforms-color-rating);
|
902 |
+
color: transparent;
|
903 |
+
stroke: #ccc;
|
904 |
+
stroke: var(--happyforms-color-rating);
|
905 |
+
}
|
906 |
+
|
907 |
+
.happyforms-part--rating:hover .happyforms-part-wrap {
|
908 |
+
color: #ccc;
|
909 |
+
fill: #f39c00;
|
910 |
+
fill: var(--happyforms-color-rating-hover);
|
911 |
+
stroke: #f39c00;
|
912 |
+
stroke: var(--happyforms-color-rating-hover);
|
913 |
+
}
|
914 |
+
|
915 |
+
.happyforms-part--rating label {
|
916 |
+
fill: inherit;
|
917 |
+
color: inherit;
|
918 |
+
stroke: inherit;
|
919 |
+
}
|
920 |
+
|
921 |
+
.happyforms-part--rating .happyforms-star__label {
|
922 |
+
cursor: pointer;
|
923 |
+
float: left;
|
924 |
+
margin-right: 5px;
|
925 |
+
}
|
926 |
+
|
927 |
+
.happyforms-part--rating .happyforms-star__label {
|
928 |
+
color: #f39c00;
|
929 |
+
color: var(--happyforms-color-rating-hover);
|
930 |
+
}
|
931 |
+
|
932 |
+
.happyforms-part--rating:not(:hover) input:first-child:checked~label,
|
933 |
+
.happyforms-part--rating input:hover+label~label:not(:hover),
|
934 |
+
.happyforms-part--rating:hover input:checked+label:hover~label,
|
935 |
+
.happyforms-part--rating:not(:hover) input:checked+label~label {
|
936 |
+
color: #ccc;
|
937 |
+
color: var(--happyforms-color-rating);
|
938 |
+
}
|
939 |
+
|
940 |
+
/* parts - legal */
|
941 |
+
|
942 |
+
.happyforms-part--legal span {
|
943 |
+
margin-left: 5px;
|
944 |
+
font-weight: normal;
|
945 |
+
font-size: 16px;
|
946 |
+
font-size: var(--happyforms-part-value-font-size);
|
947 |
+
}
|
948 |
+
|
949 |
+
/* parts - address */
|
950 |
+
|
951 |
+
.happyforms-part--address.happyforms-part--address-country-city .happyforms-part-el-wrap {
|
952 |
+
display: flex;
|
953 |
+
}
|
954 |
+
|
955 |
+
.happyforms-part--address .happyforms-part__el {
|
956 |
+
position: relative;
|
957 |
+
}
|
958 |
+
|
959 |
+
.happyforms-part--address.happyforms-part--address-country-city .happyforms-part__el {
|
960 |
+
flex: 1;
|
961 |
+
}
|
962 |
+
|
963 |
+
.happyforms-part--address.happyforms-part--address-country-city .happyforms-part__el:first-child {
|
964 |
+
padding-right: 2%;
|
965 |
+
}
|
966 |
+
|
967 |
+
.happyforms-form--part-outer-padding-narrow .happyforms-part--address.happyforms-part--address-country-city .happyforms-part__el:first-child {
|
968 |
+
padding-right: 1%;
|
969 |
+
}
|
970 |
+
|
971 |
+
.happyforms-form--part-outer-padding-wide .happyforms-part--address.happyforms-part--address-country-city .happyforms-part__el:first-child {
|
972 |
+
padding-right: 6%;
|
973 |
+
}
|
974 |
+
|
975 |
+
.happyforms-part__el--address--results {
|
976 |
+
position: absolute;
|
977 |
+
z-index: 9999;
|
978 |
+
width: 100%;
|
979 |
+
margin: 2px 0 0;
|
980 |
+
padding: 0;
|
981 |
+
border-radius: 6px;
|
982 |
+
}
|
983 |
+
|
984 |
+
.happyforms-part__el--address--results ul {
|
985 |
+
list-style-type: none;
|
986 |
+
padding: 0;
|
987 |
+
border: 1px solid;
|
988 |
+
border-color: #000;
|
989 |
+
border-color: var(--happyforms-color-part-border-focus);
|
990 |
+
border-radius: 6px;
|
991 |
+
background-color: #fff;
|
992 |
+
background-color: var(--happyforms-color-part-background);
|
993 |
+
}
|
994 |
+
|
995 |
+
.happyforms-part__el--address--results ul li {
|
996 |
+
cursor: pointer;
|
997 |
+
list-style: none;
|
998 |
+
padding: 3px 10px;
|
999 |
+
border-bottom: 1px solid;
|
1000 |
+
border-color: #dbdbdb;
|
1001 |
+
border-color: var(--happyforms-color-part-border);
|
1002 |
+
font-size: 16px;
|
1003 |
+
font-size: var(--happyforms-part-value-font-size);
|
1004 |
+
color: #000;
|
1005 |
+
color: var(--happyforms-color-part-value);
|
1006 |
+
}
|
1007 |
+
|
1008 |
+
.happyforms-part__el--address--results ul li:hover {
|
1009 |
+
border-color: #000;
|
1010 |
+
border-color: var(--happyforms-color-part-border-focus);
|
1011 |
+
}
|
1012 |
+
|
1013 |
+
.happyforms-part__el--address--results-google ul:after {
|
1014 |
+
content: "";
|
1015 |
+
padding: 5px 10px 0;
|
1016 |
+
height: 16px;
|
1017 |
+
box-sizing: content-box;
|
1018 |
+
text-align: right;
|
1019 |
+
display: block;
|
1020 |
+
background-image: url(https://maps.gstatic.com/mapfiles/api-3/images/powered-by-google-on-white3.png);
|
1021 |
+
background-position: calc(100% - 10px) center;
|
1022 |
+
background-repeat: no-repeat;
|
1023 |
+
background-size: 120px 14px;
|
1024 |
+
}
|
1025 |
+
|
1026 |
+
/* submit button */
|
1027 |
+
|
1028 |
+
.happyforms-part--submit {
|
1029 |
+
width: 100%;
|
1030 |
+
margin-bottom: 0;
|
1031 |
+
}
|
1032 |
+
|
1033 |
+
input[type=submit].happyforms-button--submit,
|
1034 |
+
input[type=submit][disabled].happyforms-button--submit,
|
1035 |
+
input[type=submit][disabled].happyforms-button--submit:hover {
|
1036 |
+
height: auto;
|
1037 |
+
padding: 17px 50px;
|
1038 |
+
border-radius: 6px;
|
1039 |
+
border: 1px solid transparent;
|
1040 |
+
border-color: var(--happyforms-color-submit-border);
|
1041 |
+
font-weight: normal;
|
1042 |
+
font-style: normal;
|
1043 |
+
font-size: 18px;
|
1044 |
+
font-size: var(--happyforms-submit-button-font-size);
|
1045 |
+
color: #fff;
|
1046 |
+
color: var(--happyforms-color-submit-text);
|
1047 |
+
background-color: #000;
|
1048 |
+
background-color: var(--happyforms-color-submit-background);
|
1049 |
+
text-transform: none;
|
1050 |
+
transition-property: all;
|
1051 |
+
transition-duration: 0.25s;
|
1052 |
+
transition-duration: var(--happyforms-transition-duration);
|
1053 |
+
transition-timing-function: ease-in;
|
1054 |
+
}
|
1055 |
+
|
1056 |
+
input[type=submit][disabled].happyforms-button--submit,
|
1057 |
+
input[type=submit][disabled].happyforms-button--submit:hover {
|
1058 |
+
cursor: default;
|
1059 |
+
opacity: 0.5;
|
1060 |
+
}
|
1061 |
+
|
1062 |
+
input[type=submit].happyforms-button--submit:hover {
|
1063 |
+
border-radius: 6px;
|
1064 |
+
border-color: transparent;
|
1065 |
+
border-color: var(--happyforms-color-submit-border);
|
1066 |
+
background-color: #dbdbdb;
|
1067 |
+
background-color: var(--happyforms-color-submit-background-hover);
|
1068 |
+
text-transform: none;
|
1069 |
+
color: #000000;
|
1070 |
+
color: var(--happyforms-color-submit-text-hover);
|
1071 |
+
}
|
1072 |
+
|
1073 |
+
input[type=submit].happyforms-button--submit:focus {
|
1074 |
+
border-radius: 6px;
|
1075 |
+
border-color: transparent;
|
1076 |
+
border-color: var(--happyforms-color-submit-border);
|
1077 |
+
background-color: #dbdbdb;
|
1078 |
+
background-color: var(--happyforms-color-submit-background-focus);
|
1079 |
+
text-transform: none;
|
1080 |
+
color: #000000;
|
1081 |
+
color: var(--happyforms-color-submit-text-hover);
|
1082 |
+
}
|
1083 |
+
|
1084 |
+
/* notices */
|
1085 |
+
|
1086 |
+
.happyforms-message-notice h2 {
|
1087 |
+
margin-top: 0;
|
1088 |
+
margin-bottom: 0;
|
1089 |
+
font-weight: bold;
|
1090 |
+
font-size: 14px !important;
|
1091 |
+
padding: 20px;
|
1092 |
+
color: #000;
|
1093 |
+
color: var(--happyforms-color-primary);
|
1094 |
+
}
|
1095 |
+
|
1096 |
+
.happyforms-message-notice.error h2 {
|
1097 |
+
margin-top: 0;
|
1098 |
+
margin-bottom: 5px;
|
1099 |
+
padding: 0;
|
1100 |
+
font-weight: normal;
|
1101 |
+
color: #ff7550;
|
1102 |
+
color: var(--happyforms-color-error);
|
1103 |
+
}
|
1104 |
+
|
1105 |
+
.happyforms-message-notice.success h2,
|
1106 |
+
.happyforms-message-notice.error-submission h2 {
|
1107 |
+
margin-top: 0 !important;
|
1108 |
+
margin-bottom: 0 !important;
|
1109 |
+
padding-top: 0 !important;
|
1110 |
+
padding-bottom: 0 !important;
|
1111 |
+
font-size: 16px !important;
|
1112 |
+
}
|
1113 |
+
|
1114 |
+
.happyforms-message-notice.success,
|
1115 |
+
.happyforms-message-notice.error-submission {
|
1116 |
+
padding: 25px 0;
|
1117 |
+
border: 3px solid;
|
1118 |
+
border-width: 3px;
|
1119 |
+
border-color: #000;
|
1120 |
+
border-color: var(--happyforms-color-primary);
|
1121 |
+
background-color: transparent;
|
1122 |
+
}
|
1123 |
+
|
1124 |
+
.happyforms-message-notice.success h2 {
|
1125 |
+
color: #39b54a;
|
1126 |
+
color: var(--happyforms-color-success);
|
1127 |
+
}
|
1128 |
+
|
1129 |
+
.happyforms-message-notice.error-submission {
|
1130 |
+
border-color: #ff7550;
|
1131 |
+
border-color: var(--happyforms-color-error);
|
1132 |
+
}
|
1133 |
+
|
1134 |
+
.happyforms-part .happyforms-message-notices {
|
1135 |
+
padding: 0;
|
1136 |
+
}
|
1137 |
+
|
1138 |
+
.happyforms-part .happyforms-message-notices h2 {
|
1139 |
+
font-size: 14px;
|
1140 |
+
}
|
1141 |
+
|
1142 |
+
.happyforms-part .happyforms-error+input,
|
1143 |
+
.happyforms-part .happyforms-error+textarea {
|
1144 |
+
border: 2px solid;
|
1145 |
+
border-color: #ff7550;
|
1146 |
+
border-color: var(--happyforms-color-error);
|
1147 |
+
}
|
1148 |
+
|
1149 |
+
.happyforms-form__title+.happyforms-message-notices {
|
1150 |
+
margin-top: 25px;
|
1151 |
+
}
|
1152 |
+
|
1153 |
+
/* umbrella classes */
|
1154 |
+
.happyforms-form--part-border-radius-square .happyforms-part input[type=text],
|
1155 |
+
.happyforms-form--part-border-radius-square .happyforms-part input[type=email],
|
1156 |
+
.happyforms-form--part-border-radius-square .happyforms-part input[type=tel],
|
1157 |
+
.happyforms-form--part-border-radius-square .happyforms-part input[type=number],
|
1158 |
+
.happyforms-form--part-border-radius-square .happyforms-part input[type=range],
|
1159 |
+
.happyforms-form--part-border-radius-square .happyforms-part textarea,
|
1160 |
+
.happyforms-form--part-border-radius-square .happyforms-part select,
|
1161 |
+
.happyforms-form--part-border-radius-square .happyforms-part__el--address--results ul {
|
1162 |
+
border-radius: 0px;
|
1163 |
+
}
|
1164 |
+
|
1165 |
+
.happyforms-form--part-border-radius-square .happyforms-part--radio .option-label .border {
|
1166 |
+
border-radius: 0px;
|
1167 |
+
}
|
1168 |
+
|
1169 |
+
.happyforms-form--part-border-radius-pill .happyforms-part input[type=text],
|
1170 |
+
.happyforms-form--part-border-radius-pill .happyforms-part input[type=email],
|
1171 |
+
.happyforms-form--part-border-radius-pill .happyforms-part input[type=tel],
|
1172 |
+
.happyforms-form--part-border-radius-pill .happyforms-part input[type=number],
|
1173 |
+
.happyforms-form--part-border-radius-pill .happyforms-part input[type=range],
|
1174 |
+
.happyforms-form--part-border-radius-pill .happyforms-part textarea,
|
1175 |
+
.happyforms-form--part-border-radius-pill .happyforms-part select {
|
1176 |
+
border-radius: 25px;
|
1177 |
+
padding-left: 25px;
|
1178 |
+
padding-right: 25px;
|
1179 |
+
}
|
1180 |
+
|
1181 |
+
.happyforms-form--part-border-radius-pill .happyforms-part__el--address--results ul {
|
1182 |
+
border-radius: 25px;
|
1183 |
+
}
|
1184 |
+
|
1185 |
+
.happyforms-form--part-border-radius-pill .happyforms-part--radio .option-label .border {
|
1186 |
+
border-radius: 25px;
|
1187 |
+
}
|
1188 |
+
|
1189 |
+
.happyforms-form--part-placeholder-toggle .happyforms-part ::-webkit-input-placeholder {
|
1190 |
+
color: transparent;
|
1191 |
+
transition: color var(--happyforms-transition-duration);
|
1192 |
+
}
|
1193 |
+
|
1194 |
+
.happyforms-form--part-placeholder-toggle .happyforms-part ::-moz-placeholder {
|
1195 |
+
color: transparent;
|
1196 |
+
transition: color var(--happyforms-transition-duration);
|
1197 |
+
}
|
1198 |
+
|
1199 |
+
.happyforms-form--part-placeholder-toggle .happyforms-part ::-ms-placeholder {
|
1200 |
+
color: transparent;
|
1201 |
+
transition: color var(--happyforms-transition-duration);
|
1202 |
+
}
|
1203 |
+
|
1204 |
+
.happyforms-form--part-placeholder-toggle .happyforms-part ::placeholder {
|
1205 |
+
color: transparent;
|
1206 |
+
transition: color var(--happyforms-transition-duration);
|
1207 |
+
}
|
1208 |
+
|
1209 |
+
.happyforms-form--part-placeholder-toggle .happyforms-part input:focus::-webkit-input-placeholder {
|
1210 |
+
color: #aaa;
|
1211 |
+
}
|
1212 |
+
|
1213 |
+
.happyforms-form--part-placeholder-toggle .happyforms-part input:focus::-moz-placeholder {
|
1214 |
+
color: #aaa;
|
1215 |
+
}
|
1216 |
+
|
1217 |
+
.happyforms-form--part-placeholder-toggle .happyforms-part input:focus::-ms-placeholder {
|
1218 |
+
color: #aaa;
|
1219 |
+
}
|
1220 |
+
|
1221 |
+
.happyforms-form--part-placeholder-toggle .happyforms-part input:focus::placeholder {
|
1222 |
+
color: #aaa;
|
1223 |
+
}
|
1224 |
+
|
1225 |
+
/* labels */
|
1226 |
+
|
1227 |
+
.happyforms-part--label-inside label {
|
1228 |
+
position: absolute;
|
1229 |
+
top: 10px;
|
1230 |
+
left: 11px;
|
1231 |
+
}
|
1232 |
+
|
1233 |
+
.happyforms-part--label-inside input,
|
1234 |
+
.happyforms-part--label-inside textarea,
|
1235 |
+
.happyforms-part--label-as_placeholder input,
|
1236 |
+
.happyforms-part--label-as_placeholder textarea {
|
1237 |
+
padding-top: 35px !important;
|
1238 |
+
}
|
1239 |
+
|
1240 |
+
/* part borders */
|
1241 |
+
.happyforms-form--part-borders-bottom-only .happyforms-part input[type=text],
|
1242 |
+
.happyforms-form--part-borders-bottom-only .happyforms-part input[type=email],
|
1243 |
+
.happyforms-form--part-borders-bottom-only .happyforms-part input[type=number],
|
1244 |
+
.happyforms-form--part-borders-bottom-only .happyforms-part textarea,
|
1245 |
+
.happyforms-form--part-borders-bottom-only .happyforms-part select {
|
1246 |
+
border-top-color: transparent;
|
1247 |
+
border-left-color: transparent;
|
1248 |
+
border-right-color: transparent;
|
1249 |
+
}
|
1250 |
+
|
1251 |
+
/* part border transitions */
|
1252 |
+
.happyforms-form--part-disable-transitions .happyforms-part input[type=text],
|
1253 |
+
.happyforms-form--part-disable-transitions .happyforms-part input[type=email],
|
1254 |
+
.happyforms-form--part-disable-transitions .happyforms-part input[type=number],
|
1255 |
+
.happyforms-form--part-disable-transitions .happyforms-part textarea {
|
1256 |
+
transition-duration: 0s;
|
1257 |
+
}
|
1258 |
+
|
1259 |
+
.happyforms-part input[type=text],
|
1260 |
+
.happyforms-part input[type=email],
|
1261 |
+
.happyforms-part input[type=number],
|
1262 |
+
.happyforms-part textarea {
|
1263 |
+
transition: border-color 0.4s;
|
1264 |
+
transition: border-color var(--happyforms-transition-duration);
|
1265 |
+
}
|
1266 |
+
|
1267 |
+
/* part labels transitions */
|
1268 |
+
.happyforms-part--label-as_placeholder label {
|
1269 |
+
transition-duration: 0.4s;
|
1270 |
+
transition-duration: var(--happyforms-transition-duration);
|
1271 |
+
}
|
1272 |
+
|
1273 |
+
.happyforms-part--label-as_placeholder ::-webkit-input-placeholder {
|
1274 |
+
opacity: 0;
|
1275 |
+
}
|
1276 |
+
|
1277 |
+
.happyforms-part--label-as_placeholder ::-moz-placeholder {
|
1278 |
+
opacity: 0;
|
1279 |
+
}
|
1280 |
+
|
1281 |
+
.happyforms-part--label-as_placeholder ::-ms-placeholder {
|
1282 |
+
opacity: 0;
|
1283 |
+
}
|
1284 |
+
|
1285 |
+
.happyforms-part--label-as_placeholder ::placeholder {
|
1286 |
+
opacity: 0;
|
1287 |
+
}
|
1288 |
+
|
1289 |
+
.happyforms-part--label-as_placeholder label {
|
1290 |
+
position: absolute;
|
1291 |
+
left: 11px;
|
1292 |
+
top: 25px;
|
1293 |
+
transition-property: top;
|
1294 |
+
}
|
1295 |
+
|
1296 |
+
.happyforms-part--label-as_placeholder input:focus~label,
|
1297 |
+
.happyforms-part--label-as_placeholder textarea:focus~label,
|
1298 |
+
.happyforms-part--label-as_placeholder.happyforms-part--filled input~label,
|
1299 |
+
.happyforms-part--label-as_placeholder.happyforms-part--filled textarea~label {
|
1300 |
+
top: 10px;
|
1301 |
+
}
|
1302 |
+
|
1303 |
+
/* part padding */
|
1304 |
+
|
1305 |
+
.happyforms-form--part-outer-padding-narrow .happyforms-form__part {
|
1306 |
+
padding: 0 0.5%;
|
1307 |
+
}
|
1308 |
+
|
1309 |
+
.happyforms-form--part-outer-padding-narrow .happyforms-part__select-wrap {
|
1310 |
+
padding: 0 0 0 1%;
|
1311 |
+
}
|
1312 |
+
|
1313 |
+
.happyforms-form--part-outer-padding-narrow .happyforms-part-option {
|
1314 |
+
margin-right: -5px;
|
1315 |
+
}
|
1316 |
+
|
1317 |
+
.happyforms-form--part-outer-padding-narrow .happyforms-part.display-type--block .happyforms-part-option {
|
1318 |
+
margin-right: 0;
|
1319 |
+
margin-bottom: 5px;
|
1320 |
+
}
|
1321 |
+
|
1322 |
+
.happyforms-form--part-outer-padding-narrow .happyforms-part--radio .option-label {
|
1323 |
+
margin-right: 15px;
|
1324 |
+
}
|
1325 |
+
|
1326 |
+
.happyforms-form--part-outer-padding-narrow .happyforms-part--checkbox.display-type--block .option-label {
|
1327 |
+
margin-bottom: 0;
|
1328 |
+
}
|
1329 |
+
|
1330 |
+
.happyforms-form--part-outer-padding-wide .happyforms-form__part {
|
1331 |
+
padding: 20px 3%;
|
1332 |
+
}
|
1333 |
+
|
1334 |
+
.happyforms-form--part-outer-padding-wide .happyforms-part .happyforms-part-option {
|
1335 |
+
margin-right: 15px;
|
1336 |
+
}
|
1337 |
+
|
1338 |
+
.happyforms-form--part-outer-padding-wide .happyforms-part.display-type--block .happyforms-part-option {
|
1339 |
+
margin-right: 0;
|
1340 |
+
margin-bottom: 35px;
|
1341 |
+
}
|
1342 |
+
|
1343 |
+
.happyforms-form--part-inner-padding-narrow .happyforms-part input[type=text],
|
1344 |
+
.happyforms-form--part-inner-padding-narrow .happyforms-part input[type=email],
|
1345 |
+
.happyforms-form--part-inner-padding-narrow .happyforms-part input[type=tel],
|
1346 |
+
.happyforms-form--part-inner-padding-narrow .happyforms-part input[type=number],
|
1347 |
+
.happyforms-form--part-inner-padding-narrow .happyforms-part input[type=range],
|
1348 |
+
.happyforms-form--part-inner-padding-narrow .happyforms-part textarea,
|
1349 |
+
.happyforms-form--part-inner-padding-narrow .happyforms-part select,
|
1350 |
+
.happyforms-form--part-inner-padding-narrow .happyforms-part .option-label {
|
1351 |
+
padding: 5px;
|
1352 |
+
}
|
1353 |
+
|
1354 |
+
.happyforms-form--part-inner-padding-narrow .happyforms-part--checkbox .option-label {
|
1355 |
+
margin-right: 0;
|
1356 |
+
margin-bottom: 0;
|
1357 |
+
padding-left: 0;
|
1358 |
+
padding-right: 0;
|
1359 |
+
}
|
1360 |
+
|
1361 |
+
.happyforms-form--part-inner-padding-narrow .happyforms-part--checkbox .option-label .label {
|
1362 |
+
padding-left: 5px;
|
1363 |
+
}
|
1364 |
+
|
1365 |
+
.happyforms-form--part-inner-padding-wide .happyforms-part input[type=text],
|
1366 |
+
.happyforms-form--part-inner-padding-wide .happyforms-part input[type=email],
|
1367 |
+
.happyforms-form--part-inner-padding-wide .happyforms-part input[type=tel],
|
1368 |
+
.happyforms-form--part-inner-padding-wide .happyforms-part input[type=number],
|
1369 |
+
.happyforms-form--part-inner-padding-wide .happyforms-part input[type=range],
|
1370 |
+
.happyforms-form--part-inner-padding-wide .happyforms-part textarea,
|
1371 |
+
.happyforms-form--part-inner-padding-wide .happyforms-part select,
|
1372 |
+
.happyforms-form--part-inner-padding-wide .happyforms-part .option-label {
|
1373 |
+
padding: 15px;
|
1374 |
+
}
|
1375 |
+
|
1376 |
+
.happyforms-form--part-inner-padding-wide .happyforms-part--checkbox .option-label {
|
1377 |
+
padding-left: 0;
|
1378 |
+
padding-right: 0;
|
1379 |
+
margin-right: 30px;
|
1380 |
+
}
|
1381 |
+
|
1382 |
+
.happyforms-form--part-inner-padding-wide .happyforms-part--checkbox .option-label .label {
|
1383 |
+
padding-left: 15px;
|
1384 |
+
}
|
1385 |
+
|
1386 |
+
.happyforms-form--part-hide-labels .happyforms-part__label {
|
1387 |
+
display: none;
|
1388 |
+
}
|
1389 |
+
|
1390 |
+
/* submit button */
|
1391 |
+
|
1392 |
+
.happyforms-form--submit-button-border-hide input[type=submit].happyforms-button--submit {
|
1393 |
+
border-width: 0;
|
1394 |
+
}
|
1395 |
+
|
1396 |
+
.happyforms-form--submit-button-border-radius-square input[type=submit].happyforms-button--submit {
|
1397 |
+
border-radius: 0;
|
1398 |
+
}
|
1399 |
+
|
1400 |
+
.happyforms-form--submit-button-border-radius-pill input[type=submit].happyforms-button--submit {
|
1401 |
+
border-radius: 30px;
|
1402 |
+
}
|
1403 |
+
|
1404 |
+
.happyforms-form--submit-button-fullwidth input[type=submit].happyforms-button--submit {
|
1405 |
+
width: 100%;
|
1406 |
+
}
|
1407 |
+
|
1408 |
+
.happyforms-form--submit-button-align-center .happyforms-part--submit {
|
1409 |
+
text-align: center;
|
1410 |
+
}
|
1411 |
+
|
1412 |
+
.happyforms-form--submit-button-align-right .happyforms-part--submit {
|
1413 |
+
text-align: right;
|
1414 |
+
}
|
1415 |
+
|
1416 |
+
.happyforms-form--submit-button-bold .happyforms-part--submit input[type=submit] {
|
1417 |
+
font-weight: bold;
|
1418 |
+
}
|
1419 |
+
|
1420 |
+
.happyforms-form--submit-button-disable-transitions input[type=submit] {
|
1421 |
+
transition-duration: 0s !important;
|
1422 |
+
}
|
1423 |
+
|
1424 |
+
.happyforms-form--part-title-font-weight-normal .happyforms-part__label .label {
|
1425 |
+
font-weight: normal;
|
1426 |
+
}
|
1427 |
+
|
1428 |
+
/* helpers */
|
1429 |
+
.happyforms-visuallyhidden {
|
1430 |
+
position: absolute;
|
1431 |
+
border: 0;
|
1432 |
+
clip: rect(0 0 0 0);
|
1433 |
+
width: 1px;
|
1434 |
+
height: 1px;
|
1435 |
+
margin: -1px;
|
1436 |
+
padding: 0;
|
1437 |
+
overflow: hidden;
|
1438 |
+
}
|
1439 |
+
|
1440 |
+
/* widget */
|
1441 |
+
.widget input[type=submit].happyforms-button--submit,
|
1442 |
+
.widget input[type=submit][disabled].happyforms-button--submit,
|
1443 |
+
.widget input[type=submit][disabled].happyforms-button--submit:hover {
|
1444 |
+
width: 100%;
|
1445 |
+
}
|
trunk/assets/css/preview.css
ADDED
@@ -0,0 +1,73 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
body.happyforms-preview {
|
2 |
+
background-color: #fff !important;
|
3 |
+
padding: 40px;
|
4 |
+
}
|
5 |
+
|
6 |
+
body::before, body::after {
|
7 |
+
content: '';
|
8 |
+
display: none;
|
9 |
+
}
|
10 |
+
|
11 |
+
.happyforms-block-editable {
|
12 |
+
position: relative;
|
13 |
+
}
|
14 |
+
|
15 |
+
.customize-partial-edit-shortcut.happyforms-partial-edit-shortcut {
|
16 |
+
display: block;
|
17 |
+
position: absolute;
|
18 |
+
top: 0;
|
19 |
+
}
|
20 |
+
|
21 |
+
.notice {
|
22 |
+
margin-bottom: 15px;
|
23 |
+
}
|
24 |
+
|
25 |
+
.notice-success {
|
26 |
+
padding: 1px 12px;
|
27 |
+
border-left: 4px solid #46b450;
|
28 |
+
box-shadow: 0 1px 1px 0 rgba( 0, 0, 0, 0.1 );
|
29 |
+
background: #fff;
|
30 |
+
}
|
31 |
+
|
32 |
+
.notice p {
|
33 |
+
margin: 10px 0;
|
34 |
+
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
|
35 |
+
font-size: 13px;
|
36 |
+
color: #444;
|
37 |
+
}
|
38 |
+
|
39 |
+
.notice a {
|
40 |
+
color: #0073aa;
|
41 |
+
text-decoration: underline;
|
42 |
+
transition: color 0.05s ease-in-out;
|
43 |
+
cursor: auto;
|
44 |
+
}
|
45 |
+
|
46 |
+
.notice a:hover {
|
47 |
+
color: #00a0d2;
|
48 |
+
}
|
49 |
+
|
50 |
+
/*.happyforms-flex {
|
51 |
+
padding: 2.5%;
|
52 |
+
overflow: visible;
|
53 |
+
}*/
|
54 |
+
|
55 |
+
/*.happyforms-form h3.happyforms-form__title {
|
56 |
+
display: flex !important;
|
57 |
+
align-items: center;
|
58 |
+
padding: 0;
|
59 |
+
}*/
|
60 |
+
|
61 |
+
.happyforms-preview-badge {
|
62 |
+
padding-left: 10px;
|
63 |
+
font-weight: 400;
|
64 |
+
font-size: 16px;
|
65 |
+
}
|
66 |
+
|
67 |
+
.happyforms-part.highlighted {
|
68 |
+
outline: 1px solid lightblue;
|
69 |
+
}
|
70 |
+
|
71 |
+
a.happyforms-ask-link {
|
72 |
+
cursor: pointer !important;
|
73 |
+
}
|
trunk/assets/fonts/FontAwesome.otf
ADDED
Binary file
|
trunk/assets/fonts/fontawesome-webfont.eot
ADDED
Binary file
|
trunk/assets/fonts/fontawesome-webfont.svg
ADDED
@@ -0,0 +1,2671 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0" standalone="no"?>
|
2 |
+
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
|
3 |
+
<svg>
|
4 |
+
<metadata>
|
5 |
+
Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016
|
6 |
+
By ,,,
|
7 |
+
Copyright Dave Gandy 2016. All rights reserved.
|
8 |
+
</metadata>
|
9 |
+
<defs>
|
10 |
+
<font id="FontAwesome" horiz-adv-x="1536" >
|
11 |
+
<font-face
|
12 |
+
font-family="FontAwesome"
|
13 |
+
font-weight="400"
|
14 |
+
font-stretch="normal"
|
15 |
+
units-per-em="1792"
|
16 |
+
panose-1="0 0 0 0 0 0 0 0 0 0"
|
17 |
+
ascent="1536"
|
18 |
+
descent="-256"
|
19 |
+
bbox="-1.02083 -256.962 2304.6 1537.02"
|
20 |
+
underline-thickness="0"
|
21 |
+
underline-position="0"
|
22 |
+
unicode-range="U+0020-F500"
|
23 |
+
/>
|
24 |
+
<missing-glyph horiz-adv-x="896"
|
25 |
+
d="M224 112h448v1312h-448v-1312zM112 0v1536h672v-1536h-672z" />
|
26 |
+
<glyph glyph-name=".notdef" horiz-adv-x="896"
|
27 |
+
d="M224 112h448v1312h-448v-1312zM112 0v1536h672v-1536h-672z" />
|
28 |
+
<glyph glyph-name=".null" horiz-adv-x="0"
|
29 |
+
/>
|
30 |
+
<glyph glyph-name="nonmarkingreturn" horiz-adv-x="597"
|
31 |
+
/>
|
32 |
+
<glyph glyph-name="space" unicode=" " horiz-adv-x="448"
|
33 |
+
/>
|
34 |
+
<glyph glyph-name="dieresis" unicode="¨" horiz-adv-x="1792"
|
35 |
+
/>
|
36 |
+
<glyph glyph-name="copyright" unicode="©" horiz-adv-x="1792"
|
37 |
+
/>
|
38 |
+
<glyph glyph-name="registered" unicode="®" horiz-adv-x="1792"
|
39 |
+
/>
|
40 |
+
<glyph glyph-name="acute" unicode="´" horiz-adv-x="1792"
|
41 |
+
/>
|
42 |
+
<glyph glyph-name="AE" unicode="Æ" horiz-adv-x="1792"
|
43 |
+
/>
|
44 |
+
<glyph glyph-name="Oslash" unicode="Ø" horiz-adv-x="1792"
|
45 |
+
/>
|
46 |
+
<glyph glyph-name="trademark" unicode="™" horiz-adv-x="1792"
|
47 |
+
/>
|
48 |
+
<glyph glyph-name="infinity" unicode="∞" horiz-adv-x="1792"
|
49 |
+
/>
|
50 |
+
<glyph glyph-name="notequal" unicode="≠" horiz-adv-x="1792"
|
51 |
+
/>
|
52 |
+
<glyph glyph-name="glass" unicode="" horiz-adv-x="1792"
|
53 |
+
d="M1699 1350q0 -35 -43 -78l-632 -632v-768h320q26 0 45 -19t19 -45t-19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45t45 19h320v768l-632 632q-43 43 -43 78q0 23 18 36.5t38 17.5t43 4h1408q23 0 43 -4t38 -17.5t18 -36.5z" />
|
54 |
+
<glyph glyph-name="music" unicode=""
|
55 |
+
d="M1536 1312v-1120q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v537l-768 -237v-709q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89
|
56 |
+
t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v967q0 31 19 56.5t49 35.5l832 256q12 4 28 4q40 0 68 -28t28 -68z" />
|
57 |
+
<glyph glyph-name="search" unicode="" horiz-adv-x="1664"
|
58 |
+
d="M1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -52 -38 -90t-90 -38q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5
|
59 |
+
t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" />
|
60 |
+
<glyph glyph-name="envelope" unicode="" horiz-adv-x="1792"
|
61 |
+
d="M1664 32v768q-32 -36 -69 -66q-268 -206 -426 -338q-51 -43 -83 -67t-86.5 -48.5t-102.5 -24.5h-1h-1q-48 0 -102.5 24.5t-86.5 48.5t-83 67q-158 132 -426 338q-37 30 -69 66v-768q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1664 1083v11v13.5t-0.5 13
|
62 |
+
t-3 12.5t-5.5 9t-9 7.5t-14 2.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5q0 -168 147 -284q193 -152 401 -317q6 -5 35 -29.5t46 -37.5t44.5 -31.5t50.5 -27.5t43 -9h1h1q20 0 43 9t50.5 27.5t44.5 31.5t46 37.5t35 29.5q208 165 401 317q54 43 100.5 115.5t46.5 131.5z
|
63 |
+
M1792 1120v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" />
|
64 |
+
<glyph glyph-name="heart" unicode="" horiz-adv-x="1792"
|
65 |
+
d="M896 -128q-26 0 -44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5q224 0 351 -124t127 -344q0 -221 -229 -450l-623 -600
|
66 |
+
q-18 -18 -44 -18z" />
|
67 |
+
<glyph glyph-name="star" unicode="" horiz-adv-x="1664"
|
68 |
+
d="M1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -21 -10.5 -35.5t-30.5 -14.5q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455
|
69 |
+
l502 -73q56 -9 56 -46z" />
|
70 |
+
<glyph glyph-name="star_empty" unicode="" horiz-adv-x="1664"
|
71 |
+
d="M1137 532l306 297l-422 62l-189 382l-189 -382l-422 -62l306 -297l-73 -421l378 199l377 -199zM1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -50 -41 -50q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500
|
72 |
+
l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455l502 -73q56 -9 56 -46z" />
|
73 |
+
<glyph glyph-name="user" unicode="" horiz-adv-x="1280"
|
74 |
+
d="M1280 137q0 -109 -62.5 -187t-150.5 -78h-854q-88 0 -150.5 78t-62.5 187q0 85 8.5 160.5t31.5 152t58.5 131t94 89t134.5 34.5q131 -128 313 -128t313 128q76 0 134.5 -34.5t94 -89t58.5 -131t31.5 -152t8.5 -160.5zM1024 1024q0 -159 -112.5 -271.5t-271.5 -112.5
|
75 |
+
t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5z" />
|
76 |
+
<glyph glyph-name="film" unicode="" horiz-adv-x="1920"
|
77 |
+
d="M384 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 320v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 704v128q0 26 -19 45t-45 19h-128
|
78 |
+
q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 -64v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM384 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45
|
79 |
+
t45 -19h128q26 0 45 19t19 45zM1792 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 704v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1792 320v128
|
80 |
+
q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 704v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19
|
81 |
+
t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1920 1248v-1344q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1344q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
|
82 |
+
<glyph glyph-name="th_large" unicode="" horiz-adv-x="1664"
|
83 |
+
d="M768 512v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM768 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 512v-384q0 -52 -38 -90t-90 -38
|
84 |
+
h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90z" />
|
85 |
+
<glyph glyph-name="th" unicode="" horiz-adv-x="1792"
|
86 |
+
d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 288v-192q0 -40 -28 -68t-68 -28h-320
|
87 |
+
q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28
|
88 |
+
h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192
|
89 |
+
q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68z" />
|
90 |
+
<glyph glyph-name="th_list" unicode="" horiz-adv-x="1792"
|
91 |
+
d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-960
|
92 |
+
q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28
|
93 |
+
h960q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68z" />
|
94 |
+
<glyph glyph-name="ok" unicode="" horiz-adv-x="1792"
|
95 |
+
d="M1671 970q0 -40 -28 -68l-724 -724l-136 -136q-28 -28 -68 -28t-68 28l-136 136l-362 362q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -295l656 657q28 28 68 28t68 -28l136 -136q28 -28 28 -68z" />
|
96 |
+
<glyph glyph-name="remove" unicode="" horiz-adv-x="1408"
|
97 |
+
d="M1298 214q0 -40 -28 -68l-136 -136q-28 -28 -68 -28t-68 28l-294 294l-294 -294q-28 -28 -68 -28t-68 28l-136 136q-28 28 -28 68t28 68l294 294l-294 294q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -294l294 294q28 28 68 28t68 -28l136 -136q28 -28 28 -68
|
98 |
+
t-28 -68l-294 -294l294 -294q28 -28 28 -68z" />
|
99 |
+
<glyph glyph-name="zoom_in" unicode="" horiz-adv-x="1664"
|
100 |
+
d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-224q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v224h-224q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h224v224q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5v-224h224
|
101 |
+
q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5
|
102 |
+
t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" />
|
103 |
+
<glyph glyph-name="zoom_out" unicode="" horiz-adv-x="1664"
|
104 |
+
d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-576q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h576q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5z
|
105 |
+
M1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z
|
106 |
+
" />
|
107 |
+
<glyph glyph-name="off" unicode=""
|
108 |
+
d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61t-298 61t-245 164t-164 245t-61 298q0 182 80.5 343t226.5 270q43 32 95.5 25t83.5 -50q32 -42 24.5 -94.5t-49.5 -84.5q-98 -74 -151.5 -181t-53.5 -228q0 -104 40.5 -198.5t109.5 -163.5t163.5 -109.5
|
109 |
+
t198.5 -40.5t198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5q0 121 -53.5 228t-151.5 181q-42 32 -49.5 84.5t24.5 94.5q31 43 84 50t95 -25q146 -109 226.5 -270t80.5 -343zM896 1408v-640q0 -52 -38 -90t-90 -38t-90 38t-38 90v640q0 52 38 90t90 38t90 -38t38 -90z" />
|
110 |
+
<glyph glyph-name="signal" unicode="" horiz-adv-x="1792"
|
111 |
+
d="M256 96v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM640 224v-320q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1024 480v-576q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23
|
112 |
+
v576q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1408 864v-960q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 1376v-1472q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v1472q0 14 9 23t23 9h192q14 0 23 -9t9 -23z" />
|
113 |
+
<glyph glyph-name="cog" unicode=""
|
114 |
+
d="M1024 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1536 749v-222q0 -12 -8 -23t-20 -13l-185 -28q-19 -54 -39 -91q35 -50 107 -138q10 -12 10 -25t-9 -23q-27 -37 -99 -108t-94 -71q-12 0 -26 9l-138 108q-44 -23 -91 -38
|
115 |
+
q-16 -136 -29 -186q-7 -28 -36 -28h-222q-14 0 -24.5 8.5t-11.5 21.5l-28 184q-49 16 -90 37l-141 -107q-10 -9 -25 -9q-14 0 -25 11q-126 114 -165 168q-7 10 -7 23q0 12 8 23q15 21 51 66.5t54 70.5q-27 50 -41 99l-183 27q-13 2 -21 12.5t-8 23.5v222q0 12 8 23t19 13
|
116 |
+
l186 28q14 46 39 92q-40 57 -107 138q-10 12 -10 24q0 10 9 23q26 36 98.5 107.5t94.5 71.5q13 0 26 -10l138 -107q44 23 91 38q16 136 29 186q7 28 36 28h222q14 0 24.5 -8.5t11.5 -21.5l28 -184q49 -16 90 -37l142 107q9 9 24 9q13 0 25 -10q129 -119 165 -170q7 -8 7 -22
|
117 |
+
q0 -12 -8 -23q-15 -21 -51 -66.5t-54 -70.5q26 -50 41 -98l183 -28q13 -2 21 -12.5t8 -23.5z" />
|
118 |
+
<glyph glyph-name="trash" unicode="" horiz-adv-x="1408"
|
119 |
+
d="M512 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM768 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1024 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576
|
120 |
+
q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1152 76v948h-896v-948q0 -22 7 -40.5t14.5 -27t10.5 -8.5h832q3 0 10.5 8.5t14.5 27t7 40.5zM480 1152h448l-48 117q-7 9 -17 11h-317q-10 -2 -17 -11zM1408 1120v-64q0 -14 -9 -23t-23 -9h-96v-948q0 -83 -47 -143.5t-113 -60.5h-832
|
121 |
+
q-66 0 -113 58.5t-47 141.5v952h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h309l70 167q15 37 54 63t79 26h320q40 0 79 -26t54 -63l70 -167h309q14 0 23 -9t9 -23z" />
|
122 |
+
<glyph glyph-name="home" unicode="" horiz-adv-x="1664"
|
123 |
+
d="M1408 544v-480q0 -26 -19 -45t-45 -19h-384v384h-256v-384h-384q-26 0 -45 19t-19 45v480q0 1 0.5 3t0.5 3l575 474l575 -474q1 -2 1 -6zM1631 613l-62 -74q-8 -9 -21 -11h-3q-13 0 -21 7l-692 577l-692 -577q-12 -8 -24 -7q-13 2 -21 11l-62 74q-8 10 -7 23.5t11 21.5
|
124 |
+
l719 599q32 26 76 26t76 -26l244 -204v195q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-408l219 -182q10 -8 11 -21.5t-7 -23.5z" />
|
125 |
+
<glyph glyph-name="file_alt" unicode=""
|
126 |
+
d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
|
127 |
+
" />
|
128 |
+
<glyph glyph-name="time" unicode=""
|
129 |
+
d="M896 992v-448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640
|
130 |
+
q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
131 |
+
<glyph glyph-name="road" unicode="" horiz-adv-x="1920"
|
132 |
+
d="M1111 540v4l-24 320q-1 13 -11 22.5t-23 9.5h-186q-13 0 -23 -9.5t-11 -22.5l-24 -320v-4q-1 -12 8 -20t21 -8h244q12 0 21 8t8 20zM1870 73q0 -73 -46 -73h-704q13 0 22 9.5t8 22.5l-20 256q-1 13 -11 22.5t-23 9.5h-272q-13 0 -23 -9.5t-11 -22.5l-20 -256
|
133 |
+
q-1 -13 8 -22.5t22 -9.5h-704q-46 0 -46 73q0 54 26 116l417 1044q8 19 26 33t38 14h339q-13 0 -23 -9.5t-11 -22.5l-15 -192q-1 -14 8 -23t22 -9h166q13 0 22 9t8 23l-15 192q-1 13 -11 22.5t-23 9.5h339q20 0 38 -14t26 -33l417 -1044q26 -62 26 -116z" />
|
134 |
+
<glyph glyph-name="download_alt" unicode="" horiz-adv-x="1664"
|
135 |
+
d="M1280 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 416v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h465l135 -136
|
136 |
+
q58 -56 136 -56t136 56l136 136h464q40 0 68 -28t28 -68zM1339 985q17 -41 -14 -70l-448 -448q-18 -19 -45 -19t-45 19l-448 448q-31 29 -14 70q17 39 59 39h256v448q0 26 19 45t45 19h256q26 0 45 -19t19 -45v-448h256q42 0 59 -39z" />
|
137 |
+
<glyph glyph-name="download" unicode=""
|
138 |
+
d="M1120 608q0 -12 -10 -24l-319 -319q-11 -9 -23 -9t-23 9l-320 320q-15 16 -7 35q8 20 30 20h192v352q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-352h192q14 0 23 -9t9 -23zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273
|
139 |
+
t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
140 |
+
<glyph glyph-name="upload" unicode=""
|
141 |
+
d="M1118 660q-8 -20 -30 -20h-192v-352q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v352h-192q-14 0 -23 9t-9 23q0 12 10 24l319 319q11 9 23 9t23 -9l320 -320q15 -16 7 -35zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198
|
142 |
+
t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
143 |
+
<glyph glyph-name="inbox" unicode=""
|
144 |
+
d="M1023 576h316q-1 3 -2.5 8.5t-2.5 7.5l-212 496h-708l-212 -496q-1 -3 -2.5 -8.5t-2.5 -7.5h316l95 -192h320zM1536 546v-482q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v482q0 62 25 123l238 552q10 25 36.5 42t52.5 17h832q26 0 52.5 -17t36.5 -42l238 -552
|
145 |
+
q25 -61 25 -123z" />
|
146 |
+
<glyph glyph-name="play_circle" unicode=""
|
147 |
+
d="M1184 640q0 -37 -32 -55l-544 -320q-15 -9 -32 -9q-16 0 -32 8q-32 19 -32 56v640q0 37 32 56q33 18 64 -1l544 -320q32 -18 32 -55zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640
|
148 |
+
q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
149 |
+
<glyph glyph-name="repeat" unicode=""
|
150 |
+
d="M1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l138 138q-148 137 -349 137q-104 0 -198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5q119 0 225 52t179 147q7 10 23 12q15 0 25 -9
|
151 |
+
l137 -138q9 -8 9.5 -20.5t-7.5 -22.5q-109 -132 -264 -204.5t-327 -72.5q-156 0 -298 61t-245 164t-164 245t-61 298t61 298t164 245t245 164t298 61q147 0 284.5 -55.5t244.5 -156.5l130 129q29 31 70 14q39 -17 39 -59z" />
|
152 |
+
<glyph glyph-name="refresh" unicode=""
|
153 |
+
d="M1511 480q0 -5 -1 -7q-64 -268 -268 -434.5t-478 -166.5q-146 0 -282.5 55t-243.5 157l-129 -129q-19 -19 -45 -19t-45 19t-19 45v448q0 26 19 45t45 19h448q26 0 45 -19t19 -45t-19 -45l-137 -137q71 -66 161 -102t187 -36q134 0 250 65t186 179q11 17 53 117
|
154 |
+
q8 23 30 23h192q13 0 22.5 -9.5t9.5 -22.5zM1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-26 0 -45 19t-19 45t19 45l138 138q-148 137 -349 137q-134 0 -250 -65t-186 -179q-11 -17 -53 -117q-8 -23 -30 -23h-199q-13 0 -22.5 9.5t-9.5 22.5v7q65 268 270 434.5t480 166.5
|
155 |
+
q146 0 284 -55.5t245 -156.5l130 129q19 19 45 19t45 -19t19 -45z" />
|
156 |
+
<glyph glyph-name="list_alt" unicode="" horiz-adv-x="1792"
|
157 |
+
d="M384 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
|
158 |
+
M384 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1536 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5z
|
159 |
+
M1536 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5zM1536 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5
|
160 |
+
t9.5 -22.5zM1664 160v832q0 13 -9.5 22.5t-22.5 9.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1792 1248v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47
|
161 |
+
t47 -113z" />
|
162 |
+
<glyph glyph-name="lock" unicode="" horiz-adv-x="1152"
|
163 |
+
d="M320 768h512v192q0 106 -75 181t-181 75t-181 -75t-75 -181v-192zM1152 672v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v192q0 184 132 316t316 132t316 -132t132 -316v-192h32q40 0 68 -28t28 -68z" />
|
164 |
+
<glyph glyph-name="flag" unicode="" horiz-adv-x="1792"
|
165 |
+
d="M320 1280q0 -72 -64 -110v-1266q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v1266q-64 38 -64 110q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -25 -12.5 -38.5t-39.5 -27.5q-215 -116 -369 -116q-61 0 -123.5 22t-108.5 48
|
166 |
+
t-115.5 48t-142.5 22q-192 0 -464 -146q-17 -9 -33 -9q-26 0 -45 19t-19 45v742q0 32 31 55q21 14 79 43q236 120 421 120q107 0 200 -29t219 -88q38 -19 88 -19q54 0 117.5 21t110 47t88 47t54.5 21q26 0 45 -19t19 -45z" />
|
167 |
+
<glyph glyph-name="headphones" unicode="" horiz-adv-x="1664"
|
168 |
+
d="M1664 650q0 -166 -60 -314l-20 -49l-185 -33q-22 -83 -90.5 -136.5t-156.5 -53.5v-32q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-32q71 0 130 -35.5t93 -95.5l68 12q29 95 29 193q0 148 -88 279t-236.5 209t-315.5 78
|
169 |
+
t-315.5 -78t-236.5 -209t-88 -279q0 -98 29 -193l68 -12q34 60 93 95.5t130 35.5v32q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v32q-88 0 -156.5 53.5t-90.5 136.5l-185 33l-20 49q-60 148 -60 314q0 151 67 291t179 242.5
|
170 |
+
t266 163.5t320 61t320 -61t266 -163.5t179 -242.5t67 -291z" />
|
171 |
+
<glyph glyph-name="volume_off" unicode="" horiz-adv-x="768"
|
172 |
+
d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45z" />
|
173 |
+
<glyph glyph-name="volume_down" unicode="" horiz-adv-x="1152"
|
174 |
+
d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 36
|
175 |
+
t12 56.5t-12 56.5t-29 36t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142z" />
|
176 |
+
<glyph glyph-name="volume_up" unicode="" horiz-adv-x="1664"
|
177 |
+
d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 36
|
178 |
+
t12 56.5t-12 56.5t-29 36t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142zM1408 640q0 -153 -85 -282.5t-225 -188.5q-13 -5 -25 -5q-27 0 -46 19t-19 45q0 39 39 59q56 29 76 44q74 54 115.5 135.5t41.5 173.5t-41.5 173.5
|
179 |
+
t-115.5 135.5q-20 15 -76 44q-39 20 -39 59q0 26 19 45t45 19q13 0 26 -5q140 -59 225 -188.5t85 -282.5zM1664 640q0 -230 -127 -422.5t-338 -283.5q-13 -5 -26 -5q-26 0 -45 19t-19 45q0 36 39 59q7 4 22.5 10.5t22.5 10.5q46 25 82 51q123 91 192 227t69 289t-69 289
|
180 |
+
t-192 227q-36 26 -82 51q-7 4 -22.5 10.5t-22.5 10.5q-39 23 -39 59q0 26 19 45t45 19q13 0 26 -5q211 -91 338 -283.5t127 -422.5z" />
|
181 |
+
<glyph glyph-name="qrcode" unicode="" horiz-adv-x="1408"
|
182 |
+
d="M384 384v-128h-128v128h128zM384 1152v-128h-128v128h128zM1152 1152v-128h-128v128h128zM128 129h384v383h-384v-383zM128 896h384v384h-384v-384zM896 896h384v384h-384v-384zM640 640v-640h-640v640h640zM1152 128v-128h-128v128h128zM1408 128v-128h-128v128h128z
|
183 |
+
M1408 640v-384h-384v128h-128v-384h-128v640h384v-128h128v128h128zM640 1408v-640h-640v640h640zM1408 1408v-640h-640v640h640z" />
|
184 |
+
<glyph glyph-name="barcode" unicode="" horiz-adv-x="1792"
|
185 |
+
d="M63 0h-63v1408h63v-1408zM126 1h-32v1407h32v-1407zM220 1h-31v1407h31v-1407zM377 1h-31v1407h31v-1407zM534 1h-62v1407h62v-1407zM660 1h-31v1407h31v-1407zM723 1h-31v1407h31v-1407zM786 1h-31v1407h31v-1407zM943 1h-63v1407h63v-1407zM1100 1h-63v1407h63v-1407z
|
186 |
+
M1226 1h-63v1407h63v-1407zM1352 1h-63v1407h63v-1407zM1446 1h-63v1407h63v-1407zM1635 1h-94v1407h94v-1407zM1698 1h-32v1407h32v-1407zM1792 0h-63v1408h63v-1408z" />
|
187 |
+
<glyph glyph-name="tag" unicode=""
|
188 |
+
d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5
|
189 |
+
l715 -714q37 -39 37 -91z" />
|
190 |
+
<glyph glyph-name="tags" unicode="" horiz-adv-x="1920"
|
191 |
+
d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5
|
192 |
+
l715 -714q37 -39 37 -91zM1899 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-36 0 -59 14t-53 45l470 470q37 37 37 90q0 52 -37 91l-715 714q-38 38 -102 64.5t-117 26.5h224q53 0 117 -26.5t102 -64.5l715 -714q37 -39 37 -91z" />
|
193 |
+
<glyph glyph-name="book" unicode="" horiz-adv-x="1664"
|
194 |
+
d="M1639 1058q40 -57 18 -129l-275 -906q-19 -64 -76.5 -107.5t-122.5 -43.5h-923q-77 0 -148.5 53.5t-99.5 131.5q-24 67 -2 127q0 4 3 27t4 37q1 8 -3 21.5t-3 19.5q2 11 8 21t16.5 23.5t16.5 23.5q23 38 45 91.5t30 91.5q3 10 0.5 30t-0.5 28q3 11 17 28t17 23
|
195 |
+
q21 36 42 92t25 90q1 9 -2.5 32t0.5 28q4 13 22 30.5t22 22.5q19 26 42.5 84.5t27.5 96.5q1 8 -3 25.5t-2 26.5q2 8 9 18t18 23t17 21q8 12 16.5 30.5t15 35t16 36t19.5 32t26.5 23.5t36 11.5t47.5 -5.5l-1 -3q38 9 51 9h761q74 0 114 -56t18 -130l-274 -906
|
196 |
+
q-36 -119 -71.5 -153.5t-128.5 -34.5h-869q-27 0 -38 -15q-11 -16 -1 -43q24 -70 144 -70h923q29 0 56 15.5t35 41.5l300 987q7 22 5 57q38 -15 59 -43zM575 1056q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5
|
197 |
+
t-16.5 -22.5zM492 800q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5t-16.5 -22.5z" />
|
198 |
+
<glyph glyph-name="bookmark" unicode="" horiz-adv-x="1280"
|
199 |
+
d="M1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289q0 34 19.5 62t52.5 41q21 9 44 9h1048z" />
|
200 |
+
<glyph glyph-name="print" unicode="" horiz-adv-x="1664"
|
201 |
+
d="M384 0h896v256h-896v-256zM384 640h896v384h-160q-40 0 -68 28t-28 68v160h-640v-640zM1536 576q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 576v-416q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-160q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68
|
202 |
+
v160h-224q-13 0 -22.5 9.5t-9.5 22.5v416q0 79 56.5 135.5t135.5 56.5h64v544q0 40 28 68t68 28h672q40 0 88 -20t76 -48l152 -152q28 -28 48 -76t20 -88v-256h64q79 0 135.5 -56.5t56.5 -135.5z" />
|
203 |
+
<glyph glyph-name="camera" unicode="" horiz-adv-x="1920"
|
204 |
+
d="M960 864q119 0 203.5 -84.5t84.5 -203.5t-84.5 -203.5t-203.5 -84.5t-203.5 84.5t-84.5 203.5t84.5 203.5t203.5 84.5zM1664 1280q106 0 181 -75t75 -181v-896q0 -106 -75 -181t-181 -75h-1408q-106 0 -181 75t-75 181v896q0 106 75 181t181 75h224l51 136
|
205 |
+
q19 49 69.5 84.5t103.5 35.5h512q53 0 103.5 -35.5t69.5 -84.5l51 -136h224zM960 128q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
|
206 |
+
<glyph glyph-name="font" unicode="" horiz-adv-x="1664"
|
207 |
+
d="M725 977l-170 -450q33 0 136.5 -2t160.5 -2q19 0 57 2q-87 253 -184 452zM0 -128l2 79q23 7 56 12.5t57 10.5t49.5 14.5t44.5 29t31 50.5l237 616l280 724h75h53q8 -14 11 -21l205 -480q33 -78 106 -257.5t114 -274.5q15 -34 58 -144.5t72 -168.5q20 -45 35 -57
|
208 |
+
q19 -15 88 -29.5t84 -20.5q6 -38 6 -57q0 -5 -0.5 -13.5t-0.5 -12.5q-63 0 -190 8t-191 8q-76 0 -215 -7t-178 -8q0 43 4 78l131 28q1 0 12.5 2.5t15.5 3.5t14.5 4.5t15 6.5t11 8t9 11t2.5 14q0 16 -31 96.5t-72 177.5t-42 100l-450 2q-26 -58 -76.5 -195.5t-50.5 -162.5
|
209 |
+
q0 -22 14 -37.5t43.5 -24.5t48.5 -13.5t57 -8.5t41 -4q1 -19 1 -58q0 -9 -2 -27q-58 0 -174.5 10t-174.5 10q-8 0 -26.5 -4t-21.5 -4q-80 -14 -188 -14z" />
|
210 |
+
<glyph glyph-name="bold" unicode="" horiz-adv-x="1408"
|
211 |
+
d="M555 15q74 -32 140 -32q376 0 376 335q0 114 -41 180q-27 44 -61.5 74t-67.5 46.5t-80.5 25t-84 10.5t-94.5 2q-73 0 -101 -10q0 -53 -0.5 -159t-0.5 -158q0 -8 -1 -67.5t-0.5 -96.5t4.5 -83.5t12 -66.5zM541 761q42 -7 109 -7q82 0 143 13t110 44.5t74.5 89.5t25.5 142
|
212 |
+
q0 70 -29 122.5t-79 82t-108 43.5t-124 14q-50 0 -130 -13q0 -50 4 -151t4 -152q0 -27 -0.5 -80t-0.5 -79q0 -46 1 -69zM0 -128l2 94q15 4 85 16t106 27q7 12 12.5 27t8.5 33.5t5.5 32.5t3 37.5t0.5 34v35.5v30q0 982 -22 1025q-4 8 -22 14.5t-44.5 11t-49.5 7t-48.5 4.5
|
213 |
+
t-30.5 3l-4 83q98 2 340 11.5t373 9.5q23 0 68 -0.5t68 -0.5q70 0 136.5 -13t128.5 -42t108 -71t74 -104.5t28 -137.5q0 -52 -16.5 -95.5t-39 -72t-64.5 -57.5t-73 -45t-84 -40q154 -35 256.5 -134t102.5 -248q0 -100 -35 -179.5t-93.5 -130.5t-138 -85.5t-163.5 -48.5
|
214 |
+
t-176 -14q-44 0 -132 3t-132 3q-106 0 -307 -11t-231 -12z" />
|
215 |
+
<glyph glyph-name="italic" unicode="" horiz-adv-x="1024"
|
216 |
+
d="M0 -126l17 85q22 7 61.5 16.5t72 19t59.5 23.5q28 35 41 101q1 7 62 289t114 543.5t52 296.5v25q-24 13 -54.5 18.5t-69.5 8t-58 5.5l19 103q33 -2 120 -6.5t149.5 -7t120.5 -2.5q48 0 98.5 2.5t121 7t98.5 6.5q-5 -39 -19 -89q-30 -10 -101.5 -28.5t-108.5 -33.5
|
217 |
+
q-8 -19 -14 -42.5t-9 -40t-7.5 -45.5t-6.5 -42q-27 -148 -87.5 -419.5t-77.5 -355.5q-2 -9 -13 -58t-20 -90t-16 -83.5t-6 -57.5l1 -18q17 -4 185 -31q-3 -44 -16 -99q-11 0 -32.5 -1.5t-32.5 -1.5q-29 0 -87 10t-86 10q-138 2 -206 2q-51 0 -143 -9t-121 -11z" />
|
218 |
+
<glyph glyph-name="text_height" unicode="" horiz-adv-x="1792"
|
219 |
+
d="M1744 128q33 0 42 -18.5t-11 -44.5l-126 -162q-20 -26 -49 -26t-49 26l-126 162q-20 26 -11 44.5t42 18.5h80v1024h-80q-33 0 -42 18.5t11 44.5l126 162q20 26 49 26t49 -26l126 -162q20 -26 11 -44.5t-42 -18.5h-80v-1024h80zM81 1407l54 -27q12 -5 211 -5q44 0 132 2
|
220 |
+
t132 2q36 0 107.5 -0.5t107.5 -0.5h293q6 0 21 -0.5t20.5 0t16 3t17.5 9t15 17.5l42 1q4 0 14 -0.5t14 -0.5q2 -112 2 -336q0 -80 -5 -109q-39 -14 -68 -18q-25 44 -54 128q-3 9 -11 48t-14.5 73.5t-7.5 35.5q-6 8 -12 12.5t-15.5 6t-13 2.5t-18 0.5t-16.5 -0.5
|
221 |
+
q-17 0 -66.5 0.5t-74.5 0.5t-64 -2t-71 -6q-9 -81 -8 -136q0 -94 2 -388t2 -455q0 -16 -2.5 -71.5t0 -91.5t12.5 -69q40 -21 124 -42.5t120 -37.5q5 -40 5 -50q0 -14 -3 -29l-34 -1q-76 -2 -218 8t-207 10q-50 0 -151 -9t-152 -9q-3 51 -3 52v9q17 27 61.5 43t98.5 29t78 27
|
222 |
+
q19 42 19 383q0 101 -3 303t-3 303v117q0 2 0.5 15.5t0.5 25t-1 25.5t-3 24t-5 14q-11 12 -162 12q-33 0 -93 -12t-80 -26q-19 -13 -34 -72.5t-31.5 -111t-42.5 -53.5q-42 26 -56 44v383z" />
|
223 |
+
<glyph glyph-name="text_width" unicode=""
|
224 |
+
d="M81 1407l54 -27q12 -5 211 -5q44 0 132 2t132 2q70 0 246.5 1t304.5 0.5t247 -4.5q33 -1 56 31l42 1q4 0 14 -0.5t14 -0.5q2 -112 2 -336q0 -80 -5 -109q-39 -14 -68 -18q-25 44 -54 128q-3 9 -11 47.5t-15 73.5t-7 36q-10 13 -27 19q-5 2 -66 2q-30 0 -93 1t-103 1
|
225 |
+
t-94 -2t-96 -7q-9 -81 -8 -136l1 -152v52q0 -55 1 -154t1.5 -180t0.5 -153q0 -16 -2.5 -71.5t0 -91.5t12.5 -69q40 -21 124 -42.5t120 -37.5q5 -40 5 -50q0 -14 -3 -29l-34 -1q-76 -2 -218 8t-207 10q-50 0 -151 -9t-152 -9q-3 51 -3 52v9q17 27 61.5 43t98.5 29t78 27
|
226 |
+
q7 16 11.5 74t6 145.5t1.5 155t-0.5 153.5t-0.5 89q0 7 -2.5 21.5t-2.5 22.5q0 7 0.5 44t1 73t0 76.5t-3 67.5t-6.5 32q-11 12 -162 12q-41 0 -163 -13.5t-138 -24.5q-19 -12 -34 -71.5t-31.5 -111.5t-42.5 -54q-42 26 -56 44v383zM1310 125q12 0 42 -19.5t57.5 -41.5
|
227 |
+
t59.5 -49t36 -30q26 -21 26 -49t-26 -49q-4 -3 -36 -30t-59.5 -49t-57.5 -41.5t-42 -19.5q-13 0 -20.5 10.5t-10 28.5t-2.5 33.5t1.5 33t1.5 19.5h-1024q0 -2 1.5 -19.5t1.5 -33t-2.5 -33.5t-10 -28.5t-20.5 -10.5q-12 0 -42 19.5t-57.5 41.5t-59.5 49t-36 30q-26 21 -26 49
|
228 |
+
t26 49q4 3 36 30t59.5 49t57.5 41.5t42 19.5q13 0 20.5 -10.5t10 -28.5t2.5 -33.5t-1.5 -33t-1.5 -19.5h1024q0 2 -1.5 19.5t-1.5 33t2.5 33.5t10 28.5t20.5 10.5z" />
|
229 |
+
<glyph glyph-name="align_left" unicode="" horiz-adv-x="1792"
|
230 |
+
d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45
|
231 |
+
t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
|
232 |
+
<glyph glyph-name="align_center" unicode="" horiz-adv-x="1792"
|
233 |
+
d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h896q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45t-45 -19
|
234 |
+
h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h640q26 0 45 -19t19 -45z" />
|
235 |
+
<glyph glyph-name="align_right" unicode="" horiz-adv-x="1792"
|
236 |
+
d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45
|
237 |
+
t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
|
238 |
+
<glyph glyph-name="align_justify" unicode="" horiz-adv-x="1792"
|
239 |
+
d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45
|
240 |
+
t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z" />
|
241 |
+
<glyph glyph-name="list" unicode="" horiz-adv-x="1792"
|
242 |
+
d="M256 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM256 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5
|
243 |
+
t9.5 -22.5zM256 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344
|
244 |
+
q13 0 22.5 -9.5t9.5 -22.5zM256 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5
|
245 |
+
t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192
|
246 |
+
q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5z" />
|
247 |
+
<glyph glyph-name="indent_left" unicode="" horiz-adv-x="1792"
|
248 |
+
d="M384 992v-576q0 -13 -9.5 -22.5t-22.5 -9.5q-14 0 -23 9l-288 288q-9 9 -9 23t9 23l288 288q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5
|
249 |
+
t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088
|
250 |
+
q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" />
|
251 |
+
<glyph glyph-name="indent_right" unicode="" horiz-adv-x="1792"
|
252 |
+
d="M352 704q0 -14 -9 -23l-288 -288q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v576q0 13 9.5 22.5t22.5 9.5q14 0 23 -9l288 -288q9 -9 9 -23zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5
|
253 |
+
t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088
|
254 |
+
q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" />
|
255 |
+
<glyph glyph-name="facetime_video" unicode="" horiz-adv-x="1792"
|
256 |
+
d="M1792 1184v-1088q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-403 403v-166q0 -119 -84.5 -203.5t-203.5 -84.5h-704q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h704q119 0 203.5 -84.5t84.5 -203.5v-165l403 402q18 19 45 19q12 0 25 -5
|
257 |
+
q39 -17 39 -59z" />
|
258 |
+
<glyph glyph-name="picture" unicode="" horiz-adv-x="1920"
|
259 |
+
d="M640 960q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1664 576v-448h-1408v192l320 320l160 -160l512 512zM1760 1280h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-1216q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5v1216
|
260 |
+
q0 13 -9.5 22.5t-22.5 9.5zM1920 1248v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
|
261 |
+
<glyph glyph-name="pencil" unicode=""
|
262 |
+
d="M363 0l91 91l-235 235l-91 -91v-107h128v-128h107zM886 928q0 22 -22 22q-10 0 -17 -7l-542 -542q-7 -7 -7 -17q0 -22 22 -22q10 0 17 7l542 542q7 7 7 17zM832 1120l416 -416l-832 -832h-416v416zM1515 1024q0 -53 -37 -90l-166 -166l-416 416l166 165q36 38 90 38
|
263 |
+
q53 0 91 -38l235 -234q37 -39 37 -91z" />
|
264 |
+
<glyph glyph-name="map_marker" unicode="" horiz-adv-x="1024"
|
265 |
+
d="M768 896q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1024 896q0 -109 -33 -179l-364 -774q-16 -33 -47.5 -52t-67.5 -19t-67.5 19t-46.5 52l-365 774q-33 70 -33 179q0 212 150 362t362 150t362 -150t150 -362z" />
|
266 |
+
<glyph glyph-name="adjust" unicode=""
|
267 |
+
d="M768 96v1088q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
268 |
+
<glyph glyph-name="tint" unicode="" horiz-adv-x="1024"
|
269 |
+
d="M512 384q0 36 -20 69q-1 1 -15.5 22.5t-25.5 38t-25 44t-21 50.5q-4 16 -21 16t-21 -16q-7 -23 -21 -50.5t-25 -44t-25.5 -38t-15.5 -22.5q-20 -33 -20 -69q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 512q0 -212 -150 -362t-362 -150t-362 150t-150 362
|
270 |
+
q0 145 81 275q6 9 62.5 90.5t101 151t99.5 178t83 201.5q9 30 34 47t51 17t51.5 -17t33.5 -47q28 -93 83 -201.5t99.5 -178t101 -151t62.5 -90.5q81 -127 81 -275z" />
|
271 |
+
<glyph glyph-name="edit" unicode="" horiz-adv-x="1792"
|
272 |
+
d="M888 352l116 116l-152 152l-116 -116v-56h96v-96h56zM1328 1072q-16 16 -33 -1l-350 -350q-17 -17 -1 -33t33 1l350 350q17 17 1 33zM1408 478v-190q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832
|
273 |
+
q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-14 -14 -32 -8q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v126q0 13 9 22l64 64q15 15 35 7t20 -29zM1312 1216l288 -288l-672 -672h-288v288zM1756 1084l-92 -92
|
274 |
+
l-288 288l92 92q28 28 68 28t68 -28l152 -152q28 -28 28 -68t-28 -68z" />
|
275 |
+
<glyph glyph-name="share" unicode="" horiz-adv-x="1664"
|
276 |
+
d="M1408 547v-259q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h255v0q13 0 22.5 -9.5t9.5 -22.5q0 -27 -26 -32q-77 -26 -133 -60q-10 -4 -16 -4h-112q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832
|
277 |
+
q66 0 113 47t47 113v214q0 19 18 29q28 13 54 37q16 16 35 8q21 -9 21 -29zM1645 1043l-384 -384q-18 -19 -45 -19q-12 0 -25 5q-39 17 -39 59v192h-160q-323 0 -438 -131q-119 -137 -74 -473q3 -23 -20 -34q-8 -2 -12 -2q-16 0 -26 13q-10 14 -21 31t-39.5 68.5t-49.5 99.5
|
278 |
+
t-38.5 114t-17.5 122q0 49 3.5 91t14 90t28 88t47 81.5t68.5 74t94.5 61.5t124.5 48.5t159.5 30.5t196.5 11h160v192q0 42 39 59q13 5 25 5q26 0 45 -19l384 -384q19 -19 19 -45t-19 -45z" />
|
279 |
+
<glyph glyph-name="check" unicode="" horiz-adv-x="1664"
|
280 |
+
d="M1408 606v-318q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-10 -10 -23 -10q-3 0 -9 2q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832
|
281 |
+
q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v254q0 13 9 22l64 64q10 10 23 10q6 0 12 -3q20 -8 20 -29zM1639 1095l-814 -814q-24 -24 -57 -24t-57 24l-430 430q-24 24 -24 57t24 57l110 110q24 24 57 24t57 -24l263 -263l647 647q24 24 57 24t57 -24l110 -110
|
282 |
+
q24 -24 24 -57t-24 -57z" />
|
283 |
+
<glyph glyph-name="move" unicode="" horiz-adv-x="1792"
|
284 |
+
d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-384v-384h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v384h-384v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45
|
285 |
+
t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h384v384h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45t-19 -45t-45 -19h-128v-384h384v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" />
|
286 |
+
<glyph glyph-name="step_backward" unicode="" horiz-adv-x="1024"
|
287 |
+
d="M979 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 10 13 19z" />
|
288 |
+
<glyph glyph-name="fast_backward" unicode="" horiz-adv-x="1792"
|
289 |
+
d="M1747 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 10 13 19l710 710
|
290 |
+
q19 19 32 13t13 -32v-710q4 10 13 19z" />
|
291 |
+
<glyph glyph-name="backward" unicode="" horiz-adv-x="1664"
|
292 |
+
d="M1619 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-19 19 -19 45t19 45l710 710q19 19 32 13t13 -32v-710q4 10 13 19z" />
|
293 |
+
<glyph glyph-name="play" unicode="" horiz-adv-x="1408"
|
294 |
+
d="M1384 609l-1328 -738q-23 -13 -39.5 -3t-16.5 36v1472q0 26 16.5 36t39.5 -3l1328 -738q23 -13 23 -31t-23 -31z" />
|
295 |
+
<glyph glyph-name="pause" unicode=""
|
296 |
+
d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45zM640 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45z" />
|
297 |
+
<glyph glyph-name="stop" unicode=""
|
298 |
+
d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
|
299 |
+
<glyph glyph-name="forward" unicode="" horiz-adv-x="1664"
|
300 |
+
d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q9 -9 13 -19v710q0 26 13 32t32 -13l710 -710q19 -19 19 -45t-19 -45l-710 -710q-19 -19 -32 -13t-13 32v710q-4 -10 -13 -19z" />
|
301 |
+
<glyph glyph-name="fast_forward" unicode="" horiz-adv-x="1792"
|
302 |
+
d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q9 -9 13 -19v710q0 26 13 32t32 -13l710 -710q9 -9 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-4 -10 -13 -19l-710 -710
|
303 |
+
q-19 -19 -32 -13t-13 32v710q-4 -10 -13 -19z" />
|
304 |
+
<glyph glyph-name="step_forward" unicode="" horiz-adv-x="1024"
|
305 |
+
d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q9 -9 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-4 -10 -13 -19z" />
|
306 |
+
<glyph glyph-name="eject" unicode="" horiz-adv-x="1538"
|
307 |
+
d="M14 557l710 710q19 19 45 19t45 -19l710 -710q19 -19 13 -32t-32 -13h-1472q-26 0 -32 13t13 32zM1473 0h-1408q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1408q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19z" />
|
308 |
+
<glyph glyph-name="chevron_left" unicode="" horiz-adv-x="1280"
|
309 |
+
d="M1171 1235l-531 -531l531 -531q19 -19 19 -45t-19 -45l-166 -166q-19 -19 -45 -19t-45 19l-742 742q-19 19 -19 45t19 45l742 742q19 19 45 19t45 -19l166 -166q19 -19 19 -45t-19 -45z" />
|
310 |
+
<glyph glyph-name="chevron_right" unicode="" horiz-adv-x="1280"
|
311 |
+
d="M1107 659l-742 -742q-19 -19 -45 -19t-45 19l-166 166q-19 19 -19 45t19 45l531 531l-531 531q-19 19 -19 45t19 45l166 166q19 19 45 19t45 -19l742 -742q19 -19 19 -45t-19 -45z" />
|
312 |
+
<glyph glyph-name="plus_sign" unicode=""
|
313 |
+
d="M1216 576v128q0 26 -19 45t-45 19h-256v256q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-256h-256q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h256v-256q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v256h256q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5
|
314 |
+
t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
315 |
+
<glyph glyph-name="minus_sign" unicode=""
|
316 |
+
d="M1216 576v128q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5
|
317 |
+
t103 -385.5z" />
|
318 |
+
<glyph glyph-name="remove_sign" unicode=""
|
319 |
+
d="M1149 414q0 26 -19 45l-181 181l181 181q19 19 19 45q0 27 -19 46l-90 90q-19 19 -46 19q-26 0 -45 -19l-181 -181l-181 181q-19 19 -45 19q-27 0 -46 -19l-90 -90q-19 -19 -19 -46q0 -26 19 -45l181 -181l-181 -181q-19 -19 -19 -45q0 -27 19 -46l90 -90q19 -19 46 -19
|
320 |
+
q26 0 45 19l181 181l181 -181q19 -19 45 -19q27 0 46 19l90 90q19 19 19 46zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
321 |
+
<glyph glyph-name="ok_sign" unicode=""
|
322 |
+
d="M1284 802q0 28 -18 46l-91 90q-19 19 -45 19t-45 -19l-408 -407l-226 226q-19 19 -45 19t-45 -19l-91 -90q-18 -18 -18 -46q0 -27 18 -45l362 -362q19 -19 45 -19q27 0 46 19l543 543q18 18 18 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103
|
323 |
+
t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
324 |
+
<glyph glyph-name="question_sign" unicode=""
|
325 |
+
d="M896 160v192q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h192q14 0 23 9t9 23zM1152 832q0 88 -55.5 163t-138.5 116t-170 41q-243 0 -371 -213q-15 -24 8 -42l132 -100q7 -6 19 -6q16 0 25 12q53 68 86 92q34 24 86 24q48 0 85.5 -26t37.5 -59
|
326 |
+
q0 -38 -20 -61t-68 -45q-63 -28 -115.5 -86.5t-52.5 -125.5v-36q0 -14 9 -23t23 -9h192q14 0 23 9t9 23q0 19 21.5 49.5t54.5 49.5q32 18 49 28.5t46 35t44.5 48t28 60.5t12.5 81zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5
|
327 |
+
t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
328 |
+
<glyph glyph-name="info_sign" unicode=""
|
329 |
+
d="M1024 160v160q0 14 -9 23t-23 9h-96v512q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h96v-320h-96q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h448q14 0 23 9t9 23zM896 1056v160q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23
|
330 |
+
t23 -9h192q14 0 23 9t9 23zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
331 |
+
<glyph glyph-name="screenshot" unicode=""
|
332 |
+
d="M1197 512h-109q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h109q-32 108 -112.5 188.5t-188.5 112.5v-109q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v109q-108 -32 -188.5 -112.5t-112.5 -188.5h109q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-109
|
333 |
+
q32 -108 112.5 -188.5t188.5 -112.5v109q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-109q108 32 188.5 112.5t112.5 188.5zM1536 704v-128q0 -26 -19 -45t-45 -19h-143q-37 -161 -154.5 -278.5t-278.5 -154.5v-143q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v143
|
334 |
+
q-161 37 -278.5 154.5t-154.5 278.5h-143q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h143q37 161 154.5 278.5t278.5 154.5v143q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-143q161 -37 278.5 -154.5t154.5 -278.5h143q26 0 45 -19t19 -45z" />
|
335 |
+
<glyph glyph-name="remove_circle" unicode=""
|
336 |
+
d="M1097 457l-146 -146q-10 -10 -23 -10t-23 10l-137 137l-137 -137q-10 -10 -23 -10t-23 10l-146 146q-10 10 -10 23t10 23l137 137l-137 137q-10 10 -10 23t10 23l146 146q10 10 23 10t23 -10l137 -137l137 137q10 10 23 10t23 -10l146 -146q10 -10 10 -23t-10 -23
|
337 |
+
l-137 -137l137 -137q10 -10 10 -23t-10 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5
|
338 |
+
t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
339 |
+
<glyph glyph-name="ok_circle" unicode=""
|
340 |
+
d="M1171 723l-422 -422q-19 -19 -45 -19t-45 19l-294 294q-19 19 -19 45t19 45l102 102q19 19 45 19t45 -19l147 -147l275 275q19 19 45 19t45 -19l102 -102q19 -19 19 -45t-19 -45zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198
|
341 |
+
t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
342 |
+
<glyph glyph-name="ban_circle" unicode=""
|
343 |
+
d="M1312 643q0 161 -87 295l-754 -753q137 -89 297 -89q111 0 211.5 43.5t173.5 116.5t116 174.5t43 212.5zM313 344l755 754q-135 91 -300 91q-148 0 -273 -73t-198 -199t-73 -274q0 -162 89 -299zM1536 643q0 -157 -61 -300t-163.5 -246t-245 -164t-298.5 -61t-298.5 61
|
344 |
+
t-245 164t-163.5 246t-61 300t61 299.5t163.5 245.5t245 164t298.5 61t298.5 -61t245 -164t163.5 -245.5t61 -299.5z" />
|
345 |
+
<glyph glyph-name="arrow_left" unicode=""
|
346 |
+
d="M1536 640v-128q0 -53 -32.5 -90.5t-84.5 -37.5h-704l293 -294q38 -36 38 -90t-38 -90l-75 -76q-37 -37 -90 -37q-52 0 -91 37l-651 652q-37 37 -37 90q0 52 37 91l651 650q38 38 91 38q52 0 90 -38l75 -74q38 -38 38 -91t-38 -91l-293 -293h704q52 0 84.5 -37.5
|
347 |
+
t32.5 -90.5z" />
|
348 |
+
<glyph glyph-name="arrow_right" unicode=""
|
349 |
+
d="M1472 576q0 -54 -37 -91l-651 -651q-39 -37 -91 -37q-51 0 -90 37l-75 75q-38 38 -38 91t38 91l293 293h-704q-52 0 -84.5 37.5t-32.5 90.5v128q0 53 32.5 90.5t84.5 37.5h704l-293 294q-38 36 -38 90t38 90l75 75q38 38 90 38q53 0 91 -38l651 -651q37 -35 37 -90z" />
|
350 |
+
<glyph glyph-name="arrow_up" unicode="" horiz-adv-x="1664"
|
351 |
+
d="M1611 565q0 -51 -37 -90l-75 -75q-38 -38 -91 -38q-54 0 -90 38l-294 293v-704q0 -52 -37.5 -84.5t-90.5 -32.5h-128q-53 0 -90.5 32.5t-37.5 84.5v704l-294 -293q-36 -38 -90 -38t-90 38l-75 75q-38 38 -38 90q0 53 38 91l651 651q35 37 90 37q54 0 91 -37l651 -651
|
352 |
+
q37 -39 37 -91z" />
|
353 |
+
<glyph glyph-name="arrow_down" unicode="" horiz-adv-x="1664"
|
354 |
+
d="M1611 704q0 -53 -37 -90l-651 -652q-39 -37 -91 -37q-53 0 -90 37l-651 652q-38 36 -38 90q0 53 38 91l74 75q39 37 91 37q53 0 90 -37l294 -294v704q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-704l294 294q37 37 90 37q52 0 91 -37l75 -75q37 -39 37 -91z" />
|
355 |
+
<glyph glyph-name="share_alt" unicode="" horiz-adv-x="1792"
|
356 |
+
d="M1792 896q0 -26 -19 -45l-512 -512q-19 -19 -45 -19t-45 19t-19 45v256h-224q-98 0 -175.5 -6t-154 -21.5t-133 -42.5t-105.5 -69.5t-80 -101t-48.5 -138.5t-17.5 -181q0 -55 5 -123q0 -6 2.5 -23.5t2.5 -26.5q0 -15 -8.5 -25t-23.5 -10q-16 0 -28 17q-7 9 -13 22
|
357 |
+
t-13.5 30t-10.5 24q-127 285 -127 451q0 199 53 333q162 403 875 403h224v256q0 26 19 45t45 19t45 -19l512 -512q19 -19 19 -45z" />
|
358 |
+
<glyph glyph-name="resize_full" unicode=""
|
359 |
+
d="M755 480q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23zM1536 1344v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332
|
360 |
+
q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45z" />
|
361 |
+
<glyph glyph-name="resize_small" unicode=""
|
362 |
+
d="M768 576v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45zM1523 1248q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45
|
363 |
+
t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23z" />
|
364 |
+
<glyph glyph-name="plus" unicode="" horiz-adv-x="1408"
|
365 |
+
d="M1408 800v-192q0 -40 -28 -68t-68 -28h-416v-416q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v416h-416q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h416v416q0 40 28 68t68 28h192q40 0 68 -28t28 -68v-416h416q40 0 68 -28t28 -68z" />
|
366 |
+
<glyph glyph-name="minus" unicode="" horiz-adv-x="1408"
|
367 |
+
d="M1408 800v-192q0 -40 -28 -68t-68 -28h-1216q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h1216q40 0 68 -28t28 -68z" />
|
368 |
+
<glyph glyph-name="asterisk" unicode="" horiz-adv-x="1664"
|
369 |
+
d="M1482 486q46 -26 59.5 -77.5t-12.5 -97.5l-64 -110q-26 -46 -77.5 -59.5t-97.5 12.5l-266 153v-307q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v307l-266 -153q-46 -26 -97.5 -12.5t-77.5 59.5l-64 110q-26 46 -12.5 97.5t59.5 77.5l266 154l-266 154
|
370 |
+
q-46 26 -59.5 77.5t12.5 97.5l64 110q26 46 77.5 59.5t97.5 -12.5l266 -153v307q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-307l266 153q46 26 97.5 12.5t77.5 -59.5l64 -110q26 -46 12.5 -97.5t-59.5 -77.5l-266 -154z" />
|
371 |
+
<glyph glyph-name="exclamation_sign" unicode=""
|
372 |
+
d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM896 161v190q0 14 -9 23.5t-22 9.5h-192q-13 0 -23 -10t-10 -23v-190q0 -13 10 -23t23 -10h192
|
373 |
+
q13 0 22 9.5t9 23.5zM894 505l18 621q0 12 -10 18q-10 8 -24 8h-220q-14 0 -24 -8q-10 -6 -10 -18l17 -621q0 -10 10 -17.5t24 -7.5h185q14 0 23.5 7.5t10.5 17.5z" />
|
374 |
+
<glyph glyph-name="gift" unicode=""
|
375 |
+
d="M928 180v56v468v192h-320v-192v-468v-56q0 -25 18 -38.5t46 -13.5h192q28 0 46 13.5t18 38.5zM472 1024h195l-126 161q-26 31 -69 31q-40 0 -68 -28t-28 -68t28 -68t68 -28zM1160 1120q0 40 -28 68t-68 28q-43 0 -69 -31l-125 -161h194q40 0 68 28t28 68zM1536 864v-320
|
376 |
+
q0 -14 -9 -23t-23 -9h-96v-416q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v416h-96q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h440q-93 0 -158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5q107 0 168 -77l128 -165l128 165q61 77 168 77q93 0 158.5 -65.5t65.5 -158.5
|
377 |
+
t-65.5 -158.5t-158.5 -65.5h440q14 0 23 -9t9 -23z" />
|
378 |
+
<glyph glyph-name="leaf" unicode="" horiz-adv-x="1792"
|
379 |
+
d="M1280 832q0 26 -19 45t-45 19q-172 0 -318 -49.5t-259.5 -134t-235.5 -219.5q-19 -21 -19 -45q0 -26 19 -45t45 -19q24 0 45 19q27 24 74 71t67 66q137 124 268.5 176t313.5 52q26 0 45 19t19 45zM1792 1030q0 -95 -20 -193q-46 -224 -184.5 -383t-357.5 -268
|
380 |
+
q-214 -108 -438 -108q-148 0 -286 47q-15 5 -88 42t-96 37q-16 0 -39.5 -32t-45 -70t-52.5 -70t-60 -32q-43 0 -63.5 17.5t-45.5 59.5q-2 4 -6 11t-5.5 10t-3 9.5t-1.5 13.5q0 35 31 73.5t68 65.5t68 56t31 48q0 4 -14 38t-16 44q-9 51 -9 104q0 115 43.5 220t119 184.5
|
381 |
+
t170.5 139t204 95.5q55 18 145 25.5t179.5 9t178.5 6t163.5 24t113.5 56.5l29.5 29.5t29.5 28t27 20t36.5 16t43.5 4.5q39 0 70.5 -46t47.5 -112t24 -124t8 -96z" />
|
382 |
+
<glyph glyph-name="fire" unicode="" horiz-adv-x="1408"
|
383 |
+
d="M1408 -160v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1152 896q0 -78 -24.5 -144t-64 -112.5t-87.5 -88t-96 -77.5t-87.5 -72t-64 -81.5t-24.5 -96.5q0 -96 67 -224l-4 1l1 -1
|
384 |
+
q-90 41 -160 83t-138.5 100t-113.5 122.5t-72.5 150.5t-27.5 184q0 78 24.5 144t64 112.5t87.5 88t96 77.5t87.5 72t64 81.5t24.5 96.5q0 94 -66 224l3 -1l-1 1q90 -41 160 -83t138.5 -100t113.5 -122.5t72.5 -150.5t27.5 -184z" />
|
385 |
+
<glyph glyph-name="eye_open" unicode="" horiz-adv-x="1792"
|
386 |
+
d="M1664 576q-152 236 -381 353q61 -104 61 -225q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 121 61 225q-229 -117 -381 -353q133 -205 333.5 -326.5t434.5 -121.5t434.5 121.5t333.5 326.5zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5
|
387 |
+
t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1792 576q0 -34 -20 -69q-140 -230 -376.5 -368.5t-499.5 -138.5t-499.5 139t-376.5 368q-20 35 -20 69t20 69q140 229 376.5 368t499.5 139t499.5 -139t376.5 -368q20 -35 20 -69z" />
|
388 |
+
<glyph glyph-name="eye_close" unicode="" horiz-adv-x="1792"
|
389 |
+
d="M555 201l78 141q-87 63 -136 159t-49 203q0 121 61 225q-229 -117 -381 -353q167 -258 427 -375zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1307 1151q0 -7 -1 -9
|
390 |
+
q-106 -189 -316 -567t-315 -566l-49 -89q-10 -16 -28 -16q-12 0 -134 70q-16 10 -16 28q0 12 44 87q-143 65 -263.5 173t-208.5 245q-20 31 -20 69t20 69q153 235 380 371t496 136q89 0 180 -17l54 97q10 16 28 16q5 0 18 -6t31 -15.5t33 -18.5t31.5 -18.5t19.5 -11.5
|
391 |
+
q16 -10 16 -27zM1344 704q0 -139 -79 -253.5t-209 -164.5l280 502q8 -45 8 -84zM1792 576q0 -35 -20 -69q-39 -64 -109 -145q-150 -172 -347.5 -267t-419.5 -95l74 132q212 18 392.5 137t301.5 307q-115 179 -282 294l63 112q95 -64 182.5 -153t144.5 -184q20 -34 20 -69z
|
392 |
+
" />
|
393 |
+
<glyph glyph-name="warning_sign" unicode="" horiz-adv-x="1792"
|
394 |
+
d="M1024 161v190q0 14 -9.5 23.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -23.5v-190q0 -14 9.5 -23.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 23.5zM1022 535l18 459q0 12 -10 19q-13 11 -24 11h-220q-11 0 -24 -11q-10 -7 -10 -21l17 -457q0 -10 10 -16.5t24 -6.5h185
|
395 |
+
q14 0 23.5 6.5t10.5 16.5zM1008 1469l768 -1408q35 -63 -2 -126q-17 -29 -46.5 -46t-63.5 -17h-1536q-34 0 -63.5 17t-46.5 46q-37 63 -2 126l768 1408q17 31 47 49t65 18t65 -18t47 -49z" />
|
396 |
+
<glyph glyph-name="plane" unicode="" horiz-adv-x="1408"
|
397 |
+
d="M1376 1376q44 -52 12 -148t-108 -172l-161 -161l160 -696q5 -19 -12 -33l-128 -96q-7 -6 -19 -6q-4 0 -7 1q-15 3 -21 16l-279 508l-259 -259l53 -194q5 -17 -8 -31l-96 -96q-9 -9 -23 -9h-2q-15 2 -24 13l-189 252l-252 189q-11 7 -13 23q-1 13 9 25l96 97q9 9 23 9
|
398 |
+
q6 0 8 -1l194 -53l259 259l-508 279q-14 8 -17 24q-2 16 9 27l128 128q14 13 30 8l665 -159l160 160q76 76 172 108t148 -12z" />
|
399 |
+
<glyph glyph-name="calendar" unicode="" horiz-adv-x="1664"
|
400 |
+
d="M128 -128h288v288h-288v-288zM480 -128h320v288h-320v-288zM128 224h288v320h-288v-320zM480 224h320v320h-320v-320zM128 608h288v288h-288v-288zM864 -128h320v288h-320v-288zM480 608h320v288h-320v-288zM1248 -128h288v288h-288v-288zM864 224h320v320h-320v-320z
|
401 |
+
M512 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1248 224h288v320h-288v-320zM864 608h320v288h-320v-288zM1248 608h288v288h-288v-288zM1280 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64
|
402 |
+
q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1664 1152v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47
|
403 |
+
h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
|
404 |
+
<glyph glyph-name="random" unicode="" horiz-adv-x="1792"
|
405 |
+
d="M666 1055q-60 -92 -137 -273q-22 45 -37 72.5t-40.5 63.5t-51 56.5t-63 35t-81.5 14.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q250 0 410 -225zM1792 256q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192q-32 0 -85 -0.5t-81 -1t-73 1
|
406 |
+
t-71 5t-64 10.5t-63 18.5t-58 28.5t-59 40t-55 53.5t-56 69.5q59 93 136 273q22 -45 37 -72.5t40.5 -63.5t51 -56.5t63 -35t81.5 -14.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23zM1792 1152q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5
|
407 |
+
v192h-256q-48 0 -87 -15t-69 -45t-51 -61.5t-45 -77.5q-32 -62 -78 -171q-29 -66 -49.5 -111t-54 -105t-64 -100t-74 -83t-90 -68.5t-106.5 -42t-128 -16.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q48 0 87 15t69 45t51 61.5t45 77.5q32 62 78 171q29 66 49.5 111
|
408 |
+
t54 105t64 100t74 83t90 68.5t106.5 42t128 16.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z" />
|
409 |
+
<glyph glyph-name="comment" unicode="" horiz-adv-x="1792"
|
410 |
+
d="M1792 640q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22q-17 -2 -30.5 9t-17.5 29v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281
|
411 |
+
q0 130 71 248.5t191 204.5t286 136.5t348 50.5q244 0 450 -85.5t326 -233t120 -321.5z" />
|
412 |
+
<glyph glyph-name="magnet" unicode=""
|
413 |
+
d="M1536 704v-128q0 -201 -98.5 -362t-274 -251.5t-395.5 -90.5t-395.5 90.5t-274 251.5t-98.5 362v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-128q0 -52 23.5 -90t53.5 -57t71 -30t64 -13t44 -2t44 2t64 13t71 30t53.5 57t23.5 90v128q0 26 19 45t45 19h384
|
414 |
+
q26 0 45 -19t19 -45zM512 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45zM1536 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45z" />
|
415 |
+
<glyph glyph-name="chevron_up" unicode="" horiz-adv-x="1792"
|
416 |
+
d="M1683 205l-166 -165q-19 -19 -45 -19t-45 19l-531 531l-531 -531q-19 -19 -45 -19t-45 19l-166 165q-19 19 -19 45.5t19 45.5l742 741q19 19 45 19t45 -19l742 -741q19 -19 19 -45.5t-19 -45.5z" />
|
417 |
+
<glyph glyph-name="chevron_down" unicode="" horiz-adv-x="1792"
|
418 |
+
d="M1683 728l-742 -741q-19 -19 -45 -19t-45 19l-742 741q-19 19 -19 45.5t19 45.5l166 165q19 19 45 19t45 -19l531 -531l531 531q19 19 45 19t45 -19l166 -165q19 -19 19 -45.5t-19 -45.5z" />
|
419 |
+
<glyph glyph-name="retweet" unicode="" horiz-adv-x="1920"
|
420 |
+
d="M1280 32q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-8 0 -13.5 2t-9 7t-5.5 8t-3 11.5t-1 11.5v13v11v160v416h-192q-26 0 -45 19t-19 45q0 24 15 41l320 384q19 22 49 22t49 -22l320 -384q15 -17 15 -41q0 -26 -19 -45t-45 -19h-192v-384h576q16 0 25 -11l160 -192q7 -10 7 -21
|
421 |
+
zM1920 448q0 -24 -15 -41l-320 -384q-20 -23 -49 -23t-49 23l-320 384q-15 17 -15 41q0 26 19 45t45 19h192v384h-576q-16 0 -25 12l-160 192q-7 9 -7 20q0 13 9.5 22.5t22.5 9.5h960q8 0 13.5 -2t9 -7t5.5 -8t3 -11.5t1 -11.5v-13v-11v-160v-416h192q26 0 45 -19t19 -45z
|
422 |
+
" />
|
423 |
+
<glyph glyph-name="shopping_cart" unicode="" horiz-adv-x="1664"
|
424 |
+
d="M640 0q0 -52 -38 -90t-90 -38t-90 38t-38 90t38 90t90 38t90 -38t38 -90zM1536 0q0 -52 -38 -90t-90 -38t-90 38t-38 90t38 90t90 38t90 -38t38 -90zM1664 1088v-512q0 -24 -16.5 -42.5t-40.5 -21.5l-1044 -122q13 -60 13 -70q0 -16 -24 -64h920q26 0 45 -19t19 -45
|
425 |
+
t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 11 8 31.5t16 36t21.5 40t15.5 29.5l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t19.5 -15.5t13 -24.5t8 -26t5.5 -29.5t4.5 -26h1201q26 0 45 -19t19 -45z" />
|
426 |
+
<glyph glyph-name="folder_close" unicode="" horiz-adv-x="1664"
|
427 |
+
d="M1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z" />
|
428 |
+
<glyph glyph-name="folder_open" unicode="" horiz-adv-x="1920"
|
429 |
+
d="M1879 584q0 -31 -31 -66l-336 -396q-43 -51 -120.5 -86.5t-143.5 -35.5h-1088q-34 0 -60.5 13t-26.5 43q0 31 31 66l336 396q43 51 120.5 86.5t143.5 35.5h1088q34 0 60.5 -13t26.5 -43zM1536 928v-160h-832q-94 0 -197 -47.5t-164 -119.5l-337 -396l-5 -6q0 4 -0.5 12.5
|
430 |
+
t-0.5 12.5v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158z" />
|
431 |
+
<glyph glyph-name="resize_vertical" unicode="" horiz-adv-x="768"
|
432 |
+
d="M704 1216q0 -26 -19 -45t-45 -19h-128v-1024h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v1024h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45z" />
|
433 |
+
<glyph glyph-name="resize_horizontal" unicode="" horiz-adv-x="1792"
|
434 |
+
d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-1024v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h1024v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" />
|
435 |
+
<glyph glyph-name="bar_chart" unicode="" horiz-adv-x="2048"
|
436 |
+
d="M640 640v-512h-256v512h256zM1024 1152v-1024h-256v1024h256zM2048 0v-128h-2048v1536h128v-1408h1920zM1408 896v-768h-256v768h256zM1792 1280v-1152h-256v1152h256z" />
|
437 |
+
<glyph glyph-name="twitter_sign" unicode=""
|
438 |
+
d="M1280 926q-56 -25 -121 -34q68 40 93 117q-65 -38 -134 -51q-61 66 -153 66q-87 0 -148.5 -61.5t-61.5 -148.5q0 -29 5 -48q-129 7 -242 65t-192 155q-29 -50 -29 -106q0 -114 91 -175q-47 1 -100 26v-2q0 -75 50 -133.5t123 -72.5q-29 -8 -51 -8q-13 0 -39 4
|
439 |
+
q21 -63 74.5 -104t121.5 -42q-116 -90 -261 -90q-26 0 -50 3q148 -94 322 -94q112 0 210 35.5t168 95t120.5 137t75 162t24.5 168.5q0 18 -1 27q63 45 105 109zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5
|
440 |
+
t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
|
441 |
+
<glyph glyph-name="facebook_sign" unicode=""
|
442 |
+
d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-188v595h199l30 232h-229v148q0 56 23.5 84t91.5 28l122 1v207q-63 9 -178 9q-136 0 -217.5 -80t-81.5 -226v-171h-200v-232h200v-595h-532q-119 0 -203.5 84.5t-84.5 203.5v960
|
443 |
+
q0 119 84.5 203.5t203.5 84.5h960z" />
|
444 |
+
<glyph glyph-name="camera_retro" unicode="" horiz-adv-x="1792"
|
445 |
+
d="M928 704q0 14 -9 23t-23 9q-66 0 -113 -47t-47 -113q0 -14 9 -23t23 -9t23 9t9 23q0 40 28 68t68 28q14 0 23 9t9 23zM1152 574q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM128 0h1536v128h-1536v-128zM1280 574q0 159 -112.5 271.5
|
446 |
+
t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM256 1216h384v128h-384v-128zM128 1024h1536v118v138h-828l-64 -128h-644v-128zM1792 1280v-1280q0 -53 -37.5 -90.5t-90.5 -37.5h-1536q-53 0 -90.5 37.5t-37.5 90.5v1280
|
447 |
+
q0 53 37.5 90.5t90.5 37.5h1536q53 0 90.5 -37.5t37.5 -90.5z" />
|
448 |
+
<glyph glyph-name="key" unicode="" horiz-adv-x="1792"
|
449 |
+
d="M832 1024q0 80 -56 136t-136 56t-136 -56t-56 -136q0 -42 19 -83q-41 19 -83 19q-80 0 -136 -56t-56 -136t56 -136t136 -56t136 56t56 136q0 42 -19 83q41 -19 83 -19q80 0 136 56t56 136zM1683 320q0 -17 -49 -66t-66 -49q-9 0 -28.5 16t-36.5 33t-38.5 40t-24.5 26
|
450 |
+
l-96 -96l220 -220q28 -28 28 -68q0 -42 -39 -81t-81 -39q-40 0 -68 28l-671 671q-176 -131 -365 -131q-163 0 -265.5 102.5t-102.5 265.5q0 160 95 313t248 248t313 95q163 0 265.5 -102.5t102.5 -265.5q0 -189 -131 -365l355 -355l96 96q-3 3 -26 24.5t-40 38.5t-33 36.5
|
451 |
+
t-16 28.5q0 17 49 66t66 49q13 0 23 -10q6 -6 46 -44.5t82 -79.5t86.5 -86t73 -78t28.5 -41z" />
|
452 |
+
<glyph glyph-name="cogs" unicode="" horiz-adv-x="1920"
|
453 |
+
d="M896 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1664 128q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 1152q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5
|
454 |
+
t90.5 37.5t37.5 90.5zM1280 731v-185q0 -10 -7 -19.5t-16 -10.5l-155 -24q-11 -35 -32 -76q34 -48 90 -115q7 -11 7 -20q0 -12 -7 -19q-23 -30 -82.5 -89.5t-78.5 -59.5q-11 0 -21 7l-115 90q-37 -19 -77 -31q-11 -108 -23 -155q-7 -24 -30 -24h-186q-11 0 -20 7.5t-10 17.5
|
455 |
+
l-23 153q-34 10 -75 31l-118 -89q-7 -7 -20 -7q-11 0 -21 8q-144 133 -144 160q0 9 7 19q10 14 41 53t47 61q-23 44 -35 82l-152 24q-10 1 -17 9.5t-7 19.5v185q0 10 7 19.5t16 10.5l155 24q11 35 32 76q-34 48 -90 115q-7 11 -7 20q0 12 7 20q22 30 82 89t79 59q11 0 21 -7
|
456 |
+
l115 -90q34 18 77 32q11 108 23 154q7 24 30 24h186q11 0 20 -7.5t10 -17.5l23 -153q34 -10 75 -31l118 89q8 7 20 7q11 0 21 -8q144 -133 144 -160q0 -8 -7 -19q-12 -16 -42 -54t-45 -60q23 -48 34 -82l152 -23q10 -2 17 -10.5t7 -19.5zM1920 198v-140q0 -16 -149 -31
|
457 |
+
q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20
|
458 |
+
t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31zM1920 1222v-140q0 -16 -149 -31q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68
|
459 |
+
q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70
|
460 |
+
q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31z" />
|
461 |
+
<glyph glyph-name="comments" unicode="" horiz-adv-x="1792"
|
462 |
+
d="M1408 768q0 -139 -94 -257t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224
|
463 |
+
q0 139 94 257t256.5 186.5t353.5 68.5t353.5 -68.5t256.5 -186.5t94 -257zM1792 512q0 -120 -71 -224.5t-195 -176.5q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22t-22 -7
|
464 |
+
q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132q58 -4 88 -4q161 0 309 45t264 129q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230z" />
|
465 |
+
<glyph glyph-name="thumbs_up_alt" unicode=""
|
466 |
+
d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 768q0 51 -39 89.5t-89 38.5h-352q0 58 48 159.5t48 160.5q0 98 -32 145t-128 47q-26 -26 -38 -85t-30.5 -125.5t-59.5 -109.5q-22 -23 -77 -91q-4 -5 -23 -30t-31.5 -41t-34.5 -42.5
|
467 |
+
t-40 -44t-38.5 -35.5t-40 -27t-35.5 -9h-32v-640h32q13 0 31.5 -3t33 -6.5t38 -11t35 -11.5t35.5 -12.5t29 -10.5q211 -73 342 -73h121q192 0 192 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5q32 1 53.5 47t21.5 81zM1536 769
|
468 |
+
q0 -89 -49 -163q9 -33 9 -69q0 -77 -38 -144q3 -21 3 -43q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5h-36h-93q-96 0 -189.5 22.5t-216.5 65.5q-116 40 -138 40h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h274q36 24 137 155q58 75 107 128
|
469 |
+
q24 25 35.5 85.5t30.5 126.5t62 108q39 37 90 37q84 0 151 -32.5t102 -101.5t35 -186q0 -93 -48 -192h176q104 0 180 -76t76 -179z" />
|
470 |
+
<glyph glyph-name="thumbs_down_alt" unicode=""
|
471 |
+
d="M256 1088q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 512q0 35 -21.5 81t-53.5 47q15 17 25 47.5t10 55.5q0 69 -53 119q18 31 18 69q0 37 -17.5 73.5t-47.5 52.5q5 30 5 56q0 85 -49 126t-136 41h-128q-131 0 -342 -73q-5 -2 -29 -10.5
|
472 |
+
t-35.5 -12.5t-35 -11.5t-38 -11t-33 -6.5t-31.5 -3h-32v-640h32q16 0 35.5 -9t40 -27t38.5 -35.5t40 -44t34.5 -42.5t31.5 -41t23 -30q55 -68 77 -91q41 -43 59.5 -109.5t30.5 -125.5t38 -85q96 0 128 47t32 145q0 59 -48 160.5t-48 159.5h352q50 0 89 38.5t39 89.5z
|
473 |
+
M1536 511q0 -103 -76 -179t-180 -76h-176q48 -99 48 -192q0 -118 -35 -186q-35 -69 -102 -101.5t-151 -32.5q-51 0 -90 37q-34 33 -54 82t-25.5 90.5t-17.5 84.5t-31 64q-48 50 -107 127q-101 131 -137 155h-274q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5
|
474 |
+
h288q22 0 138 40q128 44 223 66t200 22h112q140 0 226.5 -79t85.5 -216v-5q60 -77 60 -178q0 -22 -3 -43q38 -67 38 -144q0 -36 -9 -69q49 -73 49 -163z" />
|
475 |
+
<glyph glyph-name="star_half" unicode="" horiz-adv-x="896"
|
476 |
+
d="M832 1504v-1339l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41z" />
|
477 |
+
<glyph glyph-name="heart_empty" unicode="" horiz-adv-x="1792"
|
478 |
+
d="M1664 940q0 81 -21.5 143t-55 98.5t-81.5 59.5t-94 31t-98 8t-112 -25.5t-110.5 -64t-86.5 -72t-60 -61.5q-18 -22 -49 -22t-49 22q-24 28 -60 61.5t-86.5 72t-110.5 64t-112 25.5t-98 -8t-94 -31t-81.5 -59.5t-55 -98.5t-21.5 -143q0 -168 187 -355l581 -560l580 559
|
479 |
+
q188 188 188 356zM1792 940q0 -221 -229 -450l-623 -600q-18 -18 -44 -18t-44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5
|
480 |
+
q224 0 351 -124t127 -344z" />
|
481 |
+
<glyph glyph-name="signout" unicode="" horiz-adv-x="1664"
|
482 |
+
d="M640 96q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h320q13 0 22.5 -9.5t9.5 -22.5q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-66 0 -113 -47t-47 -113v-704
|
483 |
+
q0 -66 47 -113t113 -47h288h11h13t11.5 -1t11.5 -3t8 -5.5t7 -9t2 -13.5zM1568 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45z" />
|
484 |
+
<glyph glyph-name="linkedin_sign" unicode=""
|
485 |
+
d="M237 122h231v694h-231v-694zM483 1030q-1 52 -36 86t-93 34t-94.5 -34t-36.5 -86q0 -51 35.5 -85.5t92.5 -34.5h1q59 0 95 34.5t36 85.5zM1068 122h231v398q0 154 -73 233t-193 79q-136 0 -209 -117h2v101h-231q3 -66 0 -694h231v388q0 38 7 56q15 35 45 59.5t74 24.5
|
486 |
+
q116 0 116 -157v-371zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
|
487 |
+
<glyph glyph-name="pushpin" unicode="" horiz-adv-x="1152"
|
488 |
+
d="M480 672v448q0 14 -9 23t-23 9t-23 -9t-9 -23v-448q0 -14 9 -23t23 -9t23 9t9 23zM1152 320q0 -26 -19 -45t-45 -19h-429l-51 -483q-2 -12 -10.5 -20.5t-20.5 -8.5h-1q-27 0 -32 27l-76 485h-404q-26 0 -45 19t-19 45q0 123 78.5 221.5t177.5 98.5v512q-52 0 -90 38
|
489 |
+
t-38 90t38 90t90 38h640q52 0 90 -38t38 -90t-38 -90t-90 -38v-512q99 0 177.5 -98.5t78.5 -221.5z" />
|
490 |
+
<glyph glyph-name="external_link" unicode="" horiz-adv-x="1792"
|
491 |
+
d="M1408 608v-320q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h704q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v320
|
492 |
+
q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1792 1472v-512q0 -26 -19 -45t-45 -19t-45 19l-176 176l-652 -652q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l652 652l-176 176q-19 19 -19 45t19 45t45 19h512q26 0 45 -19t19 -45z" />
|
493 |
+
<glyph glyph-name="signin" unicode=""
|
494 |
+
d="M1184 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45zM1536 992v-704q0 -119 -84.5 -203.5t-203.5 -84.5h-320q-13 0 -22.5 9.5t-9.5 22.5
|
495 |
+
q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q66 0 113 47t47 113v704q0 66 -47 113t-113 47h-288h-11h-13t-11.5 1t-11.5 3t-8 5.5t-7 9t-2 13.5q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q119 0 203.5 -84.5t84.5 -203.5z" />
|
496 |
+
<glyph glyph-name="trophy" unicode="" horiz-adv-x="1664"
|
497 |
+
d="M458 653q-74 162 -74 371h-256v-96q0 -78 94.5 -162t235.5 -113zM1536 928v96h-256q0 -209 -74 -371q141 29 235.5 113t94.5 162zM1664 1056v-128q0 -71 -41.5 -143t-112 -130t-173 -97.5t-215.5 -44.5q-42 -54 -95 -95q-38 -34 -52.5 -72.5t-14.5 -89.5q0 -54 30.5 -91
|
498 |
+
t97.5 -37q75 0 133.5 -45.5t58.5 -114.5v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 69 58.5 114.5t133.5 45.5q67 0 97.5 37t30.5 91q0 51 -14.5 89.5t-52.5 72.5q-53 41 -95 95q-113 5 -215.5 44.5t-173 97.5t-112 130t-41.5 143v128q0 40 28 68t68 28h288v96
|
499 |
+
q0 66 47 113t113 47h576q66 0 113 -47t47 -113v-96h288q40 0 68 -28t28 -68z" />
|
500 |
+
<glyph glyph-name="github_sign" unicode=""
|
501 |
+
d="M519 336q4 6 -3 13q-9 7 -14 2q-4 -6 3 -13q9 -7 14 -2zM491 377q-5 7 -12 4q-6 -4 0 -12q7 -8 12 -5q6 4 0 13zM450 417q2 4 -5 8q-7 2 -8 -2q-3 -5 4 -8q8 -2 9 2zM471 394q2 1 1.5 4.5t-3.5 5.5q-6 7 -10 3t1 -11q6 -6 11 -2zM557 319q2 7 -9 11q-9 3 -13 -4
|
502 |
+
q-2 -7 9 -11q9 -3 13 4zM599 316q0 8 -12 8q-10 0 -10 -8t11 -8t11 8zM638 323q-2 7 -13 5t-9 -9q2 -8 12 -6t10 10zM1280 640q0 212 -150 362t-362 150t-362 -150t-150 -362q0 -167 98 -300.5t252 -185.5q18 -3 26.5 5t8.5 20q0 52 -1 95q-6 -1 -15.5 -2.5t-35.5 -2t-48 4
|
503 |
+
t-43.5 20t-29.5 41.5q-23 59 -57 74q-2 1 -4.5 3.5l-8 8t-7 9.5t4 7.5t19.5 3.5q6 0 15 -2t30 -15.5t33 -35.5q16 -28 37.5 -42t43.5 -14t38 3.5t30 9.5q7 47 33 69q-49 6 -86 18.5t-73 39t-55.5 76t-19.5 119.5q0 79 53 137q-24 62 5 136q19 6 54.5 -7.5t60.5 -29.5l26 -16
|
504 |
+
q58 17 128 17t128 -17q11 7 28.5 18t55.5 26t57 9q29 -74 5 -136q53 -58 53 -137q0 -57 -14 -100.5t-35.5 -70t-53.5 -44.5t-62.5 -26t-68.5 -12q35 -31 35 -95q0 -40 -0.5 -89t-0.5 -51q0 -12 8.5 -20t26.5 -5q154 52 252 185.5t98 300.5zM1536 1120v-960
|
505 |
+
q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
|
506 |
+
<glyph glyph-name="upload_alt" unicode="" horiz-adv-x="1664"
|
507 |
+
d="M1280 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 288v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h427q21 -56 70.5 -92
|
508 |
+
t110.5 -36h256q61 0 110.5 36t70.5 92h427q40 0 68 -28t28 -68zM1339 936q-17 -40 -59 -40h-256v-448q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v448h-256q-42 0 -59 40q-17 39 14 69l448 448q18 19 45 19t45 -19l448 -448q31 -30 14 -69z" />
|
509 |
+
<glyph glyph-name="lemon" unicode=""
|
510 |
+
d="M1407 710q0 44 -7 113.5t-18 96.5q-12 30 -17 44t-9 36.5t-4 48.5q0 23 5 68.5t5 67.5q0 37 -10 55q-4 1 -13 1q-19 0 -58 -4.5t-59 -4.5q-60 0 -176 24t-175 24q-43 0 -94.5 -11.5t-85 -23.5t-89.5 -34q-137 -54 -202 -103q-96 -73 -159.5 -189.5t-88 -236t-24.5 -248.5
|
511 |
+
q0 -40 12.5 -120t12.5 -121q0 -23 -11 -66.5t-11 -65.5t12 -36.5t34 -14.5q24 0 72.5 11t73.5 11q57 0 169.5 -15.5t169.5 -15.5q181 0 284 36q129 45 235.5 152.5t166 245.5t59.5 275zM1535 712q0 -165 -70 -327.5t-196 -288t-281 -180.5q-124 -44 -326 -44
|
512 |
+
q-57 0 -170 14.5t-169 14.5q-24 0 -72.5 -14.5t-73.5 -14.5q-73 0 -123.5 55.5t-50.5 128.5q0 24 11 68t11 67q0 40 -12.5 120.5t-12.5 121.5q0 111 18 217.5t54.5 209.5t100.5 194t150 156q78 59 232 120q194 78 316 78q60 0 175.5 -24t173.5 -24q19 0 57 5t58 5
|
513 |
+
q81 0 118 -50.5t37 -134.5q0 -23 -5 -68t-5 -68q0 -13 2 -25t3.5 -16.5t7.5 -20.5t8 -20q16 -40 25 -118.5t9 -136.5z" />
|
514 |
+
<glyph glyph-name="phone" unicode="" horiz-adv-x="1408"
|
515 |
+
d="M1408 296q0 -27 -10 -70.5t-21 -68.5q-21 -50 -122 -106q-94 -51 -186 -51q-27 0 -53 3.5t-57.5 12.5t-47 14.5t-55.5 20.5t-49 18q-98 35 -175 83q-127 79 -264 216t-216 264q-48 77 -83 175q-3 9 -18 49t-20.5 55.5t-14.5 47t-12.5 57.5t-3.5 53q0 92 51 186
|
516 |
+
q56 101 106 122q25 11 68.5 21t70.5 10q14 0 21 -3q18 -6 53 -76q11 -19 30 -54t35 -63.5t31 -53.5q3 -4 17.5 -25t21.5 -35.5t7 -28.5q0 -20 -28.5 -50t-62 -55t-62 -53t-28.5 -46q0 -9 5 -22.5t8.5 -20.5t14 -24t11.5 -19q76 -137 174 -235t235 -174q2 -1 19 -11.5t24 -14
|
517 |
+
t20.5 -8.5t22.5 -5q18 0 46 28.5t53 62t55 62t50 28.5q14 0 28.5 -7t35.5 -21.5t25 -17.5q25 -15 53.5 -31t63.5 -35t54 -30q70 -35 76 -53q3 -7 3 -21z" />
|
518 |
+
<glyph glyph-name="check_empty" unicode="" horiz-adv-x="1408"
|
519 |
+
d="M1120 1280h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v832q0 66 -47 113t-113 47zM1408 1120v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832
|
520 |
+
q119 0 203.5 -84.5t84.5 -203.5z" />
|
521 |
+
<glyph glyph-name="bookmark_empty" unicode="" horiz-adv-x="1280"
|
522 |
+
d="M1152 1280h-1024v-1242l423 406l89 85l89 -85l423 -406v1242zM1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289
|
523 |
+
q0 34 19.5 62t52.5 41q21 9 44 9h1048z" />
|
524 |
+
<glyph glyph-name="phone_sign" unicode=""
|
525 |
+
d="M1280 343q0 11 -2 16t-18 16.5t-40.5 25t-47.5 26.5t-45.5 25t-28.5 15q-5 3 -19 13t-25 15t-21 5q-15 0 -36.5 -20.5t-39.5 -45t-38.5 -45t-33.5 -20.5q-7 0 -16.5 3.5t-15.5 6.5t-17 9.5t-14 8.5q-99 55 -170 126.5t-127 170.5q-2 3 -8.5 14t-9.5 17t-6.5 15.5
|
526 |
+
t-3.5 16.5q0 13 20.5 33.5t45 38.5t45 39.5t20.5 36.5q0 10 -5 21t-15 25t-13 19q-3 6 -15 28.5t-25 45.5t-26.5 47.5t-25 40.5t-16.5 18t-16 2q-48 0 -101 -22q-46 -21 -80 -94.5t-34 -130.5q0 -16 2.5 -34t5 -30.5t9 -33t10 -29.5t12.5 -33t11 -30q60 -164 216.5 -320.5
|
527 |
+
t320.5 -216.5q6 -2 30 -11t33 -12.5t29.5 -10t33 -9t30.5 -5t34 -2.5q57 0 130.5 34t94.5 80q22 53 22 101zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z
|
528 |
+
" />
|
529 |
+
<glyph glyph-name="twitter" unicode="" horiz-adv-x="1664"
|
530 |
+
d="M1620 1128q-67 -98 -162 -167q1 -14 1 -42q0 -130 -38 -259.5t-115.5 -248.5t-184.5 -210.5t-258 -146t-323 -54.5q-271 0 -496 145q35 -4 78 -4q225 0 401 138q-105 2 -188 64.5t-114 159.5q33 -5 61 -5q43 0 85 11q-112 23 -185.5 111.5t-73.5 205.5v4q68 -38 146 -41
|
531 |
+
q-66 44 -105 115t-39 154q0 88 44 163q121 -149 294.5 -238.5t371.5 -99.5q-8 38 -8 74q0 134 94.5 228.5t228.5 94.5q140 0 236 -102q109 21 205 78q-37 -115 -142 -178q93 10 186 50z" />
|
532 |
+
<glyph glyph-name="facebook" unicode="" horiz-adv-x="1024"
|
533 |
+
d="M959 1524v-264h-157q-86 0 -116 -36t-30 -108v-189h293l-39 -296h-254v-759h-306v759h-255v296h255v218q0 186 104 288.5t277 102.5q147 0 228 -12z" />
|
534 |
+
<glyph glyph-name="github" unicode=""
|
535 |
+
d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5q0 -251 -146.5 -451.5t-378.5 -277.5q-27 -5 -40 7t-13 30q0 3 0.5 76.5t0.5 134.5q0 97 -52 142q57 6 102.5 18t94 39t81 66.5t53 105t20.5 150.5q0 119 -79 206q37 91 -8 204q-28 9 -81 -11t-92 -44l-38 -24
|
536 |
+
q-93 26 -192 26t-192 -26q-16 11 -42.5 27t-83.5 38.5t-85 13.5q-45 -113 -8 -204q-79 -87 -79 -206q0 -85 20.5 -150t52.5 -105t80.5 -67t94 -39t102.5 -18q-39 -36 -49 -103q-21 -10 -45 -15t-57 -5t-65.5 21.5t-55.5 62.5q-19 32 -48.5 52t-49.5 24l-20 3q-21 0 -29 -4.5
|
537 |
+
t-5 -11.5t9 -14t13 -12l7 -5q22 -10 43.5 -38t31.5 -51l10 -23q13 -38 44 -61.5t67 -30t69.5 -7t55.5 3.5l23 4q0 -38 0.5 -88.5t0.5 -54.5q0 -18 -13 -30t-40 -7q-232 77 -378.5 277.5t-146.5 451.5q0 209 103 385.5t279.5 279.5t385.5 103zM291 305q3 7 -7 12
|
538 |
+
q-10 3 -13 -2q-3 -7 7 -12q9 -6 13 2zM322 271q7 5 -2 16q-10 9 -16 3q-7 -5 2 -16q10 -10 16 -3zM352 226q9 7 0 19q-8 13 -17 6q-9 -5 0 -18t17 -7zM394 184q8 8 -4 19q-12 12 -20 3q-9 -8 4 -19q12 -12 20 -3zM451 159q3 11 -13 16q-15 4 -19 -7t13 -15q15 -6 19 6z
|
539 |
+
M514 154q0 13 -17 11q-16 0 -16 -11q0 -13 17 -11q16 0 16 11zM572 164q-2 11 -18 9q-16 -3 -14 -15t18 -8t14 14z" />
|
540 |
+
<glyph glyph-name="unlock" unicode="" horiz-adv-x="1664"
|
541 |
+
d="M1664 960v-256q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45v256q0 106 -75 181t-181 75t-181 -75t-75 -181v-192h96q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h672v192q0 185 131.5 316.5t316.5 131.5
|
542 |
+
t316.5 -131.5t131.5 -316.5z" />
|
543 |
+
<glyph glyph-name="credit_card" unicode="" horiz-adv-x="1920"
|
544 |
+
d="M1760 1408q66 0 113 -47t47 -113v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600zM160 1280q-13 0 -22.5 -9.5t-9.5 -22.5v-224h1664v224q0 13 -9.5 22.5t-22.5 9.5h-1600zM1760 0q13 0 22.5 9.5t9.5 22.5v608h-1664v-608
|
545 |
+
q0 -13 9.5 -22.5t22.5 -9.5h1600zM256 128v128h256v-128h-256zM640 128v128h384v-128h-384z" />
|
546 |
+
<glyph glyph-name="rss" unicode="" horiz-adv-x="1408"
|
547 |
+
d="M384 192q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 69q2 -28 -17 -48q-18 -21 -47 -21h-135q-25 0 -43 16.5t-20 41.5q-22 229 -184.5 391.5t-391.5 184.5q-25 2 -41.5 20t-16.5 43v135q0 29 21 47q17 17 43 17h5q160 -13 306 -80.5
|
548 |
+
t259 -181.5q114 -113 181.5 -259t80.5 -306zM1408 67q2 -27 -18 -47q-18 -20 -46 -20h-143q-26 0 -44.5 17.5t-19.5 42.5q-12 215 -101 408.5t-231.5 336t-336 231.5t-408.5 102q-25 1 -42.5 19.5t-17.5 43.5v143q0 28 20 46q18 18 44 18h3q262 -13 501.5 -120t425.5 -294
|
549 |
+
q187 -186 294 -425.5t120 -501.5z" />
|
550 |
+
<glyph glyph-name="hdd" unicode=""
|
551 |
+
d="M1040 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1296 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1408 160v320q0 13 -9.5 22.5t-22.5 9.5
|
552 |
+
h-1216q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h1216q13 0 22.5 9.5t9.5 22.5zM178 640h1180l-157 482q-4 13 -16 21.5t-26 8.5h-782q-14 0 -26 -8.5t-16 -21.5zM1536 480v-320q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113v320q0 25 16 75
|
553 |
+
l197 606q17 53 63 86t101 33h782q55 0 101 -33t63 -86l197 -606q16 -50 16 -75z" />
|
554 |
+
<glyph glyph-name="bullhorn" unicode="" horiz-adv-x="1792"
|
555 |
+
d="M1664 896q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5v-384q0 -52 -38 -90t-90 -38q-417 347 -812 380q-58 -19 -91 -66t-31 -100.5t40 -92.5q-20 -33 -23 -65.5t6 -58t33.5 -55t48 -50t61.5 -50.5q-29 -58 -111.5 -83t-168.5 -11.5t-132 55.5q-7 23 -29.5 87.5
|
556 |
+
t-32 94.5t-23 89t-15 101t3.5 98.5t22 110.5h-122q-66 0 -113 47t-47 113v192q0 66 47 113t113 47h480q435 0 896 384q52 0 90 -38t38 -90v-384zM1536 292v954q-394 -302 -768 -343v-270q377 -42 768 -341z" />
|
557 |
+
<glyph glyph-name="bell" unicode="" horiz-adv-x="1792"
|
558 |
+
d="M912 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM246 128h1300q-266 300 -266 832q0 51 -24 105t-69 103t-121.5 80.5t-169.5 31.5t-169.5 -31.5t-121.5 -80.5t-69 -103t-24 -105q0 -532 -266 -832z
|
559 |
+
M1728 128q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q50 42 91 88t85 119.5t74.5 158.5t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q190 -28 307 -158.5
|
560 |
+
t117 -282.5q0 -139 19.5 -260t50 -206t74.5 -158.5t85 -119.5t91 -88z" />
|
561 |
+
<glyph glyph-name="certificate" unicode=""
|
562 |
+
d="M1376 640l138 -135q30 -28 20 -70q-12 -41 -52 -51l-188 -48l53 -186q12 -41 -19 -70q-29 -31 -70 -19l-186 53l-48 -188q-10 -40 -51 -52q-12 -2 -19 -2q-31 0 -51 22l-135 138l-135 -138q-28 -30 -70 -20q-41 11 -51 52l-48 188l-186 -53q-41 -12 -70 19q-31 29 -19 70
|
563 |
+
l53 186l-188 48q-40 10 -52 51q-10 42 20 70l138 135l-138 135q-30 28 -20 70q12 41 52 51l188 48l-53 186q-12 41 19 70q29 31 70 19l186 -53l48 188q10 41 51 51q41 12 70 -19l135 -139l135 139q29 30 70 19q41 -10 51 -51l48 -188l186 53q41 12 70 -19q31 -29 19 -70
|
564 |
+
l-53 -186l188 -48q40 -10 52 -51q10 -42 -20 -70z" />
|
565 |
+
<glyph glyph-name="hand_right" unicode="" horiz-adv-x="1792"
|
566 |
+
d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 768q0 51 -39 89.5t-89 38.5h-576q0 20 15 48.5t33 55t33 68t15 84.5q0 67 -44.5 97.5t-115.5 30.5q-24 0 -90 -139q-24 -44 -37 -65q-40 -64 -112 -145q-71 -81 -101 -106
|
567 |
+
q-69 -57 -140 -57h-32v-640h32q72 0 167 -32t193.5 -64t179.5 -32q189 0 189 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5h331q52 0 90 38t38 90zM1792 769q0 -105 -75.5 -181t-180.5 -76h-169q-4 -62 -37 -119q3 -21 3 -43
|
568 |
+
q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5q-133 0 -322 69q-164 59 -223 59h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h288q10 0 21.5 4.5t23.5 14t22.5 18t24 22.5t20.5 21.5t19 21.5t14 17q65 74 100 129q13 21 33 62t37 72t40.5 63t55 49.5
|
569 |
+
t69.5 17.5q125 0 206.5 -67t81.5 -189q0 -68 -22 -128h374q104 0 180 -76t76 -179z" />
|
570 |
+
<glyph glyph-name="hand_left" unicode="" horiz-adv-x="1792"
|
571 |
+
d="M1376 128h32v640h-32q-35 0 -67.5 12t-62.5 37t-50 46t-49 54q-8 9 -12 14q-72 81 -112 145q-14 22 -38 68q-1 3 -10.5 22.5t-18.5 36t-20 35.5t-21.5 30.5t-18.5 11.5q-71 0 -115.5 -30.5t-44.5 -97.5q0 -43 15 -84.5t33 -68t33 -55t15 -48.5h-576q-50 0 -89 -38.5
|
572 |
+
t-39 -89.5q0 -52 38 -90t90 -38h331q-15 -17 -25 -47.5t-10 -55.5q0 -69 53 -119q-18 -32 -18 -69t17.5 -73.5t47.5 -52.5q-4 -24 -4 -56q0 -85 48.5 -126t135.5 -41q84 0 183 32t194 64t167 32zM1664 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45z
|
573 |
+
M1792 768v-640q0 -53 -37.5 -90.5t-90.5 -37.5h-288q-59 0 -223 -59q-190 -69 -317 -69q-142 0 -230 77.5t-87 217.5l1 5q-61 76 -61 178q0 22 3 43q-33 57 -37 119h-169q-105 0 -180.5 76t-75.5 181q0 103 76 179t180 76h374q-22 60 -22 128q0 122 81.5 189t206.5 67
|
574 |
+
q38 0 69.5 -17.5t55 -49.5t40.5 -63t37 -72t33 -62q35 -55 100 -129q2 -3 14 -17t19 -21.5t20.5 -21.5t24 -22.5t22.5 -18t23.5 -14t21.5 -4.5h288q53 0 90.5 -37.5t37.5 -90.5z" />
|
575 |
+
<glyph glyph-name="hand_up" unicode=""
|
576 |
+
d="M1280 -64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 700q0 189 -167 189q-26 0 -56 -5q-16 30 -52.5 47.5t-73.5 17.5t-69 -18q-50 53 -119 53q-25 0 -55.5 -10t-47.5 -25v331q0 52 -38 90t-90 38q-51 0 -89.5 -39t-38.5 -89v-576
|
577 |
+
q-20 0 -48.5 15t-55 33t-68 33t-84.5 15q-67 0 -97.5 -44.5t-30.5 -115.5q0 -24 139 -90q44 -24 65 -37q64 -40 145 -112q81 -71 106 -101q57 -69 57 -140v-32h640v32q0 72 32 167t64 193.5t32 179.5zM1536 705q0 -133 -69 -322q-59 -164 -59 -223v-288q0 -53 -37.5 -90.5
|
578 |
+
t-90.5 -37.5h-640q-53 0 -90.5 37.5t-37.5 90.5v288q0 10 -4.5 21.5t-14 23.5t-18 22.5t-22.5 24t-21.5 20.5t-21.5 19t-17 14q-74 65 -129 100q-21 13 -62 33t-72 37t-63 40.5t-49.5 55t-17.5 69.5q0 125 67 206.5t189 81.5q68 0 128 -22v374q0 104 76 180t179 76
|
579 |
+
q105 0 181 -75.5t76 -180.5v-169q62 -4 119 -37q21 3 43 3q101 0 178 -60q139 1 219.5 -85t80.5 -227z" />
|
580 |
+
<glyph glyph-name="hand_down" unicode=""
|
581 |
+
d="M1408 576q0 84 -32 183t-64 194t-32 167v32h-640v-32q0 -35 -12 -67.5t-37 -62.5t-46 -50t-54 -49q-9 -8 -14 -12q-81 -72 -145 -112q-22 -14 -68 -38q-3 -1 -22.5 -10.5t-36 -18.5t-35.5 -20t-30.5 -21.5t-11.5 -18.5q0 -71 30.5 -115.5t97.5 -44.5q43 0 84.5 15t68 33
|
582 |
+
t55 33t48.5 15v-576q0 -50 38.5 -89t89.5 -39q52 0 90 38t38 90v331q46 -35 103 -35q69 0 119 53q32 -18 69 -18t73.5 17.5t52.5 47.5q24 -4 56 -4q85 0 126 48.5t41 135.5zM1280 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 580
|
583 |
+
q0 -142 -77.5 -230t-217.5 -87l-5 1q-76 -61 -178 -61q-22 0 -43 3q-54 -30 -119 -37v-169q0 -105 -76 -180.5t-181 -75.5q-103 0 -179 76t-76 180v374q-54 -22 -128 -22q-121 0 -188.5 81.5t-67.5 206.5q0 38 17.5 69.5t49.5 55t63 40.5t72 37t62 33q55 35 129 100
|
584 |
+
q3 2 17 14t21.5 19t21.5 20.5t22.5 24t18 22.5t14 23.5t4.5 21.5v288q0 53 37.5 90.5t90.5 37.5h640q53 0 90.5 -37.5t37.5 -90.5v-288q0 -59 59 -223q69 -190 69 -317z" />
|
585 |
+
<glyph glyph-name="circle_arrow_left" unicode=""
|
586 |
+
d="M1280 576v128q0 26 -19 45t-45 19h-502l189 189q19 19 19 45t-19 45l-91 91q-18 18 -45 18t-45 -18l-362 -362l-91 -91q-18 -18 -18 -45t18 -45l91 -91l362 -362q18 -18 45 -18t45 18l91 91q18 18 18 45t-18 45l-189 189h502q26 0 45 19t19 45zM1536 640
|
587 |
+
q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
588 |
+
<glyph glyph-name="circle_arrow_right" unicode=""
|
589 |
+
d="M1285 640q0 27 -18 45l-91 91l-362 362q-18 18 -45 18t-45 -18l-91 -91q-18 -18 -18 -45t18 -45l189 -189h-502q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h502l-189 -189q-19 -19 -19 -45t19 -45l91 -91q18 -18 45 -18t45 18l362 362l91 91q18 18 18 45zM1536 640
|
590 |
+
q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
591 |
+
<glyph glyph-name="circle_arrow_up" unicode=""
|
592 |
+
d="M1284 641q0 27 -18 45l-362 362l-91 91q-18 18 -45 18t-45 -18l-91 -91l-362 -362q-18 -18 -18 -45t18 -45l91 -91q18 -18 45 -18t45 18l189 189v-502q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v502l189 -189q19 -19 45 -19t45 19l91 91q18 18 18 45zM1536 640
|
593 |
+
q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
594 |
+
<glyph glyph-name="circle_arrow_down" unicode=""
|
595 |
+
d="M1284 639q0 27 -18 45l-91 91q-18 18 -45 18t-45 -18l-189 -189v502q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-502l-189 189q-19 19 -45 19t-45 -19l-91 -91q-18 -18 -18 -45t18 -45l362 -362l91 -91q18 -18 45 -18t45 18l91 91l362 362q18 18 18 45zM1536 640
|
596 |
+
q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
597 |
+
<glyph glyph-name="globe" unicode=""
|
598 |
+
d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM1042 887q-2 -1 -9.5 -9.5t-13.5 -9.5q2 0 4.5 5t5 11t3.5 7q6 7 22 15q14 6 52 12q34 8 51 -11
|
599 |
+
q-2 2 9.5 13t14.5 12q3 2 15 4.5t15 7.5l2 22q-12 -1 -17.5 7t-6.5 21q0 -2 -6 -8q0 7 -4.5 8t-11.5 -1t-9 -1q-10 3 -15 7.5t-8 16.5t-4 15q-2 5 -9.5 11t-9.5 10q-1 2 -2.5 5.5t-3 6.5t-4 5.5t-5.5 2.5t-7 -5t-7.5 -10t-4.5 -5q-3 2 -6 1.5t-4.5 -1t-4.5 -3t-5 -3.5
|
600 |
+
q-3 -2 -8.5 -3t-8.5 -2q15 5 -1 11q-10 4 -16 3q9 4 7.5 12t-8.5 14h5q-1 4 -8.5 8.5t-17.5 8.5t-13 6q-8 5 -34 9.5t-33 0.5q-5 -6 -4.5 -10.5t4 -14t3.5 -12.5q1 -6 -5.5 -13t-6.5 -12q0 -7 14 -15.5t10 -21.5q-3 -8 -16 -16t-16 -12q-5 -8 -1.5 -18.5t10.5 -16.5
|
601 |
+
q2 -2 1.5 -4t-3.5 -4.5t-5.5 -4t-6.5 -3.5l-3 -2q-11 -5 -20.5 6t-13.5 26q-7 25 -16 30q-23 8 -29 -1q-5 13 -41 26q-25 9 -58 4q6 1 0 15q-7 15 -19 12q3 6 4 17.5t1 13.5q3 13 12 23q1 1 7 8.5t9.5 13.5t0.5 6q35 -4 50 11q5 5 11.5 17t10.5 17q9 6 14 5.5t14.5 -5.5
|
602 |
+
t14.5 -5q14 -1 15.5 11t-7.5 20q12 -1 3 17q-4 7 -8 9q-12 4 -27 -5q-8 -4 2 -8q-1 1 -9.5 -10.5t-16.5 -17.5t-16 5q-1 1 -5.5 13.5t-9.5 13.5q-8 0 -16 -15q3 8 -11 15t-24 8q19 12 -8 27q-7 4 -20.5 5t-19.5 -4q-5 -7 -5.5 -11.5t5 -8t10.5 -5.5t11.5 -4t8.5 -3
|
603 |
+
q14 -10 8 -14q-2 -1 -8.5 -3.5t-11.5 -4.5t-6 -4q-3 -4 0 -14t-2 -14q-5 5 -9 17.5t-7 16.5q7 -9 -25 -6l-10 1q-4 0 -16 -2t-20.5 -1t-13.5 8q-4 8 0 20q1 4 4 2q-4 3 -11 9.5t-10 8.5q-46 -15 -94 -41q6 -1 12 1q5 2 13 6.5t10 5.5q34 14 42 7l5 5q14 -16 20 -25
|
604 |
+
q-7 4 -30 1q-20 -6 -22 -12q7 -12 5 -18q-4 3 -11.5 10t-14.5 11t-15 5q-16 0 -22 -1q-146 -80 -235 -222q7 -7 12 -8q4 -1 5 -9t2.5 -11t11.5 3q9 -8 3 -19q1 1 44 -27q19 -17 21 -21q3 -11 -10 -18q-1 2 -9 9t-9 4q-3 -5 0.5 -18.5t10.5 -12.5q-7 0 -9.5 -16t-2.5 -35.5
|
605 |
+
t-1 -23.5l2 -1q-3 -12 5.5 -34.5t21.5 -19.5q-13 -3 20 -43q6 -8 8 -9q3 -2 12 -7.5t15 -10t10 -10.5q4 -5 10 -22.5t14 -23.5q-2 -6 9.5 -20t10.5 -23q-1 0 -2.5 -1t-2.5 -1q3 -7 15.5 -14t15.5 -13q1 -3 2 -10t3 -11t8 -2q2 20 -24 62q-15 25 -17 29q-3 5 -5.5 15.5
|
606 |
+
t-4.5 14.5q2 0 6 -1.5t8.5 -3.5t7.5 -4t2 -3q-3 -7 2 -17.5t12 -18.5t17 -19t12 -13q6 -6 14 -19.5t0 -13.5q9 0 20 -10.5t17 -19.5q5 -8 8 -26t5 -24q2 -7 8.5 -13.5t12.5 -9.5l16 -8t13 -7q5 -2 18.5 -10.5t21.5 -11.5q10 -4 16 -4t14.5 2.5t13.5 3.5q15 2 29 -15t21 -21
|
607 |
+
q36 -19 55 -11q-2 -1 0.5 -7.5t8 -15.5t9 -14.5t5.5 -8.5q5 -6 18 -15t18 -15q6 4 7 9q-3 -8 7 -20t18 -10q14 3 14 32q-31 -15 -49 18q0 1 -2.5 5.5t-4 8.5t-2.5 8.5t0 7.5t5 3q9 0 10 3.5t-2 12.5t-4 13q-1 8 -11 20t-12 15q-5 -9 -16 -8t-16 9q0 -1 -1.5 -5.5t-1.5 -6.5
|
608 |
+
q-13 0 -15 1q1 3 2.5 17.5t3.5 22.5q1 4 5.5 12t7.5 14.5t4 12.5t-4.5 9.5t-17.5 2.5q-19 -1 -26 -20q-1 -3 -3 -10.5t-5 -11.5t-9 -7q-7 -3 -24 -2t-24 5q-13 8 -22.5 29t-9.5 37q0 10 2.5 26.5t3 25t-5.5 24.5q3 2 9 9.5t10 10.5q2 1 4.5 1.5t4.5 0t4 1.5t3 6q-1 1 -4 3
|
609 |
+
q-3 3 -4 3q7 -3 28.5 1.5t27.5 -1.5q15 -11 22 2q0 1 -2.5 9.5t-0.5 13.5q5 -27 29 -9q3 -3 15.5 -5t17.5 -5q3 -2 7 -5.5t5.5 -4.5t5 0.5t8.5 6.5q10 -14 12 -24q11 -40 19 -44q7 -3 11 -2t4.5 9.5t0 14t-1.5 12.5l-1 8v18l-1 8q-15 3 -18.5 12t1.5 18.5t15 18.5q1 1 8 3.5
|
610 |
+
t15.5 6.5t12.5 8q21 19 15 35q7 0 11 9q-1 0 -5 3t-7.5 5t-4.5 2q9 5 2 16q5 3 7.5 11t7.5 10q9 -12 21 -2q8 8 1 16q5 7 20.5 10.5t18.5 9.5q7 -2 8 2t1 12t3 12q4 5 15 9t13 5l17 11q3 4 0 4q18 -2 31 11q10 11 -6 20q3 6 -3 9.5t-15 5.5q3 1 11.5 0.5t10.5 1.5
|
611 |
+
q15 10 -7 16q-17 5 -43 -12zM879 10q206 36 351 189q-3 3 -12.5 4.5t-12.5 3.5q-18 7 -24 8q1 7 -2.5 13t-8 9t-12.5 8t-11 7q-2 2 -7 6t-7 5.5t-7.5 4.5t-8.5 2t-10 -1l-3 -1q-3 -1 -5.5 -2.5t-5.5 -3t-4 -3t0 -2.5q-21 17 -36 22q-5 1 -11 5.5t-10.5 7t-10 1.5t-11.5 -7
|
612 |
+
q-5 -5 -6 -15t-2 -13q-7 5 0 17.5t2 18.5q-3 6 -10.5 4.5t-12 -4.5t-11.5 -8.5t-9 -6.5t-8.5 -5.5t-8.5 -7.5q-3 -4 -6 -12t-5 -11q-2 4 -11.5 6.5t-9.5 5.5q2 -10 4 -35t5 -38q7 -31 -12 -48q-27 -25 -29 -40q-4 -22 12 -26q0 -7 -8 -20.5t-7 -21.5q0 -6 2 -16z" />
|
613 |
+
<glyph glyph-name="wrench" unicode="" horiz-adv-x="1664"
|
614 |
+
d="M384 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1028 484l-682 -682q-37 -37 -90 -37q-52 0 -91 37l-106 108q-38 36 -38 90q0 53 38 91l681 681q39 -98 114.5 -173.5t173.5 -114.5zM1662 919q0 -39 -23 -106q-47 -134 -164.5 -217.5
|
615 |
+
t-258.5 -83.5q-185 0 -316.5 131.5t-131.5 316.5t131.5 316.5t316.5 131.5q58 0 121.5 -16.5t107.5 -46.5q16 -11 16 -28t-16 -28l-293 -169v-224l193 -107q5 3 79 48.5t135.5 81t70.5 35.5q15 0 23.5 -10t8.5 -25z" />
|
616 |
+
<glyph glyph-name="tasks" unicode="" horiz-adv-x="1792"
|
617 |
+
d="M1024 128h640v128h-640v-128zM640 640h1024v128h-1024v-128zM1280 1152h384v128h-384v-128zM1792 320v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 832v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19
|
618 |
+
t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z" />
|
619 |
+
<glyph glyph-name="filter" unicode="" horiz-adv-x="1408"
|
620 |
+
d="M1403 1241q17 -41 -14 -70l-493 -493v-742q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-256 256q-19 19 -19 45v486l-493 493q-31 29 -14 70q17 39 59 39h1280q42 0 59 -39z" />
|
621 |
+
<glyph glyph-name="briefcase" unicode="" horiz-adv-x="1792"
|
622 |
+
d="M640 1280h512v128h-512v-128zM1792 640v-480q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v480h672v-160q0 -26 19 -45t45 -19h320q26 0 45 19t19 45v160h672zM1024 640v-128h-256v128h256zM1792 1120v-384h-1792v384q0 66 47 113t113 47h352v160q0 40 28 68
|
623 |
+
t68 28h576q40 0 68 -28t28 -68v-160h352q66 0 113 -47t47 -113z" />
|
624 |
+
<glyph glyph-name="fullscreen" unicode=""
|
625 |
+
d="M1283 995l-355 -355l355 -355l144 144q29 31 70 14q39 -17 39 -59v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l144 144l-355 355l-355 -355l144 -144q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l144 -144
|
626 |
+
l355 355l-355 355l-144 -144q-19 -19 -45 -19q-12 0 -24 5q-40 17 -40 59v448q0 26 19 45t45 19h448q42 0 59 -40q17 -39 -14 -69l-144 -144l355 -355l355 355l-144 144q-31 30 -14 69q17 40 59 40h448q26 0 45 -19t19 -45v-448q0 -42 -39 -59q-13 -5 -25 -5q-26 0 -45 19z
|
627 |
+
" />
|
628 |
+
<glyph glyph-name="group" unicode="" horiz-adv-x="1920"
|
629 |
+
d="M593 640q-162 -5 -265 -128h-134q-82 0 -138 40.5t-56 118.5q0 353 124 353q6 0 43.5 -21t97.5 -42.5t119 -21.5q67 0 133 23q-5 -37 -5 -66q0 -139 81 -256zM1664 3q0 -120 -73 -189.5t-194 -69.5h-874q-121 0 -194 69.5t-73 189.5q0 53 3.5 103.5t14 109t26.5 108.5
|
630 |
+
t43 97.5t62 81t85.5 53.5t111.5 20q10 0 43 -21.5t73 -48t107 -48t135 -21.5t135 21.5t107 48t73 48t43 21.5q61 0 111.5 -20t85.5 -53.5t62 -81t43 -97.5t26.5 -108.5t14 -109t3.5 -103.5zM640 1280q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75
|
631 |
+
t75 -181zM1344 896q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5zM1920 671q0 -78 -56 -118.5t-138 -40.5h-134q-103 123 -265 128q81 117 81 256q0 29 -5 66q66 -23 133 -23q59 0 119 21.5t97.5 42.5
|
632 |
+
t43.5 21q124 0 124 -353zM1792 1280q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181z" />
|
633 |
+
<glyph glyph-name="link" unicode="" horiz-adv-x="1664"
|
634 |
+
d="M1456 320q0 40 -28 68l-208 208q-28 28 -68 28q-42 0 -72 -32q3 -3 19 -18.5t21.5 -21.5t15 -19t13 -25.5t3.5 -27.5q0 -40 -28 -68t-68 -28q-15 0 -27.5 3.5t-25.5 13t-19 15t-21.5 21.5t-18.5 19q-33 -31 -33 -73q0 -40 28 -68l206 -207q27 -27 68 -27q40 0 68 26
|
635 |
+
l147 146q28 28 28 67zM753 1025q0 40 -28 68l-206 207q-28 28 -68 28q-39 0 -68 -27l-147 -146q-28 -28 -28 -67q0 -40 28 -68l208 -208q27 -27 68 -27q42 0 72 31q-3 3 -19 18.5t-21.5 21.5t-15 19t-13 25.5t-3.5 27.5q0 40 28 68t68 28q15 0 27.5 -3.5t25.5 -13t19 -15
|
636 |
+
t21.5 -21.5t18.5 -19q33 31 33 73zM1648 320q0 -120 -85 -203l-147 -146q-83 -83 -203 -83q-121 0 -204 85l-206 207q-83 83 -83 203q0 123 88 209l-88 88q-86 -88 -208 -88q-120 0 -204 84l-208 208q-84 84 -84 204t85 203l147 146q83 83 203 83q121 0 204 -85l206 -207
|
637 |
+
q83 -83 83 -203q0 -123 -88 -209l88 -88q86 88 208 88q120 0 204 -84l208 -208q84 -84 84 -204z" />
|
638 |
+
<glyph glyph-name="cloud" unicode="" horiz-adv-x="1920"
|
639 |
+
d="M1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088q-185 0 -316.5 131.5t-131.5 316.5q0 132 71 241.5t187 163.5q-2 28 -2 43q0 212 150 362t362 150q158 0 286.5 -88t187.5 -230q70 62 166 62q106 0 181 -75t75 -181q0 -75 -41 -138q129 -30 213 -134.5t84 -239.5z
|
640 |
+
" />
|
641 |
+
<glyph glyph-name="beaker" unicode="" horiz-adv-x="1664"
|
642 |
+
d="M1527 88q56 -89 21.5 -152.5t-140.5 -63.5h-1152q-106 0 -140.5 63.5t21.5 152.5l503 793v399h-64q-26 0 -45 19t-19 45t19 45t45 19h512q26 0 45 -19t19 -45t-19 -45t-45 -19h-64v-399zM748 813l-272 -429h712l-272 429l-20 31v37v399h-128v-399v-37z" />
|
643 |
+
<glyph glyph-name="cut" unicode="" horiz-adv-x="1792"
|
644 |
+
d="M960 640q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1260 576l507 -398q28 -20 25 -56q-5 -35 -35 -51l-128 -64q-13 -7 -29 -7q-17 0 -31 8l-690 387l-110 -66q-8 -4 -12 -5q14 -49 10 -97q-7 -77 -56 -147.5t-132 -123.5q-132 -84 -277 -84
|
645 |
+
q-136 0 -222 78q-90 84 -79 207q7 76 56 147t131 124q132 84 278 84q83 0 151 -31q9 13 22 22l122 73l-122 73q-13 9 -22 22q-68 -31 -151 -31q-146 0 -278 84q-82 53 -131 124t-56 147q-5 59 15.5 113t63.5 93q85 79 222 79q145 0 277 -84q83 -52 132 -123t56 -148
|
646 |
+
q4 -48 -10 -97q4 -1 12 -5l110 -66l690 387q14 8 31 8q16 0 29 -7l128 -64q30 -16 35 -51q3 -36 -25 -56zM579 836q46 42 21 108t-106 117q-92 59 -192 59q-74 0 -113 -36q-46 -42 -21 -108t106 -117q92 -59 192 -59q74 0 113 36zM494 91q81 51 106 117t-21 108
|
647 |
+
q-39 36 -113 36q-100 0 -192 -59q-81 -51 -106 -117t21 -108q39 -36 113 -36q100 0 192 59zM672 704l96 -58v11q0 36 33 56l14 8l-79 47l-26 -26q-3 -3 -10 -11t-12 -12q-2 -2 -4 -3.5t-3 -2.5zM896 480l96 -32l736 576l-128 64l-768 -431v-113l-160 -96l9 -8q2 -2 7 -6
|
648 |
+
q4 -4 11 -12t11 -12l26 -26zM1600 64l128 64l-520 408l-177 -138q-2 -3 -13 -7z" />
|
649 |
+
<glyph glyph-name="copy" unicode="" horiz-adv-x="1792"
|
650 |
+
d="M1696 1152q40 0 68 -28t28 -68v-1216q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v288h-544q-40 0 -68 28t-28 68v672q0 40 20 88t48 76l408 408q28 28 76 48t88 20h416q40 0 68 -28t28 -68v-328q68 40 128 40h416zM1152 939l-299 -299h299v299zM512 1323l-299 -299
|
651 |
+
h299v299zM708 676l316 316v416h-384v-416q0 -40 -28 -68t-68 -28h-416v-640h512v256q0 40 20 88t48 76zM1664 -128v1152h-384v-416q0 -40 -28 -68t-68 -28h-416v-640h896z" />
|
652 |
+
<glyph glyph-name="paper_clip" unicode="" horiz-adv-x="1408"
|
653 |
+
d="M1404 151q0 -117 -79 -196t-196 -79q-135 0 -235 100l-777 776q-113 115 -113 271q0 159 110 270t269 111q158 0 273 -113l605 -606q10 -10 10 -22q0 -16 -30.5 -46.5t-46.5 -30.5q-13 0 -23 10l-606 607q-79 77 -181 77q-106 0 -179 -75t-73 -181q0 -105 76 -181
|
654 |
+
l776 -777q63 -63 145 -63q64 0 106 42t42 106q0 82 -63 145l-581 581q-26 24 -60 24q-29 0 -48 -19t-19 -48q0 -32 25 -59l410 -410q10 -10 10 -22q0 -16 -31 -47t-47 -31q-12 0 -22 10l-410 410q-63 61 -63 149q0 82 57 139t139 57q88 0 149 -63l581 -581q100 -98 100 -235
|
655 |
+
z" />
|
656 |
+
<glyph glyph-name="save" unicode=""
|
657 |
+
d="M384 0h768v384h-768v-384zM1280 0h128v896q0 14 -10 38.5t-20 34.5l-281 281q-10 10 -34 20t-39 10v-416q0 -40 -28 -68t-68 -28h-576q-40 0 -68 28t-28 68v416h-128v-1280h128v416q0 40 28 68t68 28h832q40 0 68 -28t28 -68v-416zM896 928v320q0 13 -9.5 22.5t-22.5 9.5
|
658 |
+
h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5zM1536 896v-928q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h928q40 0 88 -20t76 -48l280 -280q28 -28 48 -76t20 -88z" />
|
659 |
+
<glyph glyph-name="sign_blank" unicode=""
|
660 |
+
d="M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
|
661 |
+
<glyph glyph-name="reorder" unicode=""
|
662 |
+
d="M1536 192v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1536 704v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1536 1216v-128q0 -26 -19 -45
|
663 |
+
t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
|
664 |
+
<glyph glyph-name="ul" unicode="" horiz-adv-x="1792"
|
665 |
+
d="M384 128q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM384 640q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5
|
666 |
+
t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5zM384 1152q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1792 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z
|
667 |
+
M1792 1248v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z" />
|
668 |
+
<glyph glyph-name="ol" unicode="" horiz-adv-x="1792"
|
669 |
+
d="M381 -84q0 -80 -54.5 -126t-135.5 -46q-106 0 -172 66l57 88q49 -45 106 -45q29 0 50.5 14.5t21.5 42.5q0 64 -105 56l-26 56q8 10 32.5 43.5t42.5 54t37 38.5v1q-16 0 -48.5 -1t-48.5 -1v-53h-106v152h333v-88l-95 -115q51 -12 81 -49t30 -88zM383 543v-159h-362
|
670 |
+
q-6 36 -6 54q0 51 23.5 93t56.5 68t66 47.5t56.5 43.5t23.5 45q0 25 -14.5 38.5t-39.5 13.5q-46 0 -81 -58l-85 59q24 51 71.5 79.5t105.5 28.5q73 0 123 -41.5t50 -112.5q0 -50 -34 -91.5t-75 -64.5t-75.5 -50.5t-35.5 -52.5h127v60h105zM1792 224v-192q0 -13 -9.5 -22.5
|
671 |
+
t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 14 9 23t23 9h1216q13 0 22.5 -9.5t9.5 -22.5zM384 1123v-99h-335v99h107q0 41 0.5 121.5t0.5 121.5v12h-2q-8 -17 -50 -54l-71 76l136 127h106v-404h108zM1792 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216
|
672 |
+
q-13 0 -22.5 9.5t-9.5 22.5v192q0 14 9 23t23 9h1216q13 0 22.5 -9.5t9.5 -22.5zM1792 1248v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z" />
|
673 |
+
<glyph glyph-name="strikethrough" unicode="" horiz-adv-x="1792"
|
674 |
+
d="M1760 640q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1728q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h1728zM483 704q-28 35 -51 80q-48 98 -48 188q0 181 134 309q133 127 393 127q50 0 167 -19q66 -12 177 -48q10 -38 21 -118q14 -123 14 -183q0 -18 -5 -45l-12 -3l-84 6
|
675 |
+
l-14 2q-50 149 -103 205q-88 91 -210 91q-114 0 -182 -59q-67 -58 -67 -146q0 -73 66 -140t279 -129q69 -20 173 -66q58 -28 95 -52h-743zM990 448h411q7 -39 7 -92q0 -111 -41 -212q-23 -56 -71 -104q-37 -35 -109 -81q-80 -48 -153 -66q-80 -21 -203 -21q-114 0 -195 23
|
676 |
+
l-140 40q-57 16 -72 28q-8 8 -8 22v13q0 108 -2 156q-1 30 0 68l2 37v44l102 2q15 -34 30 -71t22.5 -56t12.5 -27q35 -57 80 -94q43 -36 105 -57q59 -22 132 -22q64 0 139 27q77 26 122 86q47 61 47 129q0 84 -81 157q-34 29 -137 71z" />
|
677 |
+
<glyph glyph-name="underline" unicode=""
|
678 |
+
d="M48 1313q-37 2 -45 4l-3 88q13 1 40 1q60 0 112 -4q132 -7 166 -7q86 0 168 3q116 4 146 5q56 0 86 2l-1 -14l2 -64v-9q-60 -9 -124 -9q-60 0 -79 -25q-13 -14 -13 -132q0 -13 0.5 -32.5t0.5 -25.5l1 -229l14 -280q6 -124 51 -202q35 -59 96 -92q88 -47 177 -47
|
679 |
+
q104 0 191 28q56 18 99 51q48 36 65 64q36 56 53 114q21 73 21 229q0 79 -3.5 128t-11 122.5t-13.5 159.5l-4 59q-5 67 -24 88q-34 35 -77 34l-100 -2l-14 3l2 86h84l205 -10q76 -3 196 10l18 -2q6 -38 6 -51q0 -7 -4 -31q-45 -12 -84 -13q-73 -11 -79 -17q-15 -15 -15 -41
|
680 |
+
q0 -7 1.5 -27t1.5 -31q8 -19 22 -396q6 -195 -15 -304q-15 -76 -41 -122q-38 -65 -112 -123q-75 -57 -182 -89q-109 -33 -255 -33q-167 0 -284 46q-119 47 -179 122q-61 76 -83 195q-16 80 -16 237v333q0 188 -17 213q-25 36 -147 39zM1536 -96v64q0 14 -9 23t-23 9h-1472
|
681 |
+
q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h1472q14 0 23 9t9 23z" />
|
682 |
+
<glyph glyph-name="table" unicode="" horiz-adv-x="1664"
|
683 |
+
d="M512 160v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM512 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 160v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23
|
684 |
+
v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM512 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 160v192
|
685 |
+
q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192
|
686 |
+
q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1664 1248v-1088q0 -66 -47 -113t-113 -47h-1344q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1344q66 0 113 -47t47 -113
|
687 |
+
z" />
|
688 |
+
<glyph glyph-name="magic" unicode="" horiz-adv-x="1664"
|
689 |
+
d="M1190 955l293 293l-107 107l-293 -293zM1637 1248q0 -27 -18 -45l-1286 -1286q-18 -18 -45 -18t-45 18l-198 198q-18 18 -18 45t18 45l1286 1286q18 18 45 18t45 -18l198 -198q18 -18 18 -45zM286 1438l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM636 1276
|
690 |
+
l196 -60l-196 -60l-60 -196l-60 196l-196 60l196 60l60 196zM1566 798l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM926 1438l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98z" />
|
691 |
+
<glyph glyph-name="truck" unicode="" horiz-adv-x="1792"
|
692 |
+
d="M640 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM256 640h384v256h-158q-13 0 -22 -9l-195 -195q-9 -9 -9 -22v-30zM1536 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM1792 1216v-1024q0 -15 -4 -26.5t-13.5 -18.5
|
693 |
+
t-16.5 -11.5t-23.5 -6t-22.5 -2t-25.5 0t-22.5 0.5q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-64q-3 0 -22.5 -0.5t-25.5 0t-22.5 2t-23.5 6t-16.5 11.5t-13.5 18.5t-4 26.5q0 26 19 45t45 19v320q0 8 -0.5 35t0 38
|
694 |
+
t2.5 34.5t6.5 37t14 30.5t22.5 30l198 198q19 19 50.5 32t58.5 13h160v192q0 26 19 45t45 19h1024q26 0 45 -19t19 -45z" />
|
695 |
+
<glyph glyph-name="pinterest" unicode=""
|
696 |
+
d="M1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103q-111 0 -218 32q59 93 78 164q9 34 54 211q20 -39 73 -67.5t114 -28.5q121 0 216 68.5t147 188.5t52 270q0 114 -59.5 214t-172.5 163t-255 63q-105 0 -196 -29t-154.5 -77t-109 -110.5t-67 -129.5t-21.5 -134
|
697 |
+
q0 -104 40 -183t117 -111q30 -12 38 20q2 7 8 31t8 30q6 23 -11 43q-51 61 -51 151q0 151 104.5 259.5t273.5 108.5q151 0 235.5 -82t84.5 -213q0 -170 -68.5 -289t-175.5 -119q-61 0 -98 43.5t-23 104.5q8 35 26.5 93.5t30 103t11.5 75.5q0 50 -27 83t-77 33
|
698 |
+
q-62 0 -105 -57t-43 -142q0 -73 25 -122l-99 -418q-17 -70 -13 -177q-206 91 -333 281t-127 423q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
699 |
+
<glyph glyph-name="pinterest_sign" unicode=""
|
700 |
+
d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-725q85 122 108 210q9 34 53 209q21 -39 73.5 -67t112.5 -28q181 0 295.5 147.5t114.5 373.5q0 84 -35 162.5t-96.5 139t-152.5 97t-197 36.5q-104 0 -194.5 -28.5t-153 -76.5
|
701 |
+
t-107.5 -109.5t-66.5 -128t-21.5 -132.5q0 -102 39.5 -180t116.5 -110q13 -5 23.5 0t14.5 19q10 44 15 61q6 23 -11 42q-50 62 -50 150q0 150 103.5 256.5t270.5 106.5q149 0 232.5 -81t83.5 -210q0 -168 -67.5 -286t-173.5 -118q-60 0 -97 43.5t-23 103.5q8 34 26.5 92.5
|
702 |
+
t29.5 102t11 74.5q0 49 -26.5 81.5t-75.5 32.5q-61 0 -103.5 -56.5t-42.5 -139.5q0 -72 24 -121l-98 -414q-24 -100 -7 -254h-183q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960z" />
|
703 |
+
<glyph glyph-name="google_plus_sign" unicode=""
|
704 |
+
d="M917 631q0 26 -6 64h-362v-132h217q-3 -24 -16.5 -50t-37.5 -53t-66.5 -44.5t-96.5 -17.5q-99 0 -169 71t-70 171t70 171t169 71q92 0 153 -59l104 101q-108 100 -257 100q-160 0 -272 -112.5t-112 -271.5t112 -271.5t272 -112.5q165 0 266.5 105t101.5 270zM1262 585
|
705 |
+
h109v110h-109v110h-110v-110h-110v-110h110v-110h110v110zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
|
706 |
+
<glyph glyph-name="google_plus" unicode="" horiz-adv-x="2304"
|
707 |
+
d="M1437 623q0 -208 -87 -370.5t-248 -254t-369 -91.5q-149 0 -285 58t-234 156t-156 234t-58 285t58 285t156 234t234 156t285 58q286 0 491 -192l-199 -191q-117 113 -292 113q-123 0 -227.5 -62t-165.5 -168.5t-61 -232.5t61 -232.5t165.5 -168.5t227.5 -62
|
708 |
+
q83 0 152.5 23t114.5 57.5t78.5 78.5t49 83t21.5 74h-416v252h692q12 -63 12 -122zM2304 745v-210h-209v-209h-210v209h-209v210h209v209h210v-209h209z" />
|
709 |
+
<glyph glyph-name="money" unicode="" horiz-adv-x="1920"
|
710 |
+
d="M768 384h384v96h-128v448h-114l-148 -137l77 -80q42 37 55 57h2v-288h-128v-96zM1280 640q0 -70 -21 -142t-59.5 -134t-101.5 -101t-138 -39t-138 39t-101.5 101t-59.5 134t-21 142t21 142t59.5 134t101.5 101t138 39t138 -39t101.5 -101t59.5 -134t21 -142zM1792 384
|
711 |
+
v512q-106 0 -181 75t-75 181h-1152q0 -106 -75 -181t-181 -75v-512q106 0 181 -75t75 -181h1152q0 106 75 181t181 75zM1920 1216v-1152q0 -26 -19 -45t-45 -19h-1792q-26 0 -45 19t-19 45v1152q0 26 19 45t45 19h1792q26 0 45 -19t19 -45z" />
|
712 |
+
<glyph glyph-name="caret_down" unicode="" horiz-adv-x="1024"
|
713 |
+
d="M1024 832q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45z" />
|
714 |
+
<glyph glyph-name="caret_up" unicode="" horiz-adv-x="1024"
|
715 |
+
d="M1024 320q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
|
716 |
+
<glyph glyph-name="caret_left" unicode="" horiz-adv-x="640"
|
717 |
+
d="M640 1088v-896q0 -26 -19 -45t-45 -19t-45 19l-448 448q-19 19 -19 45t19 45l448 448q19 19 45 19t45 -19t19 -45z" />
|
718 |
+
<glyph glyph-name="caret_right" unicode="" horiz-adv-x="640"
|
719 |
+
d="M576 640q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19t-19 45v896q0 26 19 45t45 19t45 -19l448 -448q19 -19 19 -45z" />
|
720 |
+
<glyph glyph-name="columns" unicode="" horiz-adv-x="1664"
|
721 |
+
d="M160 0h608v1152h-640v-1120q0 -13 9.5 -22.5t22.5 -9.5zM1536 32v1120h-640v-1152h608q13 0 22.5 9.5t9.5 22.5zM1664 1248v-1216q0 -66 -47 -113t-113 -47h-1344q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1344q66 0 113 -47t47 -113z" />
|
722 |
+
<glyph glyph-name="sort" unicode="" horiz-adv-x="1024"
|
723 |
+
d="M1024 448q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45zM1024 832q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
|
724 |
+
<glyph glyph-name="sort_down" unicode="" horiz-adv-x="1024"
|
725 |
+
d="M1024 448q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45z" />
|
726 |
+
<glyph glyph-name="sort_up" unicode="" horiz-adv-x="1024"
|
727 |
+
d="M1024 832q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
|
728 |
+
<glyph glyph-name="envelope_alt" unicode="" horiz-adv-x="1792"
|
729 |
+
d="M1792 826v-794q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v794q44 -49 101 -87q362 -246 497 -345q57 -42 92.5 -65.5t94.5 -48t110 -24.5h1h1q51 0 110 24.5t94.5 48t92.5 65.5q170 123 498 345q57 39 100 87zM1792 1120q0 -79 -49 -151t-122 -123
|
730 |
+
q-376 -261 -468 -325q-10 -7 -42.5 -30.5t-54 -38t-52 -32.5t-57.5 -27t-50 -9h-1h-1q-23 0 -50 9t-57.5 27t-52 32.5t-54 38t-42.5 30.5q-91 64 -262 182.5t-205 142.5q-62 42 -117 115.5t-55 136.5q0 78 41.5 130t118.5 52h1472q65 0 112.5 -47t47.5 -113z" />
|
731 |
+
<glyph glyph-name="linkedin" unicode=""
|
732 |
+
d="M349 911v-991h-330v991h330zM370 1217q1 -73 -50.5 -122t-135.5 -49h-2q-82 0 -132 49t-50 122q0 74 51.5 122.5t134.5 48.5t133 -48.5t51 -122.5zM1536 488v-568h-329v530q0 105 -40.5 164.5t-126.5 59.5q-63 0 -105.5 -34.5t-63.5 -85.5q-11 -30 -11 -81v-553h-329
|
733 |
+
q2 399 2 647t-1 296l-1 48h329v-144h-2q20 32 41 56t56.5 52t87 43.5t114.5 15.5q171 0 275 -113.5t104 -332.5z" />
|
734 |
+
<glyph glyph-name="undo" unicode=""
|
735 |
+
d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61q-172 0 -327 72.5t-264 204.5q-7 10 -6.5 22.5t8.5 20.5l137 138q10 9 25 9q16 -2 23 -12q73 -95 179 -147t225 -52q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5
|
736 |
+
t-163.5 109.5t-198.5 40.5q-98 0 -188 -35.5t-160 -101.5l137 -138q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l130 -129q107 101 244.5 156.5t284.5 55.5q156 0 298 -61t245 -164t164 -245t61 -298z" />
|
737 |
+
<glyph glyph-name="legal" unicode="" horiz-adv-x="1792"
|
738 |
+
d="M1771 0q0 -53 -37 -90l-107 -108q-39 -37 -91 -37q-53 0 -90 37l-363 364q-38 36 -38 90q0 53 43 96l-256 256l-126 -126q-14 -14 -34 -14t-34 14q2 -2 12.5 -12t12.5 -13t10 -11.5t10 -13.5t6 -13.5t5.5 -16.5t1.5 -18q0 -38 -28 -68q-3 -3 -16.5 -18t-19 -20.5
|
739 |
+
t-18.5 -16.5t-22 -15.5t-22 -9t-26 -4.5q-40 0 -68 28l-408 408q-28 28 -28 68q0 13 4.5 26t9 22t15.5 22t16.5 18.5t20.5 19t18 16.5q30 28 68 28q10 0 18 -1.5t16.5 -5.5t13.5 -6t13.5 -10t11.5 -10t13 -12.5t12 -12.5q-14 14 -14 34t14 34l348 348q14 14 34 14t34 -14
|
740 |
+
q-2 2 -12.5 12t-12.5 13t-10 11.5t-10 13.5t-6 13.5t-5.5 16.5t-1.5 18q0 38 28 68q3 3 16.5 18t19 20.5t18.5 16.5t22 15.5t22 9t26 4.5q40 0 68 -28l408 -408q28 -28 28 -68q0 -13 -4.5 -26t-9 -22t-15.5 -22t-16.5 -18.5t-20.5 -19t-18 -16.5q-30 -28 -68 -28
|
741 |
+
q-10 0 -18 1.5t-16.5 5.5t-13.5 6t-13.5 10t-11.5 10t-13 12.5t-12 12.5q14 -14 14 -34t-14 -34l-126 -126l256 -256q43 43 96 43q52 0 91 -37l363 -363q37 -39 37 -91z" />
|
742 |
+
<glyph glyph-name="dashboard" unicode="" horiz-adv-x="1792"
|
743 |
+
d="M384 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM576 832q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1004 351l101 382q6 26 -7.5 48.5t-38.5 29.5
|
744 |
+
t-48 -6.5t-30 -39.5l-101 -382q-60 -5 -107 -43.5t-63 -98.5q-20 -77 20 -146t117 -89t146 20t89 117q16 60 -6 117t-72 91zM1664 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 1024q0 53 -37.5 90.5
|
745 |
+
t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1472 832q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1792 384q0 -261 -141 -483q-19 -29 -54 -29h-1402q-35 0 -54 29
|
746 |
+
q-141 221 -141 483q0 182 71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
|
747 |
+
<glyph glyph-name="comment_alt" unicode="" horiz-adv-x="1792"
|
748 |
+
d="M896 1152q-204 0 -381.5 -69.5t-282 -187.5t-104.5 -255q0 -112 71.5 -213.5t201.5 -175.5l87 -50l-27 -96q-24 -91 -70 -172q152 63 275 171l43 38l57 -6q69 -8 130 -8q204 0 381.5 69.5t282 187.5t104.5 255t-104.5 255t-282 187.5t-381.5 69.5zM1792 640
|
749 |
+
q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22h-5q-15 0 -27 10.5t-16 27.5v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281q0 174 120 321.5
|
750 |
+
t326 233t450 85.5t450 -85.5t326 -233t120 -321.5z" />
|
751 |
+
<glyph glyph-name="comments_alt" unicode="" horiz-adv-x="1792"
|
752 |
+
d="M704 1152q-153 0 -286 -52t-211.5 -141t-78.5 -191q0 -82 53 -158t149 -132l97 -56l-35 -84q34 20 62 39l44 31l53 -10q78 -14 153 -14q153 0 286 52t211.5 141t78.5 191t-78.5 191t-211.5 141t-286 52zM704 1280q191 0 353.5 -68.5t256.5 -186.5t94 -257t-94 -257
|
753 |
+
t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224q0 139 94 257t256.5 186.5
|
754 |
+
t353.5 68.5zM1526 111q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22t-22 -7q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132q58 -4 88 -4q161 0 309 45t264 129
|
755 |
+
q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230q0 -120 -71 -224.5t-195 -176.5z" />
|
756 |
+
<glyph glyph-name="bolt" unicode="" horiz-adv-x="896"
|
757 |
+
d="M885 970q18 -20 7 -44l-540 -1157q-13 -25 -42 -25q-4 0 -14 2q-17 5 -25.5 19t-4.5 30l197 808l-406 -101q-4 -1 -12 -1q-18 0 -31 11q-18 15 -13 39l201 825q4 14 16 23t28 9h328q19 0 32 -12.5t13 -29.5q0 -8 -5 -18l-171 -463l396 98q8 2 12 2q19 0 34 -15z" />
|
758 |
+
<glyph glyph-name="sitemap" unicode="" horiz-adv-x="1792"
|
759 |
+
d="M1792 288v-320q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192h-512v-192h96q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192h-512v-192h96q40 0 68 -28t28 -68v-320
|
760 |
+
q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192q0 52 38 90t90 38h512v192h-96q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h320q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-96v-192h512q52 0 90 -38t38 -90v-192h96q40 0 68 -28t28 -68
|
761 |
+
z" />
|
762 |
+
<glyph glyph-name="umbrella" unicode="" horiz-adv-x="1664"
|
763 |
+
d="M896 708v-580q0 -104 -76 -180t-180 -76t-180 76t-76 180q0 26 19 45t45 19t45 -19t19 -45q0 -50 39 -89t89 -39t89 39t39 89v580q33 11 64 11t64 -11zM1664 681q0 -13 -9.5 -22.5t-22.5 -9.5q-11 0 -23 10q-49 46 -93 69t-102 23q-68 0 -128 -37t-103 -97
|
764 |
+
q-7 -10 -17.5 -28t-14.5 -24q-11 -17 -28 -17q-18 0 -29 17q-4 6 -14.5 24t-17.5 28q-43 60 -102.5 97t-127.5 37t-127.5 -37t-102.5 -97q-7 -10 -17.5 -28t-14.5 -24q-11 -17 -29 -17q-17 0 -28 17q-4 6 -14.5 24t-17.5 28q-43 60 -103 97t-128 37q-58 0 -102 -23t-93 -69
|
765 |
+
q-12 -10 -23 -10q-13 0 -22.5 9.5t-9.5 22.5q0 5 1 7q45 183 172.5 319.5t298 204.5t360.5 68q140 0 274.5 -40t246.5 -113.5t194.5 -187t115.5 -251.5q1 -2 1 -7zM896 1408v-98q-42 2 -64 2t-64 -2v98q0 26 19 45t45 19t45 -19t19 -45z" />
|
766 |
+
<glyph glyph-name="paste" unicode="" horiz-adv-x="1792"
|
767 |
+
d="M768 -128h896v640h-416q-40 0 -68 28t-28 68v416h-384v-1152zM1024 1312v64q0 13 -9.5 22.5t-22.5 9.5h-704q-13 0 -22.5 -9.5t-9.5 -22.5v-64q0 -13 9.5 -22.5t22.5 -9.5h704q13 0 22.5 9.5t9.5 22.5zM1280 640h299l-299 299v-299zM1792 512v-672q0 -40 -28 -68t-68 -28
|
768 |
+
h-960q-40 0 -68 28t-28 68v160h-544q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h1088q40 0 68 -28t28 -68v-328q21 -13 36 -28l408 -408q28 -28 48 -76t20 -88z" />
|
769 |
+
<glyph glyph-name="light_bulb" unicode="" horiz-adv-x="1024"
|
770 |
+
d="M736 960q0 -13 -9.5 -22.5t-22.5 -9.5t-22.5 9.5t-9.5 22.5q0 46 -54 71t-106 25q-13 0 -22.5 9.5t-9.5 22.5t9.5 22.5t22.5 9.5q50 0 99.5 -16t87 -54t37.5 -90zM896 960q0 72 -34.5 134t-90 101.5t-123 62t-136.5 22.5t-136.5 -22.5t-123 -62t-90 -101.5t-34.5 -134
|
771 |
+
q0 -101 68 -180q10 -11 30.5 -33t30.5 -33q128 -153 141 -298h228q13 145 141 298q10 11 30.5 33t30.5 33q68 79 68 180zM1024 960q0 -155 -103 -268q-45 -49 -74.5 -87t-59.5 -95.5t-34 -107.5q47 -28 47 -82q0 -37 -25 -64q25 -27 25 -64q0 -52 -45 -81q13 -23 13 -47
|
772 |
+
q0 -46 -31.5 -71t-77.5 -25q-20 -44 -60 -70t-87 -26t-87 26t-60 70q-46 0 -77.5 25t-31.5 71q0 24 13 47q-45 29 -45 81q0 37 25 64q-25 27 -25 64q0 54 47 82q-4 50 -34 107.5t-59.5 95.5t-74.5 87q-103 113 -103 268q0 99 44.5 184.5t117 142t164 89t186.5 32.5
|
773 |
+
t186.5 -32.5t164 -89t117 -142t44.5 -184.5z" />
|
774 |
+
<glyph glyph-name="exchange" unicode="" horiz-adv-x="1792"
|
775 |
+
d="M1792 352v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5q-12 0 -24 10l-319 320q-9 9 -9 22q0 14 9 23l320 320q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5v-192h1376q13 0 22.5 -9.5t9.5 -22.5zM1792 896q0 -14 -9 -23l-320 -320q-9 -9 -23 -9
|
776 |
+
q-13 0 -22.5 9.5t-9.5 22.5v192h-1376q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1376v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z" />
|
777 |
+
<glyph glyph-name="cloud_download" unicode="" horiz-adv-x="1920"
|
778 |
+
d="M1280 608q0 14 -9 23t-23 9h-224v352q0 13 -9.5 22.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-352h-224q-13 0 -22.5 -9.5t-9.5 -22.5q0 -14 9 -23l352 -352q9 -9 23 -9t23 9l351 351q10 12 10 24zM1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088
|
779 |
+
q-185 0 -316.5 131.5t-131.5 316.5q0 130 70 240t188 165q-2 30 -2 43q0 212 150 362t362 150q156 0 285.5 -87t188.5 -231q71 62 166 62q106 0 181 -75t75 -181q0 -76 -41 -138q130 -31 213.5 -135.5t83.5 -238.5z" />
|
780 |
+
<glyph glyph-name="cloud_upload" unicode="" horiz-adv-x="1920"
|
781 |
+
d="M1280 672q0 14 -9 23l-352 352q-9 9 -23 9t-23 -9l-351 -351q-10 -12 -10 -24q0 -14 9 -23t23 -9h224v-352q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5v352h224q13 0 22.5 9.5t9.5 22.5zM1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088
|
782 |
+
q-185 0 -316.5 131.5t-131.5 316.5q0 130 70 240t188 165q-2 30 -2 43q0 212 150 362t362 150q156 0 285.5 -87t188.5 -231q71 62 166 62q106 0 181 -75t75 -181q0 -76 -41 -138q130 -31 213.5 -135.5t83.5 -238.5z" />
|
783 |
+
<glyph glyph-name="user_md" unicode="" horiz-adv-x="1408"
|
784 |
+
d="M384 192q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45zM1408 131q0 -121 -73 -190t-194 -69h-874q-121 0 -194 69t-73 190q0 68 5.5 131t24 138t47.5 132.5t81 103t120 60.5q-22 -52 -22 -120v-203q-58 -20 -93 -70t-35 -111q0 -80 56 -136t136 -56
|
785 |
+
t136 56t56 136q0 61 -35.5 111t-92.5 70v203q0 62 25 93q132 -104 295 -104t295 104q25 -31 25 -93v-64q-106 0 -181 -75t-75 -181v-89q-32 -29 -32 -71q0 -40 28 -68t68 -28t68 28t28 68q0 42 -32 71v89q0 52 38 90t90 38t90 -38t38 -90v-89q-32 -29 -32 -71q0 -40 28 -68
|
786 |
+
t68 -28t68 28t28 68q0 42 -32 71v89q0 68 -34.5 127.5t-93.5 93.5q0 10 0.5 42.5t0 48t-2.5 41.5t-7 47t-13 40q68 -15 120 -60.5t81 -103t47.5 -132.5t24 -138t5.5 -131zM1088 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5
|
787 |
+
t271.5 -112.5t112.5 -271.5z" />
|
788 |
+
<glyph glyph-name="stethoscope" unicode="" horiz-adv-x="1408"
|
789 |
+
d="M1280 832q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 832q0 -62 -35.5 -111t-92.5 -70v-395q0 -159 -131.5 -271.5t-316.5 -112.5t-316.5 112.5t-131.5 271.5v132q-164 20 -274 128t-110 252v512q0 26 19 45t45 19q6 0 16 -2q17 30 47 48
|
790 |
+
t65 18q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5q-33 0 -64 18v-402q0 -106 94 -181t226 -75t226 75t94 181v402q-31 -18 -64 -18q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5q35 0 65 -18t47 -48q10 2 16 2q26 0 45 -19t19 -45v-512q0 -144 -110 -252
|
791 |
+
t-274 -128v-132q0 -106 94 -181t226 -75t226 75t94 181v395q-57 21 -92.5 70t-35.5 111q0 80 56 136t136 56t136 -56t56 -136z" />
|
792 |
+
<glyph glyph-name="suitcase" unicode="" horiz-adv-x="1792"
|
793 |
+
d="M640 1152h512v128h-512v-128zM288 1152v-1280h-64q-92 0 -158 66t-66 158v832q0 92 66 158t158 66h64zM1408 1152v-1280h-1024v1280h128v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h128zM1792 928v-832q0 -92 -66 -158t-158 -66h-64v1280h64q92 0 158 -66
|
794 |
+
t66 -158z" />
|
795 |
+
<glyph glyph-name="bell_alt" unicode="" horiz-adv-x="1792"
|
796 |
+
d="M912 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM1728 128q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q50 42 91 88t85 119.5t74.5 158.5
|
797 |
+
t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q190 -28 307 -158.5t117 -282.5q0 -139 19.5 -260t50 -206t74.5 -158.5t85 -119.5t91 -88z" />
|
798 |
+
<glyph glyph-name="coffee" unicode="" horiz-adv-x="1920"
|
799 |
+
d="M1664 896q0 80 -56 136t-136 56h-64v-384h64q80 0 136 56t56 136zM0 128h1792q0 -106 -75 -181t-181 -75h-1280q-106 0 -181 75t-75 181zM1856 896q0 -159 -112.5 -271.5t-271.5 -112.5h-64v-32q0 -92 -66 -158t-158 -66h-704q-92 0 -158 66t-66 158v736q0 26 19 45
|
800 |
+
t45 19h1152q159 0 271.5 -112.5t112.5 -271.5z" />
|
801 |
+
<glyph glyph-name="food" unicode="" horiz-adv-x="1408"
|
802 |
+
d="M640 1472v-640q0 -61 -35.5 -111t-92.5 -70v-779q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v779q-57 20 -92.5 70t-35.5 111v640q0 26 19 45t45 19t45 -19t19 -45v-416q0 -26 19 -45t45 -19t45 19t19 45v416q0 26 19 45t45 19t45 -19t19 -45v-416q0 -26 19 -45
|
803 |
+
t45 -19t45 19t19 45v416q0 26 19 45t45 19t45 -19t19 -45zM1408 1472v-1600q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v512h-224q-13 0 -22.5 9.5t-9.5 22.5v800q0 132 94 226t226 94h256q26 0 45 -19t19 -45z" />
|
804 |
+
<glyph glyph-name="file_text_alt" unicode=""
|
805 |
+
d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
|
806 |
+
M384 736q0 14 9 23t23 9h704q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64zM1120 512q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704zM1120 256q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704
|
807 |
+
q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704z" />
|
808 |
+
<glyph glyph-name="building" unicode="" horiz-adv-x="1408"
|
809 |
+
d="M384 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
|
810 |
+
M640 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
|
811 |
+
M1152 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
|
812 |
+
M640 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
|
813 |
+
M1152 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
|
814 |
+
M640 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
|
815 |
+
M1152 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
|
816 |
+
M640 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
|
817 |
+
M896 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
|
818 |
+
M896 -128h384v1536h-1152v-1536h384v224q0 13 9.5 22.5t22.5 9.5h320q13 0 22.5 -9.5t9.5 -22.5v-224zM1408 1472v-1664q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1664q0 26 19 45t45 19h1280q26 0 45 -19t19 -45z" />
|
819 |
+
<glyph glyph-name="hospital" unicode="" horiz-adv-x="1408"
|
820 |
+
d="M384 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
|
821 |
+
M640 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
|
822 |
+
M1152 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
|
823 |
+
M640 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
|
824 |
+
M896 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
|
825 |
+
M896 -128h384v1152h-256v-32q0 -40 -28 -68t-68 -28h-448q-40 0 -68 28t-28 68v32h-256v-1152h384v224q0 13 9.5 22.5t22.5 9.5h320q13 0 22.5 -9.5t9.5 -22.5v-224zM896 1056v320q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-96h-128v96q0 13 -9.5 22.5
|
826 |
+
t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5v96h128v-96q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1408 1088v-1280q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1280q0 26 19 45t45 19h320
|
827 |
+
v288q0 40 28 68t68 28h448q40 0 68 -28t28 -68v-288h320q26 0 45 -19t19 -45z" />
|
828 |
+
<glyph glyph-name="ambulance" unicode="" horiz-adv-x="1920"
|
829 |
+
d="M640 128q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM256 640h384v256h-158q-14 -2 -22 -9l-195 -195q-7 -12 -9 -22v-30zM1536 128q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5
|
830 |
+
t90.5 37.5t37.5 90.5zM1664 800v192q0 14 -9 23t-23 9h-224v224q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-224h-224q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h224v-224q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v224h224q14 0 23 9t9 23zM1920 1344v-1152
|
831 |
+
q0 -26 -19 -45t-45 -19h-192q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-128q-26 0 -45 19t-19 45t19 45t45 19v416q0 26 13 58t32 51l198 198q19 19 51 32t58 13h160v320q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
|
832 |
+
<glyph glyph-name="medkit" unicode="" horiz-adv-x="1792"
|
833 |
+
d="M1280 416v192q0 14 -9 23t-23 9h-224v224q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-224h-224q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h224v-224q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v224h224q14 0 23 9t9 23zM640 1152h512v128h-512v-128zM256 1152v-1280h-32
|
834 |
+
q-92 0 -158 66t-66 158v832q0 92 66 158t158 66h32zM1440 1152v-1280h-1088v1280h160v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h160zM1792 928v-832q0 -92 -66 -158t-158 -66h-32v1280h32q92 0 158 -66t66 -158z" />
|
835 |
+
<glyph glyph-name="fighter_jet" unicode="" horiz-adv-x="1920"
|
836 |
+
d="M1920 576q-1 -32 -288 -96l-352 -32l-224 -64h-64l-293 -352h69q26 0 45 -4.5t19 -11.5t-19 -11.5t-45 -4.5h-96h-160h-64v32h64v416h-160l-192 -224h-96l-32 32v192h32v32h128v8l-192 24v128l192 24v8h-128v32h-32v192l32 32h96l192 -224h160v416h-64v32h64h160h96
|
837 |
+
q26 0 45 -4.5t19 -11.5t-19 -11.5t-45 -4.5h-69l293 -352h64l224 -64l352 -32q128 -28 200 -52t80 -34z" />
|
838 |
+
<glyph glyph-name="beer" unicode="" horiz-adv-x="1664"
|
839 |
+
d="M640 640v384h-256v-256q0 -53 37.5 -90.5t90.5 -37.5h128zM1664 192v-192h-1152v192l128 192h-128q-159 0 -271.5 112.5t-112.5 271.5v320l-64 64l32 128h480l32 128h960l32 -192l-64 -32v-800z" />
|
840 |
+
<glyph glyph-name="h_sign" unicode=""
|
841 |
+
d="M1280 192v896q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-512v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-896q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h512v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1536 1120v-960
|
842 |
+
q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
|
843 |
+
<glyph glyph-name="f0fe" unicode=""
|
844 |
+
d="M1280 576v128q0 26 -19 45t-45 19h-320v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-320q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h320v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h320q26 0 45 19t19 45zM1536 1120v-960
|
845 |
+
q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
|
846 |
+
<glyph glyph-name="double_angle_left" unicode="" horiz-adv-x="1024"
|
847 |
+
d="M627 160q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23zM1011 160q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23
|
848 |
+
t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23z" />
|
849 |
+
<glyph glyph-name="double_angle_right" unicode="" horiz-adv-x="1024"
|
850 |
+
d="M595 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23zM979 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23
|
851 |
+
l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
|
852 |
+
<glyph glyph-name="double_angle_up" unicode="" horiz-adv-x="1152"
|
853 |
+
d="M1075 224q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23zM1075 608q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393
|
854 |
+
q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
|
855 |
+
<glyph glyph-name="double_angle_down" unicode="" horiz-adv-x="1152"
|
856 |
+
d="M1075 672q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23zM1075 1056q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23
|
857 |
+
t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
|
858 |
+
<glyph glyph-name="angle_left" unicode="" horiz-adv-x="640"
|
859 |
+
d="M627 992q0 -13 -10 -23l-393 -393l393 -393q10 -10 10 -23t-10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
|
860 |
+
<glyph glyph-name="angle_right" unicode="" horiz-adv-x="640"
|
861 |
+
d="M595 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
|
862 |
+
<glyph glyph-name="angle_up" unicode="" horiz-adv-x="1152"
|
863 |
+
d="M1075 352q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
|
864 |
+
<glyph glyph-name="angle_down" unicode="" horiz-adv-x="1152"
|
865 |
+
d="M1075 800q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
|
866 |
+
<glyph glyph-name="desktop" unicode="" horiz-adv-x="1920"
|
867 |
+
d="M1792 544v832q0 13 -9.5 22.5t-22.5 9.5h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5zM1920 1376v-1088q0 -66 -47 -113t-113 -47h-544q0 -37 16 -77.5t32 -71t16 -43.5q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19
|
868 |
+
t-19 45q0 14 16 44t32 70t16 78h-544q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
|
869 |
+
<glyph glyph-name="laptop" unicode="" horiz-adv-x="1920"
|
870 |
+
d="M416 256q-66 0 -113 47t-47 113v704q0 66 47 113t113 47h1088q66 0 113 -47t47 -113v-704q0 -66 -47 -113t-113 -47h-1088zM384 1120v-704q0 -13 9.5 -22.5t22.5 -9.5h1088q13 0 22.5 9.5t9.5 22.5v704q0 13 -9.5 22.5t-22.5 9.5h-1088q-13 0 -22.5 -9.5t-9.5 -22.5z
|
871 |
+
M1760 192h160v-96q0 -40 -47 -68t-113 -28h-1600q-66 0 -113 28t-47 68v96h160h1600zM1040 96q16 0 16 16t-16 16h-160q-16 0 -16 -16t16 -16h160z" />
|
872 |
+
<glyph glyph-name="tablet" unicode="" horiz-adv-x="1152"
|
873 |
+
d="M640 128q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1024 288v960q0 13 -9.5 22.5t-22.5 9.5h-832q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h832q13 0 22.5 9.5t9.5 22.5zM1152 1248v-1088q0 -66 -47 -113t-113 -47h-832
|
874 |
+
q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h832q66 0 113 -47t47 -113z" />
|
875 |
+
<glyph glyph-name="mobile_phone" unicode="" horiz-adv-x="768"
|
876 |
+
d="M464 128q0 33 -23.5 56.5t-56.5 23.5t-56.5 -23.5t-23.5 -56.5t23.5 -56.5t56.5 -23.5t56.5 23.5t23.5 56.5zM672 288v704q0 13 -9.5 22.5t-22.5 9.5h-512q-13 0 -22.5 -9.5t-9.5 -22.5v-704q0 -13 9.5 -22.5t22.5 -9.5h512q13 0 22.5 9.5t9.5 22.5zM480 1136
|
877 |
+
q0 16 -16 16h-160q-16 0 -16 -16t16 -16h160q16 0 16 16zM768 1152v-1024q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v1024q0 52 38 90t90 38h512q52 0 90 -38t38 -90z" />
|
878 |
+
<glyph glyph-name="circle_blank" unicode=""
|
879 |
+
d="M768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103
|
880 |
+
t279.5 -279.5t103 -385.5z" />
|
881 |
+
<glyph glyph-name="quote_left" unicode="" horiz-adv-x="1664"
|
882 |
+
d="M768 576v-384q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v704q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5h64q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-64q-106 0 -181 -75t-75 -181v-32q0 -40 28 -68t68 -28h224q80 0 136 -56t56 -136z
|
883 |
+
M1664 576v-384q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v704q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5h64q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-64q-106 0 -181 -75t-75 -181v-32q0 -40 28 -68t68 -28h224q80 0 136 -56t56 -136z" />
|
884 |
+
<glyph glyph-name="quote_right" unicode="" horiz-adv-x="1664"
|
885 |
+
d="M768 1216v-704q0 -104 -40.5 -198.5t-109.5 -163.5t-163.5 -109.5t-198.5 -40.5h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64q106 0 181 75t75 181v32q0 40 -28 68t-68 28h-224q-80 0 -136 56t-56 136v384q0 80 56 136t136 56h384q80 0 136 -56t56 -136zM1664 1216
|
886 |
+
v-704q0 -104 -40.5 -198.5t-109.5 -163.5t-163.5 -109.5t-198.5 -40.5h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64q106 0 181 75t75 181v32q0 40 -28 68t-68 28h-224q-80 0 -136 56t-56 136v384q0 80 56 136t136 56h384q80 0 136 -56t56 -136z" />
|
887 |
+
<glyph glyph-name="spinner" unicode="" horiz-adv-x="1792"
|
888 |
+
d="M526 142q0 -53 -37.5 -90.5t-90.5 -37.5q-52 0 -90 38t-38 90q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1024 -64q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM320 640q0 -53 -37.5 -90.5t-90.5 -37.5
|
889 |
+
t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1522 142q0 -52 -38 -90t-90 -38q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM558 1138q0 -66 -47 -113t-113 -47t-113 47t-47 113t47 113t113 47t113 -47t47 -113z
|
890 |
+
M1728 640q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1088 1344q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1618 1138q0 -93 -66 -158.5t-158 -65.5q-93 0 -158.5 65.5t-65.5 158.5
|
891 |
+
q0 92 65.5 158t158.5 66q92 0 158 -66t66 -158z" />
|
892 |
+
<glyph glyph-name="circle" unicode=""
|
893 |
+
d="M1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
894 |
+
<glyph glyph-name="reply" unicode="" horiz-adv-x="1792"
|
895 |
+
d="M1792 416q0 -166 -127 -451q-3 -7 -10.5 -24t-13.5 -30t-13 -22q-12 -17 -28 -17q-15 0 -23.5 10t-8.5 25q0 9 2.5 26.5t2.5 23.5q5 68 5 123q0 101 -17.5 181t-48.5 138.5t-80 101t-105.5 69.5t-133 42.5t-154 21.5t-175.5 6h-224v-256q0 -26 -19 -45t-45 -19t-45 19
|
896 |
+
l-512 512q-19 19 -19 45t19 45l512 512q19 19 45 19t45 -19t19 -45v-256h224q713 0 875 -403q53 -134 53 -333z" />
|
897 |
+
<glyph glyph-name="github_alt" unicode="" horiz-adv-x="1664"
|
898 |
+
d="M640 320q0 -40 -12.5 -82t-43 -76t-72.5 -34t-72.5 34t-43 76t-12.5 82t12.5 82t43 76t72.5 34t72.5 -34t43 -76t12.5 -82zM1280 320q0 -40 -12.5 -82t-43 -76t-72.5 -34t-72.5 34t-43 76t-12.5 82t12.5 82t43 76t72.5 34t72.5 -34t43 -76t12.5 -82zM1440 320
|
899 |
+
q0 120 -69 204t-187 84q-41 0 -195 -21q-71 -11 -157 -11t-157 11q-152 21 -195 21q-118 0 -187 -84t-69 -204q0 -88 32 -153.5t81 -103t122 -60t140 -29.5t149 -7h168q82 0 149 7t140 29.5t122 60t81 103t32 153.5zM1664 496q0 -207 -61 -331q-38 -77 -105.5 -133t-141 -86
|
900 |
+
t-170 -47.5t-171.5 -22t-167 -4.5q-78 0 -142 3t-147.5 12.5t-152.5 30t-137 51.5t-121 81t-86 115q-62 123 -62 331q0 237 136 396q-27 82 -27 170q0 116 51 218q108 0 190 -39.5t189 -123.5q147 35 309 35q148 0 280 -32q105 82 187 121t189 39q51 -102 51 -218
|
901 |
+
q0 -87 -27 -168q136 -160 136 -398z" />
|
902 |
+
<glyph glyph-name="folder_close_alt" unicode="" horiz-adv-x="1664"
|
903 |
+
d="M1536 224v704q0 40 -28 68t-68 28h-704q-40 0 -68 28t-28 68v64q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68v-960q0 -40 28 -68t68 -28h1216q40 0 68 28t28 68zM1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320
|
904 |
+
q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z" />
|
905 |
+
<glyph glyph-name="folder_open_alt" unicode="" horiz-adv-x="1920"
|
906 |
+
d="M1781 605q0 35 -53 35h-1088q-40 0 -85.5 -21.5t-71.5 -52.5l-294 -363q-18 -24 -18 -40q0 -35 53 -35h1088q40 0 86 22t71 53l294 363q18 22 18 39zM640 768h768v160q0 40 -28 68t-68 28h-576q-40 0 -68 28t-28 68v64q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68
|
907 |
+
v-853l256 315q44 53 116 87.5t140 34.5zM1909 605q0 -62 -46 -120l-295 -363q-43 -53 -116 -87.5t-140 -34.5h-1088q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158v-160h192q54 0 99 -24.5t67 -70.5q15 -32 15 -68z
|
908 |
+
" />
|
909 |
+
<glyph glyph-name="expand_alt" unicode="" horiz-adv-x="1792"
|
910 |
+
/>
|
911 |
+
<glyph glyph-name="collapse_alt" unicode="" horiz-adv-x="1792"
|
912 |
+
/>
|
913 |
+
<glyph glyph-name="smile" unicode=""
|
914 |
+
d="M1134 461q-37 -121 -138 -195t-228 -74t-228 74t-138 195q-8 25 4 48.5t38 31.5q25 8 48.5 -4t31.5 -38q25 -80 92.5 -129.5t151.5 -49.5t151.5 49.5t92.5 129.5q8 26 32 38t49 4t37 -31.5t4 -48.5zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5
|
915 |
+
t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5
|
916 |
+
t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
917 |
+
<glyph glyph-name="frown" unicode=""
|
918 |
+
d="M1134 307q8 -25 -4 -48.5t-37 -31.5t-49 4t-32 38q-25 80 -92.5 129.5t-151.5 49.5t-151.5 -49.5t-92.5 -129.5q-8 -26 -31.5 -38t-48.5 -4q-26 8 -38 31.5t-4 48.5q37 121 138 195t228 74t228 -74t138 -195zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5
|
919 |
+
t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204
|
920 |
+
t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
921 |
+
<glyph glyph-name="meh" unicode=""
|
922 |
+
d="M1152 448q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h640q26 0 45 -19t19 -45zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5
|
923 |
+
t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640
|
924 |
+
q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
925 |
+
<glyph glyph-name="gamepad" unicode="" horiz-adv-x="1920"
|
926 |
+
d="M832 448v128q0 14 -9 23t-23 9h-192v192q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-192h-192q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h192v-192q0 -14 9 -23t23 -9h128q14 0 23 9t9 23v192h192q14 0 23 9t9 23zM1408 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5
|
927 |
+
t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 640q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1920 512q0 -212 -150 -362t-362 -150q-192 0 -338 128h-220q-146 -128 -338 -128q-212 0 -362 150
|
928 |
+
t-150 362t150 362t362 150h896q212 0 362 -150t150 -362z" />
|
929 |
+
<glyph glyph-name="keyboard" unicode="" horiz-adv-x="1920"
|
930 |
+
d="M384 368v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM512 624v-96q0 -16 -16 -16h-224q-16 0 -16 16v96q0 16 16 16h224q16 0 16 -16zM384 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1408 368v-96q0 -16 -16 -16
|
931 |
+
h-864q-16 0 -16 16v96q0 16 16 16h864q16 0 16 -16zM768 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM640 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1024 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16
|
932 |
+
h96q16 0 16 -16zM896 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1280 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1664 368v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1152 880v-96
|
933 |
+
q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1408 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1664 880v-352q0 -16 -16 -16h-224q-16 0 -16 16v96q0 16 16 16h112v240q0 16 16 16h96q16 0 16 -16zM1792 128v896h-1664v-896
|
934 |
+
h1664zM1920 1024v-896q0 -53 -37.5 -90.5t-90.5 -37.5h-1664q-53 0 -90.5 37.5t-37.5 90.5v896q0 53 37.5 90.5t90.5 37.5h1664q53 0 90.5 -37.5t37.5 -90.5z" />
|
935 |
+
<glyph glyph-name="flag_alt" unicode="" horiz-adv-x="1792"
|
936 |
+
d="M1664 491v616q-169 -91 -306 -91q-82 0 -145 32q-100 49 -184 76.5t-178 27.5q-173 0 -403 -127v-599q245 113 433 113q55 0 103.5 -7.5t98 -26t77 -31t82.5 -39.5l28 -14q44 -22 101 -22q120 0 293 92zM320 1280q0 -35 -17.5 -64t-46.5 -46v-1266q0 -14 -9 -23t-23 -9
|
937 |
+
h-64q-14 0 -23 9t-9 23v1266q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -39 -35 -57q-10 -5 -17 -9q-218 -116 -369 -116q-88 0 -158 35l-28 14q-64 33 -99 48t-91 29t-114 14q-102 0 -235.5 -44t-228.5 -102
|
938 |
+
q-15 -9 -33 -9q-16 0 -32 8q-32 19 -32 56v742q0 35 31 55q35 21 78.5 42.5t114 52t152.5 49.5t155 19q112 0 209 -31t209 -86q38 -19 89 -19q122 0 310 112q22 12 31 17q31 16 62 -2q31 -20 31 -55z" />
|
939 |
+
<glyph glyph-name="flag_checkered" unicode="" horiz-adv-x="1792"
|
940 |
+
d="M832 536v192q-181 -16 -384 -117v-185q205 96 384 110zM832 954v197q-172 -8 -384 -126v-189q215 111 384 118zM1664 491v184q-235 -116 -384 -71v224q-20 6 -39 15q-5 3 -33 17t-34.5 17t-31.5 15t-34.5 15.5t-32.5 13t-36 12.5t-35 8.5t-39.5 7.5t-39.5 4t-44 2
|
941 |
+
q-23 0 -49 -3v-222h19q102 0 192.5 -29t197.5 -82q19 -9 39 -15v-188q42 -17 91 -17q120 0 293 92zM1664 918v189q-169 -91 -306 -91q-45 0 -78 8v-196q148 -42 384 90zM320 1280q0 -35 -17.5 -64t-46.5 -46v-1266q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v1266
|
942 |
+
q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -39 -35 -57q-10 -5 -17 -9q-218 -116 -369 -116q-88 0 -158 35l-28 14q-64 33 -99 48t-91 29t-114 14q-102 0 -235.5 -44t-228.5 -102q-15 -9 -33 -9q-16 0 -32 8
|
943 |
+
q-32 19 -32 56v742q0 35 31 55q35 21 78.5 42.5t114 52t152.5 49.5t155 19q112 0 209 -31t209 -86q38 -19 89 -19q122 0 310 112q22 12 31 17q31 16 62 -2q31 -20 31 -55z" />
|
944 |
+
<glyph glyph-name="terminal" unicode="" horiz-adv-x="1664"
|
945 |
+
d="M585 553l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23zM1664 96v-64q0 -14 -9 -23t-23 -9h-960q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h960q14 0 23 -9
|
946 |
+
t9 -23z" />
|
947 |
+
<glyph glyph-name="code" unicode="" horiz-adv-x="1920"
|
948 |
+
d="M617 137l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23t-10 -23zM1208 1204l-373 -1291q-4 -13 -15.5 -19.5t-23.5 -2.5l-62 17q-13 4 -19.5 15.5t-2.5 24.5
|
949 |
+
l373 1291q4 13 15.5 19.5t23.5 2.5l62 -17q13 -4 19.5 -15.5t2.5 -24.5zM1865 553l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23z" />
|
950 |
+
<glyph glyph-name="reply_all" unicode="" horiz-adv-x="1792"
|
951 |
+
d="M640 454v-70q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-512 512q-19 19 -19 45t19 45l512 512q29 31 70 14q39 -17 39 -59v-69l-397 -398q-19 -19 -19 -45t19 -45zM1792 416q0 -58 -17 -133.5t-38.5 -138t-48 -125t-40.5 -90.5l-20 -40q-8 -17 -28 -17q-6 0 -9 1
|
952 |
+
q-25 8 -23 34q43 400 -106 565q-64 71 -170.5 110.5t-267.5 52.5v-251q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-512 512q-19 19 -19 45t19 45l512 512q29 31 70 14q39 -17 39 -59v-262q411 -28 599 -221q169 -173 169 -509z" />
|
953 |
+
<glyph glyph-name="star_half_empty" unicode="" horiz-adv-x="1664"
|
954 |
+
d="M1186 579l257 250l-356 52l-66 10l-30 60l-159 322v-963l59 -31l318 -168l-60 355l-12 66zM1638 841l-363 -354l86 -500q5 -33 -6 -51.5t-34 -18.5q-17 0 -40 12l-449 236l-449 -236q-23 -12 -40 -12q-23 0 -34 18.5t-6 51.5l86 500l-364 354q-32 32 -23 59.5t54 34.5
|
955 |
+
l502 73l225 455q20 41 49 41q28 0 49 -41l225 -455l502 -73q45 -7 54 -34.5t-24 -59.5z" />
|
956 |
+
<glyph glyph-name="location_arrow" unicode="" horiz-adv-x="1408"
|
957 |
+
d="M1401 1187l-640 -1280q-17 -35 -57 -35q-5 0 -15 2q-22 5 -35.5 22.5t-13.5 39.5v576h-576q-22 0 -39.5 13.5t-22.5 35.5t4 42t29 30l1280 640q13 7 29 7q27 0 45 -19q15 -14 18.5 -34.5t-6.5 -39.5z" />
|
958 |
+
<glyph glyph-name="crop" unicode="" horiz-adv-x="1664"
|
959 |
+
d="M557 256h595v595zM512 301l595 595h-595v-595zM1664 224v-192q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v224h-864q-14 0 -23 9t-9 23v864h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224v224q0 14 9 23t23 9h192q14 0 23 -9t9 -23
|
960 |
+
v-224h851l246 247q10 9 23 9t23 -9q9 -10 9 -23t-9 -23l-247 -246v-851h224q14 0 23 -9t9 -23z" />
|
961 |
+
<glyph glyph-name="code_fork" unicode="" horiz-adv-x="1024"
|
962 |
+
d="M288 64q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM288 1216q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM928 1088q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1024 1088q0 -52 -26 -96.5t-70 -69.5
|
963 |
+
q-2 -287 -226 -414q-67 -38 -203 -81q-128 -40 -169.5 -71t-41.5 -100v-26q44 -25 70 -69.5t26 -96.5q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 52 26 96.5t70 69.5v820q-44 25 -70 69.5t-26 96.5q0 80 56 136t136 56t136 -56t56 -136q0 -52 -26 -96.5t-70 -69.5v-497
|
964 |
+
q54 26 154 57q55 17 87.5 29.5t70.5 31t59 39.5t40.5 51t28 69.5t8.5 91.5q-44 25 -70 69.5t-26 96.5q0 80 56 136t136 56t136 -56t56 -136z" />
|
965 |
+
<glyph glyph-name="unlink" unicode="" horiz-adv-x="1664"
|
966 |
+
d="M439 265l-256 -256q-11 -9 -23 -9t-23 9q-9 10 -9 23t9 23l256 256q10 9 23 9t23 -9q9 -10 9 -23t-9 -23zM608 224v-320q0 -14 -9 -23t-23 -9t-23 9t-9 23v320q0 14 9 23t23 9t23 -9t9 -23zM384 448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23t9 23t23 9h320
|
967 |
+
q14 0 23 -9t9 -23zM1648 320q0 -120 -85 -203l-147 -146q-83 -83 -203 -83q-121 0 -204 85l-334 335q-21 21 -42 56l239 18l273 -274q27 -27 68 -27.5t68 26.5l147 146q28 28 28 67q0 40 -28 68l-274 275l18 239q35 -21 56 -42l336 -336q84 -86 84 -204zM1031 1044l-239 -18
|
968 |
+
l-273 274q-28 28 -68 28q-39 0 -68 -27l-147 -146q-28 -28 -28 -67q0 -40 28 -68l274 -274l-18 -240q-35 21 -56 42l-336 336q-84 86 -84 204q0 120 85 203l147 146q83 83 203 83q121 0 204 -85l334 -335q21 -21 42 -56zM1664 960q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9
|
969 |
+
t-9 23t9 23t23 9h320q14 0 23 -9t9 -23zM1120 1504v-320q0 -14 -9 -23t-23 -9t-23 9t-9 23v320q0 14 9 23t23 9t23 -9t9 -23zM1527 1353l-256 -256q-11 -9 -23 -9t-23 9q-9 10 -9 23t9 23l256 256q10 9 23 9t23 -9q9 -10 9 -23t-9 -23z" />
|
970 |
+
<glyph glyph-name="question" unicode="" horiz-adv-x="1024"
|
971 |
+
d="M704 280v-240q0 -16 -12 -28t-28 -12h-240q-16 0 -28 12t-12 28v240q0 16 12 28t28 12h240q16 0 28 -12t12 -28zM1020 880q0 -54 -15.5 -101t-35 -76.5t-55 -59.5t-57.5 -43.5t-61 -35.5q-41 -23 -68.5 -65t-27.5 -67q0 -17 -12 -32.5t-28 -15.5h-240q-15 0 -25.5 18.5
|
972 |
+
t-10.5 37.5v45q0 83 65 156.5t143 108.5q59 27 84 56t25 76q0 42 -46.5 74t-107.5 32q-65 0 -108 -29q-35 -25 -107 -115q-13 -16 -31 -16q-12 0 -25 8l-164 125q-13 10 -15.5 25t5.5 28q160 266 464 266q80 0 161 -31t146 -83t106 -127.5t41 -158.5z" />
|
973 |
+
<glyph glyph-name="_279" unicode="" horiz-adv-x="640"
|
974 |
+
d="M640 192v-128q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64v384h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-576h64q26 0 45 -19t19 -45zM512 1344v-192q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v192
|
975 |
+
q0 26 19 45t45 19h256q26 0 45 -19t19 -45z" />
|
976 |
+
<glyph glyph-name="exclamation" unicode="" horiz-adv-x="640"
|
977 |
+
d="M512 288v-224q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v224q0 26 19 45t45 19h256q26 0 45 -19t19 -45zM542 1344l-28 -768q-1 -26 -20.5 -45t-45.5 -19h-256q-26 0 -45.5 19t-20.5 45l-28 768q-1 26 17.5 45t44.5 19h320q26 0 44.5 -19t17.5 -45z" />
|
978 |
+
<glyph glyph-name="superscript" unicode=""
|
979 |
+
d="M897 167v-167h-248l-159 252l-24 42q-8 9 -11 21h-3q-1 -3 -2.5 -6.5t-3.5 -8t-3 -6.5q-10 -20 -25 -44l-155 -250h-258v167h128l197 291l-185 272h-137v168h276l139 -228q2 -4 23 -42q8 -9 11 -21h3q3 9 11 21l25 42l140 228h257v-168h-125l-184 -267l204 -296h109z
|
980 |
+
M1534 846v-206h-514l-3 27q-4 28 -4 46q0 64 26 117t65 86.5t84 65t84 54.5t65 54t26 64q0 38 -29.5 62.5t-70.5 24.5q-51 0 -97 -39q-14 -11 -36 -38l-105 92q26 37 63 66q83 65 188 65q110 0 178 -59.5t68 -158.5q0 -56 -24.5 -103t-62 -76.5t-81.5 -58.5t-82 -50.5
|
981 |
+
t-65.5 -51.5t-30.5 -63h232v80h126z" />
|
982 |
+
<glyph glyph-name="subscript" unicode=""
|
983 |
+
d="M897 167v-167h-248l-159 252l-24 42q-8 9 -11 21h-3q-1 -3 -2.5 -6.5t-3.5 -8t-3 -6.5q-10 -20 -25 -44l-155 -250h-258v167h128l197 291l-185 272h-137v168h276l139 -228q2 -4 23 -42q8 -9 11 -21h3q3 9 11 21l25 42l140 228h257v-168h-125l-184 -267l204 -296h109z
|
984 |
+
M1536 -50v-206h-514l-4 27q-3 45 -3 46q0 64 26 117t65 86.5t84 65t84 54.5t65 54t26 64q0 38 -29.5 62.5t-70.5 24.5q-51 0 -97 -39q-14 -11 -36 -38l-105 92q26 37 63 66q80 65 188 65q110 0 178 -59.5t68 -158.5q0 -66 -34.5 -118.5t-84 -86t-99.5 -62.5t-87 -63t-41 -73
|
985 |
+
h232v80h126z" />
|
986 |
+
<glyph glyph-name="_283" unicode="" horiz-adv-x="1920"
|
987 |
+
d="M896 128l336 384h-768l-336 -384h768zM1909 1205q15 -34 9.5 -71.5t-30.5 -65.5l-896 -1024q-38 -44 -96 -44h-768q-38 0 -69.5 20.5t-47.5 54.5q-15 34 -9.5 71.5t30.5 65.5l896 1024q38 44 96 44h768q38 0 69.5 -20.5t47.5 -54.5z" />
|
988 |
+
<glyph glyph-name="puzzle_piece" unicode="" horiz-adv-x="1664"
|
989 |
+
d="M1664 438q0 -81 -44.5 -135t-123.5 -54q-41 0 -77.5 17.5t-59 38t-56.5 38t-71 17.5q-110 0 -110 -124q0 -39 16 -115t15 -115v-5q-22 0 -33 -1q-34 -3 -97.5 -11.5t-115.5 -13.5t-98 -5q-61 0 -103 26.5t-42 83.5q0 37 17.5 71t38 56.5t38 59t17.5 77.5q0 79 -54 123.5
|
990 |
+
t-135 44.5q-84 0 -143 -45.5t-59 -127.5q0 -43 15 -83t33.5 -64.5t33.5 -53t15 -50.5q0 -45 -46 -89q-37 -35 -117 -35q-95 0 -245 24q-9 2 -27.5 4t-27.5 4l-13 2q-1 0 -3 1q-2 0 -2 1v1024q2 -1 17.5 -3.5t34 -5t21.5 -3.5q150 -24 245 -24q80 0 117 35q46 44 46 89
|
991 |
+
q0 22 -15 50.5t-33.5 53t-33.5 64.5t-15 83q0 82 59 127.5t144 45.5q80 0 134 -44.5t54 -123.5q0 -41 -17.5 -77.5t-38 -59t-38 -56.5t-17.5 -71q0 -57 42 -83.5t103 -26.5q64 0 180 15t163 17v-2q-1 -2 -3.5 -17.5t-5 -34t-3.5 -21.5q-24 -150 -24 -245q0 -80 35 -117
|
992 |
+
q44 -46 89 -46q22 0 50.5 15t53 33.5t64.5 33.5t83 15q82 0 127.5 -59t45.5 -143z" />
|
993 |
+
<glyph glyph-name="microphone" unicode="" horiz-adv-x="1152"
|
994 |
+
d="M1152 832v-128q0 -221 -147.5 -384.5t-364.5 -187.5v-132h256q26 0 45 -19t19 -45t-19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h256v132q-217 24 -364.5 187.5t-147.5 384.5v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -185 131.5 -316.5t316.5 -131.5
|
995 |
+
t316.5 131.5t131.5 316.5v128q0 26 19 45t45 19t45 -19t19 -45zM896 1216v-512q0 -132 -94 -226t-226 -94t-226 94t-94 226v512q0 132 94 226t226 94t226 -94t94 -226z" />
|
996 |
+
<glyph glyph-name="microphone_off" unicode="" horiz-adv-x="1408"
|
997 |
+
d="M271 591l-101 -101q-42 103 -42 214v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -53 15 -113zM1385 1193l-361 -361v-128q0 -132 -94 -226t-226 -94q-55 0 -109 19l-96 -96q97 -51 205 -51q185 0 316.5 131.5t131.5 316.5v128q0 26 19 45t45 19t45 -19t19 -45v-128
|
998 |
+
q0 -221 -147.5 -384.5t-364.5 -187.5v-132h256q26 0 45 -19t19 -45t-19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h256v132q-125 13 -235 81l-254 -254q-10 -10 -23 -10t-23 10l-82 82q-10 10 -10 23t10 23l1234 1234q10 10 23 10t23 -10l82 -82q10 -10 10 -23
|
999 |
+
t-10 -23zM1005 1325l-621 -621v512q0 132 94 226t226 94q102 0 184.5 -59t116.5 -152z" />
|
1000 |
+
<glyph glyph-name="shield" unicode="" horiz-adv-x="1280"
|
1001 |
+
d="M1088 576v640h-448v-1137q119 63 213 137q235 184 235 360zM1280 1344v-768q0 -86 -33.5 -170.5t-83 -150t-118 -127.5t-126.5 -103t-121 -77.5t-89.5 -49.5t-42.5 -20q-12 -6 -26 -6t-26 6q-16 7 -42.5 20t-89.5 49.5t-121 77.5t-126.5 103t-118 127.5t-83 150
|
1002 |
+
t-33.5 170.5v768q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
|
1003 |
+
<glyph glyph-name="calendar_empty" unicode="" horiz-adv-x="1664"
|
1004 |
+
d="M128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280
|
1005 |
+
q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
|
1006 |
+
<glyph glyph-name="fire_extinguisher" unicode="" horiz-adv-x="1408"
|
1007 |
+
d="M512 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 1376v-320q0 -16 -12 -25q-8 -7 -20 -7q-4 0 -7 1l-448 96q-11 2 -18 11t-7 20h-256v-102q111 -23 183.5 -111t72.5 -203v-800q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v800
|
1008 |
+
q0 106 62.5 190.5t161.5 114.5v111h-32q-59 0 -115 -23.5t-91.5 -53t-66 -66.5t-40.5 -53.5t-14 -24.5q-17 -35 -57 -35q-16 0 -29 7q-23 12 -31.5 37t3.5 49q5 10 14.5 26t37.5 53.5t60.5 70t85 67t108.5 52.5q-25 42 -25 86q0 66 47 113t113 47t113 -47t47 -113
|
1009 |
+
q0 -33 -14 -64h302q0 11 7 20t18 11l448 96q3 1 7 1q12 0 20 -7q12 -9 12 -25z" />
|
1010 |
+
<glyph glyph-name="rocket" unicode="" horiz-adv-x="1664"
|
1011 |
+
d="M1440 1088q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1664 1376q0 -249 -75.5 -430.5t-253.5 -360.5q-81 -80 -195 -176l-20 -379q-2 -16 -16 -26l-384 -224q-7 -4 -16 -4q-12 0 -23 9l-64 64q-13 14 -8 32l85 276l-281 281l-276 -85q-3 -1 -9 -1
|
1012 |
+
q-14 0 -23 9l-64 64q-17 19 -5 39l224 384q10 14 26 16l379 20q96 114 176 195q188 187 358 258t431 71q14 0 24 -9.5t10 -22.5z" />
|
1013 |
+
<glyph glyph-name="maxcdn" unicode="" horiz-adv-x="1792"
|
1014 |
+
d="M1745 763l-164 -763h-334l178 832q13 56 -15 88q-27 33 -83 33h-169l-204 -953h-334l204 953h-286l-204 -953h-334l204 953l-153 327h1276q101 0 189.5 -40.5t147.5 -113.5q60 -73 81 -168.5t0 -194.5z" />
|
1015 |
+
<glyph glyph-name="chevron_sign_left" unicode=""
|
1016 |
+
d="M909 141l102 102q19 19 19 45t-19 45l-307 307l307 307q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-454 -454q-19 -19 -19 -45t19 -45l454 -454q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5
|
1017 |
+
t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
1018 |
+
<glyph glyph-name="chevron_sign_right" unicode=""
|
1019 |
+
d="M717 141l454 454q19 19 19 45t-19 45l-454 454q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l307 -307l-307 -307q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5
|
1020 |
+
t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
1021 |
+
<glyph glyph-name="chevron_sign_up" unicode=""
|
1022 |
+
d="M1165 397l102 102q19 19 19 45t-19 45l-454 454q-19 19 -45 19t-45 -19l-454 -454q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19l307 307l307 -307q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5
|
1023 |
+
t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
1024 |
+
<glyph glyph-name="chevron_sign_down" unicode=""
|
1025 |
+
d="M813 237l454 454q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-307 -307l-307 307q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l454 -454q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5
|
1026 |
+
t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
1027 |
+
<glyph glyph-name="html5" unicode="" horiz-adv-x="1408"
|
1028 |
+
d="M1130 939l16 175h-884l47 -534h612l-22 -228l-197 -53l-196 53l-13 140h-175l22 -278l362 -100h4v1l359 99l50 544h-644l-15 181h674zM0 1408h1408l-128 -1438l-578 -162l-574 162z" />
|
1029 |
+
<glyph glyph-name="css3" unicode="" horiz-adv-x="1792"
|
1030 |
+
d="M275 1408h1505l-266 -1333l-804 -267l-698 267l71 356h297l-29 -147l422 -161l486 161l68 339h-1208l58 297h1209l38 191h-1208z" />
|
1031 |
+
<glyph glyph-name="anchor" unicode="" horiz-adv-x="1792"
|
1032 |
+
d="M960 1280q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1792 352v-352q0 -22 -20 -30q-8 -2 -12 -2q-12 0 -23 9l-93 93q-119 -143 -318.5 -226.5t-429.5 -83.5t-429.5 83.5t-318.5 226.5l-93 -93q-9 -9 -23 -9q-4 0 -12 2q-20 8 -20 30v352
|
1033 |
+
q0 14 9 23t23 9h352q22 0 30 -20q8 -19 -7 -35l-100 -100q67 -91 189.5 -153.5t271.5 -82.5v647h-192q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h192v163q-58 34 -93 92.5t-35 128.5q0 106 75 181t181 75t181 -75t75 -181q0 -70 -35 -128.5t-93 -92.5v-163h192q26 0 45 -19
|
1034 |
+
t19 -45v-128q0 -26 -19 -45t-45 -19h-192v-647q149 20 271.5 82.5t189.5 153.5l-100 100q-15 16 -7 35q8 20 30 20h352q14 0 23 -9t9 -23z" />
|
1035 |
+
<glyph glyph-name="unlock_alt" unicode="" horiz-adv-x="1152"
|
1036 |
+
d="M1056 768q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v320q0 185 131.5 316.5t316.5 131.5t316.5 -131.5t131.5 -316.5q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45q0 106 -75 181t-181 75t-181 -75t-75 -181
|
1037 |
+
v-320h736z" />
|
1038 |
+
<glyph glyph-name="bullseye" unicode=""
|
1039 |
+
d="M1024 640q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM1152 640q0 159 -112.5 271.5t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM1280 640q0 -212 -150 -362t-362 -150t-362 150
|
1040 |
+
t-150 362t150 362t362 150t362 -150t150 -362zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640
|
1041 |
+
q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
1042 |
+
<glyph glyph-name="ellipsis_horizontal" unicode="" horiz-adv-x="1408"
|
1043 |
+
d="M384 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM896 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM1408 800v-192q0 -40 -28 -68t-68 -28h-192
|
1044 |
+
q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68z" />
|
1045 |
+
<glyph glyph-name="ellipsis_vertical" unicode="" horiz-adv-x="384"
|
1046 |
+
d="M384 288v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM384 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM384 1312v-192q0 -40 -28 -68t-68 -28h-192
|
1047 |
+
q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68z" />
|
1048 |
+
<glyph glyph-name="_303" unicode=""
|
1049 |
+
d="M512 256q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM863 162q-13 233 -176.5 396.5t-396.5 176.5q-14 1 -24 -9t-10 -23v-128q0 -13 8.5 -22t21.5 -10q154 -11 264 -121t121 -264q1 -13 10 -21.5t22 -8.5h128
|
1050 |
+
q13 0 23 10t9 24zM1247 161q-5 154 -56 297.5t-139.5 260t-205 205t-260 139.5t-297.5 56q-14 1 -23 -9q-10 -10 -10 -23v-128q0 -13 9 -22t22 -10q204 -7 378 -111.5t278.5 -278.5t111.5 -378q1 -13 10 -22t22 -9h128q13 0 23 10q11 9 9 23zM1536 1120v-960
|
1051 |
+
q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
|
1052 |
+
<glyph glyph-name="play_sign" unicode=""
|
1053 |
+
d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM1152 585q32 18 32 55t-32 55l-544 320q-31 19 -64 1q-32 -19 -32 -56v-640q0 -37 32 -56
|
1054 |
+
q16 -8 32 -8q17 0 32 9z" />
|
1055 |
+
<glyph glyph-name="ticket" unicode="" horiz-adv-x="1792"
|
1056 |
+
d="M1024 1084l316 -316l-572 -572l-316 316zM813 105l618 618q19 19 19 45t-19 45l-362 362q-18 18 -45 18t-45 -18l-618 -618q-19 -19 -19 -45t19 -45l362 -362q18 -18 45 -18t45 18zM1702 742l-907 -908q-37 -37 -90.5 -37t-90.5 37l-126 126q56 56 56 136t-56 136
|
1057 |
+
t-136 56t-136 -56l-125 126q-37 37 -37 90.5t37 90.5l907 906q37 37 90.5 37t90.5 -37l125 -125q-56 -56 -56 -136t56 -136t136 -56t136 56l126 -125q37 -37 37 -90.5t-37 -90.5z" />
|
1058 |
+
<glyph glyph-name="minus_sign_alt" unicode=""
|
1059 |
+
d="M1280 576v128q0 26 -19 45t-45 19h-896q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h896q26 0 45 19t19 45zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5
|
1060 |
+
t84.5 -203.5z" />
|
1061 |
+
<glyph glyph-name="check_minus" unicode="" horiz-adv-x="1408"
|
1062 |
+
d="M1152 736v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h832q14 0 23 -9t9 -23zM1280 288v832q0 66 -47 113t-113 47h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113zM1408 1120v-832q0 -119 -84.5 -203.5
|
1063 |
+
t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q119 0 203.5 -84.5t84.5 -203.5z" />
|
1064 |
+
<glyph glyph-name="level_up" unicode="" horiz-adv-x="1024"
|
1065 |
+
d="M1018 933q-18 -37 -58 -37h-192v-864q0 -14 -9 -23t-23 -9h-704q-21 0 -29 18q-8 20 4 35l160 192q9 11 25 11h320v640h-192q-40 0 -58 37q-17 37 9 68l320 384q18 22 49 22t49 -22l320 -384q27 -32 9 -68z" />
|
1066 |
+
<glyph glyph-name="level_down" unicode="" horiz-adv-x="1024"
|
1067 |
+
d="M32 1280h704q13 0 22.5 -9.5t9.5 -23.5v-863h192q40 0 58 -37t-9 -69l-320 -384q-18 -22 -49 -22t-49 22l-320 384q-26 31 -9 69q18 37 58 37h192v640h-320q-14 0 -25 11l-160 192q-13 14 -4 34q9 19 29 19z" />
|
1068 |
+
<glyph glyph-name="check_sign" unicode=""
|
1069 |
+
d="M685 237l614 614q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-467 -467l-211 211q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l358 -358q19 -19 45 -19t45 19zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5
|
1070 |
+
t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
|
1071 |
+
<glyph glyph-name="edit_sign" unicode=""
|
1072 |
+
d="M404 428l152 -152l-52 -52h-56v96h-96v56zM818 818q14 -13 -3 -30l-291 -291q-17 -17 -30 -3q-14 13 3 30l291 291q17 17 30 3zM544 128l544 544l-288 288l-544 -544v-288h288zM1152 736l92 92q28 28 28 68t-28 68l-152 152q-28 28 -68 28t-68 -28l-92 -92zM1536 1120
|
1073 |
+
v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
|
1074 |
+
<glyph glyph-name="_312" unicode=""
|
1075 |
+
d="M1280 608v480q0 26 -19 45t-45 19h-480q-42 0 -59 -39q-17 -41 14 -70l144 -144l-534 -534q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19l534 534l144 -144q18 -19 45 -19q12 0 25 5q39 17 39 59zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960
|
1076 |
+
q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
|
1077 |
+
<glyph glyph-name="share_sign" unicode=""
|
1078 |
+
d="M1005 435l352 352q19 19 19 45t-19 45l-352 352q-30 31 -69 14q-40 -17 -40 -59v-160q-119 0 -216 -19.5t-162.5 -51t-114 -79t-76.5 -95.5t-44.5 -109t-21.5 -111.5t-5 -110.5q0 -181 167 -404q11 -12 25 -12q7 0 13 3q22 9 19 33q-44 354 62 473q46 52 130 75.5
|
1079 |
+
t224 23.5v-160q0 -42 40 -59q12 -5 24 -5q26 0 45 19zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
|
1080 |
+
<glyph glyph-name="compass" unicode=""
|
1081 |
+
d="M640 448l256 128l-256 128v-256zM1024 1039v-542l-512 -256v542zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103
|
1082 |
+
t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
1083 |
+
<glyph glyph-name="collapse" unicode=""
|
1084 |
+
d="M1145 861q18 -35 -5 -66l-320 -448q-19 -27 -52 -27t-52 27l-320 448q-23 31 -5 66q17 35 57 35h640q40 0 57 -35zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1536 1120
|
1085 |
+
v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
|
1086 |
+
<glyph glyph-name="collapse_top" unicode=""
|
1087 |
+
d="M1145 419q-17 -35 -57 -35h-640q-40 0 -57 35q-18 35 5 66l320 448q19 27 52 27t52 -27l320 -448q23 -31 5 -66zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1536 1120v-960
|
1088 |
+
q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
|
1089 |
+
<glyph glyph-name="_317" unicode=""
|
1090 |
+
d="M1088 640q0 -33 -27 -52l-448 -320q-31 -23 -66 -5q-35 17 -35 57v640q0 40 35 57q35 18 66 -5l448 -320q27 -19 27 -52zM1280 160v960q0 14 -9 23t-23 9h-960q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h960q14 0 23 9t9 23zM1536 1120v-960q0 -119 -84.5 -203.5
|
1091 |
+
t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
|
1092 |
+
<glyph glyph-name="eur" unicode="" horiz-adv-x="1024"
|
1093 |
+
d="M976 229l35 -159q3 -12 -3 -22.5t-17 -14.5l-5 -1q-4 -2 -10.5 -3.5t-16 -4.5t-21.5 -5.5t-25.5 -5t-30 -5t-33.5 -4.5t-36.5 -3t-38.5 -1q-234 0 -409 130.5t-238 351.5h-95q-13 0 -22.5 9.5t-9.5 22.5v113q0 13 9.5 22.5t22.5 9.5h66q-2 57 1 105h-67q-14 0 -23 9
|
1094 |
+
t-9 23v114q0 14 9 23t23 9h98q67 210 243.5 338t400.5 128q102 0 194 -23q11 -3 20 -15q6 -11 3 -24l-43 -159q-3 -13 -14 -19.5t-24 -2.5l-4 1q-4 1 -11.5 2.5l-17.5 3.5t-22.5 3.5t-26 3t-29 2.5t-29.5 1q-126 0 -226 -64t-150 -176h468q16 0 25 -12q10 -12 7 -26
|
1095 |
+
l-24 -114q-5 -26 -32 -26h-488q-3 -37 0 -105h459q15 0 25 -12q9 -12 6 -27l-24 -112q-2 -11 -11 -18.5t-20 -7.5h-387q48 -117 149.5 -185.5t228.5 -68.5q18 0 36 1.5t33.5 3.5t29.5 4.5t24.5 5t18.5 4.5l12 3l5 2q13 5 26 -2q12 -7 15 -21z" />
|
1096 |
+
<glyph glyph-name="gbp" unicode="" horiz-adv-x="1024"
|
1097 |
+
d="M1020 399v-367q0 -14 -9 -23t-23 -9h-956q-14 0 -23 9t-9 23v150q0 13 9.5 22.5t22.5 9.5h97v383h-95q-14 0 -23 9.5t-9 22.5v131q0 14 9 23t23 9h95v223q0 171 123.5 282t314.5 111q185 0 335 -125q9 -8 10 -20.5t-7 -22.5l-103 -127q-9 -11 -22 -12q-13 -2 -23 7
|
1098 |
+
q-5 5 -26 19t-69 32t-93 18q-85 0 -137 -47t-52 -123v-215h305q13 0 22.5 -9t9.5 -23v-131q0 -13 -9.5 -22.5t-22.5 -9.5h-305v-379h414v181q0 13 9 22.5t23 9.5h162q14 0 23 -9.5t9 -22.5z" />
|
1099 |
+
<glyph glyph-name="usd" unicode="" horiz-adv-x="1024"
|
1100 |
+
d="M978 351q0 -153 -99.5 -263.5t-258.5 -136.5v-175q0 -14 -9 -23t-23 -9h-135q-13 0 -22.5 9.5t-9.5 22.5v175q-66 9 -127.5 31t-101.5 44.5t-74 48t-46.5 37.5t-17.5 18q-17 21 -2 41l103 135q7 10 23 12q15 2 24 -9l2 -2q113 -99 243 -125q37 -8 74 -8q81 0 142.5 43
|
1101 |
+
t61.5 122q0 28 -15 53t-33.5 42t-58.5 37.5t-66 32t-80 32.5q-39 16 -61.5 25t-61.5 26.5t-62.5 31t-56.5 35.5t-53.5 42.5t-43.5 49t-35.5 58t-21 66.5t-8.5 78q0 138 98 242t255 134v180q0 13 9.5 22.5t22.5 9.5h135q14 0 23 -9t9 -23v-176q57 -6 110.5 -23t87 -33.5
|
1102 |
+
t63.5 -37.5t39 -29t15 -14q17 -18 5 -38l-81 -146q-8 -15 -23 -16q-14 -3 -27 7q-3 3 -14.5 12t-39 26.5t-58.5 32t-74.5 26t-85.5 11.5q-95 0 -155 -43t-60 -111q0 -26 8.5 -48t29.5 -41.5t39.5 -33t56 -31t60.5 -27t70 -27.5q53 -20 81 -31.5t76 -35t75.5 -42.5t62 -50
|
1103 |
+
t53 -63.5t31.5 -76.5t13 -94z" />
|
1104 |
+
<glyph glyph-name="inr" unicode="" horiz-adv-x="898"
|
1105 |
+
d="M898 1066v-102q0 -14 -9 -23t-23 -9h-168q-23 -144 -129 -234t-276 -110q167 -178 459 -536q14 -16 4 -34q-8 -18 -29 -18h-195q-16 0 -25 12q-306 367 -498 571q-9 9 -9 22v127q0 13 9.5 22.5t22.5 9.5h112q132 0 212.5 43t102.5 125h-427q-14 0 -23 9t-9 23v102
|
1106 |
+
q0 14 9 23t23 9h413q-57 113 -268 113h-145q-13 0 -22.5 9.5t-9.5 22.5v133q0 14 9 23t23 9h832q14 0 23 -9t9 -23v-102q0 -14 -9 -23t-23 -9h-233q47 -61 64 -144h171q14 0 23 -9t9 -23z" />
|
1107 |
+
<glyph glyph-name="jpy" unicode="" horiz-adv-x="1027"
|
1108 |
+
d="M603 0h-172q-13 0 -22.5 9t-9.5 23v330h-288q-13 0 -22.5 9t-9.5 23v103q0 13 9.5 22.5t22.5 9.5h288v85h-288q-13 0 -22.5 9t-9.5 23v104q0 13 9.5 22.5t22.5 9.5h214l-321 578q-8 16 0 32q10 16 28 16h194q19 0 29 -18l215 -425q19 -38 56 -125q10 24 30.5 68t27.5 61
|
1109 |
+
l191 420q8 19 29 19h191q17 0 27 -16q9 -14 1 -31l-313 -579h215q13 0 22.5 -9.5t9.5 -22.5v-104q0 -14 -9.5 -23t-22.5 -9h-290v-85h290q13 0 22.5 -9.5t9.5 -22.5v-103q0 -14 -9.5 -23t-22.5 -9h-290v-330q0 -13 -9.5 -22.5t-22.5 -9.5z" />
|
1110 |
+
<glyph glyph-name="rub" unicode="" horiz-adv-x="1280"
|
1111 |
+
d="M1043 971q0 100 -65 162t-171 62h-320v-448h320q106 0 171 62t65 162zM1280 971q0 -193 -126.5 -315t-326.5 -122h-340v-118h505q14 0 23 -9t9 -23v-128q0 -14 -9 -23t-23 -9h-505v-192q0 -14 -9.5 -23t-22.5 -9h-167q-14 0 -23 9t-9 23v192h-224q-14 0 -23 9t-9 23v128
|
1112 |
+
q0 14 9 23t23 9h224v118h-224q-14 0 -23 9t-9 23v149q0 13 9 22.5t23 9.5h224v629q0 14 9 23t23 9h539q200 0 326.5 -122t126.5 -315z" />
|
1113 |
+
<glyph glyph-name="krw" unicode="" horiz-adv-x="1792"
|
1114 |
+
d="M514 341l81 299h-159l75 -300q1 -1 1 -3t1 -3q0 1 0.5 3.5t0.5 3.5zM630 768l35 128h-292l32 -128h225zM822 768h139l-35 128h-70zM1271 340l78 300h-162l81 -299q0 -1 0.5 -3.5t1.5 -3.5q0 1 0.5 3t0.5 3zM1382 768l33 128h-297l34 -128h230zM1792 736v-64q0 -14 -9 -23
|
1115 |
+
t-23 -9h-213l-164 -616q-7 -24 -31 -24h-159q-24 0 -31 24l-166 616h-209l-167 -616q-7 -24 -31 -24h-159q-11 0 -19.5 7t-10.5 17l-160 616h-208q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h175l-33 128h-142q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h109l-89 344q-5 15 5 28
|
1116 |
+
q10 12 26 12h137q26 0 31 -24l90 -360h359l97 360q7 24 31 24h126q24 0 31 -24l98 -360h365l93 360q5 24 31 24h137q16 0 26 -12q10 -13 5 -28l-91 -344h111q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-145l-34 -128h179q14 0 23 -9t9 -23z" />
|
1117 |
+
<glyph glyph-name="btc" unicode="" horiz-adv-x="1280"
|
1118 |
+
d="M1167 896q18 -182 -131 -258q117 -28 175 -103t45 -214q-7 -71 -32.5 -125t-64.5 -89t-97 -58.5t-121.5 -34.5t-145.5 -15v-255h-154v251q-80 0 -122 1v-252h-154v255q-18 0 -54 0.5t-55 0.5h-200l31 183h111q50 0 58 51v402h16q-6 1 -16 1v287q-13 68 -89 68h-111v164
|
1119 |
+
l212 -1q64 0 97 1v252h154v-247q82 2 122 2v245h154v-252q79 -7 140 -22.5t113 -45t82.5 -78t36.5 -114.5zM952 351q0 36 -15 64t-37 46t-57.5 30.5t-65.5 18.5t-74 9t-69 3t-64.5 -1t-47.5 -1v-338q8 0 37 -0.5t48 -0.5t53 1.5t58.5 4t57 8.5t55.5 14t47.5 21t39.5 30
|
1120 |
+
t24.5 40t9.5 51zM881 827q0 33 -12.5 58.5t-30.5 42t-48 28t-55 16.5t-61.5 8t-58 2.5t-54 -1t-39.5 -0.5v-307q5 0 34.5 -0.5t46.5 0t50 2t55 5.5t51.5 11t48.5 18.5t37 27t27 38.5t9 51z" />
|
1121 |
+
<glyph glyph-name="file" unicode=""
|
1122 |
+
d="M1024 1024v472q22 -14 36 -28l408 -408q14 -14 28 -36h-472zM896 992q0 -40 28 -68t68 -28h544v-1056q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h800v-544z" />
|
1123 |
+
<glyph glyph-name="file_text" unicode=""
|
1124 |
+
d="M1468 1060q14 -14 28 -36h-472v472q22 -14 36 -28zM992 896h544v-1056q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h800v-544q0 -40 28 -68t68 -28zM1152 160v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704
|
1125 |
+
q14 0 23 9t9 23zM1152 416v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23zM1152 672v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23z" />
|
1126 |
+
<glyph glyph-name="sort_by_alphabet" unicode="" horiz-adv-x="1664"
|
1127 |
+
d="M1191 1128h177l-72 218l-12 47q-2 16 -2 20h-4l-3 -20q0 -1 -3.5 -18t-7.5 -29zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1572 -23
|
1128 |
+
v-233h-584v90l369 529q12 18 21 27l11 9v3q-2 0 -6.5 -0.5t-7.5 -0.5q-12 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530q-6 -8 -21 -26l-11 -11v-2l14 2q9 2 30 2h248v119h121zM1661 874v-106h-288v106h75l-47 144h-243l-47 -144h75v-106h-287v106h70l230 662h162
|
1129 |
+
l230 -662h70z" />
|
1130 |
+
<glyph glyph-name="_329" unicode="" horiz-adv-x="1664"
|
1131 |
+
d="M1191 104h177l-72 218l-12 47q-2 16 -2 20h-4l-3 -20q0 -1 -3.5 -18t-7.5 -29zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1661 -150
|
1132 |
+
v-106h-288v106h75l-47 144h-243l-47 -144h75v-106h-287v106h70l230 662h162l230 -662h70zM1572 1001v-233h-584v90l369 529q12 18 21 27l11 9v3q-2 0 -6.5 -0.5t-7.5 -0.5q-12 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530q-6 -8 -21 -26l-11 -10v-3l14 3q9 1 30 1h248
|
1133 |
+
v119h121z" />
|
1134 |
+
<glyph glyph-name="sort_by_attributes" unicode="" horiz-adv-x="1792"
|
1135 |
+
d="M736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1792 -32v-192q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h832
|
1136 |
+
q14 0 23 -9t9 -23zM1600 480v-192q0 -14 -9 -23t-23 -9h-640q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h640q14 0 23 -9t9 -23zM1408 992v-192q0 -14 -9 -23t-23 -9h-448q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h448q14 0 23 -9t9 -23zM1216 1504v-192q0 -14 -9 -23t-23 -9h-256
|
1137 |
+
q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h256q14 0 23 -9t9 -23z" />
|
1138 |
+
<glyph glyph-name="sort_by_attributes_alt" unicode="" horiz-adv-x="1792"
|
1139 |
+
d="M1216 -32v-192q0 -14 -9 -23t-23 -9h-256q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h256q14 0 23 -9t9 -23zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192
|
1140 |
+
q14 0 23 -9t9 -23zM1408 480v-192q0 -14 -9 -23t-23 -9h-448q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h448q14 0 23 -9t9 -23zM1600 992v-192q0 -14 -9 -23t-23 -9h-640q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h640q14 0 23 -9t9 -23zM1792 1504v-192q0 -14 -9 -23t-23 -9h-832
|
1141 |
+
q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h832q14 0 23 -9t9 -23z" />
|
1142 |
+
<glyph glyph-name="sort_by_order" unicode=""
|
1143 |
+
d="M1346 223q0 63 -44 116t-103 53q-52 0 -83 -37t-31 -94t36.5 -95t104.5 -38q50 0 85 27t35 68zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23
|
1144 |
+
zM1486 165q0 -62 -13 -121.5t-41 -114t-68 -95.5t-98.5 -65.5t-127.5 -24.5q-62 0 -108 16q-24 8 -42 15l39 113q15 -7 31 -11q37 -13 75 -13q84 0 134.5 58.5t66.5 145.5h-2q-21 -23 -61.5 -37t-84.5 -14q-106 0 -173 71.5t-67 172.5q0 105 72 178t181 73q123 0 205 -94.5
|
1145 |
+
t82 -252.5zM1456 882v-114h-469v114h167v432q0 7 0.5 19t0.5 17v16h-2l-7 -12q-8 -13 -26 -31l-62 -58l-82 86l192 185h123v-654h165z" />
|
1146 |
+
<glyph glyph-name="sort_by_order_alt" unicode=""
|
1147 |
+
d="M1346 1247q0 63 -44 116t-103 53q-52 0 -83 -37t-31 -94t36.5 -95t104.5 -38q50 0 85 27t35 68zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9
|
1148 |
+
t9 -23zM1456 -142v-114h-469v114h167v432q0 7 0.5 19t0.5 17v16h-2l-7 -12q-8 -13 -26 -31l-62 -58l-82 86l192 185h123v-654h165zM1486 1189q0 -62 -13 -121.5t-41 -114t-68 -95.5t-98.5 -65.5t-127.5 -24.5q-62 0 -108 16q-24 8 -42 15l39 113q15 -7 31 -11q37 -13 75 -13
|
1149 |
+
q84 0 134.5 58.5t66.5 145.5h-2q-21 -23 -61.5 -37t-84.5 -14q-106 0 -173 71.5t-67 172.5q0 105 72 178t181 73q123 0 205 -94.5t82 -252.5z" />
|
1150 |
+
<glyph glyph-name="_334" unicode="" horiz-adv-x="1664"
|
1151 |
+
d="M256 192q0 26 -19 45t-45 19q-27 0 -45.5 -19t-18.5 -45q0 -27 18.5 -45.5t45.5 -18.5q26 0 45 18.5t19 45.5zM416 704v-640q0 -26 -19 -45t-45 -19h-288q-26 0 -45 19t-19 45v640q0 26 19 45t45 19h288q26 0 45 -19t19 -45zM1600 704q0 -86 -55 -149q15 -44 15 -76
|
1152 |
+
q3 -76 -43 -137q17 -56 0 -117q-15 -57 -54 -94q9 -112 -49 -181q-64 -76 -197 -78h-36h-76h-17q-66 0 -144 15.5t-121.5 29t-120.5 39.5q-123 43 -158 44q-26 1 -45 19.5t-19 44.5v641q0 25 18 43.5t43 20.5q24 2 76 59t101 121q68 87 101 120q18 18 31 48t17.5 48.5
|
1153 |
+
t13.5 60.5q7 39 12.5 61t19.5 52t34 50q19 19 45 19q46 0 82.5 -10.5t60 -26t40 -40.5t24 -45t12 -50t5 -45t0.5 -39q0 -38 -9.5 -76t-19 -60t-27.5 -56q-3 -6 -10 -18t-11 -22t-8 -24h277q78 0 135 -57t57 -135z" />
|
1154 |
+
<glyph glyph-name="_335" unicode="" horiz-adv-x="1664"
|
1155 |
+
d="M256 960q0 -26 -19 -45t-45 -19q-27 0 -45.5 19t-18.5 45q0 27 18.5 45.5t45.5 18.5q26 0 45 -18.5t19 -45.5zM416 448v640q0 26 -19 45t-45 19h-288q-26 0 -45 -19t-19 -45v-640q0 -26 19 -45t45 -19h288q26 0 45 19t19 45zM1545 597q55 -61 55 -149q-1 -78 -57.5 -135
|
1156 |
+
t-134.5 -57h-277q4 -14 8 -24t11 -22t10 -18q18 -37 27 -57t19 -58.5t10 -76.5q0 -24 -0.5 -39t-5 -45t-12 -50t-24 -45t-40 -40.5t-60 -26t-82.5 -10.5q-26 0 -45 19q-20 20 -34 50t-19.5 52t-12.5 61q-9 42 -13.5 60.5t-17.5 48.5t-31 48q-33 33 -101 120q-49 64 -101 121
|
1157 |
+
t-76 59q-25 2 -43 20.5t-18 43.5v641q0 26 19 44.5t45 19.5q35 1 158 44q77 26 120.5 39.5t121.5 29t144 15.5h17h76h36q133 -2 197 -78q58 -69 49 -181q39 -37 54 -94q17 -61 0 -117q46 -61 43 -137q0 -32 -15 -76z" />
|
1158 |
+
<glyph glyph-name="youtube_sign" unicode=""
|
1159 |
+
d="M919 233v157q0 50 -29 50q-17 0 -33 -16v-224q16 -16 33 -16q29 0 29 49zM1103 355h66v34q0 51 -33 51t-33 -51v-34zM532 621v-70h-80v-423h-74v423h-78v70h232zM733 495v-367h-67v40q-39 -45 -76 -45q-33 0 -42 28q-6 17 -6 54v290h66v-270q0 -24 1 -26q1 -15 15 -15
|
1160 |
+
q20 0 42 31v280h67zM985 384v-146q0 -52 -7 -73q-12 -42 -53 -42q-35 0 -68 41v-36h-67v493h67v-161q32 40 68 40q41 0 53 -42q7 -21 7 -74zM1236 255v-9q0 -29 -2 -43q-3 -22 -15 -40q-27 -40 -80 -40q-52 0 -81 38q-21 27 -21 86v129q0 59 20 86q29 38 80 38t78 -38
|
1161 |
+
q21 -29 21 -86v-76h-133v-65q0 -51 34 -51q24 0 30 26q0 1 0.5 7t0.5 16.5v21.5h68zM785 1079v-156q0 -51 -32 -51t-32 51v156q0 52 32 52t32 -52zM1318 366q0 177 -19 260q-10 44 -43 73.5t-76 34.5q-136 15 -412 15q-275 0 -411 -15q-44 -5 -76.5 -34.5t-42.5 -73.5
|
1162 |
+
q-20 -87 -20 -260q0 -176 20 -260q10 -43 42.5 -73t75.5 -35q137 -15 412 -15t412 15q43 5 75.5 35t42.5 73q20 84 20 260zM563 1017l90 296h-75l-51 -195l-53 195h-78q7 -23 23 -69l24 -69q35 -103 46 -158v-201h74v201zM852 936v130q0 58 -21 87q-29 38 -78 38
|
1163 |
+
q-51 0 -78 -38q-21 -29 -21 -87v-130q0 -58 21 -87q27 -38 78 -38q49 0 78 38q21 27 21 87zM1033 816h67v370h-67v-283q-22 -31 -42 -31q-15 0 -16 16q-1 2 -1 26v272h-67v-293q0 -37 6 -55q11 -27 43 -27q36 0 77 45v-40zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5
|
1164 |
+
h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
|
1165 |
+
<glyph glyph-name="youtube" unicode=""
|
1166 |
+
d="M971 292v-211q0 -67 -39 -67q-23 0 -45 22v301q22 22 45 22q39 0 39 -67zM1309 291v-46h-90v46q0 68 45 68t45 -68zM343 509h107v94h-312v-94h105v-569h100v569zM631 -60h89v494h-89v-378q-30 -42 -57 -42q-18 0 -21 21q-1 3 -1 35v364h-89v-391q0 -49 8 -73
|
1167 |
+
q12 -37 58 -37q48 0 102 61v-54zM1060 88v197q0 73 -9 99q-17 56 -71 56q-50 0 -93 -54v217h-89v-663h89v48q45 -55 93 -55q54 0 71 55q9 27 9 100zM1398 98v13h-91q0 -51 -2 -61q-7 -36 -40 -36q-46 0 -46 69v87h179v103q0 79 -27 116q-39 51 -106 51q-68 0 -107 -51
|
1168 |
+
q-28 -37 -28 -116v-173q0 -79 29 -116q39 -51 108 -51q72 0 108 53q18 27 21 54q2 9 2 58zM790 1011v210q0 69 -43 69t-43 -69v-210q0 -70 43 -70t43 70zM1509 260q0 -234 -26 -350q-14 -59 -58 -99t-102 -46q-184 -21 -555 -21t-555 21q-58 6 -102.5 46t-57.5 99
|
1169 |
+
q-26 112 -26 350q0 234 26 350q14 59 58 99t103 47q183 20 554 20t555 -20q58 -7 102.5 -47t57.5 -99q26 -112 26 -350zM511 1536h102l-121 -399v-271h-100v271q-14 74 -61 212q-37 103 -65 187h106l71 -263zM881 1203v-175q0 -81 -28 -118q-38 -51 -106 -51q-67 0 -105 51
|
1170 |
+
q-28 38 -28 118v175q0 80 28 117q38 51 105 51q68 0 106 -51q28 -37 28 -117zM1216 1365v-499h-91v55q-53 -62 -103 -62q-46 0 -59 37q-8 24 -8 75v394h91v-367q0 -33 1 -35q3 -22 21 -22q27 0 57 43v381h91z" />
|
1171 |
+
<glyph glyph-name="xing" unicode="" horiz-adv-x="1408"
|
1172 |
+
d="M597 869q-10 -18 -257 -456q-27 -46 -65 -46h-239q-21 0 -31 17t0 36l253 448q1 0 0 1l-161 279q-12 22 -1 37q9 15 32 15h239q40 0 66 -45zM1403 1511q11 -16 0 -37l-528 -934v-1l336 -615q11 -20 1 -37q-10 -15 -32 -15h-239q-42 0 -66 45l-339 622q18 32 531 942
|
1173 |
+
q25 45 64 45h241q22 0 31 -15z" />
|
1174 |
+
<glyph glyph-name="xing_sign" unicode=""
|
1175 |
+
d="M685 771q0 1 -126 222q-21 34 -52 34h-184q-18 0 -26 -11q-7 -12 1 -29l125 -216v-1l-196 -346q-9 -14 0 -28q8 -13 24 -13h185q31 0 50 36zM1309 1268q-7 12 -24 12h-187q-30 0 -49 -35l-411 -729q1 -2 262 -481q20 -35 52 -35h184q18 0 25 12q8 13 -1 28l-260 476v1
|
1176 |
+
l409 723q8 16 0 28zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
|
1177 |
+
<glyph glyph-name="youtube_play" unicode="" horiz-adv-x="1792"
|
1178 |
+
d="M711 408l484 250l-484 253v-503zM896 1270q168 0 324.5 -4.5t229.5 -9.5l73 -4q1 0 17 -1.5t23 -3t23.5 -4.5t28.5 -8t28 -13t31 -19.5t29 -26.5q6 -6 15.5 -18.5t29 -58.5t26.5 -101q8 -64 12.5 -136.5t5.5 -113.5v-40v-136q1 -145 -18 -290q-7 -55 -25 -99.5t-32 -61.5
|
1179 |
+
l-14 -17q-14 -15 -29 -26.5t-31 -19t-28 -12.5t-28.5 -8t-24 -4.5t-23 -3t-16.5 -1.5q-251 -19 -627 -19q-207 2 -359.5 6.5t-200.5 7.5l-49 4l-36 4q-36 5 -54.5 10t-51 21t-56.5 41q-6 6 -15.5 18.5t-29 58.5t-26.5 101q-8 64 -12.5 136.5t-5.5 113.5v40v136
|
1180 |
+
q-1 145 18 290q7 55 25 99.5t32 61.5l14 17q14 15 29 26.5t31 19.5t28 13t28.5 8t23.5 4.5t23 3t17 1.5q251 18 627 18z" />
|
1181 |
+
<glyph glyph-name="dropbox" unicode="" horiz-adv-x="1792"
|
1182 |
+
d="M402 829l494 -305l-342 -285l-490 319zM1388 274v-108l-490 -293v-1l-1 1l-1 -1v1l-489 293v108l147 -96l342 284v2l1 -1l1 1v-2l343 -284zM554 1418l342 -285l-494 -304l-338 270zM1390 829l338 -271l-489 -319l-343 285zM1239 1418l489 -319l-338 -270l-494 304z" />
|
1183 |
+
<glyph glyph-name="stackexchange" unicode=""
|
1184 |
+
d="M1289 -96h-1118v480h-160v-640h1438v640h-160v-480zM347 428l33 157l783 -165l-33 -156zM450 802l67 146l725 -339l-67 -145zM651 1158l102 123l614 -513l-102 -123zM1048 1536l477 -641l-128 -96l-477 641zM330 65v159h800v-159h-800z" />
|
1185 |
+
<glyph glyph-name="instagram" unicode=""
|
1186 |
+
d="M1024 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1162 640q0 -164 -115 -279t-279 -115t-279 115t-115 279t115 279t279 115t279 -115t115 -279zM1270 1050q0 -38 -27 -65t-65 -27t-65 27t-27 65t27 65t65 27t65 -27t27 -65zM768 1270
|
1187 |
+
q-7 0 -76.5 0.5t-105.5 0t-96.5 -3t-103 -10t-71.5 -18.5q-50 -20 -88 -58t-58 -88q-11 -29 -18.5 -71.5t-10 -103t-3 -96.5t0 -105.5t0.5 -76.5t-0.5 -76.5t0 -105.5t3 -96.5t10 -103t18.5 -71.5q20 -50 58 -88t88 -58q29 -11 71.5 -18.5t103 -10t96.5 -3t105.5 0t76.5 0.5
|
1188 |
+
t76.5 -0.5t105.5 0t96.5 3t103 10t71.5 18.5q50 20 88 58t58 88q11 29 18.5 71.5t10 103t3 96.5t0 105.5t-0.5 76.5t0.5 76.5t0 105.5t-3 96.5t-10 103t-18.5 71.5q-20 50 -58 88t-88 58q-29 11 -71.5 18.5t-103 10t-96.5 3t-105.5 0t-76.5 -0.5zM1536 640q0 -229 -5 -317
|
1189 |
+
q-10 -208 -124 -322t-322 -124q-88 -5 -317 -5t-317 5q-208 10 -322 124t-124 322q-5 88 -5 317t5 317q10 208 124 322t322 124q88 5 317 5t317 -5q208 -10 322 -124t124 -322q5 -88 5 -317z" />
|
1190 |
+
<glyph glyph-name="flickr" unicode=""
|
1191 |
+
d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM698 640q0 88 -62 150t-150 62t-150 -62t-62 -150t62 -150t150 -62t150 62t62 150zM1262 640q0 88 -62 150
|
1192 |
+
t-150 62t-150 -62t-62 -150t62 -150t150 -62t150 62t62 150z" />
|
1193 |
+
<glyph glyph-name="adn" unicode=""
|
1194 |
+
d="M768 914l201 -306h-402zM1133 384h94l-459 691l-459 -691h94l104 160h522zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
1195 |
+
<glyph glyph-name="f171" unicode="" horiz-adv-x="1408"
|
1196 |
+
d="M815 677q8 -63 -50.5 -101t-111.5 -6q-39 17 -53.5 58t-0.5 82t52 58q36 18 72.5 12t64 -35.5t27.5 -67.5zM926 698q-14 107 -113 164t-197 13q-63 -28 -100.5 -88.5t-34.5 -129.5q4 -91 77.5 -155t165.5 -56q91 8 152 84t50 168zM1165 1240q-20 27 -56 44.5t-58 22
|
1197 |
+
t-71 12.5q-291 47 -566 -2q-43 -7 -66 -12t-55 -22t-50 -43q30 -28 76 -45.5t73.5 -22t87.5 -11.5q228 -29 448 -1q63 8 89.5 12t72.5 21.5t75 46.5zM1222 205q-8 -26 -15.5 -76.5t-14 -84t-28.5 -70t-58 -56.5q-86 -48 -189.5 -71.5t-202 -22t-201.5 18.5q-46 8 -81.5 18
|
1198 |
+
t-76.5 27t-73 43.5t-52 61.5q-25 96 -57 292l6 16l18 9q223 -148 506.5 -148t507.5 148q21 -6 24 -23t-5 -45t-8 -37zM1403 1166q-26 -167 -111 -655q-5 -30 -27 -56t-43.5 -40t-54.5 -31q-252 -126 -610 -88q-248 27 -394 139q-15 12 -25.5 26.5t-17 35t-9 34t-6 39.5
|
1199 |
+
t-5.5 35q-9 50 -26.5 150t-28 161.5t-23.5 147.5t-22 158q3 26 17.5 48.5t31.5 37.5t45 30t46 22.5t48 18.5q125 46 313 64q379 37 676 -50q155 -46 215 -122q16 -20 16.5 -51t-5.5 -54z" />
|
1200 |
+
<glyph glyph-name="bitbucket_sign" unicode=""
|
1201 |
+
d="M848 666q0 43 -41 66t-77 1q-43 -20 -42.5 -72.5t43.5 -70.5q39 -23 81 4t36 72zM928 682q8 -66 -36 -121t-110 -61t-119 40t-56 113q-2 49 25.5 93t72.5 64q70 31 141.5 -10t81.5 -118zM1100 1073q-20 -21 -53.5 -34t-53 -16t-63.5 -8q-155 -20 -324 0q-44 6 -63 9.5
|
1202 |
+
t-52.5 16t-54.5 32.5q13 19 36 31t40 15.5t47 8.5q198 35 408 1q33 -5 51 -8.5t43 -16t39 -31.5zM1142 327q0 7 5.5 26.5t3 32t-17.5 16.5q-161 -106 -365 -106t-366 106l-12 -6l-5 -12q26 -154 41 -210q47 -81 204 -108q249 -46 428 53q34 19 49 51.5t22.5 85.5t12.5 71z
|
1203 |
+
M1272 1020q9 53 -8 75q-43 55 -155 88q-216 63 -487 36q-132 -12 -226 -46q-38 -15 -59.5 -25t-47 -34t-29.5 -54q8 -68 19 -138t29 -171t24 -137q1 -5 5 -31t7 -36t12 -27t22 -28q105 -80 284 -100q259 -28 440 63q24 13 39.5 23t31 29t19.5 40q48 267 80 473zM1536 1120
|
1204 |
+
v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
|
1205 |
+
<glyph glyph-name="tumblr" unicode="" horiz-adv-x="1024"
|
1206 |
+
d="M944 207l80 -237q-23 -35 -111 -66t-177 -32q-104 -2 -190.5 26t-142.5 74t-95 106t-55.5 120t-16.5 118v544h-168v215q72 26 129 69.5t91 90t58 102t34 99t15 88.5q1 5 4.5 8.5t7.5 3.5h244v-424h333v-252h-334v-518q0 -30 6.5 -56t22.5 -52.5t49.5 -41.5t81.5 -14
|
1207 |
+
q78 2 134 29z" />
|
1208 |
+
<glyph glyph-name="tumblr_sign" unicode=""
|
1209 |
+
d="M1136 75l-62 183q-44 -22 -103 -22q-36 -1 -62 10.5t-38.5 31.5t-17.5 40.5t-5 43.5v398h257v194h-256v326h-188q-8 0 -9 -10q-5 -44 -17.5 -87t-39 -95t-77 -95t-118.5 -68v-165h130v-418q0 -57 21.5 -115t65 -111t121 -85.5t176.5 -30.5q69 1 136.5 25t85.5 50z
|
1210 |
+
M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
|
1211 |
+
<glyph glyph-name="long_arrow_down" unicode="" horiz-adv-x="768"
|
1212 |
+
d="M765 237q8 -19 -5 -35l-350 -384q-10 -10 -23 -10q-14 0 -24 10l-355 384q-13 16 -5 35q9 19 29 19h224v1248q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1248h224q21 0 29 -19z" />
|
1213 |
+
<glyph glyph-name="long_arrow_up" unicode="" horiz-adv-x="768"
|
1214 |
+
d="M765 1043q-9 -19 -29 -19h-224v-1248q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v1248h-224q-21 0 -29 19t5 35l350 384q10 10 23 10q14 0 24 -10l355 -384q13 -16 5 -35z" />
|
1215 |
+
<glyph glyph-name="long_arrow_left" unicode="" horiz-adv-x="1792"
|
1216 |
+
d="M1792 736v-192q0 -14 -9 -23t-23 -9h-1248v-224q0 -21 -19 -29t-35 5l-384 350q-10 10 -10 23q0 14 10 24l384 354q16 14 35 6q19 -9 19 -29v-224h1248q14 0 23 -9t9 -23z" />
|
1217 |
+
<glyph glyph-name="long_arrow_right" unicode="" horiz-adv-x="1792"
|
1218 |
+
d="M1728 643q0 -14 -10 -24l-384 -354q-16 -14 -35 -6q-19 9 -19 29v224h-1248q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h1248v224q0 21 19 29t35 -5l384 -350q10 -10 10 -23z" />
|
1219 |
+
<glyph glyph-name="apple" unicode="" horiz-adv-x="1408"
|
1220 |
+
d="M1393 321q-39 -125 -123 -250q-129 -196 -257 -196q-49 0 -140 32q-86 32 -151 32q-61 0 -142 -33q-81 -34 -132 -34q-152 0 -301 259q-147 261 -147 503q0 228 113 374q113 144 284 144q72 0 177 -30q104 -30 138 -30q45 0 143 34q102 34 173 34q119 0 213 -65
|
1221 |
+
q52 -36 104 -100q-79 -67 -114 -118q-65 -94 -65 -207q0 -124 69 -223t158 -126zM1017 1494q0 -61 -29 -136q-30 -75 -93 -138q-54 -54 -108 -72q-37 -11 -104 -17q3 149 78 257q74 107 250 148q1 -3 2.5 -11t2.5 -11q0 -4 0.5 -10t0.5 -10z" />
|
1222 |
+
<glyph glyph-name="windows" unicode="" horiz-adv-x="1664"
|
1223 |
+
d="M682 530v-651l-682 94v557h682zM682 1273v-659h-682v565zM1664 530v-786l-907 125v661h907zM1664 1408v-794h-907v669z" />
|
1224 |
+
<glyph glyph-name="android" unicode="" horiz-adv-x="1408"
|
1225 |
+
d="M493 1053q16 0 27.5 11.5t11.5 27.5t-11.5 27.5t-27.5 11.5t-27 -11.5t-11 -27.5t11 -27.5t27 -11.5zM915 1053q16 0 27 11.5t11 27.5t-11 27.5t-27 11.5t-27.5 -11.5t-11.5 -27.5t11.5 -27.5t27.5 -11.5zM103 869q42 0 72 -30t30 -72v-430q0 -43 -29.5 -73t-72.5 -30
|
1226 |
+
t-73 30t-30 73v430q0 42 30 72t73 30zM1163 850v-666q0 -46 -32 -78t-77 -32h-75v-227q0 -43 -30 -73t-73 -30t-73 30t-30 73v227h-138v-227q0 -43 -30 -73t-73 -30q-42 0 -72 30t-30 73l-1 227h-74q-46 0 -78 32t-32 78v666h918zM931 1255q107 -55 171 -153.5t64 -215.5
|
1227 |
+
h-925q0 117 64 215.5t172 153.5l-71 131q-7 13 5 20q13 6 20 -6l72 -132q95 42 201 42t201 -42l72 132q7 12 20 6q12 -7 5 -20zM1408 767v-430q0 -43 -30 -73t-73 -30q-42 0 -72 30t-30 73v430q0 43 30 72.5t72 29.5q43 0 73 -29.5t30 -72.5z" />
|
1228 |
+
<glyph glyph-name="linux" unicode=""
|
1229 |
+
d="M663 1125q-11 -1 -15.5 -10.5t-8.5 -9.5q-5 -1 -5 5q0 12 19 15h10zM750 1111q-4 -1 -11.5 6.5t-17.5 4.5q24 11 32 -2q3 -6 -3 -9zM399 684q-4 1 -6 -3t-4.5 -12.5t-5.5 -13.5t-10 -13q-10 -11 -1 -12q4 -1 12.5 7t12.5 18q1 3 2 7t2 6t1.5 4.5t0.5 4v3t-1 2.5t-3 2z
|
1230 |
+
M1254 325q0 18 -55 42q4 15 7.5 27.5t5 26t3 21.5t0.5 22.5t-1 19.5t-3.5 22t-4 20.5t-5 25t-5.5 26.5q-10 48 -47 103t-72 75q24 -20 57 -83q87 -162 54 -278q-11 -40 -50 -42q-31 -4 -38.5 18.5t-8 83.5t-11.5 107q-9 39 -19.5 69t-19.5 45.5t-15.5 24.5t-13 15t-7.5 7
|
1231 |
+
q-14 62 -31 103t-29.5 56t-23.5 33t-15 40q-4 21 6 53.5t4.5 49.5t-44.5 25q-15 3 -44.5 18t-35.5 16q-8 1 -11 26t8 51t36 27q37 3 51 -30t4 -58q-11 -19 -2 -26.5t30 -0.5q13 4 13 36v37q-5 30 -13.5 50t-21 30.5t-23.5 15t-27 7.5q-107 -8 -89 -134q0 -15 -1 -15
|
1232 |
+
q-9 9 -29.5 10.5t-33 -0.5t-15.5 5q1 57 -16 90t-45 34q-27 1 -41.5 -27.5t-16.5 -59.5q-1 -15 3.5 -37t13 -37.5t15.5 -13.5q10 3 16 14q4 9 -7 8q-7 0 -15.5 14.5t-9.5 33.5q-1 22 9 37t34 14q17 0 27 -21t9.5 -39t-1.5 -22q-22 -15 -31 -29q-8 -12 -27.5 -23.5
|
1233 |
+
t-20.5 -12.5q-13 -14 -15.5 -27t7.5 -18q14 -8 25 -19.5t16 -19t18.5 -13t35.5 -6.5q47 -2 102 15q2 1 23 7t34.5 10.5t29.5 13t21 17.5q9 14 20 8q5 -3 6.5 -8.5t-3 -12t-16.5 -9.5q-20 -6 -56.5 -21.5t-45.5 -19.5q-44 -19 -70 -23q-25 -5 -79 2q-10 2 -9 -2t17 -19
|
1234 |
+
q25 -23 67 -22q17 1 36 7t36 14t33.5 17.5t30 17t24.5 12t17.5 2.5t8.5 -11q0 -2 -1 -4.5t-4 -5t-6 -4.5t-8.5 -5t-9 -4.5t-10 -5t-9.5 -4.5q-28 -14 -67.5 -44t-66.5 -43t-49 -1q-21 11 -63 73q-22 31 -25 22q-1 -3 -1 -10q0 -25 -15 -56.5t-29.5 -55.5t-21 -58t11.5 -63
|
1235 |
+
q-23 -6 -62.5 -90t-47.5 -141q-2 -18 -1.5 -69t-5.5 -59q-8 -24 -29 -3q-32 31 -36 94q-2 28 4 56q4 19 -1 18q-2 -1 -4 -5q-36 -65 10 -166q5 -12 25 -28t24 -20q20 -23 104 -90.5t93 -76.5q16 -15 17.5 -38t-14 -43t-45.5 -23q8 -15 29 -44.5t28 -54t7 -70.5q46 24 7 92
|
1236 |
+
q-4 8 -10.5 16t-9.5 12t-2 6q3 5 13 9.5t20 -2.5q46 -52 166 -36q133 15 177 87q23 38 34 30q12 -6 10 -52q-1 -25 -23 -92q-9 -23 -6 -37.5t24 -15.5q3 19 14.5 77t13.5 90q2 21 -6.5 73.5t-7.5 97t23 70.5q15 18 51 18q1 37 34.5 53t72.5 10.5t60 -22.5zM626 1152
|
1237 |
+
q3 17 -2.5 30t-11.5 15q-9 2 -9 -7q2 -5 5 -6q10 0 7 -15q-3 -20 8 -20q3 0 3 3zM1045 955q-2 8 -6.5 11.5t-13 5t-14.5 5.5q-5 3 -9.5 8t-7 8t-5.5 6.5t-4 4t-4 -1.5q-14 -16 7 -43.5t39 -31.5q9 -1 14.5 8t3.5 20zM867 1168q0 11 -5 19.5t-11 12.5t-9 3q-6 0 -8 -2t0 -4
|
1238 |
+
t5 -3q14 -4 18 -31q0 -3 8 2q2 2 2 3zM921 1401q0 2 -2.5 5t-9 7t-9.5 6q-15 15 -24 15q-9 -1 -11.5 -7.5t-1 -13t-0.5 -12.5q-1 -4 -6 -10.5t-6 -9t3 -8.5q4 -3 8 0t11 9t15 9q1 1 9 1t15 2t9 7zM1486 60q20 -12 31 -24.5t12 -24t-2.5 -22.5t-15.5 -22t-23.5 -19.5
|
1239 |
+
t-30 -18.5t-31.5 -16.5t-32 -15.5t-27 -13q-38 -19 -85.5 -56t-75.5 -64q-17 -16 -68 -19.5t-89 14.5q-18 9 -29.5 23.5t-16.5 25.5t-22 19.5t-47 9.5q-44 1 -130 1q-19 0 -57 -1.5t-58 -2.5q-44 -1 -79.5 -15t-53.5 -30t-43.5 -28.5t-53.5 -11.5q-29 1 -111 31t-146 43
|
1240 |
+
q-19 4 -51 9.5t-50 9t-39.5 9.5t-33.5 14.5t-17 19.5q-10 23 7 66.5t18 54.5q1 16 -4 40t-10 42.5t-4.5 36.5t10.5 27q14 12 57 14t60 12q30 18 42 35t12 51q21 -73 -32 -106q-32 -20 -83 -15q-34 3 -43 -10q-13 -15 5 -57q2 -6 8 -18t8.5 -18t4.5 -17t1 -22q0 -15 -17 -49
|
1241 |
+
t-14 -48q3 -17 37 -26q20 -6 84.5 -18.5t99.5 -20.5q24 -6 74 -22t82.5 -23t55.5 -4q43 6 64.5 28t23 48t-7.5 58.5t-19 52t-20 36.5q-121 190 -169 242q-68 74 -113 40q-11 -9 -15 15q-3 16 -2 38q1 29 10 52t24 47t22 42q8 21 26.5 72t29.5 78t30 61t39 54
|
1242 |
+
q110 143 124 195q-12 112 -16 310q-2 90 24 151.5t106 104.5q39 21 104 21q53 1 106 -13.5t89 -41.5q57 -42 91.5 -121.5t29.5 -147.5q-5 -95 30 -214q34 -113 133 -218q55 -59 99.5 -163t59.5 -191q8 -49 5 -84.5t-12 -55.5t-20 -22q-10 -2 -23.5 -19t-27 -35.5
|
1243 |
+
t-40.5 -33.5t-61 -14q-18 1 -31.5 5t-22.5 13.5t-13.5 15.5t-11.5 20.5t-9 19.5q-22 37 -41 30t-28 -49t7 -97q20 -70 1 -195q-10 -65 18 -100.5t73 -33t85 35.5q59 49 89.5 66.5t103.5 42.5q53 18 77 36.5t18.5 34.5t-25 28.5t-51.5 23.5q-33 11 -49.5 48t-15 72.5
|
1244 |
+
t15.5 47.5q1 -31 8 -56.5t14.5 -40.5t20.5 -28.5t21 -19t21.5 -13t16.5 -9.5z" />
|
1245 |
+
<glyph glyph-name="dribble" unicode=""
|
1246 |
+
d="M1024 36q-42 241 -140 498h-2l-2 -1q-16 -6 -43 -16.5t-101 -49t-137 -82t-131 -114.5t-103 -148l-15 11q184 -150 418 -150q132 0 256 52zM839 643q-21 49 -53 111q-311 -93 -673 -93q-1 -7 -1 -21q0 -124 44 -236.5t124 -201.5q50 89 123.5 166.5t142.5 124.5t130.5 81
|
1247 |
+
t99.5 48l37 13q4 1 13 3.5t13 4.5zM732 855q-120 213 -244 378q-138 -65 -234 -186t-128 -272q302 0 606 80zM1416 536q-210 60 -409 29q87 -239 128 -469q111 75 185 189.5t96 250.5zM611 1277q-1 0 -2 -1q1 1 2 1zM1201 1132q-185 164 -433 164q-76 0 -155 -19
|
1248 |
+
q131 -170 246 -382q69 26 130 60.5t96.5 61.5t65.5 57t37.5 40.5zM1424 647q-3 232 -149 410l-1 -1q-9 -12 -19 -24.5t-43.5 -44.5t-71 -60.5t-100 -65t-131.5 -64.5q25 -53 44 -95q2 -5 6.5 -17t7.5 -17q36 5 74.5 7t73.5 2t69 -1.5t64 -4t56.5 -5.5t48 -6.5t36.5 -6
|
1249 |
+
t25 -4.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
1250 |
+
<glyph glyph-name="skype" unicode=""
|
1251 |
+
d="M1173 473q0 50 -19.5 91.5t-48.5 68.5t-73 49t-82.5 34t-87.5 23l-104 24q-30 7 -44 10.5t-35 11.5t-30 16t-16.5 21t-7.5 30q0 77 144 77q43 0 77 -12t54 -28.5t38 -33.5t40 -29t48 -12q47 0 75.5 32t28.5 77q0 55 -56 99.5t-142 67.5t-182 23q-68 0 -132 -15.5
|
1252 |
+
t-119.5 -47t-89 -87t-33.5 -128.5q0 -61 19 -106.5t56 -75.5t80 -48.5t103 -32.5l146 -36q90 -22 112 -36q32 -20 32 -60q0 -39 -40 -64.5t-105 -25.5q-51 0 -91.5 16t-65 38.5t-45.5 45t-46 38.5t-54 16q-50 0 -75.5 -30t-25.5 -75q0 -92 122 -157.5t291 -65.5
|
1253 |
+
q73 0 140 18.5t122.5 53.5t88.5 93.5t33 131.5zM1536 256q0 -159 -112.5 -271.5t-271.5 -112.5q-130 0 -234 80q-77 -16 -150 -16q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5q0 73 16 150q-80 104 -80 234q0 159 112.5 271.5t271.5 112.5q130 0 234 -80
|
1254 |
+
q77 16 150 16q143 0 273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -73 -16 -150q80 -104 80 -234z" />
|
1255 |
+
<glyph glyph-name="foursquare" unicode="" horiz-adv-x="1280"
|
1256 |
+
d="M1000 1102l37 194q5 23 -9 40t-35 17h-712q-23 0 -38.5 -17t-15.5 -37v-1101q0 -7 6 -1l291 352q23 26 38 33.5t48 7.5h239q22 0 37 14.5t18 29.5q24 130 37 191q4 21 -11.5 40t-36.5 19h-294q-29 0 -48 19t-19 48v42q0 29 19 47.5t48 18.5h346q18 0 35 13.5t20 29.5z
|
1257 |
+
M1227 1324q-15 -73 -53.5 -266.5t-69.5 -350t-35 -173.5q-6 -22 -9 -32.5t-14 -32.5t-24.5 -33t-38.5 -21t-58 -10h-271q-13 0 -22 -10q-8 -9 -426 -494q-22 -25 -58.5 -28.5t-48.5 5.5q-55 22 -55 98v1410q0 55 38 102.5t120 47.5h888q95 0 127 -53t10 -159zM1227 1324
|
1258 |
+
l-158 -790q4 17 35 173.5t69.5 350t53.5 266.5z" />
|
1259 |
+
<glyph glyph-name="trello" unicode=""
|
1260 |
+
d="M704 192v1024q0 14 -9 23t-23 9h-480q-14 0 -23 -9t-9 -23v-1024q0 -14 9 -23t23 -9h480q14 0 23 9t9 23zM1376 576v640q0 14 -9 23t-23 9h-480q-14 0 -23 -9t-9 -23v-640q0 -14 9 -23t23 -9h480q14 0 23 9t9 23zM1536 1344v-1408q0 -26 -19 -45t-45 -19h-1408
|
1261 |
+
q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
|
1262 |
+
<glyph glyph-name="female" unicode="" horiz-adv-x="1280"
|
1263 |
+
d="M1280 480q0 -40 -28 -68t-68 -28q-51 0 -80 43l-227 341h-45v-132l247 -411q9 -15 9 -33q0 -26 -19 -45t-45 -19h-192v-272q0 -46 -33 -79t-79 -33h-160q-46 0 -79 33t-33 79v272h-192q-26 0 -45 19t-19 45q0 18 9 33l247 411v132h-45l-227 -341q-29 -43 -80 -43
|
1264 |
+
q-40 0 -68 28t-28 68q0 29 16 53l256 384q73 107 176 107h384q103 0 176 -107l256 -384q16 -24 16 -53zM864 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" />
|
1265 |
+
<glyph glyph-name="male" unicode="" horiz-adv-x="1024"
|
1266 |
+
d="M1024 832v-416q0 -40 -28 -68t-68 -28t-68 28t-28 68v352h-64v-912q0 -46 -33 -79t-79 -33t-79 33t-33 79v464h-64v-464q0 -46 -33 -79t-79 -33t-79 33t-33 79v912h-64v-352q0 -40 -28 -68t-68 -28t-68 28t-28 68v416q0 80 56 136t136 56h640q80 0 136 -56t56 -136z
|
1267 |
+
M736 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" />
|
1268 |
+
<glyph glyph-name="gittip" unicode=""
|
1269 |
+
d="M773 234l350 473q16 22 24.5 59t-6 85t-61.5 79q-40 26 -83 25.5t-73.5 -17.5t-54.5 -45q-36 -40 -96 -40q-59 0 -95 40q-24 28 -54.5 45t-73.5 17.5t-84 -25.5q-46 -31 -60.5 -79t-6 -85t24.5 -59zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103
|
1270 |
+
t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
1271 |
+
<glyph glyph-name="sun" unicode="" horiz-adv-x="1792"
|
1272 |
+
d="M1472 640q0 117 -45.5 223.5t-123 184t-184 123t-223.5 45.5t-223.5 -45.5t-184 -123t-123 -184t-45.5 -223.5t45.5 -223.5t123 -184t184 -123t223.5 -45.5t223.5 45.5t184 123t123 184t45.5 223.5zM1748 363q-4 -15 -20 -20l-292 -96v-306q0 -16 -13 -26q-15 -10 -29 -4
|
1273 |
+
l-292 94l-180 -248q-10 -13 -26 -13t-26 13l-180 248l-292 -94q-14 -6 -29 4q-13 10 -13 26v306l-292 96q-16 5 -20 20q-5 17 4 29l180 248l-180 248q-9 13 -4 29q4 15 20 20l292 96v306q0 16 13 26q15 10 29 4l292 -94l180 248q9 12 26 12t26 -12l180 -248l292 94
|
1274 |
+
q14 6 29 -4q13 -10 13 -26v-306l292 -96q16 -5 20 -20q5 -16 -4 -29l-180 -248l180 -248q9 -12 4 -29z" />
|
1275 |
+
<glyph glyph-name="_366" unicode=""
|
1276 |
+
d="M1262 233q-54 -9 -110 -9q-182 0 -337 90t-245 245t-90 337q0 192 104 357q-201 -60 -328.5 -229t-127.5 -384q0 -130 51 -248.5t136.5 -204t204 -136.5t248.5 -51q144 0 273.5 61.5t220.5 171.5zM1465 318q-94 -203 -283.5 -324.5t-413.5 -121.5q-156 0 -298 61
|
1277 |
+
t-245 164t-164 245t-61 298q0 153 57.5 292.5t156 241.5t235.5 164.5t290 68.5q44 2 61 -39q18 -41 -15 -72q-86 -78 -131.5 -181.5t-45.5 -218.5q0 -148 73 -273t198 -198t273 -73q118 0 228 51q41 18 72 -13q14 -14 17.5 -34t-4.5 -38z" />
|
1278 |
+
<glyph glyph-name="archive" unicode="" horiz-adv-x="1792"
|
1279 |
+
d="M1088 704q0 26 -19 45t-45 19h-256q-26 0 -45 -19t-19 -45t19 -45t45 -19h256q26 0 45 19t19 45zM1664 896v-960q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v960q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1728 1344v-256q0 -26 -19 -45t-45 -19h-1536
|
1280 |
+
q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1536q26 0 45 -19t19 -45z" />
|
1281 |
+
<glyph glyph-name="bug" unicode="" horiz-adv-x="1664"
|
1282 |
+
d="M1632 576q0 -26 -19 -45t-45 -19h-224q0 -171 -67 -290l208 -209q19 -19 19 -45t-19 -45q-18 -19 -45 -19t-45 19l-198 197q-5 -5 -15 -13t-42 -28.5t-65 -36.5t-82 -29t-97 -13v896h-128v-896q-51 0 -101.5 13.5t-87 33t-66 39t-43.5 32.5l-15 14l-183 -207
|
1283 |
+
q-20 -21 -48 -21q-24 0 -43 16q-19 18 -20.5 44.5t15.5 46.5l202 227q-58 114 -58 274h-224q-26 0 -45 19t-19 45t19 45t45 19h224v294l-173 173q-19 19 -19 45t19 45t45 19t45 -19l173 -173h844l173 173q19 19 45 19t45 -19t19 -45t-19 -45l-173 -173v-294h224q26 0 45 -19
|
1284 |
+
t19 -45zM1152 1152h-640q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5z" />
|
1285 |
+
<glyph glyph-name="vk" unicode="" horiz-adv-x="1920"
|
1286 |
+
d="M1917 1016q23 -64 -150 -294q-24 -32 -65 -85q-40 -51 -55 -72t-30.5 -49.5t-12 -42t13 -34.5t32.5 -43t57 -53q4 -2 5 -4q141 -131 191 -221q3 -5 6.5 -12.5t7 -26.5t-0.5 -34t-25 -27.5t-59 -12.5l-256 -4q-24 -5 -56 5t-52 22l-20 12q-30 21 -70 64t-68.5 77.5t-61 58
|
1287 |
+
t-56.5 15.5q-3 -1 -8 -3.5t-17 -14.5t-21.5 -29.5t-17 -52t-6.5 -77.5q0 -15 -3.5 -27.5t-7.5 -18.5l-4 -5q-18 -19 -53 -22h-115q-71 -4 -146 16.5t-131.5 53t-103 66t-70.5 57.5l-25 24q-10 10 -27.5 30t-71.5 91t-106 151t-122.5 211t-130.5 272q-6 16 -6 27t3 16l4 6
|
1288 |
+
q15 19 57 19l274 2q12 -2 23 -6.5t16 -8.5l5 -3q16 -11 24 -32q20 -50 46 -103.5t41 -81.5l16 -29q29 -60 56 -104t48.5 -68.5t41.5 -38.5t34 -14t27 5q2 1 5 5t12 22t13.5 47t9.5 81t0 125q-2 40 -9 73t-14 46l-6 12q-25 34 -85 43q-13 2 5 24q16 19 38 30q53 26 239 24
|
1289 |
+
q82 -1 135 -13q20 -5 33.5 -13.5t20.5 -24t10.5 -32t3.5 -45.5t-1 -55t-2.5 -70.5t-1.5 -82.5q0 -11 -1 -42t-0.5 -48t3.5 -40.5t11.5 -39t22.5 -24.5q8 -2 17 -4t26 11t38 34.5t52 67t68 107.5q60 104 107 225q4 10 10 17.5t11 10.5l4 3l5 2.5t13 3t20 0.5l288 2
|
1290 |
+
q39 5 64 -2.5t31 -16.5z" />
|
1291 |
+
<glyph glyph-name="weibo" unicode="" horiz-adv-x="1792"
|
1292 |
+
d="M675 252q21 34 11 69t-45 50q-34 14 -73 1t-60 -46q-22 -34 -13 -68.5t43 -50.5t74.5 -2.5t62.5 47.5zM769 373q8 13 3.5 26.5t-17.5 18.5q-14 5 -28.5 -0.5t-21.5 -18.5q-17 -31 13 -45q14 -5 29 0.5t22 18.5zM943 266q-45 -102 -158 -150t-224 -12
|
1293 |
+
q-107 34 -147.5 126.5t6.5 187.5q47 93 151.5 139t210.5 19q111 -29 158.5 -119.5t2.5 -190.5zM1255 426q-9 96 -89 170t-208.5 109t-274.5 21q-223 -23 -369.5 -141.5t-132.5 -264.5q9 -96 89 -170t208.5 -109t274.5 -21q223 23 369.5 141.5t132.5 264.5zM1563 422
|
1294 |
+
q0 -68 -37 -139.5t-109 -137t-168.5 -117.5t-226 -83t-270.5 -31t-275 33.5t-240.5 93t-171.5 151t-65 199.5q0 115 69.5 245t197.5 258q169 169 341.5 236t246.5 -7q65 -64 20 -209q-4 -14 -1 -20t10 -7t14.5 0.5t13.5 3.5l6 2q139 59 246 59t153 -61q45 -63 0 -178
|
1295 |
+
q-2 -13 -4.5 -20t4.5 -12.5t12 -7.5t17 -6q57 -18 103 -47t80 -81.5t34 -116.5zM1489 1046q42 -47 54.5 -108.5t-6.5 -117.5q-8 -23 -29.5 -34t-44.5 -4q-23 8 -34 29.5t-4 44.5q20 63 -24 111t-107 35q-24 -5 -45 8t-25 37q-5 24 8 44.5t37 25.5q60 13 119 -5.5t101 -65.5z
|
1296 |
+
M1670 1209q87 -96 112.5 -222.5t-13.5 -241.5q-9 -27 -34 -40t-52 -4t-40 34t-5 52q28 82 10 172t-80 158q-62 69 -148 95.5t-173 8.5q-28 -6 -52 9.5t-30 43.5t9.5 51.5t43.5 29.5q123 26 244 -11.5t208 -134.5z" />
|
1297 |
+
<glyph glyph-name="renren" unicode=""
|
1298 |
+
d="M1133 -34q-171 -94 -368 -94q-196 0 -367 94q138 87 235.5 211t131.5 268q35 -144 132.5 -268t235.5 -211zM638 1394v-485q0 -252 -126.5 -459.5t-330.5 -306.5q-181 215 -181 495q0 187 83.5 349.5t229.5 269.5t325 137zM1536 638q0 -280 -181 -495
|
1299 |
+
q-204 99 -330.5 306.5t-126.5 459.5v485q179 -30 325 -137t229.5 -269.5t83.5 -349.5z" />
|
1300 |
+
<glyph glyph-name="_372" unicode="" horiz-adv-x="1408"
|
1301 |
+
d="M1402 433q-32 -80 -76 -138t-91 -88.5t-99 -46.5t-101.5 -14.5t-96.5 8.5t-86.5 22t-69.5 27.5t-46 22.5l-17 10q-113 -228 -289.5 -359.5t-384.5 -132.5q-19 0 -32 13t-13 32t13 31.5t32 12.5q173 1 322.5 107.5t251.5 294.5q-36 -14 -72 -23t-83 -13t-91 2.5t-93 28.5
|
1302 |
+
t-92 59t-84.5 100t-74.5 146q114 47 214 57t167.5 -7.5t124.5 -56.5t88.5 -77t56.5 -82q53 131 79 291q-7 -1 -18 -2.5t-46.5 -2.5t-69.5 0.5t-81.5 10t-88.5 23t-84 42.5t-75 65t-54.5 94.5t-28.5 127.5q70 28 133.5 36.5t112.5 -1t92 -30t73.5 -50t56 -61t42 -63t27.5 -56
|
1303 |
+
t16 -39.5l4 -16q12 122 12 195q-8 6 -21.5 16t-49 44.5t-63.5 71.5t-54 93t-33 112.5t12 127t70 138.5q73 -25 127.5 -61.5t84.5 -76.5t48 -85t20.5 -89t-0.5 -85.5t-13 -76.5t-19 -62t-17 -42l-7 -15q1 -4 1 -50t-1 -72q3 7 10 18.5t30.5 43t50.5 58t71 55.5t91.5 44.5
|
1304 |
+
t112 14.5t132.5 -24q-2 -78 -21.5 -141.5t-50 -104.5t-69.5 -71.5t-81.5 -45.5t-84.5 -24t-80 -9.5t-67.5 1t-46.5 4.5l-17 3q-23 -147 -73 -283q6 7 18 18.5t49.5 41t77.5 52.5t99.5 42t117.5 20t129 -23.5t137 -77.5z" />
|
1305 |
+
<glyph glyph-name="stack_exchange" unicode="" horiz-adv-x="1280"
|
1306 |
+
d="M1259 283v-66q0 -85 -57.5 -144.5t-138.5 -59.5h-57l-260 -269v269h-529q-81 0 -138.5 59.5t-57.5 144.5v66h1238zM1259 609v-255h-1238v255h1238zM1259 937v-255h-1238v255h1238zM1259 1077v-67h-1238v67q0 84 57.5 143.5t138.5 59.5h846q81 0 138.5 -59.5t57.5 -143.5z
|
1307 |
+
" />
|
1308 |
+
<glyph glyph-name="_374" unicode=""
|
1309 |
+
d="M1152 640q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192h-352q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h352v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198
|
1310 |
+
t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
1311 |
+
<glyph glyph-name="arrow_circle_alt_left" unicode=""
|
1312 |
+
d="M1152 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-352v-192q0 -14 -9 -23t-23 -9q-12 0 -24 10l-319 319q-9 9 -9 23t9 23l320 320q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5v-192h352q13 0 22.5 -9.5t9.5 -22.5zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198
|
1313 |
+
t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
1314 |
+
<glyph glyph-name="_376" unicode=""
|
1315 |
+
d="M1024 960v-640q0 -26 -19 -45t-45 -19q-20 0 -37 12l-448 320q-27 19 -27 52t27 52l448 320q17 12 37 12q26 0 45 -19t19 -45zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5z
|
1316 |
+
M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
|
1317 |
+
<glyph glyph-name="dot_circle_alt" unicode=""
|
1318 |
+
d="M1024 640q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5
|
1319 |
+
t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
1320 |
+
<glyph glyph-name="_378" unicode="" horiz-adv-x="1664"
|
1321 |
+
d="M1023 349l102 -204q-58 -179 -210 -290t-339 -111q-156 0 -288.5 77.5t-210 210t-77.5 288.5q0 181 104.5 330t274.5 211l17 -131q-122 -54 -195 -165.5t-73 -244.5q0 -185 131.5 -316.5t316.5 -131.5q126 0 232.5 65t165 175.5t49.5 236.5zM1571 249l58 -114l-256 -128
|
1322 |
+
q-13 -7 -29 -7q-40 0 -57 35l-239 477h-472q-24 0 -42.5 16.5t-21.5 40.5l-96 779q-2 17 6 42q14 51 57 82.5t97 31.5q66 0 113 -47t47 -113q0 -69 -52 -117.5t-120 -41.5l37 -289h423v-128h-407l16 -128h455q40 0 57 -35l228 -455z" />
|
1323 |
+
<glyph glyph-name="vimeo_square" unicode=""
|
1324 |
+
d="M1292 898q10 216 -161 222q-231 8 -312 -261q44 19 82 19q85 0 74 -96q-4 -57 -74 -167t-105 -110q-43 0 -82 169q-13 54 -45 255q-30 189 -160 177q-59 -7 -164 -100l-81 -72l-81 -72l52 -67q76 52 87 52q57 0 107 -179q15 -55 45 -164.5t45 -164.5q68 -179 164 -179
|
1325 |
+
q157 0 383 294q220 283 226 444zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
|
1326 |
+
<glyph glyph-name="_380" unicode="" horiz-adv-x="1152"
|
1327 |
+
d="M1152 704q0 -191 -94.5 -353t-256.5 -256.5t-353 -94.5h-160q-14 0 -23 9t-9 23v611l-215 -66q-3 -1 -9 -1q-10 0 -19 6q-13 10 -13 26v128q0 23 23 31l233 71v93l-215 -66q-3 -1 -9 -1q-10 0 -19 6q-13 10 -13 26v128q0 23 23 31l233 71v250q0 14 9 23t23 9h160
|
1328 |
+
q14 0 23 -9t9 -23v-181l375 116q15 5 28 -5t13 -26v-128q0 -23 -23 -31l-393 -121v-93l375 116q15 5 28 -5t13 -26v-128q0 -23 -23 -31l-393 -121v-487q188 13 318 151t130 328q0 14 9 23t23 9h160q14 0 23 -9t9 -23z" />
|
1329 |
+
<glyph glyph-name="plus_square_o" unicode="" horiz-adv-x="1408"
|
1330 |
+
d="M1152 736v-64q0 -14 -9 -23t-23 -9h-352v-352q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v352h-352q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h352v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-352h352q14 0 23 -9t9 -23zM1280 288v832q0 66 -47 113t-113 47h-832
|
1331 |
+
q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113zM1408 1120v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q119 0 203.5 -84.5t84.5 -203.5z" />
|
1332 |
+
<glyph glyph-name="_382" unicode="" horiz-adv-x="2176"
|
1333 |
+
d="M620 416q-110 -64 -268 -64h-128v64h-64q-13 0 -22.5 23.5t-9.5 56.5q0 24 7 49q-58 2 -96.5 10.5t-38.5 20.5t38.5 20.5t96.5 10.5q-7 25 -7 49q0 33 9.5 56.5t22.5 23.5h64v64h128q158 0 268 -64h1113q42 -7 106.5 -18t80.5 -14q89 -15 150 -40.5t83.5 -47.5t22.5 -40
|
1334 |
+
t-22.5 -40t-83.5 -47.5t-150 -40.5q-16 -3 -80.5 -14t-106.5 -18h-1113zM1739 668q53 -36 53 -92t-53 -92l81 -30q68 48 68 122t-68 122zM625 400h1015q-217 -38 -456 -80q-57 0 -113 -24t-83 -48l-28 -24l-288 -288q-26 -26 -70.5 -45t-89.5 -19h-96l-93 464h29
|
1335 |
+
q157 0 273 64zM352 816h-29l93 464h96q46 0 90 -19t70 -45l288 -288q4 -4 11 -10.5t30.5 -23t48.5 -29t61.5 -23t72.5 -10.5l456 -80h-1015q-116 64 -273 64z" />
|
1336 |
+
<glyph glyph-name="_383" unicode="" horiz-adv-x="1664"
|
1337 |
+
d="M1519 760q62 0 103.5 -40.5t41.5 -101.5q0 -97 -93 -130l-172 -59l56 -167q7 -21 7 -47q0 -59 -42 -102t-101 -43q-47 0 -85.5 27t-53.5 72l-55 165l-310 -106l55 -164q8 -24 8 -47q0 -59 -42 -102t-102 -43q-47 0 -85 27t-53 72l-55 163l-153 -53q-29 -9 -50 -9
|
1338 |
+
q-61 0 -101.5 40t-40.5 101q0 47 27.5 85t71.5 53l156 53l-105 313l-156 -54q-26 -8 -48 -8q-60 0 -101 40.5t-41 100.5q0 47 27.5 85t71.5 53l157 53l-53 159q-8 24 -8 47q0 60 42 102.5t102 42.5q47 0 85 -27t53 -72l54 -160l310 105l-54 160q-8 24 -8 47q0 59 42.5 102
|
1339 |
+
t101.5 43q47 0 85.5 -27.5t53.5 -71.5l53 -161l162 55q21 6 43 6q60 0 102.5 -39.5t42.5 -98.5q0 -45 -30 -81.5t-74 -51.5l-157 -54l105 -316l164 56q24 8 46 8zM725 498l310 105l-105 315l-310 -107z" />
|
1340 |
+
<glyph glyph-name="_384" unicode=""
|
1341 |
+
d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM1280 352v436q-31 -35 -64 -55q-34 -22 -132.5 -85t-151.5 -99q-98 -69 -164 -69v0v0q-66 0 -164 69
|
1342 |
+
q-47 32 -142 92.5t-142 92.5q-12 8 -33 27t-31 27v-436q0 -40 28 -68t68 -28h832q40 0 68 28t28 68zM1280 925q0 41 -27.5 70t-68.5 29h-832q-40 0 -68 -28t-28 -68q0 -37 30.5 -76.5t67.5 -64.5q47 -32 137.5 -89t129.5 -83q3 -2 17 -11.5t21 -14t21 -13t23.5 -13
|
1343 |
+
t21.5 -9.5t22.5 -7.5t20.5 -2.5t20.5 2.5t22.5 7.5t21.5 9.5t23.5 13t21 13t21 14t17 11.5l267 174q35 23 66.5 62.5t31.5 73.5z" />
|
1344 |
+
<glyph glyph-name="_385" unicode="" horiz-adv-x="1792"
|
1345 |
+
d="M127 640q0 163 67 313l367 -1005q-196 95 -315 281t-119 411zM1415 679q0 -19 -2.5 -38.5t-10 -49.5t-11.5 -44t-17.5 -59t-17.5 -58l-76 -256l-278 826q46 3 88 8q19 2 26 18.5t-2.5 31t-28.5 13.5l-205 -10q-75 1 -202 10q-12 1 -20.5 -5t-11.5 -15t-1.5 -18.5t9 -16.5
|
1346 |
+
t19.5 -8l80 -8l120 -328l-168 -504l-280 832q46 3 88 8q19 2 26 18.5t-2.5 31t-28.5 13.5l-205 -10q-7 0 -23 0.5t-26 0.5q105 160 274.5 253.5t367.5 93.5q147 0 280.5 -53t238.5 -149h-10q-55 0 -92 -40.5t-37 -95.5q0 -12 2 -24t4 -21.5t8 -23t9 -21t12 -22.5t12.5 -21
|
1347 |
+
t14.5 -24t14 -23q63 -107 63 -212zM909 573l237 -647q1 -6 5 -11q-126 -44 -255 -44q-112 0 -217 32zM1570 1009q95 -174 95 -369q0 -209 -104 -385.5t-279 -278.5l235 678q59 169 59 276q0 42 -6 79zM896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286
|
1348 |
+
t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM896 -215q173 0 331.5 68t273 182.5t182.5 273t68 331.5t-68 331.5t-182.5 273t-273 182.5t-331.5 68t-331.5 -68t-273 -182.5t-182.5 -273t-68 -331.5t68 -331.5t182.5 -273
|
1349 |
+
t273 -182.5t331.5 -68z" />
|
1350 |
+
<glyph glyph-name="_386" unicode="" horiz-adv-x="1792"
|
1351 |
+
d="M1086 1536v-1536l-272 -128q-228 20 -414 102t-293 208.5t-107 272.5q0 140 100.5 263.5t275 205.5t391.5 108v-172q-217 -38 -356.5 -150t-139.5 -255q0 -152 154.5 -267t388.5 -145v1360zM1755 954l37 -390l-525 114l147 83q-119 70 -280 99v172q277 -33 481 -157z" />
|
1352 |
+
<glyph glyph-name="_387" unicode="" horiz-adv-x="2048"
|
1353 |
+
d="M960 1536l960 -384v-128h-128q0 -26 -20.5 -45t-48.5 -19h-1526q-28 0 -48.5 19t-20.5 45h-128v128zM256 896h256v-768h128v768h256v-768h128v768h256v-768h128v768h256v-768h59q28 0 48.5 -19t20.5 -45v-64h-1664v64q0 26 20.5 45t48.5 19h59v768zM1851 -64
|
1354 |
+
q28 0 48.5 -19t20.5 -45v-128h-1920v128q0 26 20.5 45t48.5 19h1782z" />
|
1355 |
+
<glyph glyph-name="_388" unicode="" horiz-adv-x="2304"
|
1356 |
+
d="M1774 700l18 -316q4 -69 -82 -128t-235 -93.5t-323 -34.5t-323 34.5t-235 93.5t-82 128l18 316l574 -181q22 -7 48 -7t48 7zM2304 1024q0 -23 -22 -31l-1120 -352q-4 -1 -10 -1t-10 1l-652 206q-43 -34 -71 -111.5t-34 -178.5q63 -36 63 -109q0 -69 -58 -107l58 -433
|
1357 |
+
q2 -14 -8 -25q-9 -11 -24 -11h-192q-15 0 -24 11q-10 11 -8 25l58 433q-58 38 -58 107q0 73 65 111q11 207 98 330l-333 104q-22 8 -22 31t22 31l1120 352q4 1 10 1t10 -1l1120 -352q22 -8 22 -31z" />
|
1358 |
+
<glyph glyph-name="_389" unicode=""
|
1359 |
+
d="M859 579l13 -707q-62 11 -105 11q-41 0 -105 -11l13 707q-40 69 -168.5 295.5t-216.5 374.5t-181 287q58 -15 108 -15q44 0 111 15q63 -111 133.5 -229.5t167 -276.5t138.5 -227q37 61 109.5 177.5t117.5 190t105 176t107 189.5q54 -14 107 -14q56 0 114 14v0
|
1360 |
+
q-28 -39 -60 -88.5t-49.5 -78.5t-56.5 -96t-49 -84q-146 -248 -353 -610z" />
|
1361 |
+
<glyph glyph-name="uniF1A0" unicode=""
|
1362 |
+
d="M768 750h725q12 -67 12 -128q0 -217 -91 -387.5t-259.5 -266.5t-386.5 -96q-157 0 -299 60.5t-245 163.5t-163.5 245t-60.5 299t60.5 299t163.5 245t245 163.5t299 60.5q300 0 515 -201l-209 -201q-123 119 -306 119q-129 0 -238.5 -65t-173.5 -176.5t-64 -243.5
|
1363 |
+
t64 -243.5t173.5 -176.5t238.5 -65q87 0 160 24t120 60t82 82t51.5 87t22.5 78h-436v264z" />
|
1364 |
+
<glyph glyph-name="f1a1" unicode="" horiz-adv-x="1792"
|
1365 |
+
d="M1095 369q16 -16 0 -31q-62 -62 -199 -62t-199 62q-16 15 0 31q6 6 15 6t15 -6q48 -49 169 -49q120 0 169 49q6 6 15 6t15 -6zM788 550q0 -37 -26 -63t-63 -26t-63.5 26t-26.5 63q0 38 26.5 64t63.5 26t63 -26.5t26 -63.5zM1183 550q0 -37 -26.5 -63t-63.5 -26t-63 26
|
1366 |
+
t-26 63t26 63.5t63 26.5t63.5 -26t26.5 -64zM1434 670q0 49 -35 84t-85 35t-86 -36q-130 90 -311 96l63 283l200 -45q0 -37 26 -63t63 -26t63.5 26.5t26.5 63.5t-26.5 63.5t-63.5 26.5q-54 0 -80 -50l-221 49q-19 5 -25 -16l-69 -312q-180 -7 -309 -97q-35 37 -87 37
|
1367 |
+
q-50 0 -85 -35t-35 -84q0 -35 18.5 -64t49.5 -44q-6 -27 -6 -56q0 -142 140 -243t337 -101q198 0 338 101t140 243q0 32 -7 57q30 15 48 43.5t18 63.5zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191
|
1368 |
+
t348 71t348 -71t286 -191t191 -286t71 -348z" />
|
1369 |
+
<glyph glyph-name="_392" unicode=""
|
1370 |
+
d="M939 407q13 -13 0 -26q-53 -53 -171 -53t-171 53q-13 13 0 26q5 6 13 6t13 -6q42 -42 145 -42t145 42q5 6 13 6t13 -6zM676 563q0 -31 -23 -54t-54 -23t-54 23t-23 54q0 32 22.5 54.5t54.5 22.5t54.5 -22.5t22.5 -54.5zM1014 563q0 -31 -23 -54t-54 -23t-54 23t-23 54
|
1371 |
+
q0 32 22.5 54.5t54.5 22.5t54.5 -22.5t22.5 -54.5zM1229 666q0 42 -30 72t-73 30q-42 0 -73 -31q-113 78 -267 82l54 243l171 -39q1 -32 23.5 -54t53.5 -22q32 0 54.5 22.5t22.5 54.5t-22.5 54.5t-54.5 22.5q-48 0 -69 -43l-189 42q-17 5 -21 -13l-60 -268q-154 -6 -265 -83
|
1372 |
+
q-30 32 -74 32q-43 0 -73 -30t-30 -72q0 -30 16 -55t42 -38q-5 -25 -5 -48q0 -122 120 -208.5t289 -86.5q170 0 290 86.5t120 208.5q0 25 -6 49q25 13 40.5 37.5t15.5 54.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960
|
1373 |
+
q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
|
1374 |
+
<glyph glyph-name="_393" unicode=""
|
1375 |
+
d="M866 697l90 27v62q0 79 -58 135t-138 56t-138 -55.5t-58 -134.5v-283q0 -20 -14 -33.5t-33 -13.5t-32.5 13.5t-13.5 33.5v120h-151v-122q0 -82 57.5 -139t139.5 -57q81 0 138.5 56.5t57.5 136.5v280q0 19 13.5 33t33.5 14q19 0 32.5 -14t13.5 -33v-54zM1199 502v122h-150
|
1376 |
+
v-126q0 -20 -13.5 -33.5t-33.5 -13.5q-19 0 -32.5 14t-13.5 33v123l-90 -26l-60 28v-123q0 -80 58 -137t139 -57t138.5 57t57.5 139zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103
|
1377 |
+
t385.5 -103t279.5 -279.5t103 -385.5z" />
|
1378 |
+
<glyph glyph-name="f1a4" unicode="" horiz-adv-x="1920"
|
1379 |
+
d="M1062 824v118q0 42 -30 72t-72 30t-72 -30t-30 -72v-612q0 -175 -126 -299t-303 -124q-178 0 -303.5 125.5t-125.5 303.5v266h328v-262q0 -43 30 -72.5t72 -29.5t72 29.5t30 72.5v620q0 171 126.5 292t301.5 121q176 0 302 -122t126 -294v-136l-195 -58zM1592 602h328
|
1380 |
+
v-266q0 -178 -125.5 -303.5t-303.5 -125.5q-177 0 -303 124.5t-126 300.5v268l131 -61l195 58v-270q0 -42 30 -71.5t72 -29.5t72 29.5t30 71.5v275z" />
|
1381 |
+
<glyph glyph-name="_395" unicode=""
|
1382 |
+
d="M1472 160v480h-704v704h-480q-93 0 -158.5 -65.5t-65.5 -158.5v-480h704v-704h480q93 0 158.5 65.5t65.5 158.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5
|
1383 |
+
t84.5 -203.5z" />
|
1384 |
+
<glyph glyph-name="_396" unicode="" horiz-adv-x="2048"
|
1385 |
+
d="M328 1254h204v-983h-532v697h328v286zM328 435v369h-123v-369h123zM614 968v-697h205v697h-205zM614 1254v-204h205v204h-205zM901 968h533v-942h-533v163h328v82h-328v697zM1229 435v369h-123v-369h123zM1516 968h532v-942h-532v163h327v82h-327v697zM1843 435v369h-123
|
1386 |
+
v-369h123z" />
|
1387 |
+
<glyph glyph-name="_397" unicode=""
|
1388 |
+
d="M1046 516q0 -64 -38 -109t-91 -45q-43 0 -70 15v277q28 17 70 17q53 0 91 -45.5t38 -109.5zM703 944q0 -64 -38 -109.5t-91 -45.5q-43 0 -70 15v277q28 17 70 17q53 0 91 -45t38 -109zM1265 513q0 134 -88 229t-213 95q-20 0 -39 -3q-23 -78 -78 -136q-87 -95 -211 -101
|
1389 |
+
v-636l211 41v206q51 -19 117 -19q125 0 213 95t88 229zM922 940q0 134 -88.5 229t-213.5 95q-74 0 -141 -36h-186v-840l211 41v206q55 -19 116 -19q125 0 213.5 95t88.5 229zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960
|
1390 |
+
q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
|
1391 |
+
<glyph glyph-name="_398" unicode="" horiz-adv-x="2038"
|
1392 |
+
d="M1222 607q75 3 143.5 -20.5t118 -58.5t101 -94.5t84 -108t75.5 -120.5q33 -56 78.5 -109t75.5 -80.5t99 -88.5q-48 -30 -108.5 -57.5t-138.5 -59t-114 -47.5q-44 37 -74 115t-43.5 164.5t-33 180.5t-42.5 168.5t-72.5 123t-122.5 48.5l-10 -2l-6 -4q4 -5 13 -14
|
1393 |
+
q6 -5 28 -23.5t25.5 -22t19 -18t18 -20.5t11.5 -21t10.5 -27.5t4.5 -31t4 -40.5l1 -33q1 -26 -2.5 -57.5t-7.5 -52t-12.5 -58.5t-11.5 -53q-35 1 -101 -9.5t-98 -10.5q-39 0 -72 10q-2 16 -2 47q0 74 3 96q2 13 31.5 41.5t57 59t26.5 51.5q-24 2 -43 -24
|
1394 |
+
q-36 -53 -111.5 -99.5t-136.5 -46.5q-25 0 -75.5 63t-106.5 139.5t-84 96.5q-6 4 -27 30q-482 -112 -513 -112q-16 0 -28 11t-12 27q0 15 8.5 26.5t22.5 14.5l486 106q-8 14 -8 25t5.5 17.5t16 11.5t20 7t23 4.5t18.5 4.5q4 1 15.5 7.5t17.5 6.5q15 0 28 -16t20 -33
|
1395 |
+
q163 37 172 37q17 0 29.5 -11t12.5 -28q0 -15 -8.5 -26t-23.5 -14l-182 -40l-1 -16q-1 -26 81.5 -117.5t104.5 -91.5q47 0 119 80t72 129q0 36 -23.5 53t-51 18.5t-51 11.5t-23.5 34q0 16 10 34l-68 19q43 44 43 117q0 26 -5 58q82 16 144 16q44 0 71.5 -1.5t48.5 -8.5
|
1396 |
+
t31 -13.5t20.5 -24.5t15.5 -33.5t17 -47.5t24 -60l50 25q-3 -40 -23 -60t-42.5 -21t-40 -6.5t-16.5 -20.5zM1282 842q-5 5 -13.5 15.5t-12 14.5t-10.5 11.5t-10 10.5l-8 8t-8.5 7.5t-8 5t-8.5 4.5q-7 3 -14.5 5t-20.5 2.5t-22 0.5h-32.5h-37.5q-126 0 -217 -43
|
1397 |
+
q16 30 36 46.5t54 29.5t65.5 36t46 36.5t50 55t43.5 50.5q12 -9 28 -31.5t32 -36.5t38 -13l12 1v-76l22 -1q247 95 371 190q28 21 50 39t42.5 37.5t33 31t29.5 34t24 31t24.5 37t23 38t27 47.5t29.5 53l7 9q-2 -53 -43 -139q-79 -165 -205 -264t-306 -142q-14 -3 -42 -7.5
|
1398 |
+
t-50 -9.5t-39 -14q3 -19 24.5 -46t21.5 -34q0 -11 -26 -30zM1061 -79q39 26 131.5 47.5t146.5 21.5q9 0 22.5 -15.5t28 -42.5t26 -50t24 -51t14.5 -33q-121 -45 -244 -45q-61 0 -125 11zM822 568l48 12l109 -177l-73 -48zM1323 51q3 -15 3 -16q0 -7 -17.5 -14.5t-46 -13
|
1399 |
+
t-54 -9.5t-53.5 -7.5t-32 -4.5l-7 43q21 2 60.5 8.5t72 10t60.5 3.5h14zM866 679l-96 -20l-6 17q10 1 32.5 7t34.5 6q19 0 35 -10zM1061 45h31l10 -83l-41 -12v95zM1950 1535v1v-1zM1950 1535l-1 -5l-2 -2l1 3zM1950 1535l1 1z" />
|
1400 |
+
<glyph glyph-name="_399" unicode=""
|
1401 |
+
d="M1167 -50q-5 19 -24 5q-30 -22 -87 -39t-131 -17q-129 0 -193 49q-5 4 -13 4q-11 0 -26 -12q-7 -6 -7.5 -16t7.5 -20q34 -32 87.5 -46t102.5 -12.5t99 4.5q41 4 84.5 20.5t65 30t28.5 20.5q12 12 7 29zM1128 65q-19 47 -39 61q-23 15 -76 15q-47 0 -71 -10
|
1402 |
+
q-29 -12 -78 -56q-26 -24 -12 -44q9 -8 17.5 -4.5t31.5 23.5q3 2 10.5 8.5t10.5 8.5t10 7t11.5 7t12.5 5t15 4.5t16.5 2.5t20.5 1q27 0 44.5 -7.5t23 -14.5t13.5 -22q10 -17 12.5 -20t12.5 1q23 12 14 34zM1483 346q0 22 -5 44.5t-16.5 45t-34 36.5t-52.5 14
|
1403 |
+
q-33 0 -97 -41.5t-129 -83.5t-101 -42q-27 -1 -63.5 19t-76 49t-83.5 58t-100 49t-111 19q-115 -1 -197 -78.5t-84 -178.5q-2 -112 74 -164q29 -20 62.5 -28.5t103.5 -8.5q57 0 132 32.5t134 71t120 70.5t93 31q26 -1 65 -31.5t71.5 -67t68 -67.5t55.5 -32q35 -3 58.5 14
|
1404 |
+
t55.5 63q28 41 42.5 101t14.5 106zM1536 506q0 -164 -62 -304.5t-166 -236t-242.5 -149.5t-290.5 -54t-293 57.5t-247.5 157t-170.5 241.5t-64 302q0 89 19.5 172.5t49 145.5t70.5 118.5t78.5 94t78.5 69.5t64.5 46.5t42.5 24.5q14 8 51 26.5t54.5 28.5t48 30t60.5 44
|
1405 |
+
q36 28 58 72.5t30 125.5q129 -155 186 -193q44 -29 130 -68t129 -66q21 -13 39 -25t60.5 -46.5t76 -70.5t75 -95t69 -122t47 -148.5t19.5 -177.5z" />
|
1406 |
+
<glyph glyph-name="_400" unicode=""
|
1407 |
+
d="M1070 463l-160 -160l-151 -152l-30 -30q-65 -64 -151.5 -87t-171.5 -2q-16 -70 -72 -115t-129 -45q-85 0 -145 60.5t-60 145.5q0 72 44.5 128t113.5 72q-22 86 1 173t88 152l12 12l151 -152l-11 -11q-37 -37 -37 -89t37 -90q37 -37 89 -37t89 37l30 30l151 152l161 160z
|
1408 |
+
M729 1145l12 -12l-152 -152l-12 12q-37 37 -89 37t-89 -37t-37 -89.5t37 -89.5l29 -29l152 -152l160 -160l-151 -152l-161 160l-151 152l-30 30q-68 67 -90 159.5t5 179.5q-70 15 -115 71t-45 129q0 85 60 145.5t145 60.5q76 0 133.5 -49t69.5 -123q84 20 169.5 -3.5
|
1409 |
+
t149.5 -87.5zM1536 78q0 -85 -60 -145.5t-145 -60.5q-74 0 -131 47t-71 118q-86 -28 -179.5 -6t-161.5 90l-11 12l151 152l12 -12q37 -37 89 -37t89 37t37 89t-37 89l-30 30l-152 152l-160 160l152 152l160 -160l152 -152l29 -30q64 -64 87.5 -150.5t2.5 -171.5
|
1410 |
+
q76 -11 126.5 -68.5t50.5 -134.5zM1534 1202q0 -77 -51 -135t-127 -69q26 -85 3 -176.5t-90 -158.5l-12 -12l-151 152l12 12q37 37 37 89t-37 89t-89 37t-89 -37l-30 -30l-152 -152l-160 -160l-152 152l161 160l152 152l29 30q67 67 159 89.5t178 -3.5q11 75 68.5 126
|
1411 |
+
t135.5 51q85 0 145 -60.5t60 -145.5z" />
|
1412 |
+
<glyph glyph-name="f1ab" unicode=""
|
1413 |
+
d="M654 458q-1 -3 -12.5 0.5t-31.5 11.5l-20 9q-44 20 -87 49q-7 5 -41 31.5t-38 28.5q-67 -103 -134 -181q-81 -95 -105 -110q-4 -2 -19.5 -4t-18.5 0q6 4 82 92q21 24 85.5 115t78.5 118q17 30 51 98.5t36 77.5q-8 1 -110 -33q-8 -2 -27.5 -7.5t-34.5 -9.5t-17 -5
|
1414 |
+
q-2 -2 -2 -10.5t-1 -9.5q-5 -10 -31 -15q-23 -7 -47 0q-18 4 -28 21q-4 6 -5 23q6 2 24.5 5t29.5 6q58 16 105 32q100 35 102 35q10 2 43 19.5t44 21.5q9 3 21.5 8t14.5 5.5t6 -0.5q2 -12 -1 -33q0 -2 -12.5 -27t-26.5 -53.5t-17 -33.5q-25 -50 -77 -131l64 -28
|
1415 |
+
q12 -6 74.5 -32t67.5 -28q4 -1 10.5 -25.5t4.5 -30.5zM449 944q3 -15 -4 -28q-12 -23 -50 -38q-30 -12 -60 -12q-26 3 -49 26q-14 15 -18 41l1 3q3 -3 19.5 -5t26.5 0t58 16q36 12 55 14q17 0 21 -17zM1147 815l63 -227l-139 42zM39 15l694 232v1032l-694 -233v-1031z
|
1416 |
+
M1280 332l102 -31l-181 657l-100 31l-216 -536l102 -31l45 110l211 -65zM777 1294l573 -184v380zM1088 -29l158 -13l-54 -160l-40 66q-130 -83 -276 -108q-58 -12 -91 -12h-84q-79 0 -199.5 39t-183.5 85q-8 7 -8 16q0 8 5 13.5t13 5.5q4 0 18 -7.5t30.5 -16.5t20.5 -11
|
1417 |
+
q73 -37 159.5 -61.5t157.5 -24.5q95 0 167 14.5t157 50.5q15 7 30.5 15.5t34 19t28.5 16.5zM1536 1050v-1079l-774 246q-14 -6 -375 -127.5t-368 -121.5q-13 0 -18 13q0 1 -1 3v1078q3 9 4 10q5 6 20 11q107 36 149 50v384l558 -198q2 0 160.5 55t316 108.5t161.5 53.5
|
1418 |
+
q20 0 20 -21v-418z" />
|
1419 |
+
<glyph glyph-name="_402" unicode="" horiz-adv-x="1792"
|
1420 |
+
d="M288 1152q66 0 113 -47t47 -113v-1088q0 -66 -47 -113t-113 -47h-128q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h128zM1664 989q58 -34 93 -93t35 -128v-768q0 -106 -75 -181t-181 -75h-864q-66 0 -113 47t-47 113v1536q0 40 28 68t68 28h672q40 0 88 -20t76 -48
|
1421 |
+
l152 -152q28 -28 48 -76t20 -88v-163zM928 0v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM928 256v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM928 512v128q0 14 -9 23
|
1422 |
+
t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1184 0v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1184 256v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128
|
1423 |
+
q14 0 23 9t9 23zM1184 512v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1440 0v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1440 256v128q0 14 -9 23t-23 9h-128
|
1424 |
+
q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1440 512v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1536 896v256h-160q-40 0 -68 28t-28 68v160h-640v-512h896z" />
|
1425 |
+
<glyph glyph-name="_403" unicode=""
|
1426 |
+
d="M1344 1536q26 0 45 -19t19 -45v-1664q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1664q0 26 19 45t45 19h1280zM512 1248v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM512 992v-64q0 -14 9 -23t23 -9h64q14 0 23 9
|
1427 |
+
t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM512 736v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM512 480v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM384 160v64
|
1428 |
+
q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM384 416v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM384 672v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64
|
1429 |
+
q14 0 23 9t9 23zM384 928v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM384 1184v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 -96v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9
|
1430 |
+
t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM896 416v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 672v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 928v64
|
1431 |
+
q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 1184v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 160v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64
|
1432 |
+
q14 0 23 9t9 23zM1152 416v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 672v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 928v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9
|
1433 |
+
t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 1184v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23z" />
|
1434 |
+
<glyph glyph-name="_404" unicode="" horiz-adv-x="1280"
|
1435 |
+
d="M1188 988l-292 -292v-824q0 -46 -33 -79t-79 -33t-79 33t-33 79v384h-64v-384q0 -46 -33 -79t-79 -33t-79 33t-33 79v824l-292 292q-28 28 -28 68t28 68q29 28 68.5 28t67.5 -28l228 -228h368l228 228q28 28 68 28t68 -28q28 -29 28 -68.5t-28 -67.5zM864 1152
|
1436 |
+
q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" />
|
1437 |
+
<glyph glyph-name="uniF1B1" unicode="" horiz-adv-x="1664"
|
1438 |
+
d="M780 1064q0 -60 -19 -113.5t-63 -92.5t-105 -39q-76 0 -138 57.5t-92 135.5t-30 151q0 60 19 113.5t63 92.5t105 39q77 0 138.5 -57.5t91.5 -135t30 -151.5zM438 581q0 -80 -42 -139t-119 -59q-76 0 -141.5 55.5t-100.5 133.5t-35 152q0 80 42 139.5t119 59.5
|
1439 |
+
q76 0 141.5 -55.5t100.5 -134t35 -152.5zM832 608q118 0 255 -97.5t229 -237t92 -254.5q0 -46 -17 -76.5t-48.5 -45t-64.5 -20t-76 -5.5q-68 0 -187.5 45t-182.5 45q-66 0 -192.5 -44.5t-200.5 -44.5q-183 0 -183 146q0 86 56 191.5t139.5 192.5t187.5 146t193 59zM1071 819
|
1440 |
+
q-61 0 -105 39t-63 92.5t-19 113.5q0 74 30 151.5t91.5 135t138.5 57.5q61 0 105 -39t63 -92.5t19 -113.5q0 -73 -30 -151t-92 -135.5t-138 -57.5zM1503 923q77 0 119 -59.5t42 -139.5q0 -74 -35 -152t-100.5 -133.5t-141.5 -55.5q-77 0 -119 59t-42 139q0 74 35 152.5
|
1441 |
+
t100.5 134t141.5 55.5z" />
|
1442 |
+
<glyph glyph-name="_406" unicode="" horiz-adv-x="768"
|
1443 |
+
d="M704 1008q0 -145 -57 -243.5t-152 -135.5l45 -821q2 -26 -16 -45t-44 -19h-192q-26 0 -44 19t-16 45l45 821q-95 37 -152 135.5t-57 243.5q0 128 42.5 249.5t117.5 200t160 78.5t160 -78.5t117.5 -200t42.5 -249.5z" />
|
1444 |
+
<glyph glyph-name="_407" unicode="" horiz-adv-x="1792"
|
1445 |
+
d="M896 -93l640 349v636l-640 -233v-752zM832 772l698 254l-698 254l-698 -254zM1664 1024v-768q0 -35 -18 -65t-49 -47l-704 -384q-28 -16 -61 -16t-61 16l-704 384q-31 17 -49 47t-18 65v768q0 40 23 73t61 47l704 256q22 8 44 8t44 -8l704 -256q38 -14 61 -47t23 -73z
|
1446 |
+
" />
|
1447 |
+
<glyph glyph-name="_408" unicode="" horiz-adv-x="2304"
|
1448 |
+
d="M640 -96l384 192v314l-384 -164v-342zM576 358l404 173l-404 173l-404 -173zM1664 -96l384 192v314l-384 -164v-342zM1600 358l404 173l-404 173l-404 -173zM1152 651l384 165v266l-384 -164v-267zM1088 1030l441 189l-441 189l-441 -189zM2176 512v-416q0 -36 -19 -67
|
1449 |
+
t-52 -47l-448 -224q-25 -14 -57 -14t-57 14l-448 224q-4 2 -7 4q-2 -2 -7 -4l-448 -224q-25 -14 -57 -14t-57 14l-448 224q-33 16 -52 47t-19 67v416q0 38 21.5 70t56.5 48l434 186v400q0 38 21.5 70t56.5 48l448 192q23 10 50 10t50 -10l448 -192q35 -16 56.5 -48t21.5 -70
|
1450 |
+
v-400l434 -186q36 -16 57 -48t21 -70z" />
|
1451 |
+
<glyph glyph-name="_409" unicode="" horiz-adv-x="2048"
|
1452 |
+
d="M1848 1197h-511v-124h511v124zM1596 771q-90 0 -146 -52.5t-62 -142.5h408q-18 195 -200 195zM1612 186q63 0 122 32t76 87h221q-100 -307 -427 -307q-214 0 -340.5 132t-126.5 347q0 208 130.5 345.5t336.5 137.5q138 0 240.5 -68t153 -179t50.5 -248q0 -17 -2 -47h-658
|
1453 |
+
q0 -111 57.5 -171.5t166.5 -60.5zM277 236h296q205 0 205 167q0 180 -199 180h-302v-347zM277 773h281q78 0 123.5 36.5t45.5 113.5q0 144 -190 144h-260v-294zM0 1282h594q87 0 155 -14t126.5 -47.5t90 -96.5t31.5 -154q0 -181 -172 -263q114 -32 172 -115t58 -204
|
1454 |
+
q0 -75 -24.5 -136.5t-66 -103.5t-98.5 -71t-121 -42t-134 -13h-611v1260z" />
|
1455 |
+
<glyph glyph-name="_410" unicode=""
|
1456 |
+
d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM499 1041h-371v-787h382q117 0 197 57.5t80 170.5q0 158 -143 200q107 52 107 164q0 57 -19.5 96.5
|
1457 |
+
t-56.5 60.5t-79 29.5t-97 8.5zM477 723h-176v184h163q119 0 119 -90q0 -94 -106 -94zM486 388h-185v217h189q124 0 124 -113q0 -104 -128 -104zM1136 356q-68 0 -104 38t-36 107h411q1 10 1 30q0 132 -74.5 220.5t-203.5 88.5q-128 0 -210 -86t-82 -216q0 -135 79 -217
|
1458 |
+
t213 -82q205 0 267 191h-138q-11 -34 -47.5 -54t-75.5 -20zM1126 722q113 0 124 -122h-254q4 56 39 89t91 33zM964 988h319v-77h-319v77z" />
|
1459 |
+
<glyph glyph-name="_411" unicode="" horiz-adv-x="1792"
|
1460 |
+
d="M1582 954q0 -101 -71.5 -172.5t-172.5 -71.5t-172.5 71.5t-71.5 172.5t71.5 172.5t172.5 71.5t172.5 -71.5t71.5 -172.5zM812 212q0 104 -73 177t-177 73q-27 0 -54 -6l104 -42q77 -31 109.5 -106.5t1.5 -151.5q-31 -77 -107 -109t-152 -1q-21 8 -62 24.5t-61 24.5
|
1461 |
+
q32 -60 91 -96.5t130 -36.5q104 0 177 73t73 177zM1642 953q0 126 -89.5 215.5t-215.5 89.5q-127 0 -216.5 -89.5t-89.5 -215.5q0 -127 89.5 -216t216.5 -89q126 0 215.5 89t89.5 216zM1792 953q0 -189 -133.5 -322t-321.5 -133l-437 -319q-12 -129 -109 -218t-229 -89
|
1462 |
+
q-121 0 -214 76t-118 192l-230 92v429l389 -157q79 48 173 48q13 0 35 -2l284 407q2 187 135.5 319t320.5 132q188 0 321.5 -133.5t133.5 -321.5z" />
|
1463 |
+
<glyph glyph-name="_412" unicode=""
|
1464 |
+
d="M1242 889q0 80 -57 136.5t-137 56.5t-136.5 -57t-56.5 -136q0 -80 56.5 -136.5t136.5 -56.5t137 56.5t57 136.5zM632 301q0 -83 -58 -140.5t-140 -57.5q-56 0 -103 29t-72 77q52 -20 98 -40q60 -24 120 1.5t85 86.5q24 60 -1.5 120t-86.5 84l-82 33q22 5 42 5
|
1465 |
+
q82 0 140 -57.5t58 -140.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v153l172 -69q20 -92 93.5 -152t168.5 -60q104 0 181 70t87 173l345 252q150 0 255.5 105.5t105.5 254.5q0 150 -105.5 255.5t-255.5 105.5
|
1466 |
+
q-148 0 -253 -104.5t-107 -252.5l-225 -322q-9 1 -28 1q-75 0 -137 -37l-297 119v468q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5zM1289 887q0 -100 -71 -170.5t-171 -70.5t-170.5 70.5t-70.5 170.5t70.5 171t170.5 71q101 0 171.5 -70.5t70.5 -171.5z
|
1467 |
+
" />
|
1468 |
+
<glyph glyph-name="_413" unicode="" horiz-adv-x="1792"
|
1469 |
+
d="M836 367l-15 -368l-2 -22l-420 29q-36 3 -67 31.5t-47 65.5q-11 27 -14.5 55t4 65t12 55t21.5 64t19 53q78 -12 509 -28zM449 953l180 -379l-147 92q-63 -72 -111.5 -144.5t-72.5 -125t-39.5 -94.5t-18.5 -63l-4 -21l-190 357q-17 26 -18 56t6 47l8 18q35 63 114 188
|
1470 |
+
l-140 86zM1680 436l-188 -359q-12 -29 -36.5 -46.5t-43.5 -20.5l-18 -4q-71 -7 -219 -12l8 -164l-230 367l211 362l7 -173q170 -16 283 -5t170 33zM895 1360q-47 -63 -265 -435l-317 187l-19 12l225 356q20 31 60 45t80 10q24 -2 48.5 -12t42 -21t41.5 -33t36 -34.5
|
1471 |
+
t36 -39.5t32 -35zM1550 1053l212 -363q18 -37 12.5 -76t-27.5 -74q-13 -20 -33 -37t-38 -28t-48.5 -22t-47 -16t-51.5 -14t-46 -12q-34 72 -265 436l313 195zM1407 1279l142 83l-220 -373l-419 20l151 86q-34 89 -75 166t-75.5 123.5t-64.5 80t-47 46.5l-17 13l405 -1
|
1472 |
+
q31 3 58 -10.5t39 -28.5l11 -15q39 -61 112 -190z" />
|
1473 |
+
<glyph glyph-name="_414" unicode="" horiz-adv-x="2048"
|
1474 |
+
d="M480 448q0 66 -47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47t113 47t47 113zM516 768h1016l-89 357q-2 8 -14 17.5t-21 9.5h-768q-9 0 -21 -9.5t-14 -17.5zM1888 448q0 66 -47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47t113 47t47 113zM2048 544v-384
|
1475 |
+
q0 -14 -9 -23t-23 -9h-96v-128q0 -80 -56 -136t-136 -56t-136 56t-56 136v128h-1024v-128q0 -80 -56 -136t-136 -56t-136 56t-56 136v128h-96q-14 0 -23 9t-9 23v384q0 93 65.5 158.5t158.5 65.5h28l105 419q23 94 104 157.5t179 63.5h768q98 0 179 -63.5t104 -157.5
|
1476 |
+
l105 -419h28q93 0 158.5 -65.5t65.5 -158.5z" />
|
1477 |
+
<glyph glyph-name="_415" unicode="" horiz-adv-x="2048"
|
1478 |
+
d="M1824 640q93 0 158.5 -65.5t65.5 -158.5v-384q0 -14 -9 -23t-23 -9h-96v-64q0 -80 -56 -136t-136 -56t-136 56t-56 136v64h-1024v-64q0 -80 -56 -136t-136 -56t-136 56t-56 136v64h-96q-14 0 -23 9t-9 23v384q0 93 65.5 158.5t158.5 65.5h28l105 419q23 94 104 157.5
|
1479 |
+
t179 63.5h128v224q0 14 9 23t23 9h448q14 0 23 -9t9 -23v-224h128q98 0 179 -63.5t104 -157.5l105 -419h28zM320 160q66 0 113 47t47 113t-47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47zM516 640h1016l-89 357q-2 8 -14 17.5t-21 9.5h-768q-9 0 -21 -9.5t-14 -17.5z
|
1480 |
+
M1728 160q66 0 113 47t47 113t-47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47z" />
|
1481 |
+
<glyph glyph-name="_416" unicode=""
|
1482 |
+
d="M1504 64q0 -26 -19 -45t-45 -19h-462q1 -17 6 -87.5t5 -108.5q0 -25 -18 -42.5t-43 -17.5h-320q-25 0 -43 17.5t-18 42.5q0 38 5 108.5t6 87.5h-462q-26 0 -45 19t-19 45t19 45l402 403h-229q-26 0 -45 19t-19 45t19 45l402 403h-197q-26 0 -45 19t-19 45t19 45l384 384
|
1483 |
+
q19 19 45 19t45 -19l384 -384q19 -19 19 -45t-19 -45t-45 -19h-197l402 -403q19 -19 19 -45t-19 -45t-45 -19h-229l402 -403q19 -19 19 -45z" />
|
1484 |
+
<glyph glyph-name="_417" unicode=""
|
1485 |
+
d="M1127 326q0 32 -30 51q-193 115 -447 115q-133 0 -287 -34q-42 -9 -42 -52q0 -20 13.5 -34.5t35.5 -14.5q5 0 37 8q132 27 243 27q226 0 397 -103q19 -11 33 -11q19 0 33 13.5t14 34.5zM1223 541q0 40 -35 61q-237 141 -548 141q-153 0 -303 -42q-48 -13 -48 -64
|
1486 |
+
q0 -25 17.5 -42.5t42.5 -17.5q7 0 37 8q122 33 251 33q279 0 488 -124q24 -13 38 -13q25 0 42.5 17.5t17.5 42.5zM1331 789q0 47 -40 70q-126 73 -293 110.5t-343 37.5q-204 0 -364 -47q-23 -7 -38.5 -25.5t-15.5 -48.5q0 -31 20.5 -52t51.5 -21q11 0 40 8q133 37 307 37
|
1487 |
+
q159 0 309.5 -34t253.5 -95q21 -12 40 -12q29 0 50.5 20.5t21.5 51.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
1488 |
+
<glyph glyph-name="_418" unicode="" horiz-adv-x="1024"
|
1489 |
+
d="M1024 1233l-303 -582l24 -31h279v-415h-507l-44 -30l-142 -273l-30 -30h-301v303l303 583l-24 30h-279v415h507l44 30l142 273l30 30h301v-303z" />
|
1490 |
+
<glyph glyph-name="_419" unicode="" horiz-adv-x="2304"
|
1491 |
+
d="M784 164l16 241l-16 523q-1 10 -7.5 17t-16.5 7q-9 0 -16 -7t-7 -17l-14 -523l14 -241q1 -10 7.5 -16.5t15.5 -6.5q22 0 24 23zM1080 193l11 211l-12 586q0 16 -13 24q-8 5 -16 5t-16 -5q-13 -8 -13 -24l-1 -6l-10 -579q0 -1 11 -236v-1q0 -10 6 -17q9 -11 23 -11
|
1492 |
+
q11 0 20 9q9 7 9 20zM35 533l20 -128l-20 -126q-2 -9 -9 -9t-9 9l-17 126l17 128q2 9 9 9t9 -9zM121 612l26 -207l-26 -203q-2 -9 -10 -9q-9 0 -9 10l-23 202l23 207q0 9 9 9q8 0 10 -9zM401 159zM213 650l25 -245l-25 -237q0 -11 -11 -11q-10 0 -12 11l-21 237l21 245
|
1493 |
+
q2 12 12 12q11 0 11 -12zM307 657l23 -252l-23 -244q-2 -13 -14 -13q-13 0 -13 13l-21 244l21 252q0 13 13 13q12 0 14 -13zM401 639l21 -234l-21 -246q-2 -16 -16 -16q-6 0 -10.5 4.5t-4.5 11.5l-20 246l20 234q0 6 4.5 10.5t10.5 4.5q14 0 16 -15zM784 164zM495 785
|
1494 |
+
l21 -380l-21 -246q0 -7 -5 -12.5t-12 -5.5q-16 0 -18 18l-18 246l18 380q2 18 18 18q7 0 12 -5.5t5 -12.5zM589 871l19 -468l-19 -244q0 -8 -5.5 -13.5t-13.5 -5.5q-18 0 -20 19l-16 244l16 468q2 19 20 19q8 0 13.5 -5.5t5.5 -13.5zM687 911l18 -506l-18 -242
|
1495 |
+
q-2 -21 -22 -21q-19 0 -21 21l-16 242l16 506q0 9 6.5 15.5t14.5 6.5q9 0 15 -6.5t7 -15.5zM1079 169v0v0v0zM881 915l15 -510l-15 -239q0 -10 -7.5 -17.5t-17.5 -7.5t-17 7t-8 18l-14 239l14 510q0 11 7.5 18t17.5 7t17.5 -7t7.5 -18zM980 896l14 -492l-14 -236
|
1496 |
+
q0 -11 -8 -19t-19 -8t-19 8t-9 19l-12 236l12 492q1 12 9 20t19 8t18.5 -8t8.5 -20zM1192 404l-14 -231v0q0 -13 -9 -22t-22 -9t-22 9t-10 22l-6 114l-6 117l12 636v3q2 15 12 24q9 7 20 7q8 0 15 -5q14 -8 16 -26zM2304 423q0 -117 -83 -199.5t-200 -82.5h-786
|
1497 |
+
q-13 2 -22 11t-9 22v899q0 23 28 33q85 34 181 34q195 0 338 -131.5t160 -323.5q53 22 110 22q117 0 200 -83t83 -201z" />
|
1498 |
+
<glyph glyph-name="uniF1C0" unicode=""
|
1499 |
+
d="M768 768q237 0 443 43t325 127v-170q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5t-103 128v170q119 -84 325 -127t443 -43zM768 0q237 0 443 43t325 127v-170q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5t-103 128v170q119 -84 325 -127
|
1500 |
+
t443 -43zM768 384q237 0 443 43t325 127v-170q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5t-103 128v170q119 -84 325 -127t443 -43zM768 1536q208 0 385 -34.5t280 -93.5t103 -128v-128q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5
|
1501 |
+
t-103 128v128q0 69 103 128t280 93.5t385 34.5z" />
|
1502 |
+
<glyph glyph-name="uniF1C1" unicode=""
|
1503 |
+
d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
|
1504 |
+
M894 465q33 -26 84 -56q59 7 117 7q147 0 177 -49q16 -22 2 -52q0 -1 -1 -2l-2 -2v-1q-6 -38 -71 -38q-48 0 -115 20t-130 53q-221 -24 -392 -83q-153 -262 -242 -262q-15 0 -28 7l-24 12q-1 1 -6 5q-10 10 -6 36q9 40 56 91.5t132 96.5q14 9 23 -6q2 -2 2 -4q52 85 107 197
|
1505 |
+
q68 136 104 262q-24 82 -30.5 159.5t6.5 127.5q11 40 42 40h21h1q23 0 35 -15q18 -21 9 -68q-2 -6 -4 -8q1 -3 1 -8v-30q-2 -123 -14 -192q55 -164 146 -238zM318 54q52 24 137 158q-51 -40 -87.5 -84t-49.5 -74zM716 974q-15 -42 -2 -132q1 7 7 44q0 3 7 43q1 4 4 8
|
1506 |
+
q-1 1 -1 2q-1 2 -1 3q-1 22 -13 36q0 -1 -1 -2v-2zM592 313q135 54 284 81q-2 1 -13 9.5t-16 13.5q-76 67 -127 176q-27 -86 -83 -197q-30 -56 -45 -83zM1238 329q-24 24 -140 24q76 -28 124 -28q14 0 18 1q0 1 -2 3z" />
|
1507 |
+
<glyph glyph-name="_422" unicode=""
|
1508 |
+
d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
|
1509 |
+
M233 768v-107h70l164 -661h159l128 485q7 20 10 46q2 16 2 24h4l3 -24q1 -3 3.5 -20t5.5 -26l128 -485h159l164 661h70v107h-300v-107h90l-99 -438q-5 -20 -7 -46l-2 -21h-4q0 3 -0.5 6.5t-1.5 8t-1 6.5q-1 5 -4 21t-5 25l-144 545h-114l-144 -545q-2 -9 -4.5 -24.5
|
1510 |
+
t-3.5 -21.5l-4 -21h-4l-2 21q-2 26 -7 46l-99 438h90v107h-300z" />
|
1511 |
+
<glyph glyph-name="_423" unicode=""
|
1512 |
+
d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
|
1513 |
+
M429 106v-106h281v106h-75l103 161q5 7 10 16.5t7.5 13.5t3.5 4h2q1 -4 5 -10q2 -4 4.5 -7.5t6 -8t6.5 -8.5l107 -161h-76v-106h291v106h-68l-192 273l195 282h67v107h-279v-107h74l-103 -159q-4 -7 -10 -16.5t-9 -13.5l-2 -3h-2q-1 4 -5 10q-6 11 -17 23l-106 159h76v107
|
1514 |
+
h-290v-107h68l189 -272l-194 -283h-68z" />
|
1515 |
+
<glyph glyph-name="_424" unicode=""
|
1516 |
+
d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
|
1517 |
+
M416 106v-106h327v106h-93v167h137q76 0 118 15q67 23 106.5 87t39.5 146q0 81 -37 141t-100 87q-48 19 -130 19h-368v-107h92v-555h-92zM769 386h-119v268h120q52 0 83 -18q56 -33 56 -115q0 -89 -62 -120q-31 -15 -78 -15z" />
|
1518 |
+
<glyph glyph-name="_425" unicode=""
|
1519 |
+
d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
|
1520 |
+
M1280 320v-320h-1024v192l192 192l128 -128l384 384zM448 512q-80 0 -136 56t-56 136t56 136t136 56t136 -56t56 -136t-56 -136t-136 -56z" />
|
1521 |
+
<glyph glyph-name="_426" unicode=""
|
1522 |
+
d="M640 1152v128h-128v-128h128zM768 1024v128h-128v-128h128zM640 896v128h-128v-128h128zM768 768v128h-128v-128h128zM1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400
|
1523 |
+
v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-128v-128h-128v128h-512v-1536h1280zM781 593l107 -349q8 -27 8 -52q0 -83 -72.5 -137.5t-183.5 -54.5t-183.5 54.5t-72.5 137.5q0 25 8 52q21 63 120 396v128h128v-128h79
|
1524 |
+
q22 0 39 -13t23 -34zM640 128q53 0 90.5 19t37.5 45t-37.5 45t-90.5 19t-90.5 -19t-37.5 -45t37.5 -45t90.5 -19z" />
|
1525 |
+
<glyph glyph-name="_427" unicode=""
|
1526 |
+
d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
|
1527 |
+
M620 686q20 -8 20 -30v-544q0 -22 -20 -30q-8 -2 -12 -2q-12 0 -23 9l-166 167h-131q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h131l166 167q16 15 35 7zM1037 -3q31 0 50 24q129 159 129 363t-129 363q-16 21 -43 24t-47 -14q-21 -17 -23.5 -43.5t14.5 -47.5
|
1528 |
+
q100 -123 100 -282t-100 -282q-17 -21 -14.5 -47.5t23.5 -42.5q18 -15 40 -15zM826 145q27 0 47 20q87 93 87 219t-87 219q-18 19 -45 20t-46 -17t-20 -44.5t18 -46.5q52 -57 52 -131t-52 -131q-19 -20 -18 -46.5t20 -44.5q20 -17 44 -17z" />
|
1529 |
+
<glyph glyph-name="_428" unicode=""
|
1530 |
+
d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
|
1531 |
+
M768 768q52 0 90 -38t38 -90v-384q0 -52 -38 -90t-90 -38h-384q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h384zM1260 766q20 -8 20 -30v-576q0 -22 -20 -30q-8 -2 -12 -2q-14 0 -23 9l-265 266v90l265 266q9 9 23 9q4 0 12 -2z" />
|
1532 |
+
<glyph glyph-name="_429" unicode=""
|
1533 |
+
d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
|
1534 |
+
M480 768q8 11 21 12.5t24 -6.5l51 -38q11 -8 12.5 -21t-6.5 -24l-182 -243l182 -243q8 -11 6.5 -24t-12.5 -21l-51 -38q-11 -8 -24 -6.5t-21 12.5l-226 301q-14 19 0 38zM1282 467q14 -19 0 -38l-226 -301q-8 -11 -21 -12.5t-24 6.5l-51 38q-11 8 -12.5 21t6.5 24l182 243
|
1535 |
+
l-182 243q-8 11 -6.5 24t12.5 21l51 38q11 8 24 6.5t21 -12.5zM662 6q-13 2 -20.5 13t-5.5 24l138 831q2 13 13 20.5t24 5.5l63 -10q13 -2 20.5 -13t5.5 -24l-138 -831q-2 -13 -13 -20.5t-24 -5.5z" />
|
1536 |
+
<glyph glyph-name="_430" unicode=""
|
1537 |
+
d="M1497 709v-198q-101 -23 -198 -23q-65 -136 -165.5 -271t-181.5 -215.5t-128 -106.5q-80 -45 -162 3q-28 17 -60.5 43.5t-85 83.5t-102.5 128.5t-107.5 184t-105.5 244t-91.5 314.5t-70.5 390h283q26 -218 70 -398.5t104.5 -317t121.5 -235.5t140 -195q169 169 287 406
|
1538 |
+
q-142 72 -223 220t-81 333q0 192 104 314.5t284 122.5q178 0 273 -105.5t95 -297.5q0 -159 -58 -286q-7 -1 -19.5 -3t-46 -2t-63 6t-62 25.5t-50.5 51.5q31 103 31 184q0 87 -29 132t-79 45q-53 0 -85 -49.5t-32 -140.5q0 -186 105 -293.5t267 -107.5q62 0 121 14z" />
|
1539 |
+
<glyph glyph-name="_431" unicode="" horiz-adv-x="1792"
|
1540 |
+
d="M216 367l603 -402v359l-334 223zM154 511l193 129l-193 129v-258zM973 -35l603 402l-269 180l-334 -223v-359zM896 458l272 182l-272 182l-272 -182zM485 733l334 223v359l-603 -402zM1445 640l193 -129v258zM1307 733l269 180l-603 402v-359zM1792 913v-546
|
1541 |
+
q0 -41 -34 -64l-819 -546q-21 -13 -43 -13t-43 13l-819 546q-34 23 -34 64v546q0 41 34 64l819 546q21 13 43 13t43 -13l819 -546q34 -23 34 -64z" />
|
1542 |
+
<glyph glyph-name="_432" unicode="" horiz-adv-x="2048"
|
1543 |
+
d="M1800 764q111 -46 179.5 -145.5t68.5 -221.5q0 -164 -118 -280.5t-285 -116.5q-4 0 -11.5 0.5t-10.5 0.5h-1209h-1h-2h-5q-170 10 -288 125.5t-118 280.5q0 110 55 203t147 147q-12 39 -12 82q0 115 82 196t199 81q95 0 172 -58q75 154 222.5 248t326.5 94
|
1544 |
+
q166 0 306 -80.5t221.5 -218.5t81.5 -301q0 -6 -0.5 -18t-0.5 -18zM468 498q0 -122 84 -193t208 -71q137 0 240 99q-16 20 -47.5 56.5t-43.5 50.5q-67 -65 -144 -65q-55 0 -93.5 33.5t-38.5 87.5q0 53 38.5 87t91.5 34q44 0 84.5 -21t73 -55t65 -75t69 -82t77 -75t97 -55
|
1545 |
+
t121.5 -21q121 0 204.5 71.5t83.5 190.5q0 121 -84 192t-207 71q-143 0 -241 -97l93 -108q66 64 142 64q52 0 92 -33t40 -84q0 -57 -37 -91.5t-94 -34.5q-43 0 -82.5 21t-72 55t-65.5 75t-69.5 82t-77.5 75t-96.5 55t-118.5 21q-122 0 -207 -70.5t-85 -189.5z" />
|
1546 |
+
<glyph glyph-name="_433" unicode="" horiz-adv-x="1792"
|
1547 |
+
d="M896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM896 1408q-190 0 -361 -90l194 -194q82 28 167 28t167 -28l194 194q-171 90 -361 90zM218 279l194 194
|
1548 |
+
q-28 82 -28 167t28 167l-194 194q-90 -171 -90 -361t90 -361zM896 -128q190 0 361 90l-194 194q-82 -28 -167 -28t-167 28l-194 -194q171 -90 361 -90zM896 256q159 0 271.5 112.5t112.5 271.5t-112.5 271.5t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5
|
1549 |
+
t271.5 -112.5zM1380 473l194 -194q90 171 90 361t-90 361l-194 -194q28 -82 28 -167t-28 -167z" />
|
1550 |
+
<glyph glyph-name="_434" unicode="" horiz-adv-x="1792"
|
1551 |
+
d="M1760 640q0 -176 -68.5 -336t-184 -275.5t-275.5 -184t-336 -68.5t-336 68.5t-275.5 184t-184 275.5t-68.5 336q0 213 97 398.5t265 305.5t374 151v-228q-221 -45 -366.5 -221t-145.5 -406q0 -130 51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5
|
1552 |
+
t136.5 204t51 248.5q0 230 -145.5 406t-366.5 221v228q206 -31 374 -151t265 -305.5t97 -398.5z" />
|
1553 |
+
<glyph glyph-name="uniF1D0" unicode="" horiz-adv-x="1792"
|
1554 |
+
d="M19 662q8 217 116 406t305 318h5q0 -1 -1 -3q-8 -8 -28 -33.5t-52 -76.5t-60 -110.5t-44.5 -135.5t-14 -150.5t39 -157.5t108.5 -154q50 -50 102 -69.5t90.5 -11.5t69.5 23.5t47 32.5l16 16q39 51 53 116.5t6.5 122.5t-21 107t-26.5 80l-14 29q-10 25 -30.5 49.5t-43 41
|
1555 |
+
t-43.5 29.5t-35 19l-13 6l104 115q39 -17 78 -52t59 -61l19 -27q1 48 -18.5 103.5t-40.5 87.5l-20 31l161 183l160 -181q-33 -46 -52.5 -102.5t-22.5 -90.5l-4 -33q22 37 61.5 72.5t67.5 52.5l28 17l103 -115q-44 -14 -85 -50t-60 -65l-19 -29q-31 -56 -48 -133.5t-7 -170
|
1556 |
+
t57 -156.5q33 -45 77.5 -60.5t85 -5.5t76 26.5t57.5 33.5l21 16q60 53 96.5 115t48.5 121.5t10 121.5t-18 118t-37 107.5t-45.5 93t-45 72t-34.5 47.5l-13 17q-14 13 -7 13l10 -3q40 -29 62.5 -46t62 -50t64 -58t58.5 -65t55.5 -77t45.5 -88t38 -103t23.5 -117t10.5 -136
|
1557 |
+
q3 -259 -108 -465t-312 -321t-456 -115q-185 0 -351 74t-283.5 198t-184 293t-60.5 353z" />
|
1558 |
+
<glyph glyph-name="uniF1D1" unicode="" horiz-adv-x="1792"
|
1559 |
+
d="M874 -102v-66q-208 6 -385 109.5t-283 275.5l58 34q29 -49 73 -99l65 57q148 -168 368 -212l-17 -86q65 -12 121 -13zM276 428l-83 -28q22 -60 49 -112l-57 -33q-98 180 -98 385t98 385l57 -33q-30 -56 -49 -112l82 -28q-35 -100 -35 -212q0 -109 36 -212zM1528 251
|
1560 |
+
l58 -34q-106 -172 -283 -275.5t-385 -109.5v66q56 1 121 13l-17 86q220 44 368 212l65 -57q44 50 73 99zM1377 805l-233 -80q14 -42 14 -85t-14 -85l232 -80q-31 -92 -98 -169l-185 162q-57 -67 -147 -85l48 -241q-52 -10 -98 -10t-98 10l48 241q-90 18 -147 85l-185 -162
|
1561 |
+
q-67 77 -98 169l232 80q-14 42 -14 85t14 85l-233 80q33 93 99 169l185 -162q59 68 147 86l-48 240q44 10 98 10t98 -10l-48 -240q88 -18 147 -86l185 162q66 -76 99 -169zM874 1448v-66q-65 -2 -121 -13l17 -86q-220 -42 -368 -211l-65 56q-38 -42 -73 -98l-57 33
|
1562 |
+
q106 172 282 275.5t385 109.5zM1705 640q0 -205 -98 -385l-57 33q27 52 49 112l-83 28q36 103 36 212q0 112 -35 212l82 28q-19 56 -49 112l57 33q98 -180 98 -385zM1585 1063l-57 -33q-35 56 -73 98l-65 -56q-148 169 -368 211l17 86q-56 11 -121 13v66q209 -6 385 -109.5
|
1563 |
+
t282 -275.5zM1748 640q0 173 -67.5 331t-181.5 272t-272 181.5t-331 67.5t-331 -67.5t-272 -181.5t-181.5 -272t-67.5 -331t67.5 -331t181.5 -272t272 -181.5t331 -67.5t331 67.5t272 181.5t181.5 272t67.5 331zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71
|
1564 |
+
t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
|
1565 |
+
<glyph glyph-name="uniF1D2" unicode=""
|
1566 |
+
d="M582 228q0 -66 -93 -66q-107 0 -107 63q0 64 98 64q102 0 102 -61zM546 694q0 -85 -74 -85q-77 0 -77 84q0 90 77 90q36 0 55 -25.5t19 -63.5zM712 769v125q-78 -29 -135 -29q-50 29 -110 29q-86 0 -145 -57t-59 -143q0 -50 29.5 -102t73.5 -67v-3q-38 -17 -38 -85
|
1567 |
+
q0 -53 41 -77v-3q-113 -37 -113 -139q0 -45 20 -78.5t54 -51t72 -25.5t81 -8q224 0 224 188q0 67 -48 99t-126 46q-27 5 -51.5 20.5t-24.5 39.5q0 44 49 52q77 15 122 70t45 134q0 24 -10 52q37 9 49 13zM771 350h137q-2 27 -2 82v387q0 46 2 69h-137q3 -23 3 -71v-392
|
1568 |
+
q0 -50 -3 -75zM1280 366v121q-30 -21 -68 -21q-53 0 -53 82v225h52q9 0 26.5 -1t26.5 -1v117h-105q0 82 3 102h-140q4 -24 4 -55v-47h-60v-117q36 3 37 3q3 0 11 -0.5t12 -0.5v-2h-2v-217q0 -37 2.5 -64t11.5 -56.5t24.5 -48.5t43.5 -31t66 -12q64 0 108 24zM924 1072
|
1569 |
+
q0 36 -24 63.5t-60 27.5t-60.5 -27t-24.5 -64q0 -36 25 -62.5t60 -26.5t59.5 27t24.5 62zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
|
1570 |
+
<glyph glyph-name="_438" unicode="" horiz-adv-x="1792"
|
1571 |
+
d="M595 22q0 100 -165 100q-158 0 -158 -104q0 -101 172 -101q151 0 151 105zM536 777q0 61 -30 102t-89 41q-124 0 -124 -145q0 -135 124 -135q119 0 119 137zM805 1101v-202q-36 -12 -79 -22q16 -43 16 -84q0 -127 -73 -216.5t-197 -112.5q-40 -8 -59.5 -27t-19.5 -58
|
1572 |
+
q0 -31 22.5 -51.5t58 -32t78.5 -22t86 -25.5t78.5 -37.5t58 -64t22.5 -98.5q0 -304 -363 -304q-69 0 -130 12.5t-116 41t-87.5 82t-32.5 127.5q0 165 182 225v4q-67 41 -67 126q0 109 63 137v4q-72 24 -119.5 108.5t-47.5 165.5q0 139 95 231.5t235 92.5q96 0 178 -47
|
1573 |
+
q98 0 218 47zM1123 220h-222q4 45 4 134v609q0 94 -4 128h222q-4 -33 -4 -124v-613q0 -89 4 -134zM1724 442v-196q-71 -39 -174 -39q-62 0 -107 20t-70 50t-39.5 78t-18.5 92t-4 103v351h2v4q-7 0 -19 1t-18 1q-21 0 -59 -6v190h96v76q0 54 -6 89h227q-6 -41 -6 -165h171
|
1574 |
+
v-190q-15 0 -43.5 2t-42.5 2h-85v-365q0 -131 87 -131q61 0 109 33zM1148 1389q0 -58 -39 -101.5t-96 -43.5q-58 0 -98 43.5t-40 101.5q0 59 39.5 103t98.5 44q58 0 96.5 -44.5t38.5 -102.5z" />
|
1575 |
+
<glyph glyph-name="_439" unicode=""
|
1576 |
+
d="M809 532l266 499h-112l-157 -312q-24 -48 -44 -92l-42 92l-155 312h-120l263 -493v-324h101v318zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
|
1577 |
+
<glyph glyph-name="uniF1D5" unicode="" horiz-adv-x="1280"
|
1578 |
+
d="M842 964q0 -80 -57 -136.5t-136 -56.5q-60 0 -111 35q-62 -67 -115 -146q-247 -371 -202 -859q1 -22 -12.5 -38.5t-34.5 -18.5h-5q-20 0 -35 13.5t-17 33.5q-14 126 -3.5 247.5t29.5 217t54 186t69 155.5t74 125q61 90 132 165q-16 35 -16 77q0 80 56.5 136.5t136.5 56.5
|
1579 |
+
t136.5 -56.5t56.5 -136.5zM1223 953q0 -158 -78 -292t-212.5 -212t-292.5 -78q-64 0 -131 14q-21 5 -32.5 23.5t-6.5 39.5q5 20 23 31.5t39 7.5q51 -13 108 -13q97 0 186 38t153 102t102 153t38 186t-38 186t-102 153t-153 102t-186 38t-186 -38t-153 -102t-102 -153
|
1580 |
+
t-38 -186q0 -114 52 -218q10 -20 3.5 -40t-25.5 -30t-39.5 -3t-30.5 26q-64 123 -64 265q0 119 46.5 227t124.5 186t186 124t226 46q158 0 292.5 -78t212.5 -212.5t78 -292.5z" />
|
1581 |
+
<glyph glyph-name="uniF1D6" unicode="" horiz-adv-x="1792"
|
1582 |
+
d="M270 730q-8 19 -8 52q0 20 11 49t24 45q-1 22 7.5 53t22.5 43q0 139 92.5 288.5t217.5 209.5q139 66 324 66q133 0 266 -55q49 -21 90 -48t71 -56t55 -68t42 -74t32.5 -84.5t25.5 -89.5t22 -98l1 -5q55 -83 55 -150q0 -14 -9 -40t-9 -38q0 -1 1.5 -3.5t3.5 -5t2 -3.5
|
1583 |
+
q77 -114 120.5 -214.5t43.5 -208.5q0 -43 -19.5 -100t-55.5 -57q-9 0 -19.5 7.5t-19 17.5t-19 26t-16 26.5t-13.5 26t-9 17.5q-1 1 -3 1l-5 -4q-59 -154 -132 -223q20 -20 61.5 -38.5t69 -41.5t35.5 -65q-2 -4 -4 -16t-7 -18q-64 -97 -302 -97q-53 0 -110.5 9t-98 20
|
1584 |
+
t-104.5 30q-15 5 -23 7q-14 4 -46 4.5t-40 1.5q-41 -45 -127.5 -65t-168.5 -20q-35 0 -69 1.5t-93 9t-101 20.5t-74.5 40t-32.5 64q0 40 10 59.5t41 48.5q11 2 40.5 13t49.5 12q4 0 14 2q2 2 2 4l-2 3q-48 11 -108 105.5t-73 156.5l-5 3q-4 0 -12 -20q-18 -41 -54.5 -74.5
|
1585 |
+
t-77.5 -37.5h-1q-4 0 -6 4.5t-5 5.5q-23 54 -23 100q0 275 252 466z" />
|
1586 |
+
<glyph glyph-name="uniF1D7" unicode="" horiz-adv-x="2048"
|
1587 |
+
d="M580 1075q0 41 -25 66t-66 25q-43 0 -76 -25.5t-33 -65.5q0 -39 33 -64.5t76 -25.5q41 0 66 24.5t25 65.5zM1323 568q0 28 -25.5 50t-65.5 22q-27 0 -49.5 -22.5t-22.5 -49.5q0 -28 22.5 -50.5t49.5 -22.5q40 0 65.5 22t25.5 51zM1087 1075q0 41 -24.5 66t-65.5 25
|
1588 |
+
q-43 0 -76 -25.5t-33 -65.5q0 -39 33 -64.5t76 -25.5q41 0 65.5 24.5t24.5 65.5zM1722 568q0 28 -26 50t-65 22q-27 0 -49.5 -22.5t-22.5 -49.5q0 -28 22.5 -50.5t49.5 -22.5q39 0 65 22t26 51zM1456 965q-31 4 -70 4q-169 0 -311 -77t-223.5 -208.5t-81.5 -287.5
|
1589 |
+
q0 -78 23 -152q-35 -3 -68 -3q-26 0 -50 1.5t-55 6.5t-44.5 7t-54.5 10.5t-50 10.5l-253 -127l72 218q-290 203 -290 490q0 169 97.5 311t264 223.5t363.5 81.5q176 0 332.5 -66t262 -182.5t136.5 -260.5zM2048 404q0 -117 -68.5 -223.5t-185.5 -193.5l55 -181l-199 109
|
1590 |
+
q-150 -37 -218 -37q-169 0 -311 70.5t-223.5 191.5t-81.5 264t81.5 264t223.5 191.5t311 70.5q161 0 303 -70.5t227.5 -192t85.5 -263.5z" />
|
1591 |
+
<glyph glyph-name="_443" unicode="" horiz-adv-x="1792"
|
1592 |
+
d="M1764 1525q33 -24 27 -64l-256 -1536q-5 -29 -32 -45q-14 -8 -31 -8q-11 0 -24 5l-453 185l-242 -295q-18 -23 -49 -23q-13 0 -22 4q-19 7 -30.5 23.5t-11.5 36.5v349l864 1059l-1069 -925l-395 162q-37 14 -40 55q-2 40 32 59l1664 960q15 9 32 9q20 0 36 -11z" />
|
1593 |
+
<glyph glyph-name="_444" unicode="" horiz-adv-x="1792"
|
1594 |
+
d="M1764 1525q33 -24 27 -64l-256 -1536q-5 -29 -32 -45q-14 -8 -31 -8q-11 0 -24 5l-527 215l-298 -327q-18 -21 -47 -21q-14 0 -23 4q-19 7 -30 23.5t-11 36.5v452l-472 193q-37 14 -40 55q-3 39 32 59l1664 960q35 21 68 -2zM1422 26l221 1323l-1434 -827l336 -137
|
1595 |
+
l863 639l-478 -797z" />
|
1596 |
+
<glyph glyph-name="_445" unicode=""
|
1597 |
+
d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61q-172 0 -327 72.5t-264 204.5q-7 10 -6.5 22.5t8.5 20.5l137 138q10 9 25 9q16 -2 23 -12q73 -95 179 -147t225 -52q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5
|
1598 |
+
t-163.5 109.5t-198.5 40.5q-98 0 -188 -35.5t-160 -101.5l137 -138q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l130 -129q107 101 244.5 156.5t284.5 55.5q156 0 298 -61t245 -164t164 -245t61 -298zM896 928v-448q0 -14 -9 -23
|
1599 |
+
t-23 -9h-320q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23z" />
|
1600 |
+
<glyph glyph-name="_446" unicode=""
|
1601 |
+
d="M768 1280q-130 0 -248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5t-51 248.5t-136.5 204t-204 136.5t-248.5 51zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103
|
1602 |
+
t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
1603 |
+
<glyph glyph-name="_447" unicode="" horiz-adv-x="1792"
|
1604 |
+
d="M1682 -128q-44 0 -132.5 3.5t-133.5 3.5q-44 0 -132 -3.5t-132 -3.5q-24 0 -37 20.5t-13 45.5q0 31 17 46t39 17t51 7t45 15q33 21 33 140l-1 391q0 21 -1 31q-13 4 -50 4h-675q-38 0 -51 -4q-1 -10 -1 -31l-1 -371q0 -142 37 -164q16 -10 48 -13t57 -3.5t45 -15
|
1605 |
+
t20 -45.5q0 -26 -12.5 -48t-36.5 -22q-47 0 -139.5 3.5t-138.5 3.5q-43 0 -128 -3.5t-127 -3.5q-23 0 -35.5 21t-12.5 45q0 30 15.5 45t36 17.5t47.5 7.5t42 15q33 23 33 143l-1 57v813q0 3 0.5 26t0 36.5t-1.5 38.5t-3.5 42t-6.5 36.5t-11 31.5t-16 18q-15 10 -45 12t-53 2
|
1606 |
+
t-41 14t-18 45q0 26 12 48t36 22q46 0 138.5 -3.5t138.5 -3.5q42 0 126.5 3.5t126.5 3.5q25 0 37.5 -22t12.5 -48q0 -30 -17 -43.5t-38.5 -14.5t-49.5 -4t-43 -13q-35 -21 -35 -160l1 -320q0 -21 1 -32q13 -3 39 -3h699q25 0 38 3q1 11 1 32l1 320q0 139 -35 160
|
1607 |
+
q-18 11 -58.5 12.5t-66 13t-25.5 49.5q0 26 12.5 48t37.5 22q44 0 132 -3.5t132 -3.5q43 0 129 3.5t129 3.5q25 0 37.5 -22t12.5 -48q0 -30 -17.5 -44t-40 -14.5t-51.5 -3t-44 -12.5q-35 -23 -35 -161l1 -943q0 -119 34 -140q16 -10 46 -13.5t53.5 -4.5t41.5 -15.5t18 -44.5
|
1608 |
+
q0 -26 -12 -48t-36 -22z" />
|
1609 |
+
<glyph glyph-name="_448" unicode="" horiz-adv-x="1280"
|
1610 |
+
d="M1278 1347v-73q0 -29 -18.5 -61t-42.5 -32q-50 0 -54 -1q-26 -6 -32 -31q-3 -11 -3 -64v-1152q0 -25 -18 -43t-43 -18h-108q-25 0 -43 18t-18 43v1218h-143v-1218q0 -25 -17.5 -43t-43.5 -18h-108q-26 0 -43.5 18t-17.5 43v496q-147 12 -245 59q-126 58 -192 179
|
1611 |
+
q-64 117 -64 259q0 166 88 286q88 118 209 159q111 37 417 37h479q25 0 43 -18t18 -43z" />
|
1612 |
+
<glyph glyph-name="_449" unicode=""
|
1613 |
+
d="M352 128v-128h-352v128h352zM704 256q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h256zM864 640v-128h-864v128h864zM224 1152v-128h-224v128h224zM1536 128v-128h-736v128h736zM576 1280q26 0 45 -19t19 -45v-256
|
1614 |
+
q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h256zM1216 768q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h256zM1536 640v-128h-224v128h224zM1536 1152v-128h-864v128h864z" />
|
1615 |
+
<glyph glyph-name="uniF1E0" unicode=""
|
1616 |
+
d="M1216 512q133 0 226.5 -93.5t93.5 -226.5t-93.5 -226.5t-226.5 -93.5t-226.5 93.5t-93.5 226.5q0 12 2 34l-360 180q-92 -86 -218 -86q-133 0 -226.5 93.5t-93.5 226.5t93.5 226.5t226.5 93.5q126 0 218 -86l360 180q-2 22 -2 34q0 133 93.5 226.5t226.5 93.5
|
1617 |
+
t226.5 -93.5t93.5 -226.5t-93.5 -226.5t-226.5 -93.5q-126 0 -218 86l-360 -180q2 -22 2 -34t-2 -34l360 -180q92 86 218 86z" />
|
1618 |
+
<glyph glyph-name="_451" unicode=""
|
1619 |
+
d="M1280 341q0 88 -62.5 151t-150.5 63q-84 0 -145 -58l-241 120q2 16 2 23t-2 23l241 120q61 -58 145 -58q88 0 150.5 63t62.5 151t-62.5 150.5t-150.5 62.5t-151 -62.5t-63 -150.5q0 -7 2 -23l-241 -120q-62 57 -145 57q-88 0 -150.5 -62.5t-62.5 -150.5t62.5 -150.5
|
1620 |
+
t150.5 -62.5q83 0 145 57l241 -120q-2 -16 -2 -23q0 -88 63 -150.5t151 -62.5t150.5 62.5t62.5 150.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
|
1621 |
+
<glyph glyph-name="_452" unicode="" horiz-adv-x="1792"
|
1622 |
+
d="M571 947q-10 25 -34 35t-49 0q-108 -44 -191 -127t-127 -191q-10 -25 0 -49t35 -34q13 -5 24 -5q42 0 60 40q34 84 98.5 148.5t148.5 98.5q25 11 35 35t0 49zM1513 1303l46 -46l-244 -243l68 -68q19 -19 19 -45.5t-19 -45.5l-64 -64q89 -161 89 -343q0 -143 -55.5 -273.5
|
1623 |
+
t-150 -225t-225 -150t-273.5 -55.5t-273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5q182 0 343 -89l64 64q19 19 45.5 19t45.5 -19l68 -68zM1521 1359q-10 -10 -22 -10q-13 0 -23 10l-91 90q-9 10 -9 23t9 23q10 9 23 9t23 -9l90 -91
|
1624 |
+
q10 -9 10 -22.5t-10 -22.5zM1751 1129q-11 -9 -23 -9t-23 9l-90 91q-10 9 -10 22.5t10 22.5q9 10 22.5 10t22.5 -10l91 -90q9 -10 9 -23t-9 -23zM1792 1312q0 -14 -9 -23t-23 -9h-96q-14 0 -23 9t-9 23t9 23t23 9h96q14 0 23 -9t9 -23zM1600 1504v-96q0 -14 -9 -23t-23 -9
|
1625 |
+
t-23 9t-9 23v96q0 14 9 23t23 9t23 -9t9 -23zM1751 1449l-91 -90q-10 -10 -22 -10q-13 0 -23 10q-10 9 -10 22.5t10 22.5l90 91q10 9 23 9t23 -9q9 -10 9 -23t-9 -23z" />
|
1626 |
+
<glyph glyph-name="_453" unicode="" horiz-adv-x="1792"
|
1627 |
+
d="M609 720l287 208l287 -208l-109 -336h-355zM896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM1515 186q149 203 149 454v3l-102 -89l-240 224l63 323
|
1628 |
+
l134 -12q-150 206 -389 282l53 -124l-287 -159l-287 159l53 124q-239 -76 -389 -282l135 12l62 -323l-240 -224l-102 89v-3q0 -251 149 -454l30 132l326 -40l139 -298l-116 -69q117 -39 240 -39t240 39l-116 69l139 298l326 40z" />
|
1629 |
+
<glyph glyph-name="_454" unicode="" horiz-adv-x="1792"
|
1630 |
+
d="M448 224v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM256 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM832 224v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23
|
1631 |
+
v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM640 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM66 768q-28 0 -47 19t-19 46v129h514v-129q0 -27 -19 -46t-46 -19h-383zM1216 224v-192q0 -14 -9 -23t-23 -9h-192
|
1632 |
+
q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1024 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1600 224v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23
|
1633 |
+
zM1408 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 1016v-13h-514v10q0 104 -382 102q-382 -1 -382 -102v-10h-514v13q0 17 8.5 43t34 64t65.5 75.5t110.5 76t160 67.5t224 47.5t293.5 18.5t293 -18.5t224 -47.5
|
1634 |
+
t160.5 -67.5t110.5 -76t65.5 -75.5t34 -64t8.5 -43zM1792 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 962v-129q0 -27 -19 -46t-46 -19h-384q-27 0 -46 19t-19 46v129h514z" />
|
1635 |
+
<glyph glyph-name="_455" unicode="" horiz-adv-x="1792"
|
1636 |
+
d="M704 1216v-768q0 -26 -19 -45t-45 -19v-576q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v512l249 873q7 23 31 23h424zM1024 1216v-704h-256v704h256zM1792 320v-512q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v576q-26 0 -45 19t-19 45v768h424q24 0 31 -23z
|
1637 |
+
M736 1504v-224h-352v224q0 14 9 23t23 9h288q14 0 23 -9t9 -23zM1408 1504v-224h-352v224q0 14 9 23t23 9h288q14 0 23 -9t9 -23z" />
|
1638 |
+
<glyph glyph-name="_456" unicode="" horiz-adv-x="1792"
|
1639 |
+
d="M1755 1083q37 -38 37 -90.5t-37 -90.5l-401 -400l150 -150l-160 -160q-163 -163 -389.5 -186.5t-411.5 100.5l-362 -362h-181v181l362 362q-124 185 -100.5 411.5t186.5 389.5l160 160l150 -150l400 401q38 37 91 37t90 -37t37 -90.5t-37 -90.5l-400 -401l234 -234
|
1640 |
+
l401 400q38 37 91 37t90 -37z" />
|
1641 |
+
<glyph glyph-name="_457" unicode="" horiz-adv-x="1792"
|
1642 |
+
d="M873 796q0 -83 -63.5 -142.5t-152.5 -59.5t-152.5 59.5t-63.5 142.5q0 84 63.5 143t152.5 59t152.5 -59t63.5 -143zM1375 796q0 -83 -63 -142.5t-153 -59.5q-89 0 -152.5 59.5t-63.5 142.5q0 84 63.5 143t152.5 59q90 0 153 -59t63 -143zM1600 616v667q0 87 -32 123.5
|
1643 |
+
t-111 36.5h-1112q-83 0 -112.5 -34t-29.5 -126v-673q43 -23 88.5 -40t81 -28t81 -18.5t71 -11t70 -4t58.5 -0.5t56.5 2t44.5 2q68 1 95 -27q6 -6 10 -9q26 -25 61 -51q7 91 118 87q5 0 36.5 -1.5t43 -2t45.5 -1t53 1t54.5 4.5t61 8.5t62 13.5t67 19.5t67.5 27t72 34.5z
|
1644 |
+
M1763 621q-121 -149 -372 -252q84 -285 -23 -465q-66 -113 -183 -148q-104 -32 -182 15q-86 51 -82 164l-1 326v1q-8 2 -24.5 6t-23.5 5l-1 -338q4 -114 -83 -164q-79 -47 -183 -15q-117 36 -182 150q-105 180 -22 463q-251 103 -372 252q-25 37 -4 63t60 -1q4 -2 11.5 -7
|
1645 |
+
t10.5 -8v694q0 72 47 123t114 51h1257q67 0 114 -51t47 -123v-694l21 15q39 27 60 1t-4 -63z" />
|
1646 |
+
<glyph glyph-name="_458" unicode="" horiz-adv-x="1792"
|
1647 |
+
d="M896 1102v-434h-145v434h145zM1294 1102v-434h-145v434h145zM1294 342l253 254v795h-1194v-1049h326v-217l217 217h398zM1692 1536v-1013l-434 -434h-326l-217 -217h-217v217h-398v1158l109 289h1483z" />
|
1648 |
+
<glyph glyph-name="_459" unicode=""
|
1649 |
+
d="M773 217v-127q-1 -292 -6 -305q-12 -32 -51 -40q-54 -9 -181.5 38t-162.5 89q-13 15 -17 36q-1 12 4 26q4 10 34 47t181 216q1 0 60 70q15 19 39.5 24.5t49.5 -3.5q24 -10 37.5 -29t12.5 -42zM624 468q-3 -55 -52 -70l-120 -39q-275 -88 -292 -88q-35 2 -54 36
|
1650 |
+
q-12 25 -17 75q-8 76 1 166.5t30 124.5t56 32q13 0 202 -77q71 -29 115 -47l84 -34q23 -9 35.5 -30.5t11.5 -48.5zM1450 171q-7 -54 -91.5 -161t-135.5 -127q-37 -14 -63 7q-14 10 -184 287l-47 77q-14 21 -11.5 46t19.5 46q35 43 83 26q1 -1 119 -40q203 -66 242 -79.5
|
1651 |
+
t47 -20.5q28 -22 22 -61zM778 803q5 -102 -54 -122q-58 -17 -114 71l-378 598q-8 35 19 62q41 43 207.5 89.5t224.5 31.5q40 -10 49 -45q3 -18 22 -305.5t24 -379.5zM1440 695q3 -39 -26 -59q-15 -10 -329 -86q-67 -15 -91 -23l1 2q-23 -6 -46 4t-37 32q-30 47 0 87
|
1652 |
+
q1 1 75 102q125 171 150 204t34 39q28 19 65 2q48 -23 123 -133.5t81 -167.5v-3z" />
|
1653 |
+
<glyph glyph-name="_460" unicode="" horiz-adv-x="2048"
|
1654 |
+
d="M1024 1024h-384v-384h384v384zM1152 384v-128h-640v128h640zM1152 1152v-640h-640v640h640zM1792 384v-128h-512v128h512zM1792 640v-128h-512v128h512zM1792 896v-128h-512v128h512zM1792 1152v-128h-512v128h512zM256 192v960h-128v-960q0 -26 19 -45t45 -19t45 19
|
1655 |
+
t19 45zM1920 192v1088h-1536v-1088q0 -33 -11 -64h1483q26 0 45 19t19 45zM2048 1408v-1216q0 -80 -56 -136t-136 -56h-1664q-80 0 -136 56t-56 136v1088h256v128h1792z" />
|
1656 |
+
<glyph glyph-name="_461" unicode="" horiz-adv-x="2048"
|
1657 |
+
d="M1024 13q-20 0 -93 73.5t-73 93.5q0 32 62.5 54t103.5 22t103.5 -22t62.5 -54q0 -20 -73 -93.5t-93 -73.5zM1294 284q-2 0 -40 25t-101.5 50t-128.5 25t-128.5 -25t-101 -50t-40.5 -25q-18 0 -93.5 75t-75.5 93q0 13 10 23q78 77 196 121t233 44t233 -44t196 -121
|
1658 |
+
q10 -10 10 -23q0 -18 -75.5 -93t-93.5 -75zM1567 556q-11 0 -23 8q-136 105 -252 154.5t-268 49.5q-85 0 -170.5 -22t-149 -53t-113.5 -62t-79 -53t-31 -22q-17 0 -92 75t-75 93q0 12 10 22q132 132 320 205t380 73t380 -73t320 -205q10 -10 10 -22q0 -18 -75 -93t-92 -75z
|
1659 |
+
M1838 827q-11 0 -22 9q-179 157 -371.5 236.5t-420.5 79.5t-420.5 -79.5t-371.5 -236.5q-11 -9 -22 -9q-17 0 -92.5 75t-75.5 93q0 13 10 23q187 186 445 288t527 102t527 -102t445 -288q10 -10 10 -23q0 -18 -75.5 -93t-92.5 -75z" />
|
1660 |
+
<glyph glyph-name="_462" unicode="" horiz-adv-x="1792"
|
1661 |
+
d="M384 0q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM768 0q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM384 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5
|
1662 |
+
t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1152 0q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM768 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5
|
1663 |
+
t37.5 90.5zM384 768q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1152 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM768 768q0 53 -37.5 90.5t-90.5 37.5
|
1664 |
+
t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1536 0v384q0 52 -38 90t-90 38t-90 -38t-38 -90v-384q0 -52 38 -90t90 -38t90 38t38 90zM1152 768q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5z
|
1665 |
+
M1536 1088v256q0 26 -19 45t-45 19h-1280q-26 0 -45 -19t-19 -45v-256q0 -26 19 -45t45 -19h1280q26 0 45 19t19 45zM1536 768q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 1408v-1536q0 -52 -38 -90t-90 -38
|
1666 |
+
h-1408q-52 0 -90 38t-38 90v1536q0 52 38 90t90 38h1408q52 0 90 -38t38 -90z" />
|
1667 |
+
<glyph glyph-name="_463" unicode=""
|
1668 |
+
d="M1519 890q18 -84 -4 -204q-87 -444 -565 -444h-44q-25 0 -44 -16.5t-24 -42.5l-4 -19l-55 -346l-2 -15q-5 -26 -24.5 -42.5t-44.5 -16.5h-251q-21 0 -33 15t-9 36q9 56 26.5 168t26.5 168t27 167.5t27 167.5q5 37 43 37h131q133 -2 236 21q175 39 287 144q102 95 155 246
|
1669 |
+
q24 70 35 133q1 6 2.5 7.5t3.5 1t6 -3.5q79 -59 98 -162zM1347 1172q0 -107 -46 -236q-80 -233 -302 -315q-113 -40 -252 -42q0 -1 -90 -1l-90 1q-100 0 -118 -96q-2 -8 -85 -530q-1 -10 -12 -10h-295q-22 0 -36.5 16.5t-11.5 38.5l232 1471q5 29 27.5 48t51.5 19h598
|
1670 |
+
q34 0 97.5 -13t111.5 -32q107 -41 163.5 -123t56.5 -196z" />
|
1671 |
+
<glyph glyph-name="_464" unicode="" horiz-adv-x="1792"
|
1672 |
+
d="M441 864q33 0 52 -26q266 -364 362 -774h-446q-127 441 -367 749q-12 16 -3 33.5t29 17.5h373zM1000 507q-49 -199 -125 -393q-79 310 -256 594q40 221 44 449q211 -340 337 -650zM1099 1216q235 -324 384.5 -698.5t184.5 -773.5h-451q-41 665 -553 1472h435zM1792 640
|
1673 |
+
q0 -424 -101 -812q-67 560 -359 1083q-25 301 -106 584q-4 16 5.5 28.5t25.5 12.5h359q21 0 38.5 -13t22.5 -33q115 -409 115 -850z" />
|
1674 |
+
<glyph glyph-name="uniF1F0" unicode="" horiz-adv-x="2304"
|
1675 |
+
d="M1975 546h-138q14 37 66 179l3 9q4 10 10 26t9 26l12 -55zM531 611l-58 295q-11 54 -75 54h-268l-2 -13q311 -79 403 -336zM710 960l-162 -438l-17 89q-26 70 -85 129.5t-131 88.5l135 -510h175l261 641h-176zM849 318h166l104 642h-166zM1617 944q-69 27 -149 27
|
1676 |
+
q-123 0 -201 -59t-79 -153q-1 -102 145 -174q48 -23 67 -41t19 -39q0 -30 -30 -46t-69 -16q-86 0 -156 33l-22 11l-23 -144q74 -34 185 -34q130 -1 208.5 59t80.5 160q0 106 -140 174q-49 25 -71 42t-22 38q0 22 24.5 38.5t70.5 16.5q70 1 124 -24l15 -8zM2042 960h-128
|
1677 |
+
q-65 0 -87 -54l-246 -588h174l35 96h212q5 -22 20 -96h154zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" />
|
1678 |
+
<glyph glyph-name="_466" unicode="" horiz-adv-x="2304"
|
1679 |
+
d="M1119 1195q-128 85 -281 85q-103 0 -197.5 -40.5t-162.5 -108.5t-108.5 -162t-40.5 -197q0 -104 40.5 -198t108.5 -162t162 -108.5t198 -40.5q153 0 281 85q-131 107 -178 265.5t0.5 316.5t177.5 265zM1152 1171q-126 -99 -172 -249.5t-0.5 -300.5t172.5 -249
|
1680 |
+
q127 99 172.5 249t-0.5 300.5t-172 249.5zM1185 1195q130 -107 177.5 -265.5t0.5 -317t-178 -264.5q128 -85 281 -85q104 0 198 40.5t162 108.5t108.5 162t40.5 198q0 103 -40.5 197t-108.5 162t-162.5 108.5t-197.5 40.5q-153 0 -281 -85zM1926 473h7v3h-17v-3h7v-17h3v17z
|
1681 |
+
M1955 456h4v20h-5l-6 -13l-6 13h-5v-20h3v15l6 -13h4l5 13v-15zM1947 16v-2h-2h-3v3h3h2v-1zM1947 7h3l-4 5h2l1 1q1 1 1 3t-1 3l-1 1h-3h-6v-13h3v5h1zM685 75q0 19 11 31t30 12q18 0 29 -12.5t11 -30.5q0 -19 -11 -31t-29 -12q-19 0 -30 12t-11 31zM1158 119q30 0 35 -32
|
1682 |
+
h-70q5 32 35 32zM1514 75q0 19 11 31t29 12t29.5 -12.5t11.5 -30.5q0 -19 -11 -31t-30 -12q-18 0 -29 12t-11 31zM1786 75q0 18 11.5 30.5t29.5 12.5t29.5 -12.5t11.5 -30.5q0 -19 -11.5 -31t-29.5 -12t-29.5 12.5t-11.5 30.5zM1944 3q-2 0 -4 1q-1 0 -3 2t-2 3q-1 2 -1 4
|
1683 |
+
q0 3 1 4q0 2 2 4l1 1q2 0 2 1q2 1 4 1q3 0 4 -1l4 -2l2 -4v-1q1 -2 1 -3l-1 -1v-3t-1 -1l-1 -2q-2 -2 -4 -2q-1 -1 -4 -1zM599 7h30v85q0 24 -14.5 38.5t-39.5 15.5q-32 0 -47 -24q-14 24 -45 24q-24 0 -39 -20v16h-30v-135h30v75q0 36 33 36q30 0 30 -36v-75h29v75
|
1684 |
+
q0 36 33 36q30 0 30 -36v-75zM765 7h29v68v67h-29v-16q-17 20 -43 20q-29 0 -48 -20t-19 -51t19 -51t48 -20q28 0 43 20v-17zM943 48q0 34 -47 40l-14 2q-23 4 -23 14q0 15 25 15q23 0 43 -11l12 24q-22 14 -55 14q-26 0 -41 -12t-15 -32q0 -33 47 -39l13 -2q24 -4 24 -14
|
1685 |
+
q0 -17 -31 -17q-25 0 -45 14l-13 -23q25 -17 58 -17q29 0 45.5 12t16.5 32zM1073 14l-8 25q-13 -7 -26 -7q-19 0 -19 22v61h48v27h-48v41h-30v-41h-28v-27h28v-61q0 -50 47 -50q21 0 36 10zM1159 146q-29 0 -48 -20t-19 -51q0 -32 19.5 -51.5t49.5 -19.5q33 0 55 19l-14 22
|
1686 |
+
q-18 -15 -39 -15q-34 0 -41 33h101v12q0 32 -18 51.5t-46 19.5zM1318 146q-23 0 -35 -20v16h-30v-135h30v76q0 35 29 35q10 0 18 -4l9 28q-9 4 -21 4zM1348 75q0 -31 19.5 -51t52.5 -20q29 0 48 16l-14 24q-18 -13 -35 -12q-18 0 -29.5 12t-11.5 31t11.5 31t29.5 12
|
1687 |
+
q19 0 35 -12l14 24q-20 16 -48 16q-33 0 -52.5 -20t-19.5 -51zM1593 7h30v68v67h-30v-16q-15 20 -42 20q-29 0 -48.5 -20t-19.5 -51t19.5 -51t48.5 -20q28 0 42 20v-17zM1726 146q-23 0 -35 -20v16h-29v-135h29v76q0 35 29 35q10 0 18 -4l9 28q-8 4 -21 4zM1866 7h29v68v122
|
1688 |
+
h-29v-71q-15 20 -43 20t-47.5 -20.5t-19.5 -50.5t19.5 -50.5t47.5 -20.5q29 0 43 20v-17zM1944 27l-2 -1h-3q-2 -1 -4 -3q-3 -1 -3 -4q-1 -2 -1 -6q0 -3 1 -5q0 -2 3 -4q2 -2 4 -3t5 -1q4 0 6 1q0 1 2 2l2 1q1 1 3 4q1 2 1 5q0 4 -1 6q-1 1 -3 4q0 1 -2 2l-2 1q-1 0 -3 0.5
|
1689 |
+
t-3 0.5zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" />
|
1690 |
+
<glyph glyph-name="_467" unicode="" horiz-adv-x="2304"
|
1691 |
+
d="M313 759q0 -51 -36 -84q-29 -26 -89 -26h-17v220h17q61 0 89 -27q36 -31 36 -83zM2089 824q0 -52 -64 -52h-19v101h20q63 0 63 -49zM380 759q0 74 -50 120.5t-129 46.5h-95v-333h95q74 0 119 38q60 51 60 128zM410 593h65v333h-65v-333zM730 694q0 40 -20.5 62t-75.5 42
|
1692 |
+
q-29 10 -39.5 19t-10.5 23q0 16 13.5 26.5t34.5 10.5q29 0 53 -27l34 44q-41 37 -98 37q-44 0 -74 -27.5t-30 -67.5q0 -35 18 -55.5t64 -36.5q37 -13 45 -19q19 -12 19 -34q0 -20 -14 -33.5t-36 -13.5q-48 0 -71 44l-42 -40q44 -64 115 -64q51 0 83 30.5t32 79.5zM1008 604
|
1693 |
+
v77q-37 -37 -78 -37q-49 0 -80.5 32.5t-31.5 82.5q0 48 31.5 81.5t77.5 33.5q43 0 81 -38v77q-40 20 -80 20q-74 0 -125.5 -50.5t-51.5 -123.5t51 -123.5t125 -50.5q42 0 81 19zM2240 0v527q-65 -40 -144.5 -84t-237.5 -117t-329.5 -137.5t-417.5 -134.5t-504 -118h1569
|
1694 |
+
q26 0 45 19t19 45zM1389 757q0 75 -53 128t-128 53t-128 -53t-53 -128t53 -128t128 -53t128 53t53 128zM1541 584l144 342h-71l-90 -224l-89 224h-71l142 -342h35zM1714 593h184v56h-119v90h115v56h-115v74h119v57h-184v-333zM2105 593h80l-105 140q76 16 76 94q0 47 -31 73
|
1695 |
+
t-87 26h-97v-333h65v133h9zM2304 1274v-1268q0 -56 -38.5 -95t-93.5 -39h-2040q-55 0 -93.5 39t-38.5 95v1268q0 56 38.5 95t93.5 39h2040q55 0 93.5 -39t38.5 -95z" />
|
1696 |
+
<glyph glyph-name="f1f3" unicode="" horiz-adv-x="2304"
|
1697 |
+
d="M119 854h89l-45 108zM740 328l74 79l-70 79h-163v-49h142v-55h-142v-54h159zM898 406l99 -110v217zM1186 453q0 33 -40 33h-84v-69h83q41 0 41 36zM1475 457q0 29 -42 29h-82v-61h81q43 0 43 32zM1197 923q0 29 -42 29h-82v-60h81q43 0 43 31zM1656 854h89l-44 108z
|
1698 |
+
M699 1009v-271h-66v212l-94 -212h-57l-94 212v-212h-132l-25 60h-135l-25 -60h-70l116 271h96l110 -257v257h106l85 -184l77 184h108zM1255 453q0 -20 -5.5 -35t-14 -25t-22.5 -16.5t-26 -10t-31.5 -4.5t-31.5 -1t-32.5 0.5t-29.5 0.5v-91h-126l-80 90l-83 -90h-256v271h260
|
1699 |
+
l80 -89l82 89h207q109 0 109 -89zM964 794v-56h-217v271h217v-57h-152v-49h148v-55h-148v-54h152zM2304 235v-229q0 -55 -38.5 -94.5t-93.5 -39.5h-2040q-55 0 -93.5 39.5t-38.5 94.5v678h111l25 61h55l25 -61h218v46l19 -46h113l20 47v-47h541v99l10 1q10 0 10 -14v-86h279
|
1700 |
+
v23q23 -12 55 -18t52.5 -6.5t63 0.5t51.5 1l25 61h56l25 -61h227v58l34 -58h182v378h-180v-44l-25 44h-185v-44l-23 44h-249q-69 0 -109 -22v22h-172v-22q-24 22 -73 22h-628l-43 -97l-43 97h-198v-44l-22 44h-169l-78 -179v391q0 55 38.5 94.5t93.5 39.5h2040
|
1701 |
+
q55 0 93.5 -39.5t38.5 -94.5v-678h-120q-51 0 -81 -22v22h-177q-55 0 -78 -22v22h-316v-22q-31 22 -87 22h-209v-22q-23 22 -91 22h-234l-54 -58l-50 58h-349v-378h343l55 59l52 -59h211v89h21q59 0 90 13v-102h174v99h8q8 0 10 -2t2 -10v-87h529q57 0 88 24v-24h168
|
1702 |
+
q60 0 95 17zM1546 469q0 -23 -12 -43t-34 -29q25 -9 34 -26t9 -46v-54h-65v45q0 33 -12 43.5t-46 10.5h-69v-99h-65v271h154q48 0 77 -15t29 -58zM1269 936q0 -24 -12.5 -44t-33.5 -29q26 -9 34.5 -25.5t8.5 -46.5v-53h-65q0 9 0.5 26.5t0 25t-3 18.5t-8.5 16t-17.5 8.5
|
1703 |
+
t-29.5 3.5h-70v-98h-64v271l153 -1q49 0 78 -14.5t29 -57.5zM1798 327v-56h-216v271h216v-56h-151v-49h148v-55h-148v-54zM1372 1009v-271h-66v271h66zM2065 357q0 -86 -102 -86h-126v58h126q34 0 34 25q0 16 -17 21t-41.5 5t-49.5 3.5t-42 22.5t-17 55q0 39 26 60t66 21
|
1704 |
+
h130v-57h-119q-36 0 -36 -25q0 -16 17.5 -20.5t42 -4t49 -2.5t42 -21.5t17.5 -54.5zM2304 407v-101q-24 -35 -88 -35h-125v58h125q33 0 33 25q0 13 -12.5 19t-31 5.5t-40 2t-40 8t-31 24t-12.5 48.5q0 39 26.5 60t66.5 21h129v-57h-118q-36 0 -36 -25q0 -20 29 -22t68.5 -5
|
1705 |
+
t56.5 -26zM2139 1008v-270h-92l-122 203v-203h-132l-26 60h-134l-25 -60h-75q-129 0 -129 133q0 138 133 138h63v-59q-7 0 -28 1t-28.5 0.5t-23 -2t-21.5 -6.5t-14.5 -13.5t-11.5 -23t-3 -33.5q0 -38 13.5 -58t49.5 -20h29l92 213h97l109 -256v256h99l114 -188v188h66z" />
|
1706 |
+
<glyph glyph-name="_469" unicode="" horiz-adv-x="2304"
|
1707 |
+
d="M745 630q0 -37 -25.5 -61.5t-62.5 -24.5q-29 0 -46.5 16t-17.5 44q0 37 25 62.5t62 25.5q28 0 46.5 -16.5t18.5 -45.5zM1530 779q0 -42 -22 -57t-66 -15l-32 -1l17 107q2 11 13 11h18q22 0 35 -2t25 -12.5t12 -30.5zM1881 630q0 -36 -25.5 -61t-61.5 -25q-29 0 -47 16
|
1708 |
+
t-18 44q0 37 25 62.5t62 25.5q28 0 46.5 -16.5t18.5 -45.5zM513 801q0 59 -38.5 85.5t-100.5 26.5h-160q-19 0 -21 -19l-65 -408q-1 -6 3 -11t10 -5h76q20 0 22 19l18 110q1 8 7 13t15 6.5t17 1.5t19 -1t14 -1q86 0 135 48.5t49 134.5zM822 489l41 261q1 6 -3 11t-10 5h-76
|
1709 |
+
q-14 0 -17 -33q-27 40 -95 40q-72 0 -122.5 -54t-50.5 -127q0 -59 34.5 -94t92.5 -35q28 0 58 12t48 32q-4 -12 -4 -21q0 -16 13 -16h69q19 0 22 19zM1269 752q0 5 -4 9.5t-9 4.5h-77q-11 0 -18 -10l-106 -156l-44 150q-5 16 -22 16h-75q-5 0 -9 -4.5t-4 -9.5q0 -2 19.5 -59
|
1710 |
+
t42 -123t23.5 -70q-82 -112 -82 -120q0 -13 13 -13h77q11 0 18 10l255 368q2 2 2 7zM1649 801q0 59 -38.5 85.5t-100.5 26.5h-159q-20 0 -22 -19l-65 -408q-1 -6 3 -11t10 -5h82q12 0 16 13l18 116q1 8 7 13t15 6.5t17 1.5t19 -1t14 -1q86 0 135 48.5t49 134.5zM1958 489
|
1711 |
+
l41 261q1 6 -3 11t-10 5h-76q-14 0 -17 -33q-26 40 -95 40q-72 0 -122.5 -54t-50.5 -127q0 -59 34.5 -94t92.5 -35q29 0 59 12t47 32q0 -1 -2 -9t-2 -12q0 -16 13 -16h69q19 0 22 19zM2176 898v1q0 14 -13 14h-74q-11 0 -13 -11l-65 -416l-1 -2q0 -5 4 -9.5t10 -4.5h66
|
1712 |
+
q19 0 21 19zM392 764q-5 -35 -26 -46t-60 -11l-33 -1l17 107q2 11 13 11h19q40 0 58 -11.5t12 -48.5zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" />
|
1713 |
+
<glyph glyph-name="_470" unicode="" horiz-adv-x="2304"
|
1714 |
+
d="M1597 633q0 -69 -21 -106q-19 -35 -52 -35q-23 0 -41 9v224q29 30 57 30q57 0 57 -122zM2035 669h-110q6 98 56 98q51 0 54 -98zM476 534q0 59 -33 91.5t-101 57.5q-36 13 -52 24t-16 25q0 26 38 26q58 0 124 -33l18 112q-67 32 -149 32q-77 0 -123 -38q-48 -39 -48 -109
|
1715 |
+
q0 -58 32.5 -90.5t99.5 -56.5q39 -14 54.5 -25.5t15.5 -27.5q0 -31 -48 -31q-29 0 -70 12.5t-72 30.5l-18 -113q72 -41 168 -41q81 0 129 37q51 41 51 117zM771 749l19 111h-96v135l-129 -21l-18 -114l-46 -8l-17 -103h62v-219q0 -84 44 -120q38 -30 111 -30q32 0 79 11v118
|
1716 |
+
q-32 -7 -44 -7q-42 0 -42 50v197h77zM1087 724v139q-15 3 -28 3q-32 0 -55.5 -16t-33.5 -46l-10 56h-131v-471h150v306q26 31 82 31q16 0 26 -2zM1124 389h150v471h-150v-471zM1746 638q0 122 -45 179q-40 52 -111 52q-64 0 -117 -56l-8 47h-132v-645l150 25v151
|
1717 |
+
q36 -11 68 -11q83 0 134 56q61 65 61 202zM1278 986q0 33 -23 56t-56 23t-56 -23t-23 -56t23 -56.5t56 -23.5t56 23.5t23 56.5zM2176 629q0 113 -48 176q-50 64 -144 64q-96 0 -151.5 -66t-55.5 -180q0 -128 63 -188q55 -55 161 -55q101 0 160 40l-16 103q-57 -31 -128 -31
|
1718 |
+
q-43 0 -63 19q-23 19 -28 66h248q2 14 2 52zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" />
|
1719 |
+
<glyph glyph-name="_471" unicode="" horiz-adv-x="2048"
|
1720 |
+
d="M1558 684q61 -356 298 -556q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-180.5 74.5t-75.5 180.5zM1024 -176q16 0 16 16t-16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5zM2026 1424q8 -10 7.5 -23.5t-10.5 -22.5
|
1721 |
+
l-1872 -1622q-10 -8 -23.5 -7t-21.5 11l-84 96q-8 10 -7.5 23.5t10.5 21.5l186 161q-19 32 -19 66q50 42 91 88t85 119.5t74.5 158.5t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q124 -18 219 -82.5t148 -157.5
|
1722 |
+
l418 363q10 8 23.5 7t21.5 -11z" />
|
1723 |
+
<glyph glyph-name="_472" unicode="" horiz-adv-x="2048"
|
1724 |
+
d="M1040 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM503 315l877 760q-42 88 -132.5 146.5t-223.5 58.5q-93 0 -169.5 -31.5t-121.5 -80.5t-69 -103t-24 -105q0 -384 -137 -645zM1856 128
|
1725 |
+
q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-180.5 74.5t-75.5 180.5l149 129h757q-166 187 -227 459l111 97q61 -356 298 -556zM1942 1520l84 -96q8 -10 7.5 -23.5t-10.5 -22.5l-1872 -1622q-10 -8 -23.5 -7t-21.5 11l-84 96q-8 10 -7.5 23.5t10.5 21.5l186 161
|
1726 |
+
q-19 32 -19 66q50 42 91 88t85 119.5t74.5 158.5t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q124 -18 219 -82.5t148 -157.5l418 363q10 8 23.5 7t21.5 -11z" />
|
1727 |
+
<glyph glyph-name="_473" unicode="" horiz-adv-x="1408"
|
1728 |
+
d="M512 160v704q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-704q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM768 160v704q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-704q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1024 160v704q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-704
|
1729 |
+
q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM480 1152h448l-48 117q-7 9 -17 11h-317q-10 -2 -17 -11zM1408 1120v-64q0 -14 -9 -23t-23 -9h-96v-948q0 -83 -47 -143.5t-113 -60.5h-832q-66 0 -113 58.5t-47 141.5v952h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h309l70 167
|
1730 |
+
q15 37 54 63t79 26h320q40 0 79 -26t54 -63l70 -167h309q14 0 23 -9t9 -23z" />
|
1731 |
+
<glyph glyph-name="_474" unicode=""
|
1732 |
+
d="M1150 462v-109q0 -50 -36.5 -89t-94 -60.5t-118 -32.5t-117.5 -11q-205 0 -342.5 139t-137.5 346q0 203 136 339t339 136q34 0 75.5 -4.5t93 -18t92.5 -34t69 -56.5t28 -81v-109q0 -16 -16 -16h-118q-16 0 -16 16v70q0 43 -65.5 67.5t-137.5 24.5q-140 0 -228.5 -91.5
|
1733 |
+
t-88.5 -237.5q0 -151 91.5 -249.5t233.5 -98.5q68 0 138 24t70 66v70q0 7 4.5 11.5t10.5 4.5h119q6 0 11 -4.5t5 -11.5zM768 1280q-130 0 -248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5
|
1734 |
+
t-51 248.5t-136.5 204t-204 136.5t-248.5 51zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
1735 |
+
<glyph glyph-name="_475" unicode=""
|
1736 |
+
d="M972 761q0 108 -53.5 169t-147.5 61q-63 0 -124 -30.5t-110 -84.5t-79.5 -137t-30.5 -180q0 -112 53.5 -173t150.5 -61q96 0 176 66.5t122.5 166t42.5 203.5zM1536 640q0 -111 -37 -197t-98.5 -135t-131.5 -74.5t-145 -27.5q-6 0 -15.5 -0.5t-16.5 -0.5q-95 0 -142 53
|
1737 |
+
q-28 33 -33 83q-52 -66 -131.5 -110t-173.5 -44q-161 0 -249.5 95.5t-88.5 269.5q0 157 66 290t179 210.5t246 77.5q87 0 155 -35.5t106 -99.5l2 19l11 56q1 6 5.5 12t9.5 6h118q5 0 13 -11q5 -5 3 -16l-120 -614q-5 -24 -5 -48q0 -39 12.5 -52t44.5 -13q28 1 57 5.5t73 24
|
1738 |
+
t77 50t57 89.5t24 137q0 292 -174 466t-466 174q-130 0 -248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51q228 0 405 144q11 9 24 8t21 -12l41 -49q8 -12 7 -24q-2 -13 -12 -22q-102 -83 -227.5 -128t-258.5 -45q-156 0 -298 61
|
1739 |
+
t-245 164t-164 245t-61 298t61 298t164 245t245 164t298 61q344 0 556 -212t212 -556z" />
|
1740 |
+
<glyph glyph-name="_476" unicode="" horiz-adv-x="1792"
|
1741 |
+
d="M1698 1442q94 -94 94 -226.5t-94 -225.5l-225 -223l104 -104q10 -10 10 -23t-10 -23l-210 -210q-10 -10 -23 -10t-23 10l-105 105l-603 -603q-37 -37 -90 -37h-203l-256 -128l-64 64l128 256v203q0 53 37 90l603 603l-105 105q-10 10 -10 23t10 23l210 210q10 10 23 10
|
1742 |
+
t23 -10l104 -104l223 225q93 94 225.5 94t226.5 -94zM512 64l576 576l-192 192l-576 -576v-192h192z" />
|
1743 |
+
<glyph glyph-name="f1fc" unicode="" horiz-adv-x="1792"
|
1744 |
+
d="M1615 1536q70 0 122.5 -46.5t52.5 -116.5q0 -63 -45 -151q-332 -629 -465 -752q-97 -91 -218 -91q-126 0 -216.5 92.5t-90.5 219.5q0 128 92 212l638 579q59 54 130 54zM706 502q39 -76 106.5 -130t150.5 -76l1 -71q4 -213 -129.5 -347t-348.5 -134q-123 0 -218 46.5
|
1745 |
+
t-152.5 127.5t-86.5 183t-29 220q7 -5 41 -30t62 -44.5t59 -36.5t46 -17q41 0 55 37q25 66 57.5 112.5t69.5 76t88 47.5t103 25.5t125 10.5z" />
|
1746 |
+
<glyph glyph-name="_478" unicode="" horiz-adv-x="1792"
|
1747 |
+
d="M1792 128v-384h-1792v384q45 0 85 14t59 27.5t47 37.5q30 27 51.5 38t56.5 11q24 0 44 -7t31 -15t33 -27q29 -25 47 -38t58 -27t86 -14q45 0 85 14.5t58 27t48 37.5q21 19 32.5 27t31 15t43.5 7q35 0 56.5 -11t51.5 -38q28 -24 47 -37.5t59 -27.5t85 -14t85 14t59 27.5
|
1748 |
+
t47 37.5q30 27 51.5 38t56.5 11q34 0 55.5 -11t51.5 -38q28 -24 47 -37.5t59 -27.5t85 -14zM1792 448v-192q-24 0 -44 7t-31 15t-33 27q-29 25 -47 38t-58 27t-85 14q-46 0 -86 -14t-58 -27t-47 -38q-22 -19 -33 -27t-31 -15t-44 -7q-35 0 -56.5 11t-51.5 38q-29 25 -47 38
|
1749 |
+
t-58 27t-86 14q-45 0 -85 -14.5t-58 -27t-48 -37.5q-21 -19 -32.5 -27t-31 -15t-43.5 -7q-35 0 -56.5 11t-51.5 38q-28 24 -47 37.5t-59 27.5t-85 14q-46 0 -86 -14t-58 -27t-47 -38q-30 -27 -51.5 -38t-56.5 -11v192q0 80 56 136t136 56h64v448h256v-448h256v448h256v-448
|
1750 |
+
h256v448h256v-448h64q80 0 136 -56t56 -136zM512 1312q0 -77 -36 -118.5t-92 -41.5q-53 0 -90.5 37.5t-37.5 90.5q0 29 9.5 51t23.5 34t31 28t31 31.5t23.5 44.5t9.5 67q38 0 83 -74t45 -150zM1024 1312q0 -77 -36 -118.5t-92 -41.5q-53 0 -90.5 37.5t-37.5 90.5
|
1751 |
+
q0 29 9.5 51t23.5 34t31 28t31 31.5t23.5 44.5t9.5 67q38 0 83 -74t45 -150zM1536 1312q0 -77 -36 -118.5t-92 -41.5q-53 0 -90.5 37.5t-37.5 90.5q0 29 9.5 51t23.5 34t31 28t31 31.5t23.5 44.5t9.5 67q38 0 83 -74t45 -150z" />
|
1752 |
+
<glyph glyph-name="_479" unicode="" horiz-adv-x="2048"
|
1753 |
+
d="M2048 0v-128h-2048v1536h128v-1408h1920zM1664 1024l256 -896h-1664v576l448 576l576 -576z" />
|
1754 |
+
<glyph glyph-name="_480" unicode="" horiz-adv-x="1792"
|
1755 |
+
d="M768 646l546 -546q-106 -108 -247.5 -168t-298.5 -60q-209 0 -385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103v-762zM955 640h773q0 -157 -60 -298.5t-168 -247.5zM1664 768h-768v768q209 0 385.5 -103t279.5 -279.5t103 -385.5z" />
|
1756 |
+
<glyph glyph-name="_481" unicode="" horiz-adv-x="2048"
|
1757 |
+
d="M2048 0v-128h-2048v1536h128v-1408h1920zM1920 1248v-435q0 -21 -19.5 -29.5t-35.5 7.5l-121 121l-633 -633q-10 -10 -23 -10t-23 10l-233 233l-416 -416l-192 192l585 585q10 10 23 10t23 -10l233 -233l464 464l-121 121q-16 16 -7.5 35.5t29.5 19.5h435q14 0 23 -9
|
1758 |
+
t9 -23z" />
|
1759 |
+
<glyph glyph-name="_482" unicode="" horiz-adv-x="1792"
|
1760 |
+
d="M1292 832q0 -6 10 -41q10 -29 25 -49.5t41 -34t44 -20t55 -16.5q325 -91 325 -332q0 -146 -105.5 -242.5t-254.5 -96.5q-59 0 -111.5 18.5t-91.5 45.5t-77 74.5t-63 87.5t-53.5 103.5t-43.5 103t-39.5 106.5t-35.5 95q-32 81 -61.5 133.5t-73.5 96.5t-104 64t-142 20
|
1761 |
+
q-96 0 -183 -55.5t-138 -144.5t-51 -185q0 -160 106.5 -279.5t263.5 -119.5q177 0 258 95q56 63 83 116l84 -152q-15 -34 -44 -70l1 -1q-131 -152 -388 -152q-147 0 -269.5 79t-190.5 207.5t-68 274.5q0 105 43.5 206t116 176.5t172 121.5t204.5 46q87 0 159 -19t123.5 -50
|
1762 |
+
t95 -80t72.5 -99t58.5 -117t50.5 -124.5t50 -130.5t55 -127q96 -200 233 -200q81 0 138.5 48.5t57.5 128.5q0 42 -19 72t-50.5 46t-72.5 31.5t-84.5 27t-87.5 34t-81 52t-65 82t-39 122.5q-3 16 -3 33q0 110 87.5 192t198.5 78q78 -3 120.5 -14.5t90.5 -53.5h-1
|
1763 |
+
q12 -11 23 -24.5t26 -36t19 -27.5l-129 -99q-26 49 -54 70v1q-23 21 -97 21q-49 0 -84 -33t-35 -83z" />
|
1764 |
+
<glyph glyph-name="_483" unicode=""
|
1765 |
+
d="M1432 484q0 173 -234 239q-35 10 -53 16.5t-38 25t-29 46.5q0 2 -2 8.5t-3 12t-1 7.5q0 36 24.5 59.5t60.5 23.5q54 0 71 -15h-1q20 -15 39 -51l93 71q-39 54 -49 64q-33 29 -67.5 39t-85.5 10q-80 0 -142 -57.5t-62 -137.5q0 -7 2 -23q16 -96 64.5 -140t148.5 -73
|
1766 |
+
q29 -8 49 -15.5t45 -21.5t38.5 -34.5t13.5 -46.5v-5q1 -58 -40.5 -93t-100.5 -35q-97 0 -167 144q-23 47 -51.5 121.5t-48 125.5t-54 110.5t-74 95.5t-103.5 60.5t-147 24.5q-101 0 -192 -56t-144 -148t-50 -192v-1q4 -108 50.5 -199t133.5 -147.5t196 -56.5q186 0 279 110
|
1767 |
+
q20 27 31 51l-60 109q-42 -80 -99 -116t-146 -36q-115 0 -191 87t-76 204q0 105 82 189t186 84q112 0 170 -53.5t104 -172.5q8 -21 25.5 -68.5t28.5 -76.5t31.5 -74.5t38.5 -74t45.5 -62.5t55.5 -53.5t66 -33t80 -13.5q107 0 183 69.5t76 174.5zM1536 1120v-960
|
1768 |
+
q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
|
1769 |
+
<glyph glyph-name="_484" unicode="" horiz-adv-x="2048"
|
1770 |
+
d="M1152 640q0 104 -40.5 198.5t-109.5 163.5t-163.5 109.5t-198.5 40.5t-198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5t198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5zM1920 640q0 104 -40.5 198.5
|
1771 |
+
t-109.5 163.5t-163.5 109.5t-198.5 40.5h-386q119 -90 188.5 -224t69.5 -288t-69.5 -288t-188.5 -224h386q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5zM2048 640q0 -130 -51 -248.5t-136.5 -204t-204 -136.5t-248.5 -51h-768q-130 0 -248.5 51t-204 136.5
|
1772 |
+
t-136.5 204t-51 248.5t51 248.5t136.5 204t204 136.5t248.5 51h768q130 0 248.5 -51t204 -136.5t136.5 -204t51 -248.5z" />
|
1773 |
+
<glyph glyph-name="_485" unicode="" horiz-adv-x="2048"
|
1774 |
+
d="M0 640q0 130 51 248.5t136.5 204t204 136.5t248.5 51h768q130 0 248.5 -51t204 -136.5t136.5 -204t51 -248.5t-51 -248.5t-136.5 -204t-204 -136.5t-248.5 -51h-768q-130 0 -248.5 51t-204 136.5t-136.5 204t-51 248.5zM1408 128q104 0 198.5 40.5t163.5 109.5
|
1775 |
+
t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5t-163.5 109.5t-198.5 40.5t-198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5z" />
|
1776 |
+
<glyph glyph-name="_486" unicode="" horiz-adv-x="2304"
|
1777 |
+
d="M762 384h-314q-40 0 -57.5 35t6.5 67l188 251q-65 31 -137 31q-132 0 -226 -94t-94 -226t94 -226t226 -94q115 0 203 72.5t111 183.5zM576 512h186q-18 85 -75 148zM1056 512l288 384h-480l-99 -132q105 -103 126 -252h165zM2176 448q0 132 -94 226t-226 94
|
1778 |
+
q-60 0 -121 -24l174 -260q15 -23 10 -49t-27 -40q-15 -11 -36 -11q-35 0 -53 29l-174 260q-93 -95 -93 -225q0 -132 94 -226t226 -94t226 94t94 226zM2304 448q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 97 39.5 183.5t109.5 149.5l-65 98l-353 -469
|
1779 |
+
q-18 -26 -51 -26h-197q-23 -164 -149 -274t-294 -110q-185 0 -316.5 131.5t-131.5 316.5t131.5 316.5t316.5 131.5q114 0 215 -55l137 183h-224q-26 0 -45 19t-19 45t19 45t45 19h384v-128h435l-85 128h-222q-26 0 -45 19t-19 45t19 45t45 19h256q33 0 53 -28l267 -400
|
1780 |
+
q91 44 192 44q185 0 316.5 -131.5t131.5 -316.5z" />
|
1781 |
+
<glyph glyph-name="_487" unicode=""
|
1782 |
+
d="M384 320q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1408 320q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1362 716l-72 384q-5 23 -22.5 37.5t-40.5 14.5
|
1783 |
+
h-918q-23 0 -40.5 -14.5t-22.5 -37.5l-72 -384q-5 -30 14 -53t49 -23h1062q30 0 49 23t14 53zM1136 1328q0 20 -14 34t-34 14h-640q-20 0 -34 -14t-14 -34t14 -34t34 -14h640q20 0 34 14t14 34zM1536 603v-603h-128v-128q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5
|
1784 |
+
t-37.5 90.5v128h-768v-128q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5v128h-128v603q0 112 25 223l103 454q9 78 97.5 137t230 89t312.5 30t312.5 -30t230 -89t97.5 -137l105 -454q23 -102 23 -223z" />
|
1785 |
+
<glyph glyph-name="_488" unicode="" horiz-adv-x="2048"
|
1786 |
+
d="M1463 704q0 -35 -25 -60.5t-61 -25.5h-702q-36 0 -61 25.5t-25 60.5t25 60.5t61 25.5h702q36 0 61 -25.5t25 -60.5zM1677 704q0 86 -23 170h-982q-36 0 -61 25t-25 60q0 36 25 61t61 25h908q-88 143 -235 227t-320 84q-177 0 -327.5 -87.5t-238 -237.5t-87.5 -327
|
1787 |
+
q0 -86 23 -170h982q36 0 61 -25t25 -60q0 -36 -25 -61t-61 -25h-908q88 -143 235.5 -227t320.5 -84q132 0 253 51.5t208 139t139 208t52 253.5zM2048 959q0 -35 -25 -60t-61 -25h-131q17 -85 17 -170q0 -167 -65.5 -319.5t-175.5 -263t-262.5 -176t-319.5 -65.5
|
1788 |
+
q-246 0 -448.5 133t-301.5 350h-189q-36 0 -61 25t-25 61q0 35 25 60t61 25h132q-17 85 -17 170q0 167 65.5 319.5t175.5 263t262.5 176t320.5 65.5q245 0 447.5 -133t301.5 -350h188q36 0 61 -25t25 -61z" />
|
1789 |
+
<glyph glyph-name="_489" unicode="" horiz-adv-x="1280"
|
1790 |
+
d="M953 1158l-114 -328l117 -21q165 451 165 518q0 56 -38 56q-57 0 -130 -225zM654 471l33 -88q37 42 71 67l-33 5.5t-38.5 7t-32.5 8.5zM362 1367q0 -98 159 -521q17 10 49 10q15 0 75 -5l-121 351q-75 220 -123 220q-19 0 -29 -17.5t-10 -37.5zM283 608q0 -36 51.5 -119
|
1791 |
+
t117.5 -153t100 -70q14 0 25.5 13t11.5 27q0 24 -32 102q-13 32 -32 72t-47.5 89t-61.5 81t-62 32q-20 0 -45.5 -27t-25.5 -47zM125 273q0 -41 25 -104q59 -145 183.5 -227t281.5 -82q227 0 382 170q152 169 152 427q0 43 -1 67t-11.5 62t-30.5 56q-56 49 -211.5 75.5
|
1792 |
+
t-270.5 26.5q-37 0 -49 -11q-12 -5 -12 -35q0 -34 21.5 -60t55.5 -40t77.5 -23.5t87.5 -11.5t85 -4t70 0h23q24 0 40 -19q15 -19 19 -55q-28 -28 -96 -54q-61 -22 -93 -46q-64 -46 -108.5 -114t-44.5 -137q0 -31 18.5 -88.5t18.5 -87.5l-3 -12q-4 -12 -4 -14
|
1793 |
+
q-137 10 -146 216q-8 -2 -41 -2q2 -7 2 -21q0 -53 -40.5 -89.5t-94.5 -36.5q-82 0 -166.5 78t-84.5 159q0 34 33 67q52 -64 60 -76q77 -104 133 -104q12 0 26.5 8.5t14.5 20.5q0 34 -87.5 145t-116.5 111q-43 0 -70 -44.5t-27 -90.5zM11 264q0 101 42.5 163t136.5 88
|
1794 |
+
q-28 74 -28 104q0 62 61 123t122 61q29 0 70 -15q-163 462 -163 567q0 80 41 130.5t119 50.5q131 0 325 -581q6 -17 8 -23q6 16 29 79.5t43.5 118.5t54 127.5t64.5 123t70.5 86.5t76.5 36q71 0 112 -49t41 -122q0 -108 -159 -550q61 -15 100.5 -46t58.5 -78t26 -93.5
|
1795 |
+
t7 -110.5q0 -150 -47 -280t-132 -225t-211 -150t-278 -55q-111 0 -223 42q-149 57 -258 191.5t-109 286.5z" />
|
1796 |
+
<glyph glyph-name="_490" unicode="" horiz-adv-x="2048"
|
1797 |
+
d="M785 528h207q-14 -158 -98.5 -248.5t-214.5 -90.5q-162 0 -254.5 116t-92.5 316q0 194 93 311.5t233 117.5q148 0 232 -87t97 -247h-203q-5 64 -35.5 99t-81.5 35q-57 0 -88.5 -60.5t-31.5 -177.5q0 -48 5 -84t18 -69.5t40 -51.5t66 -18q95 0 109 139zM1497 528h206
|
1798 |
+
q-14 -158 -98 -248.5t-214 -90.5q-162 0 -254.5 116t-92.5 316q0 194 93 311.5t233 117.5q148 0 232 -87t97 -247h-204q-4 64 -35 99t-81 35q-57 0 -88.5 -60.5t-31.5 -177.5q0 -48 5 -84t18 -69.5t39.5 -51.5t65.5 -18q49 0 76.5 38t33.5 101zM1856 647q0 207 -15.5 307
|
1799 |
+
t-60.5 161q-6 8 -13.5 14t-21.5 15t-16 11q-86 63 -697 63q-625 0 -710 -63q-5 -4 -17.5 -11.5t-21 -14t-14.5 -14.5q-45 -60 -60 -159.5t-15 -308.5q0 -208 15 -307.5t60 -160.5q6 -8 15 -15t20.5 -14t17.5 -12q44 -33 239.5 -49t470.5 -16q610 0 697 65q5 4 17 11t20.5 14
|
1800 |
+
t13.5 16q46 60 61 159t15 309zM2048 1408v-1536h-2048v1536h2048z" />
|
1801 |
+
<glyph glyph-name="_491" unicode=""
|
1802 |
+
d="M992 912v-496q0 -14 -9 -23t-23 -9h-160q-14 0 -23 9t-9 23v496q0 112 -80 192t-192 80h-272v-1152q0 -14 -9 -23t-23 -9h-160q-14 0 -23 9t-9 23v1344q0 14 9 23t23 9h464q135 0 249 -66.5t180.5 -180.5t66.5 -249zM1376 1376v-880q0 -135 -66.5 -249t-180.5 -180.5
|
1803 |
+
t-249 -66.5h-464q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h160q14 0 23 -9t9 -23v-768h272q112 0 192 80t80 192v880q0 14 9 23t23 9h160q14 0 23 -9t9 -23z" />
|
1804 |
+
<glyph glyph-name="_492" unicode=""
|
1805 |
+
d="M1311 694v-114q0 -24 -13.5 -38t-37.5 -14h-202q-24 0 -38 14t-14 38v114q0 24 14 38t38 14h202q24 0 37.5 -14t13.5 -38zM821 464v250q0 53 -32.5 85.5t-85.5 32.5h-133q-68 0 -96 -52q-28 52 -96 52h-130q-53 0 -85.5 -32.5t-32.5 -85.5v-250q0 -22 21 -22h55
|
1806 |
+
q22 0 22 22v230q0 24 13.5 38t38.5 14h94q24 0 38 -14t14 -38v-230q0 -22 21 -22h54q22 0 22 22v230q0 24 14 38t38 14h97q24 0 37.5 -14t13.5 -38v-230q0 -22 22 -22h55q21 0 21 22zM1410 560v154q0 53 -33 85.5t-86 32.5h-264q-53 0 -86 -32.5t-33 -85.5v-410
|
1807 |
+
q0 -21 22 -21h55q21 0 21 21v180q31 -42 94 -42h191q53 0 86 32.5t33 85.5zM1536 1176v-1072q0 -96 -68 -164t-164 -68h-1072q-96 0 -164 68t-68 164v1072q0 96 68 164t164 68h1072q96 0 164 -68t68 -164z" />
|
1808 |
+
<glyph glyph-name="_493" unicode=""
|
1809 |
+
d="M915 450h-294l147 551zM1001 128h311l-324 1024h-440l-324 -1024h311l383 314zM1536 1120v-960q0 -118 -85 -203t-203 -85h-960q-118 0 -203 85t-85 203v960q0 118 85 203t203 85h960q118 0 203 -85t85 -203z" />
|
1810 |
+
<glyph glyph-name="_494" unicode="" horiz-adv-x="2048"
|
1811 |
+
d="M2048 641q0 -21 -13 -36.5t-33 -19.5l-205 -356q3 -9 3 -18q0 -20 -12.5 -35.5t-32.5 -19.5l-193 -337q3 -8 3 -16q0 -23 -16.5 -40t-40.5 -17q-25 0 -41 18h-400q-17 -20 -43 -20t-43 20h-399q-17 -20 -43 -20q-23 0 -40 16.5t-17 40.5q0 8 4 20l-193 335
|
1812 |
+
q-20 4 -32.5 19.5t-12.5 35.5q0 9 3 18l-206 356q-20 5 -32.5 20.5t-12.5 35.5q0 21 13.5 36.5t33.5 19.5l199 344q0 1 -0.5 3t-0.5 3q0 36 34 51l209 363q-4 10 -4 18q0 24 17 40.5t40 16.5q26 0 44 -21h396q16 21 43 21t43 -21h398q18 21 44 21q23 0 40 -16.5t17 -40.5
|
1813 |
+
q0 -6 -4 -18l207 -358q23 -1 39 -17.5t16 -38.5q0 -13 -7 -27l187 -324q19 -4 31.5 -19.5t12.5 -35.5zM1063 -158h389l-342 354h-143l-342 -354h360q18 16 39 16t39 -16zM112 654q1 -4 1 -13q0 -10 -2 -15l208 -360l15 -6l188 199v347l-187 194q-13 -8 -29 -10zM986 1438
|
1814 |
+
h-388l190 -200l554 200h-280q-16 -16 -38 -16t-38 16zM1689 226q1 6 5 11l-64 68l-17 -79h76zM1583 226l22 105l-252 266l-296 -307l63 -64h463zM1495 -142l16 28l65 310h-427l333 -343q8 4 13 5zM578 -158h5l342 354h-373v-335l4 -6q14 -5 22 -13zM552 226h402l64 66
|
1815 |
+
l-309 321l-157 -166v-221zM359 226h163v189l-168 -177q4 -8 5 -12zM358 1051q0 -1 0.5 -2t0.5 -2q0 -16 -8 -29l171 -177v269zM552 1121v-311l153 -157l297 314l-223 236zM556 1425l-4 -8v-264l205 74l-191 201q-6 -2 -10 -3zM1447 1438h-16l-621 -224l213 -225zM1023 946
|
1816 |
+
l-297 -315l311 -319l296 307zM688 634l-136 141v-284zM1038 270l-42 -44h85zM1374 618l238 -251l132 624l-3 5l-1 1zM1718 1018q-8 13 -8 29v2l-216 376q-5 1 -13 5l-437 -463l310 -327zM522 1142v223l-163 -282zM522 196h-163l163 -283v283zM1607 196l-48 -227l130 227h-82
|
1817 |
+
zM1729 266l207 361q-2 10 -2 14q0 1 3 16l-171 296l-129 -612l77 -82q5 3 15 7z" />
|
1818 |
+
<glyph glyph-name="f210" unicode=""
|
1819 |
+
d="M0 856q0 131 91.5 226.5t222.5 95.5h742l352 358v-1470q0 -132 -91.5 -227t-222.5 -95h-780q-131 0 -222.5 95t-91.5 227v790zM1232 102l-176 180v425q0 46 -32 79t-78 33h-484q-46 0 -78 -33t-32 -79v-492q0 -46 32.5 -79.5t77.5 -33.5h770z" />
|
1820 |
+
<glyph glyph-name="_496" unicode=""
|
1821 |
+
d="M934 1386q-317 -121 -556 -362.5t-358 -560.5q-20 89 -20 176q0 208 102.5 384.5t278.5 279t384 102.5q82 0 169 -19zM1203 1267q93 -65 164 -155q-389 -113 -674.5 -400.5t-396.5 -676.5q-93 72 -155 162q112 386 395 671t667 399zM470 -67q115 356 379.5 622t619.5 384
|
1822 |
+
q40 -92 54 -195q-292 -120 -516 -345t-343 -518q-103 14 -194 52zM1536 -125q-193 50 -367 115q-135 -84 -290 -107q109 205 274 370.5t369 275.5q-21 -152 -101 -284q65 -175 115 -370z" />
|
1823 |
+
<glyph glyph-name="f212" unicode="" horiz-adv-x="2048"
|
1824 |
+
d="M1893 1144l155 -1272q-131 0 -257 57q-200 91 -393 91q-226 0 -374 -148q-148 148 -374 148q-193 0 -393 -91q-128 -57 -252 -57h-5l155 1272q224 127 482 127q233 0 387 -106q154 106 387 106q258 0 482 -127zM1398 157q129 0 232 -28.5t260 -93.5l-124 1021
|
1825 |
+
q-171 78 -368 78q-224 0 -374 -141q-150 141 -374 141q-197 0 -368 -78l-124 -1021q105 43 165.5 65t148.5 39.5t178 17.5q202 0 374 -108q172 108 374 108zM1438 191l-55 907q-211 -4 -359 -155q-152 155 -374 155q-176 0 -336 -66l-114 -941q124 51 228.5 76t221.5 25
|
1826 |
+
q209 0 374 -102q172 107 374 102z" />
|
1827 |
+
<glyph glyph-name="_498" unicode="" horiz-adv-x="2048"
|
1828 |
+
d="M1500 165v733q0 21 -15 36t-35 15h-93q-20 0 -35 -15t-15 -36v-733q0 -20 15 -35t35 -15h93q20 0 35 15t15 35zM1216 165v531q0 20 -15 35t-35 15h-101q-20 0 -35 -15t-15 -35v-531q0 -20 15 -35t35 -15h101q20 0 35 15t15 35zM924 165v429q0 20 -15 35t-35 15h-101
|
1829 |
+
q-20 0 -35 -15t-15 -35v-429q0 -20 15 -35t35 -15h101q20 0 35 15t15 35zM632 165v362q0 20 -15 35t-35 15h-101q-20 0 -35 -15t-15 -35v-362q0 -20 15 -35t35 -15h101q20 0 35 15t15 35zM2048 311q0 -166 -118 -284t-284 -118h-1244q-166 0 -284 118t-118 284
|
1830 |
+
q0 116 63 214.5t168 148.5q-10 34 -10 73q0 113 80.5 193.5t193.5 80.5q102 0 180 -67q45 183 194 300t338 117q149 0 275 -73.5t199.5 -199.5t73.5 -275q0 -66 -14 -122q135 -33 221 -142.5t86 -247.5z" />
|
1831 |
+
<glyph glyph-name="_499" unicode=""
|
1832 |
+
d="M0 1536h1536v-1392l-776 -338l-760 338v1392zM1436 209v926h-1336v-926l661 -294zM1436 1235v201h-1336v-201h1336zM181 937v-115h-37v115h37zM181 789v-115h-37v115h37zM181 641v-115h-37v115h37zM181 493v-115h-37v115h37zM181 345v-115h-37v115h37zM207 202l15 34
|
1833 |
+
l105 -47l-15 -33zM343 142l15 34l105 -46l-15 -34zM478 82l15 34l105 -46l-15 -34zM614 23l15 33l104 -46l-15 -34zM797 10l105 46l15 -33l-105 -47zM932 70l105 46l15 -34l-105 -46zM1068 130l105 46l15 -34l-105 -46zM1203 189l105 47l15 -34l-105 -46zM259 1389v-36h-114
|
1834 |
+
v36h114zM421 1389v-36h-115v36h115zM583 1389v-36h-115v36h115zM744 1389v-36h-114v36h114zM906 1389v-36h-114v36h114zM1068 1389v-36h-115v36h115zM1230 1389v-36h-115v36h115zM1391 1389v-36h-114v36h114zM181 1049v-79h-37v115h115v-36h-78zM421 1085v-36h-115v36h115z
|
1835 |
+
M583 1085v-36h-115v36h115zM744 1085v-36h-114v36h114zM906 1085v-36h-114v36h114zM1068 1085v-36h-115v36h115zM1230 1085v-36h-115v36h115zM1355 970v79h-78v36h115v-115h-37zM1355 822v115h37v-115h-37zM1355 674v115h37v-115h-37zM1355 526v115h37v-115h-37zM1355 378
|
1836 |
+
v115h37v-115h-37zM1355 230v115h37v-115h-37zM760 265q-129 0 -221 91.5t-92 221.5q0 129 92 221t221 92q130 0 221.5 -92t91.5 -221q0 -130 -91.5 -221.5t-221.5 -91.5zM595 646q0 -36 19.5 -56.5t49.5 -25t64 -7t64 -2t49.5 -9t19.5 -30.5q0 -49 -112 -49q-97 0 -123 51
|
1837 |
+
h-3l-31 -63q67 -42 162 -42q29 0 56.5 5t55.5 16t45.5 33t17.5 53q0 46 -27.5 69.5t-67.5 27t-79.5 3t-67 5t-27.5 25.5q0 21 20.5 33t40.5 15t41 3q34 0 70.5 -11t51.5 -34h3l30 58q-3 1 -21 8.5t-22.5 9t-19.5 7t-22 7t-20 4.5t-24 4t-23 1q-29 0 -56.5 -5t-54 -16.5
|
1838 |
+
t-43 -34t-16.5 -53.5z" />
|
1839 |
+
<glyph glyph-name="_500" unicode="" horiz-adv-x="2048"
|
1840 |
+
d="M863 504q0 112 -79.5 191.5t-191.5 79.5t-191 -79.5t-79 -191.5t79 -191t191 -79t191.5 79t79.5 191zM1726 505q0 112 -79 191t-191 79t-191.5 -79t-79.5 -191q0 -113 79.5 -192t191.5 -79t191 79.5t79 191.5zM2048 1314v-1348q0 -44 -31.5 -75.5t-76.5 -31.5h-1832
|
1841 |
+
q-45 0 -76.5 31.5t-31.5 75.5v1348q0 44 31.5 75.5t76.5 31.5h431q44 0 76 -31.5t32 -75.5v-161h754v161q0 44 32 75.5t76 31.5h431q45 0 76.5 -31.5t31.5 -75.5z" />
|
1842 |
+
<glyph glyph-name="_501" unicode="" horiz-adv-x="2048"
|
1843 |
+
d="M1430 953zM1690 749q148 0 253 -98.5t105 -244.5q0 -157 -109 -261.5t-267 -104.5q-85 0 -162 27.5t-138 73.5t-118 106t-109 126t-103.5 132.5t-108.5 126.5t-117 106t-136 73.5t-159 27.5q-154 0 -251.5 -91.5t-97.5 -244.5q0 -157 104 -250t263 -93q100 0 208 37.5
|
1844 |
+
t193 98.5q5 4 21 18.5t30 24t22 9.5q14 0 24.5 -10.5t10.5 -24.5q0 -24 -60 -77q-101 -88 -234.5 -142t-260.5 -54q-133 0 -245.5 58t-180 165t-67.5 241q0 205 141.5 341t347.5 136q120 0 226.5 -43.5t185.5 -113t151.5 -153t139 -167.5t133.5 -153.5t149.5 -113
|
1845 |
+
t172.5 -43.5q102 0 168.5 61.5t66.5 162.5q0 95 -64.5 159t-159.5 64q-30 0 -81.5 -18.5t-68.5 -18.5q-20 0 -35.5 15t-15.5 35q0 18 8.5 57t8.5 59q0 159 -107.5 263t-266.5 104q-58 0 -111.5 -18.5t-84 -40.5t-55.5 -40.5t-33 -18.5q-15 0 -25.5 10.5t-10.5 25.5
|
1846 |
+
q0 19 25 46q59 67 147 103.5t182 36.5q191 0 318 -125.5t127 -315.5q0 -37 -4 -66q57 15 115 15z" />
|
1847 |
+
<glyph glyph-name="_502" unicode="" horiz-adv-x="1664"
|
1848 |
+
d="M1216 832q0 26 -19 45t-45 19h-128v128q0 26 -19 45t-45 19t-45 -19t-19 -45v-128h-128q-26 0 -45 -19t-19 -45t19 -45t45 -19h128v-128q0 -26 19 -45t45 -19t45 19t19 45v128h128q26 0 45 19t19 45zM640 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5
|
1849 |
+
t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1536 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1664 1088v-512q0 -24 -16 -42.5t-41 -21.5l-1044 -122q1 -7 4.5 -21.5t6 -26.5t2.5 -22q0 -16 -24 -64h920
|
1850 |
+
q26 0 45 -19t19 -45t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 14 11 39.5t29.5 59.5t20.5 38l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t20 -15.5t13 -24.5t7.5 -26.5t5.5 -29.5t4.5 -25.5h1201q26 0 45 -19t19 -45z" />
|
1851 |
+
<glyph glyph-name="_503" unicode="" horiz-adv-x="1664"
|
1852 |
+
d="M1280 832q0 26 -19 45t-45 19t-45 -19l-147 -146v293q0 26 -19 45t-45 19t-45 -19t-19 -45v-293l-147 146q-19 19 -45 19t-45 -19t-19 -45t19 -45l256 -256q19 -19 45 -19t45 19l256 256q19 19 19 45zM640 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5
|
1853 |
+
t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1536 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1664 1088v-512q0 -24 -16 -42.5t-41 -21.5l-1044 -122q1 -7 4.5 -21.5t6 -26.5t2.5 -22q0 -16 -24 -64h920
|
1854 |
+
q26 0 45 -19t19 -45t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 14 11 39.5t29.5 59.5t20.5 38l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t20 -15.5t13 -24.5t7.5 -26.5t5.5 -29.5t4.5 -25.5h1201q26 0 45 -19t19 -45z" />
|
1855 |
+
<glyph glyph-name="_504" unicode="" horiz-adv-x="2048"
|
1856 |
+
d="M212 768l623 -665l-300 665h-323zM1024 -4l349 772h-698zM538 896l204 384h-262l-288 -384h346zM1213 103l623 665h-323zM683 896h682l-204 384h-274zM1510 896h346l-288 384h-262zM1651 1382l384 -512q14 -18 13 -41.5t-17 -40.5l-960 -1024q-18 -20 -47 -20t-47 20
|
1857 |
+
l-960 1024q-16 17 -17 40.5t13 41.5l384 512q18 26 51 26h1152q33 0 51 -26z" />
|
1858 |
+
<glyph glyph-name="_505" unicode="" horiz-adv-x="2048"
|
1859 |
+
d="M1811 -19q19 19 45 19t45 -19l128 -128l-90 -90l-83 83l-83 -83q-18 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83
|
1860 |
+
q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-128 128l90 90l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83
|
1861 |
+
q19 19 45 19t45 -19l83 -83zM237 19q-19 -19 -45 -19t-45 19l-128 128l90 90l83 -82l83 82q19 19 45 19t45 -19l83 -82l64 64v293l-210 314q-17 26 -7 56.5t40 40.5l177 58v299h128v128h256v128h256v-128h256v-128h128v-299l177 -58q30 -10 40 -40.5t-7 -56.5l-210 -314
|
1862 |
+
v-293l19 18q19 19 45 19t45 -19l83 -82l83 82q19 19 45 19t45 -19l128 -128l-90 -90l-83 83l-83 -83q-18 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83
|
1863 |
+
q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83zM640 1152v-128l384 128l384 -128v128h-128v128h-512v-128h-128z" />
|
1864 |
+
<glyph glyph-name="_506" unicode=""
|
1865 |
+
d="M576 0l96 448l-96 128l-128 64zM832 0l128 640l-128 -64l-96 -128zM992 1010q-2 4 -4 6q-10 8 -96 8q-70 0 -167 -19q-7 -2 -21 -2t-21 2q-97 19 -167 19q-86 0 -96 -8q-2 -2 -4 -6q2 -18 4 -27q2 -3 7.5 -6.5t7.5 -10.5q2 -4 7.5 -20.5t7 -20.5t7.5 -17t8.5 -17t9 -14
|
1866 |
+
t12 -13.5t14 -9.5t17.5 -8t20.5 -4t24.5 -2q36 0 59 12.5t32.5 30t14.5 34.5t11.5 29.5t17.5 12.5h12q11 0 17.5 -12.5t11.5 -29.5t14.5 -34.5t32.5 -30t59 -12.5q13 0 24.5 2t20.5 4t17.5 8t14 9.5t12 13.5t9 14t8.5 17t7.5 17t7 20.5t7.5 20.5q2 7 7.5 10.5t7.5 6.5
|
1867 |
+
q2 9 4 27zM1408 131q0 -121 -73 -190t-194 -69h-874q-121 0 -194 69t-73 190q0 61 4.5 118t19 125.5t37.5 123.5t63.5 103.5t93.5 74.5l-90 220h214q-22 64 -22 128q0 12 2 32q-194 40 -194 96q0 57 210 99q17 62 51.5 134t70.5 114q32 37 76 37q30 0 84 -31t84 -31t84 31
|
1868 |
+
t84 31q44 0 76 -37q36 -42 70.5 -114t51.5 -134q210 -42 210 -99q0 -56 -194 -96q7 -81 -20 -160h214l-82 -225q63 -33 107.5 -96.5t65.5 -143.5t29 -151.5t8 -148.5z" />
|
1869 |
+
<glyph glyph-name="_507" unicode="" horiz-adv-x="2304"
|
1870 |
+
d="M2301 500q12 -103 -22 -198.5t-99 -163.5t-158.5 -106t-196.5 -31q-161 11 -279.5 125t-134.5 274q-12 111 27.5 210.5t118.5 170.5l-71 107q-96 -80 -151 -194t-55 -244q0 -27 -18.5 -46.5t-45.5 -19.5h-256h-69q-23 -164 -149 -274t-294 -110q-185 0 -316.5 131.5
|
1871 |
+
t-131.5 316.5t131.5 316.5t316.5 131.5q76 0 152 -27l24 45q-123 110 -304 110h-64q-26 0 -45 19t-19 45t19 45t45 19h128q78 0 145 -13.5t116.5 -38.5t71.5 -39.5t51 -36.5h512h115l-85 128h-222q-30 0 -49 22.5t-14 52.5q4 23 23 38t43 15h253q33 0 53 -28l70 -105
|
1872 |
+
l114 114q19 19 46 19h101q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-179l115 -172q131 63 275 36q143 -26 244 -134.5t118 -253.5zM448 128q115 0 203 72.5t111 183.5h-314q-35 0 -55 31q-18 32 -1 63l147 277q-47 13 -91 13q-132 0 -226 -94t-94 -226t94 -226
|
1873 |
+
t226 -94zM1856 128q132 0 226 94t94 226t-94 226t-226 94q-60 0 -121 -24l174 -260q15 -23 10 -49t-27 -40q-15 -11 -36 -11q-35 0 -53 29l-174 260q-93 -95 -93 -225q0 -132 94 -226t226 -94z" />
|
1874 |
+
<glyph glyph-name="_508" unicode=""
|
1875 |
+
d="M1408 0q0 -63 -61.5 -113.5t-164 -81t-225 -46t-253.5 -15.5t-253.5 15.5t-225 46t-164 81t-61.5 113.5q0 49 33 88.5t91 66.5t118 44.5t131 29.5q26 5 48 -10.5t26 -41.5q5 -26 -10.5 -48t-41.5 -26q-58 -10 -106 -23.5t-76.5 -25.5t-48.5 -23.5t-27.5 -19.5t-8.5 -12
|
1876 |
+
q3 -11 27 -26.5t73 -33t114 -32.5t160.5 -25t201.5 -10t201.5 10t160.5 25t114 33t73 33.5t27 27.5q-1 4 -8.5 11t-27.5 19t-48.5 23.5t-76.5 25t-106 23.5q-26 4 -41.5 26t-10.5 48q4 26 26 41.5t48 10.5q71 -12 131 -29.5t118 -44.5t91 -66.5t33 -88.5zM1024 896v-384
|
1877 |
+
q0 -26 -19 -45t-45 -19h-64v-384q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v384h-64q-26 0 -45 19t-19 45v384q0 53 37.5 90.5t90.5 37.5h384q53 0 90.5 -37.5t37.5 -90.5zM928 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5
|
1878 |
+
t158.5 -65.5t65.5 -158.5z" />
|
1879 |
+
<glyph glyph-name="_509" unicode="" horiz-adv-x="1792"
|
1880 |
+
d="M1280 512h305q-5 -6 -10 -10.5t-9 -7.5l-3 -4l-623 -600q-18 -18 -44 -18t-44 18l-624 602q-5 2 -21 20h369q22 0 39.5 13.5t22.5 34.5l70 281l190 -667q6 -20 23 -33t39 -13q21 0 38 13t23 33l146 485l56 -112q18 -35 57 -35zM1792 940q0 -145 -103 -300h-369l-111 221
|
1881 |
+
q-8 17 -25.5 27t-36.5 8q-45 -5 -56 -46l-129 -430l-196 686q-6 20 -23.5 33t-39.5 13t-39 -13.5t-22 -34.5l-116 -464h-423q-103 155 -103 300q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5q224 0 351 -124
|
1882 |
+
t127 -344z" />
|
1883 |
+
<glyph glyph-name="venus" unicode="" horiz-adv-x="1280"
|
1884 |
+
d="M1152 960q0 -221 -147.5 -384.5t-364.5 -187.5v-260h224q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-224q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v260q-150 16 -271.5 103t-186 224t-52.5 292
|
1885 |
+
q11 134 80.5 249t182 188t245.5 88q170 19 319 -54t236 -212t87 -306zM128 960q0 -185 131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5z" />
|
1886 |
+
<glyph glyph-name="_511" unicode=""
|
1887 |
+
d="M1472 1408q26 0 45 -19t19 -45v-416q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v262l-382 -383q126 -156 126 -359q0 -117 -45.5 -223.5t-123 -184t-184 -123t-223.5 -45.5t-223.5 45.5t-184 123t-123 184t-45.5 223.5t45.5 223.5t123 184t184 123t223.5 45.5
|
1888 |
+
q203 0 359 -126l382 382h-261q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h416zM576 0q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
|
1889 |
+
<glyph glyph-name="_512" unicode="" horiz-adv-x="1280"
|
1890 |
+
d="M830 1220q145 -72 233.5 -210.5t88.5 -305.5q0 -221 -147.5 -384.5t-364.5 -187.5v-132h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96v-96q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v96h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v132q-217 24 -364.5 187.5
|
1891 |
+
t-147.5 384.5q0 167 88.5 305.5t233.5 210.5q-165 96 -228 273q-6 16 3.5 29.5t26.5 13.5h69q21 0 29 -20q44 -106 140 -171t214 -65t214 65t140 171q8 20 37 20h61q17 0 26.5 -13.5t3.5 -29.5q-63 -177 -228 -273zM576 256q185 0 316.5 131.5t131.5 316.5t-131.5 316.5
|
1892 |
+
t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
|
1893 |
+
<glyph glyph-name="_513" unicode=""
|
1894 |
+
d="M1024 1504q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q126 -158 126 -359q0 -221 -147.5 -384.5t-364.5 -187.5v-132h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96v-96q0 -14 -9 -23t-23 -9h-64
|
1895 |
+
q-14 0 -23 9t-9 23v96h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v132q-149 16 -270.5 103t-186.5 223.5t-53 291.5q16 204 160 353.5t347 172.5q118 14 228 -19t198 -103l255 254h-134q-14 0 -23 9t-9 23v64zM576 256q185 0 316.5 131.5t131.5 316.5t-131.5 316.5
|
1896 |
+
t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
|
1897 |
+
<glyph glyph-name="_514" unicode="" horiz-adv-x="1792"
|
1898 |
+
d="M1280 1504q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q126 -158 126 -359q0 -221 -147.5 -384.5t-364.5 -187.5v-132h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96v-96q0 -14 -9 -23t-23 -9h-64
|
1899 |
+
q-14 0 -23 9t-9 23v96h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v132q-217 24 -364.5 187.5t-147.5 384.5q0 201 126 359l-52 53l-101 -111q-9 -10 -22 -10.5t-23 7.5l-48 44q-10 8 -10.5 21.5t8.5 23.5l105 115l-111 112v-134q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9
|
1900 |
+
t-9 23v288q0 26 19 45t45 19h288q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-133l106 -107l86 94q9 10 22 10.5t23 -7.5l48 -44q10 -8 10.5 -21.5t-8.5 -23.5l-90 -99l57 -56q158 126 359 126t359 -126l255 254h-134q-14 0 -23 9t-9 23v64zM832 256q185 0 316.5 131.5
|
1901 |
+
t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
|
1902 |
+
<glyph glyph-name="_515" unicode="" horiz-adv-x="1792"
|
1903 |
+
d="M1790 1007q12 -155 -52.5 -292t-186 -224t-271.5 -103v-260h224q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-512v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-224q-14 0 -23 9t-9 23v64q0 14 9 23
|
1904 |
+
t23 9h224v260q-150 16 -271.5 103t-186 224t-52.5 292q17 206 164.5 356.5t352.5 169.5q206 21 377 -94q171 115 377 94q205 -19 352.5 -169.5t164.5 -356.5zM896 647q128 131 128 313t-128 313q-128 -131 -128 -313t128 -313zM576 512q115 0 218 57q-154 165 -154 391
|
1905 |
+
q0 224 154 391q-103 57 -218 57q-185 0 -316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5zM1152 128v260q-137 15 -256 94q-119 -79 -256 -94v-260h512zM1216 512q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5q-115 0 -218 -57q154 -167 154 -391
|
1906 |
+
q0 -226 -154 -391q103 -57 218 -57z" />
|
1907 |
+
<glyph glyph-name="_516" unicode="" horiz-adv-x="1920"
|
1908 |
+
d="M1536 1120q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q76 -95 107.5 -214t9.5 -247q-31 -182 -166 -312t-318 -156q-210 -29 -384.5 80t-241.5 300q-117 6 -221 57.5t-177.5 133t-113.5 192.5t-32 230
|
1909 |
+
q9 135 78 252t182 191.5t248 89.5q118 14 227.5 -19t198.5 -103l255 254h-134q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q59 -74 93 -169q182 -9 328 -124l255 254h-134q-14 0 -23 9
|
1910 |
+
t-9 23v64zM1024 704q0 20 -4 58q-162 -25 -271 -150t-109 -292q0 -20 4 -58q162 25 271 150t109 292zM128 704q0 -168 111 -294t276 -149q-3 29 -3 59q0 210 135 369.5t338 196.5q-53 120 -163.5 193t-245.5 73q-185 0 -316.5 -131.5t-131.5 -316.5zM1088 -128
|
1911 |
+
q185 0 316.5 131.5t131.5 316.5q0 168 -111 294t-276 149q3 -28 3 -59q0 -210 -135 -369.5t-338 -196.5q53 -120 163.5 -193t245.5 -73z" />
|
1912 |
+
<glyph glyph-name="_517" unicode="" horiz-adv-x="2048"
|
1913 |
+
d="M1664 1504q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q76 -95 107.5 -214t9.5 -247q-32 -180 -164.5 -310t-313.5 -157q-223 -34 -409 90q-117 -78 -256 -93v-132h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23
|
1914 |
+
t-23 -9h-96v-96q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v96h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v132q-155 17 -279.5 109.5t-187 237.5t-39.5 307q25 187 159.5 322.5t320.5 164.5q224 34 410 -90q146 97 320 97q201 0 359 -126l255 254h-134q-14 0 -23 9
|
1915 |
+
t-9 23v64zM896 391q128 131 128 313t-128 313q-128 -131 -128 -313t128 -313zM128 704q0 -185 131.5 -316.5t316.5 -131.5q117 0 218 57q-154 167 -154 391t154 391q-101 57 -218 57q-185 0 -316.5 -131.5t-131.5 -316.5zM1216 256q185 0 316.5 131.5t131.5 316.5
|
1916 |
+
t-131.5 316.5t-316.5 131.5q-117 0 -218 -57q154 -167 154 -391t-154 -391q101 -57 218 -57z" />
|
1917 |
+
<glyph glyph-name="_518" unicode=""
|
1918 |
+
d="M1472 1408q26 0 45 -19t19 -45v-416q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v262l-213 -214l140 -140q9 -10 9 -23t-9 -22l-46 -46q-9 -9 -22 -9t-23 9l-140 141l-78 -79q126 -156 126 -359q0 -117 -45.5 -223.5t-123 -184t-184 -123t-223.5 -45.5t-223.5 45.5
|
1919 |
+
t-184 123t-123 184t-45.5 223.5t45.5 223.5t123 184t184 123t223.5 45.5q203 0 359 -126l78 78l-172 172q-9 10 -9 23t9 22l46 46q9 9 22 9t23 -9l172 -172l213 213h-261q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h416zM576 0q185 0 316.5 131.5t131.5 316.5t-131.5 316.5
|
1920 |
+
t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
|
1921 |
+
<glyph glyph-name="_519" unicode="" horiz-adv-x="1280"
|
1922 |
+
d="M640 892q217 -24 364.5 -187.5t147.5 -384.5q0 -167 -87 -306t-236 -212t-319 -54q-133 15 -245.5 88t-182 188t-80.5 249q-12 155 52.5 292t186 224t271.5 103v132h-160q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h160v165l-92 -92q-10 -9 -23 -9t-22 9l-46 46q-9 9 -9 22
|
1923 |
+
t9 23l202 201q19 19 45 19t45 -19l202 -201q9 -10 9 -23t-9 -22l-46 -46q-9 -9 -22 -9t-23 9l-92 92v-165h160q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-160v-132zM576 -128q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5
|
1924 |
+
t131.5 -316.5t316.5 -131.5z" />
|
1925 |
+
<glyph glyph-name="_520" unicode="" horiz-adv-x="2048"
|
1926 |
+
d="M1901 621q19 -19 19 -45t-19 -45l-294 -294q-9 -10 -22.5 -10t-22.5 10l-45 45q-10 9 -10 22.5t10 22.5l185 185h-294v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-132q-24 -217 -187.5 -364.5t-384.5 -147.5q-167 0 -306 87t-212 236t-54 319q15 133 88 245.5
|
1927 |
+
t188 182t249 80.5q155 12 292 -52.5t224 -186t103 -271.5h132v224q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-224h294l-185 185q-10 9 -10 22.5t10 22.5l45 45q9 10 22.5 10t22.5 -10zM576 128q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5
|
1928 |
+
t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
|
1929 |
+
<glyph glyph-name="_521" unicode="" horiz-adv-x="1280"
|
1930 |
+
d="M1152 960q0 -221 -147.5 -384.5t-364.5 -187.5v-612q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v612q-217 24 -364.5 187.5t-147.5 384.5q0 117 45.5 223.5t123 184t184 123t223.5 45.5t223.5 -45.5t184 -123t123 -184t45.5 -223.5zM576 512q185 0 316.5 131.5
|
1931 |
+
t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
|
1932 |
+
<glyph glyph-name="_522" unicode="" horiz-adv-x="1280"
|
1933 |
+
d="M1024 576q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1152 576q0 -117 -45.5 -223.5t-123 -184t-184 -123t-223.5 -45.5t-223.5 45.5t-184 123t-123 184t-45.5 223.5t45.5 223.5t123 184t184 123
|
1934 |
+
t223.5 45.5t223.5 -45.5t184 -123t123 -184t45.5 -223.5z" />
|
1935 |
+
<glyph glyph-name="_523" unicode="" horiz-adv-x="1792"
|
1936 |
+
/>
|
1937 |
+
<glyph glyph-name="_524" unicode="" horiz-adv-x="1792"
|
1938 |
+
/>
|
1939 |
+
<glyph glyph-name="_525" unicode=""
|
1940 |
+
d="M1451 1408q35 0 60 -25t25 -60v-1366q0 -35 -25 -60t-60 -25h-391v595h199l30 232h-229v148q0 56 23.5 84t91.5 28l122 1v207q-63 9 -178 9q-136 0 -217.5 -80t-81.5 -226v-171h-200v-232h200v-595h-735q-35 0 -60 25t-25 60v1366q0 35 25 60t60 25h1366z" />
|
1941 |
+
<glyph glyph-name="_526" unicode="" horiz-adv-x="1280"
|
1942 |
+
d="M0 939q0 108 37.5 203.5t103.5 166.5t152 123t185 78t202 26q158 0 294 -66.5t221 -193.5t85 -287q0 -96 -19 -188t-60 -177t-100 -149.5t-145 -103t-189 -38.5q-68 0 -135 32t-96 88q-10 -39 -28 -112.5t-23.5 -95t-20.5 -71t-26 -71t-32 -62.5t-46 -77.5t-62 -86.5
|
1943 |
+
l-14 -5l-9 10q-15 157 -15 188q0 92 21.5 206.5t66.5 287.5t52 203q-32 65 -32 169q0 83 52 156t132 73q61 0 95 -40.5t34 -102.5q0 -66 -44 -191t-44 -187q0 -63 45 -104.5t109 -41.5q55 0 102 25t78.5 68t56 95t38 110.5t20 111t6.5 99.5q0 173 -109.5 269.5t-285.5 96.5
|
1944 |
+
q-200 0 -334 -129.5t-134 -328.5q0 -44 12.5 -85t27 -65t27 -45.5t12.5 -30.5q0 -28 -15 -73t-37 -45q-2 0 -17 3q-51 15 -90.5 56t-61 94.5t-32.5 108t-11 106.5z" />
|
1945 |
+
<glyph glyph-name="_527" unicode=""
|
1946 |
+
d="M985 562q13 0 97.5 -44t89.5 -53q2 -5 2 -15q0 -33 -17 -76q-16 -39 -71 -65.5t-102 -26.5q-57 0 -190 62q-98 45 -170 118t-148 185q-72 107 -71 194v8q3 91 74 158q24 22 52 22q6 0 18 -1.5t19 -1.5q19 0 26.5 -6.5t15.5 -27.5q8 -20 33 -88t25 -75q0 -21 -34.5 -57.5
|
1947 |
+
t-34.5 -46.5q0 -7 5 -15q34 -73 102 -137q56 -53 151 -101q12 -7 22 -7q15 0 54 48.5t52 48.5zM782 32q127 0 243.5 50t200.5 134t134 200.5t50 243.5t-50 243.5t-134 200.5t-200.5 134t-243.5 50t-243.5 -50t-200.5 -134t-134 -200.5t-50 -243.5q0 -203 120 -368l-79 -233
|
1948 |
+
l242 77q158 -104 345 -104zM782 1414q153 0 292.5 -60t240.5 -161t161 -240.5t60 -292.5t-60 -292.5t-161 -240.5t-240.5 -161t-292.5 -60q-195 0 -365 94l-417 -134l136 405q-108 178 -108 389q0 153 60 292.5t161 240.5t240.5 161t292.5 60z" />
|
1949 |
+
<glyph glyph-name="_528" unicode="" horiz-adv-x="1792"
|
1950 |
+
d="M128 128h1024v128h-1024v-128zM128 640h1024v128h-1024v-128zM1696 192q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM128 1152h1024v128h-1024v-128zM1696 704q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1696 1216
|
1951 |
+
q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1792 384v-384h-1792v384h1792zM1792 896v-384h-1792v384h1792zM1792 1408v-384h-1792v384h1792z" />
|
1952 |
+
<glyph glyph-name="_529" unicode="" horiz-adv-x="2048"
|
1953 |
+
d="M704 640q-159 0 -271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5t-112.5 -271.5t-271.5 -112.5zM1664 512h352q13 0 22.5 -9.5t9.5 -22.5v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-352v-352q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5
|
1954 |
+
t-9.5 22.5v352h-352q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h352v352q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5v-352zM928 288q0 -52 38 -90t90 -38h256v-238q-68 -50 -171 -50h-874q-121 0 -194 69t-73 190q0 53 3.5 103.5t14 109t26.5 108.5
|
1955 |
+
t43 97.5t62 81t85.5 53.5t111.5 20q19 0 39 -17q79 -61 154.5 -91.5t164.5 -30.5t164.5 30.5t154.5 91.5q20 17 39 17q132 0 217 -96h-223q-52 0 -90 -38t-38 -90v-192z" />
|
1956 |
+
<glyph glyph-name="_530" unicode="" horiz-adv-x="2048"
|
1957 |
+
d="M704 640q-159 0 -271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5t-112.5 -271.5t-271.5 -112.5zM1781 320l249 -249q9 -9 9 -23q0 -13 -9 -22l-136 -136q-9 -9 -22 -9q-14 0 -23 9l-249 249l-249 -249q-9 -9 -23 -9q-13 0 -22 9l-136 136
|
1958 |
+
q-9 9 -9 22q0 14 9 23l249 249l-249 249q-9 9 -9 23q0 13 9 22l136 136q9 9 22 9q14 0 23 -9l249 -249l249 249q9 9 23 9q13 0 22 -9l136 -136q9 -9 9 -22q0 -14 -9 -23zM1283 320l-181 -181q-37 -37 -37 -91q0 -53 37 -90l83 -83q-21 -3 -44 -3h-874q-121 0 -194 69
|
1959 |
+
t-73 190q0 53 3.5 103.5t14 109t26.5 108.5t43 97.5t62 81t85.5 53.5t111.5 20q19 0 39 -17q154 -122 319 -122t319 122q20 17 39 17q28 0 57 -6q-28 -27 -41 -50t-13 -56q0 -54 37 -91z" />
|
1960 |
+
<glyph glyph-name="_531" unicode="" horiz-adv-x="2048"
|
1961 |
+
d="M256 512h1728q26 0 45 -19t19 -45v-448h-256v256h-1536v-256h-256v1216q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-704zM832 832q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM2048 576v64q0 159 -112.5 271.5t-271.5 112.5h-704
|
1962 |
+
q-26 0 -45 -19t-19 -45v-384h1152z" />
|
1963 |
+
<glyph glyph-name="_532" unicode=""
|
1964 |
+
d="M1536 1536l-192 -448h192v-192h-274l-55 -128h329v-192h-411l-357 -832l-357 832h-411v192h329l-55 128h-274v192h192l-192 448h256l323 -768h378l323 768h256zM768 320l108 256h-216z" />
|
1965 |
+
<glyph glyph-name="_533" unicode=""
|
1966 |
+
d="M1088 1536q185 0 316.5 -93.5t131.5 -226.5v-896q0 -130 -125.5 -222t-305.5 -97l213 -202q16 -15 8 -35t-30 -20h-1056q-22 0 -30 20t8 35l213 202q-180 5 -305.5 97t-125.5 222v896q0 133 131.5 226.5t316.5 93.5h640zM768 192q80 0 136 56t56 136t-56 136t-136 56
|
1967 |
+
t-136 -56t-56 -136t56 -136t136 -56zM1344 768v512h-1152v-512h1152z" />
|
1968 |
+
<glyph glyph-name="_534" unicode=""
|
1969 |
+
d="M1088 1536q185 0 316.5 -93.5t131.5 -226.5v-896q0 -130 -125.5 -222t-305.5 -97l213 -202q16 -15 8 -35t-30 -20h-1056q-22 0 -30 20t8 35l213 202q-180 5 -305.5 97t-125.5 222v896q0 133 131.5 226.5t316.5 93.5h640zM288 224q66 0 113 47t47 113t-47 113t-113 47
|
1970 |
+
t-113 -47t-47 -113t47 -113t113 -47zM704 768v512h-544v-512h544zM1248 224q66 0 113 47t47 113t-47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47zM1408 768v512h-576v-512h576z" />
|
1971 |
+
<glyph glyph-name="_535" unicode="" horiz-adv-x="1792"
|
1972 |
+
d="M597 1115v-1173q0 -25 -12.5 -42.5t-36.5 -17.5q-17 0 -33 8l-465 233q-21 10 -35.5 33.5t-14.5 46.5v1140q0 20 10 34t29 14q14 0 44 -15l511 -256q3 -3 3 -5zM661 1014l534 -866l-534 266v600zM1792 996v-1054q0 -25 -14 -40.5t-38 -15.5t-47 13l-441 220zM1789 1116
|
1973 |
+
q0 -3 -256.5 -419.5t-300.5 -487.5l-390 634l324 527q17 28 52 28q14 0 26 -6l541 -270q4 -2 4 -6z" />
|
1974 |
+
<glyph glyph-name="_536" unicode=""
|
1975 |
+
d="M809 532l266 499h-112l-157 -312q-24 -48 -44 -92l-42 92l-155 312h-120l263 -493v-324h101v318zM1536 1408v-1536h-1536v1536h1536z" />
|
1976 |
+
<glyph glyph-name="_537" unicode="" horiz-adv-x="2296"
|
1977 |
+
d="M478 -139q-8 -16 -27 -34.5t-37 -25.5q-25 -9 -51.5 3.5t-28.5 31.5q-1 22 40 55t68 38q23 4 34 -21.5t2 -46.5zM1819 -139q7 -16 26 -34.5t38 -25.5q25 -9 51.5 3.5t27.5 31.5q2 22 -39.5 55t-68.5 38q-22 4 -33 -21.5t-2 -46.5zM1867 -30q13 -27 56.5 -59.5t77.5 -41.5
|
1978 |
+
q45 -13 82 4.5t37 50.5q0 46 -67.5 100.5t-115.5 59.5q-40 5 -63.5 -37.5t-6.5 -76.5zM428 -30q-13 -27 -56 -59.5t-77 -41.5q-45 -13 -82 4.5t-37 50.5q0 46 67.5 100.5t115.5 59.5q40 5 63 -37.5t6 -76.5zM1158 1094h1q-41 0 -76 -15q27 -8 44 -30.5t17 -49.5
|
1979 |
+
q0 -35 -27 -60t-65 -25q-52 0 -80 43q-5 -23 -5 -42q0 -74 56 -126.5t135 -52.5q80 0 136 52.5t56 126.5t-56 126.5t-136 52.5zM1462 1312q-99 109 -220.5 131.5t-245.5 -44.5q27 60 82.5 96.5t118 39.5t121.5 -17t99.5 -74.5t44.5 -131.5zM2212 73q8 -11 -11 -42
|
1980 |
+
q7 -23 7 -40q1 -56 -44.5 -112.5t-109.5 -91.5t-118 -37q-48 -2 -92 21.5t-66 65.5q-687 -25 -1259 0q-23 -41 -66.5 -65t-92.5 -22q-86 3 -179.5 80.5t-92.5 160.5q2 22 7 40q-19 31 -11 42q6 10 31 1q14 22 41 51q-7 29 2 38q11 10 39 -4q29 20 59 34q0 29 13 37
|
1981 |
+
q23 12 51 -16q35 5 61 -2q18 -4 38 -19v73q-11 0 -18 2q-53 10 -97 44.5t-55 87.5q-9 38 0 81q15 62 93 95q2 17 19 35.5t36 23.5t33 -7.5t19 -30.5h13q46 -5 60 -23q3 -3 5 -7q10 1 30.5 3.5t30.5 3.5q-15 11 -30 17q-23 40 -91 43q0 6 1 10q-62 2 -118.5 18.5t-84.5 47.5
|
1982 |
+
q-32 36 -42.5 92t-2.5 112q16 126 90 179q23 16 52 4.5t32 -40.5q0 -1 1.5 -14t2.5 -21t3 -20t5.5 -19t8.5 -10q27 -14 76 -12q48 46 98 74q-40 4 -162 -14l47 46q61 58 163 111q145 73 282 86q-20 8 -41 15.5t-47 14t-42.5 10.5t-47.5 11t-43 10q595 126 904 -139
|
1983 |
+
q98 -84 158 -222q85 -10 121 9h1q5 3 8.5 10t5.5 19t3 19.5t3 21.5l1 14q3 28 32 40t52 -5q73 -52 91 -178q7 -57 -3.5 -113t-42.5 -91q-28 -32 -83.5 -48.5t-115.5 -18.5v-10q-71 -2 -95 -43q-14 -5 -31 -17q11 -1 32 -3.5t30 -3.5q1 5 5 8q16 18 60 23h13q5 18 19 30t33 8
|
1984 |
+
t36 -23t19 -36q79 -32 93 -95q9 -40 1 -81q-12 -53 -56 -88t-97 -44q-10 -2 -17 -2q0 -49 -1 -73q20 15 38 19q26 7 61 2q28 28 51 16q14 -9 14 -37q33 -16 59 -34q27 13 38 4q10 -10 2 -38q28 -30 41 -51q23 8 31 -1zM1937 1025q0 -29 -9 -54q82 -32 112 -132
|
1985 |
+
q4 37 -9.5 98.5t-41.5 90.5q-20 19 -36 17t-16 -20zM1859 925q35 -42 47.5 -108.5t-0.5 -124.5q67 13 97 45q13 14 18 28q-3 64 -31 114.5t-79 66.5q-15 -15 -52 -21zM1822 921q-30 0 -44 1q42 -115 53 -239q21 0 43 3q16 68 1 135t-53 100zM258 839q30 100 112 132
|
1986 |
+
q-9 25 -9 54q0 18 -16.5 20t-35.5 -17q-28 -29 -41.5 -90.5t-9.5 -98.5zM294 737q29 -31 97 -45q-13 58 -0.5 124.5t47.5 108.5v0q-37 6 -52 21q-51 -16 -78.5 -66t-31.5 -115q9 -17 18 -28zM471 683q14 124 73 235q-19 -4 -55 -18l-45 -19v1q-46 -89 -20 -196q25 -3 47 -3z
|
1987 |
+
M1434 644q8 -38 16.5 -108.5t11.5 -89.5q3 -18 9.5 -21.5t23.5 4.5q40 20 62 85.5t23 125.5q-24 2 -146 4zM1152 1285q-116 0 -199 -82.5t-83 -198.5q0 -117 83 -199.5t199 -82.5t199 82.5t83 199.5q0 116 -83 198.5t-199 82.5zM1380 646q-105 2 -211 0v1q-1 -27 2.5 -86
|
1988 |
+
t13.5 -66q29 -14 93.5 -14.5t95.5 10.5q9 3 11 39t-0.5 69.5t-4.5 46.5zM1112 447q8 4 9.5 48t-0.5 88t-4 63v1q-212 -3 -214 -3q-4 -20 -7 -62t0 -83t14 -46q34 -15 101 -16t101 10zM718 636q-16 -59 4.5 -118.5t77.5 -84.5q15 -8 24 -5t12 21q3 16 8 90t10 103
|
1989 |
+
q-69 -2 -136 -6zM591 510q3 -23 -34 -36q132 -141 271.5 -240t305.5 -154q172 49 310.5 146t293.5 250q-33 13 -30 34q0 2 0.5 3.5t1.5 3t1 2.5v1v-1q-17 2 -50 5.5t-48 4.5q-26 -90 -82 -132q-51 -38 -82 1q-5 6 -9 14q-7 13 -17 62q-2 -5 -5 -9t-7.5 -7t-8 -5.5t-9.5 -4
|
1990 |
+
l-10 -2.5t-12 -2l-12 -1.5t-13.5 -1t-13.5 -0.5q-106 -9 -163 11q-4 -17 -10 -26.5t-21 -15t-23 -7t-36 -3.5q-6 -1 -9 -1q-179 -17 -203 40q-2 -63 -56 -54q-47 8 -91 54q-12 13 -20 26q-17 29 -26 65q-58 -6 -87 -10q1 -2 4 -10zM507 -118q3 14 3 30q-17 71 -51 130
|
1991 |
+
t-73 70q-41 12 -101.5 -14.5t-104.5 -80t-39 -107.5q35 -53 100 -93t119 -42q51 -2 94 28t53 79zM510 53q23 -63 27 -119q195 113 392 174q-98 52 -180.5 120t-179.5 165q-6 -4 -29 -13q0 -1 -1 -4t-1 -5q31 -18 22 -37q-12 -23 -56 -34q-10 -13 -29 -24h-1q-2 -83 1 -150
|
1992 |
+
q19 -34 35 -73zM579 -113q532 -21 1145 0q-254 147 -428 196q-76 -35 -156 -57q-8 -3 -16 0q-65 21 -129 49q-208 -60 -416 -188h-1v-1q1 0 1 1zM1763 -67q4 54 28 120q14 38 33 71l-1 -1q3 77 3 153q-15 8 -30 25q-42 9 -56 33q-9 20 22 38q-2 4 -2 9q-16 4 -28 12
|
1993 |
+
q-204 -190 -383 -284q198 -59 414 -176zM2155 -90q5 54 -39 107.5t-104 80t-102 14.5q-38 -11 -72.5 -70.5t-51.5 -129.5q0 -16 3 -30q10 -49 53 -79t94 -28q54 2 119 42t100 93z" />
|
1994 |
+
<glyph glyph-name="_538" unicode="" horiz-adv-x="2304"
|
1995 |
+
d="M1524 -25q0 -68 -48 -116t-116 -48t-116.5 48t-48.5 116t48.5 116.5t116.5 48.5t116 -48.5t48 -116.5zM775 -25q0 -68 -48.5 -116t-116.5 -48t-116 48t-48 116t48 116.5t116 48.5t116.5 -48.5t48.5 -116.5zM0 1469q57 -60 110.5 -104.5t121 -82t136 -63t166 -45.5
|
1996 |
+
t200 -31.5t250 -18.5t304 -9.5t372.5 -2.5q139 0 244.5 -5t181 -16.5t124 -27.5t71 -39.5t24 -51.5t-19.5 -64t-56.5 -76.5t-89.5 -91t-116 -104.5t-139 -119q-185 -157 -286 -247q29 51 76.5 109t94 105.5t94.5 98.5t83 91.5t54 80.5t13 70t-45.5 55.5t-116.5 41t-204 23.5
|
1997 |
+
t-304 5q-168 -2 -314 6t-256 23t-204.5 41t-159.5 51.5t-122.5 62.5t-91.5 66.5t-68 71.5t-50.5 69.5t-40 68t-36.5 59.5z" />
|
1998 |
+
<glyph glyph-name="_539" unicode="" horiz-adv-x="1792"
|
1999 |
+
d="M896 1472q-169 0 -323 -66t-265.5 -177.5t-177.5 -265.5t-66 -323t66 -323t177.5 -265.5t265.5 -177.5t323 -66t323 66t265.5 177.5t177.5 265.5t66 323t-66 323t-177.5 265.5t-265.5 177.5t-323 66zM896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348
|
2000 |
+
t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM496 704q16 0 16 -16v-480q0 -16 -16 -16h-32q-16 0 -16 16v480q0 16 16 16h32zM896 640q53 0 90.5 -37.5t37.5 -90.5q0 -35 -17.5 -64t-46.5 -46v-114q0 -14 -9 -23
|
2001 |
+
t-23 -9h-64q-14 0 -23 9t-9 23v114q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5zM896 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM544 928v-96
|
2002 |
+
q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v96q0 93 65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5v-96q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v96q0 146 -103 249t-249 103t-249 -103t-103 -249zM1408 192v512q0 26 -19 45t-45 19h-896q-26 0 -45 -19t-19 -45v-512
|
2003 |
+
q0 -26 19 -45t45 -19h896q26 0 45 19t19 45z" />
|
2004 |
+
<glyph glyph-name="_540" unicode="" horiz-adv-x="2304"
|
2005 |
+
d="M1920 1024v-768h-1664v768h1664zM2048 448h128v384h-128v288q0 14 -9 23t-23 9h-1856q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h1856q14 0 23 9t9 23v288zM2304 832v-384q0 -53 -37.5 -90.5t-90.5 -37.5v-160q0 -66 -47 -113t-113 -47h-1856q-66 0 -113 47t-47 113
|
2006 |
+
v960q0 66 47 113t113 47h1856q66 0 113 -47t47 -113v-160q53 0 90.5 -37.5t37.5 -90.5z" />
|
2007 |
+
<glyph glyph-name="_541" unicode="" horiz-adv-x="2304"
|
2008 |
+
d="M256 256v768h1280v-768h-1280zM2176 960q53 0 90.5 -37.5t37.5 -90.5v-384q0 -53 -37.5 -90.5t-90.5 -37.5v-160q0 -66 -47 -113t-113 -47h-1856q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1856q66 0 113 -47t47 -113v-160zM2176 448v384h-128v288q0 14 -9 23t-23 9
|
2009 |
+
h-1856q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h1856q14 0 23 9t9 23v288h128z" />
|
2010 |
+
<glyph glyph-name="_542" unicode="" horiz-adv-x="2304"
|
2011 |
+
d="M256 256v768h896v-768h-896zM2176 960q53 0 90.5 -37.5t37.5 -90.5v-384q0 -53 -37.5 -90.5t-90.5 -37.5v-160q0 -66 -47 -113t-113 -47h-1856q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1856q66 0 113 -47t47 -113v-160zM2176 448v384h-128v288q0 14 -9 23t-23 9
|
2012 |
+
h-1856q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h1856q14 0 23 9t9 23v288h128z" />
|
2013 |
+
<glyph glyph-name="_543" unicode="" horiz-adv-x="2304"
|
2014 |
+
d="M256 256v768h512v-768h-512zM2176 960q53 0 90.5 -37.5t37.5 -90.5v-384q0 -53 -37.5 -90.5t-90.5 -37.5v-160q0 -66 -47 -113t-113 -47h-1856q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1856q66 0 113 -47t47 -113v-160zM2176 448v384h-128v288q0 14 -9 23t-23 9
|
2015 |
+
h-1856q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h1856q14 0 23 9t9 23v288h128z" />
|
2016 |
+
<glyph glyph-name="_544" unicode="" horiz-adv-x="2304"
|
2017 |
+
d="M2176 960q53 0 90.5 -37.5t37.5 -90.5v-384q0 -53 -37.5 -90.5t-90.5 -37.5v-160q0 -66 -47 -113t-113 -47h-1856q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1856q66 0 113 -47t47 -113v-160zM2176 448v384h-128v288q0 14 -9 23t-23 9h-1856q-14 0 -23 -9t-9 -23
|
2018 |
+
v-960q0 -14 9 -23t23 -9h1856q14 0 23 9t9 23v288h128z" />
|
2019 |
+
<glyph glyph-name="_545" unicode="" horiz-adv-x="1280"
|
2020 |
+
d="M1133 493q31 -30 14 -69q-17 -40 -59 -40h-382l201 -476q10 -25 0 -49t-34 -35l-177 -75q-25 -10 -49 0t-35 34l-191 452l-312 -312q-19 -19 -45 -19q-12 0 -24 5q-40 17 -40 59v1504q0 42 40 59q12 5 24 5q27 0 45 -19z" />
|
2021 |
+
<glyph glyph-name="_546" unicode="" horiz-adv-x="1024"
|
2022 |
+
d="M832 1408q-320 0 -320 -224v-416h128v-128h-128v-544q0 -224 320 -224h64v-128h-64q-272 0 -384 146q-112 -146 -384 -146h-64v128h64q320 0 320 224v544h-128v128h128v416q0 224 -320 224h-64v128h64q272 0 384 -146q112 146 384 146h64v-128h-64z" />
|
2023 |
+
<glyph glyph-name="_547" unicode="" horiz-adv-x="2048"
|
2024 |
+
d="M2048 1152h-128v-1024h128v-384h-384v128h-1280v-128h-384v384h128v1024h-128v384h384v-128h1280v128h384v-384zM1792 1408v-128h128v128h-128zM128 1408v-128h128v128h-128zM256 -128v128h-128v-128h128zM1664 0v128h128v1024h-128v128h-1280v-128h-128v-1024h128v-128
|
2025 |
+
h1280zM1920 -128v128h-128v-128h128zM1280 896h384v-768h-896v256h-384v768h896v-256zM512 512h640v512h-640v-512zM1536 256v512h-256v-384h-384v-128h640z" />
|
2026 |
+
<glyph glyph-name="_548" unicode="" horiz-adv-x="2304"
|
2027 |
+
d="M2304 768h-128v-640h128v-384h-384v128h-896v-128h-384v384h128v128h-384v-128h-384v384h128v640h-128v384h384v-128h896v128h384v-384h-128v-128h384v128h384v-384zM2048 1024v-128h128v128h-128zM1408 1408v-128h128v128h-128zM128 1408v-128h128v128h-128zM256 256
|
2028 |
+
v128h-128v-128h128zM1536 384h-128v-128h128v128zM384 384h896v128h128v640h-128v128h-896v-128h-128v-640h128v-128zM896 -128v128h-128v-128h128zM2176 -128v128h-128v-128h128zM2048 128v640h-128v128h-384v-384h128v-384h-384v128h-384v-128h128v-128h896v128h128z" />
|
2029 |
+
<glyph glyph-name="_549" unicode=""
|
2030 |
+
d="M1024 288v-416h-928q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h1344q40 0 68 -28t28 -68v-928h-416q-40 0 -68 -28t-28 -68zM1152 256h381q-15 -82 -65 -132l-184 -184q-50 -50 -132 -65v381z" />
|
2031 |
+
<glyph glyph-name="_550" unicode=""
|
2032 |
+
d="M1400 256h-248v-248q29 10 41 22l185 185q12 12 22 41zM1120 384h288v896h-1280v-1280h896v288q0 40 28 68t68 28zM1536 1312v-1024q0 -40 -20 -88t-48 -76l-184 -184q-28 -28 -76 -48t-88 -20h-1024q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h1344q40 0 68 -28t28 -68
|
2033 |
+
z" />
|
2034 |
+
<glyph glyph-name="_551" unicode="" horiz-adv-x="2304"
|
2035 |
+
d="M1951 538q0 -26 -15.5 -44.5t-38.5 -23.5q-8 -2 -18 -2h-153v140h153q10 0 18 -2q23 -5 38.5 -23.5t15.5 -44.5zM1933 751q0 -25 -15 -42t-38 -21q-3 -1 -15 -1h-139v129h139q3 0 8.5 -0.5t6.5 -0.5q23 -4 38 -21.5t15 -42.5zM728 587v308h-228v-308q0 -58 -38 -94.5
|
2036 |
+
t-105 -36.5q-108 0 -229 59v-112q53 -15 121 -23t109 -9l42 -1q328 0 328 217zM1442 403v113q-99 -52 -200 -59q-108 -8 -169 41t-61 142t61 142t169 41q101 -7 200 -58v112q-48 12 -100 19.5t-80 9.5l-28 2q-127 6 -218.5 -14t-140.5 -60t-71 -88t-22 -106t22 -106t71 -88
|
2037 |
+
t140.5 -60t218.5 -14q101 4 208 31zM2176 518q0 54 -43 88.5t-109 39.5v3q57 8 89 41.5t32 79.5q0 55 -41 88t-107 36q-3 0 -12 0.5t-14 0.5h-455v-510h491q74 0 121.5 36.5t47.5 96.5zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90
|
2038 |
+
t90 38h2048q52 0 90 -38t38 -90z" />
|
2039 |
+
<glyph glyph-name="_552" unicode="" horiz-adv-x="2304"
|
2040 |
+
d="M858 295v693q-106 -41 -172 -135.5t-66 -211.5t66 -211.5t172 -134.5zM1362 641q0 117 -66 211.5t-172 135.5v-694q106 41 172 135.5t66 211.5zM1577 641q0 -159 -78.5 -294t-213.5 -213.5t-294 -78.5q-119 0 -227.5 46.5t-187 125t-125 187t-46.5 227.5q0 159 78.5 294
|
2041 |
+
t213.5 213.5t294 78.5t294 -78.5t213.5 -213.5t78.5 -294zM1960 634q0 139 -55.5 261.5t-147.5 205.5t-213.5 131t-252.5 48h-301q-176 0 -323.5 -81t-235 -230t-87.5 -335q0 -171 87 -317.5t236 -231.5t323 -85h301q129 0 251.5 50.5t214.5 135t147.5 202.5t55.5 246z
|
2042 |
+
M2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" />
|
2043 |
+
<glyph glyph-name="_553" unicode="" horiz-adv-x="1792"
|
2044 |
+
d="M1664 -96v1088q0 13 -9.5 22.5t-22.5 9.5h-1088q-13 0 -22.5 -9.5t-9.5 -22.5v-1088q0 -13 9.5 -22.5t22.5 -9.5h1088q13 0 22.5 9.5t9.5 22.5zM1792 992v-1088q0 -66 -47 -113t-113 -47h-1088q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1088q66 0 113 -47t47 -113
|
2045 |
+
zM1408 1376v-160h-128v160q0 13 -9.5 22.5t-22.5 9.5h-1088q-13 0 -22.5 -9.5t-9.5 -22.5v-1088q0 -13 9.5 -22.5t22.5 -9.5h160v-128h-160q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1088q66 0 113 -47t47 -113z" />
|
2046 |
+
<glyph glyph-name="_554" unicode="" horiz-adv-x="2304"
|
2047 |
+
d="M1728 1088l-384 -704h768zM448 1088l-384 -704h768zM1269 1280q-14 -40 -45.5 -71.5t-71.5 -45.5v-1291h608q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1344q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h608v1291q-40 14 -71.5 45.5t-45.5 71.5h-491q-14 0 -23 9t-9 23v64
|
2048 |
+
q0 14 9 23t23 9h491q21 57 70 92.5t111 35.5t111 -35.5t70 -92.5h491q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-491zM1088 1264q33 0 56.5 23.5t23.5 56.5t-23.5 56.5t-56.5 23.5t-56.5 -23.5t-23.5 -56.5t23.5 -56.5t56.5 -23.5zM2176 384q0 -73 -46.5 -131t-117.5 -91
|
2049 |
+
t-144.5 -49.5t-139.5 -16.5t-139.5 16.5t-144.5 49.5t-117.5 91t-46.5 131q0 11 35 81t92 174.5t107 195.5t102 184t56 100q18 33 56 33t56 -33q4 -7 56 -100t102 -184t107 -195.5t92 -174.5t35 -81zM896 384q0 -73 -46.5 -131t-117.5 -91t-144.5 -49.5t-139.5 -16.5
|
2050 |
+
t-139.5 16.5t-144.5 49.5t-117.5 91t-46.5 131q0 11 35 81t92 174.5t107 195.5t102 184t56 100q18 33 56 33t56 -33q4 -7 56 -100t102 -184t107 -195.5t92 -174.5t35 -81z" />
|
2051 |
+
<glyph glyph-name="_555" unicode=""
|
2052 |
+
d="M1408 1408q0 -261 -106.5 -461.5t-266.5 -306.5q160 -106 266.5 -306.5t106.5 -461.5h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1472q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96q0 261 106.5 461.5t266.5 306.5q-160 106 -266.5 306.5t-106.5 461.5h-96q-14 0 -23 9
|
2053 |
+
t-9 23v64q0 14 9 23t23 9h1472q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96zM874 700q77 29 149 92.5t129.5 152.5t92.5 210t35 253h-1024q0 -132 35 -253t92.5 -210t129.5 -152.5t149 -92.5q19 -7 30.5 -23.5t11.5 -36.5t-11.5 -36.5t-30.5 -23.5q-77 -29 -149 -92.5
|
2054 |
+
t-129.5 -152.5t-92.5 -210t-35 -253h1024q0 132 -35 253t-92.5 210t-129.5 152.5t-149 92.5q-19 7 -30.5 23.5t-11.5 36.5t11.5 36.5t30.5 23.5z" />
|
2055 |
+
<glyph glyph-name="_556" unicode=""
|
2056 |
+
d="M1408 1408q0 -261 -106.5 -461.5t-266.5 -306.5q160 -106 266.5 -306.5t106.5 -461.5h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1472q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96q0 261 106.5 461.5t266.5 306.5q-160 106 -266.5 306.5t-106.5 461.5h-96q-14 0 -23 9
|
2057 |
+
t-9 23v64q0 14 9 23t23 9h1472q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96zM1280 1408h-1024q0 -66 9 -128h1006q9 61 9 128zM1280 -128q0 130 -34 249.5t-90.5 208t-126.5 152t-146 94.5h-230q-76 -31 -146 -94.5t-126.5 -152t-90.5 -208t-34 -249.5h1024z" />
|
2058 |
+
<glyph glyph-name="_557" unicode=""
|
2059 |
+
d="M1408 1408q0 -261 -106.5 -461.5t-266.5 -306.5q160 -106 266.5 -306.5t106.5 -461.5h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1472q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96q0 261 106.5 461.5t266.5 306.5q-160 106 -266.5 306.5t-106.5 461.5h-96q-14 0 -23 9
|
2060 |
+
t-9 23v64q0 14 9 23t23 9h1472q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96zM1280 1408h-1024q0 -206 85 -384h854q85 178 85 384zM1223 192q-54 141 -145.5 241.5t-194.5 142.5h-230q-103 -42 -194.5 -142.5t-145.5 -241.5h910z" />
|
2061 |
+
<glyph glyph-name="_558" unicode=""
|
2062 |
+
d="M1408 1408q0 -261 -106.5 -461.5t-266.5 -306.5q160 -106 266.5 -306.5t106.5 -461.5h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1472q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96q0 261 106.5 461.5t266.5 306.5q-160 106 -266.5 306.5t-106.5 461.5h-96q-14 0 -23 9
|
2063 |
+
t-9 23v64q0 14 9 23t23 9h1472q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96zM874 700q77 29 149 92.5t129.5 152.5t92.5 210t35 253h-1024q0 -132 35 -253t92.5 -210t129.5 -152.5t149 -92.5q19 -7 30.5 -23.5t11.5 -36.5t-11.5 -36.5t-30.5 -23.5q-137 -51 -244 -196
|
2064 |
+
h700q-107 145 -244 196q-19 7 -30.5 23.5t-11.5 36.5t11.5 36.5t30.5 23.5z" />
|
2065 |
+
<glyph glyph-name="_559" unicode=""
|
2066 |
+
d="M1504 -64q14 0 23 -9t9 -23v-128q0 -14 -9 -23t-23 -9h-1472q-14 0 -23 9t-9 23v128q0 14 9 23t23 9h1472zM130 0q3 55 16 107t30 95t46 87t53.5 76t64.5 69.5t66 60t70.5 55t66.5 47.5t65 43q-43 28 -65 43t-66.5 47.5t-70.5 55t-66 60t-64.5 69.5t-53.5 76t-46 87
|
2067 |
+
t-30 95t-16 107h1276q-3 -55 -16 -107t-30 -95t-46 -87t-53.5 -76t-64.5 -69.5t-66 -60t-70.5 -55t-66.5 -47.5t-65 -43q43 -28 65 -43t66.5 -47.5t70.5 -55t66 -60t64.5 -69.5t53.5 -76t46 -87t30 -95t16 -107h-1276zM1504 1536q14 0 23 -9t9 -23v-128q0 -14 -9 -23t-23 -9
|
2068 |
+
h-1472q-14 0 -23 9t-9 23v128q0 14 9 23t23 9h1472z" />
|
2069 |
+
<glyph glyph-name="_560" unicode=""
|
2070 |
+
d="M768 1152q-53 0 -90.5 -37.5t-37.5 -90.5v-128h-32v93q0 48 -32 81.5t-80 33.5q-46 0 -79 -33t-33 -79v-429l-32 30v172q0 48 -32 81.5t-80 33.5q-46 0 -79 -33t-33 -79v-224q0 -47 35 -82l310 -296q39 -39 39 -102q0 -26 19 -45t45 -19h640q26 0 45 19t19 45v25
|
2071 |
+
q0 41 10 77l108 436q10 36 10 77v246q0 48 -32 81.5t-80 33.5q-46 0 -79 -33t-33 -79v-32h-32v125q0 40 -25 72.5t-64 40.5q-14 2 -23 2q-46 0 -79 -33t-33 -79v-128h-32v122q0 51 -32.5 89.5t-82.5 43.5q-5 1 -13 1zM768 1280q84 0 149 -50q57 34 123 34q59 0 111 -27
|
2072 |
+
t86 -76q27 7 59 7q100 0 170 -71.5t70 -171.5v-246q0 -51 -13 -108l-109 -436q-6 -24 -6 -71q0 -80 -56 -136t-136 -56h-640q-84 0 -138 58.5t-54 142.5l-308 296q-76 73 -76 175v224q0 99 70.5 169.5t169.5 70.5q11 0 16 -1q6 95 75.5 160t164.5 65q52 0 98 -21
|
2073 |
+
q72 69 174 69z" />
|
2074 |
+
<glyph glyph-name="_561" unicode="" horiz-adv-x="1792"
|
2075 |
+
d="M880 1408q-46 0 -79 -33t-33 -79v-656h-32v528q0 46 -33 79t-79 33t-79 -33t-33 -79v-528v-256l-154 205q-38 51 -102 51q-53 0 -90.5 -37.5t-37.5 -90.5q0 -43 26 -77l384 -512q38 -51 102 -51h688q34 0 61 22t34 56l76 405q5 32 5 59v498q0 46 -33 79t-79 33t-79 -33
|
2076 |
+
t-33 -79v-272h-32v528q0 46 -33 79t-79 33t-79 -33t-33 -79v-528h-32v656q0 46 -33 79t-79 33zM880 1536q68 0 125.5 -35.5t88.5 -96.5q19 4 42 4q99 0 169.5 -70.5t70.5 -169.5v-17q105 6 180.5 -64t75.5 -175v-498q0 -40 -8 -83l-76 -404q-14 -79 -76.5 -131t-143.5 -52
|
2077 |
+
h-688q-60 0 -114.5 27.5t-90.5 74.5l-384 512q-51 68 -51 154q0 106 75 181t181 75q78 0 128 -34v434q0 99 70.5 169.5t169.5 70.5q23 0 42 -4q31 61 88.5 96.5t125.5 35.5z" />
|
2078 |
+
<glyph glyph-name="_562" unicode="" horiz-adv-x="1792"
|
2079 |
+
d="M1073 -128h-177q-163 0 -226 141q-23 49 -23 102v5q-62 30 -98.5 88.5t-36.5 127.5q0 38 5 48h-261q-106 0 -181 75t-75 181t75 181t181 75h113l-44 17q-74 28 -119.5 93.5t-45.5 145.5q0 106 75 181t181 75q46 0 91 -17l628 -239h401q106 0 181 -75t75 -181v-668
|
2080 |
+
q0 -88 -54 -157.5t-140 -90.5l-339 -85q-92 -23 -186 -23zM1024 583l-155 -71l-163 -74q-30 -14 -48 -41.5t-18 -60.5q0 -46 33 -79t79 -33q26 0 46 10l338 154q-49 10 -80.5 50t-31.5 90v55zM1344 272q0 46 -33 79t-79 33q-26 0 -46 -10l-290 -132q-28 -13 -37 -17
|
2081 |
+
t-30.5 -17t-29.5 -23.5t-16 -29t-8 -40.5q0 -50 31.5 -82t81.5 -32q20 0 38 9l352 160q30 14 48 41.5t18 60.5zM1112 1024l-650 248q-24 8 -46 8q-53 0 -90.5 -37.5t-37.5 -90.5q0 -40 22.5 -73t59.5 -47l526 -200v-64h-640q-53 0 -90.5 -37.5t-37.5 -90.5t37.5 -90.5
|
2082 |
+
t90.5 -37.5h535l233 106v198q0 63 46 106l111 102h-69zM1073 0q82 0 155 19l339 85q43 11 70 45.5t27 78.5v668q0 53 -37.5 90.5t-90.5 37.5h-308l-136 -126q-36 -33 -36 -82v-296q0 -46 33 -77t79 -31t79 35t33 81v208h32v-208q0 -70 -57 -114q52 -8 86.5 -48.5t34.5 -93.5
|
2083 |
+
q0 -42 -23 -78t-61 -53l-310 -141h91z" />
|
2084 |
+
<glyph glyph-name="_563" unicode="" horiz-adv-x="2048"
|
2085 |
+
d="M1151 1536q61 0 116 -28t91 -77l572 -781q118 -159 118 -359v-355q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v177l-286 143h-546q-80 0 -136 56t-56 136v32q0 119 84.5 203.5t203.5 84.5h420l42 128h-686q-100 0 -173.5 67.5t-81.5 166.5q-65 79 -65 182v32
|
2086 |
+
q0 80 56 136t136 56h959zM1920 -64v355q0 157 -93 284l-573 781q-39 52 -103 52h-959q-26 0 -45 -19t-19 -45q0 -32 1.5 -49.5t9.5 -40.5t25 -43q10 31 35.5 50t56.5 19h832v-32h-832q-26 0 -45 -19t-19 -45q0 -44 3 -58q8 -44 44 -73t81 -29h640h91q40 0 68 -28t28 -68
|
2087 |
+
q0 -15 -5 -30l-64 -192q-10 -29 -35 -47.5t-56 -18.5h-443q-66 0 -113 -47t-47 -113v-32q0 -26 19 -45t45 -19h561q16 0 29 -7l317 -158q24 -13 38.5 -36t14.5 -50v-197q0 -26 19 -45t45 -19h384q26 0 45 19t19 45z" />
|
2088 |
+
<glyph glyph-name="_564" unicode="" horiz-adv-x="2048"
|
2089 |
+
d="M459 -256q-77 0 -137.5 47.5t-79.5 122.5l-101 401q-13 57 -13 108q0 45 -5 67l-116 477q-7 27 -7 57q0 93 62 161t155 78q17 85 82.5 139t152.5 54q83 0 148 -51.5t85 -132.5l83 -348l103 428q20 81 85 132.5t148 51.5q89 0 155.5 -57.5t80.5 -144.5q92 -10 152 -79
|
2090 |
+
t60 -162q0 -24 -7 -59l-123 -512q10 7 37.5 28.5t38.5 29.5t35 23t41 20.5t41.5 11t49.5 5.5q105 0 180 -74t75 -179q0 -62 -28.5 -118t-78.5 -94l-507 -380q-68 -51 -153 -51h-694zM1104 1408q-38 0 -68.5 -24t-39.5 -62l-164 -682h-127l-145 602q-9 38 -39.5 62t-68.5 24
|
2091 |
+
q-48 0 -80 -33t-32 -80q0 -15 3 -28l132 -547h-26l-99 408q-9 37 -40 62.5t-69 25.5q-47 0 -80 -33t-33 -79q0 -14 3 -26l116 -478q7 -28 9 -86t10 -88l100 -401q8 -32 34 -52.5t59 -20.5h694q42 0 76 26l507 379q56 43 56 110q0 52 -37.5 88.5t-89.5 36.5q-43 0 -77 -26
|
2092 |
+
l-307 -230v227q0 4 32 138t68 282t39 161q4 18 4 29q0 47 -32 81t-79 34q-39 0 -69.5 -24t-39.5 -62l-116 -482h-26l150 624q3 14 3 28q0 48 -31.5 82t-79.5 34z" />
|
2093 |
+
<glyph glyph-name="_565" unicode="" horiz-adv-x="1792"
|
2094 |
+
d="M640 1408q-53 0 -90.5 -37.5t-37.5 -90.5v-512v-384l-151 202q-41 54 -107 54q-52 0 -89 -38t-37 -90q0 -43 26 -77l384 -512q38 -51 102 -51h718q22 0 39.5 13.5t22.5 34.5l92 368q24 96 24 194v217q0 41 -28 71t-68 30t-68 -28t-28 -68h-32v61q0 48 -32 81.5t-80 33.5
|
2095 |
+
q-46 0 -79 -33t-33 -79v-64h-32v90q0 55 -37 94.5t-91 39.5q-53 0 -90.5 -37.5t-37.5 -90.5v-96h-32v570q0 55 -37 94.5t-91 39.5zM640 1536q107 0 181.5 -77.5t74.5 -184.5v-220q22 2 32 2q99 0 173 -69q47 21 99 21q113 0 184 -87q27 7 56 7q94 0 159 -67.5t65 -161.5
|
2096 |
+
v-217q0 -116 -28 -225l-92 -368q-16 -64 -68 -104.5t-118 -40.5h-718q-60 0 -114.5 27.5t-90.5 74.5l-384 512q-51 68 -51 154q0 105 74.5 180.5t179.5 75.5q71 0 130 -35v547q0 106 75 181t181 75zM768 128v384h-32v-384h32zM1024 128v384h-32v-384h32zM1280 128v384h-32
|
2097 |
+
v-384h32z" />
|
2098 |
+
<glyph glyph-name="_566" unicode=""
|
2099 |
+
d="M1288 889q60 0 107 -23q141 -63 141 -226v-177q0 -94 -23 -186l-85 -339q-21 -86 -90.5 -140t-157.5 -54h-668q-106 0 -181 75t-75 181v401l-239 628q-17 45 -17 91q0 106 75 181t181 75q80 0 145.5 -45.5t93.5 -119.5l17 -44v113q0 106 75 181t181 75t181 -75t75 -181
|
2100 |
+
v-261q27 5 48 5q69 0 127.5 -36.5t88.5 -98.5zM1072 896q-33 0 -60.5 -18t-41.5 -48l-74 -163l-71 -155h55q50 0 90 -31.5t50 -80.5l154 338q10 20 10 46q0 46 -33 79t-79 33zM1293 761q-22 0 -40.5 -8t-29 -16t-23.5 -29.5t-17 -30.5t-17 -37l-132 -290q-10 -20 -10 -46
|
2101 |
+
q0 -46 33 -79t79 -33q33 0 60.5 18t41.5 48l160 352q9 18 9 38q0 50 -32 81.5t-82 31.5zM128 1120q0 -22 8 -46l248 -650v-69l102 111q43 46 106 46h198l106 233v535q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5v-640h-64l-200 526q-14 37 -47 59.5t-73 22.5
|
2102 |
+
q-53 0 -90.5 -37.5t-37.5 -90.5zM1180 -128q44 0 78.5 27t45.5 70l85 339q19 73 19 155v91l-141 -310q-17 -38 -53 -61t-78 -23q-53 0 -93.5 34.5t-48.5 86.5q-44 -57 -114 -57h-208v32h208q46 0 81 33t35 79t-31 79t-77 33h-296q-49 0 -82 -36l-126 -136v-308
|
2103 |
+
q0 -53 37.5 -90.5t90.5 -37.5h668z" />
|
2104 |
+
<glyph glyph-name="_567" unicode="" horiz-adv-x="1973"
|
2105 |
+
d="M857 992v-117q0 -13 -9.5 -22t-22.5 -9h-298v-812q0 -13 -9 -22.5t-22 -9.5h-135q-13 0 -22.5 9t-9.5 23v812h-297q-13 0 -22.5 9t-9.5 22v117q0 14 9 23t23 9h793q13 0 22.5 -9.5t9.5 -22.5zM1895 995l77 -961q1 -13 -8 -24q-10 -10 -23 -10h-134q-12 0 -21 8.5
|
2106 |
+
t-10 20.5l-46 588l-189 -425q-8 -19 -29 -19h-120q-20 0
|