Version Description
Plugin re-write. Settings and team member data will be maintained
Download this release
Release Info
Developer | smartcat |
Plugin | Our Team Showcase |
Version | 4.0.0 |
Comparing to | |
See all releases |
Code changes from version 3.0.0 to 4.0.0
- LICENSE +0 -339
- admin/addons.php +0 -62
- admin/class/class-tgm-plugin-activation.php +0 -3618
- admin/documentation.php +0 -674
- admin/options.php +0 -311
- admin/reorder.php +0 -79
- admin/setting.php +0 -185
- assets/admin/css/admin.css +51 -0
- assets/admin/css/settings.css +451 -0
- assets/admin/js/customizer.js +23 -0
- assets/admin/js/reorder.js +14 -0
- assets/admin/js/settings.js +25 -0
- assets/css/common.css +109 -0
- assets/css/single.css +37 -0
- assets/css/team-view.css +507 -0
- assets/css/widgets.css +25 -0
- assets/fonts/fonts.css +27 -0
- assets/fonts/lato/lato-regular.eot +0 -0
- assets/fonts/lato/lato-regular.svg +435 -0
- assets/fonts/lato/lato-regular.ttf +0 -0
- assets/fonts/lato/lato-regular.woff +0 -0
- assets/fonts/lato/lato-regular.woff2 +0 -0
- assets/fonts/oswald/oswald-regular.eot +0 -0
- assets/fonts/oswald/oswald-regular.svg +309 -0
- assets/fonts/oswald/oswald-regular.ttf +0 -0
- assets/fonts/oswald/oswald-regular.woff +0 -0
- assets/fonts/oswald/oswald-regular.woff2 +0 -0
- inc/img/member_portal_logo.jpg → assets/images/add-ons/member-portal.jpg +0 -0
- inc/img/team_showcase_pro_logo.jpg → assets/images/add-ons/ots-pro.jpg +0 -0
- assets/images/branding/smartcat-medium.png +0 -0
- assets/images/default-avatar.png +0 -0
- inc/img/card_demo.jpg → assets/images/demo/card.jpg +0 -0
- inc/img/panel_demo.jpg → assets/images/demo/panel-1.jpg +0 -0
- screenshot-2.jpg → assets/images/demo/sidebar-widget.jpg +0 -0
- {inc/img → assets/images}/more.png +0 -0
- {inc/img → assets/images/social}/email.png +0 -0
- inc/img/fb.png → assets/images/social/facebook.png +0 -0
- inc/img/google.png → assets/images/social/gplus.png +0 -0
- {inc/img → assets/images/social}/instagram.png +0 -0
- {inc/img → assets/images/social}/linkedin.png +0 -0
- {inc/img → assets/images/social}/phone.png +0 -0
- {inc/img → assets/images/social}/pinterest.png +0 -0
- {inc/img → assets/images/social}/twitter.png +0 -0
- {inc/img → assets/images/social}/website.png +0 -0
- assets/js/script.js +39 -0
- capture.JPG +0 -0
- constants.php +149 -0
- inc/class/class.smartcat-team.php +0 -946
- inc/fonts/sc_our_team.eot +0 -0
- inc/fonts/sc_our_team.svg +0 -21
- inc/fonts/sc_our_team.ttf +0 -0
- inc/fonts/sc_our_team.woff +0 -0
- inc/img/AjaxLoader.gif +0 -0
- inc/img/check.png +0 -0
- inc/img/circles2_demo.jpg +0 -0
- inc/img/circles2_demo_1.jpg +0 -0
- inc/img/circles_demo.jpg +0 -0
- inc/img/custom_demo.jpg +0 -0
- inc/img/directory.jpg +0 -0
- inc/img/email_1.png +0 -0
- inc/img/grabbing.png +0 -0
- inc/img/grid_demo.jpg +0 -0
- inc/img/icon.png +0 -0
- inc/img/noprofile.jpg +0 -0
- inc/img/skills_demo.jpg +0 -0
- inc/img/smartcat_icon.png +0 -0
- inc/img/spinner.gif +0 -0
- inc/img/stacked_demo.jpg +0 -0
- inc/img/userdetails_demo.jpg +0 -0
- inc/script/carousel.js +0 -47
- inc/script/hc.js +0 -148
- inc/script/jscolor/arrow.gif +0 -0
- inc/script/jscolor/cross.gif +0 -0
- inc/script/jscolor/hs.png +0 -0
- inc/script/jscolor/hv.png +0 -0
- inc/script/jscolor/jscolor.js +0 -996
- inc/script/sc_our_team.js +0 -52
- inc/script/sc_our_team_admin.js +0 -175
- inc/script/scroll.js +0 -14
- inc/style/sc_our_team.css +0 -1909
- inc/style/sc_our_team_admin.css +0 -121
- inc/template/grid.php +0 -72
- inc/template/grid_circles.php +0 -71
- inc/template/grid_circles2.php +0 -69
- inc/template/single-team_member.php +0 -36
- inc/template/widget.php +0 -63
- includes/TeamMainWidget.php +245 -0
- includes/TeamMember.php +62 -0
- includes/TeamSidebarWidget.php +226 -0
- includes/add-ons.php +99 -0
- includes/admin-settings.php +756 -0
- includes/documentation.php +334 -0
- includes/extension-licensing.php +1198 -0
- includes/functions.php +290 -0
- includes/helpers.php +125 -0
- includes/reorder-members.php +99 -0
- includes/team-view.php +190 -0
- includes/team_member-post-type.php +806 -0
- includes/widgets.php +31 -0
- languages/ots.pot +0 -0
- our-team-showcase.php +207 -0
- readme.txt +8 -5
- sc_our_team.php +0 -65
- screenshot-1.jpg +0 -0
- screenshot-3.png +0 -0
- screenshot-4.jpg +0 -0
- screenshot-5.jpg +0 -0
- screenshot-6.jpg +0 -0
- stacked_demo.jpg +0 -0
- templates/grid-circles-2.php +73 -0
- templates/grid-circles.php +71 -0
- templates/grid.php +71 -0
- uninstall.php +53 -0
- upgrade.php +59 -0
LICENSE
DELETED
@@ -1,339 +0,0 @@
|
|
1 |
-
GNU GENERAL PUBLIC LICENSE
|
2 |
-
Version 2, June 1991
|
3 |
-
|
4 |
-
Copyright (C) 1989, 1991 Free Software Foundation, Inc., <http://fsf.org/>
|
5 |
-
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
6 |
-
Everyone is permitted to copy and distribute verbatim copies
|
7 |
-
of this license document, but changing it is not allowed.
|
8 |
-
|
9 |
-
Preamble
|
10 |
-
|
11 |
-
The licenses for most software are designed to take away your
|
12 |
-
freedom to share and change it. By contrast, the GNU General Public
|
13 |
-
License is intended to guarantee your freedom to share and change free
|
14 |
-
software--to make sure the software is free for all its users. This
|
15 |
-
General Public License applies to most of the Free Software
|
16 |
-
Foundation's software and to any other program whose authors commit to
|
17 |
-
using it. (Some other Free Software Foundation software is covered by
|
18 |
-
the GNU Lesser General Public License instead.) You can apply it to
|
19 |
-
your programs, too.
|
20 |
-
|
21 |
-
When we speak of free software, we are referring to freedom, not
|
22 |
-
price. Our General Public Licenses are designed to make sure that you
|
23 |
-
have the freedom to distribute copies of free software (and charge for
|
24 |
-
this service if you wish), that you receive source code or can get it
|
25 |
-
if you want it, that you can change the software or use pieces of it
|
26 |
-
in new free programs; and that you know you can do these things.
|
27 |
-
|
28 |
-
To protect your rights, we need to make restrictions that forbid
|
29 |
-
anyone to deny you these rights or to ask you to surrender the rights.
|
30 |
-
These restrictions translate to certain responsibilities for you if you
|
31 |
-
distribute copies of the software, or if you modify it.
|
32 |
-
|
33 |
-
For example, if you distribute copies of such a program, whether
|
34 |
-
gratis or for a fee, you must give the recipients all the rights that
|
35 |
-
you have. You must make sure that they, too, receive or can get the
|
36 |
-
source code. And you must show them these terms so they know their
|
37 |
-
rights.
|
38 |
-
|
39 |
-
We protect your rights with two steps: (1) copyright the software, and
|
40 |
-
(2) offer you this license which gives you legal permission to copy,
|
41 |
-
distribute and/or modify the software.
|
42 |
-
|
43 |
-
Also, for each author's protection and ours, we want to make certain
|
44 |
-
that everyone understands that there is no warranty for this free
|
45 |
-
software. If the software is modified by someone else and passed on, we
|
46 |
-
want its recipients to know that what they have is not the original, so
|
47 |
-
that any problems introduced by others will not reflect on the original
|
48 |
-
authors' reputations.
|
49 |
-
|
50 |
-
Finally, any free program is threatened constantly by software
|
51 |
-
patents. We wish to avoid the danger that redistributors of a free
|
52 |
-
program will individually obtain patent licenses, in effect making the
|
53 |
-
program proprietary. To prevent this, we have made it clear that any
|
54 |
-
patent must be licensed for everyone's free use or not licensed at all.
|
55 |
-
|
56 |
-
The precise terms and conditions for copying, distribution and
|
57 |
-
modification follow.
|
58 |
-
|
59 |
-
GNU GENERAL PUBLIC LICENSE
|
60 |
-
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
61 |
-
|
62 |
-
0. This License applies to any program or other work which contains
|
63 |
-
a notice placed by the copyright holder saying it may be distributed
|
64 |
-
under the terms of this General Public License. The "Program", below,
|
65 |
-
refers to any such program or work, and a "work based on the Program"
|
66 |
-
means either the Program or any derivative work under copyright law:
|
67 |
-
that is to say, a work containing the Program or a portion of it,
|
68 |
-
either verbatim or with modifications and/or translated into another
|
69 |
-
language. (Hereinafter, translation is included without limitation in
|
70 |
-
the term "modification".) Each licensee is addressed as "you".
|
71 |
-
|
72 |
-
Activities other than copying, distribution and modification are not
|
73 |
-
covered by this License; they are outside its scope. The act of
|
74 |
-
running the Program is not restricted, and the output from the Program
|
75 |
-
is covered only if its contents constitute a work based on the
|
76 |
-
Program (independent of having been made by running the Program).
|
77 |
-
Whether that is true depends on what the Program does.
|
78 |
-
|
79 |
-
1. You may copy and distribute verbatim copies of the Program's
|
80 |
-
source code as you receive it, in any medium, provided that you
|
81 |
-
conspicuously and appropriately publish on each copy an appropriate
|
82 |
-
copyright notice and disclaimer of warranty; keep intact all the
|
83 |
-
notices that refer to this License and to the absence of any warranty;
|
84 |
-
and give any other recipients of the Program a copy of this License
|
85 |
-
along with the Program.
|
86 |
-
|
87 |
-
You may charge a fee for the physical act of transferring a copy, and
|
88 |
-
you may at your option offer warranty protection in exchange for a fee.
|
89 |
-
|
90 |
-
2. You may modify your copy or copies of the Program or any portion
|
91 |
-
of it, thus forming a work based on the Program, and copy and
|
92 |
-
distribute such modifications or work under the terms of Section 1
|
93 |
-
above, provided that you also meet all of these conditions:
|
94 |
-
|
95 |
-
a) You must cause the modified files to carry prominent notices
|
96 |
-
stating that you changed the files and the date of any change.
|
97 |
-
|
98 |
-
b) You must cause any work that you distribute or publish, that in
|
99 |
-
whole or in part contains or is derived from the Program or any
|
100 |
-
part thereof, to be licensed as a whole at no charge to all third
|
101 |
-
parties under the terms of this License.
|
102 |
-
|
103 |
-
c) If the modified program normally reads commands interactively
|
104 |
-
when run, you must cause it, when started running for such
|
105 |
-
interactive use in the most ordinary way, to print or display an
|
106 |
-
announcement including an appropriate copyright notice and a
|
107 |
-
notice that there is no warranty (or else, saying that you provide
|
108 |
-
a warranty) and that users may redistribute the program under
|
109 |
-
these conditions, and telling the user how to view a copy of this
|
110 |
-
License. (Exception: if the Program itself is interactive but
|
111 |
-
does not normally print such an announcement, your work based on
|
112 |
-
the Program is not required to print an announcement.)
|
113 |
-
|
114 |
-
These requirements apply to the modified work as a whole. If
|
115 |
-
identifiable sections of that work are not derived from the Program,
|
116 |
-
and can be reasonably considered independent and separate works in
|
117 |
-
themselves, then this License, and its terms, do not apply to those
|
118 |
-
sections when you distribute them as separate works. But when you
|
119 |
-
distribute the same sections as part of a whole which is a work based
|
120 |
-
on the Program, the distribution of the whole must be on the terms of
|
121 |
-
this License, whose permissions for other licensees extend to the
|
122 |
-
entire whole, and thus to each and every part regardless of who wrote it.
|
123 |
-
|
124 |
-
Thus, it is not the intent of this section to claim rights or contest
|
125 |
-
your rights to work written entirely by you; rather, the intent is to
|
126 |
-
exercise the right to control the distribution of derivative or
|
127 |
-
collective works based on the Program.
|
128 |
-
|
129 |
-
In addition, mere aggregation of another work not based on the Program
|
130 |
-
with the Program (or with a work based on the Program) on a volume of
|
131 |
-
a storage or distribution medium does not bring the other work under
|
132 |
-
the scope of this License.
|
133 |
-
|
134 |
-
3. You may copy and distribute the Program (or a work based on it,
|
135 |
-
under Section 2) in object code or executable form under the terms of
|
136 |
-
Sections 1 and 2 above provided that you also do one of the following:
|
137 |
-
|
138 |
-
a) Accompany it with the complete corresponding machine-readable
|
139 |
-
source code, which must be distributed under the terms of Sections
|
140 |
-
1 and 2 above on a medium customarily used for software interchange; or,
|
141 |
-
|
142 |
-
b) Accompany it with a written offer, valid for at least three
|
143 |
-
years, to give any third party, for a charge no more than your
|
144 |
-
cost of physically performing source distribution, a complete
|
145 |
-
machine-readable copy of the corresponding source code, to be
|
146 |
-
distributed under the terms of Sections 1 and 2 above on a medium
|
147 |
-
customarily used for software interchange; or,
|
148 |
-
|
149 |
-
c) Accompany it with the information you received as to the offer
|
150 |
-
to distribute corresponding source code. (This alternative is
|
151 |
-
allowed only for noncommercial distribution and only if you
|
152 |
-
received the program in object code or executable form with such
|
153 |
-
an offer, in accord with Subsection b above.)
|
154 |
-
|
155 |
-
The source code for a work means the preferred form of the work for
|
156 |
-
making modifications to it. For an executable work, complete source
|
157 |
-
code means all the source code for all modules it contains, plus any
|
158 |
-
associated interface definition files, plus the scripts used to
|
159 |
-
control compilation and installation of the executable. However, as a
|
160 |
-
special exception, the source code distributed need not include
|
161 |
-
anything that is normally distributed (in either source or binary
|
162 |
-
form) with the major components (compiler, kernel, and so on) of the
|
163 |
-
operating system on which the executable runs, unless that component
|
164 |
-
itself accompanies the executable.
|
165 |
-
|
166 |
-
If distribution of executable or object code is made by offering
|
167 |
-
access to copy from a designated place, then offering equivalent
|
168 |
-
access to copy the source code from the same place counts as
|
169 |
-
distribution of the source code, even though third parties are not
|
170 |
-
compelled to copy the source along with the object code.
|
171 |
-
|
172 |
-
4. You may not copy, modify, sublicense, or distribute the Program
|
173 |
-
except as expressly provided under this License. Any attempt
|
174 |
-
otherwise to copy, modify, sublicense or distribute the Program is
|
175 |
-
void, and will automatically terminate your rights under this License.
|
176 |
-
However, parties who have received copies, or rights, from you under
|
177 |
-
this License will not have their licenses terminated so long as such
|
178 |
-
parties remain in full compliance.
|
179 |
-
|
180 |
-
5. You are not required to accept this License, since you have not
|
181 |
-
signed it. However, nothing else grants you permission to modify or
|
182 |
-
distribute the Program or its derivative works. These actions are
|
183 |
-
prohibited by law if you do not accept this License. Therefore, by
|
184 |
-
modifying or distributing the Program (or any work based on the
|
185 |
-
Program), you indicate your acceptance of this License to do so, and
|
186 |
-
all its terms and conditions for copying, distributing or modifying
|
187 |
-
the Program or works based on it.
|
188 |
-
|
189 |
-
6. Each time you redistribute the Program (or any work based on the
|
190 |
-
Program), the recipient automatically receives a license from the
|
191 |
-
original licensor to copy, distribute or modify the Program subject to
|
192 |
-
these terms and conditions. You may not impose any further
|
193 |
-
restrictions on the recipients' exercise of the rights granted herein.
|
194 |
-
You are not responsible for enforcing compliance by third parties to
|
195 |
-
this License.
|
196 |
-
|
197 |
-
7. If, as a consequence of a court judgment or allegation of patent
|
198 |
-
infringement or for any other reason (not limited to patent issues),
|
199 |
-
conditions are imposed on you (whether by court order, agreement or
|
200 |
-
otherwise) that contradict the conditions of this License, they do not
|
201 |
-
excuse you from the conditions of this License. If you cannot
|
202 |
-
distribute so as to satisfy simultaneously your obligations under this
|
203 |
-
License and any other pertinent obligations, then as a consequence you
|
204 |
-
may not distribute the Program at all. For example, if a patent
|
205 |
-
license would not permit royalty-free redistribution of the Program by
|
206 |
-
all those who receive copies directly or indirectly through you, then
|
207 |
-
the only way you could satisfy both it and this License would be to
|
208 |
-
refrain entirely from distribution of the Program.
|
209 |
-
|
210 |
-
If any portion of this section is held invalid or unenforceable under
|
211 |
-
any particular circumstance, the balance of the section is intended to
|
212 |
-
apply and the section as a whole is intended to apply in other
|
213 |
-
circumstances.
|
214 |
-
|
215 |
-
It is not the purpose of this section to induce you to infringe any
|
216 |
-
patents or other property right claims or to contest validity of any
|
217 |
-
such claims; this section has the sole purpose of protecting the
|
218 |
-
integrity of the free software distribution system, which is
|
219 |
-
implemented by public license practices. Many people have made
|
220 |
-
generous contributions to the wide range of software distributed
|
221 |
-
through that system in reliance on consistent application of that
|
222 |
-
system; it is up to the author/donor to decide if he or she is willing
|
223 |
-
to distribute software through any other system and a licensee cannot
|
224 |
-
impose that choice.
|
225 |
-
|
226 |
-
This section is intended to make thoroughly clear what is believed to
|
227 |
-
be a consequence of the rest of this License.
|
228 |
-
|
229 |
-
8. If the distribution and/or use of the Program is restricted in
|
230 |
-
certain countries either by patents or by copyrighted interfaces, the
|
231 |
-
original copyright holder who places the Program under this License
|
232 |
-
may add an explicit geographical distribution limitation excluding
|
233 |
-
those countries, so that distribution is permitted only in or among
|
234 |
-
countries not thus excluded. In such case, this License incorporates
|
235 |
-
the limitation as if written in the body of this License.
|
236 |
-
|
237 |
-
9. The Free Software Foundation may publish revised and/or new versions
|
238 |
-
of the General Public License from time to time. Such new versions will
|
239 |
-
be similar in spirit to the present version, but may differ in detail to
|
240 |
-
address new problems or concerns.
|
241 |
-
|
242 |
-
Each version is given a distinguishing version number. If the Program
|
243 |
-
specifies a version number of this License which applies to it and "any
|
244 |
-
later version", you have the option of following the terms and conditions
|
245 |
-
either of that version or of any later version published by the Free
|
246 |
-
Software Foundation. If the Program does not specify a version number of
|
247 |
-
this License, you may choose any version ever published by the Free Software
|
248 |
-
Foundation.
|
249 |
-
|
250 |
-
10. If you wish to incorporate parts of the Program into other free
|
251 |
-
programs whose distribution conditions are different, write to the author
|
252 |
-
to ask for permission. For software which is copyrighted by the Free
|
253 |
-
Software Foundation, write to the Free Software Foundation; we sometimes
|
254 |
-
make exceptions for this. Our decision will be guided by the two goals
|
255 |
-
of preserving the free status of all derivatives of our free software and
|
256 |
-
of promoting the sharing and reuse of software generally.
|
257 |
-
|
258 |
-
NO WARRANTY
|
259 |
-
|
260 |
-
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
261 |
-
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
262 |
-
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
263 |
-
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
264 |
-
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
265 |
-
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
266 |
-
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
267 |
-
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
268 |
-
REPAIR OR CORRECTION.
|
269 |
-
|
270 |
-
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
271 |
-
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
272 |
-
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
273 |
-
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
274 |
-
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
275 |
-
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
276 |
-
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
277 |
-
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
278 |
-
POSSIBILITY OF SUCH DAMAGES.
|
279 |
-
|
280 |
-
END OF TERMS AND CONDITIONS
|
281 |
-
|
282 |
-
How to Apply These Terms to Your New Programs
|
283 |
-
|
284 |
-
If you develop a new program, and you want it to be of the greatest
|
285 |
-
possible use to the public, the best way to achieve this is to make it
|
286 |
-
free software which everyone can redistribute and change under these terms.
|
287 |
-
|
288 |
-
To do so, attach the following notices to the program. It is safest
|
289 |
-
to attach them to the start of each source file to most effectively
|
290 |
-
convey the exclusion of warranty; and each file should have at least
|
291 |
-
the "copyright" line and a pointer to where the full notice is found.
|
292 |
-
|
293 |
-
{description}
|
294 |
-
Copyright (C) {year} {fullname}
|
295 |
-
|
296 |
-
This program is free software; you can redistribute it and/or modify
|
297 |
-
it under the terms of the GNU General Public License as published by
|
298 |
-
the Free Software Foundation; either version 2 of the License, or
|
299 |
-
(at your option) any later version.
|
300 |
-
|
301 |
-
This program is distributed in the hope that it will be useful,
|
302 |
-
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
303 |
-
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
304 |
-
GNU General Public License for more details.
|
305 |
-
|
306 |
-
You should have received a copy of the GNU General Public License along
|
307 |
-
with this program; if not, write to the Free Software Foundation, Inc.,
|
308 |
-
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
309 |
-
|
310 |
-
Also add information on how to contact you by electronic and paper mail.
|
311 |
-
|
312 |
-
If the program is interactive, make it output a short notice like this
|
313 |
-
when it starts in an interactive mode:
|
314 |
-
|
315 |
-
Gnomovision version 69, Copyright (C) year name of author
|
316 |
-
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
317 |
-
This is free software, and you are welcome to redistribute it
|
318 |
-
under certain conditions; type `show c' for details.
|
319 |
-
|
320 |
-
The hypothetical commands `show w' and `show c' should show the appropriate
|
321 |
-
parts of the General Public License. Of course, the commands you use may
|
322 |
-
be called something other than `show w' and `show c'; they could even be
|
323 |
-
mouse-clicks or menu items--whatever suits your program.
|
324 |
-
|
325 |
-
You should also get your employer (if you work as a programmer) or your
|
326 |
-
school, if any, to sign a "copyright disclaimer" for the program, if
|
327 |
-
necessary. Here is a sample; alter the names:
|
328 |
-
|
329 |
-
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
330 |
-
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
331 |
-
|
332 |
-
{signature of Ty Coon}, 1 April 1989
|
333 |
-
Ty Coon, President of Vice
|
334 |
-
|
335 |
-
This General Public License does not permit incorporating your program into
|
336 |
-
proprietary programs. If your program is a subroutine library, you may
|
337 |
-
consider it more useful to permit linking proprietary applications with the
|
338 |
-
library. If this is what you want to do, use the GNU Lesser General
|
339 |
-
Public License instead of this License.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
admin/addons.php
DELETED
@@ -1,62 +0,0 @@
|
|
1 |
-
<style>
|
2 |
-
div.addon {
|
3 |
-
display: inline-block;
|
4 |
-
position: relative;
|
5 |
-
background: rgb(249, 249, 249);
|
6 |
-
text-align: center;
|
7 |
-
padding: 20px;
|
8 |
-
border-radius: 4px;
|
9 |
-
min-height: 390px;
|
10 |
-
vertical-align: top;
|
11 |
-
}
|
12 |
-
.col-sm-6{
|
13 |
-
float: left;
|
14 |
-
margin-right: 20px;
|
15 |
-
}
|
16 |
-
.addon{
|
17 |
-
width: 350px;
|
18 |
-
}
|
19 |
-
.addon img{
|
20 |
-
width: 100%;
|
21 |
-
}
|
22 |
-
.addon h2{
|
23 |
-
font-size: 24px;
|
24 |
-
}
|
25 |
-
.button{
|
26 |
-
display: inline-block;
|
27 |
-
margin-right: 3px !important;
|
28 |
-
}
|
29 |
-
</style>
|
30 |
-
|
31 |
-
<br>
|
32 |
-
|
33 |
-
<div class="row">
|
34 |
-
|
35 |
-
|
36 |
-
<div class="col-sm-6">
|
37 |
-
<div class="addon">
|
38 |
-
|
39 |
-
<img src="<?php echo SC_TEAM_URL ?>inc/img/team_showcase_pro_logo.jpg" alt="team_showcase_pro_logo" class="" />
|
40 |
-
<h2>Our Team Showcase Pro</h2>
|
41 |
-
<p>Feature-loaded Pro version of Our Team Showcase adds additional professional templates to your Team Showcase, including a Staff Directory, Honeycomb Layout, Carousel, Stacked Layout, as well as 3 impressive Single Member views: Slide-in Side Panel, Popup V-Card and a Custom Page Single View. It also adds new features such as Team Member Skills, Tags/hobbies, Favorite Content and more!</p>
|
42 |
-
<div>
|
43 |
-
<a target="_BLANK" href="https://smartcatdesign.net/our-team-showcase-demo/" class="button button-default">View Demo</a>
|
44 |
-
<a target="_BLANK" href="https://smartcatdesign.net/downloads/our-team-showcase/" class="button button-primary">Learn More</a>
|
45 |
-
</div>
|
46 |
-
</div>
|
47 |
-
|
48 |
-
</div>
|
49 |
-
|
50 |
-
<div class="col-sm-6">
|
51 |
-
<div class="addon">
|
52 |
-
<img src="<?php echo SC_TEAM_URL ?>inc/img/member_portal_logo.jpg" alt="member_portal_logo" class="" />
|
53 |
-
<h2>Member Login Portal</h2>
|
54 |
-
<p>Restrict pages & posts to Team Members. Login/Logout/Member Profiles. Creates a private portal on your site for your team members to login, view restricted content, edit their own profile details & profile picture, while giving the site admin complete control, user management, content restriction by group/department and more!</p>
|
55 |
-
<div>
|
56 |
-
<a target="_BLANK" href="http://wordpressteamplugin.com/member-portal/login/" class="button button-default">View Demo</a>
|
57 |
-
<a target="_BLANK" href="https://smartcatdesign.net/downloads/member-login-portal/" class="button button-primary">Learn More</a>
|
58 |
-
</div>
|
59 |
-
</div>
|
60 |
-
</div>
|
61 |
-
|
62 |
-
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
admin/class/class-tgm-plugin-activation.php
DELETED
@@ -1,3618 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Plugin installation and activation for WordPress themes.
|
4 |
-
*
|
5 |
-
* Please note that this is a drop-in library for a theme or plugin.
|
6 |
-
* The authors of this library (Thomas, Gary and Juliette) are NOT responsible
|
7 |
-
* for the support of your plugin or theme. Please contact the plugin
|
8 |
-
* or theme author for support.
|
9 |
-
*
|
10 |
-
* @package TGM-Plugin-Activation
|
11 |
-
* @version 2.5.2
|
12 |
-
* @link http://tgmpluginactivation.com/
|
13 |
-
* @author Thomas Griffin, Gary Jones, Juliette Reinders Folmer
|
14 |
-
* @copyright Copyright (c) 2011, Thomas Griffin
|
15 |
-
* @license GPL-2.0+
|
16 |
-
*
|
17 |
-
* @wordpress-plugin
|
18 |
-
* Plugin Name: TGM Plugin Activation
|
19 |
-
* Plugin URI:
|
20 |
-
* Description: Plugin installation and activation for WordPress themes.
|
21 |
-
* Version: 2.5.2
|
22 |
-
* Author: Thomas Griffin, Gary Jones, Juliette Reinders Folmer
|
23 |
-
* Author URI: http://tgmpluginactivation.com/
|
24 |
-
* Text Domain: tgmpa
|
25 |
-
* Domain Path: /languages/
|
26 |
-
* Copyright: 2011, Thomas Griffin
|
27 |
-
*/
|
28 |
-
|
29 |
-
/*
|
30 |
-
Copyright 2011 Thomas Griffin (thomasgriffinmedia.com)
|
31 |
-
|
32 |
-
This program is free software; you can redistribute it and/or modify
|
33 |
-
it under the terms of the GNU General Public License, version 2, as
|
34 |
-
published by the Free Software Foundation.
|
35 |
-
|
36 |
-
This program is distributed in the hope that it will be useful,
|
37 |
-
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
38 |
-
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
39 |
-
GNU General Public License for more details.
|
40 |
-
|
41 |
-
You should have received a copy of the GNU General Public License
|
42 |
-
along with this program; if not, write to the Free Software
|
43 |
-
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
44 |
-
*/
|
45 |
-
|
46 |
-
if ( ! class_exists( 'TGM_Plugin_Activation' ) ) {
|
47 |
-
|
48 |
-
/**
|
49 |
-
* Automatic plugin installation and activation library.
|
50 |
-
*
|
51 |
-
* Creates a way to automatically install and activate plugins from within themes.
|
52 |
-
* The plugins can be either bundled, downloaded from the WordPress
|
53 |
-
* Plugin Repository or downloaded from another external source.
|
54 |
-
*
|
55 |
-
* @since 1.0.0
|
56 |
-
*
|
57 |
-
* @package TGM-Plugin-Activation
|
58 |
-
* @author Thomas Griffin
|
59 |
-
* @author Gary Jones
|
60 |
-
*/
|
61 |
-
class TGM_Plugin_Activation {
|
62 |
-
/**
|
63 |
-
* TGMPA version number.
|
64 |
-
*
|
65 |
-
* @since 2.5.0
|
66 |
-
*
|
67 |
-
* @const string Version number.
|
68 |
-
*/
|
69 |
-
const TGMPA_VERSION = '2.5.2';
|
70 |
-
|
71 |
-
/**
|
72 |
-
* Regular expression to test if a URL is a WP plugin repo URL.
|
73 |
-
*
|
74 |
-
* @const string Regex.
|
75 |
-
*
|
76 |
-
* @since 2.5.0
|
77 |
-
*/
|
78 |
-
const WP_REPO_REGEX = '|^http[s]?://wordpress\.org/(?:extend/)?plugins/|';
|
79 |
-
|
80 |
-
/**
|
81 |
-
* Arbitrary regular expression to test if a string starts with a URL.
|
82 |
-
*
|
83 |
-
* @const string Regex.
|
84 |
-
*
|
85 |
-
* @since 2.5.0
|
86 |
-
*/
|
87 |
-
const IS_URL_REGEX = '|^http[s]?://|';
|
88 |
-
|
89 |
-
/**
|
90 |
-
* Holds a copy of itself, so it can be referenced by the class name.
|
91 |
-
*
|
92 |
-
* @since 1.0.0
|
93 |
-
*
|
94 |
-
* @var TGM_Plugin_Activation
|
95 |
-
*/
|
96 |
-
public static $instance;
|
97 |
-
|
98 |
-
/**
|
99 |
-
* Holds arrays of plugin details.
|
100 |
-
*
|
101 |
-
* @since 1.0.0
|
102 |
-
*
|
103 |
-
* @since 2.5.0 the array has the plugin slug as an associative key.
|
104 |
-
*
|
105 |
-
* @var array
|
106 |
-
*/
|
107 |
-
public $plugins = array();
|
108 |
-
|
109 |
-
/**
|
110 |
-
* Holds arrays of plugin names to use to sort the plugins array.
|
111 |
-
*
|
112 |
-
* @since 2.5.0
|
113 |
-
*
|
114 |
-
* @var array
|
115 |
-
*/
|
116 |
-
protected $sort_order = array();
|
117 |
-
|
118 |
-
/**
|
119 |
-
* Whether any plugins have the 'force_activation' setting set to true.
|
120 |
-
*
|
121 |
-
* @since 2.5.0
|
122 |
-
*
|
123 |
-
* @var bool
|
124 |
-
*/
|
125 |
-
protected $has_forced_activation = false;
|
126 |
-
|
127 |
-
/**
|
128 |
-
* Whether any plugins have the 'force_deactivation' setting set to true.
|
129 |
-
*
|
130 |
-
* @since 2.5.0
|
131 |
-
*
|
132 |
-
* @var bool
|
133 |
-
*/
|
134 |
-
protected $has_forced_deactivation = false;
|
135 |
-
|
136 |
-
/**
|
137 |
-
* Name of the unique ID to hash notices.
|
138 |
-
*
|
139 |
-
* @since 2.4.0
|
140 |
-
*
|
141 |
-
* @var string
|
142 |
-
*/
|
143 |
-
public $id = 'tgmpa';
|
144 |
-
|
145 |
-
/**
|
146 |
-
* Name of the query-string argument for the admin page.
|
147 |
-
*
|
148 |
-
* @since 1.0.0
|
149 |
-
*
|
150 |
-
* @var string
|
151 |
-
*/
|
152 |
-
protected $menu = 'tgmpa-install-plugins';
|
153 |
-
|
154 |
-
/**
|
155 |
-
* Parent menu file slug.
|
156 |
-
*
|
157 |
-
* @since 2.5.0
|
158 |
-
*
|
159 |
-
* @var string
|
160 |
-
*/
|
161 |
-
public $parent_slug = 'themes.php';
|
162 |
-
|
163 |
-
/**
|
164 |
-
* Capability needed to view the plugin installation menu item.
|
165 |
-
*
|
166 |
-
* @since 2.5.0
|
167 |
-
*
|
168 |
-
* @var string
|
169 |
-
*/
|
170 |
-
public $capability = 'edit_theme_options';
|
171 |
-
|
172 |
-
/**
|
173 |
-
* Default absolute path to folder containing bundled plugin zip files.
|
174 |
-
*
|
175 |
-
* @since 2.0.0
|
176 |
-
*
|
177 |
-
* @var string Absolute path prefix to zip file location for bundled plugins. Default is empty string.
|
178 |
-
*/
|
179 |
-
public $default_path = '';
|
180 |
-
|
181 |
-
/**
|
182 |
-
* Flag to show admin notices or not.
|
183 |
-
*
|
184 |
-
* @since 2.1.0
|
185 |
-
*
|
186 |
-
* @var boolean
|
187 |
-
*/
|
188 |
-
public $has_notices = true;
|
189 |
-
|
190 |
-
/**
|
191 |
-
* Flag to determine if the user can dismiss the notice nag.
|
192 |
-
*
|
193 |
-
* @since 2.4.0
|
194 |
-
*
|
195 |
-
* @var boolean
|
196 |
-
*/
|
197 |
-
public $dismissable = true;
|
198 |
-
|
199 |
-
/**
|
200 |
-
* Message to be output above nag notice if dismissable is false.
|
201 |
-
*
|
202 |
-
* @since 2.4.0
|
203 |
-
*
|
204 |
-
* @var string
|
205 |
-
*/
|
206 |
-
public $dismiss_msg = '';
|
207 |
-
|
208 |
-
/**
|
209 |
-
* Flag to set automatic activation of plugins. Off by default.
|
210 |
-
*
|
211 |
-
* @since 2.2.0
|
212 |
-
*
|
213 |
-
* @var boolean
|
214 |
-
*/
|
215 |
-
public $is_automatic = false;
|
216 |
-
|
217 |
-
/**
|
218 |
-
* Optional message to display before the plugins table.
|
219 |
-
*
|
220 |
-
* @since 2.2.0
|
221 |
-
*
|
222 |
-
* @var string Message filtered by wp_kses_post(). Default is empty string.
|
223 |
-
*/
|
224 |
-
public $message = '';
|
225 |
-
|
226 |
-
/**
|
227 |
-
* Holds configurable array of strings.
|
228 |
-
*
|
229 |
-
* Default values are added in the constructor.
|
230 |
-
*
|
231 |
-
* @since 2.0.0
|
232 |
-
*
|
233 |
-
* @var array
|
234 |
-
*/
|
235 |
-
public $strings = array();
|
236 |
-
|
237 |
-
/**
|
238 |
-
* Holds the version of WordPress.
|
239 |
-
*
|
240 |
-
* @since 2.4.0
|
241 |
-
*
|
242 |
-
* @var int
|
243 |
-
*/
|
244 |
-
public $wp_version;
|
245 |
-
|
246 |
-
/**
|
247 |
-
* Holds the hook name for the admin page.
|
248 |
-
*
|
249 |
-
* @since 2.5.0
|
250 |
-
*
|
251 |
-
* @var string
|
252 |
-
*/
|
253 |
-
public $page_hook;
|
254 |
-
|
255 |
-
/**
|
256 |
-
* Adds a reference of this object to $instance, populates default strings,
|
257 |
-
* does the tgmpa_init action hook, and hooks in the interactions to init.
|
258 |
-
*
|
259 |
-
* @internal This method should be `protected`, but as too many TGMPA implementations
|
260 |
-
* haven't upgraded beyond v2.3.6 yet, this gives backward compatibility issues.
|
261 |
-
* Reverted back to public for the time being.
|
262 |
-
*
|
263 |
-
* @since 1.0.0
|
264 |
-
*
|
265 |
-
* @see TGM_Plugin_Activation::init()
|
266 |
-
*/
|
267 |
-
public function __construct() {
|
268 |
-
// Set the current WordPress version.
|
269 |
-
$this->wp_version = $GLOBALS['wp_version'];
|
270 |
-
|
271 |
-
// Announce that the class is ready, and pass the object (for advanced use).
|
272 |
-
do_action_ref_array( 'tgmpa_init', array( $this ) );
|
273 |
-
|
274 |
-
// When the rest of WP has loaded, kick-start the rest of the class.
|
275 |
-
add_action( 'init', array( $this, 'init' ) );
|
276 |
-
}
|
277 |
-
|
278 |
-
/**
|
279 |
-
* Magic method to (not) set protected properties from outside of this class.
|
280 |
-
*
|
281 |
-
* @internal hackedihack... There is a serious bug in v2.3.2 - 2.3.6 where the `menu` property
|
282 |
-
* is being assigned rather than tested in a conditional, effectively rendering it useless.
|
283 |
-
* This 'hack' prevents this from happening.
|
284 |
-
*
|
285 |
-
* @see https://github.com/TGMPA/TGM-Plugin-Activation/blob/2.3.6/tgm-plugin-activation/class-tgm-plugin-activation.php#L1593
|
286 |
-
*
|
287 |
-
* @param string $name Name of an inaccessible property.
|
288 |
-
* @param mixed $value Value to assign to the property.
|
289 |
-
* @return void Silently fail to set the property when this is tried from outside of this class context.
|
290 |
-
* (Inside this class context, the __set() method if not used as there is direct access.)
|
291 |
-
*/
|
292 |
-
public function __set( $name, $value ) {
|
293 |
-
return;
|
294 |
-
}
|
295 |
-
|
296 |
-
/**
|
297 |
-
* Magic method to get the value of a protected property outside of this class context.
|
298 |
-
*
|
299 |
-
* @param string $name Name of an inaccessible property.
|
300 |
-
* @return mixed The property value.
|
301 |
-
*/
|
302 |
-
public function __get( $name ) {
|
303 |
-
return $this->{$name};
|
304 |
-
}
|
305 |
-
|
306 |
-
/**
|
307 |
-
* Initialise the interactions between this class and WordPress.
|
308 |
-
*
|
309 |
-
* Hooks in three new methods for the class: admin_menu, notices and styles.
|
310 |
-
*
|
311 |
-
* @since 2.0.0
|
312 |
-
*
|
313 |
-
* @see TGM_Plugin_Activation::admin_menu()
|
314 |
-
* @see TGM_Plugin_Activation::notices()
|
315 |
-
* @see TGM_Plugin_Activation::styles()
|
316 |
-
*/
|
317 |
-
public function init() {
|
318 |
-
/**
|
319 |
-
* By default TGMPA only loads on the WP back-end and not in an Ajax call. Using this filter
|
320 |
-
* you can overrule that behaviour.
|
321 |
-
*
|
322 |
-
* @since 2.5.0
|
323 |
-
*
|
324 |
-
* @param bool $load Whether or not TGMPA should load.
|
325 |
-
* Defaults to the return of `is_admin() && ! defined( 'DOING_AJAX' )`.
|
326 |
-
*/
|
327 |
-
if ( true !== apply_filters( 'tgmpa_load', ( is_admin() && ! defined( 'DOING_AJAX' ) ) ) ) {
|
328 |
-
return;
|
329 |
-
}
|
330 |
-
|
331 |
-
// Load class strings.
|
332 |
-
$this->strings = array(
|
333 |
-
'page_title' => __( 'Install Required Plugins', 'tgmpa' ),
|
334 |
-
'menu_title' => __( 'Install Plugins', 'tgmpa' ),
|
335 |
-
'installing' => __( 'Installing Plugin: %s', 'tgmpa' ),
|
336 |
-
'oops' => __( 'Something went wrong with the plugin API.', 'tgmpa' ),
|
337 |
-
'notice_can_install_required' => _n_noop(
|
338 |
-
'This theme requires the following plugin: %1$s.',
|
339 |
-
'This theme requires the following plugins: %1$s.',
|
340 |
-
'tgmpa'
|
341 |
-
),
|
342 |
-
'notice_can_install_recommended' => _n_noop(
|
343 |
-
'This theme recommends the following plugin: %1$s.',
|
344 |
-
'This theme recommends the following plugins: %1$s.',
|
345 |
-
'tgmpa'
|
346 |
-
),
|
347 |
-
'notice_cannot_install' => _n_noop(
|
348 |
-
'Sorry, but you do not have the correct permissions to install the %1$s plugin.',
|
349 |
-
'Sorry, but you do not have the correct permissions to install the %1$s plugins.',
|
350 |
-
'tgmpa'
|
351 |
-
),
|
352 |
-
'notice_ask_to_update' => _n_noop(
|
353 |
-
'The following plugin needs to be updated to its latest version to ensure maximum compatibility with this theme: %1$s.',
|
354 |
-
'The following plugins need to be updated to their latest version to ensure maximum compatibility with this theme: %1$s.',
|
355 |
-
'tgmpa'
|
356 |
-
),
|
357 |
-
'notice_ask_to_update_maybe' => _n_noop(
|
358 |
-
'There is an update available for: %1$s.',
|
359 |
-
'There are updates available for the following plugins: %1$s.',
|
360 |
-
'tgmpa'
|
361 |
-
),
|
362 |
-
'notice_cannot_update' => _n_noop(
|
363 |
-
'Sorry, but you do not have the correct permissions to update the %1$s plugin.',
|
364 |
-
'Sorry, but you do not have the correct permissions to update the %1$s plugins.',
|
365 |
-
'tgmpa'
|
366 |
-
),
|
367 |
-
'notice_can_activate_required' => _n_noop(
|
368 |
-
'The following required plugin is currently inactive: %1$s.',
|
369 |
-
'The following required plugins are currently inactive: %1$s.',
|
370 |
-
'tgmpa'
|
371 |
-
),
|
372 |
-
'notice_can_activate_recommended' => _n_noop(
|
373 |
-
'The following recommended plugin is currently inactive: %1$s.',
|
374 |
-
'The following recommended plugins are currently inactive: %1$s.',
|
375 |
-
'tgmpa'
|
376 |
-
),
|
377 |
-
'notice_cannot_activate' => _n_noop(
|
378 |
-
'Sorry, but you do not have the correct permissions to activate the %1$s plugin.',
|
379 |
-
'Sorry, but you do not have the correct permissions to activate the %1$s plugins.',
|
380 |
-
'tgmpa'
|
381 |
-
),
|
382 |
-
'install_link' => _n_noop(
|
383 |
-
'Begin installing plugin',
|
384 |
-
'Begin installing plugins',
|
385 |
-
'tgmpa'
|
386 |
-
),
|
387 |
-
'update_link' => _n_noop(
|
388 |
-
'Begin updating plugin',
|
389 |
-
'Begin updating plugins',
|
390 |
-
'tgmpa'
|
391 |
-
),
|
392 |
-
'activate_link' => _n_noop(
|
393 |
-
'Begin activating plugin',
|
394 |
-
'Begin activating plugins',
|
395 |
-
'tgmpa'
|
396 |
-
),
|
397 |
-
'return' => __( 'Return to Required Plugins Installer', 'tgmpa' ),
|
398 |
-
'dashboard' => __( 'Return to the dashboard', 'tgmpa' ),
|
399 |
-
'plugin_activated' => __( 'Plugin activated successfully.', 'tgmpa' ),
|
400 |
-
'activated_successfully' => __( 'The following plugin was activated successfully:', 'tgmpa' ),
|
401 |
-
'plugin_already_active' => __( 'No action taken. Plugin %1$s was already active.', 'tgmpa' ),
|
402 |
-
'plugin_needs_higher_version' => __( 'Plugin not activated. A higher version of %s is needed for this theme. Please update the plugin.', 'tgmpa' ),
|
403 |
-
'complete' => __( 'All plugins installed and activated successfully. %1$s', 'tgmpa' ),
|
404 |
-
'dismiss' => __( 'Dismiss this notice', 'tgmpa' ),
|
405 |
-
'contact_admin' => __( 'Please contact the administrator of this site for help.', 'tgmpa' ),
|
406 |
-
);
|
407 |
-
|
408 |
-
do_action( 'tgmpa_register' );
|
409 |
-
|
410 |
-
/* After this point, the plugins should be registered and the configuration set. */
|
411 |
-
|
412 |
-
// Proceed only if we have plugins to handle.
|
413 |
-
if ( empty( $this->plugins ) || ! is_array( $this->plugins ) ) {
|
414 |
-
return;
|
415 |
-
}
|
416 |
-
|
417 |
-
// Set up the menu and notices if we still have outstanding actions.
|
418 |
-
if ( true !== $this->is_tgmpa_complete() ) {
|
419 |
-
// Sort the plugins.
|
420 |
-
array_multisort( $this->sort_order, SORT_ASC, $this->plugins );
|
421 |
-
|
422 |
-
add_action( 'admin_menu', array( $this, 'admin_menu' ) );
|
423 |
-
add_action( 'admin_head', array( $this, 'dismiss' ) );
|
424 |
-
|
425 |
-
// Prevent the normal links from showing underneath a single install/update page.
|
426 |
-
add_filter( 'install_plugin_complete_actions', array( $this, 'actions' ) );
|
427 |
-
add_filter( 'update_plugin_complete_actions', array( $this, 'actions' ) );
|
428 |
-
|
429 |
-
if ( $this->has_notices ) {
|
430 |
-
add_action( 'admin_notices', array( $this, 'notices' ) );
|
431 |
-
add_action( 'admin_init', array( $this, 'admin_init' ), 1 );
|
432 |
-
add_action( 'admin_enqueue_scripts', array( $this, 'thickbox' ) );
|
433 |
-
}
|
434 |
-
|
435 |
-
add_action( 'load-plugins.php', array( $this, 'add_plugin_action_link_filters' ), 1 );
|
436 |
-
}
|
437 |
-
|
438 |
-
// Make sure things get reset on switch theme.
|
439 |
-
add_action( 'switch_theme', array( $this, 'flush_plugins_cache' ) );
|
440 |
-
|
441 |
-
if ( $this->has_notices ) {
|
442 |
-
add_action( 'switch_theme', array( $this, 'update_dismiss' ) );
|
443 |
-
}
|
444 |
-
|
445 |
-
// Setup the force activation hook.
|
446 |
-
if ( true === $this->has_forced_activation ) {
|
447 |
-
add_action( 'admin_init', array( $this, 'force_activation' ) );
|
448 |
-
}
|
449 |
-
|
450 |
-
// Setup the force deactivation hook.
|
451 |
-
if ( true === $this->has_forced_deactivation ) {
|
452 |
-
add_action( 'switch_theme', array( $this, 'force_deactivation' ) );
|
453 |
-
}
|
454 |
-
}
|
455 |
-
|
456 |
-
/**
|
457 |
-
* Prevent activation of plugins which don't meet the minimum version requirement from the
|
458 |
-
* WP native plugins page.
|
459 |
-
*
|
460 |
-
* @since 2.5.0
|
461 |
-
*/
|
462 |
-
public function add_plugin_action_link_filters() {
|
463 |
-
foreach ( $this->plugins as $slug => $plugin ) {
|
464 |
-
if ( false === $this->can_plugin_activate( $slug ) ) {
|
465 |
-
add_filter( 'plugin_action_links_' . $plugin['file_path'], array( $this, 'filter_plugin_action_links_activate' ), 20 );
|
466 |
-
}
|
467 |
-
|
468 |
-
if ( true === $plugin['force_activation'] ) {
|
469 |
-
add_filter( 'plugin_action_links_' . $plugin['file_path'], array( $this, 'filter_plugin_action_links_deactivate' ), 20 );
|
470 |
-
}
|
471 |
-
|
472 |
-
if ( false !== $this->does_plugin_require_update( $slug ) ) {
|
473 |
-
add_filter( 'plugin_action_links_' . $plugin['file_path'], array( $this, 'filter_plugin_action_links_update' ), 20 );
|
474 |
-
}
|
475 |
-
}
|
476 |
-
}
|
477 |
-
|
478 |
-
/**
|
479 |
-
* Remove the 'Activate' link on the WP native plugins page if the plugin does not meet the
|
480 |
-
* minimum version requirements.
|
481 |
-
*
|
482 |
-
* @since 2.5.0
|
483 |
-
*
|
484 |
-
* @param array $actions Action links.
|
485 |
-
* @return array
|
486 |
-
*/
|
487 |
-
public function filter_plugin_action_links_activate( $actions ) {
|
488 |
-
unset( $actions['activate'] );
|
489 |
-
|
490 |
-
return $actions;
|
491 |
-
}
|
492 |
-
|
493 |
-
/**
|
494 |
-
* Remove the 'Deactivate' link on the WP native plugins page if the plugin has been set to force activate.
|
495 |
-
*
|
496 |
-
* @since 2.5.0
|
497 |
-
*
|
498 |
-
* @param array $actions Action links.
|
499 |
-
* @return array
|
500 |
-
*/
|
501 |
-
public function filter_plugin_action_links_deactivate( $actions ) {
|
502 |
-
unset( $actions['deactivate'] );
|
503 |
-
|
504 |
-
return $actions;
|
505 |
-
}
|
506 |
-
|
507 |
-
/**
|
508 |
-
* Add a 'Requires update' link on the WP native plugins page if the plugin does not meet the
|
509 |
-
* minimum version requirements.
|
510 |
-
*
|
511 |
-
* @since 2.5.0
|
512 |
-
*
|
513 |
-
* @param array $actions Action links.
|
514 |
-
* @return array
|
515 |
-
*/
|
516 |
-
public function filter_plugin_action_links_update( $actions ) {
|
517 |
-
$actions['update'] = sprintf(
|
518 |
-
'<a href="%1$s" title="%2$s" class="edit">%3$s</a>',
|
519 |
-
esc_url( $this->get_tgmpa_status_url( 'update' ) ),
|
520 |
-
esc_attr__( 'This plugin needs to be updated to be compatible with your theme.', 'tgmpa' ),
|
521 |
-
esc_html__( 'Update Required', 'tgmpa' )
|
522 |
-
);
|
523 |
-
|
524 |
-
return $actions;
|
525 |
-
}
|
526 |
-
|
527 |
-
/**
|
528 |
-
* Handles calls to show plugin information via links in the notices.
|
529 |
-
*
|
530 |
-
* We get the links in the admin notices to point to the TGMPA page, rather
|
531 |
-
* than the typical plugin-install.php file, so we can prepare everything
|
532 |
-
* beforehand.
|
533 |
-
*
|
534 |
-
* WP does not make it easy to show the plugin information in the thickbox -
|
535 |
-
* here we have to require a file that includes a function that does the
|
536 |
-
* main work of displaying it, enqueue some styles, set up some globals and
|
537 |
-
* finally call that function before exiting.
|
538 |
-
*
|
539 |
-
* Down right easy once you know how...
|
540 |
-
*
|
541 |
-
* Returns early if not the TGMPA page.
|
542 |
-
*
|
543 |
-
* @since 2.1.0
|
544 |
-
*
|
545 |
-
* @global string $tab Used as iframe div class names, helps with styling
|
546 |
-
* @global string $body_id Used as the iframe body ID, helps with styling
|
547 |
-
*
|
548 |
-
* @return null Returns early if not the TGMPA page.
|
549 |
-
*/
|
550 |
-
public function admin_init() {
|
551 |
-
if ( ! $this->is_tgmpa_page() ) {
|
552 |
-
return;
|
553 |
-
}
|
554 |
-
|
555 |
-
if ( isset( $_REQUEST['tab'] ) && 'plugin-information' === $_REQUEST['tab'] ) {
|
556 |
-
// Needed for install_plugin_information().
|
557 |
-
require_once ABSPATH . 'wp-admin/includes/plugin-install.php';
|
558 |
-
|
559 |
-
wp_enqueue_style( 'plugin-install' );
|
560 |
-
|
561 |
-
global $tab, $body_id;
|
562 |
-
$body_id = 'plugin-information';
|
563 |
-
// @codingStandardsIgnoreStart
|
564 |
-
$tab = 'plugin-information';
|
565 |
-
// @codingStandardsIgnoreEnd
|
566 |
-
|
567 |
-
install_plugin_information();
|
568 |
-
|
569 |
-
exit;
|
570 |
-
}
|
571 |
-
}
|
572 |
-
|
573 |
-
/**
|
574 |
-
* Enqueue thickbox scripts/styles for plugin info.
|
575 |
-
*
|
576 |
-
* Thickbox is not automatically included on all admin pages, so we must
|
577 |
-
* manually enqueue it for those pages.
|
578 |
-
*
|
579 |
-
* Thickbox is only loaded if the user has not dismissed the admin
|
580 |
-
* notice or if there are any plugins left to install and activate.
|
581 |
-
*
|
582 |
-
* @since 2.1.0
|
583 |
-
*/
|
584 |
-
public function thickbox() {
|
585 |
-
if ( ! get_user_meta( get_current_user_id(), 'tgmpa_dismissed_notice_' . $this->id, true ) ) {
|
586 |
-
add_thickbox();
|
587 |
-
}
|
588 |
-
}
|
589 |
-
|
590 |
-
/**
|
591 |
-
* Adds submenu page if there are plugin actions to take.
|
592 |
-
*
|
593 |
-
* This method adds the submenu page letting users know that a required
|
594 |
-
* plugin needs to be installed.
|
595 |
-
*
|
596 |
-
* This page disappears once the plugin has been installed and activated.
|
597 |
-
*
|
598 |
-
* @since 1.0.0
|
599 |
-
*
|
600 |
-
* @see TGM_Plugin_Activation::init()
|
601 |
-
* @see TGM_Plugin_Activation::install_plugins_page()
|
602 |
-
*
|
603 |
-
* @return null Return early if user lacks capability to install a plugin.
|
604 |
-
*/
|
605 |
-
public function admin_menu() {
|
606 |
-
// Make sure privileges are correct to see the page.
|
607 |
-
if ( ! current_user_can( 'install_plugins' ) ) {
|
608 |
-
return;
|
609 |
-
}
|
610 |
-
|
611 |
-
$args = apply_filters(
|
612 |
-
'tgmpa_admin_menu_args',
|
613 |
-
array(
|
614 |
-
'parent_slug' => $this->parent_slug, // Parent Menu slug.
|
615 |
-
'page_title' => $this->strings['page_title'], // Page title.
|
616 |
-
'menu_title' => $this->strings['menu_title'], // Menu title.
|
617 |
-
'capability' => $this->capability, // Capability.
|
618 |
-
'menu_slug' => $this->menu, // Menu slug.
|
619 |
-
'function' => array( $this, 'install_plugins_page' ), // Callback.
|
620 |
-
)
|
621 |
-
);
|
622 |
-
|
623 |
-
$this->add_admin_menu( $args );
|
624 |
-
}
|
625 |
-
|
626 |
-
/**
|
627 |
-
* Add the menu item.
|
628 |
-
*
|
629 |
-
* @since 2.5.0
|
630 |
-
*
|
631 |
-
* @param array $args Menu item configuration.
|
632 |
-
*/
|
633 |
-
protected function add_admin_menu( array $args ) {
|
634 |
-
if ( has_filter( 'tgmpa_admin_menu_use_add_theme_page' ) ) {
|
635 |
-
_deprecated_function( 'The "tgmpa_admin_menu_use_add_theme_page" filter', '2.5.0', esc_html__( 'Set the parent_slug config variable instead.', 'tgmpa' ) );
|
636 |
-
}
|
637 |
-
|
638 |
-
if ( 'themes.php' === $this->parent_slug ) {
|
639 |
-
$this->page_hook = call_user_func( 'add_theme_page', $args['page_title'], $args['menu_title'], $args['capability'], $args['menu_slug'], $args['function'] );
|
640 |
-
} else {
|
641 |
-
$this->page_hook = call_user_func( 'add_submenu_page', $args['parent_slug'], $args['page_title'], $args['menu_title'], $args['capability'], $args['menu_slug'], $args['function'] );
|
642 |
-
}
|
643 |
-
}
|
644 |
-
|
645 |
-
/**
|
646 |
-
* Echoes plugin installation form.
|
647 |
-
*
|
648 |
-
* This method is the callback for the admin_menu method function.
|
649 |
-
* This displays the admin page and form area where the user can select to install and activate the plugin.
|
650 |
-
* Aborts early if we're processing a plugin installation action.
|
651 |
-
*
|
652 |
-
* @since 1.0.0
|
653 |
-
*
|
654 |
-
* @return null Aborts early if we're processing a plugin installation action.
|
655 |
-
*/
|
656 |
-
public function install_plugins_page() {
|
657 |
-
// Store new instance of plugin table in object.
|
658 |
-
$plugin_table = new TGMPA_List_Table;
|
659 |
-
|
660 |
-
// Return early if processing a plugin installation action.
|
661 |
-
if ( ( ( 'tgmpa-bulk-install' === $plugin_table->current_action() || 'tgmpa-bulk-update' === $plugin_table->current_action() ) && $plugin_table->process_bulk_actions() ) || $this->do_plugin_install() ) {
|
662 |
-
return;
|
663 |
-
}
|
664 |
-
|
665 |
-
// Force refresh of available plugin information so we'll know about manual updates/deletes.
|
666 |
-
wp_clean_plugins_cache( false );
|
667 |
-
|
668 |
-
?>
|
669 |
-
<div class="tgmpa wrap">
|
670 |
-
<h2><?php echo esc_html( get_admin_page_title() ); ?></h2>
|
671 |
-
<?php $plugin_table->prepare_items(); ?>
|
672 |
-
|
673 |
-
<?php
|
674 |
-
if ( ! empty( $this->message ) && is_string( $this->message ) ) {
|
675 |
-
echo wp_kses_post( $this->message );
|
676 |
-
}
|
677 |
-
?>
|
678 |
-
<?php $plugin_table->views(); ?>
|
679 |
-
|
680 |
-
<form id="tgmpa-plugins" action="" method="post">
|
681 |
-
<input type="hidden" name="tgmpa-page" value="<?php echo esc_attr( $this->menu ); ?>" />
|
682 |
-
<input type="hidden" name="plugin_status" value="<?php echo esc_attr( $plugin_table->view_context ); ?>" />
|
683 |
-
<?php $plugin_table->display(); ?>
|
684 |
-
</form>
|
685 |
-
</div>
|
686 |
-
<?php
|
687 |
-
}
|
688 |
-
|
689 |
-
/**
|
690 |
-
* Installs, updates or activates a plugin depending on the action link clicked by the user.
|
691 |
-
*
|
692 |
-
* Checks the $_GET variable to see which actions have been
|
693 |
-
* passed and responds with the appropriate method.
|
694 |
-
*
|
695 |
-
* Uses WP_Filesystem to process and handle the plugin installation
|
696 |
-
* method.
|
697 |
-
*
|
698 |
-
* @since 1.0.0
|
699 |
-
*
|
700 |
-
* @uses WP_Filesystem
|
701 |
-
* @uses WP_Error
|
702 |
-
* @uses WP_Upgrader
|
703 |
-
* @uses Plugin_Upgrader
|
704 |
-
* @uses Plugin_Installer_Skin
|
705 |
-
* @uses Plugin_Upgrader_Skin
|
706 |
-
*
|
707 |
-
* @return boolean True on success, false on failure.
|
708 |
-
*/
|
709 |
-
protected function do_plugin_install() {
|
710 |
-
if ( empty( $_GET['plugin'] ) ) {
|
711 |
-
return false;
|
712 |
-
}
|
713 |
-
|
714 |
-
// All plugin information will be stored in an array for processing.
|
715 |
-
$slug = $this->sanitize_key( urldecode( $_GET['plugin'] ) );
|
716 |
-
|
717 |
-
if ( ! isset( $this->plugins[ $slug ] ) ) {
|
718 |
-
return false;
|
719 |
-
}
|
720 |
-
|
721 |
-
// Was an install or upgrade action link clicked?
|
722 |
-
if ( ( isset( $_GET['tgmpa-install'] ) && 'install-plugin' === $_GET['tgmpa-install'] ) || ( isset( $_GET['tgmpa-update'] ) && 'update-plugin' === $_GET['tgmpa-update'] ) ) {
|
723 |
-
|
724 |
-
$install_type = 'install';
|
725 |
-
if ( isset( $_GET['tgmpa-update'] ) && 'update-plugin' === $_GET['tgmpa-update'] ) {
|
726 |
-
$install_type = 'update';
|
727 |
-
}
|
728 |
-
|
729 |
-
check_admin_referer( 'tgmpa-' . $install_type, 'tgmpa-nonce' );
|
730 |
-
|
731 |
-
// Pass necessary information via URL if WP_Filesystem is needed.
|
732 |
-
$url = wp_nonce_url(
|
733 |
-
add_query_arg(
|
734 |
-
array(
|
735 |
-
'plugin' => urlencode( $slug ),
|
736 |
-
'tgmpa-' . $install_type => $install_type . '-plugin',
|
737 |
-
),
|
738 |
-
$this->get_tgmpa_url()
|
739 |
-
),
|
740 |
-
'tgmpa-' . $install_type,
|
741 |
-
'tgmpa-nonce'
|
742 |
-
);
|
743 |
-
|
744 |
-
$method = ''; // Leave blank so WP_Filesystem can populate it as necessary.
|
745 |
-
|
746 |
-
if ( false === ( $creds = request_filesystem_credentials( esc_url_raw( $url ), $method, false, false, array() ) ) ) {
|
747 |
-
return true;
|
748 |
-
}
|
749 |
-
|
750 |
-
if ( ! WP_Filesystem( $creds ) ) {
|
751 |
-
request_filesystem_credentials( esc_url_raw( $url ), $method, true, false, array() ); // Setup WP_Filesystem.
|
752 |
-
return true;
|
753 |
-
}
|
754 |
-
|
755 |
-
/* If we arrive here, we have the filesystem. */
|
756 |
-
|
757 |
-
// Prep variables for Plugin_Installer_Skin class.
|
758 |
-
$extra = array();
|
759 |
-
$extra['slug'] = $slug; // Needed for potentially renaming of directory name.
|
760 |
-
$source = $this->get_download_url( $slug );
|
761 |
-
$api = ( 'repo' === $this->plugins[ $slug ]['source_type'] ) ? $this->get_plugins_api( $slug ) : null;
|
762 |
-
$api = ( false !== $api ) ? $api : null;
|
763 |
-
|
764 |
-
$url = add_query_arg(
|
765 |
-
array(
|
766 |
-
'action' => $install_type . '-plugin',
|
767 |
-
'plugin' => urlencode( $slug ),
|
768 |
-
),
|
769 |
-
'update.php'
|
770 |
-
);
|
771 |
-
|
772 |
-
if ( ! class_exists( 'Plugin_Upgrader', false ) ) {
|
773 |
-
require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
|
774 |
-
}
|
775 |
-
|
776 |
-
$skin_args = array(
|
777 |
-
'type' => ( 'bundled' !== $this->plugins[ $slug ]['source_type'] ) ? 'web' : 'upload',
|
778 |
-
'title' => sprintf( $this->strings['installing'], $this->plugins[ $slug ]['name'] ),
|
779 |
-
'url' => esc_url_raw( $url ),
|
780 |
-
'nonce' => $install_type . '-plugin_' . $slug,
|
781 |
-
'plugin' => '',
|
782 |
-
'api' => $api,
|
783 |
-
'extra' => $extra,
|
784 |
-
);
|
785 |
-
|
786 |
-
if ( 'update' === $install_type ) {
|
787 |
-
$skin_args['plugin'] = $this->plugins[ $slug ]['file_path'];
|
788 |
-
$skin = new Plugin_Upgrader_Skin( $skin_args );
|
789 |
-
} else {
|
790 |
-
$skin = new Plugin_Installer_Skin( $skin_args );
|
791 |
-
}
|
792 |
-
|
793 |
-
// Create a new instance of Plugin_Upgrader.
|
794 |
-
$upgrader = new Plugin_Upgrader( $skin );
|
795 |
-
|
796 |
-
// Perform the action and install the plugin from the $source urldecode().
|
797 |
-
add_filter( 'upgrader_source_selection', array( $this, 'maybe_adjust_source_dir' ), 1, 3 );
|
798 |
-
|
799 |
-
if ( 'update' === $install_type ) {
|
800 |
-
// Inject our info into the update transient.
|
801 |
-
$to_inject = array( $slug => $this->plugins[ $slug ] );
|
802 |
-
$to_inject[ $slug ]['source'] = $source;
|
803 |
-
$this->inject_update_info( $to_inject );
|
804 |
-
|
805 |
-
$upgrader->upgrade( $this->plugins[ $slug ]['file_path'] );
|
806 |
-
} else {
|
807 |
-
$upgrader->install( $source );
|
808 |
-
}
|
809 |
-
|
810 |
-
remove_filter( 'upgrader_source_selection', array( $this, 'maybe_adjust_source_dir' ), 1, 3 );
|
811 |
-
|
812 |
-
// Make sure we have the correct file path now the plugin is installed/updated.
|
813 |
-
$this->populate_file_path( $slug );
|
814 |
-
|
815 |
-
// Only activate plugins if the config option is set to true and the plugin isn't
|
816 |
-
// already active (upgrade).
|
817 |
-
if ( $this->is_automatic && ! $this->is_plugin_active( $slug ) ) {
|
818 |
-
$plugin_activate = $upgrader->plugin_info(); // Grab the plugin info from the Plugin_Upgrader method.
|
819 |
-
if ( false === $this->activate_single_plugin( $plugin_activate, $slug, true ) ) {
|
820 |
-
return true; // Finish execution of the function early as we encountered an error.
|
821 |
-
}
|
822 |
-
}
|
823 |
-
|
824 |
-
$this->show_tgmpa_version();
|
825 |
-
|
826 |
-
// Display message based on if all plugins are now active or not.
|
827 |
-
if ( $this->is_tgmpa_complete() ) {
|
828 |
-
echo '<p>', sprintf( esc_html( $this->strings['complete'] ), '<a href="' . esc_url( self_admin_url() ) . '">' . esc_html__( 'Return to the Dashboard', 'tgmpa' ) . '</a>' ), '</p>';
|
829 |
-
echo '<style type="text/css">#adminmenu .wp-submenu li.current { display: none !important; }</style>';
|
830 |
-
} else {
|
831 |
-
echo '<p><a href="', esc_url( $this->get_tgmpa_url() ), '" target="_parent">', esc_html( $this->strings['return'] ), '</a></p>';
|
832 |
-
}
|
833 |
-
|
834 |
-
return true;
|
835 |
-
} elseif ( isset( $this->plugins[ $slug ]['file_path'], $_GET['tgmpa-activate'] ) && 'activate-plugin' === $_GET['tgmpa-activate'] ) {
|
836 |
-
// Activate action link was clicked.
|
837 |
-
check_admin_referer( 'tgmpa-activate', 'tgmpa-nonce' );
|
838 |
-
|
839 |
-
if ( false === $this->activate_single_plugin( $this->plugins[ $slug ]['file_path'], $slug ) ) {
|
840 |
-
return true; // Finish execution of the function early as we encountered an error.
|
841 |
-
}
|
842 |
-
}
|
843 |
-
|
844 |
-
return false;
|
845 |
-
}
|
846 |
-
|
847 |
-
/**
|
848 |
-
* Inject information into the 'update_plugins' site transient as WP checks that before running an update.
|
849 |
-
*
|
850 |
-
* @since 2.5.0
|
851 |
-
*
|
852 |
-
* @param array $plugins The plugin information for the plugins which are to be updated.
|
853 |
-
*/
|
854 |
-
public function inject_update_info( $plugins ) {
|
855 |
-
$repo_updates = get_site_transient( 'update_plugins' );
|
856 |
-
|
857 |
-
if ( ! is_object( $repo_updates ) ) {
|
858 |
-
$repo_updates = new stdClass;
|
859 |
-
}
|
860 |
-
|
861 |
-
foreach ( $plugins as $slug => $plugin ) {
|
862 |
-
$file_path = $plugin['file_path'];
|
863 |
-
|
864 |
-
if ( empty( $repo_updates->response[ $file_path ] ) ) {
|
865 |
-
$repo_updates->response[ $file_path ] = new stdClass;
|
866 |
-
}
|
867 |
-
|
868 |
-
// We only really need to set package, but let's do all we can in case WP changes something.
|
869 |
-
$repo_updates->response[ $file_path ]->slug = $slug;
|
870 |
-
$repo_updates->response[ $file_path ]->plugin = $file_path;
|
871 |
-
$repo_updates->response[ $file_path ]->new_version = $plugin['version'];
|
872 |
-
$repo_updates->response[ $file_path ]->package = $plugin['source'];
|
873 |
-
if ( empty( $repo_updates->response[ $file_path ]->url ) && ! empty( $plugin['external_url'] ) ) {
|
874 |
-
$repo_updates->response[ $file_path ]->url = $plugin['external_url'];
|
875 |
-
}
|
876 |
-
}
|
877 |
-
|
878 |
-
set_site_transient( 'update_plugins', $repo_updates );
|
879 |
-
}
|
880 |
-
|
881 |
-
/**
|
882 |
-
* Adjust the plugin directory name if necessary.
|
883 |
-
*
|
884 |
-
* The final destination directory of a plugin is based on the subdirectory name found in the
|
885 |
-
* (un)zipped source. In some cases - most notably GitHub repository plugin downloads -, this
|
886 |
-
* subdirectory name is not the same as the expected slug and the plugin will not be recognized
|
887 |
-
* as installed. This is fixed by adjusting the temporary unzipped source subdirectory name to
|
888 |
-
* the expected plugin slug.
|
889 |
-
*
|
890 |
-
* @since 2.5.0
|
891 |
-
*
|
892 |
-
* @param string $source Path to upgrade/zip-file-name.tmp/subdirectory/.
|
893 |
-
* @param string $remote_source Path to upgrade/zip-file-name.tmp.
|
894 |
-
* @param \WP_Upgrader $upgrader Instance of the upgrader which installs the plugin.
|
895 |
-
* @return string $source
|
896 |
-
*/
|
897 |
-
public function maybe_adjust_source_dir( $source, $remote_source, $upgrader ) {
|
898 |
-
if ( ! $this->is_tgmpa_page() || ! is_object( $GLOBALS['wp_filesystem'] ) ) {
|
899 |
-
return $source;
|
900 |
-
}
|
901 |
-
|
902 |
-
// Check for single file plugins.
|
903 |
-
$source_files = array_keys( $GLOBALS['wp_filesystem']->dirlist( $remote_source ) );
|
904 |
-
if ( 1 === count( $source_files ) && false === $GLOBALS['wp_filesystem']->is_dir( $source ) ) {
|
905 |
-
return $source;
|
906 |
-
}
|
907 |
-
|
908 |
-
// Multi-file plugin, let's see if the directory is correctly named.
|
909 |
-
$desired_slug = '';
|
910 |
-
|
911 |
-
// Figure out what the slug is supposed to be.
|
912 |
-
if ( false === $upgrader->bulk && ! empty( $upgrader->skin->options['extra']['slug'] ) ) {
|
913 |
-
$desired_slug = $upgrader->skin->options['extra']['slug'];
|
914 |
-
} else {
|
915 |
-
// Bulk installer contains less info, so fall back on the info registered here.
|
916 |
-
foreach ( $this->plugins as $slug => $plugin ) {
|
917 |
-
if ( ! empty( $upgrader->skin->plugin_names[ $upgrader->skin->i ] ) && $plugin['name'] === $upgrader->skin->plugin_names[ $upgrader->skin->i ] ) {
|
918 |
-
$desired_slug = $slug;
|
919 |
-
break;
|
920 |
-
}
|
921 |
-
}
|
922 |
-
unset( $slug, $plugin );
|
923 |
-
}
|
924 |
-
|
925 |
-
if ( ! empty( $desired_slug ) ) {
|
926 |
-
$subdir_name = untrailingslashit( str_replace( trailingslashit( $remote_source ), '', $source ) );
|
927 |
-
|
928 |
-
if ( ! empty( $subdir_name ) && $subdir_name !== $desired_slug ) {
|
929 |
-
$from = untrailingslashit( $source );
|
930 |
-
$to = trailingslashit( $remote_source ) . $desired_slug;
|
931 |
-
|
932 |
-
if ( true === $GLOBALS['wp_filesystem']->move( $from, $to ) ) {
|
933 |
-
return trailingslashit( $to );
|
934 |
-
} else {
|
935 |
-
return new WP_Error( 'rename_failed', esc_html__( 'The remote plugin package does not contain a folder with the desired slug and renaming did not work.', 'tgmpa' ) . ' ' . esc_html__( 'Please contact the plugin provider and ask them to package their plugin according to the WordPress guidelines.', 'tgmpa' ), array( 'found' => $subdir_name, 'expected' => $desired_slug ) );
|
936 |
-
}
|
937 |
-
} elseif ( empty( $subdir_name ) ) {
|
938 |
-
return new WP_Error( 'packaged_wrong', esc_html__( 'The remote plugin package consists of more than one file, but the files are not packaged in a folder.', 'tgmpa' ) . ' ' . esc_html__( 'Please contact the plugin provider and ask them to package their plugin according to the WordPress guidelines.', 'tgmpa' ), array( 'found' => $subdir_name, 'expected' => $desired_slug ) );
|
939 |
-
}
|
940 |
-
}
|
941 |
-
|
942 |
-
return $source;
|
943 |
-
}
|
944 |
-
|
945 |
-
/**
|
946 |
-
* Activate a single plugin and send feedback about the result to the screen.
|
947 |
-
*
|
948 |
-
* @since 2.5.0
|
949 |
-
*
|
950 |
-
* @param string $file_path Path within wp-plugins/ to main plugin file.
|
951 |
-
* @param string $slug Plugin slug.
|
952 |
-
* @param bool $automatic Whether this is an automatic activation after an install. Defaults to false.
|
953 |
-
* This determines the styling of the output messages.
|
954 |
-
* @return bool False if an error was encountered, true otherwise.
|
955 |
-
*/
|
956 |
-
protected function activate_single_plugin( $file_path, $slug, $automatic = false ) {
|
957 |
-
if ( $this->can_plugin_activate( $slug ) ) {
|
958 |
-
$activate = activate_plugin( $file_path );
|
959 |
-
|
960 |
-
if ( is_wp_error( $activate ) ) {
|
961 |
-
echo '<div id="message" class="error"><p>', wp_kses_post( $activate->get_error_message() ), '</p></div>',
|
962 |
-
'<p><a href="', esc_url( $this->get_tgmpa_url() ), '" target="_parent">', esc_html( $this->strings['return'] ), '</a></p>';
|
963 |
-
|
964 |
-
return false; // End it here if there is an error with activation.
|
965 |
-
} else {
|
966 |
-
if ( ! $automatic ) {
|
967 |
-
// Make sure message doesn't display again if bulk activation is performed
|
968 |
-
// immediately after a single activation.
|
969 |
-
if ( ! isset( $_POST['action'] ) ) { // WPCS: CSRF OK.
|
970 |
-
echo '<div id="message" class="updated"><p>', esc_html( $this->strings['activated_successfully'] ), ' <strong>', esc_html( $this->plugins[ $slug ]['name'] ), '.</strong></p></div>';
|
971 |
-
}
|
972 |
-
} else {
|
973 |
-
// Simpler message layout for use on the plugin install page.
|
974 |
-
echo '<p>', esc_html( $this->strings['plugin_activated'] ), '</p>';
|
975 |
-
}
|
976 |
-
}
|
977 |
-
} elseif ( $this->is_plugin_active( $slug ) ) {
|
978 |
-
// No simpler message format provided as this message should never be encountered
|
979 |
-
// on the plugin install page.
|
980 |
-
echo '<div id="message" class="error"><p>',
|
981 |
-
sprintf(
|
982 |
-
esc_html( $this->strings['plugin_already_active'] ),
|
983 |
-
'<strong>' . esc_html( $this->plugins[ $slug ]['name'] ) . '</strong>'
|
984 |
-
),
|
985 |
-
'</p></div>';
|
986 |
-
} elseif ( $this->does_plugin_require_update( $slug ) ) {
|
987 |
-
if ( ! $automatic ) {
|
988 |
-
// Make sure message doesn't display again if bulk activation is performed
|
989 |
-
// immediately after a single activation.
|
990 |
-
if ( ! isset( $_POST['action'] ) ) { // WPCS: CSRF OK.
|
991 |
-
echo '<div id="message" class="error"><p>',
|
992 |
-
sprintf(
|
993 |
-
esc_html( $this->strings['plugin_needs_higher_version'] ),
|
994 |
-
'<strong>' . esc_html( $this->plugins[ $slug ]['name'] ) . '</strong>'
|
995 |
-
),
|
996 |
-
'</p></div>';
|
997 |
-
}
|
998 |
-
} else {
|
999 |
-
// Simpler message layout for use on the plugin install page.
|
1000 |
-
echo '<p>', sprintf( esc_html( $this->strings['plugin_needs_higher_version'] ), esc_html( $this->plugins[ $slug ]['name'] ) ), '</p>';
|
1001 |
-
}
|
1002 |
-
}
|
1003 |
-
|
1004 |
-
return true;
|
1005 |
-
}
|
1006 |
-
|
1007 |
-
/**
|
1008 |
-
* Echoes required plugin notice.
|
1009 |
-
*
|
1010 |
-
* Outputs a message telling users that a specific plugin is required for
|
1011 |
-
* their theme. If appropriate, it includes a link to the form page where
|
1012 |
-
* users can install and activate the plugin.
|
1013 |
-
*
|
1014 |
-
* Returns early if we're on the Install page.
|
1015 |
-
*
|
1016 |
-
* @since 1.0.0
|
1017 |
-
*
|
1018 |
-
* @global object $current_screen
|
1019 |
-
*
|
1020 |
-
* @return null Returns early if we're on the Install page.
|
1021 |
-
*/
|
1022 |
-
public function notices() {
|
1023 |
-
// Remove nag on the install page / Return early if the nag message has been dismissed.
|
1024 |
-
if ( $this->is_tgmpa_page() || get_user_meta( get_current_user_id(), 'tgmpa_dismissed_notice_' . $this->id, true ) ) {
|
1025 |
-
return;
|
1026 |
-
}
|
1027 |
-
|
1028 |
-
// Store for the plugin slugs by message type.
|
1029 |
-
$message = array();
|
1030 |
-
|
1031 |
-
// Initialize counters used to determine plurality of action link texts.
|
1032 |
-
$install_link_count = 0;
|
1033 |
-
$update_link_count = 0;
|
1034 |
-
$activate_link_count = 0;
|
1035 |
-
|
1036 |
-
foreach ( $this->plugins as $slug => $plugin ) {
|
1037 |
-
if ( $this->is_plugin_active( $slug ) && false === $this->does_plugin_have_update( $slug ) ) {
|
1038 |
-
continue;
|
1039 |
-
}
|
1040 |
-
|
1041 |
-
if ( ! $this->is_plugin_installed( $slug ) ) {
|
1042 |
-
if ( current_user_can( 'install_plugins' ) ) {
|
1043 |
-
$install_link_count++;
|
1044 |
-
|
1045 |
-
if ( true === $plugin['required'] ) {
|
1046 |
-
$message['notice_can_install_required'][] = $slug;
|
1047 |
-
} else {
|
1048 |
-
$message['notice_can_install_recommended'][] = $slug;
|
1049 |
-
}
|
1050 |
-
} else {
|
1051 |
-
// Need higher privileges to install the plugin.
|
1052 |
-
$message['notice_cannot_install'][] = $slug;
|
1053 |
-
}
|
1054 |
-
} else {
|
1055 |
-
if ( ! $this->is_plugin_active( $slug ) && $this->can_plugin_activate( $slug ) ) {
|
1056 |
-
if ( current_user_can( 'activate_plugins' ) ) {
|
1057 |
-
$activate_link_count++;
|
1058 |
-
|
1059 |
-
if ( true === $plugin['required'] ) {
|
1060 |
-
$message['notice_can_activate_required'][] = $slug;
|
1061 |
-
} else {
|
1062 |
-
$message['notice_can_activate_recommended'][] = $slug;
|
1063 |
-
}
|
1064 |
-
} else {
|
1065 |
-
// Need higher privileges to activate the plugin.
|
1066 |
-
$message['notice_cannot_activate'][] = $slug;
|
1067 |
-
}
|
1068 |
-
}
|
1069 |
-
|
1070 |
-
if ( $this->does_plugin_require_update( $slug ) || false !== $this->does_plugin_have_update( $slug ) ) {
|
1071 |
-
|
1072 |
-
if ( current_user_can( 'install_plugins' ) ) {
|
1073 |
-
$update_link_count++;
|
1074 |
-
|
1075 |
-
if ( $this->does_plugin_require_update( $slug ) ) {
|
1076 |
-
$message['notice_ask_to_update'][] = $slug;
|
1077 |
-
} elseif ( false !== $this->does_plugin_have_update( $slug ) ) {
|
1078 |
-
$message['notice_ask_to_update_maybe'][] = $slug;
|
1079 |
-
}
|
1080 |
-
} else {
|
1081 |
-
// Need higher privileges to update the plugin.
|
1082 |
-
$message['notice_cannot_update'][] = $slug;
|
1083 |
-
}
|
1084 |
-
}
|
1085 |
-
}
|
1086 |
-
}
|
1087 |
-
unset( $slug, $plugin );
|
1088 |
-
|
1089 |
-
// If we have notices to display, we move forward.
|
1090 |
-
if ( ! empty( $message ) ) {
|
1091 |
-
krsort( $message ); // Sort messages.
|
1092 |
-
$rendered = '';
|
1093 |
-
|
1094 |
-
// As add_settings_error() wraps the final message in a <p> and as the final message can't be
|
1095 |
-
// filtered, using <p>'s in our html would render invalid html output.
|
1096 |
-
$line_template = '<span style="display: block; margin: 0.5em 0.5em 0 0; clear: both;">%s</span>' . "\n";
|
1097 |
-
|
1098 |
-
// If dismissable is false and a message is set, output it now.
|
1099 |
-
if ( ! $this->dismissable && ! empty( $this->dismiss_msg ) ) {
|
1100 |
-
$rendered .= sprintf( $line_template, wp_kses_post( $this->dismiss_msg ) );
|
1101 |
-
}
|
1102 |
-
|
1103 |
-
// Render the individual message lines for the notice.
|
1104 |
-
foreach ( $message as $type => $plugin_group ) {
|
1105 |
-
$linked_plugins = array();
|
1106 |
-
|
1107 |
-
// Get the external info link for a plugin if one is available.
|
1108 |
-
foreach ( $plugin_group as $plugin_slug ) {
|
1109 |
-
$linked_plugins[] = $this->get_info_link( $plugin_slug );
|
1110 |
-
}
|
1111 |
-
unset( $plugin_slug );
|
1112 |
-
|
1113 |
-
$count = count( $plugin_group );
|
1114 |
-
$linked_plugins = array_map( array( 'TGMPA_Utils', 'wrap_in_em' ), $linked_plugins );
|
1115 |
-
$last_plugin = array_pop( $linked_plugins ); // Pop off last name to prep for readability.
|
1116 |
-
$imploded = empty( $linked_plugins ) ? $last_plugin : ( implode( ', ', $linked_plugins ) . ' ' . esc_html_x( 'and', 'plugin A *and* plugin B', 'tgmpa' ) . ' ' . $last_plugin );
|
1117 |
-
|
1118 |
-
$rendered .= sprintf(
|
1119 |
-
$line_template,
|
1120 |
-
sprintf(
|
1121 |
-
translate_nooped_plural( $this->strings[ $type ], $count, 'tgmpa' ),
|
1122 |
-
$imploded,
|
1123 |
-
$count
|
1124 |
-
)
|
1125 |
-
);
|
1126 |
-
|
1127 |
-
if ( 0 === strpos( $type, 'notice_cannot' ) ) {
|
1128 |
-
$rendered .= $this->strings['contact_admin'];
|
1129 |
-
}
|
1130 |
-
}
|
1131 |
-
unset( $type, $plugin_group, $linked_plugins, $count, $last_plugin, $imploded );
|
1132 |
-
|
1133 |
-
// Setup action links.
|
1134 |
-
$action_links = array(
|
1135 |
-
'install' => '',
|
1136 |
-
'update' => '',
|
1137 |
-
'activate' => '',
|
1138 |
-
'dismiss' => $this->dismissable ? '<a href="' . esc_url( add_query_arg( 'tgmpa-dismiss', 'dismiss_admin_notices' ) ) . '" class="dismiss-notice" target="_parent">' . esc_html( $this->strings['dismiss'] ) . '</a>' : '',
|
1139 |
-
);
|
1140 |
-
|
1141 |
-
$link_template = '<a href="%2$s">%1$s</a>';
|
1142 |
-
|
1143 |
-
if ( current_user_can( 'install_plugins' ) ) {
|
1144 |
-
if ( $install_link_count > 0 ) {
|
1145 |
-
$action_links['install'] = sprintf(
|
1146 |
-
$link_template,
|
1147 |
-
translate_nooped_plural( $this->strings['install_link'], $install_link_count, 'tgmpa' ),
|
1148 |
-
esc_url( $this->get_tgmpa_status_url( 'install' ) )
|
1149 |
-
);
|
1150 |
-
}
|
1151 |
-
if ( $update_link_count > 0 ) {
|
1152 |
-
$action_links['update'] = sprintf(
|
1153 |
-
$link_template,
|
1154 |
-
translate_nooped_plural( $this->strings['update_link'], $update_link_count, 'tgmpa' ),
|
1155 |
-
esc_url( $this->get_tgmpa_status_url( 'update' ) )
|
1156 |
-
);
|
1157 |
-
}
|
1158 |
-
}
|
1159 |
-
|
1160 |
-
if ( current_user_can( 'activate_plugins' ) && $activate_link_count > 0 ) {
|
1161 |
-
$action_links['activate'] = sprintf(
|
1162 |
-
$link_template,
|
1163 |
-
translate_nooped_plural( $this->strings['activate_link'], $activate_link_count, 'tgmpa' ),
|
1164 |
-
esc_url( $this->get_tgmpa_status_url( 'activate' ) )
|
1165 |
-
);
|
1166 |
-
}
|
1167 |
-
|
1168 |
-
$action_links = apply_filters( 'tgmpa_notice_action_links', $action_links );
|
1169 |
-
|
1170 |
-
$action_links = array_filter( (array) $action_links ); // Remove any empty array items.
|
1171 |
-
|
1172 |
-
if ( ! empty( $action_links ) && is_array( $action_links ) ) {
|
1173 |
-
$action_links = sprintf( $line_template, implode( ' | ', $action_links ) );
|
1174 |
-
$rendered .= apply_filters( 'tgmpa_notice_rendered_action_links', $action_links );
|
1175 |
-
}
|
1176 |
-
|
1177 |
-
// Register the nag messages and prepare them to be processed.
|
1178 |
-
if ( ! empty( $this->strings['nag_type'] ) ) {
|
1179 |
-
add_settings_error( 'tgmpa', 'tgmpa', $rendered, sanitize_html_class( strtolower( $this->strings['nag_type'] ) ) );
|
1180 |
-
} else {
|
1181 |
-
$nag_class = version_compare( $this->wp_version, '3.8', '<' ) ? 'updated' : 'update-nag';
|
1182 |
-
add_settings_error( 'tgmpa', 'tgmpa', $rendered, $nag_class );
|
1183 |
-
}
|
1184 |
-
}
|
1185 |
-
|
1186 |
-
// Admin options pages already output settings_errors, so this is to avoid duplication.
|
1187 |
-
if ( 'options-general' !== $GLOBALS['current_screen']->parent_base ) {
|
1188 |
-
$this->display_settings_errors();
|
1189 |
-
}
|
1190 |
-
}
|
1191 |
-
|
1192 |
-
/**
|
1193 |
-
* Display settings errors and remove those which have been displayed to avoid duplicate messages showing
|
1194 |
-
*
|
1195 |
-
* @since 2.5.0
|
1196 |
-
*/
|
1197 |
-
protected function display_settings_errors() {
|
1198 |
-
global $wp_settings_errors;
|
1199 |
-
|
1200 |
-
settings_errors( 'tgmpa' );
|
1201 |
-
|
1202 |
-
foreach ( (array) $wp_settings_errors as $key => $details ) {
|
1203 |
-
if ( 'tgmpa' === $details['setting'] ) {
|
1204 |
-
unset( $wp_settings_errors[ $key ] );
|
1205 |
-
break;
|
1206 |
-
}
|
1207 |
-
}
|
1208 |
-
}
|
1209 |
-
|
1210 |
-
/**
|
1211 |
-
* Add dismissable admin notices.
|
1212 |
-
*
|
1213 |
-
* Appends a link to the admin nag messages. If clicked, the admin notice disappears and no longer is visible to users.
|
1214 |
-
*
|
1215 |
-
* @since 2.1.0
|
1216 |
-
*/
|
1217 |
-
public function dismiss() {
|
1218 |
-
if ( isset( $_GET['tgmpa-dismiss'] ) ) {
|
1219 |
-
update_user_meta( get_current_user_id(), 'tgmpa_dismissed_notice_' . $this->id, 1 );
|
1220 |
-
}
|
1221 |
-
}
|
1222 |
-
|
1223 |
-
/**
|
1224 |
-
* Add individual plugin to our collection of plugins.
|
1225 |
-
*
|
1226 |
-
* If the required keys are not set or the plugin has already
|
1227 |
-
* been registered, the plugin is not added.
|
1228 |
-
*
|
1229 |
-
* @since 2.0.0
|
1230 |
-
*
|
1231 |
-
* @param array|null $plugin Array of plugin arguments or null if invalid argument.
|
1232 |
-
* @return null Return early if incorrect argument.
|
1233 |
-
*/
|
1234 |
-
public function register( $plugin ) {
|
1235 |
-
if ( empty( $plugin['slug'] ) || empty( $plugin['name'] ) ) {
|
1236 |
-
return;
|
1237 |
-
}
|
1238 |
-
|
1239 |
-
if ( empty( $plugin['slug'] ) || ! is_string( $plugin['slug'] ) || isset( $this->plugins[ $plugin['slug'] ] ) ) {
|
1240 |
-
return;
|
1241 |
-
}
|
1242 |
-
|
1243 |
-
$defaults = array(
|
1244 |
-
'name' => '', // String
|
1245 |
-
'slug' => '', // String
|
1246 |
-
'source' => 'repo', // String
|
1247 |
-
'required' => false, // Boolean
|
1248 |
-
'version' => '', // String
|
1249 |
-
'force_activation' => false, // Boolean
|
1250 |
-
'force_deactivation' => false, // Boolean
|
1251 |
-
'external_url' => '', // String
|
1252 |
-
'is_callable' => '', // String|Array.
|
1253 |
-
);
|
1254 |
-
|
1255 |
-
// Prepare the received data.
|
1256 |
-
$plugin = wp_parse_args( $plugin, $defaults );
|
1257 |
-
|
1258 |
-
// Standardize the received slug.
|
1259 |
-
$plugin['slug'] = $this->sanitize_key( $plugin['slug'] );
|
1260 |
-
|
1261 |
-
// Forgive users for using string versions of booleans or floats for version number.
|
1262 |
-
$plugin['version'] = (string) $plugin['version'];
|
1263 |
-
$plugin['source'] = empty( $plugin['source'] ) ? 'repo' : $plugin['source'];
|
1264 |
-
$plugin['required'] = TGMPA_Utils::validate_bool( $plugin['required'] );
|
1265 |
-
$plugin['force_activation'] = TGMPA_Utils::validate_bool( $plugin['force_activation'] );
|
1266 |
-
$plugin['force_deactivation'] = TGMPA_Utils::validate_bool( $plugin['force_deactivation'] );
|
1267 |
-
|
1268 |
-
// Enrich the received data.
|
1269 |
-
$plugin['file_path'] = $this->_get_plugin_basename_from_slug( $plugin['slug'] );
|
1270 |
-
$plugin['source_type'] = $this->get_plugin_source_type( $plugin['source'] );
|
1271 |
-
|
1272 |
-
// Set the class properties.
|
1273 |
-
$this->plugins[ $plugin['slug'] ] = $plugin;
|
1274 |
-
$this->sort_order[ $plugin['slug'] ] = $plugin['name'];
|
1275 |
-
|
1276 |
-
// Should we add the force activation hook ?
|
1277 |
-
if ( true === $plugin['force_activation'] ) {
|
1278 |
-
$this->has_forced_activation = true;
|
1279 |
-
}
|
1280 |
-
|
1281 |
-
// Should we add the force deactivation hook ?
|
1282 |
-
if ( true === $plugin['force_deactivation'] ) {
|
1283 |
-
$this->has_forced_deactivation = true;
|
1284 |
-
}
|
1285 |
-
}
|
1286 |
-
|
1287 |
-
/**
|
1288 |
-
* Determine what type of source the plugin comes from.
|
1289 |
-
*
|
1290 |
-
* @since 2.5.0
|
1291 |
-
*
|
1292 |
-
* @param string $source The source of the plugin as provided, either empty (= WP repo), a file path
|
1293 |
-
* (= bundled) or an external URL.
|
1294 |
-
* @return string 'repo', 'external', or 'bundled'
|
1295 |
-
*/
|
1296 |
-
protected function get_plugin_source_type( $source ) {
|
1297 |
-
if ( 'repo' === $source || preg_match( self::WP_REPO_REGEX, $source ) ) {
|
1298 |
-
return 'repo';
|
1299 |
-
} elseif ( preg_match( self::IS_URL_REGEX, $source ) ) {
|
1300 |
-
return 'external';
|
1301 |
-
} else {
|
1302 |
-
return 'bundled';
|
1303 |
-
}
|
1304 |
-
}
|
1305 |
-
|
1306 |
-
/**
|
1307 |
-
* Sanitizes a string key.
|
1308 |
-
*
|
1309 |
-
* Near duplicate of WP Core `sanitize_key()`. The difference is that uppercase characters *are*
|
1310 |
-
* allowed, so as not to break upgrade paths from non-standard bundled plugins using uppercase
|
1311 |
-
* characters in the plugin directory path/slug. Silly them.
|
1312 |
-
*
|
1313 |
-
* @see https://developer.wordpress.org/reference/hooks/sanitize_key/
|
1314 |
-
*
|
1315 |
-
* @since 2.5.0
|
1316 |
-
*
|
1317 |
-
* @param string $key String key.
|
1318 |
-
* @return string Sanitized key
|
1319 |
-
*/
|
1320 |
-
public function sanitize_key( $key ) {
|
1321 |
-
$raw_key = $key;
|
1322 |
-
$key = preg_replace( '`[^A-Za-z0-9_-]`', '', $key );
|
1323 |
-
|
1324 |
-
/**
|
1325 |
-
* Filter a sanitized key string.
|
1326 |
-
*
|
1327 |
-
* @since 3.0.0
|
1328 |
-
*
|
1329 |
-
* @param string $key Sanitized key.
|
1330 |
-
* @param string $raw_key The key prior to sanitization.
|
1331 |
-
*/
|
1332 |
-
return apply_filters( 'tgmpa_sanitize_key', $key, $raw_key );
|
1333 |
-
}
|
1334 |
-
|
1335 |
-
/**
|
1336 |
-
* Amend default configuration settings.
|
1337 |
-
*
|
1338 |
-
* @since 2.0.0
|
1339 |
-
*
|
1340 |
-
* @param array $config Array of config options to pass as class properties.
|
1341 |
-
*/
|
1342 |
-
public function config( $config ) {
|
1343 |
-
$keys = array(
|
1344 |
-
'id',
|
1345 |
-
'default_path',
|
1346 |
-
'has_notices',
|
1347 |
-
'dismissable',
|
1348 |
-
'dismiss_msg',
|
1349 |
-
'menu',
|
1350 |
-
'parent_slug',
|
1351 |
-
'capability',
|
1352 |
-
'is_automatic',
|
1353 |
-
'message',
|
1354 |
-
'strings',
|
1355 |
-
);
|
1356 |
-
|
1357 |
-
foreach ( $keys as $key ) {
|
1358 |
-
if ( isset( $config[ $key ] ) ) {
|
1359 |
-
if ( is_array( $config[ $key ] ) ) {
|
1360 |
-
$this->$key = array_merge( $this->$key, $config[ $key ] );
|
1361 |
-
} else {
|
1362 |
-
$this->$key = $config[ $key ];
|
1363 |
-
}
|
1364 |
-
}
|
1365 |
-
}
|
1366 |
-
}
|
1367 |
-
|
1368 |
-
/**
|
1369 |
-
* Amend action link after plugin installation.
|
1370 |
-
*
|
1371 |
-
* @since 2.0.0
|
1372 |
-
*
|
1373 |
-
* @param array $install_actions Existing array of actions.
|
1374 |
-
* @return array Amended array of actions.
|
1375 |
-
*/
|
1376 |
-
public function actions( $install_actions ) {
|
1377 |
-
// Remove action links on the TGMPA install page.
|
1378 |
-
if ( $this->is_tgmpa_page() ) {
|
1379 |
-
return false;
|
1380 |
-
}
|
1381 |
-
|
1382 |
-
return $install_actions;
|
1383 |
-
}
|
1384 |
-
|
1385 |
-
/**
|
1386 |
-
* Flushes the plugins cache on theme switch to prevent stale entries
|
1387 |
-
* from remaining in the plugin table.
|
1388 |
-
*
|
1389 |
-
* @since 2.4.0
|
1390 |
-
*
|
1391 |
-
* @param bool $clear_update_cache Optional. Whether to clear the Plugin updates cache.
|
1392 |
-
* Parameter added in v2.5.0.
|
1393 |
-
*/
|
1394 |
-
public function flush_plugins_cache( $clear_update_cache = true ) {
|
1395 |
-
wp_clean_plugins_cache( $clear_update_cache );
|
1396 |
-
}
|
1397 |
-
|
1398 |
-
/**
|
1399 |
-
* Set file_path key for each installed plugin.
|
1400 |
-
*
|
1401 |
-
* @since 2.1.0
|
1402 |
-
*
|
1403 |
-
* @param string $plugin_slug Optional. If set, only (re-)populates the file path for that specific plugin.
|
1404 |
-
* Parameter added in v2.5.0.
|
1405 |
-
*/
|
1406 |
-
public function populate_file_path( $plugin_slug = '' ) {
|
1407 |
-
if ( ! empty( $plugin_slug ) && is_string( $plugin_slug ) && isset( $this->plugins[ $plugin_slug ] ) ) {
|
1408 |
-
$this->plugins[ $plugin_slug ]['file_path'] = $this->_get_plugin_basename_from_slug( $plugin_slug );
|
1409 |
-
} else {
|
1410 |
-
// Add file_path key for all plugins.
|
1411 |
-
foreach ( $this->plugins as $slug => $values ) {
|
1412 |
-
$this->plugins[ $slug ]['file_path'] = $this->_get_plugin_basename_from_slug( $slug );
|
1413 |
-
}
|
1414 |
-
}
|
1415 |
-
}
|
1416 |
-
|
1417 |
-
/**
|
1418 |
-
* Helper function to extract the file path of the plugin file from the
|
1419 |
-
* plugin slug, if the plugin is installed.
|
1420 |
-
*
|
1421 |
-
* @since 2.0.0
|
1422 |
-
*
|
1423 |
-
* @param string $slug Plugin slug (typically folder name) as provided by the developer.
|
1424 |
-
* @return string Either file path for plugin if installed, or just the plugin slug.
|
1425 |
-
*/
|
1426 |
-
protected function _get_plugin_basename_from_slug( $slug ) {
|
1427 |
-
$keys = array_keys( $this->get_plugins() );
|
1428 |
-
|
1429 |
-
foreach ( $keys as $key ) {
|
1430 |
-
if ( preg_match( '|^' . $slug . '/|', $key ) ) {
|
1431 |
-
return $key;
|
1432 |
-
}
|
1433 |
-
}
|
1434 |
-
|
1435 |
-
return $slug;
|
1436 |
-
}
|
1437 |
-
|
1438 |
-
/**
|
1439 |
-
* Retrieve plugin data, given the plugin name.
|
1440 |
-
*
|
1441 |
-
* Loops through the registered plugins looking for $name. If it finds it,
|
1442 |
-
* it returns the $data from that plugin. Otherwise, returns false.
|
1443 |
-
*
|
1444 |
-
* @since 2.1.0
|
1445 |
-
*
|
1446 |
-
* @param string $name Name of the plugin, as it was registered.
|
1447 |
-
* @param string $data Optional. Array key of plugin data to return. Default is slug.
|
1448 |
-
* @return string|boolean Plugin slug if found, false otherwise.
|
1449 |
-
*/
|
1450 |
-
public function _get_plugin_data_from_name( $name, $data = 'slug' ) {
|
1451 |
-
foreach ( $this->plugins as $values ) {
|
1452 |
-
if ( $name === $values['name'] && isset( $values[ $data ] ) ) {
|
1453 |
-
return $values[ $data ];
|
1454 |
-
}
|
1455 |
-
}
|
1456 |
-
|
1457 |
-
return false;
|
1458 |
-
}
|
1459 |
-
|
1460 |
-
/**
|
1461 |
-
* Retrieve the download URL for a package.
|
1462 |
-
*
|
1463 |
-
* @since 2.5.0
|
1464 |
-
*
|
1465 |
-
* @param string $slug Plugin slug.
|
1466 |
-
* @return string Plugin download URL or path to local file or empty string if undetermined.
|
1467 |
-
*/
|
1468 |
-
public function get_download_url( $slug ) {
|
1469 |
-
$dl_source = '';
|
1470 |
-
|
1471 |
-
switch ( $this->plugins[ $slug ]['source_type'] ) {
|
1472 |
-
case 'repo':
|
1473 |
-
return $this->get_wp_repo_download_url( $slug );
|
1474 |
-
case 'external':
|
1475 |
-
return $this->plugins[ $slug ]['source'];
|
1476 |
-
case 'bundled':
|
1477 |
-
return $this->default_path . $this->plugins[ $slug ]['source'];
|
1478 |
-
}
|
1479 |
-
|
1480 |
-
return $dl_source; // Should never happen.
|
1481 |
-
}
|
1482 |
-
|
1483 |
-
/**
|
1484 |
-
* Retrieve the download URL for a WP repo package.
|
1485 |
-
*
|
1486 |
-
* @since 2.5.0
|
1487 |
-
*
|
1488 |
-
* @param string $slug Plugin slug.
|
1489 |
-
* @return string Plugin download URL.
|
1490 |
-
*/
|
1491 |
-
protected function get_wp_repo_download_url( $slug ) {
|
1492 |
-
$source = '';
|
1493 |
-
$api = $this->get_plugins_api( $slug );
|
1494 |
-
|
1495 |
-
if ( false !== $api && isset( $api->download_link ) ) {
|
1496 |
-
$source = $api->download_link;
|
1497 |
-
}
|
1498 |
-
|
1499 |
-
return $source;
|
1500 |
-
}
|
1501 |
-
|
1502 |
-
/**
|
1503 |
-
* Try to grab information from WordPress API.
|
1504 |
-
*
|
1505 |
-
* @since 2.5.0
|
1506 |
-
*
|
1507 |
-
* @param string $slug Plugin slug.
|
1508 |
-
* @return object Plugins_api response object on success, WP_Error on failure.
|
1509 |
-
*/
|
1510 |
-
protected function get_plugins_api( $slug ) {
|
1511 |
-
static $api = array(); // Cache received responses.
|
1512 |
-
|
1513 |
-
if ( ! isset( $api[ $slug ] ) ) {
|
1514 |
-
if ( ! function_exists( 'plugins_api' ) ) {
|
1515 |
-
require_once ABSPATH . 'wp-admin/includes/plugin-install.php';
|
1516 |
-
}
|
1517 |
-
|
1518 |
-
$response = plugins_api( 'plugin_information', array( 'slug' => $slug, 'fields' => array( 'sections' => false ) ) );
|
1519 |
-
|
1520 |
-
$api[ $slug ] = false;
|
1521 |
-
|
1522 |
-
if ( is_wp_error( $response ) ) {
|
1523 |
-
wp_die( esc_html( $this->strings['oops'] ) );
|
1524 |
-
} else {
|
1525 |
-
$api[ $slug ] = $response;
|
1526 |
-
}
|
1527 |
-
}
|
1528 |
-
|
1529 |
-
return $api[ $slug ];
|
1530 |
-
}
|
1531 |
-
|
1532 |
-
/**
|
1533 |
-
* Retrieve a link to a plugin information page.
|
1534 |
-
*
|
1535 |
-
* @since 2.5.0
|
1536 |
-
*
|
1537 |
-
* @param string $slug Plugin slug.
|
1538 |
-
* @return string Fully formed html link to a plugin information page if available
|
1539 |
-
* or the plugin name if not.
|
1540 |
-
*/
|
1541 |
-
public function get_info_link( $slug ) {
|
1542 |
-
if ( ! empty( $this->plugins[ $slug ]['external_url'] ) && preg_match( self::IS_URL_REGEX, $this->plugins[ $slug ]['external_url'] ) ) {
|
1543 |
-
$link = sprintf(
|
1544 |
-
'<a href="%1$s" target="_blank">%2$s</a>',
|
1545 |
-
esc_url( $this->plugins[ $slug ]['external_url'] ),
|
1546 |
-
esc_html( $this->plugins[ $slug ]['name'] )
|
1547 |
-
);
|
1548 |
-
} elseif ( 'repo' === $this->plugins[ $slug ]['source_type'] ) {
|
1549 |
-
$url = add_query_arg(
|
1550 |
-
array(
|
1551 |
-
'tab' => 'plugin-information',
|
1552 |
-
'plugin' => urlencode( $slug ),
|
1553 |
-
'TB_iframe' => 'true',
|
1554 |
-
'width' => '640',
|
1555 |
-
'height' => '500',
|
1556 |
-
),
|
1557 |
-
self_admin_url( 'plugin-install.php' )
|
1558 |
-
);
|
1559 |
-
|
1560 |
-
$link = sprintf(
|
1561 |
-
'<a href="%1$s" class="thickbox">%2$s</a>',
|
1562 |
-
esc_url( $url ),
|
1563 |
-
esc_html( $this->plugins[ $slug ]['name'] )
|
1564 |
-
);
|
1565 |
-
} else {
|
1566 |
-
$link = esc_html( $this->plugins[ $slug ]['name'] ); // No hyperlink.
|
1567 |
-
}
|
1568 |
-
|
1569 |
-
return $link;
|
1570 |
-
}
|
1571 |
-
|
1572 |
-
/**
|
1573 |
-
* Determine if we're on the TGMPA Install page.
|
1574 |
-
*
|
1575 |
-
* @since 2.1.0
|
1576 |
-
*
|
1577 |
-
* @return boolean True when on the TGMPA page, false otherwise.
|
1578 |
-
*/
|
1579 |
-
protected function is_tgmpa_page() {
|
1580 |
-
return isset( $_GET['page'] ) && $this->menu === $_GET['page'];
|
1581 |
-
}
|
1582 |
-
|
1583 |
-
/**
|
1584 |
-
* Retrieve the URL to the TGMPA Install page.
|
1585 |
-
*
|
1586 |
-
* I.e. depending on the config settings passed something along the lines of:
|
1587 |
-
* http://example.com/wp-admin/themes.php?page=tgmpa-install-plugins
|
1588 |
-
*
|
1589 |
-
* @since 2.5.0
|
1590 |
-
*
|
1591 |
-
* @return string Properly encoded URL (not escaped).
|
1592 |
-
*/
|
1593 |
-
public function get_tgmpa_url() {
|
1594 |
-
static $url;
|
1595 |
-
|
1596 |
-
if ( ! isset( $url ) ) {
|
1597 |
-
$parent = $this->parent_slug;
|
1598 |
-
if ( false === strpos( $parent, '.php' ) ) {
|
1599 |
-
$parent = 'admin.php';
|
1600 |
-
}
|
1601 |
-
$url = add_query_arg(
|
1602 |
-
array(
|
1603 |
-
'page' => urlencode( $this->menu ),
|
1604 |
-
),
|
1605 |
-
self_admin_url( $parent )
|
1606 |
-
);
|
1607 |
-
}
|
1608 |
-
|
1609 |
-
return $url;
|
1610 |
-
}
|
1611 |
-
|
1612 |
-
/**
|
1613 |
-
* Retrieve the URL to the TGMPA Install page for a specific plugin status (view).
|
1614 |
-
*
|
1615 |
-
* I.e. depending on the config settings passed something along the lines of:
|
1616 |
-
* http://example.com/wp-admin/themes.php?page=tgmpa-install-plugins&plugin_status=install
|
1617 |
-
*
|
1618 |
-
* @since 2.5.0
|
1619 |
-
*
|
1620 |
-
* @param string $status Plugin status - either 'install', 'update' or 'activate'.
|
1621 |
-
* @return string Properly encoded URL (not escaped).
|
1622 |
-
*/
|
1623 |
-
public function get_tgmpa_status_url( $status ) {
|
1624 |
-
return add_query_arg(
|
1625 |
-
array(
|
1626 |
-
'plugin_status' => urlencode( $status ),
|
1627 |
-
),
|
1628 |
-
$this->get_tgmpa_url()
|
1629 |
-
);
|
1630 |
-
}
|
1631 |
-
|
1632 |
-
/**
|
1633 |
-
* Determine whether there are open actions for plugins registered with TGMPA.
|
1634 |
-
*
|
1635 |
-
* @since 2.5.0
|
1636 |
-
*
|
1637 |
-
* @return bool True if complete, i.e. no outstanding actions. False otherwise.
|
1638 |
-
*/
|
1639 |
-
public function is_tgmpa_complete() {
|
1640 |
-
$complete = true;
|
1641 |
-
foreach ( $this->plugins as $slug => $plugin ) {
|
1642 |
-
if ( ! $this->is_plugin_active( $slug ) || false !== $this->does_plugin_have_update( $slug ) ) {
|
1643 |
-
$complete = false;
|
1644 |
-
break;
|
1645 |
-
}
|
1646 |
-
}
|
1647 |
-
|
1648 |
-
return $complete;
|
1649 |
-
}
|
1650 |
-
|
1651 |
-
/**
|
1652 |
-
* Check if a plugin is installed. Does not take must-use plugins into account.
|
1653 |
-
*
|
1654 |
-
* @since 2.5.0
|
1655 |
-
*
|
1656 |
-
* @param string $slug Plugin slug.
|
1657 |
-
* @return bool True if installed, false otherwise.
|
1658 |
-
*/
|
1659 |
-
public function is_plugin_installed( $slug ) {
|
1660 |
-
$installed_plugins = $this->get_plugins(); // Retrieve a list of all installed plugins (WP cached).
|
1661 |
-
|
1662 |
-
return ( ! empty( $installed_plugins[ $this->plugins[ $slug ]['file_path'] ] ) );
|
1663 |
-
}
|
1664 |
-
|
1665 |
-
/**
|
1666 |
-
* Check if a plugin is active.
|
1667 |
-
*
|
1668 |
-
* @since 2.5.0
|
1669 |
-
*
|
1670 |
-
* @param string $slug Plugin slug.
|
1671 |
-
* @return bool True if active, false otherwise.
|
1672 |
-
*/
|
1673 |
-
public function is_plugin_active( $slug ) {
|
1674 |
-
return ( ( ! empty( $this->plugins[ $slug ]['is_callable'] ) && is_callable( $this->plugins[ $slug ]['is_callable'] ) ) || is_plugin_active( $this->plugins[ $slug ]['file_path'] ) );
|
1675 |
-
}
|
1676 |
-
|
1677 |
-
/**
|
1678 |
-
* Check if a plugin can be updated, i.e. if we have information on the minimum WP version required
|
1679 |
-
* available, check whether the current install meets them.
|
1680 |
-
*
|
1681 |
-
* @since 2.5.0
|
1682 |
-
*
|
1683 |
-
* @param string $slug Plugin slug.
|
1684 |
-
* @return bool True if OK to update, false otherwise.
|
1685 |
-
*/
|
1686 |
-
public function can_plugin_update( $slug ) {
|
1687 |
-
// We currently can't get reliable info on non-WP-repo plugins - issue #380.
|
1688 |
-
if ( 'repo' !== $this->plugins[ $slug ]['source_type'] ) {
|
1689 |
-
return true;
|
1690 |
-
}
|
1691 |
-
|
1692 |
-
$api = $this->get_plugins_api( $slug );
|
1693 |
-
|
1694 |
-
if ( false !== $api && isset( $api->requires ) ) {
|
1695 |
-
return version_compare( $GLOBALS['wp_version'], $api->requires, '>=' );
|
1696 |
-
}
|
1697 |
-
|
1698 |
-
// No usable info received from the plugins API, presume we can update.
|
1699 |
-
return true;
|
1700 |
-
}
|
1701 |
-
|
1702 |
-
/**
|
1703 |
-
* Check if a plugin can be activated, i.e. is not currently active and meets the minimum
|
1704 |
-
* plugin version requirements set in TGMPA (if any).
|
1705 |
-
*
|
1706 |
-
* @since 2.5.0
|
1707 |
-
*
|
1708 |
-
* @param string $slug Plugin slug.
|
1709 |
-
* @return bool True if OK to activate, false otherwise.
|
1710 |
-
*/
|
1711 |
-
public function can_plugin_activate( $slug ) {
|
1712 |
-
return ( ! $this->is_plugin_active( $slug ) && ! $this->does_plugin_require_update( $slug ) );
|
1713 |
-
}
|
1714 |
-
|
1715 |
-
/**
|
1716 |
-
* Retrieve the version number of an installed plugin.
|
1717 |
-
*
|
1718 |
-
* @since 2.5.0
|
1719 |
-
*
|
1720 |
-
* @param string $slug Plugin slug.
|
1721 |
-
* @return string Version number as string or an empty string if the plugin is not installed
|
1722 |
-
* or version unknown (plugins which don't comply with the plugin header standard).
|
1723 |
-
*/
|
1724 |
-
public function get_installed_version( $slug ) {
|
1725 |
-
$installed_plugins = $this->get_plugins(); // Retrieve a list of all installed plugins (WP cached).
|
1726 |
-
|
1727 |
-
if ( ! empty( $installed_plugins[ $this->plugins[ $slug ]['file_path'] ]['Version'] ) ) {
|
1728 |
-
return $installed_plugins[ $this->plugins[ $slug ]['file_path'] ]['Version'];
|
1729 |
-
}
|
1730 |
-
|
1731 |
-
return '';
|
1732 |
-
}
|
1733 |
-
|
1734 |
-
/**
|
1735 |
-
* Check whether a plugin complies with the minimum version requirements.
|
1736 |
-
*
|
1737 |
-
* @since 2.5.0
|
1738 |
-
*
|
1739 |
-
* @param string $slug Plugin slug.
|
1740 |
-
* @return bool True when a plugin needs to be updated, otherwise false.
|
1741 |
-
*/
|
1742 |
-
public function does_plugin_require_update( $slug ) {
|
1743 |
-
$installed_version = $this->get_installed_version( $slug );
|
1744 |
-
$minimum_version = $this->plugins[ $slug ]['version'];
|
1745 |
-
|
1746 |
-
return version_compare( $minimum_version, $installed_version, '>' );
|
1747 |
-
}
|
1748 |
-
|
1749 |
-
/**
|
1750 |
-
* Check whether there is an update available for a plugin.
|
1751 |
-
*
|
1752 |
-
* @since 2.5.0
|
1753 |
-
*
|
1754 |
-
* @param string $slug Plugin slug.
|
1755 |
-
* @return false|string Version number string of the available update or false if no update available.
|
1756 |
-
*/
|
1757 |
-
public function does_plugin_have_update( $slug ) {
|
1758 |
-
// Presume bundled and external plugins will point to a package which meets the minimum required version.
|
1759 |
-
if ( 'repo' !== $this->plugins[ $slug ]['source_type'] ) {
|
1760 |
-
if ( $this->does_plugin_require_update( $slug ) ) {
|
1761 |
-
return $this->plugins[ $slug ]['version'];
|
1762 |
-
}
|
1763 |
-
|
1764 |
-
return false;
|
1765 |
-
}
|
1766 |
-
|
1767 |
-
$repo_updates = get_site_transient( 'update_plugins' );
|
1768 |
-
|
1769 |
-
if ( isset( $repo_updates->response[ $this->plugins[ $slug ]['file_path'] ]->new_version ) ) {
|
1770 |
-
return $repo_updates->response[ $this->plugins[ $slug ]['file_path'] ]->new_version;
|
1771 |
-
}
|
1772 |
-
|
1773 |
-
return false;
|
1774 |
-
}
|
1775 |
-
|
1776 |
-
/**
|
1777 |
-
* Retrieve potential upgrade notice for a plugin.
|
1778 |
-
*
|
1779 |
-
* @since 2.5.0
|
1780 |
-
*
|
1781 |
-
* @param string $slug Plugin slug.
|
1782 |
-
* @return string The upgrade notice or an empty string if no message was available or provided.
|
1783 |
-
*/
|
1784 |
-
public function get_upgrade_notice( $slug ) {
|
1785 |
-
// We currently can't get reliable info on non-WP-repo plugins - issue #380.
|
1786 |
-
if ( 'repo' !== $this->plugins[ $slug ]['source_type'] ) {
|
1787 |
-
return '';
|
1788 |
-
}
|
1789 |
-
|
1790 |
-
$repo_updates = get_site_transient( 'update_plugins' );
|
1791 |
-
|
1792 |
-
if ( ! empty( $repo_updates->response[ $this->plugins[ $slug ]['file_path'] ]->upgrade_notice ) ) {
|
1793 |
-
return $repo_updates->response[ $this->plugins[ $slug ]['file_path'] ]->upgrade_notice;
|
1794 |
-
}
|
1795 |
-
|
1796 |
-
return '';
|
1797 |
-
}
|
1798 |
-
|
1799 |
-
/**
|
1800 |
-
* Wrapper around the core WP get_plugins function, making sure it's actually available.
|
1801 |
-
*
|
1802 |
-
* @since 2.5.0
|
1803 |
-
*
|
1804 |
-
* @param string $plugin_folder Optional. Relative path to single plugin folder.
|
1805 |
-
* @return array Array of installed plugins with plugin information.
|
1806 |
-
*/
|
1807 |
-
public function get_plugins( $plugin_folder = '' ) {
|
1808 |
-
if ( ! function_exists( 'get_plugins' ) ) {
|
1809 |
-
require_once ABSPATH . 'wp-admin/includes/plugin.php';
|
1810 |
-
}
|
1811 |
-
|
1812 |
-
return get_plugins( $plugin_folder );
|
1813 |
-
}
|
1814 |
-
|
1815 |
-
/**
|
1816 |
-
* Delete dismissable nag option when theme is switched.
|
1817 |
-
*
|
1818 |
-
* This ensures that the user(s) is/are again reminded via nag of required
|
1819 |
-
* and/or recommended plugins if they re-activate the theme.
|
1820 |
-
*
|
1821 |
-
* @since 2.1.1
|
1822 |
-
*/
|
1823 |
-
public function update_dismiss() {
|
1824 |
-
delete_metadata( 'user', null, 'tgmpa_dismissed_notice_' . $this->id, null, true );
|
1825 |
-
}
|
1826 |
-
|
1827 |
-
/**
|
1828 |
-
* Forces plugin activation if the parameter 'force_activation' is
|
1829 |
-
* set to true.
|
1830 |
-
*
|
1831 |
-
* This allows theme authors to specify certain plugins that must be
|
1832 |
-
* active at all times while using the current theme.
|
1833 |
-
*
|
1834 |
-
* Please take special care when using this parameter as it has the
|
1835 |
-
* potential to be harmful if not used correctly. Setting this parameter
|
1836 |
-
* to true will not allow the specified plugin to be deactivated unless
|
1837 |
-
* the user switches themes.
|
1838 |
-
*
|
1839 |
-
* @since 2.2.0
|
1840 |
-
*/
|
1841 |
-
public function force_activation() {
|
1842 |
-
foreach ( $this->plugins as $slug => $plugin ) {
|
1843 |
-
if ( true === $plugin['force_activation'] ) {
|
1844 |
-
if ( ! $this->is_plugin_installed( $slug ) ) {
|
1845 |
-
// Oops, plugin isn't there so iterate to next condition.
|
1846 |
-
continue;
|
1847 |
-
} elseif ( $this->can_plugin_activate( $slug ) ) {
|
1848 |
-
// There we go, activate the plugin.
|
1849 |
-
activate_plugin( $plugin['file_path'] );
|
1850 |
-
}
|
1851 |
-
}
|
1852 |
-
}
|
1853 |
-
}
|
1854 |
-
|
1855 |
-
/**
|
1856 |
-
* Forces plugin deactivation if the parameter 'force_deactivation'
|
1857 |
-
* is set to true.
|
1858 |
-
*
|
1859 |
-
* This allows theme authors to specify certain plugins that must be
|
1860 |
-
* deactivated upon switching from the current theme to another.
|
1861 |
-
*
|
1862 |
-
* Please take special care when using this parameter as it has the
|
1863 |
-
* potential to be harmful if not used correctly.
|
1864 |
-
*
|
1865 |
-
* @since 2.2.0
|
1866 |
-
*/
|
1867 |
-
public function force_deactivation() {
|
1868 |
-
foreach ( $this->plugins as $slug => $plugin ) {
|
1869 |
-
// Only proceed forward if the parameter is set to true and plugin is active.
|
1870 |
-
if ( true === $plugin['force_deactivation'] && $this->is_plugin_active( $slug ) ) {
|
1871 |
-
deactivate_plugins( $plugin['file_path'] );
|
1872 |
-
}
|
1873 |
-
}
|
1874 |
-
}
|
1875 |
-
|
1876 |
-
/**
|
1877 |
-
* Echo the current TGMPA version number to the page.
|
1878 |
-
*/
|
1879 |
-
public function show_tgmpa_version() {
|
1880 |
-
echo '<p style="float: right; padding: 0em 1.5em 0.5em 0;"><strong><small>',
|
1881 |
-
esc_html( sprintf( _x( 'TGMPA v%s', '%s = version number', 'tgmpa' ), self::TGMPA_VERSION ) ),
|
1882 |
-
'</small></strong></p>';
|
1883 |
-
}
|
1884 |
-
|
1885 |
-
/**
|
1886 |
-
* Returns the singleton instance of the class.
|
1887 |
-
*
|
1888 |
-
* @since 2.4.0
|
1889 |
-
*
|
1890 |
-
* @return object The TGM_Plugin_Activation object.
|
1891 |
-
*/
|
1892 |
-
public static function get_instance() {
|
1893 |
-
if ( ! isset( self::$instance ) && ! ( self::$instance instanceof self ) ) {
|
1894 |
-
self::$instance = new self();
|
1895 |
-
}
|
1896 |
-
|
1897 |
-
return self::$instance;
|
1898 |
-
}
|
1899 |
-
}
|
1900 |
-
|
1901 |
-
if ( ! function_exists( 'load_tgm_plugin_activation' ) ) {
|
1902 |
-
/**
|
1903 |
-
* Ensure only one instance of the class is ever invoked.
|
1904 |
-
*/
|
1905 |
-
function load_tgm_plugin_activation() {
|
1906 |
-
$GLOBALS['tgmpa'] = TGM_Plugin_Activation::get_instance();
|
1907 |
-
}
|
1908 |
-
}
|
1909 |
-
|
1910 |
-
if ( did_action( 'plugins_loaded' ) ) {
|
1911 |
-
load_tgm_plugin_activation();
|
1912 |
-
} else {
|
1913 |
-
add_action( 'plugins_loaded', 'load_tgm_plugin_activation' );
|
1914 |
-
}
|
1915 |
-
}
|
1916 |
-
|
1917 |
-
if ( ! function_exists( 'tgmpa' ) ) {
|
1918 |
-
/**
|
1919 |
-
* Helper function to register a collection of required plugins.
|
1920 |
-
*
|
1921 |
-
* @since 2.0.0
|
1922 |
-
* @api
|
1923 |
-
*
|
1924 |
-
* @param array $plugins An array of plugin arrays.
|
1925 |
-
* @param array $config Optional. An array of configuration values.
|
1926 |
-
*/
|
1927 |
-
function tgmpa( $plugins, $config = array() ) {
|
1928 |
-
$instance = call_user_func( array( get_class( $GLOBALS['tgmpa'] ), 'get_instance' ) );
|
1929 |
-
|
1930 |
-
foreach ( $plugins as $plugin ) {
|
1931 |
-
call_user_func( array( $instance, 'register' ), $plugin );
|
1932 |
-
}
|
1933 |
-
|
1934 |
-
if ( ! empty( $config ) && is_array( $config ) ) {
|
1935 |
-
// Send out notices for deprecated arguments passed.
|
1936 |
-
if ( isset( $config['notices'] ) ) {
|
1937 |
-
_deprecated_argument( __FUNCTION__, '2.2.0', 'The `notices` config parameter was renamed to `has_notices` in TGMPA 2.2.0. Please adjust your configuration.' );
|
1938 |
-
if ( ! isset( $config['has_notices'] ) ) {
|
1939 |
-
$config['has_notices'] = $config['notices'];
|
1940 |
-
}
|
1941 |
-
}
|
1942 |
-
|
1943 |
-
if ( isset( $config['parent_menu_slug'] ) ) {
|
1944 |
-
_deprecated_argument( __FUNCTION__, '2.4.0', 'The `parent_menu_slug` config parameter was removed in TGMPA 2.4.0. In TGMPA 2.5.0 an alternative was (re-)introduced. Please adjust your configuration. For more information visit the website: http://tgmpluginactivation.com/configuration/#h-configuration-options.' );
|
1945 |
-
}
|
1946 |
-
if ( isset( $config['parent_url_slug'] ) ) {
|
1947 |
-
_deprecated_argument( __FUNCTION__, '2.4.0', 'The `parent_url_slug` config parameter was removed in TGMPA 2.4.0. In TGMPA 2.5.0 an alternative was (re-)introduced. Please adjust your configuration. For more information visit the website: http://tgmpluginactivation.com/configuration/#h-configuration-options.' );
|
1948 |
-
}
|
1949 |
-
|
1950 |
-
call_user_func( array( $instance, 'config' ), $config );
|
1951 |
-
}
|
1952 |
-
}
|
1953 |
-
}
|
1954 |
-
|
1955 |
-
/**
|
1956 |
-
* WP_List_Table isn't always available. If it isn't available,
|
1957 |
-
* we load it here.
|
1958 |
-
*
|
1959 |
-
* @since 2.2.0
|
1960 |
-
*/
|
1961 |
-
if ( ! class_exists( 'WP_List_Table' ) ) {
|
1962 |
-
require_once ABSPATH . 'wp-admin/includes/class-wp-list-table.php';
|
1963 |
-
}
|
1964 |
-
|
1965 |
-
if ( ! class_exists( 'TGMPA_List_Table' ) ) {
|
1966 |
-
|
1967 |
-
/**
|
1968 |
-
* List table class for handling plugins.
|
1969 |
-
*
|
1970 |
-
* Extends the WP_List_Table class to provide a future-compatible
|
1971 |
-
* way of listing out all required/recommended plugins.
|
1972 |
-
*
|
1973 |
-
* Gives users an interface similar to the Plugin Administration
|
1974 |
-
* area with similar (albeit stripped down) capabilities.
|
1975 |
-
*
|
1976 |
-
* This class also allows for the bulk install of plugins.
|
1977 |
-
*
|
1978 |
-
* @since 2.2.0
|
1979 |
-
*
|
1980 |
-
* @package TGM-Plugin-Activation
|
1981 |
-
* @author Thomas Griffin
|
1982 |
-
* @author Gary Jones
|
1983 |
-
*/
|
1984 |
-
class TGMPA_List_Table extends WP_List_Table {
|
1985 |
-
/**
|
1986 |
-
* TGMPA instance.
|
1987 |
-
*
|
1988 |
-
* @since 2.5.0
|
1989 |
-
*
|
1990 |
-
* @var object
|
1991 |
-
*/
|
1992 |
-
protected $tgmpa;
|
1993 |
-
|
1994 |
-
/**
|
1995 |
-
* The currently chosen view.
|
1996 |
-
*
|
1997 |
-
* @since 2.5.0
|
1998 |
-
*
|
1999 |
-
* @var string One of: 'all', 'install', 'update', 'activate'
|
2000 |
-
*/
|
2001 |
-
public $view_context = 'all';
|
2002 |
-
|
2003 |
-
/**
|
2004 |
-
* The plugin counts for the various views.
|
2005 |
-
*
|
2006 |
-
* @since 2.5.0
|
2007 |
-
*
|
2008 |
-
* @var array
|
2009 |
-
*/
|
2010 |
-
protected $view_totals = array(
|
2011 |
-
'all' => 0,
|
2012 |
-
'install' => 0,
|
2013 |
-
'update' => 0,
|
2014 |
-
'activate' => 0,
|
2015 |
-
);
|
2016 |
-
|
2017 |
-
/**
|
2018 |
-
* References parent constructor and sets defaults for class.
|
2019 |
-
*
|
2020 |
-
* @since 2.2.0
|
2021 |
-
*/
|
2022 |
-
public function __construct() {
|
2023 |
-
$this->tgmpa = call_user_func( array( get_class( $GLOBALS['tgmpa'] ), 'get_instance' ) );
|
2024 |
-
|
2025 |
-
parent::__construct(
|
2026 |
-
array(
|
2027 |
-
'singular' => 'plugin',
|
2028 |
-
'plural' => 'plugins',
|
2029 |
-
'ajax' => false,
|
2030 |
-
)
|
2031 |
-
);
|
2032 |
-
|
2033 |
-
if ( isset( $_REQUEST['plugin_status'] ) && in_array( $_REQUEST['plugin_status'], array( 'install', 'update', 'activate' ), true ) ) {
|
2034 |
-
$this->view_context = sanitize_key( $_REQUEST['plugin_status'] );
|
2035 |
-
}
|
2036 |
-
|
2037 |
-
add_filter( 'tgmpa_table_data_items', array( $this, 'sort_table_items' ) );
|
2038 |
-
}
|
2039 |
-
|
2040 |
-
/**
|
2041 |
-
* Get a list of CSS classes for the <table> tag.
|
2042 |
-
*
|
2043 |
-
* Overruled to prevent the 'plural' argument from being added.
|
2044 |
-
*
|
2045 |
-
* @since 2.5.0
|
2046 |
-
*
|
2047 |
-
* @return array CSS classnames.
|
2048 |
-
*/
|
2049 |
-
public function get_table_classes() {
|
2050 |
-
return array( 'widefat', 'fixed' );
|
2051 |
-
}
|
2052 |
-
|
2053 |
-
/**
|
2054 |
-
* Gathers and renames all of our plugin information to be used by WP_List_Table to create our table.
|
2055 |
-
*
|
2056 |
-
* @since 2.2.0
|
2057 |
-
*
|
2058 |
-
* @return array $table_data Information for use in table.
|
2059 |
-
*/
|
2060 |
-
protected function _gather_plugin_data() {
|
2061 |
-
// Load thickbox for plugin links.
|
2062 |
-
$this->tgmpa->admin_init();
|
2063 |
-
$this->tgmpa->thickbox();
|
2064 |
-
|
2065 |
-
// Categorize the plugins which have open actions.
|
2066 |
-
$plugins = $this->categorize_plugins_to_views();
|
2067 |
-
|
2068 |
-
// Set the counts for the view links.
|
2069 |
-
$this->set_view_totals( $plugins );
|
2070 |
-
|
2071 |
-
// Prep variables for use and grab list of all installed plugins.
|
2072 |
-
$table_data = array();
|
2073 |
-
$i = 0;
|
2074 |
-
|
2075 |
-
// Redirect to the 'all' view if no plugins were found for the selected view context.
|
2076 |
-
if ( empty( $plugins[ $this->view_context ] ) ) {
|
2077 |
-
$this->view_context = 'all';
|
2078 |
-
}
|
2079 |
-
|
2080 |
-
foreach ( $plugins[ $this->view_context ] as $slug => $plugin ) {
|
2081 |
-
$table_data[ $i ]['sanitized_plugin'] = $plugin['name'];
|
2082 |
-
$table_data[ $i ]['slug'] = $slug;
|
2083 |
-
$table_data[ $i ]['plugin'] = '<strong>' . $this->tgmpa->get_info_link( $slug ) . '</strong>';
|
2084 |
-
$table_data[ $i ]['source'] = $this->get_plugin_source_type_text( $plugin['source_type'] );
|
2085 |
-
$table_data[ $i ]['type'] = $this->get_plugin_advise_type_text( $plugin['required'] );
|
2086 |
-
$table_data[ $i ]['status'] = $this->get_plugin_status_text( $slug );
|
2087 |
-
$table_data[ $i ]['installed_version'] = $this->tgmpa->get_installed_version( $slug );
|
2088 |
-
$table_data[ $i ]['minimum_version'] = $plugin['version'];
|
2089 |
-
$table_data[ $i ]['available_version'] = $this->tgmpa->does_plugin_have_update( $slug );
|
2090 |
-
|
2091 |
-
// Prep the upgrade notice info.
|
2092 |
-
$upgrade_notice = $this->tgmpa->get_upgrade_notice( $slug );
|
2093 |
-
if ( ! empty( $upgrade_notice ) ) {
|
2094 |
-
$table_data[ $i ]['upgrade_notice'] = $upgrade_notice;
|
2095 |
-
|
2096 |
-
add_action( "tgmpa_after_plugin_row_$slug", array( $this, 'wp_plugin_update_row' ), 10, 2 );
|
2097 |
-
}
|
2098 |
-
|
2099 |
-
$table_data[ $i ] = apply_filters( 'tgmpa_table_data_item', $table_data[ $i ], $plugin );
|
2100 |
-
|
2101 |
-
$i++;
|
2102 |
-
}
|
2103 |
-
|
2104 |
-
return $table_data;
|
2105 |
-
}
|
2106 |
-
|
2107 |
-
/**
|
2108 |
-
* Categorize the plugins which have open actions into views for the TGMPA page.
|
2109 |
-
*
|
2110 |
-
* @since 2.5.0
|
2111 |
-
*/
|
2112 |
-
protected function categorize_plugins_to_views() {
|
2113 |
-
$plugins = array(
|
2114 |
-
'all' => array(), // Meaning: all plugins which still have open actions.
|
2115 |
-
'install' => array(),
|
2116 |
-
'update' => array(),
|
2117 |
-
'activate' => array(),
|
2118 |
-
);
|
2119 |
-
|
2120 |
-
foreach ( $this->tgmpa->plugins as $slug => $plugin ) {
|
2121 |
-
if ( $this->tgmpa->is_plugin_active( $slug ) && false === $this->tgmpa->does_plugin_have_update( $slug ) ) {
|
2122 |
-
// No need to display plugins if they are installed, up-to-date and active.
|
2123 |
-
continue;
|
2124 |
-
} else {
|
2125 |
-
$plugins['all'][ $slug ] = $plugin;
|
2126 |
-
|
2127 |
-
if ( ! $this->tgmpa->is_plugin_installed( $slug ) ) {
|
2128 |
-
$plugins['install'][ $slug ] = $plugin;
|
2129 |
-
} else {
|
2130 |
-
if ( false !== $this->tgmpa->does_plugin_have_update( $slug ) ) {
|
2131 |
-
$plugins['update'][ $slug ] = $plugin;
|
2132 |
-
}
|
2133 |
-
|
2134 |
-
if ( $this->tgmpa->can_plugin_activate( $slug ) ) {
|
2135 |
-
$plugins['activate'][ $slug ] = $plugin;
|
2136 |
-
}
|
2137 |
-
}
|
2138 |
-
}
|
2139 |
-
}
|
2140 |
-
|
2141 |
-
return $plugins;
|
2142 |
-
}
|
2143 |
-
|
2144 |
-
/**
|
2145 |
-
* Set the counts for the view links.
|
2146 |
-
*
|
2147 |
-
* @since 2.5.0
|
2148 |
-
*
|
2149 |
-
* @param array $plugins Plugins order by view.
|
2150 |
-
*/
|
2151 |
-
protected function set_view_totals( $plugins ) {
|
2152 |
-
foreach ( $plugins as $type => $list ) {
|
2153 |
-
$this->view_totals[ $type ] = count( $list );
|
2154 |
-
}
|
2155 |
-
}
|
2156 |
-
|
2157 |
-
/**
|
2158 |
-
* Get the plugin required/recommended text string.
|
2159 |
-
*
|
2160 |
-
* @since 2.5.0
|
2161 |
-
*
|
2162 |
-
* @param string $required Plugin required setting.
|
2163 |
-
* @return string
|
2164 |
-
*/
|
2165 |
-
protected function get_plugin_advise_type_text( $required ) {
|
2166 |
-
if ( true === $required ) {
|
2167 |
-
return __( 'Required', 'tgmpa' );
|
2168 |
-
}
|
2169 |
-
|
2170 |
-
return __( 'Recommended', 'tgmpa' );
|
2171 |
-
}
|
2172 |
-
|
2173 |
-
/**
|
2174 |
-
* Get the plugin source type text string.
|
2175 |
-
*
|
2176 |
-
* @since 2.5.0
|
2177 |
-
*
|
2178 |
-
* @param string $type Plugin type.
|
2179 |
-
* @return string
|
2180 |
-
*/
|
2181 |
-
protected function get_plugin_source_type_text( $type ) {
|
2182 |
-
$string = '';
|
2183 |
-
|
2184 |
-
switch ( $type ) {
|
2185 |
-
case 'repo':
|
2186 |
-
$string = __( 'WordPress Repository', 'tgmpa' );
|
2187 |
-
break;
|
2188 |
-
case 'external':
|
2189 |
-
$string = __( 'External Source', 'tgmpa' );
|
2190 |
-
break;
|
2191 |
-
case 'bundled':
|
2192 |
-
$string = __( 'Pre-Packaged', 'tgmpa' );
|
2193 |
-
break;
|
2194 |
-
}
|
2195 |
-
|
2196 |
-
return $string;
|
2197 |
-
}
|
2198 |
-
|
2199 |
-
/**
|
2200 |
-
* Determine the plugin status message.
|
2201 |
-
*
|
2202 |
-
* @since 2.5.0
|
2203 |
-
*
|
2204 |
-
* @param string $slug Plugin slug.
|
2205 |
-
* @return string
|
2206 |
-
*/
|
2207 |
-
protected function get_plugin_status_text( $slug ) {
|
2208 |
-
if ( ! $this->tgmpa->is_plugin_installed( $slug ) ) {
|
2209 |
-
return __( 'Not Installed', 'tgmpa' );
|
2210 |
-
}
|
2211 |
-
|
2212 |
-
if ( ! $this->tgmpa->is_plugin_active( $slug ) ) {
|
2213 |
-
$install_status = __( 'Installed But Not Activated', 'tgmpa' );
|
2214 |
-
} else {
|
2215 |
-
$install_status = __( 'Active', 'tgmpa' );
|
2216 |
-
}
|
2217 |
-
|
2218 |
-
$update_status = '';
|
2219 |
-
|
2220 |
-
if ( $this->tgmpa->does_plugin_require_update( $slug ) && false === $this->tgmpa->does_plugin_have_update( $slug ) ) {
|
2221 |
-
$update_status = __( 'Required Update not Available', 'tgmpa' );
|
2222 |
-
|
2223 |
-
} elseif ( $this->tgmpa->does_plugin_require_update( $slug ) ) {
|
2224 |
-
$update_status = __( 'Requires Update', 'tgmpa' );
|
2225 |
-
|
2226 |
-
} elseif ( false !== $this->tgmpa->does_plugin_have_update( $slug ) ) {
|
2227 |
-
$update_status = __( 'Update recommended', 'tgmpa' );
|
2228 |
-
}
|
2229 |
-
|
2230 |
-
if ( '' === $update_status ) {
|
2231 |
-
return $install_status;
|
2232 |
-
}
|
2233 |
-
|
2234 |
-
return sprintf(
|
2235 |
-
_x( '%1$s, %2$s', '%1$s = install status, %2$s = update status', 'tgmpa' ),
|
2236 |
-
$install_status,
|
2237 |
-
$update_status
|
2238 |
-
);
|
2239 |
-
}
|
2240 |
-
|
2241 |
-
/**
|
2242 |
-
* Sort plugins by Required/Recommended type and by alphabetical plugin name within each type.
|
2243 |
-
*
|
2244 |
-
* @since 2.5.0
|
2245 |
-
*
|
2246 |
-
* @param array $items Prepared table items.
|
2247 |
-
* @return array Sorted table items.
|
2248 |
-
*/
|
2249 |
-
public function sort_table_items( $items ) {
|
2250 |
-
$type = array();
|
2251 |
-
$name = array();
|
2252 |
-
|
2253 |
-
foreach ( $items as $i => $plugin ) {
|
2254 |
-
$type[ $i ] = $plugin['type']; // Required / recommended.
|
2255 |
-
$name[ $i ] = $plugin['sanitized_plugin'];
|
2256 |
-
}
|
2257 |
-
|
2258 |
-
array_multisort( $type, SORT_DESC, $name, SORT_ASC, $items );
|
2259 |
-
|
2260 |
-
return $items;
|
2261 |
-
}
|
2262 |
-
|
2263 |
-
/**
|
2264 |
-
* Get an associative array ( id => link ) of the views available on this table.
|
2265 |
-
*
|
2266 |
-
* @since 2.5.0
|
2267 |
-
*
|
2268 |
-
* @return array
|
2269 |
-
*/
|
2270 |
-
public function get_views() {
|
2271 |
-
$status_links = array();
|
2272 |
-
|
2273 |
-
foreach ( $this->view_totals as $type => $count ) {
|
2274 |
-
if ( $count < 1 ) {
|
2275 |
-
continue;
|
2276 |
-
}
|
2277 |
-
|
2278 |
-
switch ( $type ) {
|
2279 |
-
case 'all':
|
2280 |
-
$text = _nx( 'All <span class="count">(%s)</span>', 'All <span class="count">(%s)</span>', $count, 'plugins', 'tgmpa' );
|
2281 |
-
break;
|
2282 |
-
case 'install':
|
2283 |
-
$text = _n( 'To Install <span class="count">(%s)</span>', 'To Install <span class="count">(%s)</span>', $count, 'tgmpa' );
|
2284 |
-
break;
|
2285 |
-
case 'update':
|
2286 |
-
$text = _n( 'Update Available <span class="count">(%s)</span>', 'Update Available <span class="count">(%s)</span>', $count, 'tgmpa' );
|
2287 |
-
break;
|
2288 |
-
case 'activate':
|
2289 |
-
$text = _n( 'To Activate <span class="count">(%s)</span>', 'To Activate <span class="count">(%s)</span>', $count, 'tgmpa' );
|
2290 |
-
break;
|
2291 |
-
default:
|
2292 |
-
$text = '';
|
2293 |
-
break;
|
2294 |
-
}
|
2295 |
-
|
2296 |
-
if ( ! empty( $text ) ) {
|
2297 |
-
|
2298 |
-
$status_links[ $type ] = sprintf(
|
2299 |
-
'<a href="%s"%s>%s</a>',
|
2300 |
-
esc_url( $this->tgmpa->get_tgmpa_status_url( $type ) ),
|
2301 |
-
( $type === $this->view_context ) ? ' class="current"' : '',
|
2302 |
-
sprintf( $text, number_format_i18n( $count ) )
|
2303 |
-
);
|
2304 |
-
}
|
2305 |
-
}
|
2306 |
-
|
2307 |
-
return $status_links;
|
2308 |
-
}
|
2309 |
-
|
2310 |
-
/**
|
2311 |
-
* Create default columns to display important plugin information
|
2312 |
-
* like type, action and status.
|
2313 |
-
*
|
2314 |
-
* @since 2.2.0
|
2315 |
-
*
|
2316 |
-
* @param array $item Array of item data.
|
2317 |
-
* @param string $column_name The name of the column.
|
2318 |
-
* @return string
|
2319 |
-
*/
|
2320 |
-
public function column_default( $item, $column_name ) {
|
2321 |
-
return $item[ $column_name ];
|
2322 |
-
}
|
2323 |
-
|
2324 |
-
/**
|
2325 |
-
* Required for bulk installing.
|
2326 |
-
*
|
2327 |
-
* Adds a checkbox for each plugin.
|
2328 |
-
*
|
2329 |
-
* @since 2.2.0
|
2330 |
-
*
|
2331 |
-
* @param array $item Array of item data.
|
2332 |
-
* @return string The input checkbox with all necessary info.
|
2333 |
-
*/
|
2334 |
-
public function column_cb( $item ) {
|
2335 |
-
return sprintf(
|
2336 |
-
'<input type="checkbox" name="%1$s[]" value="%2$s" id="%3$s" />',
|
2337 |
-
esc_attr( $this->_args['singular'] ),
|
2338 |
-
esc_attr( $item['slug'] ),
|
2339 |
-
esc_attr( $item['sanitized_plugin'] )
|
2340 |
-
);
|
2341 |
-
}
|
2342 |
-
|
2343 |
-
/**
|
2344 |
-
* Create default title column along with the action links.
|
2345 |
-
*
|
2346 |
-
* @since 2.2.0
|
2347 |
-
*
|
2348 |
-
* @param array $item Array of item data.
|
2349 |
-
* @return string The plugin name and action links.
|
2350 |
-
*/
|
2351 |
-
public function column_plugin( $item ) {
|
2352 |
-
return sprintf(
|
2353 |
-
'%1$s %2$s',
|
2354 |
-
$item['plugin'],
|
2355 |
-
$this->row_actions( $this->get_row_actions( $item ), true )
|
2356 |
-
);
|
2357 |
-
}
|
2358 |
-
|
2359 |
-
/**
|
2360 |
-
* Create version information column.
|
2361 |
-
*
|
2362 |
-
* @since 2.5.0
|
2363 |
-
*
|
2364 |
-
* @param array $item Array of item data.
|
2365 |
-
* @return string HTML-formatted version information.
|
2366 |
-
*/
|
2367 |
-
public function column_version( $item ) {
|
2368 |
-
$output = array();
|
2369 |
-
|
2370 |
-
if ( $this->tgmpa->is_plugin_installed( $item['slug'] ) ) {
|
2371 |
-
$installed = ! empty( $item['installed_version'] ) ? $item['installed_version'] : _x( 'unknown', 'as in: "version nr unknown"', 'tgmpa' );
|
2372 |
-
|
2373 |
-
$color = '';
|
2374 |
-
if ( ! empty( $item['minimum_version'] ) && $this->tgmpa->does_plugin_require_update( $item['slug'] ) ) {
|
2375 |
-
$color = ' color: #ff0000; font-weight: bold;';
|
2376 |
-
}
|
2377 |
-
|
2378 |
-
$output[] = sprintf(
|
2379 |
-
'<p><span style="min-width: 32px; text-align: right; float: right;%1$s">%2$s</span>' . __( 'Installed version:', 'tgmpa' ) . '</p>',
|
2380 |
-
$color,
|
2381 |
-
$installed
|
2382 |
-
);
|
2383 |
-
}
|
2384 |
-
|
2385 |
-
if ( ! empty( $item['minimum_version'] ) ) {
|
2386 |
-
$output[] = sprintf(
|
2387 |
-
'<p><span style="min-width: 32px; text-align: right; float: right;">%1$s</span>' . __( 'Minimum required version:', 'tgmpa' ) . '</p>',
|
2388 |
-
$item['minimum_version']
|
2389 |
-
);
|
2390 |
-
}
|
2391 |
-
|
2392 |
-
if ( ! empty( $item['available_version'] ) ) {
|
2393 |
-
$color = '';
|
2394 |
-
if ( ! empty( $item['minimum_version'] ) && version_compare( $item['available_version'], $item['minimum_version'], '>=' ) ) {
|
2395 |
-
$color = ' color: #71C671; font-weight: bold;';
|
2396 |
-
}
|
2397 |
-
|
2398 |
-
$output[] = sprintf(
|
2399 |
-
'<p><span style="min-width: 32px; text-align: right; float: right;%1$s">%2$s</span>' . __( 'Available version:', 'tgmpa' ) . '</p>',
|
2400 |
-
$color,
|
2401 |
-
$item['available_version']
|
2402 |
-
);
|
2403 |
-
}
|
2404 |
-
|
2405 |
-
if ( empty( $output ) ) {
|
2406 |
-
return ' '; // Let's not break the table layout.
|
2407 |
-
} else {
|
2408 |
-
return implode( "\n", $output );
|
2409 |
-
}
|
2410 |
-
}
|
2411 |
-
|
2412 |
-
/**
|
2413 |
-
* Sets default message within the plugins table if no plugins
|
2414 |
-
* are left for interaction.
|
2415 |
-
*
|
2416 |
-
* Hides the menu item to prevent the user from clicking and
|
2417 |
-
* getting a permissions error.
|
2418 |
-
*
|
2419 |
-
* @since 2.2.0
|
2420 |
-
*/
|
2421 |
-
public function no_items() {
|
2422 |
-
printf( wp_kses_post( __( 'No plugins to install, update or activate. <a href="%1$s">Return to the Dashboard</a>', 'tgmpa' ) ), esc_url( self_admin_url() ) );
|
2423 |
-
echo '<style type="text/css">#adminmenu .wp-submenu li.current { display: none !important; }</style>';
|
2424 |
-
}
|
2425 |
-
|
2426 |
-
/**
|
2427 |
-
* Output all the column information within the table.
|
2428 |
-
*
|
2429 |
-
* @since 2.2.0
|
2430 |
-
*
|
2431 |
-
* @return array $columns The column names.
|
2432 |
-
*/
|
2433 |
-
public function get_columns() {
|
2434 |
-
$columns = array(
|
2435 |
-
'cb' => '<input type="checkbox" />',
|
2436 |
-
'plugin' => __( 'Plugin', 'tgmpa' ),
|
2437 |
-
'source' => __( 'Source', 'tgmpa' ),
|
2438 |
-
'type' => __( 'Type', 'tgmpa' ),
|
2439 |
-
);
|
2440 |
-
|
2441 |
-
if ( 'all' === $this->view_context || 'update' === $this->view_context ) {
|
2442 |
-
$columns['version'] = __( 'Version', 'tgmpa' );
|
2443 |
-
$columns['status'] = __( 'Status', 'tgmpa' );
|
2444 |
-
}
|
2445 |
-
|
2446 |
-
return apply_filters( 'tgmpa_table_columns', $columns );
|
2447 |
-
}
|
2448 |
-
|
2449 |
-
/**
|
2450 |
-
* Get name of default primary column
|
2451 |
-
*
|
2452 |
-
* @since 2.5.0 / WP 4.3+ compatibility
|
2453 |
-
* @access protected
|
2454 |
-
*
|
2455 |
-
* @return string
|
2456 |
-
*/
|
2457 |
-
protected function get_default_primary_column_name() {
|
2458 |
-
return 'plugin';
|
2459 |
-
}
|
2460 |
-
|
2461 |
-
/**
|
2462 |
-
* Get the name of the primary column.
|
2463 |
-
*
|
2464 |
-
* @since 2.5.0 / WP 4.3+ compatibility
|
2465 |
-
* @access protected
|
2466 |
-
*
|
2467 |
-
* @return string The name of the primary column.
|
2468 |
-
*/
|
2469 |
-
protected function get_primary_column_name() {
|
2470 |
-
if ( method_exists( 'WP_List_Table', 'get_primary_column_name' ) ) {
|
2471 |
-
return parent::get_primary_column_name();
|
2472 |
-
} else {
|
2473 |
-
return $this->get_default_primary_column_name();
|
2474 |
-
}
|
2475 |
-
}
|
2476 |
-
|
2477 |
-
/**
|
2478 |
-
* Get the actions which are relevant for a specific plugin row.
|
2479 |
-
*
|
2480 |
-
* @since 2.5.0
|
2481 |
-
*
|
2482 |
-
* @param array $item Array of item data.
|
2483 |
-
* @return array Array with relevant action links.
|
2484 |
-
*/
|
2485 |
-
protected function get_row_actions( $item ) {
|
2486 |
-
$actions = array();
|
2487 |
-
$action_links = array();
|
2488 |
-
|
2489 |
-
// Display the 'Install' action link if the plugin is not yet available.
|
2490 |
-
if ( ! $this->tgmpa->is_plugin_installed( $item['slug'] ) ) {
|
2491 |
-
$actions['install'] = _x( 'Install %2$s', '%2$s = plugin name in screen reader markup', 'tgmpa' );
|
2492 |
-
} else {
|
2493 |
-
// Display the 'Update' action link if an update is available and WP complies with plugin minimum.
|
2494 |
-
if ( false !== $this->tgmpa->does_plugin_have_update( $item['slug'] ) && $this->tgmpa->can_plugin_update( $item['slug'] ) ) {
|
2495 |
-
$actions['update'] = _x( 'Update %2$s', '%2$s = plugin name in screen reader markup', 'tgmpa' );
|
2496 |
-
}
|
2497 |
-
|
2498 |
-
// Display the 'Activate' action link, but only if the plugin meets the minimum version.
|
2499 |
-
if ( $this->tgmpa->can_plugin_activate( $item['slug'] ) ) {
|
2500 |
-
$actions['activate'] = _x( 'Activate %2$s', '%2$s = plugin name in screen reader markup', 'tgmpa' );
|
2501 |
-
}
|
2502 |
-
}
|
2503 |
-
|
2504 |
-
// Create the actual links.
|
2505 |
-
foreach ( $actions as $action => $text ) {
|
2506 |
-
$nonce_url = wp_nonce_url(
|
2507 |
-
add_query_arg(
|
2508 |
-
array(
|
2509 |
-
'plugin' => urlencode( $item['slug'] ),
|
2510 |
-
'tgmpa-' . $action => $action . '-plugin',
|
2511 |
-
),
|
2512 |
-
$this->tgmpa->get_tgmpa_url()
|
2513 |
-
),
|
2514 |
-
'tgmpa-' . $action,
|
2515 |
-
'tgmpa-nonce'
|
2516 |
-
);
|
2517 |
-
|
2518 |
-
$action_links[ $action ] = sprintf(
|
2519 |
-
'<a href="%1$s">' . esc_html( $text ) . '</a>',
|
2520 |
-
esc_url( $nonce_url ),
|
2521 |
-
'<span class="screen-reader-text">' . esc_html( $item['sanitized_plugin'] ) . '</span>'
|
2522 |
-
);
|
2523 |
-
}
|
2524 |
-
|
2525 |
-
$prefix = ( defined( 'WP_NETWORK_ADMIN' ) && WP_NETWORK_ADMIN ) ? 'network_admin_' : '';
|
2526 |
-
return apply_filters( "tgmpa_{$prefix}plugin_action_links", array_filter( $action_links ), $item['slug'], $item, $this->view_context );
|
2527 |
-
}
|
2528 |
-
|
2529 |
-
/**
|
2530 |
-
* Generates content for a single row of the table.
|
2531 |
-
*
|
2532 |
-
* @since 2.5.0
|
2533 |
-
*
|
2534 |
-
* @param object $item The current item.
|
2535 |
-
*/
|
2536 |
-
public function single_row( $item ) {
|
2537 |
-
parent::single_row( $item );
|
2538 |
-
|
2539 |
-
/**
|
2540 |
-
* Fires after each specific row in the TGMPA Plugins list table.
|
2541 |
-
*
|
2542 |
-
* The dynamic portion of the hook name, `$item['slug']`, refers to the slug
|
2543 |
-
* for the plugin.
|
2544 |
-
*
|
2545 |
-
* @since 2.5.0
|
2546 |
-
*/
|
2547 |
-
do_action( "tgmpa_after_plugin_row_{$item['slug']}", $item['slug'], $item, $this->view_context );
|
2548 |
-
}
|
2549 |
-
|
2550 |
-
/**
|
2551 |
-
* Show the upgrade notice below a plugin row if there is one.
|
2552 |
-
*
|
2553 |
-
* @since 2.5.0
|
2554 |
-
*
|
2555 |
-
* @see /wp-admin/includes/update.php
|
2556 |
-
*
|
2557 |
-
* @param string $slug Plugin slug.
|
2558 |
-
* @param array $item The information available in this table row.
|
2559 |
-
* @return null Return early if upgrade notice is empty.
|
2560 |
-
*/
|
2561 |
-
public function wp_plugin_update_row( $slug, $item ) {
|
2562 |
-
if ( empty( $item['upgrade_notice'] ) ) {
|
2563 |
-
return;
|
2564 |
-
}
|
2565 |
-
|
2566 |
-
echo '
|
2567 |
-
<tr class="plugin-update-tr">
|
2568 |
-
<td colspan="', absint( $this->get_column_count() ), '" class="plugin-update colspanchange">
|
2569 |
-
<div class="update-message">',
|
2570 |
-
esc_html__( 'Upgrade message from the plugin author:', 'tgmpa' ),
|
2571 |
-
' <strong>', wp_kses_data( $item['upgrade_notice'] ), '</strong>
|
2572 |
-
</div>
|
2573 |
-
</td>
|
2574 |
-
</tr>';
|
2575 |
-
}
|
2576 |
-
|
2577 |
-
/**
|
2578 |
-
* Extra controls to be displayed between bulk actions and pagination.
|
2579 |
-
*
|
2580 |
-
* @since 2.5.0
|
2581 |
-
*
|
2582 |
-
* @param string $which 'top' or 'bottom' table navigation.
|
2583 |
-
*/
|
2584 |
-
public function extra_tablenav( $which ) {
|
2585 |
-
if ( 'bottom' === $which ) {
|
2586 |
-
$this->tgmpa->show_tgmpa_version();
|
2587 |
-
}
|
2588 |
-
}
|
2589 |
-
|
2590 |
-
/**
|
2591 |
-
* Defines the bulk actions for handling registered plugins.
|
2592 |
-
*
|
2593 |
-
* @since 2.2.0
|
2594 |
-
*
|
2595 |
-
* @return array $actions The bulk actions for the plugin install table.
|
2596 |
-
*/
|
2597 |
-
public function get_bulk_actions() {
|
2598 |
-
|
2599 |
-
$actions = array();
|
2600 |
-
|
2601 |
-
if ( 'update' !== $this->view_context && 'activate' !== $this->view_context ) {
|
2602 |
-
if ( current_user_can( 'install_plugins' ) ) {
|
2603 |
-
$actions['tgmpa-bulk-install'] = __( 'Install', 'tgmpa' );
|
2604 |
-
}
|
2605 |
-
}
|
2606 |
-
|
2607 |
-
if ( 'install' !== $this->view_context ) {
|
2608 |
-
if ( current_user_can( 'update_plugins' ) ) {
|
2609 |
-
$actions['tgmpa-bulk-update'] = __( 'Update', 'tgmpa' );
|
2610 |
-
}
|
2611 |
-
if ( current_user_can( 'activate_plugins' ) ) {
|
2612 |
-
$actions['tgmpa-bulk-activate'] = __( 'Activate', 'tgmpa' );
|
2613 |
-
}
|
2614 |
-
}
|
2615 |
-
|
2616 |
-
return $actions;
|
2617 |
-
}
|
2618 |
-
|
2619 |
-
/**
|
2620 |
-
* Processes bulk installation and activation actions.
|
2621 |
-
*
|
2622 |
-
* The bulk installation process looks for the $_POST information and passes that
|
2623 |
-
* through if a user has to use WP_Filesystem to enter their credentials.
|
2624 |
-
*
|
2625 |
-
* @since 2.2.0
|
2626 |
-
*/
|
2627 |
-
public function process_bulk_actions() {
|
2628 |
-
// Bulk installation process.
|
2629 |
-
if ( 'tgmpa-bulk-install' === $this->current_action() || 'tgmpa-bulk-update' === $this->current_action() ) {
|
2630 |
-
|
2631 |
-
check_admin_referer( 'bulk-' . $this->_args['plural'] );
|
2632 |
-
|
2633 |
-
$install_type = 'install';
|
2634 |
-
if ( 'tgmpa-bulk-update' === $this->current_action() ) {
|
2635 |
-
$install_type = 'update';
|
2636 |
-
}
|
2637 |
-
|
2638 |
-
$plugins_to_install = array();
|
2639 |
-
|
2640 |
-
// Did user actually select any plugins to install/update ?
|
2641 |
-
if ( empty( $_POST['plugin'] ) ) {
|
2642 |
-
if ( 'install' === $install_type ) {
|
2643 |
-
$message = __( 'No plugins were selected to be installed. No action taken.', 'tgmpa' );
|
2644 |
-
} else {
|
2645 |
-
$message = __( 'No plugins were selected to be updated. No action taken.', 'tgmpa' );
|
2646 |
-
}
|
2647 |
-
|
2648 |
-
echo '<div id="message" class="error"><p>', esc_html( $message ), '</p></div>';
|
2649 |
-
|
2650 |
-
return false;
|
2651 |
-
}
|
2652 |
-
|
2653 |
-
if ( is_array( $_POST['plugin'] ) ) {
|
2654 |
-
$plugins_to_install = (array) $_POST['plugin'];
|
2655 |
-
} elseif ( is_string( $_POST['plugin'] ) ) {
|
2656 |
-
// Received via Filesystem page - un-flatten array (WP bug #19643).
|
2657 |
-
$plugins_to_install = explode( ',', $_POST['plugin'] );
|
2658 |
-
}
|
2659 |
-
|
2660 |
-
// Sanitize the received input.
|
2661 |
-
$plugins_to_install = array_map( 'urldecode', $plugins_to_install );
|
2662 |
-
$plugins_to_install = array_map( array( $this->tgmpa, 'sanitize_key' ), $plugins_to_install );
|
2663 |
-
|
2664 |
-
// Validate the received input.
|
2665 |
-
foreach ( $plugins_to_install as $key => $slug ) {
|
2666 |
-
// Check if the plugin was registered with TGMPA and remove if not.
|
2667 |
-
if ( ! isset( $this->tgmpa->plugins[ $slug ] ) ) {
|
2668 |
-
unset( $plugins_to_install[ $key ] );
|
2669 |
-
continue;
|
2670 |
-
}
|
2671 |
-
|
2672 |
-
// For updates: make sure this is a plugin we *can* update (update available and WP version ok).
|
2673 |
-
if ( 'update' === $install_type && ( $this->tgmpa->is_plugin_installed( $slug ) && ( false === $this->tgmpa->does_plugin_have_update( $slug ) || ! $this->tgmpa->can_plugin_update( $slug ) ) ) ) {
|
2674 |
-
unset( $plugins_to_install[ $key ] );
|
2675 |
-
}
|
2676 |
-
}
|
2677 |
-
|
2678 |
-
// No need to proceed further if we have no plugins to handle.
|
2679 |
-
if ( empty( $plugins_to_install ) ) {
|
2680 |
-
if ( 'install' === $install_type ) {
|
2681 |
-
$message = __( 'No plugins are available to be installed at this time.', 'tgmpa' );
|
2682 |
-
} else {
|
2683 |
-
$message = __( 'No plugins are available to be updated at this time.', 'tgmpa' );
|
2684 |
-
}
|
2685 |
-
|
2686 |
-
echo '<div id="message" class="error"><p>', esc_html( $message ), '</p></div>';
|
2687 |
-
|
2688 |
-
return false;
|
2689 |
-
}
|
2690 |
-
|
2691 |
-
// Pass all necessary information if WP_Filesystem is needed.
|
2692 |
-
$url = wp_nonce_url(
|
2693 |
-
$this->tgmpa->get_tgmpa_url(),
|
2694 |
-
'bulk-' . $this->_args['plural']
|
2695 |
-
);
|
2696 |
-
|
2697 |
-
// Give validated data back to $_POST which is the only place the filesystem looks for extra fields.
|
2698 |
-
$_POST['plugin'] = implode( ',', $plugins_to_install ); // Work around for WP bug #19643.
|
2699 |
-
|
2700 |
-
$method = ''; // Leave blank so WP_Filesystem can populate it as necessary.
|
2701 |
-
$fields = array_keys( $_POST ); // Extra fields to pass to WP_Filesystem.
|
2702 |
-
|
2703 |
-
if ( false === ( $creds = request_filesystem_credentials( esc_url_raw( $url ), $method, false, false, $fields ) ) ) {
|
2704 |
-
return true; // Stop the normal page form from displaying, credential request form will be shown.
|
2705 |
-
}
|
2706 |
-
|
2707 |
-
// Now we have some credentials, setup WP_Filesystem.
|
2708 |
-
if ( ! WP_Filesystem( $creds ) ) {
|
2709 |
-
// Our credentials were no good, ask the user for them again.
|
2710 |
-
request_filesystem_credentials( esc_url_raw( $url ), $method, true, false, $fields );
|
2711 |
-
|
2712 |
-
return true;
|
2713 |
-
}
|
2714 |
-
|
2715 |
-
/* If we arrive here, we have the filesystem */
|
2716 |
-
|
2717 |
-
// Store all information in arrays since we are processing a bulk installation.
|
2718 |
-
$names = array();
|
2719 |
-
$sources = array(); // Needed for installs.
|
2720 |
-
$file_paths = array(); // Needed for upgrades.
|
2721 |
-
$to_inject = array(); // Information to inject into the update_plugins transient.
|
2722 |
-
|
2723 |
-
// Prepare the data for validated plugins for the install/upgrade.
|
2724 |
-
foreach ( $plugins_to_install as $slug ) {
|
2725 |
-
$name = $this->tgmpa->plugins[ $slug ]['name'];
|
2726 |
-
$source = $this->tgmpa->get_download_url( $slug );
|
2727 |
-
|
2728 |
-
if ( ! empty( $name ) && ! empty( $source ) ) {
|
2729 |
-
$names[] = $name;
|
2730 |
-
|
2731 |
-
switch ( $install_type ) {
|
2732 |
-
|
2733 |
-
case 'install':
|
2734 |
-
$sources[] = $source;
|
2735 |
-
break;
|
2736 |
-
|
2737 |
-
case 'update':
|
2738 |
-
$file_paths[] = $this->tgmpa->plugins[ $slug ]['file_path'];
|
2739 |
-
$to_inject[ $slug ] = $this->tgmpa->plugins[ $slug ];
|
2740 |
-
$to_inject[ $slug ]['source'] = $source;
|
2741 |
-
break;
|
2742 |
-
}
|
2743 |
-
}
|
2744 |
-
}
|
2745 |
-
unset( $slug, $name, $source );
|
2746 |
-
|
2747 |
-
// Create a new instance of TGMPA_Bulk_Installer.
|
2748 |
-
$installer = new TGMPA_Bulk_Installer(
|
2749 |
-
new TGMPA_Bulk_Installer_Skin(
|
2750 |
-
array(
|
2751 |
-
'url' => esc_url_raw( $this->tgmpa->get_tgmpa_url() ),
|
2752 |
-
'nonce' => 'bulk-' . $this->_args['plural'],
|
2753 |
-
'names' => $names,
|
2754 |
-
'install_type' => $install_type,
|
2755 |
-
)
|
2756 |
-
)
|
2757 |
-
);
|
2758 |
-
|
2759 |
-
// Wrap the install process with the appropriate HTML.
|
2760 |
-
echo '<div class="tgmpa wrap">',
|
2761 |
-
'<h2>', esc_html( get_admin_page_title() ), '</h2>';
|
2762 |
-
|
2763 |
-
// Process the bulk installation submissions.
|
2764 |
-
add_filter( 'upgrader_source_selection', array( $this->tgmpa, 'maybe_adjust_source_dir' ), 1, 3 );
|
2765 |
-
|
2766 |
-
if ( 'tgmpa-bulk-update' === $this->current_action() ) {
|
2767 |
-
// Inject our info into the update transient.
|
2768 |
-
$this->tgmpa->inject_update_info( $to_inject );
|
2769 |
-
|
2770 |
-
$installer->bulk_upgrade( $file_paths );
|
2771 |
-
} else {
|
2772 |
-
$installer->bulk_install( $sources );
|
2773 |
-
}
|
2774 |
-
|
2775 |
-
remove_filter( 'upgrader_source_selection', array( $this->tgmpa, 'maybe_adjust_source_dir' ), 1, 3 );
|
2776 |
-
|
2777 |
-
echo '</div>';
|
2778 |
-
|
2779 |
-
return true;
|
2780 |
-
}
|
2781 |
-
|
2782 |
-
// Bulk activation process.
|
2783 |
-
if ( 'tgmpa-bulk-activate' === $this->current_action() ) {
|
2784 |
-
check_admin_referer( 'bulk-' . $this->_args['plural'] );
|
2785 |
-
|
2786 |
-
// Did user actually select any plugins to activate ?
|
2787 |
-
if ( empty( $_POST['plugin'] ) ) {
|
2788 |
-
echo '<div id="message" class="error"><p>', esc_html__( 'No plugins were selected to be activated. No action taken.', 'tgmpa' ), '</p></div>';
|
2789 |
-
|
2790 |
-
return false;
|
2791 |
-
}
|
2792 |
-
|
2793 |
-
// Grab plugin data from $_POST.
|
2794 |
-
$plugins = array();
|
2795 |
-
if ( isset( $_POST['plugin'] ) ) {
|
2796 |
-
$plugins = array_map( 'urldecode', (array) $_POST['plugin'] );
|
2797 |
-
$plugins = array_map( array( $this->tgmpa, 'sanitize_key' ), $plugins );
|
2798 |
-
}
|
2799 |
-
|
2800 |
-
$plugins_to_activate = array();
|
2801 |
-
$plugin_names = array();
|
2802 |
-
|
2803 |
-
// Grab the file paths for the selected & inactive plugins from the registration array.
|
2804 |
-
foreach ( $plugins as $slug ) {
|
2805 |
-
if ( $this->tgmpa->can_plugin_activate( $slug ) ) {
|
2806 |
-
$plugins_to_activate[] = $this->tgmpa->plugins[ $slug ]['file_path'];
|
2807 |
-
$plugin_names[] = $this->tgmpa->plugins[ $slug ]['name'];
|
2808 |
-
}
|
2809 |
-
}
|
2810 |
-
unset( $slug );
|
2811 |
-
|
2812 |
-
// Return early if there are no plugins to activate.
|
2813 |
-
if ( empty( $plugins_to_activate ) ) {
|
2814 |
-
echo '<div id="message" class="error"><p>', esc_html__( 'No plugins are available to be activated at this time.', 'tgmpa' ), '</p></div>';
|
2815 |
-
|
2816 |
-
return false;
|
2817 |
-
}
|
2818 |
-
|
2819 |
-
// Now we are good to go - let's start activating plugins.
|
2820 |
-
$activate = activate_plugins( $plugins_to_activate );
|
2821 |
-
|
2822 |
-
if ( is_wp_error( $activate ) ) {
|
2823 |
-
echo '<div id="message" class="error"><p>', wp_kses_post( $activate->get_error_message() ), '</p></div>';
|
2824 |
-
} else {
|
2825 |
-
$count = count( $plugin_names ); // Count so we can use _n function.
|
2826 |
-
$plugin_names = array_map( array( 'TGMPA_Utils', 'wrap_in_strong' ), $plugin_names );
|
2827 |
-
$last_plugin = array_pop( $plugin_names ); // Pop off last name to prep for readability.
|
2828 |
-
$imploded = empty( $plugin_names ) ? $last_plugin : ( implode( ', ', $plugin_names ) . ' ' . esc_html_x( 'and', 'plugin A *and* plugin B', 'tgmpa' ) . ' ' . $last_plugin );
|
2829 |
-
|
2830 |
-
printf( // WPCS: xss ok.
|
2831 |
-
'<div id="message" class="updated"><p>%1$s %2$s.</p></div>',
|
2832 |
-
esc_html( _n( 'The following plugin was activated successfully:', 'The following plugins were activated successfully:', $count, 'tgmpa' ) ),
|
2833 |
-
$imploded
|
2834 |
-
);
|
2835 |
-
|
2836 |
-
// Update recently activated plugins option.
|
2837 |
-
$recent = (array) get_option( 'recently_activated' );
|
2838 |
-
foreach ( $plugins_to_activate as $plugin => $time ) {
|
2839 |
-
if ( isset( $recent[ $plugin ] ) ) {
|
2840 |
-
unset( $recent[ $plugin ] );
|
2841 |
-
}
|
2842 |
-
}
|
2843 |
-
update_option( 'recently_activated', $recent );
|
2844 |
-
}
|
2845 |
-
|
2846 |
-
unset( $_POST ); // Reset the $_POST variable in case user wants to perform one action after another.
|
2847 |
-
|
2848 |
-
return true;
|
2849 |
-
}
|
2850 |
-
|
2851 |
-
return false;
|
2852 |
-
}
|
2853 |
-
|
2854 |
-
/**
|
2855 |
-
* Prepares all of our information to be outputted into a usable table.
|
2856 |
-
*
|
2857 |
-
* @since 2.2.0
|
2858 |
-
*/
|
2859 |
-
public function prepare_items() {
|
2860 |
-
$columns = $this->get_columns(); // Get all necessary column information.
|
2861 |
-
$hidden = array(); // No columns to hide, but we must set as an array.
|
2862 |
-
$sortable = array(); // No reason to make sortable columns.
|
2863 |
-
$primary = $this->get_primary_column_name(); // Column which has the row actions.
|
2864 |
-
$this->_column_headers = array( $columns, $hidden, $sortable, $primary ); // Get all necessary column headers.
|
2865 |
-
|
2866 |
-
// Process our bulk activations here.
|
2867 |
-
if ( 'tgmpa-bulk-activate' === $this->current_action() ) {
|
2868 |
-
$this->process_bulk_actions();
|
2869 |
-
}
|
2870 |
-
|
2871 |
-
// Store all of our plugin data into $items array so WP_List_Table can use it.
|
2872 |
-
$this->items = apply_filters( 'tgmpa_table_data_items', $this->_gather_plugin_data() );
|
2873 |
-
}
|
2874 |
-
|
2875 |
-
/* *********** DEPRECATED METHODS *********** */
|
2876 |
-
|
2877 |
-
/**
|
2878 |
-
* Retrieve plugin data, given the plugin name.
|
2879 |
-
*
|
2880 |
-
* @since 2.2.0
|
2881 |
-
* @deprecated 2.5.0 use {@see TGM_Plugin_Activation::_get_plugin_data_from_name()} instead.
|
2882 |
-
* @see TGM_Plugin_Activation::_get_plugin_data_from_name()
|
2883 |
-
*
|
2884 |
-
* @param string $name Name of the plugin, as it was registered.
|
2885 |
-
* @param string $data Optional. Array key of plugin data to return. Default is slug.
|
2886 |
-
* @return string|boolean Plugin slug if found, false otherwise.
|
2887 |
-
*/
|
2888 |
-
protected function _get_plugin_data_from_name( $name, $data = 'slug' ) {
|
2889 |
-
_deprecated_function( __FUNCTION__, 'TGMPA 2.5.0', 'TGM_Plugin_Activation::_get_plugin_data_from_name()' );
|
2890 |
-
|
2891 |
-
return $this->tgmpa->_get_plugin_data_from_name( $name, $data );
|
2892 |
-
}
|
2893 |
-
}
|
2894 |
-
}
|
2895 |
-
|
2896 |
-
|
2897 |
-
if ( ! class_exists( 'TGM_Bulk_Installer' ) ) {
|
2898 |
-
|
2899 |
-
/**
|
2900 |
-
* Hack: Prevent TGMPA v2.4.1- bulk installer class from being loaded if 2.4.1- is loaded after 2.5+.
|
2901 |
-
*/
|
2902 |
-
class TGM_Bulk_Installer {
|
2903 |
-
}
|
2904 |
-
}
|
2905 |
-
if ( ! class_exists( 'TGM_Bulk_Installer_Skin' ) ) {
|
2906 |
-
|
2907 |
-
/**
|
2908 |
-
* Hack: Prevent TGMPA v2.4.1- bulk installer skin class from being loaded if 2.4.1- is loaded after 2.5+.
|
2909 |
-
*/
|
2910 |
-
class TGM_Bulk_Installer_Skin {
|
2911 |
-
}
|
2912 |
-
}
|
2913 |
-
|
2914 |
-
/**
|
2915 |
-
* The WP_Upgrader file isn't always available. If it isn't available,
|
2916 |
-
* we load it here.
|
2917 |
-
*
|
2918 |
-
* We check to make sure no action or activation keys are set so that WordPress
|
2919 |
-
* does not try to re-include the class when processing upgrades or installs outside
|
2920 |
-
* of the class.
|
2921 |
-
*
|
2922 |
-
* @since 2.2.0
|
2923 |
-
*/
|
2924 |
-
add_action( 'admin_init', 'tgmpa_load_bulk_installer' );
|
2925 |
-
if ( ! function_exists( 'tgmpa_load_bulk_installer' ) ) {
|
2926 |
-
/**
|
2927 |
-
* Load bulk installer
|
2928 |
-
*/
|
2929 |
-
function tgmpa_load_bulk_installer() {
|
2930 |
-
// Silently fail if 2.5+ is loaded *after* an older version.
|
2931 |
-
if ( ! isset( $GLOBALS['tgmpa'] ) ) {
|
2932 |
-
return;
|
2933 |
-
}
|
2934 |
-
|
2935 |
-
// Get TGMPA class instance.
|
2936 |
-
$tgmpa_instance = call_user_func( array( get_class( $GLOBALS['tgmpa'] ), 'get_instance' ) );
|
2937 |
-
|
2938 |
-
if ( isset( $_GET['page'] ) && $tgmpa_instance->menu === $_GET['page'] ) {
|
2939 |
-
if ( ! class_exists( 'Plugin_Upgrader', false ) ) {
|
2940 |
-
require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
|
2941 |
-
}
|
2942 |
-
|
2943 |
-
if ( ! class_exists( 'TGMPA_Bulk_Installer' ) ) {
|
2944 |
-
|
2945 |
-
/**
|
2946 |
-
* Installer class to handle bulk plugin installations.
|
2947 |
-
*
|
2948 |
-
* Extends WP_Upgrader and customizes to suit the installation of multiple
|
2949 |
-
* plugins.
|
2950 |
-
*
|
2951 |
-
* @since 2.2.0
|
2952 |
-
*
|
2953 |
-
* @internal Since 2.5.0 the class is an extension of Plugin_Upgrader rather than WP_Upgrader
|
2954 |
-
* @internal Since 2.5.2 the class has been renamed from TGM_Bulk_Installer to TGMPA_Bulk_Installer.
|
2955 |
-
* This was done to prevent backward compatibility issues with v2.3.6.
|
2956 |
-
*
|
2957 |
-
* @package TGM-Plugin-Activation
|
2958 |
-
* @author Thomas Griffin
|
2959 |
-
* @author Gary Jones
|
2960 |
-
*/
|
2961 |
-
class TGMPA_Bulk_Installer extends Plugin_Upgrader {
|
2962 |
-
/**
|
2963 |
-
* Holds result of bulk plugin installation.
|
2964 |
-
*
|
2965 |
-
* @since 2.2.0
|
2966 |
-
*
|
2967 |
-
* @var string
|
2968 |
-
*/
|
2969 |
-
public $result;
|
2970 |
-
|
2971 |
-
/**
|
2972 |
-
* Flag to check if bulk installation is occurring or not.
|
2973 |
-
*
|
2974 |
-
* @since 2.2.0
|
2975 |
-
*
|
2976 |
-
* @var boolean
|
2977 |
-
*/
|
2978 |
-
public $bulk = false;
|
2979 |
-
|
2980 |
-
/**
|
2981 |
-
* TGMPA instance
|
2982 |
-
*
|
2983 |
-
* @since 2.5.0
|
2984 |
-
*
|
2985 |
-
* @var object
|
2986 |
-
*/
|
2987 |
-
protected $tgmpa;
|
2988 |
-
|
2989 |
-
/**
|
2990 |
-
* Whether or not the destination directory needs to be cleared ( = on update).
|
2991 |
-
*
|
2992 |
-
* @since 2.5.0
|
2993 |
-
*
|
2994 |
-
* @var bool
|
2995 |
-
*/
|
2996 |
-
protected $clear_destination = false;
|
2997 |
-
|
2998 |
-
/**
|
2999 |
-
* References parent constructor and sets defaults for class.
|
3000 |
-
*
|
3001 |
-
* @since 2.2.0
|
3002 |
-
*
|
3003 |
-
* @param \Bulk_Upgrader_Skin|null $skin Installer skin.
|
3004 |
-
*/
|
3005 |
-
public function __construct( $skin = null ) {
|
3006 |
-
// Get TGMPA class instance.
|
3007 |
-
$this->tgmpa = call_user_func( array( get_class( $GLOBALS['tgmpa'] ), 'get_instance' ) );
|
3008 |
-
|
3009 |
-
parent::__construct( $skin );
|
3010 |
-
|
3011 |
-
if ( isset( $this->skin->options['install_type'] ) && 'update' === $this->skin->options['install_type'] ) {
|
3012 |
-
$this->clear_destination = true;
|
3013 |
-
}
|
3014 |
-
|
3015 |
-
if ( $this->tgmpa->is_automatic ) {
|
3016 |
-
$this->activate_strings();
|
3017 |
-
}
|
3018 |
-
|
3019 |
-
add_action( 'upgrader_process_complete', array( $this->tgmpa, 'populate_file_path' ) );
|
3020 |
-
}
|
3021 |
-
|
3022 |
-
/**
|
3023 |
-
* Sets the correct activation strings for the installer skin to use.
|
3024 |
-
*
|
3025 |
-
* @since 2.2.0
|
3026 |
-
*/
|
3027 |
-
public function activate_strings() {
|
3028 |
-
$this->strings['activation_failed'] = __( 'Plugin activation failed.', 'tgmpa' );
|
3029 |
-
$this->strings['activation_success'] = __( 'Plugin activated successfully.', 'tgmpa' );
|
3030 |
-
}
|
3031 |
-
|
3032 |
-
/**
|
3033 |
-
* Performs the actual installation of each plugin.
|
3034 |
-
*
|
3035 |
-
* @since 2.2.0
|
3036 |
-
*
|
3037 |
-
* @see WP_Upgrader::run()
|
3038 |
-
*
|
3039 |
-
* @param array $options The installation config options.
|
3040 |
-
* @return null|array Return early if error, array of installation data on success.
|
3041 |
-
*/
|
3042 |
-
public function run( $options ) {
|
3043 |
-
$result = parent::run( $options );
|
3044 |
-
|
3045 |
-
// Reset the strings in case we changed one during automatic activation.
|
3046 |
-
if ( $this->tgmpa->is_automatic ) {
|
3047 |
-
if ( 'update' === $this->skin->options['install_type'] ) {
|
3048 |
-
$this->upgrade_strings();
|
3049 |
-
} else {
|
3050 |
-
$this->install_strings();
|
3051 |
-
}
|
3052 |
-
}
|
3053 |
-
|
3054 |
-
return $result;
|
3055 |
-
}
|
3056 |
-
|
3057 |
-
/**
|
3058 |
-
* Processes the bulk installation of plugins.
|
3059 |
-
*
|
3060 |
-
* @since 2.2.0
|
3061 |
-
*
|
3062 |
-
* @internal This is basically a near identical copy of the WP Core Plugin_Upgrader::bulk_upgrade()
|
3063 |
-
* method, with minor adjustments to deal with new installs instead of upgrades.
|
3064 |
-
* For ease of future synchronizations, the adjustments are clearly commented, but no other
|
3065 |
-
* comments are added. Code style has been made to comply.
|
3066 |
-
*
|
3067 |
-
* @see Plugin_Upgrader::bulk_upgrade()
|
3068 |
-
* @see https://core.trac.wordpress.org/browser/tags/4.2.1/src/wp-admin/includes/class-wp-upgrader.php#L838
|
3069 |
-
*
|
3070 |
-
* @param array $plugins The plugin sources needed for installation.
|
3071 |
-
* @param array $args Arbitrary passed extra arguments.
|
3072 |
-
* @return string|bool Install confirmation messages on success, false on failure.
|
3073 |
-
*/
|
3074 |
-
public function bulk_install( $plugins, $args = array() ) {
|
3075 |
-
// [TGMPA + ] Hook auto-activation in.
|
3076 |
-
add_filter( 'upgrader_post_install', array( $this, 'auto_activate' ), 10 );
|
3077 |
-
|
3078 |
-
$defaults = array(
|
3079 |
-
'clear_update_cache' => true,
|
3080 |
-
);
|
3081 |
-
$parsed_args = wp_parse_args( $args, $defaults );
|
3082 |
-
|
3083 |
-
$this->init();
|
3084 |
-
$this->bulk = true;
|
3085 |
-
|
3086 |
-
$this->install_strings(); // [TGMPA + ] adjusted.
|
3087 |
-
|
3088 |
-
/* [TGMPA - ] $current = get_site_transient( 'update_plugins' ); */
|
3089 |
-
|
3090 |
-
/* [TGMPA - ] add_filter('upgrader_clear_destination', array($this, 'delete_old_plugin'), 10, 4); */
|
3091 |
-
|
3092 |
-
$this->skin->header();
|
3093 |
-
|
3094 |
-
// Connect to the Filesystem first.
|
3095 |
-
$res = $this->fs_connect( array( WP_CONTENT_DIR, WP_PLUGIN_DIR ) );
|
3096 |
-
if ( ! $res ) {
|
3097 |
-
$this->skin->footer();
|
3098 |
-
|
3099 |
-
return false;
|
3100 |
-
}
|
3101 |
-
|
3102 |
-
$this->skin->bulk_header();
|
3103 |
-
|
3104 |
-
// Only start maintenance mode if:
|
3105 |
-
// - running Multisite and there are one or more plugins specified, OR
|
3106 |
-
// - a plugin with an update available is currently active.
|
3107 |
-
// @TODO: For multisite, maintenance mode should only kick in for individual sites if at all possible.
|
3108 |
-
$maintenance = ( is_multisite() && ! empty( $plugins ) );
|
3109 |
-
|
3110 |
-
/*
|
3111 |
-
[TGMPA - ]
|
3112 |
-
foreach ( $plugins as $plugin )
|
3113 |
-
$maintenance = $maintenance || ( is_plugin_active( $plugin ) && isset( $current->response[ $plugin] ) );
|
3114 |
-
*/
|
3115 |
-
if ( $maintenance ) {
|
3116 |
-
$this->maintenance_mode( true );
|
3117 |
-
}
|
3118 |
-
|
3119 |
-
$results = array();
|
3120 |
-
|
3121 |
-
$this->update_count = count( $plugins );
|
3122 |
-
$this->update_current = 0;
|
3123 |
-
foreach ( $plugins as $plugin ) {
|
3124 |
-
$this->update_current++;
|
3125 |
-
|
3126 |
-
/*
|
3127 |
-
[TGMPA - ]
|
3128 |
-
$this->skin->plugin_info = get_plugin_data( WP_PLUGIN_DIR . '/' . $plugin, false, true);
|
3129 |
-
|
3130 |
-
if ( !isset( $current->response[ $plugin ] ) ) {
|
3131 |
-
$this->skin->set_result('up_to_date');
|
3132 |
-
$this->skin->before();
|
3133 |
-
$this->skin->feedback('up_to_date');
|
3134 |
-
$this->skin->after();
|
3135 |
-
$results[$plugin] = true;
|
3136 |
-
continue;
|
3137 |
-
}
|
3138 |
-
|
3139 |
-
// Get the URL to the zip file
|
3140 |
-
$r = $current->response[ $plugin ];
|
3141 |
-
|
3142 |
-
$this->skin->plugin_active = is_plugin_active($plugin);
|
3143 |
-
*/
|
3144 |
-
|
3145 |
-
$result = $this->run( array(
|
3146 |
-
'package' => $plugin, // [TGMPA + ] adjusted.
|
3147 |
-
'destination' => WP_PLUGIN_DIR,
|
3148 |
-
'clear_destination' => false, // [TGMPA + ] adjusted.
|
3149 |
-
'clear_working' => true,
|
3150 |
-
'is_multi' => true,
|
3151 |
-
'hook_extra' => array(
|
3152 |
-
'plugin' => $plugin,
|
3153 |
-
),
|
3154 |
-
) );
|
3155 |
-
|
3156 |
-
$results[ $plugin ] = $this->result;
|
3157 |
-
|
3158 |
-
// Prevent credentials auth screen from displaying multiple times.
|
3159 |
-
if ( false === $result ) {
|
3160 |
-
break;
|
3161 |
-
}
|
3162 |
-
} //end foreach $plugins
|
3163 |
-
|
3164 |
-
$this->maintenance_mode( false );
|
3165 |
-
|
3166 |
-
/**
|
3167 |
-
* Fires when the bulk upgrader process is complete.
|
3168 |
-
*
|
3169 |
-
* @since WP 3.6.0 / TGMPA 2.5.0
|
3170 |
-
*
|
3171 |
-
* @param Plugin_Upgrader $this Plugin_Upgrader instance. In other contexts, $this, might
|
3172 |
-
* be a Theme_Upgrader or Core_Upgrade instance.
|
3173 |
-
* @param array $data {
|
3174 |
-
* Array of bulk item update data.
|
3175 |
-
*
|
3176 |
-
* @type string $action Type of action. Default 'update'.
|
3177 |
-
* @type string $type Type of update process. Accepts 'plugin', 'theme', or 'core'.
|
3178 |
-
* @type bool $bulk Whether the update process is a bulk update. Default true.
|
3179 |
-
* @type array $packages Array of plugin, theme, or core packages to update.
|
3180 |
-
* }
|
3181 |
-
*/
|
3182 |
-
do_action( 'upgrader_process_complete', $this, array(
|
3183 |
-
'action' => 'install', // [TGMPA + ] adjusted.
|
3184 |
-
'type' => 'plugin',
|
3185 |
-
'bulk' => true,
|
3186 |
-
'plugins' => $plugins,
|
3187 |
-
) );
|
3188 |
-
|
3189 |
-
$this->skin->bulk_footer();
|
3190 |
-
|
3191 |
-
$this->skin->footer();
|
3192 |
-
|
3193 |
-
// Cleanup our hooks, in case something else does a upgrade on this connection.
|
3194 |
-
/* [TGMPA - ] remove_filter('upgrader_clear_destination', array($this, 'delete_old_plugin')); */
|
3195 |
-
|
3196 |
-
// [TGMPA + ] Remove our auto-activation hook.
|
3197 |
-
remove_filter( 'upgrader_post_install', array( $this, 'auto_activate' ), 10 );
|
3198 |
-
|
3199 |
-
// Force refresh of plugin update information.
|
3200 |
-
wp_clean_plugins_cache( $parsed_args['clear_update_cache'] );
|
3201 |
-
|
3202 |
-
return $results;
|
3203 |
-
}
|
3204 |
-
|
3205 |
-
/**
|
3206 |
-
* Handle a bulk upgrade request.
|
3207 |
-
*
|
3208 |
-
* @since 2.5.0
|
3209 |
-
*
|
3210 |
-
* @see Plugin_Upgrader::bulk_upgrade()
|
3211 |
-
*
|
3212 |
-
* @param array $plugins The local WP file_path's of the plugins which should be upgraded.
|
3213 |
-
* @param array $args Arbitrary passed extra arguments.
|
3214 |
-
* @return string|bool Install confirmation messages on success, false on failure.
|
3215 |
-
*/
|
3216 |
-
public function bulk_upgrade( $plugins, $args = array() ) {
|
3217 |
-
|
3218 |
-
add_filter( 'upgrader_post_install', array( $this, 'auto_activate' ), 10 );
|
3219 |
-
|
3220 |
-
$result = parent::bulk_upgrade( $plugins, $args );
|
3221 |
-
|
3222 |
-
remove_filter( 'upgrader_post_install', array( $this, 'auto_activate' ), 10 );
|
3223 |
-
|
3224 |
-
return $result;
|
3225 |
-
}
|
3226 |
-
|
3227 |
-
/**
|
3228 |
-
* Abuse a filter to auto-activate plugins after installation.
|
3229 |
-
*
|
3230 |
-
* Hooked into the 'upgrader_post_install' filter hook.
|
3231 |
-
*
|
3232 |
-
* @since 2.5.0
|
3233 |
-
*
|
3234 |
-
* @param bool $bool The value we need to give back (true).
|
3235 |
-
* @return bool
|
3236 |
-
*/
|
3237 |
-
public function auto_activate( $bool ) {
|
3238 |
-
// Only process the activation of installed plugins if the automatic flag is set to true.
|
3239 |
-
if ( $this->tgmpa->is_automatic ) {
|
3240 |
-
// Flush plugins cache so the headers of the newly installed plugins will be read correctly.
|
3241 |
-
wp_clean_plugins_cache();
|
3242 |
-
|
3243 |
-
// Get the installed plugin file.
|
3244 |
-
$plugin_info = $this->plugin_info();
|
3245 |
-
|
3246 |
-
// Don't try to activate on upgrade of active plugin as WP will do this already.
|
3247 |
-
if ( ! is_plugin_active( $plugin_info ) ) {
|
3248 |
-
$activate = activate_plugin( $plugin_info );
|
3249 |
-
|
3250 |
-
// Adjust the success string based on the activation result.
|
3251 |
-
$this->strings['process_success'] = $this->strings['process_success'] . "<br />\n";
|
3252 |
-
|
3253 |
-
if ( is_wp_error( $activate ) ) {
|
3254 |
-
$this->skin->error( $activate );
|
3255 |
-
$this->strings['process_success'] .= $this->strings['activation_failed'];
|
3256 |
-
} else {
|
3257 |
-
$this->strings['process_success'] .= $this->strings['activation_success'];
|
3258 |
-
}
|
3259 |
-
}
|
3260 |
-
}
|
3261 |
-
|
3262 |
-
return $bool;
|
3263 |
-
}
|
3264 |
-
}
|
3265 |
-
}
|
3266 |
-
|
3267 |
-
if ( ! class_exists( 'TGMPA_Bulk_Installer_Skin' ) ) {
|
3268 |
-
|
3269 |
-
/**
|
3270 |
-
* Installer skin to set strings for the bulk plugin installations..
|
3271 |
-
*
|
3272 |
-
* Extends Bulk_Upgrader_Skin and customizes to suit the installation of multiple
|
3273 |
-
* plugins.
|
3274 |
-
*
|
3275 |
-
* @since 2.2.0
|
3276 |
-
*
|
3277 |
-
* @internal Since 2.5.2 the class has been renamed from TGM_Bulk_Installer_Skin to
|
3278 |
-
* TGMPA_Bulk_Installer_Skin.
|
3279 |
-
* This was done to prevent backward compatibility issues with v2.3.6.
|
3280 |
-
*
|
3281 |
-
* @see https://core.trac.wordpress.org/browser/trunk/src/wp-admin/includes/class-wp-upgrader-skins.php
|
3282 |
-
*
|
3283 |
-
* @package TGM-Plugin-Activation
|
3284 |
-
* @author Thomas Griffin
|
3285 |
-
* @author Gary Jones
|
3286 |
-
*/
|
3287 |
-
class TGMPA_Bulk_Installer_Skin extends Bulk_Upgrader_Skin {
|
3288 |
-
/**
|
3289 |
-
* Holds plugin info for each individual plugin installation.
|
3290 |
-
*
|
3291 |
-
* @since 2.2.0
|
3292 |
-
*
|
3293 |
-
* @var array
|
3294 |
-
*/
|
3295 |
-
public $plugin_info = array();
|
3296 |
-
|
3297 |
-
/**
|
3298 |
-
* Holds names of plugins that are undergoing bulk installations.
|
3299 |
-
*
|
3300 |
-
* @since 2.2.0
|
3301 |
-
*
|
3302 |
-
* @var array
|
3303 |
-
*/
|
3304 |
-
public $plugin_names = array();
|
3305 |
-
|
3306 |
-
/**
|
3307 |
-
* Integer to use for iteration through each plugin installation.
|
3308 |
-
*
|
3309 |
-
* @since 2.2.0
|
3310 |
-
*
|
3311 |
-
* @var integer
|
3312 |
-
*/
|
3313 |
-
public $i = 0;
|
3314 |
-
|
3315 |
-
/**
|
3316 |
-
* TGMPA instance
|
3317 |
-
*
|
3318 |
-
* @since 2.5.0
|
3319 |
-
*
|
3320 |
-
* @var object
|
3321 |
-
*/
|
3322 |
-
protected $tgmpa;
|
3323 |
-
|
3324 |
-
/**
|
3325 |
-
* Constructor. Parses default args with new ones and extracts them for use.
|
3326 |
-
*
|
3327 |
-
* @since 2.2.0
|
3328 |
-
*
|
3329 |
-
* @param array $args Arguments to pass for use within the class.
|
3330 |
-
*/
|
3331 |
-
public function __construct( $args = array() ) {
|
3332 |
-
// Get TGMPA class instance.
|
3333 |
-
$this->tgmpa = call_user_func( array( get_class( $GLOBALS['tgmpa'] ), 'get_instance' ) );
|
3334 |
-
|
3335 |
-
// Parse default and new args.
|
3336 |
-
$defaults = array(
|
3337 |
-
'url' => '',
|
3338 |
-
'nonce' => '',
|
3339 |
-
'names' => array(),
|
3340 |
-
'install_type' => 'install',
|
3341 |
-
);
|
3342 |
-
$args = wp_parse_args( $args, $defaults );
|
3343 |
-
|
3344 |
-
// Set plugin names to $this->plugin_names property.
|
3345 |
-
$this->plugin_names = $args['names'];
|
3346 |
-
|
3347 |
-
// Extract the new args.
|
3348 |
-
parent::__construct( $args );
|
3349 |
-
}
|
3350 |
-
|
3351 |
-
/**
|
3352 |
-
* Sets install skin strings for each individual plugin.
|
3353 |
-
*
|
3354 |
-
* Checks to see if the automatic activation flag is set and uses the
|
3355 |
-
* the proper strings accordingly.
|
3356 |
-
*
|
3357 |
-
* @since 2.2.0
|
3358 |
-
*/
|
3359 |
-
public function add_strings() {
|
3360 |
-
if ( 'update' === $this->options['install_type'] ) {
|
3361 |
-
parent::add_strings();
|
3362 |
-
$this->upgrader->strings['skin_before_update_header'] = __( 'Updating Plugin %1$s (%2$d/%3$d)', 'tgmpa' );
|
3363 |
-
} else {
|
3364 |
-
$this->upgrader->strings['skin_update_failed_error'] = __( 'An error occurred while installing %1$s: <strong>%2$s</strong>.', 'tgmpa' );
|
3365 |
-
$this->upgrader->strings['skin_update_failed'] = __( 'The installation of %1$s failed.', 'tgmpa' );
|
3366 |
-
|
3367 |
-
if ( $this->tgmpa->is_automatic ) {
|
3368 |
-
// Automatic activation strings.
|
3369 |
-
$this->upgrader->strings['skin_upgrade_start'] = __( 'The installation and activation process is starting. This process may take a while on some hosts, so please be patient.', 'tgmpa' );
|
3370 |
-
$this->upgrader->strings['skin_update_successful'] = __( '%1$s installed and activated successfully.', 'tgmpa' ) . ' <a href="#" class="hide-if-no-js" onclick="%2$s"><span>' . esc_html__( 'Show Details', 'tgmpa' ) . '</span><span class="hidden">' . esc_html__( 'Hide Details', 'tgmpa' ) . '</span>.</a>';
|
3371 |
-
$this->upgrader->strings['skin_upgrade_end'] = __( 'All installations and activations have been completed.', 'tgmpa' );
|
3372 |
-
$this->upgrader->strings['skin_before_update_header'] = __( 'Installing and Activating Plugin %1$s (%2$d/%3$d)', 'tgmpa' );
|
3373 |
-
} else {
|
3374 |
-
// Default installation strings.
|
3375 |
-
$this->upgrader->strings['skin_upgrade_start'] = __( 'The installation process is starting. This process may take a while on some hosts, so please be patient.', 'tgmpa' );
|
3376 |
-
$this->upgrader->strings['skin_update_successful'] = esc_html__( '%1$s installed successfully.', 'tgmpa' ) . ' <a href="#" class="hide-if-no-js" onclick="%2$s"><span>' . esc_html__( 'Show Details', 'tgmpa' ) . '</span><span class="hidden">' . esc_html__( 'Hide Details', 'tgmpa' ) . '</span>.</a>';
|
3377 |
-
$this->upgrader->strings['skin_upgrade_end'] = __( 'All installations have been completed.', 'tgmpa' );
|
3378 |
-
$this->upgrader->strings['skin_before_update_header'] = __( 'Installing Plugin %1$s (%2$d/%3$d)', 'tgmpa' );
|
3379 |
-
}
|
3380 |
-
}
|
3381 |
-
}
|
3382 |
-
|
3383 |
-
/**
|
3384 |
-
* Outputs the header strings and necessary JS before each plugin installation.
|
3385 |
-
*
|
3386 |
-
* @since 2.2.0
|
3387 |
-
*
|
3388 |
-
* @param string $title Unused in this implementation.
|
3389 |
-
*/
|
3390 |
-
public function before( $title = '' ) {
|
3391 |
-
if ( empty( $title ) ) {
|
3392 |
-
$title = esc_html( $this->plugin_names[ $this->i ] );
|
3393 |
-
}
|
3394 |
-
parent::before( $title );
|
3395 |
-
}
|
3396 |
-
|
3397 |
-
/**
|
3398 |
-
* Outputs the footer strings and necessary JS after each plugin installation.
|
3399 |
-
*
|
3400 |
-
* Checks for any errors and outputs them if they exist, else output
|
3401 |
-
* success strings.
|
3402 |
-
*
|
3403 |
-
* @since 2.2.0
|
3404 |
-
*
|
3405 |
-
* @param string $title Unused in this implementation.
|
3406 |
-
*/
|
3407 |
-
public function after( $title = '' ) {
|
3408 |
-
if ( empty( $title ) ) {
|
3409 |
-
$title = esc_html( $this->plugin_names[ $this->i ] );
|
3410 |
-
}
|
3411 |
-
parent::after( $title );
|
3412 |
-
|
3413 |
-
$this->i++;
|
3414 |
-
}
|
3415 |
-
|
3416 |
-
/**
|
3417 |
-
* Outputs links after bulk plugin installation is complete.
|
3418 |
-
*
|
3419 |
-
* @since 2.2.0
|
3420 |
-
*/
|
3421 |
-
public function bulk_footer() {
|
3422 |
-
// Serve up the string to say installations (and possibly activations) are complete.
|
3423 |
-
parent::bulk_footer();
|
3424 |
-
|
3425 |
-
// Flush plugins cache so we can make sure that the installed plugins list is always up to date.
|
3426 |
-
wp_clean_plugins_cache();
|
3427 |
-
|
3428 |
-
$this->tgmpa->show_tgmpa_version();
|
3429 |
-
|
3430 |
-
// Display message based on if all plugins are now active or not.
|
3431 |
-
$update_actions = array();
|
3432 |
-
|
3433 |
-
if ( $this->tgmpa->is_tgmpa_complete() ) {
|
3434 |
-
// All plugins are active, so we display the complete string and hide the menu to protect users.
|
3435 |
-
echo '<style type="text/css">#adminmenu .wp-submenu li.current { display: none !important; }</style>';
|
3436 |
-
$update_actions['dashboard'] = sprintf(
|
3437 |
-
esc_html( $this->tgmpa->strings['complete'] ),
|
3438 |
-
'<a href="' . esc_url( self_admin_url() ) . '">' . esc_html__( 'Return to the Dashboard', 'tgmpa' ) . '</a>'
|
3439 |
-
);
|
3440 |
-
} else {
|
3441 |
-
$update_actions['tgmpa_page'] = '<a href="' . esc_url( $this->tgmpa->get_tgmpa_url() ) . '" target="_parent">' . esc_html( $this->tgmpa->strings['return'] ) . '</a>';
|
3442 |
-
}
|
3443 |
-
|
3444 |
-
/**
|
3445 |
-
* Filter the list of action links available following bulk plugin installs/updates.
|
3446 |
-
*
|
3447 |
-
* @since 2.5.0
|
3448 |
-
*
|
3449 |
-
* @param array $update_actions Array of plugin action links.
|
3450 |
-
* @param array $plugin_info Array of information for the last-handled plugin.
|
3451 |
-
*/
|
3452 |
-
$update_actions = apply_filters( 'tgmpa_update_bulk_plugins_complete_actions', $update_actions, $this->plugin_info );
|
3453 |
-
|
3454 |
-
if ( ! empty( $update_actions ) ) {
|
3455 |
-
$this->feedback( implode( ' | ', (array) $update_actions ) );
|
3456 |
-
}
|
3457 |
-
}
|
3458 |
-
|
3459 |
-
/* *********** DEPRECATED METHODS *********** */
|
3460 |
-
|
3461 |
-
/**
|
3462 |
-
* Flush header output buffer.
|
3463 |
-
*
|
3464 |
-
* @since 2.2.0
|
3465 |
-
* @deprecated 2.5.0 use {@see Bulk_Upgrader_Skin::flush_output()} instead
|
3466 |
-
* @see Bulk_Upgrader_Skin::flush_output()
|
3467 |
-
*/
|
3468 |
-
public function before_flush_output() {
|
3469 |
-
_deprecated_function( __FUNCTION__, 'TGMPA 2.5.0', 'Bulk_Upgrader_Skin::flush_output()' );
|
3470 |
-
$this->flush_output();
|
3471 |
-
}
|
3472 |
-
|
3473 |
-
/**
|
3474 |
-
* Flush footer output buffer and iterate $this->i to make sure the
|
3475 |
-
* installation strings reference the correct plugin.
|
3476 |
-
*
|
3477 |
-
* @since 2.2.0
|
3478 |
-
* @deprecated 2.5.0 use {@see Bulk_Upgrader_Skin::flush_output()} instead
|
3479 |
-
* @see Bulk_Upgrader_Skin::flush_output()
|
3480 |
-
*/
|
3481 |
-
public function after_flush_output() {
|
3482 |
-
_deprecated_function( __FUNCTION__, 'TGMPA 2.5.0', 'Bulk_Upgrader_Skin::flush_output()' );
|
3483 |
-
$this->flush_output();
|
3484 |
-
$this->i++;
|
3485 |
-
}
|
3486 |
-
}
|
3487 |
-
}
|
3488 |
-
}
|
3489 |
-
}
|
3490 |
-
}
|
3491 |
-
|
3492 |
-
if ( ! class_exists( 'TGMPA_Utils' ) ) {
|
3493 |
-
|
3494 |
-
/**
|
3495 |
-
* Generic utilities for TGMPA.
|
3496 |
-
*
|
3497 |
-
* All methods are static, poor-dev name-spacing class wrapper.
|
3498 |
-
*
|
3499 |
-
* Class was called TGM_Utils in 2.5.0 but renamed TGMPA_Utils in 2.5.1 as this was conflicting with Soliloquy.
|
3500 |
-
*
|
3501 |
-
* @since 2.5.0
|
3502 |
-
*
|
3503 |
-
* @package TGM-Plugin-Activation
|
3504 |
-
* @author Juliette Reinders Folmer
|
3505 |
-
*/
|
3506 |
-
class TGMPA_Utils {
|
3507 |
-
/**
|
3508 |
-
* Whether the PHP filter extension is enabled.
|
3509 |
-
*
|
3510 |
-
* @see http://php.net/book.filter
|
3511 |
-
*
|
3512 |
-
* @since 2.5.0
|
3513 |
-
*
|
3514 |
-
* @static
|
3515 |
-
*
|
3516 |
-
* @var bool $has_filters True is the extension is enabled.
|
3517 |
-
*/
|
3518 |
-
public static $has_filters;
|
3519 |
-
|
3520 |
-
/**
|
3521 |
-
* Wrap an arbitrary string in <em> tags. Meant to be used in combination with array_map().
|
3522 |
-
*
|
3523 |
-
* @since 2.5.0
|
3524 |
-
*
|
3525 |
-
* @static
|
3526 |
-
*
|
3527 |
-
* @param string $string Text to be wrapped.
|
3528 |
-
* @return string
|
3529 |
-
*/
|
3530 |
-
public static function wrap_in_em( $string ) {
|
3531 |
-
return '<em>' . wp_kses_post( $string ) . '</em>';
|
3532 |
-
}
|
3533 |
-
|
3534 |
-
/**
|
3535 |
-
* Wrap an arbitrary string in <strong> tags. Meant to be used in combination with array_map().
|
3536 |
-
*
|
3537 |
-
* @since 2.5.0
|
3538 |
-
*
|
3539 |
-
* @static
|
3540 |
-
*
|
3541 |
-
* @param string $string Text to be wrapped.
|
3542 |
-
* @return string
|
3543 |
-
*/
|
3544 |
-
public static function wrap_in_strong( $string ) {
|
3545 |
-
return '<strong>' . wp_kses_post( $string ) . '</strong>';
|
3546 |
-
}
|
3547 |
-
|
3548 |
-
/**
|
3549 |
-
* Helper function: Validate a value as boolean
|
3550 |
-
*
|
3551 |
-
* @since 2.5.0
|
3552 |
-
*
|
3553 |
-
* @static
|
3554 |
-
*
|
3555 |
-
* @param mixed $value Arbitrary value.
|
3556 |
-
* @return bool
|
3557 |
-
*/
|
3558 |
-
public static function validate_bool( $value ) {
|
3559 |
-
if ( ! isset( self::$has_filters ) ) {
|
3560 |
-
self::$has_filters = extension_loaded( 'filter' );
|
3561 |
-
}
|
3562 |
-
|
3563 |
-
if ( self::$has_filters ) {
|
3564 |
-
return filter_var( $value, FILTER_VALIDATE_BOOLEAN );
|
3565 |
-
} else {
|
3566 |
-
return self::emulate_filter_bool( $value );
|
3567 |
-
}
|
3568 |
-
}
|
3569 |
-
|
3570 |
-
/**
|
3571 |
-
* Helper function: Cast a value to bool
|
3572 |
-
*
|
3573 |
-
* @since 2.5.0
|
3574 |
-
*
|
3575 |
-
* @static
|
3576 |
-
*
|
3577 |
-
* @param mixed $value Value to cast.
|
3578 |
-
* @return bool
|
3579 |
-
*/
|
3580 |
-
protected static function emulate_filter_bool( $value ) {
|
3581 |
-
// @codingStandardsIgnoreStart
|
3582 |
-
static $true = array(
|
3583 |
-
'1',
|
3584 |
-
'true', 'True', 'TRUE',
|
3585 |
-
'y', 'Y',
|
3586 |
-
'yes', 'Yes', 'YES',
|
3587 |
-
'on', 'On', 'ON',
|
3588 |
-
);
|
3589 |
-
static $false = array(
|
3590 |
-
'0',
|
3591 |
-
'false', 'False', 'FALSE',
|
3592 |
-
'n', 'N',
|
3593 |
-
'no', 'No', 'NO',
|
3594 |
-
'off', 'Off', 'OFF',
|
3595 |
-
);
|
3596 |
-
// @codingStandardsIgnoreEnd
|
3597 |
-
|
3598 |
-
if ( is_bool( $value ) ) {
|
3599 |
-
return $value;
|
3600 |
-
} else if ( is_int( $value ) && ( 0 === $value || 1 === $value ) ) {
|
3601 |
-
return (bool) $value;
|
3602 |
-
} else if ( ( is_float( $value ) && ! is_nan( $value ) ) && ( (float) 0 === $value || (float) 1 === $value ) ) {
|
3603 |
-
return (bool) $value;
|
3604 |
-
} else if ( is_string( $value ) ) {
|
3605 |
-
$value = trim( $value );
|
3606 |
-
if ( in_array( $value, $true, true ) ) {
|
3607 |
-
return true;
|
3608 |
-
} else if ( in_array( $value, $false, true ) ) {
|
3609 |
-
return false;
|
3610 |
-
} else {
|
3611 |
-
return false;
|
3612 |
-
}
|
3613 |
-
}
|
3614 |
-
|
3615 |
-
return false;
|
3616 |
-
}
|
3617 |
-
} // End of class TGMPA_Utils
|
3618 |
-
} // End of class_exists wrapper
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
admin/documentation.php
DELETED
@@ -1,674 +0,0 @@
|
|
1 |
-
<script type="text/javascript">
|
2 |
-
jQuery(document).ready(function ($) {
|
3 |
-
|
4 |
-
// $("#nav").sticky({topSpacing:0});
|
5 |
-
|
6 |
-
$('a[href^="#"]').on('click', function (e) {
|
7 |
-
e.preventDefault();
|
8 |
-
|
9 |
-
var target = this.hash;
|
10 |
-
var $target = $(target);
|
11 |
-
|
12 |
-
$('html, body').stop().animate({
|
13 |
-
'scrollTop': $target.offset().top
|
14 |
-
}, 950, 'swing');
|
15 |
-
});
|
16 |
-
});
|
17 |
-
|
18 |
-
|
19 |
-
</script>
|
20 |
-
<style type="text/css">
|
21 |
-
|
22 |
-
.sub-section {
|
23 |
-
border: thin solid #91c6c0;
|
24 |
-
border-radius: 15px;
|
25 |
-
width: 80%;
|
26 |
-
padding: 25px;
|
27 |
-
margin-bottom: 15px;
|
28 |
-
}
|
29 |
-
|
30 |
-
div#wrapper {
|
31 |
-
/*background: #ffffff;*/
|
32 |
-
color: #313131;
|
33 |
-
margin-top: 5px;
|
34 |
-
}
|
35 |
-
|
36 |
-
div#header {
|
37 |
-
margin-right: 125px;
|
38 |
-
background: #178dc4;
|
39 |
-
border-radius: 0px 0px 50px 0px;
|
40 |
-
padding: 20px;
|
41 |
-
color: #fff;
|
42 |
-
}
|
43 |
-
|
44 |
-
div#main {
|
45 |
-
height: 100%;
|
46 |
-
background: blue;
|
47 |
-
}
|
48 |
-
|
49 |
-
div#nav {
|
50 |
-
height: 100% !important;
|
51 |
-
width: 15% !important;
|
52 |
-
float: left !important;
|
53 |
-
}
|
54 |
-
|
55 |
-
div#content {
|
56 |
-
float: right !important;
|
57 |
-
width: 82% !important;
|
58 |
-
/*background: #ffffff;*/
|
59 |
-
}
|
60 |
-
|
61 |
-
div#nav-sticky-wrapper {
|
62 |
-
display: inline;
|
63 |
-
margin-right: 0;
|
64 |
-
}
|
65 |
-
|
66 |
-
div#nav-sticky-wrapper.is-sticky {
|
67 |
-
float: left;
|
68 |
-
}
|
69 |
-
|
70 |
-
p {
|
71 |
-
padding-left: 25px;
|
72 |
-
padding-right: 125px;
|
73 |
-
padding-top: 10px;
|
74 |
-
padding-bottom: 10px;
|
75 |
-
font-size: 14px;
|
76 |
-
}
|
77 |
-
|
78 |
-
p.warning {
|
79 |
-
color: #ff7777;
|
80 |
-
font-style: italic;
|
81 |
-
}
|
82 |
-
|
83 |
-
div#header img#logo {
|
84 |
-
float: left;
|
85 |
-
width: 75px;
|
86 |
-
padding-right: 15px;
|
87 |
-
}
|
88 |
-
|
89 |
-
|
90 |
-
h1#title{
|
91 |
-
font-family: "Raleway", Verdana, sans-serif;
|
92 |
-
font-weight: 100;
|
93 |
-
font-size: 30px;
|
94 |
-
}
|
95 |
-
h1#subtitle{
|
96 |
-
|
97 |
-
font-size: 22px;
|
98 |
-
font-weight: 100;
|
99 |
-
}
|
100 |
-
|
101 |
-
div#nav{
|
102 |
-
border-right: 1px solid #f9f9f9;
|
103 |
-
background: #DDDDDD;
|
104 |
-
}
|
105 |
-
h1.navheading{
|
106 |
-
font-size: 14px;
|
107 |
-
padding-top: 15px;
|
108 |
-
margin-right: 0px;
|
109 |
-
}
|
110 |
-
|
111 |
-
#nav ul {
|
112 |
-
list-style: none;
|
113 |
-
padding-left: 15px;
|
114 |
-
padding-top: 10px;
|
115 |
-
}
|
116 |
-
|
117 |
-
#nav li {
|
118 |
-
display: table;
|
119 |
-
font-size: 14px;
|
120 |
-
font-style: normal;
|
121 |
-
background-color: #ffffff;
|
122 |
-
color: #178dc4;
|
123 |
-
width: 85%;
|
124 |
-
border: thin solid #178dc4;
|
125 |
-
border-radius: 5px;
|
126 |
-
margin-bottom: 2px;
|
127 |
-
text-align: center;
|
128 |
-
min-height: 25px;
|
129 |
-
}
|
130 |
-
|
131 |
-
#nav li:hover {
|
132 |
-
background-color: #178dc4;
|
133 |
-
color: #ffffff;
|
134 |
-
|
135 |
-
cursor: pointer;
|
136 |
-
}
|
137 |
-
#nav li:hover a{
|
138 |
-
color: #fff;
|
139 |
-
}
|
140 |
-
a.navlink {
|
141 |
-
font-size: 12px;
|
142 |
-
color: #178dc4;
|
143 |
-
text-decoration: none;
|
144 |
-
display: table-cell;
|
145 |
-
vertical-align: middle;
|
146 |
-
padding-top: 10px;
|
147 |
-
padding-bottom: 10px;
|
148 |
-
}
|
149 |
-
|
150 |
-
ul {
|
151 |
-
padding-left: 65px;
|
152 |
-
}
|
153 |
-
|
154 |
-
li {
|
155 |
-
color: #91c6c0;
|
156 |
-
/*font-style: italic;*/
|
157 |
-
list-style: square;
|
158 |
-
}
|
159 |
-
|
160 |
-
footer {
|
161 |
-
text-align: right;
|
162 |
-
padding-right: 125px;
|
163 |
-
padding-left: 25px;
|
164 |
-
padding-top: 50px;
|
165 |
-
padding-bottom: 50px;
|
166 |
-
}
|
167 |
-
|
168 |
-
i.fa {
|
169 |
-
padding-right: 5px;
|
170 |
-
}
|
171 |
-
em.pro{
|
172 |
-
margin-left: 5px;
|
173 |
-
font-size: 14px;
|
174 |
-
color: #CC0000;
|
175 |
-
|
176 |
-
}
|
177 |
-
|
178 |
-
em.tip{
|
179 |
-
font-size: 15px;
|
180 |
-
color: #0066ff;
|
181 |
-
}
|
182 |
-
</style>
|
183 |
-
|
184 |
-
<div id="wrapper">
|
185 |
-
<?php //if( ! $this->strap_pl() ) : exit( 'Please activate your license <a class="button-primary" href="' . admin_url( 'edit.php?post_type=team_member&page=smartcat_team_license' ) . '">Activate</a>' ); endif; ?>
|
186 |
-
|
187 |
-
<div id="header">
|
188 |
-
<img src="<?php echo SC_TEAM_URL ?>inc/img/smartcat_icon.png" alt="Smartcat" id="logo">
|
189 |
-
<h1 id="title">Our Team Showcase</h1>
|
190 |
-
<h1 id="subtitle">A WordPress Plugin by Smartcat</h1>
|
191 |
-
</div>
|
192 |
-
<div id="main">
|
193 |
-
<div id="nav">
|
194 |
-
|
195 |
-
<h1 class="navheading"><i class="fa fa-cube"></i>Setup</h1>
|
196 |
-
<ul>
|
197 |
-
<li><a href="#welcome" class="navlink">Welcome</a></li>
|
198 |
-
<li><a href="#overview" class="navlink">Plugin Overview</a></li>
|
199 |
-
<li><a href="#downloading" class="navlink">Downloading</a></li>
|
200 |
-
<li><a href="#installing" class="navlink">Installation & Activation</a></li>
|
201 |
-
</ul>
|
202 |
-
<h1 class="navheading"><i class="fa fa-plug"></i>Plugin Usage</h1>
|
203 |
-
<ul>
|
204 |
-
<li><a href="#include-sc" class="navlink">Including the Shortcode</a></li>
|
205 |
-
<li><a href="#add-member" class="navlink">Adding & Configuring a Team Member Profile</a></li>
|
206 |
-
<li><a href="#manage-members" class="navlink">Managing Team Members</a></li>
|
207 |
-
<li><a href="#groups" class="navlink">Groups</a></li>
|
208 |
-
<li><a href="#templates" class="navlink">Templates</a></li>
|
209 |
-
<li><a href="#custom_templates" class="navlink">Custom Template</a></li>
|
210 |
-
<li><a href="#view-settings" class="navlink">Settings Panel Quick Guide</a></li>
|
211 |
-
<li><a href="#sidebar-widget" class="navlink">Sidebar Widget</a></li>
|
212 |
-
</ul>
|
213 |
-
<h1 class="navheading"><i class="fa fa-cube"></i>Member Login Portal</h1>
|
214 |
-
<ul>
|
215 |
-
<li><a href="#portal-about" class="navlink">About Member Login Portal</a></li>
|
216 |
-
<li><a href="#portal-install" class="navlink">Installing & Configuring</a></li>
|
217 |
-
<li><a href="#portal-settings" class="navlink">Member Login Portal Settings</a></li>
|
218 |
-
<li><a href="#portal-email" class="navlink">Email Settings</a></li>
|
219 |
-
<li><a href="#portal-extra" class="navlink">Extra Options</a></li>
|
220 |
-
<li><a href="#portal-content" class="navlink">Restricting Content</a></li>
|
221 |
-
<li><a href="#portal-profile" class="navlink">Profile Options</a></li>
|
222 |
-
<li><a href="#portal-admin" class="navlink">Admin Options</a></li>
|
223 |
-
</ul>
|
224 |
-
<h1 class="navheading"><i class="fa fa-question-circle"></i>Miscellaneous</h1>
|
225 |
-
<ul>
|
226 |
-
<li><a href="#faq" class="navlink">FAQ</a></li>
|
227 |
-
<ul>
|
228 |
-
</div>
|
229 |
-
<div id="content">
|
230 |
-
<h2 id="welcome">Welcome!</h2>
|
231 |
-
<p>
|
232 |
-
This is the documentation for the 'Our Team Showcase' plugin, by Smartcat.
|
233 |
-
This document includes the details for both the free and the Pro versions of the plugin.
|
234 |
-
Items that only exist in the Pro version are indicated by the <em class="pro">PRO</em> sign. Our tips to improve your user experience with the plugin are indicated by <em class="tip">SMARTCAT TIPS</em>.
|
235 |
-
</p>
|
236 |
-
|
237 |
-
<h2 id="overview">Plugin Overview</h2>
|
238 |
-
<p>
|
239 |
-
Our Team Showcase lets you easily create, edit and display a team roster for your site, including employees, associates, or your websites's contributing authors. Displaying your team on a page is quick and easy, with simple short-codes, while a comprehensive settings menu lets you manipulate the plugin's behavior and appearance without any coding at all. Sort your team members into groups, to display all or some of them together on different parts of your site. The PRO version includes seven different team view layouts, as well as three single member view layouts.
|
240 |
-
</p>
|
241 |
-
|
242 |
-
<h2 id="downloading">Downloading</h2>
|
243 |
-
<p>
|
244 |
-
Upon purchase, you'll receive an email from Smartcat containing your receipt and a link
|
245 |
-
to download the plugin, 'Our Team Showcase Pro'. To start your download, click the link labelled
|
246 |
-
"smartcat_our_team".
|
247 |
-
</p>
|
248 |
-
|
249 |
-
<h2 id="installing">Installion & Activation</h2>
|
250 |
-
<div class="sub-section">
|
251 |
-
<h3>Option One - Root Folder Installation</h3>
|
252 |
-
<p>
|
253 |
-
Double-click your "smartcat_our_team.zip" file download to decompress it. In the root folder of your WordPress install, navigate to "wp-content" > "plugins". Now drag or copy the new, decompressed folder "smartcat_our_team" into it.
|
254 |
-
In your browser, reload your WordPress Dashboard and you will now see a menu item "Team".
|
255 |
-
</p>
|
256 |
-
</div>
|
257 |
-
<div class="sub-section">
|
258 |
-
<h3>Option Two - Upload To WordPress Dashboard</h3>
|
259 |
-
<p>
|
260 |
-
If you prefer to install the plugin directly through the WordPress Dashboard, leave the downloaded file in its
|
261 |
-
.zip format. From the WordPress Dashboard, select "Plugins" > "Add New" > "Upload Plugin", and you
|
262 |
-
will be directed to a page that will let you upload the file. Simply navigate to and choose
|
263 |
-
the "smartcat_our_team.zip" file, and select "Install Now". When the upload completes click "Activate." Reload your WordPress Dashboard and you will see a menu item "Team".
|
264 |
-
</p>
|
265 |
-
</div>
|
266 |
-
<div class="sub-section">
|
267 |
-
<h3>License Activation <em class="pro">Pro Version</em></h3>
|
268 |
-
<p>
|
269 |
-
Once you've added your plugin files to WordPress, you'll need to activate it using your licence key. This can be found in on the email receipt that you received after purchase. If you've purchased a multiple or unlimited use licence, be sure to save the email with your licence key for future reference.
|
270 |
-
</p>
|
271 |
-
</div>
|
272 |
-
|
273 |
-
<h2>Plugin Usage</h2>
|
274 |
-
<div class="sub-section" id="include-sc">
|
275 |
-
<h3>Including the [our-team] Shortcode</h3>
|
276 |
-
<p>
|
277 |
-
To display a team showcase on any page of your site, simply place the shortcode, "[our-team]" (without quotes) where you want it to appear within the page.
|
278 |
-
</p>
|
279 |
-
<p>
|
280 |
-
You can also indicate a specific group to display, as well as override the settings for the full team and single member templates through the shortcode:
|
281 |
-
</p>
|
282 |
-
<p>
|
283 |
-
<strong>[our-team group="slug" template="grid" single_template="panel"]</strong>
|
284 |
-
|
285 |
-
</p>
|
286 |
-
<p><em class="tip">SMARTCAT TIP</em> <i>The group "slug" can be viewed and edited from the plugin settings. Go to Team > Groups and select "Quick Edit" for the group you want to use. The slug should have no capital letters, and use understcores (group_slug) or dashes (group-slug) instead of spaces.</i></p>
|
287 |
-
<p> Overriding your settings is useful when you want to display the showcase in different ways on different pages.</p>
|
288 |
-
</div>
|
289 |
-
<div class="sub-section" id="add-member">
|
290 |
-
<h3>Adding & Configuring a Team Member Profile</h3>
|
291 |
-
<p>
|
292 |
-
To add a new Team member, Click "Add New" near the top of the menu in your WordPress dashboard. This will launch the Add New Member editor.
|
293 |
-
Enter the <b>name</b> of the person you are adding in the first box that asks you to enter a title.
|
294 |
-
The main content box can be used to provide a <b>brief biography</b> of the person, their work history, or a description of the role they play on the team.
|
295 |
-
</p>
|
296 |
-
<p><em class="tip">SMARTCAT TIP</em> <i>Please note - if you're using the Stacked template, any HTML formatting you include in this text box will not be active in the preview, on page where the full team is displayed.</i></p>
|
297 |
-
<p>
|
298 |
-
Additional information, including a <b>Personal Quote, Job Title</b> and <b>Social Media Account Links</b> can be added in the section below the main content area.</p>
|
299 |
-
<p><em class="tip">SMARTCAT TIP </em> <i>For best results, we recommend using no more than 5 social media links for a Circle Template, no more than 6 for a Grid template, and the Stacked template if you want to include 7 social media links or more.</i></p>
|
300 |
-
<p>A small list of standout <b>Skills</b> or proficiencies can also be listed with a 1 - 10 rating of that competency. This will appear as a percentage bar on the Single Member View.</p>
|
301 |
-
<p>Finally, in the third settings box, select up to three pages or posts you want to display on your Team Member's profile as <b>Featured Articles</b>. You can include a custom title for this area, or leave it blank. Be sure to select the "Show" or "Hide" radio button to activate this feature.</p>
|
302 |
-
<p>You can also add a custom list of <b>Attributes</b>, with a custom title such as "Favourites" "Accreditation," "Specialties," etc.</p>
|
303 |
-
<p><em class="tip">SMARTCAT TIP </em><i> Enter the attributes as a comma seperated list, eg: </i></p>
|
304 |
-
<p> <strong>Apples,Bananas,Oranges,Pears.</strong></p>
|
305 |
-
<p>If you already have a <b>Group</b> created that you would like to add the member to, you may select it from this page.
|
306 |
-
</p>
|
307 |
-
<p>
|
308 |
-
Upload a <b>Featured Image</b> by clicking the corresponding link in the right-hand sidebar. This image will be used as the main portrait photo.</p>
|
309 |
-
<p><em class="tip">SMARTCAT TIP </em> <i>For best results, use an image size of 300 x 300 pixels, or similar, with a 1:1 aspect ratio.</i>
|
310 |
-
</p>
|
311 |
-
|
312 |
-
<!--<img style="width: 60%; float: right" src="<?php echo SC_TEAM_URL ?>inc/img/userdetails_demo.jpg"/>
|
313 |
-
|
314 |
-
|
315 |
-
<h3>Member Details</h3>
|
316 |
-
<ul>
|
317 |
-
<li>Name</li>
|
318 |
-
<li>Featured Image</li>
|
319 |
-
<li>Bio</li>
|
320 |
-
<li>Groups</li>
|
321 |
-
<li>Title ( Job Title )</li>
|
322 |
-
<li>Email Address</li>
|
323 |
-
<li>Facebook</li>
|
324 |
-
<li>Twitter</li>
|
325 |
-
<li>LinkedIn</li>
|
326 |
-
<li>Google Plus</li>
|
327 |
-
<li>Personal Quote <em class="pro">Pro Version</em></li>
|
328 |
-
<li>Phone Number<em class="pro">Pro Version</em></li>
|
329 |
-
</ul>
|
330 |
-
|
331 |
-
<img style="width: 60%; float: right" src="<?php echo SC_TEAM_URL ?>inc/img/skills_demo.jpg"/>
|
332 |
-
|
333 |
-
|
334 |
-
<h3>Attributes / Skills / Ratings</h3>
|
335 |
-
<ul>
|
336 |
-
<li>Skill/Attribute Title<em class="pro">Pro Version</em></li>
|
337 |
-
<li>Skill/Attribute Rating<em class="pro">Pro Version</em></li>
|
338 |
-
|
339 |
-
</ul>-->
|
340 |
-
|
341 |
-
|
342 |
-
</div>
|
343 |
-
<div class="sub-section" id="manage-members">
|
344 |
-
<h3>Managing Team Members</h3>
|
345 |
-
<p>
|
346 |
-
Select "Team" from your WordPress Dashboard to see a list of all team members. Once you have added a member,
|
347 |
-
you can edit their profile information clicking on their name, or selecting Edit while
|
348 |
-
hovering over it.
|
349 |
-
</p>
|
350 |
-
<p>
|
351 |
-
To change the order your team members appear in the Showcase, select "Reorder Members" from the main "Team" menu in your WordPress Dashboard. Simply drag and drop the member to the idea position.
|
352 |
-
Once the order is set, select Save Order.
|
353 |
-
</p>
|
354 |
-
<p>
|
355 |
-
To delete a team member from the showcase, hover over the name of the member, then
|
356 |
-
click the red "Trash" link. You will not be prompted to confirm your decision, but if you have made a mistake, you can retrieve the deleted member. After a delete has been performed, a new link titled "Trash (x)" appears on your Team dashboard. Clicking that link to review the Trash items, and either "Restore" or "Delete Permanently".
|
357 |
-
</p>
|
358 |
-
</div>
|
359 |
-
<div class="sub-section" id="groups">
|
360 |
-
<h3>Groups</h3>
|
361 |
-
<p>
|
362 |
-
Our Team Showcase Pro allows you to divide your team into smaller sections based on projects, location or any other criteria you choose.
|
363 |
-
</p>
|
364 |
-
<p>
|
365 |
-
Creating a new Group for your team is easy, and there are two ways you can do it. The first option is to select the "Groups" option from the main "Team" sidebar menu, then enter a name for the Group and click the "Add New Group" button. Alternatively, if you are currently viewing a single team member, the "Groups" box on the right-hand side of the page has an "Add New Group" option. This fuctions similarly to the Categories box in a WordPress post.
|
366 |
-
</p>
|
367 |
-
<p>
|
368 |
-
Using the [our-team] shortcode will default to displaying all members regardless of Groups. If you would like to have a showcase that only includes members of a specific group, modify the shortcode to include the Group name.
|
369 |
-
</p>
|
370 |
-
<p>
|
371 |
-
Example: [our-team group="name of your group"]
|
372 |
-
</p>
|
373 |
-
</div>
|
374 |
-
<div class="sub-section" id="templates">
|
375 |
-
<h3>Team View Templates</h3>
|
376 |
-
<p>To view the Template options for Our Team Showcase, visit the<a href="https://smartcatdesign.net/our-team-showcase-demo/" target="_blank"> Our Team Showcase Demo</a> page.</p>
|
377 |
-
<p><em class="pro">Pro Version</em> Please note that <b>Carousel, Honeycomb, Stacked</b> and <b>Directory</b> are only available in the Pro version.</p>
|
378 |
-
<!-- <h4>Grid - Boxes</h4>
|
379 |
-
<p>
|
380 |
-
Displays a grid based layout of team members, with rectangular edges.
|
381 |
-
</p>
|
382 |
-
|
383 |
-
<img style="width: 40%; float: right" src="<?php echo SC_TEAM_URL ?>inc/img/grid_demo.jpg"/>
|
384 |
-
<div class="clear"></div>
|
385 |
-
|
386 |
-
|
387 |
-
<h4>Grid - Circles</h4>
|
388 |
-
<p>
|
389 |
-
Displays a grid based layout of team members, with circular edges. Name and Title appear overtop of the circular images.
|
390 |
-
</p>
|
391 |
-
<img style="width: 40%; float: right" src="<?php echo SC_TEAM_URL ?>inc/img/circles2_demo.jpg"/>
|
392 |
-
<div class="clear"></div>
|
393 |
-
|
394 |
-
|
395 |
-
<h4>Grid - Circles Version 2</h4>
|
396 |
-
<p>
|
397 |
-
Displays a grid based layout of team members, with circular edges. Name and Title appear when the mouse hovers over the circular images.
|
398 |
-
</p>
|
399 |
-
|
400 |
-
<img style="width: 40%; float: right" src="<?php echo SC_TEAM_URL ?>inc/img/circles_demo.jpg"/>
|
401 |
-
<div class="clear"></div>
|
402 |
-
|
403 |
-
<h4>List - Stacked <em class="pro">Pro Version</em></h4>
|
404 |
-
<p>
|
405 |
-
Displays a stacked list of each team member, with details such as Name, Title, Description, and Social Media links.
|
406 |
-
</p>
|
407 |
-
<img style="width: 40%; float: right" src="<?php echo SC_TEAM_URL ?>inc/img/stacked_demo.jpg"/>
|
408 |
-
<div class="clear"></div>
|
409 |
-
|
410 |
-
<h4>Honey Comb <em class="pro">Pro Version</em></h4>
|
411 |
-
<p>
|
412 |
-
Displays a honeycomb style layout, consisting of interconnected, hexagonally shaped images that can display information when hovered over.
|
413 |
-
</p>
|
414 |
-
|
415 |
-
<img style="width: 40%; float: right" src="<?php echo SC_TEAM_URL ?>inc/img/honeycomb_demo.jpg"/>
|
416 |
-
<div class="clear"></div>
|
417 |
-
|
418 |
-
<h4>Carousel <em class="pro">Pro Version</em></h4>
|
419 |
-
<p>Displays team members in a horizontally cycling carousel.</p>
|
420 |
-
|
421 |
-
|
422 |
-
|
423 |
-
<img style="width: 40%; float: right" src="<?php echo SC_TEAM_URL ?>inc/img/carousel_demo.jpg"/>
|
424 |
-
<div class="clear"></div>-->
|
425 |
-
|
426 |
-
<h3>Setting a Template and Using Shortcodes</h3>
|
427 |
-
<p>
|
428 |
-
The default template, "Grid - Boxes", can be changed to one of several other options. Each one will display your team showcase in a different visual arrangement. To change the default template, select "Settings" under the "Team" menu, and select the desired template from the drop-down list.
|
429 |
-
</p>
|
430 |
-
<p>
|
431 |
-
If you wish to display the Showcase in more than one configuration on the site, you can also modify the shortcode to specify a different template for that version of output of the plugin.
|
432 |
-
</p>
|
433 |
-
<p>
|
434 |
-
Example: [our-team template="grid"]
|
435 |
-
</p>
|
436 |
-
<p>
|
437 |
-
The short-code for the each template that can be placed within the quotes are: </p>
|
438 |
-
<p><b>[our-team template="carousel"]<br>
|
439 |
-
[our-team template="grid"]<br>
|
440 |
-
[our-team template="grid_cirlces"]<br>
|
441 |
-
[our-team template="grid_circles2"]<br>
|
442 |
-
[our-team template="hc"]<br>
|
443 |
-
[our-team template="stacked"]<br>
|
444 |
-
[our-team template="directory"]</b>
|
445 |
-
|
446 |
-
</p>
|
447 |
-
|
448 |
-
<h3>Single Member View Templates</h3>
|
449 |
-
<h4>Theme Default(Single Post)</h4>
|
450 |
-
<p>This will load the single member page based on your theme's single.php file</p>
|
451 |
-
|
452 |
-
<h4>Custom Template</h4>
|
453 |
-
<p>This will load the single member page from a custom template file (team_members_template.php)</p>
|
454 |
-
|
455 |
-
|
456 |
-
<h4>Card Popup ( single_template="vcard" ) <em class="pro">Pro Version</em></h4>
|
457 |
-
<p>This will load a lightbox and the member details in a sliding box.</p>
|
458 |
-
<img style="width: 40%; float: right" src="<?php echo SC_TEAM_URL ?>inc/img/card_demo.jpg"/>
|
459 |
-
<div class="clear"></div>
|
460 |
-
|
461 |
-
|
462 |
-
<h4>Side Panel ( single_template="panel" )<em class="pro">Pro Version</em></h4>
|
463 |
-
<p>Clicking on a member will slide in a panel that includes all their details in a very appealing design</p>
|
464 |
-
<img style="width: 40%; float: right" src="<?php echo SC_TEAM_URL ?>inc/img/panel_demo.jpg"/>
|
465 |
-
<div class="clear"></div>
|
466 |
-
|
467 |
-
<h4>Disabled ( single_template="disable" )</h4>
|
468 |
-
<p>If you don't wish to include a full single profile for each Team Member, chose the "Disable" option. Your Showcase will display without active links to a Single Member View.</p>
|
469 |
-
</div>
|
470 |
-
|
471 |
-
|
472 |
-
<div class="sub-section" id="custom_templates">
|
473 |
-
<h3>Custom templates <em class="pro">Pro Version</em> </h3>
|
474 |
-
<p>The plugin allows you to choose between several options for displaying single members.
|
475 |
-
By default, the team member single page follows the theme's single.php file.
|
476 |
-
<br>
|
477 |
-
<br>
|
478 |
-
You can choose to use the custom template, which is included in the plugin.
|
479 |
-
In the Team plugin Settings page, under Single Member View Settings, select Custom Template.
|
480 |
-
That tells the plugin to use the included custom template file.
|
481 |
-
<br>
|
482 |
-
<br>
|
483 |
-
|
484 |
-
<h4>Overriding the Custom Template</h4>
|
485 |
-
<p>To override the file, do not edit it from the plugin. Instead, copy the file
|
486 |
-
team_members_template.php ( found in <strong>/inc/template/team_members_template.php</strong> )
|
487 |
-
into your theme's root folder. You can then edit this file to your liking.
|
488 |
-
</p>
|
489 |
-
|
490 |
-
<img style="width: 40%; float: right" src="<?php echo SC_TEAM_URL ?>inc/img/custom_demo.jpg"/>
|
491 |
-
<div class="clear"></div>
|
492 |
-
|
493 |
-
</div>
|
494 |
-
|
495 |
-
<h2 id="view-settings">Settings Panel Quick Guide</h2>
|
496 |
-
<div class="sub-section">
|
497 |
-
<h2>Team View</h2>
|
498 |
-
<p>The following settings are accessible in the first section of the Settings Dashboard.</p>
|
499 |
-
<h4>Carousel Time Speed:</h4>
|
500 |
-
<p>If you're using the Carousel layout, adjust the speed that it auto-rotates at from here. If you want to disable the auto-rotate completely, type the word "false".</p>
|
501 |
-
<h4>Grid Columns:</h4>
|
502 |
-
<p>Specify the number of columns per row of members.</p>
|
503 |
-
|
504 |
-
<h4>Margin:</h4>
|
505 |
-
<p>Specify the amount of space between each column in a row.</p>
|
506 |
-
<h4>Display Social Icons:</h4>
|
507 |
-
<p>Toggles whether social icons are displayed over the featured images for each member.</p>
|
508 |
-
<h4>Social Icons Links</h4>
|
509 |
-
<p>Specify if you want the social icon links to open in the same page, or in a new page</p>
|
510 |
-
<h4>Social Links Style</h4>
|
511 |
-
<p>Specify if you want to use round colored icons, or flat icons</p>
|
512 |
-
<h4>Display Name:</h4>
|
513 |
-
<p>Toggles whether the member names are displayed over the featured images.</p>
|
514 |
-
<h4>Display Title:</h4>
|
515 |
-
<p>Toggles whether the member's job titles are displayed over the featured images.</p>
|
516 |
-
<h4>Name Font Size: <em class="pro">Pro version</em></h4>
|
517 |
-
<p>Set the font size in pixels. Specify the number value here</p>
|
518 |
-
<h4>Title Font Size: <em class="pro">Pro version</em></h4>
|
519 |
-
<p>Set the font size in pixels. Specify the number value here</p>
|
520 |
-
<h4>Number of members to display:</h4>
|
521 |
-
<p>Specify a limit to the number of displayed members, or -1 to show all members.</p>
|
522 |
-
<h4>Main Color:</h4>
|
523 |
-
<p>Specify the main color, used as the background for member name and job title text.</p>
|
524 |
-
<h4>[ HONEY COMB TEMPLATE ONLY ] Honey Comb Color:<em class="pro">Pro version</em></h4>
|
525 |
-
<p> Specify the color used as the overlay for honey comb shape.</p>
|
526 |
-
|
527 |
-
<h3>Single Member View</h3>
|
528 |
-
<p>The following settings are accessible in the second section of the Settings Dashboard:</p>
|
529 |
-
<h4>Template:</h4>
|
530 |
-
<p>
|
531 |
-
This option will set the way that a single member is displayed when selected from the showcase. "Card (pop-up)" displays an index card style display of a single member. A custom template may also be selected from the drop-down menu. The custom template should be a file located in "/inc/template/team_members_template.php".
|
532 |
-
</p>
|
533 |
-
<h4>Card Margin from Top <em class="pro">Pro Version</em></h4>
|
534 |
-
<p>Set the distance of the Single Member view Card Pop-Up from the top of your site. The default is 100 px. This helps avoid rendering errors when a drop-down menu or sticky header overlap with the card.</p>
|
535 |
-
<h4>Panel Margin from Top <em class="pro">Pro Version</em></h4>
|
536 |
-
<p>Set the distance between the top of the Side Panel from the top of your page. The default is 0px. This helps work around display issues when a sticky header at the top of your site is covering the "X" close button or other features at the top of the Side Panel.</p>
|
537 |
-
<h4>Display Social Icons: <em class="pro">Pro Version</em></h4>
|
538 |
-
<p>
|
539 |
-
Toggles whether social icons are displayed when viewing an individual team member.
|
540 |
-
</p>
|
541 |
-
|
542 |
-
<h4>Image Style:<em class="pro">Pro version</em></h4>
|
543 |
-
<p>
|
544 |
-
Specifies whether the featured image should have a round or rectangular border, when viewing an individual team member.
|
545 |
-
</p>
|
546 |
-
|
547 |
-
<h3>Staff Directory Options</h3>
|
548 |
-
<p>If you're using the Staff Directory template, these settings help you modify the display. Each of the three columns after Name - Title, Group, and Phone Number - can be disabled and renamed from this settings box. </p>
|
549 |
-
<p>Select "Yes" to include a field, or "No" to disable it. Put the Title that you want for that column in the text field below the Yes / No radio buttons.</p>
|
550 |
-
</div>
|
551 |
-
|
552 |
-
<div class="sub-section" id="sidebar-widget">
|
553 |
-
<h3>Sidebar Widget</h3>
|
554 |
-
<p>
|
555 |
-
The plugin comes with an easy to use widget designed for appearing in your site Sidebar.
|
556 |
-
Go to Appearance - Widgets and find the widget titled "Our Team Sidebar Widget".
|
557 |
-
|
558 |
-
</p>
|
559 |
-
<p>
|
560 |
-
You can drag & drop the widget into any widget placeholder
|
561 |
-
</p>
|
562 |
-
<img style="width: 40%; float: right" src="<?php echo SC_TEAM_URL ?>inc/img/sidebar_demo.jpg"/>
|
563 |
-
<div class="clear"></div>
|
564 |
-
|
565 |
-
</div>
|
566 |
-
|
567 |
-
<h2 id="portal">Member Login Portal Extension</h2>
|
568 |
-
<div class="sub-section">
|
569 |
-
<h3 id="portal-about">About the Member Login Portal</h3>
|
570 |
-
<p>You can now </strong> add Member-Only pages and posts</strong> to your WordPress site, with the addition of the Member Login Portal. Your Our Team Showcase Team Members can login to a custom dashboard to view edit their basic profiles, and view restricted content.</p>
|
571 |
-
<p>This plugin is ideal for web site administrators that want to share:</p>
|
572 |
-
<ul>
|
573 |
-
<li>Company best-practices</li>
|
574 |
-
<li>How-tos</li>
|
575 |
-
<li>Event news</li>
|
576 |
-
<li>Policy updates</li>
|
577 |
-
</ul>
|
578 |
-
<p>and more, with their staff, associates or contributing authors.</p>
|
579 |
-
<p>Content can be restricted to <b>specific groups of Team Members</b> within the plugin; allowing you to create and post content for a group of Members that might not even be displayed on the front-end of your site.</p>
|
580 |
-
</div>
|
581 |
-
|
582 |
-
<div class="sub-section">
|
583 |
-
<h3 id="portal-install">Installing & Configuring the Member Portal</h3>
|
584 |
-
<p>The Member Login Portal extension is a plugin that you can download <a href="https://smartcatdesign.net/downloads/member-login-portal/" target="_blank"> from the Smartcat site,</a> under Products. Add it to your WordPress site by following the same installation and activation instructions included here for Our Team Showcase.</p>
|
585 |
-
<p>When the Portal is installed and activated on a WordPress site, the Pages "Login", "Logout" and "Profile" will automatically be created on your site. The urls for these pages are listed at the top of the main Portal Page, under "Portal Pages". </p>
|
586 |
-
</div>
|
587 |
-
<div class="sub-section">
|
588 |
-
<h3 id="portal-settings">Member Login Portal Settings</h3>
|
589 |
-
<p>The main settings for the Member Login Portal are found in the Team menu, on your WordPress Dashbaord. Click "Portal" at the bottom of the sub-menu to access these settings.</p>
|
590 |
-
<h4>Login Redirect Destination:</h4>
|
591 |
-
<p>Select the page users will be redirected to when they click "Login"
|
592 |
-
<h4>Un-authorized Redirect Destination:</h4>
|
593 |
-
<p>Choose the page a user will be reidrected to if they do not have access to a page or post.</p>
|
594 |
-
<h4>Wrong Group Redirect Destination:</h4>
|
595 |
-
<p>Choose the page a user will be redirected to when they try to access content assigned to another group.</p>
|
596 |
-
<h4>Portal Logo Image:</h4>
|
597 |
-
<p>Paste the link to your logo media file from your WordPress Media directory. </p>
|
598 |
-
|
599 |
-
</div>
|
600 |
-
<div class="sub-section">
|
601 |
-
<h3 id="portal-email">Email Settings</h3>
|
602 |
-
<p>This is the setting for the admin emails that will be sent to registrants for your Member Login Portal. Set the name and the address users will see when they receive an automated message from the Member Portal. (Sender Name, Sender Email Address.)</p>
|
603 |
-
<p>Add copy for the automated Welcome Email for new Members, as well as for the Password Reset Email.</p>
|
604 |
-
</div>
|
605 |
-
<div class="sub-section">
|
606 |
-
<h3 id="portal-extra">Extra Options</h3>
|
607 |
-
<p>Set the Welcome Message for your Team Member Portal. This text appears prominantly at the top of the Team Member's Dashboard when they first login. Example: "Welcome to Smartcat's Team Area! Here, you'll find everything you need to be a successful WordPress developer with Smartcat!"</p>
|
608 |
-
</div>
|
609 |
-
<div class="sub-section">
|
610 |
-
<h3 id="portal-content">Restricting Content to Members Only</h3>
|
611 |
-
<p>Content is restricted to groups on a per-page basis. Once the Member Login Portal is activated, a new box appears in Editing area for each Page and Post, below the box for page or post. The site admin can select groups of Team Members to access that content. The default for published content that isn't selected is to remain public. </p>
|
612 |
-
<h3>Content Protection & Permissions</h3>
|
613 |
-
<p>Select "Yes" if you want to protect the content (make it visible to members only); or, select "No" if you want the content to be visible to the general public.</p>
|
614 |
-
<h3>Allow Access To</h3>
|
615 |
-
<p>If you chose "Yes," next select either "All logged in Members" or "Selected Groups"</p>
|
616 |
-
<h3>Selected Team Member Groups</h3>
|
617 |
-
<p> A list of the Groups you've created using the Our Team Showcase Plugin will appear here. If you chose "Selected Groups" above, click one or several of the groups you'd like to be able to view this content.</p>
|
618 |
-
<p>Click "Update" to save your changes.</p>
|
619 |
-
</div>
|
620 |
-
<div class="sub-section">
|
621 |
-
<h3 id="portal-profile">Team Member Profile Options</h3>
|
622 |
-
<p>When an Our Team Showcase Team Member logs in to the Member Portal, they'll arrive on the Member Portal dashboard. Their restircted Pages appear in the left-hand dashboard below their picture. Their restricted posts appear in the main body of the page. They can browse these posts by category.</p>
|
623 |
-
<p>A team member can also update their settings by clicking "Profile." </p>
|
624 |
-
<p><em class="tip">SMARTCAT TIP</em> <i>Any changes they make to their Member Login Portal profile will also appear in the Our Team Showcase plugin on your site.</i></p>
|
625 |
-
<p>Team Members can edit their Profile image, Name, Job Title, Bio, and Social Links.</p>
|
626 |
-
<p>Team Members can also manage their passwords for the Team Member Portal.</p>
|
627 |
-
<p>To view the public side of the webiste, while remaining logged in, Team Members simply need to click the "Public Site" icon, below their image.</p>
|
628 |
-
|
629 |
-
<h3 id="portal-admin">Team Member Profile Admin Settings</h3>
|
630 |
-
<p>Once the Portal is activated on your site, a new box appears on the editing page for an individual Team Member, called "Team Portal". To grant a team member access to the Portal, select the "Active" button for Team Member Status. To Deactivate a user, select "Inactive." </p>
|
631 |
-
<p>The email address associated with their Team Member Profile will auto-populate as their Email Address.</p>
|
632 |
-
<p>If you want to reset the Team Members password, enter a new password and click "Update" to save. This will override the password sent to them when they register.</p>
|
633 |
-
</div>
|
634 |
-
|
635 |
-
<h2 id="faq">Frequently Asked Questions</h2>
|
636 |
-
|
637 |
-
<div class="sub-section">
|
638 |
-
<h3>What is the recommended Image size for the team members ?</h3>
|
639 |
-
<p>Image size should be 400x400, however you can also use 300x300. Make sure all your images are the same size</p>
|
640 |
-
</div>
|
641 |
-
|
642 |
-
|
643 |
-
<div class="sub-section">
|
644 |
-
<h3>I can't add a featured image to the team member</h3>
|
645 |
-
<p>The ability to add Featured Images is supported in the plugin, however the way that WordPress Works, the Theme you are using needs to also allow for featured images to be used.
|
646 |
-
|
647 |
-
Most themes usually allow for featured images, some themes restrict it to single post types, and not custom-post-types.
|
648 |
-
|
649 |
-
In order to fix this issue, please edit your theme’s functions.php file and add this code to it:</p>
|
650 |
-
<p>
|
651 |
-
<code>function my_custom_theme_setup() {
|
652 |
-
add_theme_support('post-thumbnails')
|
653 |
-
}
|
654 |
-
add_action( 'after_setup_theme', 'my_custom_theme_setup' );
|
655 |
-
</code>
|
656 |
-
</p>
|
657 |
-
</div>
|
658 |
-
|
659 |
-
<div class="sub-section">
|
660 |
-
<h3>How do I remove the "posted on (date)" from the single member view ?</h3>
|
661 |
-
<p>The date usually comes from your theme's single.php file. If you remove the code snippet from your single.php file,
|
662 |
-
the date will also be removed from your Posts.</p>
|
663 |
-
<p>Alternatively, you can use the Custom Template included in the plugin, which you can select from the plugin settings</p>
|
664 |
-
|
665 |
-
</div>
|
666 |
-
<div class="sub-section">
|
667 |
-
<h3>What if I don't want a Single Member View at all?</h3>
|
668 |
-
<p>From the "Single Member View" settings, you have the options to select "Disable" for Single Member View. The showcase will now display with no active link to a Single Member profile on the Team Member's page.</p>
|
669 |
-
</div>
|
670 |
-
|
671 |
-
<footer>Copyright © <a href="http://smartcat.ca">Smartcat</a></footer>
|
672 |
-
</div>
|
673 |
-
</div>
|
674 |
-
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
admin/options.php
DELETED
@@ -1,311 +0,0 @@
|
|
1 |
-
<?php include_once 'setting.php';
|
2 |
-
extract(get_option('smartcat_team_options')); ?>
|
3 |
-
<div class="width70 left">
|
4 |
-
<p>To display the Team, copy and paste this shortcode into the page or widget where you want to show it.
|
5 |
-
<input type="text" readonly="readonly" value="[our-team]" style="width: 130px" onfocus="this.select()"/>
|
6 |
-
<div>You can set the <strong>template</strong>, <strong>single_template</strong> and group in the <strong>shortcode</strong></div>
|
7 |
-
</p>
|
8 |
-
<p><iframe src="//www.facebook.com/plugins/like.php?href=https%3A%2F%2Fwww.facebook.com%2FSmartcatDesign&width&layout=standard&action=like&show_faces=false&share=false&height=35&appId=233286813420319" scrolling="no" frameborder="0" style="border:none; overflow:hidden; height:35px;" allowTransparency="true"></iframe></p>
|
9 |
-
|
10 |
-
<form name="sc_our_team_post_form" method="post" action="" enctype="multipart/form-data">
|
11 |
-
<table class="widefat">
|
12 |
-
<thead>
|
13 |
-
<tr>
|
14 |
-
<th colspan="2"><b>Team View Settings</b></th>
|
15 |
-
</tr>
|
16 |
-
</thead>
|
17 |
-
<tbody>
|
18 |
-
<tr>
|
19 |
-
<td>Template</td>
|
20 |
-
<td>
|
21 |
-
<select name="smartcat_team_options[template]" id="sc_our_team_template">
|
22 |
-
<option>Select Template</option>
|
23 |
-
<option value="grid" <?php echo 'grid' == esc_attr($template) ? 'selected=selected' : ''; ?>>Grid - Boxes</option>
|
24 |
-
<option value="grid_circles" <?php echo 'grid_circles' == esc_attr($template) ? 'selected=selected' : ''; ?>>Grid - Circles</option>
|
25 |
-
<option value="grid_circles2" <?php echo 'grid_circles2' == esc_attr($template) ? 'selected=selected' : ''; ?>>Grid - Circles Version 2</option>
|
26 |
-
<option disabled="disabled">List - Stacked ( pro version )</option>
|
27 |
-
<option disabled="disabled">Honey Comb ( pro version )</option>
|
28 |
-
<option disabled="disabled">Carousel ( pro version )</option>
|
29 |
-
<option disabled="disabled">Staff Directory ( pro version )</option>
|
30 |
-
</select>
|
31 |
-
</td>
|
32 |
-
</tr>
|
33 |
-
|
34 |
-
<tr id="columns-row">
|
35 |
-
<td>Grid Columns</td>
|
36 |
-
<td>
|
37 |
-
<select name="smartcat_team_options[columns]">
|
38 |
-
<option value="2" <?php echo '2' == esc_attr($columns) ? 'selected=selected' : ''; ?>>2</option>
|
39 |
-
<option value="3" <?php echo '3' == esc_attr($columns) ? 'selected=selected' : ''; ?>>3</option>
|
40 |
-
<option value="4" <?php echo '4' == esc_attr($columns) ? 'selected=selected' : ''; ?>>4</option>
|
41 |
-
<option value="5" <?php echo '5' == esc_attr($columns) ? 'selected=selected' : ''; ?>>5</option>
|
42 |
-
<option value="10" <?php echo '10' == esc_attr($columns) ? 'selected=selected' : ''; ?>>10</option>
|
43 |
-
</select>
|
44 |
-
</td>
|
45 |
-
</tr>
|
46 |
-
|
47 |
-
|
48 |
-
<tr id="margin-row">
|
49 |
-
<td>Margin</td>
|
50 |
-
<td>
|
51 |
-
<select name="smartcat_team_options[margin]">
|
52 |
-
<option value="0" <?php echo '0' == esc_attr($margin) ? 'selected=selected' : ''; ?>>No margin</option>
|
53 |
-
<option value="5" <?php echo '5' == esc_attr($margin) ? 'selected=selected' : ''; ?>>5</option>
|
54 |
-
<option value="10" <?php echo '10' == esc_attr($margin) ? 'selected=selected' : ''; ?>>10</option>
|
55 |
-
<option value="15" <?php echo '15' == esc_attr($margin) ? 'selected=selected' : ''; ?>>15</option>
|
56 |
-
</select>px
|
57 |
-
</td>
|
58 |
-
</tr>
|
59 |
-
|
60 |
-
<tr id="social_icons_row">
|
61 |
-
<td><?php _e('Display Social Icons') ?></td>
|
62 |
-
<td>
|
63 |
-
<select name="smartcat_team_options[social]">
|
64 |
-
<option value="yes" <?php echo 'yes' == esc_attr($social) ? 'selected=selected' : ''; ?>>Yes</option>
|
65 |
-
<option value="no" <?php echo 'no' == esc_attr($social) ? 'selected=selected' : ''; ?>>No</option>
|
66 |
-
</select>
|
67 |
-
</td>
|
68 |
-
</tr>
|
69 |
-
|
70 |
-
<tr id="social_links_row">
|
71 |
-
<td><?php _e('Social Icon Links') ?></td>
|
72 |
-
<td>
|
73 |
-
<select name="smartcat_team_options[social_link]">
|
74 |
-
<option value="" <?php echo '' == esc_attr($social_link) ? 'selected=selected' : ''; ?>>Same Page</option>
|
75 |
-
<option value="new" <?php echo 'new' == esc_attr($social_link) ? 'selected=selected' : ''; ?>>New Page</option>
|
76 |
-
</select>
|
77 |
-
</td>
|
78 |
-
</tr>
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
<tr id="">
|
83 |
-
<td>Display Name</td>
|
84 |
-
<td>
|
85 |
-
<select name="smartcat_team_options[name]">
|
86 |
-
<option value="yes" <?php echo 'yes' == esc_attr($name) ? 'selected=selected' : ''; ?>>Yes</option>
|
87 |
-
<option value="no" <?php echo 'no' == esc_attr($name) ? 'selected=selected' : ''; ?>>No</option>
|
88 |
-
</select>
|
89 |
-
</td>
|
90 |
-
</tr>
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
<tr id="">
|
95 |
-
<td>Display Title</td>
|
96 |
-
<td>
|
97 |
-
<select name="smartcat_team_options[title]">
|
98 |
-
<option value="yes" <?php echo 'yes' == esc_attr($title) ? 'selected=selected' : ''; ?>>Yes</option>
|
99 |
-
<option value="no" <?php echo 'no' == esc_attr($title) ? 'selected=selected' : ''; ?>>No</option>
|
100 |
-
</select>
|
101 |
-
</td>
|
102 |
-
</tr>
|
103 |
-
|
104 |
-
<tr>
|
105 |
-
<td>Single Member URL Slug</td>
|
106 |
-
<td>
|
107 |
-
<input type="text" name="smartcat_team_options[slug]" value="<?php echo esc_attr($slug); ?>" />
|
108 |
-
<p>
|
109 |
-
<em>Set the slug for the single team member page. <b><?php echo home_url() . '/' . $slug . '/member-name'; ?></b></em><br>
|
110 |
-
<em>If your update doesn't work, go to Settings - Permalinks & hit Save</em>
|
111 |
-
</p>
|
112 |
-
</td>
|
113 |
-
</tr>
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
<tr>
|
118 |
-
<td>Number of members to display</td>
|
119 |
-
<td>
|
120 |
-
<input type="text" value="<?php echo esc_attr($member_count); ?>" name="smartcat_team_options[member_count]" placeholder="number of members to show"/><br>
|
121 |
-
<em>Set to -1 to display all members</em>
|
122 |
-
</td>
|
123 |
-
</tr>
|
124 |
-
|
125 |
-
<tr>
|
126 |
-
<td>Main Color</td>
|
127 |
-
<td>
|
128 |
-
<input class="wp_popup_color width25" type="text" value="<?php echo esc_attr($text_color); ?>" name="smartcat_team_options[text_color]"/>
|
129 |
-
</td>
|
130 |
-
</tr>
|
131 |
-
|
132 |
-
<tr>
|
133 |
-
<td>Max Word Count</td>
|
134 |
-
<td>
|
135 |
-
<em class="pro">pro version</em>
|
136 |
-
</td>
|
137 |
-
</tr>
|
138 |
-
|
139 |
-
|
140 |
-
<tr id="">
|
141 |
-
<td>Name Font Size</td>
|
142 |
-
<td>
|
143 |
-
<em class="pro">pro version</em>
|
144 |
-
</td>
|
145 |
-
</tr>
|
146 |
-
|
147 |
-
<tr id="">
|
148 |
-
<td>Title Font Size</td>
|
149 |
-
<td>
|
150 |
-
<em class="pro">pro version</em>
|
151 |
-
</td>
|
152 |
-
</tr>
|
153 |
-
|
154 |
-
<tr id="social_links_style_row">
|
155 |
-
<td><?php _e('Icons Style') ?></td>
|
156 |
-
<td>
|
157 |
-
<em class="pro">pro version</em>
|
158 |
-
</td>
|
159 |
-
</tr>
|
160 |
-
|
161 |
-
</tbody>
|
162 |
-
</table>
|
163 |
-
|
164 |
-
<table class="widefat">
|
165 |
-
<thead>
|
166 |
-
<tr>
|
167 |
-
<th colspan="2"><b>Single Member View Settings</b></th>
|
168 |
-
</tr>
|
169 |
-
<tr>
|
170 |
-
<td>Template</td>
|
171 |
-
<td>
|
172 |
-
<select name="smartcat_team_options[single_template]">
|
173 |
-
<option>Select Template</option>
|
174 |
-
<option value="standard" <?php echo 'standard' == esc_attr($single_template) ? 'selected=selected' : ''; ?>>Theme Default (single post)</option>
|
175 |
-
<option value="disable" <?php echo 'disable' == esc_attr($single_template) ? 'selected=selected' : ''; ?>>Disabled</option>
|
176 |
-
<option disabled="disabled" value="custom" <?php echo 'custom' == esc_attr($single_template) ? 'selected=selected' : ''; ?>>Custom Template - ( Pro Version )</option>
|
177 |
-
<option disabled="disabled">Card (pop-up) - ( pro version )</option>
|
178 |
-
<option disabled="disabled">Side Panel - ( pro version )</option>
|
179 |
-
</select>
|
180 |
-
</td>
|
181 |
-
</tr>
|
182 |
-
|
183 |
-
<tr id="">
|
184 |
-
<td>Display Social Icons</td>
|
185 |
-
<td>
|
186 |
-
<select name="smartcat_team_options[single_social]">
|
187 |
-
<option value="no" <?php echo 'no' == esc_attr($single_social) ? 'selected=selected' : ''; ?>>No</option>
|
188 |
-
<option value="yes" <?php echo 'yes' == esc_attr($single_social) ? 'selected=selected' : ''; ?>>Yes</option>
|
189 |
-
</select>
|
190 |
-
</td>
|
191 |
-
</tr>
|
192 |
-
|
193 |
-
<tr>
|
194 |
-
<td>Card Popup Margin From Top</td>
|
195 |
-
<td>
|
196 |
-
<em>pro version</em>
|
197 |
-
</td>
|
198 |
-
</tr>
|
199 |
-
|
200 |
-
|
201 |
-
|
202 |
-
<tr id="">
|
203 |
-
<td>Display Skills Bar</td>
|
204 |
-
<td>
|
205 |
-
<em>pro version</em>
|
206 |
-
</td>
|
207 |
-
</tr>
|
208 |
-
|
209 |
-
<tr>
|
210 |
-
<td>Skills Title</td>
|
211 |
-
<td>
|
212 |
-
<em>pro version</em>
|
213 |
-
</td>
|
214 |
-
</tr>
|
215 |
-
|
216 |
-
|
217 |
-
|
218 |
-
<tr>
|
219 |
-
<td>Image Style</td>
|
220 |
-
<td>
|
221 |
-
<em>pro version</em>
|
222 |
-
</td>
|
223 |
-
</tr>
|
224 |
-
|
225 |
-
</thead>
|
226 |
-
</table>
|
227 |
-
|
228 |
-
|
229 |
-
<div style="text-align: right">
|
230 |
-
<input type="hidden" name="smartcat_team_options[redirect]" value=""/>
|
231 |
-
<input type="submit" name="sc_our_team_save" value="Update" class="button button-primary button-hero" />
|
232 |
-
|
233 |
-
</div>
|
234 |
-
<br>
|
235 |
-
|
236 |
-
|
237 |
-
|
238 |
-
</form>
|
239 |
-
</div>
|
240 |
-
|
241 |
-
<div class="clear"></div>
|
242 |
-
|
243 |
-
<div class="demo-table">
|
244 |
-
<h3>Preview</h3>
|
245 |
-
|
246 |
-
<div class="left width50">
|
247 |
-
|
248 |
-
<h3>Carousel</h3>
|
249 |
-
<img src="<?php echo SC_TEAM_URL ?>screenshot-6.jpg" >
|
250 |
-
|
251 |
-
<h3>Honeycomb Demo</h3>
|
252 |
-
<img src="<?php echo SC_TEAM_URL ?>screenshot-4.jpg" >
|
253 |
-
|
254 |
-
<h3>Stacked List Demo</h3>
|
255 |
-
<img src="<?php echo SC_TEAM_URL ?>screenshot-5.jpg" >
|
256 |
-
|
257 |
-
<h3>Grid Boxes & Grid Circles Demo</h3>
|
258 |
-
<img src="<?php echo SC_TEAM_URL ?>inc/img/circles2_demo.jpg" >
|
259 |
-
<img src="<?php echo SC_TEAM_URL ?>inc/img/grid_demo.jpg" >
|
260 |
-
|
261 |
-
|
262 |
-
</div>
|
263 |
-
|
264 |
-
<div class="left width50">
|
265 |
-
|
266 |
-
<h3>Popup Card Demo</h3>
|
267 |
-
<img src="<?php echo SC_TEAM_URL ?>inc/img/card_demo.jpg" >
|
268 |
-
|
269 |
-
<img src="<?php echo SC_TEAM_URL ?>inc/img/circles_demo.jpg">
|
270 |
-
|
271 |
-
<h3>Staff Directory</h3>
|
272 |
-
<img src="<?php echo SC_TEAM_URL ?>inc/img/directory.jpg"/>
|
273 |
-
|
274 |
-
<h3>Custom Template</h3>
|
275 |
-
<img src="<?php echo SC_TEAM_URL ?>inc/img/custom_demo.jpg"/>
|
276 |
-
|
277 |
-
<h3>Sliding Side Panel</h3>
|
278 |
-
<img src="<?php echo SC_TEAM_URL ?>inc/img/panel_demo.jpg" />
|
279 |
-
</div>
|
280 |
-
|
281 |
-
|
282 |
-
|
283 |
-
|
284 |
-
|
285 |
-
|
286 |
-
|
287 |
-
|
288 |
-
</div>
|
289 |
-
|
290 |
-
|
291 |
-
|
292 |
-
|
293 |
-
</div>
|
294 |
-
<script>
|
295 |
-
function confirm_reset() {
|
296 |
-
if (confirm("Are you sure you want to reset to defaults ?")) {
|
297 |
-
return true;
|
298 |
-
} else {
|
299 |
-
return false;
|
300 |
-
}
|
301 |
-
}
|
302 |
-
jQuery(document).ready(function ($) {
|
303 |
-
$("#sc_popup_shortcode").focusout(function () {
|
304 |
-
var shortcode = jQuery(this).val();
|
305 |
-
shortcode = shortcode.replace(/"/g, "").replace(/'/g, "");
|
306 |
-
jQuery(this).val(shortcode);
|
307 |
-
});
|
308 |
-
|
309 |
-
});
|
310 |
-
|
311 |
-
</script>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
admin/reorder.php
DELETED
@@ -1,79 +0,0 @@
|
|
1 |
-
<?php include_once 'setting.php'; ?>
|
2 |
-
|
3 |
-
<div class="width70 left">
|
4 |
-
<table class="widefat">
|
5 |
-
<thead>
|
6 |
-
<tr>
|
7 |
-
<th><b>Drag & Drop the member's pictures to sort them in the order you want them to appear</b></th>
|
8 |
-
</tr>
|
9 |
-
</thead>
|
10 |
-
<tbody>
|
11 |
-
<tr>
|
12 |
-
<td>
|
13 |
-
<ul class="sc_sortable grid" data-action="<?php echo SC_TEAM_PATH; ?>">
|
14 |
-
<?php
|
15 |
-
$args = array(
|
16 |
-
'post_type' => 'team_member',
|
17 |
-
'meta_key' => 'sc_member_order',
|
18 |
-
'orderby' => 'meta_value_num',
|
19 |
-
'order' => 'ASC',
|
20 |
-
'posts_per_page' => -1,
|
21 |
-
);
|
22 |
-
$members = new WP_Query($args);
|
23 |
-
if ($members->have_posts()) {
|
24 |
-
while ($members->have_posts()) {
|
25 |
-
$members->the_post();
|
26 |
-
$id = get_the_ID();
|
27 |
-
$order = get_post_meta($id, 'sc_member_order', true);
|
28 |
-
if (has_post_thumbnail())
|
29 |
-
$thumb_url = wp_get_attachment_url(get_post_thumbnail_id($id));
|
30 |
-
else
|
31 |
-
$thumb_url = SC_TEAM_PATH . 'img/noprofile.jpg';
|
32 |
-
?>
|
33 |
-
<li id="<?php echo $id; ?>" itemscope itemtype="http://schema.org/Person" class="sc_team_member ui-state-default" data-order="<?php echo $order; ?>">
|
34 |
-
<div class="sc_team_member_inner">
|
35 |
-
<img src="<?php echo $thumb_url; ?>" />
|
36 |
-
<div class="sc_team_member_overlay">
|
37 |
-
<?php the_title() ?>
|
38 |
-
</div>
|
39 |
-
<div itemprop="jobtitle" class="sc_team_member_jobtitle">
|
40 |
-
<?php echo get_post_meta($id, 'team_member_title', true); ?>
|
41 |
-
</div>
|
42 |
-
</div>
|
43 |
-
</li>
|
44 |
-
<?php
|
45 |
-
}
|
46 |
-
} else {
|
47 |
-
echo 'There are no team members to display';
|
48 |
-
}
|
49 |
-
?>
|
50 |
-
</ul>
|
51 |
-
</tr>
|
52 |
-
</tbody>
|
53 |
-
</table>
|
54 |
-
<!--<input type="submit" name="wp_popup_reset" value="Reset" class="button button-primary" onclick="return confirm_reset();"/>-->
|
55 |
-
<a class="button button-primary" id="set_order">Save Order</a>
|
56 |
-
<p class="sc_team_member_update_status">
|
57 |
-
<span class="sc_team_member_updating"><img src="<?php echo SC_TEAM_URL . 'inc/img/spinner.gif' ?>" class=""/> Saving</span>
|
58 |
-
<span class="sc_team_member_saved"><img src="<?php echo SC_TEAM_URL . 'inc/img/check.png' ?>" class=""/> Saved!</span>
|
59 |
-
</p>
|
60 |
-
</div>
|
61 |
-
</div>
|
62 |
-
<script>
|
63 |
-
function confirm_reset() {
|
64 |
-
if (confirm("Are you sure you want to reset to defaults ?")) {
|
65 |
-
return true;
|
66 |
-
} else {
|
67 |
-
return false;
|
68 |
-
}
|
69 |
-
}
|
70 |
-
jQuery(document).ready(function($) {
|
71 |
-
$("#sc_popup_shortcode").focusout(function() {
|
72 |
-
var shortcode = jQuery(this).val();
|
73 |
-
shortcode = shortcode.replace(/"/g, "").replace(/'/g, "");
|
74 |
-
jQuery(this).val(shortcode);
|
75 |
-
});
|
76 |
-
|
77 |
-
});
|
78 |
-
|
79 |
-
</script>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
admin/setting.php
DELETED
@@ -1,185 +0,0 @@
|
|
1 |
-
<style>
|
2 |
-
#gopro{
|
3 |
-
width: 100%;
|
4 |
-
display: block;
|
5 |
-
clear: both;
|
6 |
-
padding: 10px;
|
7 |
-
margin: 10px 8px 15px 5px;
|
8 |
-
border: 1px solid #e1e1e1;
|
9 |
-
background: #464646;
|
10 |
-
color: #ffffff;
|
11 |
-
overflow: hidden;
|
12 |
-
}
|
13 |
-
#wrapper{
|
14 |
-
border: 1px solid #f0f0f0;
|
15 |
-
width: 95%;
|
16 |
-
|
17 |
-
}
|
18 |
-
#wrapper{
|
19 |
-
border: 1px solid #f0f0f0;
|
20 |
-
width: 95%;
|
21 |
-
|
22 |
-
}
|
23 |
-
table.widefat{
|
24 |
-
margin-bottom: 15px;
|
25 |
-
}
|
26 |
-
table.widefat tr{
|
27 |
-
transition: 0.3s all ease-in-out;
|
28 |
-
-moz-transition: 0.3s all ease-in-out;
|
29 |
-
-webkit-transition: 0.3s all ease-in-out;
|
30 |
-
}
|
31 |
-
table.widefat tr:hover{
|
32 |
-
/*background: #E6E6E6;*/
|
33 |
-
}
|
34 |
-
|
35 |
-
#wrapper input[type='text']{
|
36 |
-
width: 80%;
|
37 |
-
transition: 0.3s all ease-in-out;
|
38 |
-
-moz-transition: 0.3s all ease-in-out;
|
39 |
-
-webkit-transition: 0.3s all ease-in-out;
|
40 |
-
}
|
41 |
-
#wrapper input[type='text']:focus{
|
42 |
-
border: 1px solid #1784c9;
|
43 |
-
box-shadow: 0 0 7px #1784c9;
|
44 |
-
-moz-box-shadow: 0 0 5px #1784c9;
|
45 |
-
-webkit-box-shadow: 0 0 5px #1784c9;
|
46 |
-
}
|
47 |
-
#wrapper input[type='text'].small-text{
|
48 |
-
width: 20%;
|
49 |
-
}
|
50 |
-
.proversion{
|
51 |
-
color: red;
|
52 |
-
font-style: italic;
|
53 |
-
}
|
54 |
-
.choose-progress{
|
55 |
-
display: none;
|
56 |
-
}
|
57 |
-
.sc_popup_mode{
|
58 |
-
display: inline-block;
|
59 |
-
width: 15px;
|
60 |
-
height: 15px;
|
61 |
-
border-radius: 100%;
|
62 |
-
position: relative;
|
63 |
-
top: 2px;
|
64 |
-
box-shadow: 0 0 3px #333;
|
65 |
-
-moz-box-shadow: 0 0 3px #333;
|
66 |
-
-webkit-box-shadow: 0 0 3px #333;
|
67 |
-
}
|
68 |
-
|
69 |
-
.sc_popup_mode_off{
|
70 |
-
background: #F54412;
|
71 |
-
}
|
72 |
-
.sc_popup_mode_live{
|
73 |
-
background: #84E11F;
|
74 |
-
}
|
75 |
-
.sc_popup_mode_test{
|
76 |
-
background: #FF9717;
|
77 |
-
}
|
78 |
-
.left{ float: left;}
|
79 |
-
.right {float: right;}
|
80 |
-
.center{text-align: center;}
|
81 |
-
.width70{ width: 70%;}
|
82 |
-
.width25{ width: 25% !important;}
|
83 |
-
.width50{ width: 50%;}
|
84 |
-
.larger{ font-size: larger;}
|
85 |
-
.bold{ font-weight: bold;}
|
86 |
-
.editcursor{ cursor: text}
|
87 |
-
.demo-table{
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
overflow: hidden;
|
92 |
-
|
93 |
-
}
|
94 |
-
.demo-table .width50{
|
95 |
-
width: 44%;
|
96 |
-
padding: 20px;
|
97 |
-
margin-right: 2%;
|
98 |
-
background: #fff;
|
99 |
-
}
|
100 |
-
.demo-table img{
|
101 |
-
width: 100%;
|
102 |
-
}
|
103 |
-
</style>
|
104 |
-
|
105 |
-
<div id="wrapper">
|
106 |
-
<div id="gopro">
|
107 |
-
<div class="left">
|
108 |
-
<h1><b style="color: #37BDF7">Our Team Settings</b></h1>
|
109 |
-
<div><em>Why go pro?</em> 4 More templates including a uniue Honeycomb and Carouse. More features, and more control! <br>Professional, sleek and easily customizable Team page & widget with extra options!</div>
|
110 |
-
</div>
|
111 |
-
<div class="right">
|
112 |
-
<a href="https://smartcatdesign.net/our-team-showcase-demo/" target="_blank" class="button-secondary" style="padding: 40px;line-height: 0;font-size: 20px">View Demo</a>
|
113 |
-
</div>
|
114 |
-
<div class="right" style="margin-right: 20px">
|
115 |
-
<a href="https://smartcatdesign.net/downloads/our-team-showcase/" target="_blank" class="button-primary" style="padding: 40px;line-height: 0;font-size: 20px">GO PRO NOW</a>
|
116 |
-
</div>
|
117 |
-
</div>
|
118 |
-
<div class="width25 right">
|
119 |
-
|
120 |
-
|
121 |
-
<table class="widefat">
|
122 |
-
<thead>
|
123 |
-
<tr>
|
124 |
-
<th><b>Quick Reference</b> </th>
|
125 |
-
</tr>
|
126 |
-
<tr>
|
127 |
-
<td>
|
128 |
-
<ul>
|
129 |
-
<li>- Image recommended size is 400x400 px. To achieve the best appearance, please ensure all team member images are the same size.</li>
|
130 |
-
<li>- To display the team members, add <b>[our-team]</b> shortcode in a widget, post or page</li>
|
131 |
-
<li>- To display members from a specific group, add <b>[our-team group="name of your group"]</b></li>
|
132 |
-
<li>- To override the template choice from the shortcode, add <b>[our-team template="grid"]</b> . Template Options: <em>grid, grid_circles, grid_circles2</em></li>
|
133 |
-
<li>- Click on Re-order to arrange the order of the team members</li>
|
134 |
-
<li>- Click on Groups to create groups, such as department names, team names</li>
|
135 |
-
<li>- Custom Single Template: Copy /inc/template/single-team_member.php into your theme root folder and edit it as you please. <a href="https://codex.wordpress.org/Post_Type_Templates" target="_BLANK">More Details</a></li>
|
136 |
-
</ul>
|
137 |
-
|
138 |
-
</td>
|
139 |
-
</tr>
|
140 |
-
</thead>
|
141 |
-
</table>
|
142 |
-
|
143 |
-
<?php if( ! is_plugin_active( 'testimonials-reviews-showcase/our_testimonials_showcase.php') ) : ?>
|
144 |
-
<!-- <table class="widefat">
|
145 |
-
<thead>
|
146 |
-
<tr>
|
147 |
-
<th><b>Testimonials Showcase</b> </th>
|
148 |
-
</tr>
|
149 |
-
</thead>
|
150 |
-
<tr>
|
151 |
-
<td>Showcase your Testimonials & reviews with star ratings and professional design. Download </td>
|
152 |
-
</tr>
|
153 |
-
<tr>
|
154 |
-
<td>
|
155 |
-
<p>
|
156 |
-
<img src="https://s.w.org/plugins/testimonials-reviews-showcase/screenshot-2.jpg" style="width: 100%"/>
|
157 |
-
</p>
|
158 |
-
</td>
|
159 |
-
</tr>
|
160 |
-
|
161 |
-
<tr class="center">
|
162 |
-
|
163 |
-
<td>
|
164 |
-
<a class="button-primary" href="<?php echo admin_url( 'themes.php?page=tgmpa-install-plugins&plugin_status=install' ); ?>" >Install Plugin</a>
|
165 |
-
<a class="button-secondary" href="https://wordpress.org/plugins/testimonials-reviews-showcase/screenshots/" target="_BLANK">Demo</a>
|
166 |
-
|
167 |
-
</td>
|
168 |
-
</tr>
|
169 |
-
|
170 |
-
</table>-->
|
171 |
-
<?php endif; ?>
|
172 |
-
|
173 |
-
<table class="widefat">
|
174 |
-
<thead>
|
175 |
-
|
176 |
-
<tr>
|
177 |
-
<td>
|
178 |
-
<p>If you come across any bugs or issues, please <strong><a href="https://smartcatdesign.net/faqs/" target="_blank">contact us</a></strong> and let us know</p>
|
179 |
-
</td>
|
180 |
-
</tr>
|
181 |
-
</thead>
|
182 |
-
</table>
|
183 |
-
|
184 |
-
|
185 |
-
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assets/admin/css/admin.css
ADDED
@@ -0,0 +1,51 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/* Global Admin */
|
2 |
+
|
3 |
+
#menu-posts-team_member .wp-menu-image:before {
|
4 |
+
color: #758355 !important;
|
5 |
+
}
|
6 |
+
|
7 |
+
#menu-posts-team_member:hover .wp-menu-image:before,
|
8 |
+
#menu-posts-team_member.wp-menu-open .wp-menu-image:before {
|
9 |
+
color: #a7bb6c !important;
|
10 |
+
}
|
11 |
+
|
12 |
+
/* edit.php */
|
13 |
+
|
14 |
+
.ots-meta-box {
|
15 |
+
border: none !important;
|
16 |
+
}
|
17 |
+
|
18 |
+
.ots-meta-box .regular-text {
|
19 |
+
width: 100%;
|
20 |
+
}
|
21 |
+
|
22 |
+
.ots-meta-box input[disabled],
|
23 |
+
.ots-meta-box select[disabled],
|
24 |
+
.ots-meta-box textarea[disabled] {
|
25 |
+
border: 1px solid #bbb;
|
26 |
+
}
|
27 |
+
|
28 |
+
.ots-member-skill-rating {
|
29 |
+
width: 22%;
|
30 |
+
float: right;
|
31 |
+
}
|
32 |
+
|
33 |
+
.ots-member-skill-title {
|
34 |
+
width: 75%;
|
35 |
+
}
|
36 |
+
|
37 |
+
@media ( min-width: 769px ) {
|
38 |
+
|
39 |
+
#team_member_image {
|
40 |
+
width: 20%;
|
41 |
+
}
|
42 |
+
|
43 |
+
#team_member_image,
|
44 |
+
.column-team_member_image {
|
45 |
+
text-align: center;
|
46 |
+
}
|
47 |
+
}
|
48 |
+
|
49 |
+
.ots-pro {
|
50 |
+
color: #ff0000;
|
51 |
+
}
|
assets/admin/css/settings.css
ADDED
@@ -0,0 +1,451 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
|
2 |
+
/* Settings page */
|
3 |
+
#ots-display-limit-number {
|
4 |
+
width: 160px;
|
5 |
+
}
|
6 |
+
|
7 |
+
.ots-admin-page {
|
8 |
+
margin: -20px 0 0 -20px;
|
9 |
+
padding-top: 20px;
|
10 |
+
font-family: 'Lato', 'sans-serif' !important;
|
11 |
+
}
|
12 |
+
|
13 |
+
.ots-admin-page h2,
|
14 |
+
.ots-admin-page .nav-tab-wrapper a,
|
15 |
+
.ots-admin-page .form-table th,
|
16 |
+
.ots-admin-page .title-bar {
|
17 |
+
font-family: 'Oswald','sans-serif' !important;
|
18 |
+
font-weight: 400 !important;
|
19 |
+
}
|
20 |
+
|
21 |
+
.ots-admin-page .notice {
|
22 |
+
margin: 10px 10px 10px 20px !important;
|
23 |
+
}
|
24 |
+
|
25 |
+
.ots-admin-page .ots-admin-header {
|
26 |
+
margin: 10px 10px 0 20px;
|
27 |
+
}
|
28 |
+
|
29 |
+
.ots-admin-page .inner {
|
30 |
+
padding: 0 10px 0 20px;
|
31 |
+
}
|
32 |
+
|
33 |
+
.ots-admin-page .nav-tab-wrapper {
|
34 |
+
padding: 0 10px 0 20px;
|
35 |
+
border-bottom: none !important;
|
36 |
+
}
|
37 |
+
|
38 |
+
.ots-admin-header {
|
39 |
+
background: #3a3a3a;
|
40 |
+
margin-bottom: 10px;
|
41 |
+
padding: 10px;
|
42 |
+
}
|
43 |
+
|
44 |
+
.ots-admin-header .branding img {
|
45 |
+
width: 100%;
|
46 |
+
}
|
47 |
+
|
48 |
+
.ots-admin-header .branding {
|
49 |
+
max-width: 160px;
|
50 |
+
display: none;
|
51 |
+
margin-bottom: 5px;
|
52 |
+
}
|
53 |
+
|
54 |
+
.ots-admin-header .title-bar {
|
55 |
+
display: table;
|
56 |
+
margin: 0 5px;
|
57 |
+
padding: 10px 0;
|
58 |
+
width: 100%;
|
59 |
+
}
|
60 |
+
|
61 |
+
.ots-admin-header .title-bar .inner {
|
62 |
+
padding: 0;
|
63 |
+
display: table-cell;
|
64 |
+
vertical-align: middle;
|
65 |
+
background: transparent;
|
66 |
+
}
|
67 |
+
|
68 |
+
.ots-admin-header .title-bar .inner:last-of-type {
|
69 |
+
min-width: 130px;
|
70 |
+
}
|
71 |
+
|
72 |
+
.ots-admin-header .cta {
|
73 |
+
background: #0085ba;
|
74 |
+
border: 2px solid #fff;
|
75 |
+
padding: 15px 25px;
|
76 |
+
color: #fff;
|
77 |
+
border-radius: 3px;
|
78 |
+
margin: 0 2px;
|
79 |
+
font-size: 16px;
|
80 |
+
text-transform: uppercase;
|
81 |
+
transition: all .5s ease;
|
82 |
+
cursor: pointer;
|
83 |
+
letter-spacing: 3px;
|
84 |
+
font-weight: 100;
|
85 |
+
}
|
86 |
+
|
87 |
+
.ots-admin-header a.cta {
|
88 |
+
text-decoration: none;
|
89 |
+
}
|
90 |
+
|
91 |
+
.ots-admin-header .cta:hover {
|
92 |
+
background: #00719e;
|
93 |
+
}
|
94 |
+
|
95 |
+
.ots-admin-header .cta-secondary {
|
96 |
+
display: none;
|
97 |
+
background: transparent;
|
98 |
+
}
|
99 |
+
|
100 |
+
.ots-admin-header .page-title {
|
101 |
+
color: #fff;
|
102 |
+
font-size: 42px;
|
103 |
+
line-height: 38px;
|
104 |
+
margin: 0;
|
105 |
+
letter-spacing: 1px;
|
106 |
+
text-transform: uppercase;
|
107 |
+
text-align: left;
|
108 |
+
}
|
109 |
+
|
110 |
+
.ots-admin-page .nav-tab {
|
111 |
+
border: 1px solid #ddd;
|
112 |
+
background: #f9f9f9;
|
113 |
+
margin: 10px 10px 0 0;
|
114 |
+
font-size: 16px;
|
115 |
+
}
|
116 |
+
|
117 |
+
.ots-admin-page .nav-tab.nav-tab-active {
|
118 |
+
border: 1px solid #ddd;
|
119 |
+
}
|
120 |
+
|
121 |
+
.ots-admin-page .form-table {
|
122 |
+
background: #fff;
|
123 |
+
margin-top: -1px;
|
124 |
+
}
|
125 |
+
|
126 |
+
.ots-admin-page .form-table tr {
|
127 |
+
border: 1px solid #ddd;
|
128 |
+
}
|
129 |
+
|
130 |
+
.ots-admin-page .form-table th {
|
131 |
+
padding-left: 10px;
|
132 |
+
font-size: 16px;
|
133 |
+
}
|
134 |
+
|
135 |
+
.ots-admin-page .form-table td {
|
136 |
+
padding: 10px 15px 15px 15px;
|
137 |
+
}
|
138 |
+
|
139 |
+
.ots-admin-page form h2 {
|
140 |
+
background: #f9f9f9;
|
141 |
+
padding: 0.8em 10px;
|
142 |
+
margin: 10px 0 0;
|
143 |
+
border: 1px solid #ddd;
|
144 |
+
font-size: 18px;
|
145 |
+
}
|
146 |
+
|
147 |
+
.ots-admin-page form input,
|
148 |
+
.ots-admin-page form select,
|
149 |
+
.ots-admin-page form textarea {
|
150 |
+
border-radius: 3px;
|
151 |
+
border: 1px solid #ccc;
|
152 |
+
padding: 3px 10px;
|
153 |
+
line-height: 30px;
|
154 |
+
}
|
155 |
+
|
156 |
+
.ots-admin-page form input:not([type="checkbox"]):not([type="radio"]),
|
157 |
+
.ots-admin-page form select,
|
158 |
+
.ots-admin-page form textarea {
|
159 |
+
height: 30px;
|
160 |
+
}
|
161 |
+
|
162 |
+
.ots-admin-page .form-table .regular-text {
|
163 |
+
width: 100%;
|
164 |
+
}
|
165 |
+
|
166 |
+
@media( min-width: 600px ) {
|
167 |
+
|
168 |
+
.ots-admin-page .nav-tab:first-of-type {
|
169 |
+
margin-left: 0;
|
170 |
+
}
|
171 |
+
|
172 |
+
.ots-admin-header .title-bar .inner:last-of-type {
|
173 |
+
padding-right: 20px;
|
174 |
+
text-align: right;
|
175 |
+
}
|
176 |
+
|
177 |
+
.ots-admin-header .title-bar .inner .cta {
|
178 |
+
margin-left: 5px;
|
179 |
+
}
|
180 |
+
|
181 |
+
.ots-admin-header .branding {
|
182 |
+
display: block;
|
183 |
+
}
|
184 |
+
|
185 |
+
}
|
186 |
+
|
187 |
+
.ots-admin-page .sidebar {
|
188 |
+
display: none;
|
189 |
+
width: 35%;
|
190 |
+
margin-top: 10px;
|
191 |
+
float: right;
|
192 |
+
}
|
193 |
+
|
194 |
+
.ots-admin-page .sidebar .widget {
|
195 |
+
background: #fff;
|
196 |
+
border: 1px solid #ddd;
|
197 |
+
}
|
198 |
+
|
199 |
+
.ots-admin-page .sidebar .widget .content {
|
200 |
+
padding: 5px 20px;
|
201 |
+
}
|
202 |
+
|
203 |
+
.ots-admin-page .sidebar .widget h2 {
|
204 |
+
margin: 0;
|
205 |
+
padding: 0.8em 15px;
|
206 |
+
background: #f9f9f9;
|
207 |
+
border-bottom: 1px solid #ddd;
|
208 |
+
}
|
209 |
+
|
210 |
+
.ots-admin-page .sidebar .widget ul {
|
211 |
+
display: table;
|
212 |
+
}
|
213 |
+
|
214 |
+
.ots-admin-page .sidebar .widget ul > li {
|
215 |
+
display: table-row;
|
216 |
+
}
|
217 |
+
|
218 |
+
.ots-admin-page .sidebar .widget ul > li:before {
|
219 |
+
content: " - ";
|
220 |
+
display: table-cell;
|
221 |
+
padding: 8px 5px;
|
222 |
+
}
|
223 |
+
|
224 |
+
@media( min-width: 783px ) {
|
225 |
+
|
226 |
+
.ots-admin-page {
|
227 |
+
background: #f9f9f9;
|
228 |
+
}
|
229 |
+
|
230 |
+
.ots-admin-page .ots-admin-header {
|
231 |
+
margin-bottom: 10px;
|
232 |
+
}
|
233 |
+
|
234 |
+
.ots-admin-header .cta-secondary {
|
235 |
+
display: inline;
|
236 |
+
}
|
237 |
+
|
238 |
+
.ots-admin-page .inner {
|
239 |
+
padding-top: 10px;
|
240 |
+
background: #f1f1f1;
|
241 |
+
}
|
242 |
+
|
243 |
+
.ots-admin-page .nav-tab {
|
244 |
+
background: #f9f9f9;
|
245 |
+
}
|
246 |
+
|
247 |
+
.ots-admin-page .nav-tab.nav-tab-active {
|
248 |
+
border-bottom: 1px solid #f3f3f3;
|
249 |
+
background: #f3f3f3;
|
250 |
+
}
|
251 |
+
|
252 |
+
.ots-admin-page .nav-tab-wrapper {
|
253 |
+
border-bottom: 1px solid #ddd !important;
|
254 |
+
}
|
255 |
+
|
256 |
+
.ots-admin-page .tabs-content {
|
257 |
+
width: 62%;
|
258 |
+
float: left;
|
259 |
+
}
|
260 |
+
|
261 |
+
.ots-admin-page .form-table td {
|
262 |
+
padding: 10px 20px 10px 10px;
|
263 |
+
}
|
264 |
+
|
265 |
+
.ots-admin-page .form-table th {
|
266 |
+
padding-left: 20px;
|
267 |
+
vertical-align: middle;
|
268 |
+
}
|
269 |
+
|
270 |
+
.ots-admin-page form h2 {
|
271 |
+
padding: 0.8em 15px;
|
272 |
+
}
|
273 |
+
|
274 |
+
.ots-admin-page .sidebar {
|
275 |
+
display: inline-block;
|
276 |
+
}
|
277 |
+
|
278 |
+
.ots-admin-page .nav-tab {
|
279 |
+
padding: 10px 15px;
|
280 |
+
margin: -1px;
|
281 |
+
}
|
282 |
+
|
283 |
+
.ots-admin-page .nav-tab:first-of-type {
|
284 |
+
margin-left: 0;
|
285 |
+
}
|
286 |
+
}
|
287 |
+
|
288 |
+
|
289 |
+
/* Documentation Page */
|
290 |
+
|
291 |
+
.ots-documentation .form-table th,
|
292 |
+
.ots-documentation .form-table td {
|
293 |
+
display: block;
|
294 |
+
}
|
295 |
+
|
296 |
+
.ots-documentation .form-table th {
|
297 |
+
padding: 15px 20px 5px 20px;
|
298 |
+
font-size: 16px;
|
299 |
+
width: 80%;
|
300 |
+
}
|
301 |
+
|
302 |
+
.ots-documentation .form-table td {
|
303 |
+
padding: 10px 20px;
|
304 |
+
}
|
305 |
+
|
306 |
+
.ots-documentation .form-table td p {
|
307 |
+
margin: 0 10px 15px 10px;
|
308 |
+
}
|
309 |
+
|
310 |
+
.ots-documentation .media img {
|
311 |
+
max-width: 100%;
|
312 |
+
}
|
313 |
+
|
314 |
+
.ots-documentation code {
|
315 |
+
word-break: break-all;
|
316 |
+
}
|
317 |
+
|
318 |
+
|
319 |
+
|
320 |
+
/* Reorder Page */
|
321 |
+
|
322 |
+
.ots-member {
|
323 |
+
display: inline-block;
|
324 |
+
background: #fff;
|
325 |
+
border: 1px solid #ddd;
|
326 |
+
height: 180px;
|
327 |
+
vertical-align: top;
|
328 |
+
width: 31%;
|
329 |
+
cursor: pointer;
|
330 |
+
transition: transform 0.5s ease, box-shadow 0.5s ease;
|
331 |
+
position: relative;
|
332 |
+
margin: 10px auto;
|
333 |
+
}
|
334 |
+
|
335 |
+
.ots-member:hover {
|
336 |
+
transform: translateY(-10px);
|
337 |
+
box-shadow: 0 10px 10px rgba(0, 0, 0, 0.5);
|
338 |
+
}
|
339 |
+
|
340 |
+
.ots-member .edit {
|
341 |
+
color: #fff;
|
342 |
+
border: 2px solid #fff;
|
343 |
+
text-decoration: none;
|
344 |
+
opacity: 0;
|
345 |
+
position: absolute;
|
346 |
+
right: 0;
|
347 |
+
margin: -10px;
|
348 |
+
background: #0085ba;
|
349 |
+
border-radius: 50%;
|
350 |
+
padding: 4px;
|
351 |
+
z-index: 2;
|
352 |
+
box-shadow: 0 5px 5px rgba(0, 0, 0, 0.5);
|
353 |
+
transition: all 0.5s ease;
|
354 |
+
}
|
355 |
+
|
356 |
+
.ots-member:hover > .edit {
|
357 |
+
opacity: 1;
|
358 |
+
}
|
359 |
+
|
360 |
+
.ots-member .edit:hover {
|
361 |
+
filter: brightness(120%);
|
362 |
+
box-shadow: 0 2px 2px rgba(0, 0, 0, 0.5);
|
363 |
+
}
|
364 |
+
|
365 |
+
.ots-member .inner {
|
366 |
+
padding: 10px;
|
367 |
+
}
|
368 |
+
|
369 |
+
.ots-member .inner .thumbnail {
|
370 |
+
height: 100px;
|
371 |
+
width: 100%;
|
372 |
+
text-align: center;
|
373 |
+
background-size: cover;
|
374 |
+
background-position: center top;
|
375 |
+
background-repeat: no-repeat;
|
376 |
+
}
|
377 |
+
|
378 |
+
.ots-member .name,
|
379 |
+
.ots-member .job-title {
|
380 |
+
text-overflow: ellipsis;
|
381 |
+
overflow: hidden;
|
382 |
+
white-space: nowrap;
|
383 |
+
}
|
384 |
+
|
385 |
+
.ots-member .name {
|
386 |
+
margin-bottom: 4px;
|
387 |
+
}
|
388 |
+
|
389 |
+
@media screen and (min-width: 768px) {
|
390 |
+
|
391 |
+
.ots-member {
|
392 |
+
max-width: 14%;
|
393 |
+
margin: 10px 5px;
|
394 |
+
}
|
395 |
+
|
396 |
+
}
|
397 |
+
|
398 |
+
@media screen and (min-width: 1025px) {
|
399 |
+
|
400 |
+
.ots-member {
|
401 |
+
max-width: 10%;
|
402 |
+
}
|
403 |
+
|
404 |
+
}
|
405 |
+
|
406 |
+
|
407 |
+
/* Add-ons Page */
|
408 |
+
|
409 |
+
.ots-admin-page.ots-add-ons {
|
410 |
+
background: #f1f1f1;
|
411 |
+
}
|
412 |
+
|
413 |
+
.ots-add-ons .ots-add-on {
|
414 |
+
display: inline-block;
|
415 |
+
position: relative;
|
416 |
+
background: rgb(249, 249, 249);
|
417 |
+
padding: 20px;
|
418 |
+
min-height: 390px;
|
419 |
+
vertical-align: top;
|
420 |
+
border: 1px solid #ddd;
|
421 |
+
margin: 10px 0 5px 0;
|
422 |
+
}
|
423 |
+
.ots-add-ons .ots-add-on .cta {
|
424 |
+
text-align: center;
|
425 |
+
padding: 5px;
|
426 |
+
}
|
427 |
+
|
428 |
+
|
429 |
+
.ots-add-ons .ots-add-on img {
|
430 |
+
width: 100%;
|
431 |
+
}
|
432 |
+
|
433 |
+
.ots-add-ons .ots-add-on h2 {
|
434 |
+
font-size: 24px;
|
435 |
+
}
|
436 |
+
|
437 |
+
.button {
|
438 |
+
display: inline-block;
|
439 |
+
margin-right: 3px !important;
|
440 |
+
}
|
441 |
+
|
442 |
+
@media(min-width: 768px) {
|
443 |
+
|
444 |
+
.ots-add-ons .ots-add-on {
|
445 |
+
max-width: 310px;
|
446 |
+
float: left;
|
447 |
+
margin: 0 10px 10px 0;
|
448 |
+
min-height: 520px;
|
449 |
+
}
|
450 |
+
|
451 |
+
}
|
assets/admin/js/customizer.js
ADDED
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
(function ($) {
|
2 |
+
|
3 |
+
$(document).on('change', '.ots-widget-display-all', function() {
|
4 |
+
|
5 |
+
var limit = $(this).parents('.ots-widget-limit').find('.ots-limit-number');
|
6 |
+
|
7 |
+
console.log(limit)
|
8 |
+
|
9 |
+
limit.prop('disabled', !limit.prop('disabled'));
|
10 |
+
|
11 |
+
if (!$(this).prop('checked')) {
|
12 |
+
|
13 |
+
limit.focus().val(1);
|
14 |
+
|
15 |
+
} else {
|
16 |
+
|
17 |
+
limit.val('');
|
18 |
+
|
19 |
+
}
|
20 |
+
|
21 |
+
});
|
22 |
+
|
23 |
+
})(jQuery);
|
assets/admin/js/reorder.js
ADDED
@@ -0,0 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
jQuery(document).ready(function ($) {
|
2 |
+
|
3 |
+
var members = $('#ots-team-member-order').sortable({
|
4 |
+
update: update_order
|
5 |
+
});
|
6 |
+
|
7 |
+
|
8 |
+
function update_order() {
|
9 |
+
$('[name="members_order"]').val(members.sortable('serialize'));
|
10 |
+
}
|
11 |
+
|
12 |
+
update_order();
|
13 |
+
|
14 |
+
});
|
assets/admin/js/settings.js
ADDED
@@ -0,0 +1,25 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
jQuery(document).ready(function ($) {
|
2 |
+
|
3 |
+
var limit = $('#ots-display-limit-number');
|
4 |
+
|
5 |
+
|
6 |
+
$('#ots-display-limit-all').change(function (e) {
|
7 |
+
|
8 |
+
limit.prop('disabled', !limit.prop('disabled'));
|
9 |
+
|
10 |
+
if (!$(e.target).prop('checked')) {
|
11 |
+
|
12 |
+
limit.focus().val(1);
|
13 |
+
|
14 |
+
} else {
|
15 |
+
|
16 |
+
limit.val('');
|
17 |
+
|
18 |
+
}
|
19 |
+
|
20 |
+
});
|
21 |
+
|
22 |
+
|
23 |
+
$('.wp-color-picker').wpColorPicker();
|
24 |
+
|
25 |
+
});
|
assets/css/common.css
ADDED
@@ -0,0 +1,109 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
.clear {
|
2 |
+
clear: both;
|
3 |
+
}
|
4 |
+
|
5 |
+
.left {
|
6 |
+
float: left;
|
7 |
+
box-sizing: border-box;
|
8 |
+
}
|
9 |
+
|
10 |
+
.width25,
|
11 |
+
.width50,
|
12 |
+
.width75 {
|
13 |
+
width: 100%;
|
14 |
+
padding: 20px 20px 20px 20px;
|
15 |
+
}
|
16 |
+
|
17 |
+
.sc_team_member .sc_team_member_name a {
|
18 |
+
text-decoration: none;
|
19 |
+
}
|
20 |
+
|
21 |
+
.sc_team_single_disabled {
|
22 |
+
cursor: default;
|
23 |
+
}
|
24 |
+
.sc-team-member-posts a {
|
25 |
+
font-size: 18px;
|
26 |
+
}
|
27 |
+
|
28 |
+
|
29 |
+
#sc_our_team .sc_team_member .icons a {
|
30 |
+
margin: 0 auto 5px auto;
|
31 |
+
text-decoration: none;
|
32 |
+
box-shadow: none;
|
33 |
+
border: none;
|
34 |
+
}
|
35 |
+
|
36 |
+
#sc_our_team .sc_team_member .icons img {
|
37 |
+
display: inline-block;
|
38 |
+
box-shadow: none;
|
39 |
+
border: none;
|
40 |
+
margin: 0 2px 0 2px;
|
41 |
+
}
|
42 |
+
|
43 |
+
#sc_our_team .sc_team_member_inner {
|
44 |
+
width: 100%;
|
45 |
+
height: 100%;
|
46 |
+
overflow: hidden;
|
47 |
+
}
|
48 |
+
|
49 |
+
#sc_our_team .sc_team_member .sc_team_more img {
|
50 |
+
width: 50px;
|
51 |
+
height: 50px;
|
52 |
+
margin: 0 auto 0 auto;
|
53 |
+
}
|
54 |
+
|
55 |
+
#sc_our_team .sc_team_member .sc_team_more a,
|
56 |
+
#sc_our_team .sc_team_member .sc_team_more img {
|
57 |
+
box-shadow: none;
|
58 |
+
border: none;
|
59 |
+
}
|
60 |
+
|
61 |
+
|
62 |
+
@media (min-width: 768px){
|
63 |
+
|
64 |
+
|
65 |
+
#sc_our_team.sc-col3 .sc_team_member {
|
66 |
+
width: 33.3%;
|
67 |
+
}
|
68 |
+
|
69 |
+
#sc_our_team.sc-col4 .sc_team_member {
|
70 |
+
width: 25%;
|
71 |
+
}
|
72 |
+
|
73 |
+
#sc_our_team.sc-col2 .sc_team_member {
|
74 |
+
width: 50%;
|
75 |
+
}
|
76 |
+
|
77 |
+
#sc_our_team.sc-col5 .sc_team_member {
|
78 |
+
width: 20%;
|
79 |
+
}
|
80 |
+
|
81 |
+
#sc_our_team.sc-col10 .sc_team_member {
|
82 |
+
width: 10%;
|
83 |
+
}
|
84 |
+
|
85 |
+
#sc_our_team.sc-col5 .sc_team_member {
|
86 |
+
width: 17%;
|
87 |
+
margin: 1%;
|
88 |
+
}
|
89 |
+
|
90 |
+
#sc_our_team.sc-col10 .sc_team_member {
|
91 |
+
width: 10%;
|
92 |
+
}
|
93 |
+
|
94 |
+
.width25 {
|
95 |
+
width: 24%;
|
96 |
+
padding: 0 15px 0 15px;
|
97 |
+
}
|
98 |
+
|
99 |
+
.width50 {
|
100 |
+
width: 49%;
|
101 |
+
padding: 0 15px 0 15px;
|
102 |
+
}
|
103 |
+
|
104 |
+
.width75 {
|
105 |
+
width: 73%;
|
106 |
+
padding: 0 15px 0 15px;
|
107 |
+
}
|
108 |
+
|
109 |
+
}
|
assets/css/single.css
ADDED
@@ -0,0 +1,37 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
.sc_team_posts.sc_team_post .sc-team-member-posts {
|
2 |
+
overflow: hidden;
|
3 |
+
}
|
4 |
+
|
5 |
+
.sc_team_posts.sc_team_post .sc-team-member-posts > div {
|
6 |
+
overflow: hidden;
|
7 |
+
}
|
8 |
+
|
9 |
+
.sc-team-member-posts .width25 {
|
10 |
+
padding: 0 0 0 0;
|
11 |
+
width: 25% !important;
|
12 |
+
text-align: center;
|
13 |
+
}
|
14 |
+
.sc-team-member-posts .width75 {
|
15 |
+
width: 73%
|
16 |
+
}
|
17 |
+
|
18 |
+
.sc-team-member-posts .sc-team-member-post {
|
19 |
+
margin: 0 0 15px 0;
|
20 |
+
}
|
21 |
+
|
22 |
+
.sc_team_posts a {
|
23 |
+
font-size: 18px;
|
24 |
+
}
|
25 |
+
|
26 |
+
.smartcat_team_single_icons img {
|
27 |
+
width: 25px;
|
28 |
+
margin: 5px 5px 5px 5px
|
29 |
+
;
|
30 |
+
display: inline-block !important;
|
31 |
+
}
|
32 |
+
|
33 |
+
.smartcat_team_single_icons img,
|
34 |
+
.smartcat_team_single_icons a {
|
35 |
+
box-shadow: none !important;
|
36 |
+
border: none !important;
|
37 |
+
}
|
assets/css/team-view.css
ADDED
@@ -0,0 +1,507 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/** #grid **/
|
2 |
+
|
3 |
+
.grid#sc_our_team {
|
4 |
+
overflow: hidden;
|
5 |
+
width: 100%;
|
6 |
+
}
|
7 |
+
|
8 |
+
.grid#sc_our_team .sc_team_member {
|
9 |
+
overflow: hidden;
|
10 |
+
box-sizing: border-box;
|
11 |
+
padding: 5px 5px 5px 5px;
|
12 |
+
|
13 |
+
}
|
14 |
+
|
15 |
+
.grid#sc_our_team .sc_team_member:hover .icons {
|
16 |
+
bottom: 20px;
|
17 |
+
}
|
18 |
+
|
19 |
+
.grid#sc_our_team .sc_team_member:hover .sc_team_member_name,
|
20 |
+
.grid#sc_our_team .sc_team_member:hover .sc_team_member_jobtitle {
|
21 |
+
left: -100%;
|
22 |
+
}
|
23 |
+
|
24 |
+
.grid#sc_our_team .sc_team_member .wp-post-image {
|
25 |
+
transition: 0.45s all ease-in-out;
|
26 |
+
-moz-transition: 0.45s all ease-in-out;
|
27 |
+
-webkit-transition: 0.45s all ease-in-out;
|
28 |
+
}
|
29 |
+
|
30 |
+
.grid#sc_our_team .sc_team_member .wp-post-image.zoomIn {
|
31 |
+
transform: scale(1.1);
|
32 |
+
-moz-transform: scale(1.1);
|
33 |
+
-webkit-transform: scale(1.1);
|
34 |
+
}
|
35 |
+
|
36 |
+
.grid#sc_our_team .sc_team_member .icons {
|
37 |
+
z-index: 9;
|
38 |
+
position: absolute;
|
39 |
+
bottom: -100px;
|
40 |
+
display: block;
|
41 |
+
width: 100%;
|
42 |
+
text-align: center;
|
43 |
+
transition: 0.45s all ease-in-out;
|
44 |
+
-moz-transition: 0.45s all ease-in-out;
|
45 |
+
-webkit-transition: 0.45s all ease-in-out;
|
46 |
+
}
|
47 |
+
|
48 |
+
.grid#sc_our_team .sc_team_member .icons.hidden {
|
49 |
+
display: none;
|
50 |
+
}
|
51 |
+
|
52 |
+
.grid#sc_our_team .sc_team_member .sc_team_content {
|
53 |
+
display: none;
|
54 |
+
}
|
55 |
+
|
56 |
+
.grid#sc_our_team .sc_team_member .icons img {
|
57 |
+
width: 25px;
|
58 |
+
}
|
59 |
+
|
60 |
+
.grid#sc_our_team .sc_team_member .sc_team_member_jobtitle,
|
61 |
+
.grid#sc_our_team .sc_team_member .sc_team_member_name {
|
62 |
+
height: 24px;
|
63 |
+
line-height: 26px;
|
64 |
+
}
|
65 |
+
|
66 |
+
.grid#sc_our_team .sc_team_member img.wp-post-image {
|
67 |
+
width: 100%;
|
68 |
+
max-width: inherit;
|
69 |
+
display: block;
|
70 |
+
margin: 0 auto 0 auto;
|
71 |
+
float: none;
|
72 |
+
border: none;
|
73 |
+
padding: 0 0 0 0;
|
74 |
+
}
|
75 |
+
|
76 |
+
.grid#sc_our_team .sc_team_member .sc_team_member_name {
|
77 |
+
padding: 0 30px 0 30px;
|
78 |
+
position: absolute;
|
79 |
+
left: 0;
|
80 |
+
bottom: 40px;
|
81 |
+
transition: 0.45s all ease-in-out;
|
82 |
+
-moz-transition: 0.45s all ease-in-out;
|
83 |
+
-webkit-transition: 0.45s all ease-in-out;
|
84 |
+
overflow: hidden;
|
85 |
+
opacity: 0.9;
|
86 |
+
color: #fff;
|
87 |
+
}
|
88 |
+
|
89 |
+
.grid#sc_our_team .sc_team_member .sc_team_member_jobtitle {
|
90 |
+
position: absolute;
|
91 |
+
bottom: 16px;
|
92 |
+
left: 0;
|
93 |
+
padding: 0 30px 0 30px;
|
94 |
+
color: #fff;
|
95 |
+
transition: 0.35s all ease-in-out;
|
96 |
+
-moz-transition: 0.35s all ease-in-out;
|
97 |
+
-webkit-transition: 0.35s all ease-in-out;
|
98 |
+
opacity: 0.9;
|
99 |
+
}
|
100 |
+
|
101 |
+
.grid#sc_our_team .sc_team_member_inner {
|
102 |
+
height: 170px;
|
103 |
+
overflow: hidden;
|
104 |
+
background-size: cover;
|
105 |
+
position: relative;
|
106 |
+
text-align: center;
|
107 |
+
background: #404040;
|
108 |
+
}
|
109 |
+
|
110 |
+
.grid#sc_our_team .sc_team_member .sc_team_member_overlay {
|
111 |
+
position: absolute;
|
112 |
+
width: 100%;
|
113 |
+
height: 100%;
|
114 |
+
left: 0;
|
115 |
+
bottom: 0;
|
116 |
+
padding: 0 10px;
|
117 |
+
color: #fff;
|
118 |
+
background: rgba(50, 50, 50, 0.5);
|
119 |
+
display: none;
|
120 |
+
}
|
121 |
+
|
122 |
+
.grid#sc_our_team .sc_team_member .sc_team_more {
|
123 |
+
position: absolute;
|
124 |
+
margin: -25px 0 0 0;
|
125 |
+
width: 100%;
|
126 |
+
transition: 0.45s all ease-in-out;
|
127 |
+
-moz-transition: 0.45s all ease-in-out;
|
128 |
+
-webkit-transition: 0.45s all ease-in-out;
|
129 |
+
top: -25px;
|
130 |
+
}
|
131 |
+
|
132 |
+
.grid#sc_our_team .sc_team_member .sc_team_more.show {
|
133 |
+
top: 50%;
|
134 |
+
transform: rotate(360deg);
|
135 |
+
-moz-transform: rotate(360deg);
|
136 |
+
-webkit-transform: rotate(360deg);
|
137 |
+
}
|
138 |
+
|
139 |
+
.grid#sc_our_team .sc_team_member .sc_team_member_name a {
|
140 |
+
color: #fff;
|
141 |
+
}
|
142 |
+
|
143 |
+
@media(min-width: 768px) {
|
144 |
+
|
145 |
+
.grid#sc_our_team .sc_team_member {
|
146 |
+
float: left;
|
147 |
+
}
|
148 |
+
|
149 |
+
}
|
150 |
+
|
151 |
+
@media(min-width: 767px) and (max-width: 980px) {
|
152 |
+
|
153 |
+
#sc_our_team.grid.sc-col4 .sc_team_member,
|
154 |
+
#sc_our_team.grid.sc-col3 .sc_team_member,
|
155 |
+
#sc_our_team.grid.sc-col2 .sc_team_member,
|
156 |
+
#sc_our_team.grid.sc-col5 .sc_team_member {
|
157 |
+
width: 45%;
|
158 |
+
margin: 0 4% 15px 0;
|
159 |
+
}
|
160 |
+
|
161 |
+
}
|
162 |
+
|
163 |
+
@media(max-width: 767px) {
|
164 |
+
|
165 |
+
#sc_our_team.grid.sc-col4 .sc_team_member,
|
166 |
+
#sc_our_team.grid.sc-col3 .sc_team_member,
|
167 |
+
#sc_our_team.grid.sc-col2 .sc_team_member,
|
168 |
+
#sc_our_team.grid.sc-col5 .sc_team_member {
|
169 |
+
width: 100%;
|
170 |
+
margin: 0 0 0 0;
|
171 |
+
}
|
172 |
+
|
173 |
+
}
|
174 |
+
|
175 |
+
|
176 |
+
/** #grid-circles **/
|
177 |
+
|
178 |
+
.grid_circles#sc_our_team .sc_team_member:hover .sc_team_member_name,
|
179 |
+
.grid_circles#sc_our_team .sc_team_member:hover .sc_team_member_jobtitle {
|
180 |
+
left: -100%;
|
181 |
+
}
|
182 |
+
|
183 |
+
.grid_circles#sc_our_team .sc_team_member .icons {
|
184 |
+
opacity: 0;
|
185 |
+
position: absolute;
|
186 |
+
text-align: center;
|
187 |
+
transition: 0.45s all ease-in-out;
|
188 |
+
-moz-transition: 0.45s all ease-in-out;
|
189 |
+
-webkit-transition: 0.45s all ease-in-out;
|
190 |
+
bottom: 20%;
|
191 |
+
margin: 0 auto 0 auto;
|
192 |
+
display: block;
|
193 |
+
width: 100%;
|
194 |
+
z-index: 9;
|
195 |
+
}
|
196 |
+
|
197 |
+
.grid_circles#sc_our_team .sc_team_member .icons.hidden {
|
198 |
+
display: none;
|
199 |
+
}
|
200 |
+
|
201 |
+
.grid_circles#sc_our_team .sc_team_member .sc_team_content {
|
202 |
+
display: none;
|
203 |
+
}
|
204 |
+
|
205 |
+
.grid_circles#sc_our_team .sc_team_member:hover .icons {
|
206 |
+
opacity: 1;
|
207 |
+
}
|
208 |
+
|
209 |
+
.grid_circles#sc_our_team .sc_team_member .icons img {
|
210 |
+
width: 25px;
|
211 |
+
}
|
212 |
+
|
213 |
+
.grid_circles#sc_our_team .sc_team_member .sc_team_member_jobtitle,
|
214 |
+
.grid_circles#sc_our_team .sc_team_member .sc_team_member_name {
|
215 |
+
height: 24px;
|
216 |
+
line-height: 26px;
|
217 |
+
}
|
218 |
+
|
219 |
+
.grid_circles#sc_our_team .sc_team_member .sc_team_member_name {
|
220 |
+
position: absolute;
|
221 |
+
top: 40%;
|
222 |
+
left: 0;
|
223 |
+
margin: 0 auto 0 auto;
|
224 |
+
width: 70%;
|
225 |
+
display: block;
|
226 |
+
transition: 0.45s all ease-in-out;
|
227 |
+
-moz-transition: 0.45s all ease-in-out;
|
228 |
+
-webkit-transition: 0.45s all ease-in-out;
|
229 |
+
opacity: 0.9;
|
230 |
+
}
|
231 |
+
|
232 |
+
.grid_circles#sc_our_team .sc_team_member .sc_team_member_jobtitle {
|
233 |
+
position: absolute;
|
234 |
+
top: 40%;
|
235 |
+
left: 0;
|
236 |
+
margin: 24px auto 24px auto;
|
237 |
+
width: 75%;
|
238 |
+
display: block;
|
239 |
+
color: #fff;
|
240 |
+
transition: 0.30s all ease-in-out;
|
241 |
+
-moz-transition: 0.30s all ease-in-out;
|
242 |
+
-webkit-transition: 0.30s all ease-in-out;
|
243 |
+
opacity: 0.9;
|
244 |
+
}
|
245 |
+
|
246 |
+
#sc_our_team.grid_circles .sc_team_member {
|
247 |
+
margin: 10px auto 10px auto;
|
248 |
+
}
|
249 |
+
|
250 |
+
.grid_circles#sc_our_team .sc_team_member .sc_team_more {
|
251 |
+
position: absolute;
|
252 |
+
margin: -25px 0 0 0;
|
253 |
+
width: 100%;
|
254 |
+
transition: 0.45s all ease-in-out;
|
255 |
+
-moz-transition: 0.45s all ease-in-out;
|
256 |
+
-webkit-transition: 0.45s all ease-in-out;
|
257 |
+
top: -25px;
|
258 |
+
}
|
259 |
+
|
260 |
+
.grid_circles#sc_our_team .sc_team_member .sc_team_more.show {
|
261 |
+
top: 50%;
|
262 |
+
transform: rotate(360deg);
|
263 |
+
-moz-transform: rotate(360deg);
|
264 |
+
-webkit-transform: rotate(360deg);
|
265 |
+
}
|
266 |
+
|
267 |
+
.grid_circles#sc_our_team .sc_team_member .sc_team_member_name {
|
268 |
+
color: #fff;
|
269 |
+
}
|
270 |
+
|
271 |
+
.grid_circles#sc_our_team .sc_team_member {
|
272 |
+
float: left;
|
273 |
+
overflow: hidden;
|
274 |
+
border-radius: 100%;
|
275 |
+
text-align: center;
|
276 |
+
box-shadow: 0 0 0 4px #fff, 0 0 0 7px #E2E2E2;
|
277 |
+
position: relative;
|
278 |
+
}
|
279 |
+
|
280 |
+
.grid_circles#sc_our_team .sc_team_member .wp-post-image {
|
281 |
+
border: none;
|
282 |
+
padding: 0 0 0 0;
|
283 |
+
float: none;
|
284 |
+
margin: 0 0 0 0;
|
285 |
+
width: 100%;
|
286 |
+
height: 100%;
|
287 |
+
max-width: inherit;
|
288 |
+
}
|
289 |
+
|
290 |
+
.grid_circles#sc_our_team .sc_team_member .sc_team_member_overlay {
|
291 |
+
position: absolute;
|
292 |
+
width: 100%;
|
293 |
+
left: 0;
|
294 |
+
top: 0;
|
295 |
+
height: 100%;
|
296 |
+
background: rgba(50,50,50,0.7);
|
297 |
+
color: #fff;
|
298 |
+
display: none;
|
299 |
+
border-radius: 100%;
|
300 |
+
}
|
301 |
+
|
302 |
+
.grid_circles#sc_our_team .sc_team_member .sc_team_member_overlay .sc_team_member_name {
|
303 |
+
margin: 30px 0 0 0;
|
304 |
+
font-size: 18px;
|
305 |
+
}
|
306 |
+
|
307 |
+
.grid_circles#sc_our_team .icons img {
|
308 |
+
width: 25px;
|
309 |
+
}
|
310 |
+
|
311 |
+
@media(min-width: 768px){
|
312 |
+
|
313 |
+
#sc_our_team.grid_circles.sc-col3 .sc_team_member {
|
314 |
+
width: 31%;
|
315 |
+
margin: 1% 1% 1% 1%;
|
316 |
+
}
|
317 |
+
|
318 |
+
#sc_our_team.grid_circles.sc-col4 .sc_team_member {
|
319 |
+
width: 23%;
|
320 |
+
margin: 1% 1% 1% 1%;
|
321 |
+
}
|
322 |
+
|
323 |
+
#sc_our_team.grid_circles.sc-col2 .sc_team_member {
|
324 |
+
width: 48%;
|
325 |
+
margin: 1% 1% 1% 1%;
|
326 |
+
}
|
327 |
+
|
328 |
+
}
|
329 |
+
|
330 |
+
@media(min-width: 767px) and (max-width: 980px) {
|
331 |
+
|
332 |
+
#sc_our_team.grid_circles.sc-col4 .sc_team_member,
|
333 |
+
#sc_our_team.grid_circles.sc-col3 .sc_team_member,
|
334 |
+
#sc_our_team.grid_circles.sc-col2 .sc_team_member,
|
335 |
+
#sc_our_team.grid_circles.sc-col5 .sc_team_member {
|
336 |
+
width: 45%;
|
337 |
+
margin: 0 4% 15px 0;
|
338 |
+
}
|
339 |
+
|
340 |
+
}
|
341 |
+
|
342 |
+
@media( max-width : 767px ) {
|
343 |
+
|
344 |
+
#sc_our_team.grid_circles.sc-col4 .sc_team_member,
|
345 |
+
#sc_our_team.grid_circles.sc-col3 .sc_team_member,
|
346 |
+
#sc_our_team.grid_circles.sc-col2 .sc_team_member,
|
347 |
+
#sc_our_team.grid_circles.sc-col5 .sc_team_member {
|
348 |
+
width: 100%;
|
349 |
+
}
|
350 |
+
|
351 |
+
}
|
352 |
+
|
353 |
+
/** #grid-circles-2 **/
|
354 |
+
|
355 |
+
.grid_circles2#sc_our_team .sc_team_member .icons {
|
356 |
+
opacity: 0;
|
357 |
+
position: absolute;
|
358 |
+
text-align: center;
|
359 |
+
transition: 0.45s all ease-in-out;
|
360 |
+
-moz-transition: 0.45s all ease-in-out;
|
361 |
+
-webkit-transition: 0.45s all ease-in-out;
|
362 |
+
bottom: 20%;
|
363 |
+
margin: 0 auto 0 auto;
|
364 |
+
display: block;
|
365 |
+
width: 100%;
|
366 |
+
z-index: 9;
|
367 |
+
}
|
368 |
+
|
369 |
+
.grid_circles2#sc_our_team .sc_team_member .icons.hidden {
|
370 |
+
display: none;
|
371 |
+
}
|
372 |
+
|
373 |
+
.grid_circles2#sc_our_team .sc_team_member .sc_team_content {
|
374 |
+
display: none;
|
375 |
+
}
|
376 |
+
|
377 |
+
.grid_circles2#sc_our_team .sc_team_member:hover .icons {
|
378 |
+
opacity: 1;
|
379 |
+
}
|
380 |
+
|
381 |
+
.grid_circles2#sc_our_team .sc_team_member .icons img {
|
382 |
+
width: 25px;
|
383 |
+
}
|
384 |
+
|
385 |
+
.grid_circles2#sc_our_team .sc_team_member .sc_team_member_name {
|
386 |
+
margin: 0 auto 0 auto;
|
387 |
+
text-align: center;
|
388 |
+
}
|
389 |
+
|
390 |
+
.grid_circles2#sc_our_team .sc_team_member .sc_team_member_name a {
|
391 |
+
border: none;
|
392 |
+
box-shadow: none;
|
393 |
+
color: #fff;
|
394 |
+
}
|
395 |
+
|
396 |
+
.grid_circles2#sc_our_team .sc_team_member .sc_team_member_jobtitle {
|
397 |
+
margin: 24px auto 24px auto;
|
398 |
+
}
|
399 |
+
|
400 |
+
.grid_circles2#sc_our_team .sc_team_member:hover .sc_team_member_name,
|
401 |
+
.grid_circles2#sc_our_team .sc_team_member:hover .sc_team_member_jobtitle {
|
402 |
+
opacity: 1;
|
403 |
+
}
|
404 |
+
|
405 |
+
.grid_circles2#sc_our_team .sc_team_member .sc_team_member_name,
|
406 |
+
.grid_circles2#sc_our_team .sc_team_member .sc_team_member_jobtitle {
|
407 |
+
position: absolute;
|
408 |
+
top: 40%;
|
409 |
+
left: 0;
|
410 |
+
transition: 0.45s all ease-in-out;
|
411 |
+
-moz-transition: 0.45s all ease-in-out;
|
412 |
+
-webkit-transition: 0.45s all ease-in-out;
|
413 |
+
z-index: 99;
|
414 |
+
width: 100%;
|
415 |
+
text-align: center;
|
416 |
+
color: #fff;
|
417 |
+
opacity: 0;
|
418 |
+
}
|
419 |
+
|
420 |
+
.grid_circles2#sc_our_team .sc_team_member .sc_team_member_jobtitle span {
|
421 |
+
display: inline-block;
|
422 |
+
padding: 5px 0 0 0;
|
423 |
+
}
|
424 |
+
|
425 |
+
.grid_circles2#sc_our_team .sc_team_member {
|
426 |
+
float: left;
|
427 |
+
overflow: hidden;
|
428 |
+
border-radius: 100%;
|
429 |
+
text-align: center;
|
430 |
+
box-shadow: 0 0 0 4px #fff, 0 0 0 7px #E2E2E2;
|
431 |
+
position: relative;
|
432 |
+
}
|
433 |
+
|
434 |
+
.grid_circles2#sc_our_team .sc_team_member .wp-post-image {
|
435 |
+
border: none;
|
436 |
+
padding: 0;
|
437 |
+
float: none;
|
438 |
+
margin: 0;
|
439 |
+
width: 100%;
|
440 |
+
height: 100%;
|
441 |
+
max-width: inherit;
|
442 |
+
}
|
443 |
+
|
444 |
+
.grid_circles2#sc_our_team .sc_team_member .sc_team_member_overlay {
|
445 |
+
position: absolute;
|
446 |
+
width: 100%;
|
447 |
+
left: 0;
|
448 |
+
top: 0;
|
449 |
+
height: 100%;
|
450 |
+
background: rgba(50, 50, 50, 0.7);
|
451 |
+
color: #ffffff;
|
452 |
+
display: none;
|
453 |
+
border-radius: 100%;
|
454 |
+
}
|
455 |
+
|
456 |
+
.grid_circles#sc_our_team .sc_team_member .sc_team_member_overlay .sc_team_member_name,
|
457 |
+
.grid_circles2#sc_our_team .sc_team_member .sc_team_member_overlay .sc_team_member_name {
|
458 |
+
margin: 30px 0 0 0;
|
459 |
+
font-size: 18px;
|
460 |
+
}
|
461 |
+
|
462 |
+
.grid_circles2#sc_our_team .icons img {
|
463 |
+
width: 25px;
|
464 |
+
}
|
465 |
+
|
466 |
+
@media(min-width: 768px) {
|
467 |
+
|
468 |
+
#sc_our_team.grid_circles2.sc-col3 .sc_team_member {
|
469 |
+
width: 31%;
|
470 |
+
margin: 1% 1% 1% 1%;
|
471 |
+
}
|
472 |
+
|
473 |
+
#sc_our_team.grid_circles2.sc-col4 .sc_team_member {
|
474 |
+
width: 23%;
|
475 |
+
margin: 1% 1% 1% 1%;
|
476 |
+
}
|
477 |
+
|
478 |
+
#sc_our_team.grid_circles2.sc-col2 .sc_team_member {
|
479 |
+
width: 48%;
|
480 |
+
margin: 1% 1% 1% 1%;
|
481 |
+
}
|
482 |
+
|
483 |
+
}
|
484 |
+
|
485 |
+
@media(min-width: 767px) and (max-width: 980px) {
|
486 |
+
|
487 |
+
#sc_our_team.grid_circles2.sc-col4 .sc_team_member,
|
488 |
+
#sc_our_team.grid_circles2.sc-col3 .sc_team_member,
|
489 |
+
#sc_our_team.grid_circles2.sc-col2 .sc_team_member,
|
490 |
+
#sc_our_team.grid_circles2.sc-col5 .sc_team_member {
|
491 |
+
width: 45%;
|
492 |
+
margin: 0 4% 15px 0;
|
493 |
+
}
|
494 |
+
|
495 |
+
}
|
496 |
+
|
497 |
+
@media(max-width : 767px) {
|
498 |
+
|
499 |
+
#sc_our_team.grid_circles2.sc-col4 .sc_team_member,
|
500 |
+
#sc_our_team.grid_circles2.sc-col3 .sc_team_member,
|
501 |
+
#sc_our_team.grid_circles2.sc-col2 .sc_team_member,
|
502 |
+
#sc_our_team.grid_circles2.sc-col5 .sc_team_member {
|
503 |
+
width: 100%;
|
504 |
+
margin: 10px 0 10px 0;
|
505 |
+
}
|
506 |
+
|
507 |
+
}
|
assets/css/widgets.css
ADDED
@@ -0,0 +1,25 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
.widget#sc_our_team .sc_sidebar_team_member {
|
2 |
+
width: 100%;
|
3 |
+
overflow: hidden;
|
4 |
+
margin: 0 0 10px 0;
|
5 |
+
}
|
6 |
+
|
7 |
+
.widget#sc_our_team .sc_sidebar_team_member .wp-post-image {
|
8 |
+
float: left;
|
9 |
+
width: 25%;
|
10 |
+
border: 1px solid #d0d0d0;
|
11 |
+
padding: 3px 3px 3px 3px;
|
12 |
+
box-sizing: border-box;
|
13 |
+
margin: 0 0 0 0;
|
14 |
+
}
|
15 |
+
|
16 |
+
.widget#sc_our_team .sc_sidebar_team_member .sc_team_member_overlay {
|
17 |
+
float: left;
|
18 |
+
width: 75%;
|
19 |
+
padding: 0 0 0 10px;
|
20 |
+
box-sizing: border-box;
|
21 |
+
}
|
22 |
+
|
23 |
+
.widget#sc_our_team .sc_sidebar_team_member .sc_team_member_overlay .sc_team_member_name {
|
24 |
+
font-weight: bold;
|
25 |
+
}
|
assets/fonts/fonts.css
ADDED
@@ -0,0 +1,27 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/* oswald-regular - latin */
|
2 |
+
@font-face {
|
3 |
+
font-family: 'Oswald';
|
4 |
+
font-style: normal;
|
5 |
+
font-weight: 400;
|
6 |
+
src: url('./oswald/oswald-regular.eot'); /* IE9 Compat Modes */
|
7 |
+
src: local('Oswald Regular'), local('Oswald-Regular'),
|
8 |
+
url('./oswald/oswald-regular.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
|
9 |
+
url('./oswald/oswald-regular.woff2') format('woff2'), /* Super Modern Browsers */
|
10 |
+
url('./oswald/oswald-regular.woff') format('woff'), /* Modern Browsers */
|
11 |
+
url('./oswald/oswald-regular.ttf') format('truetype'), /* Safari, Android, iOS */
|
12 |
+
url('./oswald/oswald-regular.svg#Oswald') format('svg'); /* Legacy iOS */
|
13 |
+
}
|
14 |
+
|
15 |
+
/* lato-regular - latin */
|
16 |
+
@font-face {
|
17 |
+
font-family: 'Lato';
|
18 |
+
font-style: normal;
|
19 |
+
font-weight: 400;
|
20 |
+
src: url('./lato/lato-regular.eot'); /* IE9 Compat Modes */
|
21 |
+
src: local('Lato Regular'), local('Lato-Regular'),
|
22 |
+
url('./lato/lato-regular.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
|
23 |
+
url('./lato/lato-regular.woff2') format('woff2'), /* Super Modern Browsers */
|
24 |
+
url('./lato/lato-regular.woff') format('woff'), /* Modern Browsers */
|
25 |
+
url('./lato/lato-regular.ttf') format('truetype'), /* Safari, Android, iOS */
|
26 |
+
url('./lato/lato-regular.svg#Lato') format('svg'); /* Legacy iOS */
|
27 |
+
}
|
assets/fonts/lato/lato-regular.eot
ADDED
Binary file
|
assets/fonts/lato/lato-regular.svg
ADDED
@@ -0,0 +1,435 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 xmlns="http://www.w3.org/2000/svg">
|
4 |
+
<defs >
|
5 |
+
<font id="Lato" horiz-adv-x="1042" ><font-face
|
6 |
+
font-family="Lato"
|
7 |
+
units-per-em="2000"
|
8 |
+
panose-1="2 15 5 2 2 2 4 3 2 3"
|
9 |
+
ascent="1974"
|
10 |
+
descent="-426"
|
11 |
+
alphabetic="0" />
|
12 |
+
<glyph unicode=" " glyph-name="space" horiz-adv-x="386" />
|
13 |
+
<glyph unicode="!" glyph-name="exclam" horiz-adv-x="686" d="M430 1433V861Q430 816 429 773T424 687T417 598T406 500H285Q279 552 275 597T267 686T263 773T261 861V1433H430ZM218 110Q218 136 227 159T253 199T293 226T342 236Q368 236 391 226T431 199T457
|
14 |
+
159T467 110Q467 83 458 61T431 21T391 -5T342 -15Q316 -15 293 -6T254 21T228 60T218 110Z" />
|
15 |
+
<glyph unicode=""" glyph-name="quotedbl" horiz-adv-x="794" d="M307 1433V1143L291 988Q288 956 274 939T229 921Q203 921 189 938T168 988L152 1143V1433H307ZM640 1433V1143L624 988Q621 956 607 939T562 921Q536 921 522 938T501 988L485 1143V1433H640Z" />
|
16 |
+
<glyph unicode="#" glyph-name="numbersign" horiz-adv-x="1160" d="M790 423L706 0H625Q602 0 586 17T570 61Q570 65 570 68T572 77L643 423H396L325 68Q317 31 295 16T243 0H164L249 423H103Q80 423 67 434T54 474Q54 479 54 485T56 497L64 554H268L333 880H101L114
|
17 |
+
954Q119 983 137 997T194 1011H352L424 1369Q430 1399 451 1416T503 1433H583L499 1011H746L830 1433H909Q934 1433 950 1418T967 1379Q967 1371 966 1366L893 1011H1105L1092 936Q1087 907 1069 894T1012 880H874L809 554H988Q1012 554 1025 543T1038 502Q1038
|
18 |
+
497 1038 492T1036 480L1027 423H790ZM415 554H662L727 880H480L415 554Z" />
|
19 |
+
<glyph unicode="$" glyph-name="dollar" horiz-adv-x="1160" d="M498 -12Q377 -1 278 47T106 171L159 253Q166 264 179 271T206 278Q225 278 249 259T308 216T391 168T508 137L545 668Q475 689 408 715T287 784T201 891T168 1053Q168 1126 196 1195T279 1319T414
|
20 |
+
1407T598 1446L608 1590Q610 1609 623 1624T658 1639H724L710 1441Q815 1428 891 1387T1027 1288L984 1222Q964 1192 938 1192Q924 1192 904 1204T854 1233T787 1266T700 1290L667 806Q739 784 809 758T935 691T1025 589T1060 435Q1060 345 1030 266T943 127T802
|
21 |
+
30T611 -14L599 -190Q597 -209 584 -223T549 -238H483L498 -12ZM891 407Q891 457 873 493T822 555T747 600T655 635L621 137Q686 143 736 165T821 223T873 304T891 407ZM336 1071Q336 1023 353 988T400 925T470 878T557 842L587 1293Q522 1287 475 1267T397 1217T351
|
22 |
+
1150T336 1071Z" />
|
23 |
+
<glyph unicode="%" glyph-name="percent" horiz-adv-x="1572" d="M707 1087Q707 1003 681 937T612 825T510 755T389 731Q321 731 264 755T163 824T96 936T72 1087Q72 1173 96 1240T163 1353T263 1423T389 1447Q456 1447 514 1423T615 1353T682 1240T707 1087ZM568
|
24 |
+
1087Q568 1153 554 1199T516 1274T459 1317T389 1330Q352 1330 320 1317T263 1275T226 1199T212 1087Q212 1022 225 977T263 903T319 862T389 849Q426 849 458 861T515 902T554 976T568 1087ZM1208 1397Q1221 1414 1235 1423T1274 1433H1402L355 29Q345 16 331
|
25 |
+
8T298 0H166L1208 1397ZM1499 338Q1499 254 1473 188T1404 77T1303 7T1182 -17Q1114 -17 1057 7T956 76T889 188T865 338Q865 424 889 491T956 605T1056 675T1182 699Q1249 699 1307 675T1408 605T1475 492T1499 338ZM1361 338Q1361 404 1347 450T1309 526T1252
|
26 |
+
568T1182 581Q1145 581 1113 568T1056 526T1019 451T1005 338Q1005 273 1018 228T1056 155T1112 114T1182 101Q1219 101 1251 113T1308 154T1347 228T1361 338Z" />
|
27 |
+
<glyph unicode="&" glyph-name="ampersand" horiz-adv-x="1406" d="M660 1449Q739 1449 804 1424T916 1356T991 1259T1023 1143L912 1121Q907 1120 903 1120Q890 1120 879 1127T862 1152Q855 1178 840 1206T800 1257T741 1295T660 1310Q610 1310 570 1294T502
|
28 |
+
1250T458 1183T442 1099Q442 1064 450 1032T476 968T520 901T585 828L997 409Q1035 476 1057 549T1088 697Q1090 716 1100 727T1128 738H1238Q1236 623 1201 512T1100 304L1400 0H1228Q1199 0 1181 7T1141 36L997 181Q903 90 781 37T511 -16Q431 -16 354 11T217
|
29 |
+
89T119 215T82 382Q82 452 105 514T170 630T269 725T394 797Q333 874 304 947T275 1098Q275 1171 301 1235T378 1346T499 1421T660 1449ZM263 396Q263 331 287 282T350 198T439 147T541 129Q653 129 742 170T899 279L476 706Q370 649 317 570T263 396Z" />
|
30 |
+
<glyph unicode="'" glyph-name="quotesingle" horiz-adv-x="460" d="M307 1433V1143L291 988Q288 956 274 939T229 921Q203 921 189 938T168 988L152 1143V1433H307Z" />
|
31 |
+
<glyph unicode="(" glyph-name="parenleft" horiz-adv-x="600" d="M289 629Q289 415 344 214T503 -171Q509 -182 511 -190T513 -206Q513 -220 506 -229T488 -245L409 -293Q334 -178 282 -65T197 162T149 391T134 629Q134 750 149 866T196 1095T281 1322T409 1551L488
|
32 |
+
1502Q499 1495 506 1486T513 1463Q513 1448 503 1429Q398 1247 344 1045T289 629Z" />
|
33 |
+
<glyph unicode=")" glyph-name="parenright" horiz-adv-x="600" d="M298 629Q298 843 244 1045T84 1429Q74 1448 74 1463Q74 1477 81 1486T99 1502L178 1551Q253 1435 305 1322T390 1096T438 866T453 629Q453 507 438 392T391 162T306 -65T178 -293L99 -245Q88
|
34 |
+
-238 81 -229T74 -206Q74 -198 76 -190T84 -171Q188 12 243 213T298 629Z" />
|
35 |
+
<glyph unicode="*" glyph-name="asterisk" horiz-adv-x="800" d="M354 863V1060Q354 1079 356 1096T366 1129Q346 1104 313 1084L141 985L97 1060L269 1160Q305 1181 342 1184Q322 1186 305 1191T269 1209L96 1310L140 1385L313 1285Q348 1265 370 1233Q361 1251
|
36 |
+
358 1269T354 1308V1506H442V1309Q442 1268 428 1237Q439 1252 452 1263T483 1285L655 1384L699 1309L527 1209Q510 1198 494 1192T459 1184Q477 1182 493 1177T527 1160L700 1059L656 984L483 1084Q465 1095 451 1106T426 1133Q442 1100 442 1061V863H354Z" />
|
37 |
+
<glyph unicode="+" glyph-name="plus" horiz-adv-x="1160" d="M651 1166V739H1058V604H651V174H505V604H100V739H505V1166H651Z" />
|
38 |
+
<glyph unicode="," glyph-name="comma" horiz-adv-x="424" d="M94 123Q94 146 102 166T126 202T164 227T212 236Q242 236 265 225T304 195T328 150T336 94Q336 49 323 1T286 -95T227 -188T146 -271L116 -242Q103 -230 103 -214Q103 -201 117 -187Q127 -176 142
|
39 |
+
-158T174 -115T203 -62T223 0H210Q184 0 163 9T127 34T103 73T94 123Z" />
|
40 |
+
<glyph unicode="-" glyph-name="hyphen" horiz-adv-x="694" d="M100 675H594V524H100V675Z" />
|
41 |
+
<glyph unicode="." glyph-name="period" horiz-adv-x="424" d="M88 110Q88 136 97 159T123 199T163 226T212 236Q238 236 261 226T301 199T327 159T337 110Q337 83 328 61T301 21T261 -5T212 -15Q186 -15 163 -6T124 21T98 60T88 110Z" />
|
42 |
+
<glyph unicode="/" glyph-name="slash" horiz-adv-x="746" d="M161 -21Q147 -56 120 -73T63 -90H-12L589 1407Q602 1439 626 1456T683 1473H758L161 -21Z" />
|
43 |
+
<glyph unicode="0" glyph-name="zero" horiz-adv-x="1160" d="M1100 716Q1100 528 1060 391T949 163T784 29T579 -15Q469 -15 375 29T210 163T100 390T60 716Q60 904 100 1042T210 1270T374 1405T579 1449Q688 1449 783 1405T949 1271T1059 1042T1100 716ZM915
|
44 |
+
716Q915 880 888 991T814 1171T706 1268T579 1298Q513 1298 452 1269T345 1171T272 992T244 716Q244 552 271 441T345 262T452 165T579 135Q645 135 706 164T813 262T887 441T915 716Z" />
|
45 |
+
<glyph unicode="1" glyph-name="one" horiz-adv-x="1160" d="M287 136H595V1113Q595 1157 598 1202L342 983Q332 975 322 972T303 968Q288 968 276 974T258 990L202 1067L628 1436H773V136H1055V0H287V136Z" />
|
46 |
+
<glyph unicode="2" glyph-name="two" horiz-adv-x="1160" d="M601 1449Q692 1449 771 1422T907 1344T998 1218T1031 1050Q1031 970 1007 902T942 772T848 651T734 531L357 145Q397 156 438 162T517 169H997Q1026 169 1043 152T1060 108V0H104V61Q104 80 111 100T136
|
47 |
+
137L595 598Q652 656 699 709T779 817T831 926T849 1045Q849 1108 829 1155T774 1234T692 1280T591 1296Q537 1296 491 1280T410 1236T350 1168T315 1082Q307 1053 291 1040T249 1027Q244 1027 239 1027T226 1029L133 1045Q147 1143 187 1218T288 1345T429 1422T601
|
48 |
+
1449Z" />
|
49 |
+
<glyph unicode="3" glyph-name="three" horiz-adv-x="1160" d="M620 1449Q711 1449 788 1423T920 1349T1007 1233T1038 1082Q1038 1014 1021 961T971 867T892 798T789 753Q929 716 999 629T1070 411Q1070 312 1033 233T930 99T779 14T593 -16Q479 -16 398 12T261
|
50 |
+
91T169 209T108 358L184 390Q205 399 226 399Q246 399 261 391T285 364Q287 360 289 356T293 346Q307 317 327 281T381 212T465 158T591 136Q666 136 722 160T816 224T873 311T892 406Q892 464 877 512T821 595T709 650T525 670V799Q616 800 680 819T786 871T845
|
51 |
+
950T864 1052Q864 1114 845 1160T791 1236T711 1281T610 1296Q556 1296 510 1280T429 1236T369 1168T333 1082Q325 1053 309 1040T268 1027Q263 1027 258 1027T245 1029L152 1045Q166 1143 206 1218T307 1345T448 1422T620 1449Z" />
|
52 |
+
<glyph unicode="4" glyph-name="four" horiz-adv-x="1160" d="M903 517H1120V415Q1120 399 1111 388T1081 377H903V0H746V377H111Q91 377 77 388T58 417L40 508L737 1433H903V517ZM746 1108Q746 1134 747 1164T754 1226L233 517H746V1108Z" />
|
53 |
+
<glyph unicode="5" glyph-name="five" horiz-adv-x="1160" d="M978 1355Q978 1317 954 1293T873 1268H423L357 892Q469 916 564 916Q676 916 761 883T905 792T992 655T1022 483Q1022 369 982 277T873 120T709 19T506 -16Q443 -16 385 -4T277 30T184 78T108 135L162
|
54 |
+
211Q180 237 210 237Q229 237 254 222T316 187T400 153T516 137Q591 137 651 161T753 229T819 336T842 475Q842 542 823 596T764 688T665 747T527 768Q473 768 415 759T295 730L183 763L299 1433H978V1355Z" />
|
55 |
+
<glyph unicode="6" glyph-name="six" horiz-adv-x="1160" d="M650 878Q736 878 813 850T948 767T1040 633T1074 451Q1074 352 1038 267T938 119T782 20T582 -16Q474 -16 387 18T237 116T142 270T108 473Q108 567 150 673T283 901L646 1390Q660 1408 685 1420T742
|
56 |
+
1433H900L403 804Q454 839 516 858T650 878ZM280 442Q280 373 300 316T358 218T452 155T579 132Q651 132 709 155T808 219T872 316T895 438Q895 508 873 564T811 660T715 721T592 742Q520 742 462 718T364 652T302 556T280 442Z" />
|
57 |
+
<glyph unicode="7" glyph-name="seven" horiz-adv-x="1160" d="M1084 1433V1353Q1084 1319 1077 1297T1061 1260L468 63Q455 37 432 19T370 0H243L845 1182Q858 1207 871 1228T902 1268H154Q137 1268 124 1281T110 1312V1433H1084Z" />
|
58 |
+
<glyph unicode="8" glyph-name="eight" horiz-adv-x="1160" d="M579 -16Q472 -16 383 12T230 94T131 222T96 392Q96 530 168 619T374 747Q261 789 204 872T146 1072Q146 1151 177 1220T265 1340T401 1420T579 1449Q676 1449 756 1420T893 1340T981 1220T1012 1072Q1012
|
59 |
+
956 954 873T784 747Q918 709 990 620T1062 392Q1062 298 1027 223T928 94T775 13T579 -16ZM579 126Q649 126 704 145T798 200T857 285T878 395Q878 469 854 521T788 607T692 655T579 671Q520 671 466 656T371 607T305 522T280 395Q280 335 300 286T359 201T453
|
60 |
+
146T579 126ZM579 814Q649 814 698 835T779 892T824 974T838 1069Q838 1119 822 1163T773 1240T692 1292T579 1311Q515 1311 467 1292T386 1240T337 1163T320 1069Q320 1020 334 974T379 893T459 836T579 814Z" />
|
61 |
+
<glyph unicode="9" glyph-name="nine" horiz-adv-x="1160" d="M549 588Q468 588 396 615T268 694T181 823T148 999Q148 1093 183 1175T281 1318T431 1414T622 1449Q725 1449 809 1415T953 1320T1045 1174T1078 986Q1078 924 1067 869T1033 760T981 655T911 546L562
|
62 |
+
42Q549 23 525 12T470 0H306L742 571Q764 600 783 626T819 678Q764 634 695 611T549 588ZM907 1007Q907 1074 886 1128T826 1221T736 1279T620 1300Q554 1300 500 1279T407 1219T347 1128T326 1012Q326 944 345 891T401 800T490 744T608 725Q680 725 735 748T829
|
63 |
+
811T887 901T907 1007Z" />
|
64 |
+
<glyph unicode=":" glyph-name="colon" horiz-adv-x="504" d="M128 110Q128 136 137 159T163 199T203 226T252 236Q278 236 301 226T341 199T367 159T377 110Q377 83 368 61T341 21T301 -5T252 -15Q226 -15 203 -6T164 21T138 60T128 110ZM128 860Q128 886 137
|
65 |
+
909T163 949T203 976T252 986Q278 986 301 976T341 949T367 909T377 860Q377 833 368 811T341 771T301 745T252 735Q226 735 203 744T164 771T138 810T128 860Z" />
|
66 |
+
<glyph unicode=";" glyph-name="semicolon" horiz-adv-x="504" d="M134 123Q134 146 142 166T166 202T204 227T252 236Q282 236 305 225T344 195T368 150T376 94Q376 49 363 1T326 -95T267 -188T186 -271L156 -242Q143 -230 143 -214Q143 -201 157 -187Q167 -176
|
67 |
+
182 -158T214 -115T243 -62T263 0H250Q224 0 203 9T167 34T143 73T134 123ZM128 860Q128 886 137 909T163 949T203 976T252 986Q278 986 301 976T341 949T367 909T377 860Q377 833 368 811T341 771T301 745T252 735Q226 735 203 744T164 771T138 810T128 860Z"
|
68 |
+
/>
|
69 |
+
<glyph unicode="<" glyph-name="less" horiz-adv-x="1160" d="M148 710L922 1111V984Q922 967 914 955T886 932L437 704Q417 693 395 686T347 672Q372 667 394 659T437 641L886 414Q906 404 914 391T922 362V234L148 636V710Z" />
|
70 |
+
<glyph unicode="=" glyph-name="equal" horiz-adv-x="1160" d="M150 574H1009V439H150V574ZM150 909H1009V774H150V909Z" />
|
71 |
+
<glyph unicode=">" glyph-name="greater" horiz-adv-x="1160" d="M238 234V362Q238 378 246 391T274 414L723 641Q743 651 764 659T811 672Q786 678 765 685T723 704L274 932Q254 942 246 954T238 984V1111L1011 710V636L238 234Z" />
|
72 |
+
<glyph unicode="?" glyph-name="question" horiz-adv-x="796" d="M34 1305Q65 1334 102 1360T184 1406T280 1437T392 1449Q471 1449 538 1426T655 1361T732 1259T760 1124Q760 1048 738 993T681 897T605 825T529 767T468 713T438 653L420 500H298L286 666V677Q286
|
73 |
+
719 308 751T365 812T439 869T513 932T570 1011T593 1115Q593 1158 576 1193T530 1252T462 1290T377 1303Q316 1303 273 1288T199 1255T151 1222T120 1207Q95 1207 81 1230L34 1305ZM230 110Q230 136 239 159T265 199T305 226T354 236Q380 236 403 226T443 199T469
|
74 |
+
159T479 110Q479 83 470 61T443 21T403 -5T354 -15Q328 -15 305 -6T266 21T240 60T230 110Z" />
|
75 |
+
<glyph unicode="@" glyph-name="at" horiz-adv-x="1644" d="M1167 186Q1089 186 1040 223T978 339Q920 258 852 223T706 188Q646 188 602 208T529 265T485 352T470 460Q470 545 502 631T599 787T758 901T979 945Q1046 945 1096 935T1192 904L1099 543Q1080 468
|
76 |
+
1080 419Q1080 383 1089 360T1113 323T1149 304T1193 299Q1242 299 1286 327T1363 406T1416 528T1436 687Q1436 825 1392 929T1270 1102T1087 1206T859 1241Q725 1241 608 1190T404 1049T267 836T217 568Q217 398 270 270T416 54T633 -77T901 -121Q1053 -121 1169
|
77 |
+
-88T1371 -4Q1386 5 1398 5Q1419 5 1429 -19L1454 -85Q1347 -157 1211 -198T901 -239Q728 -239 579 -184T321 -26T149 228T86 568Q86 677 113 778T191 966T311 1126T467 1250T652 1330T859 1359Q951 1359 1039 1339T1205 1280T1350 1184T1463 1052T1537 886T1564
|
78 |
+
687Q1564 579 1534 488T1450 329T1324 224T1167 186ZM741 306Q772 306 803 316T864 351T918 419T960 527L1036 822Q997 831 951 831Q876 831 814 800T706 717T636 600T610 465Q610 393 643 350T741 306Z" />
|
79 |
+
<glyph unicode="A" glyph-name="A" horiz-adv-x="1360" d="M1353 0H1203Q1177 0 1161 13T1137 46L1003 392H360L226 46Q219 28 202 14T160 0H10L583 1433H780L1353 0ZM414 532H949L724 1115Q702 1169 681 1250Q670 1209 660 1175T639 1114L414 532Z" />
|
80 |
+
<glyph unicode="B" glyph-name="B" horiz-adv-x="1294" d="M174 0V1433H631Q763 1433 858 1407T1015 1333T1106 1216T1136 1059Q1136 1006 1120 957T1070 866T986 791T867 737Q1024 706 1104 624T1184 408Q1184 317 1151 242T1053 113T895 30T681 0H174ZM368 653V154H678Q761
|
81 |
+
154 820 173T918 226T975 308T993 413Q993 524 915 588T677 653H368ZM368 791H624Q706 791 766 809T865 859T924 936T943 1036Q943 1162 867 1221T631 1280H368V791Z" />
|
82 |
+
<glyph unicode="C" glyph-name="C" horiz-adv-x="1370" d="M1184 296Q1200 296 1213 283L1289 200Q1201 98 1076 41T773 -16Q618 -16 492 37T277 187T139 419T90 716Q90 878 142 1013T290 1245T517 1395T810 1449Q968 1449 1082 1400T1286 1267L1223 1178Q1216
|
83 |
+
1168 1207 1162T1181 1155Q1168 1155 1154 1164T1119 1188T1072 1218T1008 1248T922 1271T809 1281Q694 1281 599 1242T434 1129T327 951T288 716Q288 582 326 477T431 300T589 189T785 151Q849 151 900 158T994 182T1075 222T1151 281Q1168 296 1184 296Z" />
|
84 |
+
<glyph unicode="D" glyph-name="D" horiz-adv-x="1506" d="M1416 716Q1416 555 1365 423T1221 197T998 52T710 0H174V1433H710Q868 1433 998 1382T1221 1236T1365 1009T1416 716ZM1217 716Q1217 848 1181 952T1079 1128T919 1238T710 1276H369V157H710Q825 157
|
85 |
+
919 195T1079 304T1181 480T1217 716Z" />
|
86 |
+
<glyph unicode="E" glyph-name="E" horiz-adv-x="1162" d="M1057 1433V1275H369V799H926V647H369V158H1057V0H174V1433H1057Z" />
|
87 |
+
<glyph unicode="F" glyph-name="F" horiz-adv-x="1132" d="M1057 1433V1275H369V774H957V616H369V0H174V1433H1057Z" />
|
88 |
+
<glyph unicode="G" glyph-name="G" horiz-adv-x="1468" d="M813 141Q871 141 919 146T1011 163T1092 189T1168 225V541H946Q927 541 916 552T904 579V689H1344V139Q1290 100 1232 71T1107 23T964 -6T799 -16Q643 -16 513 37T289 187T143 419T90 716Q90 880 141
|
89 |
+
1015T288 1246T519 1396T823 1449Q908 1449 981 1437T1116 1401T1232 1344T1331 1268L1276 1180Q1259 1153 1232 1153Q1216 1153 1197 1164Q1172 1178 1141 1198T1066 1236T961 1268T817 1281Q696 1281 598 1242T431 1129T325 951T288 716Q288 580 326 474T435
|
90 |
+
293T601 180T813 141Z" />
|
91 |
+
<glyph unicode="H" glyph-name="H" horiz-adv-x="1512" d="M1336 0H1141V652H369V0H174V1433H369V794H1141V1433H1336V0Z" />
|
92 |
+
<glyph unicode="I" glyph-name="I" horiz-adv-x="614" d="M404 0H210V1433H404V0Z" />
|
93 |
+
<glyph unicode="J" glyph-name="J" horiz-adv-x="888" d="M713 495Q713 375 684 280T597 120T455 19T262 -16Q165 -16 60 12Q62 41 65 69T71 126Q73 143 83 153T115 164Q133 164 163 155T243 146Q309 146 360 166T447 228T501 335T520 491V1433H713V495Z" />
|
94 |
+
<glyph unicode="K" glyph-name="K" horiz-adv-x="1362" d="M387 805H460Q498 805 520 814T563 847L1040 1387Q1062 1412 1082 1422T1135 1433H1300L754 816Q733 793 715 777T675 751Q703 742 724 724T768 679L1338 0H1170Q1151 0 1138 3T1116 11T1098 24T1082
|
95 |
+
41L587 610Q576 622 567 630T545 645T516 653T475 656H387V0H194V1433H387V805Z" />
|
96 |
+
<glyph unicode="L" glyph-name="L" horiz-adv-x="1028" d="M368 163H988V0H174V1433H368V163Z" />
|
97 |
+
<glyph unicode="M" glyph-name="M" horiz-adv-x="1840" d="M879 518Q893 494 903 468T924 414Q934 442 945 467T970 519L1455 1400Q1468 1423 1482 1428T1522 1433H1665V0H1495V1053Q1495 1074 1496 1098T1499 1147L1008 251Q983 206 938 206H910Q865 206 840
|
98 |
+
251L338 1150Q341 1124 342 1099T344 1053V0H174V1433H317Q343 1433 357 1428T384 1400L879 518V518Z" />
|
99 |
+
<glyph unicode="N" glyph-name="N" horiz-adv-x="1512" d="M274 1433Q300 1433 312 1427T341 1400L1171 320Q1168 346 1167 370T1166 418V1433H1336V0H1238Q1215 0 1200 8T1169 35L340 1114Q342 1089 343 1065T344 1021V0H174V1433H274V1433Z" />
|
100 |
+
<glyph unicode="O" glyph-name="O" horiz-adv-x="1596" d="M1505 716Q1505 555 1454 421T1310 189T1087 39T798 -15Q640 -15 510 38T287 189T143 420T92 716Q92 877 143 1011T287 1243T510 1395T798 1449Q956 1449 1086 1395T1310 1244T1454 1012T1505 716ZM1306
|
101 |
+
716Q1306 848 1270 953T1168 1130T1008 1242T798 1281Q683 1281 589 1242T429 1131T326 953T290 716Q290 584 326 480T428 303T589 192T798 153Q914 153 1008 191T1168 302T1270 479T1306 716Z" />
|
102 |
+
<glyph unicode="P" glyph-name="P" horiz-adv-x="1222" d="M387 536V0H194V1433H617Q753 1433 853 1402T1020 1312T1118 1172T1151 989Q1151 889 1116 806T1014 663T846 570T617 536H387ZM387 690H617Q700 690 763 712T870 773T935 868T957 989Q957 1126 873 1203T617
|
103 |
+
1280H387V690Z" />
|
104 |
+
<glyph unicode="Q" glyph-name="Q" horiz-adv-x="1596" d="M1505 716Q1505 615 1485 524T1425 355T1330 212T1204 101L1572 -296H1412Q1376 -296 1348 -286T1297 -251L1045 23Q988 5 927 -5T798 -15Q640 -15 510 38T287 189T143 420T92 716Q92 877 143 1011T287
|
105 |
+
1243T510 1395T798 1449Q956 1449 1086 1395T1310 1244T1454 1012T1505 716ZM1306 716Q1306 848 1270 953T1168 1130T1008 1242T798 1281Q683 1281 589 1242T429 1131T326 953T290 716Q290 584 326 480T428 303T589 192T798 153Q914 153 1008 191T1168 302T1270
|
106 |
+
479T1306 716Z" />
|
107 |
+
<glyph unicode="R" glyph-name="R" horiz-adv-x="1288" d="M387 598V0H194V1433H599Q735 1433 834 1406T997 1326T1093 1201T1124 1036Q1124 960 1100 894T1031 776T920 686T771 630Q807 609 835 569L1253 0H1081Q1028 0 1003 41L631 553Q614 577 594 587T534
|
108 |
+
598H387ZM387 739H590Q675 739 739 759T847 817T913 907T935 1022Q935 1150 851 1215T599 1280H387V739Z" />
|
109 |
+
<glyph unicode="S" glyph-name="S" horiz-adv-x="1060" d="M908 1209Q899 1194 889 1187T863 1179Q846 1179 824 1196T767 1233T684 1271T566 1288Q501 1288 451 1271T368 1223T317 1153T300 1065Q300 1005 329 966T407 898T517 850T643 807T769 758T879 688T957
|
110 |
+
585T987 435Q987 341 955 259T862 115T711 19T507 -16Q368 -16 254 34T58 171L114 263Q122 274 133 281T159 289Q180 289 207 267T274 217T372 168T513 145Q582 145 636 164T727 217T785 300T805 407Q805 472 776 513T698 583T589 630T463 670T337 718T227 788T150
|
111 |
+
895T120 1055Q120 1131 149 1202T235 1328T373 1416T563 1449Q683 1449 782 1411T955 1301L908 1209Z" />
|
112 |
+
<glyph unicode="T" glyph-name="T" horiz-adv-x="1180" d="M1150 1433V1270H687V0H493V1270H28V1433H1150Z" />
|
113 |
+
<glyph unicode="U" glyph-name="U" horiz-adv-x="1460" d="M731 154Q820 154 890 184T1008 268T1082 397T1108 562V1433H1301V562Q1301 438 1262 332T1149 149T969 27T731 -17Q599 -17 493 27T313 148T200 332T160 562V1433H353V563Q353 473 378 398T452 269T571
|
114 |
+
185T731 154Z" />
|
115 |
+
<glyph unicode="V" glyph-name="V" horiz-adv-x="1360" d="M8 1433H163Q189 1433 205 1420T229 1387L634 376Q648 342 659 302T682 219Q691 262 701 302T726 376L1129 1387Q1136 1404 1153 1418T1195 1433H1351L767 0H592L8 1433Z" />
|
116 |
+
<glyph unicode="W" glyph-name="W" horiz-adv-x="2038" d="M14 1433H175Q201 1433 218 1420T241 1387L537 391Q545 364 551 333T564 268Q571 302 578 333T594 391L931 1387Q937 1404 954 1418T997 1433H1053Q1079 1433 1095 1420T1119 1387L1454 391Q1472 339
|
117 |
+
1486 272Q1492 305 1497 335T1510 391L1807 1387Q1812 1405 1829 1419T1872 1433H2023L1576 0H1402L1039 1093Q1028 1124 1019 1165Q1014 1145 1010 1127T1000 1093L635 0H461L14 1433Z" />
|
118 |
+
<glyph unicode="X" glyph-name="X" horiz-adv-x="1286" d="M507 736L34 1433H227Q248 1433 258 1426T276 1406L650 832Q657 853 671 878L1024 1402Q1033 1416 1043 1424T1069 1433H1254L779 745L1270 0H1078Q1056 0 1044 11T1023 37L639 638Q632 617 621 598L247
|
119 |
+
37Q238 23 227 12T194 0H14L507 736Z" />
|
120 |
+
<glyph unicode="Y" glyph-name="Y" horiz-adv-x="1258" d="M726 570V0H533V570L8 1433H178Q204 1433 219 1420T245 1388L573 831Q593 796 606 765T631 704Q642 735 655 766T688 831L1015 1388Q1024 1404 1039 1418T1080 1433H1252L726 570Z" />
|
121 |
+
<glyph unicode="Z" glyph-name="Z" horiz-adv-x="1248" d="M1172 1433V1361Q1172 1327 1151 1297L340 158H1158V0H86V76Q86 106 105 133L917 1275H124V1433H1172Z" />
|
122 |
+
<glyph unicode="[" glyph-name="bracketleft" horiz-adv-x="600" d="M142 -289V1533H510V1463Q510 1441 497 1429T461 1416H292V-171H461Q483 -171 496 -183T510 -219V-289H142Z" />
|
123 |
+
<glyph unicode="\" glyph-name="backslash" horiz-adv-x="750" d="M-20 1473H56Q89 1473 113 1456T150 1407L751 -90H676Q647 -90 619 -73T578 -21L-20 1473Z" />
|
124 |
+
<glyph unicode="]" glyph-name="bracketright" horiz-adv-x="600" d="M90 -219Q90 -199 103 -185T139 -171H308V1416H139Q117 1416 104 1429T90 1463V1533H458V-289H90V-219Z" />
|
125 |
+
<glyph unicode="^" glyph-name="asciicircum" horiz-adv-x="1160" d="M516 1433H631L989 787H860Q843 787 831 797T811 821L615 1173Q602 1196 593 1217T576 1260Q562 1216 539 1173L345 821Q337 807 326 797T294 787H158L516 1433Z" />
|
126 |
+
<glyph unicode="_" glyph-name="underscore" horiz-adv-x="788" d="M788 -165V-285H0V-165H788Z" />
|
127 |
+
<glyph unicode="`" glyph-name="grave" horiz-adv-x="614" d="M207 1449Q240 1449 256 1439T286 1405L435 1163H333Q312 1163 299 1169T272 1191L38 1449H207Z" />
|
128 |
+
<glyph unicode="a" glyph-name="a" horiz-adv-x="1014" d="M890 0H811Q785 0 769 8T748 42L728 136Q688 100 650 72T570 24T481 -6T375 -16Q316 -16 265 0T175 50T115 133T92 253Q92 313 125 368T231 467T424 537T715 569V648Q715 766 665 826T515 887Q450 887
|
129 |
+
406 871T329 834T273 797T226 780Q208 780 195 789T173 813L141 870Q225 951 322 991T537 1031Q622 1031 688 1003T799 925T867 804T890 648V0ZM428 109Q475 109 514 118T587 145T653 188T715 245V456Q592 452 506 437T366 396T288 337T263 261Q263 221 276 192T311
|
130 |
+
145T363 118T428 109Z" />
|
131 |
+
<glyph unicode="b" glyph-name="b" horiz-adv-x="1118" d="M152 0V1473H331V867Q394 940 475 984T662 1029Q750 1029 821 996T942 898T1019 736T1046 513Q1046 401 1016 305T930 138T792 27T608 -14Q510 -14 442 24T322 130L313 38Q305 0 267 0H152ZM604 887Q517
|
132 |
+
887 452 847T331 734V244Q379 178 437 151T568 124Q710 124 786 225T862 513Q862 612 845 683T794 799T713 866T604 887Z" />
|
133 |
+
<glyph unicode="c" glyph-name="c" horiz-adv-x="934" d="M837 833Q829 822 821 816T798 810Q783 810 766 822T721 850T656 877T561 890Q487 890 430 864T335 787T277 666T257 507Q257 415 278 344T337 224T429 150T552 124Q617 124 659 139T729 174T775 208T811
|
134 |
+
224Q834 224 845 207L895 142Q829 61 730 24T521 -14Q426 -14 345 21T203 122T109 286T74 507Q74 620 105 716T197 881T347 990T551 1029Q657 1029 739 995T884 897L837 833Z" />
|
135 |
+
<glyph unicode="d" glyph-name="d" horiz-adv-x="1118" d="M859 0Q821 0 811 37L795 160Q730 81 647 34T455 -14Q368 -14 297 19T176 118T99 280T72 503Q72 615 102 711T188 879T326 990T510 1031Q603 1031 669 1000T787 911V1473H965V0H859ZM514 130Q601 130
|
136 |
+
666 170T787 283V773Q738 839 680 865T550 892Q408 892 332 791T256 503Q256 404 273 334T323 218T404 151T514 130Z" />
|
137 |
+
<glyph unicode="e" glyph-name="e" horiz-adv-x="1048" d="M547 1029Q638 1029 715 999T848 911T935 769T967 576Q967 534 958 520T924 506H250Q252 410 276 339T342 221T442 150T572 126Q639 126 687 141T771 175T829 208T870 224Q892 224 904 207L954 142Q921
|
138 |
+
102 875 73T777 24T668 -4T557 -14Q452 -14 364 21T211 125T110 295T74 527Q74 633 106 725T200 884T349 990T547 1029ZM551 898Q422 898 348 824T256 617H807Q807 679 790 730T740 819T660 877T551 898Z" />
|
139 |
+
<glyph unicode="f" glyph-name="f" horiz-adv-x="674" d="M186 0V861L74 874Q53 879 40 889T26 920V993H186V1091Q186 1178 210 1245T280 1359T390 1430T534 1454Q602 1454 660 1434L656 1345Q655 1325 639 1321T594 1317H563Q517 1317 480 1305T415 1266T374
|
140 |
+
1195T359 1086V993H652V864H365V0H186Z" />
|
141 |
+
<glyph unicode="g" glyph-name="g" horiz-adv-x="1022" d="M487 1030Q553 1030 610 1016T715 973H990V907Q990 874 948 865L833 849Q867 784 867 704Q867 630 839 570T760 466T640 400T487 377Q416 377 353 394Q321 374 305 351T288 306Q288 270 317 252T394 225T503
|
142 |
+
215T627 209T752 193T861 157T938 88T967 -26Q967 -91 935 -152T841 -260T692 -336T493 -365Q382 -365 299 -343T160 -284T78 -199T50 -97Q50 -22 97 30T228 114Q185 134 160 167T134 257Q134 279 142 302T166 349T207 393T263 430Q188 472 146 541T103 704Q103
|
143 |
+
778 131 838T211 941T332 1007T487 1030ZM803 -55Q803 -17 782 6T725 41T642 60T543 68T437 74T334 85Q277 58 242 19T206 -74Q206 -108 223 -137T277 -188T367 -222T496 -235Q568 -235 625 -222T721 -185T782 -128T803 -55ZM487 495Q541 495 582 510T652 552T694
|
144 |
+
616T708 699Q708 792 652 847T487 902Q380 902 324 847T267 699Q267 654 281 617T324 552T393 510T487 495Z" />
|
145 |
+
<glyph unicode="h" glyph-name="h" horiz-adv-x="1112" d="M146 0V1473H324V877Q389 946 468 987T650 1029Q733 1029 796 1002T902 924T967 802T989 645V0H811V645Q811 760 759 823T598 887Q519 887 451 849T324 746V0H146Z" />
|
146 |
+
<glyph unicode="i" glyph-name="i" horiz-adv-x="512" d="M344 1013V0H166V1013H344ZM384 1331Q384 1305 374 1283T346 1243T305 1215T256 1205Q230 1205 208 1215T168 1242T140 1282T130 1331Q130 1357 140 1380T167 1421T207 1449T256 1459Q282 1459 305 1449T345
|
147 |
+
1422T373 1381T384 1331Z" />
|
148 |
+
<glyph unicode="j" glyph-name="j" horiz-adv-x="508" d="M344 1013V-75Q344 -136 328 -188T278 -280T189 -341T58 -364Q25 -364 -2 -359T-56 -344L-48 -248Q-46 -235 -39 -232T-17 -228Q-9 -228 0 -228T22 -229Q100 -229 133 -193T166 -75V1013H344ZM384 1331Q384
|
149 |
+
1305 374 1283T346 1243T305 1215T256 1205Q230 1205 208 1215T168 1242T140 1282T130 1331Q130 1357 140 1380T167 1421T207 1449T256 1459Q282 1459 305 1449T345 1422T373 1381T384 1331Z" />
|
150 |
+
<glyph unicode="k" glyph-name="k" horiz-adv-x="1048" d="M331 1473V606H377Q397 606 410 611T439 634L759 977Q774 993 789 1003T829 1013H991L618 616Q604 599 591 586T560 563Q578 551 592 536T620 500L1016 0H856Q834 0 819 8T789 35L456 450Q441 471 426
|
151 |
+
477T381 484H331V0H152V1473H331Z" />
|
152 |
+
<glyph unicode="l" glyph-name="l" horiz-adv-x="512" d="M344 1473V0H166V1473H344Z" />
|
153 |
+
<glyph unicode="m" glyph-name="m" horiz-adv-x="1642" d="M146 0V1013H252Q290 1013 300 976L313 872Q369 941 438 985T600 1029Q703 1029 766 972T858 818Q879 873 913 913T991 979T1082 1017T1181 1029Q1261 1029 1323 1004T1429 929T1496 809T1519 645V0H1341V645Q1341
|
154 |
+
764 1289 825T1138 887Q1094 887 1055 872T985 826T938 751T920 645V0H742V645Q742 767 693 827T550 887Q484 887 428 852T324 755V0H146Z" />
|
155 |
+
<glyph unicode="n" glyph-name="n" horiz-adv-x="1112" d="M146 0V1013H252Q290 1013 300 976L314 866Q380 939 461 984T650 1029Q733 1029 796 1002T902 924T967 802T989 645V0H811V645Q811 760 759 823T598 887Q519 887 451 849T324 746V0H146Z" />
|
156 |
+
<glyph unicode="o" glyph-name="o" horiz-adv-x="1112" d="M556 1029Q667 1029 756 992T908 887T1004 723T1038 507Q1038 387 1005 291T909 127T757 23T556 -14Q445 -14 356 22T203 127T106 291T72 507Q72 626 106 722T203 887T355 992T556 1029ZM556 125Q706
|
157 |
+
125 780 225T854 506Q854 687 780 788T556 889Q480 889 424 863T331 788T275 668T256 506Q256 416 274 345T330 226T424 151T556 125Z" />
|
158 |
+
<glyph unicode="p" glyph-name="p" horiz-adv-x="1104" d="M146 -343V1013H252Q290 1013 300 976L315 856Q380 935 463 983T656 1031Q743 1031 814 998T935 899T1012 736T1039 513Q1039 401 1009 305T923 138T786 27T602 -14Q508 -14 442 17T324 105V-343H146ZM597
|
159 |
+
887Q510 887 445 847T324 734V244Q373 178 431 151T562 124Q703 124 779 225T855 513Q855 612 838 683T787 799T706 866T597 887Z" />
|
160 |
+
<glyph unicode="q" glyph-name="q" horiz-adv-x="1118" d="M965 1013V-343H787V150Q723 76 642 31T455 -14Q368 -14 297 19T176 118T99 280T72 503Q72 615 102 711T188 879T326 990T510 1031Q608 1031 676 996T799 897L811 976Q821 1013 859 1013H965ZM514 130Q601
|
161 |
+
130 666 170T787 283V773Q739 837 680 864T550 892Q408 892 332 791T256 503Q256 404 273 334T323 218T404 151T514 130Z" />
|
162 |
+
<glyph unicode="r" glyph-name="r" horiz-adv-x="806" d="M146 0V1013H248Q277 1013 288 1002T303 964L315 806Q367 912 443 971T623 1031Q665 1031 699 1022T762 995L739 862Q732 837 708 837Q694 837 665 846T584 856Q491 856 429 802T324 645V0H146Z" />
|
163 |
+
<glyph unicode="s" glyph-name="s" horiz-adv-x="868" d="M726 846Q714 824 689 824Q674 824 655 835T609 859T543 884T453 896Q408 896 372 885T311 853T272 807T258 749Q258 710 280 684T340 639T424 606T520 575T617 538T701 488T760 415T783 310Q783 240 758
|
164 |
+
181T684 78T564 9T400 -16Q294 -16 208 18T62 107L104 175Q112 188 123 195T152 202Q170 202 190 188T238 157T307 126T409 112Q461 112 500 125T565 162T603 215T616 279Q616 321 594 348T534 395T450 429T353 460T256 496T171 548T112 624T89 735Q89 793 113
|
165 |
+
846T183 940T296 1005T449 1029Q549 1029 628 998T766 911L726 846Z" />
|
166 |
+
<glyph unicode="t" glyph-name="t" horiz-adv-x="746" d="M453 -16Q333 -16 269 51T204 244V864H82Q66 864 55 873T44 903V974L210 995L251 1308Q253 1323 264 1332T292 1342H382V993H672V864H382V256Q382 192 413 161T493 130Q521 130 541 137T577 154T602 170T621
|
167 |
+
178Q635 178 646 161L698 76Q652 33 587 9T453 -16Z" />
|
168 |
+
<glyph unicode="u" glyph-name="u" horiz-adv-x="1112" d="M300 1013V367Q300 252 353 189T513 126Q591 126 660 163T787 266V1013H965V0H859Q821 0 811 37L797 146Q731 73 649 29T461 -16Q378 -16 315 11T208 89T144 210T122 367V1013H300Z" />
|
169 |
+
<glyph unicode="v" glyph-name="v" horiz-adv-x="1024" d="M18 1013H164Q185 1013 199 1002T219 976L476 324Q490 288 498 252T513 181Q521 216 530 252T553 324L813 976Q819 992 832 1002T866 1013H1005L592 0H431L18 1013Z" />
|
170 |
+
<glyph unicode="w" glyph-name="w" horiz-adv-x="1532" d="M14 1013H154Q176 1013 190 1002T209 976L403 324Q411 288 418 255T430 187Q438 221 448 254T469 324L683 980Q688 995 700 1005T732 1015H809Q829 1015 842 1005T860 980L1069 324Q1080 289 1088 255T1105
|
171 |
+
188Q1110 221 1118 257T1135 324L1333 976Q1338 992 1352 1002T1385 1013H1519L1191 0H1050Q1024 0 1014 34L790 721Q782 744 777 767T767 814Q762 791 757 767T744 720L517 34Q506 0 476 0H342L14 1013Z" />
|
172 |
+
<glyph unicode="x" glyph-name="x" horiz-adv-x="1008" d="M383 519L42 1013H213Q235 1013 245 1006T263 986L511 606Q520 634 537 662L755 982Q765 996 775 1004T800 1013H964L623 529L978 0H807Q785 0 773 11T752 37L497 434Q490 405 476 382L240 37Q230 23
|
173 |
+
219 12T187 0H28L383 519Z" />
|
174 |
+
<glyph unicode="y" glyph-name="y" horiz-adv-x="1024" d="M443 -299Q434 -319 421 -331T379 -343H247L432 59L14 1013H168Q191 1013 204 1002T223 976L494 338Q503 316 509 294T521 249Q528 272 535 294T551 339L814 976Q820 992 834 1002T866 1013H1008L443 -299Z" />
|
175 |
+
<glyph unicode="z" glyph-name="z" horiz-adv-x="924" d="M853 937Q853 918 846 901T828 869L280 139H833V0H70V74Q70 87 76 104T95 138L646 873H101V1013H853V937Z" />
|
176 |
+
<glyph unicode="{" glyph-name="braceleft" horiz-adv-x="600" d="M181 425Q181 488 146 528T44 569V676Q111 676 146 716T181 820Q181 870 173 919T156 1017T138 1116T130 1218Q130 1287 150 1345T212 1445T315 1510T459 1533H512V1454Q512 1434 498 1425T472
|
177 |
+
1416H452Q375 1416 331 1366T286 1229Q286 1173 293 1121T309 1020T325 921T332 822Q332 784 321 752T290 694T242 650T181 622Q214 613 241 595T289 550T321 492T332 423Q332 373 325 324T309 226T293 124T286 16Q286 -71 330 -121T452 -171H472Q484 -171 498
|
178 |
+
-180T512 -209V-289H459Q377 -289 316 -266T213 -200T151 -100T130 27Q130 79 138 128T155 227T173 326T181 425Z" />
|
179 |
+
<glyph unicode="|" glyph-name="bar" horiz-adv-x="600" d="M230 1533H368V-343H230V1533Z" />
|
180 |
+
<glyph unicode="}" glyph-name="braceright" horiz-adv-x="600" d="M419 425Q419 375 427 326T444 228T462 129T470 27Q470 -42 449 -100T387 -200T285 -265T141 -289H88V-209Q88 -189 102 -180T128 -171H148Q225 -171 269 -121T314 16Q314 72 307 124T291 225T275
|
181 |
+
324T268 423Q268 460 279 492T310 550T358 594T419 622Q386 631 359 649T311 693T279 751T268 822Q268 872 275 921T291 1019T307 1121T314 1229Q314 1315 270 1365T148 1416H128Q116 1416 102 1425T88 1454V1533H141Q223 1533 284 1510T387 1445T449 1345T470
|
182 |
+
1218Q470 1166 462 1116T445 1017T427 919T419 820Q419 756 454 716T556 676V569Q489 569 454 529T419 425Z" />
|
183 |
+
<glyph unicode="~" glyph-name="asciitilde" horiz-adv-x="1160" d="M759 613Q824 613 860 655T898 768H1042Q1042 701 1024 645T971 549T885 487T770 465Q718 465 667 481T569 516T478 552T399 569Q334 569 298 527T260 414H116Q116 481 134 537T187 633T272
|
184 |
+
695T388 718Q440 718 491 702T589 666T680 630T759 613Z" />
|
185 |
+
<glyph unicode=" " glyph-name="uni00A0" horiz-adv-x="386" />
|
186 |
+
<glyph unicode="¡" glyph-name="exclamdown" horiz-adv-x="686" d="M262 -343V198Q262 243 263 285T268 371T275 461T286 559H407Q413 507 417 461T425 372T429 286T431 198V-343H262ZM218 904Q218 931 227 953T254 993T293 1019T343 1029Q369 1029 391 1020T431
|
187 |
+
993T458 954T468 904Q468 878 458 855T431 815T392 788T343 778Q316 778 294 788T254 815T228 855T218 904Z" />
|
188 |
+
<glyph unicode="¢" glyph-name="cent" horiz-adv-x="1160" d="M561 -11Q469 -1 392 38T258 144T170 301T138 506Q138 617 171 710T267 873T422 982T633 1026L645 1205Q647 1225 660 1239T695 1254H761L745 1021Q827 1009 893 978T1013 897L967 835Q959 824
|
189 |
+
952 819T930 813Q918 813 902 821T863 842T809 866T735 885L683 123Q746 127 788 142T860 175T909 206T944 220Q955 220 964 216T978 204L1026 141Q966 69 874 32T674 -12L662 -187Q660 -206 647 -220T612 -235H546L561 -11ZM315 506Q315 344 382 248T571 129L623
|
190 |
+
889Q547 883 490 855T393 777T335 659T315 506Z" />
|
191 |
+
<glyph unicode="£" glyph-name="sterling" horiz-adv-x="1160" d="M52 672Q52 698 68 716T113 734H247V995Q247 1089 274 1171T356 1315T493 1412T685 1448Q763 1448 823 1429T931 1375T1012 1296T1071 1199L999 1153Q989 1147 979 1145T958 1142Q944 1142
|
192 |
+
932 1147T908 1167Q888 1192 868 1215T822 1256T763 1284T685 1295Q622 1295 574 1274T494 1214T446 1120T430 997V734H871V662Q871 644 856 629T819 614H430V371Q430 296 402 242T323 142Q352 147 380 150T439 154H1115V78Q1115 64 1110 51T1094 26T1070 7T1038
|
193 |
+
0H74V115Q108 125 139 142T194 184T232 244T247 325V614H52V672Z" />
|
194 |
+
<glyph unicode="¤" glyph-name="currency" horiz-adv-x="1160" d="M223 672Q223 729 239 779T285 874L132 1027L223 1117L374 965Q418 996 470 1013T580 1030Q637 1030 688 1014T782 967L935 1120L1024 1029L873 877Q904 833 921 782T938 672Q938 615 922
|
195 |
+
564T876 470L1028 319L937 227L785 379Q741 349 689 332T580 315Q523 315 473 331T378 377L225 224L136 315L287 467Q257 511 240 562T223 672ZM355 672Q355 626 372 586T421 515T492 466T580 448Q627 448 668 466T740 514T789 585T807 672Q807 719 789 760T741
|
196 |
+
832T669 880T580 898Q533 898 493 881T421 832T373 760T355 672Z" />
|
197 |
+
<glyph unicode="¥" glyph-name="yen" horiz-adv-x="1160" d="M146 625H452L44 1433H193Q219 1433 234 1421T260 1388L536 822Q550 787 560 758T577 700Q584 729 593 758T616 822L891 1388Q899 1405 915 1419T957 1433H1107L698 625H1005V523H665V418H1005V315H665V0H486V315H146V418H486V523H146V625Z"
|
198 |
+
/>
|
199 |
+
<glyph unicode="¦" glyph-name="brokenbar" horiz-adv-x="600" d="M230 1533H368V739H230V1533ZM230 452H368V-343H230V452Z" />
|
200 |
+
<glyph unicode="§" glyph-name="section" horiz-adv-x="1006" d="M817 1265Q805 1243 780 1243Q765 1243 746 1254T700 1278T634 1303T544 1315Q496 1315 458 1303T393 1269T352 1220T338 1161Q338 1123 362 1095T426 1043T517 998T620 953T724 903T814 840T878
|
201 |
+
758T903 651Q903 570 864 507T741 405Q790 368 821 319T852 201Q852 131 827 72T754 -31T634 -100T470 -125Q364 -125 278 -91T132 -2L173 66Q181 79 192 86T221 93Q239 93 259 79T308 48T379 16T485 2Q535 2 574 14T641 49T682 103T696 172Q696 217 671 250T605
|
202 |
+
308T512 355T405 398T298 445T205 506T139 587T114 698Q114 776 157 838T293 936Q243 974 212 1026T180 1154Q180 1212 204 1265T274 1359T387 1423T540 1447Q640 1447 719 1416T857 1330L817 1265ZM272 726Q272 675 307 640T396 576T517 521T645 463Q699 489 723
|
203 |
+
526T747 611Q747 647 732 675T691 726T630 768T556 804T474 839T392 877Q326 847 299 811T272 726Z" />
|
204 |
+
<glyph unicode="¨" glyph-name="dieresis" horiz-adv-x="614" d="M239 1289Q239 1266 230 1246T205 1211T169 1187T125 1178Q103 1178 83 1187T48 1211T23 1246T14 1289Q14 1312 23 1333T47 1369T83 1394T125 1403Q148 1403 168 1394T205 1370T230 1333T239
|
205 |
+
1289ZM598 1289Q598 1266 589 1246T565 1211T529 1187T485 1178Q462 1178 442 1187T406 1211T382 1246T373 1289Q373 1312 382 1333T406 1369T441 1394T485 1403Q508 1403 528 1394T564 1370T589 1333T598 1289Z" />
|
206 |
+
<glyph unicode="©" glyph-name="copyright" horiz-adv-x="1596" d="M1030 463Q1038 468 1043 471T1055 475Q1066 475 1070 472T1080 463L1141 399Q1084 333 1001 297T802 260Q704 260 624 294T486 389T397 534T365 718Q365 819 399 903T495 1048T639 1142T821
|
207 |
+
1176Q929 1176 1005 1142T1138 1053L1092 988Q1087 982 1079 976T1059 970Q1045 970 1030 981T989 1005T926 1030T829 1042Q759 1042 703 1020T607 955T546 853T524 718Q524 641 545 581T605 479T696 417T811 395Q859 395 892 401T949 417T991 439T1030 463ZM68
|
208 |
+
716Q68 817 94 910T167 1085T282 1233T430 1348T604 1422T798 1448Q899 1448 992 1422T1167 1348T1315 1234T1429 1086T1503 911T1529 716Q1529 616 1503 523T1430 348T1315 201T1167 86T993 12T798 -14Q697 -14 604 12T430 86T282 200T168 348T94 522T68 716ZM168
|
209 |
+
716Q168 627 190 545T253 392T351 262T478 163T629 99T798 76Q930 76 1045 126T1246 262T1381 465T1431 716Q1431 805 1409 888T1345 1042T1247 1173T1119 1273T968 1338T798 1361Q666 1361 551 1311T351 1173T217 968T168 716Z" />
|
210 |
+
<glyph unicode="ª" glyph-name="ordfeminine" horiz-adv-x="684" d="M596 840H536Q518 840 509 845T492 869L480 918Q456 897 433 881T385 854T332 837T270 831Q232 831 200 841T143 871T106 922T92 993Q92 1027 111 1060T174 1120T290 1164T470 1184V1221Q470
|
211 |
+
1284 441 1314T355 1344Q317 1344 292 1335T249 1316T216 1297T185 1288Q171 1288 161 1295T146 1313L124 1355Q176 1404 236 1427T370 1450Q424 1450 466 1433T537 1386T581 1314T596 1221V840ZM309 923Q360 923 397 942T470 996V1101Q400 1099 352 1091T273 1069T230
|
212 |
+
1038T217 999Q217 957 243 940T309 923Z" />
|
213 |
+
<glyph unicode="«" glyph-name="guillemotleft" horiz-adv-x="926" d="M138 518V541L387 930L445 902Q459 895 466 884T473 860Q473 843 463 827L304 566Q290 542 276 529Q291 515 304 493L463 232Q468 224 470 215T473 198Q473 170 445 157L387 129L138
|
214 |
+
518ZM434 518V541L683 930L741 902Q755 895 762 884T769 860Q769 843 759 827L600 566Q586 542 572 529Q587 515 600 493L759 232Q764 224 766 215T769 198Q769 170 741 157L683 129L434 518Z" />
|
215 |
+
<glyph unicode="¬" glyph-name="logicalnot" horiz-adv-x="1160" d="M148 739H1008V315H857V604H148V739Z" />
|
216 |
+
<glyph unicode="­" glyph-name="uni00AD" horiz-adv-x="694" d="M100 675H594V524H100V675Z" />
|
217 |
+
<glyph unicode="®" glyph-name="registered" horiz-adv-x="1596" d="M68 716Q68 817 94 910T167 1085T282 1233T430 1348T604 1422T798 1448Q899 1448 992 1422T1167 1348T1315 1234T1429 1086T1503 911T1529 716Q1529 616 1503 523T1430 348T1315 201T1167
|
218 |
+
86T993 12T798 -14Q697 -14 604 12T430 86T282 200T168 348T94 522T68 716ZM168 716Q168 627 190 545T253 392T351 262T478 163T629 99T798 76Q930 76 1045 126T1246 262T1381 465T1431 716Q1431 805 1409 888T1345 1042T1247 1173T1119 1273T968 1338T798 1361Q666
|
219 |
+
1361 551 1311T351 1173T217 968T168 716ZM654 626V272H498V1164H786Q958 1164 1041 1102T1124 917Q1124 823 1071 757T911 666Q928 656 940 641T964 606L1192 272H1044Q1011 272 995 297L794 599Q785 612 773 619T734 626H654ZM654 740H770Q825 740 863 750T925
|
220 |
+
781T959 830T970 897Q970 934 961 962T930 1008T873 1035T786 1044H654V740Z" />
|
221 |
+
<glyph unicode="¯" glyph-name="overscore" horiz-adv-x="614" d="M20 1348H594V1231H20V1348Z" />
|
222 |
+
<glyph unicode="°" glyph-name="degree" horiz-adv-x="794" d="M70 1128Q70 1195 95 1254T164 1356T267 1425T396 1450Q465 1450 524 1425T628 1357T697 1254T722 1128Q722 1062 697 1004T628 902T525 833T396 807Q327 807 268 832T164 901T95 1003T70 1128ZM197
|
223 |
+
1127Q197 1085 212 1049T254 985T317 943T396 927Q438 927 474 942T537 985T579 1048T594 1127Q594 1169 579 1206T537 1270T474 1313T396 1329Q354 1329 318 1314T254 1271T212 1206T197 1127Z" />
|
224 |
+
<glyph unicode="±" glyph-name="plusminus" horiz-adv-x="1160" d="M651 1202V826H1058V690H651V322H505V690H100V826H505V1202H651ZM100 215H1058V80H100V215Z" />
|
225 |
+
<glyph unicode="²" glyph-name="twosuperior" horiz-adv-x="664" d="M346 1637Q398 1637 440 1622T513 1580T559 1515T576 1429Q576 1389 564 1355T530 1289T482 1229T425 1170L263 1005Q286 1011 309 1015T354 1019H549Q570 1019 581 1008T593 977V900H82V943Q82
|
226 |
+
956 87 970T104 996L325 1215Q350 1240 372 1266T410 1318T435 1371T445 1425Q445 1476 415 1503T340 1531Q294 1531 266 1507T223 1441Q215 1427 206 1419T179 1411Q175 1411 171 1411T161 1413L90 1425Q105 1531 174 1584T346 1637Z" />
|
227 |
+
<glyph unicode="³" glyph-name="threesuperior" horiz-adv-x="664" d="M354 1637Q405 1637 446 1623T516 1583T562 1523T578 1449Q578 1321 459 1276Q525 1257 559 1218T594 1117Q594 1062 573 1020T518 950T438 907T344 892Q287 892 245 904T173 941T121
|
228 |
+
1002T84 1085L139 1109Q154 1115 168 1115Q197 1115 208 1092Q214 1079 223 1063T247 1033T283 1010T337 1000Q368 1000 391 1010T431 1035T455 1071T463 1112Q463 1142 455 1163T427 1199T375 1220T295 1227V1314Q382 1315 417 1345T453 1427Q453 1477 424 1503T347
|
229 |
+
1529Q299 1529 271 1506T230 1442Q222 1426 214 1419T190 1411Q186 1411 182 1411T172 1413L105 1425Q112 1478 134 1517T188 1583T263 1623T354 1637Z" />
|
230 |
+
<glyph unicode="´" glyph-name="acute" horiz-adv-x="614" d="M597 1449L364 1191Q350 1176 337 1170T302 1163H196L344 1405Q358 1428 374 1438T423 1449H597Z" />
|
231 |
+
<glyph unicode="µ" glyph-name="mu" horiz-adv-x="1112" d="M300 1013V355Q300 246 354 186T513 126Q591 126 660 163T787 266V1013H965V0H859Q821 0 811 37L797 146Q730 74 660 40T502 6Q428 6 372 31T277 103Q284 61 287 18T290 -64V-343H201Q163 -343
|
232 |
+
143 -323T122 -267V1013H300Z" />
|
233 |
+
<glyph unicode="¶" glyph-name="paragraph" horiz-adv-x="1338" d="M1302 1433V1280H1083V-201H926V1280H649V-201H492V660Q388 660 305 690T164 773T74 897T42 1049Q42 1135 73 1205T163 1326T305 1405T492 1433H1302Z" />
|
234 |
+
<glyph unicode="·" glyph-name="middot" horiz-adv-x="546" d="M124 593Q124 624 135 652T167 700T215 732T272 744Q303 744 331 732T379 700T411 652T423 593Q423 563 411 536T379 489T331 457T272 445Q242 445 215 456T168 488T136 536T124 593Z" />
|
235 |
+
<glyph unicode="¸" glyph-name="cedilla" horiz-adv-x="614" d="M172 -247Q178 -247 186 -250T205 -258T232 -266T269 -270Q311 -270 332 -254T354 -211Q354 -192 343 -179T312 -157T261 -142T193 -131L236 10H348L324 -70Q414 -90 454 -124T495 -213Q495
|
236 |
+
-245 479 -270T435 -314T366 -341T278 -351Q237 -351 200 -343T132 -320L149 -265Q155 -247 172 -247Z" />
|
237 |
+
<glyph unicode="¹" glyph-name="onesuperior" horiz-adv-x="664" d="M173 985H320V1425L324 1468L217 1380Q205 1371 191 1371Q168 1371 159 1385L120 1441L342 1631H450V985H580V900H173V985Z" />
|
238 |
+
<glyph unicode="º" glyph-name="ordmasculine" horiz-adv-x="762" d="M382 1449Q452 1449 508 1428T605 1366T667 1269T689 1140Q689 1068 667 1010T605 912T509 850T382 828Q311 828 254 849T157 911T94 1010T72 1140Q72 1211 94 1268T156 1366T254 1427T382
|
239 |
+
1449ZM382 934Q466 934 507 986T549 1139Q549 1239 508 1291T382 1343Q295 1343 254 1291T212 1139Q212 1039 253 987T382 934Z" />
|
240 |
+
<glyph unicode="»" glyph-name="guillemotright" horiz-adv-x="926" d="M236 129L178 157Q150 170 150 198Q150 215 160 232L319 493Q332 517 346 529Q334 540 319 566L160 827Q150 844 150 861Q150 889 178 902L236 930L485 541V518L236 129ZM781 541V518L532
|
241 |
+
129L474 157Q446 170 446 198Q446 215 456 232L615 493Q628 517 642 529Q630 540 615 566L456 827Q446 844 446 861Q446 889 474 902L532 930L781 541Z" />
|
242 |
+
<glyph unicode="¼" glyph-name="onequarter" horiz-adv-x="1424" d="M1295 267H1404V202Q1404 191 1397 184T1377 176H1295V0H1186V176H880Q862 176 852 184T839 204L829 261L1171 729H1295V267ZM155 788H302V1228L306 1271L199 1183Q187 1174 173 1174Q150
|
243 |
+
1174 141 1188L102 1244L324 1434H432V788H562V703H155V788ZM1186 508Q1186 527 1187 549T1191 594L950 267H1186V508ZM434 53Q415 22 393 11T342 0H266L1084 1372Q1102 1401 1125 1417T1180 1433H1257L434 53Z" />
|
244 |
+
<glyph unicode="½" glyph-name="onehalf" horiz-adv-x="1424" d="M1126 737Q1178 737 1220 722T1293 680T1339 615T1356 529Q1356 489 1344 455T1310 389T1262 329T1205 270L1043 105Q1066 111 1089 115T1134 119H1329Q1350 119 1361 108T1373 77V0H862V43Q862
|
245 |
+
56 867 70T884 96L1105 315Q1130 340 1152 366T1190 418T1215 471T1225 525Q1225 576 1195 603T1120 631Q1074 631 1046 607T1003 541Q995 527 986 519T959 511Q955 511 951 511T941 513L870 525Q885 631 954 684T1126 737ZM155 788H302V1228L306 1271L199 1183Q187
|
246 |
+
1174 173 1174Q150 1174 141 1188L102 1244L324 1434H432V788H562V703H155V788ZM390 53Q371 22 349 11T298 0H222L1040 1372Q1058 1401 1081 1417T1136 1433H1213L390 53Z" />
|
247 |
+
<glyph unicode="¾" glyph-name="threequarters" horiz-adv-x="1426" d="M1296 267H1405V202Q1405 191 1398 184T1378 176H1296V0H1187V176H881Q863 176 853 184T840 204L830 261L1172 729H1296V267ZM338 1440Q389 1440 430 1426T500 1386T546 1326T562 1252Q562
|
248 |
+
1124 443 1079Q509 1060 543 1021T578 920Q578 865 557 823T502 753T422 710T328 695Q271 695 229 707T157 744T105 805T68 888L123 912Q138 918 152 918Q181 918 192 895Q198 882 207 866T231 836T267 813T321 803Q352 803 375 813T415 838T439 874T447 915Q447
|
249 |
+
945 439 966T411 1002T359 1023T279 1030V1117Q366 1118 401 1148T437 1230Q437 1280 408 1306T331 1332Q283 1332 255 1309T214 1245Q206 1229 198 1222T174 1214Q170 1214 166 1214T156 1216L89 1228Q96 1281 118 1320T172 1386T247 1426T338 1440ZM1187 508Q1187
|
250 |
+
527 1188 549T1192 594L951 267H1187V508ZM439 53Q420 22 398 11T347 0H271L1089 1372Q1107 1401 1130 1417T1185 1433H1262L439 53Z" />
|
251 |
+
<glyph unicode="¿" glyph-name="questiondown" horiz-adv-x="796" d="M770 -212Q739 -241 702 -267T620 -313T524 -344T412 -356Q333 -356 266 -334T149 -271T72 -171T44 -37Q44 39 66 92T123 183T199 248T275 299T336 347T366 405L384 559H506L518 392V380Q518
|
252 |
+
336 496 305T439 249T365 201T291 147T234 77T211 -22Q211 -66 228 -100T274 -159T342 -197T427 -210Q488 -210 531 -195T605 -162T654 -129T685 -114Q699 -114 707 -120T723 -137L770 -212ZM324 903Q324 929 333 952T359 992T399 1019T448 1029Q474 1029 497 1019T537
|
253 |
+
992T563 952T573 903Q573 876 564 854T537 814T497 788T448 778Q422 778 399 787T360 814T334 853T324 903Z" />
|
254 |
+
<glyph unicode="À" glyph-name="Agrave" horiz-adv-x="1360" d="M1353 0H1203Q1177 0 1161 13T1137 46L1003 392H360L226 46Q219 28 202 14T160 0H10L583 1433H780L1353 0ZM414 532H949L724 1115Q702 1169 681 1250Q670 1209 660 1175T639 1114L414 532ZM520
|
255 |
+
1782Q552 1782 568 1776T604 1749L815 1546H676Q655 1546 643 1549T614 1565L319 1782H520Z" />
|
256 |
+
<glyph unicode="Á" glyph-name="Aacute" horiz-adv-x="1360" d="M1353 0H1203Q1177 0 1161 13T1137 46L1003 392H360L226 46Q219 28 202 14T160 0H10L583 1433H780L1353 0ZM414 532H949L724 1115Q702 1169 681 1250Q670 1209 660 1175T639 1114L414 532ZM1021
|
257 |
+
1782L727 1566Q710 1554 697 1550T663 1546H525L736 1749Q746 1759 754 1765T772 1775T792 1780T820 1782H1021Z" />
|
258 |
+
<glyph unicode="Â" glyph-name="Acircumflex" horiz-adv-x="1360" d="M1353 0H1203Q1177 0 1161 13T1137 46L1003 392H360L226 46Q219 28 202 14T160 0H10L583 1433H780L1353 0ZM414 532H949L724 1115Q702 1169 681 1250Q670 1209 660 1175T639 1114L414
|
259 |
+
532ZM1006 1546H871Q859 1546 845 1549T822 1559L692 1654Q684 1658 680 1662Q672 1656 668 1654L538 1559Q529 1553 515 1550T489 1546H354L592 1756H768L1006 1546Z" />
|
260 |
+
<glyph unicode="Ã" glyph-name="Atilde" horiz-adv-x="1360" d="M1353 0H1203Q1177 0 1161 13T1137 46L1003 392H360L226 46Q219 28 202 14T160 0H10L583 1433H780L1353 0ZM414 532H949L724 1115Q702 1169 681 1250Q670 1209 660 1175T639 1114L414 532ZM801
|
261 |
+
1663Q836 1663 854 1683T874 1741H972Q972 1698 961 1662T929 1600T877 1559T806 1544Q771 1544 739 1557T678 1585T622 1614T572 1627Q538 1627 520 1606T500 1548H400Q400 1591 411 1627T444 1690T497 1731T568 1746Q603 1746 635 1733T696 1705T751 1676T801
|
262 |
+
1663Z" />
|
263 |
+
<glyph unicode="Ä" glyph-name="Adieresis" horiz-adv-x="1360" d="M1353 0H1203Q1177 0 1161 13T1137 46L1003 392H360L226 46Q219 28 202 14T160 0H10L583 1433H780L1353 0ZM414 532H949L724 1115Q702 1169 681 1250Q670 1209 660 1175T639 1114L414 532ZM578
|
264 |
+
1666Q578 1644 569 1625T545 1590T510 1567T466 1558Q445 1558 426 1566T391 1590T367 1624T358 1666Q358 1689 367 1709T391 1745T425 1769T466 1778Q489 1778 509 1769T545 1745T569 1710T578 1666ZM1004 1666Q1004 1644 995 1625T971 1590T936 1567T894 1558Q871
|
265 |
+
1558 851 1566T816 1590T793 1624T784 1666Q784 1689 792 1709T816 1745T851 1769T894 1778Q916 1778 936 1769T971 1745T995 1710T1004 1666Z" />
|
266 |
+
<glyph unicode="Å" glyph-name="Aring" horiz-adv-x="1360" d="M1353 0H1203Q1177 0 1161 13T1137 46L1003 392H360L226 46Q219 28 202 14T160 0H10L583 1433H780L1353 0ZM414 532H949L724 1115Q702 1169 681 1250Q670 1209 660 1175T639 1114L414 532ZM489
|
267 |
+
1659Q489 1698 504 1731T545 1787T605 1824T677 1837Q716 1837 750 1824T811 1788T853 1731T868 1659Q868 1621 853 1589T812 1534T751 1498T677 1485Q639 1485 605 1498T546 1534T505 1589T489 1659ZM578 1659Q578 1616 605 1588T679 1559Q724 1559 751 1587T779
|
268 |
+
1659Q779 1704 752 1732T679 1760Q632 1760 605 1732T578 1659Z" />
|
269 |
+
<glyph unicode="Æ" glyph-name="AE" horiz-adv-x="1858" d="M733 1433H1754V1275H1005L1065 799H1624V647H1084L1145 158H1754V0H982L933 392H377L198 45Q187 25 169 13T124 0H-24L733 1433ZM450 532H915L821 1285Q809 1244 795 1210T766 1144L450 532Z" />
|
270 |
+
<glyph unicode="Ç" glyph-name="Ccedilla" horiz-adv-x="1370" d="M643 -247Q649 -247 657 -250T676 -258T703 -266T740 -270Q782 -270 803 -254T825 -211Q825 -192 814 -179T783 -157T732 -142T664 -131L700 -13Q561 -1 448 57T256 211T133 435T90 716Q90
|
271 |
+
878 142 1013T290 1245T517 1395T810 1449Q968 1449 1082 1400T1286 1267L1223 1178Q1216 1168 1207 1162T1181 1155Q1168 1155 1154 1164T1119 1188T1072 1218T1008 1248T922 1271T809 1281Q694 1281 599 1242T434 1129T327 951T288 716Q288 582 326 477T431 300T589
|
272 |
+
189T785 151Q849 151 900 158T994 182T1075 222T1151 281Q1168 296 1184 296Q1200 296 1213 283L1289 200Q1206 103 1090 47T811 -15L795 -70Q885 -90 925 -124T966 -213Q966 -245 950 -270T906 -314T837 -341T749 -351Q708 -351 671 -343T603 -320L620 -265Q626
|
273 |
+
-247 643 -247Z" />
|
274 |
+
<glyph unicode="È" glyph-name="Egrave" horiz-adv-x="1162" d="M1057 1433V1275H369V799H926V647H369V158H1057V0H174V1433H1057ZM468 1782Q500 1782 516 1776T552 1749L763 1546H624Q603 1546 591 1549T562 1565L267 1782H468Z" />
|
275 |
+
<glyph unicode="É" glyph-name="Eacute" horiz-adv-x="1162" d="M1057 1433V1275H369V799H926V647H369V158H1057V0H174V1433H1057ZM969 1782L675 1566Q658 1554 645 1550T611 1546H473L684 1749Q694 1759 702 1765T720 1775T740 1780T768 1782H969Z" />
|
276 |
+
<glyph unicode="Ê" glyph-name="Ecircumflex" horiz-adv-x="1162" d="M1057 1433V1275H369V799H926V647H369V158H1057V0H174V1433H1057ZM954 1546H819Q807 1546 793 1549T770 1559L640 1654Q632 1658 628 1662Q620 1656 616 1654L486 1559Q477 1553 463 1550T437
|
277 |
+
1546H302L540 1756H716L954 1546Z" />
|
278 |
+
<glyph unicode="Ë" glyph-name="Edieresis" horiz-adv-x="1162" d="M1057 1433V1275H369V799H926V647H369V158H1057V0H174V1433H1057ZM526 1666Q526 1644 517 1625T493 1590T458 1567T414 1558Q393 1558 374 1566T339 1590T315 1624T306 1666Q306 1689 315
|
279 |
+
1709T339 1745T373 1769T414 1778Q437 1778 457 1769T493 1745T517 1710T526 1666ZM952 1666Q952 1644 943 1625T919 1590T884 1567T842 1558Q819 1558 799 1566T764 1590T741 1624T732 1666Q732 1689 740 1709T764 1745T799 1769T842 1778Q864 1778 884 1769T919
|
280 |
+
1745T943 1710T952 1666Z" />
|
281 |
+
<glyph unicode="Ì" glyph-name="Igrave" horiz-adv-x="614" d="M404 0H210V1433H404V0ZM405 1782Q437 1782 453 1776T489 1749L700 1546H561Q540 1546 528 1549T499 1565L204 1782H405Z" />
|
282 |
+
<glyph unicode="Í" glyph-name="Iacute" horiz-adv-x="614" d="M404 0H210V1433H404V0ZM906 1782L612 1566Q595 1554 582 1550T548 1546H410L621 1749Q631 1759 639 1765T657 1775T677 1780T705 1782H906Z" />
|
283 |
+
<glyph unicode="Î" glyph-name="Icircumflex" horiz-adv-x="614" d="M404 0H210V1433H404V0ZM635 1546H500Q488 1546 474 1549T451 1559L321 1654Q313 1658 309 1662Q301 1656 297 1654L167 1559Q158 1553 144 1550T118 1546H-17L221 1756H397L635 1546Z" />
|
284 |
+
<glyph unicode="Ï" glyph-name="Idieresis" horiz-adv-x="614" d="M404 0H210V1433H404V0ZM206 1666Q206 1644 197 1625T173 1590T138 1567T94 1558Q73 1558 54 1566T19 1590T-5 1624T-14 1666Q-14 1689 -5 1709T19 1745T53 1769T94 1778Q117 1778 137 1769T173
|
285 |
+
1745T197 1710T206 1666ZM632 1666Q632 1644 623 1625T599 1590T564 1567T522 1558Q499 1558 479 1566T444 1590T421 1624T412 1666Q412 1689 420 1709T444 1745T479 1769T522 1778Q544 1778 564 1769T599 1745T623 1710T632 1666Z" />
|
286 |
+
<glyph unicode="Ð" glyph-name="Eth" horiz-adv-x="1578" d="M50 780H247V1433H782Q940 1433 1070 1382T1294 1236T1438 1009T1489 716Q1489 555 1438 423T1294 197T1071 52T782 0H247V666H50V780ZM1290 716Q1290 848 1254 952T1152 1128T992 1238T782 1276H441V780H822V666H441V157H782Q898
|
287 |
+
157 992 195T1152 304T1254 480T1290 716Z" />
|
288 |
+
<glyph unicode="Ñ" glyph-name="Ntilde" horiz-adv-x="1512" d="M274 1433Q300 1433 312 1427T341 1400L1171 320Q1168 346 1167 370T1166 418V1433H1336V0H1238Q1215 0 1200 8T1169 35L340 1114Q342 1089 343 1065T344 1021V0H174V1433H274V1433ZM901 1663Q936
|
289 |
+
1663 954 1683T974 1741H1072Q1072 1698 1061 1662T1029 1600T977 1559T906 1544Q871 1544 839 1557T778 1585T722 1614T672 1627Q638 1627 620 1606T600 1548H500Q500 1591 511 1627T544 1690T597 1731T668 1746Q703 1746 735 1733T796 1705T851 1676T901 1663Z"
|
290 |
+
/>
|
291 |
+
<glyph unicode="Ò" glyph-name="Ograve" horiz-adv-x="1596" d="M1505 716Q1505 555 1454 421T1310 189T1087 39T798 -15Q640 -15 510 38T287 189T143 420T92 716Q92 877 143 1011T287 1243T510 1395T798 1449Q956 1449 1086 1395T1310 1244T1454 1012T1505
|
292 |
+
716ZM1306 716Q1306 848 1270 953T1168 1130T1008 1242T798 1281Q683 1281 589 1242T429 1131T326 953T290 716Q290 584 326 480T428 303T589 192T798 153Q914 153 1008 191T1168 302T1270 479T1306 716ZM640 1782Q672 1782 688 1776T724 1749L935 1546H796Q775
|
293 |
+
1546 763 1549T734 1565L439 1782H640Z" />
|
294 |
+
<glyph unicode="Ó" glyph-name="Oacute" horiz-adv-x="1596" d="M1505 716Q1505 555 1454 421T1310 189T1087 39T798 -15Q640 -15 510 38T287 189T143 420T92 716Q92 877 143 1011T287 1243T510 1395T798 1449Q956 1449 1086 1395T1310 1244T1454 1012T1505
|
295 |
+
716ZM1306 716Q1306 848 1270 953T1168 1130T1008 1242T798 1281Q683 1281 589 1242T429 1131T326 953T290 716Q290 584 326 480T428 303T589 192T798 153Q914 153 1008 191T1168 302T1270 479T1306 716ZM1141 1782L847 1566Q830 1554 817 1550T783 1546H645L856
|
296 |
+
1749Q866 1759 874 1765T892 1775T912 1780T940 1782H1141Z" />
|
297 |
+
<glyph unicode="Ô" glyph-name="Ocircumflex" horiz-adv-x="1596" d="M1505 716Q1505 555 1454 421T1310 189T1087 39T798 -15Q640 -15 510 38T287 189T143 420T92 716Q92 877 143 1011T287 1243T510 1395T798 1449Q956 1449 1086 1395T1310 1244T1454 1012T1505
|
298 |
+
716ZM1306 716Q1306 848 1270 953T1168 1130T1008 1242T798 1281Q683 1281 589 1242T429 1131T326 953T290 716Q290 584 326 480T428 303T589 192T798 153Q914 153 1008 191T1168 302T1270 479T1306 716ZM1126 1546H991Q979 1546 965 1549T942 1559L812 1654Q804
|
299 |
+
1658 800 1662Q792 1656 788 1654L658 1559Q649 1553 635 1550T609 1546H474L712 1756H888L1126 1546Z" />
|
300 |
+
<glyph unicode="Õ" glyph-name="Otilde" horiz-adv-x="1596" d="M1505 716Q1505 555 1454 421T1310 189T1087 39T798 -15Q640 -15 510 38T287 189T143 420T92 716Q92 877 143 1011T287 1243T510 1395T798 1449Q956 1449 1086 1395T1310 1244T1454 1012T1505
|
301 |
+
716ZM1306 716Q1306 848 1270 953T1168 1130T1008 1242T798 1281Q683 1281 589 1242T429 1131T326 953T290 716Q290 584 326 480T428 303T589 192T798 153Q914 153 1008 191T1168 302T1270 479T1306 716ZM921 1663Q956 1663 974 1683T994 1741H1092Q1092 1698 1081
|
302 |
+
1662T1049 1600T997 1559T926 1544Q891 1544 859 1557T798 1585T742 1614T692 1627Q658 1627 640 1606T620 1548H520Q520 1591 531 1627T564 1690T617 1731T688 1746Q723 1746 755 1733T816 1705T871 1676T921 1663Z" />
|
303 |
+
<glyph unicode="Ö" glyph-name="Odieresis" horiz-adv-x="1596" d="M1505 716Q1505 555 1454 421T1310 189T1087 39T798 -15Q640 -15 510 38T287 189T143 420T92 716Q92 877 143 1011T287 1243T510 1395T798 1449Q956 1449 1086 1395T1310 1244T1454 1012T1505
|
304 |
+
716ZM1306 716Q1306 848 1270 953T1168 1130T1008 1242T798 1281Q683 1281 589 1242T429 1131T326 953T290 716Q290 584 326 480T428 303T589 192T798 153Q914 153 1008 191T1168 302T1270 479T1306 716ZM698 1666Q698 1644 689 1625T665 1590T630 1567T586 1558Q565
|
305 |
+
1558 546 1566T511 1590T487 1624T478 1666Q478 1689 487 1709T511 1745T545 1769T586 1778Q609 1778 629 1769T665 1745T689 1710T698 1666ZM1124 1666Q1124 1644 1115 1625T1091 1590T1056 1567T1014 1558Q991 1558 971 1566T936 1590T913 1624T904 1666Q904
|
306 |
+
1689 912 1709T936 1745T971 1769T1014 1778Q1036 1778 1056 1769T1091 1745T1115 1710T1124 1666Z" />
|
307 |
+
<glyph unicode="×" glyph-name="multiply" horiz-adv-x="1160" d="M1017 1014L673 670L1027 317L932 221L578 575L221 219L126 315L482 671L137 1016L232 1112L577 766L921 1110L1017 1014Z" />
|
308 |
+
<glyph unicode="Ø" glyph-name="Oslash" horiz-adv-x="1596" d="M1505 716Q1505 555 1454 421T1310 189T1087 39T798 -15Q690 -15 596 9T423 82L323 -54Q301 -83 272 -96T214 -109H136L327 151Q215 249 154 393T92 716Q92 877 143 1011T287 1243T510 1395T798
|
309 |
+
1449Q913 1449 1013 1420T1196 1337L1278 1448Q1298 1475 1314 1486T1362 1498H1462L1290 1263Q1393 1165 1449 1026T1505 716ZM290 716Q290 581 327 476T434 297L1093 1196Q1033 1238 959 1259T798 1281Q683 1281 589 1242T429 1131T326 953T290 716ZM1306 716Q1306
|
310 |
+
842 1274 942T1181 1115L526 223Q642 153 798 153Q914 153 1008 191T1168 302T1270 479T1306 716Z" />
|
311 |
+
<glyph unicode="Ù" glyph-name="Ugrave" horiz-adv-x="1460" d="M731 154Q820 154 890 184T1008 268T1082 397T1108 562V1433H1301V562Q1301 438 1262 332T1149 149T969 27T731 -17Q599 -17 493 27T313 148T200 332T160 562V1433H353V563Q353 473 378 398T452
|
312 |
+
269T571 185T731 154ZM570 1782Q602 1782 618 1776T654 1749L865 1546H726Q705 1546 693 1549T664 1565L369 1782H570Z" />
|
313 |
+
<glyph unicode="Ú" glyph-name="Uacute" horiz-adv-x="1460" d="M731 154Q820 154 890 184T1008 268T1082 397T1108 562V1433H1301V562Q1301 438 1262 332T1149 149T969 27T731 -17Q599 -17 493 27T313 148T200 332T160 562V1433H353V563Q353 473 378 398T452
|
314 |
+
269T571 185T731 154ZM1071 1782L777 1566Q760 1554 747 1550T713 1546H575L786 1749Q796 1759 804 1765T822 1775T842 1780T870 1782H1071Z" />
|
315 |
+
<glyph unicode="Û" glyph-name="Ucircumflex" horiz-adv-x="1460" d="M731 154Q820 154 890 184T1008 268T1082 397T1108 562V1433H1301V562Q1301 438 1262 332T1149 149T969 27T731 -17Q599 -17 493 27T313 148T200 332T160 562V1433H353V563Q353 473 378
|
316 |
+
398T452 269T571 185T731 154ZM1056 1546H921Q909 1546 895 1549T872 1559L742 1654Q734 1658 730 1662Q722 1656 718 1654L588 1559Q579 1553 565 1550T539 1546H404L642 1756H818L1056 1546Z" />
|
317 |
+
<glyph unicode="Ü" glyph-name="Udieresis" horiz-adv-x="1460" d="M731 154Q820 154 890 184T1008 268T1082 397T1108 562V1433H1301V562Q1301 438 1262 332T1149 149T969 27T731 -17Q599 -17 493 27T313 148T200 332T160 562V1433H353V563Q353 473 378
|
318 |
+
398T452 269T571 185T731 154ZM628 1666Q628 1644 619 1625T595 1590T560 1567T516 1558Q495 1558 476 1566T441 1590T417 1624T408 1666Q408 1689 417 1709T441 1745T475 1769T516 1778Q539 1778 559 1769T595 1745T619 1710T628 1666ZM1054 1666Q1054 1644 1045
|
319 |
+
1625T1021 1590T986 1567T944 1558Q921 1558 901 1566T866 1590T843 1624T834 1666Q834 1689 842 1709T866 1745T901 1769T944 1778Q966 1778 986 1769T1021 1745T1045 1710T1054 1666Z" />
|
320 |
+
<glyph unicode="Ý" glyph-name="Yacute" horiz-adv-x="1258" d="M726 570V0H533V570L8 1433H178Q204 1433 219 1420T245 1388L573 831Q593 796 606 765T631 704Q642 735 655 766T688 831L1015 1388Q1024 1404 1039 1418T1080 1433H1252L726 570ZM971 1782L677
|
321 |
+
1566Q660 1554 647 1550T613 1546H475L686 1749Q696 1759 704 1765T722 1775T742 1780T770 1782H971Z" />
|
322 |
+
<glyph unicode="Þ" glyph-name="Thorn" horiz-adv-x="1222" d="M387 272V0H194V1433H387V1169H617Q753 1169 853 1138T1020 1048T1118 908T1151 725Q1151 625 1116 542T1014 399T846 306T617 272H387ZM387 426H617Q700 426 763 448T870 509T935 604T957 725Q957
|
323 |
+
862 873 939T617 1016H387V426Z" />
|
324 |
+
<glyph unicode="ß" glyph-name="germandbls" horiz-adv-x="1218" d="M673 1454Q776 1454 851 1424T976 1348T1048 1246T1072 1140Q1072 1080 1051 1037T997 961T928 903T858 854T805 805T783 747Q783 708 809 682T876 634T962 588T1049 529T1115 443T1142
|
325 |
+
314Q1142 236 1114 175T1035 72T918 7T771 -16Q674 -16 595 18T456 107L497 175Q505 188 516 195T545 202Q563 202 583 188T630 157T695 126T786 112Q830 112 865 125T924 162T962 217T975 286Q975 342 947 377T877 437T786 484T695 534T625 604T597 712Q597 765
|
326 |
+
619 804T675 875T748 934T820 991T876 1056T899 1140Q899 1172 887 1204T846 1263T774 1305T666 1322Q598 1322 543 1301T448 1238T387 1133T365 986V0H186V992Q186 1096 220 1181T319 1327T473 1421T673 1454Z" />
|
327 |
+
<glyph unicode="à" glyph-name="agrave" horiz-adv-x="1014" d="M890 0H811Q785 0 769 8T748 42L728 136Q688 100 650 72T570 24T481 -6T375 -16Q316 -16 265 0T175 50T115 133T92 253Q92 313 125 368T231 467T424 537T715 569V648Q715 766 665 826T515 887Q450
|
328 |
+
887 406 871T329 834T273 797T226 780Q208 780 195 789T173 813L141 870Q225 951 322 991T537 1031Q622 1031 688 1003T799 925T867 804T890 648V0ZM428 109Q475 109 514 118T587 145T653 188T715 245V456Q592 452 506 437T366 396T288 337T263 261Q263 221 276
|
329 |
+
192T311 145T363 118T428 109ZM428 1449Q461 1449 477 1439T507 1405L656 1163H554Q533 1163 520 1169T493 1191L259 1449H428Z" />
|
330 |
+
<glyph unicode="á" glyph-name="aacute" horiz-adv-x="1014" d="M890 0H811Q785 0 769 8T748 42L728 136Q688 100 650 72T570 24T481 -6T375 -16Q316 -16 265 0T175 50T115 133T92 253Q92 313 125 368T231 467T424 537T715 569V648Q715 766 665 826T515 887Q450
|
331 |
+
887 406 871T329 834T273 797T226 780Q208 780 195 789T173 813L141 870Q225 951 322 991T537 1031Q622 1031 688 1003T799 925T867 804T890 648V0ZM428 109Q475 109 514 118T587 145T653 188T715 245V456Q592 452 506 437T366 396T288 337T263 261Q263 221 276
|
332 |
+
192T311 145T363 118T428 109ZM818 1449L585 1191Q571 1176 558 1170T523 1163H417L565 1405Q579 1428 595 1438T644 1449H818Z" />
|
333 |
+
<glyph unicode="â" glyph-name="acircumflex" horiz-adv-x="1014" d="M890 0H811Q785 0 769 8T748 42L728 136Q688 100 650 72T570 24T481 -6T375 -16Q316 -16 265 0T175 50T115 133T92 253Q92 313 125 368T231 467T424 537T715 569V648Q715 766 665 826T515
|
334 |
+
887Q450 887 406 871T329 834T273 797T226 780Q208 780 195 789T173 813L141 870Q225 951 322 991T537 1031Q622 1031 688 1003T799 925T867 804T890 648V0ZM428 109Q475 109 514 118T587 145T653 188T715 245V456Q592 452 506 437T366 396T288 337T263 261Q263
|
335 |
+
221 276 192T311 145T363 118T428 109ZM833 1169H714Q693 1169 674 1183L546 1309L529 1326L513 1309L384 1183Q378 1178 367 1174T344 1169H221L444 1433H610L833 1169Z" />
|
336 |
+
<glyph unicode="ã" glyph-name="atilde" horiz-adv-x="1014" d="M890 0H811Q785 0 769 8T748 42L728 136Q688 100 650 72T570 24T481 -6T375 -16Q316 -16 265 0T175 50T115 133T92 253Q92 313 125 368T231 467T424 537T715 569V648Q715 766 665 826T515 887Q450
|
337 |
+
887 406 871T329 834T273 797T226 780Q208 780 195 789T173 813L141 870Q225 951 322 991T537 1031Q622 1031 688 1003T799 925T867 804T890 648V0ZM428 109Q475 109 514 118T587 145T653 188T715 245V456Q592 452 506 437T366 396T288 337T263 261Q263 221 276
|
338 |
+
192T311 145T363 118T428 109ZM638 1325Q674 1325 693 1346T714 1411H822Q822 1364 810 1325T774 1257T718 1214T645 1198Q610 1198 580 1212T522 1244T471 1275T424 1290Q352 1290 350 1202H239Q239 1250 252 1289T289 1357T346 1401T418 1417Q453 1417 483 1403T541
|
339 |
+
1371T591 1340T638 1325Z" />
|
340 |
+
<glyph unicode="ä" glyph-name="adieresis" horiz-adv-x="1014" d="M890 0H811Q785 0 769 8T748 42L728 136Q688 100 650 72T570 24T481 -6T375 -16Q316 -16 265 0T175 50T115 133T92 253Q92 313 125 368T231 467T424 537T715 569V648Q715 766 665 826T515
|
341 |
+
887Q450 887 406 871T329 834T273 797T226 780Q208 780 195 789T173 813L141 870Q225 951 322 991T537 1031Q622 1031 688 1003T799 925T867 804T890 648V0ZM428 109Q475 109 514 118T587 145T653 188T715 245V456Q592 452 506 437T366 396T288 337T263 261Q263
|
342 |
+
221 276 192T311 145T363 118T428 109ZM460 1289Q460 1266 451 1246T426 1211T390 1187T346 1178Q324 1178 304 1187T269 1211T244 1246T235 1289Q235 1312 244 1333T268 1369T304 1394T346 1403Q369 1403 389 1394T426 1370T451 1333T460 1289ZM819 1289Q819 1266
|
343 |
+
810 1246T786 1211T750 1187T706 1178Q683 1178 663 1187T627 1211T603 1246T594 1289Q594 1312 603 1333T627 1369T662 1394T706 1403Q729 1403 749 1394T785 1370T810 1333T819 1289Z" />
|
344 |
+
<glyph unicode="å" glyph-name="aring" horiz-adv-x="1014" d="M890 0H811Q785 0 769 8T748 42L728 136Q688 100 650 72T570 24T481 -6T375 -16Q316 -16 265 0T175 50T115 133T92 253Q92 313 125 368T231 467T424 537T715 569V648Q715 766 665 826T515 887Q450
|
345 |
+
887 406 871T329 834T273 797T226 780Q208 780 195 789T173 813L141 870Q225 951 322 991T537 1031Q622 1031 688 1003T799 925T867 804T890 648V0ZM428 109Q475 109 514 118T587 145T653 188T715 245V456Q592 452 506 437T366 396T288 337T263 261Q263 221 276
|
346 |
+
192T311 145T363 118T428 109ZM328 1315Q328 1357 344 1391T387 1450T451 1488T527 1502Q568 1502 604 1489T669 1450T713 1391T729 1315Q729 1274 713 1240T669 1182T605 1145T527 1131Q487 1131 451 1144T388 1182T344 1240T328 1315ZM428 1315Q428 1271 455
|
347 |
+
1243T529 1215Q574 1215 601 1243T629 1315Q629 1360 602 1388T529 1416Q482 1416 455 1388T428 1315Z" />
|
348 |
+
<glyph unicode="æ" glyph-name="ae" horiz-adv-x="1632" d="M1166 1029Q1248 1029 1318 997T1440 904T1521 756T1551 556Q1551 515 1543 501T1510 486H883Q887 395 910 328T971 215T1062 148T1180 126Q1249 126 1295 140T1371 173T1421 205T1456 220Q1470
|
349 |
+
220 1479 216T1494 203L1541 142Q1508 102 1465 73T1372 24T1269 -4T1164 -14Q1047 -14 952 42T801 215Q774 153 731 109T634 37T522 -3T403 -16Q334 -16 277 1T179 54T115 142T92 267Q92 327 125 385T231 489T424 564T715 598V648Q715 766 665 829T515 892Q450
|
350 |
+
892 406 875T329 836T273 798T226 780Q208 780 195 789T173 813L141 870Q225 951 315 991T519 1031Q639 1031 712 980T818 838Q872 926 958 977T1166 1029ZM715 486Q592 481 506 464T366 418T288 354T263 276Q263 189 313 149T444 109Q501 109 550 127T636 182T694
|
351 |
+
274T715 403V486ZM1159 898Q1098 898 1050 878T968 818T913 723T885 597H1393Q1393 662 1378 717T1332 813T1259 875T1159 898Z" />
|
352 |
+
<glyph unicode="ç" glyph-name="ccedilla" horiz-adv-x="934" d="M400 -247Q406 -247 414 -250T433 -258T460 -266T497 -270Q539 -270 560 -254T582 -211Q582 -192 571 -179T540 -157T489 -142T421 -131L458 -10Q375 1 305 40T183 146T103 303T74 507Q74
|
353 |
+
620 105 716T197 881T347 990T551 1029Q657 1029 739 995T884 897L837 833Q829 822 821 816T798 810Q783 810 766 822T721 850T656 877T561 890Q487 890 430 864T335 787T277 666T257 507Q257 415 278 344T337 224T429 150T552 124Q617 124 659 139T729 174T775
|
354 |
+
208T811 224Q822 224 830 220T845 207L895 142Q836 70 751 33T569 -12L552 -70Q642 -90 682 -124T723 -213Q723 -245 707 -270T663 -314T594 -341T506 -351Q465 -351 428 -343T360 -320L377 -265Q383 -247 400 -247Z" />
|
355 |
+
<glyph unicode="è" glyph-name="egrave" horiz-adv-x="1048" d="M547 1029Q638 1029 715 999T848 911T935 769T967 576Q967 534 958 520T924 506H250Q252 410 276 339T342 221T442 150T572 126Q639 126 687 141T771 175T829 208T870 224Q892 224 904 207L954
|
356 |
+
142Q921 102 875 73T777 24T668 -4T557 -14Q452 -14 364 21T211 125T110 295T74 527Q74 633 106 725T200 884T349 990T547 1029ZM551 898Q422 898 348 824T256 617H807Q807 679 790 730T740 819T660 877T551 898ZM451 1449Q484 1449 500 1439T530 1405L679 1163H577Q556
|
357 |
+
1163 543 1169T516 1191L282 1449H451Z" />
|
358 |
+
<glyph unicode="é" glyph-name="eacute" horiz-adv-x="1048" d="M547 1029Q638 1029 715 999T848 911T935 769T967 576Q967 534 958 520T924 506H250Q252 410 276 339T342 221T442 150T572 126Q639 126 687 141T771 175T829 208T870 224Q892 224 904 207L954
|
359 |
+
142Q921 102 875 73T777 24T668 -4T557 -14Q452 -14 364 21T211 125T110 295T74 527Q74 633 106 725T200 884T349 990T547 1029ZM551 898Q422 898 348 824T256 617H807Q807 679 790 730T740 819T660 877T551 898ZM841 1449L608 1191Q594 1176 581 1170T546 1163H440L588
|
360 |
+
1405Q602 1428 618 1438T667 1449H841Z" />
|
361 |
+
<glyph unicode="ê" glyph-name="ecircumflex" horiz-adv-x="1048" d="M547 1029Q638 1029 715 999T848 911T935 769T967 576Q967 534 958 520T924 506H250Q252 410 276 339T342 221T442 150T572 126Q639 126 687 141T771 175T829 208T870 224Q892 224 904
|
362 |
+
207L954 142Q921 102 875 73T777 24T668 -4T557 -14Q452 -14 364 21T211 125T110 295T74 527Q74 633 106 725T200 884T349 990T547 1029ZM551 898Q422 898 348 824T256 617H807Q807 679 790 730T740 819T660 877T551 898ZM856 1169H737Q716 1169 697 1183L569 1309L552
|
363 |
+
1326L536 1309L407 1183Q401 1178 390 1174T367 1169H244L467 1433H633L856 1169Z" />
|
364 |
+
<glyph unicode="ë" glyph-name="edieresis" horiz-adv-x="1048" d="M547 1029Q638 1029 715 999T848 911T935 769T967 576Q967 534 958 520T924 506H250Q252 410 276 339T342 221T442 150T572 126Q639 126 687 141T771 175T829 208T870 224Q892 224 904 207L954
|
365 |
+
142Q921 102 875 73T777 24T668 -4T557 -14Q452 -14 364 21T211 125T110 295T74 527Q74 633 106 725T200 884T349 990T547 1029ZM551 898Q422 898 348 824T256 617H807Q807 679 790 730T740 819T660 877T551 898ZM483 1289Q483 1266 474 1246T449 1211T413 1187T369
|
366 |
+
1178Q347 1178 327 1187T292 1211T267 1246T258 1289Q258 1312 267 1333T291 1369T327 1394T369 1403Q392 1403 412 1394T449 1370T474 1333T483 1289ZM842 1289Q842 1266 833 1246T809 1211T773 1187T729 1178Q706 1178 686 1187T650 1211T626 1246T617 1289Q617
|
367 |
+
1312 626 1333T650 1369T685 1394T729 1403Q752 1403 772 1394T808 1370T833 1333T842 1289Z" />
|
368 |
+
<glyph unicode="ì" glyph-name="igrave" horiz-adv-x="512" d="M344 1013V0H166V1013H344ZM418 1449Q451 1449 467 1439T497 1405L646 1163H544Q523 1163 510 1169T483 1191L249 1449H418Z" />
|
369 |
+
<glyph unicode="í" glyph-name="iacute" horiz-adv-x="512" d="M344 1013V0H166V1013H344ZM808 1449L575 1191Q561 1176 548 1170T513 1163H407L555 1405Q569 1428 585 1438T634 1449H808Z" />
|
370 |
+
<glyph unicode="î" glyph-name="icircumflex" horiz-adv-x="512" d="M344 1013V0H166V1013H344ZM822 1169H703Q682 1169 663 1183L535 1309L518 1326L502 1309L373 1183Q367 1178 356 1174T333 1169H210L433 1433H599L822 1169Z" />
|
371 |
+
<glyph unicode="ï" glyph-name="idieresis" horiz-adv-x="512" d="M344 1013V0H166V1013H344ZM450 1289Q450 1266 441 1246T416 1211T380 1187T336 1178Q314 1178 294 1187T259 1211T234 1246T225 1289Q225 1312 234 1333T258 1369T294 1394T336 1403Q359
|
372 |
+
1403 379 1394T416 1370T441 1333T450 1289ZM809 1289Q809 1266 800 1246T776 1211T740 1187T696 1178Q673 1178 653 1187T617 1211T593 1246T584 1289Q584 1312 593 1333T617 1369T652 1394T696 1403Q719 1403 739 1394T775 1370T800 1333T809 1289Z" />
|
373 |
+
<glyph unicode="ð" glyph-name="eth" horiz-adv-x="1106" d="M417 1065Q413 1072 411 1078T408 1091Q408 1113 431 1128L534 1200Q489 1220 439 1237T331 1268Q313 1273 301 1286T288 1323Q288 1338 293 1352L313 1414Q409 1398 499 1368T670 1290L837 1412L872
|
374 |
+
1355Q880 1342 880 1331Q880 1310 858 1294L761 1227Q821 1178 870 1116T955 977T1009 807T1029 604Q1029 461 998 347T906 153T753 30T541 -13Q443 -13 358 20T211 114T112 265T76 466Q76 560 107 643T196 790T336 890T523 927Q623 927 711 884T865 754Q845 890
|
375 |
+
787 985T634 1144L450 1009L417 1065ZM545 125Q616 125 673 152T771 233T835 370T861 564Q845 607 819 647T756 719T669 769T557 788Q482 788 426 763T331 695T274 592T254 464Q254 383 277 320T340 213T432 148T545 125Z" />
|
376 |
+
<glyph unicode="ñ" glyph-name="ntilde" horiz-adv-x="1112" d="M146 0V1013H252Q290 1013 300 976L314 866Q380 939 461 984T650 1029Q733 1029 796 1002T902 924T967 802T989 645V0H811V645Q811 760 759 823T598 887Q519 887 451 849T324 746V0H146ZM675
|
377 |
+
1325Q711 1325 730 1346T751 1411H859Q859 1364 847 1325T811 1257T755 1214T682 1198Q647 1198 617 1212T559 1244T508 1275T461 1290Q389 1290 387 1202H276Q276 1250 289 1289T326 1357T383 1401T455 1417Q490 1417 520 1403T578 1371T628 1340T675 1325Z" />
|
378 |
+
<glyph unicode="ò" glyph-name="ograve" horiz-adv-x="1112" d="M556 1029Q667 1029 756 992T908 887T1004 723T1038 507Q1038 387 1005 291T909 127T757 23T556 -14Q445 -14 356 22T203 127T106 291T72 507Q72 626 106 722T203 887T355 992T556 1029ZM556
|
379 |
+
125Q706 125 780 225T854 506Q854 687 780 788T556 889Q480 889 424 863T331 788T275 668T256 506Q256 416 274 345T330 226T424 151T556 125ZM458 1449Q491 1449 507 1439T537 1405L686 1163H584Q563 1163 550 1169T523 1191L289 1449H458Z" />
|
380 |
+
<glyph unicode="ó" glyph-name="oacute" horiz-adv-x="1112" d="M556 1029Q667 1029 756 992T908 887T1004 723T1038 507Q1038 387 1005 291T909 127T757 23T556 -14Q445 -14 356 22T203 127T106 291T72 507Q72 626 106 722T203 887T355 992T556 1029ZM556
|
381 |
+
125Q706 125 780 225T854 506Q854 687 780 788T556 889Q480 889 424 863T331 788T275 668T256 506Q256 416 274 345T330 226T424 151T556 125ZM848 1449L615 1191Q601 1176 588 1170T553 1163H447L595 1405Q609 1428 625 1438T674 1449H848Z" />
|
382 |
+
<glyph unicode="ô" glyph-name="ocircumflex" horiz-adv-x="1112" d="M556 1029Q667 1029 756 992T908 887T1004 723T1038 507Q1038 387 1005 291T909 127T757 23T556 -14Q445 -14 356 22T203 127T106 291T72 507Q72 626 106 722T203 887T355 992T556 1029ZM556
|
383 |
+
125Q706 125 780 225T854 506Q854 687 780 788T556 889Q480 889 424 863T331 788T275 668T256 506Q256 416 274 345T330 226T424 151T556 125ZM863 1169H744Q723 1169 704 1183L576 1309L559 1326L543 1309L414 1183Q408 1178 397 1174T374 1169H251L474 1433H640L863
|
384 |
+
1169Z" />
|
385 |
+
<glyph unicode="õ" glyph-name="otilde" horiz-adv-x="1112" d="M556 1029Q667 1029 756 992T908 887T1004 723T1038 507Q1038 387 1005 291T909 127T757 23T556 -14Q445 -14 356 22T203 127T106 291T72 507Q72 626 106 722T203 887T355 992T556 1029ZM556
|
386 |
+
125Q706 125 780 225T854 506Q854 687 780 788T556 889Q480 889 424 863T331 788T275 668T256 506Q256 416 274 345T330 226T424 151T556 125ZM668 1325Q704 1325 723 1346T744 1411H852Q852 1364 840 1325T804 1257T748 1214T675 1198Q640 1198 610 1212T552 1244T501
|
387 |
+
1275T454 1290Q382 1290 380 1202H269Q269 1250 282 1289T319 1357T376 1401T448 1417Q483 1417 513 1403T571 1371T621 1340T668 1325Z" />
|
388 |
+
<glyph unicode="ö" glyph-name="odieresis" horiz-adv-x="1112" d="M556 1029Q667 1029 756 992T908 887T1004 723T1038 507Q1038 387 1005 291T909 127T757 23T556 -14Q445 -14 356 22T203 127T106 291T72 507Q72 626 106 722T203 887T355 992T556 1029ZM556
|
389 |
+
125Q706 125 780 225T854 506Q854 687 780 788T556 889Q480 889 424 863T331 788T275 668T256 506Q256 416 274 345T330 226T424 151T556 125ZM490 1289Q490 1266 481 1246T456 1211T420 1187T376 1178Q354 1178 334 1187T299 1211T274 1246T265 1289Q265 1312
|
390 |
+
274 1333T298 1369T334 1394T376 1403Q399 1403 419 1394T456 1370T481 1333T490 1289ZM849 1289Q849 1266 840 1246T816 1211T780 1187T736 1178Q713 1178 693 1187T657 1211T633 1246T624 1289Q624 1312 633 1333T657 1369T692 1394T736 1403Q759 1403 779 1394T815
|
391 |
+
1370T840 1333T849 1289Z" />
|
392 |
+
<glyph unicode="÷" glyph-name="divide" horiz-adv-x="1160" d="M100 739H1058V604H100V739ZM454 1026Q454 1052 463 1075T489 1115T528 1142T578 1152Q604 1152 626 1142T666 1115T693 1075T703 1026Q703 999 693 977T666 937T627 911T578 901Q551 901 529
|
393 |
+
910T490 937T464 976T454 1026ZM454 314Q454 340 463 363T489 403T528 430T578 440Q604 440 626 430T666 403T693 363T703 314Q703 287 693 265T666 225T627 199T578 189Q551 189 529 198T490 225T464 264T454 314Z" />
|
394 |
+
<glyph unicode="ø" glyph-name="oslash" horiz-adv-x="1112" d="M912 884Q973 816 1006 721T1039 507Q1039 387 1006 291T910 127T758 23T557 -14Q481 -14 416 3T296 52L241 -22Q219 -51 190 -63T131 -76H64L209 120Q143 189 108 286T73 507Q73 626 107 722T204
|
395 |
+
887T356 992T557 1029Q636 1029 703 1010T827 956L895 1047Q915 1074 931 1085T979 1097H1069L912 884ZM246 506Q246 346 305 249L741 839Q668 895 557 895Q481 895 423 868T326 791T266 669T246 506ZM557 120Q632 120 689 146T786 223T846 344T866 506Q866 657
|
396 |
+
814 753L381 168Q451 120 557 120Z" />
|
397 |
+
<glyph unicode="ù" glyph-name="ugrave" horiz-adv-x="1112" d="M300 1013V367Q300 252 353 189T513 126Q591 126 660 163T787 266V1013H965V0H859Q821 0 811 37L797 146Q731 73 649 29T461 -16Q378 -16 315 11T208 89T144 210T122 367V1013H300ZM452 1449Q485
|
398 |
+
1449 501 1439T531 1405L680 1163H578Q557 1163 544 1169T517 1191L283 1449H452Z" />
|
399 |
+
<glyph unicode="ú" glyph-name="uacute" horiz-adv-x="1112" d="M300 1013V367Q300 252 353 189T513 126Q591 126 660 163T787 266V1013H965V0H859Q821 0 811 37L797 146Q731 73 649 29T461 -16Q378 -16 315 11T208 89T144 210T122 367V1013H300ZM842 1449L609
|
400 |
+
1191Q595 1176 582 1170T547 1163H441L589 1405Q603 1428 619 1438T668 1449H842Z" />
|
401 |
+
<glyph unicode="û" glyph-name="ucircumflex" horiz-adv-x="1112" d="M300 1013V367Q300 252 353 189T513 126Q591 126 660 163T787 266V1013H965V0H859Q821 0 811 37L797 146Q731 73 649 29T461 -16Q378 -16 315 11T208 89T144 210T122 367V1013H300ZM857
|
402 |
+
1169H738Q717 1169 698 1183L570 1309L553 1326L537 1309L408 1183Q402 1178 391 1174T368 1169H245L468 1433H634L857 1169Z" />
|
403 |
+
<glyph unicode="ü" glyph-name="udieresis" horiz-adv-x="1112" d="M300 1013V367Q300 252 353 189T513 126Q591 126 660 163T787 266V1013H965V0H859Q821 0 811 37L797 146Q731 73 649 29T461 -16Q378 -16 315 11T208 89T144 210T122 367V1013H300ZM484
|
404 |
+
1289Q484 1266 475 1246T450 1211T414 1187T370 1178Q348 1178 328 1187T293 1211T268 1246T259 1289Q259 1312 268 1333T292 1369T328 1394T370 1403Q393 1403 413 1394T450 1370T475 1333T484 1289ZM843 1289Q843 1266 834 1246T810 1211T774 1187T730 1178Q707
|
405 |
+
1178 687 1187T651 1211T627 1246T618 1289Q618 1312 627 1333T651 1369T686 1394T730 1403Q753 1403 773 1394T809 1370T834 1333T843 1289Z" />
|
406 |
+
<glyph unicode="ý" glyph-name="yacute" horiz-adv-x="1024" d="M443 -299Q434 -319 421 -331T379 -343H247L432 59L14 1013H168Q191 1013 204 1002T223 976L494 338Q503 316 509 294T521 249Q528 272 535 294T551 339L814 976Q820 992 834 1002T866 1013H1008L443
|
407 |
+
-299ZM825 1449L592 1191Q578 1176 565 1170T530 1163H424L572 1405Q586 1428 602 1438T651 1449H825Z" />
|
408 |
+
<glyph unicode="þ" glyph-name="thorn" horiz-adv-x="1104" d="M146 -343V1473H324V866Q387 940 469 984T656 1029Q743 1029 814 996T935 898T1012 736T1039 513Q1039 401 1009 305T923 138T786 27T602 -14Q507 -14 441 20T324 118V-343H146ZM597 887Q510
|
409 |
+
887 445 847T324 734V244Q373 178 431 151T562 124Q703 124 779 225T855 513Q855 612 838 683T787 799T706 866T597 887Z" />
|
410 |
+
<glyph unicode="ÿ" glyph-name="ydieresis" horiz-adv-x="1024" d="M443 -299Q434 -319 421 -331T379 -343H247L432 59L14 1013H168Q191 1013 204 1002T223 976L494 338Q503 316 509 294T521 249Q528 272 535 294T551 339L814 976Q820 992 834 1002T866 1013H1008L443
|
411 |
+
-299ZM467 1289Q467 1266 458 1246T433 1211T397 1187T353 1178Q331 1178 311 1187T276 1211T251 1246T242 1289Q242 1312 251 1333T275 1369T311 1394T353 1403Q376 1403 396 1394T433 1370T458 1333T467 1289ZM826 1289Q826 1266 817 1246T793 1211T757 1187T713
|
412 |
+
1178Q690 1178 670 1187T634 1211T610 1246T601 1289Q601 1312 610 1333T634 1369T669 1394T713 1403Q736 1403 756 1394T792 1370T817 1333T826 1289Z" />
|
413 |
+
<glyph unicode="–" glyph-name="endash" horiz-adv-x="1112" d="M156 655H956V525H156V655Z" />
|
414 |
+
<glyph unicode="—" glyph-name="emdash" horiz-adv-x="1642" d="M156 655H1486V525H156V655Z" />
|
415 |
+
<glyph unicode="‘" glyph-name="quoteleft" horiz-adv-x="424" d="M114 1012Q85 1060 72 1108T58 1205Q58 1295 102 1377T227 1529L282 1495Q290 1490 292 1484T295 1472Q295 1458 285 1448Q269 1428 254 1406T227 1360T208 1308T201 1251Q201 1219 210
|
416 |
+
1185T243 1113Q250 1102 250 1090Q250 1066 223 1056L114 1012Z" />
|
417 |
+
<glyph unicode="’" glyph-name="quoteright" horiz-adv-x="424" d="M271 1508Q300 1460 313 1412T326 1316Q326 1225 282 1143T158 991L103 1025Q95 1030 93 1036T90 1048Q90 1062 100 1072Q116 1091 131 1113T158 1160T177 1212T184 1269Q184 1301 175
|
418 |
+
1335T142 1407Q135 1418 135 1429Q135 1453 162 1464L271 1508Z" />
|
419 |
+
<glyph unicode="‚" glyph-name="quotesinglbase" horiz-adv-x="424" d="M271 241Q300 193 313 145T326 49Q326 -42 282 -124T158 -276L103 -242Q95 -237 93 -231T90 -219Q90 -205 100 -195Q116 -176 131 -154T158 -107T177 -55T184 2Q184 34 175 68T142
|
420 |
+
140Q135 151 135 162Q135 186 162 197L271 241Z" />
|
421 |
+
<glyph unicode="“" glyph-name="quotedblleft" horiz-adv-x="728" d="M114 1012Q85 1060 72 1108T58 1205Q58 1295 102 1377T227 1529L282 1495Q290 1490 292 1484T295 1472Q295 1458 285 1448Q269 1428 254 1406T227 1360T208 1308T201 1251Q201 1219
|
422 |
+
210 1185T243 1113Q250 1102 250 1090Q250 1066 223 1056L114 1012ZM418 1012Q389 1060 376 1108T362 1205Q362 1295 406 1377T531 1529L586 1495Q594 1490 596 1484T599 1472Q599 1458 589 1448Q573 1428 558 1406T531 1360T512 1308T505 1251Q505 1219 514 1185T547
|
423 |
+
1113Q554 1102 554 1090Q554 1066 527 1056L418 1012Z" />
|
424 |
+
<glyph unicode="”" glyph-name="quotedblright" horiz-adv-x="728" d="M271 1508Q300 1460 313 1412T326 1316Q326 1225 282 1143T158 991L103 1025Q95 1030 93 1036T90 1048Q90 1062 100 1072Q116 1091 131 1113T158 1160T177 1212T184 1269Q184 1301
|
425 |
+
175 1335T142 1407Q135 1418 135 1429Q135 1453 162 1464L271 1508ZM575 1508Q604 1460 617 1412T630 1316Q630 1225 586 1143T462 991L407 1025Q399 1030 397 1036T394 1048Q394 1062 404 1072Q420 1091 435 1113T462 1160T481 1212T488 1269Q488 1301 479 1335T446
|
426 |
+
1407Q439 1418 439 1429Q439 1453 466 1464L575 1508Z" />
|
427 |
+
<glyph unicode="„" glyph-name="quotedblbase" horiz-adv-x="728" d="M271 241Q300 193 313 145T326 49Q326 -42 282 -124T158 -276L103 -242Q95 -237 93 -231T90 -219Q90 -205 100 -195Q116 -176 131 -154T158 -107T177 -55T184 2Q184 34 175 68T142 140Q135
|
428 |
+
151 135 162Q135 186 162 197L271 241ZM575 241Q604 193 617 145T630 49Q630 -42 586 -124T462 -276L407 -242Q399 -237 397 -231T394 -219Q394 -205 404 -195Q420 -176 435 -154T462 -107T481 -55T488 2Q488 34 479 68T446 140Q439 151 439 162Q439 186 466 197L575
|
429 |
+
241Z" />
|
430 |
+
<glyph unicode="•" glyph-name="bullet" horiz-adv-x="1160" d="M208 595Q208 672 237 740T317 858T434 938T578 968Q655 968 723 939T841 859T921 740T951 595Q951 518 922 451T842 333T723 254T578 224Q502 224 435 253T317 333T238 450T208 595Z" />
|
431 |
+
<glyph unicode="‹" glyph-name="guilsinglleft" horiz-adv-x="632" d="M138 518V541L387 930L445 902Q459 895 466 884T473 860Q473 843 463 827L304 566Q290 542 276 529Q291 515 304 493L463 232Q468 224 470 215T473 198Q473 170 445 157L387 129L138 518Z" />
|
432 |
+
<glyph unicode="›" glyph-name="guilsinglright" horiz-adv-x="632" d="M485 541V518L236 129L178 157Q150 170 150 198Q150 215 160 232L319 493Q332 517 346 529Q334 540 319 566L160 827Q150 844 150 861Q150 889 178 902L236 930L485 541Z" />
|
433 |
+
</font>
|
434 |
+
</defs>
|
435 |
+
</svg>
|
assets/fonts/lato/lato-regular.ttf
ADDED
Binary file
|
assets/fonts/lato/lato-regular.woff
ADDED
Binary file
|
assets/fonts/lato/lato-regular.woff2
ADDED
Binary file
|
assets/fonts/oswald/oswald-regular.eot
ADDED
Binary file
|
assets/fonts/oswald/oswald-regular.svg
ADDED
@@ -0,0 +1,309 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 xmlns="http://www.w3.org/2000/svg">
|
4 |
+
<defs >
|
5 |
+
<font id="Oswald" horiz-adv-x="458" ><font-face
|
6 |
+
font-family="Oswald"
|
7 |
+
units-per-em="1000"
|
8 |
+
panose-1="0 0 5 0 0 0 0 0 0 0"
|
9 |
+
ascent="1193"
|
10 |
+
descent="-289"
|
11 |
+
alphabetic="0" />
|
12 |
+
<glyph unicode=" " glyph-name="space" horiz-adv-x="229" />
|
13 |
+
<glyph unicode="!" glyph-name="exclam" horiz-adv-x="208" d="M50 810H158L122 173H84L50 810ZM50 110H158V0H50V110Z" />
|
14 |
+
<glyph unicode=""" glyph-name="quotedbl" horiz-adv-x="380" d="M85 810H182L143 562H85V810ZM234 810H331L292 562H234V810Z" />
|
15 |
+
<glyph unicode="#" glyph-name="numbersign" horiz-adv-x="486" d="M75 290H32V370H87L101 467H34V548H112L150 810H257L219 548H309L347 810H453L415 548H456V467H404L389 370H453V290H378L336 0H229L271 290H182L141 0H34L75 290ZM283 370L297 467H208L193 370H283Z" />
|
16 |
+
<glyph unicode="$" glyph-name="dollar" horiz-adv-x="491" d="M247 -8Q148 -6 96 56T39 227L139 254Q144 176 169 128T254 80Q298 80 320 104T343 175Q343 224 322 256T255 331L119 451Q78 488 60 529T41 630Q41 716 89 765T223 817V884H258V817Q341 811 383
|
17 |
+
760T435 608L339 582Q334 651 313 690T239 730Q142 730 142 641Q142 605 154 582T195 531L332 411Q385 362 416 308T448 184Q448 102 403 52T281 -7V-77H247V-8Z" />
|
18 |
+
<glyph unicode="%" glyph-name="percent" horiz-adv-x="891" d="M112 380T74 429T36 568V631Q36 723 73 769T193 816Q276 816 313 771T350 636V565Q350 475 313 428T193 380Q112 380 74 429ZM512 811H604L382 0H289L512 811ZM228 461T240 489T253 565V636Q253
|
19 |
+
684 241 709T193 735Q157 735 146 709T134 635V564Q134 516 146 489T193 461Q228 461 240 489ZM542 -5T542 183V246Q542 337 578 384T698 431Q781 431 818 386T855 250V180Q855 89 818 42T698 -5Q542 -5 542 183ZM733 76T745 103T758 179V251Q758 299 746 324T698
|
20 |
+
350Q662 350 651 324T639 250V179Q639 131 651 104T698 76Q733 76 745 103Z" />
|
21 |
+
<glyph unicode="&" glyph-name="ampersand" horiz-adv-x="606" d="M151 -9T105 41T58 173Q58 244 89 300T176 407L154 448Q122 506 105 548T88 638Q88 719 134 768T261 817Q336 817 384 777T433 667Q433 596 390 531T281 402L403 210Q432 266 443 372H549Q549
|
22 |
+
316 526 252T471 143Q485 125 506 114T550 102V-8H536Q509 -8 487 4T450 28T407 70Q378 34 334 13T233 -9Q151 -9 105 41ZM278 500T302 557T326 667Q326 696 309 712T261 729Q227 729 211 703T195 638Q195 596 208 554T244 460Q278 500 302 557ZM294 80T342 140L218
|
23 |
+
331Q194 300 180 258T165 173Q165 133 181 107T233 80Q294 80 342 140Z" />
|
24 |
+
<glyph unicode="'" glyph-name="quotesingle" horiz-adv-x="366" d="M85 810H182L143 562H85V810Z" />
|
25 |
+
<glyph unicode="(" glyph-name="parenleft" horiz-adv-x="298" d="M179 -193T137 -123T84 49T73 311Q73 472 83 574T136 746T268 817V745Q226 744 206 687T181 548T176 336V265Q176 144 181 64T207 -69T268 -123V-194Q179 -193 137 -123Z" />
|
26 |
+
<glyph unicode=")" glyph-name="parenright" horiz-adv-x="260" d="M29 -122Q71 -121 91 -64T117 75T122 288V358Q122 479 117 559T91 692T29 746V817Q119 817 161 747T214 575T225 313Q225 152 215 50T162 -122T29 -194V-122Z" />
|
27 |
+
<glyph unicode="*" glyph-name="asterisk" horiz-adv-x="398" d="M84 507L163 618L45 663L71 731L184 671L172 809H253L240 671L354 731L379 663L261 617L341 507L276 469L212 594L147 469L84 507Z" />
|
28 |
+
<glyph unicode="+" glyph-name="plus" horiz-adv-x="415" d="M165 375H25V456H165V619H245V456H390V375H245V212H165V375Z" />
|
29 |
+
<glyph unicode="," glyph-name="comma" horiz-adv-x="187" d="M40 -85Q67 -76 82 -54T98 0H41V115H151V2Q151 -51 128 -82T57 -131L40 -85Z" />
|
30 |
+
<glyph unicode="-" glyph-name="hyphen" horiz-adv-x="321" d="M49 342H272V261H49V342Z" />
|
31 |
+
<glyph unicode="." glyph-name="period" horiz-adv-x="188" d="M49 119H156V0H49V119Z" />
|
32 |
+
<glyph unicode="/" glyph-name="slash" horiz-adv-x="369" d="M247 810H340L121 0H29L247 810Z" />
|
33 |
+
<glyph unicode="0" glyph-name="zero" horiz-adv-x="491" d="M146 -9T96 56T45 230V579Q45 690 94 753T246 817Q347 817 396 754T446 579V230Q446 120 396 56T246 -9Q146 -9 96 56ZM338 79T338 229V580Q338 649 319 689T246 730Q193 730 173 690T153 580V229Q153
|
34 |
+
79 246 79Q338 79 338 229Z" />
|
35 |
+
<glyph unicode="1" glyph-name="one" horiz-adv-x="467" d="M222 670Q220 667 162 656T81 641V722Q203 751 248 810H329V0H222V670Z" />
|
36 |
+
<glyph unicode="2" glyph-name="two" horiz-adv-x="478" d="M41 76L247 397Q262 421 267 427Q302 483 318 520T334 609Q334 667 315 698T253 729Q157 729 157 580V553H50V581Q50 695 97 756T248 817Q344 817 393 763T442 608Q442 559 431 521T403 454T353 374L167
|
37 |
+
90H423V0H41V76Z" />
|
38 |
+
<glyph unicode="3" glyph-name="three" horiz-adv-x="467" d="M141 -9T91 45T40 199V226H146V208Q148 146 167 113T238 80Q292 80 311 117T331 229Q331 297 306 335T225 378Q221 379 210 379V486H224Q281 488 306 516T331 609Q331 669 311 699T239 730Q187 730
|
39 |
+
168 697T146 600V583H40V610Q40 709 90 763T239 817Q337 817 387 763T438 609Q438 538 407 493T322 432Q377 415 407 363T438 229Q438 116 390 54T238 -9Q141 -9 91 45Z" />
|
40 |
+
<glyph unicode="4" glyph-name="four" horiz-adv-x="491" d="M273 213H40V332L248 810H381V314H471V213H381V0H273V213ZM273 314V674L148 314H273Z" />
|
41 |
+
<glyph unicode="5" glyph-name="five" horiz-adv-x="476" d="M138 -8T93 51T47 227H154Q154 159 172 118T245 77Q286 77 306 101T331 164T337 270Q337 331 331 367T305 423T246 443Q215 443 192 424T156 376H65V810H414V703H162L155 479Q198 524 272 524Q365 524
|
42 |
+
404 461T444 284Q444 146 399 69T243 -8Q138 -8 93 51Z" />
|
43 |
+
<glyph unicode="6" glyph-name="six" horiz-adv-x="489" d="M153 -9T104 64T54 257V530Q54 661 100 739T253 817Q347 817 398 766T451 620L452 608H344Q344 670 324 699T253 729Q161 729 161 556V433Q177 459 207 474T279 489Q374 489 414 429T454 255Q454 136
|
44 |
+
405 64T253 -9Q153 -9 104 64ZM303 80T324 121T346 229Q346 290 341 326T316 385T253 408Q222 408 199 392T161 353V232Q161 163 182 122T253 80Q303 80 324 121Z" />
|
45 |
+
<glyph unicode="7" glyph-name="seven" horiz-adv-x="385" d="M244 726H27V810H351V758L201 0H98L244 726Z" />
|
46 |
+
<glyph unicode="8" glyph-name="eight" horiz-adv-x="478" d="M134 -9T87 52T40 228Q40 305 65 351T140 427Q50 487 50 608Q50 707 97 762T240 817Q335 817 381 762T428 608Q428 543 405 500T338 427Q387 396 413 350T439 228Q439 114 392 53T240 -9Q134 -9 87
|
47 |
+
52ZM323 477T323 614Q323 668 304 701T240 734Q196 734 176 701T155 614Q155 554 174 516T240 476Q323 477 323 614ZM294 76T315 115T336 226Q336 291 314 332T240 374Q188 373 165 332T142 226Q142 155 163 116T240 76Q294 76 315 115Z" />
|
48 |
+
<glyph unicode="9" glyph-name="nine" horiz-adv-x="489" d="M150 -9T99 43T46 192V201H153Q153 139 173 110T246 80Q336 80 336 253V376Q320 350 291 335T218 320Q123 320 84 380T44 554Q44 673 93 745T245 817Q345 817 394 744T444 552V280Q444 149 398 70T245
|
49 |
+
-9Q150 -9 99 43ZM304 401T336 457V577Q336 729 245 729Q195 729 174 688T152 580Q152 519 157 483T182 424T245 401Q304 401 336 457Z" />
|
50 |
+
<glyph unicode=":" glyph-name="colon" horiz-adv-x="197" d="M60 529H168V415H60V529ZM60 210H168V96H60V210Z" />
|
51 |
+
<glyph unicode=";" glyph-name="semicolon" horiz-adv-x="215" d="M59 565H167V446H59V565ZM58 1Q116 5 116 68H59V182H170V70Q170 15 148 -14T76 -46L58 1Z" />
|
52 |
+
<glyph unicode="<" glyph-name="less" horiz-adv-x="373" d="M29 238V345L315 549V441L110 292L315 143V36L29 238Z" />
|
53 |
+
<glyph unicode="=" glyph-name="equal" horiz-adv-x="415" d="M54 538H361V456H54V538ZM54 360H361V279H54V360Z" />
|
54 |
+
<glyph unicode=">" glyph-name="greater" horiz-adv-x="373" d="M58 143L264 293L58 441V549L345 346V239L58 36V143Z" />
|
55 |
+
<glyph unicode="?" glyph-name="question" horiz-adv-x="487" d="M162 327Q250 403 295 469T341 615Q341 664 316 694T245 724Q205 724 182 702T158 642Q158 624 165 592L65 573Q54 604 54 636Q54 717 104 767T245 817Q340 817 393 763T446 612Q446 548 422 495T358
|
56 |
+
397T257 300V203H162V327ZM157 110H264V0H157V110Z" />
|
57 |
+
<glyph unicode="@" glyph-name="at" horiz-adv-x="904" d="M350 -134T258 -88T112 51T59 282Q59 457 116 575T274 751T511 810Q626 810 705 757T822 617T861 426Q861 337 832 262T747 142T621 98Q578 98 551 123T522 190Q513 154 490 129T427 100L413 99Q348 99
|
58 |
+
313 151T277 279Q277 355 307 431T392 555T514 604Q529 604 547 597T579 579L589 596H667L610 229Q607 210 607 192Q607 175 612 167T633 158Q675 158 709 193T763 287T783 417Q783 503 753 573T661 684T504 726Q400 726 322 672T200 519T156 286Q156 119 243 34T479
|
59 |
+
-51Q567 -51 661 -24L680 -102Q569 -134 470 -134Q350 -134 258 -88ZM465 181T490 207T525 287L560 520Q545 525 532 525Q492 525 457 492T399 401T377 278Q377 236 392 209T437 181Q465 181 490 207Z" />
|
60 |
+
<glyph unicode="A" glyph-name="A" horiz-adv-x="492" d="M191 810H300L473 0H366L329 204H164L125 0H19L191 810ZM314 285L246 650L179 285H314Z" />
|
61 |
+
<glyph unicode="B" glyph-name="B" horiz-adv-x="524" d="M63 810H249Q359 810 412 761T465 607Q465 452 349 436Q421 419 454 369T487 231Q487 122 436 61T279 0H63V810ZM243 472Q313 472 340 502T367 607Q367 661 351 686T301 719T203 726H176V472H243ZM252
|
62 |
+
81Q302 81 329 96T368 144T379 231Q379 309 347 347T243 386H176V81H252Z" />
|
63 |
+
<glyph unicode="C" glyph-name="C" horiz-adv-x="515" d="M146 -9T97 62T48 260V546Q48 679 96 748T266 817Q375 817 422 758T470 584V520H363V577Q363 633 358 663T333 711T267 729Q221 729 199 710T169 656T162 563V242Q162 180 172 145T204 95T267 80Q310 80
|
64 |
+
331 99T357 151T363 241V301H470V241Q470 120 425 56T266 -9Q146 -9 97 62Z" />
|
65 |
+
<glyph unicode="D" glyph-name="D" horiz-adv-x="527" d="M63 810H239Q370 810 424 750T479 563V265Q479 131 426 66T248 0H63V810ZM240 81Q299 81 325 104T358 166T365 286V549Q365 618 357 654T321 708T237 726H176V81H240Z" />
|
66 |
+
<glyph unicode="E" glyph-name="E" horiz-adv-x="407" d="M63 810H377V726H176V458H339V378H176V81H379V0H63V810Z" />
|
67 |
+
<glyph unicode="F" glyph-name="F" horiz-adv-x="391" d="M63 810H376V729H176V459H331V379H176V0H63V810Z" />
|
68 |
+
<glyph unicode="G" glyph-name="G" horiz-adv-x="535" d="M146 -10T97 59T48 266V537Q48 631 67 691T134 784T265 817Q377 817 426 760T476 581V551H370V576Q370 634 363 665T334 713T267 729Q220 729 197 708T168 650T161 554V254Q161 161 183 121T270 80Q333
|
69 |
+
80 356 124T380 265V321H277V401H482V0H411L400 93Q362 -10 256 -10Q146 -10 97 59Z" />
|
70 |
+
<glyph unicode="H" glyph-name="H" horiz-adv-x="561" d="M63 810H176V460H384V810H497V0H384V379H176V0H63V810Z" />
|
71 |
+
<glyph unicode="I" glyph-name="I" horiz-adv-x="248" d="M69 810H180V0H69V810Z" />
|
72 |
+
<glyph unicode="J" glyph-name="J" horiz-adv-x="301" d="M7 62Q58 62 82 71T116 106T125 185V810H237V183Q237 110 222 67T169 2T61 -19H7V62Z" />
|
73 |
+
<glyph unicode="K" glyph-name="K" horiz-adv-x="495" d="M63 810H176V428L362 810H467L307 453L493 0H383L228 380L176 286V0H63V810Z" />
|
74 |
+
<glyph unicode="L" glyph-name="L" horiz-adv-x="397" d="M63 810H176V81H383V0H63V810Z" />
|
75 |
+
<glyph unicode="M" glyph-name="M" horiz-adv-x="660" d="M76 810H187L330 153L474 810H584L599 0H508L499 588L362 0H298L162 588L153 0H61L76 810Z" />
|
76 |
+
<glyph unicode="N" glyph-name="N" horiz-adv-x="528" d="M63 810H140L370 272V810H464V0H392L159 553V0H63V810Z" />
|
77 |
+
<glyph unicode="O" glyph-name="O" horiz-adv-x="539" d="M151 -9T100 58T48 254V561Q48 687 100 752T270 817Q388 817 439 752T491 561V253Q491 127 439 59T270 -9Q151 -9 100 58ZM333 80T355 117T377 229V584Q377 658 355 693T270 729Q206 729 184 694T162 584V229Q162
|
78 |
+
154 184 117T270 80Q333 80 355 117Z" />
|
79 |
+
<glyph unicode="P" glyph-name="P" horiz-adv-x="480" d="M63 810H264Q369 810 416 753T464 586Q464 487 413 432T265 377H176V0H63V810ZM228 458Q278 458 305 469T345 507T357 585Q357 647 348 676T313 717T229 729H176V458H228Z" />
|
80 |
+
<glyph unicode="Q" glyph-name="Q" horiz-adv-x="541" d="M374 -134T289 -8L270 -9Q151 -9 100 58T48 254V561Q48 687 100 752T270 817Q388 817 440 752T492 561V253Q492 60 373 10Q423 -55 453 -75L435 -164Q374 -134 289 -8ZM334 80T356 117T378 229V584Q378
|
81 |
+
658 356 693T270 729Q206 729 184 694T162 584V229Q162 154 184 117T270 80Q334 80 356 117Z" />
|
82 |
+
<glyph unicode="R" glyph-name="R" horiz-adv-x="519" d="M63 810H226Q349 810 406 760T464 595Q464 439 364 406L479 0H370L264 380H176V0H63V810ZM219 461Q292 461 323 490T355 595Q355 645 344 673T305 715T226 729H176V461H219Z" />
|
83 |
+
<glyph unicode="S" glyph-name="S" horiz-adv-x="473" d="M152 -9T99 54T39 227L139 254Q144 176 169 128T254 80Q298 80 320 104T343 175Q343 224 322 256T255 331L119 451Q78 488 60 529T41 630Q41 720 93 768T236 817Q331 817 378 766T435 608L339 582Q334
|
84 |
+
651 313 690T239 730Q142 730 142 641Q142 605 154 582T195 531L332 411Q385 362 416 308T448 184Q448 95 394 43T254 -9Q152 -9 99 54Z" />
|
85 |
+
<glyph unicode="T" glyph-name="T" horiz-adv-x="400" d="M146 726H-1V810H402V726H259V0H146V726Z" />
|
86 |
+
<glyph unicode="U" glyph-name="U" horiz-adv-x="543" d="M187 -9T140 25T74 120T56 273V810H164V268Q164 176 185 128T272 80Q337 80 358 128T380 268V810H487V273Q487 181 469 120T404 25T272 -9Q187 -9 140 25Z" />
|
87 |
+
<glyph unicode="V" glyph-name="V" horiz-adv-x="505" d="M23 810H129L257 213L379 810H482L303 0H204L23 810Z" />
|
88 |
+
<glyph unicode="W" glyph-name="W" horiz-adv-x="729" d="M36 810H130L217 228L326 807H406L516 225L601 810H693L563 0H481L368 600L254 0H168L36 810Z" />
|
89 |
+
<glyph unicode="X" glyph-name="X" horiz-adv-x="482" d="M182 424L16 810H121L244 524L356 810H461L291 415L469 0H364L232 305L118 0H13L182 424Z" />
|
90 |
+
<glyph unicode="Y" glyph-name="Y" horiz-adv-x="481" d="M187 286L12 810H117L241 419L363 810H469L295 286V0H187V286Z" />
|
91 |
+
<glyph unicode="Z" glyph-name="Z" horiz-adv-x="417" d="M38 81L276 729H53V810H396V761L145 81H396V0H38V81Z" />
|
92 |
+
<glyph unicode="[" glyph-name="bracketleft" horiz-adv-x="340" d="M63 810H283V755H170V-129H283V-184H63V810Z" />
|
93 |
+
<glyph unicode="\" glyph-name="backslash" horiz-adv-x="369" d="M29 810H121L340 0H247L29 810Z" />
|
94 |
+
<glyph unicode="]" glyph-name="bracketright" horiz-adv-x="310" d="M26 -129H139V754H26V810H247V-184H26V-129Z" />
|
95 |
+
<glyph unicode="^" glyph-name="asciicircum" horiz-adv-x="443" d="M168 810H276L410 487H308L222 730L135 487H34L168 810Z" />
|
96 |
+
<glyph unicode="_" glyph-name="underscore" horiz-adv-x="344" d="M0 -53H344V-134H0V-53Z" />
|
97 |
+
<glyph unicode="`" glyph-name="grave" horiz-adv-x="278" d="M57 810H164L221 612H167L57 810Z" />
|
98 |
+
<glyph unicode="a" glyph-name="a" horiz-adv-x="426" d="M125 -8T99 11T57 61T42 126Q42 194 71 236T144 303T270 361V402Q270 459 259 482T212 506Q151 506 151 424V395L45 399L46 420Q51 507 94 546T219 586Q302 586 339 541T377 403V139Q377 74 387 0H289Q278
|
99 |
+
57 275 85Q263 46 234 19T158 -8Q125 -8 99 11ZM221 84T241 100T270 132V296Q226 270 204 256T166 217T149 159Q149 123 162 104T200 84Q221 84 241 100Z" />
|
100 |
+
<glyph unicode="b" glyph-name="b" horiz-adv-x="447" d="M209 -8T163 42V0H56V810H163V532Q210 586 272 586Q351 586 377 519T404 369V229Q404 -8 261 -8Q209 -8 163 42ZM276 76T286 113T297 229V369Q297 433 285 467T235 502Q200 502 163 473V102Q196 76 239
|
101 |
+
76Q276 76 286 113Z" />
|
102 |
+
<glyph unicode="c" glyph-name="c" horiz-adv-x="411" d="M144 -8T107 19T57 96T43 222V355Q43 433 56 483T107 559T212 586Q274 586 308 566T356 507T370 404V370H273V405Q273 462 261 484T213 507Q186 507 173 495T155 456T150 377V195Q150 145 156 119T175
|
103 |
+
82T214 71Q251 71 262 95T273 171V218H370V178Q370 84 336 38T212 -8Q144 -8 107 19Z" />
|
104 |
+
<glyph unicode="d" glyph-name="d" horiz-adv-x="442" d="M112 -8T78 47T43 227V339Q43 454 73 520T185 586Q236 586 281 541V810H388V0H281V37Q239 -8 186 -8Q112 -8 78 47ZM247 76T281 98V477Q244 502 213 502Q150 502 150 381V218Q150 148 163 112T215 76Q247
|
105 |
+
76 281 98Z" />
|
106 |
+
<glyph unicode="e" glyph-name="e" horiz-adv-x="421" d="M147 -8T110 17T58 93T43 223V355Q43 475 80 530T214 586Q284 586 319 557T366 476T378 334V287H150V210Q150 158 152 132T168 89T213 71Q248 71 260 94T273 166V201H377V179Q377 88 338 40T214 -8Q147
|
107 |
+
-8 110 17ZM273 345V397Q273 456 262 481T213 507Q187 507 174 495T155 456T150 376V345H273Z" />
|
108 |
+
<glyph unicode="f" glyph-name="f" horiz-adv-x="287" d="M88 499H19V578H88V608Q88 668 97 704T133 761T213 781Q236 781 283 776V696Q275 697 263 699T243 701Q214 701 205 683T195 626V578H283V499H195V0H88V499Z" />
|
109 |
+
<glyph unicode="g" glyph-name="g" horiz-adv-x="435" d="M131 -179T76 -162T20 -89Q20 -44 43 -11T103 41Q76 49 62 66T47 103Q47 133 62 155T111 208Q77 234 61 273T44 380Q44 481 85 533T207 586Q253 586 282 570T326 522Q333 533 355 551T404 582L420 589L447
|
110 |
+
520Q427 516 392 503T349 483Q356 465 361 433T367 377Q367 282 330 230T207 177Q180 177 152 184Q150 181 142 167T133 140Q133 129 144 123T181 114Q196 112 226 110T271 106Q405 94 405 -35Q405 -112 364 -145T234 -179Q131 -179 76 -162ZM250 252T263 282T276
|
111 |
+
380Q276 449 263 480T208 512Q166 512 152 481T137 380Q137 318 151 285T207 252Q250 252 263 282ZM279 -95T301 -82T323 -38Q323 -10 306 3T244 21L153 29Q138 17 124 -3T110 -46Q110 -64 119 -74T154 -90T232 -95Q279 -95 301 -82Z" />
|
112 |
+
<glyph unicode="h" glyph-name="h" horiz-adv-x="445" d="M57 810H164V518Q236 586 309 586Q356 586 375 552T395 468V0H288V437Q288 470 278 486T242 502Q207 502 164 464V0H57V810Z" />
|
113 |
+
<glyph unicode="i" glyph-name="i" horiz-adv-x="229" d="M61 776H168V664H61V776ZM61 578H168V0H61V578Z" />
|
114 |
+
<glyph unicode="j" glyph-name="j" horiz-adv-x="230" d="M69 776H177V664H69V776ZM-3 -146T-19 -139V-62Q2 -65 9 -65Q42 -65 55 -47T69 5V578H176V-6Q176 -74 139 -110T36 -146Q-3 -146 -19 -139Z" />
|
115 |
+
<glyph unicode="k" glyph-name="k" horiz-adv-x="429" d="M56 811H163V328L319 578H431L295 352L427 0H320L212 296L163 222V1H56V811Z" />
|
116 |
+
<glyph unicode="l" glyph-name="l" horiz-adv-x="229" d="M64 810H171V0H64V810Z" />
|
117 |
+
<glyph unicode="m" glyph-name="m" horiz-adv-x="680" d="M54 578H153V523Q182 555 216 571T289 588Q363 588 383 515Q443 588 527 588Q572 588 600 555T629 454V0H531V447Q531 485 519 501T484 518Q461 518 437 506T391 471V454V0H293V447Q293 485 281 501T246
|
118 |
+
518Q223 518 199 506T153 471V0H54V578Z" />
|
119 |
+
<glyph unicode="n" glyph-name="n" horiz-adv-x="439" d="M54 578H161V521Q230 586 302 586Q349 586 369 552T389 468V0H282V437Q282 470 272 486T236 502Q204 502 161 466V0H54V578Z" />
|
120 |
+
<glyph unicode="o" glyph-name="o" horiz-adv-x="424" d="M120 -8T82 46T43 205V373Q43 477 81 531T212 586Q303 586 341 532T380 373V205Q380 101 342 47T212 -8Q120 -8 82 46ZM241 71T254 88T270 130T273 198V379Q273 422 270 447T254 490T212 507Q183 507 170
|
121 |
+
490T153 448T150 379V198Q150 155 153 130T169 88T212 71Q241 71 254 88Z" />
|
122 |
+
<glyph unicode="p" glyph-name="p" horiz-adv-x="446" d="M54 578H161V532Q208 586 271 586Q350 586 376 519T403 369V229Q403 123 371 58T259 -8Q208 -8 161 43V-190H54V578ZM275 76T285 113T296 229V369Q296 433 284 467T234 502Q197 502 161 472V102Q196 76
|
123 |
+
238 76Q275 76 285 113Z" />
|
124 |
+
<glyph unicode="q" glyph-name="q" horiz-adv-x="443" d="M282 37Q240 -8 187 -8Q113 -8 79 47T44 227V339Q44 454 74 520T186 586Q237 586 282 541V578H389V-190H282V37ZM250 76T282 98V477Q245 502 214 502Q151 502 151 381V218Q151 148 164 112T216 76Q250 76 282 98Z" />
|
125 |
+
<glyph unicode="r" glyph-name="r" horiz-adv-x="321" d="M57 578H164V496Q194 545 225 565T292 585Q301 585 309 584V466Q277 478 250 478Q224 478 204 466T164 422V0H57V578Z" />
|
126 |
+
<glyph unicode="s" glyph-name="s" horiz-adv-x="374" d="M118 -8T75 36T25 154L114 181Q121 125 139 98T192 71Q220 71 238 88T256 133Q256 178 209 218L110 303Q76 332 58 363T39 441Q39 510 79 548T188 586Q254 586 291 544T335 434L263 407Q256 456 240 481T192
|
127 |
+
507Q166 507 150 490T135 448Q135 415 164 390L266 296Q304 262 326 226T348 140Q348 68 305 30T188 -8Q118 -8 75 36Z" />
|
128 |
+
<glyph unicode="t" glyph-name="t" horiz-adv-x="308" d="M142 -8T113 26T83 130V507H22V578H83V747H190V578H283V507H190V137Q190 102 201 88T243 74Q263 74 282 77V-2Q242 -8 208 -8Q142 -8 113 26Z" />
|
129 |
+
<glyph unicode="u" glyph-name="u" horiz-adv-x="440" d="M90 -8T70 26T50 110V578H157V142Q157 109 167 93T203 76Q235 76 278 112V578H385V0H278V57Q209 -8 137 -8Q90 -8 70 26Z" />
|
130 |
+
<glyph unicode="v" glyph-name="v" horiz-adv-x="385" d="M15 578H123L194 113L266 578H370L260 0H129L15 578Z" />
|
131 |
+
<glyph unicode="w" glyph-name="w" horiz-adv-x="588" d="M28 578H116L176 152L253 578H335L412 154L472 578H560L464 0H374L295 408L217 0H121L28 578Z" />
|
132 |
+
<glyph unicode="x" glyph-name="x" horiz-adv-x="389" d="M139 304L12 578H114L199 395L274 578H379L247 291L381 0H279L188 196L110 0H9L139 304Z" />
|
133 |
+
<glyph unicode="y" glyph-name="y" horiz-adv-x="392" d="M45 -63Q105 -63 127 -54T150 -20Q150 -14 146 6L133 66L128 86Q78 294 12 578H120L198 146L273 578H381L243 -32Q229 -93 184 -119T58 -145H45V-63Z" />
|
134 |
+
<glyph unicode="z" glyph-name="z" horiz-adv-x="347" d="M32 72L209 498H50V578H324V520L146 81H320V0H32V72Z" />
|
135 |
+
<glyph unicode="{" glyph-name="braceleft" horiz-adv-x="300" d="M189 -191T154 -178T108 -126T98 10V151Q98 207 94 232T77 267T40 276V350Q65 350 77 359T93 394T98 476V616Q98 713 108 751T153 803T277 817V738Q242 738 229 731T213 701T210 616V460Q210 389
|
136 |
+
193 355T144 313Q176 306 193 272T210 167V10Q210 -53 213 -75T229 -104T277 -112V-191Q189 -191 154 -178Z" />
|
137 |
+
<glyph unicode="|" glyph-name="bar" horiz-adv-x="239" d="M70 810H169V-148H69L70 810Z" />
|
138 |
+
<glyph unicode="}" glyph-name="braceright" horiz-adv-x="321" d="M44 -112Q79 -112 92 -105T108 -75T111 10V167Q111 238 128 272T178 313Q145 321 128 355T111 460V616Q111 678 108 700T92 730T44 738V817Q132 817 167 804T213 752T223 616V476Q223 419 227
|
139 |
+
394T243 359T281 350V276Q255 276 244 267T228 233T223 151V10Q223 -87 213 -125T168 -177T44 -191V-112Z" />
|
140 |
+
<glyph unicode="~" glyph-name="asciitilde" horiz-adv-x="447" d="M279 363T260 370T215 393Q193 406 177 413T146 420Q133 420 113 409T73 382L35 433Q60 459 95 482T154 506Q171 506 189 499T232 476Q256 463 272 456T302 449Q315 449 331 459T374 489L412
|
141 |
+
440Q387 411 354 387T296 363Q279 363 260 370Z" />
|
142 |
+
<glyph unicode=" " glyph-name="uni00A0" horiz-adv-x="229" />
|
143 |
+
<glyph unicode="¡" glyph-name="exclamdown" horiz-adv-x="208" d="M50 632H158V522H50V632ZM85 458H123L158 -178H50L85 458Z" />
|
144 |
+
<glyph unicode="¢" glyph-name="cent" horiz-adv-x="388" d="M178 -6Q99 3 71 59T43 222V355Q43 463 71 519T179 584V656H213V586Q274 586 308 566T356 506T370 404V370H273V405Q273 462 261 484T213 507Q186 507 173 495T155 456T150 377V195Q150 145 156
|
145 |
+
119T175 82T214 71Q251 71 262 95T273 171V218H370V178Q370 84 336 38T212 -8V-79H178V-6Z" />
|
146 |
+
<glyph unicode="£" glyph-name="sterling" horiz-adv-x="398" d="M2 54L61 80V354H2V434H61V526Q61 618 72 679T121 779T230 817Q370 817 372 644V611H292Q292 666 280 698T230 730Q193 730 181 695T167 598V434H287V354H167V81H371V0H2V54Z" />
|
147 |
+
<glyph unicode="¤" glyph-name="currency" horiz-adv-x="550" d="M38 201L118 280Q92 308 78 345T63 423Q63 463 77 500T118 566L38 645L53 660L132 581Q160 608 197 622T275 637Q316 637 353 623T418 581L497 660L512 645L433 566Q458 537 472 501T486 423Q486
|
148 |
+
382 472 345T432 280L512 201L497 186L418 265Q389 238 353 223T275 209Q234 208 198 223T132 265L53 186L38 201ZM321 252T359 275T419 337T441 423Q441 469 419 508T359 571T275 594Q229 594 192 571T132 509T110 423Q110 377 132 338T191 275T275 252Q321 252
|
149 |
+
359 275Z" />
|
150 |
+
<glyph unicode="¥" glyph-name="yen" horiz-adv-x="457" d="M185 115H96V185H185V250H96V319H174L10 810H115L238 419L360 810H467L304 319H381V250H292V185H381V115H292V0H185V115Z" />
|
151 |
+
<glyph unicode="¦" glyph-name="brokenbar" horiz-adv-x="212" d="M63 810H149V400H63V810ZM63 256H149V-153H63V256Z" />
|
152 |
+
<glyph unicode="§" glyph-name="section" horiz-adv-x="427" d="M144 -8T102 34T43 145L124 172Q155 80 214 80Q246 80 264 97T282 147Q282 187 240 218L125 293Q85 318 64 348T42 425Q42 473 65 507T127 557Q92 580 69 611T45 682Q45 745 91 781T214 817Q284
|
153 |
+
817 325 775T383 667L302 640Q287 679 267 704T213 730Q185 730 169 714T152 669Q152 652 162 638T187 613L316 529Q349 508 367 474T386 395Q386 349 367 317T313 266Q346 238 364 210T383 142Q383 70 337 31T214 -8Q144 -8 102 34ZM260 334T274 351T289 392Q290
|
154 |
+
411 281 430T253 462L197 500Q178 490 164 470T149 425Q149 409 157 394T178 370L240 325Q260 334 274 351Z" />
|
155 |
+
<glyph unicode="¨" glyph-name="dieresis" horiz-adv-x="400" d="M60 810H167V699H60V810ZM231 810H339V699H231V810Z" />
|
156 |
+
<glyph unicode="©" glyph-name="copyright" horiz-adv-x="862" d="M296 -11T206 50T72 207T29 412Q29 520 72 616T205 773T431 834Q566 834 656 774T790 617T833 412Q833 303 791 207T658 50T431 -11Q296 -11 206 50ZM551 33T630 86T748 226T787 412Q787
|
157 |
+
512 749 598T631 737T434 790Q317 790 238 737T120 598T81 412Q81 312 119 226T237 87T434 33Q551 33 630 86ZM356 124T315 152T260 232T245 364V471Q245 553 260 605T316 684T432 712Q501 712 539 692T592 630T607 523V496H502V523Q502 583 487 606T434 630Q404
|
158 |
+
630 388 618T366 576T360 494V336Q360 284 367 257T390 218T434 207Q475 207 488 232T502 311V343H607V318Q607 220 569 172T432 124Q356 124 315 152Z" />
|
159 |
+
<glyph unicode="ª" glyph-name="ordfeminine" horiz-adv-x="443" d="M134 321T106 352T77 432Q77 481 101 512T160 560T256 598L276 605V658Q276 700 267 722T233 745Q181 745 181 657H93Q95 732 132 777T234 822Q312 822 341 775T370 628V327H284V391Q268
|
160 |
+
360 240 341T178 321Q134 321 106 352ZM233 403T250 417T276 450V563Q240 544 220 531T186 499T172 454Q172 430 183 417T213 403Q233 403 250 417Z" />
|
161 |
+
<glyph unicode="«" glyph-name="guillemotleft" horiz-adv-x="455" d="M31 269V321L194 549V415L112 295L194 174V41L31 269ZM225 269V321L389 549V415L307 295L389 174V41L225 269Z" />
|
162 |
+
<glyph unicode="¬" glyph-name="logicalnot" horiz-adv-x="387" d="M305 368H40V449H360V256H305V368Z" />
|
163 |
+
<glyph unicode="­" glyph-name="uni00AD" horiz-adv-x="344" d="M58 548H288V467H58V548Z" />
|
164 |
+
<glyph unicode="®" glyph-name="registered" horiz-adv-x="888" d="M310 -13T221 47T89 202T46 405Q46 512 88 607T220 763T444 823Q578 823 667 763T799 608T842 405Q842 297 800 202T669 47T444 -13Q310 -13 221 47ZM556 37T633 89T747 224T784 405Q784
|
165 |
+
502 747 585T634 720T444 771Q331 771 254 720T140 586T103 405Q103 308 140 225T254 89T444 37Q556 37 633 89ZM292 674H448Q617 674 617 520Q617 428 532 392L628 144H531L446 373H385V144H292V674ZM418 423Q459 423 481 432T512 463T521 522Q521 567 503 589T440
|
166 |
+
612H385V423H418Z" />
|
167 |
+
<glyph unicode="¯" glyph-name="overscore" horiz-adv-x="284" d="M46 810H238V745H46V810Z" />
|
168 |
+
<glyph unicode="°" glyph-name="degree" horiz-adv-x="453" d="M148 481T103 526T58 650Q58 728 103 772T226 817Q304 817 349 773T395 650Q395 571 350 526T226 481Q148 481 103 526ZM267 553T290 579T313 650Q313 694 290 720T226 747Q185 747 162 721T139
|
169 |
+
650Q139 606 162 580T226 553Q267 553 290 579Z" />
|
170 |
+
<glyph unicode="±" glyph-name="plusminus" horiz-adv-x="368" d="M144 262H57V344H144V431H226V344H313V262H226V175H144V262ZM57 82H313V0H57V82Z" />
|
171 |
+
<glyph unicode="²" glyph-name="uni00B2" horiz-adv-x="422" d="M77 494L201 629Q247 678 264 706T281 760Q281 790 267 806T224 823Q187 823 171 799T155 727H76V741Q76 812 112 855T224 898Q289 898 326 863T363 765Q363 718 342 681T266 589L183 503H368V433H77V494Z"
|
172 |
+
/>
|
173 |
+
<glyph unicode="³" glyph-name="uni00B3" horiz-adv-x="426" d="M147 423T113 459T78 559V575H157V571Q157 498 222 498Q278 498 278 563Q278 596 265 612T221 629H195V695H218Q273 695 273 760Q273 789 259 806T218 823Q157 823 157 750V746H78V762Q78 828
|
174 |
+
116 863T220 898Q283 898 319 866T355 776Q355 733 337 704T289 664Q360 640 360 554Q360 490 323 457T220 423Q147 423 113 459Z" />
|
175 |
+
<glyph unicode="´" glyph-name="acute" horiz-adv-x="277" d="M115 810H222L110 612H56L115 810Z" />
|
176 |
+
<glyph unicode="µ" glyph-name="uni00B5" horiz-adv-x="441" d="M50 578H157V142Q157 109 167 93T203 76Q235 76 278 112V578H385V0H278V57Q239 17 191 2Q174 -3 159 -3V-175H51L50 578Z" />
|
177 |
+
<glyph unicode="¶" glyph-name="paragraph" horiz-adv-x="492" d="M199 515Q123 515 78 553T32 662Q32 736 80 773T215 810H429V-96H352V759H275V-96H199V515Z" />
|
178 |
+
<glyph unicode="·" glyph-name="middot" horiz-adv-x="176" d="M36 432H144V322H36V432Z" />
|
179 |
+
<glyph unicode="¸" glyph-name="cedilla" horiz-adv-x="352" d="M118 -235T80 -225V-171Q104 -178 131 -178Q158 -178 175 -169T192 -139Q192 -114 172 -102T107 -83V0H161V-56Q211 -56 241 -79T272 -142Q272 -188 238 -211T147 -235Q118 -235 80 -225Z" />
|
180 |
+
<glyph unicode="¹" glyph-name="uni00B9" horiz-adv-x="340" d="M172 789L80 753V822L211 888H250V433H172V789Z" />
|
181 |
+
<glyph unicode="º" glyph-name="ordmasculine" horiz-adv-x="443" d="M138 320T103 367T67 505V637Q67 727 102 774T222 822Q302 822 339 773T376 637V505Q376 418 339 369T222 320Q138 320 103 367ZM249 398T262 413T279 453T282 517V625Q282 665 279 688T263
|
182 |
+
727T220 743Q179 743 168 713T156 625V517Q156 459 168 429T220 398Q249 398 262 413Z" />
|
183 |
+
<glyph unicode="»" glyph-name="guillemotright" horiz-adv-x="481" d="M57 174L148 295L57 415V549L230 321V269L57 41V174ZM252 174L343 295L252 415V549L424 321V269L252 41V174Z" />
|
184 |
+
<glyph unicode="¼" glyph-name="onequarter" horiz-adv-x="945" d="M184 967L92 931V1000L223 1066H262V611H184V967ZM586 810H678L307 0H215L586 810ZM677 107H505V166L696 455H755V168H799V107H755V0H677V107ZM677 168L676 314L584 168H677Z" />
|
185 |
+
<glyph unicode="½" glyph-name="onehalf" horiz-adv-x="945" d="M405 967L313 931V1000L444 1066H483V611H405V967ZM551 810H643L272 0H180L551 810ZM555 61L679 196Q725 245 742 273T759 327Q759 357 745 373T702 390Q665 390 649 366T633 294H554V308Q554
|
186 |
+
379 590 422T702 465Q767 465 804 430T841 332Q841 285 820 248T744 156L661 70H846V0H555V61Z" />
|
187 |
+
<glyph unicode="¾" glyph-name="threequarters" horiz-adv-x="874" d="M384 598T350 634T315 734V750H394V746Q394 673 459 673Q515 673 515 738Q515 771 502 787T458 804H432V870H455Q510 870 510 935Q510 964 496 981T455 998Q394 998 394 925V921H315V937Q315
|
188 |
+
1003 353 1038T457 1073Q520 1073 556 1041T592 951Q592 908 574 879T526 839Q597 815 597 729Q597 665 560 632T457 598Q384 598 350 634ZM627 810H719L348 0H256L627 810ZM718 107H546V166L737 455H796V168H840V107H796V0H718V107ZM718 168L717 314L625 168H718Z"
|
189 |
+
/>
|
190 |
+
<glyph unicode="¿" glyph-name="questiondown" horiz-adv-x="487" d="M344 518H237V628H344V518ZM339 301Q251 225 206 159T160 13Q160 -36 185 -66T256 -96Q296 -96 319 -74T343 -14Q343 5 336 36L436 55Q447 24 447 -8Q447 -89 397 -139T256 -189Q161 -189
|
191 |
+
108 -135T55 16Q55 80 79 133T143 231T244 328V425H339V301Z" />
|
192 |
+
<glyph unicode="À" glyph-name="Agrave" horiz-adv-x="492" d="M191 810H300L473 0H366L329 204H164L125 0H19L191 810ZM314 285L246 650L179 285H314ZM110 1056H217L274 858H221L110 1056Z" />
|
193 |
+
<glyph unicode="Á" glyph-name="Aacute" horiz-adv-x="492" d="M191 810H300L473 0H366L329 204H164L125 0H19L191 810ZM314 285L246 650L179 285H314ZM277 1056H384L272 858H218L277 1056Z" />
|
194 |
+
<glyph unicode="Â" glyph-name="Acircumflex" horiz-adv-x="492" d="M191 810H300L473 0H366L329 204H164L125 0H19L191 810ZM314 285L246 650L179 285H314ZM191 1042H300L387 867H306L245 988L185 867H105L191 1042Z" />
|
195 |
+
<glyph unicode="Ã" glyph-name="Atilde" horiz-adv-x="492" d="M191 810H300L473 0H366L329 204H164L125 0H19L191 810ZM314 285L246 650L179 285H314ZM302 932T286 939T248 959Q228 970 216 975T191 981Q173 981 165 972T157 940H96Q96 1048 176 1048Q193
|
196 |
+
1048 208 1042T244 1023Q264 1011 276 1006T303 1000Q321 1000 328 1009T336 1042H396Q396 991 380 962T322 932Q302 932 286 939Z" />
|
197 |
+
<glyph unicode="Ä" glyph-name="Adieresis" horiz-adv-x="492" d="M191 810H300L473 0H366L329 204H164L125 0H19L191 810ZM314 285L246 650L179 285H314ZM106 1042H214V931H106V1042ZM278 1042H386V931H278V1042Z" />
|
198 |
+
<glyph unicode="Å" glyph-name="Aring" horiz-adv-x="492" d="M191 810H300L473 0H366L329 204H164L125 0H19L191 810ZM314 285L246 650L179 285H314ZM196 828T165 858T134 940Q134 991 164 1021T246 1051Q297 1051 327 1021T358 940Q358 889 327 859T246
|
199 |
+
828Q196 828 165 858ZM272 882T288 897T304 940Q304 967 289 982T246 998Q219 998 204 983T188 940Q188 913 203 898T246 882Q272 882 288 897Z" />
|
200 |
+
<glyph unicode="Æ" glyph-name="AE" horiz-adv-x="635" d="M290 810H605V728H400V460H547V379H400V82H605V0H292V205H143L57 0H-51L290 810ZM292 286V605L173 286H292Z" />
|
201 |
+
<glyph unicode="Ç" glyph-name="Ccedilla" horiz-adv-x="515" d="M363 520V577Q363 633 358 663T333 711T267 729Q221 729 199 710T169 656T162 563V242Q162 180 172 145T204 95T267 80Q310 80 331 99T357 151T363 241V301H470V241Q470 125 429 61T285 -8V-56Q335
|
202 |
+
-56 365 -79T396 -142Q396 -188 362 -211T271 -235Q242 -235 204 -225V-171Q228 -178 255 -178Q282 -178 299 -169T316 -139Q316 -114 296 -102T231 -83V-7Q131 4 90 74T48 260V546Q48 679 96 748T266 817Q375 817 422 758T470 584V520H363Z" />
|
203 |
+
<glyph unicode="È" glyph-name="Egrave" horiz-adv-x="407" d="M63 810H377V726H176V458H339V378H176V81H379V0H63V810ZM88 1056H195L252 858H199L88 1056Z" />
|
204 |
+
<glyph unicode="É" glyph-name="Eacute" horiz-adv-x="407" d="M63 810H377V726H176V458H339V378H176V81H379V0H63V810ZM255 1056H362L250 858H196L255 1056Z" />
|
205 |
+
<glyph unicode="Ê" glyph-name="Ecircumflex" horiz-adv-x="407" d="M63 810H377V726H176V458H339V378H176V81H379V0H63V810ZM169 1042H278L365 867H284L223 988L163 867H83L169 1042Z" />
|
206 |
+
<glyph unicode="Ë" glyph-name="Edieresis" horiz-adv-x="407" d="M63 810H377V726H176V458H339V378H176V81H379V0H63V810ZM84 1042H192V931H84V1042ZM256 1042H364V931H256V1042Z" />
|
207 |
+
<glyph unicode="Ì" glyph-name="Igrave" horiz-adv-x="248" d="M69 810H180V0H69V810ZM-12 1056H95L152 858H99L-12 1056Z" />
|
208 |
+
<glyph unicode="Í" glyph-name="Iacute" horiz-adv-x="248" d="M69 810H180V0H69V810ZM155 1056H262L150 858H96L155 1056Z" />
|
209 |
+
<glyph unicode="Î" glyph-name="Icircumflex" horiz-adv-x="248" d="M69 810H180V0H69V810ZM69 1042H178L265 867H184L123 988L63 867H-17L69 1042Z" />
|
210 |
+
<glyph unicode="Ï" glyph-name="Idieresis" horiz-adv-x="248" d="M69 810H180V0H69V810ZM-16 1042H92V931H-16V1042ZM156 1042H264V931H156V1042Z" />
|
211 |
+
<glyph unicode="Ð" glyph-name="Eth" horiz-adv-x="518" d="M63 388H14V453H63V810H239Q370 810 424 750T479 563V265Q479 131 426 66T248 0H63V388ZM240 81Q299 81 325 104T358 166T365 286V549Q365 618 357 654T321 708T237 726H176V453H237V388H176V81H240Z" />
|
212 |
+
<glyph unicode="Ñ" glyph-name="Ntilde" horiz-adv-x="528" d="M63 810H140L370 272V810H464V0H392L159 553V0H63V810ZM320 932T304 939T266 959Q246 970 234 975T209 981Q191 981 183 972T175 940H114Q114 1048 194 1048Q211 1048 226 1042T262 1023Q282
|
213 |
+
1011 294 1006T321 1000Q339 1000 346 1009T354 1042H414Q414 991 398 962T340 932Q320 932 304 939Z" />
|
214 |
+
<glyph unicode="Ò" glyph-name="Ograve" horiz-adv-x="539" d="M151 -9T100 58T48 254V561Q48 687 100 752T270 817Q388 817 439 752T491 561V253Q491 127 439 59T270 -9Q151 -9 100 58ZM333 80T355 117T377 229V584Q377 658 355 693T270 729Q206 729 184
|
215 |
+
694T162 584V229Q162 154 184 117T270 80Q333 80 355 117ZM134 1056H241L298 858H245L134 1056Z" />
|
216 |
+
<glyph unicode="Ó" glyph-name="Oacute" horiz-adv-x="539" d="M151 -9T100 58T48 254V561Q48 687 100 752T270 817Q388 817 439 752T491 561V253Q491 127 439 59T270 -9Q151 -9 100 58ZM333 80T355 117T377 229V584Q377 658 355 693T270 729Q206 729 184
|
217 |
+
694T162 584V229Q162 154 184 117T270 80Q333 80 355 117ZM301 1056H408L296 858H242L301 1056Z" />
|
218 |
+
<glyph unicode="Ô" glyph-name="Ocircumflex" horiz-adv-x="539" d="M151 -9T100 58T48 254V561Q48 687 100 752T270 817Q388 817 439 752T491 561V253Q491 127 439 59T270 -9Q151 -9 100 58ZM333 80T355 117T377 229V584Q377 658 355 693T270 729Q206 729
|
219 |
+
184 694T162 584V229Q162 154 184 117T270 80Q333 80 355 117ZM215 1042H324L411 867H330L269 988L209 867H129L215 1042Z" />
|
220 |
+
<glyph unicode="Õ" glyph-name="Otilde" horiz-adv-x="539" d="M151 -9T100 58T48 254V561Q48 687 100 752T270 817Q388 817 439 752T491 561V253Q491 127 439 59T270 -9Q151 -9 100 58ZM333 80T355 117T377 229V584Q377 658 355 693T270 729Q206 729 184
|
221 |
+
694T162 584V229Q162 154 184 117T270 80Q333 80 355 117ZM326 932T310 939T272 959Q252 970 240 975T215 981Q197 981 189 972T181 940H120Q120 1048 200 1048Q217 1048 232 1042T268 1023Q288 1011 300 1006T327 1000Q345 1000 352 1009T360 1042H420Q420 991
|
222 |
+
404 962T346 932Q326 932 310 939Z" />
|
223 |
+
<glyph unicode="Ö" glyph-name="Odieresis" horiz-adv-x="539" d="M151 -9T100 58T48 254V561Q48 687 100 752T270 817Q388 817 439 752T491 561V253Q491 127 439 59T270 -9Q151 -9 100 58ZM333 80T355 117T377 229V584Q377 658 355 693T270 729Q206 729
|
224 |
+
184 694T162 584V229Q162 154 184 117T270 80Q333 80 355 117ZM130 1042H238V931H130V1042ZM302 1042H410V931H302V1042Z" />
|
225 |
+
<glyph unicode="×" glyph-name="multiply" horiz-adv-x="383" d="M49 308L138 397L49 486L103 540L191 451L280 540L334 486L245 397L334 308L280 254L191 343L103 254L49 308Z" />
|
226 |
+
<glyph unicode="Ø" glyph-name="Oslash" horiz-adv-x="540" d="M491 737T491 561V253Q491 127 439 59T270 -9Q217 -9 181 4L160 -74L121 -62L143 21Q93 51 71 109T48 254V561Q48 687 100 752T270 817Q315 817 353 806L373 880L413 870L392 791Q491 737 491
|
227 |
+
561ZM162 169T174 137L329 717Q307 729 270 729Q206 729 184 694T162 584V229Q162 169 174 137ZM377 584Q377 651 362 681L206 96Q230 80 270 80Q333 80 355 117T377 229V584Z" />
|
228 |
+
<glyph unicode="Ù" glyph-name="Ugrave" horiz-adv-x="543" d="M187 -9T140 25T74 120T56 273V810H164V268Q164 176 185 128T272 80Q337 80 358 128T380 268V810H487V273Q487 181 469 120T404 25T272 -9Q187 -9 140 25ZM136 1056H243L300 858H247L136 1056Z" />
|
229 |
+
<glyph unicode="Ú" glyph-name="Uacute" horiz-adv-x="543" d="M187 -9T140 25T74 120T56 273V810H164V268Q164 176 185 128T272 80Q337 80 358 128T380 268V810H487V273Q487 181 469 120T404 25T272 -9Q187 -9 140 25ZM303 1056H410L298 858H244L303 1056Z" />
|
230 |
+
<glyph unicode="Û" glyph-name="Ucircumflex" horiz-adv-x="543" d="M187 -9T140 25T74 120T56 273V810H164V268Q164 176 185 128T272 80Q337 80 358 128T380 268V810H487V273Q487 181 469 120T404 25T272 -9Q187 -9 140 25ZM217 1042H326L413 867H332L271
|
231 |
+
988L211 867H131L217 1042Z" />
|
232 |
+
<glyph unicode="Ü" glyph-name="Udieresis" horiz-adv-x="543" d="M187 -9T140 25T74 120T56 273V810H164V268Q164 176 185 128T272 80Q337 80 358 128T380 268V810H487V273Q487 181 469 120T404 25T272 -9Q187 -9 140 25ZM132 1042H240V931H132V1042ZM304
|
233 |
+
1042H412V931H304V1042Z" />
|
234 |
+
<glyph unicode="Ý" glyph-name="Yacute" horiz-adv-x="481" d="M187 286L12 810H117L241 419L363 810H469L295 286V0H187V286ZM272 1056H379L267 858H213L272 1056Z" />
|
235 |
+
<glyph unicode="Þ" glyph-name="Thorn" horiz-adv-x="503" d="M63 810H176V704H293Q391 704 438 642T486 469Q486 233 274 233H176V0H63V810ZM246 324Q315 324 345 355T376 469Q376 546 349 578T259 610H176V324H246Z" />
|
236 |
+
<glyph unicode="ß" glyph-name="germandbls" horiz-adv-x="515" d="M223 80Q275 80 303 97T342 147T353 232Q353 298 322 336T230 375L231 464Q281 464 302 506T324 611Q324 669 307 700T244 731Q199 731 183 702T166 613V0H59V612Q59 709 105 764T241 819Q335
|
237 |
+
819 382 766T429 611Q429 541 405 498T330 428Q392 412 425 360T459 232Q459 114 403 53T223 -9V80Z" />
|
238 |
+
<glyph unicode="à" glyph-name="agrave" horiz-adv-x="426" d="M125 -8T99 11T57 61T42 126Q42 194 71 236T144 303T270 361V402Q270 459 259 482T212 506Q151 506 151 424V395L45 399L46 420Q51 507 94 546T219 586Q302 586 339 541T377 403V139Q377 74
|
239 |
+
387 0H289Q278 57 275 85Q263 46 234 19T158 -8Q125 -8 99 11ZM221 84T241 100T270 132V296Q226 270 204 256T166 217T149 159Q149 123 162 104T200 84Q221 84 241 100ZM83 824H190L247 626H194L83 824Z" />
|
240 |
+
<glyph unicode="á" glyph-name="aacute" horiz-adv-x="426" d="M125 -8T99 11T57 61T42 126Q42 194 71 236T144 303T270 361V402Q270 459 259 482T212 506Q151 506 151 424V395L45 399L46 420Q51 507 94 546T219 586Q302 586 339 541T377 403V139Q377 74
|
241 |
+
387 0H289Q278 57 275 85Q263 46 234 19T158 -8Q125 -8 99 11ZM221 84T241 100T270 132V296Q226 270 204 256T166 217T149 159Q149 123 162 104T200 84Q221 84 241 100ZM250 824H357L245 626H191L250 824Z" />
|
242 |
+
<glyph unicode="â" glyph-name="acircumflex" horiz-adv-x="426" d="M125 -8T99 11T57 61T42 126Q42 194 71 236T144 303T270 361V402Q270 459 259 482T212 506Q151 506 151 424V395L45 399L46 420Q51 507 94 546T219 586Q302 586 339 541T377 403V139Q377
|
243 |
+
74 387 0H289Q278 57 275 85Q263 46 234 19T158 -8Q125 -8 99 11ZM221 84T241 100T270 132V296Q226 270 204 256T166 217T149 159Q149 123 162 104T200 84Q221 84 241 100ZM164 810H273L360 635H279L218 756L158 635H78L164 810Z" />
|
244 |
+
<glyph unicode="ã" glyph-name="atilde" horiz-adv-x="426" d="M125 -8T99 11T57 61T42 126Q42 194 71 236T144 303T270 361V402Q270 459 259 482T212 506Q151 506 151 424V395L45 399L46 420Q51 507 94 546T219 586Q302 586 339 541T377 403V139Q377 74
|
245 |
+
387 0H289Q278 57 275 85Q263 46 234 19T158 -8Q125 -8 99 11ZM221 84T241 100T270 132V296Q226 270 204 256T166 217T149 159Q149 123 162 104T200 84Q221 84 241 100ZM275 700T259 707T221 727Q201 738 189 743T164 749Q146 749 138 740T130 708H69Q69 816 149
|
246 |
+
816Q166 816 181 810T217 791Q237 779 249 774T276 768Q294 768 301 777T309 810H369Q369 759 353 730T295 700Q275 700 259 707Z" />
|
247 |
+
<glyph unicode="ä" glyph-name="adieresis" horiz-adv-x="426" d="M125 -8T99 11T57 61T42 126Q42 194 71 236T144 303T270 361V402Q270 459 259 482T212 506Q151 506 151 424V395L45 399L46 420Q51 507 94 546T219 586Q302 586 339 541T377 403V139Q377
|
248 |
+
74 387 0H289Q278 57 275 85Q263 46 234 19T158 -8Q125 -8 99 11ZM221 84T241 100T270 132V296Q226 270 204 256T166 217T149 159Q149 123 162 104T200 84Q221 84 241 100ZM79 810H187V699H79V810ZM251 810H359V699H251V810Z" />
|
249 |
+
<glyph unicode="å" glyph-name="aring" horiz-adv-x="426" d="M125 -8T99 11T57 61T42 126Q42 194 71 236T144 303T270 361V402Q270 459 259 482T212 506Q151 506 151 424V395L45 399L46 420Q51 507 94 546T219 586Q302 586 339 541T377 403V139Q377 74 387
|
250 |
+
0H289Q278 57 275 85Q263 46 234 19T158 -8Q125 -8 99 11ZM221 84T241 100T270 132V296Q226 270 204 256T166 217T149 159Q149 123 162 104T200 84Q221 84 241 100ZM169 596T138 626T107 708Q107 759 137 789T219 819Q270 819 300 789T331 708Q331 657 300 627T219
|
251 |
+
596Q169 596 138 626ZM245 650T261 665T277 708Q277 735 262 750T219 766Q192 766 177 751T161 708Q161 681 176 666T219 650Q245 650 261 665Z" />
|
252 |
+
<glyph unicode="æ" glyph-name="ae" horiz-adv-x="653" d="M609 201V177Q609 88 569 40T444 -8Q392 -8 358 24T315 109Q293 56 257 24T171 -8Q135 -8 106 10T60 59T43 126Q43 201 82 243T197 306L275 327V402Q275 453 262 478T214 504Q151 504 151 409H45Q46
|
253 |
+
491 90 538T214 586Q256 586 285 566T327 511Q342 545 378 565T463 586Q533 586 568 548T604 443Q604 394 583 365T531 323T453 297L382 282V255Q382 197 384 163T401 103T445 77Q477 77 489 103T502 176V201H609ZM382 340L437 353Q474 364 490 381T506 436Q506
|
254 |
+
464 492 481T447 499Q411 499 397 473T382 397V340ZM275 265Q266 263 250 258T229 250Q190 233 170 210T150 149Q150 116 165 96T202 75Q233 75 254 110T275 211V265Z" />
|
255 |
+
<glyph unicode="ç" glyph-name="ccedilla" horiz-adv-x="411" d="M273 370V405Q273 462 261 484T213 507Q186 507 173 495T155 456T150 377V195Q150 145 156 119T175 82T214 71Q251 71 262 95T273 171V218H370V178Q370 90 340 44T233 -7V-56Q283 -56 313
|
256 |
+
-79T344 -142Q344 -188 310 -211T219 -235Q190 -235 152 -225V-171Q176 -178 203 -178Q230 -178 247 -169T264 -139Q264 -114 244 -102T179 -83V-6Q100 3 72 59T43 222V355Q43 433 56 483T107 559T212 586Q274 586 308 566T356 507T370 404V370H273Z" />
|
257 |
+
<glyph unicode="è" glyph-name="egrave" horiz-adv-x="421" d="M147 -8T110 17T58 93T43 223V355Q43 475 80 530T214 586Q284 586 319 557T366 476T378 334V287H150V210Q150 158 152 132T168 89T213 71Q248 71 260 94T273 166V201H377V179Q377 88 338 40T214
|
258 |
+
-8Q147 -8 110 17ZM273 345V397Q273 456 262 481T213 507Q187 507 174 495T155 456T150 376V345H273ZM75 824H182L239 626H186L75 824Z" />
|
259 |
+
<glyph unicode="é" glyph-name="eacute" horiz-adv-x="421" d="M147 -8T110 17T58 93T43 223V355Q43 475 80 530T214 586Q284 586 319 557T366 476T378 334V287H150V210Q150 158 152 132T168 89T213 71Q248 71 260 94T273 166V201H377V179Q377 88 338 40T214
|
260 |
+
-8Q147 -8 110 17ZM273 345V397Q273 456 262 481T213 507Q187 507 174 495T155 456T150 376V345H273ZM242 824H349L237 626H183L242 824Z" />
|
261 |
+
<glyph unicode="ê" glyph-name="ecircumflex" horiz-adv-x="421" d="M147 -8T110 17T58 93T43 223V355Q43 475 80 530T214 586Q284 586 319 557T366 476T378 334V287H150V210Q150 158 152 132T168 89T213 71Q248 71 260 94T273 166V201H377V179Q377 88 338
|
262 |
+
40T214 -8Q147 -8 110 17ZM273 345V397Q273 456 262 481T213 507Q187 507 174 495T155 456T150 376V345H273ZM156 810H265L352 635H271L210 756L150 635H70L156 810Z" />
|
263 |
+
<glyph unicode="ë" glyph-name="edieresis" horiz-adv-x="421" d="M147 -8T110 17T58 93T43 223V355Q43 475 80 530T214 586Q284 586 319 557T366 476T378 334V287H150V210Q150 158 152 132T168 89T213 71Q248 71 260 94T273 166V201H377V179Q377 88 338
|
264 |
+
40T214 -8Q147 -8 110 17ZM273 345V397Q273 456 262 481T213 507Q187 507 174 495T155 456T150 376V345H273ZM71 810H179V699H71V810ZM243 810H351V699H243V810Z" />
|
265 |
+
<glyph unicode="ì" glyph-name="igrave" horiz-adv-x="224" d="M61 578H168V0H61V578ZM-21 824H86L143 626H90L-21 824Z" />
|
266 |
+
<glyph unicode="í" glyph-name="iacute" horiz-adv-x="224" d="M61 578H168V0H61V578ZM146 824H253L141 626H87L146 824Z" />
|
267 |
+
<glyph unicode="î" glyph-name="icircumflex" horiz-adv-x="224" d="M61 578H168V0H61V578ZM60 810H169L256 635H175L114 756L54 635H-26L60 810Z" />
|
268 |
+
<glyph unicode="ï" glyph-name="idieresis" horiz-adv-x="224" d="M61 578H168V0H61V578ZM-25 810H83V699H-25V810ZM147 810H255V699H147V810Z" />
|
269 |
+
<glyph unicode="ð" glyph-name="eth" horiz-adv-x="471" d="M156 -9T118 18T66 96T52 225V292Q52 418 85 487T209 557Q266 557 306 521Q297 615 271 655L152 618V672L242 698Q220 723 183 735T77 749L82 819Q178 818 235 796T326 725L442 759V705L353 681Q386
|
270 |
+
609 401 538T416 377V237Q416 119 372 55T227 -9Q156 -9 118 18ZM279 76T294 110T309 219L310 343Q310 380 308 436Q306 437 297 446T271 462T236 469Q192 469 176 426T159 284L158 206Q158 142 172 109T230 76Q279 76 294 110Z" />
|
271 |
+
<glyph unicode="ñ" glyph-name="ntilde" horiz-adv-x="439" d="M54 578H161V521Q230 586 302 586Q349 586 369 552T389 468V0H282V437Q282 470 272 486T236 502Q204 502 161 466V0H54V578ZM276 700T260 707T222 727Q202 738 190 743T165 749Q147 749 139
|
272 |
+
740T131 708H70Q70 816 150 816Q167 816 182 810T218 791Q238 779 250 774T277 768Q295 768 302 777T310 810H370Q370 759 354 730T296 700Q276 700 260 707Z" />
|
273 |
+
<glyph unicode="ò" glyph-name="ograve" horiz-adv-x="424" d="M120 -8T82 46T43 205V373Q43 477 81 531T212 586Q303 586 341 532T380 373V205Q380 101 342 47T212 -8Q120 -8 82 46ZM241 71T254 88T270 130T273 198V379Q273 422 270 447T254 490T212 507Q183
|
274 |
+
507 170 490T153 448T150 379V198Q150 155 153 130T169 88T212 71Q241 71 254 88ZM76 824H183L240 626H187L76 824Z" />
|
275 |
+
<glyph unicode="ó" glyph-name="oacute" horiz-adv-x="424" d="M120 -8T82 46T43 205V373Q43 477 81 531T212 586Q303 586 341 532T380 373V205Q380 101 342 47T212 -8Q120 -8 82 46ZM241 71T254 88T270 130T273 198V379Q273 422 270 447T254 490T212 507Q183
|
276 |
+
507 170 490T153 448T150 379V198Q150 155 153 130T169 88T212 71Q241 71 254 88ZM243 824H350L238 626H184L243 824Z" />
|
277 |
+
<glyph unicode="ô" glyph-name="ocircumflex" horiz-adv-x="424" d="M120 -8T82 46T43 205V373Q43 477 81 531T212 586Q303 586 341 532T380 373V205Q380 101 342 47T212 -8Q120 -8 82 46ZM241 71T254 88T270 130T273 198V379Q273 422 270 447T254 490T212
|
278 |
+
507Q183 507 170 490T153 448T150 379V198Q150 155 153 130T169 88T212 71Q241 71 254 88ZM157 810H266L353 635H272L211 756L151 635H71L157 810Z" />
|
279 |
+
<glyph unicode="õ" glyph-name="otilde" horiz-adv-x="424" d="M120 -8T82 46T43 205V373Q43 477 81 531T212 586Q303 586 341 532T380 373V205Q380 101 342 47T212 -8Q120 -8 82 46ZM241 71T254 88T270 130T273 198V379Q273 422 270 447T254 490T212 507Q183
|
280 |
+
507 170 490T153 448T150 379V198Q150 155 153 130T169 88T212 71Q241 71 254 88ZM268 700T252 707T214 727Q194 738 182 743T157 749Q139 749 131 740T123 708H62Q62 816 142 816Q159 816 174 810T210 791Q230 779 242 774T269 768Q287 768 294 777T302 810H362Q362
|
281 |
+
759 346 730T288 700Q268 700 252 707Z" />
|
282 |
+
<glyph unicode="ö" glyph-name="odieresis" horiz-adv-x="424" d="M120 -8T82 46T43 205V373Q43 477 81 531T212 586Q303 586 341 532T380 373V205Q380 101 342 47T212 -8Q120 -8 82 46ZM241 71T254 88T270 130T273 198V379Q273 422 270 447T254 490T212
|
283 |
+
507Q183 507 170 490T153 448T150 379V198Q150 155 153 130T169 88T212 71Q241 71 254 88ZM72 810H180V699H72V810ZM244 810H352V699H244V810Z" />
|
284 |
+
<glyph unicode="÷" glyph-name="divide" horiz-adv-x="346" d="M130 638H215V527H130V638ZM19 450H328V372H19V450ZM130 283H215V172H130V283Z" />
|
285 |
+
<glyph unicode="ø" glyph-name="oslash" horiz-adv-x="424" d="M380 498T380 373V205Q380 101 342 47T212 -8Q166 -8 133 6L96 -95L64 -84L102 25Q43 73 43 205V373Q43 477 81 531T212 586Q260 586 295 570L330 668L367 656L328 547Q380 498 380 373ZM150
|
286 |
+
160L262 476Q249 507 212 507Q183 507 170 490T153 448T150 379V198V160ZM273 379V395L165 95Q179 71 212 71Q241 71 254 88T270 130T273 198V379Z" />
|
287 |
+
<glyph unicode="ù" glyph-name="ugrave" horiz-adv-x="440" d="M90 -8T70 26T50 110V578H157V142Q157 109 167 93T203 76Q235 76 278 112V578H385V0H278V57Q209 -8 137 -8Q90 -8 70 26ZM84 824H191L248 626H195L84 824Z" />
|
288 |
+
<glyph unicode="ú" glyph-name="uacute" horiz-adv-x="440" d="M90 -8T70 26T50 110V578H157V142Q157 109 167 93T203 76Q235 76 278 112V578H385V0H278V57Q209 -8 137 -8Q90 -8 70 26ZM251 824H358L246 626H192L251 824Z" />
|
289 |
+
<glyph unicode="û" glyph-name="ucircumflex" horiz-adv-x="440" d="M90 -8T70 26T50 110V578H157V142Q157 109 167 93T203 76Q235 76 278 112V578H385V0H278V57Q209 -8 137 -8Q90 -8 70 26ZM165 810H274L361 635H280L219 756L159 635H79L165 810Z" />
|
290 |
+
<glyph unicode="ü" glyph-name="udieresis" horiz-adv-x="440" d="M90 -8T70 26T50 110V578H157V142Q157 109 167 93T203 76Q235 76 278 112V578H385V0H278V57Q209 -8 137 -8Q90 -8 70 26ZM80 810H188V699H80V810ZM252 810H360V699H252V810Z" />
|
291 |
+
<glyph unicode="ý" glyph-name="yacute" horiz-adv-x="392" d="M45 -63Q105 -63 127 -54T150 -20Q150 -14 146 6L133 66L128 86Q78 294 12 578H120L198 146L273 578H381L243 -32Q229 -93 184 -119T58 -145H45V-63ZM227 824H334L222 626H168L227 824Z" />
|
292 |
+
<glyph unicode="þ" glyph-name="thorn" horiz-adv-x="447" d="M55 810H162V532Q209 586 272 586Q351 586 377 519T404 369V229Q404 123 372 58T260 -8Q209 -8 162 43V-190H55V810ZM276 76T286 114T297 229V369Q297 433 285 467T234 502Q198 502 162 472V102Q197
|
293 |
+
76 239 76Q276 76 286 114Z" />
|
294 |
+
<glyph unicode="ÿ" glyph-name="ydieresis" horiz-adv-x="392" d="M45 -63Q105 -63 127 -54T150 -20Q150 -14 146 6L133 66L128 86Q78 294 12 578H120L198 146L273 578H381L243 -32Q229 -93 184 -119T58 -145H45V-63ZM56 810H164V699H56V810ZM228 810H336V699H228V810Z"
|
295 |
+
/>
|
296 |
+
<glyph unicode="–" glyph-name="endash" horiz-adv-x="494" d="M8 285H487V204H8V285Z" />
|
297 |
+
<glyph unicode="—" glyph-name="emdash" horiz-adv-x="965" d="M8 347H958V269H8V347Z" />
|
298 |
+
<glyph unicode="‘" glyph-name="quoteleft" horiz-adv-x="208" d="M31 676Q31 757 54 799T130 843L149 804Q119 801 107 775T95 691H148V579H31V676Z" />
|
299 |
+
<glyph unicode="’" glyph-name="quoteright" horiz-adv-x="208" d="M59 585Q89 587 101 613T113 697H60V810H177V713Q177 632 154 590T78 545L59 585Z" />
|
300 |
+
<glyph unicode="‚" glyph-name="quotesinglbase" horiz-adv-x="208" d="M59 -93Q89 -91 101 -65T113 19H60V132H177V35Q177 -46 154 -88T78 -133L59 -93Z" />
|
301 |
+
<glyph unicode="“" glyph-name="quotedblleft" horiz-adv-x="384" d="M31 676Q31 757 54 799T130 843L149 804Q119 801 107 775T95 691H148V579H31V676ZM207 676Q207 757 230 799T306 843L325 804Q295 801 283 775T271 691H324V579H207V676Z" />
|
302 |
+
<glyph unicode="”" glyph-name="quotedblright" horiz-adv-x="384" d="M59 585Q89 587 101 613T113 697H60V810H177V713Q177 632 154 590T78 545L59 585ZM235 585Q265 587 277 613T289 697H236V810H353V713Q353 632 330 590T254 545L235 585Z" />
|
303 |
+
<glyph unicode="„" glyph-name="quotedblbase" horiz-adv-x="384" d="M235 -93Q265 -91 277 -65T289 19H236V132H353V35Q353 -46 330 -88T254 -133L235 -93ZM59 -93Q89 -91 101 -65T113 19H60V132H177V35Q177 -46 154 -88T78 -133L59 -93Z" />
|
304 |
+
<glyph unicode="•" glyph-name="bullet" horiz-adv-x="363" d="M128 272T98 304T68 390Q68 444 98 475T181 507Q235 507 265 475T295 390Q295 335 265 304T181 272Q128 272 98 304Z" />
|
305 |
+
<glyph unicode="‹" glyph-name="guilsinglleft" horiz-adv-x="275" d="M43 269V321L242 549V415L125 295L242 174V41L43 269Z" />
|
306 |
+
<glyph unicode="›" glyph-name="guilsinglright" horiz-adv-x="292" d="M60 227L177 348L60 467V602L258 374V321L60 93V227Z" />
|
307 |
+
</font>
|
308 |
+
</defs>
|
309 |
+
</svg>
|
assets/fonts/oswald/oswald-regular.ttf
ADDED
Binary file
|
assets/fonts/oswald/oswald-regular.woff
ADDED
Binary file
|
assets/fonts/oswald/oswald-regular.woff2
ADDED
Binary file
|
inc/img/member_portal_logo.jpg → assets/images/add-ons/member-portal.jpg
RENAMED
File without changes
|
inc/img/team_showcase_pro_logo.jpg → assets/images/add-ons/ots-pro.jpg
RENAMED
File without changes
|
assets/images/branding/smartcat-medium.png
ADDED
Binary file
|
assets/images/default-avatar.png
ADDED
Binary file
|
inc/img/card_demo.jpg → assets/images/demo/card.jpg
RENAMED
File without changes
|
inc/img/panel_demo.jpg → assets/images/demo/panel-1.jpg
RENAMED
File without changes
|
screenshot-2.jpg → assets/images/demo/sidebar-widget.jpg
RENAMED
File without changes
|
{inc/img → assets/images}/more.png
RENAMED
File without changes
|
{inc/img → assets/images/social}/email.png
RENAMED
File without changes
|
inc/img/fb.png → assets/images/social/facebook.png
RENAMED
File without changes
|
inc/img/google.png → assets/images/social/gplus.png
RENAMED
File without changes
|
{inc/img → assets/images/social}/instagram.png
RENAMED
File without changes
|
{inc/img → assets/images/social}/linkedin.png
RENAMED
File without changes
|
{inc/img → assets/images/social}/phone.png
RENAMED
File without changes
|
{inc/img → assets/images/social}/pinterest.png
RENAMED
File without changes
|
{inc/img → assets/images/social}/twitter.png
RENAMED
File without changes
|
{inc/img → assets/images/social}/website.png
RENAMED
File without changes
|
assets/js/script.js
ADDED
@@ -0,0 +1,39 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
jQuery(document).ready(function ($) {
|
2 |
+
|
3 |
+
do_resize();
|
4 |
+
|
5 |
+
$(window).resize(function () {
|
6 |
+
do_resize();
|
7 |
+
|
8 |
+
});
|
9 |
+
|
10 |
+
function do_resize() {
|
11 |
+
|
12 |
+
var members = $('#sc_our_team.grid .sc_team_member, ' +
|
13 |
+
'#sc_our_team.grid_circles .sc_team_member,' +
|
14 |
+
'#sc_our_team.grid_circles2 .sc_team_member');
|
15 |
+
|
16 |
+
var member_height = members.width();
|
17 |
+
|
18 |
+
members.each(function (index, el) {
|
19 |
+
$(el).find('.sc_team_member_inner').css({height: member_height});
|
20 |
+
});
|
21 |
+
|
22 |
+
|
23 |
+
members.mouseenter(function () {
|
24 |
+
|
25 |
+
$(this).find('.sc_team_member_overlay').stop(true, false).fadeIn(440);
|
26 |
+
$(this).find('.wp-post-image').addClass('zoomIn');
|
27 |
+
$(this).find('.sc_team_more').addClass('show');
|
28 |
+
|
29 |
+
}).mouseleave(function () {
|
30 |
+
|
31 |
+
$(this).find('.sc_team_member_overlay').stop(true, false).fadeOut(440);
|
32 |
+
$(this).find('.wp-post-image').removeClass('zoomIn');
|
33 |
+
$(this).find('.sc_team_more').removeClass('show');
|
34 |
+
|
35 |
+
});
|
36 |
+
|
37 |
+
}
|
38 |
+
|
39 |
+
});
|
capture.JPG
DELETED
Binary file
|
constants.php
ADDED
@@ -0,0 +1,149 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ots;
|
4 |
+
|
5 |
+
const VERSION = '4.0.0';
|
6 |
+
|
7 |
+
|
8 |
+
interface Options {
|
9 |
+
|
10 |
+
/**
|
11 |
+
* @since 4.0.0
|
12 |
+
*/
|
13 |
+
const REWRITE_SLUG = 'ots-team-rewrite-slug';
|
14 |
+
|
15 |
+
/**
|
16 |
+
* @since 4.0.0
|
17 |
+
*/
|
18 |
+
const TEMPLATE = 'ots-team-template';
|
19 |
+
|
20 |
+
/**
|
21 |
+
* @since 4.0.0
|
22 |
+
*/
|
23 |
+
const GRID_COLUMNS = 'ots-team-grid-columns';
|
24 |
+
|
25 |
+
/**
|
26 |
+
* @since 4.0.0
|
27 |
+
*/
|
28 |
+
const MARGIN = 'ots-team-margin';
|
29 |
+
|
30 |
+
/**
|
31 |
+
* @since 4.0.0
|
32 |
+
*/
|
33 |
+
const SHOW_SOCIAL = 'ots-team-show-social';
|
34 |
+
|
35 |
+
/**
|
36 |
+
* @since 4.0.0
|
37 |
+
*/
|
38 |
+
const SOCIAL_LINK_ACTION = 'ots-team-social-link-action';
|
39 |
+
|
40 |
+
/**
|
41 |
+
* @since 4.0.0
|
42 |
+
*/
|
43 |
+
const DISPLAY_NAME = 'ots-team-display-name';
|
44 |
+
|
45 |
+
/**
|
46 |
+
* @since 4.0.0
|
47 |
+
*/
|
48 |
+
const DISPLAY_TITLE = 'ots-team-display-title';
|
49 |
+
|
50 |
+
/**
|
51 |
+
* @since 4.0.0
|
52 |
+
*/
|
53 |
+
const DISPLAY_LIMIT = 'ots-team-display-limit';
|
54 |
+
|
55 |
+
/**
|
56 |
+
* @since 4.0.0
|
57 |
+
*/
|
58 |
+
const MAIN_COLOR = 'ots-team-main-color';
|
59 |
+
|
60 |
+
/**
|
61 |
+
* @since 4.0.0
|
62 |
+
*/
|
63 |
+
const SINGLE_TEMPLATE = 'ots-single-template';
|
64 |
+
|
65 |
+
/**
|
66 |
+
* @since 4.0.0
|
67 |
+
*/
|
68 |
+
const DEFAULT_AVATAR = 'ots-default-avatar';
|
69 |
+
|
70 |
+
/**
|
71 |
+
* @since 4.0.0
|
72 |
+
*/
|
73 |
+
const SHOW_SINGLE_SOCIAL = 'ots-show-single-social';
|
74 |
+
|
75 |
+
/**
|
76 |
+
* @since 4.0.0
|
77 |
+
*/
|
78 |
+
const PLUGIN_VERSION = 'ots-plugin-version';
|
79 |
+
|
80 |
+
/**
|
81 |
+
* @since 4.0.0
|
82 |
+
*/
|
83 |
+
const NUKE = 'ots-nuke-install';
|
84 |
+
|
85 |
+
}
|
86 |
+
|
87 |
+
interface Defaults {
|
88 |
+
|
89 |
+
/**
|
90 |
+
* @since 4.0.0
|
91 |
+
*/
|
92 |
+
const REWRITE_SLUG = 'team-member';
|
93 |
+
|
94 |
+
/**
|
95 |
+
* @since 4.0.0
|
96 |
+
*/
|
97 |
+
const TEMPLATE = 'grid';
|
98 |
+
|
99 |
+
/**
|
100 |
+
* @since 4.0.0
|
101 |
+
*/
|
102 |
+
const GRID_COLUMNS = 3;
|
103 |
+
|
104 |
+
/**
|
105 |
+
* @since 4.0.0
|
106 |
+
*/
|
107 |
+
const MARGIN = 5;
|
108 |
+
|
109 |
+
/**
|
110 |
+
* @since 4.0.0
|
111 |
+
*/
|
112 |
+
const SHOW_SOCIAL = 'on';
|
113 |
+
|
114 |
+
/**
|
115 |
+
* @since 4.0.0
|
116 |
+
*/
|
117 |
+
const SOCIAL_LINK_ACTION = 'on';
|
118 |
+
|
119 |
+
/**
|
120 |
+
* @since 4.0.0
|
121 |
+
*/
|
122 |
+
const DISPLAY_NAME = 'on';
|
123 |
+
|
124 |
+
/**
|
125 |
+
* @since 4.0.0
|
126 |
+
*/
|
127 |
+
const DISPLAY_TITLE = 'on';
|
128 |
+
|
129 |
+
/**
|
130 |
+
* @since 4.0.0
|
131 |
+
*/
|
132 |
+
const DISPLAY_LIMIT = 'on';
|
133 |
+
|
134 |
+
/**
|
135 |
+
* @since 4.0.0
|
136 |
+
*/
|
137 |
+
const MAIN_COLOR = '#1f7dcf';
|
138 |
+
|
139 |
+
/**
|
140 |
+
* @since 4.0.0
|
141 |
+
*/
|
142 |
+
const SINGLE_TEMPLATE = 'standard';
|
143 |
+
|
144 |
+
/**
|
145 |
+
* @since 4.0.0
|
146 |
+
*/
|
147 |
+
const SHOW_SINGLE_SOCIAL = 'on';
|
148 |
+
|
149 |
+
}
|
inc/class/class.smartcat-team.php
DELETED
@@ -1,946 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
|
4 |
-
function sc_team_update_order() {
|
5 |
-
$post_id = $_POST['id'];
|
6 |
-
$sc_member_order = $_POST['sc_member_order'];
|
7 |
-
//update_post_meta($post_id, $meta_key, $sc_member_order)
|
8 |
-
update_post_meta($post_id, 'sc_member_order', $sc_member_order);
|
9 |
-
exit();
|
10 |
-
}
|
11 |
-
add_action('wp_ajax_sc_team_update_order', 'sc_team_update_order');
|
12 |
-
add_action('wp_ajax_sc_team_update_order', 'sc_team_update_order');
|
13 |
-
|
14 |
-
|
15 |
-
class SmartcatTeamPlugin {
|
16 |
-
|
17 |
-
const VERSION = '2.5.0';
|
18 |
-
const NAME = 'Our Team Showcase';
|
19 |
-
|
20 |
-
private static $instance;
|
21 |
-
private $options;
|
22 |
-
|
23 |
-
public static function instance() {
|
24 |
-
if ( !self::$instance ) :
|
25 |
-
self::$instance = new self;
|
26 |
-
self::$instance->get_options();
|
27 |
-
self::$instance->add_hooks();
|
28 |
-
endif;
|
29 |
-
}
|
30 |
-
|
31 |
-
public static function activate() {
|
32 |
-
|
33 |
-
$options = array(
|
34 |
-
'template' => 'grid',
|
35 |
-
'social' => 'yes',
|
36 |
-
'single_social' => 'yes',
|
37 |
-
'name' => 'yes',
|
38 |
-
'title' => 'yes',
|
39 |
-
'profile_link' => 'yes',
|
40 |
-
'member_count' => -1,
|
41 |
-
'text_color' => '1F7DCF',
|
42 |
-
'columns' => '3',
|
43 |
-
'margin' => 5,
|
44 |
-
'redirect' => true,
|
45 |
-
'single_image_style' => 'square',
|
46 |
-
'social_link' => 'new',
|
47 |
-
'card_margin' => 100,
|
48 |
-
'single_template' => 'standard',
|
49 |
-
'slug' => 'team_member'
|
50 |
-
);
|
51 |
-
|
52 |
-
if ( !get_option( 'smartcat_team_options' ) ) :
|
53 |
-
|
54 |
-
add_option( 'smartcat_team_options', $options );
|
55 |
-
$options[ 'redirect' ] = true;
|
56 |
-
update_option( 'smartcat_team_options', $options );
|
57 |
-
|
58 |
-
else :
|
59 |
-
$options = get_option( 'smartcat_team_options' );
|
60 |
-
|
61 |
-
if( !isset( $options['social_link'] ) ) :
|
62 |
-
$options['social_link'] = 'new';
|
63 |
-
endif;
|
64 |
-
|
65 |
-
if( !isset( $options['slug'] ) ) :
|
66 |
-
$options['slug'] = 'team_member';
|
67 |
-
endif;
|
68 |
-
|
69 |
-
update_option( 'smartcat_team_options', $options );
|
70 |
-
|
71 |
-
endif;
|
72 |
-
|
73 |
-
flush_rewrite_rules();
|
74 |
-
|
75 |
-
}
|
76 |
-
|
77 |
-
public static function deactivate() {
|
78 |
-
|
79 |
-
}
|
80 |
-
|
81 |
-
private function add_hooks() {
|
82 |
-
add_action( 'init', array( $this, 'team_members' ) );
|
83 |
-
add_action( 'init', array( $this, 'team_member_positions' ), 0 );
|
84 |
-
add_action( 'admin_init', array( $this, 'smartcat_team_activation_redirect' ) );
|
85 |
-
add_action( 'admin_menu', array( $this, 'smartcat_team_menu' ) );
|
86 |
-
add_action( 'admin_enqueue_scripts', array( $this, 'smartcat_team_load_admin_styles_scripts' ) );
|
87 |
-
add_action( 'wp_enqueue_scripts', array( $this, 'smartcat_team_load_styles_scripts' ) );
|
88 |
-
add_shortcode( 'our-team', array( $this, 'set_our_team' ) );
|
89 |
-
add_action( 'add_meta_boxes', array( $this, 'smartcat_team_member_info_box' ) );
|
90 |
-
add_action( 'save_post', array( $this, 'team_member_box_save' ) );
|
91 |
-
add_action( 'widgets_init', array( $this, 'wpb_load_widget' ) );
|
92 |
-
add_action( 'wp_ajax_smartcat_team_update_pm', array( $this, 'smartcat_team_update_order' ) );
|
93 |
-
add_action( 'wp_head', array( $this, 'sc_custom_styles' ) );
|
94 |
-
add_action( 'admin_head', array( $this, 'sc_custom_admin_styles' ) );
|
95 |
-
add_filter( 'the_content', array( $this, 'smartcat_set_single_content' ) );
|
96 |
-
add_filter( 'single_template', array( $this, 'smartcat_team_get_single_template' ) );
|
97 |
-
add_action( 'after_setup_theme', array( $this, 'add_featured_image_support' ) );
|
98 |
-
add_filter( 'manage_edit-team_member_columns', array( $this, 'set_columns') );
|
99 |
-
add_action( 'manage_team_member_posts_custom_column' , array( $this, 'custom_columns' ), 10, 2 );
|
100 |
-
}
|
101 |
-
|
102 |
-
public function set_columns( $columns ) {
|
103 |
-
|
104 |
-
unset( $columns['date'] );
|
105 |
-
|
106 |
-
$columns['team_member_title'] = __( 'Title' );
|
107 |
-
$columns['team_member_image'] = __( 'Image' );
|
108 |
-
|
109 |
-
return $columns;
|
110 |
-
|
111 |
-
}
|
112 |
-
|
113 |
-
public function custom_columns( $column, $post_id ){
|
114 |
-
|
115 |
-
switch( $column ) :
|
116 |
-
|
117 |
-
case 'team_member_title' :
|
118 |
-
echo get_post_meta( $post_id, 'team_member_title', TRUE );
|
119 |
-
break;
|
120 |
-
|
121 |
-
case 'team_member_image' :
|
122 |
-
echo get_the_post_thumbnail( $post_id, array( 50, 50 ) );
|
123 |
-
break;
|
124 |
-
|
125 |
-
|
126 |
-
endswitch;
|
127 |
-
|
128 |
-
}
|
129 |
-
|
130 |
-
private function get_options() {
|
131 |
-
if ( get_option( 'smartcat_team_options' ) ) :
|
132 |
-
$this->options = get_option( 'smartcat_team_options' );
|
133 |
-
endif;
|
134 |
-
}
|
135 |
-
|
136 |
-
|
137 |
-
public function smartcat_team_activation_redirect() {
|
138 |
-
if ( $this->options[ 'redirect' ] ) :
|
139 |
-
$old_val = $this->options;
|
140 |
-
$old_val[ 'redirect' ] = false;
|
141 |
-
update_option( 'smartcat_team_options', $old_val );
|
142 |
-
wp_safe_redirect( admin_url( 'edit.php?post_type=team_member&page=smartcat_team_settings' ) );
|
143 |
-
endif;
|
144 |
-
}
|
145 |
-
|
146 |
-
public function add_featured_image_support(){
|
147 |
-
add_theme_support('post-thumbnails');
|
148 |
-
}
|
149 |
-
|
150 |
-
public function smartcat_team_menu() {
|
151 |
-
|
152 |
-
add_submenu_page( 'edit.php?post_type=team_member', 'Settings', 'Settings', 'administrator', 'smartcat_team_settings', array( $this, 'smartcat_team_settings' ) );
|
153 |
-
add_submenu_page( 'edit.php?post_type=team_member', 'Re-Order Members', 'Re-Order Members', 'administrator', 'smartcat_team_reorder', array( $this, 'smartcat_team_reorder' ) );
|
154 |
-
add_submenu_page( 'edit.php?post_type=team_member', 'Documentation', 'Documentation', 'administrator', 'smartcat_team_documentation', array( $this, 'smartcat_team_documentation' ) );
|
155 |
-
add_submenu_page( 'edit.php?post_type=team_member', 'Add-ons', 'Add-ons', 'administrator', 'smartcat_team_addons', array( $this, 'smartcat_team_addons' ) );
|
156 |
-
}
|
157 |
-
|
158 |
-
public function smartcat_team_documentation(){
|
159 |
-
|
160 |
-
include_once SC_TEAM_PATH . 'admin/documentation.php';
|
161 |
-
|
162 |
-
}
|
163 |
-
|
164 |
-
public function smartcat_team_addons(){
|
165 |
-
|
166 |
-
include_once SC_TEAM_PATH . 'admin/addons.php';
|
167 |
-
|
168 |
-
}
|
169 |
-
|
170 |
-
public function smartcat_team_reorder() {
|
171 |
-
include_once SC_TEAM_PATH . 'admin/reorder.php';
|
172 |
-
}
|
173 |
-
|
174 |
-
public function smartcat_team_settings() {
|
175 |
-
|
176 |
-
if ( isset( $_REQUEST[ 'sc_our_team_save' ] ) && $_REQUEST[ 'sc_our_team_save' ] == 'Update' ) :
|
177 |
-
update_option( 'smartcat_team_options', $_REQUEST[ 'smartcat_team_options' ] );
|
178 |
-
endif;
|
179 |
-
|
180 |
-
include_once SC_TEAM_PATH . 'admin/options.php';
|
181 |
-
}
|
182 |
-
|
183 |
-
public function smartcat_team_load_admin_styles_scripts( $hook ) {
|
184 |
-
wp_enqueue_style( 'smartcat_team_admin_style', SC_TEAM_URL . 'inc/style/sc_our_team_admin.css' );
|
185 |
-
wp_enqueue_script( 'smartcat_team_color_script', SC_TEAM_URL . 'inc/script/jscolor/jscolor.js', array( 'jquery' ) );
|
186 |
-
wp_enqueue_script( 'smartcat_team_script', SC_TEAM_URL . 'inc/script/sc_our_team_admin.js', array( 'jquery' ) );
|
187 |
-
}
|
188 |
-
|
189 |
-
function smartcat_team_load_styles_scripts() {
|
190 |
-
|
191 |
-
// plugin main style
|
192 |
-
wp_enqueue_style( 'smartcat_team_default_style', SC_TEAM_URL . 'inc/style/sc_our_team.css', false, self::VERSION );
|
193 |
-
|
194 |
-
// plugin main script
|
195 |
-
wp_enqueue_script( 'smartcat_team_hc_script', SC_TEAM_URL . 'inc/script/hc.js', array( 'jquery' ), self::VERSION );
|
196 |
-
wp_enqueue_script( 'smartcat_team_carousel_script', SC_TEAM_URL . 'inc/script/carousel.js', array( 'jquery' ), self::VERSION );
|
197 |
-
wp_enqueue_script( 'smartcat_team_default_script', SC_TEAM_URL . 'inc/script/sc_our_team.js', array( 'jquery' ), self::VERSION );
|
198 |
-
}
|
199 |
-
|
200 |
-
function set_our_team( $atts ) {
|
201 |
-
extract( shortcode_atts( array(
|
202 |
-
'group' => '',
|
203 |
-
'template' => '',
|
204 |
-
'single_template' => '',
|
205 |
-
), $atts ) );
|
206 |
-
global $content;
|
207 |
-
|
208 |
-
ob_start();
|
209 |
-
|
210 |
-
if( $template == '' ) :
|
211 |
-
if ( $this->options[ 'template' ] === false or $this->options[ 'template' ] == '' ) :
|
212 |
-
include SC_TEAM_PATH . 'inc/template/grid.php';
|
213 |
-
else :
|
214 |
-
include SC_TEAM_PATH . 'inc/template/' . $this->options[ 'template' ] . '.php';
|
215 |
-
endif;
|
216 |
-
else :
|
217 |
-
|
218 |
-
if( file_exists( SC_TEAM_PATH . 'inc/template/' . $template . '.php') ) :
|
219 |
-
|
220 |
-
include SC_TEAM_PATH . 'inc/template/' . $template . '.php';
|
221 |
-
else :
|
222 |
-
include SC_TEAM_PATH . 'inc/template/grid.php';
|
223 |
-
endif;
|
224 |
-
endif;
|
225 |
-
|
226 |
-
$output = ob_get_clean();
|
227 |
-
return $output;
|
228 |
-
}
|
229 |
-
|
230 |
-
function team_members() {
|
231 |
-
$labels = array(
|
232 |
-
'name' => _x( 'Team', 'post type general name' ),
|
233 |
-
'singular_name' => _x( 'Team Member', 'post type singular name' ),
|
234 |
-
'add_new' => _x( 'Add New', 'team_member' ),
|
235 |
-
'add_new_item' => __( 'Add New Member' ),
|
236 |
-
'edit_item' => __( 'Edit Member' ),
|
237 |
-
'new_item' => __( 'New Team Member' ),
|
238 |
-
'all_items' => __( 'All Team Members' ),
|
239 |
-
'view_item' => __( 'View Team Member' ),
|
240 |
-
'search_items' => __( 'Search Team Members' ),
|
241 |
-
'not_found' => __( 'No member found' ),
|
242 |
-
'not_found_in_trash' => __( 'No member found in the Trash' ),
|
243 |
-
'parent_item_colon' => '',
|
244 |
-
);
|
245 |
-
$args = array(
|
246 |
-
'labels' => $labels,
|
247 |
-
'public' => true,
|
248 |
-
'publicly_queryable' => true,
|
249 |
-
'show_ui' => true,
|
250 |
-
'show_in_menu' => true,
|
251 |
-
'query_var' => true,
|
252 |
-
'rewrite' => array('slug' => $this->options['slug'],'with_front' => false),
|
253 |
-
'capability_type' => 'post',
|
254 |
-
'has_archive' => true,
|
255 |
-
'hierarchical' => false,
|
256 |
-
'menu_position' => null,
|
257 |
-
'menu_icon' => SC_TEAM_URL . 'inc/img/icon.png',
|
258 |
-
'supports' => array( 'title', 'editor', 'thumbnail' ),
|
259 |
-
|
260 |
-
);
|
261 |
-
register_post_type( 'team_member', $args );
|
262 |
-
}
|
263 |
-
|
264 |
-
public function team_member_positions() {
|
265 |
-
$labels = array(
|
266 |
-
'name' => _x( 'Groups', 'taxonomy general name' ),
|
267 |
-
'singular_name' => _x( 'Group', 'taxonomy singular name' ),
|
268 |
-
'search_items' => __( 'Search Groups' ),
|
269 |
-
'all_items' => __( 'All Groups' ),
|
270 |
-
'parent_item' => __( 'Parent Group' ),
|
271 |
-
'parent_item_colon' => __( 'Parent Group:' ),
|
272 |
-
'edit_item' => __( 'Edit Group' ),
|
273 |
-
'update_item' => __( 'Update Group' ),
|
274 |
-
'add_new_item' => __( 'Add New Group' ),
|
275 |
-
'new_item_name' => __( 'New Group' ),
|
276 |
-
'menu_name' => __( 'Groups' ),
|
277 |
-
);
|
278 |
-
$args = array(
|
279 |
-
'labels' => $labels,
|
280 |
-
'hierarchical' => true,
|
281 |
-
);
|
282 |
-
register_taxonomy( 'team_member_position', 'team_member', $args );
|
283 |
-
}
|
284 |
-
|
285 |
-
public function get_groups() {
|
286 |
-
|
287 |
-
return get_categories('taxonomy=team_member_position&type=team_member');
|
288 |
-
|
289 |
-
}
|
290 |
-
|
291 |
-
|
292 |
-
|
293 |
-
public function smartcat_team_member_info_box() {
|
294 |
-
|
295 |
-
add_meta_box(
|
296 |
-
'smartcat_team_member_info_box', __( 'Additional Information', 'myplugin_textdomain' ), array( $this, 'smartcat_team_member_info_box_content' ), 'team_member', 'normal', 'high'
|
297 |
-
);
|
298 |
-
}
|
299 |
-
|
300 |
-
public function smartcat_team_member_info_box_content( $post ) {
|
301 |
-
//nonce
|
302 |
-
wp_nonce_field( plugin_basename( __FILE__ ), 'smartcat_team_member_info_box_content_nonce' );
|
303 |
-
|
304 |
-
//social
|
305 |
-
|
306 |
-
echo '<p><em>Fields that are left blank, will simply not display any output</em></p>';
|
307 |
-
|
308 |
-
echo '<div class="sc_options_table">';
|
309 |
-
|
310 |
-
echo '<table class="widefat">';
|
311 |
-
|
312 |
-
echo '<tr><td><lablel for="team_member_title">Job Title</lablel></td>';
|
313 |
-
echo '<td><input type="text" value="' . get_post_meta( $post->ID, 'team_member_title', true ) . '" id="team_member_title" name="team_member_title" placeholder="Enter Job Title"/></td></tr>';
|
314 |
-
|
315 |
-
echo '<tr><td><lablel for="team_member_email"><img src="' . SC_TEAM_URL . 'inc/img/email.png" width="20px"/></label></td>';
|
316 |
-
echo '<td><input type="text" value="' . get_post_meta( $post->ID, 'team_member_email', true ) . '" id="team_member_email" name="team_member_email" placeholder="Enter Email Address"/></td></tr>';
|
317 |
-
|
318 |
-
echo '<tr><td><lablel for="team_member_facebook"><img src="' . SC_TEAM_URL . 'inc/img/fb.png" width="20px"/></label></td>';
|
319 |
-
echo '<td><input type="text" value="' . get_post_meta( $post->ID, 'team_member_facebook', true ) . '" id="team_member_facebook" name="team_member_facebook" placeholder="Enter Facebook URL"/></td></tr>';
|
320 |
-
|
321 |
-
echo '<tr><td><label for="team_member_twitter"><img src="' . SC_TEAM_URL . 'inc/img/twitter.png" width="20px"/></label></td>';
|
322 |
-
echo '<td><input type="text" value="' . get_post_meta( $post->ID, 'team_member_twitter', true ) . '" id="team_member_twitter" name="team_member_twitter" placeholder="Enter Twitter URL"/></td></tr>';
|
323 |
-
|
324 |
-
echo '<tr><td><lablel for="team_member_linkedin"><img src="' . SC_TEAM_URL . 'inc/img/linkedin.png" width="20px"/></label></td>';
|
325 |
-
echo '<td><input type="text" value="' . get_post_meta( $post->ID, 'team_member_linkedin', true ) . '" id="team_member_linkedin" name="team_member_linkedin" placeholder="Enter Linkedin URL"/></td></tr>';
|
326 |
-
|
327 |
-
echo '<tr><td><lablel for="team_member_gplus"><img src="' . SC_TEAM_URL . 'inc/img/google.png" width="20px"/></label></td>';
|
328 |
-
echo '<td><input type="text" value="' . get_post_meta( $post->ID, 'team_member_gplus', true ) . '" id="team_member_gplus" name="team_member_gplus" placeholder="Enter Google Plus URL"/></td></tr>';
|
329 |
-
|
330 |
-
echo '<tr><td><lablel for="team_member_phone"><img src="' . SC_TEAM_URL . 'inc/img/phone.png" width="20px"/></label></td>';
|
331 |
-
echo '<td><input type="text" value="' . get_post_meta( $post->ID, 'team_member_phone', true ) . '" id="team_member_phone" name="team_member_phone" placeholder="Enter Phone Number"/></td></tr>';
|
332 |
-
|
333 |
-
echo '<tr><td><lablel for="team_member_instagram"><img src="' . SC_TEAM_URL . 'inc/img/instagram.png" width="20px"/></label></td>';
|
334 |
-
echo '<td><input type="text" value="' . get_post_meta($post->ID, 'team_member_instagram', true) . '" id="team_member_instagram" name="team_member_instagram" placeholder="Enter Instagram URL"/></td></tr>';
|
335 |
-
|
336 |
-
echo '<tr><td><lablel for="team_member_pinterest"><img src="' . SC_TEAM_URL . 'inc/img/pinterest.png" width="20px"/></label></td>';
|
337 |
-
echo '<td><input type="text" value="' . get_post_meta($post->ID, 'team_member_pinterest', true) . '" id="team_member_pinterest" name="team_member_pinterest" placeholder="Enter pinterest URL"/></td></tr>';
|
338 |
-
|
339 |
-
echo '<tr><td><lablel for="team_member_website"><img src="' . SC_TEAM_URL . 'inc/img/website.png" width="20px"/></label></td>';
|
340 |
-
echo '<td><input type="text" value="' . get_post_meta($post->ID, 'team_member_website', true) . '" id="team_member_website" name="team_member_website" placeholder="Enter Personal Website URL"/></td></tr>';
|
341 |
-
|
342 |
-
//
|
343 |
-
// echo '<tr><th><lablel for="team_member_qoute">Personal Quote </lablel></th>';
|
344 |
-
// echo '<td><em style="color: red; font-size: 10px">pro version</em></td></tr>';
|
345 |
-
|
346 |
-
|
347 |
-
// echo '<tr><th><lablel for="team_member_qoute">Attributes / Skills / Ratings</lablel></th>';
|
348 |
-
// echo '<td><em style="color: red; font-size: 10px">pro version</em></td></tr>';
|
349 |
-
|
350 |
-
echo '</table>';
|
351 |
-
echo '</div><hr>';
|
352 |
-
|
353 |
-
$posts = get_posts(array(
|
354 |
-
'posts_per_page' => -1,
|
355 |
-
'post_type' => 'post',
|
356 |
-
));
|
357 |
-
|
358 |
-
echo '<div class="sc_options_table">'
|
359 |
-
. '<h4>Authored / Favorite Articles</h4>'
|
360 |
-
. '<table class="widefat"><tr>'
|
361 |
-
. '<td colspan="2">Show <input type="radio" name="team_member_article_bool" value="on" ' . checked(get_post_meta($post->ID, 'team_member_article_bool', true), 'on', false) . '/> '
|
362 |
-
. 'Hide <input type="radio" name="team_member_article_bool" value="off" ' . checked(get_post_meta($post->ID, 'team_member_article_bool', true), 'off', false) . ' />'
|
363 |
-
. '</td>'
|
364 |
-
. '</tr><tr><td>Title</td>'
|
365 |
-
. '<td><input type="text" name="team_member_article_title" placeholder="Enter the title" value="' . get_post_meta($post->ID, 'team_member_article_title', true) . '"/></td></tr>';
|
366 |
-
|
367 |
-
echo '<tr><td>Article 1</td>'
|
368 |
-
. '<td><select name="team_member_article1">'
|
369 |
-
. '<option value="">Select Article</option>';
|
370 |
-
|
371 |
-
foreach ($posts as $the_post) :
|
372 |
-
|
373 |
-
echo '<option value="' . $the_post->ID . '" ' . selected($the_post->ID, get_post_meta($post->ID, 'team_member_article1', true), true) . '>' . $the_post->post_title . '</option>';
|
374 |
-
|
375 |
-
endforeach;
|
376 |
-
|
377 |
-
echo '</select></td>'
|
378 |
-
. '</tr>';
|
379 |
-
|
380 |
-
|
381 |
-
echo '<tr><td>Article 2</td>'
|
382 |
-
. '<td><select name="team_member_article2">'
|
383 |
-
. '<option value="">Select Article</option>';
|
384 |
-
|
385 |
-
foreach ($posts as $the_post) :
|
386 |
-
|
387 |
-
echo '<option value="' . $the_post->ID . '" ' . selected($the_post->ID, get_post_meta($post->ID, 'team_member_article2', true), true) . '>' . $the_post->post_title . '</option>';
|
388 |
-
|
389 |
-
endforeach;
|
390 |
-
|
391 |
-
echo '</select></td>'
|
392 |
-
. '</tr>';
|
393 |
-
|
394 |
-
echo '<tr><td>Article 3</td>'
|
395 |
-
. '<td><select name="team_member_article3">'
|
396 |
-
. '<option value="">Select Article</option>';
|
397 |
-
|
398 |
-
foreach ($posts as $the_post) :
|
399 |
-
|
400 |
-
echo '<option value="' . $the_post->ID . '" ' . selected($the_post->ID, get_post_meta($post->ID, 'team_member_article3', true), true) . '>' . $the_post->post_title . '</option>';
|
401 |
-
|
402 |
-
endforeach;
|
403 |
-
|
404 |
-
echo '</select></td>'
|
405 |
-
. '</tr>';
|
406 |
-
|
407 |
-
|
408 |
-
echo '</table>'
|
409 |
-
. ''
|
410 |
-
. ''
|
411 |
-
. '</div><hr>';
|
412 |
-
|
413 |
-
echo '<div class="sc_options_table">'
|
414 |
-
. '<h4>Attributes / Skills / Ratings <em style="font-size: 11px; color: #CC0000"> - Pro version</em></h4>'
|
415 |
-
. '<table class="widefat"><tr>'
|
416 |
-
. '<td colspan="2">Show <input type="radio" name="team_member_skill_bool" value="on" disabled/> '
|
417 |
-
. 'Hide <input type="radio" name="team_member_skill_bool" value="off" disabled/>'
|
418 |
-
. '</td></tr><tr>'
|
419 |
-
. '<td>Title</td><td colspan="2">'
|
420 |
-
. '<input type="text" name="team_member_skill_title" value="" disabled/>'
|
421 |
-
. '</td></tr><tr>'
|
422 |
-
. '<td>Attribute/Skill #1</td>'
|
423 |
-
. '<td><input type="text" name="team_member_skill1" placeholder="Title" value="" disabled/></td>'
|
424 |
-
. '<td><input type="text" name="team_member_skill_value1" placeholder="Skill rating( 1 to 10 )" value="" disabled/></td></tr>'
|
425 |
-
. '<td>Attribute/Skill #2</td>'
|
426 |
-
. '<td><input type="text" name="team_member_skill2" placeholder="Title" value="" disabled/></td>'
|
427 |
-
. '<td><input type="text" name="team_member_skill_value2" placeholder="Skill rating( 1 to 10 )" value="" disabled/></td></tr>'
|
428 |
-
. '<td>Attribute/Skill #3</td>'
|
429 |
-
. '<td><input type="text" name="team_member_skill3" placeholder="Title" value="" disabled/></td>'
|
430 |
-
. '<td><input type="text" name="team_member_skill_value3" placeholder="Skill rating( 1 to 10 )" value="" disabled/</td></tr>'
|
431 |
-
. '<td>Attribute/Skill #4</td>'
|
432 |
-
. '<td><input type="text" name="team_member_skill4" placeholder="Title" value="" disabled/></td>'
|
433 |
-
. '<td><input type="text" name="team_member_skill_value4" placeholder="Skill rating( 1 to 10 )" value="" disabled/></td></tr>';
|
434 |
-
|
435 |
-
echo '</table></div>'
|
436 |
-
. '<div class="clear"></div><hr>';
|
437 |
-
|
438 |
-
?>
|
439 |
-
|
440 |
-
<div class="sc_options_table">
|
441 |
-
|
442 |
-
<h4>Interests / Tags / Additional Skills <em style="font-size: 11px; color: #CC0000"> - Pro version</em></h4>
|
443 |
-
<table class="widefat">
|
444 |
-
<tr>
|
445 |
-
<td colspan="2">
|
446 |
-
Show <input disabled type="radio" name="team_member_tags_bool" value="on" <?php checked('on', get_post_meta($post->ID, 'team_member_tags_bool', true)); ?>/> Hide <input type="radio" name="team_member_tags_bool" value="off" <?php checked('off', get_post_meta($post->ID, 'team_member_tags_bool', true)); ?>/>
|
447 |
-
</td>
|
448 |
-
</tr>
|
449 |
-
<tr>
|
450 |
-
<td>Title</td>
|
451 |
-
<td><input disabled type="text" name="team_member_tags_title" placeholder="Enter the label for the tags" value="<?php echo get_post_meta($post->ID, 'team_member_tags_title', true) ?>"/></td>
|
452 |
-
</tr>
|
453 |
-
<tr>
|
454 |
-
<td>Attributes</td>
|
455 |
-
<td><textarea disabled name="team_member_tags" placeholder="Enter attributes, comma separated" style="width: 100%"><?php echo get_post_meta($post->ID, 'team_member_tags', true) ?></textarea></td>
|
456 |
-
</tr>
|
457 |
-
|
458 |
-
|
459 |
-
</table>
|
460 |
-
|
461 |
-
</div>
|
462 |
-
|
463 |
-
|
464 |
-
|
465 |
-
<?php
|
466 |
-
|
467 |
-
|
468 |
-
}
|
469 |
-
|
470 |
-
public function team_member_box_save( $post_id ) {
|
471 |
-
|
472 |
-
$slug = 'team_member';
|
473 |
-
|
474 |
-
if ( isset( $_POST[ 'post_type' ] ) ) {
|
475 |
-
if ( $slug != $_POST[ 'post_type' ] ) {
|
476 |
-
return;
|
477 |
-
}
|
478 |
-
}
|
479 |
-
|
480 |
-
// get var values
|
481 |
-
if ( get_post_meta( $post_id, 'sc_member_order', true ) == '' || get_post_meta( $post_id, 'sc_member_order', true ) === FALSE )
|
482 |
-
update_post_meta( $post_id, 'sc_member_order', 0 );
|
483 |
-
|
484 |
-
|
485 |
-
if ( isset( $_REQUEST[ 'team_member_title' ] ) ) {
|
486 |
-
$facebook_url = $_POST[ 'team_member_title' ];
|
487 |
-
update_post_meta( $post_id, 'team_member_title', $facebook_url );
|
488 |
-
}
|
489 |
-
|
490 |
-
if ( isset( $_REQUEST[ 'team_member_email' ] ) ) {
|
491 |
-
$facebook_url = $_POST[ 'team_member_email' ];
|
492 |
-
update_post_meta( $post_id, 'team_member_email', $facebook_url );
|
493 |
-
}
|
494 |
-
|
495 |
-
|
496 |
-
if ( isset( $_REQUEST[ 'team_member_facebook' ] ) ) {
|
497 |
-
$facebook_url = $_POST[ 'team_member_facebook' ];
|
498 |
-
update_post_meta( $post_id, 'team_member_facebook', $facebook_url );
|
499 |
-
}
|
500 |
-
|
501 |
-
if ( isset( $_REQUEST[ 'team_member_twitter' ] ) ) {
|
502 |
-
$twitter_url = $_POST[ 'team_member_twitter' ];
|
503 |
-
update_post_meta( $post_id, 'team_member_twitter', $twitter_url );
|
504 |
-
}
|
505 |
-
|
506 |
-
if ( isset( $_REQUEST[ 'team_member_linkedin' ] ) ) {
|
507 |
-
$linkedin_url = $_POST[ 'team_member_linkedin' ];
|
508 |
-
update_post_meta( $post_id, 'team_member_linkedin', $linkedin_url );
|
509 |
-
}
|
510 |
-
|
511 |
-
if ( isset( $_REQUEST[ 'team_member_gplus' ] ) ) {
|
512 |
-
$gplus_url = $_POST[ 'team_member_gplus' ];
|
513 |
-
update_post_meta( $post_id, 'team_member_gplus', $gplus_url );
|
514 |
-
|
515 |
-
}
|
516 |
-
|
517 |
-
if (isset($_REQUEST['team_member_instagram'])) {
|
518 |
-
$instagram_url = $_POST['team_member_instagram'];
|
519 |
-
update_post_meta($post_id, 'team_member_instagram', $instagram_url);
|
520 |
-
}
|
521 |
-
|
522 |
-
if (isset($_REQUEST['team_member_pinterest'])) {
|
523 |
-
$pinterest_url = $_POST['team_member_pinterest'];
|
524 |
-
update_post_meta($post_id, 'team_member_pinterest', $pinterest_url);
|
525 |
-
}
|
526 |
-
|
527 |
-
if (isset($_REQUEST['team_member_website'])) {
|
528 |
-
$website_url = $_POST['team_member_website'];
|
529 |
-
update_post_meta($post_id, 'team_member_website', $website_url);
|
530 |
-
}
|
531 |
-
|
532 |
-
if (isset($_REQUEST['team_member_tags_bool'])) {
|
533 |
-
$tags_bool = $_POST['team_member_tags_bool'];
|
534 |
-
update_post_meta($post_id, 'team_member_tags_bool', $tags_bool);
|
535 |
-
}
|
536 |
-
|
537 |
-
if (isset($_REQUEST['team_member_tags_title'])) {
|
538 |
-
$tags_title = $_POST['team_member_tags_title'];
|
539 |
-
update_post_meta($post_id, 'team_member_tags_title', $tags_title);
|
540 |
-
}
|
541 |
-
|
542 |
-
if (isset($_REQUEST['team_member_tags'])) {
|
543 |
-
$tags = $_POST['team_member_tags'];
|
544 |
-
update_post_meta($post_id, 'team_member_tags', $tags);
|
545 |
-
}
|
546 |
-
|
547 |
-
if ( isset( $_REQUEST[ 'team_member_phone' ] ) ) {
|
548 |
-
update_post_meta( $post_id, 'team_member_phone', $_POST[ 'team_member_phone' ] );
|
549 |
-
}
|
550 |
-
|
551 |
-
if ( isset( $_REQUEST[ 'team_member_skill1' ] ) ) {
|
552 |
-
$skill = $_POST[ 'team_member_skill1' ];
|
553 |
-
update_post_meta( $post_id, 'team_member_skill1', $skill );
|
554 |
-
}
|
555 |
-
|
556 |
-
if ( isset( $_REQUEST[ 'team_member_skill_value1' ] ) ) {
|
557 |
-
$value = $_POST[ 'team_member_skill_value1' ];
|
558 |
-
update_post_meta( $post_id, 'team_member_skill_value1', $value );
|
559 |
-
}
|
560 |
-
|
561 |
-
if ( isset( $_REQUEST[ 'team_member_skill2' ] ) ) {
|
562 |
-
$skill = $_POST[ 'team_member_skill2' ];
|
563 |
-
update_post_meta( $post_id, 'team_member_skill2', $skill );
|
564 |
-
}
|
565 |
-
|
566 |
-
if ( isset( $_REQUEST[ 'team_member_skill_value2' ] ) ) {
|
567 |
-
$value = $_POST[ 'team_member_skill_value2' ];
|
568 |
-
update_post_meta( $post_id, 'team_member_skill_value2', $value );
|
569 |
-
}
|
570 |
-
|
571 |
-
if ( isset( $_REQUEST[ 'team_member_skill3' ] ) ) {
|
572 |
-
$skill = $_POST[ 'team_member_skill3' ];
|
573 |
-
update_post_meta( $post_id, 'team_member_skill3', $skill );
|
574 |
-
}
|
575 |
-
|
576 |
-
if ( isset( $_REQUEST[ 'team_member_skill_value3' ] ) ) {
|
577 |
-
$value = $_POST[ 'team_member_skill_value3' ];
|
578 |
-
update_post_meta( $post_id, 'team_member_skill_value3', $value );
|
579 |
-
}
|
580 |
-
|
581 |
-
if ( isset( $_REQUEST[ 'team_member_skill4' ] ) ) {
|
582 |
-
$skill = $_POST[ 'team_member_skill4' ];
|
583 |
-
update_post_meta( $post_id, 'team_member_skill4', $skill );
|
584 |
-
}
|
585 |
-
|
586 |
-
if ( isset( $_REQUEST[ 'team_member_skill_value4' ] ) ) {
|
587 |
-
$value = $_POST[ 'team_member_skill_value4' ];
|
588 |
-
update_post_meta( $post_id, 'team_member_skill_value4', $value );
|
589 |
-
}
|
590 |
-
|
591 |
-
if ( isset( $_REQUEST[ 'team_member_qoute' ] ) ) {
|
592 |
-
$value = $_POST[ 'team_member_qoute' ];
|
593 |
-
update_post_meta( $post_id, 'team_member_qoute', $value );
|
594 |
-
}
|
595 |
-
|
596 |
-
if (isset($_REQUEST['team_member_article_bool'])) {
|
597 |
-
$article_bool = $_POST['team_member_article_bool'];
|
598 |
-
update_post_meta($post_id, 'team_member_article_bool', $article_bool);
|
599 |
-
}
|
600 |
-
|
601 |
-
if (isset($_REQUEST['team_member_article_title'])) {
|
602 |
-
$value = $_POST['team_member_article_title'];
|
603 |
-
update_post_meta($post_id, 'team_member_article_title', $value);
|
604 |
-
}
|
605 |
-
|
606 |
-
if (isset($_REQUEST['team_member_article1'])) {
|
607 |
-
$value = $_POST['team_member_article1'];
|
608 |
-
update_post_meta($post_id, 'team_member_article1', $value);
|
609 |
-
}
|
610 |
-
|
611 |
-
if (isset($_REQUEST['team_member_article2'])) {
|
612 |
-
$value = $_POST['team_member_article2'];
|
613 |
-
update_post_meta($post_id, 'team_member_article2', $value);
|
614 |
-
}
|
615 |
-
|
616 |
-
if (isset($_REQUEST['team_member_article3'])) {
|
617 |
-
$value = $_POST['team_member_article3'];
|
618 |
-
update_post_meta($post_id, 'team_member_article3', $value);
|
619 |
-
}
|
620 |
-
|
621 |
-
|
622 |
-
}
|
623 |
-
|
624 |
-
|
625 |
-
public function wpb_load_widget() {
|
626 |
-
register_widget( 'smartcat_team_widget' );
|
627 |
-
}
|
628 |
-
|
629 |
-
|
630 |
-
public function smartcat_team_update_order() {
|
631 |
-
$post_id = $_POST[ 'id' ];
|
632 |
-
$sc_member_order = $_POST[ 'sc_member_order' ];
|
633 |
-
//update_post_meta($post_id, $meta_key, $sc_member_order)
|
634 |
-
update_post_meta( $post_id, 'sc_member_order', $sc_member_order );
|
635 |
-
}
|
636 |
-
|
637 |
-
public function sc_custom_admin_styles() { ?>
|
638 |
-
|
639 |
-
<style>
|
640 |
-
#menu-posts-team_member ul li:last-child a{ color: #A2CB86 !important; }
|
641 |
-
</style>
|
642 |
-
<?php }
|
643 |
-
public function sc_custom_styles() {
|
644 |
-
?>
|
645 |
-
<style>
|
646 |
-
|
647 |
-
#sc_our_team a,
|
648 |
-
.sc_our_team_lightbox .name,
|
649 |
-
.sc_personal_quote span.sc_team_icon-quote-left{ color: #<?php echo $this->options['text_color']; ?>; }
|
650 |
-
.grid#sc_our_team .sc_team_member .sc_team_member_name,
|
651 |
-
.grid#sc_our_team .sc_team_member .sc_team_member_jobtitle,
|
652 |
-
.grid_circles#sc_our_team .sc_team_member .sc_team_member_jobtitle,
|
653 |
-
.grid_circles#sc_our_team .sc_team_member .sc_team_member_name,
|
654 |
-
#sc_our_team_lightbox .progress,
|
655 |
-
.sc_our_team_panel .sc-right-panel .sc-name,
|
656 |
-
#sc_our_team .sc_team_member .icons span,
|
657 |
-
.sc_our_team_panel .sc-right-panel .sc-skills .progress,
|
658 |
-
#sc_our_team_lightbox .sc_our_team_lightbox .social span,
|
659 |
-
.sc_team_single_member .sc_team_single_skills .progress{ background: #<?php echo $this->options[ 'text_color' ]; ?>;}
|
660 |
-
.stacked#sc_our_team .smartcat_team_member{ border-color: #<?php echo $this->options[ 'text_color' ]; ?>;}
|
661 |
-
/*.grid#sc_our_team .sc_team_member_inner{ height: <?php echo $this->options[ 'height' ]; ?>px; }*/
|
662 |
-
.grid#sc_our_team .sc_team_member{ padding: <?php echo $this->options['margin']; ?>px;}
|
663 |
-
#sc_our_team_lightbox .sc_our_team_lightbox{ margin-top: <?php echo $this->options['card_margin']; ?>px }
|
664 |
-
|
665 |
-
</style>
|
666 |
-
<?php
|
667 |
-
}
|
668 |
-
|
669 |
-
public function smartcat_set_single_content($content) {
|
670 |
-
global $post;
|
671 |
-
|
672 |
-
if (is_single()) :
|
673 |
-
if ($post->post_type == 'team_member' &&
|
674 |
-
$this->options['single_template'] == 'standard' &&
|
675 |
-
$this->options['single_social'] == 'yes'
|
676 |
-
) :
|
677 |
-
$facebook = get_post_meta(get_the_ID(), 'team_member_facebook', true);
|
678 |
-
$twitter = get_post_meta(get_the_ID(), 'team_member_twitter', true);
|
679 |
-
$linkedin = get_post_meta(get_the_ID(), 'team_member_linkedin', true);
|
680 |
-
$gplus = get_post_meta(get_the_ID(), 'team_member_gplus', true);
|
681 |
-
$email = get_post_meta(get_the_ID(), 'team_member_email', true);
|
682 |
-
$phone = get_post_meta(get_the_ID(), 'team_member_phone', true);
|
683 |
-
$instagram = get_post_meta(get_the_ID(), 'team_member_instagram', true);
|
684 |
-
$pinterest = get_post_meta(get_the_ID(), 'team_member_pinterest', true);
|
685 |
-
$website = get_post_meta(get_the_ID(), 'team_member_website', true);
|
686 |
-
|
687 |
-
|
688 |
-
$content .= '<div class="smartcat_team_single_icons">';
|
689 |
-
$content .= $this->smartcat_get_social_content($facebook, $twitter, $linkedin, $gplus, $email, $phone, $instagram, $pinterest, $website);
|
690 |
-
$content .= '</div><hr>';
|
691 |
-
|
692 |
-
if (null !== get_post_meta(get_the_ID(), 'team_member_article_bool', true) && get_post_meta(get_the_ID(), 'team_member_article_bool', true) == 'on') :
|
693 |
-
|
694 |
-
$content .= '<div class="sc_team_posts sc_team_post">
|
695 |
-
<h3 class="skills-title">' . get_post_meta(get_the_ID(), 'team_member_article_title', true) . '</h3>';
|
696 |
-
|
697 |
-
$post1 = get_post_meta(get_the_ID(), 'team_member_article1', true) > 0 ? get_post(get_post_meta(get_the_ID(), 'team_member_article1', true)) : null;
|
698 |
-
$post2 = get_post_meta(get_the_ID(), 'team_member_article2', true) > 0 ? get_post(get_post_meta(get_the_ID(), 'team_member_article2', true)) : null;
|
699 |
-
$post3 = get_post_meta(get_the_ID(), 'team_member_article3', true) > 0 ? get_post(get_post_meta(get_the_ID(), 'team_member_article3', true)) : null;
|
700 |
-
|
701 |
-
$content .= '<div class="sc-team-member-posts">
|
702 |
-
|
703 |
-
<div>';
|
704 |
-
|
705 |
-
if( $post1 ) :
|
706 |
-
if (get_the_post_thumbnail($post1->ID, 'medium')) :
|
707 |
-
$content .= '<div class="width25 left">' . get_the_post_thumbnail($post1->ID, 'medium') . '</div>';
|
708 |
-
endif;
|
709 |
-
|
710 |
-
$content .= '<div class="width75 left">
|
711 |
-
<a href="' . get_the_permalink($post1->ID) . '">' . get_the_title($post1->ID) . '</a>
|
712 |
-
</div>
|
713 |
-
</div>
|
714 |
-
<div>';
|
715 |
-
endif;
|
716 |
-
|
717 |
-
if( $post2 ) :
|
718 |
-
if (get_the_post_thumbnail($post2->ID, 'medium')) :
|
719 |
-
$content .= '<div class="width25 left">' . get_the_post_thumbnail($post2->ID, 'medium') . '</div>';
|
720 |
-
endif;
|
721 |
-
|
722 |
-
$content .= '<div class="width75 left">
|
723 |
-
<a href="' . get_the_permalink($post2->ID) . '">' . get_the_title($post2->ID) . '</a>
|
724 |
-
</div>
|
725 |
-
</div>
|
726 |
-
<div>';
|
727 |
-
endif;
|
728 |
-
|
729 |
-
if( $post3 ) :
|
730 |
-
if (get_the_post_thumbnail($post3->ID, 'medium')) :
|
731 |
-
$content .= '<div class="width25 left">' . get_the_post_thumbnail($post3->ID, 'medium') . '</div>';
|
732 |
-
endif;
|
733 |
-
|
734 |
-
$content .= '<div class="width75 left">
|
735 |
-
<a href="' . get_the_permalink($post3->ID) . '">' . get_the_title($post3->ID) . '</a>
|
736 |
-
</div>
|
737 |
-
</div>
|
738 |
-
</div>';
|
739 |
-
endif;
|
740 |
-
|
741 |
-
echo '</div>';
|
742 |
-
endif;
|
743 |
-
|
744 |
-
endif;
|
745 |
-
else :
|
746 |
-
|
747 |
-
endif;
|
748 |
-
|
749 |
-
return $content;
|
750 |
-
}
|
751 |
-
|
752 |
-
public function add_target() {
|
753 |
-
|
754 |
-
if( $this->options['social_link'] == 'new' ) :
|
755 |
-
|
756 |
-
return 'target="_BLANK"';
|
757 |
-
|
758 |
-
endif;
|
759 |
-
|
760 |
-
|
761 |
-
}
|
762 |
-
|
763 |
-
public function set_social($id) {
|
764 |
-
|
765 |
-
$facebook = get_post_meta($id, 'team_member_facebook', true);
|
766 |
-
$twitter = get_post_meta($id, 'team_member_twitter', true);
|
767 |
-
$linkedin = get_post_meta($id, 'team_member_linkedin', true);
|
768 |
-
$gplus = get_post_meta($id, 'team_member_gplus', true);
|
769 |
-
$email = get_post_meta($id, 'team_member_email', true);
|
770 |
-
$phone = get_post_meta($id, 'team_member_phone', true);
|
771 |
-
$pinterest = get_post_meta($id, 'team_member_pinterest', true);
|
772 |
-
$instagram = get_post_meta($id, 'team_member_instagram', true);
|
773 |
-
$website = get_post_meta($id, 'team_member_website', true);
|
774 |
-
|
775 |
-
|
776 |
-
$this->get_social($facebook, $twitter, $linkedin, $gplus, $email, $phone, $pinterest, $instagram, $website);
|
777 |
-
|
778 |
-
}
|
779 |
-
|
780 |
-
public function get_social($facebook, $twitter, $linkedin, $gplus, $email, $phone, $pinterest, $instagram, $website) {
|
781 |
-
|
782 |
-
if ($facebook != '')
|
783 |
-
echo '<a ' . $this->add_target() . ' href="' . $facebook . '"><img src="' . SC_TEAM_URL . 'inc/img/fb.png" class="sc-social"/></a>';
|
784 |
-
if ($twitter != '')
|
785 |
-
echo '<a ' . $this->add_target() . ' href="' . $twitter . '"><img src="' . SC_TEAM_URL . 'inc/img/twitter.png" class="sc-social"/></a>';
|
786 |
-
if ($gplus != '')
|
787 |
-
echo '<a ' . $this->add_target() . ' href="' . $gplus . '"><img src="' . SC_TEAM_URL . 'inc/img/google.png" class="sc-social"/></a>';
|
788 |
-
if ($linkedin != '')
|
789 |
-
echo '<a ' . $this->add_target() . ' href="' . $linkedin . '"><img src="' . SC_TEAM_URL . 'inc/img/linkedin.png" class="sc-social"/></a>';
|
790 |
-
|
791 |
-
if ($pinterest != '')
|
792 |
-
echo '<a ' . $this->add_target() . ' href="' . $pinterest . '"><img src="' . SC_TEAM_URL . 'inc/img/pinterest.png" class="sc-social"/></a>';
|
793 |
-
if ($instagram != '')
|
794 |
-
echo '<a ' . $this->add_target() . ' href="' . $instagram . '"><img src="' . SC_TEAM_URL . 'inc/img/instagram.png" class="sc-social"/></a>';
|
795 |
-
if ($website != '')
|
796 |
-
echo '<a ' . $this->add_target() . ' href="' . $website . '"><img src="' . SC_TEAM_URL . 'inc/img/website.png" class="sc-social"/></a>';
|
797 |
-
if ($email != '')
|
798 |
-
echo '<a href=mailto:' . $email . '><img src="' . SC_TEAM_URL . 'inc/img/email.png" class="sc-social"/></a>';
|
799 |
-
if ($phone != '')
|
800 |
-
echo '<a href=tel:' . $phone . '><img src="' . SC_TEAM_URL . 'inc/img/phone.png" class="sc-social"/></a>';
|
801 |
-
}
|
802 |
-
|
803 |
-
|
804 |
-
public function smartcat_get_social_content($facebook, $twitter, $linkedin, $gplus, $email, $phone, $pinterest, $instagram, $website) {
|
805 |
-
|
806 |
-
$content = null;
|
807 |
-
|
808 |
-
if ('yes' == $this->options['social']) {
|
809 |
-
if ($facebook != '')
|
810 |
-
$content .= '<a ' . $this->add_target() . ' href="' . $facebook . '"><img src="' . SC_TEAM_URL . 'inc/img/fb.png" class="sc-social"/></a>';
|
811 |
-
|
812 |
-
if ($twitter != '')
|
813 |
-
$content .= '<a ' . $this->add_target() . ' href="' . $twitter . '"><img src="' . SC_TEAM_URL . 'inc/img/twitter.png" class="sc-social"/></a>';
|
814 |
-
|
815 |
-
if ($gplus != '')
|
816 |
-
$content .= '<a ' . $this->add_target() . ' href="' . $gplus . '"><img src="' . SC_TEAM_URL . 'inc/img/google.png" class="sc-social"/></a>';
|
817 |
-
|
818 |
-
if ($linkedin != '')
|
819 |
-
$content .= '<a ' . $this->add_target() . ' href="' . $linkedin . '"><img src="' . SC_TEAM_URL . 'inc/img/linkedin.png" class="sc-social"/></a>';
|
820 |
-
|
821 |
-
if ($pinterest != '')
|
822 |
-
$content .= '<a ' . $this->add_target() . ' href="' . $pinterest . '"><img src="' . SC_TEAM_URL . 'inc/img/pinterest.png" class="sc-social"/></a>';
|
823 |
-
|
824 |
-
if ($instagram != '')
|
825 |
-
$content .= '<a ' . $this->add_target() . ' href="' . $instagram . '"><img src="' . SC_TEAM_URL . 'inc/img/instagram.png" class="sc-social"/></a>';
|
826 |
-
|
827 |
-
if ($email != '')
|
828 |
-
$content .= '<a href=mailto:' . $email . '><img src="' . SC_TEAM_URL . 'inc/img/email.png" class="sc-social"/></a>';
|
829 |
-
|
830 |
-
if ($phone != '')
|
831 |
-
$content .= '<a href=tel:' . $phone . '><img src="' . SC_TEAM_URL . 'inc/img/phone.png" class="sc-social"/></a>';
|
832 |
-
|
833 |
-
if ($website != '')
|
834 |
-
$content .= '<a href=' . $website . '><img src="' . SC_TEAM_URL . 'inc/img/website.png" class="sc-social"/></a>';
|
835 |
-
}
|
836 |
-
return $content;
|
837 |
-
}
|
838 |
-
|
839 |
-
public function get_single_social( $social ) {
|
840 |
-
|
841 |
-
if ( 'yes' == $this->options[ 'social' ] ) :
|
842 |
-
if ( $social != '' )
|
843 |
-
echo '<li><a href="' . $social . '"><img src="' . SC_TEAM_URL . 'inc/img/fb.png" class="sc-social"/></a></li>';
|
844 |
-
|
845 |
-
endif;
|
846 |
-
|
847 |
-
}
|
848 |
-
|
849 |
-
public function sc_get_args( $group ) {
|
850 |
-
$args = array(
|
851 |
-
'post_type' => 'team_member',
|
852 |
-
'meta_key' => 'sc_member_order',
|
853 |
-
'orderby' => 'meta_value_num',
|
854 |
-
'order' => 'ASC',
|
855 |
-
'team_member_position' => $group,
|
856 |
-
'posts_per_page' => $this->options[ 'member_count' ],
|
857 |
-
);
|
858 |
-
return $args;
|
859 |
-
}
|
860 |
-
|
861 |
-
public function smartcat_team_get_single_template( $single_template ) {
|
862 |
-
|
863 |
-
global $post;
|
864 |
-
|
865 |
-
if ( $post->post_type == 'team_member' && 'custom' == $this->options[ 'single_template' ] ) :
|
866 |
-
|
867 |
-
if( file_exists( get_stylesheet_directory() . '/team_members_template.php')) :
|
868 |
-
|
869 |
-
$single_template = get_stylesheet_directory() . '/team_members_template.php';
|
870 |
-
|
871 |
-
else :
|
872 |
-
|
873 |
-
$single_template = SC_TEAM_PATH . 'inc/template/team_members_template.php';
|
874 |
-
|
875 |
-
endif;
|
876 |
-
|
877 |
-
endif;
|
878 |
-
|
879 |
-
return $single_template;
|
880 |
-
|
881 |
-
|
882 |
-
}
|
883 |
-
|
884 |
-
public function check_clicker( $single_template ){
|
885 |
-
|
886 |
-
if ($single_template == 'disable') :
|
887 |
-
return 'sc_team_single_disabled';
|
888 |
-
|
889 |
-
endif;
|
890 |
-
|
891 |
-
if ($this->options['single_template'] == 'disable') :
|
892 |
-
return 'sc_team_single_disabled';
|
893 |
-
endif;
|
894 |
-
|
895 |
-
}
|
896 |
-
|
897 |
-
|
898 |
-
}
|
899 |
-
|
900 |
-
class smartcat_team_widget extends WP_Widget {
|
901 |
-
|
902 |
-
function __construct() {
|
903 |
-
parent::__construct(
|
904 |
-
'smartcat_team_widget', __( 'Our Team Sidebar Widget', 'smartcat_team_widget_domain' ), array( 'description' => __( 'Use this widget to display the Our Team anywhere on the site.', 'smartcat_team_widget_domain' ), )
|
905 |
-
);
|
906 |
-
}
|
907 |
-
|
908 |
-
// Creating widget front-end
|
909 |
-
// This is where the action happens
|
910 |
-
public function widget( $args, $instance ) {
|
911 |
-
$title = apply_filters( 'widget_title', $instance[ 'title' ] );
|
912 |
-
|
913 |
-
// before and after widget arguments are defined by themes
|
914 |
-
echo $args[ 'before_widget' ];
|
915 |
-
if ( !empty( $title ) )
|
916 |
-
echo $args[ 'before_title' ] . $title . $args[ 'after_title' ];
|
917 |
-
|
918 |
-
// This is where you run the code and display the output
|
919 |
-
include SC_TEAM_PATH . 'inc/template/widget.php';
|
920 |
-
// echo $args['after_title'];
|
921 |
-
}
|
922 |
-
|
923 |
-
// Widget Backend
|
924 |
-
public function form( $instance ) {
|
925 |
-
if ( isset( $instance[ 'title' ] ) ) {
|
926 |
-
$title = $instance[ 'title' ];
|
927 |
-
} else {
|
928 |
-
$title = __( 'Meet Our Team', 'smartcat_team_widget_domain' );
|
929 |
-
}
|
930 |
-
// Widget admin form
|
931 |
-
?>
|
932 |
-
<p>
|
933 |
-
<label for="////<?php echo $this->get_field_id( 'title' ); ?>"><?php _e( 'Title:' ); ?></label>
|
934 |
-
<input class="widefat" id="////<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" type="text" value="<?php echo esc_attr( $title ); ?>" />
|
935 |
-
</p>
|
936 |
-
<?php
|
937 |
-
}
|
938 |
-
|
939 |
-
// Updating widget replacing old instances with new
|
940 |
-
public function update( $new_instance, $old_instance ) {
|
941 |
-
$instance = array();
|
942 |
-
$instance[ 'title' ] = (!empty( $new_instance[ 'title' ] ) ) ? strip_tags( $new_instance[ 'title' ] ) : '';
|
943 |
-
return $instance;
|
944 |
-
}
|
945 |
-
|
946 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/fonts/sc_our_team.eot
DELETED
Binary file
|
inc/fonts/sc_our_team.svg
DELETED
@@ -1,21 +0,0 @@
|
|
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 xmlns="http://www.w3.org/2000/svg">
|
4 |
-
<metadata>Generated by IcoMoon</metadata>
|
5 |
-
<defs>
|
6 |
-
<font id="sc_our_team" horiz-adv-x="1024">
|
7 |
-
<font-face units-per-em="1024" ascent="960" descent="-64" />
|
8 |
-
<missing-glyph horiz-adv-x="1024" />
|
9 |
-
<glyph unicode=" " d="" horiz-adv-x="512" />
|
10 |
-
<glyph unicode="" d="M438.857 402.286v-219.429q0-45.714-32-77.714t-77.714-32h-219.429q-45.714 0-77.714 32t-32 77.714v402.286q0 59.429 23.143 113.429t62.571 93.429 93.429 62.571 113.429 23.143h36.571q14.857 0 25.714-10.857t10.857-25.714v-73.143q0-14.857-10.857-25.714t-25.714-10.857h-36.571q-60.571 0-103.429-42.857t-42.857-103.429v-18.286q0-22.857 16-38.857t38.857-16h128q45.714 0 77.714-32t32-77.714zM950.857 402.286v-219.429q0-45.714-32-77.714t-77.714-32h-219.429q-45.714 0-77.714 32t-32 77.714v402.286q0 59.429 23.143 113.429t62.571 93.429 93.429 62.571 113.429 23.143h36.571q14.857 0 25.714-10.857t10.857-25.714v-73.143q0-14.857-10.857-25.714t-25.714-10.857h-36.571q-60.571 0-103.429-42.857t-42.857-103.429v-18.286q0-22.857 16-38.857t38.857-16h128q45.714 0 77.714-32t32-77.714z" horiz-adv-x="951" />
|
11 |
-
<glyph unicode="" d="M716.571 586.857q9.143 48.571-12 75.429-29.714 37.143-106.857 25.714-9.714-1.714-23.429-7.143t-32.857-17.429-36.857-27.714-34-40-25.429-52.286q45.714 4 64.857-9.143t15.143-56.571q-2.857-29.714-29.714-81.714-24.571-44.571-40.571-56.571-25.143-18.286-49.714 8-13.143 13.714-21.429 36.857t-10.857 41.714-5.714 48-4.857 40.857q-13.143 73.714-19.429 93.714-6.857 21.143-20.286 39.429t-28.857 22.857q-32.571 9.143-72.571-14.286-30.857-18.286-78-60.571t-70-58.286v-4q9.143-4.571 14.571-14.857t12.286-11.429q12-1.714 31.143 4.857t33.143 6 23.714-17.143q6.286-10.286 10.571-22t8.571-27.429 7.143-23.143q9.714-26.286 30.286-106.857 20.571-83.429 32.571-112.571 24-56.571 58.857-71.429 24.571-6.857 48.571-0.857t43.429 18q74.857 44 142.857 135.429 59.429 79.429 98.571 167.143t47.143 129.429zM877.714 713.143v-548.571q0-68-48.286-116.286t-116.286-48.286h-548.571q-68 0-116.286 48.286t-48.286 116.286v548.571q0 68 48.286 116.286t116.286 48.286h548.571q68 0 116.286-48.286t48.286-116.286z" />
|
12 |
-
<glyph unicode="" d="M0 609.714q0 61.714 21.429 116.286t59.143 95.143 86.857 70.286 105.714 44.571 115.429 14.857q90.286 0 168-38t126.286-110.571 48.571-164q0-54.857-10.857-107.429t-34.286-101.143-57.143-85.429-82.857-58.857-108-22q-38.857 0-77.143 18.286t-54.857 50.286q-5.714-22.286-16-64.286t-13.429-54.286-11.714-40.571-14.857-40.571-18.286-35.714-26.286-44.286-35.429-49.429l-8-2.857-5.143 5.714q-8.571 89.714-8.571 107.429 0 52.571 12.286 118t38 164.286 29.714 116q-18.286 37.143-18.286 96.571 0 47.429 29.714 89.143t75.429 41.714q34.857 0 54.286-23.143t19.429-58.571q0-37.714-25.143-109.143t-25.143-106.857q0-36 25.714-59.714t62.286-23.714q31.429 0 58.286 14.286t44.857 38.857 32 54.286 21.714 63.143 11.429 63.429 3.714 56.857q0 98.857-62.571 154t-163.143 55.143q-114.286 0-190.857-74t-76.571-187.714q0-25.143 7.143-48.571t15.429-37.143 15.429-26 7.143-17.429q0-16-8.571-41.714t-21.143-25.714q-1.143 0-9.714 1.714-29.143 8.571-51.714 32t-34.857 54-18.571 61.714-6.286 60.857z" horiz-adv-x="731" />
|
13 |
-
<glyph unicode="" d="M694.857 365.714q76 0 129.429-53.429t53.429-129.429-53.429-129.429-129.429-53.429-129.429 53.429-53.429 129.429q0 6.857 1.143 19.429l-205.714 102.857q-52.571-49.143-124.571-49.143-76 0-129.429 53.429t-53.429 129.429 53.429 129.429 129.429 53.429q72 0 124.571-49.143l205.714 102.857q-1.143 12.571-1.143 19.429 0 76 53.429 129.429t129.429 53.429 129.429-53.429 53.429-129.429-53.429-129.429-129.429-53.429q-72 0-124.571 49.143l-205.714-102.857q1.143-12.571 1.143-19.429t-1.143-19.429l205.714-102.857q52.571 49.143 124.571 49.143z" />
|
14 |
-
<glyph unicode="" d="M420 496q0-20.571 18.286-40.286t44.286-38.857 51.714-42 44-59.429 18.286-81.143q0-51.429-27.429-98.857-41.143-69.714-120.571-102.571t-170.286-32.857q-75.429 0-140.857 23.714t-98 78.571q-21.143 34.286-21.143 74.857 0 46.286 25.429 85.714t67.714 65.714q74.857 46.857 230.857 57.143-18.286 24-27.143 42.286t-8.857 41.714q0 20.571 12 48.571-26.286-2.286-38.857-2.286-84.571 0-142.571 55.143t-58 139.714q0 46.857 20.571 90.857t56.571 74.857q44 37.714 104.286 56t124.286 18.286h238.857l-78.857-50.286h-74.857q42.286-36 64-76t21.714-91.429q0-41.143-14-74t-33.714-53.143-39.714-37.143-34-35.143-14-37.714zM336.571 550.857q21.714 0 44.571 9.429t37.714 24.857q30.286 32.571 30.286 90.857 0 33.143-9.714 71.429t-27.714 74-48.286 59.143-66.857 23.429q-24 0-47.143-11.143t-37.429-30q-26.857-33.714-26.857-91.429 0-26.286 5.714-55.714t18-58.857 29.714-52.857 42.857-38.286 55.143-14.857zM337.714 52q33.143 0 63.714 7.429t56.571 22.286 41.714 41.714 15.714 62.286q0 14.286-4 28t-8.286 24-15.429 23.714-16.857 20-22 19.714-20.857 16.571-23.714 17.143-20.857 14.857q-9.143 1.143-27.429 1.143-30.286 0-60-4t-61.429-14.286-55.429-26.286-39.143-42.571-15.429-60.286q0-40 20-70.571t52.286-47.429 68-25.143 72.857-8.286zM800.571 552.571h121.714v-61.714h-121.714v-125.143h-60v125.143h-121.143v61.714h121.143v124h60v-124z" horiz-adv-x="951" />
|
15 |
-
<glyph unicode="" d="M199.429 593.714v-566.286h-188.571v566.286h188.571zM211.429 768.571q0.571-41.714-28.857-69.714t-77.429-28h-1.143q-46.857 0-75.429 28t-28.571 69.714q0 42.286 29.429 70t76.857 27.714 76-27.714 29.143-70zM877.714 352v-324.571h-188v302.857q0 60-23.143 94t-72.286 34q-36 0-60.286-19.714t-36.286-48.857q-6.286-17.143-6.286-46.286v-316h-188q1.143 228 1.143 369.714t-0.571 169.143l-0.571 27.429h188v-82.286h-1.143q11.429 18.286 23.429 32t32.286 29.714 49.714 24.857 65.429 8.857q97.714 0 157.143-64.857t59.429-190z" />
|
16 |
-
<glyph unicode="" d="M925.714 717.714q-38.286-56-92.571-95.429 0.571-8 0.571-24 0-74.286-21.714-148.286t-66-142-105.429-120.286-147.429-83.429-184.571-31.143q-154.857 0-283.429 82.857 20-2.286 44.571-2.286 128.571 0 229.143 78.857-60 1.143-107.429 36.857t-65.143 91.143q18.857-2.857 34.857-2.857 24.571 0 48.571 6.286-64 13.143-106 63.714t-42 117.429v2.286q38.857-21.714 83.429-23.429-37.714 25.143-60 65.714t-22.286 88q0 50.286 25.143 93.143 69.143-85.143 168.286-136.286t212.286-56.857q-4.571 21.714-4.571 42.286 0 76.571 54 130.571t130.571 54q80 0 134.857-58.286 62.286 12 117.143 44.571-21.143-65.714-81.143-101.714 53.143 5.714 106.286 28.571z" horiz-adv-x="951" />
|
17 |
-
<glyph unicode="" d="M804.571 242.286q0-15.429-5.714-40.286t-12-39.143q-12-28.571-69.714-60.571-53.714-29.143-106.286-29.143-15.429 0-30 2t-32.857 7.143-27.143 8.286-31.714 11.714-28 10.286q-56 20-100 47.429-73.143 45.143-151.143 123.143t-123.143 151.143q-27.429 44-47.429 100-1.714 5.143-10.286 28t-11.714 31.714-8.286 27.143-7.143 32.857-2 30q0 52.571 29.143 106.286 32 57.714 60.571 69.714 14.286 6.286 39.143 12t40.286 5.714q8 0 12-1.714 10.286-3.429 30.286-43.429 6.286-10.857 17.143-30.857t20-36.286 17.714-30.571q1.714-2.286 10-14.286t12.286-20.286 4-16.286q0-11.429-16.286-28.571t-35.429-31.429-35.429-30.286-16.286-26.286q0-5.143 2.857-12.857t4.857-11.714 8-13.714 6.571-10.857q43.429-78.286 99.429-134.286t134.286-99.429q1.143-0.571 10.857-6.571t13.714-8 11.714-4.857 12.857-2.857q10.286 0 26.286 16.286t30.286 35.429 31.429 35.429 28.571 16.286q8 0 16.286-4t20.286-12.286 14.286-10q14.286-8.571 30.571-17.714t36.286-20 30.857-17.143q40-20 43.429-30.286 1.714-4 1.714-12z" horiz-adv-x="805" />
|
18 |
-
<glyph unicode="" d="M950.857 91.428v438.857q-18.286-20.571-39.429-37.714-153.143-117.714-243.429-193.143-29.143-24.571-47.429-38.286t-49.429-27.714-58.571-14h-1.143q-27.429 0-58.571 14t-49.429 27.714-47.429 38.286q-90.286 75.429-243.429 193.143-21.143 17.143-39.429 37.714v-438.857q0-7.429 5.429-12.857t12.857-5.429h841.143q7.429 0 12.857 5.429t5.429 12.857zM950.857 692v14t-0.286 7.429-1.714 7.143-3.143 5.143-5.143 4.286-8 1.429h-841.143q-7.429 0-12.857-5.429t-5.429-12.857q0-96 84-162.286 110.286-86.857 229.143-181.143 3.429-2.857 20-16.857t26.286-21.429 25.429-18 28.857-15.714 24.571-5.143h1.143q11.429 0 24.571 5.143t28.857 15.714 25.429 18 26.286 21.429 20 16.857q118.857 94.286 229.143 181.143 30.857 24.571 57.429 66t26.571 75.143zM1024 713.143v-621.714q0-37.714-26.857-64.571t-64.571-26.857h-841.143q-37.714 0-64.571 26.857t-26.857 64.571v621.714q0 37.714 26.857 64.571t64.571 26.857h841.143q37.714 0 64.571-26.857t26.857-64.571z" />
|
19 |
-
<glyph unicode="" d="M548 944v-150.857h-89.714q-49.143 0-66.286-20.571t-17.143-61.714v-108h167.429l-22.286-169.143h-145.143v-433.714h-174.857v433.714h-145.714v169.143h145.714v124.571q0 106.286 59.429 164.857t158.286 58.571q84 0 130.286-6.857z" horiz-adv-x="585" />
|
20 |
-
<glyph unicode="" d="M741.714 195.428q0-22.857-16-38.857l-77.714-77.714q-16-16-38.857-16t-38.857 16l-168 168-168-168q-16-16-38.857-16t-38.857 16l-77.714 77.714q-16 16-16 38.857t16 38.857l168 168-168 168q-16 16-16 38.857t16 38.857l77.714 77.714q16 16 38.857 16t38.857-16l168-168 168 168q16 16 38.857 16t38.857-16l77.714-77.714q16-16 16-38.857t-16-38.857l-168-168 168-168q16-16 16-38.857z" horiz-adv-x="805" />
|
21 |
-
</font></defs></svg>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/fonts/sc_our_team.ttf
DELETED
Binary file
|
inc/fonts/sc_our_team.woff
DELETED
Binary file
|
inc/img/AjaxLoader.gif
DELETED
Binary file
|
inc/img/check.png
DELETED
Binary file
|
inc/img/circles2_demo.jpg
DELETED
Binary file
|
inc/img/circles2_demo_1.jpg
DELETED
Binary file
|
inc/img/circles_demo.jpg
DELETED
Binary file
|
inc/img/custom_demo.jpg
DELETED
Binary file
|
inc/img/directory.jpg
DELETED
Binary file
|
inc/img/email_1.png
DELETED
Binary file
|
inc/img/grabbing.png
DELETED
Binary file
|
inc/img/grid_demo.jpg
DELETED
Binary file
|
inc/img/icon.png
DELETED
Binary file
|
inc/img/noprofile.jpg
DELETED
Binary file
|
inc/img/skills_demo.jpg
DELETED
Binary file
|
inc/img/smartcat_icon.png
DELETED
Binary file
|
inc/img/spinner.gif
DELETED
Binary file
|
inc/img/stacked_demo.jpg
DELETED
Binary file
|
inc/img/userdetails_demo.jpg
DELETED
Binary file
|
inc/script/carousel.js
DELETED
@@ -1,47 +0,0 @@
|
|
1 |
-
"function"!==typeof Object.create&&(Object.create=function(f){function g(){}g.prototype=f;return new g});
|
2 |
-
(function(f,g,k){var l={init:function(a,b){this.$elem=f(b);this.options=f.extend({},f.fn.owlCarousel.options,this.$elem.data(),a);this.userOptions=a;this.loadContent()},loadContent:function(){function a(a){var d,e="";if("function"===typeof b.options.jsonSuccess)b.options.jsonSuccess.apply(this,[a]);else{for(d in a.owl)a.owl.hasOwnProperty(d)&&(e+=a.owl[d].item);b.$elem.html(e)}b.logIn()}var b=this,e;"function"===typeof b.options.beforeInit&&b.options.beforeInit.apply(this,[b.$elem]);"string"===typeof b.options.jsonPath?
|
3 |
-
(e=b.options.jsonPath,f.getJSON(e,a)):b.logIn()},logIn:function(){this.$elem.data("owl-originalStyles",this.$elem.attr("style"));this.$elem.data("owl-originalClasses",this.$elem.attr("class"));this.$elem.css({opacity:0});this.orignalItems=this.options.items;this.checkBrowser();this.wrapperWidth=0;this.checkVisible=null;this.setVars()},setVars:function(){if(0===this.$elem.children().length)return!1;this.baseClass();this.eventTypes();this.$userItems=this.$elem.children();this.itemsAmount=this.$userItems.length;
|
4 |
-
this.wrapItems();this.$owlItems=this.$elem.find(".owl-item");this.$owlWrapper=this.$elem.find(".owl-wrapper");this.playDirection="next";this.prevItem=0;this.prevArr=[0];this.currentItem=0;this.customEvents();this.onStartup()},onStartup:function(){this.updateItems();this.calculateAll();this.buildControls();this.updateControls();this.response();this.moveEvents();this.stopOnHover();this.owlStatus();!1!==this.options.transitionStyle&&this.transitionTypes(this.options.transitionStyle);!0===this.options.autoPlay&&
|
5 |
-
(this.options.autoPlay=5E3);this.play();this.$elem.find(".owl-wrapper").css("display","block");this.$elem.is(":visible")?this.$elem.css("opacity",1):this.watchVisibility();this.onstartup=!1;this.eachMoveUpdate();"function"===typeof this.options.afterInit&&this.options.afterInit.apply(this,[this.$elem])},eachMoveUpdate:function(){!0===this.options.lazyLoad&&this.lazyLoad();!0===this.options.autoHeight&&this.autoHeight();this.onVisibleItems();"function"===typeof this.options.afterAction&&this.options.afterAction.apply(this,
|
6 |
-
[this.$elem])},updateVars:function(){"function"===typeof this.options.beforeUpdate&&this.options.beforeUpdate.apply(this,[this.$elem]);this.watchVisibility();this.updateItems();this.calculateAll();this.updatePosition();this.updateControls();this.eachMoveUpdate();"function"===typeof this.options.afterUpdate&&this.options.afterUpdate.apply(this,[this.$elem])},reload:function(){var a=this;g.setTimeout(function(){a.updateVars()},0)},watchVisibility:function(){var a=this;if(!1===a.$elem.is(":visible"))a.$elem.css({opacity:0}),
|
7 |
-
g.clearInterval(a.autoPlayInterval),g.clearInterval(a.checkVisible);else return!1;a.checkVisible=g.setInterval(function(){a.$elem.is(":visible")&&(a.reload(),a.$elem.animate({opacity:1},200),g.clearInterval(a.checkVisible))},500)},wrapItems:function(){this.$userItems.wrapAll('<div class="owl-wrapper">').wrap('<div class="owl-item"></div>');this.$elem.find(".owl-wrapper").wrap('<div class="owl-wrapper-outer">');this.wrapperOuter=this.$elem.find(".owl-wrapper-outer");this.$elem.css("display","block")},
|
8 |
-
baseClass:function(){var a=this.$elem.hasClass(this.options.baseClass),b=this.$elem.hasClass(this.options.theme);a||this.$elem.addClass(this.options.baseClass);b||this.$elem.addClass(this.options.theme)},updateItems:function(){var a,b;if(!1===this.options.responsive)return!1;if(!0===this.options.singleItem)return this.options.items=this.orignalItems=1,this.options.itemsCustom=!1,this.options.itemsDesktop=!1,this.options.itemsDesktopSmall=!1,this.options.itemsTablet=!1,this.options.itemsTabletSmall=
|
9 |
-
!1,this.options.itemsMobile=!1;a=f(this.options.responsiveBaseWidth).width();a>(this.options.itemsDesktop[0]||this.orignalItems)&&(this.options.items=this.orignalItems);if(!1!==this.options.itemsCustom)for(this.options.itemsCustom.sort(function(a,b){return a[0]-b[0]}),b=0;b<this.options.itemsCustom.length;b+=1)this.options.itemsCustom[b][0]<=a&&(this.options.items=this.options.itemsCustom[b][1]);else a<=this.options.itemsDesktop[0]&&!1!==this.options.itemsDesktop&&(this.options.items=this.options.itemsDesktop[1]),
|
10 |
-
a<=this.options.itemsDesktopSmall[0]&&!1!==this.options.itemsDesktopSmall&&(this.options.items=this.options.itemsDesktopSmall[1]),a<=this.options.itemsTablet[0]&&!1!==this.options.itemsTablet&&(this.options.items=this.options.itemsTablet[1]),a<=this.options.itemsTabletSmall[0]&&!1!==this.options.itemsTabletSmall&&(this.options.items=this.options.itemsTabletSmall[1]),a<=this.options.itemsMobile[0]&&!1!==this.options.itemsMobile&&(this.options.items=this.options.itemsMobile[1]);this.options.items>this.itemsAmount&&
|
11 |
-
!0===this.options.itemsScaleUp&&(this.options.items=this.itemsAmount)},response:function(){var a=this,b,e;if(!0!==a.options.responsive)return!1;e=f(g).width();a.resizer=function(){f(g).width()!==e&&(!1!==a.options.autoPlay&&g.clearInterval(a.autoPlayInterval),g.clearTimeout(b),b=g.setTimeout(function(){e=f(g).width();a.updateVars()},a.options.responsiveRefreshRate))};f(g).resize(a.resizer)},updatePosition:function(){this.jumpTo(this.currentItem);!1!==this.options.autoPlay&&this.checkAp()},appendItemsSizes:function(){var a=
|
12 |
-
this,b=0,e=a.itemsAmount-a.options.items;a.$owlItems.each(function(c){var d=f(this);d.css({width:a.itemWidth}).data("owl-item",Number(c));if(0===c%a.options.items||c===e)c>e||(b+=1);d.data("owl-roundPages",b)})},appendWrapperSizes:function(){this.$owlWrapper.css({width:this.$owlItems.length*this.itemWidth*2,left:0});this.appendItemsSizes()},calculateAll:function(){this.calculateWidth();this.appendWrapperSizes();this.loops();this.max()},calculateWidth:function(){this.itemWidth=Math.round(this.$elem.width()/
|
13 |
-
this.options.items)},max:function(){var a=-1*(this.itemsAmount*this.itemWidth-this.options.items*this.itemWidth);this.options.items>this.itemsAmount?this.maximumPixels=a=this.maximumItem=0:(this.maximumItem=this.itemsAmount-this.options.items,this.maximumPixels=a);return a},min:function(){return 0},loops:function(){var a=0,b=0,e,c;this.positionsInArray=[0];this.pagesInArray=[];for(e=0;e<this.itemsAmount;e+=1)b+=this.itemWidth,this.positionsInArray.push(-b),!0===this.options.scrollPerPage&&(c=f(this.$owlItems[e]),
|
14 |
-
c=c.data("owl-roundPages"),c!==a&&(this.pagesInArray[a]=this.positionsInArray[e],a=c))},buildControls:function(){if(!0===this.options.navigation||!0===this.options.pagination)this.owlControls=f('<div class="owl-controls"/>').toggleClass("clickable",!this.browser.isTouch).appendTo(this.$elem);!0===this.options.pagination&&this.buildPagination();!0===this.options.navigation&&this.buildButtons()},buildButtons:function(){var a=this,b=f('<div class="owl-buttons"/>');a.owlControls.append(b);a.buttonPrev=
|
15 |
-
f("<div/>",{"class":"owl-prev",html:a.options.navigationText[0]||""});a.buttonNext=f("<div/>",{"class":"owl-next",html:a.options.navigationText[1]||""});b.append(a.buttonPrev).append(a.buttonNext);b.on("touchstart.owlControls mousedown.owlControls",'div[class^="owl"]',function(a){a.preventDefault()});b.on("touchend.owlControls mouseup.owlControls",'div[class^="owl"]',function(b){b.preventDefault();f(this).hasClass("owl-next")?a.next():a.prev()})},buildPagination:function(){var a=this;a.paginationWrapper=
|
16 |
-
f('<div class="owl-pagination"/>');a.owlControls.append(a.paginationWrapper);a.paginationWrapper.on("touchend.owlControls mouseup.owlControls",".owl-page",function(b){b.preventDefault();Number(f(this).data("owl-page"))!==a.currentItem&&a.goTo(Number(f(this).data("owl-page")),!0)})},updatePagination:function(){var a,b,e,c,d,g;if(!1===this.options.pagination)return!1;this.paginationWrapper.html("");a=0;b=this.itemsAmount-this.itemsAmount%this.options.items;for(c=0;c<this.itemsAmount;c+=1)0===c%this.options.items&&
|
17 |
-
(a+=1,b===c&&(e=this.itemsAmount-this.options.items),d=f("<div/>",{"class":"owl-page"}),g=f("<span></span>",{text:!0===this.options.paginationNumbers?a:"","class":!0===this.options.paginationNumbers?"owl-numbers":""}),d.append(g),d.data("owl-page",b===c?e:c),d.data("owl-roundPages",a),this.paginationWrapper.append(d));this.checkPagination()},checkPagination:function(){var a=this;if(!1===a.options.pagination)return!1;a.paginationWrapper.find(".owl-page").each(function(){f(this).data("owl-roundPages")===
|
18 |
-
f(a.$owlItems[a.currentItem]).data("owl-roundPages")&&(a.paginationWrapper.find(".owl-page").removeClass("active"),f(this).addClass("active"))})},checkNavigation:function(){if(!1===this.options.navigation)return!1;!1===this.options.rewindNav&&(0===this.currentItem&&0===this.maximumItem?(this.buttonPrev.addClass("disabled"),this.buttonNext.addClass("disabled")):0===this.currentItem&&0!==this.maximumItem?(this.buttonPrev.addClass("disabled"),this.buttonNext.removeClass("disabled")):this.currentItem===
|
19 |
-
this.maximumItem?(this.buttonPrev.removeClass("disabled"),this.buttonNext.addClass("disabled")):0!==this.currentItem&&this.currentItem!==this.maximumItem&&(this.buttonPrev.removeClass("disabled"),this.buttonNext.removeClass("disabled")))},updateControls:function(){this.updatePagination();this.checkNavigation();this.owlControls&&(this.options.items>=this.itemsAmount?this.owlControls.hide():this.owlControls.show())},destroyControls:function(){this.owlControls&&this.owlControls.remove()},next:function(a){if(this.isTransition)return!1;
|
20 |
-
this.currentItem+=!0===this.options.scrollPerPage?this.options.items:1;if(this.currentItem>this.maximumItem+(!0===this.options.scrollPerPage?this.options.items-1:0))if(!0===this.options.rewindNav)this.currentItem=0,a="rewind";else return this.currentItem=this.maximumItem,!1;this.goTo(this.currentItem,a)},prev:function(a){if(this.isTransition)return!1;this.currentItem=!0===this.options.scrollPerPage&&0<this.currentItem&&this.currentItem<this.options.items?0:this.currentItem-(!0===this.options.scrollPerPage?
|
21 |
-
this.options.items:1);if(0>this.currentItem)if(!0===this.options.rewindNav)this.currentItem=this.maximumItem,a="rewind";else return this.currentItem=0,!1;this.goTo(this.currentItem,a)},goTo:function(a,b,e){var c=this;if(c.isTransition)return!1;"function"===typeof c.options.beforeMove&&c.options.beforeMove.apply(this,[c.$elem]);a>=c.maximumItem?a=c.maximumItem:0>=a&&(a=0);c.currentItem=c.owl.currentItem=a;if(!1!==c.options.transitionStyle&&"drag"!==e&&1===c.options.items&&!0===c.browser.support3d)return c.swapSpeed(0),
|
22 |
-
!0===c.browser.support3d?c.transition3d(c.positionsInArray[a]):c.css2slide(c.positionsInArray[a],1),c.afterGo(),c.singleItemTransition(),!1;a=c.positionsInArray[a];!0===c.browser.support3d?(c.isCss3Finish=!1,!0===b?(c.swapSpeed("paginationSpeed"),g.setTimeout(function(){c.isCss3Finish=!0},c.options.paginationSpeed)):"rewind"===b?(c.swapSpeed(c.options.rewindSpeed),g.setTimeout(function(){c.isCss3Finish=!0},c.options.rewindSpeed)):(c.swapSpeed("slideSpeed"),g.setTimeout(function(){c.isCss3Finish=!0},
|
23 |
-
c.options.slideSpeed)),c.transition3d(a)):!0===b?c.css2slide(a,c.options.paginationSpeed):"rewind"===b?c.css2slide(a,c.options.rewindSpeed):c.css2slide(a,c.options.slideSpeed);c.afterGo()},jumpTo:function(a){"function"===typeof this.options.beforeMove&&this.options.beforeMove.apply(this,[this.$elem]);a>=this.maximumItem||-1===a?a=this.maximumItem:0>=a&&(a=0);this.swapSpeed(0);!0===this.browser.support3d?this.transition3d(this.positionsInArray[a]):this.css2slide(this.positionsInArray[a],1);this.currentItem=
|
24 |
-
this.owl.currentItem=a;this.afterGo()},afterGo:function(){this.prevArr.push(this.currentItem);this.prevItem=this.owl.prevItem=this.prevArr[this.prevArr.length-2];this.prevArr.shift(0);this.prevItem!==this.currentItem&&(this.checkPagination(),this.checkNavigation(),this.eachMoveUpdate(),!1!==this.options.autoPlay&&this.checkAp());"function"===typeof this.options.afterMove&&this.prevItem!==this.currentItem&&this.options.afterMove.apply(this,[this.$elem])},stop:function(){this.apStatus="stop";g.clearInterval(this.autoPlayInterval)},
|
25 |
-
checkAp:function(){"stop"!==this.apStatus&&this.play()},play:function(){var a=this;a.apStatus="play";if(!1===a.options.autoPlay)return!1;g.clearInterval(a.autoPlayInterval);a.autoPlayInterval=g.setInterval(function(){a.next(!0)},a.options.autoPlay)},swapSpeed:function(a){"slideSpeed"===a?this.$owlWrapper.css(this.addCssSpeed(this.options.slideSpeed)):"paginationSpeed"===a?this.$owlWrapper.css(this.addCssSpeed(this.options.paginationSpeed)):"string"!==typeof a&&this.$owlWrapper.css(this.addCssSpeed(a))},
|
26 |
-
addCssSpeed:function(a){return{"-webkit-transition":"all "+a+"ms ease","-moz-transition":"all "+a+"ms ease","-o-transition":"all "+a+"ms ease",transition:"all "+a+"ms ease"}},removeTransition:function(){return{"-webkit-transition":"","-moz-transition":"","-o-transition":"",transition:""}},doTranslate:function(a){return{"-webkit-transform":"translate3d("+a+"px, 0px, 0px)","-moz-transform":"translate3d("+a+"px, 0px, 0px)","-o-transform":"translate3d("+a+"px, 0px, 0px)","-ms-transform":"translate3d("+
|
27 |
-
a+"px, 0px, 0px)",transform:"translate3d("+a+"px, 0px,0px)"}},transition3d:function(a){this.$owlWrapper.css(this.doTranslate(a))},css2move:function(a){this.$owlWrapper.css({left:a})},css2slide:function(a,b){var e=this;e.isCssFinish=!1;e.$owlWrapper.stop(!0,!0).animate({left:a},{duration:b||e.options.slideSpeed,complete:function(){e.isCssFinish=!0}})},checkBrowser:function(){var a=k.createElement("div");a.style.cssText=" -moz-transform:translate3d(0px, 0px, 0px); -ms-transform:translate3d(0px, 0px, 0px); -o-transform:translate3d(0px, 0px, 0px); -webkit-transform:translate3d(0px, 0px, 0px); transform:translate3d(0px, 0px, 0px)";
|
28 |
-
a=a.style.cssText.match(/translate3d\(0px, 0px, 0px\)/g);this.browser={support3d:null!==a&&1===a.length,isTouch:"ontouchstart"in g||g.navigator.msMaxTouchPoints}},moveEvents:function(){if(!1!==this.options.mouseDrag||!1!==this.options.touchDrag)this.gestures(),this.disabledEvents()},eventTypes:function(){var a=["s","e","x"];this.ev_types={};!0===this.options.mouseDrag&&!0===this.options.touchDrag?a=["touchstart.owl mousedown.owl","touchmove.owl mousemove.owl","touchend.owl touchcancel.owl mouseup.owl"]:
|
29 |
-
!1===this.options.mouseDrag&&!0===this.options.touchDrag?a=["touchstart.owl","touchmove.owl","touchend.owl touchcancel.owl"]:!0===this.options.mouseDrag&&!1===this.options.touchDrag&&(a=["mousedown.owl","mousemove.owl","mouseup.owl"]);this.ev_types.start=a[0];this.ev_types.move=a[1];this.ev_types.end=a[2]},disabledEvents:function(){this.$elem.on("dragstart.owl",function(a){a.preventDefault()});this.$elem.on("mousedown.disableTextSelect",function(a){return f(a.target).is("input, textarea, select, option")})},
|
30 |
-
gestures:function(){function a(a){if(void 0!==a.touches)return{x:a.touches[0].pageX,y:a.touches[0].pageY};if(void 0===a.touches){if(void 0!==a.pageX)return{x:a.pageX,y:a.pageY};if(void 0===a.pageX)return{x:a.clientX,y:a.clientY}}}function b(a){"on"===a?(f(k).on(d.ev_types.move,e),f(k).on(d.ev_types.end,c)):"off"===a&&(f(k).off(d.ev_types.move),f(k).off(d.ev_types.end))}function e(b){b=b.originalEvent||b||g.event;d.newPosX=a(b).x-h.offsetX;d.newPosY=a(b).y-h.offsetY;d.newRelativeX=d.newPosX-h.relativePos;
|
31 |
-
"function"===typeof d.options.startDragging&&!0!==h.dragging&&0!==d.newRelativeX&&(h.dragging=!0,d.options.startDragging.apply(d,[d.$elem]));(8<d.newRelativeX||-8>d.newRelativeX)&&!0===d.browser.isTouch&&(void 0!==b.preventDefault?b.preventDefault():b.returnValue=!1,h.sliding=!0);(10<d.newPosY||-10>d.newPosY)&&!1===h.sliding&&f(k).off("touchmove.owl");d.newPosX=Math.max(Math.min(d.newPosX,d.newRelativeX/5),d.maximumPixels+d.newRelativeX/5);!0===d.browser.support3d?d.transition3d(d.newPosX):d.css2move(d.newPosX)}
|
32 |
-
function c(a){a=a.originalEvent||a||g.event;var c;a.target=a.target||a.srcElement;h.dragging=!1;!0!==d.browser.isTouch&&d.$owlWrapper.removeClass("grabbing");d.dragDirection=0>d.newRelativeX?d.owl.dragDirection="left":d.owl.dragDirection="right";0!==d.newRelativeX&&(c=d.getNewPosition(),d.goTo(c,!1,"drag"),h.targetElement===a.target&&!0!==d.browser.isTouch&&(f(a.target).on("click.disable",function(a){a.stopImmediatePropagation();a.stopPropagation();a.preventDefault();f(a.target).off("click.disable")}),
|
33 |
-
a=f._data(a.target,"events").click,c=a.pop(),a.splice(0,0,c)));b("off")}var d=this,h={offsetX:0,offsetY:0,baseElWidth:0,relativePos:0,position:null,minSwipe:null,maxSwipe:null,sliding:null,dargging:null,targetElement:null};d.isCssFinish=!0;d.$elem.on(d.ev_types.start,".owl-wrapper",function(c){c=c.originalEvent||c||g.event;var e;if(3===c.which)return!1;if(!(d.itemsAmount<=d.options.items)){if(!1===d.isCssFinish&&!d.options.dragBeforeAnimFinish||!1===d.isCss3Finish&&!d.options.dragBeforeAnimFinish)return!1;
|
34 |
-
!1!==d.options.autoPlay&&g.clearInterval(d.autoPlayInterval);!0===d.browser.isTouch||d.$owlWrapper.hasClass("grabbing")||d.$owlWrapper.addClass("grabbing");d.newPosX=0;d.newRelativeX=0;f(this).css(d.removeTransition());e=f(this).position();h.relativePos=e.left;h.offsetX=a(c).x-e.left;h.offsetY=a(c).y-e.top;b("on");h.sliding=!1;h.targetElement=c.target||c.srcElement}})},getNewPosition:function(){var a=this.closestItem();a>this.maximumItem?a=this.currentItem=this.maximumItem:0<=this.newPosX&&(this.currentItem=
|
35 |
-
a=0);return a},closestItem:function(){var a=this,b=!0===a.options.scrollPerPage?a.pagesInArray:a.positionsInArray,e=a.newPosX,c=null;f.each(b,function(d,g){e-a.itemWidth/20>b[d+1]&&e-a.itemWidth/20<g&&"left"===a.moveDirection()?(c=g,a.currentItem=!0===a.options.scrollPerPage?f.inArray(c,a.positionsInArray):d):e+a.itemWidth/20<g&&e+a.itemWidth/20>(b[d+1]||b[d]-a.itemWidth)&&"right"===a.moveDirection()&&(!0===a.options.scrollPerPage?(c=b[d+1]||b[b.length-1],a.currentItem=f.inArray(c,a.positionsInArray)):
|
36 |
-
(c=b[d+1],a.currentItem=d+1))});return a.currentItem},moveDirection:function(){var a;0>this.newRelativeX?(a="right",this.playDirection="next"):(a="left",this.playDirection="prev");return a},customEvents:function(){var a=this;a.$elem.on("owl.next",function(){a.next()});a.$elem.on("owl.prev",function(){a.prev()});a.$elem.on("owl.play",function(b,e){a.options.autoPlay=e;a.play();a.hoverStatus="play"});a.$elem.on("owl.stop",function(){a.stop();a.hoverStatus="stop"});a.$elem.on("owl.goTo",function(b,e){a.goTo(e)});
|
37 |
-
a.$elem.on("owl.jumpTo",function(b,e){a.jumpTo(e)})},stopOnHover:function(){var a=this;!0===a.options.stopOnHover&&!0!==a.browser.isTouch&&!1!==a.options.autoPlay&&(a.$elem.on("mouseover",function(){a.stop()}),a.$elem.on("mouseout",function(){"stop"!==a.hoverStatus&&a.play()}))},lazyLoad:function(){var a,b,e,c,d;if(!1===this.options.lazyLoad)return!1;for(a=0;a<this.itemsAmount;a+=1)b=f(this.$owlItems[a]),"loaded"!==b.data("owl-loaded")&&(e=b.data("owl-item"),c=b.find(".lazyOwl"),"string"!==typeof c.data("src")?
|
38 |
-
b.data("owl-loaded","loaded"):(void 0===b.data("owl-loaded")&&(c.hide(),b.addClass("loading").data("owl-loaded","checked")),(d=!0===this.options.lazyFollow?e>=this.currentItem:!0)&&e<this.currentItem+this.options.items&&c.length&&this.lazyPreload(b,c)))},lazyPreload:function(a,b){function e(){a.data("owl-loaded","loaded").removeClass("loading");b.removeAttr("data-src");"fade"===d.options.lazyEffect?b.fadeIn(400):b.show();"function"===typeof d.options.afterLazyLoad&&d.options.afterLazyLoad.apply(this,
|
39 |
-
[d.$elem])}function c(){f+=1;d.completeImg(b.get(0))||!0===k?e():100>=f?g.setTimeout(c,100):e()}var d=this,f=0,k;"DIV"===b.prop("tagName")?(b.css("background-image","url("+b.data("src")+")"),k=!0):b[0].src=b.data("src");c()},autoHeight:function(){function a(){var a=f(e.$owlItems[e.currentItem]).height();e.wrapperOuter.css("height",a+"px");e.wrapperOuter.hasClass("autoHeight")||g.setTimeout(function(){e.wrapperOuter.addClass("autoHeight")},0)}function b(){d+=1;e.completeImg(c.get(0))?a():100>=d?g.setTimeout(b,
|
40 |
-
100):e.wrapperOuter.css("height","")}var e=this,c=f(e.$owlItems[e.currentItem]).find("img"),d;void 0!==c.get(0)?(d=0,b()):a()},completeImg:function(a){return!a.complete||"undefined"!==typeof a.naturalWidth&&0===a.naturalWidth?!1:!0},onVisibleItems:function(){var a;!0===this.options.addClassActive&&this.$owlItems.removeClass("active");this.visibleItems=[];for(a=this.currentItem;a<this.currentItem+this.options.items;a+=1)this.visibleItems.push(a),!0===this.options.addClassActive&&f(this.$owlItems[a]).addClass("active");
|
41 |
-
this.owl.visibleItems=this.visibleItems},transitionTypes:function(a){this.outClass="owl-"+a+"-out";this.inClass="owl-"+a+"-in"},singleItemTransition:function(){var a=this,b=a.outClass,e=a.inClass,c=a.$owlItems.eq(a.currentItem),d=a.$owlItems.eq(a.prevItem),f=Math.abs(a.positionsInArray[a.currentItem])+a.positionsInArray[a.prevItem],g=Math.abs(a.positionsInArray[a.currentItem])+a.itemWidth/2;a.isTransition=!0;a.$owlWrapper.addClass("owl-origin").css({"-webkit-transform-origin":g+"px","-moz-perspective-origin":g+
|
42 |
-
"px","perspective-origin":g+"px"});d.css({position:"relative",left:f+"px"}).addClass(b).on("webkitAnimationEnd oAnimationEnd MSAnimationEnd animationend",function(){a.endPrev=!0;d.off("webkitAnimationEnd oAnimationEnd MSAnimationEnd animationend");a.clearTransStyle(d,b)});c.addClass(e).on("webkitAnimationEnd oAnimationEnd MSAnimationEnd animationend",function(){a.endCurrent=!0;c.off("webkitAnimationEnd oAnimationEnd MSAnimationEnd animationend");a.clearTransStyle(c,e)})},clearTransStyle:function(a,
|
43 |
-
b){a.css({position:"",left:""}).removeClass(b);this.endPrev&&this.endCurrent&&(this.$owlWrapper.removeClass("owl-origin"),this.isTransition=this.endCurrent=this.endPrev=!1)},owlStatus:function(){this.owl={userOptions:this.userOptions,baseElement:this.$elem,userItems:this.$userItems,owlItems:this.$owlItems,currentItem:this.currentItem,prevItem:this.prevItem,visibleItems:this.visibleItems,isTouch:this.browser.isTouch,browser:this.browser,dragDirection:this.dragDirection}},clearEvents:function(){this.$elem.off(".owl owl mousedown.disableTextSelect");
|
44 |
-
f(k).off(".owl owl");f(g).off("resize",this.resizer)},unWrap:function(){0!==this.$elem.children().length&&(this.$owlWrapper.unwrap(),this.$userItems.unwrap().unwrap(),this.owlControls&&this.owlControls.remove());this.clearEvents();this.$elem.attr("style",this.$elem.data("owl-originalStyles")||"").attr("class",this.$elem.data("owl-originalClasses"))},destroy:function(){this.stop();g.clearInterval(this.checkVisible);this.unWrap();this.$elem.removeData()},reinit:function(a){a=f.extend({},this.userOptions,
|
45 |
-
a);this.unWrap();this.init(a,this.$elem)},addItem:function(a,b){var e;if(!a)return!1;if(0===this.$elem.children().length)return this.$elem.append(a),this.setVars(),!1;this.unWrap();e=void 0===b||-1===b?-1:b;e>=this.$userItems.length||-1===e?this.$userItems.eq(-1).after(a):this.$userItems.eq(e).before(a);this.setVars()},removeItem:function(a){if(0===this.$elem.children().length)return!1;a=void 0===a||-1===a?-1:a;this.unWrap();this.$userItems.eq(a).remove();this.setVars()}};f.fn.owlCarousel=function(a){return this.each(function(){if(!0===
|
46 |
-
f(this).data("owl-init"))return!1;f(this).data("owl-init",!0);var b=Object.create(l);b.init(a,this);f.data(this,"owlCarousel",b)})};f.fn.owlCarousel.options={items:5,itemsCustom:!1,itemsDesktop:[1199,4],itemsDesktopSmall:[979,3],itemsTablet:[768,2],itemsTabletSmall:!1,itemsMobile:[479,1],singleItem:!1,itemsScaleUp:!1,slideSpeed:200,paginationSpeed:800,rewindSpeed:1E3,autoPlay:!1,stopOnHover:!1,navigation:!1,navigationText:["prev","next"],rewindNav:!0,scrollPerPage:!1,pagination:!0,paginationNumbers:!1,
|
47 |
-
responsive:!0,responsiveRefreshRate:200,responsiveBaseWidth:g,baseClass:"owl-carousel",theme:"owl-theme",lazyLoad:!1,lazyFollow:!0,lazyEffect:"fade",autoHeight:!1,jsonPath:!1,jsonSuccess:!1,dragBeforeAnimFinish:!0,mouseDrag:!0,touchDrag:!0,addClassActive:!1,transitionStyle:!1,beforeUpdate:!1,afterUpdate:!1,beforeInit:!1,afterInit:!1,beforeMove:!1,afterMove:!1,afterAction:!1,startDragging:!1,afterLazyLoad:!1}})(jQuery,window,document);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/script/hc.js
DELETED
@@ -1,148 +0,0 @@
|
|
1 |
-
(function($) {
|
2 |
-
|
3 |
-
$.fn.honeycombs = function(options) {
|
4 |
-
|
5 |
-
// Establish our default settings
|
6 |
-
var settings = $.extend({
|
7 |
-
combWidth: 220,
|
8 |
-
margin: 5
|
9 |
-
}, options);
|
10 |
-
|
11 |
-
function initialise(element) {
|
12 |
-
|
13 |
-
$(element).addClass('honeycombs-wrapper');
|
14 |
-
|
15 |
-
var width = 0;
|
16 |
-
var combWidth = 0;
|
17 |
-
var combHeight = 0;
|
18 |
-
var num = 0;
|
19 |
-
var $wrapper = null;
|
20 |
-
|
21 |
-
/**
|
22 |
-
* Build the dom
|
23 |
-
*/
|
24 |
-
function buildHtml(){
|
25 |
-
// add the 2 other boxes
|
26 |
-
$(element).find('.comb').wrapAll('<div class="honeycombs-inner-wrapper"></div>');
|
27 |
-
$wrapper = $(element).find('.honeycombs-inner-wrapper');
|
28 |
-
|
29 |
-
$(element).find('.comb').append('<div class="hex_l"></div>');
|
30 |
-
$(element).find('.hex_l').append('<div class="hex_r"></div>');
|
31 |
-
$(element).find('.hex_r').append('<div class="hex_inner"></div>');
|
32 |
-
|
33 |
-
$(element).find('.hex_inner').append('<div class="inner_span"><div class="inner-text"></div></div>');
|
34 |
-
|
35 |
-
num = 0;
|
36 |
-
|
37 |
-
$(element).find('.comb').each(function(){
|
38 |
-
num = num + 1;
|
39 |
-
var image = $(this).find('img').attr('src');
|
40 |
-
var css = 'url("'+image+'") ';
|
41 |
-
|
42 |
-
$(this).find('.hex_inner').attr('style', 'background-image: '+css);
|
43 |
-
|
44 |
-
if($(this).find('span').length > 0){
|
45 |
-
$(this).find('.inner_span .inner-text').html($(this).find('span').html());
|
46 |
-
}else{
|
47 |
-
$(this).find('.inner_span').remove();
|
48 |
-
};
|
49 |
-
});
|
50 |
-
$(element).find('img, span').hide();
|
51 |
-
}
|
52 |
-
|
53 |
-
/**
|
54 |
-
* Update all scale values
|
55 |
-
*/
|
56 |
-
function updateScales(){
|
57 |
-
combWidth = settings.combWidth;
|
58 |
-
combHeight = ( Math.sqrt(3) * combWidth ) / 2;
|
59 |
-
edgeWidth = combWidth / 2;
|
60 |
-
|
61 |
-
|
62 |
-
$(element).find('.comb').width(combWidth).height(combHeight);
|
63 |
-
$(element).find('.hex_l, .hex_r').width(combWidth).height(combHeight);
|
64 |
-
$(element).find('.hex_inner').width(combWidth).height(combHeight);
|
65 |
-
}
|
66 |
-
|
67 |
-
/**
|
68 |
-
* update css classes
|
69 |
-
*/
|
70 |
-
function reorder(animate){
|
71 |
-
|
72 |
-
updateScales();
|
73 |
-
width = $(element).width();
|
74 |
-
|
75 |
-
newWidth = ( num / 1.5) * settings.combWidth;
|
76 |
-
|
77 |
-
if(newWidth < width){
|
78 |
-
width = newWidth;
|
79 |
-
}
|
80 |
-
|
81 |
-
$wrapper.width(width);
|
82 |
-
|
83 |
-
var row = 0; // current row
|
84 |
-
var upDown = 1; // 1 is down
|
85 |
-
var left = 0; // pos left
|
86 |
-
var top = 0; // pos top
|
87 |
-
|
88 |
-
var cols = 0;
|
89 |
-
|
90 |
-
$(element).find('.comb').each(function(index){
|
91 |
-
|
92 |
-
top = ( row * (combHeight + settings.margin) ) + (upDown * (combHeight / 2 + (settings.margin / 2)));
|
93 |
-
|
94 |
-
if(animate == true){
|
95 |
-
$(this).stop(true, false);
|
96 |
-
$(this).animate({'left': left, 'top': top});
|
97 |
-
}else{
|
98 |
-
$(this).css('left', left).css('top', top);
|
99 |
-
}
|
100 |
-
|
101 |
-
left = left + ( combWidth - combWidth / 4 + settings.margin );
|
102 |
-
upDown = (upDown + 1) % 2;
|
103 |
-
|
104 |
-
if(row == 0){
|
105 |
-
cols = cols + 1;
|
106 |
-
}
|
107 |
-
|
108 |
-
if(left + combWidth > width){
|
109 |
-
left = 0;
|
110 |
-
row = row + 1;
|
111 |
-
upDown = 1;
|
112 |
-
}
|
113 |
-
});
|
114 |
-
|
115 |
-
$wrapper
|
116 |
-
.width(cols * (combWidth / 4 * 3 + settings.margin) + combWidth / 4)
|
117 |
-
.height((row + 1) * (combHeight + settings.margin) + combHeight / 2);
|
118 |
-
}
|
119 |
-
|
120 |
-
$(window).resize(function(){
|
121 |
-
reorder(true);
|
122 |
-
});
|
123 |
-
|
124 |
-
$(element).find('.comb').mouseenter(function(){
|
125 |
-
$(this).find('.inner_span').stop(true, true);
|
126 |
-
$(this).find('.inner_span').fadeOut(300);
|
127 |
-
});
|
128 |
-
|
129 |
-
$(element).find('.comb').mouseleave(function(){
|
130 |
-
$(this).find('.inner_span').stop(true, true);
|
131 |
-
$(this).find('.inner_span').fadeIn(300);
|
132 |
-
});
|
133 |
-
|
134 |
-
buildHtml();
|
135 |
-
reorder(false);
|
136 |
-
}
|
137 |
-
|
138 |
-
return this.each(function() {
|
139 |
-
initialise(this);
|
140 |
-
});
|
141 |
-
|
142 |
-
};
|
143 |
-
|
144 |
-
$(document).ready(function() {
|
145 |
-
$('.honeycombs').honeycombs();
|
146 |
-
});
|
147 |
-
|
148 |
-
}(jQuery));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/script/jscolor/arrow.gif
DELETED
Binary file
|
inc/script/jscolor/cross.gif
DELETED
Binary file
|
inc/script/jscolor/hs.png
DELETED
Binary file
|
inc/script/jscolor/hv.png
DELETED
Binary file
|
inc/script/jscolor/jscolor.js
DELETED
@@ -1,996 +0,0 @@
|
|
1 |
-
/**
|
2 |
-
* jscolor, JavaScript Color Picker
|
3 |
-
*
|
4 |
-
* @version 1.4.2
|
5 |
-
* @license GNU Lesser General Public License, http://www.gnu.org/copyleft/lesser.html
|
6 |
-
* @author Jan Odvarko, http://odvarko.cz
|
7 |
-
* @created 2008-06-15
|
8 |
-
* @updated 2013-11-25
|
9 |
-
* @link http://jscolor.com
|
10 |
-
*/
|
11 |
-
|
12 |
-
|
13 |
-
var jscolor = {
|
14 |
-
|
15 |
-
dir : '', // location of jscolor directory (leave empty to autodetect)
|
16 |
-
bindClass : 'wp_popup_color', // class name
|
17 |
-
binding : true, // automatic binding via <input class="...">
|
18 |
-
preloading : true, // use image preloading?
|
19 |
-
|
20 |
-
|
21 |
-
install : function() {
|
22 |
-
jscolor.addEvent(window, 'load', jscolor.init);
|
23 |
-
},
|
24 |
-
|
25 |
-
|
26 |
-
init : function() {
|
27 |
-
if(jscolor.binding) {
|
28 |
-
jscolor.bind();
|
29 |
-
}
|
30 |
-
if(jscolor.preloading) {
|
31 |
-
jscolor.preload();
|
32 |
-
}
|
33 |
-
},
|
34 |
-
|
35 |
-
|
36 |
-
getDir : function() {
|
37 |
-
if(!jscolor.dir) {
|
38 |
-
var detected = jscolor.detectDir();
|
39 |
-
jscolor.dir = detected!==false ? detected : 'jscolor/';
|
40 |
-
}
|
41 |
-
return jscolor.dir;
|
42 |
-
},
|
43 |
-
|
44 |
-
|
45 |
-
detectDir : function() {
|
46 |
-
var base = location.href;
|
47 |
-
|
48 |
-
var e = document.getElementsByTagName('base');
|
49 |
-
for(var i=0; i<e.length; i+=1) {
|
50 |
-
if(e[i].href) { base = e[i].href; }
|
51 |
-
}
|
52 |
-
|
53 |
-
var e = document.getElementsByTagName('script');
|
54 |
-
for(var i=0; i<e.length; i+=1) {
|
55 |
-
if(e[i].src && /(^|\/)jscolor\.js([?#].*)?$/i.test(e[i].src)) {
|
56 |
-
var src = new jscolor.URI(e[i].src);
|
57 |
-
var srcAbs = src.toAbsolute(base);
|
58 |
-
srcAbs.path = srcAbs.path.replace(/[^\/]+$/, ''); // remove filename
|
59 |
-
srcAbs.query = null;
|
60 |
-
srcAbs.fragment = null;
|
61 |
-
return srcAbs.toString();
|
62 |
-
}
|
63 |
-
}
|
64 |
-
return false;
|
65 |
-
},
|
66 |
-
|
67 |
-
|
68 |
-
bind : function() {
|
69 |
-
var matchClass = new RegExp('(^|\\s)('+jscolor.bindClass+')\\s*(\\{[^}]*\\})?', 'i');
|
70 |
-
var e = document.getElementsByTagName('input');
|
71 |
-
for(var i=0; i<e.length; i+=1) {
|
72 |
-
var m;
|
73 |
-
if(!e[i].color && e[i].className && (m = e[i].className.match(matchClass))) {
|
74 |
-
var prop = {};
|
75 |
-
if(m[3]) {
|
76 |
-
try {
|
77 |
-
prop = (new Function ('return (' + m[3] + ')'))();
|
78 |
-
} catch(eInvalidProp) {}
|
79 |
-
}
|
80 |
-
e[i].color = new jscolor.color(e[i], prop);
|
81 |
-
}
|
82 |
-
}
|
83 |
-
},
|
84 |
-
|
85 |
-
|
86 |
-
preload : function() {
|
87 |
-
for(var fn in jscolor.imgRequire) {
|
88 |
-
if(jscolor.imgRequire.hasOwnProperty(fn)) {
|
89 |
-
jscolor.loadImage(fn);
|
90 |
-
}
|
91 |
-
}
|
92 |
-
},
|
93 |
-
|
94 |
-
|
95 |
-
images : {
|
96 |
-
pad : [ 181, 101 ],
|
97 |
-
sld : [ 16, 101 ],
|
98 |
-
cross : [ 15, 15 ],
|
99 |
-
arrow : [ 7, 11 ]
|
100 |
-
},
|
101 |
-
|
102 |
-
|
103 |
-
imgRequire : {},
|
104 |
-
imgLoaded : {},
|
105 |
-
|
106 |
-
|
107 |
-
requireImage : function(filename) {
|
108 |
-
jscolor.imgRequire[filename] = true;
|
109 |
-
},
|
110 |
-
|
111 |
-
|
112 |
-
loadImage : function(filename) {
|
113 |
-
if(!jscolor.imgLoaded[filename]) {
|
114 |
-
jscolor.imgLoaded[filename] = new Image();
|
115 |
-
jscolor.imgLoaded[filename].src = jscolor.getDir()+filename;
|
116 |
-
}
|
117 |
-
},
|
118 |
-
|
119 |
-
|
120 |
-
fetchElement : function(mixed) {
|
121 |
-
return typeof mixed === 'string' ? document.getElementById(mixed) : mixed;
|
122 |
-
},
|
123 |
-
|
124 |
-
|
125 |
-
addEvent : function(el, evnt, func) {
|
126 |
-
if(el.addEventListener) {
|
127 |
-
el.addEventListener(evnt, func, false);
|
128 |
-
} else if(el.attachEvent) {
|
129 |
-
el.attachEvent('on'+evnt, func);
|
130 |
-
}
|
131 |
-
},
|
132 |
-
|
133 |
-
|
134 |
-
fireEvent : function(el, evnt) {
|
135 |
-
if(!el) {
|
136 |
-
return;
|
137 |
-
}
|
138 |
-
if(document.createEvent) {
|
139 |
-
var ev = document.createEvent('HTMLEvents');
|
140 |
-
ev.initEvent(evnt, true, true);
|
141 |
-
el.dispatchEvent(ev);
|
142 |
-
} else if(document.createEventObject) {
|
143 |
-
var ev = document.createEventObject();
|
144 |
-
el.fireEvent('on'+evnt, ev);
|
145 |
-
} else if(el['on'+evnt]) { // alternatively use the traditional event model (IE5)
|
146 |
-
el['on'+evnt]();
|
147 |
-
}
|
148 |
-
},
|
149 |
-
|
150 |
-
|
151 |
-
getElementPos : function(e) {
|
152 |
-
var e1=e, e2=e;
|
153 |
-
var x=0, y=0;
|
154 |
-
if(e1.offsetParent) {
|
155 |
-
do {
|
156 |
-
x += e1.offsetLeft;
|
157 |
-
y += e1.offsetTop;
|
158 |
-
} while(e1 = e1.offsetParent);
|
159 |
-
}
|
160 |
-
while((e2 = e2.parentNode) && e2.nodeName.toUpperCase() !== 'BODY') {
|
161 |
-
x -= e2.scrollLeft;
|
162 |
-
y -= e2.scrollTop;
|
163 |
-
}
|
164 |
-
return [x, y];
|
165 |
-
},
|
166 |
-
|
167 |
-
|
168 |
-
getElementSize : function(e) {
|
169 |
-
return [e.offsetWidth, e.offsetHeight];
|
170 |
-
},
|
171 |
-
|
172 |
-
|
173 |
-
getRelMousePos : function(e) {
|
174 |
-
var x = 0, y = 0;
|
175 |
-
if (!e) { e = window.event; }
|
176 |
-
if (typeof e.offsetX === 'number') {
|
177 |
-
x = e.offsetX;
|
178 |
-
y = e.offsetY;
|
179 |
-
} else if (typeof e.layerX === 'number') {
|
180 |
-
x = e.layerX;
|
181 |
-
y = e.layerY;
|
182 |
-
}
|
183 |
-
return { x: x, y: y };
|
184 |
-
},
|
185 |
-
|
186 |
-
|
187 |
-
getViewPos : function() {
|
188 |
-
if(typeof window.pageYOffset === 'number') {
|
189 |
-
return [window.pageXOffset, window.pageYOffset];
|
190 |
-
} else if(document.body && (document.body.scrollLeft || document.body.scrollTop)) {
|
191 |
-
return [document.body.scrollLeft, document.body.scrollTop];
|
192 |
-
} else if(document.documentElement && (document.documentElement.scrollLeft || document.documentElement.scrollTop)) {
|
193 |
-
return [document.documentElement.scrollLeft, document.documentElement.scrollTop];
|
194 |
-
} else {
|
195 |
-
return [0, 0];
|
196 |
-
}
|
197 |
-
},
|
198 |
-
|
199 |
-
|
200 |
-
getViewSize : function() {
|
201 |
-
if(typeof window.innerWidth === 'number') {
|
202 |
-
return [window.innerWidth, window.innerHeight];
|
203 |
-
} else if(document.body && (document.body.clientWidth || document.body.clientHeight)) {
|
204 |
-
return [document.body.clientWidth, document.body.clientHeight];
|
205 |
-
} else if(document.documentElement && (document.documentElement.clientWidth || document.documentElement.clientHeight)) {
|
206 |
-
return [document.documentElement.clientWidth, document.documentElement.clientHeight];
|
207 |
-
} else {
|
208 |
-
return [0, 0];
|
209 |
-
}
|
210 |
-
},
|
211 |
-
|
212 |
-
|
213 |
-
URI : function(uri) { // See RFC3986
|
214 |
-
|
215 |
-
this.scheme = null;
|
216 |
-
this.authority = null;
|
217 |
-
this.path = '';
|
218 |
-
this.query = null;
|
219 |
-
this.fragment = null;
|
220 |
-
|
221 |
-
this.parse = function(uri) {
|
222 |
-
var m = uri.match(/^(([A-Za-z][0-9A-Za-z+.-]*)(:))?((\/\/)([^\/?#]*))?([^?#]*)((\?)([^#]*))?((#)(.*))?/);
|
223 |
-
this.scheme = m[3] ? m[2] : null;
|
224 |
-
this.authority = m[5] ? m[6] : null;
|
225 |
-
this.path = m[7];
|
226 |
-
this.query = m[9] ? m[10] : null;
|
227 |
-
this.fragment = m[12] ? m[13] : null;
|
228 |
-
return this;
|
229 |
-
};
|
230 |
-
|
231 |
-
this.toString = function() {
|
232 |
-
var result = '';
|
233 |
-
if(this.scheme !== null) { result = result + this.scheme + ':'; }
|
234 |
-
if(this.authority !== null) { result = result + '//' + this.authority; }
|
235 |
-
if(this.path !== null) { result = result + this.path; }
|
236 |
-
if(this.query !== null) { result = result + '?' + this.query; }
|
237 |
-
if(this.fragment !== null) { result = result + '#' + this.fragment; }
|
238 |
-
return result;
|
239 |
-
};
|
240 |
-
|
241 |
-
this.toAbsolute = function(base) {
|
242 |
-
var base = new jscolor.URI(base);
|
243 |
-
var r = this;
|
244 |
-
var t = new jscolor.URI;
|
245 |
-
|
246 |
-
if(base.scheme === null) { return false; }
|
247 |
-
|
248 |
-
if(r.scheme !== null && r.scheme.toLowerCase() === base.scheme.toLowerCase()) {
|
249 |
-
r.scheme = null;
|
250 |
-
}
|
251 |
-
|
252 |
-
if(r.scheme !== null) {
|
253 |
-
t.scheme = r.scheme;
|
254 |
-
t.authority = r.authority;
|
255 |
-
t.path = removeDotSegments(r.path);
|
256 |
-
t.query = r.query;
|
257 |
-
} else {
|
258 |
-
if(r.authority !== null) {
|
259 |
-
t.authority = r.authority;
|
260 |
-
t.path = removeDotSegments(r.path);
|
261 |
-
t.query = r.query;
|
262 |
-
} else {
|
263 |
-
if(r.path === '') {
|
264 |
-
t.path = base.path;
|
265 |
-
if(r.query !== null) {
|
266 |
-
t.query = r.query;
|
267 |
-
} else {
|
268 |
-
t.query = base.query;
|
269 |
-
}
|
270 |
-
} else {
|
271 |
-
if(r.path.substr(0,1) === '/') {
|
272 |
-
t.path = removeDotSegments(r.path);
|
273 |
-
} else {
|
274 |
-
if(base.authority !== null && base.path === '') {
|
275 |
-
t.path = '/'+r.path;
|
276 |
-
} else {
|
277 |
-
t.path = base.path.replace(/[^\/]+$/,'')+r.path;
|
278 |
-
}
|
279 |
-
t.path = removeDotSegments(t.path);
|
280 |
-
}
|
281 |
-
t.query = r.query;
|
282 |
-
}
|
283 |
-
t.authority = base.authority;
|
284 |
-
}
|
285 |
-
t.scheme = base.scheme;
|
286 |
-
}
|
287 |
-
t.fragment = r.fragment;
|
288 |
-
|
289 |
-
return t;
|
290 |
-
};
|
291 |
-
|
292 |
-
function removeDotSegments(path) {
|
293 |
-
var out = '';
|
294 |
-
while(path) {
|
295 |
-
if(path.substr(0,3)==='../' || path.substr(0,2)==='./') {
|
296 |
-
path = path.replace(/^\.+/,'').substr(1);
|
297 |
-
} else if(path.substr(0,3)==='/./' || path==='/.') {
|
298 |
-
path = '/'+path.substr(3);
|
299 |
-
} else if(path.substr(0,4)==='/../' || path==='/..') {
|
300 |
-
path = '/'+path.substr(4);
|
301 |
-
out = out.replace(/\/?[^\/]*$/, '');
|
302 |
-
} else if(path==='.' || path==='..') {
|
303 |
-
path = '';
|
304 |
-
} else {
|
305 |
-
var rm = path.match(/^\/?[^\/]*/)[0];
|
306 |
-
path = path.substr(rm.length);
|
307 |
-
out = out + rm;
|
308 |
-
}
|
309 |
-
}
|
310 |
-
return out;
|
311 |
-
}
|
312 |
-
|
313 |
-
if(uri) {
|
314 |
-
this.parse(uri);
|
315 |
-
}
|
316 |
-
|
317 |
-
},
|
318 |
-
|
319 |
-
|
320 |
-
//
|
321 |
-
// Usage example:
|
322 |
-
// var myColor = new jscolor.color(myInputElement)
|
323 |
-
//
|
324 |
-
|
325 |
-
color : function(target, prop) {
|
326 |
-
|
327 |
-
|
328 |
-
this.required = true; // refuse empty values?
|
329 |
-
this.adjust = true; // adjust value to uniform notation?
|
330 |
-
this.hash = false; // prefix color with # symbol?
|
331 |
-
this.caps = true; // uppercase?
|
332 |
-
this.slider = true; // show the value/saturation slider?
|
333 |
-
this.valueElement = target; // value holder
|
334 |
-
this.styleElement = target; // where to reflect current color
|
335 |
-
this.onImmediateChange = null; // onchange callback (can be either string or function)
|
336 |
-
this.hsv = [0, 0, 1]; // read-only 0-6, 0-1, 0-1
|
337 |
-
this.rgb = [1, 1, 1]; // read-only 0-1, 0-1, 0-1
|
338 |
-
this.minH = 0; // read-only 0-6
|
339 |
-
this.maxH = 6; // read-only 0-6
|
340 |
-
this.minS = 0; // read-only 0-1
|
341 |
-
this.maxS = 1; // read-only 0-1
|
342 |
-
this.minV = 0; // read-only 0-1
|
343 |
-
this.maxV = 1; // read-only 0-1
|
344 |
-
|
345 |
-
this.pickerOnfocus = true; // display picker on focus?
|
346 |
-
this.pickerMode = 'HSV'; // HSV | HVS
|
347 |
-
this.pickerPosition = 'bottom'; // left | right | top | bottom
|
348 |
-
this.pickerSmartPosition = true; // automatically adjust picker position when necessary
|
349 |
-
this.pickerButtonHeight = 20; // px
|
350 |
-
this.pickerClosable = false;
|
351 |
-
this.pickerCloseText = 'Close';
|
352 |
-
this.pickerButtonColor = 'ButtonText'; // px
|
353 |
-
this.pickerFace = 10; // px
|
354 |
-
this.pickerFaceColor = 'ThreeDFace'; // CSS color
|
355 |
-
this.pickerBorder = 1; // px
|
356 |
-
this.pickerBorderColor = 'ThreeDHighlight ThreeDShadow ThreeDShadow ThreeDHighlight'; // CSS color
|
357 |
-
this.pickerInset = 1; // px
|
358 |
-
this.pickerInsetColor = 'ThreeDShadow ThreeDHighlight ThreeDHighlight ThreeDShadow'; // CSS color
|
359 |
-
this.pickerZIndex = 10000;
|
360 |
-
|
361 |
-
|
362 |
-
for(var p in prop) {
|
363 |
-
if(prop.hasOwnProperty(p)) {
|
364 |
-
this[p] = prop[p];
|
365 |
-
}
|
366 |
-
}
|
367 |
-
|
368 |
-
|
369 |
-
this.hidePicker = function() {
|
370 |
-
if(isPickerOwner()) {
|
371 |
-
removePicker();
|
372 |
-
}
|
373 |
-
};
|
374 |
-
|
375 |
-
|
376 |
-
this.showPicker = function() {
|
377 |
-
if(!isPickerOwner()) {
|
378 |
-
var tp = jscolor.getElementPos(target); // target pos
|
379 |
-
var ts = jscolor.getElementSize(target); // target size
|
380 |
-
var vp = jscolor.getViewPos(); // view pos
|
381 |
-
var vs = jscolor.getViewSize(); // view size
|
382 |
-
var ps = getPickerDims(this); // picker size
|
383 |
-
var a, b, c;
|
384 |
-
switch(this.pickerPosition.toLowerCase()) {
|
385 |
-
case 'left': a=1; b=0; c=-1; break;
|
386 |
-
case 'right':a=1; b=0; c=1; break;
|
387 |
-
case 'top': a=0; b=1; c=-1; break;
|
388 |
-
default: a=0; b=1; c=1; break;
|
389 |
-
}
|
390 |
-
var l = (ts[b]+ps[b])/2;
|
391 |
-
|
392 |
-
// picker pos
|
393 |
-
if (!this.pickerSmartPosition) {
|
394 |
-
var pp = [
|
395 |
-
tp[a],
|
396 |
-
tp[b]+ts[b]-l+l*c
|
397 |
-
];
|
398 |
-
} else {
|
399 |
-
var pp = [
|
400 |
-
-vp[a]+tp[a]+ps[a] > vs[a] ?
|
401 |
-
(-vp[a]+tp[a]+ts[a]/2 > vs[a]/2 && tp[a]+ts[a]-ps[a] >= 0 ? tp[a]+ts[a]-ps[a] : tp[a]) :
|
402 |
-
tp[a],
|
403 |
-
-vp[b]+tp[b]+ts[b]+ps[b]-l+l*c > vs[b] ?
|
404 |
-
(-vp[b]+tp[b]+ts[b]/2 > vs[b]/2 && tp[b]+ts[b]-l-l*c >= 0 ? tp[b]+ts[b]-l-l*c : tp[b]+ts[b]-l+l*c) :
|
405 |
-
(tp[b]+ts[b]-l+l*c >= 0 ? tp[b]+ts[b]-l+l*c : tp[b]+ts[b]-l-l*c)
|
406 |
-
];
|
407 |
-
}
|
408 |
-
drawPicker(pp[a], pp[b]);
|
409 |
-
}
|
410 |
-
};
|
411 |
-
|
412 |
-
|
413 |
-
this.importColor = function() {
|
414 |
-
if(!valueElement) {
|
415 |
-
this.exportColor();
|
416 |
-
} else {
|
417 |
-
if(!this.adjust) {
|
418 |
-
if(!this.fromString(valueElement.value, leaveValue)) {
|
419 |
-
styleElement.style.backgroundImage = styleElement.jscStyle.backgroundImage;
|
420 |
-
styleElement.style.backgroundColor = styleElement.jscStyle.backgroundColor;
|
421 |
-
styleElement.style.color = styleElement.jscStyle.color;
|
422 |
-
this.exportColor(leaveValue | leaveStyle);
|
423 |
-
}
|
424 |
-
} else if(!this.required && /^\s*$/.test(valueElement.value)) {
|
425 |
-
valueElement.value = '';
|
426 |
-
styleElement.style.backgroundImage = styleElement.jscStyle.backgroundImage;
|
427 |
-
styleElement.style.backgroundColor = styleElement.jscStyle.backgroundColor;
|
428 |
-
styleElement.style.color = styleElement.jscStyle.color;
|
429 |
-
this.exportColor(leaveValue | leaveStyle);
|
430 |
-
|
431 |
-
} else if(this.fromString(valueElement.value)) {
|
432 |
-
// OK
|
433 |
-
} else {
|
434 |
-
this.exportColor();
|
435 |
-
}
|
436 |
-
}
|
437 |
-
};
|
438 |
-
|
439 |
-
|
440 |
-
this.exportColor = function(flags) {
|
441 |
-
if(!(flags & leaveValue) && valueElement) {
|
442 |
-
var value = this.toString();
|
443 |
-
if(this.caps) { value = value.toUpperCase(); }
|
444 |
-
if(this.hash) { value = '#'+value; }
|
445 |
-
valueElement.value = value;
|
446 |
-
}
|
447 |
-
if(!(flags & leaveStyle) && styleElement) {
|
448 |
-
styleElement.style.backgroundImage = "none";
|
449 |
-
styleElement.style.backgroundColor =
|
450 |
-
'#'+this.toString();
|
451 |
-
styleElement.style.color =
|
452 |
-
0.213 * this.rgb[0] +
|
453 |
-
0.715 * this.rgb[1] +
|
454 |
-
0.072 * this.rgb[2]
|
455 |
-
< 0.5 ? '#FFF' : '#000';
|
456 |
-
}
|
457 |
-
if(!(flags & leavePad) && isPickerOwner()) {
|
458 |
-
redrawPad();
|
459 |
-
}
|
460 |
-
if(!(flags & leaveSld) && isPickerOwner()) {
|
461 |
-
redrawSld();
|
462 |
-
}
|
463 |
-
};
|
464 |
-
|
465 |
-
|
466 |
-
this.fromHSV = function(h, s, v, flags) { // null = don't change
|
467 |
-
if(h !== null) { h = Math.max(0.0, this.minH, Math.min(6.0, this.maxH, h)); }
|
468 |
-
if(s !== null) { s = Math.max(0.0, this.minS, Math.min(1.0, this.maxS, s)); }
|
469 |
-
if(v !== null) { v = Math.max(0.0, this.minV, Math.min(1.0, this.maxV, v)); }
|
470 |
-
|
471 |
-
this.rgb = HSV_RGB(
|
472 |
-
h===null ? this.hsv[0] : (this.hsv[0]=h),
|
473 |
-
s===null ? this.hsv[1] : (this.hsv[1]=s),
|
474 |
-
v===null ? this.hsv[2] : (this.hsv[2]=v)
|
475 |
-
);
|
476 |
-
|
477 |
-
this.exportColor(flags);
|
478 |
-
};
|
479 |
-
|
480 |
-
|
481 |
-
this.fromRGB = function(r, g, b, flags) { // null = don't change
|
482 |
-
if(r !== null) { r = Math.max(0.0, Math.min(1.0, r)); }
|
483 |
-
if(g !== null) { g = Math.max(0.0, Math.min(1.0, g)); }
|
484 |
-
if(b !== null) { b = Math.max(0.0, Math.min(1.0, b)); }
|
485 |
-
|
486 |
-
var hsv = RGB_HSV(
|
487 |
-
r===null ? this.rgb[0] : r,
|
488 |
-
g===null ? this.rgb[1] : g,
|
489 |
-
b===null ? this.rgb[2] : b
|
490 |
-
);
|
491 |
-
if(hsv[0] !== null) {
|
492 |
-
this.hsv[0] = Math.max(0.0, this.minH, Math.min(6.0, this.maxH, hsv[0]));
|
493 |
-
}
|
494 |
-
if(hsv[2] !== 0) {
|
495 |
-
this.hsv[1] = hsv[1]===null ? null : Math.max(0.0, this.minS, Math.min(1.0, this.maxS, hsv[1]));
|
496 |
-
}
|
497 |
-
this.hsv[2] = hsv[2]===null ? null : Math.max(0.0, this.minV, Math.min(1.0, this.maxV, hsv[2]));
|
498 |
-
|
499 |
-
// update RGB according to final HSV, as some values might be trimmed
|
500 |
-
var rgb = HSV_RGB(this.hsv[0], this.hsv[1], this.hsv[2]);
|
501 |
-
this.rgb[0] = rgb[0];
|
502 |
-
this.rgb[1] = rgb[1];
|
503 |
-
this.rgb[2] = rgb[2];
|
504 |
-
|
505 |
-
this.exportColor(flags);
|
506 |
-
};
|
507 |
-
|
508 |
-
|
509 |
-
this.fromString = function(hex, flags) {
|
510 |
-
var m = hex.match(/^\W*([0-9A-F]{3}([0-9A-F]{3})?)\W*$/i);
|
511 |
-
if(!m) {
|
512 |
-
return false;
|
513 |
-
} else {
|
514 |
-
if(m[1].length === 6) { // 6-char notation
|
515 |
-
this.fromRGB(
|
516 |
-
parseInt(m[1].substr(0,2),16) / 255,
|
517 |
-
parseInt(m[1].substr(2,2),16) / 255,
|
518 |
-
parseInt(m[1].substr(4,2),16) / 255,
|
519 |
-
flags
|
520 |
-
);
|
521 |
-
} else { // 3-char notation
|
522 |
-
this.fromRGB(
|
523 |
-
parseInt(m[1].charAt(0)+m[1].charAt(0),16) / 255,
|
524 |
-
parseInt(m[1].charAt(1)+m[1].charAt(1),16) / 255,
|
525 |
-
parseInt(m[1].charAt(2)+m[1].charAt(2),16) / 255,
|
526 |
-
flags
|
527 |
-
);
|
528 |
-
}
|
529 |
-
return true;
|
530 |
-
}
|
531 |
-
};
|
532 |
-
|
533 |
-
|
534 |
-
this.toString = function() {
|
535 |
-
return (
|
536 |
-
(0x100 | Math.round(255*this.rgb[0])).toString(16).substr(1) +
|
537 |
-
(0x100 | Math.round(255*this.rgb[1])).toString(16).substr(1) +
|
538 |
-
(0x100 | Math.round(255*this.rgb[2])).toString(16).substr(1)
|
539 |
-
);
|
540 |
-
};
|
541 |
-
|
542 |
-
|
543 |
-
function RGB_HSV(r, g, b) {
|
544 |
-
var n = Math.min(Math.min(r,g),b);
|
545 |
-
var v = Math.max(Math.max(r,g),b);
|
546 |
-
var m = v - n;
|
547 |
-
if(m === 0) { return [ null, 0, v ]; }
|
548 |
-
var h = r===n ? 3+(b-g)/m : (g===n ? 5+(r-b)/m : 1+(g-r)/m);
|
549 |
-
return [ h===6?0:h, m/v, v ];
|
550 |
-
}
|
551 |
-
|
552 |
-
|
553 |
-
function HSV_RGB(h, s, v) {
|
554 |
-
if(h === null) { return [ v, v, v ]; }
|
555 |
-
var i = Math.floor(h);
|
556 |
-
var f = i%2 ? h-i : 1-(h-i);
|
557 |
-
var m = v * (1 - s);
|
558 |
-
var n = v * (1 - s*f);
|
559 |
-
switch(i) {
|
560 |
-
case 6:
|
561 |
-
case 0: return [v,n,m];
|
562 |
-
case 1: return [n,v,m];
|
563 |
-
case 2: return [m,v,n];
|
564 |
-
case 3: return [m,n,v];
|
565 |
-
case 4: return [n,m,v];
|
566 |
-
case 5: return [v,m,n];
|
567 |
-
}
|
568 |
-
}
|
569 |
-
|
570 |
-
|
571 |
-
function removePicker() {
|
572 |
-
delete jscolor.picker.owner;
|
573 |
-
document.getElementsByTagName('body')[0].removeChild(jscolor.picker.boxB);
|
574 |
-
}
|
575 |
-
|
576 |
-
|
577 |
-
function drawPicker(x, y) {
|
578 |
-
if(!jscolor.picker) {
|
579 |
-
jscolor.picker = {
|
580 |
-
box : document.createElement('div'),
|
581 |
-
boxB : document.createElement('div'),
|
582 |
-
pad : document.createElement('div'),
|
583 |
-
padB : document.createElement('div'),
|
584 |
-
padM : document.createElement('div'),
|
585 |
-
sld : document.createElement('div'),
|
586 |
-
sldB : document.createElement('div'),
|
587 |
-
sldM : document.createElement('div'),
|
588 |
-
btn : document.createElement('div'),
|
589 |
-
btnS : document.createElement('span'),
|
590 |
-
btnT : document.createTextNode(THIS.pickerCloseText)
|
591 |
-
};
|
592 |
-
for(var i=0,segSize=4; i<jscolor.images.sld[1]; i+=segSize) {
|
593 |
-
var seg = document.createElement('div');
|
594 |
-
seg.style.height = segSize+'px';
|
595 |
-
seg.style.fontSize = '1px';
|
596 |
-
seg.style.lineHeight = '0';
|
597 |
-
jscolor.picker.sld.appendChild(seg);
|
598 |
-
}
|
599 |
-
jscolor.picker.sldB.appendChild(jscolor.picker.sld);
|
600 |
-
jscolor.picker.box.appendChild(jscolor.picker.sldB);
|
601 |
-
jscolor.picker.box.appendChild(jscolor.picker.sldM);
|
602 |
-
jscolor.picker.padB.appendChild(jscolor.picker.pad);
|
603 |
-
jscolor.picker.box.appendChild(jscolor.picker.padB);
|
604 |
-
jscolor.picker.box.appendChild(jscolor.picker.padM);
|
605 |
-
jscolor.picker.btnS.appendChild(jscolor.picker.btnT);
|
606 |
-
jscolor.picker.btn.appendChild(jscolor.picker.btnS);
|
607 |
-
jscolor.picker.box.appendChild(jscolor.picker.btn);
|
608 |
-
jscolor.picker.boxB.appendChild(jscolor.picker.box);
|
609 |
-
}
|
610 |
-
|
611 |
-
var p = jscolor.picker;
|
612 |
-
|
613 |
-
// controls interaction
|
614 |
-
p.box.onmouseup =
|
615 |
-
p.box.onmouseout = function() { target.focus(); };
|
616 |
-
p.box.onmousedown = function() { abortBlur=true; };
|
617 |
-
p.box.onmousemove = function(e) {
|
618 |
-
if (holdPad || holdSld) {
|
619 |
-
holdPad && setPad(e);
|
620 |
-
holdSld && setSld(e);
|
621 |
-
if (document.selection) {
|
622 |
-
document.selection.empty();
|
623 |
-
} else if (window.getSelection) {
|
624 |
-
window.getSelection().removeAllRanges();
|
625 |
-
}
|
626 |
-
dispatchImmediateChange();
|
627 |
-
}
|
628 |
-
};
|
629 |
-
if('ontouchstart' in window) { // if touch device
|
630 |
-
var handle_touchmove = function(e) {
|
631 |
-
var event={
|
632 |
-
'offsetX': e.touches[0].pageX-touchOffset.X,
|
633 |
-
'offsetY': e.touches[0].pageY-touchOffset.Y
|
634 |
-
};
|
635 |
-
if (holdPad || holdSld) {
|
636 |
-
holdPad && setPad(event);
|
637 |
-
holdSld && setSld(event);
|
638 |
-
dispatchImmediateChange();
|
639 |
-
}
|
640 |
-
e.stopPropagation(); // prevent move "view" on broswer
|
641 |
-
e.preventDefault(); // prevent Default - Android Fix (else android generated only 1-2 touchmove events)
|
642 |
-
};
|
643 |
-
p.box.removeEventListener('touchmove', handle_touchmove, false)
|
644 |
-
p.box.addEventListener('touchmove', handle_touchmove, false)
|
645 |
-
}
|
646 |
-
p.padM.onmouseup =
|
647 |
-
p.padM.onmouseout = function() { if(holdPad) { holdPad=false; jscolor.fireEvent(valueElement,'change'); } };
|
648 |
-
p.padM.onmousedown = function(e) {
|
649 |
-
// if the slider is at the bottom, move it up
|
650 |
-
switch(modeID) {
|
651 |
-
case 0: if (THIS.hsv[2] === 0) { THIS.fromHSV(null, null, 1.0); }; break;
|
652 |
-
case 1: if (THIS.hsv[1] === 0) { THIS.fromHSV(null, 1.0, null); }; break;
|
653 |
-
}
|
654 |
-
holdSld=false;
|
655 |
-
holdPad=true;
|
656 |
-
setPad(e);
|
657 |
-
dispatchImmediateChange();
|
658 |
-
};
|
659 |
-
if('ontouchstart' in window) {
|
660 |
-
p.padM.addEventListener('touchstart', function(e) {
|
661 |
-
touchOffset={
|
662 |
-
'X': e.target.offsetParent.offsetLeft,
|
663 |
-
'Y': e.target.offsetParent.offsetTop
|
664 |
-
};
|
665 |
-
this.onmousedown({
|
666 |
-
'offsetX':e.touches[0].pageX-touchOffset.X,
|
667 |
-
'offsetY':e.touches[0].pageY-touchOffset.Y
|
668 |
-
});
|
669 |
-
});
|
670 |
-
}
|
671 |
-
p.sldM.onmouseup =
|
672 |
-
p.sldM.onmouseout = function() { if(holdSld) { holdSld=false; jscolor.fireEvent(valueElement,'change'); } };
|
673 |
-
p.sldM.onmousedown = function(e) {
|
674 |
-
holdPad=false;
|
675 |
-
holdSld=true;
|
676 |
-
setSld(e);
|
677 |
-
dispatchImmediateChange();
|
678 |
-
};
|
679 |
-
if('ontouchstart' in window) {
|
680 |
-
p.sldM.addEventListener('touchstart', function(e) {
|
681 |
-
touchOffset={
|
682 |
-
'X': e.target.offsetParent.offsetLeft,
|
683 |
-
'Y': e.target.offsetParent.offsetTop
|
684 |
-
};
|
685 |
-
this.onmousedown({
|
686 |
-
'offsetX':e.touches[0].pageX-touchOffset.X,
|
687 |
-
'offsetY':e.touches[0].pageY-touchOffset.Y
|
688 |
-
});
|
689 |
-
});
|
690 |
-
}
|
691 |
-
|
692 |
-
// picker
|
693 |
-
var dims = getPickerDims(THIS);
|
694 |
-
p.box.style.width = dims[0] + 'px';
|
695 |
-
p.box.style.height = dims[1] + 'px';
|
696 |
-
|
697 |
-
// picker border
|
698 |
-
p.boxB.style.position = 'absolute';
|
699 |
-
p.boxB.style.clear = 'both';
|
700 |
-
p.boxB.style.left = x+'px';
|
701 |
-
p.boxB.style.top = y+'px';
|
702 |
-
p.boxB.style.zIndex = THIS.pickerZIndex;
|
703 |
-
p.boxB.style.border = THIS.pickerBorder+'px solid';
|
704 |
-
p.boxB.style.borderColor = THIS.pickerBorderColor;
|
705 |
-
p.boxB.style.background = THIS.pickerFaceColor;
|
706 |
-
|
707 |
-
// pad image
|
708 |
-
p.pad.style.width = jscolor.images.pad[0]+'px';
|
709 |
-
p.pad.style.height = jscolor.images.pad[1]+'px';
|
710 |
-
|
711 |
-
// pad border
|
712 |
-
p.padB.style.position = 'absolute';
|
713 |
-
p.padB.style.left = THIS.pickerFace+'px';
|
714 |
-
p.padB.style.top = THIS.pickerFace+'px';
|
715 |
-
p.padB.style.border = THIS.pickerInset+'px solid';
|
716 |
-
p.padB.style.borderColor = THIS.pickerInsetColor;
|
717 |
-
|
718 |
-
// pad mouse area
|
719 |
-
p.padM.style.position = 'absolute';
|
720 |
-
p.padM.style.left = '0';
|
721 |
-
p.padM.style.top = '0';
|
722 |
-
p.padM.style.width = THIS.pickerFace + 2*THIS.pickerInset + jscolor.images.pad[0] + jscolor.images.arrow[0] + 'px';
|
723 |
-
p.padM.style.height = p.box.style.height;
|
724 |
-
p.padM.style.cursor = 'crosshair';
|
725 |
-
|
726 |
-
// slider image
|
727 |
-
p.sld.style.overflow = 'hidden';
|
728 |
-
p.sld.style.width = jscolor.images.sld[0]+'px';
|
729 |
-
p.sld.style.height = jscolor.images.sld[1]+'px';
|
730 |
-
|
731 |
-
// slider border
|
732 |
-
p.sldB.style.display = THIS.slider ? 'block' : 'none';
|
733 |
-
p.sldB.style.position = 'absolute';
|
734 |
-
p.sldB.style.right = THIS.pickerFace+'px';
|
735 |
-
p.sldB.style.top = THIS.pickerFace+'px';
|
736 |
-
p.sldB.style.border = THIS.pickerInset+'px solid';
|
737 |
-
p.sldB.style.borderColor = THIS.pickerInsetColor;
|
738 |
-
|
739 |
-
// slider mouse area
|
740 |
-
p.sldM.style.display = THIS.slider ? 'block' : 'none';
|
741 |
-
p.sldM.style.position = 'absolute';
|
742 |
-
p.sldM.style.right = '0';
|
743 |
-
p.sldM.style.top = '0';
|
744 |
-
p.sldM.style.width = jscolor.images.sld[0] + jscolor.images.arrow[0] + THIS.pickerFace + 2*THIS.pickerInset + 'px';
|
745 |
-
p.sldM.style.height = p.box.style.height;
|
746 |
-
try {
|
747 |
-
p.sldM.style.cursor = 'pointer';
|
748 |
-
} catch(eOldIE) {
|
749 |
-
p.sldM.style.cursor = 'hand';
|
750 |
-
}
|
751 |
-
|
752 |
-
// "close" button
|
753 |
-
function setBtnBorder() {
|
754 |
-
var insetColors = THIS.pickerInsetColor.split(/\s+/);
|
755 |
-
var pickerOutsetColor = insetColors.length < 2 ? insetColors[0] : insetColors[1] + ' ' + insetColors[0] + ' ' + insetColors[0] + ' ' + insetColors[1];
|
756 |
-
p.btn.style.borderColor = pickerOutsetColor;
|
757 |
-
}
|
758 |
-
p.btn.style.display = THIS.pickerClosable ? 'block' : 'none';
|
759 |
-
p.btn.style.position = 'absolute';
|
760 |
-
p.btn.style.left = THIS.pickerFace + 'px';
|
761 |
-
p.btn.style.bottom = THIS.pickerFace + 'px';
|
762 |
-
p.btn.style.padding = '0 15px';
|
763 |
-
p.btn.style.height = '18px';
|
764 |
-
p.btn.style.border = THIS.pickerInset + 'px solid';
|
765 |
-
setBtnBorder();
|
766 |
-
p.btn.style.color = THIS.pickerButtonColor;
|
767 |
-
p.btn.style.font = '12px sans-serif';
|
768 |
-
p.btn.style.textAlign = 'center';
|
769 |
-
try {
|
770 |
-
p.btn.style.cursor = 'pointer';
|
771 |
-
} catch(eOldIE) {
|
772 |
-
p.btn.style.cursor = 'hand';
|
773 |
-
}
|
774 |
-
p.btn.onmousedown = function () {
|
775 |
-
THIS.hidePicker();
|
776 |
-
};
|
777 |
-
p.btnS.style.lineHeight = p.btn.style.height;
|
778 |
-
|
779 |
-
// load images in optimal order
|
780 |
-
switch(modeID) {
|
781 |
-
case 0: var padImg = 'hs.png'; break;
|
782 |
-
case 1: var padImg = 'hv.png'; break;
|
783 |
-
}
|
784 |
-
p.padM.style.backgroundImage = "url('"+jscolor.getDir()+"cross.gif')";
|
785 |
-
p.padM.style.backgroundRepeat = "no-repeat";
|
786 |
-
p.sldM.style.backgroundImage = "url('"+jscolor.getDir()+"arrow.gif')";
|
787 |
-
p.sldM.style.backgroundRepeat = "no-repeat";
|
788 |
-
p.pad.style.backgroundImage = "url('"+jscolor.getDir()+padImg+"')";
|
789 |
-
p.pad.style.backgroundRepeat = "no-repeat";
|
790 |
-
p.pad.style.backgroundPosition = "0 0";
|
791 |
-
|
792 |
-
// place pointers
|
793 |
-
redrawPad();
|
794 |
-
redrawSld();
|
795 |
-
|
796 |
-
jscolor.picker.owner = THIS;
|
797 |
-
document.getElementsByTagName('body')[0].appendChild(p.boxB);
|
798 |
-
}
|
799 |
-
|
800 |
-
|
801 |
-
function getPickerDims(o) {
|
802 |
-
var dims = [
|
803 |
-
2*o.pickerInset + 2*o.pickerFace + jscolor.images.pad[0] +
|
804 |
-
(o.slider ? 2*o.pickerInset + 2*jscolor.images.arrow[0] + jscolor.images.sld[0] : 0),
|
805 |
-
o.pickerClosable ?
|
806 |
-
4*o.pickerInset + 3*o.pickerFace + jscolor.images.pad[1] + o.pickerButtonHeight :
|
807 |
-
2*o.pickerInset + 2*o.pickerFace + jscolor.images.pad[1]
|
808 |
-
];
|
809 |
-
return dims;
|
810 |
-
}
|
811 |
-
|
812 |
-
|
813 |
-
function redrawPad() {
|
814 |
-
// redraw the pad pointer
|
815 |
-
switch(modeID) {
|
816 |
-
case 0: var yComponent = 1; break;
|
817 |
-
case 1: var yComponent = 2; break;
|
818 |
-
}
|
819 |
-
var x = Math.round((THIS.hsv[0]/6) * (jscolor.images.pad[0]-1));
|
820 |
-
var y = Math.round((1-THIS.hsv[yComponent]) * (jscolor.images.pad[1]-1));
|
821 |
-
jscolor.picker.padM.style.backgroundPosition =
|
822 |
-
(THIS.pickerFace+THIS.pickerInset+x - Math.floor(jscolor.images.cross[0]/2)) + 'px ' +
|
823 |
-
(THIS.pickerFace+THIS.pickerInset+y - Math.floor(jscolor.images.cross[1]/2)) + 'px';
|
824 |
-
|
825 |
-
// redraw the slider image
|
826 |
-
var seg = jscolor.picker.sld.childNodes;
|
827 |
-
|
828 |
-
switch(modeID) {
|
829 |
-
case 0:
|
830 |
-
var rgb = HSV_RGB(THIS.hsv[0], THIS.hsv[1], 1);
|
831 |
-
for(var i=0; i<seg.length; i+=1) {
|
832 |
-
seg[i].style.backgroundColor = 'rgb('+
|
833 |
-
(rgb[0]*(1-i/seg.length)*100)+'%,'+
|
834 |
-
(rgb[1]*(1-i/seg.length)*100)+'%,'+
|
835 |
-
(rgb[2]*(1-i/seg.length)*100)+'%)';
|
836 |
-
}
|
837 |
-
break;
|
838 |
-
case 1:
|
839 |
-
var rgb, s, c = [ THIS.hsv[2], 0, 0 ];
|
840 |
-
var i = Math.floor(THIS.hsv[0]);
|
841 |
-
var f = i%2 ? THIS.hsv[0]-i : 1-(THIS.hsv[0]-i);
|
842 |
-
switch(i) {
|
843 |
-
case 6:
|
844 |
-
case 0: rgb=[0,1,2]; break;
|
845 |
-
case 1: rgb=[1,0,2]; break;
|
846 |
-
case 2: rgb=[2,0,1]; break;
|
847 |
-
case 3: rgb=[2,1,0]; break;
|
848 |
-
case 4: rgb=[1,2,0]; break;
|
849 |
-
case 5: rgb=[0,2,1]; break;
|
850 |
-
}
|
851 |
-
for(var i=0; i<seg.length; i+=1) {
|
852 |
-
s = 1 - 1/(seg.length-1)*i;
|
853 |
-
c[1] = c[0] * (1 - s*f);
|
854 |
-
c[2] = c[0] * (1 - s);
|
855 |
-
seg[i].style.backgroundColor = 'rgb('+
|
856 |
-
(c[rgb[0]]*100)+'%,'+
|
857 |
-
(c[rgb[1]]*100)+'%,'+
|
858 |
-
(c[rgb[2]]*100)+'%)';
|
859 |
-
}
|
860 |
-
break;
|
861 |
-
}
|
862 |
-
}
|
863 |
-
|
864 |
-
|
865 |
-
function redrawSld() {
|
866 |
-
// redraw the slider pointer
|
867 |
-
switch(modeID) {
|
868 |
-
case 0: var yComponent = 2; break;
|
869 |
-
case 1: var yComponent = 1; break;
|
870 |
-
}
|
871 |
-
var y = Math.round((1-THIS.hsv[yComponent]) * (jscolor.images.sld[1]-1));
|
872 |
-
jscolor.picker.sldM.style.backgroundPosition =
|
873 |
-
'0 ' + (THIS.pickerFace+THIS.pickerInset+y - Math.floor(jscolor.images.arrow[1]/2)) + 'px';
|
874 |
-
}
|
875 |
-
|
876 |
-
|
877 |
-
function isPickerOwner() {
|
878 |
-
return jscolor.picker && jscolor.picker.owner === THIS;
|
879 |
-
}
|
880 |
-
|
881 |
-
|
882 |
-
function blurTarget() {
|
883 |
-
if(valueElement === target) {
|
884 |
-
THIS.importColor();
|
885 |
-
}
|
886 |
-
if(THIS.pickerOnfocus) {
|
887 |
-
THIS.hidePicker();
|
888 |
-
}
|
889 |
-
}
|
890 |
-
|
891 |
-
|
892 |
-
function blurValue() {
|
893 |
-
if(valueElement !== target) {
|
894 |
-
THIS.importColor();
|
895 |
-
}
|
896 |
-
}
|
897 |
-
|
898 |
-
|
899 |
-
function setPad(e) {
|
900 |
-
var mpos = jscolor.getRelMousePos(e);
|
901 |
-
var x = mpos.x - THIS.pickerFace - THIS.pickerInset;
|
902 |
-
var y = mpos.y - THIS.pickerFace - THIS.pickerInset;
|
903 |
-
switch(modeID) {
|
904 |
-
case 0: THIS.fromHSV(x*(6/(jscolor.images.pad[0]-1)), 1 - y/(jscolor.images.pad[1]-1), null, leaveSld); break;
|
905 |
-
case 1: THIS.fromHSV(x*(6/(jscolor.images.pad[0]-1)), null, 1 - y/(jscolor.images.pad[1]-1), leaveSld); break;
|
906 |
-
}
|
907 |
-
}
|
908 |
-
|
909 |
-
|
910 |
-
function setSld(e) {
|
911 |
-
var mpos = jscolor.getRelMousePos(e);
|
912 |
-
var y = mpos.y - THIS.pickerFace - THIS.pickerInset;
|
913 |
-
switch(modeID) {
|
914 |
-
case 0: THIS.fromHSV(null, null, 1 - y/(jscolor.images.sld[1]-1), leavePad); break;
|
915 |
-
case 1: THIS.fromHSV(null, 1 - y/(jscolor.images.sld[1]-1), null, leavePad); break;
|
916 |
-
}
|
917 |
-
}
|
918 |
-
|
919 |
-
|
920 |
-
function dispatchImmediateChange() {
|
921 |
-
if (THIS.onImmediateChange) {
|
922 |
-
var callback;
|
923 |
-
if (typeof THIS.onImmediateChange === 'string') {
|
924 |
-
callback = new Function (THIS.onImmediateChange);
|
925 |
-
} else {
|
926 |
-
callback = THIS.onImmediateChange;
|
927 |
-
}
|
928 |
-
callback.call(THIS);
|
929 |
-
}
|
930 |
-
}
|
931 |
-
|
932 |
-
|
933 |
-
var THIS = this;
|
934 |
-
var modeID = this.pickerMode.toLowerCase()==='hvs' ? 1 : 0;
|
935 |
-
var abortBlur = false;
|
936 |
-
var
|
937 |
-
valueElement = jscolor.fetchElement(this.valueElement),
|
938 |
-
styleElement = jscolor.fetchElement(this.styleElement);
|
939 |
-
var
|
940 |
-
holdPad = false,
|
941 |
-
holdSld = false,
|
942 |
-
touchOffset = {};
|
943 |
-
var
|
944 |
-
leaveValue = 1<<0,
|
945 |
-
leaveStyle = 1<<1,
|
946 |
-
leavePad = 1<<2,
|
947 |
-
leaveSld = 1<<3;
|
948 |
-
|
949 |
-
// target
|
950 |
-
jscolor.addEvent(target, 'focus', function() {
|
951 |
-
if(THIS.pickerOnfocus) { THIS.showPicker(); }
|
952 |
-
});
|
953 |
-
jscolor.addEvent(target, 'blur', function() {
|
954 |
-
if(!abortBlur) {
|
955 |
-
window.setTimeout(function(){ abortBlur || blurTarget(); abortBlur=false; }, 0);
|
956 |
-
} else {
|
957 |
-
abortBlur = false;
|
958 |
-
}
|
959 |
-
});
|
960 |
-
|
961 |
-
// valueElement
|
962 |
-
if(valueElement) {
|
963 |
-
var updateField = function() {
|
964 |
-
THIS.fromString(valueElement.value, leaveValue);
|
965 |
-
dispatchImmediateChange();
|
966 |
-
};
|
967 |
-
jscolor.addEvent(valueElement, 'keyup', updateField);
|
968 |
-
jscolor.addEvent(valueElement, 'input', updateField);
|
969 |
-
jscolor.addEvent(valueElement, 'blur', blurValue);
|
970 |
-
valueElement.setAttribute('autocomplete', 'off');
|
971 |
-
}
|
972 |
-
|
973 |
-
// styleElement
|
974 |
-
if(styleElement) {
|
975 |
-
styleElement.jscStyle = {
|
976 |
-
backgroundImage : styleElement.style.backgroundImage,
|
977 |
-
backgroundColor : styleElement.style.backgroundColor,
|
978 |
-
color : styleElement.style.color
|
979 |
-
};
|
980 |
-
}
|
981 |
-
|
982 |
-
// require images
|
983 |
-
switch(modeID) {
|
984 |
-
case 0: jscolor.requireImage('hs.png'); break;
|
985 |
-
case 1: jscolor.requireImage('hv.png'); break;
|
986 |
-
}
|
987 |
-
jscolor.requireImage('cross.gif');
|
988 |
-
jscolor.requireImage('arrow.gif');
|
989 |
-
|
990 |
-
this.importColor();
|
991 |
-
}
|
992 |
-
|
993 |
-
};
|
994 |
-
|
995 |
-
|
996 |
-
jscolor.install();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/script/sc_our_team.js
DELETED
@@ -1,52 +0,0 @@
|
|
1 |
-
jQuery( document ).ready(function($){
|
2 |
-
|
3 |
-
do_resize();
|
4 |
-
|
5 |
-
$( window ).resize(function() {
|
6 |
-
do_resize();
|
7 |
-
|
8 |
-
});
|
9 |
-
|
10 |
-
function do_resize() {
|
11 |
-
var member_height = $('#sc_our_team.grid .sc_team_member').width();
|
12 |
-
$('#sc_our_team.grid .sc_team_member .sc_team_member_inner').each(function(){
|
13 |
-
$(this).css({
|
14 |
-
height: member_height
|
15 |
-
});
|
16 |
-
});
|
17 |
-
|
18 |
-
var member_height = $('#sc_our_team.grid_circles .sc_team_member').width();
|
19 |
-
$('#sc_our_team.grid_circles .sc_team_member').each(function(){
|
20 |
-
$(this).css({
|
21 |
-
height: member_height
|
22 |
-
});
|
23 |
-
});
|
24 |
-
|
25 |
-
var member_height = $('#sc_our_team.grid_circles2 .sc_team_member').width();
|
26 |
-
$('#sc_our_team.grid_circles2 .sc_team_member').each(function(){
|
27 |
-
$(this).css({
|
28 |
-
height: member_height
|
29 |
-
});
|
30 |
-
});
|
31 |
-
}
|
32 |
-
|
33 |
-
$('.sc_team_single_disabled').click( function (e) {
|
34 |
-
|
35 |
-
e.preventDefault();
|
36 |
-
|
37 |
-
});
|
38 |
-
|
39 |
-
|
40 |
-
$('#sc_our_team .sc_team_member').hover(function(){
|
41 |
-
$('.sc_team_member_overlay',this).stop(true,false).fadeIn(440);
|
42 |
-
$('.wp-post-image',this).addClass('zoomIn');
|
43 |
-
$('.sc_team_more',this).addClass('show');
|
44 |
-
|
45 |
-
},function(){
|
46 |
-
$('.sc_team_member_overlay',this).stop(true,false).fadeOut(440)
|
47 |
-
$('.wp-post-image',this).removeClass('zoomIn');
|
48 |
-
$('.sc_team_more',this).removeClass('show');
|
49 |
-
|
50 |
-
});
|
51 |
-
|
52 |
-
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/script/sc_our_team_admin.js
DELETED
@@ -1,175 +0,0 @@
|
|
1 |
-
/*
|
2 |
-
* To change this template, choose Tools | Templates
|
3 |
-
* and open the template in the editor.
|
4 |
-
*/
|
5 |
-
|
6 |
-
|
7 |
-
jQuery(document).ready(function($) {
|
8 |
-
|
9 |
-
// $('.sc_team_add_skill').click( function() {
|
10 |
-
//
|
11 |
-
// $('#sc_team_options_skills')
|
12 |
-
// .append('<p><input type="text" name="team_member_skills" placeholder="Skill Title"/><input type="text" name="team_member_skill_value" placeholder="Skill rating( 1 to 10 )"/></p>');
|
13 |
-
// })
|
14 |
-
|
15 |
-
|
16 |
-
sc_team_set_display();
|
17 |
-
|
18 |
-
$('#sc_our_team_template').change(function(){
|
19 |
-
sc_team_set_display();
|
20 |
-
});
|
21 |
-
|
22 |
-
|
23 |
-
function sc_team_set_display(){
|
24 |
-
if('hc' == $('#sc_our_team_template').val()){
|
25 |
-
$('#social_icons_row').hide();
|
26 |
-
$('#honey-comb-row').show();
|
27 |
-
$('#columns-row,#height-row,#margin-row').hide();
|
28 |
-
}else{
|
29 |
-
$('#social_icons_row').show();
|
30 |
-
$('#honey-comb-row').hide();
|
31 |
-
$('#columns-row,#height-row,#margin-row').show();
|
32 |
-
}
|
33 |
-
}
|
34 |
-
|
35 |
-
|
36 |
-
sc_team_set_order();
|
37 |
-
|
38 |
-
$('.sc_sortable').sc_sortable();
|
39 |
-
$('.handles').sc_sortable({
|
40 |
-
handle: 'span'
|
41 |
-
});
|
42 |
-
$('.connected').sc_sortable({
|
43 |
-
connectWith: '.connected'
|
44 |
-
});
|
45 |
-
$('.exclude').sc_sortable({
|
46 |
-
items: ':not(.disabled)'
|
47 |
-
});
|
48 |
-
$('.sc_sortable').sc_sortable().bind('sortupdate', function(e, ui) {
|
49 |
-
sc_team_set_order();
|
50 |
-
});
|
51 |
-
|
52 |
-
function sc_team_set_order() {
|
53 |
-
$('.sc_sortable li').each(function() {
|
54 |
-
$(this).attr('sc_member_order', $(this).index());
|
55 |
-
});
|
56 |
-
}
|
57 |
-
|
58 |
-
$('#set_order').click(function() {
|
59 |
-
var post_path = $('.sc_sortable').attr('data-action');
|
60 |
-
// UX
|
61 |
-
$(this).attr('disabled','disable');
|
62 |
-
|
63 |
-
$('.sc_team_member_update_status .sc_team_member_updating').stop(true,false).fadeIn(200,function(){
|
64 |
-
$(this).delay(800).fadeOut(200);
|
65 |
-
});
|
66 |
-
|
67 |
-
$('.sc_sortable li').each(function() {
|
68 |
-
|
69 |
-
var data = {
|
70 |
-
action: 'sc_team_update_order',
|
71 |
-
id: $(this).attr('id'),
|
72 |
-
sc_member_order: $(this).attr('sc_member_order')
|
73 |
-
};
|
74 |
-
|
75 |
-
jQuery.post('admin-ajax.php', data, function(response) {
|
76 |
-
|
77 |
-
// whatever you need to do; maybe nothing
|
78 |
-
$('.sc_team_member_update_status .sc_team_member_updating').hide();
|
79 |
-
$('.sc_team_member_update_status .sc_team_member_saved').stop(true,false).fadeIn(200,function() {
|
80 |
-
$(this).delay(1000).fadeOut(200);
|
81 |
-
});
|
82 |
-
$('#set_order').removeAttr('disabled');
|
83 |
-
|
84 |
-
console.log( response );
|
85 |
-
|
86 |
-
});
|
87 |
-
});
|
88 |
-
});
|
89 |
-
});
|
90 |
-
|
91 |
-
/*
|
92 |
-
* HTML5 Sortable jQuery Plugin
|
93 |
-
* http://farhadi.ir/projects/html5sortable
|
94 |
-
*
|
95 |
-
* Copyright 2012, Ali Farhadi
|
96 |
-
* Released under the MIT license.
|
97 |
-
*/
|
98 |
-
(function($) {
|
99 |
-
var dragging, placeholders = $();
|
100 |
-
$.fn.sc_sortable = function(options) {
|
101 |
-
var method = String(options);
|
102 |
-
options = $.extend({
|
103 |
-
connectWith: false
|
104 |
-
}, options);
|
105 |
-
return this.each(function() {
|
106 |
-
if (/^enable|disable|destroy$/.test(method)) {
|
107 |
-
var items = $(this).children($(this).data('items')).attr('draggable', method == 'enable');
|
108 |
-
if (method == 'destroy') {
|
109 |
-
items.add(this).removeData('connectWith items')
|
110 |
-
.off('dragstart.h5s dragend.h5s selectstart.h5s dragover.h5s dragenter.h5s drop.h5s');
|
111 |
-
}
|
112 |
-
return;
|
113 |
-
}
|
114 |
-
var isHandle, index, items = $(this).children(options.items);
|
115 |
-
var placeholder = $('<' + (/^ul|ol$/i.test(this.tagName) ? 'li' : 'div') + ' class="sortable-placeholder">');
|
116 |
-
items.find(options.handle).mousedown(function() {
|
117 |
-
isHandle = true;
|
118 |
-
}).mouseup(function() {
|
119 |
-
isHandle = false;
|
120 |
-
});
|
121 |
-
$(this).data('items', options.items)
|
122 |
-
placeholders = placeholders.add(placeholder);
|
123 |
-
if (options.connectWith) {
|
124 |
-
$(options.connectWith).add(this).data('connectWith', options.connectWith);
|
125 |
-
}
|
126 |
-
items.attr('draggable', 'true').on('dragstart.h5s', function(e) {
|
127 |
-
if (options.handle && !isHandle) {
|
128 |
-
return false;
|
129 |
-
}
|
130 |
-
isHandle = false;
|
131 |
-
var dt = e.originalEvent.dataTransfer;
|
132 |
-
dt.effectAllowed = 'move';
|
133 |
-
dt.setData('Text', 'dummy');
|
134 |
-
index = (dragging = $(this)).addClass('sortable-dragging').index();
|
135 |
-
}).on('dragend.h5s', function() {
|
136 |
-
if (!dragging) {
|
137 |
-
return;
|
138 |
-
}
|
139 |
-
dragging.removeClass('sortable-dragging').show();
|
140 |
-
placeholders.detach();
|
141 |
-
if (index != dragging.index()) {
|
142 |
-
dragging.parent().trigger('sortupdate', {item: dragging});
|
143 |
-
}
|
144 |
-
dragging = null;
|
145 |
-
}).not('a[href], img').on('selectstart.h5s', function() {
|
146 |
-
this.dragDrop && this.dragDrop();
|
147 |
-
return false;
|
148 |
-
}).end().add([this, placeholder]).on('dragover.h5s dragenter.h5s drop.h5s', function(e) {
|
149 |
-
if (!items.is(dragging) && options.connectWith !== $(dragging).parent().data('connectWith')) {
|
150 |
-
return true;
|
151 |
-
}
|
152 |
-
if (e.type == 'drop') {
|
153 |
-
e.stopPropagation();
|
154 |
-
placeholders.filter(':visible').after(dragging);
|
155 |
-
dragging.trigger('dragend.h5s');
|
156 |
-
return false;
|
157 |
-
}
|
158 |
-
e.preventDefault();
|
159 |
-
e.originalEvent.dataTransfer.dropEffect = 'move';
|
160 |
-
if (items.is(this)) {
|
161 |
-
if (options.forcePlaceholderSize) {
|
162 |
-
placeholder.height(dragging.outerHeight());
|
163 |
-
}
|
164 |
-
dragging.hide();
|
165 |
-
$(this)[placeholder.index() < $(this).index() ? 'after' : 'before'](placeholder);
|
166 |
-
placeholders.not(placeholder).detach();
|
167 |
-
} else if (!placeholders.is(this) && !$(this).children(options.items).length) {
|
168 |
-
placeholders.detach();
|
169 |
-
$(this).append(placeholder);
|
170 |
-
}
|
171 |
-
return false;
|
172 |
-
});
|
173 |
-
});
|
174 |
-
};
|
175 |
-
})(jQuery);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/script/scroll.js
DELETED
@@ -1,14 +0,0 @@
|
|
1 |
-
/**
|
2 |
-
* jQuery CSS Customizable Scrollbar
|
3 |
-
*
|
4 |
-
* Copyright 2014, Yuriy Khabarov
|
5 |
-
* Dual licensed under the MIT or GPL Version 2 licenses.
|
6 |
-
*
|
7 |
-
* If you found bug, please contact me via email <13real008@gmail.com>
|
8 |
-
*
|
9 |
-
* @author Yuriy Khabarov aka Gromo
|
10 |
-
* @version 0.2.5
|
11 |
-
* @url https://github.com/gromo/jquery.scrollbar/
|
12 |
-
*
|
13 |
-
*/
|
14 |
-
(function(e,t,n){"use strict";function h(t){if(o.webkit&&!t){return{height:0,width:0}}if(!o.data.outer){var n={border:"none","box-sizing":"content-box",height:"200px",margin:"0",padding:"0",width:"200px"};o.data.inner=e("<div>").css(e.extend({},n));o.data.outer=e("<div>").css(e.extend({left:"-1000px",overflow:"scroll",position:"absolute",top:"-1000px"},n)).append(o.data.inner).appendTo("body")}o.data.outer.scrollLeft(1e3).scrollTop(1e3);return{height:Math.ceil(o.data.outer.offset().top-o.data.inner.offset().top||0),width:Math.ceil(o.data.outer.offset().left-o.data.inner.offset().left||0)}}function p(n,r){e(t).on({"blur.scrollbar":function(){e(t).add("body").off(".scrollbar");n&&n()},"dragstart.scrollbar":function(e){e.preventDefault();return false},"mouseup.scrollbar":function(){e(t).add("body").off(".scrollbar");n&&n()}});e("body").on({"selectstart.scrollbar":function(e){e.preventDefault();return false}});r&&r.preventDefault();return false}function d(){var e=h(true);return!(e.height||e.width)}function v(e){var t=e.originalEvent;if(t.axis&&t.axis===t.HORIZONTAL_AXIS)return false;if(t.wheelDeltaX)return false;return true}var r=false;var i=1,s="px";var o={data:{},macosx:n.navigator.platform.toLowerCase().indexOf("mac")!==-1,mobile:/Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(n.navigator.userAgent),overlay:null,scroll:null,scrolls:[],webkit:/WebKit/.test(n.navigator.userAgent),log:r?function(t,r){var i=t;if(r&&typeof t!="string"){i=[];e.each(t,function(e,t){i.push('"'+e+'": '+t)});i=i.join(", ")}if(n.console&&n.console.log){n.console.log(i)}else{alert(i)}}:function(){}};var u={autoScrollSize:true,autoUpdate:true,debug:false,disableBodyScroll:false,duration:200,ignoreMobile:true,ignoreOverlay:true,scrollStep:30,showArrows:false,stepScrolling:true,type:"simple",scrollx:null,scrolly:null,onDestroy:null,onInit:null,onScroll:null,onUpdate:null};var a=function(t,r){if(!o.scroll){o.log("Init jQuery Scrollbar v0.2.5");o.overlay=d();o.scroll=h();c();e(n).resize(function(){var e=false;if(o.scroll&&(o.scroll.height||o.scroll.width)){var t=h();if(t.height!=o.scroll.height||t.width!=o.scroll.width){o.scroll=t;e=true}}c(e)})}this.container=t;this.options=e.extend({},u,n.jQueryScrollbarOptions||{});this.scrollTo=null;this.scrollx={};this.scrolly={};this.init(r)};a.prototype={destroy:function(){if(!this.wrapper){return}var n=this.container.scrollLeft();var r=this.container.scrollTop();this.container.insertBefore(this.wrapper).css({height:"",margin:""}).removeClass("scroll-content").removeClass("scroll-scrollx_visible").removeClass("scroll-scrolly_visible").off(".scrollbar").scrollLeft(n).scrollTop(r);this.scrollx.scrollbar.removeClass("scroll-scrollx_visible").find("div").andSelf().off(".scrollbar");this.scrolly.scrollbar.removeClass("scroll-scrolly_visible").find("div").andSelf().off(".scrollbar");this.wrapper.remove();e(t).add("body").off(".scrollbar");if(e.isFunction(this.options.onDestroy))this.options.onDestroy.apply(this,[this.container])},getScrollbar:function(t){var n=this.options["scroll"+t];var r={advanced:'<div class="scroll-element_corner"></div>'+'<div class="scroll-arrow scroll-arrow_less"></div>'+'<div class="scroll-arrow scroll-arrow_more"></div>'+'<div class="scroll-element_outer">'+' <div class="scroll-element_size"></div>'+' <div class="scroll-element_inner-wrapper">'+' <div class="scroll-element_inner scroll-element_track">'+' <div class="scroll-element_inner-bottom"></div>'+" </div>"+" </div>"+' <div class="scroll-bar">'+' <div class="scroll-bar_body">'+' <div class="scroll-bar_body-inner"></div>'+" </div>"+' <div class="scroll-bar_bottom"></div>'+' <div class="scroll-bar_center"></div>'+" </div>"+"</div>",simple:'<div class="scroll-element_outer">'+' <div class="scroll-element_size"></div>'+' <div class="scroll-element_track"></div>'+' <div class="scroll-bar"></div>'+"</div>"};var i=r[this.options.type]?this.options.type:"advanced";if(n){if(typeof n=="string"){n=e(n).appendTo(this.wrapper)}else{n=e(n)}}else{n=e("<div>").addClass("scroll-element").html(r[i]).appendTo(this.wrapper)}if(this.options.showArrows){n.addClass("scroll-element_arrows_visible")}return n.addClass("scroll-"+t)},init:function(n){var r=this;var u=this.container;var a=this.containerWrapper||u;var f=e.extend(this.options,n||{});var l={x:this.scrollx,y:this.scrolly};var c=this.wrapper;var h={scrollLeft:u.scrollLeft(),scrollTop:u.scrollTop()};if(o.mobile&&f.ignoreMobile||o.overlay&&f.ignoreOverlay||o.macosx&&!o.webkit){return false}if(!c){this.wrapper=c=e("<div>").addClass("scroll-wrapper").addClass(u.attr("class")).css("position",u.css("position")=="absolute"?"absolute":"relative").insertBefore(u).append(u);if(u.is("textarea")){this.containerWrapper=a=e("<div>").insertBefore(u).append(u);c.addClass("scroll-textarea")}a.addClass("scroll-content").css({height:"","margin-bottom":o.scroll.height*-1+s,"margin-right":o.scroll.width*-1+s});u.on("scroll.scrollbar",function(t){if(e.isFunction(f.onScroll)){f.onScroll.call(r,{maxScroll:l.y.maxScrollOffset,scroll:u.scrollTop(),size:l.y.size,visible:l.y.visible},{maxScroll:l.x.maxScrollOffset,scroll:u.scrollLeft(),size:l.x.size,visible:l.x.visible})}l.x.isVisible&&l.x.scroller.css("left",u.scrollLeft()*l.x.kx+s);l.y.isVisible&&l.y.scroller.css("top",u.scrollTop()*l.y.kx+s)});c.on("scroll",function(){c.scrollTop(0).scrollLeft(0)});if(f.disableBodyScroll){var d=function(e){v(e)?l.y.isVisible&&l.y.mousewheel(e):l.x.isVisible&&l.x.mousewheel(e)};c.on({"MozMousePixelScroll.scrollbar":d,"mousewheel.scrollbar":d});if(o.mobile){c.on("touchstart.scrollbar",function(n){var r=n.originalEvent.touches&&n.originalEvent.touches[0]||n;var i={pageX:r.pageX,pageY:r.pageY};var s={left:u.scrollLeft(),top:u.scrollTop()};e(t).on({"touchmove.scrollbar":function(e){var t=e.originalEvent.targetTouches&&e.originalEvent.targetTouches[0]||e;u.scrollLeft(s.left+i.pageX-t.pageX);u.scrollTop(s.top+i.pageY-t.pageY);e.preventDefault()},"touchend.scrollbar":function(){e(t).off(".scrollbar")}})})}}if(e.isFunction(f.onInit))f.onInit.apply(this,[u])}else{a.css({height:"","margin-bottom":o.scroll.height*-1+s,"margin-right":o.scroll.width*-1+s})}e.each(l,function(n,s){var o=null;var a=1;var c=n=="x"?"scrollLeft":"scrollTop";var h=f.scrollStep;var d=function(){var e=u[c]();u[c](e+h);if(a==1&&e+h>=m)e=u[c]();if(a==-1&&e+h<=m)e=u[c]();if(u[c]()==e&&o){o()}};var m=0;if(!s.scrollbar){s.scrollbar=r.getScrollbar(n);s.scroller=s.scrollbar.find(".scroll-bar");s.mousewheel=function(e){if(!s.isVisible||n=="x"&&v(e)){return true}if(n=="y"&&!v(e)){l.x.mousewheel(e);return true}var t=e.originalEvent.wheelDelta*-1||e.originalEvent.detail;var i=s.size-s.visible-s.offset;if(!(m<=0&&t<0||m>=i&&t>0)){m=m+t;if(m<0)m=0;if(m>i)m=i;r.scrollTo=r.scrollTo||{};r.scrollTo[c]=m;setTimeout(function(){if(r.scrollTo){u.stop().animate(r.scrollTo,240,"linear",function(){m=u[c]()});r.scrollTo=null}},1)}e.preventDefault();return false};s.scrollbar.on({"MozMousePixelScroll.scrollbar":s.mousewheel,"mousewheel.scrollbar":s.mousewheel,"mouseenter.scrollbar":function(){m=u[c]()}});s.scrollbar.find(".scroll-arrow, .scroll-element_track").on("mousedown.scrollbar",function(t){if(t.which!=i)return true;a=1;var l={eventOffset:t[n=="x"?"pageX":"pageY"],maxScrollValue:s.size-s.visible-s.offset,scrollbarOffset:s.scroller.offset()[n=="x"?"left":"top"],scrollbarSize:s.scroller[n=="x"?"outerWidth":"outerHeight"]()};var v=0,g=0;if(e(this).hasClass("scroll-arrow")){a=e(this).hasClass("scroll-arrow_more")?1:-1;h=f.scrollStep*a;m=a>0?l.maxScrollValue:0}else{a=l.eventOffset>l.scrollbarOffset+l.scrollbarSize?1:l.eventOffset<l.scrollbarOffset?-1:0;h=Math.round(s.visible*.75)*a;m=l.eventOffset-l.scrollbarOffset-(f.stepScrolling?a==1?l.scrollbarSize:0:Math.round(l.scrollbarSize/2));m=u[c]()+m/s.kx}r.scrollTo=r.scrollTo||{};r.scrollTo[c]=f.stepScrolling?u[c]()+h:m;if(f.stepScrolling){o=function(){m=u[c]();clearInterval(g);clearTimeout(v);v=0;g=0};v=setTimeout(function(){g=setInterval(d,40)},f.duration+100)}setTimeout(function(){if(r.scrollTo){u.animate(r.scrollTo,f.duration);r.scrollTo=null}},1);return p(o,t)});s.scroller.on("mousedown.scrollbar",function(r){if(r.which!=i)return true;var o=r[n=="x"?"pageX":"pageY"];var a=u[c]();s.scrollbar.addClass("scroll-draggable");e(t).on("mousemove.scrollbar",function(e){var t=parseInt((e[n=="x"?"pageX":"pageY"]-o)/s.kx,10);u[c](a+t)});return p(function(){s.scrollbar.removeClass("scroll-draggable");m=u[c]()},r)})}});e.each(l,function(e,t){var n="scroll-scroll"+e+"_visible";var r=e=="x"?l.y:l.x;t.scrollbar.removeClass(n);r.scrollbar.removeClass(n);a.removeClass(n)});e.each(l,function(t,n){e.extend(n,t=="x"?{offset:parseInt(u.css("left"),10)||0,size:u.prop("scrollWidth"),visible:c.width()}:{offset:parseInt(u.css("top"),10)||0,size:u.prop("scrollHeight"),visible:c.height()})});var m=function(t,n){var r="scroll-scroll"+t+"_visible";var i=t=="x"?l.y:l.x;var f=parseInt(u.css(t=="x"?"left":"top"),10)||0;var h=n.size;var p=n.visible+f;n.isVisible=h-p>1;if(n.isVisible){n.scrollbar.addClass(r);i.scrollbar.addClass(r);a.addClass(r)}else{n.scrollbar.removeClass(r);i.scrollbar.removeClass(r);a.removeClass(r)}if(t=="y"&&(n.isVisible||n.size<n.visible)){a.css("height",p+o.scroll.height+s)}if(l.x.size!=u.prop("scrollWidth")||l.y.size!=u.prop("scrollHeight")||l.x.visible!=c.width()||l.y.visible!=c.height()||l.x.offset!=(parseInt(u.css("left"),10)||0)||l.y.offset!=(parseInt(u.css("top"),10)||0)){e.each(l,function(t,n){e.extend(n,t=="x"?{offset:parseInt(u.css("left"),10)||0,size:u.prop("scrollWidth"),visible:c.width()}:{offset:parseInt(u.css("top"),10)||0,size:u.prop("scrollHeight"),visible:c.height()})});m(t=="x"?"y":"x",i)}};e.each(l,m);if(e.isFunction(f.onUpdate))f.onUpdate.apply(this,[u]);e.each(l,function(e,t){var n=e=="x"?"left":"top";var r=e=="x"?"outerWidth":"outerHeight";var i=e=="x"?"width":"height";var o=parseInt(u.css(n),10)||0;var a=t.size;var l=t.visible+o;var c=t.scrollbar.find(".scroll-element_size");c=c[r]()+(parseInt(c.css(n),10)||0);if(f.autoScrollSize){t.scrollbarSize=parseInt(c*l/a,10);t.scroller.css(i,t.scrollbarSize+s)}t.scrollbarSize=t.scroller[r]();t.kx=(c-t.scrollbarSize)/(a-l)||1;t.maxScrollOffset=a-l});u.scrollLeft(h.scrollLeft).scrollTop(h.scrollTop).trigger("scroll")}};e.fn.scrollbar=function(t,n){var r=this;if(t==="get")r=null;this.each(function(){var i=e(this);if(i.hasClass("scroll-wrapper")||i.get(0).nodeName=="body"){return true}var s=i.data("scrollbar");if(s){if(t==="get"){r=s;return false}var u=typeof t=="string"&&s[t]?t:"init";s[u].apply(s,e.isArray(n)?n:[]);if(t==="destroy"){i.removeData("scrollbar");while(e.inArray(s,o.scrolls)>=0)o.scrolls.splice(e.inArray(s,o.scrolls),1)}}else{if(typeof t!="string"){s=new a(i,t);i.data("scrollbar",s);o.scrolls.push(s)}}return true});return r};e.fn.scrollbar.options=u;if(n.angular){(function(e){var t=e.module("jQueryScrollbar",[]);t.directive("jqueryScrollbar",function(){return{link:function(e,t){t.scrollbar(e.options).on("$destroy",function(){t.scrollbar("destroy")})},restring:"AC",scope:{options:"=jqueryScrollbar"}}})})(n.angular)}var f=0,l=0;var c=function(e){var t,n,i,s,u,a,h;for(t=0;t<o.scrolls.length;t++){s=o.scrolls[t];n=s.container;i=s.options;u=s.wrapper;a=s.scrollx;h=s.scrolly;if(e||i.autoUpdate&&u&&u.is(":visible")&&(n.prop("scrollWidth")!=a.size||n.prop("scrollHeight")!=h.size||u.width()!=a.visible||u.height()!=h.visible)){s.init();if(r){o.log({scrollHeight:n.prop("scrollHeight")+":"+s.scrolly.size,scrollWidth:n.prop("scrollWidth")+":"+s.scrollx.size,visibleHeight:u.height()+":"+s.scrolly.visible,visibleWidth:u.width()+":"+s.scrollx.visible},true);l++}}}if(r&&l>10){o.log("Scroll updates exceed 10");c=function(){}}else{clearTimeout(f);f=setTimeout(c,300)}}})(jQuery,document,window);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/style/sc_our_team.css
DELETED
@@ -1,1909 +0,0 @@
|
|
1 |
-
/*
|
2 |
-
Document : sc_our_team
|
3 |
-
Created on : Jun 23, 2014, 7:07:26 PM
|
4 |
-
Author : Bilal
|
5 |
-
Description:
|
6 |
-
Purpose of the stylesheet follows.
|
7 |
-
*/
|
8 |
-
|
9 |
-
.left{ float: left; box-sizing: border-box; }
|
10 |
-
.sc-single-wrapper{
|
11 |
-
padding: 15px 0;
|
12 |
-
max-width: 1170px;
|
13 |
-
margin: 0 auto;
|
14 |
-
}
|
15 |
-
.sc_team_member .sc_team_member_name a{ text-decoration: none;}
|
16 |
-
.sc_team_single_disabled{
|
17 |
-
cursor: default;
|
18 |
-
}
|
19 |
-
|
20 |
-
#sc_our_team_lightbox .sc_our_team_lightbox .sc-content{
|
21 |
-
|
22 |
-
}
|
23 |
-
|
24 |
-
.sc_team_posts.sc_team_post .sc-team-member-posts{
|
25 |
-
overflow: hidden;
|
26 |
-
}
|
27 |
-
|
28 |
-
.sc_team_posts.sc_team_post .sc-team-member-posts > div{
|
29 |
-
overflow: hidden;
|
30 |
-
}
|
31 |
-
|
32 |
-
.sc-team-member-posts.stacked .width25{
|
33 |
-
padding-left: 0;
|
34 |
-
}
|
35 |
-
|
36 |
-
.sc-team-member-posts > div{
|
37 |
-
margin: 0 0 15px 0;
|
38 |
-
}
|
39 |
-
|
40 |
-
.sc-team-member-posts.stacked .wp-post-image{
|
41 |
-
|
42 |
-
}
|
43 |
-
|
44 |
-
.sc-team-member-posts a{
|
45 |
-
font-size: 18px;
|
46 |
-
}
|
47 |
-
|
48 |
-
#sc_our_team_panel{
|
49 |
-
position: fixed;
|
50 |
-
left: 0;
|
51 |
-
top: 0;
|
52 |
-
width: 100%;
|
53 |
-
height: 100%;
|
54 |
-
z-index: 999;
|
55 |
-
background: rgba(0,0,0,0.75);
|
56 |
-
display: none;
|
57 |
-
}
|
58 |
-
|
59 |
-
|
60 |
-
.sc_our_team_panel{
|
61 |
-
position: fixed;
|
62 |
-
top: 0;
|
63 |
-
right: -600px;
|
64 |
-
height: 100%;
|
65 |
-
z-index: 99999999;
|
66 |
-
width: 500px;
|
67 |
-
background: #313131;
|
68 |
-
transition: 0.45s all ease-in-out;
|
69 |
-
-moz-transition: 0.45s all ease-in-out;
|
70 |
-
-webkit-transition: 0.45s all ease-in-out;
|
71 |
-
/*display: none;*/
|
72 |
-
|
73 |
-
}
|
74 |
-
|
75 |
-
#sc_our_team_panel .sc_our_team_panel a,
|
76 |
-
.sc_our_team_panel .sc-left-panel .sc-social a{
|
77 |
-
text-decoration: none !important;
|
78 |
-
}
|
79 |
-
|
80 |
-
.sc_our_team_panel.slidein{
|
81 |
-
right: 0;
|
82 |
-
display: block;
|
83 |
-
|
84 |
-
}
|
85 |
-
|
86 |
-
.sc_our_team_panel .sc-left-panel{
|
87 |
-
width: 40px;
|
88 |
-
left: 0;
|
89 |
-
height: 100%;
|
90 |
-
position: absolute;
|
91 |
-
background: #212121;
|
92 |
-
text-align: center;
|
93 |
-
}
|
94 |
-
.sc_our_team_panel .sc-left-panel .sc-social img{
|
95 |
-
width: 25px;
|
96 |
-
display: block;
|
97 |
-
margin: 10px auto;
|
98 |
-
}
|
99 |
-
.sc_our_team_panel .sc-right-panel{
|
100 |
-
height: 100%;
|
101 |
-
overflow-y: scroll;
|
102 |
-
overflow-x: hidden;
|
103 |
-
position: absolute;
|
104 |
-
left: 40px;
|
105 |
-
width: 460px;
|
106 |
-
padding: 0 0 0 0;
|
107 |
-
}
|
108 |
-
|
109 |
-
.sc_our_team_panel .sc-right-panel .sc-close{
|
110 |
-
float: right;
|
111 |
-
}
|
112 |
-
|
113 |
-
.sc_our_team_panel .sc-right-panel .sc_team_icon-close,
|
114 |
-
#sc_our_team_lightbox .sc_team_icon-close{
|
115 |
-
position: absolute;
|
116 |
-
top: 5px;
|
117 |
-
right: 5px;
|
118 |
-
width: 30px;
|
119 |
-
height: 30px;
|
120 |
-
line-height: 30px;
|
121 |
-
text-align: center;
|
122 |
-
color: #fff;
|
123 |
-
font-size: 20px;
|
124 |
-
cursor: pointer;
|
125 |
-
}
|
126 |
-
|
127 |
-
.sc_our_team_panel .sc-team-member-posts{
|
128 |
-
padding-left: 20px;
|
129 |
-
overflow: hidden;
|
130 |
-
}
|
131 |
-
|
132 |
-
.sc_our_team_panel .sc-right-panel .sc-skills .skills-title,
|
133 |
-
.sc_our_team_panel .sc-right-panel .sc-tags .skills-title{
|
134 |
-
margin-left: -20px;
|
135 |
-
}
|
136 |
-
|
137 |
-
#sc_our_team_lightbox .skills-title,
|
138 |
-
#sc_our_team_lightbox .sc-tags{
|
139 |
-
margin: 20px 0 !important;
|
140 |
-
}
|
141 |
-
|
142 |
-
#sc_our_team_lightbox .sc-tags .skills-title,
|
143 |
-
#sc_our_team_lightbox .sc-posts{
|
144 |
-
border-top: 1px solid #e9e9e9;
|
145 |
-
overflow: hidden;
|
146 |
-
padding-top: 10px;
|
147 |
-
}
|
148 |
-
|
149 |
-
#sc_our_team_lightbox .sc_team_icon-close{
|
150 |
-
color: #969696;
|
151 |
-
}
|
152 |
-
|
153 |
-
#sc_our_team_lightbox .sc_personal_quote{
|
154 |
-
margin-top: 15px;
|
155 |
-
}
|
156 |
-
|
157 |
-
#sc_our_team_lightbox .sc_personal_quote .sc_team_icon-quote-left{
|
158 |
-
font-size: 20px;
|
159 |
-
padding-left: 5px;
|
160 |
-
padding-right: 5px;
|
161 |
-
line-height: 20px;
|
162 |
-
}
|
163 |
-
|
164 |
-
#sc_our_team_lightbox .sc_personal_quote .sc_personal_quote_content{
|
165 |
-
font-size: 20px;
|
166 |
-
line-height: 22px;
|
167 |
-
margin-left: 10px;
|
168 |
-
}
|
169 |
-
|
170 |
-
.sc_our_team_panel .sc-right-panel .sc-name{
|
171 |
-
text-align: left;
|
172 |
-
background: red;
|
173 |
-
margin: 0 0 0 0;
|
174 |
-
padding: 10px 15px;
|
175 |
-
color: #fff;
|
176 |
-
font-size: 26px;
|
177 |
-
line-height: 30px;
|
178 |
-
}
|
179 |
-
|
180 |
-
|
181 |
-
|
182 |
-
.sc_our_team_panel .sc-right-panel .sc-title{
|
183 |
-
margin: 0 0 0 0;
|
184 |
-
padding: 20px 15px 15px 20px;
|
185 |
-
color: #fff;
|
186 |
-
}
|
187 |
-
|
188 |
-
.sc_our_team_panel .sc-right-panel .sc_personal_quote{
|
189 |
-
padding: 10px 20px;
|
190 |
-
color: #f9f9f9;
|
191 |
-
}
|
192 |
-
|
193 |
-
.sc_our_team_panel .sc-right-panel .sc_personal_quote .sc_team_icon-quote-left{
|
194 |
-
font-size: 30px;
|
195 |
-
line-height: 30px;
|
196 |
-
}
|
197 |
-
|
198 |
-
.sc_our_team_panel .sc-right-panel .sc_personal_quote .sc_personal_quote_content{
|
199 |
-
font-size: 20px;
|
200 |
-
line-height: 24px;
|
201 |
-
margin-bottom: 10px;
|
202 |
-
margin-left: 10px;
|
203 |
-
}
|
204 |
-
|
205 |
-
.sc_our_team_panel .sc-right-panel .sc-content p,
|
206 |
-
.sc_our_team_panel .sc-right-panel .sc-content{
|
207 |
-
color: #c7c7c7;
|
208 |
-
padding: 0px 10px;
|
209 |
-
}
|
210 |
-
|
211 |
-
/*.sc_our_team_panel .sc-right-panel .sc-content p{
|
212 |
-
padding: 10px 15px;
|
213 |
-
}*/
|
214 |
-
|
215 |
-
.sc_our_team_panel .sc-right-panel .skills-title{
|
216 |
-
border-top: 1px solid #414141;
|
217 |
-
padding: 15px 20px;
|
218 |
-
color: #fff;
|
219 |
-
margin-top: 10px;
|
220 |
-
}
|
221 |
-
|
222 |
-
.sc_our_team_panel .sc-right-panel .sc-skills,
|
223 |
-
.sc_our_team_panel .sc-right-panel .sc-tags{
|
224 |
-
|
225 |
-
padding: 5px 20px;
|
226 |
-
color: #fff;
|
227 |
-
}
|
228 |
-
|
229 |
-
.sc-tags .sc-single-tag{
|
230 |
-
display: inline-block;
|
231 |
-
background: rgb(144, 144, 144);
|
232 |
-
color: #fff;
|
233 |
-
padding: 3px 5px;
|
234 |
-
border-radius: 5px;
|
235 |
-
margin-right: 5px;
|
236 |
-
margin-bottom: 5px;
|
237 |
-
}
|
238 |
-
|
239 |
-
.sc_our_team_panel .sc-right-panel .progress span{
|
240 |
-
color: #fff;
|
241 |
-
float: right;
|
242 |
-
padding-right: 10px;
|
243 |
-
font-size: 14px;
|
244 |
-
font-weight: 700;
|
245 |
-
|
246 |
-
}
|
247 |
-
|
248 |
-
.sc_our_team_panel .sc-right-panel .sc-image{
|
249 |
-
width: 100%;
|
250 |
-
margin: 0;
|
251 |
-
}
|
252 |
-
|
253 |
-
.sc_our_team_panel .sc-right-panel .sc-image.circle{
|
254 |
-
width: 300px;
|
255 |
-
height: 300px;
|
256 |
-
border-radius: 300px;
|
257 |
-
margin: 10px auto;
|
258 |
-
display: block;
|
259 |
-
}
|
260 |
-
|
261 |
-
#sc_our_team_lightbox{
|
262 |
-
position: fixed;
|
263 |
-
left: 0;
|
264 |
-
top: 0;
|
265 |
-
width: 100%;
|
266 |
-
height: 100%;
|
267 |
-
z-index: 999;
|
268 |
-
background: rgba(0,0,0,0.75);
|
269 |
-
display: none;
|
270 |
-
}
|
271 |
-
#sc_our_team_lightbox .icons{ display: none;}
|
272 |
-
|
273 |
-
/*#sc_our_team_lightbox .sc_our_team_lightbox .social a{
|
274 |
-
display: inline-block;
|
275 |
-
margin-top: 10px;
|
276 |
-
margin-right: 5px;
|
277 |
-
}*/
|
278 |
-
#sc_our_team_lightbox .sc_our_team_lightbox .social a img{
|
279 |
-
width: 21px;
|
280 |
-
display: inline-block;
|
281 |
-
margin-right: 3px;
|
282 |
-
margin-bottom: 3px;
|
283 |
-
}
|
284 |
-
|
285 |
-
#sc_our_team_lightbox .progress{
|
286 |
-
height: 14px;
|
287 |
-
margin-bottom: 20px;
|
288 |
-
overflow: hidden;
|
289 |
-
background-color: #F5F5F5;
|
290 |
-
border-radius: 5px;
|
291 |
-
-webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.5);
|
292 |
-
-moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.5);
|
293 |
-
box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.5);
|
294 |
-
}
|
295 |
-
|
296 |
-
#sc_our_team_lightbox .progress span{
|
297 |
-
color: rgb(0, 0, 0);
|
298 |
-
color: #fff;
|
299 |
-
float: right;
|
300 |
-
padding-right: 10px;
|
301 |
-
font-size: 11px;
|
302 |
-
line-height: 14px;
|
303 |
-
font-weight: 700;
|
304 |
-
}
|
305 |
-
|
306 |
-
#sc_our_team_lightbox .title{
|
307 |
-
font-weight: 600;
|
308 |
-
font-size: 18px;
|
309 |
-
}
|
310 |
-
#sc_our_team_lightbox .sc_our_team_lightbox .social{
|
311 |
-
/*text-align: center;*/
|
312 |
-
margin-top: 12px;
|
313 |
-
border-bottom: 1px solid rgb(233, 233, 233);
|
314 |
-
padding-bottom: 10px;
|
315 |
-
}
|
316 |
-
#sc_our_team_lightbox .sc_our_team_lightbox{
|
317 |
-
box-shadow: 0 0 4px #fff;
|
318 |
-
-moz-box-shadow: 0 0 4px #fff;
|
319 |
-
-webkit-box-shadow: 0 0 4px #fff;
|
320 |
-
overflow: hidden;
|
321 |
-
display: none;
|
322 |
-
background: #fff;
|
323 |
-
width: 90%;
|
324 |
-
margin: 0 auto;
|
325 |
-
position: relative;
|
326 |
-
|
327 |
-
}
|
328 |
-
|
329 |
-
#sc_our_team_lightbox .sc_our_team_lightbox .skills{
|
330 |
-
font-size: 14px;
|
331 |
-
margin-top: 15px;
|
332 |
-
font-weight: 500;
|
333 |
-
}
|
334 |
-
|
335 |
-
.sc_our_team_lightbox.honeycomb .social img{
|
336 |
-
display: inline-block !important;
|
337 |
-
}
|
338 |
-
.sc_our_team_lightbox .image.circle{
|
339 |
-
width: 155px;
|
340 |
-
height: 155px;
|
341 |
-
border-radius: 100%;
|
342 |
-
}
|
343 |
-
.sc_our_team_lightbox .image.square{
|
344 |
-
width: 155px;
|
345 |
-
height: auto;
|
346 |
-
}
|
347 |
-
#sc_our_team .sc_team_member .icons a{
|
348 |
-
margin-bottom: 5px;
|
349 |
-
text-decoration: none;
|
350 |
-
}
|
351 |
-
|
352 |
-
#sc_our_team .sc_team_member .icons span,
|
353 |
-
#sc_our_team_lightbox .sc_our_team_lightbox .social span,
|
354 |
-
.sc_team_single_member .sc_single_side .social span{
|
355 |
-
display: inline-block;
|
356 |
-
width: 30px;
|
357 |
-
height: 30px;
|
358 |
-
line-height: 30px;
|
359 |
-
margin-right: 5px;
|
360 |
-
margin-bottom: 5px;
|
361 |
-
color: #fff;
|
362 |
-
background: #313131;
|
363 |
-
transition: 0.2s all ease-in-out;
|
364 |
-
-moz-transition: 0.2s all ease-in-out;
|
365 |
-
-webkit-transition: 0.2s all ease-in-out;
|
366 |
-
text-align: center;
|
367 |
-
}
|
368 |
-
|
369 |
-
#sc_our_team_lightbox .sc_our_team_lightbox .social span{
|
370 |
-
|
371 |
-
width: 25px;
|
372 |
-
height: 25px;
|
373 |
-
line-height: 25px;
|
374 |
-
margin-right: 3px;
|
375 |
-
font-size: 12px;
|
376 |
-
}
|
377 |
-
|
378 |
-
|
379 |
-
|
380 |
-
#sc_our_team .sc_team_member .icons span.sc_team_icon-facebook:hover,
|
381 |
-
.sc_our_team_panel .sc-left-panel .sc-social span.sc_team_icon-facebook:hover,
|
382 |
-
#sc_our_team_lightbox .sc_our_team_lightbox .social span.sc_team_icon-facebook:hover,
|
383 |
-
.sc_team_single_member .sc_single_side .social span.sc_team_icon-facebook:hover{
|
384 |
-
background: #3b5998;
|
385 |
-
}
|
386 |
-
#sc_our_team .sc_team_member .icons span.sc_team_icon-twitter:hover,
|
387 |
-
.sc_our_team_panel .sc-left-panel .sc-social span.sc_team_icon-twitter:hover,
|
388 |
-
#sc_our_team_lightbox .sc_our_team_lightbox .social span.sc_team_icon-twitter:hover,
|
389 |
-
.sc_team_single_member .sc_single_side .social span.sc_team_icon-twitter:hover{
|
390 |
-
background: #00aced;
|
391 |
-
}
|
392 |
-
#sc_our_team .sc_team_member .icons span.sc_team_icon-linkedin:hover,
|
393 |
-
.sc_our_team_panel .sc-left-panel .sc-social span.sc_team_icon-linkedin:hover,
|
394 |
-
#sc_our_team_lightbox .sc_our_team_lightbox .social span.sc_team_icon-linkedin:hover,
|
395 |
-
.sc_team_single_member .sc_single_side .social span.sc_team_icon-linkedin:hover{
|
396 |
-
background: #007bb6;
|
397 |
-
}
|
398 |
-
#sc_our_team .sc_team_member .icons span.sc_team_icon-google-plus:hover,
|
399 |
-
.sc_our_team_panel .sc-left-panel .sc-social span.sc_team_icon-google-plus:hover,
|
400 |
-
#sc_our_team_lightbox .sc_our_team_lightbox .social span.sc_team_icon-google-plus:hover,
|
401 |
-
.sc_team_single_member .sc_single_side .social span.sc_team_icon-google-plus:hover{
|
402 |
-
background: #dd4b39;
|
403 |
-
}
|
404 |
-
#sc_our_team .sc_team_member .icons span.sc_team_icon-envelope-o:hover,
|
405 |
-
.sc_our_team_panel .sc-left-panel .sc-social span.sc_team_icon-envelope-o:hover,
|
406 |
-
#sc_our_team_lightbox .sc_our_team_lightbox .social span.sc_team_icon-envelope-o:hover,
|
407 |
-
.sc_team_single_member .sc_single_side .social span.sc_team_icon-envelope-o:hover{
|
408 |
-
background: #0072b1;
|
409 |
-
}
|
410 |
-
#sc_our_team .sc_team_member .icons span.sc_team_icon-phone:hover,
|
411 |
-
.sc_our_team_panel .sc-left-panel .sc-social span.sc_team_icon-phone:hover,
|
412 |
-
#sc_our_team_lightbox .sc_our_team_lightbox .social span.sc_team_icon-phone:hover,
|
413 |
-
.sc_team_single_member .sc_single_side .social span.sc_team_icon-phone:hover{
|
414 |
-
background: #00bf8f;
|
415 |
-
}
|
416 |
-
#sc_our_team .sc_team_member .icons span.sc_team_icon-instagram:hover,
|
417 |
-
.sc_our_team_panel .sc-left-panel .sc-social span.sc_team_icon-instagram:hover,
|
418 |
-
#sc_our_team_lightbox .sc_our_team_lightbox .social span.sc_team_icon-instagram:hover,
|
419 |
-
.sc_team_single_member .sc_single_side .social span.sc_team_icon-instagram:hover{
|
420 |
-
background: #125688;
|
421 |
-
}
|
422 |
-
#sc_our_team .sc_team_member .icons span.sc_team_icon-share-alt:hover,
|
423 |
-
.sc_our_team_panel .sc-left-panel .sc-social span.sc_team_icon-share-alt:hover,
|
424 |
-
#sc_our_team_lightbox .sc_our_team_lightbox .social span.sc_team_icon-share-alt:hover,
|
425 |
-
.sc_team_single_member .sc_single_side .social span.sc_team_icon-share-alt:hover{
|
426 |
-
background: #DAA819;
|
427 |
-
}
|
428 |
-
#sc_our_team .sc_team_member .icons span.sc_team_icon-pinterest-p:hover,
|
429 |
-
.sc_our_team_panel .sc-left-panel .sc-social span.sc_team_icon-pinterest-p:hover,
|
430 |
-
#sc_our_team_lightbox .sc_our_team_lightbox .social span.sc_team_icon-pinterest-p:hover,
|
431 |
-
.sc_team_single_member .sc_single_side .social span.sc_team_icon-pinterest-p:hover{
|
432 |
-
background: #cb2027;
|
433 |
-
}
|
434 |
-
|
435 |
-
.sc_our_team_panel .sc-left-panel .sc-social a{
|
436 |
-
text-decoration: none;
|
437 |
-
}
|
438 |
-
.sc_our_team_panel .sc-left-panel .sc-social span{
|
439 |
-
display: block;
|
440 |
-
overflow: hidden;
|
441 |
-
width: 40px;
|
442 |
-
height: 50px;
|
443 |
-
font-size: 22px;
|
444 |
-
text-align: center;
|
445 |
-
line-height: 50px;
|
446 |
-
color: #fff;
|
447 |
-
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
|
448 |
-
transition: 0.2s all ease-in-out;
|
449 |
-
-moz-transition: 0.2s all ease-in-out;
|
450 |
-
-webkit-transition: 0.2s all ease-in-out;
|
451 |
-
}
|
452 |
-
|
453 |
-
/**
|
454 |
-
* Grid CSS
|
455 |
-
*/
|
456 |
-
.grid#sc_our_team{
|
457 |
-
overflow: hidden;
|
458 |
-
width: 100%;
|
459 |
-
}
|
460 |
-
.grid#sc_our_team .sc_team_member{
|
461 |
-
overflow: hidden;
|
462 |
-
box-sizing: border-box;
|
463 |
-
padding: 5px;
|
464 |
-
|
465 |
-
}
|
466 |
-
.grid#sc_our_team .sc_team_member .sc_team_skills,
|
467 |
-
.carousel#sc_our_team .sc_team_member .sc_team_skills,
|
468 |
-
.grid_circles#sc_our_team .sc_team_member .sc_team_skills,
|
469 |
-
.grid_circles2#sc_our_team .sc_team_member .sc_team_skills,
|
470 |
-
.honeycombs#sc_our_team .sc_team_member .sc_team_skills{
|
471 |
-
display: none;
|
472 |
-
}
|
473 |
-
.grid#sc_our_team .sc_team_member .sc_team_posts,
|
474 |
-
.carousel#sc_our_team .sc_team_member .sc_team_posts,
|
475 |
-
.grid_circles#sc_our_team .sc_team_member .sc_team_posts,
|
476 |
-
.grid_circles2#sc_our_team .sc_team_member .sc_team_posts,
|
477 |
-
.honeycombs#sc_our_team .sc_team_member .sc_team_posts{
|
478 |
-
display: none;
|
479 |
-
}
|
480 |
-
.grid#sc_our_team .sc_team_member .sc_team_tags,
|
481 |
-
.carousel#sc_our_team .sc_team_member .sc_team_tags,
|
482 |
-
.grid_circles#sc_our_team .sc_team_member .sc_team_tags,
|
483 |
-
.grid_circles2#sc_our_team .sc_team_member .sc_team_tags,
|
484 |
-
.honeycombs#sc_our_team .sc_team_member .sc_team_tags{
|
485 |
-
display: none;
|
486 |
-
}
|
487 |
-
|
488 |
-
.grid#sc_our_team .sc_team_member:hover .sc_team_member_name,
|
489 |
-
.grid#sc_our_team .sc_team_member:hover .sc_team_member_jobtitle,
|
490 |
-
.grid_circles#sc_our_team .sc_team_member:hover .sc_team_member_name,
|
491 |
-
.grid_circles#sc_our_team .sc_team_member:hover .sc_team_member_jobtitle{
|
492 |
-
left: -100%;
|
493 |
-
}
|
494 |
-
.grid_circles2#sc_our_team .sc_team_member:hover .sc_team_member_name,
|
495 |
-
.grid_circles2#sc_our_team .sc_team_member:hover .sc_team_member_jobtitle{
|
496 |
-
display: block;
|
497 |
-
}
|
498 |
-
.grid#sc_our_team .sc_team_member:hover .wp-post-image{
|
499 |
-
|
500 |
-
|
501 |
-
}
|
502 |
-
|
503 |
-
|
504 |
-
.grid#sc_our_team .sc_team_member .wp-post-image{
|
505 |
-
transition: 0.45s all ease-in-out;
|
506 |
-
-moz-transition: 0.45s all ease-in-out;
|
507 |
-
-webkit-transition: 0.45s all ease-in-out;
|
508 |
-
}
|
509 |
-
.grid#sc_our_team .sc_team_member .wp-post-image.zoomIn{
|
510 |
-
transform: scale(1.1);
|
511 |
-
-moz-transform: scale(1.1);
|
512 |
-
-webkit-transform: scale(1.1);
|
513 |
-
}
|
514 |
-
.grid#sc_our_team .sc_team_member .icons{
|
515 |
-
z-index: 9;
|
516 |
-
position: absolute;
|
517 |
-
bottom: -40px;
|
518 |
-
display: block;
|
519 |
-
width: 100%;
|
520 |
-
text-align: center;
|
521 |
-
/*display: none;*/
|
522 |
-
transition: 0.45s all ease-in-out;
|
523 |
-
-moz-transition: 0.45s all ease-in-out;
|
524 |
-
-webkit-transition: 0.45s all ease-in-out;
|
525 |
-
/*opacity: 0;*/
|
526 |
-
}
|
527 |
-
.grid_circles#sc_our_team .sc_team_member .icons,
|
528 |
-
.grid_circles2#sc_our_team .sc_team_member .icons{
|
529 |
-
opacity: 0;
|
530 |
-
position: absolute;
|
531 |
-
text-align: center;
|
532 |
-
transition: 0.45s all ease-in-out;
|
533 |
-
-moz-transition: 0.45s all ease-in-out;
|
534 |
-
-webkit-transition: 0.45s all ease-in-out;
|
535 |
-
bottom: 20%;
|
536 |
-
margin: 0 auto;
|
537 |
-
display: block;
|
538 |
-
width: 100%;
|
539 |
-
z-index: 9;
|
540 |
-
|
541 |
-
}
|
542 |
-
.carousel#sc_our_team .sc_team_member .icons{
|
543 |
-
text-align: center;
|
544 |
-
margin: 15px 0 0 0;
|
545 |
-
}
|
546 |
-
.carousel#sc_our_team .sc_team_member .icons a{
|
547 |
-
display: inline-block;
|
548 |
-
width: 25px;
|
549 |
-
margin-right: 5px;
|
550 |
-
}
|
551 |
-
.honeycombs#sc_our_team .sc_team_member .icons{
|
552 |
-
position: absolute;
|
553 |
-
bottom: 20px;
|
554 |
-
z-index: 999;
|
555 |
-
}
|
556 |
-
.grid#sc_our_team .sc_team_member .icons.hidden,
|
557 |
-
.grid_circles#sc_our_team .sc_team_member .icons.hidden,
|
558 |
-
.grid_circles2#sc_our_team .sc_team_member .icons.hidden,
|
559 |
-
.honeycombs#sc_our_team .sc_team_member .icons.hidden{
|
560 |
-
display: none;
|
561 |
-
}
|
562 |
-
.grid#sc_our_team .sc_team_member .sc_team_content,
|
563 |
-
.carousel#sc_our_team .sc_team_member .sc_team_content,
|
564 |
-
.grid_circles#sc_our_team .sc_team_member .sc_team_content,
|
565 |
-
.grid_circles2#sc_our_team .sc_team_member .sc_team_content,
|
566 |
-
.honeycombs#sc_our_team .sc_team_member .sc_team_content{
|
567 |
-
display: none;
|
568 |
-
}
|
569 |
-
.honeycomb-lightbox #sc_our_team_lightbox .sc_our_team_lightbox .social a img{
|
570 |
-
display: inline-block !important;
|
571 |
-
}
|
572 |
-
.grid#sc_our_team .sc_team_member:hover .icons{
|
573 |
-
|
574 |
-
bottom: 20px;
|
575 |
-
}
|
576 |
-
|
577 |
-
.grid_circles#sc_our_team .sc_team_member:hover .icons,
|
578 |
-
.grid_circles2#sc_our_team .sc_team_member:hover .icons{
|
579 |
-
opacity: 1;
|
580 |
-
}
|
581 |
-
|
582 |
-
.grid#sc_our_team .sc_team_member .icons img,
|
583 |
-
.grid_circles#sc_our_team .sc_team_member .icons img,
|
584 |
-
.grid_circles2#sc_our_team .sc_team_member .icons img{
|
585 |
-
width: 25px;
|
586 |
-
margin-right: 5px;
|
587 |
-
|
588 |
-
}
|
589 |
-
.grid#sc_our_team .sc_team_member .sc_team_member_jobtitle,
|
590 |
-
.grid#sc_our_team .sc_team_member .sc_team_member_name,
|
591 |
-
.grid_circles#sc_our_team .sc_team_member .sc_team_member_jobtitle,
|
592 |
-
.grid_circles#sc_our_team .sc_team_member .sc_team_member_name{
|
593 |
-
height: 24px;
|
594 |
-
line-height: 26px;
|
595 |
-
}
|
596 |
-
.grid#sc_our_team .sc_team_member img.wp-post-image{
|
597 |
-
|
598 |
-
width: 100%;
|
599 |
-
display: block;
|
600 |
-
margin: 0 auto;
|
601 |
-
float: none;
|
602 |
-
border: none;
|
603 |
-
padding: 0;
|
604 |
-
}
|
605 |
-
.grid#sc_our_team .sc_team_member .sc_team_member_name{
|
606 |
-
|
607 |
-
padding: 0 30px;
|
608 |
-
position: absolute;
|
609 |
-
left: 0;
|
610 |
-
bottom: 40px;
|
611 |
-
transition: 0.45s all ease-in-out;
|
612 |
-
-moz-transition: 0.45s all ease-in-out;
|
613 |
-
-webkit-transition: 0.45s all ease-in-out;
|
614 |
-
overflow: hidden;
|
615 |
-
opacity: 0.9;
|
616 |
-
|
617 |
-
}
|
618 |
-
|
619 |
-
.grid_circles#sc_our_team .sc_team_member .sc_team_member_name,
|
620 |
-
.grid_circles2#sc_our_team .sc_team_member .sc_team_member_name{
|
621 |
-
position: absolute;
|
622 |
-
top: 40%;
|
623 |
-
left: 0;
|
624 |
-
margin: 0 auto;
|
625 |
-
width: 70%;
|
626 |
-
display: block;
|
627 |
-
transition: 0.45s all ease-in-out;
|
628 |
-
-moz-transition: 0.45s all ease-in-out;
|
629 |
-
-webkit-transition: 0.45s all ease-in-out;
|
630 |
-
opacity: 0.9;
|
631 |
-
}
|
632 |
-
.grid_circles2#sc_our_team .sc_team_member .sc_team_member_name{
|
633 |
-
width: 100%;
|
634 |
-
text-align: center;
|
635 |
-
}
|
636 |
-
|
637 |
-
|
638 |
-
.grid#sc_our_team .sc_team_member .sc_team_member_jobtitle{
|
639 |
-
position: absolute;
|
640 |
-
bottom: 16px;
|
641 |
-
left: 0;
|
642 |
-
padding: 0 30px;
|
643 |
-
color: #ffffff;
|
644 |
-
transition: 0.35s all ease-in-out;
|
645 |
-
-moz-transition: 0.35s all ease-in-out;
|
646 |
-
-webkit-transition: 0.35s all ease-in-out;
|
647 |
-
opacity: 0.9;
|
648 |
-
}
|
649 |
-
|
650 |
-
.grid_circles#sc_our_team .sc_team_member .sc_team_member_jobtitle,
|
651 |
-
.grid_circles2#sc_our_team .sc_team_member .sc_team_member_jobtitle{
|
652 |
-
position: absolute;
|
653 |
-
top: 40%;
|
654 |
-
left: 0;
|
655 |
-
margin: 24px auto;
|
656 |
-
width: 75%;
|
657 |
-
display: block;
|
658 |
-
color: #ffffff;
|
659 |
-
transition: 0.30s all ease-in-out;
|
660 |
-
-moz-transition: 0.30s all ease-in-out;
|
661 |
-
-webkit-transition: 0.30s all ease-in-out;
|
662 |
-
opacity: 0.9;
|
663 |
-
}
|
664 |
-
.grid_circles2#sc_our_team .sc_team_member .sc_team_member_name,
|
665 |
-
.grid_circles2#sc_our_team .sc_team_member .sc_team_member_jobtitle{
|
666 |
-
display: none;
|
667 |
-
transition: 0.40s all ease-in-out;
|
668 |
-
-moz-transition: 0.40s all ease-in-out;
|
669 |
-
-webkit-transition: 0.40s all ease-in-out;
|
670 |
-
z-index: 99;
|
671 |
-
}
|
672 |
-
|
673 |
-
.grid_circles2#sc_our_team .sc_team_member .sc_team_member_jobtitle{
|
674 |
-
width: 100%;
|
675 |
-
text-align: center;
|
676 |
-
}
|
677 |
-
|
678 |
-
.grid_circles2#sc_our_team .sc_team_member .sc_team_member_jobtitle span{
|
679 |
-
display: inline-block;
|
680 |
-
border-top: 1px solid #898989;
|
681 |
-
padding-top: 5px;
|
682 |
-
}
|
683 |
-
|
684 |
-
#sc_our_team.grid_circles .sc_team_member{
|
685 |
-
margin-bottom: 10px !important;
|
686 |
-
}
|
687 |
-
|
688 |
-
#sc_our_team .sc_team_member_inner{
|
689 |
-
width: 100%;
|
690 |
-
height: 100%;
|
691 |
-
overflow: hidden;
|
692 |
-
}
|
693 |
-
.grid#sc_our_team .sc_team_member_inner{
|
694 |
-
height: 170px;
|
695 |
-
overflow: hidden;
|
696 |
-
background-size: cover;
|
697 |
-
position: relative;
|
698 |
-
text-align: center;
|
699 |
-
background: #404040;
|
700 |
-
}
|
701 |
-
.grid#sc_our_team .sc_team_member .sc_team_member_overlay{
|
702 |
-
position: absolute;
|
703 |
-
width: 100%;
|
704 |
-
height: 100%;
|
705 |
-
left: 0;
|
706 |
-
bottom: 0;
|
707 |
-
padding: 0 10px;
|
708 |
-
color: #fff;
|
709 |
-
background: rgba(50,50,50,0.5);
|
710 |
-
display: none;
|
711 |
-
}
|
712 |
-
|
713 |
-
#sc_our_team .sc_team_member .sc_team_more img{
|
714 |
-
width: 50px;
|
715 |
-
height: 50px;
|
716 |
-
margin: 0;
|
717 |
-
}
|
718 |
-
|
719 |
-
.grid#sc_our_team .sc_team_member .sc_team_more,
|
720 |
-
.grid_circles#sc_our_team .sc_team_member .sc_team_more,
|
721 |
-
.grid_circles2#sc_our_team .sc_team_member .sc_team_more{
|
722 |
-
position: absolute;
|
723 |
-
margin-top: -25px;
|
724 |
-
width: 100%;
|
725 |
-
transition: 0.45s all ease-in-out;
|
726 |
-
-moz-transition: 0.45s all ease-in-out;
|
727 |
-
-webkit-transition: 0.45s all ease-in-out;
|
728 |
-
top: -25px;
|
729 |
-
}
|
730 |
-
.grid#sc_our_team .sc_team_member .sc_team_more.show,
|
731 |
-
.grid_circles#sc_our_team .sc_team_member .sc_team_more.show,
|
732 |
-
.grid_circles2#sc_our_team .sc_team_member .sc_team_more.show{
|
733 |
-
top: 50%;
|
734 |
-
transform: rotate(360deg);
|
735 |
-
-moz-transform: rotate(360deg);
|
736 |
-
-webkit-transform: rotate(360deg);
|
737 |
-
}
|
738 |
-
.grid#sc_our_team .sc_team_member .sc_team_member_name a,
|
739 |
-
.grid_circles#sc_our_team .sc_team_member .sc_team_member_name a,
|
740 |
-
.grid_circles2#sc_our_team .sc_team_member .sc_team_member_name a{
|
741 |
-
color: #fff;
|
742 |
-
}
|
743 |
-
|
744 |
-
|
745 |
-
|
746 |
-
.sc_team_single_member{
|
747 |
-
overflow: hidden;
|
748 |
-
|
749 |
-
}
|
750 |
-
|
751 |
-
.sc_team_single_member .sc_single_side .social{
|
752 |
-
margin: 10px 0 0 0;
|
753 |
-
}
|
754 |
-
.sc_team_single_member .sc_single_side .social li{
|
755 |
-
margin-bottom: 10px;
|
756 |
-
list-style: none;
|
757 |
-
}
|
758 |
-
.sc_team_single_member .sc_single_side .social li a{
|
759 |
-
text-decoration: none;
|
760 |
-
}
|
761 |
-
.sc_team_single_member .sc_single_side .social .sc-social{
|
762 |
-
width: 25px;
|
763 |
-
position: relative;
|
764 |
-
top: 7px;
|
765 |
-
padding-right: 5px;
|
766 |
-
|
767 |
-
}
|
768 |
-
.sc_team_single_member .sc_single_side .name{
|
769 |
-
font-size: 22px;
|
770 |
-
margin-top: 12px;
|
771 |
-
margin-bottom: 7px;
|
772 |
-
text-align: center;
|
773 |
-
border-bottom: 1px solid #e1e1e1;
|
774 |
-
padding-bottom: 10px;
|
775 |
-
text-transform: uppercase;
|
776 |
-
color: #333;
|
777 |
-
font-weight: 400;
|
778 |
-
}
|
779 |
-
.sc_team_single_member .sc_single_side .title{
|
780 |
-
text-align: center;
|
781 |
-
font-weight: 400;
|
782 |
-
|
783 |
-
}
|
784 |
-
.sc_team_single_member .circle .wp-post-image{
|
785 |
-
border-radius: 100%;
|
786 |
-
width: 200px;
|
787 |
-
height: 200px;
|
788 |
-
margin: 0 auto;
|
789 |
-
text-align: center;
|
790 |
-
display: block;
|
791 |
-
}
|
792 |
-
.sc_team_single_skills{
|
793 |
-
|
794 |
-
}
|
795 |
-
.progress {
|
796 |
-
height: 20px;
|
797 |
-
margin-bottom: 20px;
|
798 |
-
overflow: hidden;
|
799 |
-
background-color: rgb(245, 245, 245);
|
800 |
-
border-radius: 4px;
|
801 |
-
-webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
|
802 |
-
box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
|
803 |
-
}
|
804 |
-
.progress-bar {
|
805 |
-
float: left;
|
806 |
-
width: 0;
|
807 |
-
height: 100%;
|
808 |
-
font-size: 12px;
|
809 |
-
line-height: 20px;
|
810 |
-
color: rgb(255, 255, 255);
|
811 |
-
text-align: center;
|
812 |
-
background-color: rgb(51, 122, 183);
|
813 |
-
-webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
|
814 |
-
box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
|
815 |
-
-webkit-transition: width .6s ease;
|
816 |
-
-o-transition: width .6s ease;
|
817 |
-
transition: width .6s ease;
|
818 |
-
}
|
819 |
-
.sr-only {
|
820 |
-
position: absolute;
|
821 |
-
width: 1px;
|
822 |
-
height: 1px;
|
823 |
-
padding: 0;
|
824 |
-
margin: -1px;
|
825 |
-
overflow: hidden;
|
826 |
-
clip: rect(0,0,0,0);
|
827 |
-
border: 0;
|
828 |
-
}
|
829 |
-
.sc_team_single_member .inner{
|
830 |
-
background: rgba(150,150,150,0.2);
|
831 |
-
padding: 15px;
|
832 |
-
margin-bottom: 15px;
|
833 |
-
}
|
834 |
-
|
835 |
-
/**
|
836 |
-
* Circles CSS
|
837 |
-
**/
|
838 |
-
.grid_circles#sc_our_team .sc_team_member,
|
839 |
-
.grid_circles2#sc_our_team .sc_team_member{
|
840 |
-
float: left;
|
841 |
-
|
842 |
-
overflow: hidden;
|
843 |
-
border-radius: 100%;
|
844 |
-
text-align: center;
|
845 |
-
box-shadow:
|
846 |
-
0 0 0 4px #fff,
|
847 |
-
0 0 0 7px #E2E2E2;
|
848 |
-
position: relative;
|
849 |
-
|
850 |
-
}
|
851 |
-
.grid_circles#sc_our_team .sc_team_member:hover .wp-post-image{
|
852 |
-
|
853 |
-
}
|
854 |
-
.grid_circles#sc_our_team .sc_team_member .wp-post-image,
|
855 |
-
.grid_circles2#sc_our_team .sc_team_member .wp-post-image{
|
856 |
-
border: none;
|
857 |
-
padding: 0;
|
858 |
-
float: none;
|
859 |
-
margin: 0;
|
860 |
-
width: 100%;
|
861 |
-
height: 100%;
|
862 |
-
|
863 |
-
|
864 |
-
}
|
865 |
-
.grid_circles#sc_our_team .sc_team_member .sc_team_member_overlay,
|
866 |
-
.grid_circles2#sc_our_team .sc_team_member .sc_team_member_overlay{
|
867 |
-
position: absolute;
|
868 |
-
width: 100%;
|
869 |
-
left: 0;
|
870 |
-
top: 0;
|
871 |
-
height: 100%;
|
872 |
-
background: rgba(50,50,50,0.7);
|
873 |
-
color: #ffffff;
|
874 |
-
display: none;
|
875 |
-
border-radius: 100%;
|
876 |
-
}
|
877 |
-
.grid_circles#sc_our_team .sc_team_member .sc_team_member_overlay .sc_team_member_name,
|
878 |
-
.grid_circles2#sc_our_team .sc_team_member .sc_team_member_overlay .sc_team_member_name{
|
879 |
-
margin-top: 30px;
|
880 |
-
font-size: 18px;
|
881 |
-
}
|
882 |
-
.grid_circles#sc_our_team .sc_team_member .sc_team_member_overlay .icons a,
|
883 |
-
.grid_circles2#sc_our_team .sc_team_member .sc_team_member_overlay .icons a{
|
884 |
-
margin-right: 5px;
|
885 |
-
}
|
886 |
-
.grid_circles#sc_our_team .icons img,
|
887 |
-
.grid_circles2#sc_our_team .icons img{
|
888 |
-
width: 25px;
|
889 |
-
}
|
890 |
-
/**
|
891 |
-
* Stacked css
|
892 |
-
**/
|
893 |
-
.stacked#sc_our_team .sc_team_member{
|
894 |
-
width: 100%;
|
895 |
-
overflow: hidden;
|
896 |
-
border-bottom: 2px solid #333;
|
897 |
-
padding-top: 15px;
|
898 |
-
margin-bottom: 15px;
|
899 |
-
clear: both;
|
900 |
-
}
|
901 |
-
|
902 |
-
.stacked#sc_our_team .sc_team_member .sc_team_content{
|
903 |
-
display: none;
|
904 |
-
}
|
905 |
-
|
906 |
-
.stacked#sc_our_team .sc_team_member .sc_team_member_left{
|
907 |
-
float: left;
|
908 |
-
width: 25%;
|
909 |
-
text-align: center;
|
910 |
-
}
|
911 |
-
.stacked#sc_our_team .sc_team_member .sc_team_member_right{
|
912 |
-
float: right;
|
913 |
-
width: 70%;
|
914 |
-
}
|
915 |
-
.stacked#sc_our_team .sc_team_member .wp-post-image{
|
916 |
-
width: 100%;
|
917 |
-
}
|
918 |
-
.stacked#sc_our_team .sc_team_member .sc_team_member_name{
|
919 |
-
|
920 |
-
margin: 10px 0;
|
921 |
-
padding-bottom: 10px;
|
922 |
-
border-bottom: 1px dashed #404040;
|
923 |
-
}
|
924 |
-
.stacked#sc_our_team .sc_team_member .sc_team_member_jobtitle{
|
925 |
-
line-height: 20px;
|
926 |
-
margin: 10px 0;
|
927 |
-
}
|
928 |
-
.stacked#sc_our_team .sc_team_member .sc_team_member_name a{
|
929 |
-
text-decoration: none;
|
930 |
-
font-size: 26px;
|
931 |
-
}
|
932 |
-
|
933 |
-
.stacked#sc_our_team .sc_team_member .sc_team_skills,
|
934 |
-
.stacked#sc_our_team .sc_team_member .sc_team_tags,
|
935 |
-
.stacked#sc_our_team .sc_team_member .sc_team_posts{
|
936 |
-
display: none;
|
937 |
-
}
|
938 |
-
.stacked#sc_our_team .sc_team_member .icons{
|
939 |
-
margin-top: 15px;
|
940 |
-
}
|
941 |
-
.stacked#sc_our_team .icons img{
|
942 |
-
width: 30px;
|
943 |
-
box-shadow: none;
|
944 |
-
-moz-box-shadow: none;
|
945 |
-
-webkit-box-shadow: none;
|
946 |
-
margin-right: 10px;
|
947 |
-
transition: 0.3s all ease-in-out;
|
948 |
-
-moz-transition: 0.3s all ease-in-out;
|
949 |
-
-webkit-transition: 0.3s all ease-in-out;
|
950 |
-
}
|
951 |
-
.stacked#sc_our_team .icons img:hover{
|
952 |
-
/* transform: rotate(360deg);
|
953 |
-
-moz-transform: rotate(360deg);
|
954 |
-
-webkit-transform: rotate(360deg);*/
|
955 |
-
}
|
956 |
-
/**
|
957 |
-
* Carousel
|
958 |
-
**/
|
959 |
-
.carousel#sc_our_team .sc_team_member{
|
960 |
-
padding: 10px;
|
961 |
-
position: relative;
|
962 |
-
}
|
963 |
-
|
964 |
-
.carousel#sc_our_team .sc_team_member .sc_team_icon-quote-left{
|
965 |
-
font-size: 18px;
|
966 |
-
line-height: 18px;
|
967 |
-
}
|
968 |
-
|
969 |
-
.carousel#sc_our_team .sc_team_member .sc_personal_quote_content{
|
970 |
-
font-size: 14px;
|
971 |
-
line-height: 16px;
|
972 |
-
width: 80%;
|
973 |
-
}
|
974 |
-
|
975 |
-
.carousel#sc_our_team .sc_team_member .sc_personal_quote{
|
976 |
-
margin-top: 10px;
|
977 |
-
/*line-height: 16px;*/
|
978 |
-
font-size: 16px;
|
979 |
-
}
|
980 |
-
|
981 |
-
|
982 |
-
.carousel#sc_our_team .sc_team_member .wp-post-image{
|
983 |
-
float: none;
|
984 |
-
width: 100%;
|
985 |
-
}
|
986 |
-
.carousel#sc_our_team .sc_team_member .sc_team_member_name,
|
987 |
-
.carousel#sc_our_team .sc_team_member .sc_team_member_jobtitle {
|
988 |
-
text-align: left;
|
989 |
-
padding: 15px 0 0 0;
|
990 |
-
font-weight: 600;
|
991 |
-
font-size: 16px;
|
992 |
-
}
|
993 |
-
.carousel#sc_our_team .sc_team_member .sc_team_member_jobtitle{
|
994 |
-
padding: 5px 0 15px 0;
|
995 |
-
font-weight: 400;
|
996 |
-
border-top: 1px solid #CACACA;
|
997 |
-
display: inline-block;
|
998 |
-
margin: 0 auto;
|
999 |
-
text-align: left;
|
1000 |
-
}
|
1001 |
-
|
1002 |
-
.carousel#sc_our_team .sc_team_member .sc_team_member_name{
|
1003 |
-
padding-bottom: 6px;
|
1004 |
-
}
|
1005 |
-
/**
|
1006 |
-
* widget css
|
1007 |
-
*/
|
1008 |
-
.widget#sc_our_team .sc_sidebar_team_member{
|
1009 |
-
width: 100%;
|
1010 |
-
overflow: hidden;
|
1011 |
-
margin: 0 0 10px 0;
|
1012 |
-
}
|
1013 |
-
.widget#sc_our_team .sc_sidebar_team_member .wp-post-image{
|
1014 |
-
float: left;
|
1015 |
-
width: 25%;
|
1016 |
-
border: 1px solid #d0d0d0;
|
1017 |
-
padding: 3px;
|
1018 |
-
box-sizing: border-box;
|
1019 |
-
margin: 0;
|
1020 |
-
}
|
1021 |
-
.widget#sc_our_team .sc_sidebar_team_member .sc_team_member_overlay{
|
1022 |
-
float: left;
|
1023 |
-
width: 75%;
|
1024 |
-
padding: 0 0 0 10px;
|
1025 |
-
box-sizing: border-box;
|
1026 |
-
}
|
1027 |
-
|
1028 |
-
.widget#sc_our_team .sc_sidebar_team_member .sc_team_member_overlay .sc_team_member_name{
|
1029 |
-
font-weight: bold;
|
1030 |
-
}
|
1031 |
-
|
1032 |
-
/**
|
1033 |
-
* honeycomb
|
1034 |
-
**/
|
1035 |
-
.honeycombs{
|
1036 |
-
position: relative;
|
1037 |
-
overflow: hidden;
|
1038 |
-
width: 100%;
|
1039 |
-
text-align: center;
|
1040 |
-
}
|
1041 |
-
|
1042 |
-
.honeycombs .inner_span{
|
1043 |
-
display: block;
|
1044 |
-
height: 100%;
|
1045 |
-
width: 100%;
|
1046 |
-
font-family: sans-serif;
|
1047 |
-
color: #000;
|
1048 |
-
opacity: 0.8;
|
1049 |
-
}
|
1050 |
-
.honeycombs .inner-text{
|
1051 |
-
padding-top: 35%;
|
1052 |
-
font-size: 18px;
|
1053 |
-
}
|
1054 |
-
.honeycombs .inner-text a{
|
1055 |
-
text-decoration: none;
|
1056 |
-
}
|
1057 |
-
.honeycombs .honeycombs-inner-wrapper{
|
1058 |
-
display: inline-block;
|
1059 |
-
overflow: hidden;
|
1060 |
-
width: 700px;
|
1061 |
-
position: relative;
|
1062 |
-
height: 1200px;
|
1063 |
-
}
|
1064 |
-
|
1065 |
-
.honeycombs .comb{
|
1066 |
-
position: absolute;
|
1067 |
-
display: inline-block;
|
1068 |
-
}
|
1069 |
-
|
1070 |
-
.honeycombs .hex_l,
|
1071 |
-
.honeycombs .hex_r{
|
1072 |
-
overflow: hidden;
|
1073 |
-
position: absolute;
|
1074 |
-
/* -webkit-backface-visibility: hidden; */
|
1075 |
-
}
|
1076 |
-
|
1077 |
-
.honeycombs .hex_l{
|
1078 |
-
visibility: hidden;
|
1079 |
-
-moz-transform: rotate(60deg);
|
1080 |
-
-ms-transform: rotate(60deg);
|
1081 |
-
-o-transform: rotate(60deg);
|
1082 |
-
-webkit-transform: rotate(60deg);
|
1083 |
-
transform: rotate(60deg);
|
1084 |
-
}
|
1085 |
-
|
1086 |
-
.honeycombs .hex_r{
|
1087 |
-
visibility: hidden;
|
1088 |
-
-moz-transform: rotate(-120deg);
|
1089 |
-
-ms-transform: rotate(-120deg);
|
1090 |
-
-o-transform: rotate(-120deg);
|
1091 |
-
-webkit-transform: rotate(-120deg);
|
1092 |
-
transform: rotate(-120deg);
|
1093 |
-
}
|
1094 |
-
|
1095 |
-
.honeycombs .hex_inner{
|
1096 |
-
display: block;
|
1097 |
-
visibility: visible;
|
1098 |
-
-moz-transform: rotate(60deg);
|
1099 |
-
-ms-transform: rotate(60deg);
|
1100 |
-
-o-transform: rotate(60deg);
|
1101 |
-
-webkit-transform: rotate(60deg);
|
1102 |
-
transform: rotate(60deg);
|
1103 |
-
background-position: center;
|
1104 |
-
-webkit-background-size: cover;
|
1105 |
-
-moz-background-size: cover;
|
1106 |
-
-o-background-size: cover;
|
1107 |
-
background-size: cover;
|
1108 |
-
cursor: pointer;
|
1109 |
-
}
|
1110 |
-
|
1111 |
-
.width25,
|
1112 |
-
.width50,
|
1113 |
-
.width75{
|
1114 |
-
width: 100%;
|
1115 |
-
padding: 20px;
|
1116 |
-
}
|
1117 |
-
|
1118 |
-
|
1119 |
-
/**
|
1120 |
-
* single post
|
1121 |
-
*/
|
1122 |
-
|
1123 |
-
|
1124 |
-
.smartcat_team_single_icons img.sc-social,
|
1125 |
-
.smartcat_team_single_icons img{
|
1126 |
-
width: 25px !important;
|
1127 |
-
margin-right: 10px !important;
|
1128 |
-
box-shadow: none !important;
|
1129 |
-
-moz-box-shadow: none !important;
|
1130 |
-
-webkit-box-shadow: none !important;
|
1131 |
-
}
|
1132 |
-
|
1133 |
-
.sc_team_single_member .wp-post-image{
|
1134 |
-
width: 100%;
|
1135 |
-
}
|
1136 |
-
|
1137 |
-
|
1138 |
-
.sc_personal_quote{
|
1139 |
-
|
1140 |
-
padding-bottom: 15px;
|
1141 |
-
overflow: hidden;
|
1142 |
-
|
1143 |
-
}
|
1144 |
-
|
1145 |
-
.sc_personal_quote span{
|
1146 |
-
display: inline-block;
|
1147 |
-
float: left;
|
1148 |
-
}
|
1149 |
-
.sc_personal_quote span.sc_team_icon-quote-left{
|
1150 |
-
width: 5%;
|
1151 |
-
line-height: 40px;
|
1152 |
-
font-size: 30px;
|
1153 |
-
padding: 0 20px 0 0;
|
1154 |
-
}
|
1155 |
-
.sc_personal_quote span.sc_personal_quote_content{
|
1156 |
-
width: 80%;
|
1157 |
-
font-size: 24px;
|
1158 |
-
line-height: 28px;
|
1159 |
-
font-style: italic;
|
1160 |
-
margin-left: 10px;
|
1161 |
-
}
|
1162 |
-
|
1163 |
-
.sc_team_single_member .progress span{
|
1164 |
-
color: rgb(255, 255, 255);
|
1165 |
-
float: right;
|
1166 |
-
padding-right: 10px;
|
1167 |
-
font-size: 14px;
|
1168 |
-
font-weight: 700;
|
1169 |
-
}
|
1170 |
-
|
1171 |
-
#sc_our_team.directory .wp-post-image,
|
1172 |
-
#sc_our_team.directory .sc_personal_quote,
|
1173 |
-
#sc_our_team.directory .sc_team_content,
|
1174 |
-
#sc_our_team.directory .icons,
|
1175 |
-
#sc_our_team.directory .sc_team_skills,
|
1176 |
-
#sc_our_team.directory .sc_team_posts,
|
1177 |
-
#sc_our_team.directory .sc_team_tags,
|
1178 |
-
#sc_our_team.directory .sc_team_more{
|
1179 |
-
display: none;
|
1180 |
-
}
|
1181 |
-
|
1182 |
-
div.dataTables_wrapper table.dataTable.sc-team-table {
|
1183 |
-
border-collapse: collapse;
|
1184 |
-
}
|
1185 |
-
|
1186 |
-
div.dataTables_wrapper table.sc-team-table thead tr th {
|
1187 |
-
font-weight: 400;
|
1188 |
-
}
|
1189 |
-
|
1190 |
-
div.dataTables_wrapper table.dataTable.sc-team-table tbody td {
|
1191 |
-
font-weight: 400;
|
1192 |
-
}
|
1193 |
-
|
1194 |
-
div.dataTables_wrapper table.dataTable.sc-team-table tfoot,
|
1195 |
-
div.dataTables_wrapper .sc-team-table div.dataTables_length {
|
1196 |
-
/*display: none;*/
|
1197 |
-
}
|
1198 |
-
|
1199 |
-
div.dataTables_wrapper table.dataTable.sc-team-table tbody tr.odd td.sorting_1,
|
1200 |
-
div.dataTables_wrapper table.dataTable.sc-team-table tbody tr.even td.sorting_1 {
|
1201 |
-
font-weight: 300;
|
1202 |
-
}
|
1203 |
-
|
1204 |
-
div.dataTables_wrapper .sc-team-table div.dataTables_info,
|
1205 |
-
div.dataTables_wrapper .sc-team-table div.dataTables_paginate,
|
1206 |
-
div.dataTables_wrapper .sc-team-table div.dataTables_filter label {
|
1207 |
-
text-transform: uppercase;
|
1208 |
-
font-size: 12px;
|
1209 |
-
padding-left: 11px;
|
1210 |
-
margin-top: 5px;
|
1211 |
-
font-weight: 400;
|
1212 |
-
}
|
1213 |
-
|
1214 |
-
div.dataTables_wrapper div.dataTables_paginate.paging_simple_numbers a.paginate_button.current {
|
1215 |
-
border: none;
|
1216 |
-
}
|
1217 |
-
|
1218 |
-
div.dataTables_wrapper div.checkbox {
|
1219 |
-
margin: 0px !important;
|
1220 |
-
}
|
1221 |
-
|
1222 |
-
div.dataTables_wrapper table thead tr {
|
1223 |
-
color: #FFF;
|
1224 |
-
}
|
1225 |
-
|
1226 |
-
div.dataTables_wrapper table thead tr th {
|
1227 |
-
border: thin solid #fff;
|
1228 |
-
}
|
1229 |
-
|
1230 |
-
div.dataTables_wrapper table.dataTable tbody tr:hover {
|
1231 |
-
/*background-color: #DBF0F0;*/
|
1232 |
-
}
|
1233 |
-
|
1234 |
-
div.dataTables_wrapper table.dataTable tbody td {
|
1235 |
-
/*color: #063746;*/
|
1236 |
-
/*border: thin solid #f9f9f9;*/
|
1237 |
-
}
|
1238 |
-
|
1239 |
-
div.dataTables_wrapper table.dataTable tbody tr.odd td.sorting_1,
|
1240 |
-
div.dataTables_wrapper table.dataTable tbody tr.even td.sorting_1 {
|
1241 |
-
/*color: #1abc9c;*/
|
1242 |
-
/*background-color: #DBF0F0;*/
|
1243 |
-
}
|
1244 |
-
|
1245 |
-
div.dataTables_wrapper div.dataTables_info,
|
1246 |
-
div.dataTables_wrapper div.dataTables_paginate,
|
1247 |
-
div.dataTables_wrapper div.dataTables_filter label {
|
1248 |
-
/*color: #063746;*/
|
1249 |
-
}
|
1250 |
-
|
1251 |
-
div.dataTables_wrapper div.dataTables_paginate.paging_simple_numbers a.paginate_button {
|
1252 |
-
/*color: #1abc9c !important;*/
|
1253 |
-
}
|
1254 |
-
|
1255 |
-
div.dataTables_wrapper div.dataTables_paginate.paging_simple_numbers a.paginate_button.current {
|
1256 |
-
/*background: #1abc9c;*/
|
1257 |
-
color: #FFF !important;
|
1258 |
-
}
|
1259 |
-
|
1260 |
-
div.dataTables_wrapper div.dataTables_paginate.paging_simple_numbers a.paginate_button.disabled {
|
1261 |
-
/*color: #063746 !important;*/
|
1262 |
-
}
|
1263 |
-
|
1264 |
-
#sc_our_team .dataTables_wrapper .dataTables_filter input[type=search]{
|
1265 |
-
|
1266 |
-
margin-bottom: 5px;
|
1267 |
-
outline:none;
|
1268 |
-
border-radius: 15px;
|
1269 |
-
padding: 5px 10px;
|
1270 |
-
font-size: 13px;
|
1271 |
-
|
1272 |
-
}
|
1273 |
-
|
1274 |
-
/*
|
1275 |
-
* Core Owl Carousel CSS File
|
1276 |
-
* v1.3.3
|
1277 |
-
*/
|
1278 |
-
|
1279 |
-
/* clearfix */
|
1280 |
-
.owl-carousel .owl-wrapper:after {
|
1281 |
-
content: ".";
|
1282 |
-
display: block;
|
1283 |
-
clear: both;
|
1284 |
-
visibility: hidden;
|
1285 |
-
line-height: 0;
|
1286 |
-
height: 0;
|
1287 |
-
}
|
1288 |
-
/* display none until init */
|
1289 |
-
.owl-carousel{
|
1290 |
-
display: none;
|
1291 |
-
position: relative;
|
1292 |
-
width: 100%;
|
1293 |
-
-ms-touch-action: pan-y;
|
1294 |
-
}
|
1295 |
-
.owl-carousel .owl-wrapper{
|
1296 |
-
display: none;
|
1297 |
-
position: relative;
|
1298 |
-
-webkit-transform: translate3d(0px, 0px, 0px);
|
1299 |
-
}
|
1300 |
-
.owl-carousel .owl-wrapper-outer{
|
1301 |
-
overflow: hidden;
|
1302 |
-
position: relative;
|
1303 |
-
width: 100%;
|
1304 |
-
}
|
1305 |
-
.owl-carousel .owl-wrapper-outer.autoHeight{
|
1306 |
-
-webkit-transition: height 500ms ease-in-out;
|
1307 |
-
-moz-transition: height 500ms ease-in-out;
|
1308 |
-
-ms-transition: height 500ms ease-in-out;
|
1309 |
-
-o-transition: height 500ms ease-in-out;
|
1310 |
-
transition: height 500ms ease-in-out;
|
1311 |
-
}
|
1312 |
-
|
1313 |
-
.owl-carousel .owl-item{
|
1314 |
-
float: left;
|
1315 |
-
}
|
1316 |
-
.owl-controls .owl-page,
|
1317 |
-
.owl-controls .owl-buttons div{
|
1318 |
-
cursor: pointer;
|
1319 |
-
}
|
1320 |
-
.owl-controls {
|
1321 |
-
-webkit-user-select: none;
|
1322 |
-
-khtml-user-select: none;
|
1323 |
-
-moz-user-select: none;
|
1324 |
-
-ms-user-select: none;
|
1325 |
-
user-select: none;
|
1326 |
-
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
|
1327 |
-
}
|
1328 |
-
|
1329 |
-
/* mouse grab icon */
|
1330 |
-
.grabbing {
|
1331 |
-
cursor:url(../img/grabbing.png) 8 8, move;
|
1332 |
-
}
|
1333 |
-
|
1334 |
-
/* fix */
|
1335 |
-
.owl-carousel .owl-wrapper,
|
1336 |
-
.owl-carousel .owl-item{
|
1337 |
-
-webkit-backface-visibility: hidden;
|
1338 |
-
-moz-backface-visibility: hidden;
|
1339 |
-
-ms-backface-visibility: hidden;
|
1340 |
-
-webkit-transform: translate3d(0,0,0);
|
1341 |
-
-moz-transform: translate3d(0,0,0);
|
1342 |
-
-ms-transform: translate3d(0,0,0);
|
1343 |
-
}
|
1344 |
-
|
1345 |
-
/*
|
1346 |
-
* Owl Carousel Owl Demo Theme
|
1347 |
-
* v1.3.3
|
1348 |
-
*/
|
1349 |
-
|
1350 |
-
.owl-theme .owl-controls{
|
1351 |
-
margin-top: 10px;
|
1352 |
-
text-align: center;
|
1353 |
-
}
|
1354 |
-
|
1355 |
-
/* Styling Next and Prev buttons */
|
1356 |
-
|
1357 |
-
.owl-theme .owl-controls .owl-buttons div{
|
1358 |
-
color: #FFF;
|
1359 |
-
display: inline-block;
|
1360 |
-
zoom: 1;
|
1361 |
-
*display: inline;/*IE7 life-saver */
|
1362 |
-
margin: 5px;
|
1363 |
-
padding: 3px 10px;
|
1364 |
-
font-size: 12px;
|
1365 |
-
-webkit-border-radius: 30px;
|
1366 |
-
-moz-border-radius: 30px;
|
1367 |
-
border-radius: 30px;
|
1368 |
-
background: #869791;
|
1369 |
-
filter: Alpha(Opacity=50);/*IE7 fix*/
|
1370 |
-
opacity: 0.5;
|
1371 |
-
}
|
1372 |
-
/* Clickable class fix problem with hover on touch devices */
|
1373 |
-
/* Use it for non-touch hover action */
|
1374 |
-
.owl-theme .owl-controls.clickable .owl-buttons div:hover{
|
1375 |
-
filter: Alpha(Opacity=100);/*IE7 fix*/
|
1376 |
-
opacity: 1;
|
1377 |
-
text-decoration: none;
|
1378 |
-
}
|
1379 |
-
|
1380 |
-
/* Styling Pagination*/
|
1381 |
-
|
1382 |
-
.owl-theme .owl-controls .owl-page{
|
1383 |
-
display: inline-block;
|
1384 |
-
zoom: 1;
|
1385 |
-
*display: inline;/*IE7 life-saver */
|
1386 |
-
}
|
1387 |
-
.owl-theme .owl-controls .owl-page span{
|
1388 |
-
display: block;
|
1389 |
-
width: 12px;
|
1390 |
-
height: 12px;
|
1391 |
-
margin: 5px 7px;
|
1392 |
-
filter: Alpha(Opacity=50);/*IE7 fix*/
|
1393 |
-
opacity: 0.5;
|
1394 |
-
-webkit-border-radius: 20px;
|
1395 |
-
-moz-border-radius: 20px;
|
1396 |
-
border-radius: 20px;
|
1397 |
-
background: #869791;
|
1398 |
-
}
|
1399 |
-
|
1400 |
-
.owl-theme .owl-controls .owl-page.active span,
|
1401 |
-
.owl-theme .owl-controls.clickable .owl-page:hover span{
|
1402 |
-
filter: Alpha(Opacity=100);/*IE7 fix*/
|
1403 |
-
opacity: 1;
|
1404 |
-
}
|
1405 |
-
|
1406 |
-
/* If PaginationNumbers is true */
|
1407 |
-
|
1408 |
-
.owl-theme .owl-controls .owl-page span.owl-numbers{
|
1409 |
-
height: auto;
|
1410 |
-
width: auto;
|
1411 |
-
color: #FFF;
|
1412 |
-
padding: 2px 10px;
|
1413 |
-
font-size: 12px;
|
1414 |
-
-webkit-border-radius: 30px;
|
1415 |
-
-moz-border-radius: 30px;
|
1416 |
-
border-radius: 30px;
|
1417 |
-
}
|
1418 |
-
|
1419 |
-
/* preloading images */
|
1420 |
-
.owl-item.loading{
|
1421 |
-
min-height: 150px;
|
1422 |
-
background: url(AjaxLoader.gif) no-repeat center center
|
1423 |
-
}
|
1424 |
-
|
1425 |
-
/*
|
1426 |
-
* Owl Carousel CSS3 Transitions
|
1427 |
-
* v1.3.2
|
1428 |
-
*/
|
1429 |
-
|
1430 |
-
.owl-origin {
|
1431 |
-
-webkit-perspective: 1200px;
|
1432 |
-
-webkit-perspective-origin-x : 50%;
|
1433 |
-
-webkit-perspective-origin-y : 50%;
|
1434 |
-
-moz-perspective : 1200px;
|
1435 |
-
-moz-perspective-origin-x : 50%;
|
1436 |
-
-moz-perspective-origin-y : 50%;
|
1437 |
-
perspective : 1200px;
|
1438 |
-
}
|
1439 |
-
/* fade */
|
1440 |
-
.owl-fade-out {
|
1441 |
-
z-index: 10;
|
1442 |
-
-webkit-animation: fadeOut .7s both ease;
|
1443 |
-
-moz-animation: fadeOut .7s both ease;
|
1444 |
-
animation: fadeOut .7s both ease;
|
1445 |
-
}
|
1446 |
-
.owl-fade-in {
|
1447 |
-
-webkit-animation: fadeIn .7s both ease;
|
1448 |
-
-moz-animation: fadeIn .7s both ease;
|
1449 |
-
animation: fadeIn .7s both ease;
|
1450 |
-
}
|
1451 |
-
/* backSlide */
|
1452 |
-
.owl-backSlide-out {
|
1453 |
-
-webkit-animation: backSlideOut 1s both ease;
|
1454 |
-
-moz-animation: backSlideOut 1s both ease;
|
1455 |
-
animation: backSlideOut 1s both ease;
|
1456 |
-
}
|
1457 |
-
.owl-backSlide-in {
|
1458 |
-
-webkit-animation: backSlideIn 1s both ease;
|
1459 |
-
-moz-animation: backSlideIn 1s both ease;
|
1460 |
-
animation: backSlideIn 1s both ease;
|
1461 |
-
}
|
1462 |
-
/* goDown */
|
1463 |
-
.owl-goDown-out {
|
1464 |
-
-webkit-animation: scaleToFade .7s ease both;
|
1465 |
-
-moz-animation: scaleToFade .7s ease both;
|
1466 |
-
animation: scaleToFade .7s ease both;
|
1467 |
-
}
|
1468 |
-
.owl-goDown-in {
|
1469 |
-
-webkit-animation: goDown .6s ease both;
|
1470 |
-
-moz-animation: goDown .6s ease both;
|
1471 |
-
animation: goDown .6s ease both;
|
1472 |
-
}
|
1473 |
-
/* scaleUp */
|
1474 |
-
.owl-fadeUp-in {
|
1475 |
-
-webkit-animation: scaleUpFrom .5s ease both;
|
1476 |
-
-moz-animation: scaleUpFrom .5s ease both;
|
1477 |
-
animation: scaleUpFrom .5s ease both;
|
1478 |
-
}
|
1479 |
-
|
1480 |
-
.owl-fadeUp-out {
|
1481 |
-
-webkit-animation: scaleUpTo .5s ease both;
|
1482 |
-
-moz-animation: scaleUpTo .5s ease both;
|
1483 |
-
animation: scaleUpTo .5s ease both;
|
1484 |
-
}
|
1485 |
-
/* Keyframes */
|
1486 |
-
/*empty*/
|
1487 |
-
@-webkit-keyframes empty {
|
1488 |
-
0% {opacity: 1}
|
1489 |
-
}
|
1490 |
-
@-moz-keyframes empty {
|
1491 |
-
0% {opacity: 1}
|
1492 |
-
}
|
1493 |
-
@keyframes empty {
|
1494 |
-
0% {opacity: 1}
|
1495 |
-
}
|
1496 |
-
@-webkit-keyframes fadeIn {
|
1497 |
-
0% { opacity:0; }
|
1498 |
-
100% { opacity:1; }
|
1499 |
-
}
|
1500 |
-
@-moz-keyframes fadeIn {
|
1501 |
-
0% { opacity:0; }
|
1502 |
-
100% { opacity:1; }
|
1503 |
-
}
|
1504 |
-
@keyframes fadeIn {
|
1505 |
-
0% { opacity:0; }
|
1506 |
-
100% { opacity:1; }
|
1507 |
-
}
|
1508 |
-
@-webkit-keyframes fadeOut {
|
1509 |
-
0% { opacity:1; }
|
1510 |
-
100% { opacity:0; }
|
1511 |
-
}
|
1512 |
-
@-moz-keyframes fadeOut {
|
1513 |
-
0% { opacity:1; }
|
1514 |
-
100% { opacity:0; }
|
1515 |
-
}
|
1516 |
-
@keyframes fadeOut {
|
1517 |
-
0% { opacity:1; }
|
1518 |
-
100% { opacity:0; }
|
1519 |
-
}
|
1520 |
-
@-webkit-keyframes backSlideOut {
|
1521 |
-
25% { opacity: .5; -webkit-transform: translateZ(-500px); }
|
1522 |
-
75% { opacity: .5; -webkit-transform: translateZ(-500px) translateX(-200%); }
|
1523 |
-
100% { opacity: .5; -webkit-transform: translateZ(-500px) translateX(-200%); }
|
1524 |
-
}
|
1525 |
-
@-moz-keyframes backSlideOut {
|
1526 |
-
25% { opacity: .5; -moz-transform: translateZ(-500px); }
|
1527 |
-
75% { opacity: .5; -moz-transform: translateZ(-500px) translateX(-200%); }
|
1528 |
-
100% { opacity: .5; -moz-transform: translateZ(-500px) translateX(-200%); }
|
1529 |
-
}
|
1530 |
-
@keyframes backSlideOut {
|
1531 |
-
25% { opacity: .5; transform: translateZ(-500px); }
|
1532 |
-
75% { opacity: .5; transform: translateZ(-500px) translateX(-200%); }
|
1533 |
-
100% { opacity: .5; transform: translateZ(-500px) translateX(-200%); }
|
1534 |
-
}
|
1535 |
-
@-webkit-keyframes backSlideIn {
|
1536 |
-
0%, 25% { opacity: .5; -webkit-transform: translateZ(-500px) translateX(200%); }
|
1537 |
-
75% { opacity: .5; -webkit-transform: translateZ(-500px); }
|
1538 |
-
100% { opacity: 1; -webkit-transform: translateZ(0) translateX(0); }
|
1539 |
-
}
|
1540 |
-
@-moz-keyframes backSlideIn {
|
1541 |
-
0%, 25% { opacity: .5; -moz-transform: translateZ(-500px) translateX(200%); }
|
1542 |
-
75% { opacity: .5; -moz-transform: translateZ(-500px); }
|
1543 |
-
100% { opacity: 1; -moz-transform: translateZ(0) translateX(0); }
|
1544 |
-
}
|
1545 |
-
@keyframes backSlideIn {
|
1546 |
-
0%, 25% { opacity: .5; transform: translateZ(-500px) translateX(200%); }
|
1547 |
-
75% { opacity: .5; transform: translateZ(-500px); }
|
1548 |
-
100% { opacity: 1; transform: translateZ(0) translateX(0); }
|
1549 |
-
}
|
1550 |
-
@-webkit-keyframes scaleToFade {
|
1551 |
-
to { opacity: 0; -webkit-transform: scale(.8); }
|
1552 |
-
}
|
1553 |
-
@-moz-keyframes scaleToFade {
|
1554 |
-
to { opacity: 0; -moz-transform: scale(.8); }
|
1555 |
-
}
|
1556 |
-
@keyframes scaleToFade {
|
1557 |
-
to { opacity: 0; transform: scale(.8); }
|
1558 |
-
}
|
1559 |
-
@-webkit-keyframes goDown {
|
1560 |
-
from { -webkit-transform: translateY(-100%); }
|
1561 |
-
}
|
1562 |
-
@-moz-keyframes goDown {
|
1563 |
-
from { -moz-transform: translateY(-100%); }
|
1564 |
-
}
|
1565 |
-
@keyframes goDown {
|
1566 |
-
from { transform: translateY(-100%); }
|
1567 |
-
}
|
1568 |
-
|
1569 |
-
@-webkit-keyframes scaleUpFrom {
|
1570 |
-
from { opacity: 0; -webkit-transform: scale(1.5); }
|
1571 |
-
}
|
1572 |
-
@-moz-keyframes scaleUpFrom {
|
1573 |
-
from { opacity: 0; -moz-transform: scale(1.5); }
|
1574 |
-
}
|
1575 |
-
@keyframes scaleUpFrom {
|
1576 |
-
from { opacity: 0; transform: scale(1.5); }
|
1577 |
-
}
|
1578 |
-
|
1579 |
-
@-webkit-keyframes scaleUpTo {
|
1580 |
-
to { opacity: 0; -webkit-transform: scale(1.5); }
|
1581 |
-
}
|
1582 |
-
@-moz-keyframes scaleUpTo {
|
1583 |
-
to { opacity: 0; -moz-transform: scale(1.5); }
|
1584 |
-
}
|
1585 |
-
@keyframes scaleUpTo {
|
1586 |
-
to { opacity: 0; transform: scale(1.5); }
|
1587 |
-
}
|
1588 |
-
|
1589 |
-
|
1590 |
-
/* Let's get this party started */
|
1591 |
-
#sc_our_team_lightbox ::-webkit-scrollbar,
|
1592 |
-
.sc_our_team_panel ::-webkit-scrollbar{
|
1593 |
-
width: 4px;
|
1594 |
-
}
|
1595 |
-
|
1596 |
-
/* Track */
|
1597 |
-
#sc_our_team_lightbox ::-webkit-scrollbar-track,
|
1598 |
-
.sc_our_team_panel ::-webkit-scrollbar-track{
|
1599 |
-
-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3);
|
1600 |
-
}
|
1601 |
-
|
1602 |
-
/* Handle */
|
1603 |
-
#sc_our_team_lightbox ::-webkit-scrollbar-thumb,
|
1604 |
-
.sc_our_team_panel ::-webkit-scrollbar-thumb{
|
1605 |
-
background: rgba(75,75,75,0.8);
|
1606 |
-
-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.5);
|
1607 |
-
}
|
1608 |
-
|
1609 |
-
.sc_our_team_panel ::-webkit-scrollbar-thumb{
|
1610 |
-
background: rgba(255,255,255,0.8);
|
1611 |
-
}
|
1612 |
-
|
1613 |
-
#sc_our_team_lightbox ::-webkit-scrollbar-thumb:window-inactive,
|
1614 |
-
.sc_our_team_panel ::-webkit-scrollbar-thumb:window-inactive{
|
1615 |
-
background: rgba(255,0,0,0.4);
|
1616 |
-
}
|
1617 |
-
|
1618 |
-
@media (min-width: 768px){
|
1619 |
-
|
1620 |
-
|
1621 |
-
#sc_our_team_lightbox .sc_our_team_lightbox{
|
1622 |
-
padding: 15px 0;
|
1623 |
-
margin: 0 auto;
|
1624 |
-
width: 750px;
|
1625 |
-
height: 400px;
|
1626 |
-
margin-top: 50px;
|
1627 |
-
max-height: 80%;
|
1628 |
-
overflow-y: scroll;
|
1629 |
-
position: relative;
|
1630 |
-
}
|
1631 |
-
|
1632 |
-
#sc_our_team_lightbox .sc_our_team_lightbox .name,
|
1633 |
-
#sc_our_team_lightbox .sc_our_team_lightbox .skills-title{
|
1634 |
-
font-size: 26px;
|
1635 |
-
line-height: 28px;
|
1636 |
-
margin: 0;
|
1637 |
-
}
|
1638 |
-
|
1639 |
-
#sc_our_team_lightbox .sc_our_team_lightbox .sc-content{
|
1640 |
-
font-size: 15px;
|
1641 |
-
line-height: 18px;
|
1642 |
-
}
|
1643 |
-
#sc_our_team_lightbox .sc_our_team_lightbox .title{
|
1644 |
-
font-size: 20px;
|
1645 |
-
margin-top: 15px;
|
1646 |
-
}
|
1647 |
-
|
1648 |
-
.sc_team_single_member .sc_single_side .title{
|
1649 |
-
font-size: 17px;
|
1650 |
-
}
|
1651 |
-
.grid#sc_our_team .sc_team_member{
|
1652 |
-
float: left;
|
1653 |
-
width: 25%;
|
1654 |
-
}
|
1655 |
-
#sc_our_team.sc-col3 .sc_team_member{
|
1656 |
-
width: 33.3%;
|
1657 |
-
/*margin: 1%;*/
|
1658 |
-
}
|
1659 |
-
#sc_our_team.sc-col4 .sc_team_member{
|
1660 |
-
width: 25%;
|
1661 |
-
/*margin: 1%;*/
|
1662 |
-
}
|
1663 |
-
#sc_our_team.sc-col2 .sc_team_member{
|
1664 |
-
width: 50%;
|
1665 |
-
/*margin: 1%;*/
|
1666 |
-
}
|
1667 |
-
#sc_our_team.sc-col5 .sc_team_member{
|
1668 |
-
width: 20%;
|
1669 |
-
}
|
1670 |
-
#sc_our_team.sc-col10 .sc_team_member{
|
1671 |
-
width: 10%;
|
1672 |
-
}
|
1673 |
-
|
1674 |
-
|
1675 |
-
#sc_our_team.grid_circles.sc-col3 .sc_team_member,
|
1676 |
-
#sc_our_team.grid_circles2.sc-col3 .sc_team_member{
|
1677 |
-
width: 31%;
|
1678 |
-
margin: 1%;
|
1679 |
-
}
|
1680 |
-
#sc_our_team.grid_circles.sc-col4 .sc_team_member,
|
1681 |
-
#sc_our_team.grid_circles2.sc-col4 .sc_team_member{
|
1682 |
-
width: 23%;
|
1683 |
-
margin: 1%;
|
1684 |
-
}
|
1685 |
-
#sc_our_team.grid_circles.sc-col2 .sc_team_member,
|
1686 |
-
#sc_our_team.grid_circles2.sc-col2 .sc_team_member{
|
1687 |
-
width: 48%;
|
1688 |
-
margin: 1%;
|
1689 |
-
}
|
1690 |
-
#sc_our_team.sc-col5 .sc_team_member{
|
1691 |
-
width: 17%;
|
1692 |
-
margin: 1%;
|
1693 |
-
}
|
1694 |
-
#sc_our_team.sc-col10 .sc_team_member{
|
1695 |
-
width: 10%;
|
1696 |
-
}
|
1697 |
-
#sc_our_team .sc_team_member img.wp-post-image{
|
1698 |
-
|
1699 |
-
}
|
1700 |
-
#sc_our_team .sc_team_member_inner{
|
1701 |
-
|
1702 |
-
}
|
1703 |
-
|
1704 |
-
.sc_team_single_member .sc_single_side{
|
1705 |
-
float: left;
|
1706 |
-
width: 25%;
|
1707 |
-
|
1708 |
-
box-sizing: border-box;
|
1709 |
-
|
1710 |
-
}
|
1711 |
-
.sc_team_single_member .sc_single_main{
|
1712 |
-
float: left;
|
1713 |
-
width: 71%;
|
1714 |
-
margin-left: 2%;
|
1715 |
-
padding: 15px;
|
1716 |
-
box-sizing: border-box;
|
1717 |
-
background: rgba(150,150,150,0.2);
|
1718 |
-
}
|
1719 |
-
.sc_team_single_member .sc_single_main.sc-skills{
|
1720 |
-
width: 46%;
|
1721 |
-
margin-right: 2%;
|
1722 |
-
}
|
1723 |
-
.sc_team_single_member .sc_team_single_skills{
|
1724 |
-
width: 25%;
|
1725 |
-
float: left;
|
1726 |
-
|
1727 |
-
}
|
1728 |
-
.sc_team_single_member .wp-post-image{
|
1729 |
-
width: 100%;
|
1730 |
-
}
|
1731 |
-
|
1732 |
-
.width25{
|
1733 |
-
width: 24%;
|
1734 |
-
padding: 0 15px;
|
1735 |
-
}
|
1736 |
-
.width50{
|
1737 |
-
width: 49%;
|
1738 |
-
padding: 0 15px;
|
1739 |
-
}
|
1740 |
-
.width75{
|
1741 |
-
width: 73%;
|
1742 |
-
padding: 0 15px;
|
1743 |
-
}
|
1744 |
-
|
1745 |
-
|
1746 |
-
}
|
1747 |
-
|
1748 |
-
@media (min-width: 481px) and (max-width: 767px){
|
1749 |
-
/* .grid#sc_our_team .sc_team_member{
|
1750 |
-
float: left;
|
1751 |
-
width: 33.33%;
|
1752 |
-
}*/
|
1753 |
-
}
|
1754 |
-
@media (max-width: 480px){
|
1755 |
-
/* .grid#sc_our_team .sc_team_member{
|
1756 |
-
float: left;
|
1757 |
-
width: 50%;
|
1758 |
-
}*/
|
1759 |
-
}
|
1760 |
-
|
1761 |
-
@media( min-width: 767px ) and ( max-width: 980px ) {
|
1762 |
-
|
1763 |
-
#sc_our_team.grid_circles.sc-col4 .sc_team_member,
|
1764 |
-
#sc_our_team.grid_circles2.sc-col4 .sc_team_member,
|
1765 |
-
#sc_our_team.grid_circles.sc-col3 .sc_team_member,
|
1766 |
-
#sc_our_team.grid_circles2.sc-col3 .sc_team_member,
|
1767 |
-
#sc_our_team.grid_circles.sc-col2 .sc_team_member,
|
1768 |
-
#sc_our_team.grid_circles2.sc-col2 .sc_team_member,
|
1769 |
-
#sc_our_team.grid_circles.sc-col5 .sc_team_member,
|
1770 |
-
#sc_our_team.grid_circles2.sc-col5 .sc_team_member,
|
1771 |
-
#sc_our_team.grid.sc-col4 .sc_team_member,
|
1772 |
-
#sc_our_team.grid.sc-col4 .sc_team_member,
|
1773 |
-
#sc_our_team.grid.sc-col3 .sc_team_member,
|
1774 |
-
#sc_our_team.grid.sc-col3 .sc_team_member,
|
1775 |
-
#sc_our_team.grid.sc-col2 .sc_team_member,
|
1776 |
-
#sc_our_team.grid.sc-col2 .sc_team_member,
|
1777 |
-
#sc_our_team.grid.sc-col5 .sc_team_member,
|
1778 |
-
#sc_our_team.grid.sc-col5 .sc_team_member{
|
1779 |
-
width: 45%;
|
1780 |
-
margin-right: 4%;
|
1781 |
-
margin-bottom: 15px;
|
1782 |
-
}
|
1783 |
-
|
1784 |
-
}
|
1785 |
-
|
1786 |
-
@media( max-width : 767px ) {
|
1787 |
-
#sc_our_team_lightbox .sc_our_team_lightbox{
|
1788 |
-
overflow-y: scroll;
|
1789 |
-
max-height: 80%;
|
1790 |
-
}
|
1791 |
-
#sc_our_team_lightbox .sc_our_team_lightbox .image{
|
1792 |
-
width: 50%;
|
1793 |
-
}
|
1794 |
-
|
1795 |
-
#sc_our_team_lightbox .sc_our_team_lightbox .name,
|
1796 |
-
#sc_our_team_lightbox .sc_our_team_lightbox .skills-title{
|
1797 |
-
font-size: 26px;
|
1798 |
-
}
|
1799 |
-
|
1800 |
-
#sc_our_team_lightbox .sc_our_team_lightbox .sc-content{
|
1801 |
-
font-size: 15px;
|
1802 |
-
line-height: 18px;
|
1803 |
-
}
|
1804 |
-
#sc_our_team_lightbox .sc_our_team_lightbox .title{
|
1805 |
-
font-size: 20px;
|
1806 |
-
margin-top: 15px;
|
1807 |
-
}
|
1808 |
-
#sc_our_team.grid_circles.sc-col4 .sc_team_member,
|
1809 |
-
#sc_our_team.grid_circles2.sc-col4 .sc_team_member,
|
1810 |
-
#sc_our_team.grid_circles.sc-col3 .sc_team_member,
|
1811 |
-
#sc_our_team.grid_circles2.sc-col3 .sc_team_member,
|
1812 |
-
#sc_our_team.grid_circles.sc-col2 .sc_team_member,
|
1813 |
-
#sc_our_team.grid_circles2.sc-col2 .sc_team_member,
|
1814 |
-
#sc_our_team.grid_circles.sc-col5 .sc_team_member,
|
1815 |
-
#sc_our_team.grid_circles2.sc-col5 .sc_team_member,
|
1816 |
-
#sc_our_team.grid.sc-col4 .sc_team_member,
|
1817 |
-
#sc_our_team.grid.sc-col4 .sc_team_member,
|
1818 |
-
#sc_our_team.grid.sc-col3 .sc_team_member,
|
1819 |
-
#sc_our_team.grid.sc-col3 .sc_team_member,
|
1820 |
-
#sc_our_team.grid.sc-col2 .sc_team_member,
|
1821 |
-
#sc_our_team.grid.sc-col2 .sc_team_member,
|
1822 |
-
#sc_our_team.grid.sc-col5 .sc_team_member,
|
1823 |
-
#sc_our_team.grid.sc-col5 .sc_team_member{
|
1824 |
-
width: 100%;
|
1825 |
-
margin-right: 0;
|
1826 |
-
margin-bottom: 0;
|
1827 |
-
}
|
1828 |
-
|
1829 |
-
.stacked#sc_our_team .sc_team_member .sc_team_member_name a{
|
1830 |
-
text-decoration: none;
|
1831 |
-
font-size: 18px;
|
1832 |
-
}
|
1833 |
-
.stacked#sc_our_team .sc_team_member .sc_team_member_jobtitle{
|
1834 |
-
font-size: 16px;
|
1835 |
-
}
|
1836 |
-
|
1837 |
-
|
1838 |
-
}
|
1839 |
-
|
1840 |
-
@media( max-width: 500px ) {
|
1841 |
-
|
1842 |
-
.sc_our_team_panel{
|
1843 |
-
width: 100%;
|
1844 |
-
}
|
1845 |
-
.sc_our_team_panel .sc-right-panel{
|
1846 |
-
width: auto;
|
1847 |
-
width: 90%;
|
1848 |
-
}
|
1849 |
-
|
1850 |
-
}
|
1851 |
-
|
1852 |
-
@font-face {
|
1853 |
-
font-family: 'sc_our_team';
|
1854 |
-
src:url('../fonts/sc_our_team.eot?r6ju34');
|
1855 |
-
src:url('../fonts/sc_our_team.eot?#iefixr6ju34') format('embedded-opentype'),
|
1856 |
-
url('../fonts/sc_our_team.ttf?r6ju34') format('truetype'),
|
1857 |
-
url('../fonts/sc_our_team.woff?r6ju34') format('woff'),
|
1858 |
-
url('../fonts/sc_our_team.svg?r6ju34#sc_our_team') format('svg');
|
1859 |
-
font-weight: normal;
|
1860 |
-
font-style: normal;
|
1861 |
-
}
|
1862 |
-
|
1863 |
-
[class^="sc_team_icon-"], [class*=" sc_team_icon-"] {
|
1864 |
-
font-family: 'sc_our_team';
|
1865 |
-
speak: none;
|
1866 |
-
font-style: normal;
|
1867 |
-
font-weight: normal;
|
1868 |
-
font-variant: normal;
|
1869 |
-
text-transform: none;
|
1870 |
-
line-height: 1;
|
1871 |
-
|
1872 |
-
/* Better Font Rendering =========== */
|
1873 |
-
-webkit-font-smoothing: antialiased;
|
1874 |
-
-moz-osx-font-smoothing: grayscale;
|
1875 |
-
}
|
1876 |
-
|
1877 |
-
.sc_team_icon-quote-left:before {
|
1878 |
-
content: "\e600";
|
1879 |
-
}
|
1880 |
-
.sc_team_icon-close:before {
|
1881 |
-
content: "\e60a";
|
1882 |
-
}
|
1883 |
-
.sc_team_icon-vimeo-square:before {
|
1884 |
-
content: "\e601";
|
1885 |
-
}
|
1886 |
-
.sc_team_icon-pinterest-p:before {
|
1887 |
-
content: "\e602";
|
1888 |
-
}
|
1889 |
-
.sc_team_icon-share-alt:before {
|
1890 |
-
content: "\e603";
|
1891 |
-
}
|
1892 |
-
.sc_team_icon-google-plus:before {
|
1893 |
-
content: "\e604";
|
1894 |
-
}
|
1895 |
-
.sc_team_icon-linkedin:before {
|
1896 |
-
content: "\e605";
|
1897 |
-
}
|
1898 |
-
.sc_team_icon-twitter:before {
|
1899 |
-
content: "\e606";
|
1900 |
-
}
|
1901 |
-
.sc_team_icon-phone:before {
|
1902 |
-
content: "\e607";
|
1903 |
-
}
|
1904 |
-
.sc_team_icon-envelope-o:before {
|
1905 |
-
content: "\e608";
|
1906 |
-
}
|
1907 |
-
.sc_team_icon-facebook:before {
|
1908 |
-
content: "\e609";
|
1909 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/style/sc_our_team_admin.css
DELETED
@@ -1,121 +0,0 @@
|
|
1 |
-
/*
|
2 |
-
Document : sc_our_team_admin
|
3 |
-
Created on : Jun 25, 2014, 10:07:44 PM
|
4 |
-
Author : Bilal
|
5 |
-
Description:
|
6 |
-
Purpose of the stylesheet follows.
|
7 |
-
*/
|
8 |
-
|
9 |
-
root {
|
10 |
-
display: block;
|
11 |
-
}
|
12 |
-
|
13 |
-
.sc_team_member{
|
14 |
-
width: 20%;
|
15 |
-
float: left;
|
16 |
-
overflow: hidden;
|
17 |
-
}
|
18 |
-
.sc_team_member img{
|
19 |
-
width: 100%;
|
20 |
-
}
|
21 |
-
|
22 |
-
.sc_team_member_update_status .sc_team_member_updating,
|
23 |
-
.sc_team_member_update_status .sc_team_member_saved{
|
24 |
-
display: none;
|
25 |
-
}
|
26 |
-
|
27 |
-
.sc_team_member_inner{
|
28 |
-
height: 100%;
|
29 |
-
width: 100%;
|
30 |
-
position: relative;
|
31 |
-
}
|
32 |
-
.sc_team_member_overlay{
|
33 |
-
position: absolute;
|
34 |
-
height: 20px;
|
35 |
-
color: #fff;
|
36 |
-
width: 100%;
|
37 |
-
bottom: -5px;
|
38 |
-
left: 0;
|
39 |
-
line-height: 20px;
|
40 |
-
background: rgba(50,50,50,0.5);
|
41 |
-
}
|
42 |
-
|
43 |
-
#features {
|
44 |
-
margin: auto;
|
45 |
-
width: 460px;
|
46 |
-
font-size: 0.9em;
|
47 |
-
}
|
48 |
-
.connected, .sc_sortable, .exclude, .handles {
|
49 |
-
margin: auto;
|
50 |
-
padding: 0;
|
51 |
-
width: 450px;
|
52 |
-
-webkit-touch-callout: none;
|
53 |
-
-webkit-user-select: none;
|
54 |
-
-khtml-user-select: none;
|
55 |
-
-moz-user-select: none;
|
56 |
-
-ms-user-select: none;
|
57 |
-
user-select: none;
|
58 |
-
}
|
59 |
-
.sc_sortable.grid {
|
60 |
-
overflow: hidden;
|
61 |
-
}
|
62 |
-
.sc_sortable .sc_team_member_inner{
|
63 |
-
cursor: move;
|
64 |
-
}
|
65 |
-
.connected li, .sc_sortable li, .exclude li, .handles li {
|
66 |
-
list-style: none;
|
67 |
-
border: 1px solid #CCC;
|
68 |
-
background: #F6F6F6;
|
69 |
-
font-family: "Tahoma";
|
70 |
-
color: #1C94C4;
|
71 |
-
margin: 5px;
|
72 |
-
padding: 5px;
|
73 |
-
height: 22px;
|
74 |
-
}
|
75 |
-
.handles span {
|
76 |
-
cursor: move;
|
77 |
-
}
|
78 |
-
li.disabled {
|
79 |
-
opacity: 0.5;
|
80 |
-
}
|
81 |
-
.sc_sortable.grid li {
|
82 |
-
line-height: 80px;
|
83 |
-
float: left;
|
84 |
-
width: 80px;
|
85 |
-
height: 80px;
|
86 |
-
text-align: center;
|
87 |
-
}
|
88 |
-
li.highlight {
|
89 |
-
background: #FEE25F;
|
90 |
-
}
|
91 |
-
#connected {
|
92 |
-
width: 440px;
|
93 |
-
overflow: hidden;
|
94 |
-
margin: auto;
|
95 |
-
}
|
96 |
-
.connected {
|
97 |
-
float: left;
|
98 |
-
width: 200px;
|
99 |
-
}
|
100 |
-
.connected.no2 {
|
101 |
-
float: right;
|
102 |
-
}
|
103 |
-
li.sc_sortable-placeholder {
|
104 |
-
border: 1px dashed #CCC;
|
105 |
-
background: none;
|
106 |
-
}
|
107 |
-
.sc_options_table input[type="text"]{
|
108 |
-
/* float: left; */
|
109 |
-
width: 100%;
|
110 |
-
|
111 |
-
}
|
112 |
-
.sc_options_table table.widefat{
|
113 |
-
border: none;
|
114 |
-
}
|
115 |
-
|
116 |
-
.sc_options_table a.button{
|
117 |
-
/*margin-bottom: 5px;*/
|
118 |
-
}
|
119 |
-
#smartcat_team_member_info_box .sc_options_table h2{
|
120 |
-
margin: 0;
|
121 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/template/grid.php
DELETED
@@ -1,72 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/*
|
3 |
-
* Short description
|
4 |
-
* @author bilal hassan <info@smartcatdesign.net>
|
5 |
-
*
|
6 |
-
*/
|
7 |
-
$args = $this->sc_get_args( $group );
|
8 |
-
$members = new WP_Query( $args );
|
9 |
-
?>
|
10 |
-
<div id="sc_our_team" class="<?php
|
11 |
-
echo $template == '' ? $this->options[ 'template' ] : $template;
|
12 |
-
echo ' sc-col' . $this->options[ 'columns' ];
|
13 |
-
?>">
|
14 |
-
<div class="clear"></div>
|
15 |
-
<?php
|
16 |
-
if ( $members->have_posts() ) {
|
17 |
-
while ( $members->have_posts() ) {
|
18 |
-
$members->the_post();
|
19 |
-
?>
|
20 |
-
<div itemscope itemtype="http://schema.org/Person" class="sc_team_member">
|
21 |
-
<div class="sc_team_member_inner">
|
22 |
-
|
23 |
-
<?php
|
24 |
-
if ( has_post_thumbnail() )
|
25 |
-
echo the_post_thumbnail( 'medium' );
|
26 |
-
else {
|
27 |
-
echo '<img src="' . SC_TEAM_URL . 'inc/img/noprofile.jpg" class="attachment-medium wp-post-image"/>';
|
28 |
-
}
|
29 |
-
?>
|
30 |
-
|
31 |
-
<?php if ( 'yes' == $this->options[ 'name' ] ) : ?>
|
32 |
-
<div itemprop="name" class="sc_team_member_name">
|
33 |
-
<a href="<?php the_permalink() ?>" rel="bookmark" >
|
34 |
-
<?php the_title() ?>
|
35 |
-
</a>
|
36 |
-
</div>
|
37 |
-
<?php endif; ?>
|
38 |
-
|
39 |
-
<?php if ( 'yes' == $this->options[ 'title' ] && get_post_meta( get_the_ID(), 'team_member_title', true )) : ?>
|
40 |
-
<div itemprop="jobtitle" class="sc_team_member_jobtitle">
|
41 |
-
<?php echo get_post_meta( get_the_ID(), 'team_member_title', true ); ?>
|
42 |
-
</div>
|
43 |
-
<?php endif; ?>
|
44 |
-
|
45 |
-
<div class="sc_team_content">
|
46 |
-
<?php the_content(); ?>
|
47 |
-
</div>
|
48 |
-
|
49 |
-
<div class='icons <?php echo 'yes' == $this->options[ 'social' ] ? '' : 'hidden'; ?>'>
|
50 |
-
|
51 |
-
<?php $this->set_social( get_the_ID() ); ?>
|
52 |
-
|
53 |
-
</div>
|
54 |
-
|
55 |
-
<div class="sc_team_member_overlay"></div>
|
56 |
-
<div class="sc_team_more">
|
57 |
-
<a href="<?php the_permalink() ?>" rel="bookmark" class="<?php echo $this->check_clicker( $single_template ); ?>">
|
58 |
-
<img src="<?php echo SC_TEAM_URL . 'inc/img/more.png' ?>"/>
|
59 |
-
</a>
|
60 |
-
</div>
|
61 |
-
</div>
|
62 |
-
|
63 |
-
</div>
|
64 |
-
<?php
|
65 |
-
}
|
66 |
-
wp_reset_postdata();
|
67 |
-
} else {
|
68 |
-
echo __( 'There are no team members to display', 'smartcat-team' );
|
69 |
-
}
|
70 |
-
?>
|
71 |
-
<div class="clear"></div>
|
72 |
-
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/template/grid_circles.php
DELETED
@@ -1,71 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Created by Bilal Hassan.
|
4 |
-
* Date: 2014-06-26
|
5 |
-
* Time: 11:04 AM
|
6 |
-
*/
|
7 |
-
$args = $this->sc_get_args( $group );
|
8 |
-
$members = new WP_Query( $args );
|
9 |
-
?>
|
10 |
-
<div id="sc_our_team" class="<?php
|
11 |
-
echo $template == '' ? $this->options[ 'template' ] : $template;
|
12 |
-
echo ' sc-col' . $this->options[ 'columns' ];
|
13 |
-
?>">
|
14 |
-
<!--<div class="clear"></div>-->
|
15 |
-
<?php
|
16 |
-
if ( $members->have_posts() ) {
|
17 |
-
while ( $members->have_posts() ) {
|
18 |
-
$members->the_post();
|
19 |
-
?>
|
20 |
-
<div itemscope itemtype="http://schema.org/Person" class="sc_team_member">
|
21 |
-
<div class="sc_team_member_inner">
|
22 |
-
<?php
|
23 |
-
if ( has_post_thumbnail() )
|
24 |
-
echo the_post_thumbnail( 'medium' );
|
25 |
-
else {
|
26 |
-
echo '<img src="' . SC_TEAM_URL . 'inc/img/noprofile.jpg" class="attachment-medium wp-post-image"/>';
|
27 |
-
}
|
28 |
-
?>
|
29 |
-
|
30 |
-
<?php if ( 'yes' == $this->options[ 'name' ] ) : ?>
|
31 |
-
<div itemprop="name" class="sc_team_member_name">
|
32 |
-
<a href="<?php the_permalink() ?>" rel="bookmark" >
|
33 |
-
<?php the_title() ?>
|
34 |
-
</a>
|
35 |
-
</div>
|
36 |
-
<?php endif; ?>
|
37 |
-
|
38 |
-
<?php if ( 'yes' == $this->options[ 'title' ] && get_post_meta( get_the_ID(), 'team_member_title', true )) : ?>
|
39 |
-
<div itemprop="jobtitle" class="sc_team_member_jobtitle">
|
40 |
-
<?php echo get_post_meta( get_the_ID(), 'team_member_title', true ); ?>
|
41 |
-
</div>
|
42 |
-
<?php endif; ?>
|
43 |
-
|
44 |
-
<div class="sc_team_content">
|
45 |
-
<?php the_content(); ?>
|
46 |
-
</div>
|
47 |
-
|
48 |
-
<div class='icons <?php echo 'yes' == $this->options[ 'social' ] ? '' : 'hidden'; ?>'>
|
49 |
-
|
50 |
-
<?php $this->set_social( get_the_ID() ); ?>
|
51 |
-
|
52 |
-
</div>
|
53 |
-
|
54 |
-
<div class="sc_team_member_overlay"></div>
|
55 |
-
|
56 |
-
<div class="sc_team_more">
|
57 |
-
<a href="<?php the_permalink() ?>" rel="bookmark" class="<?php echo $this->check_clicker( $single_template ); ?>">
|
58 |
-
<img src="<?php echo SC_TEAM_URL . 'inc/img/more.png' ?>"/>
|
59 |
-
</a>
|
60 |
-
</div>
|
61 |
-
</div>
|
62 |
-
</div>
|
63 |
-
<?php
|
64 |
-
}
|
65 |
-
wp_reset_postdata();
|
66 |
-
} else {
|
67 |
-
echo __( 'There are no team members to display', 'smartcat-team' );
|
68 |
-
}
|
69 |
-
?>
|
70 |
-
<div class="clear"></div>
|
71 |
-
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/template/grid_circles2.php
DELETED
@@ -1,69 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Created by Bilal Hassan.
|
4 |
-
* Date: 2014-06-26
|
5 |
-
* Time: 11:04 AM
|
6 |
-
*/
|
7 |
-
$args = $this->sc_get_args( $group );
|
8 |
-
$members = new WP_Query( $args );
|
9 |
-
?>
|
10 |
-
<div id="sc_our_team" class="<?php
|
11 |
-
echo $template == '' ? $this->options[ 'template' ] : $template;
|
12 |
-
echo ' sc-col' . $this->options[ 'columns' ];
|
13 |
-
?>">
|
14 |
-
<!--<div class="clear"></div>-->
|
15 |
-
<?php
|
16 |
-
if ( $members->have_posts() ) {
|
17 |
-
while ( $members->have_posts() ) {
|
18 |
-
$members->the_post();
|
19 |
-
?>
|
20 |
-
<div itemscope itemtype="http://schema.org/Person" class="sc_team_member">
|
21 |
-
<div class="sc_team_member_inner">
|
22 |
-
<?php
|
23 |
-
if ( has_post_thumbnail() )
|
24 |
-
echo the_post_thumbnail( 'medium' );
|
25 |
-
else {
|
26 |
-
echo '<img src="' . SC_TEAM_URL . 'inc/img/noprofile.jpg" class="attachment-medium wp-post-image"/>';
|
27 |
-
}
|
28 |
-
?>
|
29 |
-
|
30 |
-
<?php if ( 'yes' == $this->options[ 'name' ] ) : ?>
|
31 |
-
<div itemprop="name" class="sc_team_member_name">
|
32 |
-
<a href="<?php the_permalink() ?>" rel="bookmark" class="<?php echo $this->check_clicker( $single_template ); ?>">
|
33 |
-
<?php the_title() ?>
|
34 |
-
</a>
|
35 |
-
</div>
|
36 |
-
<?php endif; ?>
|
37 |
-
|
38 |
-
<?php if ( 'yes' == $this->options[ 'title' ] && get_post_meta( get_the_ID(), 'team_member_title', true ) ) : ?>
|
39 |
-
<div itemprop="jobtitle" class="sc_team_member_jobtitle">
|
40 |
-
<span><?php echo get_post_meta( get_the_ID(), 'team_member_title', true ); ?></span>
|
41 |
-
</div>
|
42 |
-
<?php endif; ?>
|
43 |
-
|
44 |
-
|
45 |
-
<div class="sc_team_content">
|
46 |
-
<?php the_content(); ?>
|
47 |
-
</div>
|
48 |
-
|
49 |
-
<div class='icons <?php echo 'yes' == $this->options[ 'social' ] ? '' : 'hidden'; ?>'>
|
50 |
-
|
51 |
-
<?php $this->set_social( get_the_ID() ); ?>
|
52 |
-
|
53 |
-
</div>
|
54 |
-
|
55 |
-
<div class="sc_team_member_overlay"></div>
|
56 |
-
|
57 |
-
|
58 |
-
</div>
|
59 |
-
</div>
|
60 |
-
<?php
|
61 |
-
}
|
62 |
-
wp_reset_postdata();
|
63 |
-
} else {
|
64 |
-
echo __( 'There are no team members to display', 'smartcat-team' );
|
65 |
-
}
|
66 |
-
?>
|
67 |
-
<div class="clear"></div>
|
68 |
-
</div>
|
69 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/template/single-team_member.php
DELETED
@@ -1,36 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
get_header();
|
3 |
-
$options = get_option('smartcat_team_options');
|
4 |
-
$plugin = new SmartcatTeamPlugin();
|
5 |
-
?>
|
6 |
-
|
7 |
-
<div class="sc-single-wrapper">
|
8 |
-
|
9 |
-
<?php while (have_posts()) : the_post(); ?>
|
10 |
-
<div class="sc_team_single_member <?php echo $options['single_template']; ?>">
|
11 |
-
|
12 |
-
<div class="sc_single_side" itemscope itemtype="http://schema.org/Person">
|
13 |
-
|
14 |
-
<div class="inner">
|
15 |
-
<?php echo the_post_thumbnail('medium'); ?>
|
16 |
-
<h2 class="name" itemprop="name"><?php echo the_title(); ?></h2>
|
17 |
-
<h3 class="title" itemprop="jobtitle"><?php echo get_post_meta(get_the_ID(), 'team_member_title', true); ?></h3>
|
18 |
-
<ul class="social <?php echo 'yes' == $options['social'] ? '' : 'hidden'; ?>">
|
19 |
-
|
20 |
-
<?php $plugin->set_social(get_the_ID()); ?>
|
21 |
-
|
22 |
-
</ul>
|
23 |
-
</div>
|
24 |
-
</div>
|
25 |
-
|
26 |
-
<div class="sc_single_main">
|
27 |
-
|
28 |
-
<?php echo the_content(); ?>
|
29 |
-
|
30 |
-
</div>
|
31 |
-
|
32 |
-
</div>
|
33 |
-
|
34 |
-
<?php endwhile; ?>
|
35 |
-
</div>
|
36 |
-
<?php get_footer(); ?>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/template/widget.php
DELETED
@@ -1,63 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/*
|
4 |
-
* Short description
|
5 |
-
* @author bilal hassan <info@smartcatdesign.net>
|
6 |
-
*
|
7 |
-
*/
|
8 |
-
$args = array(
|
9 |
-
'post_type' => 'team_member',
|
10 |
-
'meta_key' => 'sc_member_order',
|
11 |
-
'orderby' => 'meta_value',
|
12 |
-
'order' => 'ASC'
|
13 |
-
);
|
14 |
-
$team = new WP_Query($args);
|
15 |
-
?>
|
16 |
-
<div id="sc_our_team" class="widget">
|
17 |
-
<?php
|
18 |
-
if ($team->have_posts()) {
|
19 |
-
while ($team->have_posts()) {
|
20 |
-
$team->the_post();
|
21 |
-
// echo wp_get_attachment_url( get_post_thumbnail_id(get_the_ID() ));
|
22 |
-
?>
|
23 |
-
<div itemscope itemtype="http://schema.org/Person" class="sc_sidebar_team_member">
|
24 |
-
<a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title_attribute(); ?>">
|
25 |
-
<?php if (has_post_thumbnail())
|
26 |
-
echo the_post_thumbnail('medium');
|
27 |
-
else
|
28 |
-
echo '<img src="' . SC_TEAM_URL .'inc/img/noprofile.jpg" class="attachment-medium wp-post-image"/>';?>
|
29 |
-
</a>
|
30 |
-
<div class="sc_team_member_overlay">
|
31 |
-
<div itemprop="name" class="sc_team_member_name">
|
32 |
-
<?php the_title() ?>
|
33 |
-
</div>
|
34 |
-
<div itemprop="jobtitle" class="sc_team_member_jobtitle">
|
35 |
-
<?php echo get_post_meta(get_the_ID(), 'team_member_title', true); ?>
|
36 |
-
</div>
|
37 |
-
<div class='icons'>
|
38 |
-
|
39 |
-
<?php // the_content(); ?>
|
40 |
-
<?php
|
41 |
-
|
42 |
-
$facebook = get_post_meta(get_the_ID(), 'team_member_facebook', true);
|
43 |
-
$twitter = get_post_meta(get_the_ID(), 'team_member_twitter', true);
|
44 |
-
$linkedin = get_post_meta(get_the_ID(), 'team_member_linkedin', true);
|
45 |
-
$gplus = get_post_meta(get_the_ID(), 'team_member_gplus', true);
|
46 |
-
$email = get_post_meta(get_the_ID(), 'team_member_email', true);
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
?>
|
52 |
-
|
53 |
-
</div>
|
54 |
-
</div>
|
55 |
-
</div>
|
56 |
-
<?php
|
57 |
-
}
|
58 |
-
wp_reset_postdata();
|
59 |
-
} else {
|
60 |
-
echo 'There are no team members to display';
|
61 |
-
}
|
62 |
-
?>
|
63 |
-
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
includes/TeamMainWidget.php
ADDED
@@ -0,0 +1,245 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ots;
|
4 |
+
|
5 |
+
|
6 |
+
class TeamMainWidget extends \WP_Widget {
|
7 |
+
|
8 |
+
public function __construct() {
|
9 |
+
|
10 |
+
$options = array(
|
11 |
+
'description' => __( 'Use this widget to display the Our Team anywhere on the site.', 'ots' )
|
12 |
+
);
|
13 |
+
|
14 |
+
parent::__construct( 'ots_main_widget', __( 'Our Team Widget', 'ots' ), $options );
|
15 |
+
|
16 |
+
}
|
17 |
+
|
18 |
+
private function single_templates() {
|
19 |
+
|
20 |
+
$default = array(
|
21 |
+
'disable' => __( 'Disabled', 'ots' )
|
22 |
+
);
|
23 |
+
|
24 |
+
return apply_filters( 'ots_inline_templates', $default );
|
25 |
+
|
26 |
+
}
|
27 |
+
|
28 |
+
private function parse_args( $instance ) {
|
29 |
+
|
30 |
+
$defaults = array(
|
31 |
+
'id' => '',
|
32 |
+
'title' => __( 'Meet Our Team', 'ots' ),
|
33 |
+
'group' => '',
|
34 |
+
'limit' => 'all',
|
35 |
+
'template' => Defaults::TEMPLATE,
|
36 |
+
'single_template' => Defaults::SINGLE_TEMPLATE
|
37 |
+
);
|
38 |
+
|
39 |
+
return wp_parse_args( $instance, $defaults );
|
40 |
+
|
41 |
+
}
|
42 |
+
|
43 |
+
public function widget( $args, $instance ) {
|
44 |
+
|
45 |
+
enqueue_team_view_scripts();
|
46 |
+
|
47 |
+
$instance = $this->parse_args( $instance );
|
48 |
+
|
49 |
+
echo $args[ 'before_widget' ];
|
50 |
+
echo $args[ 'before_title' ] . esc_html( $instance['title'] ) . $args[ 'after_title' ];
|
51 |
+
|
52 |
+
echo do_team_view_output( $instance );
|
53 |
+
|
54 |
+
}
|
55 |
+
|
56 |
+
public function update( $new_instance, $old_instance ) {
|
57 |
+
|
58 |
+
$instance = $old_instance;
|
59 |
+
|
60 |
+
$id = $new_instance['id'];
|
61 |
+
$title = $new_instance['title'];
|
62 |
+
$group = $new_instance['group'];
|
63 |
+
$limit = $new_instance['limit'];
|
64 |
+
$template = $new_instance['template'];
|
65 |
+
$single = $new_instance['single_template'];
|
66 |
+
|
67 |
+
|
68 |
+
$groups = get_groups();
|
69 |
+
|
70 |
+
$instance['id'] = sanitize_title( $id );
|
71 |
+
$instance['title'] = strip_tags( $title );
|
72 |
+
$instance['group'] = array_key_exists( $group, $groups ) ? $group : '';
|
73 |
+
|
74 |
+
$group_templates = get_templates();
|
75 |
+
$single_templates = $this->single_templates();
|
76 |
+
|
77 |
+
$instance['template'] = array_key_exists( $template, $group_templates ) ? $template : Defaults::TEMPLATE;
|
78 |
+
$instance['single_template'] = array_key_exists( $single, $single_templates ) ? $single : Defaults::SINGLE_TEMPLATE;
|
79 |
+
|
80 |
+
if( strtolower( $limit ) === 'all' || $limit > 0 ) {
|
81 |
+
$instance['limit'] = $limit;
|
82 |
+
} else {
|
83 |
+
$instance['limit'] = 'all';
|
84 |
+
}
|
85 |
+
|
86 |
+
return $instance;
|
87 |
+
|
88 |
+
}
|
89 |
+
|
90 |
+
public function form( $instance ) {
|
91 |
+
|
92 |
+
$instance = $this->parse_args( $instance ); ?>
|
93 |
+
|
94 |
+
<p>
|
95 |
+
|
96 |
+
<label for="<?php esc_attr_e( $this->get_field_id( 'title' ) ); ?>">
|
97 |
+
<?php _e( 'Title', 'ots' ); ?>
|
98 |
+
</label>
|
99 |
+
|
100 |
+
<input class="widefat"
|
101 |
+
id="<?php esc_attr_e( $this->get_field_id( 'title' ) ); ?>"
|
102 |
+
name="<?php esc_attr_e( $this->get_field_name( 'title' ) ); ?>"
|
103 |
+
value="<?php esc_attr_e( $instance['title'] ); ?>" />
|
104 |
+
|
105 |
+
</p>
|
106 |
+
<p>
|
107 |
+
|
108 |
+
<label for="<?php esc_attr_e( $this->get_field_id( 'id' ) ); ?>">
|
109 |
+
<?php _e( 'ID', 'ots' ); ?>
|
110 |
+
</label>
|
111 |
+
|
112 |
+
<input class="widefat"
|
113 |
+
id="<?php esc_attr_e( $this->get_field_id( 'id' ) ); ?>"
|
114 |
+
name="<?php esc_attr_e( $this->get_field_name( 'id' ) ); ?>"
|
115 |
+
value="<?php esc_attr_e( $instance['id'] ); ?>" />
|
116 |
+
|
117 |
+
</p>
|
118 |
+
<p>
|
119 |
+
|
120 |
+
<label for="<?php esc_attr_e( $this->get_field_id( 'template' ) ); ?>">
|
121 |
+
<?php _e( 'Template', 'ots' ); ?>
|
122 |
+
</label>
|
123 |
+
|
124 |
+
<?php
|
125 |
+
|
126 |
+
$args = array(
|
127 |
+
'name' => $this->get_field_name( 'template' ),
|
128 |
+
'selected' => $instance['template'],
|
129 |
+
'options' => array( '' => __( 'Select a template', 'ots' ) ) + get_templates(),
|
130 |
+
'attrs' => array(
|
131 |
+
'class' => 'widefat',
|
132 |
+
'id' => $this->get_field_id( 'template' )
|
133 |
+
)
|
134 |
+
);
|
135 |
+
|
136 |
+
settings_select_box( $args );
|
137 |
+
|
138 |
+
?>
|
139 |
+
|
140 |
+
</p>
|
141 |
+
<p>
|
142 |
+
|
143 |
+
<?php $templates = $this->single_templates(); ?>
|
144 |
+
|
145 |
+
<?php if ( count( $templates ) == 1 ) : ?>
|
146 |
+
|
147 |
+
<input type="hidden"
|
148 |
+
value="disable"
|
149 |
+
name="<?php esc_attr_e( $this->get_field_name( 'single_template' ) ); ?>"/>
|
150 |
+
|
151 |
+
<label>
|
152 |
+
|
153 |
+
<input type="checkbox"
|
154 |
+
value="standard"
|
155 |
+
name="<?php esc_attr_e( $this->get_field_name( 'single_template' ) ); ?>"
|
156 |
+
|
157 |
+
<?php checked( 'disable', $instance['single_template'] ); ?>/>
|
158 |
+
|
159 |
+
<?php _e( 'Enable linking to single members', 'ots' ); ?>
|
160 |
+
|
161 |
+
</label>
|
162 |
+
|
163 |
+
<?php else : ?>
|
164 |
+
|
165 |
+
|
166 |
+
<label for="<?php esc_attr_e( $this->get_field_id( 'single_template' ) ); ?>">
|
167 |
+
<?php _e( 'Single Template', 'ots' ); ?>
|
168 |
+
</label>
|
169 |
+
|
170 |
+
<?php
|
171 |
+
|
172 |
+
$args = array(
|
173 |
+
'name' => $this->get_field_name( 'single_template' ),
|
174 |
+
'selected' => $instance['single_template'],
|
175 |
+
'options' => array( '' => __( 'Single Member', 'ots' ) ) + $templates,
|
176 |
+
'attrs' => array(
|
177 |
+
'class' => 'widefat',
|
178 |
+
'id' => $this->get_field_id( 'single_template' )
|
179 |
+
)
|
180 |
+
);
|
181 |
+
|
182 |
+
settings_select_box( $args );
|
183 |
+
|
184 |
+
?>
|
185 |
+
|
186 |
+
<?php endif; ?>
|
187 |
+
|
188 |
+
</p>
|
189 |
+
<p>
|
190 |
+
|
191 |
+
<label for="<?php esc_attr_e( $this->get_field_id( 'group' ) ); ?>">
|
192 |
+
<?php _e( 'Group', 'ots' ); ?>
|
193 |
+
</label>
|
194 |
+
|
195 |
+
<?php
|
196 |
+
|
197 |
+
$args = array(
|
198 |
+
'name' => $this->get_field_name( 'group' ),
|
199 |
+
'selected' => $instance['group'],
|
200 |
+
'options' => array( '' => __( 'All Groups', 'ots' ) ) + get_groups(),
|
201 |
+
'attrs' => array(
|
202 |
+
'class' => 'widefat',
|
203 |
+
'id' => $this->get_field_id( 'group' )
|
204 |
+
)
|
205 |
+
);
|
206 |
+
|
207 |
+
settings_select_box( $args );
|
208 |
+
|
209 |
+
?>
|
210 |
+
|
211 |
+
</p>
|
212 |
+
<div class="ots-widget-limit">
|
213 |
+
<p>
|
214 |
+
<label for="<?php esc_attr_e( $this->get_field_id( 'limit' ) ); ?>"
|
215 |
+
class="sc_our_team_widget_limit_label">
|
216 |
+
<?php _e( 'Limit to Show', 'ots' ); ?>
|
217 |
+
</label>
|
218 |
+
|
219 |
+
<input class="widefat ots-limit-number"
|
220 |
+
type="number"
|
221 |
+
id="<?php esc_attr_e( $this->get_field_id( 'limit' ) ); ?>"
|
222 |
+
name="<?php esc_attr_e( $this->get_field_name( 'limit' ) ); ?>"
|
223 |
+
value="<?php echo $instance['limit'] !== 'all' ? esc_attr_e( $instance['limit'] ) : ''; ?>"
|
224 |
+
|
225 |
+
<?php disabled( 'all', $instance['limit'] ); ?> />
|
226 |
+
|
227 |
+
</p>
|
228 |
+
<p>
|
229 |
+
<?php _e( '- or -', 'ots' ); ?>
|
230 |
+
|
231 |
+
<label>
|
232 |
+
<input type="checkbox"
|
233 |
+
class="ots-widget-display-all"
|
234 |
+
name="<?php esc_attr_e( $this->get_field_name( 'limit' ) ); ?>"
|
235 |
+
|
236 |
+
<?php checked( 'all', $instance['limit'] ); ?>
|
237 |
+
<?php disabled( true, is_numeric( $instance['limit'] ) ); ?>/><?php _e( 'Display All', 'ots' ); ?>
|
238 |
+
|
239 |
+
</label>
|
240 |
+
</p>
|
241 |
+
</div>
|
242 |
+
|
243 |
+
<?php }
|
244 |
+
|
245 |
+
}
|
includes/TeamMember.php
ADDED
@@ -0,0 +1,62 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
|
4 |
+
namespace ots;
|
5 |
+
|
6 |
+
/**
|
7 |
+
* Helper class for interacting with team members.
|
8 |
+
*
|
9 |
+
* @package ots
|
10 |
+
* @since 4.0.0
|
11 |
+
*/
|
12 |
+
class TeamMember {
|
13 |
+
|
14 |
+
protected $post;
|
15 |
+
|
16 |
+
protected static $prefix = 'team_member_';
|
17 |
+
|
18 |
+
|
19 |
+
public function __construct( \WP_Post $member ) {
|
20 |
+
$this->post = $member;
|
21 |
+
}
|
22 |
+
|
23 |
+
public function __get( $key ) {
|
24 |
+
return $this->get_metadata( $key );
|
25 |
+
}
|
26 |
+
|
27 |
+
public function __set( $key, $value ) {
|
28 |
+
$this->set_metadata( $key, $value );
|
29 |
+
}
|
30 |
+
|
31 |
+
public function __isset( $key ) {
|
32 |
+
return !empty( get_post_meta( $this->post->ID, $this->prefix( $key ) ) );
|
33 |
+
}
|
34 |
+
|
35 |
+
public function __unset( $key ) {
|
36 |
+
return delete_post_meta( $this->post->ID, $this->prefix( $key ) );
|
37 |
+
}
|
38 |
+
|
39 |
+
public function get_metadata( $key, $default = '', $single = true ) {
|
40 |
+
$meta = get_post_meta( $this->post->ID, $this->prefix( $key ), $single );
|
41 |
+
|
42 |
+
return !empty( $meta ) ? $meta : $default;
|
43 |
+
|
44 |
+
}
|
45 |
+
|
46 |
+
public function set_metadata( $key, $val = '', $unique = false ) {
|
47 |
+
|
48 |
+
$key = $this->prefix( $key );
|
49 |
+
|
50 |
+
if( !metadata_exists( 'post', $this->post->ID, $key ) ) {
|
51 |
+
return add_post_meta( $this->post->ID, $key, $val, $unique );
|
52 |
+
} else {
|
53 |
+
return update_post_meta( $this->post->ID, $key, $val );
|
54 |
+
}
|
55 |
+
|
56 |
+
}
|
57 |
+
|
58 |
+
protected function prefix( $key ) {
|
59 |
+
return self::$prefix . $key;
|
60 |
+
}
|
61 |
+
|
62 |
+
}
|
includes/TeamSidebarWidget.php
ADDED
@@ -0,0 +1,226 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ots;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* Widget to display a list of team members.
|
7 |
+
*
|
8 |
+
* @package ots
|
9 |
+
* @since 4.0.0
|
10 |
+
*/
|
11 |
+
/**
|
12 |
+
* Class TeamWidget
|
13 |
+
* @package ots
|
14 |
+
*/
|
15 |
+
class TeamSidebarWidget extends \WP_Widget {
|
16 |
+
|
17 |
+
|
18 |
+
public function __construct() {
|
19 |
+
|
20 |
+
$options = array(
|
21 |
+
'description' => __( 'Use this widget to display the Our Team anywhere on the site.', 'ots' )
|
22 |
+
);
|
23 |
+
|
24 |
+
parent::__construct( 'smatcat_team_widget', __( 'Our Team Sidebar Widget', 'ots' ), $options );
|
25 |
+
|
26 |
+
}
|
27 |
+
|
28 |
+
private function parse_args( $instance ) {
|
29 |
+
|
30 |
+
$defaults = array(
|
31 |
+
'sc_our_team_widget_title' => __( 'Meet Our Team', 'ots' ),
|
32 |
+
'sc_our_team_widget_limit' => 'ALL',
|
33 |
+
'sc_our_team_widget_group' => ''
|
34 |
+
);
|
35 |
+
|
36 |
+
return wp_parse_args( $instance, $defaults );
|
37 |
+
|
38 |
+
}
|
39 |
+
|
40 |
+
/**
|
41 |
+
* Render the widget.
|
42 |
+
*
|
43 |
+
* @param array $args
|
44 |
+
* @param array $instance
|
45 |
+
* @since 4.0.0
|
46 |
+
*/
|
47 |
+
public function widget( $args, $instance ) {
|
48 |
+
|
49 |
+
$instance = $this->parse_args( $instance );
|
50 |
+
|
51 |
+
echo $args[ 'before_widget' ];
|
52 |
+
echo $args[ 'before_title' ] . esc_html( $instance['sc_our_team_widget_title'] ) . $args[ 'after_title' ];
|
53 |
+
|
54 |
+
$limit = $instance['sc_our_team_widget_limit'];
|
55 |
+
$group = $instance['sc_our_team_widget_group'] !== 'ignore-group' ? $instance['sc_our_team_widget_group'] : '';
|
56 |
+
|
57 |
+
$members = get_members_in_order( $limit, $group );
|
58 |
+
|
59 |
+
?>
|
60 |
+
|
61 |
+
<?php if ( $members->have_posts() ) : ?>
|
62 |
+
|
63 |
+
<div id="sc_our_team" class="widget">
|
64 |
+
|
65 |
+
<?php while ( $members->have_posts() ) : $members->the_post(); ?>
|
66 |
+
|
67 |
+
<div itemscope itemtype="http://schema.org/Person" class="sc_sidebar_team_member">
|
68 |
+
|
69 |
+
<?php if( get_option( Options::SINGLE_TEMPLATE ) !== 'disabled' ) : ?>
|
70 |
+
|
71 |
+
<a href="<?php the_permalink(); ?>"
|
72 |
+
title="<?php the_title_attribute(); ?>"
|
73 |
+
rel="bookmark"><?php member_avatar(); ?></a>
|
74 |
+
|
75 |
+
<?php else : ?>
|
76 |
+
|
77 |
+
<?php member_avatar(); ?>
|
78 |
+
|
79 |
+
<?php endif; ?>
|
80 |
+
|
81 |
+
<div class="sc_team_member_overlay">
|
82 |
+
|
83 |
+
<div itemprop="name" class="sc_team_member_name"><?php the_title() ?></div>
|
84 |
+
<div itemprop="jobtitle" class="sc_team_member_jobtitle">
|
85 |
+
<?php esc_html_e( get_post_meta( get_the_ID(), 'team_member_title', true ) ); ?>
|
86 |
+
</div>
|
87 |
+
|
88 |
+
</div>
|
89 |
+
|
90 |
+
</div>
|
91 |
+
|
92 |
+
<?php wp_reset_postdata(); ?>
|
93 |
+
|
94 |
+
<?php endwhile; ?>
|
95 |
+
|
96 |
+
</div>
|
97 |
+
|
98 |
+
<?php endif; ?>
|
99 |
+
|
100 |
+
<?php }
|
101 |
+
|
102 |
+
|
103 |
+
/**
|
104 |
+
* Save updated widget settings.
|
105 |
+
*
|
106 |
+
* @param array $new_instance
|
107 |
+
* @param array $old_instance
|
108 |
+
* @return array
|
109 |
+
* @since 4.0.0
|
110 |
+
*/
|
111 |
+
public function update( $new_instance, $old_instance ) {
|
112 |
+
|
113 |
+
$instance = $old_instance;
|
114 |
+
|
115 |
+
$title = $new_instance['sc_our_team_widget_title'];
|
116 |
+
$group = $new_instance['sc_our_team_widget_group'];
|
117 |
+
$limit = $new_instance['sc_our_team_widget_limit'];
|
118 |
+
|
119 |
+
$instance['sc_our_team_widget_title'] = strip_tags( $title );
|
120 |
+
$instance['sc_our_team_widget_group'] = strip_tags( $group );
|
121 |
+
|
122 |
+
if( strtolower( $limit ) === 'all' || $limit > 0 ) {
|
123 |
+
$instance['sc_our_team_widget_limit'] = $limit;
|
124 |
+
} else {
|
125 |
+
$instance['sc_our_team_widget_limit'] = 'all';
|
126 |
+
}
|
127 |
+
|
128 |
+
return $instance;
|
129 |
+
|
130 |
+
}
|
131 |
+
|
132 |
+
/**
|
133 |
+
* Output the widget settings form.
|
134 |
+
*
|
135 |
+
* @param array $instance
|
136 |
+
* @since 4.0.0
|
137 |
+
* @return void
|
138 |
+
*/
|
139 |
+
public function form( $instance ) {
|
140 |
+
|
141 |
+
$terms = get_terms( array(
|
142 |
+
'taxonomy' => 'team_member_position',
|
143 |
+
'hide_empty' => false
|
144 |
+
) );
|
145 |
+
|
146 |
+
$instance = $this->parse_args( $instance );
|
147 |
+
|
148 |
+
$title = $instance['sc_our_team_widget_title'];
|
149 |
+
$group = $instance['sc_our_team_widget_group'];
|
150 |
+
$limit = $instance['sc_our_team_widget_limit'];
|
151 |
+
|
152 |
+
?>
|
153 |
+
|
154 |
+
<p>
|
155 |
+
|
156 |
+
<label for="<?php esc_attr_e( $this->get_field_id( 'sc_our_team_widget_title' ) ); ?>"
|
157 |
+
class="sc_our_team_widget_title_label">
|
158 |
+
<?php _e( 'Title: ', 'ots' ); ?>
|
159 |
+
</label>
|
160 |
+
|
161 |
+
<input class="widefat"
|
162 |
+
id="<?php esc_attr_e( $this->get_field_id( 'sc_our_team_widget_title' ) ); ?>"
|
163 |
+
name="<?php esc_attr_e( $this->get_field_name( 'sc_our_team_widget_title' ) ); ?>"
|
164 |
+
value="<?php esc_attr_e( $title ); ?>" />
|
165 |
+
|
166 |
+
</p>
|
167 |
+
<p>
|
168 |
+
|
169 |
+
<label for="<?php esc_attr_e( $this->get_field_id( 'sc_our_team_widget_group' ) ); ?>"
|
170 |
+
class="sc_our_team_widget_group_label">
|
171 |
+
<?php _e( 'Group', 'ots' ); ?>
|
172 |
+
</label>
|
173 |
+
|
174 |
+
<select id="<?php esc_attr_e( $this->get_field_id( 'sc_our_team_widget_group' ) ); ?>"
|
175 |
+
name="<?php esc_attr_e( $this->get_field_name( 'sc_our_team_widget_group' ) ); ?>"
|
176 |
+
class="widefat">
|
177 |
+
|
178 |
+
<option value="ignore-group"><?php _e( 'All Groups', 'ots' ); ?></option>
|
179 |
+
|
180 |
+
<?php foreach( $terms as $term ) : ?>
|
181 |
+
|
182 |
+
<option value="<?php esc_attr_e( $term->term_id ); ?>" <?php selected( $group, $term->term_id ); ?>>
|
183 |
+
|
184 |
+
<?php esc_html_e( $term->name ); ?>
|
185 |
+
|
186 |
+
</option>
|
187 |
+
|
188 |
+
<?php endforeach; ?>
|
189 |
+
|
190 |
+
</select>
|
191 |
+
|
192 |
+
</p>
|
193 |
+
<div class="ots-widget-limit">
|
194 |
+
<p>
|
195 |
+
<label for="<?php esc_attr_e( $this->get_field_id( 'sc_our_team_widget_limit' ) ); ?>"
|
196 |
+
class="sc_our_team_widget_limit_label">
|
197 |
+
<?php _e( 'Limit to Show', 'ots' ); ?>
|
198 |
+
</label>
|
199 |
+
|
200 |
+
<input class="widefat ots-limit-number"
|
201 |
+
type="number"
|
202 |
+
id="<?php esc_attr_e( $this->get_field_id( 'sc_our_team_widget_limit' ) ); ?>"
|
203 |
+
name="<?php esc_attr_e( $this->get_field_name( 'sc_our_team_widget_limit' ) ); ?>"
|
204 |
+
value="<?php echo $limit !== 'all' ? esc_attr_e( $limit ) : ''; ?>"
|
205 |
+
|
206 |
+
<?php disabled( 'all', $limit ); ?> />
|
207 |
+
|
208 |
+
</p>
|
209 |
+
<p>
|
210 |
+
<?php _e( '- or -', 'ots' ); ?>
|
211 |
+
|
212 |
+
<label>
|
213 |
+
<input type="checkbox"
|
214 |
+
class="ots-widget-display-all"
|
215 |
+
name="<?php esc_attr_e( $this->get_field_name( 'sc_our_team_widget_limit' ) ); ?>"
|
216 |
+
|
217 |
+
<?php checked( 'all', $limit ); ?>
|
218 |
+
<?php disabled( true, is_numeric( $limit ) ); ?>/><?php _e( 'Display All', 'ots' ); ?>
|
219 |
+
|
220 |
+
</label>
|
221 |
+
</p>
|
222 |
+
</div>
|
223 |
+
|
224 |
+
<?php }
|
225 |
+
|
226 |
+
}
|
includes/add-ons.php
ADDED
@@ -0,0 +1,99 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ots;
|
4 |
+
|
5 |
+
|
6 |
+
/**
|
7 |
+
* Registers the add-ons submenu page.
|
8 |
+
*
|
9 |
+
* @since 4.0.0
|
10 |
+
*/
|
11 |
+
function add_addons_pages() {
|
12 |
+
|
13 |
+
add_submenu_page( 'edit.php?post_type=team_member', __( 'Add-ons', 'ots' ), __( 'Add-ons', 'ots' ), 'manage_options', 'ots-add-ons', 'ots\do_addons_page' );
|
14 |
+
|
15 |
+
}
|
16 |
+
|
17 |
+
add_action( 'admin_menu', 'ots\add_addons_pages' );
|
18 |
+
|
19 |
+
|
20 |
+
/**
|
21 |
+
* Renders the add-ons admin page.
|
22 |
+
*
|
23 |
+
* @since 4.0.0
|
24 |
+
*/
|
25 |
+
function do_addons_page() { ?>
|
26 |
+
|
27 |
+
<div class="wrap ots-admin-page ots-add-ons">
|
28 |
+
|
29 |
+
<div class="ots-admin-header">
|
30 |
+
|
31 |
+
<div class="title-bar">
|
32 |
+
|
33 |
+
<div class="inner">
|
34 |
+
|
35 |
+
<div class="branding">
|
36 |
+
<img src="<?php echo esc_url( asset( 'images/branding/smartcat-medium.png' ) ); ?>" />
|
37 |
+
</div>
|
38 |
+
|
39 |
+
<p class="page-title"><?php _e( 'Our Team Showcase', 'ots' ); ?></p>
|
40 |
+
|
41 |
+
</div>
|
42 |
+
|
43 |
+
<?php if( apply_filters( 'ots_enable_pro_preview', true ) ) : ?>
|
44 |
+
|
45 |
+
<div class="inner">
|
46 |
+
|
47 |
+
<a href="http://wordpressteamplugin.com/templates/"
|
48 |
+
class="cta cta-secondary"
|
49 |
+
target="_blank">
|
50 |
+
<?php _e( 'View Demo', 'ots' ); ?>
|
51 |
+
</a>
|
52 |
+
|
53 |
+
<a href="https://smartcatdesign.net/downloads/our-team-showcase/"
|
54 |
+
class="cta cta-primary"
|
55 |
+
target="_blank">
|
56 |
+
<?php _e( 'Go Pro', 'ots' ); ?>
|
57 |
+
</a>
|
58 |
+
|
59 |
+
</div>
|
60 |
+
|
61 |
+
<?php endif; ?>
|
62 |
+
|
63 |
+
</div>
|
64 |
+
|
65 |
+
<div class="clear"></div>
|
66 |
+
|
67 |
+
</div>
|
68 |
+
|
69 |
+
<h2 style="display: none"></h2>
|
70 |
+
|
71 |
+
<div class="inner">
|
72 |
+
|
73 |
+
<div class="ots-add-on">
|
74 |
+
<img src="<?php echo esc_url( asset( 'images/add-ons/ots-pro.jpg' ) ); ?>" />
|
75 |
+
<h2><?php _e( 'Our Team Showcase Pro', 'ots' ); ?></h2>
|
76 |
+
<p><?php _e( 'Feature-loaded Pro version of Our Team Showcase adds additional professional templates to your Team Showcase, including a Staff Directory, Honeycomb Layout, Carousel, Stacked Layout, as well as 3 impressive Single Member views: Slide-in Side Panel, Popup V-Card and a Custom Page Single View. It also adds new features such as Team Member Skills, Tags/hobbies, Favorite Content and more!', 'ots' ); ?></p>
|
77 |
+
<div class="cta">
|
78 |
+
<a target="_blank" href="http://wordpressteamplugin.com/templates/" class="button button-default"><?php _e( 'View Demo', 'ots' ); ?></a>
|
79 |
+
<a target="_blank" href="https://smartcatdesign.net/downloads/our-team-showcase/" class="button button-primary">Go Pro</a>
|
80 |
+
</div>
|
81 |
+
</div>
|
82 |
+
|
83 |
+
<div class="ots-add-on">
|
84 |
+
<img src="<?php echo esc_url( asset( 'images/add-ons/member-portal.jpg' ) ); ?>" />
|
85 |
+
<h2><?php _e( 'Member Login Portal', 'ots' ); ?></h2>
|
86 |
+
<p><?php _e( 'Restrict pages & posts to Team Members. Login/Logout/Member Profiles. Creates a private portal on your site for your team members to login, view restricted content, edit their own profile details & profile picture, while giving the site admin complete control, user management, content restriction by group/department and more!', 'ots' ); ?></p>
|
87 |
+
<div class="cta">
|
88 |
+
<a target="_blank" href="http://wordpressteamplugin.com/member-portal/login/" class="button button-default"><?php _e( 'View Demo', 'ots' ); ?></a>
|
89 |
+
<a target="_blank" href="https://smartcatdesign.net/downloads/member-login-portal/" class="button button-primary"><?php _e( 'Get Portal', 'ots' ); ?></a>
|
90 |
+
</div>
|
91 |
+
</div>
|
92 |
+
|
93 |
+
<div class="clear"></div>
|
94 |
+
|
95 |
+
</div>
|
96 |
+
|
97 |
+
</div>
|
98 |
+
|
99 |
+
<?php }
|
includes/admin-settings.php
ADDED
@@ -0,0 +1,756 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ots;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* Enqueue scripts used in the plugin settings page.
|
7 |
+
*
|
8 |
+
* @param $hook
|
9 |
+
* @since 4.0.0
|
10 |
+
*/
|
11 |
+
function enqueue_settings_scripts( $hook ) {
|
12 |
+
|
13 |
+
wp_enqueue_style( 'ots-admin-css', asset( 'admin/css/admin.css' ), null, VERSION );
|
14 |
+
|
15 |
+
if( strpos( $hook, 'ots' ) !== false ) {
|
16 |
+
|
17 |
+
wp_enqueue_script( 'ots-settings-js', asset( 'admin/js/settings.js' ), array( 'jquery', 'wp-color-picker' ), VERSION );
|
18 |
+
wp_enqueue_script( 'ots-reorder-js', asset( 'admin/js/reorder.js' ), array( 'jquery', 'jquery-ui-sortable' ), VERSION );
|
19 |
+
|
20 |
+
wp_enqueue_style( 'ots-settings-fonts', asset( 'fonts/fonts.css' ), null, VERSION );
|
21 |
+
wp_enqueue_style( 'ots-settings-css', asset( 'admin/css/settings.css' ), null, VERSION );
|
22 |
+
wp_enqueue_style( 'wp-color-picker' );
|
23 |
+
|
24 |
+
}
|
25 |
+
|
26 |
+
}
|
27 |
+
|
28 |
+
add_action( 'admin_enqueue_scripts', 'ots\enqueue_settings_scripts' );
|
29 |
+
|
30 |
+
|
31 |
+
/**
|
32 |
+
* Register admin menu pages.
|
33 |
+
*
|
34 |
+
* @since 4.0.0
|
35 |
+
*/
|
36 |
+
function add_menu_pages() {
|
37 |
+
|
38 |
+
add_submenu_page( 'edit.php?post_type=team_member', __( 'Re-Order Members', 'ots' ), __( 'Re-Order Members', 'ots' ), 'manage_options', 'ots-reorder-members', 'ots\do_member_reorder_page' );
|
39 |
+
add_submenu_page( 'edit.php?post_type=team_member', __( 'Our Team Settings', 'ots' ), __( 'Settings', 'ots' ), 'manage_options', 'ots-settings', 'ots\do_settings_page' );
|
40 |
+
|
41 |
+
}
|
42 |
+
|
43 |
+
add_action( 'admin_menu', 'ots\add_menu_pages' );
|
44 |
+
|
45 |
+
|
46 |
+
/**
|
47 |
+
* Register settings with the settings API.
|
48 |
+
*
|
49 |
+
* @since 4.0.0
|
50 |
+
*/
|
51 |
+
function register_settings() {
|
52 |
+
|
53 |
+
register_setting( 'ots-team-view', Options::TEMPLATE, array(
|
54 |
+
'type' => 'string',
|
55 |
+
'default' => Defaults::TEMPLATE,
|
56 |
+
'sanitize_callback' => 'ots\sanitize_template'
|
57 |
+
) );
|
58 |
+
|
59 |
+
register_setting( 'ots-team-view', Options::GRID_COLUMNS, array(
|
60 |
+
'type' => 'integer',
|
61 |
+
'default' => Defaults::GRID_COLUMNS,
|
62 |
+
'sanitize_callback' => 'intval'
|
63 |
+
) );
|
64 |
+
|
65 |
+
register_setting( 'ots-team-view', Options::MARGIN, array(
|
66 |
+
'type' => 'integer',
|
67 |
+
'default' => Defaults::MARGIN,
|
68 |
+
'sanitize_callback' => 'intval'
|
69 |
+
) );
|
70 |
+
|
71 |
+
register_setting( 'ots-team-view', Options::SHOW_SOCIAL, array(
|
72 |
+
'type' => 'string',
|
73 |
+
'default' => Defaults::SHOW_SOCIAL,
|
74 |
+
'sanitize_callback' => 'ots\sanitize_checkbox'
|
75 |
+
) );
|
76 |
+
|
77 |
+
register_setting( 'ots-team-view', Options::SOCIAL_LINK_ACTION, array(
|
78 |
+
'type' => 'string',
|
79 |
+
'default' => Defaults::SOCIAL_LINK_ACTION,
|
80 |
+
'sanitize_callback' => 'ots\sanitize_checkbox'
|
81 |
+
) );
|
82 |
+
|
83 |
+
register_setting( 'ots-team-view', Options::DISPLAY_NAME, array(
|
84 |
+
'type' => 'string',
|
85 |
+
'default' => Defaults::DISPLAY_NAME,
|
86 |
+
'sanitize_callback' => 'ots\sanitize_checkbox'
|
87 |
+
) );
|
88 |
+
|
89 |
+
register_setting( 'ots-team-view', Options::DISPLAY_TITLE, array(
|
90 |
+
'type' => 'string',
|
91 |
+
'default' => Defaults::DISPLAY_TITLE,
|
92 |
+
'sanitize_callback' => 'ots\sanitize_checkbox'
|
93 |
+
) );
|
94 |
+
|
95 |
+
register_setting( 'ots-team-view', Options::DISPLAY_LIMIT, array(
|
96 |
+
'default' => Defaults::DISPLAY_LIMIT,
|
97 |
+
'sanitize_callback' => 'ots\sanitize_display_limit'
|
98 |
+
) );
|
99 |
+
|
100 |
+
register_setting( 'ots-team-view', Options::MAIN_COLOR, array(
|
101 |
+
'type' => 'string',
|
102 |
+
'default' => Defaults::MAIN_COLOR,
|
103 |
+
'sanitize_callback' => 'sanitize_hex_color'
|
104 |
+
) );
|
105 |
+
|
106 |
+
register_setting( 'ots-single-member-view', Options::SINGLE_TEMPLATE, array(
|
107 |
+
'type' => 'string',
|
108 |
+
'default' => Defaults::SINGLE_TEMPLATE,
|
109 |
+
'sanitize_callback' => 'ots\sanitize_single_template'
|
110 |
+
) );
|
111 |
+
|
112 |
+
register_setting( 'ots-single-member-view', Options::SHOW_SINGLE_SOCIAL, array(
|
113 |
+
'type' => 'string',
|
114 |
+
'default' => Defaults::SHOW_SINGLE_SOCIAL,
|
115 |
+
'sanitize_callback' => 'ots\sanitize_checkbox'
|
116 |
+
) );
|
117 |
+
|
118 |
+
register_setting( 'ots-single-member-view', Options::REWRITE_SLUG, array(
|
119 |
+
'type' => 'string',
|
120 |
+
'default' => Defaults::REWRITE_SLUG,
|
121 |
+
'sanitize_callback' => 'sanitize_title'
|
122 |
+
) );
|
123 |
+
|
124 |
+
register_setting( 'ots-advanced', Options::NUKE, array(
|
125 |
+
'type' => 'string',
|
126 |
+
'default' => '',
|
127 |
+
'sanitize_callback' => 'ots\sanitize_checkbox'
|
128 |
+
) );
|
129 |
+
|
130 |
+
|
131 |
+
}
|
132 |
+
|
133 |
+
add_action( 'init', 'ots\register_settings' );
|
134 |
+
|
135 |
+
|
136 |
+
/**
|
137 |
+
* Add settings sections for admin settings pages.
|
138 |
+
*
|
139 |
+
* @since 4.0.0
|
140 |
+
*/
|
141 |
+
function add_settings_sections() {
|
142 |
+
|
143 |
+
add_settings_section( 'layout', __( 'Layout', 'ots' ), '', 'ots-team-view' );
|
144 |
+
add_settings_section( 'display', __( 'Display', 'ots' ), '', 'ots-team-view' );
|
145 |
+
add_settings_section( 'single-general', __( 'General', 'ots' ), '', 'ots-single-member-view' );
|
146 |
+
add_settings_section( 'single-layout', __( 'Layout', 'ots' ), '', 'ots-single-member-view' );
|
147 |
+
add_settings_section( 'single-display', __( 'Display', 'ots' ), '', 'ots-single-member-view' );
|
148 |
+
add_settings_section( 'advanced', __( 'Advanced', 'ots' ), '', 'ots-advanced' );
|
149 |
+
|
150 |
+
}
|
151 |
+
|
152 |
+
add_action( 'admin_init', 'ots\add_settings_sections' );
|
153 |
+
|
154 |
+
|
155 |
+
/**
|
156 |
+
* Add settings fields to pages and settings sections.
|
157 |
+
*
|
158 |
+
* @since 4.0.0
|
159 |
+
*/
|
160 |
+
function add_settings_fields() {
|
161 |
+
|
162 |
+
$display_field_previews = apply_filters( 'ots_enable_pro_preview', true );
|
163 |
+
|
164 |
+
$templates = array( '' => __( 'Select a template', 'ots' ) ) + get_templates();
|
165 |
+
|
166 |
+
$preview_templates = !$display_field_previews ? array() : array(
|
167 |
+
'list-stacked' => __( 'List - Stacked (Pro)', 'ots' ),
|
168 |
+
'honey-comb' => __( 'Honey Comb (Pro)', 'ots' ),
|
169 |
+
'carousel' => __( 'Carousel (Pro)', 'ots' ),
|
170 |
+
'staff-directory' => __( 'Staff Directory (Pro)' )
|
171 |
+
);
|
172 |
+
|
173 |
+
|
174 |
+
/**
|
175 |
+
* Team View settings
|
176 |
+
*
|
177 |
+
* @since 4.0.0
|
178 |
+
*/
|
179 |
+
add_settings_field(
|
180 |
+
Options::TEMPLATE,
|
181 |
+
__( 'Template', 'ots' ),
|
182 |
+
'ots\settings_select_box',
|
183 |
+
'ots-team-view',
|
184 |
+
'layout',
|
185 |
+
array(
|
186 |
+
'name' => Options::TEMPLATE,
|
187 |
+
'selected' => get_option( Options::TEMPLATE ),
|
188 |
+
'attrs' => array( 'class' => 'regular-text' ),
|
189 |
+
'options' => $templates + $preview_templates,
|
190 |
+
'disabled_options' => array_keys( $preview_templates ),
|
191 |
+
'description' => __( 'Template that displays team members where the short-code is output', 'ots' )
|
192 |
+
)
|
193 |
+
);
|
194 |
+
|
195 |
+
add_settings_field(
|
196 |
+
Options::GRID_COLUMNS,
|
197 |
+
__( 'Grid Columns', 'ots' ),
|
198 |
+
'ots\settings_select_box',
|
199 |
+
'ots-team-view',
|
200 |
+
'layout',
|
201 |
+
array(
|
202 |
+
'name' => Options::GRID_COLUMNS,
|
203 |
+
'attrs' => array( 'class' => 'regular-text' ),
|
204 |
+
'selected' => get_option( Options::GRID_COLUMNS ),
|
205 |
+
'options' => array(
|
206 |
+
2 => 2,
|
207 |
+
3 => 3,
|
208 |
+
4 => 4,
|
209 |
+
5 => 5,
|
210 |
+
10 => 10
|
211 |
+
),
|
212 |
+
'description' => __( 'The maximum number of members to display per row', 'ots' )
|
213 |
+
)
|
214 |
+
);
|
215 |
+
|
216 |
+
add_settings_field(
|
217 |
+
Options::MARGIN,
|
218 |
+
__( 'Margin', 'ots' ),
|
219 |
+
'ots\settings_select_box',
|
220 |
+
'ots-team-view',
|
221 |
+
'layout',
|
222 |
+
array(
|
223 |
+
'name' => Options::MARGIN,
|
224 |
+
'attrs' => array( 'class' => 'regular-text' ),
|
225 |
+
'selected' => get_option( Options::MARGIN ),
|
226 |
+
'options' => array(
|
227 |
+
0 => __( 'No Margin', 'ots' ),
|
228 |
+
5 => 5,
|
229 |
+
10 => 10,
|
230 |
+
15 => 15
|
231 |
+
),
|
232 |
+
'description' => __( 'The spacing between each team member', 'ots' )
|
233 |
+
)
|
234 |
+
);
|
235 |
+
|
236 |
+
add_settings_field(
|
237 |
+
Options::DISPLAY_LIMIT,
|
238 |
+
__( 'Display Limit', 'ots' ),
|
239 |
+
'ots\display_limit_field',
|
240 |
+
'ots-team-view',
|
241 |
+
'layout'
|
242 |
+
);
|
243 |
+
|
244 |
+
add_settings_field(
|
245 |
+
Options::MAIN_COLOR,
|
246 |
+
__( 'Main Color', 'ots' ),
|
247 |
+
'ots\settings_text_box',
|
248 |
+
'ots-team-view',
|
249 |
+
'display',
|
250 |
+
array(
|
251 |
+
'name' => Options::MAIN_COLOR,
|
252 |
+
'value' => get_option( Options::MAIN_COLOR ),
|
253 |
+
'attrs' => array(
|
254 |
+
'class' => 'wp-color-picker'
|
255 |
+
)
|
256 |
+
)
|
257 |
+
);
|
258 |
+
|
259 |
+
add_settings_field(
|
260 |
+
Options::SHOW_SOCIAL,
|
261 |
+
__( 'Show Social Icons', 'ots' ),
|
262 |
+
'ots\settings_check_box',
|
263 |
+
'ots-team-view',
|
264 |
+
'display',
|
265 |
+
array(
|
266 |
+
'name' => Options::SHOW_SOCIAL,
|
267 |
+
'checked' => get_option( Options::SHOW_SOCIAL ),
|
268 |
+
'label' => __( 'Show social icons', 'ots' )
|
269 |
+
)
|
270 |
+
);
|
271 |
+
|
272 |
+
add_settings_field(
|
273 |
+
Options::SOCIAL_LINK_ACTION,
|
274 |
+
__( 'Social Links', 'ots' ),
|
275 |
+
'ots\settings_check_box',
|
276 |
+
'ots-team-view',
|
277 |
+
'display',
|
278 |
+
array(
|
279 |
+
'name' => Options::SOCIAL_LINK_ACTION,
|
280 |
+
'checked' => get_option( Options::SOCIAL_LINK_ACTION ),
|
281 |
+
'label' => __( 'Open social links in a new tab', 'ots' )
|
282 |
+
)
|
283 |
+
);
|
284 |
+
|
285 |
+
add_settings_field(
|
286 |
+
Options::DISPLAY_NAME,
|
287 |
+
__( 'Display Name', 'ots' ),
|
288 |
+
'ots\settings_check_box',
|
289 |
+
'ots-team-view',
|
290 |
+
'display',
|
291 |
+
array(
|
292 |
+
'name' => Options::DISPLAY_NAME,
|
293 |
+
'checked' => get_option( Options::DISPLAY_NAME ),
|
294 |
+
'label' => __( 'Display team member\'s name' , 'ots' )
|
295 |
+
)
|
296 |
+
);
|
297 |
+
|
298 |
+
add_settings_field(
|
299 |
+
Options::DISPLAY_TITLE,
|
300 |
+
__( 'Display Title', 'ots' ),
|
301 |
+
'ots\settings_check_box',
|
302 |
+
'ots-team-view',
|
303 |
+
'display',
|
304 |
+
array(
|
305 |
+
'name' => Options::DISPLAY_TITLE,
|
306 |
+
'checked' => get_option( Options::DISPLAY_TITLE ),
|
307 |
+
'label' => __( 'Display team member\'s job title', 'ots' )
|
308 |
+
)
|
309 |
+
);
|
310 |
+
|
311 |
+
if( $display_field_previews ) {
|
312 |
+
|
313 |
+
add_settings_field( 'pro-max-word-count', __( 'Max Word Count', 'ots' ), 'ots\do_pro_only_field', 'ots-team-view', 'display' );
|
314 |
+
add_settings_field( 'pro-name-font-size', __( 'Name Font Size', 'ots' ), 'ots\do_pro_only_field', 'ots-team-view', 'display' );
|
315 |
+
add_settings_field( 'pro-title-font-size', __( 'Title Font Size', 'ots' ), 'ots\do_pro_only_field', 'ots-team-view', 'display' );
|
316 |
+
add_settings_field( 'pro-icon-style', __( 'Icon Style', 'ots' ),'ots\do_pro_only_field', 'ots-team-view', 'display' );
|
317 |
+
|
318 |
+
}
|
319 |
+
|
320 |
+
$templates = array( '' => __( 'Select a template', 'ots' ) ) + get_single_templates();
|
321 |
+
|
322 |
+
$preview_templates = !$display_field_previews ? array() : array(
|
323 |
+
'custom' => __( 'Custom Template (Pro)', 'ots' ),
|
324 |
+
'sidebar' => __( 'Single with a Sidebar (Pro)', 'ots' ),
|
325 |
+
'card-popup' => __( 'Popup Card (Pro)', 'ots' ),
|
326 |
+
'side-panel' => __( 'Side Panel (Pro)', 'ots' )
|
327 |
+
);
|
328 |
+
|
329 |
+
|
330 |
+
/**
|
331 |
+
* Single Member View settings
|
332 |
+
*
|
333 |
+
* @since 4.0.0
|
334 |
+
*/
|
335 |
+
add_settings_field(
|
336 |
+
Options::REWRITE_SLUG,
|
337 |
+
__( 'Team Member URL Slug', 'ots' ),
|
338 |
+
'ots\settings_text_box',
|
339 |
+
'ots-single-member-view',
|
340 |
+
'single-general',
|
341 |
+
array(
|
342 |
+
'name' => Options::REWRITE_SLUG,
|
343 |
+
'value' => get_option( Options::REWRITE_SLUG ),
|
344 |
+
'attrs' => array( 'class' => 'regular-text' ),
|
345 |
+
'description' => __( 'The URL slug for all single team members: ', 'ots' ) . home_url( '/{slug}/member-name' )
|
346 |
+
)
|
347 |
+
);
|
348 |
+
|
349 |
+
add_settings_field(
|
350 |
+
Options::SINGLE_TEMPLATE,
|
351 |
+
__( 'Template', 'ots' ),
|
352 |
+
'ots\settings_select_box',
|
353 |
+
'ots-single-member-view',
|
354 |
+
'single-layout',
|
355 |
+
array(
|
356 |
+
'name' => Options::SINGLE_TEMPLATE,
|
357 |
+
'selected' => get_option( Options::SINGLE_TEMPLATE ),
|
358 |
+
'attrs' => array( 'class' => 'regular-text' ),
|
359 |
+
'options' => $templates + $preview_templates,
|
360 |
+
'disabled_options' => array_keys( $preview_templates ),
|
361 |
+
'description' => __( 'Can be either a custom template (redirect) or an inline template (no redirect)', 'ots' )
|
362 |
+
)
|
363 |
+
);
|
364 |
+
|
365 |
+
add_settings_field(
|
366 |
+
Options::SHOW_SINGLE_SOCIAL,
|
367 |
+
__( 'Show Single Social', 'ots' ),
|
368 |
+
'ots\settings_check_box',
|
369 |
+
'ots-single-member-view',
|
370 |
+
'single-display',
|
371 |
+
array(
|
372 |
+
'name' => Options::SHOW_SINGLE_SOCIAL,
|
373 |
+
'checked' => get_option( Options::SHOW_SINGLE_SOCIAL ),
|
374 |
+
'label' => __( 'Show social icons for single members', 'ots' )
|
375 |
+
)
|
376 |
+
);
|
377 |
+
|
378 |
+
if( $display_field_previews ) {
|
379 |
+
|
380 |
+
add_settings_field( 'pro-card-popup-margin-top', __( 'Card Popup Top Margin', 'ots' ), 'ots\do_pro_only_field', 'ots-single-member-view', 'single-layout' );
|
381 |
+
add_settings_field( 'pro-display-skills-bar', __( 'Display Skills Bar', 'ots' ), 'ots\do_pro_only_field', 'ots-single-member-view', 'single-display' );
|
382 |
+
add_settings_field( 'pro-skills-title', __( 'Skills Title', 'ots' ), 'ots\do_pro_only_field', 'ots-single-member-view', 'single-display' );
|
383 |
+
add_settings_field( 'pro-image-style', __( 'Image Style', 'ots' ),'ots\do_pro_only_field', 'ots-single-member-view', 'single-display' );
|
384 |
+
|
385 |
+
}
|
386 |
+
|
387 |
+
/**
|
388 |
+
* Advanced settings
|
389 |
+
*/
|
390 |
+
add_settings_field(
|
391 |
+
Options::NUKE,
|
392 |
+
__( 'Erase Data', 'ots' ),
|
393 |
+
'ots\settings_check_box',
|
394 |
+
'ots-advanced',
|
395 |
+
'advanced',
|
396 |
+
array(
|
397 |
+
'name' => Options::NUKE,
|
398 |
+
'checked' => get_option( Options::NUKE ),
|
399 |
+
'label' => __( 'Erase all data on uninstall', 'ots' )
|
400 |
+
)
|
401 |
+
);
|
402 |
+
|
403 |
+
}
|
404 |
+
|
405 |
+
add_action( 'admin_init', 'ots\add_settings_fields' );
|
406 |
+
|
407 |
+
|
408 |
+
/**
|
409 |
+
* Flush rewrite rules when the team member post type slug is changed.
|
410 |
+
*
|
411 |
+
* @param $option
|
412 |
+
* @since 4.0.0
|
413 |
+
*/
|
414 |
+
function team_member_slug_changed( $option ) {
|
415 |
+
|
416 |
+
if ( $option === Options::REWRITE_SLUG ) {
|
417 |
+
register_team_member_post_type();
|
418 |
+
flush_rewrite_rules();
|
419 |
+
}
|
420 |
+
|
421 |
+
}
|
422 |
+
|
423 |
+
add_action( 'updated_option', 'ots\team_member_slug_changed' );
|
424 |
+
|
425 |
+
|
426 |
+
/**
|
427 |
+
* Output the settings page.
|
428 |
+
*
|
429 |
+
* @since 4.0.0
|
430 |
+
*/
|
431 |
+
function do_settings_page() {
|
432 |
+
|
433 |
+
$tabs = apply_filters( 'ots_settings_page_tabs', array(
|
434 |
+
'ots-team-view' => __( 'Team View', 'ots' ),
|
435 |
+
'ots-single-member-view' => __( 'Single Member View', 'ots' ),
|
436 |
+
'ots-advanced' => __( 'Advanced', 'ots' )
|
437 |
+
) );
|
438 |
+
|
439 |
+
reset( $tabs );
|
440 |
+
|
441 |
+
$active = isset( $_GET['tab'] ) && array_key_exists( $_GET['tab'], $tabs ) ? $_GET['tab'] : key( $tabs );
|
442 |
+
|
443 |
+
?>
|
444 |
+
|
445 |
+
<div class="wrap ots-admin-page">
|
446 |
+
|
447 |
+
<div class="ots-admin-header">
|
448 |
+
|
449 |
+
<div class="title-bar">
|
450 |
+
|
451 |
+
<div class="inner">
|
452 |
+
|
453 |
+
<div class="branding">
|
454 |
+
<img src="<?php echo esc_url( asset( 'images/branding/smartcat-medium.png' ) ); ?>" />
|
455 |
+
</div>
|
456 |
+
|
457 |
+
<p class="page-title"><?php _e( 'Our Team Showcase', 'ots' ); ?></p>
|
458 |
+
|
459 |
+
</div>
|
460 |
+
|
461 |
+
<?php if( apply_filters( 'ots_enable_pro_preview', true ) ) : ?>
|
462 |
+
|
463 |
+
<div class="inner">
|
464 |
+
|
465 |
+
<a href="http://wordpressteamplugin.com/templates/"
|
466 |
+
class="cta cta-secondary"
|
467 |
+
target="_blank">
|
468 |
+
<?php _e( 'View Demo', 'ots' ); ?>
|
469 |
+
</a>
|
470 |
+
|
471 |
+
<a href="https://smartcatdesign.net/downloads/our-team-showcase/"
|
472 |
+
class="cta cta-primary"
|
473 |
+
target="_blank">
|
474 |
+
<?php _e( 'Go Pro', 'ots' ); ?>
|
475 |
+
</a>
|
476 |
+
|
477 |
+
</div>
|
478 |
+
|
479 |
+
<?php endif; ?>
|
480 |
+
|
481 |
+
</div>
|
482 |
+
|
483 |
+
<div class="clear"></div>
|
484 |
+
|
485 |
+
</div>
|
486 |
+
|
487 |
+
<h2 style="display: none"></h2>
|
488 |
+
|
489 |
+
<?php settings_errors(); ?>
|
490 |
+
|
491 |
+
<h2 class="nav-tab-wrapper">
|
492 |
+
|
493 |
+
<?php foreach( $tabs as $tab => $title ) : ?>
|
494 |
+
|
495 |
+
<a href="<?php echo add_query_arg( 'tab', $tab ); ?>"
|
496 |
+
class="nav-tab <?php echo $active == $tab ? 'nav-tab-active' : ''; ?>"><?php esc_html_e( $title ); ?></a>
|
497 |
+
|
498 |
+
<?php endforeach; ?>
|
499 |
+
|
500 |
+
</h2>
|
501 |
+
|
502 |
+
<div class="inner">
|
503 |
+
|
504 |
+
<div class="tabs-content">
|
505 |
+
|
506 |
+
<form method="post" action="options.php">
|
507 |
+
|
508 |
+
<?php do_settings_sections( $active ); ?>
|
509 |
+
|
510 |
+
<?php settings_fields( $active ); ?>
|
511 |
+
|
512 |
+
<?php submit_button(); ?>
|
513 |
+
|
514 |
+
</form>
|
515 |
+
|
516 |
+
</div>
|
517 |
+
|
518 |
+
<div class="sidebar">
|
519 |
+
|
520 |
+
<div class="widget">
|
521 |
+
<h2><?php _e( 'Quick Reference', 'ots' ); ?></h2>
|
522 |
+
<div class="content">
|
523 |
+
<ul>
|
524 |
+
<li><?php _e( 'Image recommended size is 400x400 px. To achieve the best appearance, please ensure all team member images are the same size.', 'ots' ); ?></li>
|
525 |
+
<li><?php _e( 'To display the team members, add <code>[our-team]</code> short-code in a widget, post or page', 'ots' ); ?></li>
|
526 |
+
<li><?php _e( 'To display members from a specific group, add <code>[our-team group="name of your group"]</code>', 'ots' ); ?></li>
|
527 |
+
<li><?php _e( 'To override the template choice from the short-code, add <code>[our-team template="grid"]</code>. <i>Template options include: grid, grid_circles, grid_circles2, carousel, hc and stacked.</i>', 'ots' ); ?></li>
|
528 |
+
<li><?php _e( 'To override the single template choice from the short-code add <code>[our-team single_template="vcard"]</code>. Alternatively you can set it to panel', 'ots' ); ?></li>
|
529 |
+
</ul>
|
530 |
+
</div>
|
531 |
+
</div>
|
532 |
+
|
533 |
+
</div>
|
534 |
+
|
535 |
+
<div class="clear"></div>
|
536 |
+
|
537 |
+
</div>
|
538 |
+
|
539 |
+
</div>
|
540 |
+
|
541 |
+
<?php }
|
542 |
+
|
543 |
+
|
544 |
+
/**
|
545 |
+
* Output a select box for a settings field.
|
546 |
+
*
|
547 |
+
* @param array $args {
|
548 |
+
* string $name The name of the setting as registered with the settings API.
|
549 |
+
* array $attrs An array of HTML attributes for the field.
|
550 |
+
* array $options An array of key value pairs that are used for the options.
|
551 |
+
* string $selected The current value of the select box.
|
552 |
+
* string $description A description for the field.
|
553 |
+
* array $disabled_options An array of options that are disabled by default.
|
554 |
+
* }
|
555 |
+
*
|
556 |
+
* @since 4.0.0
|
557 |
+
*/
|
558 |
+
function settings_select_box( array $args ) {
|
559 |
+
|
560 |
+
$defaults = array(
|
561 |
+
'attrs' => array(),
|
562 |
+
'disabled_options' => array(),
|
563 |
+
'selected' => '',
|
564 |
+
'description' => ''
|
565 |
+
);
|
566 |
+
|
567 |
+
$args = wp_parse_args( $args, $defaults );
|
568 |
+
|
569 |
+
echo '<select name="' . esc_attr( $args['name'] ) . '" ' . print_attrs( $args['attrs'], false ) . '>';
|
570 |
+
|
571 |
+
foreach( $args['options'] as $value => $label ) {
|
572 |
+
|
573 |
+
echo '<option value="' . esc_attr( $value ) . '" ';
|
574 |
+
|
575 |
+
selected( $value, $args['selected'] );
|
576 |
+
disabled( true, in_array( $value, $args['disabled_options'] ) );
|
577 |
+
|
578 |
+
echo ' >' . esc_html( $label ) . '</option>';
|
579 |
+
|
580 |
+
}
|
581 |
+
|
582 |
+
echo '</select>';
|
583 |
+
|
584 |
+
if( !empty( $args['description'] ) ) {
|
585 |
+
echo '<p class="description">' . esc_html( $args['description'] ) . '</p>';
|
586 |
+
}
|
587 |
+
|
588 |
+
}
|
589 |
+
|
590 |
+
/**
|
591 |
+
* Output a radio group for a settings field.
|
592 |
+
*
|
593 |
+
* @param array $args {
|
594 |
+
* string $name The name of the setting as registered with the settings API.
|
595 |
+
* array $attrs An array of HTML attributes for the field.
|
596 |
+
* array $options An array of key value pairs that are used for the options.
|
597 |
+
* string $selected The current value of the select box.
|
598 |
+
* string $before Html to output before the opening <label> tag.
|
599 |
+
* string $after Html to output after the closing </label> tag.
|
600 |
+
* array $disabled_options An array of options to be disabled by default.
|
601 |
+
* }
|
602 |
+
*
|
603 |
+
* @since 4.0.0
|
604 |
+
*/
|
605 |
+
function settings_radio_buttons( array $args ) {
|
606 |
+
|
607 |
+
$defaults = array(
|
608 |
+
'attrs' => array(),
|
609 |
+
'before' => '',
|
610 |
+
'after' => '',
|
611 |
+
'selected' => '',
|
612 |
+
'disabled_options' => array()
|
613 |
+
);
|
614 |
+
|
615 |
+
$args = wp_parse_args( $args, $defaults );
|
616 |
+
|
617 |
+
foreach( $args['options'] as $value => $label ) {
|
618 |
+
|
619 |
+
echo $args['before'] .
|
620 |
+
|
621 |
+
'<label><input type="radio" name="' . esc_attr( $args['name'] ) . '" value="' . $value . '" ';
|
622 |
+
|
623 |
+
print_attrs( $args['attrs'] );
|
624 |
+
|
625 |
+
checked( $value, $args['selected'] );
|
626 |
+
disabled( true, in_array( $value, $args['disabled_options'] ) );
|
627 |
+
|
628 |
+
echo '/>' . $label . '</label>' . $args['after'];
|
629 |
+
|
630 |
+
}
|
631 |
+
|
632 |
+
}
|
633 |
+
|
634 |
+
|
635 |
+
/**
|
636 |
+
* Output a check box for a settings field.
|
637 |
+
*
|
638 |
+
* @param array $args {
|
639 |
+
* string $name The name of the setting as registered with the settings API.
|
640 |
+
* array $attrs An array of HTML attributes for the field.
|
641 |
+
* array $checked Whether or not the checkbox is currently checked.
|
642 |
+
* string $label The label for the checkbox.
|
643 |
+
* }
|
644 |
+
*
|
645 |
+
* @since 4.0.0
|
646 |
+
*/
|
647 |
+
function settings_check_box( array $args ) {
|
648 |
+
|
649 |
+
$defaults = array(
|
650 |
+
'attrs' => array(),
|
651 |
+
'checked' => false,
|
652 |
+
'label' => ''
|
653 |
+
);
|
654 |
+
|
655 |
+
$args = wp_parse_args( $args, $defaults );
|
656 |
+
|
657 |
+
echo '<input type="hidden" name="' . esc_attr( $args['name'] ) . '" value="off" />';
|
658 |
+
|
659 |
+
echo '<label>
|
660 |
+
<input type="checkbox"
|
661 |
+
value="on"
|
662 |
+
name="' . esc_attr( $args['name'] ) . '" ';
|
663 |
+
|
664 |
+
print_attrs( $args['attrs'] );
|
665 |
+
|
666 |
+
checked( 'on', $args['checked'] );
|
667 |
+
|
668 |
+
echo ' />' . esc_html( $args['label'] ) . '</label>';
|
669 |
+
|
670 |
+
}
|
671 |
+
|
672 |
+
|
673 |
+
/**
|
674 |
+
* Output a text box for a settings field.
|
675 |
+
*
|
676 |
+
* @param array $args {
|
677 |
+
* string $name The name of the setting as registered with the settings API.
|
678 |
+
* array $attrs An array of HTML attributes for the field.
|
679 |
+
* array $value The current value of the text box.
|
680 |
+
* string $description The description to display below the field.
|
681 |
+
* }
|
682 |
+
*
|
683 |
+
* @since 4.0.0
|
684 |
+
*/
|
685 |
+
function settings_text_box( array $args ) {
|
686 |
+
|
687 |
+
$defaults = array(
|
688 |
+
'attrs' => array(),
|
689 |
+
'value' => '',
|
690 |
+
'description' => ''
|
691 |
+
);
|
692 |
+
|
693 |
+
$args = wp_parse_args( $args, $defaults );
|
694 |
+
|
695 |
+
echo '<input name="' . esc_attr( $args['name'] ) . '"
|
696 |
+
value="' . $args['value'] . '" ';
|
697 |
+
|
698 |
+
print_attrs( $args['attrs'] );
|
699 |
+
|
700 |
+
echo ' />';
|
701 |
+
|
702 |
+
if( !empty( $args['description'] ) ) {
|
703 |
+
echo '<p class="description">' . esc_html( $args['description'] ) . '</p>';
|
704 |
+
}
|
705 |
+
|
706 |
+
}
|
707 |
+
|
708 |
+
|
709 |
+
/**
|
710 |
+
* Outputs disabled placeholder fields.
|
711 |
+
*
|
712 |
+
* @since 4.0.0
|
713 |
+
*/
|
714 |
+
function do_pro_only_field() {
|
715 |
+
|
716 |
+
echo '<p class="description">' . __( 'Pro version only', 'ots' ) . '</p>';
|
717 |
+
|
718 |
+
}
|
719 |
+
|
720 |
+
|
721 |
+
/**
|
722 |
+
* Output a number input and checkbox for the display limit field.
|
723 |
+
*
|
724 |
+
* @since 4.0.0
|
725 |
+
*/
|
726 |
+
function display_limit_field() {
|
727 |
+
|
728 |
+
$value = get_option( Options::DISPLAY_LIMIT ); ?>
|
729 |
+
|
730 |
+
<input type="number"
|
731 |
+
min="1"
|
732 |
+
id="ots-display-limit-number"
|
733 |
+
placeholder="<?php esc_attr_e( '# of members', 'ots' ); ?>"
|
734 |
+
name="<?php esc_attr_e( Options::DISPLAY_LIMIT ); ?>"
|
735 |
+
value="<?php $value !== 'on' ? esc_attr_e( $value ) : ''; ?>"
|
736 |
+
|
737 |
+
<?php disabled( $value, 'all' ); ?> >
|
738 |
+
|
739 |
+
<?php _e( ' - or - ', 'ots' ); ?>
|
740 |
+
|
741 |
+
<label>
|
742 |
+
|
743 |
+
<input type="checkbox"
|
744 |
+
id="ots-display-limit-all"
|
745 |
+
value="all"
|
746 |
+
name="<?php esc_attr_e( Options::DISPLAY_LIMIT ); ?>"
|
747 |
+
|
748 |
+
<?php checked( $value, 'all' ); ?> >
|
749 |
+
|
750 |
+
<?php _e( 'Display all', 'ots' ); ?>
|
751 |
+
|
752 |
+
</label>
|
753 |
+
|
754 |
+
<p class="description"><?php _e( 'The maximum number of members to display', 'ots' ); ?></p>
|
755 |
+
|
756 |
+
<?php }
|
includes/documentation.php
ADDED
@@ -0,0 +1,334 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ots;
|
4 |
+
|
5 |
+
|
6 |
+
/**
|
7 |
+
* Registers the documentation page.
|
8 |
+
*
|
9 |
+
* @since 4.0.0
|
10 |
+
*/
|
11 |
+
function add_documentation_pages() {
|
12 |
+
|
13 |
+
add_submenu_page( 'edit.php?post_type=team_member', __( 'Documentation', 'ots' ), __( 'Documentation', 'ots' ), 'manage_options', 'ots-docs', 'ots\do_documentation_page' );
|
14 |
+
|
15 |
+
}
|
16 |
+
|
17 |
+
add_action( 'admin_menu', 'ots\add_documentation_pages' );
|
18 |
+
|
19 |
+
|
20 |
+
/**
|
21 |
+
* Add sections to the documentation page.
|
22 |
+
*
|
23 |
+
* @since 4.0.0
|
24 |
+
*/
|
25 |
+
function add_documentation_sections() {
|
26 |
+
|
27 |
+
add_settings_section( 'plugin-usage', __( 'Plugin Usage', 'ots' ), '', 'ots-getting-started' );
|
28 |
+
add_settings_section( 'templates', __( 'Templates', 'ots' ), '', 'ots-getting-started' );
|
29 |
+
add_settings_section( 'widgets', __( 'Widgets', 'ots' ), '', 'ots-getting-started' );
|
30 |
+
|
31 |
+
}
|
32 |
+
|
33 |
+
add_action( 'admin_init', 'ots\add_documentation_sections' );
|
34 |
+
|
35 |
+
|
36 |
+
/**
|
37 |
+
* Add each document topic to its respective section.
|
38 |
+
*
|
39 |
+
* @since 4.0.0
|
40 |
+
*/
|
41 |
+
function add_documentation_fields() {
|
42 |
+
|
43 |
+
add_settings_field( 'usage', __( 'Usage', 'ots' ), 'ots\doc_usage', 'ots-getting-started', 'plugin-usage' );
|
44 |
+
add_settings_field( 'templates', __( 'Team View Templates', 'ots' ), 'ots\doc_templates', 'ots-getting-started', 'templates' );
|
45 |
+
add_settings_field( 'shortcode-templates', __( 'Setting a Template and Using Shortcodes', 'ots' ), 'ots\doc_shortcode_templates', 'ots-getting-started', 'templates' );
|
46 |
+
add_settings_field( 'shortcode-ids', __( 'Setting The ID of a Shortcode Instance', 'ots' ), 'ots\doc_shortcode_ids', 'ots-getting-started', 'templates' );
|
47 |
+
add_settings_field( 'single-templates', __( 'Single Member View Templates', 'ots' ), 'ots\doc_single_templates', 'ots-getting-started', 'templates' );
|
48 |
+
add_settings_field( 'custom-templates', __( 'Custom Templates - <i class="ots-pro">Pro Version</i>', 'ots' ), 'ots\doc_custom_templates', 'ots-getting-started', 'templates' );
|
49 |
+
add_settings_field( 'main-widget', __( 'Main Widget', 'ots' ), 'ots\doc_main_widget', 'ots-getting-started', 'widgets' );
|
50 |
+
add_settings_field( 'sidebar-widget', __( 'Sidebar Widget', 'ots' ), 'ots\doc_sidebar_widget', 'ots-getting-started', 'widgets' );
|
51 |
+
|
52 |
+
}
|
53 |
+
|
54 |
+
add_action( 'admin_init', 'ots\add_documentation_fields' );
|
55 |
+
|
56 |
+
/**
|
57 |
+
* Render the usage topic.
|
58 |
+
*
|
59 |
+
* @since 4.0.0
|
60 |
+
*/
|
61 |
+
function doc_usage() { ?>
|
62 |
+
|
63 |
+
<div>
|
64 |
+
<p>
|
65 |
+
<?php _e( 'To display a team showcase on any page of your site, simply place the short-code <code>[our-team]</code> where you want it to appear within the page.', 'ots' ); ?>
|
66 |
+
</p>
|
67 |
+
<p>
|
68 |
+
<?php _e( 'You can also indicate a specific group to display, as well as override the settings for the full team and single member templates through the short-code:', 'ots' ); ?>
|
69 |
+
<code>[our-team group="slug" template="grid" single_template="panel"]</code>
|
70 |
+
</p>
|
71 |
+
<p>
|
72 |
+
<i>
|
73 |
+
<strong><?php _e( 'Tip:', 'ots' ); ?></strong>
|
74 |
+
<?php _e( 'The group "slug" can be viewed and edited from the plugin settings. Go to Team > Groups and select "Quick Edit" for the group you want to use. The slug should have no capital letters, and use underscores (group_slug) or dashes (group-slug) instead of spaces.', 'ots' ); ?>
|
75 |
+
</i>
|
76 |
+
</p>
|
77 |
+
<p>
|
78 |
+
<?php _e( 'Overriding your settings is useful when you want to display the showcase in different ways on different pages.', 'ots' ); ?>
|
79 |
+
</p>
|
80 |
+
</div>
|
81 |
+
|
82 |
+
<?php }
|
83 |
+
|
84 |
+
|
85 |
+
/**
|
86 |
+
* Render the templates topic.
|
87 |
+
*
|
88 |
+
* @since 4.0.0
|
89 |
+
*/
|
90 |
+
function doc_templates() { ?>
|
91 |
+
|
92 |
+
<p>
|
93 |
+
<?php _e( 'To view the Template options for Our Team Showcase, visit the ', 'ots' ); ?>
|
94 |
+
<a target="_blank" href="https://smartcatdesign.net/our-team-showcase-demo/"><?php _e( 'Our Team Showcase Demo Page', 'ots' ); ?></a>.
|
95 |
+
</p>
|
96 |
+
<p>
|
97 |
+
<i>
|
98 |
+
<?php _e( 'Please note that <strong>Carousel, Honeycomb, Stacked</strong> and <strong>Directory</strong> are only available in the Pro version.', 'ots' ); ?>
|
99 |
+
</i>
|
100 |
+
</p>
|
101 |
+
|
102 |
+
<?php }
|
103 |
+
|
104 |
+
|
105 |
+
/**
|
106 |
+
* Render the short-code topic.
|
107 |
+
*
|
108 |
+
* @since 4.0.0
|
109 |
+
*/
|
110 |
+
function doc_shortcode_templates() { ?>
|
111 |
+
|
112 |
+
<p>
|
113 |
+
<?php _e( 'The default template, "Grid - Boxes", can be changed to one of several other options. Each one will display your team showcase in a different visual arrangement. The template can be changed in the ', 'ots' ); ?>
|
114 |
+
<a target="_blank" href="<?php menu_page_url( 'ots-settings' ); ?>"><?php _e( 'plugin settings', 'ots' ); ?></a>.
|
115 |
+
</p>
|
116 |
+
<p>
|
117 |
+
<?php _e( 'If you wish to display the Showcase in more than one configuration on the site, you can also modify the short-code to specify a different template for that version of output of the plugin.', 'ots' ); ?>
|
118 |
+
</p>
|
119 |
+
<p>
|
120 |
+
<?php _e( 'Example:', 'ots' ); ?> <code>[our-team template="grid"]</code>
|
121 |
+
</p>
|
122 |
+
<p>
|
123 |
+
<?php _e( 'The short-code values for each of the templates are:', 'ots' ); ?>
|
124 |
+
</p>
|
125 |
+
<p>
|
126 |
+
<code>[our-team template="carousel"]</code>
|
127 |
+
<br>
|
128 |
+
<code>[our-team template="grid"]</code>
|
129 |
+
<br>
|
130 |
+
<code>[our-team template="grid_cirlces"]</code>
|
131 |
+
<br>
|
132 |
+
<code>[our-team template="grid_circles2"]</code>
|
133 |
+
<br>
|
134 |
+
<code>[our-team template="hc"]</code>
|
135 |
+
<br>
|
136 |
+
<code>[our-team template="stacked"]</code>
|
137 |
+
<br>
|
138 |
+
<code>[our-team template="directory"]</code>
|
139 |
+
</p>
|
140 |
+
|
141 |
+
<?php }
|
142 |
+
|
143 |
+
|
144 |
+
function doc_shortcode_ids() { ?>
|
145 |
+
|
146 |
+
<p>
|
147 |
+
<?php _e( 'Each shortcode instance can optionally be given a unique <i>HTML identifier</i>. In the shortcode this makes it easier to modify the behaviour or appearance of individual shortcode instances on the same page. To set the shortcode ID, simply pass the <code>id="your-unique-id"</code> parameter along with any other shortcode options.', 'ots' ); ?>
|
148 |
+
</p>
|
149 |
+
|
150 |
+
<?php }
|
151 |
+
|
152 |
+
|
153 |
+
/**
|
154 |
+
* Render the single templates topic.
|
155 |
+
*
|
156 |
+
* @since 4.0.0
|
157 |
+
*/
|
158 |
+
function doc_single_templates() { ?>
|
159 |
+
|
160 |
+
<p>
|
161 |
+
<strong><?php _e( 'Theme Default (Single Post)', 'ots' ); ?></strong>
|
162 |
+
</p>
|
163 |
+
<p>
|
164 |
+
<?php _e( 'This will load the single member page based on your theme\'s single.php file.', 'ots' ); ?>
|
165 |
+
</p>
|
166 |
+
<p>
|
167 |
+
<strong><?php _e( 'Custom Template', 'ots' ); ?></strong>
|
168 |
+
</p>
|
169 |
+
<p>
|
170 |
+
<?php _e( 'This will load the single member page from a custom template file (team_members_template.php).', 'ots' ); ?>
|
171 |
+
</p>
|
172 |
+
<p>
|
173 |
+
<strong>
|
174 |
+
<?php _e( 'Card Popup (single_template="vcard")', 'ots' ); ?> - <i class="ots-pro"><?php _e( 'Pro Version', 'ots' ); ?></i>
|
175 |
+
</strong>
|
176 |
+
</p>
|
177 |
+
<p class="media">
|
178 |
+
<a href="<?php echo esc_url( asset( 'images/demo/card.jpg' ) ); ?>" target="_blank">
|
179 |
+
<img src="<?php echo esc_url( asset( 'images/demo/card.jpg' ) ); ?>">
|
180 |
+
</a>
|
181 |
+
</p>
|
182 |
+
<p>
|
183 |
+
<?php _e( 'This will load a light-box and the member details in a sliding box.', 'ots' ); ?>
|
184 |
+
</p>
|
185 |
+
<p>
|
186 |
+
<strong>
|
187 |
+
<?php _e( 'Side Panel (single_template="panel")', 'ots' ); ?> - <i class="ots-pro"><?php _e( 'Pro Version', 'ots' ); ?></i>
|
188 |
+
</strong>
|
189 |
+
</p>
|
190 |
+
<p class="media">
|
191 |
+
<a href="<?php echo esc_url( asset( 'images/demo/panel-1.jpg' ) ); ?>" target="_blank">
|
192 |
+
<img src="<?php echo esc_url( asset( 'images/demo/panel-1.jpg' ) ); ?>">
|
193 |
+
</a>
|
194 |
+
</p>
|
195 |
+
<p>
|
196 |
+
<?php _e( 'If you do not wish to include a full single profile for each Team Member, you can disable single member view in the', 'ots' ); ?>
|
197 |
+
<a target="_blank" href="<?php menu_page_url( 'ots-settings' ); ?>"><?php _e( ' plugin settings', 'ots' ); ?></a>.
|
198 |
+
</p>
|
199 |
+
|
200 |
+
<?php }
|
201 |
+
|
202 |
+
|
203 |
+
/**
|
204 |
+
* Render the custom templates topic.
|
205 |
+
*
|
206 |
+
* @since 4.0.0
|
207 |
+
*/
|
208 |
+
function doc_custom_templates() { ?>
|
209 |
+
|
210 |
+
<p>
|
211 |
+
<?php _e( 'The plugin allows you to choose between several options for displaying single members. By default, the team member single page follows the theme\'s single.php file. You can choose to use the custom template, which is included in the plugin. In the Team plugin Settings page, under Single Member View Settings, select Custom Template. That tells the plugin to use the included custom template file. ', 'ots' ); ?>
|
212 |
+
</p>
|
213 |
+
<p>
|
214 |
+
<strong><?php _e( 'Overriding the Custom Template', 'ots' ); ?></strong>
|
215 |
+
</p>
|
216 |
+
<p>
|
217 |
+
<?php _e( 'To override the file, do not edit it from the plugin. Instead, create the file <code>/{THEME_ROOT}/team_members_template.php</code> and copy the contents of <code>/{PLUGIN_DIR}/templates/team_members_template.php</code> into it. You can then edit this file to your liking.', 'ots' ); ?>
|
218 |
+
</p>
|
219 |
+
|
220 |
+
<?php }
|
221 |
+
|
222 |
+
|
223 |
+
function doc_main_widget() { ?>
|
224 |
+
|
225 |
+
<p>
|
226 |
+
<?php _e( 'The plugin also includes a widget that can output the same templates as the shortcode in your theme\'s widget areas. Simply go to Appearance - Widgets and find the widget titled "Our Team Widget".', 'ots' ); ?>
|
227 |
+
</p>
|
228 |
+
<p>
|
229 |
+
<?php _e( 'You can drag & drop the widget into any widget placeholder and then configure to your liking.', 'ots' ); ?>
|
230 |
+
</p>
|
231 |
+
|
232 |
+
<?php }
|
233 |
+
|
234 |
+
|
235 |
+
function doc_sidebar_widget() { ?>
|
236 |
+
|
237 |
+
<p>
|
238 |
+
<?php _e( 'The plugin comes with an easy to use widget designed for appearing in your site Sidebar. Go to Appearance - Widgets and find the widget titled "Our Team Sidebar Widget".', 'ots' ); ?>
|
239 |
+
</p>
|
240 |
+
<p class="media">
|
241 |
+
<a href="<?php echo esc_url( asset( 'images/demo/sidebar-widget.jpg' ) ); ?>" target="_blank">
|
242 |
+
<img src="<?php echo esc_url( asset( 'images/demo/sidebar-widget.jpg' ) ); ?>">
|
243 |
+
</a>
|
244 |
+
</p>
|
245 |
+
<p>
|
246 |
+
<?php _e( 'You can drag & drop the widget into any widget placeholder.', 'ots' ); ?>
|
247 |
+
</p>
|
248 |
+
|
249 |
+
<?php }
|
250 |
+
|
251 |
+
|
252 |
+
/**
|
253 |
+
* Render the documentation page.
|
254 |
+
*
|
255 |
+
* @since 4.0.0
|
256 |
+
*/
|
257 |
+
function do_documentation_page() {
|
258 |
+
|
259 |
+
$tabs = array(
|
260 |
+
'ots-getting-started' => __( 'Getting Started', 'ots' )
|
261 |
+
);
|
262 |
+
|
263 |
+
$tabs = apply_filters( 'ots_documentation_tabs', $tabs );
|
264 |
+
|
265 |
+
reset( $tabs );
|
266 |
+
|
267 |
+
$active = isset( $_GET['tab'] ) && array_key_exists( $_GET['tab'], $tabs ) ? $_GET['tab'] : key( $tabs );
|
268 |
+
|
269 |
+
?>
|
270 |
+
|
271 |
+
<div class="wrap ots-admin-page ots-documentation">
|
272 |
+
|
273 |
+
<div class="ots-admin-header">
|
274 |
+
|
275 |
+
<div class="title-bar">
|
276 |
+
|
277 |
+
<div class="inner">
|
278 |
+
|
279 |
+
<div class="branding">
|
280 |
+
<img src="<?php echo esc_url( asset( 'images/branding/smartcat-medium.png' ) ); ?>" />
|
281 |
+
</div>
|
282 |
+
|
283 |
+
<p class="page-title"><?php _e( 'Our Team Showcase', 'ots' ); ?></p>
|
284 |
+
|
285 |
+
</div>
|
286 |
+
|
287 |
+
<?php if( apply_filters( 'ots_enable_pro_preview', true ) ) : ?>
|
288 |
+
|
289 |
+
<div class="inner">
|
290 |
+
|
291 |
+
<a href="http://wordpressteamplugin.com/templates/"
|
292 |
+
class="cta cta-secondary"
|
293 |
+
target="_blank">
|
294 |
+
<?php _e( 'View Demo', 'ots' ); ?>
|
295 |
+
</a>
|
296 |
+
|
297 |
+
<a href="https://smartcatdesign.net/downloads/our-team-showcase/"
|
298 |
+
class="cta cta-primary"
|
299 |
+
target="_blank">
|
300 |
+
<?php _e( 'Go Pro', 'ots' ); ?>
|
301 |
+
</a>
|
302 |
+
|
303 |
+
</div>
|
304 |
+
|
305 |
+
<?php endif; ?>
|
306 |
+
|
307 |
+
</div>
|
308 |
+
|
309 |
+
<div class="clear"></div>
|
310 |
+
|
311 |
+
</div>
|
312 |
+
|
313 |
+
<h2 style="display: none"></h2>
|
314 |
+
|
315 |
+
<h2 class="nav-tab-wrapper">
|
316 |
+
|
317 |
+
<?php foreach( $tabs as $tab => $title ) : ?>
|
318 |
+
|
319 |
+
<a href="<?php echo esc_url( add_query_arg( 'tab', $tab ) ); ?>"
|
320 |
+
class="nav-tab <?php echo $active == $tab ? 'nav-tab-active' : ''; ?>"><?php esc_html_e( $title ); ?></a>
|
321 |
+
|
322 |
+
<?php endforeach; ?>
|
323 |
+
|
324 |
+
</h2>
|
325 |
+
|
326 |
+
<div class="inner">
|
327 |
+
|
328 |
+
<form><?php do_settings_sections( $active ); ?></form>
|
329 |
+
|
330 |
+
</div>
|
331 |
+
|
332 |
+
</div>
|
333 |
+
|
334 |
+
<?php }
|
includes/extension-licensing.php
ADDED
@@ -0,0 +1,1198 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Provides common framework for managing extension updates and a license management page.
|
5 |
+
*
|
6 |
+
* @version 1.0.0
|
7 |
+
*/
|
8 |
+
if( !class_exists( 'SC_License_Manager' ) ) :
|
9 |
+
|
10 |
+
class SC_License_Manager {
|
11 |
+
|
12 |
+
private $id;
|
13 |
+
private $extensions = array();
|
14 |
+
|
15 |
+
private $page_args;
|
16 |
+
private $page_type;
|
17 |
+
|
18 |
+
private $hook = '';
|
19 |
+
|
20 |
+
/**
|
21 |
+
* SC_License_Manager constructor.
|
22 |
+
*
|
23 |
+
* @param string $id The extension's unique ID.
|
24 |
+
* @param string $page_type The type of page for the license management page.
|
25 |
+
* @param array $page_args Arguments to pass to add_{type}_page().
|
26 |
+
* @since 1.0.0
|
27 |
+
*/
|
28 |
+
public function __construct( $id, $page_type = 'options', $page_args = array() ) {
|
29 |
+
|
30 |
+
$this->id = $id;
|
31 |
+
$this->page_type = $page_type;
|
32 |
+
$this->page_args = $page_args;
|
33 |
+
|
34 |
+
$this->init();
|
35 |
+
}
|
36 |
+
|
37 |
+
/**
|
38 |
+
* Add hooks an initialize extension registration.
|
39 |
+
*
|
40 |
+
* @since 1.0.0
|
41 |
+
*/
|
42 |
+
private function init() {
|
43 |
+
|
44 |
+
$this->schedule_cron();
|
45 |
+
|
46 |
+
add_action( 'admin_menu', array( $this, 'add_license_page' ) );
|
47 |
+
add_action( 'admin_init', array( $this, 'register_settings' ) );
|
48 |
+
add_action( 'admin_init', array( $this, 'activate_license' ) );
|
49 |
+
add_action( 'admin_init', array( $this, 'deactivate_license' ) );
|
50 |
+
add_action( 'admin_notices', array( $this, 'expired_license_notifications' ) );
|
51 |
+
add_action( 'admin_notices', array( $this, 'inactive_license_notifications' ) );
|
52 |
+
add_action( 'admin_print_styles', array( $this, 'print_styles' ) );
|
53 |
+
|
54 |
+
add_action( "{$this->id}_extensions_license_check", array( $this, 'check_licenses' ) );
|
55 |
+
|
56 |
+
// Extensions hook onto this to register their licenses
|
57 |
+
do_action( "{$this->id}_register_extensions", $this );
|
58 |
+
|
59 |
+
}
|
60 |
+
|
61 |
+
private function is_license_page() {
|
62 |
+
return $this->hook == get_current_screen()->id;
|
63 |
+
}
|
64 |
+
|
65 |
+
/**
|
66 |
+
* Setup a cron that will deactivate licenses of expired plugins.
|
67 |
+
*
|
68 |
+
* @since 1.0.0
|
69 |
+
*/
|
70 |
+
public function schedule_cron() {
|
71 |
+
if ( !wp_next_scheduled( "{$this->id}_extensions_license_check" ) ) {
|
72 |
+
wp_schedule_event( time(), 'daily', "{$this->id}_extensions_license_check" );
|
73 |
+
}
|
74 |
+
}
|
75 |
+
|
76 |
+
/**
|
77 |
+
* Cron job will only be cleared if there are no extensions registered.
|
78 |
+
*
|
79 |
+
* @since 1.0.0
|
80 |
+
*/
|
81 |
+
public function clear_cron() {
|
82 |
+
if( empty( $this->extensions ) ) {
|
83 |
+
wp_clear_scheduled_hook( "{$this->id}_extensions_license_check" );
|
84 |
+
}
|
85 |
+
}
|
86 |
+
|
87 |
+
/**
|
88 |
+
* Display any notifications for expired licenses.
|
89 |
+
*
|
90 |
+
* @since 1.0.0
|
91 |
+
*/
|
92 |
+
public function expired_license_notifications() {
|
93 |
+
|
94 |
+
if( !$this->is_license_page() ) {
|
95 |
+
|
96 |
+
$notices = get_option( "{$this->id}-extension-notices", array() );
|
97 |
+
|
98 |
+
foreach( $notices as $ext ) {
|
99 |
+
|
100 |
+
// Make sure the extension is still installed
|
101 |
+
if( array_key_exists( $ext, $this->extensions ) ) { ?>
|
102 |
+
|
103 |
+
<div class="notice notice-warning is-dismissible">
|
104 |
+
<p>
|
105 |
+
<?php _e( 'Your license for ' . $this->extensions[ $ext ]['item'] . ' has expired. Please renew it at ' ); ?>
|
106 |
+
<a href="<?php esc_url( $this->extensions[ $ext ]['url'] ); ?>"><?php echo esc_url( $this->extensions[ $ext ]['url'] ); ?></a>
|
107 |
+
</p>
|
108 |
+
</div>
|
109 |
+
|
110 |
+
<?php }
|
111 |
+
|
112 |
+
}
|
113 |
+
|
114 |
+
}
|
115 |
+
|
116 |
+
}
|
117 |
+
|
118 |
+
/**
|
119 |
+
* Display any notifications for inactive licenses.
|
120 |
+
*
|
121 |
+
* @since 1.0.0
|
122 |
+
*/
|
123 |
+
public function inactive_license_notifications() {
|
124 |
+
|
125 |
+
if( !$this->is_license_page() ) {
|
126 |
+
|
127 |
+
$notices = get_option( "{$this->id}-extension-notices", array() );
|
128 |
+
|
129 |
+
foreach( $this->extensions as $id => $ext ) {
|
130 |
+
|
131 |
+
// Make sure the license hasn't been marked as expired
|
132 |
+
if( get_option( $this->extensions[ $id ]['options']['status'] ) !== 'valid' && !array_key_exists( $id, $notices ) ) { ?>
|
133 |
+
|
134 |
+
<div class="notice notice-warning is-dismissible">
|
135 |
+
<p>
|
136 |
+
<?php _e( '<strong>' . $this->extensions[ $id ]['item'] . '</strong> is active but license has not been activated!' ); ?>
|
137 |
+
<a href="<?php menu_page_url( $this->page_args['menu_slug'] ); ?>"><?php _e( 'Activate now.' ); ?></a>
|
138 |
+
</p>
|
139 |
+
</div>
|
140 |
+
|
141 |
+
<?php }
|
142 |
+
|
143 |
+
}
|
144 |
+
|
145 |
+
}
|
146 |
+
|
147 |
+
}
|
148 |
+
|
149 |
+
/**
|
150 |
+
* Deactivates expired licenses and sets the flag to notify the admin.
|
151 |
+
*
|
152 |
+
* @since 1.0.0
|
153 |
+
*/
|
154 |
+
public function check_licenses() {
|
155 |
+
|
156 |
+
$notices = get_option( "{$this->id}-extension-notices", array() );
|
157 |
+
|
158 |
+
foreach ( $this->extensions as $id => $extension ) {
|
159 |
+
|
160 |
+
$license_data = $this->get_license_data( $id );
|
161 |
+
|
162 |
+
if( $license_data ) {
|
163 |
+
|
164 |
+
if( $license_data['license'] !== 'valid' ) {
|
165 |
+
|
166 |
+
delete_option( $extension['options']['status'] );
|
167 |
+
delete_option( $extension['options']['expiration'] );
|
168 |
+
|
169 |
+
if( !in_array( $id, $notices ) ) {
|
170 |
+
$notices[] = $id;
|
171 |
+
}
|
172 |
+
|
173 |
+
} else {
|
174 |
+
|
175 |
+
// Refresh the expiration date
|
176 |
+
update_option( $extension['options']['expiration'], $license_data['expires'] );
|
177 |
+
|
178 |
+
}
|
179 |
+
|
180 |
+
}
|
181 |
+
|
182 |
+
}
|
183 |
+
|
184 |
+
update_option( "{$this->id}-extension-notices", $notices );
|
185 |
+
|
186 |
+
}
|
187 |
+
|
188 |
+
/**
|
189 |
+
* Add an extension license to be managed.
|
190 |
+
*
|
191 |
+
* @param string $id The ID of the extension.
|
192 |
+
* @param string $store_url The URL of the EDD Marketplace.
|
193 |
+
* @param string $plugin_file The file of the extension plugin.
|
194 |
+
* @param array $option_keys {
|
195 |
+
*
|
196 |
+
* The option keys where the license data will be stored.
|
197 |
+
*
|
198 |
+
* string $license The option to use to store the license key.
|
199 |
+
* string $status The option to use to store the license status.
|
200 |
+
* string $expiration The option to use to store the license expiration date.
|
201 |
+
* }
|
202 |
+
* @param array $edd_args EDD updater arguments. @see \EDD_SL_Plugin_Updater
|
203 |
+
* @since 1.0.0
|
204 |
+
*/
|
205 |
+
public function add_license( $id, $store_url, $plugin_file, array $option_keys, array $edd_args ) {
|
206 |
+
|
207 |
+
if( !array_key_exists( $id, $this->extensions ) ) {
|
208 |
+
|
209 |
+
$edd_args['license'] = trim( get_option( $option_keys['license'] ) );
|
210 |
+
|
211 |
+
$this->extensions[ $id ] = array(
|
212 |
+
'updater' => new EDD_SL_Plugin_Updater( $store_url, $plugin_file, $edd_args ),
|
213 |
+
'options' => $option_keys,
|
214 |
+
'url' => $store_url,
|
215 |
+
'item' => $edd_args['item_name']
|
216 |
+
);
|
217 |
+
|
218 |
+
}
|
219 |
+
|
220 |
+
}
|
221 |
+
|
222 |
+
/**
|
223 |
+
* Adds the menu page to the WordPress admin if there is at least 1 extension registered.
|
224 |
+
*
|
225 |
+
* @since 1.0.0
|
226 |
+
*/
|
227 |
+
public function add_license_page() {
|
228 |
+
|
229 |
+
if( !empty( $this->extensions ) ) {
|
230 |
+
$this->hook = call_user_func_array( "add_{$this->page_type}_page", $this->parse_page_args() );
|
231 |
+
}
|
232 |
+
|
233 |
+
}
|
234 |
+
|
235 |
+
/**
|
236 |
+
* Registers license options with the Settings API and configures their sanitize callback.
|
237 |
+
*
|
238 |
+
* @since 1.0.0
|
239 |
+
*/
|
240 |
+
public function register_settings() {
|
241 |
+
|
242 |
+
foreach( $this->extensions as $extension ) {
|
243 |
+
|
244 |
+
$args = array(
|
245 |
+
'type' => 'string',
|
246 |
+
'sanitize_callback' => function ( $new ) use ( $extension ) {
|
247 |
+
|
248 |
+
if ( $new != get_option( $extension['options']['license'] ) ) {
|
249 |
+
delete_option( $extension['options']['status'] );
|
250 |
+
delete_option( $extension['options']['expiration'] );
|
251 |
+
}
|
252 |
+
|
253 |
+
return $new;
|
254 |
+
|
255 |
+
}
|
256 |
+
);
|
257 |
+
|
258 |
+
register_setting( "{$this->id}_extensions", $extension['options']['license'], $args );
|
259 |
+
}
|
260 |
+
|
261 |
+
}
|
262 |
+
|
263 |
+
/**
|
264 |
+
* Converts and organizes the associative $page_args array to a numerically indexed array for use with
|
265 |
+
* add_{type}_page().
|
266 |
+
*
|
267 |
+
* @since 1.0.0
|
268 |
+
* @return array The converted array.
|
269 |
+
*/
|
270 |
+
private function parse_page_args() {
|
271 |
+
|
272 |
+
$page_args = array();
|
273 |
+
|
274 |
+
if( $this->page_type == 'submenu' ) {
|
275 |
+
$page_args[] = $this->page_args['parent_slug'];
|
276 |
+
}
|
277 |
+
|
278 |
+
$common_args = array(
|
279 |
+
'page_title',
|
280 |
+
'menu_title',
|
281 |
+
'capability',
|
282 |
+
'menu_slug'
|
283 |
+
);
|
284 |
+
|
285 |
+
foreach( $common_args as $arg ) {
|
286 |
+
if( isset( $this->page_args[ $arg ] ) ) {
|
287 |
+
$page_args[] = $this->page_args[ $arg ];
|
288 |
+
}
|
289 |
+
}
|
290 |
+
|
291 |
+
$page_args[] = array( $this, 'do_license_page' );
|
292 |
+
|
293 |
+
if( $this->page_type == 'menu_page' ) {
|
294 |
+
$page_args[] = !empty( $this->page_args['icon_url'] ) ? $this->page_args['icon_url'] : '';
|
295 |
+
$page_args[] = !empty( $this->page_args['position'] ) ? $this->page_args['position'] : null;
|
296 |
+
}
|
297 |
+
|
298 |
+
return $page_args;
|
299 |
+
|
300 |
+
}
|
301 |
+
|
302 |
+
/**
|
303 |
+
* Handler for extension activation requests.
|
304 |
+
*
|
305 |
+
* @since 1.0.0
|
306 |
+
*/
|
307 |
+
public function activate_license() {
|
308 |
+
|
309 |
+
if ( isset( $_POST["{$this->id}_activate_license"] ) &&
|
310 |
+
check_admin_referer( "{$this->id}_license_activation", $_POST["{$this->id}_activate_license"] . '_activation_nonce' ) ) {
|
311 |
+
|
312 |
+
if ( !array_key_exists( $_POST["{$this->id}_activate_license"], $this->extensions ) ) {
|
313 |
+
return;
|
314 |
+
}
|
315 |
+
|
316 |
+
$extension = $this->extensions[ $_POST["{$this->id}_activate_license"] ];
|
317 |
+
|
318 |
+
$api_params = array(
|
319 |
+
'edd_action' => 'activate_license',
|
320 |
+
'license' => get_option( $extension['options']['license'] ),
|
321 |
+
'item_name' => urlencode( $extension['item'] ),
|
322 |
+
'url' => home_url()
|
323 |
+
);
|
324 |
+
|
325 |
+
$request = array(
|
326 |
+
'timeout' => 15,
|
327 |
+
'sslverify' => false,
|
328 |
+
'body' => $api_params
|
329 |
+
);
|
330 |
+
|
331 |
+
$response = wp_remote_post( $extension['url'], $request );
|
332 |
+
|
333 |
+
if ( is_wp_error( $response ) || 200 !== wp_remote_retrieve_response_code( $response ) ) {
|
334 |
+
|
335 |
+
if ( is_wp_error( $response ) ) {
|
336 |
+
$message = $response->get_error_message();
|
337 |
+
} else {
|
338 |
+
$message = __( 'An error occurred, please try again.' );
|
339 |
+
}
|
340 |
+
|
341 |
+
} else {
|
342 |
+
|
343 |
+
$license_data = json_decode( wp_remote_retrieve_body( $response ), true );
|
344 |
+
|
345 |
+
if ( false === $license_data['success'] ) {
|
346 |
+
|
347 |
+
switch( $license_data['error'] ) {
|
348 |
+
|
349 |
+
case 'expired' :
|
350 |
+
$message = sprintf(
|
351 |
+
__( 'Your license key expired on %s.' ),
|
352 |
+
date_i18n( get_option( 'date_format' ), strtotime( $license_data['expires'], current_time( 'timestamp' ) ) )
|
353 |
+
);
|
354 |
+
|
355 |
+
break;
|
356 |
+
|
357 |
+
case 'revoked' :
|
358 |
+
$message = __( 'Your license key has been disabled.' );
|
359 |
+
|
360 |
+
break;
|
361 |
+
|
362 |
+
case 'missing' :
|
363 |
+
$message = __( 'Invalid license.' );
|
364 |
+
|
365 |
+
break;
|
366 |
+
|
367 |
+
case 'invalid' :
|
368 |
+
case 'site_inactive' :
|
369 |
+
$message = __( 'Your license is not active for this URL.' );
|
370 |
+
|
371 |
+
break;
|
372 |
+
|
373 |
+
case 'item_name_mismatch' :
|
374 |
+
$message = sprintf( __( 'This appears to be an invalid license key for %s.' ), $extension['item'] );
|
375 |
+
|
376 |
+
break;
|
377 |
+
|
378 |
+
case 'no_activations_left':
|
379 |
+
$message = __( 'Your license key has reached its activation limit.' );
|
380 |
+
|
381 |
+
break;
|
382 |
+
|
383 |
+
default :
|
384 |
+
$message = __( 'An error occurred, please try again.' );
|
385 |
+
|
386 |
+
break;
|
387 |
+
}
|
388 |
+
|
389 |
+
}
|
390 |
+
|
391 |
+
if( $license_data['license'] === 'valid' ) {
|
392 |
+
|
393 |
+
update_option( $extension['options']['status'], $license_data['license'] );
|
394 |
+
update_option( $extension['options']['expiration'], $license_data['expires'] );
|
395 |
+
|
396 |
+
$this->clear_expiration_notice( $_POST["{$this->id}_activate_license"] );
|
397 |
+
|
398 |
+
}
|
399 |
+
|
400 |
+
}
|
401 |
+
|
402 |
+
if ( !empty( $message ) ) {
|
403 |
+
add_settings_error( "{$this->id}_extensions", 'activation-error', $message );
|
404 |
+
}
|
405 |
+
|
406 |
+
}
|
407 |
+
}
|
408 |
+
|
409 |
+
/**
|
410 |
+
* Handler for deactivation requests.
|
411 |
+
*
|
412 |
+
* @since 1.0.0
|
413 |
+
*/
|
414 |
+
public function deactivate_license() {
|
415 |
+
|
416 |
+
if ( isset( $_POST["{$this->id}_deactivate_license"] ) &&
|
417 |
+
check_admin_referer( "{$this->id}_license_deactivation", $_POST["{$this->id}_deactivate_license"] . '_deactivation_nonce' ) ) {
|
418 |
+
|
419 |
+
if ( !array_key_exists( $_POST["{$this->id}_deactivate_license"], $this->extensions ) ) {
|
420 |
+
return;
|
421 |
+
}
|
422 |
+
|
423 |
+
$extension = $this->extensions[ $_POST["{$this->id}_deactivate_license"] ];
|
424 |
+
|
425 |
+
$api_params = array(
|
426 |
+
'edd_action' => 'deactivate_license',
|
427 |
+
'license' => get_option( $extension['options']['license'] ),
|
428 |
+
'item_name' => urlencode( $extension['item'] ),
|
429 |
+
'url' => home_url()
|
430 |
+
);
|
431 |
+
|
432 |
+
$request = array(
|
433 |
+
'timeout' => 15,
|
434 |
+
'sslverify' => false,
|
435 |
+
'body' => $api_params
|
436 |
+
);
|
437 |
+
|
438 |
+
$response = wp_remote_post( $extension['url'], $request );
|
439 |
+
|
440 |
+
if ( is_wp_error( $response ) || 200 !== wp_remote_retrieve_response_code( $response ) ) {
|
441 |
+
|
442 |
+
if ( is_wp_error( $response ) ) {
|
443 |
+
$message = $response->get_error_message();
|
444 |
+
} else {
|
445 |
+
$message = __( 'An error occurred, please try again.' );
|
446 |
+
}
|
447 |
+
|
448 |
+
add_settings_error( "{$this->id}_extensions", 'deactivation-error', $message );
|
449 |
+
|
450 |
+
} else {
|
451 |
+
|
452 |
+
$license_data = json_decode( wp_remote_retrieve_body( $response ), true );
|
453 |
+
|
454 |
+
if( $license_data['license'] == 'deactivated' ) {
|
455 |
+
delete_option( $extension['options']['status'] );
|
456 |
+
delete_option( $extension['options']['expiration'] );
|
457 |
+
}
|
458 |
+
|
459 |
+
}
|
460 |
+
|
461 |
+
}
|
462 |
+
|
463 |
+
}
|
464 |
+
|
465 |
+
/**
|
466 |
+
* Retrieves the license data for an extension.
|
467 |
+
*
|
468 |
+
* @param string $id The ID of the extension.
|
469 |
+
* @return array|bool|mixed|object
|
470 |
+
* @since 1.0.0
|
471 |
+
*/
|
472 |
+
public function get_license_data( $id ) {
|
473 |
+
|
474 |
+
if( array_key_exists( $id, $this->extensions ) ) {
|
475 |
+
|
476 |
+
$extension = $this->extensions[ $id ];
|
477 |
+
|
478 |
+
$license = trim( get_option( $extension['options']['license'] ) );
|
479 |
+
|
480 |
+
$api_params = array(
|
481 |
+
'edd_action' => 'check_license',
|
482 |
+
'license' => $license,
|
483 |
+
'item_name' => urlencode( $extension['item'] ),
|
484 |
+
'url' => home_url()
|
485 |
+
);
|
486 |
+
|
487 |
+
$request = array(
|
488 |
+
'timeout' => 15,
|
489 |
+
'sslverify' => false,
|
490 |
+
'body' => $api_params
|
491 |
+
);
|
492 |
+
|
493 |
+
$response = wp_remote_post( $extension['url'], $request );
|
494 |
+
|
495 |
+
if ( is_wp_error( $response ) ) {
|
496 |
+
return false;
|
497 |
+
}
|
498 |
+
|
499 |
+
return json_decode( wp_remote_retrieve_body( $response ), true );
|
500 |
+
}
|
501 |
+
|
502 |
+
return false;
|
503 |
+
|
504 |
+
}
|
505 |
+
|
506 |
+
/**
|
507 |
+
* Clears the expiration notification of an extension.
|
508 |
+
*
|
509 |
+
* @param string $id The ID of the extension.
|
510 |
+
* @since 1.0.0
|
511 |
+
*/
|
512 |
+
public function clear_expiration_notice( $id ) {
|
513 |
+
|
514 |
+
$notices = get_option( "{$this->id}-extension-notices", array() );
|
515 |
+
|
516 |
+
if( in_array( $id, $notices ) ) {
|
517 |
+
unset( $notices[ array_search( $id, $notices ) ] );
|
518 |
+
}
|
519 |
+
|
520 |
+
update_option( "{$this->id}-extension-notices", $notices );
|
521 |
+
|
522 |
+
}
|
523 |
+
|
524 |
+
/**
|
525 |
+
* Outputs the license management page.
|
526 |
+
*
|
527 |
+
* @since 1.0.0
|
528 |
+
*/
|
529 |
+
public function do_license_page() {
|
530 |
+
|
531 |
+
settings_errors( "{$this->id}_extensions" ); ?>
|
532 |
+
|
533 |
+
<div class="wrap <?php esc_attr_e( "{$this->id}-licenses" ); ?> license-activation-page">
|
534 |
+
|
535 |
+
<h2><?php _e( $this->page_args['page_title'] ); ?></h2>
|
536 |
+
|
537 |
+
<form method="post" action="options.php">
|
538 |
+
|
539 |
+
<?php foreach ( $this->extensions as $id => $extension ) : ?>
|
540 |
+
|
541 |
+
<?php $this->do_license_field( $id, $extension ); ?>
|
542 |
+
|
543 |
+
<?php endforeach; ?>
|
544 |
+
|
545 |
+
<?php settings_fields( "{$this->id}_extensions" ); ?>
|
546 |
+
|
547 |
+
<div class="clear"></div>
|
548 |
+
|
549 |
+
<?php submit_button(); ?>
|
550 |
+
|
551 |
+
</form>
|
552 |
+
|
553 |
+
</div>
|
554 |
+
|
555 |
+
<?php }
|
556 |
+
|
557 |
+
/**
|
558 |
+
* Outputs a license management field for an extension.
|
559 |
+
*
|
560 |
+
* @param string $id The ID of the extension.
|
561 |
+
* @param array $extension The extension data.
|
562 |
+
* @since 1.0.0
|
563 |
+
*/
|
564 |
+
public function do_license_field( $id, $extension ) {
|
565 |
+
|
566 |
+
$key = get_option( $extension['options']['license'] );
|
567 |
+
$exp = get_option( $extension['options']['expiration'] );
|
568 |
+
$status = get_option( $extension['options']['status'] );
|
569 |
+
|
570 |
+
?>
|
571 |
+
|
572 |
+
<div class="license-activation">
|
573 |
+
|
574 |
+
<div class="inner">
|
575 |
+
|
576 |
+
<h3><?php echo $extension['item']; ?></h3>
|
577 |
+
|
578 |
+
<p>
|
579 |
+
|
580 |
+
<input class="license-key"
|
581 |
+
type="text"
|
582 |
+
name="<?php esc_attr_e( $extension['options']['license'] ); ?>"
|
583 |
+
value="<?php esc_attr_e( $key ); ?>" />
|
584 |
+
|
585 |
+
<?php if( !empty( $key ) ) : ?>
|
586 |
+
|
587 |
+
<?php if( $status === 'valid' ) : ?>
|
588 |
+
|
589 |
+
<button class="button button-secondary"
|
590 |
+
type="submit"
|
591 |
+
name="<?php esc_attr_e( "{$this->id}_deactivate_license" ); ?>"
|
592 |
+
value="<?php esc_attr_e( $id ); ?>"><?php _e( 'Deactivate License' ); ?></button>
|
593 |
+
|
594 |
+
<?php wp_nonce_field( "{$this->id}_license_deactivation", "{$id}_deactivation_nonce" ); ?>
|
595 |
+
|
596 |
+
<?php else : ?>
|
597 |
+
|
598 |
+
<button class="button button-secondary"
|
599 |
+
type="submit"
|
600 |
+
name="<?php esc_attr_e( "{$this->id}_activate_license" ); ?>"
|
601 |
+
value="<?php esc_attr_e( $id ); ?>"><?php _e( 'Activate License' ); ?></button>
|
602 |
+
|
603 |
+
|
604 |
+
<?php wp_nonce_field( "{$this->id}_license_activation", "{$id}_activation_nonce" ); ?>
|
605 |
+
|
606 |
+
<?php endif; ?>
|
607 |
+
|
608 |
+
<?php else : ?>
|
609 |
+
|
610 |
+
<span class="description"><?php _e( 'Please enter your license key' ); ?></span>
|
611 |
+
|
612 |
+
<?php endif; ?>
|
613 |
+
|
614 |
+
</p>
|
615 |
+
|
616 |
+
<?php if( $exp ) : ?>
|
617 |
+
|
618 |
+
<div class="license-expiration">
|
619 |
+
|
620 |
+
<?php if( $exp !== 'lifetime' ) : ?>
|
621 |
+
|
622 |
+
<?php echo __( 'Your license key expires on ' ) . date_i18n( get_option( 'date_format' ), strtotime( $exp, current_time( 'timestamp' ) ) ); ?>
|
623 |
+
|
624 |
+
<?php else : ?>
|
625 |
+
|
626 |
+
<?php _e( 'This is a lifetime licence' ); ?>
|
627 |
+
|
628 |
+
<?php endif; ?>
|
629 |
+
|
630 |
+
</div>
|
631 |
+
|
632 |
+
<?php endif; ?>
|
633 |
+
|
634 |
+
</div>
|
635 |
+
|
636 |
+
</div>
|
637 |
+
|
638 |
+
|
639 |
+
<?php }
|
640 |
+
|
641 |
+
|
642 |
+
/**
|
643 |
+
* Print default styles for license page.
|
644 |
+
*
|
645 |
+
* @since 1.0.0
|
646 |
+
*/
|
647 |
+
public function print_styles() {
|
648 |
+
|
649 |
+
if( $this->is_license_page() ) : ?>
|
650 |
+
|
651 |
+
<style id="<?php esc_attr_e( "{$this->id}-license-management-styles" ); ?>">
|
652 |
+
|
653 |
+
.license-activation-page .submit {
|
654 |
+
margin-top: 0;
|
655 |
+
}
|
656 |
+
|
657 |
+
.license-activation {
|
658 |
+
background: #fff;
|
659 |
+
border: 1px solid #ddd;
|
660 |
+
margin: 10px 0;
|
661 |
+
}
|
662 |
+
|
663 |
+
.license-activation h3 {
|
664 |
+
margin: 0;
|
665 |
+
padding: 10px;
|
666 |
+
background: #f9f9f9;
|
667 |
+
border-bottom: 1px solid #ddd;
|
668 |
+
}
|
669 |
+
|
670 |
+
.license-activation p {
|
671 |
+
margin: 10px;
|
672 |
+
}
|
673 |
+
|
674 |
+
.license-activation .description {
|
675 |
+
margin-top: 5px;
|
676 |
+
display: block;
|
677 |
+
}
|
678 |
+
|
679 |
+
.license-activation input {
|
680 |
+
width: 100%;
|
681 |
+
}
|
682 |
+
|
683 |
+
.license-activation .button {
|
684 |
+
margin: 5px 0 !important;
|
685 |
+
width: 100%;
|
686 |
+
}
|
687 |
+
|
688 |
+
.license-activation .license-expiration {
|
689 |
+
padding: 10px 10px 20px 10px;
|
690 |
+
border-top: 1px solid #ddd;
|
691 |
+
}
|
692 |
+
|
693 |
+
@media( min-width: 600px ) {
|
694 |
+
|
695 |
+
.license-activation .button {
|
696 |
+
width: inherit;
|
697 |
+
}
|
698 |
+
|
699 |
+
}
|
700 |
+
|
701 |
+
@media( min-width: 783px ) {
|
702 |
+
|
703 |
+
.license-activation {
|
704 |
+
width: 30%;
|
705 |
+
float: left;
|
706 |
+
margin-right: 10px;
|
707 |
+
}
|
708 |
+
|
709 |
+
}
|
710 |
+
|
711 |
+
</style>
|
712 |
+
|
713 |
+
<?php endif;
|
714 |
+
|
715 |
+
}
|
716 |
+
|
717 |
+
}
|
718 |
+
|
719 |
+
|
720 |
+
endif;
|
721 |
+
|
722 |
+
|
723 |
+
/**
|
724 |
+
* Allows plugins to use their own update API.
|
725 |
+
*
|
726 |
+
* @author Easy Digital Downloads
|
727 |
+
* @version 1.6.12
|
728 |
+
*/
|
729 |
+
if( !class_exists( 'EDD_SL_Plugin_Updater' ) ) :
|
730 |
+
|
731 |
+
class EDD_SL_Plugin_Updater {
|
732 |
+
|
733 |
+
private $api_url = '';
|
734 |
+
private $api_data = array();
|
735 |
+
private $name = '';
|
736 |
+
private $slug = '';
|
737 |
+
private $version = '';
|
738 |
+
private $wp_override = false;
|
739 |
+
private $cache_key = '';
|
740 |
+
|
741 |
+
/**
|
742 |
+
* Class constructor.
|
743 |
+
*
|
744 |
+
* @uses plugin_basename()
|
745 |
+
* @uses hook()
|
746 |
+
*
|
747 |
+
* @param string $_api_url The URL pointing to the custom API endpoint.
|
748 |
+
* @param string $_plugin_file Path to the plugin file.
|
749 |
+
* @param array $_api_data Optional data to send with API calls.
|
750 |
+
*/
|
751 |
+
public function __construct( $_api_url, $_plugin_file, $_api_data = null ) {
|
752 |
+
|
753 |
+
global $edd_plugin_data;
|
754 |
+
|
755 |
+
$this->api_url = trailingslashit( $_api_url );
|
756 |
+
$this->api_data = $_api_data;
|
757 |
+
$this->name = plugin_basename( $_plugin_file );
|
758 |
+
$this->slug = basename( $_plugin_file, '.php' );
|
759 |
+
$this->version = $_api_data['version'];
|
760 |
+
$this->wp_override = isset( $_api_data['wp_override'] ) ? (bool) $_api_data['wp_override'] : false;
|
761 |
+
$this->beta = ! empty( $this->api_data['beta'] ) ? true : false;
|
762 |
+
$this->cache_key = md5( serialize( $this->slug . $this->api_data['license'] . $this->beta ) );
|
763 |
+
|
764 |
+
$edd_plugin_data[ $this->slug ] = $this->api_data;
|
765 |
+
|
766 |
+
// Set up hooks.
|
767 |
+
$this->init();
|
768 |
+
|
769 |
+
}
|
770 |
+
|
771 |
+
/**
|
772 |
+
* Set up WordPress filters to hook into WP's update process.
|
773 |
+
*
|
774 |
+
* @uses add_filter()
|
775 |
+
*
|
776 |
+
* @return void
|
777 |
+
*/
|
778 |
+
public function init() {
|
779 |
+
|
780 |
+
add_filter( 'pre_set_site_transient_update_plugins', array( $this, 'check_update' ) );
|
781 |
+
add_filter( 'plugins_api', array( $this, 'plugins_api_filter' ), 10, 3 );
|
782 |
+
remove_action( 'after_plugin_row_' . $this->name, 'wp_plugin_update_row', 10 );
|
783 |
+
add_action( 'after_plugin_row_' . $this->name, array( $this, 'show_update_notification' ), 10, 2 );
|
784 |
+
add_action( 'admin_init', array( $this, 'show_changelog' ) );
|
785 |
+
|
786 |
+
}
|
787 |
+
|
788 |
+
/**
|
789 |
+
* Check for Updates at the defined API endpoint and modify the update array.
|
790 |
+
*
|
791 |
+
* This function dives into the update API just when WordPress creates its update array,
|
792 |
+
* then adds a custom API call and injects the custom plugin data retrieved from the API.
|
793 |
+
* It is reassembled from parts of the native WordPress plugin update code.
|
794 |
+
* See wp-includes/update.php line 121 for the original wp_update_plugins() function.
|
795 |
+
*
|
796 |
+
* @uses api_request()
|
797 |
+
*
|
798 |
+
* @param array $_transient_data Update array build by WordPress.
|
799 |
+
* @return array Modified update array with custom plugin data.
|
800 |
+
*/
|
801 |
+
public function check_update( $_transient_data ) {
|
802 |
+
|
803 |
+
global $pagenow;
|
804 |
+
|
805 |
+
if ( ! is_object( $_transient_data ) ) {
|
806 |
+
$_transient_data = new stdClass;
|
807 |
+
}
|
808 |
+
|
809 |
+
if ( 'plugins.php' == $pagenow && is_multisite() ) {
|
810 |
+
return $_transient_data;
|
811 |
+
}
|
812 |
+
|
813 |
+
if ( ! empty( $_transient_data->response ) && ! empty( $_transient_data->response[ $this->name ] ) && false === $this->wp_override ) {
|
814 |
+
return $_transient_data;
|
815 |
+
}
|
816 |
+
|
817 |
+
$version_info = $this->get_cached_version_info();
|
818 |
+
|
819 |
+
if ( false === $version_info ) {
|
820 |
+
$version_info = $this->api_request( 'plugin_latest_version', array( 'slug' => $this->slug, 'beta' => $this->beta ) );
|
821 |
+
|
822 |
+
$this->set_version_info_cache( $version_info );
|
823 |
+
|
824 |
+
}
|
825 |
+
|
826 |
+
if ( false !== $version_info && is_object( $version_info ) && isset( $version_info->new_version ) ) {
|
827 |
+
|
828 |
+
if ( version_compare( $this->version, $version_info->new_version, '<' ) ) {
|
829 |
+
|
830 |
+
$_transient_data->response[ $this->name ] = $version_info;
|
831 |
+
|
832 |
+
}
|
833 |
+
|
834 |
+
$_transient_data->last_checked = current_time( 'timestamp' );
|
835 |
+
$_transient_data->checked[ $this->name ] = $this->version;
|
836 |
+
|
837 |
+
}
|
838 |
+
|
839 |
+
return $_transient_data;
|
840 |
+
}
|
841 |
+
|
842 |
+
/**
|
843 |
+
* show update nofication row -- needed for multisite subsites, because WP won't tell you otherwise!
|
844 |
+
*
|
845 |
+
* @param string $file
|
846 |
+
* @param array $plugin
|
847 |
+
*/
|
848 |
+
public function show_update_notification( $file, $plugin ) {
|
849 |
+
|
850 |
+
if ( is_network_admin() ) {
|
851 |
+
return;
|
852 |
+
}
|
853 |
+
|
854 |
+
if( ! current_user_can( 'update_plugins' ) ) {
|
855 |
+
return;
|
856 |
+
}
|
857 |
+
|
858 |
+
if( ! is_multisite() ) {
|
859 |
+
return;
|
860 |
+
}
|
861 |
+
|
862 |
+
if ( $this->name != $file ) {
|
863 |
+
return;
|
864 |
+
}
|
865 |
+
|
866 |
+
// Remove our filter on the site transient
|
867 |
+
remove_filter( 'pre_set_site_transient_update_plugins', array( $this, 'check_update' ), 10 );
|
868 |
+
|
869 |
+
$update_cache = get_site_transient( 'update_plugins' );
|
870 |
+
|
871 |
+
$update_cache = is_object( $update_cache ) ? $update_cache : new stdClass();
|
872 |
+
|
873 |
+
if ( empty( $update_cache->response ) || empty( $update_cache->response[ $this->name ] ) ) {
|
874 |
+
|
875 |
+
$version_info = $this->get_cached_version_info();
|
876 |
+
|
877 |
+
if ( false === $version_info ) {
|
878 |
+
$version_info = $this->api_request( 'plugin_latest_version', array( 'slug' => $this->slug, 'beta' => $this->beta ) );
|
879 |
+
|
880 |
+
$this->set_version_info_cache( $version_info );
|
881 |
+
}
|
882 |
+
|
883 |
+
if ( ! is_object( $version_info ) ) {
|
884 |
+
return;
|
885 |
+
}
|
886 |
+
|
887 |
+
if ( version_compare( $this->version, $version_info->new_version, '<' ) ) {
|
888 |
+
|
889 |
+
$update_cache->response[ $this->name ] = $version_info;
|
890 |
+
|
891 |
+
}
|
892 |
+
|
893 |
+
$update_cache->last_checked = current_time( 'timestamp' );
|
894 |
+
$update_cache->checked[ $this->name ] = $this->version;
|
895 |
+
|
896 |
+
set_site_transient( 'update_plugins', $update_cache );
|
897 |
+
|
898 |
+
} else {
|
899 |
+
|
900 |
+
$version_info = $update_cache->response[ $this->name ];
|
901 |
+
|
902 |
+
}
|
903 |
+
|
904 |
+
// Restore our filter
|
905 |
+
add_filter( 'pre_set_site_transient_update_plugins', array( $this, 'check_update' ) );
|
906 |
+
|
907 |
+
if ( ! empty( $update_cache->response[ $this->name ] ) && version_compare( $this->version, $version_info->new_version, '<' ) ) {
|
908 |
+
|
909 |
+
// build a plugin list row, with update notification
|
910 |
+
$wp_list_table = _get_list_table( 'WP_Plugins_List_Table' );
|
911 |
+
# <tr class="plugin-update-tr"><td colspan="' . $wp_list_table->get_column_count() . '" class="plugin-update colspanchange">
|
912 |
+
echo '<tr class="plugin-update-tr" id="' . $this->slug . '-update" data-slug="' . $this->slug . '" data-plugin="' . $this->slug . '/' . $file . '">';
|
913 |
+
echo '<td colspan="3" class="plugin-update colspanchange">';
|
914 |
+
echo '<div class="update-message notice inline notice-warning notice-alt">';
|
915 |
+
|
916 |
+
$changelog_link = self_admin_url( 'index.php?edd_sl_action=view_plugin_changelog&plugin=' . $this->name . '&slug=' . $this->slug . '&TB_iframe=true&width=772&height=911' );
|
917 |
+
|
918 |
+
if ( empty( $version_info->download_link ) ) {
|
919 |
+
printf(
|
920 |
+
__( 'There is a new version of %1$s available. %2$sView version %3$s details%4$s.', 'easy-digital-downloads' ),
|
921 |
+
esc_html( $version_info->name ),
|
922 |
+
'<a target="_blank" class="thickbox" href="' . esc_url( $changelog_link ) . '">',
|
923 |
+
esc_html( $version_info->new_version ),
|
924 |
+
'</a>'
|
925 |
+
);
|
926 |
+
} else {
|
927 |
+
printf(
|
928 |
+
__( 'There is a new version of %1$s available. %2$sView version %3$s details%4$s or %5$supdate now%6$s.', 'easy-digital-downloads' ),
|
929 |
+
esc_html( $version_info->name ),
|
930 |
+
'<a target="_blank" class="thickbox" href="' . esc_url( $changelog_link ) . '">',
|
931 |
+
esc_html( $version_info->new_version ),
|
932 |
+
'</a>',
|
933 |
+
'<a href="' . esc_url( wp_nonce_url( self_admin_url( 'update.php?action=upgrade-plugin&plugin=' ) . $this->name, 'upgrade-plugin_' . $this->name ) ) .'">',
|
934 |
+
'</a>'
|
935 |
+
);
|
936 |
+
}
|
937 |
+
|
938 |
+
do_action( "in_plugin_update_message-{$file}", $plugin, $version_info );
|
939 |
+
|
940 |
+
echo '</div></td></tr>';
|
941 |
+
}
|
942 |
+
}
|
943 |
+
|
944 |
+
/**
|
945 |
+
* Updates information on the "View version x.x details" page with custom data.
|
946 |
+
*
|
947 |
+
* @uses api_request()
|
948 |
+
*
|
949 |
+
* @param mixed $_data
|
950 |
+
* @param string $_action
|
951 |
+
* @param object $_args
|
952 |
+
* @return object $_data
|
953 |
+
*/
|
954 |
+
public function plugins_api_filter( $_data, $_action = '', $_args = null ) {
|
955 |
+
|
956 |
+
if ( $_action != 'plugin_information' ) {
|
957 |
+
|
958 |
+
return $_data;
|
959 |
+
|
960 |
+
}
|
961 |
+
|
962 |
+
if ( ! isset( $_args->slug ) || ( $_args->slug != $this->slug ) ) {
|
963 |
+
|
964 |
+
return $_data;
|
965 |
+
|
966 |
+
}
|
967 |
+
|
968 |
+
$to_send = array(
|
969 |
+
'slug' => $this->slug,
|
970 |
+
'is_ssl' => is_ssl(),
|
971 |
+
'fields' => array(
|
972 |
+
'banners' => array(),
|
973 |
+
'reviews' => false
|
974 |
+
)
|
975 |
+
);
|
976 |
+
|
977 |
+
$cache_key = 'edd_api_request_' . md5( serialize( $this->slug . $this->api_data['license'] . $this->beta ) );
|
978 |
+
|
979 |
+
// Get the transient where we store the api request for this plugin for 24 hours
|
980 |
+
$edd_api_request_transient = $this->get_cached_version_info( $cache_key );
|
981 |
+
|
982 |
+
//If we have no transient-saved value, run the API, set a fresh transient with the API value, and return that value too right now.
|
983 |
+
if ( empty( $edd_api_request_transient ) ) {
|
984 |
+
|
985 |
+
$api_response = $this->api_request( 'plugin_information', $to_send );
|
986 |
+
|
987 |
+
// Expires in 3 hours
|
988 |
+
$this->set_version_info_cache( $api_response, $cache_key );
|
989 |
+
|
990 |
+
if ( false !== $api_response ) {
|
991 |
+
$_data = $api_response;
|
992 |
+
}
|
993 |
+
|
994 |
+
} else {
|
995 |
+
$_data = $edd_api_request_transient;
|
996 |
+
}
|
997 |
+
|
998 |
+
// Convert sections into an associative array, since we're getting an object, but Core expects an array.
|
999 |
+
if ( isset( $_data->sections ) && ! is_array( $_data->sections ) ) {
|
1000 |
+
$new_sections = array();
|
1001 |
+
foreach ( $_data->sections as $key => $value ) {
|
1002 |
+
$new_sections[ $key ] = $value;
|
1003 |
+
}
|
1004 |
+
|
1005 |
+
$_data->sections = $new_sections;
|
1006 |
+
}
|
1007 |
+
|
1008 |
+
// Convert banners into an associative array, since we're getting an object, but Core expects an array.
|
1009 |
+
if ( isset( $_data->banners ) && ! is_array( $_data->banners ) ) {
|
1010 |
+
$new_banners = array();
|
1011 |
+
foreach ( $_data->banners as $key => $value ) {
|
1012 |
+
$new_banners[ $key ] = $value;
|
1013 |
+
}
|
1014 |
+
|
1015 |
+
$_data->banners = $new_banners;
|
1016 |
+
}
|
1017 |
+
|
1018 |
+
return $_data;
|
1019 |
+
}
|
1020 |
+
|
1021 |
+
/**
|
1022 |
+
* Disable SSL verification in order to prevent download update failures
|
1023 |
+
*
|
1024 |
+
* @param array $args
|
1025 |
+
* @param string $url
|
1026 |
+
* @return object $array
|
1027 |
+
*/
|
1028 |
+
public function http_request_args( $args, $url ) {
|
1029 |
+
// If it is an https request and we are performing a package download, disable ssl verification
|
1030 |
+
if ( strpos( $url, 'https://' ) !== false && strpos( $url, 'edd_action=package_download' ) ) {
|
1031 |
+
$args['sslverify'] = false;
|
1032 |
+
}
|
1033 |
+
return $args;
|
1034 |
+
}
|
1035 |
+
|
1036 |
+
/**
|
1037 |
+
* Calls the API and, if successfull, returns the object delivered by the API.
|
1038 |
+
*
|
1039 |
+
* @uses get_bloginfo()
|
1040 |
+
* @uses wp_remote_post()
|
1041 |
+
* @uses is_wp_error()
|
1042 |
+
*
|
1043 |
+
* @param string $_action The requested action.
|
1044 |
+
* @param array $_data Parameters for the API action.
|
1045 |
+
* @return false|object
|
1046 |
+
*/
|
1047 |
+
private function api_request( $_action, $_data ) {
|
1048 |
+
|
1049 |
+
global $wp_version;
|
1050 |
+
|
1051 |
+
$data = array_merge( $this->api_data, $_data );
|
1052 |
+
|
1053 |
+
if ( $data['slug'] != $this->slug ) {
|
1054 |
+
return;
|
1055 |
+
}
|
1056 |
+
|
1057 |
+
if( $this->api_url == trailingslashit (home_url() ) ) {
|
1058 |
+
return false; // Don't allow a plugin to ping itself
|
1059 |
+
}
|
1060 |
+
|
1061 |
+
$api_params = array(
|
1062 |
+
'edd_action' => 'get_version',
|
1063 |
+
'license' => ! empty( $data['license'] ) ? $data['license'] : '',
|
1064 |
+
'item_name' => isset( $data['item_name'] ) ? $data['item_name'] : false,
|
1065 |
+
'item_id' => isset( $data['item_id'] ) ? $data['item_id'] : false,
|
1066 |
+
'version' => isset( $data['version'] ) ? $data['version'] : false,
|
1067 |
+
'slug' => $data['slug'],
|
1068 |
+
'author' => $data['author'],
|
1069 |
+
'url' => home_url(),
|
1070 |
+
'beta' => ! empty( $data['beta'] ),
|
1071 |
+
);
|
1072 |
+
|
1073 |
+
$request = wp_remote_post( $this->api_url, array( 'timeout' => 15, 'sslverify' => false, 'body' => $api_params ) );
|
1074 |
+
|
1075 |
+
if ( ! is_wp_error( $request ) ) {
|
1076 |
+
$request = json_decode( wp_remote_retrieve_body( $request ) );
|
1077 |
+
}
|
1078 |
+
|
1079 |
+
if ( $request && isset( $request->sections ) ) {
|
1080 |
+
$request->sections = maybe_unserialize( $request->sections );
|
1081 |
+
} else {
|
1082 |
+
$request = false;
|
1083 |
+
}
|
1084 |
+
|
1085 |
+
if ( $request && isset( $request->banners ) ) {
|
1086 |
+
$request->banners = maybe_unserialize( $request->banners );
|
1087 |
+
}
|
1088 |
+
|
1089 |
+
if( ! empty( $request->sections ) ) {
|
1090 |
+
foreach( $request->sections as $key => $section ) {
|
1091 |
+
$request->$key = (array) $section;
|
1092 |
+
}
|
1093 |
+
}
|
1094 |
+
|
1095 |
+
return $request;
|
1096 |
+
}
|
1097 |
+
|
1098 |
+
public function show_changelog() {
|
1099 |
+
|
1100 |
+
global $edd_plugin_data;
|
1101 |
+
|
1102 |
+
if( empty( $_REQUEST['edd_sl_action'] ) || 'view_plugin_changelog' != $_REQUEST['edd_sl_action'] ) {
|
1103 |
+
return;
|
1104 |
+
}
|
1105 |
+
|
1106 |
+
if( empty( $_REQUEST['plugin'] ) ) {
|
1107 |
+
return;
|
1108 |
+
}
|
1109 |
+
|
1110 |
+
if( empty( $_REQUEST['slug'] ) ) {
|
1111 |
+
return;
|
1112 |
+
}
|
1113 |
+
|
1114 |
+
if( ! current_user_can( 'update_plugins' ) ) {
|
1115 |
+
wp_die( __( 'You do not have permission to install plugin updates', 'easy-digital-downloads' ), __( 'Error', 'easy-digital-downloads' ), array( 'response' => 403 ) );
|
1116 |
+
}
|
1117 |
+
|
1118 |
+
$data = $edd_plugin_data[ $_REQUEST['slug'] ];
|
1119 |
+
$beta = ! empty( $data['beta'] ) ? true : false;
|
1120 |
+
$cache_key = md5( 'edd_plugin_' . sanitize_key( $_REQUEST['plugin'] ) . '_' . $beta . '_version_info' );
|
1121 |
+
$version_info = $this->get_cached_version_info( $cache_key );
|
1122 |
+
|
1123 |
+
if( false === $version_info ) {
|
1124 |
+
|
1125 |
+
$api_params = array(
|
1126 |
+
'edd_action' => 'get_version',
|
1127 |
+
'item_name' => isset( $data['item_name'] ) ? $data['item_name'] : false,
|
1128 |
+
'item_id' => isset( $data['item_id'] ) ? $data['item_id'] : false,
|
1129 |
+
'slug' => $_REQUEST['slug'],
|
1130 |
+
'author' => $data['author'],
|
1131 |
+
'url' => home_url(),
|
1132 |
+
'beta' => ! empty( $data['beta'] )
|
1133 |
+
);
|
1134 |
+
|
1135 |
+
$request = wp_remote_post( $this->api_url, array( 'timeout' => 15, 'sslverify' => false, 'body' => $api_params ) );
|
1136 |
+
|
1137 |
+
if ( ! is_wp_error( $request ) ) {
|
1138 |
+
$version_info = json_decode( wp_remote_retrieve_body( $request ) );
|
1139 |
+
}
|
1140 |
+
|
1141 |
+
|
1142 |
+
if ( ! empty( $version_info ) && isset( $version_info->sections ) ) {
|
1143 |
+
$version_info->sections = maybe_unserialize( $version_info->sections );
|
1144 |
+
} else {
|
1145 |
+
$version_info = false;
|
1146 |
+
}
|
1147 |
+
|
1148 |
+
if( ! empty( $version_info ) ) {
|
1149 |
+
foreach( $version_info->sections as $key => $section ) {
|
1150 |
+
$version_info->$key = (array) $section;
|
1151 |
+
}
|
1152 |
+
}
|
1153 |
+
|
1154 |
+
$this->set_version_info_cache( $version_info, $cache_key );
|
1155 |
+
|
1156 |
+
}
|
1157 |
+
|
1158 |
+
if( ! empty( $version_info ) && isset( $version_info->sections['changelog'] ) ) {
|
1159 |
+
echo '<div style="background:#fff;padding:10px;">' . $version_info->sections['changelog'] . '</div>';
|
1160 |
+
}
|
1161 |
+
|
1162 |
+
exit;
|
1163 |
+
}
|
1164 |
+
|
1165 |
+
public function get_cached_version_info( $cache_key = '' ) {
|
1166 |
+
|
1167 |
+
if( empty( $cache_key ) ) {
|
1168 |
+
$cache_key = $this->cache_key;
|
1169 |
+
}
|
1170 |
+
|
1171 |
+
$cache = get_option( $cache_key );
|
1172 |
+
|
1173 |
+
if( empty( $cache['timeout'] ) || current_time( 'timestamp' ) > $cache['timeout'] ) {
|
1174 |
+
return false; // Cache is expired
|
1175 |
+
}
|
1176 |
+
|
1177 |
+
return json_decode( $cache['value'] );
|
1178 |
+
|
1179 |
+
}
|
1180 |
+
|
1181 |
+
public function set_version_info_cache( $value = '', $cache_key = '' ) {
|
1182 |
+
|
1183 |
+
if( empty( $cache_key ) ) {
|
1184 |
+
$cache_key = $this->cache_key;
|
1185 |
+
}
|
1186 |
+
|
1187 |
+
$data = array(
|
1188 |
+
'timeout' => strtotime( '+3 hours', current_time( 'timestamp' ) ),
|
1189 |
+
'value' => json_encode( $value )
|
1190 |
+
);
|
1191 |
+
|
1192 |
+
update_option( $cache_key, $data );
|
1193 |
+
|
1194 |
+
}
|
1195 |
+
|
1196 |
+
}
|
1197 |
+
|
1198 |
+
endif;
|
includes/functions.php
ADDED
@@ -0,0 +1,290 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ots;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* Return the team members in their correct order.
|
7 |
+
*
|
8 |
+
* @param bool $limit The limit for the number of members to return.
|
9 |
+
* @param string|bool $group The category that the team members should belong to.
|
10 |
+
* @return \WP_Query The team member's query.
|
11 |
+
* @since 4.0.0
|
12 |
+
*/
|
13 |
+
function get_members_in_order( $limit = null, $group = false ) {
|
14 |
+
|
15 |
+
if ( is_null( $limit ) ) {
|
16 |
+
|
17 |
+
$limit = get_option( Options::DISPLAY_LIMIT );
|
18 |
+
|
19 |
+
}
|
20 |
+
|
21 |
+
|
22 |
+
$args = array(
|
23 |
+
'post_type' => 'team_member',
|
24 |
+
'posts_per_page' => empty( $limit ) || strtolower( $limit == 'all' ) ? -1 : $limit,
|
25 |
+
'meta_key' => 'sc_member_order',
|
26 |
+
'orderby' => 'meta_value_num',
|
27 |
+
'order' => 'ASC',
|
28 |
+
);
|
29 |
+
|
30 |
+
if( !empty( $group ) ) {
|
31 |
+
|
32 |
+
$args['tax_query'][] = array(
|
33 |
+
'taxonomy' => 'team_member_position',
|
34 |
+
'field' => intval( $group ) > 0 ? 'term_id' : 'name',
|
35 |
+
'terms' => $group
|
36 |
+
);
|
37 |
+
|
38 |
+
}
|
39 |
+
|
40 |
+
return new \WP_Query( $args );
|
41 |
+
|
42 |
+
}
|
43 |
+
|
44 |
+
|
45 |
+
/**
|
46 |
+
* Returns the link to a member's avatar or a generic default if one is not set.
|
47 |
+
*
|
48 |
+
* @param int|\WP_Post|null $member The team member.
|
49 |
+
* @param string $size The size of the thumbnail.
|
50 |
+
* @return string The URL of the avatar image.
|
51 |
+
* @since 4.0.0
|
52 |
+
*/
|
53 |
+
function get_member_avatar( $member = null, $size = 'post-thumbnail' ) {
|
54 |
+
|
55 |
+
$url = get_the_post_thumbnail_url( $member, $size );
|
56 |
+
|
57 |
+
if( !$url ) {
|
58 |
+
$url = asset( 'images/default-avatar.png' );
|
59 |
+
}
|
60 |
+
|
61 |
+
return apply_filters( 'ots_member_avatar', $url, $member );
|
62 |
+
|
63 |
+
}
|
64 |
+
|
65 |
+
|
66 |
+
/**
|
67 |
+
* Outputs a member's avatar as a post thumbnail
|
68 |
+
*
|
69 |
+
* @param int|\WP_Post|null $member The team member.
|
70 |
+
* @param string|array $size The size of the thumbnail, can be array( width, height ).
|
71 |
+
* @since 4.0.0
|
72 |
+
*/
|
73 |
+
function member_avatar( $member = null, $size = 'post_thumbnail' ) {
|
74 |
+
|
75 |
+
if( has_post_thumbnail( $member ) ) {
|
76 |
+
the_post_thumbnail( $size );
|
77 |
+
} else {
|
78 |
+
|
79 |
+
$img = '<img src="%s" class="attachment-medium wp-post-image" width="%s" height="%s" />';
|
80 |
+
|
81 |
+
printf( $img, asset( 'images/default-avatar.png' ),
|
82 |
+
is_array( $size ) ? $size[0] : '',
|
83 |
+
is_array( $size ) ? $size[1] : ''
|
84 |
+
);
|
85 |
+
|
86 |
+
}
|
87 |
+
|
88 |
+
}
|
89 |
+
|
90 |
+
|
91 |
+
/**
|
92 |
+
* Sanitizes the display limit setting.
|
93 |
+
*
|
94 |
+
* @private
|
95 |
+
* @param $value
|
96 |
+
* @return int
|
97 |
+
* @since 4.0.0
|
98 |
+
*/
|
99 |
+
function sanitize_display_limit( $value ) {
|
100 |
+
|
101 |
+
if( $value === 'all' || is_null( $value ) ) {
|
102 |
+
return $value;
|
103 |
+
} else if( intval( $value ) < 1 ) {
|
104 |
+
return get_option( Options::DISPLAY_LIMIT );
|
105 |
+
}
|
106 |
+
|
107 |
+
return $value;
|
108 |
+
}
|
109 |
+
|
110 |
+
|
111 |
+
/**
|
112 |
+
* Sanitize a checkbox to either be on or off.
|
113 |
+
*
|
114 |
+
* @param $value
|
115 |
+
* @return bool
|
116 |
+
* @since 4.0.0
|
117 |
+
*/
|
118 |
+
function sanitize_checkbox( $value ) {
|
119 |
+
|
120 |
+
if( !empty( $value ) && ( $value !== 'on' && $value !== 'off' ) ) {
|
121 |
+
return false;
|
122 |
+
}
|
123 |
+
|
124 |
+
return $value;
|
125 |
+
|
126 |
+
}
|
127 |
+
|
128 |
+
|
129 |
+
/**
|
130 |
+
* Sanitizes the single template setting.
|
131 |
+
*
|
132 |
+
* @private
|
133 |
+
* @param $template
|
134 |
+
* @return string
|
135 |
+
* @since 4.0.0
|
136 |
+
*/
|
137 |
+
function sanitize_template( $template ) {
|
138 |
+
|
139 |
+
if( !array_key_exists( $template, get_templates() ) ) {
|
140 |
+
$template = get_option( Options::TEMPLATE );
|
141 |
+
}
|
142 |
+
|
143 |
+
return $template;
|
144 |
+
|
145 |
+
}
|
146 |
+
|
147 |
+
|
148 |
+
/**
|
149 |
+
* Sanitizes the single template setting.
|
150 |
+
*
|
151 |
+
* @private
|
152 |
+
* @param $template
|
153 |
+
* @return string
|
154 |
+
* @since 4.0.0
|
155 |
+
*/
|
156 |
+
function sanitize_single_template( $template ) {
|
157 |
+
|
158 |
+
if( !array_key_exists( $template, get_single_templates() ) ) {
|
159 |
+
$template = get_option( Options::SINGLE_TEMPLATE );
|
160 |
+
}
|
161 |
+
|
162 |
+
return $template;
|
163 |
+
|
164 |
+
}
|
165 |
+
|
166 |
+
|
167 |
+
/**
|
168 |
+
* Returns a list of registered template slugs.
|
169 |
+
*
|
170 |
+
* @return array The template options.
|
171 |
+
* @since 4.0.0
|
172 |
+
*/
|
173 |
+
function get_templates() {
|
174 |
+
|
175 |
+
$templates = array(
|
176 |
+
'grid' => __( 'Grid - Boxes', 'ots' ),
|
177 |
+
'grid_circles' => __( 'Grid - Circles', 'ots' ),
|
178 |
+
'grid_circles2' => __( 'Grid - Circles 2', 'ots' )
|
179 |
+
);
|
180 |
+
|
181 |
+
return apply_filters( 'ots_templates', $templates );
|
182 |
+
|
183 |
+
}
|
184 |
+
|
185 |
+
|
186 |
+
/**
|
187 |
+
* Returns a list of registered single template slugs.
|
188 |
+
*
|
189 |
+
* @return array The template options.
|
190 |
+
* @since 4.0.0
|
191 |
+
*/
|
192 |
+
function get_single_templates() {
|
193 |
+
|
194 |
+
$templates = array(
|
195 |
+
'standard' => __( 'Theme Default', 'ots' ),
|
196 |
+
'disable' => __( 'Disabled', 'ots' )
|
197 |
+
);
|
198 |
+
|
199 |
+
return apply_filters( 'ots_single_templates', $templates );
|
200 |
+
|
201 |
+
}
|
202 |
+
|
203 |
+
/**
|
204 |
+
* Get all articles for a member.
|
205 |
+
*
|
206 |
+
* @param null|int|\WP_Post $member The team member.
|
207 |
+
* @return array The article IDs.
|
208 |
+
* @since 4.0.0
|
209 |
+
*/
|
210 |
+
function get_member_articles( $member = null ) {
|
211 |
+
|
212 |
+
$member = get_post( $member );
|
213 |
+
$articles = array();
|
214 |
+
|
215 |
+
for( $ctr = 1; $ctr < 4; $ctr++ ) {
|
216 |
+
|
217 |
+
$article = get_post_meta( $member->ID, "team_member_article$ctr", true );
|
218 |
+
|
219 |
+
if( !empty( $article ) && !empty( $post = get_post( $article ) ) ) {
|
220 |
+
$articles[] = $post;
|
221 |
+
}
|
222 |
+
|
223 |
+
}
|
224 |
+
|
225 |
+
return $articles;
|
226 |
+
|
227 |
+
}
|
228 |
+
|
229 |
+
/**
|
230 |
+
* Helper factory for instantiating team members.
|
231 |
+
*
|
232 |
+
* @param null|int|\WP_Post $member
|
233 |
+
* @return bool|TeamMember
|
234 |
+
* @since 4.0.0
|
235 |
+
*/
|
236 |
+
function team_member( $member = null ) {
|
237 |
+
|
238 |
+
$member = get_post( $member );
|
239 |
+
|
240 |
+
if( $member && $member->post_type == 'team_member' ) {
|
241 |
+
return new TeamMember( $member );
|
242 |
+
}
|
243 |
+
|
244 |
+
return false;
|
245 |
+
|
246 |
+
}
|
247 |
+
|
248 |
+
/**
|
249 |
+
* Map an old template slug to its renamed template file.
|
250 |
+
*
|
251 |
+
* @param string $slug The slug of the template.
|
252 |
+
* @return string The mapped name if found, else the value of $slug.
|
253 |
+
* @since 4.0.0
|
254 |
+
*/
|
255 |
+
function map_template( $slug ) {
|
256 |
+
|
257 |
+
$templates = array(
|
258 |
+
'grid_circles' => 'grid-circles.php',
|
259 |
+
'grid_circles2' => 'grid-circles-2.php'
|
260 |
+
);
|
261 |
+
|
262 |
+
if( array_key_exists( $slug, $templates ) ) {
|
263 |
+
$slug = $templates[ $slug ];
|
264 |
+
}
|
265 |
+
|
266 |
+
return $slug;
|
267 |
+
|
268 |
+
}
|
269 |
+
|
270 |
+
|
271 |
+
function get_groups() {
|
272 |
+
|
273 |
+
$args = array(
|
274 |
+
'taxonomy' => 'team_member_position',
|
275 |
+
'hide_empty' => false
|
276 |
+
);
|
277 |
+
|
278 |
+
$groups = array();
|
279 |
+
|
280 |
+
|
281 |
+
foreach( get_terms( $args ) as $term ) {
|
282 |
+
|
283 |
+
$groups[ $term->term_id ] = $term->name;
|
284 |
+
|
285 |
+
}
|
286 |
+
|
287 |
+
|
288 |
+
return $groups;
|
289 |
+
|
290 |
+
}
|
includes/helpers.php
ADDED
@@ -0,0 +1,125 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ots;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* Convenience method to generate a dropdown of posts.
|
7 |
+
*
|
8 |
+
* @param $name
|
9 |
+
* @param string $id
|
10 |
+
* @param string $selected
|
11 |
+
* @since 4.0.0
|
12 |
+
*/
|
13 |
+
function posts_dropdown( $name, $id = '', $selected = '' ) {
|
14 |
+
|
15 |
+
$posts = get_posts( array(
|
16 |
+
'post_type' => 'post',
|
17 |
+
'posts_per_page' => -1
|
18 |
+
) );
|
19 |
+
|
20 |
+
echo '<select id="' . esc_attr( $id ) . '" name="' . esc_attr( $name ) . '" class="regular-text">';
|
21 |
+
|
22 |
+
echo '<option value="">' . __( 'Select an article', 'ots' ). '</option>';
|
23 |
+
|
24 |
+
foreach( $posts as $post ) {
|
25 |
+
echo '<option value="' . esc_attr( $post->ID ) . '" ' . selected( $post->ID, $selected, false ) . '>' . esc_html( $post->post_title ) . '</option>';
|
26 |
+
}
|
27 |
+
|
28 |
+
echo '</select>';
|
29 |
+
|
30 |
+
}
|
31 |
+
|
32 |
+
|
33 |
+
/**
|
34 |
+
* Prints an array as attributes where key = " attributes ".
|
35 |
+
*
|
36 |
+
* @param array $attrs A mixed array off arrays and strings.
|
37 |
+
* @param boolean $echo Whether to echo the rendered output.
|
38 |
+
* @return string The rendered output.
|
39 |
+
* @since 4.0.0
|
40 |
+
*/
|
41 |
+
function print_attrs( array $attrs, $echo = true ) {
|
42 |
+
|
43 |
+
$html = '';
|
44 |
+
|
45 |
+
foreach( $attrs as $attr => $values ) {
|
46 |
+
$html .= ' ' . $attr . '="' . ( is_array( $values ) ? implode( ' ', $values ) : $values ) . '" ';
|
47 |
+
}
|
48 |
+
|
49 |
+
if( $echo ) {
|
50 |
+
echo $html;
|
51 |
+
}
|
52 |
+
|
53 |
+
return $html;
|
54 |
+
|
55 |
+
}
|
56 |
+
|
57 |
+
|
58 |
+
/**
|
59 |
+
* Builds a single social link icon.
|
60 |
+
*
|
61 |
+
* @param string $link URL for the link's href.
|
62 |
+
* @param string $icon URL of the icon to use for the links.
|
63 |
+
* @param array $attrs An array of attributes.
|
64 |
+
* @param string $before Html to print before each <img> tag.
|
65 |
+
* @param string $after Html to print after each <img> tag.
|
66 |
+
* @return string The HTML for the link.
|
67 |
+
* @since 4.0.0
|
68 |
+
*/
|
69 |
+
function social_link( $link, $icon = '', $attrs = array(), $before = '', $after = '' ) {
|
70 |
+
|
71 |
+
// See if we're opening links in a new tab
|
72 |
+
$target = get_option( Options::SOCIAL_LINK_ACTION ) == 'on' ? '_blank' : false;
|
73 |
+
|
74 |
+
$html = '<a ' . print_attrs( $attrs, false ) . ' ' . ( $target ? 'target="' . $target .'"' : '' ) . ' href="' . $link . '">' . $before;
|
75 |
+
|
76 |
+
if( $icon ) {
|
77 |
+
$html .= '<img src="' . esc_url( $icon ) . '"/>';
|
78 |
+
}
|
79 |
+
|
80 |
+
$html .= $after . '</a>';
|
81 |
+
|
82 |
+
return $html;
|
83 |
+
|
84 |
+
}
|
85 |
+
|
86 |
+
|
87 |
+
/**
|
88 |
+
* Loops through a team member's social links and outputs them if they are not empty.
|
89 |
+
*
|
90 |
+
* @param \WP_Post|null $member
|
91 |
+
* @param string $before HTML to display before the link.
|
92 |
+
* @param string $after HTML to display after the link.
|
93 |
+
* @since 4.0.0
|
94 |
+
*/
|
95 |
+
function do_member_social_links( \WP_Post $member = null, $before ='', $after = '' ) {
|
96 |
+
|
97 |
+
$links = array(
|
98 |
+
'facebook' => array( '', asset( 'images/social/facebook.png' ) ),
|
99 |
+
'twitter' => array( '', asset( 'images/social/twitter.png' ) ),
|
100 |
+
'linkedin' => array( '', asset( 'images/social/linkedin.png' ) ),
|
101 |
+
'gplus' => array( '', asset( 'images/social/gplus.png' ) ),
|
102 |
+
'email' => array( 'mailto:', asset( 'images/social/email.png' ) ),
|
103 |
+
'phone' => array( 'tel:', asset( 'images/social/phone.png' ) ),
|
104 |
+
'pinterest' => array( '', asset( 'images/social/pinterest.png' ) ),
|
105 |
+
'instagram' => array( '', asset( 'images/social/instagram.png' ) ),
|
106 |
+
'website' => array( '', asset( 'images/social/website.png' ) )
|
107 |
+
);
|
108 |
+
|
109 |
+
$member = get_post( $member );
|
110 |
+
|
111 |
+
$rendered = '';
|
112 |
+
|
113 |
+
foreach( $links as $meta_key => $data ) {
|
114 |
+
|
115 |
+
$link = get_post_meta( $member->ID, "team_member_$meta_key", true );
|
116 |
+
|
117 |
+
if( !empty( $link ) ) {
|
118 |
+
$rendered .= $before . social_link( $data[0] . $link, $data[1], array( 'class' => 'sc_social' ) ) . $after;
|
119 |
+
}
|
120 |
+
|
121 |
+
}
|
122 |
+
|
123 |
+
echo apply_filters( 'ots_parse_social_links', $rendered, $member );
|
124 |
+
|
125 |
+
}
|
includes/reorder-members.php
ADDED
@@ -0,0 +1,99 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ots;
|
4 |
+
|
5 |
+
|
6 |
+
/**
|
7 |
+
* Receives the orders array of team member IDs and loops through them to update their position meta.
|
8 |
+
*
|
9 |
+
* @since 4.0.0
|
10 |
+
*/
|
11 |
+
function save_team_members_order() {
|
12 |
+
|
13 |
+
if( isset( $_POST['member_order_nonce'] ) &&
|
14 |
+
wp_verify_nonce( $_POST['member_order_nonce'], 'save_members_order' ) ) {
|
15 |
+
|
16 |
+
$ids = array();
|
17 |
+
|
18 |
+
// Extract the URL encoded IDs
|
19 |
+
parse_str( $_POST['members_order'], $ids );
|
20 |
+
|
21 |
+
|
22 |
+
for( $ctr = 1; $ctr < count( $ids['member'] ) + 1; $ctr++ ) {
|
23 |
+
update_post_meta( $ids['member'][ $ctr - 1 ], 'sc_member_order', $ctr );
|
24 |
+
}
|
25 |
+
|
26 |
+
|
27 |
+
add_settings_error( 'ots-reorder', 'save-order', __( 'Order Successfully updated', 'ots' ), 'updated' );
|
28 |
+
|
29 |
+
}
|
30 |
+
|
31 |
+
}
|
32 |
+
|
33 |
+
add_action( 'admin_init', 'ots\save_team_members_order' );
|
34 |
+
|
35 |
+
|
36 |
+
/**
|
37 |
+
* Output the admin page for reordering team members.
|
38 |
+
*
|
39 |
+
* @since 4.0.0
|
40 |
+
*/
|
41 |
+
function do_member_reorder_page() { ?>
|
42 |
+
|
43 |
+
<?php $members = get_members_in_order( false ); ?>
|
44 |
+
|
45 |
+
<div class="wrap">
|
46 |
+
|
47 |
+
<?php settings_errors( 'ots-reorder' ); ?>
|
48 |
+
|
49 |
+
<h2><?php _e( 'Drag & Drop to Re-Order Team Members', 'ots' ); ?></h2>
|
50 |
+
|
51 |
+
<?php if( $members->have_posts() ) : ?>
|
52 |
+
|
53 |
+
<form method="post">
|
54 |
+
|
55 |
+
<ul id="ots-team-member-order">
|
56 |
+
|
57 |
+
<?php foreach( $members->posts as $member ) : ?>
|
58 |
+
|
59 |
+
<li id="member_<?php esc_attr_e( $member->ID ); ?>" class="ots-member">
|
60 |
+
|
61 |
+
<a class="edit" href="<?php echo esc_url( get_edit_post_link( $member->ID ) ); ?>">
|
62 |
+
<span class="dashicons dashicons-edit"></span>
|
63 |
+
</a>
|
64 |
+
|
65 |
+
<div class="inner">
|
66 |
+
|
67 |
+
<div class="thumbnail" style="background-image: url('<?php echo esc_url( get_member_avatar( $member ) ); ?>');"></div>
|
68 |
+
|
69 |
+
<div class="member-info">
|
70 |
+
<h2 class="name"><?php echo esc_html_e( $member->post_title ); ?></h2>
|
71 |
+
<p class="description job-title"><?php esc_html_e( get_post_meta( $member->ID, 'team_member_title', true ) ); ?></p>
|
72 |
+
</div>
|
73 |
+
|
74 |
+
</div>
|
75 |
+
|
76 |
+
</li>
|
77 |
+
|
78 |
+
<?php endforeach; ?>
|
79 |
+
|
80 |
+
</ul>
|
81 |
+
|
82 |
+
<input type="hidden" name="members_order" />
|
83 |
+
<input type="hidden" name="action" value="ots_save_members_order" />
|
84 |
+
|
85 |
+
<?php wp_nonce_field( 'save_members_order', 'member_order_nonce' ); ?>
|
86 |
+
|
87 |
+
<?php submit_button( __( 'Save Order', 'ots' ) ); ?>
|
88 |
+
|
89 |
+
</form>
|
90 |
+
|
91 |
+
<?php else : ?>
|
92 |
+
|
93 |
+
<h3><?php _e( 'You haven\'t added any team members yet. <a href="edit.php?post_type=team_member">Add a new member</a>', 'ots' ); ?></h3>
|
94 |
+
|
95 |
+
<?php endif; ?>
|
96 |
+
|
97 |
+
</div>
|
98 |
+
|
99 |
+
<?php }
|
includes/team-view.php
ADDED
@@ -0,0 +1,190 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ots;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* Enqueue short-code scripts.
|
7 |
+
*
|
8 |
+
* @since 4.0.0
|
9 |
+
*/
|
10 |
+
function enqueue_team_view_scripts() {
|
11 |
+
|
12 |
+
wp_enqueue_style( 'ots-team-view' );
|
13 |
+
wp_enqueue_script( 'ots' );
|
14 |
+
|
15 |
+
// Plugins can hook on here to have their scripts loaded only on shortcode or widget pages
|
16 |
+
do_action( 'ots_enqueue_scripts' );
|
17 |
+
|
18 |
+
}
|
19 |
+
|
20 |
+
|
21 |
+
/**
|
22 |
+
* Render the short-code content and supply default attributes.
|
23 |
+
*
|
24 |
+
* @param array $attributes
|
25 |
+
* @return string
|
26 |
+
* @since 4.0.0
|
27 |
+
*/
|
28 |
+
function do_shortcode_output( $attributes = array() ) {
|
29 |
+
|
30 |
+
$defaults = array(
|
31 |
+
'id' => '',
|
32 |
+
'group' => '',
|
33 |
+
'limit' => get_option( Options::DISPLAY_LIMIT ),
|
34 |
+
'template' => get_option( Options::TEMPLATE ),
|
35 |
+
'single_template' => get_option( Options::SINGLE_TEMPLATE )
|
36 |
+
);
|
37 |
+
|
38 |
+
return do_team_view_output( shortcode_atts( $defaults, $attributes ) );
|
39 |
+
|
40 |
+
}
|
41 |
+
|
42 |
+
add_shortcode( 'our-team', 'ots\do_shortcode_output' );
|
43 |
+
|
44 |
+
|
45 |
+
function do_team_view_output( array $args = array() ) {
|
46 |
+
|
47 |
+
$defaults = array(
|
48 |
+
'id' => '',
|
49 |
+
'group' => '',
|
50 |
+
'limit' => -1,
|
51 |
+
'template' => Defaults::TEMPLATE,
|
52 |
+
'single_template' => Defaults::SINGLE_TEMPLATE
|
53 |
+
);
|
54 |
+
|
55 |
+
$args = wp_parse_args( $args, $defaults );
|
56 |
+
|
57 |
+
// Cache the post query
|
58 |
+
$args['members'] = get_members_in_order( $args['limit'], $args['group'] );
|
59 |
+
|
60 |
+
// See if the template belongs to this plugin
|
61 |
+
$file = template_path( map_template( $args['template'] ) );
|
62 |
+
|
63 |
+
|
64 |
+
// Start the buffer
|
65 |
+
ob_start();
|
66 |
+
extract( $args );
|
67 |
+
|
68 |
+
echo '<div class="ots-team-view" id="' . esc_attr( $args['id'] ) . '">';
|
69 |
+
|
70 |
+
$template = apply_filters( 'ots_template_include', $file ? $file : $args['template'] );
|
71 |
+
|
72 |
+
do_action( 'ots_before_team_members', $args );
|
73 |
+
|
74 |
+
|
75 |
+
// If the template file doesn't exist, fallback to the default
|
76 |
+
if( file_exists( $template ) ) {
|
77 |
+
|
78 |
+
include $template;
|
79 |
+
|
80 |
+
} else {
|
81 |
+
|
82 |
+
include template_path( map_template( Defaults::TEMPLATE ) );
|
83 |
+
|
84 |
+
}
|
85 |
+
|
86 |
+
|
87 |
+
// Hook onto for output inside shortcode after the template as rendered
|
88 |
+
do_action( 'ots_after_team_members', $args );
|
89 |
+
|
90 |
+
echo '</div>';
|
91 |
+
|
92 |
+
|
93 |
+
return apply_filters( 'ots_team_view_output', ob_get_clean(), $args );
|
94 |
+
|
95 |
+
}
|
96 |
+
|
97 |
+
|
98 |
+
/**
|
99 |
+
* Sets up a hook to be called when the current page or post is using the short-code.
|
100 |
+
*
|
101 |
+
* @since 4.0.0
|
102 |
+
*/
|
103 |
+
function page_redirect() {
|
104 |
+
|
105 |
+
if( is_team_view_page() ) {
|
106 |
+
|
107 |
+
enqueue_team_view_scripts();
|
108 |
+
|
109 |
+
}
|
110 |
+
|
111 |
+
}
|
112 |
+
|
113 |
+
add_action( 'template_redirect', 'ots\page_redirect' );
|
114 |
+
|
115 |
+
|
116 |
+
/**
|
117 |
+
* Checks if the current page uses the short-code.
|
118 |
+
*
|
119 |
+
* @return bool Whether or not the current page uses the short-code.
|
120 |
+
* @since 4.0.0
|
121 |
+
*/
|
122 |
+
function is_team_view_page() {
|
123 |
+
|
124 |
+
global $post;
|
125 |
+
|
126 |
+
return is_a( $post, '\WP_Post' ) && has_shortcode( $post->post_content, 'our-team' );
|
127 |
+
|
128 |
+
}
|
129 |
+
|
130 |
+
|
131 |
+
/**
|
132 |
+
* Print user configurable styles.
|
133 |
+
*
|
134 |
+
* @since 4.0.0
|
135 |
+
*/
|
136 |
+
function print_dynamic_styles() { ?>
|
137 |
+
|
138 |
+
<!-- Global -->
|
139 |
+
|
140 |
+
<style>
|
141 |
+
|
142 |
+
.sc_team_single_member .sc_single_side .social span {
|
143 |
+
background: <?php esc_html_e( get_option( Options::MAIN_COLOR ) ); ?>;
|
144 |
+
}
|
145 |
+
|
146 |
+
</style>
|
147 |
+
|
148 |
+
<!-- Grid -->
|
149 |
+
|
150 |
+
<style>
|
151 |
+
|
152 |
+
.grid#sc_our_team .sc_team_member .sc_team_member_name,
|
153 |
+
.grid#sc_our_team .sc_team_member .sc_team_member_jobtitle {
|
154 |
+
background: <?php esc_html_e( get_option( Options::MAIN_COLOR ) ) ?>;
|
155 |
+
}
|
156 |
+
|
157 |
+
.grid#sc_our_team .sc_team_member {
|
158 |
+
padding: <?php esc_html_e( get_option( Options::MARGIN ) ); ?>px !important;
|
159 |
+
}
|
160 |
+
|
161 |
+
</style>
|
162 |
+
|
163 |
+
<!-- Grid Circles -->
|
164 |
+
|
165 |
+
<style>
|
166 |
+
|
167 |
+
.grid_circles#sc_our_team .sc_team_member .sc_team_member_jobtitle,
|
168 |
+
.grid_circles#sc_our_team .sc_team_member .sc_team_member_name {
|
169 |
+
background: <?php esc_html_e( get_option( Options::MAIN_COLOR ) ) ?>;
|
170 |
+
}
|
171 |
+
|
172 |
+
.grid_circles#sc_our_team .sc_team_member {
|
173 |
+
margin: <?php esc_html_e( get_option( Options::MARGIN ) ); ?>px;
|
174 |
+
}
|
175 |
+
|
176 |
+
</style>
|
177 |
+
|
178 |
+
<!-- Grid Circles 2 -->
|
179 |
+
|
180 |
+
<style>
|
181 |
+
|
182 |
+
.grid_circles2#sc_our_team .sc_team_member {
|
183 |
+
margin: <?php esc_html_e( get_option( Options::MARGIN ) ); ?>px;
|
184 |
+
}
|
185 |
+
|
186 |
+
</style>
|
187 |
+
|
188 |
+
<?php }
|
189 |
+
|
190 |
+
add_action( 'wp_print_styles', 'ots\print_dynamic_styles' );
|
includes/team_member-post-type.php
ADDED
@@ -0,0 +1,806 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ots;
|
4 |
+
|
5 |
+
|
6 |
+
/**
|
7 |
+
* Enqueue scripts for single.php.
|
8 |
+
*
|
9 |
+
* @since 4.0.0
|
10 |
+
*/
|
11 |
+
function enqueue_single_scripts() {
|
12 |
+
|
13 |
+
if( get_post_type() == 'team_member' ) {
|
14 |
+
wp_enqueue_style( 'ots-single' );
|
15 |
+
}
|
16 |
+
|
17 |
+
}
|
18 |
+
|
19 |
+
add_action( 'wp_enqueue_scripts', 'ots\enqueue_single_scripts' );
|
20 |
+
|
21 |
+
|
22 |
+
/**
|
23 |
+
* Manually override the theme's template.
|
24 |
+
*
|
25 |
+
* @param $template
|
26 |
+
* @return string
|
27 |
+
* @since 4.0.0
|
28 |
+
*/
|
29 |
+
function include_single_template( $template ) {
|
30 |
+
|
31 |
+
if ( is_single() && get_post_type() == 'team_member' ) {
|
32 |
+
|
33 |
+
// Pull in the template
|
34 |
+
if( override_theme_template() ) {
|
35 |
+
$template = locate_template( 'single.php' );
|
36 |
+
}
|
37 |
+
|
38 |
+
}
|
39 |
+
|
40 |
+
return $template;
|
41 |
+
|
42 |
+
}
|
43 |
+
|
44 |
+
add_filter( 'template_include', 'ots\include_single_template' );
|
45 |
+
|
46 |
+
|
47 |
+
/**
|
48 |
+
* Override the default single-team_member template used by themes to avoid breakage.
|
49 |
+
*
|
50 |
+
* @return bool
|
51 |
+
* @since 4.0.0
|
52 |
+
*/
|
53 |
+
function override_theme_template() {
|
54 |
+
|
55 |
+
$template = get_option( Options::SINGLE_TEMPLATE );
|
56 |
+
|
57 |
+
return ( $template === 'standard' || !template_path( $template ) ) &&
|
58 |
+
file_exists( get_template_directory() . '/single-team_member.php' );
|
59 |
+
|
60 |
+
}
|
61 |
+
|
62 |
+
|
63 |
+
/**
|
64 |
+
* Register the team member custom post type.
|
65 |
+
*
|
66 |
+
* @since 4.0.0
|
67 |
+
*/
|
68 |
+
function register_team_member_post_type() {
|
69 |
+
|
70 |
+
$labels = array(
|
71 |
+
'name' => _x( 'Team Members', 'post type general name', 'ots' ),
|
72 |
+
'singular_name' => _x( 'Team Member', 'post type singular name', 'ots' ),
|
73 |
+
'menu_name' => _x( 'Team', 'admin menu', 'ots' ),
|
74 |
+
'name_admin_bar' => _x( 'Team Member', 'add new on admin bar', 'ots' ),
|
75 |
+
'add_new' => _x( 'Add New', 'team_member', 'ots' ),
|
76 |
+
'add_new_item' => __( 'Add New Member', 'ots' ),
|
77 |
+
'new_item' => __( 'New Member', 'ots' ),
|
78 |
+
'edit_item' => __( 'Edit Member', 'ots' ),
|
79 |
+
'view_item' => __( 'View Member', 'ots' ),
|
80 |
+
'all_items' => __( 'All Members', 'ots' ),
|
81 |
+
'search_items' => __( 'Search Members', 'ots' ),
|
82 |
+
'parent_item_colon' => __( 'Parent Members:', 'ots' ),
|
83 |
+
'not_found' => __( 'No members found.', 'ots' ),
|
84 |
+
'not_found_in_trash' => __( 'No members found in Trash.', 'ots' ),
|
85 |
+
'archives' => __( 'Member Archives', 'ots' ),
|
86 |
+
'attributes' => __( 'Member Attributes', 'ots' ),
|
87 |
+
|
88 |
+
);
|
89 |
+
|
90 |
+
$args = array(
|
91 |
+
'menu_icon' => 'dashicons-admin-users',
|
92 |
+
'labels' => $labels,
|
93 |
+
'capability_type' => 'post',
|
94 |
+
'register_meta_box_cb' => 'ots\team_member_meta_boxes',
|
95 |
+
'supports' => array( 'title', 'editor', 'thumbnail' ),
|
96 |
+
'public' => true,
|
97 |
+
'rewrite' => array(
|
98 |
+
'slug' => get_option( Options::REWRITE_SLUG )
|
99 |
+
)
|
100 |
+
);
|
101 |
+
|
102 |
+
register_post_type( 'team_member', $args );
|
103 |
+
|
104 |
+
}
|
105 |
+
|
106 |
+
add_action( 'init', 'ots\register_team_member_post_type' );
|
107 |
+
|
108 |
+
|
109 |
+
/**
|
110 |
+
* Register the member grouping taxonomy.
|
111 |
+
*
|
112 |
+
* @since 4.0.0
|
113 |
+
*/
|
114 |
+
function register_team_member_position_taxonomy() {
|
115 |
+
|
116 |
+
$labels = array(
|
117 |
+
'name' => _x( 'Groups', 'taxonomy general name', 'ots' ),
|
118 |
+
'singular_name' => _x( 'Group', 'taxonomy singular name', 'ots' ),
|
119 |
+
'search_items' => __( 'Search Groups', 'ots' ),
|
120 |
+
'all_items' => __( 'All Groups', 'ots' ),
|
121 |
+
'parent_item' => __( 'Parent Group', 'ots' ),
|
122 |
+
'parent_item_colon' => __( 'Parent Group:', 'ots' ),
|
123 |
+
'edit_item' => __( 'Edit Group', 'ots' ),
|
124 |
+
'update_item' => __( 'Update Group', 'ots' ),
|
125 |
+
'add_new_item' => __( 'Add New Group', 'ots' ),
|
126 |
+
'new_item_name' => __( 'New Group', 'ots' ),
|
127 |
+
'menu_name' => __( 'Groups', 'ots' ),
|
128 |
+
);
|
129 |
+
|
130 |
+
$args = array(
|
131 |
+
'labels' => $labels,
|
132 |
+
'hierarchical' => true,
|
133 |
+
);
|
134 |
+
|
135 |
+
register_taxonomy( 'team_member_position', 'team_member', $args );
|
136 |
+
}
|
137 |
+
|
138 |
+
add_action( 'init', 'ots\register_team_member_position_taxonomy' );
|
139 |
+
|
140 |
+
|
141 |
+
/**
|
142 |
+
* Add custom columns to the team member posts table.
|
143 |
+
*
|
144 |
+
* @param $columns
|
145 |
+
* @return mixed
|
146 |
+
* @since 4.0.0
|
147 |
+
*/
|
148 |
+
function add_team_member_custom_columns( $columns ) {
|
149 |
+
|
150 |
+
unset( $columns['date'] );
|
151 |
+
|
152 |
+
$columns['title'] = __( 'Name', 'ots' );
|
153 |
+
$columns['team_member_title'] = __( 'Job Title', 'ots' );
|
154 |
+
$columns['team_member_group'] = __( 'Group', 'ots' );
|
155 |
+
$columns['team_member_image'] = __( 'Image', 'ots' );
|
156 |
+
|
157 |
+
return $columns;
|
158 |
+
|
159 |
+
}
|
160 |
+
|
161 |
+
add_filter( 'manage_edit-team_member_columns', 'ots\add_team_member_custom_columns' );
|
162 |
+
|
163 |
+
|
164 |
+
/**
|
165 |
+
* Output custom columns in the team member posts table.
|
166 |
+
*
|
167 |
+
* @param $column
|
168 |
+
* @param $post_id
|
169 |
+
* @since 4.0.0
|
170 |
+
*/
|
171 |
+
function do_team_member_custom_columns( $column, $post_id ) {
|
172 |
+
|
173 |
+
switch( $column ) {
|
174 |
+
|
175 |
+
case 'team_member_title' :
|
176 |
+
echo get_post_meta( $post_id, 'team_member_title', true );
|
177 |
+
break;
|
178 |
+
|
179 |
+
case 'team_member_image' :
|
180 |
+
echo member_avatar( $post_id, array( 50, 50 ) );
|
181 |
+
break;
|
182 |
+
|
183 |
+
case 'team_member_group':
|
184 |
+
|
185 |
+
$terms = get_the_terms( get_post( $post_id ), 'team_member_position' );
|
186 |
+
|
187 |
+
if ( !empty( $terms ) ) {
|
188 |
+
echo $terms[0]->name;
|
189 |
+
}
|
190 |
+
|
191 |
+
break;
|
192 |
+
|
193 |
+
|
194 |
+
}
|
195 |
+
|
196 |
+
}
|
197 |
+
|
198 |
+
add_action( 'manage_team_member_posts_custom_column', 'ots\do_team_member_custom_columns', 10, 2 );
|
199 |
+
|
200 |
+
|
201 |
+
/**
|
202 |
+
* Append articles and social links when using single.php.
|
203 |
+
*
|
204 |
+
* @param $content
|
205 |
+
* @return string
|
206 |
+
* @since 4.0.0
|
207 |
+
*/
|
208 |
+
function single_member_content( $content ) {
|
209 |
+
|
210 |
+
if ( is_single() && get_post_type() == 'team_member' &&
|
211 |
+
get_option( Options::SINGLE_TEMPLATE ) == 'standard' ) : ob_start(); ?>
|
212 |
+
|
213 |
+
<div id="sc_our_team">
|
214 |
+
|
215 |
+
<div class="sc_team_member">
|
216 |
+
|
217 |
+
<?php echo $content; ?>
|
218 |
+
|
219 |
+
<?php if ( get_option( Options::SHOW_SINGLE_SOCIAL ) == 'on' ) : ?>
|
220 |
+
|
221 |
+
<div class="icons"><?php do_member_social_links(); ?></div>
|
222 |
+
|
223 |
+
<?php endif; ?>
|
224 |
+
|
225 |
+
<hr>
|
226 |
+
|
227 |
+
<?php if ( get_post_meta( get_the_ID(), 'team_member_article_bool', true ) === 'on' ) : ?>
|
228 |
+
|
229 |
+
<div class="sc_team_posts sc_team_post">
|
230 |
+
|
231 |
+
<h3 class="skills-title"><?php esc_attr_e( get_post_meta( get_the_ID(), 'team_member_article_title', true ) ); ?></h3>
|
232 |
+
|
233 |
+
<div class="sc-team-member-posts">
|
234 |
+
|
235 |
+
<?php foreach ( get_member_articles() as $article ) : ?>
|
236 |
+
|
237 |
+
<div class="sc-team-member-post">
|
238 |
+
|
239 |
+
<div class="width25 left">
|
240 |
+
|
241 |
+
<a href="<?php the_permalink( $article ); ?>"><?php echo get_the_post_thumbnail( $article, 'medium' ); ?></a>
|
242 |
+
|
243 |
+
</div>
|
244 |
+
|
245 |
+
<div class="width75 left">
|
246 |
+
|
247 |
+
<a href="<?php the_permalink( $article ); ?>"><?php echo get_the_title( $article ); ?></a>
|
248 |
+
|
249 |
+
</div>
|
250 |
+
|
251 |
+
<div class="clear"></div>
|
252 |
+
|
253 |
+
</div>
|
254 |
+
|
255 |
+
<?php endforeach; ?>
|
256 |
+
|
257 |
+
</div>
|
258 |
+
|
259 |
+
<div class="clear"></div>
|
260 |
+
|
261 |
+
</div>
|
262 |
+
|
263 |
+
<?php endif; ?>
|
264 |
+
|
265 |
+
</div>
|
266 |
+
|
267 |
+
</div>
|
268 |
+
|
269 |
+
<?php $content = ob_get_clean(); ?>
|
270 |
+
|
271 |
+
<?php endif; ?>
|
272 |
+
|
273 |
+
<?php return $content;
|
274 |
+
|
275 |
+
}
|
276 |
+
|
277 |
+
add_filter( 'the_content', 'ots\single_member_content' );
|
278 |
+
|
279 |
+
|
280 |
+
/**
|
281 |
+
* Renders the member custom post type metabox fields.
|
282 |
+
*
|
283 |
+
* @since 4.0.0
|
284 |
+
*/
|
285 |
+
function team_member_meta_boxes() {
|
286 |
+
|
287 |
+
if( is_admin() ) {
|
288 |
+
|
289 |
+
$preview = apply_filters( 'ots_enable_pro_preview', true );
|
290 |
+
|
291 |
+
add_meta_box( 'team-member-contact', __( 'Contact Information', 'ots' ), 'ots\do_contact_meta_box' );
|
292 |
+
add_meta_box( 'team-member-articles', __( 'Authored / Favorite Articles', 'ots' ), 'ots\do_articles_meta_box' );
|
293 |
+
|
294 |
+
add_meta_box( 'team-member-skills', __( 'Attributes / Skills / Ratings' . ( $preview ? ' - <i class="ots-pro">Pro version only</i>' : '' ), 'ots' ), 'ots\do_skills_meta_box', null, 'advanced', 'default', array( 'preview' => $preview ) );
|
295 |
+
add_meta_box( 'team-member-tags', __( 'Interests / Tags / Additional Skills' . ( $preview ? ' - <i class="ots-pro">Pro version only</i>' : '' ), 'ots' ), 'ots\do_tags_meta_box', null, 'advanced', 'default', array( 'preview' => $preview ) );
|
296 |
+
|
297 |
+
}
|
298 |
+
|
299 |
+
}
|
300 |
+
|
301 |
+
/**
|
302 |
+
* Add default meta keys when creating a new team member.
|
303 |
+
*
|
304 |
+
* @param $post_id
|
305 |
+
* @param $post
|
306 |
+
* @param $update
|
307 |
+
* @since 4.0.0
|
308 |
+
*/
|
309 |
+
function set_default_post_meta( $post_id, $post, $update ) {
|
310 |
+
|
311 |
+
if( !$update ) {
|
312 |
+
update_post_meta( $post_id, 'sc_member_order', 1 );
|
313 |
+
}
|
314 |
+
|
315 |
+
}
|
316 |
+
|
317 |
+
add_action( 'save_post_team_member', 'ots\set_default_post_meta', 10, 3 );
|
318 |
+
|
319 |
+
|
320 |
+
/**
|
321 |
+
* Sanitize and save the contact meta box fields.
|
322 |
+
*
|
323 |
+
* @param $post_id
|
324 |
+
* @since 4.0.0
|
325 |
+
*/
|
326 |
+
function save_contact_meta_box( $post_id ) {
|
327 |
+
|
328 |
+
if( isset( $_POST['articles_mata_box_nonce'] ) &&
|
329 |
+
wp_verify_nonce( $_POST['contact_mata_box_nonce'], 'contact_meta_box' ) ) {
|
330 |
+
|
331 |
+
update_post_meta( $post_id, 'team_member_title', sanitize_text_field( $_POST['team_member_title'] ) );
|
332 |
+
update_post_meta( $post_id, 'team_member_phone', sanitize_text_field( $_POST['team_member_phone'] ) );
|
333 |
+
update_post_meta( $post_id, 'team_member_email', sanitize_email( $_POST['team_member_email'] ) );
|
334 |
+
|
335 |
+
foreach( $_POST['team_member_links'] as $network => $link ) {
|
336 |
+
update_post_meta( $post_id, 'team_member_' . sanitize_key( $network ), esc_url_raw( $link ) );
|
337 |
+
}
|
338 |
+
|
339 |
+
}
|
340 |
+
|
341 |
+
}
|
342 |
+
|
343 |
+
add_action( 'save_post_team_member', 'ots\save_contact_meta_box' );
|
344 |
+
|
345 |
+
|
346 |
+
/**
|
347 |
+
* Sanitize and save the articles meta box fields.
|
348 |
+
*
|
349 |
+
* @param $post_id
|
350 |
+
* @since 4.0.0
|
351 |
+
*/
|
352 |
+
function save_articles_meta_box( $post_id ) {
|
353 |
+
|
354 |
+
if( isset( $_POST['articles_mata_box_nonce'] ) &&
|
355 |
+
wp_verify_nonce( $_POST['articles_mata_box_nonce'], 'articles_meta_box' ) ) {
|
356 |
+
|
357 |
+
update_post_meta( $post_id, 'team_member_article_bool', isset( $_POST['team_member_article_bool'] ) ? 'on' : '' );
|
358 |
+
update_post_meta( $post_id, 'team_member_article_title', sanitize_text_field( $_POST['team_member_article_title'] ) );
|
359 |
+
|
360 |
+
foreach( $_POST['team_member_articles'] as $index => $article ) {
|
361 |
+
update_post_meta( $post_id, 'team_member_article' . $index, intval( $article ) );
|
362 |
+
}
|
363 |
+
|
364 |
+
}
|
365 |
+
|
366 |
+
}
|
367 |
+
|
368 |
+
add_action( 'save_post_team_member', 'ots\save_articles_meta_box' );
|
369 |
+
|
370 |
+
|
371 |
+
/**
|
372 |
+
* Output the contact info meta box.
|
373 |
+
*
|
374 |
+
* @param \WP_Post $post
|
375 |
+
* @since 4.0.0
|
376 |
+
*/
|
377 |
+
function do_contact_meta_box( \WP_Post $post ) { ?>
|
378 |
+
|
379 |
+
<?php wp_nonce_field( 'contact_meta_box', 'contact_mata_box_nonce' ); ?>
|
380 |
+
|
381 |
+
<?php $member = team_member( $post ); ?>
|
382 |
+
|
383 |
+
<table id="ots-contact-meta-box" class="ots-meta-box widefat">
|
384 |
+
<tr>
|
385 |
+
<th>
|
386 |
+
<label for="ots-member-job-title"><?php _e( 'Job Title', 'ots' ); ?></label>
|
387 |
+
</th>
|
388 |
+
<td>
|
389 |
+
<input id="ots-member-job-title"
|
390 |
+
name="team_member_title"
|
391 |
+
class="regular-text"
|
392 |
+
value="<?php esc_attr_e( $member->title ); ?>" />
|
393 |
+
</td>
|
394 |
+
</tr>
|
395 |
+
<tr>
|
396 |
+
<th>
|
397 |
+
<label for="ots-member-email"><?php _e( 'Email Address', 'ots' ); ?></label>
|
398 |
+
</th>
|
399 |
+
<td>
|
400 |
+
<input id="ots-member-email"
|
401 |
+
name="team_member_email"
|
402 |
+
class="regular-text"
|
403 |
+
value="<?php esc_attr_e( $member->email ); ?>" />
|
404 |
+
</td>
|
405 |
+
</tr>
|
406 |
+
<tr>
|
407 |
+
<th>
|
408 |
+
<label for="ots-member-phone"><?php _e( 'Phone Number', 'ots' ); ?></label>
|
409 |
+
</th>
|
410 |
+
<td>
|
411 |
+
<input id="ots-member-phone"
|
412 |
+
name="team_member_phone"
|
413 |
+
class="regular-text"
|
414 |
+
value="<?php esc_attr_e( $member->phone ); ?>" />
|
415 |
+
</td>
|
416 |
+
</tr>
|
417 |
+
<tr>
|
418 |
+
<th>
|
419 |
+
<label for="ots-member-facebook"><?php _e( 'Facebook', 'ots' ); ?></label>
|
420 |
+
</th>
|
421 |
+
<td>
|
422 |
+
<input id="ots-member-facebook"
|
423 |
+
name="team_member_links[facebook]"
|
424 |
+
class="regular-text"
|
425 |
+
value="<?php esc_attr_e( $member->facebook ); ?>" />
|
426 |
+
</td>
|
427 |
+
</tr>
|
428 |
+
<tr>
|
429 |
+
<th>
|
430 |
+
<label for="ots-member-twitter"><?php _e( 'Twitter', 'ots' ); ?></label>
|
431 |
+
</th>
|
432 |
+
<td>
|
433 |
+
<input id="ots-member-twitter"
|
434 |
+
name="team_member_links[twitter]"
|
435 |
+
class="regular-text"
|
436 |
+
value="<?php esc_attr_e( $member->twitter ); ?>" />
|
437 |
+
</td>
|
438 |
+
</tr>
|
439 |
+
<tr>
|
440 |
+
<th>
|
441 |
+
<label for="ots-member-linkedin"><?php _e( 'Linkedin', 'ots' ); ?></label>
|
442 |
+
</th>
|
443 |
+
<td>
|
444 |
+
<input id="ots-member-linkedin"
|
445 |
+
name="team_member_links[linkedin]"
|
446 |
+
class="regular-text"
|
447 |
+
value="<?php esc_attr_e( $member->linkedin ); ?>" />
|
448 |
+
</td>
|
449 |
+
</tr>
|
450 |
+
<tr>
|
451 |
+
<th>
|
452 |
+
<label for="ots-member-gplus"><?php _e( 'Google Plus', 'ots' ); ?></label>
|
453 |
+
</th>
|
454 |
+
<td>
|
455 |
+
<input id="ots-member-gplus"
|
456 |
+
name="team_member_links[gplus]"
|
457 |
+
class="regular-text"
|
458 |
+
value="<?php esc_attr_e( $member->gplus ); ?>" />
|
459 |
+
</td>
|
460 |
+
</tr>
|
461 |
+
<tr>
|
462 |
+
<th>
|
463 |
+
<label for="ots-member-instagram"><?php _e( 'Instagram', 'ots' ); ?></label>
|
464 |
+
</th>
|
465 |
+
<td>
|
466 |
+
<input id="ots-member-instagram"
|
467 |
+
name="team_member_links[instagram]"
|
468 |
+
class="regular-text"
|
469 |
+
value="<?php esc_attr_e( $member->instagram ); ?>" />
|
470 |
+
</td>
|
471 |
+
</tr>
|
472 |
+
<tr>
|
473 |
+
<th>
|
474 |
+
<label for="ots-member-pinterest"><?php _e( 'Pinterest', 'ots' ); ?></label>
|
475 |
+
</th>
|
476 |
+
<td>
|
477 |
+
<input id="ots-member-pinterest"
|
478 |
+
name="team_member_links[pinterest]"
|
479 |
+
class="regular-text"
|
480 |
+
value="<?php esc_attr_e( $member->pinterest ); ?>" />
|
481 |
+
</td>
|
482 |
+
</tr>
|
483 |
+
<tr>
|
484 |
+
<th>
|
485 |
+
<label for="ots-member-website"><?php _e( 'Website', 'ots' ); ?></label>
|
486 |
+
</th>
|
487 |
+
<td>
|
488 |
+
<input id="ots-member-website"
|
489 |
+
name="team_member_links[website]"
|
490 |
+
class="regular-text"
|
491 |
+
value="<?php esc_attr_e( $member->website ); ?>" />
|
492 |
+
</td>
|
493 |
+
</tr>
|
494 |
+
</table>
|
495 |
+
|
496 |
+
<?php }
|
497 |
+
|
498 |
+
|
499 |
+
/**
|
500 |
+
* Output the articles metabox.
|
501 |
+
*
|
502 |
+
* @param \WP_Post $post
|
503 |
+
* @since 4.0.0
|
504 |
+
*/
|
505 |
+
function do_articles_meta_box( \WP_Post $post ) { ?>
|
506 |
+
|
507 |
+
<?php wp_nonce_field( 'articles_meta_box', 'articles_mata_box_nonce' ); ?>
|
508 |
+
|
509 |
+
<?php $member = team_member( $post ); ?>
|
510 |
+
|
511 |
+
<table id="ots-articles-meta-box" class="ots-meta-box widefat">
|
512 |
+
<tr>
|
513 |
+
<th>
|
514 |
+
<label for="ots-display-member-articles"><?php _e( 'Display Articles', 'ots' ); ?></label>
|
515 |
+
</th>
|
516 |
+
<td>
|
517 |
+
<label>
|
518 |
+
<input id="ots-display-member-articles"
|
519 |
+
name="team_member_article_bool"
|
520 |
+
type="checkbox" <?php checked( $member->article_bool, 'on' ); ?> />
|
521 |
+
</label>
|
522 |
+
</td>
|
523 |
+
</tr>
|
524 |
+
<tr>
|
525 |
+
<th>
|
526 |
+
<label for="ots-member-articles-title"><?php _e( 'Articles Title', 'ots' ); ?></label>
|
527 |
+
</th>
|
528 |
+
<td>
|
529 |
+
<input id="ots-member-articles-title"
|
530 |
+
name="team_member_article_title"
|
531 |
+
class="regular-text"
|
532 |
+
value="<?php esc_attr_e( $member->article_title ); ?>" />
|
533 |
+
</td>
|
534 |
+
</tr>
|
535 |
+
<tr>
|
536 |
+
<th>
|
537 |
+
<label for="ots-member-article-1"><?php _e( 'Article 1', 'ots' ); ?></label>
|
538 |
+
</th>
|
539 |
+
<td>
|
540 |
+
<?php posts_dropdown( 'team_member_articles[1]', 'ots-member-articles-1', $member->article1 ); ?>
|
541 |
+
</td>
|
542 |
+
</tr>
|
543 |
+
<tr>
|
544 |
+
<th>
|
545 |
+
<label for="ots-member-article-2"><?php _e( 'Article 2', 'ots' ); ?></label>
|
546 |
+
</th>
|
547 |
+
<td>
|
548 |
+
<?php posts_dropdown( 'team_member_articles[2]', 'ots-member-articles-2', $member->article2 ); ?>
|
549 |
+
</td>
|
550 |
+
</tr>
|
551 |
+
<tr>
|
552 |
+
<th>
|
553 |
+
<label for="ots-member-article-3"><?php _e( 'Article 3', 'ots' ); ?></label>
|
554 |
+
</th>
|
555 |
+
<td>
|
556 |
+
<?php posts_dropdown( 'team_member_articles[3]', 'ots-member-articles-3', $member->article3 ); ?>
|
557 |
+
</td>
|
558 |
+
</tr>
|
559 |
+
</table>
|
560 |
+
|
561 |
+
<?php }
|
562 |
+
|
563 |
+
|
564 |
+
/**
|
565 |
+
* Output the skills meta box. Note all fields are disabled by default and this meta box has no save handler.
|
566 |
+
*
|
567 |
+
* @param \WP_Post $post
|
568 |
+
* @param array $meta_box
|
569 |
+
* @since 4.0.0
|
570 |
+
*/
|
571 |
+
function do_skills_meta_box( \WP_Post $post, array $meta_box ) { ?>
|
572 |
+
|
573 |
+
<?php wp_nonce_field( 'skills_meta_box', 'skills_meta_box_nonce' ); ?>
|
574 |
+
|
575 |
+
<?php $member = team_member( $post ); ?>
|
576 |
+
|
577 |
+
<table id="ots-skills-meta-box" class="ots-meta-box widefat">
|
578 |
+
<tr>
|
579 |
+
<th>
|
580 |
+
<label for="ots-display-member-skills"><?php _e( 'Display Skills', 'ots' ); ?></label>
|
581 |
+
</th>
|
582 |
+
<td>
|
583 |
+
<label>
|
584 |
+
<input id="ots-display-member-skills"
|
585 |
+
name="team_member_skill_bool"
|
586 |
+
type="checkbox" <?php checked( $member->skill_bool, 'on' ); ?>
|
587 |
+
|
588 |
+
<?php disabled( true, $meta_box['args']['preview'] ); ?> />
|
589 |
+
</label>
|
590 |
+
</td>
|
591 |
+
</tr>
|
592 |
+
<tr>
|
593 |
+
<th>
|
594 |
+
<label for="ots-member-skills-title"><?php _e( 'Skills Title', 'ots' ); ?></label>
|
595 |
+
</th>
|
596 |
+
<td>
|
597 |
+
<input id="ots-member-skills-title"
|
598 |
+
name="team_member_skill_title"
|
599 |
+
class="regular-text"
|
600 |
+
value="<?php esc_attr_e( $member->skill_title ); ?>"
|
601 |
+
|
602 |
+
<?php disabled( true, $meta_box['args']['preview'] ); ?> />
|
603 |
+
</td>
|
604 |
+
</tr>
|
605 |
+
<tr>
|
606 |
+
<th>
|
607 |
+
<label for="ots-member-skill-1"><?php _e( 'Attribute / Skill 1', 'ots' ); ?></label>
|
608 |
+
</th>
|
609 |
+
<td>
|
610 |
+
<input id="ots-member-skill-1"
|
611 |
+
name="team_member_skill_titles[]"
|
612 |
+
class="ots-member-skill-title"
|
613 |
+
placeholder="<?php _e( 'Title', 'ots' ); ?>"
|
614 |
+
value="<?php esc_attr_e( $member->skill1 ); ?>"
|
615 |
+
|
616 |
+
<?php disabled( true, $meta_box['args']['preview'] ); ?> />
|
617 |
+
|
618 |
+
<input id="ots-member-skill-1"
|
619 |
+
name="team_member_skill_ratings[]"
|
620 |
+
type="number"
|
621 |
+
min="1"
|
622 |
+
max="10"
|
623 |
+
class="ots-member-skill-rating"
|
624 |
+
placeholder="<?php _e( 'Rating 1 - 10', 'ots' ); ?>"
|
625 |
+
value="<?php esc_attr_e( $member->skill_value1 ); ?>"
|
626 |
+
|
627 |
+
<?php disabled( true, $meta_box['args']['preview'] ); ?> />
|
628 |
+
</td>
|
629 |
+
</tr>
|
630 |
+
<tr>
|
631 |
+
<th>
|
632 |
+
<label for="ots-member-skill-2"><?php _e( 'Attribute / Skill 2', 'ots' ); ?></label>
|
633 |
+
</th>
|
634 |
+
<td>
|
635 |
+
<input id="ots-member-skill-2"
|
636 |
+
name="team_member_skill_titles[]"
|
637 |
+
class="ots-member-skill-title"
|
638 |
+
placeholder="<?php _e( 'Title', 'ots' ); ?>"
|
639 |
+
value="<?php esc_attr_e( $member->skill2 ); ?>"
|
640 |
+
|
641 |
+
<?php disabled( true, $meta_box['args']['preview'] ); ?> />
|
642 |
+
|
643 |
+
<input id="ots-member-skill-2"
|
644 |
+
name="team_member_skill_ratings[]"
|
645 |
+
class="ots-member-skill-rating"
|
646 |
+
type="number"
|
647 |
+
min="1"
|
648 |
+
max="10"
|
649 |
+
placeholder="<?php _e( 'Rating 1 - 10', 'ots' ); ?>"
|
650 |
+
value="<?php esc_attr_e( $member->skill_value2 ); ?>"
|
651 |
+
|
652 |
+
<?php disabled( true, $meta_box['args']['preview'] ); ?> />
|
653 |
+
</td>
|
654 |
+
</tr>
|
655 |
+
<tr>
|
656 |
+
<th>
|
657 |
+
<label for="ots-member-skill-3"><?php _e( 'Attribute / Skill 3', 'ots' ); ?></label>
|
658 |
+
</th>
|
659 |
+
<td>
|
660 |
+
<input id="ots-member-skill-3"
|
661 |
+
name="team_member_skill_titles[]"
|
662 |
+
class="ots-member-skill-title""
|
663 |
+
placeholder="<?php _e( 'Title', 'ots' ); ?>"
|
664 |
+
value="<?php esc_attr_e( $member->skill3 ); ?>"
|
665 |
+
|
666 |
+
<?php disabled( true, $meta_box['args']['preview'] ); ?> />
|
667 |
+
|
668 |
+
<input id="ots-member-skill-3"
|
669 |
+
name="team_member_skill_ratings[]"
|
670 |
+
class="ots-member-skill-rating"
|
671 |
+
type="number"
|
672 |
+
min="1"
|
673 |
+
max="10"
|
674 |
+
placeholder="<?php _e( 'Rating 1 - 10', 'ots' ); ?>"
|
675 |
+
value="<?php esc_attr_e( $member->skill_value3 ); ?>"
|
676 |
+
|
677 |
+
<?php disabled( true, $meta_box['args']['preview'] ); ?> />
|
678 |
+
</td>
|
679 |
+
</tr>
|
680 |
+
<tr>
|
681 |
+
<th>
|
682 |
+
<label for="ots-member-skill-4"><?php _e( 'Attribute / Skill 4', 'ots' ); ?></label>
|
683 |
+
</th>
|
684 |
+
<td>
|
685 |
+
<input id="ots-member-skill-4"
|
686 |
+
name="team_member_skill_titles[]"
|
687 |
+
class="ots-member-skill-title"
|
688 |
+
placeholder="<?php _e( 'Title', 'ots' ); ?>"
|
689 |
+
value="<?php esc_attr_e( $member->skill4 ); ?>"
|
690 |
+
|
691 |
+
<?php disabled( true, $meta_box['args']['preview'] ); ?> />
|
692 |
+
|
693 |
+
<input id="ots-member-skill-4"
|
694 |
+
name="team_member_skill_ratings[]"
|
695 |
+
class="ots-member-skill-rating"
|
696 |
+
type="number"
|
697 |
+
min="1"
|
698 |
+
max="10"
|
699 |
+
placeholder="<?php _e( 'Rating 1 - 10', 'ots' ); ?>"
|
700 |
+
value="<?php esc_attr_e( $member->skill_value4 ); ?>"
|
701 |
+
|
702 |
+
<?php disabled( true, $meta_box['args']['preview'] ); ?> />
|
703 |
+
</td>
|
704 |
+
</tr>
|
705 |
+
<tr>
|
706 |
+
<th>
|
707 |
+
<label for="ots-member-skill-5"><?php _e( 'Attribute / Skill 5', 'ots' ); ?></label>
|
708 |
+
</th>
|
709 |
+
<td>
|
710 |
+
<input id="ots-member-skill-5"
|
711 |
+
name="team_member_skill_titles[]"
|
712 |
+
class="ots-member-skill-title"
|
713 |
+
placeholder="<?php _e( 'Title', 'ots' ); ?>"
|
714 |
+
value="<?php esc_attr_e( $member->skill5 ); ?>"
|
715 |
+
|
716 |
+
<?php disabled( true, $meta_box['args']['preview'] ); ?> />
|
717 |
+
|
718 |
+
<input id="ots-member-skill-5"
|
719 |
+
name="team_member_skill_ratings[]"
|
720 |
+
class="ots-member-skill-rating"
|
721 |
+
type="number"
|
722 |
+
min="1"
|
723 |
+
max="10"
|
724 |
+
placeholder="<?php _e( 'Rating 1 - 10', 'ots' ); ?>"
|
725 |
+
value="<?php esc_attr_e( $member->skill_value5 ); ?>"
|
726 |
+
|
727 |
+
<?php disabled( true, $meta_box['args']['preview'] ); ?> />
|
728 |
+
</td>
|
729 |
+
</tr>
|
730 |
+
</table>
|
731 |
+
|
732 |
+
<?php }
|
733 |
+
|
734 |
+
|
735 |
+
/**
|
736 |
+
* Output the tags metabox. Note all fields are disabled by default and this metabox has no save handler.
|
737 |
+
*
|
738 |
+
* @param \WP_Post $post
|
739 |
+
* @param array $meta_box
|
740 |
+
* @since 4.0.0
|
741 |
+
*/
|
742 |
+
function do_tags_meta_box( \WP_Post $post, array $meta_box ) { ?>
|
743 |
+
|
744 |
+
<?php wp_nonce_field( 'tags_meta_box', 'tags_meta_box_nonce' ); ?>
|
745 |
+
|
746 |
+
<?php $member = team_member( $post ); ?>
|
747 |
+
|
748 |
+
<table id="ots-tags-meta-box" class="ots-meta-box widefat">
|
749 |
+
<tr>
|
750 |
+
<th>
|
751 |
+
<label for="ots-display-member-tags"><?php _e( 'Display Tags', 'ots' ); ?></label>
|
752 |
+
</th>
|
753 |
+
<td>
|
754 |
+
<label>
|
755 |
+
<input id="ots-display-member-tags"
|
756 |
+
name="team_member_tags_bool"
|
757 |
+
type="checkbox" <?php checked( $member->tags_bool, 'on' ); ?>
|
758 |
+
|
759 |
+
<?php disabled( true, $meta_box['args']['preview'] ); ?> />
|
760 |
+
</label>
|
761 |
+
</td>
|
762 |
+
</tr>
|
763 |
+
<tr>
|
764 |
+
<th>
|
765 |
+
<label for="ots-member-tags-title"><?php _e( 'Tags Title', 'ots' ); ?></label>
|
766 |
+
</th>
|
767 |
+
<td>
|
768 |
+
<input id="ots-member-tags-title"
|
769 |
+
name="team_member_tags_title"
|
770 |
+
class="regular-text"
|
771 |
+
value="<?php esc_attr_e( $member->tags_title ); ?>"
|
772 |
+
|
773 |
+
<?php disabled( true, $meta_box['args']['preview'] ); ?> />
|
774 |
+
</td>
|
775 |
+
</tr>
|
776 |
+
<tr>
|
777 |
+
<th>
|
778 |
+
<label for="ots-member-tags"><?php _e( 'Attributes', 'ots' ); ?></label>
|
779 |
+
</th>
|
780 |
+
<td>
|
781 |
+
<textarea id="ots-member-tags"
|
782 |
+
name="team_member_tags"
|
783 |
+
class="regular-text"
|
784 |
+
placeholder="<?php _e( 'Enter attributes, comma separated', 'ots' ); ?>"
|
785 |
+
|
786 |
+
<?php disabled( true, $meta_box['args']['preview'] ); ?>
|
787 |
+
|
788 |
+
><?php esc_html_e( $member->tags ); ?></textarea>
|
789 |
+
</td>
|
790 |
+
</tr>
|
791 |
+
<tr>
|
792 |
+
<th>
|
793 |
+
<label for="ots-member-personal-quote"><?php _e( 'Personal Quote', 'ots' ); ?></label>
|
794 |
+
</th>
|
795 |
+
<td>
|
796 |
+
<input id="ots-member-personal-quote"
|
797 |
+
name="team_member_quote"
|
798 |
+
class="regular-text"
|
799 |
+
value="<?php esc_attr_e( $member->quote ); ?>"
|
800 |
+
|
801 |
+
<?php disabled( true, $meta_box['args']['preview'] ); ?> />
|
802 |
+
</td>
|
803 |
+
</tr>
|
804 |
+
</table>
|
805 |
+
|
806 |
+
<?php }
|
includes/widgets.php
ADDED
@@ -0,0 +1,31 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ots;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* Register the plugin's widgets.
|
7 |
+
*
|
8 |
+
* @since 4.0.0
|
9 |
+
*/
|
10 |
+
function register_widgets() {
|
11 |
+
|
12 |
+
register_widget( TeamSidebarWidget::class );
|
13 |
+
register_widget( TeamMainWidget::class );
|
14 |
+
|
15 |
+
}
|
16 |
+
|
17 |
+
add_action( 'widgets_init', 'ots\register_widgets' );
|
18 |
+
|
19 |
+
|
20 |
+
/**
|
21 |
+
* Enqueue scripts for the sidebar widget.
|
22 |
+
*
|
23 |
+
* @since 4.0.0
|
24 |
+
*/
|
25 |
+
function enqueue_widget_scripts() {
|
26 |
+
|
27 |
+
wp_enqueue_style( 'ots-widget' );
|
28 |
+
|
29 |
+
}
|
30 |
+
|
31 |
+
add_action( 'wp_enqueue_scripts', 'ots\enqueue_widget_scripts' );
|
languages/ots.pot
ADDED
File without changes
|
our-team-showcase.php
ADDED
@@ -0,0 +1,207 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* Plugin Name: Our Team Showcase
|
4 |
+
* Plugin URI: http://URI_Of_Page_Describing_Plugin_and_Updates
|
5 |
+
* Description: A brief description of the Plugin.
|
6 |
+
* Version: 4.0.0
|
7 |
+
* Author: Smartcat
|
8 |
+
* Author URI: https://smartcatdesign.net
|
9 |
+
* License: GPL2
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace ots;
|
13 |
+
|
14 |
+
/**
|
15 |
+
* Include constants and Options definitions
|
16 |
+
*/
|
17 |
+
include_once dirname( __FILE__ ) . '/constants.php';
|
18 |
+
|
19 |
+
|
20 |
+
/**
|
21 |
+
* Load the plugin's text domain.
|
22 |
+
*
|
23 |
+
* @since 4.0.0
|
24 |
+
*/
|
25 |
+
function load_text_domain() {
|
26 |
+
|
27 |
+
load_plugin_textdomain( 'ots', false, dirname( plugin_basename( __FILE__ ) ) . '/languages' );
|
28 |
+
|
29 |
+
}
|
30 |
+
|
31 |
+
add_action( 'plugins_loaded', 'ots\load_text_domain' );
|
32 |
+
|
33 |
+
|
34 |
+
/**
|
35 |
+
* Includes required files and initializes the plugin.
|
36 |
+
*
|
37 |
+
* @since 4.0.0
|
38 |
+
*/
|
39 |
+
function init() {
|
40 |
+
|
41 |
+
include_once dirname( __FILE__ ) . '/upgrade.php';
|
42 |
+
include_once dirname( __FILE__ ) . '/includes/functions.php';
|
43 |
+
include_once dirname( __FILE__ ) . '/includes/helpers.php';
|
44 |
+
include_once dirname( __FILE__ ) . '/includes/team_member-post-type.php';
|
45 |
+
include_once dirname( __FILE__ ) . '/includes/admin-settings.php';
|
46 |
+
include_once dirname( __FILE__ ) . '/includes/documentation.php';
|
47 |
+
include_once dirname( __FILE__ ) . '/includes/add-ons.php';
|
48 |
+
include_once dirname( __FILE__ ) . '/includes/reorder-members.php';
|
49 |
+
include_once dirname( __FILE__ ) . '/includes/team-view.php';
|
50 |
+
include_once dirname( __FILE__ ) . '/includes/TeamMainWidget.php';
|
51 |
+
include_once dirname( __FILE__ ) . '/includes/TeamSidebarWidget.php';
|
52 |
+
include_once dirname( __FILE__ ) . '/includes/TeamMember.php';
|
53 |
+
include_once dirname( __FILE__ ) . '/includes/widgets.php';
|
54 |
+
include_once dirname( __FILE__ ) . '/includes/extension-licensing.php';
|
55 |
+
|
56 |
+
$license_page_args = array(
|
57 |
+
'parent_slug' => 'edit.php?post_type=team_member',
|
58 |
+
'page_title' => __( 'Our Team Showcase Licenses', 'ots' ),
|
59 |
+
'menu_title' => __( 'Licenses', 'ots' ),
|
60 |
+
'capability' => 'manage_options',
|
61 |
+
'menu_slug' => 'ots-licenses'
|
62 |
+
);
|
63 |
+
|
64 |
+
$registration = new \SC_License_Manager( 'ots', 'submenu', $license_page_args );
|
65 |
+
|
66 |
+
|
67 |
+
// All done
|
68 |
+
do_action( 'ots_loaded' );
|
69 |
+
|
70 |
+
}
|
71 |
+
|
72 |
+
add_action( 'plugins_loaded', 'ots\init' );
|
73 |
+
|
74 |
+
|
75 |
+
function register_scripts() {
|
76 |
+
|
77 |
+
// We need this on all pages
|
78 |
+
wp_enqueue_style( 'ots-common', asset( 'css/common.css' ), null, VERSION );
|
79 |
+
|
80 |
+
wp_register_style( 'ots-team-view', asset( 'css/team-view.css' ), null, VERSION );
|
81 |
+
wp_register_style( 'ots-widget', asset( 'css/widgets.css' ), null, VERSION );
|
82 |
+
wp_register_style( 'ots-single', asset( 'css/single.css' ), null, VERSION );
|
83 |
+
|
84 |
+
wp_register_script( 'ots', asset( 'js/script.js' ), array( 'jquery' ), VERSION );
|
85 |
+
|
86 |
+
}
|
87 |
+
|
88 |
+
add_action( 'init', 'ots\register_scripts' );
|
89 |
+
|
90 |
+
|
91 |
+
function enqueue_customizer_scripts() {
|
92 |
+
|
93 |
+
|
94 |
+
wp_enqueue_script( 'ots-customizer', asset( 'admin/js/customizer.js' ), array( 'jquery', 'customize-controls' ), false );
|
95 |
+
|
96 |
+
}
|
97 |
+
|
98 |
+
add_action( 'customize_controls_enqueue_scripts', 'ots\enqueue_customizer_scripts' );
|
99 |
+
|
100 |
+
|
101 |
+
/**
|
102 |
+
* Runs on plugin activation.
|
103 |
+
*
|
104 |
+
* @since 4.0.0
|
105 |
+
*/
|
106 |
+
function activate() {
|
107 |
+
|
108 |
+
init();
|
109 |
+
|
110 |
+
register_team_member_post_type();
|
111 |
+
register_team_member_position_taxonomy();
|
112 |
+
|
113 |
+
flush_rewrite_rules();
|
114 |
+
|
115 |
+
}
|
116 |
+
|
117 |
+
register_activation_hook( __FILE__, 'ots\activate' );
|
118 |
+
|
119 |
+
|
120 |
+
/**
|
121 |
+
* Runs on plugin deactivation.
|
122 |
+
*
|
123 |
+
* @since 4.0.0
|
124 |
+
*/
|
125 |
+
function deactivate() {
|
126 |
+
|
127 |
+
init();
|
128 |
+
|
129 |
+
unregister_post_type( 'team_member' );
|
130 |
+
unregister_taxonomy( 'team_member_position' );
|
131 |
+
|
132 |
+
}
|
133 |
+
|
134 |
+
register_deactivation_hook( __FILE__, 'ots\deactivate' );
|
135 |
+
|
136 |
+
|
137 |
+
/**
|
138 |
+
* Get the URL of an asset from the assets folder.
|
139 |
+
*
|
140 |
+
* @param string $path
|
141 |
+
* @return string
|
142 |
+
* @since 4.0.0
|
143 |
+
*/
|
144 |
+
function asset( $path = '', $url = true ) {
|
145 |
+
|
146 |
+
if( $url ) {
|
147 |
+
$file = trailingslashit( plugin_dir_url( __FILE__ ) );
|
148 |
+
} else {
|
149 |
+
$file = trailingslashit( plugin_dir_path( __FILE__ ) );
|
150 |
+
}
|
151 |
+
|
152 |
+
return $file . 'assets/' . ltrim( $path, '/' );
|
153 |
+
|
154 |
+
}
|
155 |
+
|
156 |
+
|
157 |
+
/**
|
158 |
+
* Get the path of a template file.
|
159 |
+
*
|
160 |
+
* @param string $template The file name in the format of file.php.
|
161 |
+
* @return bool|string False if the file does not exist, the path if it does.
|
162 |
+
*/
|
163 |
+
function template_path( $template ) {
|
164 |
+
|
165 |
+
$template = trim( $template, '/' );
|
166 |
+
$template = rtrim( $template, '.php' );
|
167 |
+
|
168 |
+
$base = trailingslashit( dirname( __FILE__ ) . '/templates' );
|
169 |
+
|
170 |
+
$file = $base . $template . '.php';
|
171 |
+
|
172 |
+
if( file_exists( $file ) ) {
|
173 |
+
return $file;
|
174 |
+
}
|
175 |
+
|
176 |
+
return false;
|
177 |
+
|
178 |
+
}
|
179 |
+
|
180 |
+
/**
|
181 |
+
* Add action links to plugins page.
|
182 |
+
*
|
183 |
+
* @param $links
|
184 |
+
* @return array
|
185 |
+
* @since 4.0.0
|
186 |
+
*/
|
187 |
+
function plugin_action_links( $links ) {
|
188 |
+
|
189 |
+
$upgrade = array(
|
190 |
+
'upgrade' => '<a target="_blank" href="https://smartcatdesign.net/downloads/our-team-showcase/">' . __( 'Go Pro', 'ots' ) . '</a>'
|
191 |
+
);
|
192 |
+
|
193 |
+
$settings = array(
|
194 |
+
'settings' => '<a href="' . admin_url( 'edit.php?post_type=team_member&page=ots-settings' ) . '">' . __( 'Settings', 'ots' ) . '</a>'
|
195 |
+
);
|
196 |
+
|
197 |
+
$links = array_merge( $settings, $links );
|
198 |
+
|
199 |
+
if( apply_filters( 'ots_enable_pro_preview', true ) ) {
|
200 |
+
$links = array_merge( $upgrade, $links );
|
201 |
+
}
|
202 |
+
|
203 |
+
return $links;
|
204 |
+
|
205 |
+
}
|
206 |
+
|
207 |
+
add_action( 'plugin_action_links_' . plugin_basename( __FILE__ ), 'ots\plugin_action_links' );
|
readme.txt
CHANGED
@@ -1,17 +1,17 @@
|
|
1 |
=== Our Team Showcase ===
|
2 |
Contributors: smartcat
|
3 |
-
Donate link:
|
4 |
Tags: team, staff, directory, employees, widget, shortcode, members, carousel, honeycomb, stack, grid, custom, template, social, profile, custom post type, portfolio, profile,meet team, skills, cv,v-card, portal
|
5 |
-
Requires at least: 4.
|
6 |
-
Tested up to: 4.
|
7 |
-
Stable tag:
|
8 |
License: GPLv2 or later
|
9 |
|
10 |
The best way to display your employees, team members, or any type of list. Multiple appealing templates,SEO friendly, re-order functionality.
|
11 |
|
12 |
== Description ==
|
13 |
|
14 |
-
[View Demo](
|
15 |
|
16 |
Our Team Showcase allows you to easily create and display your team members & staff and show them on your site with ease. Your visitors will see a beautiful & animated
|
17 |
list of your team, with their pictures, links to social icons, and link to each member page.
|
@@ -88,6 +88,9 @@ Team Member Details & Icons:
|
|
88 |
|
89 |
== Changelog ==
|
90 |
|
|
|
|
|
|
|
91 |
= 3.0.0
|
92 |
1. Added new social icons ( pinterest, instagram )
|
93 |
2. Added Recommended Articles section in Single Member. You can now toggle a section for each member that outputs up to 3 articles from your blog.
|
1 |
=== Our Team Showcase ===
|
2 |
Contributors: smartcat
|
3 |
+
Donate link: https://smartcatdesign.net/downloads/our-team-showcase/
|
4 |
Tags: team, staff, directory, employees, widget, shortcode, members, carousel, honeycomb, stack, grid, custom, template, social, profile, custom post type, portfolio, profile,meet team, skills, cv,v-card, portal
|
5 |
+
Requires at least: 4.6
|
6 |
+
Tested up to: 4.8.1
|
7 |
+
Stable tag: 3.0.0
|
8 |
License: GPLv2 or later
|
9 |
|
10 |
The best way to display your employees, team members, or any type of list. Multiple appealing templates,SEO friendly, re-order functionality.
|
11 |
|
12 |
== Description ==
|
13 |
|
14 |
+
[View Demo](http://wordpressteamplugin.com/templates/)
|
15 |
|
16 |
Our Team Showcase allows you to easily create and display your team members & staff and show them on your site with ease. Your visitors will see a beautiful & animated
|
17 |
list of your team, with their pictures, links to social icons, and link to each member page.
|
88 |
|
89 |
== Changelog ==
|
90 |
|
91 |
+
= 4.0.0 =
|
92 |
+
Plugin re-write. Settings and team member data will be maintained
|
93 |
+
|
94 |
= 3.0.0
|
95 |
1. Added new social icons ( pinterest, instagram )
|
96 |
2. Added Recommended Articles section in Single Member. You can now toggle a section for each member that outputs up to 3 articles from your blog.
|
sc_our_team.php
DELETED
@@ -1,65 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/*
|
3 |
-
Plugin Name: Our Team Showcase
|
4 |
-
Plugin URI: https://smartcatdesign.net/downloads/our-team-showcase/
|
5 |
-
Description: Display your team members in a very attractive way as a widget or page with the shortcode [our-team]
|
6 |
-
Version: 3.0.0
|
7 |
-
Author: SmartCat
|
8 |
-
Author URI: https://smartcatdesign.net
|
9 |
-
License: GPL v2
|
10 |
-
*
|
11 |
-
* @author Bilal Hassan <bilal@smartcat.ca>
|
12 |
-
* @copyright Smartcat Design <http://smartcatdesign.net>
|
13 |
-
*
|
14 |
-
*/
|
15 |
-
|
16 |
-
|
17 |
-
if( !defined( 'ABSPATH' ) ) {
|
18 |
-
die;
|
19 |
-
}
|
20 |
-
if (!defined('SC_TEAM_PATH'))
|
21 |
-
define('SC_TEAM_PATH', plugin_dir_path(__FILE__));
|
22 |
-
if (!defined('SC_TEAM_URL'))
|
23 |
-
define('SC_TEAM_URL', plugin_dir_url(__FILE__));
|
24 |
-
|
25 |
-
|
26 |
-
require_once ( plugin_dir_path( __FILE__ ) . 'inc/class/class.smartcat-team.php' );
|
27 |
-
|
28 |
-
register_activation_hook( __FILE__, array( 'SmartcatTeamPlugin', 'activate' ) );
|
29 |
-
register_deactivation_hook( __FILE__, array('SmartcatTeamPlugin', 'deactivate') );
|
30 |
-
|
31 |
-
SmartcatTeamPlugin::instance();
|
32 |
-
|
33 |
-
|
34 |
-
require_once SC_TEAM_PATH . 'admin/class/class-tgm-plugin-activation.php';
|
35 |
-
|
36 |
-
//add_action('tgmpa_register', 'sc_team_register_required_plugin');
|
37 |
-
|
38 |
-
|
39 |
-
function sc_team_register_required_plugin() {
|
40 |
-
|
41 |
-
$plugins = array(
|
42 |
-
|
43 |
-
array(
|
44 |
-
'name' => 'Reviews & Testimonials Showcase',
|
45 |
-
'slug' => 'testimonials-reviews-showcase',
|
46 |
-
'required' => false,
|
47 |
-
),
|
48 |
-
);
|
49 |
-
|
50 |
-
$config = array(
|
51 |
-
'id' => 'tgmpa', // Unique ID for hashing notices for multiple instances of TGMPA.
|
52 |
-
'default_path' => '', // Default absolute path to bundled plugins.
|
53 |
-
'menu' => 'tgmpa-install-plugins', // Menu slug.
|
54 |
-
'parent_slug' => 'themes.php', // Parent menu slug.
|
55 |
-
'capability' => 'edit_theme_options', // Capability needed to view plugin install page, should be a capability associated with the parent menu used.
|
56 |
-
'has_notices' => false, // Show admin notices or not.
|
57 |
-
'dismissable' => true, // If false, a user cannot dismiss the nag message.
|
58 |
-
'dismiss_msg' => '', // If 'dismissable' is false, this message will be output at top of nag.
|
59 |
-
'is_automatic' => false, // Automatically activate plugins after installation or not.
|
60 |
-
'message' => '', // Message to output right before the plugins table.
|
61 |
-
|
62 |
-
);
|
63 |
-
|
64 |
-
tgmpa($plugins, $config);
|
65 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
screenshot-1.jpg
DELETED
Binary file
|
screenshot-3.png
DELETED
Binary file
|
screenshot-4.jpg
DELETED
Binary file
|
screenshot-5.jpg
DELETED
Binary file
|
screenshot-6.jpg
DELETED
Binary file
|
stacked_demo.jpg
DELETED
Binary file
|
templates/grid-circles-2.php
ADDED
@@ -0,0 +1,73 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ots;
|
4 |
+
|
5 |
+
?>
|
6 |
+
|
7 |
+
<div id="sc_our_team" class="grid_circles2 sc-col<?php esc_attr_e( get_option( Options::GRID_COLUMNS ) ); ?>">
|
8 |
+
|
9 |
+
<div class="clear"></div>
|
10 |
+
|
11 |
+
<?php if ( $members->have_posts() ) : ?>
|
12 |
+
|
13 |
+
<?php while ( $members->have_posts() ) : $members->the_post(); ?>
|
14 |
+
|
15 |
+
<div itemscope itemtype="http://schema.org/Person" class="sc_team_member" data-id="<?php the_ID(); ?>">
|
16 |
+
|
17 |
+
<div class="sc_team_member_inner">
|
18 |
+
|
19 |
+
<?php member_avatar(); ?>
|
20 |
+
|
21 |
+
<?php if ( get_option( Options::DISPLAY_NAME ) == 'on' ) : ?>
|
22 |
+
|
23 |
+
<div itemprop="name" class="sc_team_member_name">
|
24 |
+
|
25 |
+
<?php if( $single_template !== 'disable' ) : ?>
|
26 |
+
|
27 |
+
<a href="<?php the_permalink(); ?>" rel="bookmark" class="team_member_link">
|
28 |
+
|
29 |
+
<?php the_title() ?>
|
30 |
+
|
31 |
+
</a>
|
32 |
+
|
33 |
+
<?php else : ?>
|
34 |
+
|
35 |
+
<?php the_title(); ?>
|
36 |
+
|
37 |
+
<?php endif; ?>
|
38 |
+
|
39 |
+
</div>
|
40 |
+
|
41 |
+
<?php endif; ?>
|
42 |
+
|
43 |
+
<?php if ( get_option( Options::DISPLAY_TITLE ) == 'on' ) : ?>
|
44 |
+
|
45 |
+
<div itemprop="jobtitle" class="sc_team_member_jobtitle">
|
46 |
+
<span><?php esc_html_e( get_post_meta( get_the_ID(), 'team_member_title', true ) ); ?></span>
|
47 |
+
</div>
|
48 |
+
|
49 |
+
<?php endif; ?>
|
50 |
+
|
51 |
+
<div class="icons <?php echo get_option( Options::SHOW_SOCIAL ) ? '' : 'hidden'; ?>">
|
52 |
+
<?php do_member_social_links(); ?>
|
53 |
+
</div>
|
54 |
+
|
55 |
+
<div class="sc_team_member_overlay"></div>
|
56 |
+
|
57 |
+
</div>
|
58 |
+
|
59 |
+
</div>
|
60 |
+
|
61 |
+
<?php wp_reset_postdata(); ?>
|
62 |
+
|
63 |
+
<?php endwhile; ?>
|
64 |
+
|
65 |
+
<?php else : ?>
|
66 |
+
|
67 |
+
<?php _e( 'There are no team members to display.', 'ots' ); ?>
|
68 |
+
|
69 |
+
<?php endif; ?>
|
70 |
+
|
71 |
+
<div class="clear"></div>
|
72 |
+
|
73 |
+
</div>
|
templates/grid-circles.php
ADDED
@@ -0,0 +1,71 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ots;
|
4 |
+
|
5 |
+
?>
|
6 |
+
|
7 |
+
<div id="sc_our_team" class="grid_circles sc-col<?php esc_attr_e( get_option( Options::GRID_COLUMNS ) ); ?>">
|
8 |
+
|
9 |
+
<div class="clear"></div>
|
10 |
+
|
11 |
+
<?php if ( $members->have_posts() ) : ?>
|
12 |
+
|
13 |
+
<?php while ( $members->have_posts() ) : $members->the_post(); ?>
|
14 |
+
|
15 |
+
<div itemscope itemtype="http://schema.org/Person" class="sc_team_member" data-id="<?php the_ID(); ?>">
|
16 |
+
|
17 |
+
<div class="sc_team_member_inner">
|
18 |
+
|
19 |
+
<?php member_avatar(); ?>
|
20 |
+
|
21 |
+
<?php if ( get_option( Options::DISPLAY_NAME ) == 'on' ) : ?>
|
22 |
+
|
23 |
+
<div itemprop="name" class="sc_team_member_name"><?php the_title() ?></div>
|
24 |
+
|
25 |
+
<?php endif; ?>
|
26 |
+
|
27 |
+
<?php if ( get_option( Options::DISPLAY_TITLE ) == 'on' ) : ?>
|
28 |
+
|
29 |
+
<div itemprop="jobtitle" class="sc_team_member_jobtitle">
|
30 |
+
<?php esc_html_e( get_post_meta( get_the_ID(), 'team_member_title', true ) ); ?>
|
31 |
+
</div>
|
32 |
+
|
33 |
+
<?php endif; ?>
|
34 |
+
|
35 |
+
<div class="icons <?php echo get_option( Options::SHOW_SOCIAL ) ? '' : 'hidden'; ?>">
|
36 |
+
<?php do_member_social_links(); ?>
|
37 |
+
</div>
|
38 |
+
|
39 |
+
<div class="sc_team_member_overlay"></div>
|
40 |
+
|
41 |
+
<?php if( $single_template !== 'disable' ) : ?>
|
42 |
+
|
43 |
+
<div class="sc_team_more">
|
44 |
+
<a href="<?php the_permalink(); ?>"
|
45 |
+
class="team_member_link"
|
46 |
+
rel="bookmark">
|
47 |
+
|
48 |
+
<img src="<?php echo esc_url( asset( 'images/more.png' ) ); ?>"/>
|
49 |
+
|
50 |
+
</a>
|
51 |
+
</div>
|
52 |
+
|
53 |
+
<?php endif; ?>
|
54 |
+
|
55 |
+
</div>
|
56 |
+
|
57 |
+
</div>
|
58 |
+
|
59 |
+
<?php wp_reset_postdata(); ?>
|
60 |
+
|
61 |
+
<?php endwhile; ?>
|
62 |
+
|
63 |
+
<?php else : ?>
|
64 |
+
|
65 |
+
<?php _e( 'There are no team members to display.', 'ots' ); ?>
|
66 |
+
|
67 |
+
<?php endif; ?>
|
68 |
+
|
69 |
+
<div class="clear"></div>
|
70 |
+
|
71 |
+
</div>
|
templates/grid.php
ADDED
@@ -0,0 +1,71 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ots;
|
4 |
+
|
5 |
+
?>
|
6 |
+
|
7 |
+
<div id="sc_our_team" class="grid sc-col<?php esc_attr_e( get_option( Options::GRID_COLUMNS ) ); ?>">
|
8 |
+
|
9 |
+
<div class="clear"></div>
|
10 |
+
|
11 |
+
<?php if ( $members->have_posts() ) : ?>
|
12 |
+
|
13 |
+
<?php while ( $members->have_posts() ) : $members->the_post(); ?>
|
14 |
+
|
15 |
+
<div itemscope itemtype="http://schema.org/Person" class="sc_team_member" data-id="<?php the_ID(); ?>">
|
16 |
+
|
17 |
+
<div class="sc_team_member_inner">
|
18 |
+
|
19 |
+
<?php member_avatar(); ?>
|
20 |
+
|
21 |
+
<?php if ( get_option( Options::DISPLAY_NAME ) == 'on' ) : ?>
|
22 |
+
|
23 |
+
<div itemprop="name" class="sc_team_member_name"><?php the_title() ?></div>
|
24 |
+
|
25 |
+
<?php endif; ?>
|
26 |
+
|
27 |
+
<?php if ( get_option( Options::DISPLAY_TITLE ) == 'on' ) : ?>
|
28 |
+
|
29 |
+
<div itemprop="jobtitle" class="sc_team_member_jobtitle">
|
30 |
+
<?php esc_html_e( get_post_meta( get_the_ID(), 'team_member_title', true ) ); ?>
|
31 |
+
</div>
|
32 |
+
|
33 |
+
<?php endif; ?>
|
34 |
+
|
35 |
+
<div class="icons <?php echo get_option( Options::SHOW_SOCIAL ) ? '' : 'hidden'; ?>">
|
36 |
+
<?php do_member_social_links(); ?>
|
37 |
+
</div>
|
38 |
+
|
39 |
+
<div class="sc_team_member_overlay"></div>
|
40 |
+
|
41 |
+
<?php if( $single_template !== 'disable' ) : ?>
|
42 |
+
|
43 |
+
<div class="sc_team_more">
|
44 |
+
<a href="<?php the_permalink(); ?>"
|
45 |
+
class="team_member_link"
|
46 |
+
rel="bookmark">
|
47 |
+
|
48 |
+
<img src="<?php echo esc_url( asset( 'images/more.png' ) ); ?>"/>
|
49 |
+
|
50 |
+
</a>
|
51 |
+
</div>
|
52 |
+
|
53 |
+
<?php endif; ?>
|
54 |
+
|
55 |
+
</div>
|
56 |
+
|
57 |
+
</div>
|
58 |
+
|
59 |
+
<?php wp_reset_postdata(); ?>
|
60 |
+
|
61 |
+
<?php endwhile; ?>
|
62 |
+
|
63 |
+
<?php else : ?>
|
64 |
+
|
65 |
+
<?php _e( 'There are no team members to display.', 'ots' ); ?>
|
66 |
+
|
67 |
+
<?php endif; ?>
|
68 |
+
|
69 |
+
<div class="clear"></div>
|
70 |
+
|
71 |
+
</div>
|
uninstall.php
ADDED
@@ -0,0 +1,53 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ots;
|
4 |
+
|
5 |
+
if( !defined( 'WP_UNINSTALL_PLUGIN' ) ) {
|
6 |
+
die;
|
7 |
+
}
|
8 |
+
|
9 |
+
/**
|
10 |
+
* Uninstall script. Deletes all options, terms and trashes posts.
|
11 |
+
*
|
12 |
+
* @since 4.0.0
|
13 |
+
*/
|
14 |
+
|
15 |
+
include_once dirname( __FILE__ ) . '/constants.php';
|
16 |
+
include_once dirname( __FILE__ ) . '/includes/team_member-post-type.php';
|
17 |
+
|
18 |
+
|
19 |
+
|
20 |
+
if ( get_option( Options::NUKE ) == 'on' ) {
|
21 |
+
|
22 |
+
// Trash all team member posts
|
23 |
+
$posts = get_posts( array(
|
24 |
+
'post_type' => 'team_member',
|
25 |
+
'posts_per_page' => -1
|
26 |
+
) );
|
27 |
+
|
28 |
+
foreach( $posts as $post ) {
|
29 |
+
wp_trash_post( $post->ID );
|
30 |
+
}
|
31 |
+
|
32 |
+
|
33 |
+
// Delete all terms from the taxonomy
|
34 |
+
register_team_member_position_taxonomy();
|
35 |
+
|
36 |
+
$terms = get_terms( array(
|
37 |
+
'taxonomy' => 'team_member_position',
|
38 |
+
'hide_empty' => false,
|
39 |
+
) );
|
40 |
+
|
41 |
+
foreach( $terms as $term ) {
|
42 |
+
wp_delete_term( $term->term_id, 'team_member_position' );
|
43 |
+
}
|
44 |
+
|
45 |
+
|
46 |
+
// Delete all plugin settings
|
47 |
+
$options = new \ReflectionClass( Options::class );
|
48 |
+
|
49 |
+
foreach( $options->getConstants() as $option ) {
|
50 |
+
delete_option( $option );
|
51 |
+
}
|
52 |
+
|
53 |
+
}
|
upgrade.php
ADDED
@@ -0,0 +1,59 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ots;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* Upgrades and migrates the plugin's settings.
|
7 |
+
*
|
8 |
+
* @since 4.0.0
|
9 |
+
*/
|
10 |
+
function do_migration() {
|
11 |
+
|
12 |
+
$options = get_option( 'smartcat_team_options', false );
|
13 |
+
|
14 |
+
if ( get_option( Options::PLUGIN_VERSION, 0 ) < '4.0.0' ) {
|
15 |
+
|
16 |
+
// Map out all non-boolean values
|
17 |
+
$map = array(
|
18 |
+
'margin' => Options::MARGIN,
|
19 |
+
'slug' => Options::REWRITE_SLUG,
|
20 |
+
'template' => Options::TEMPLATE,
|
21 |
+
'single_template' => Options::SINGLE_TEMPLATE
|
22 |
+
);
|
23 |
+
|
24 |
+
foreach( $map as $old => $new ) {
|
25 |
+
update_option( $new, $options[ $old ] );
|
26 |
+
}
|
27 |
+
|
28 |
+
|
29 |
+
// Map out all boolean values
|
30 |
+
$checkboxes = array(
|
31 |
+
'social' => Options::SHOW_SOCIAL,
|
32 |
+
'single_social' => Options::SHOW_SINGLE_SOCIAL,
|
33 |
+
'name' => Options::DISPLAY_NAME,
|
34 |
+
'title' => Options::DISPLAY_TITLE,
|
35 |
+
);
|
36 |
+
|
37 |
+
foreach ( $checkboxes as $old => $new ) {
|
38 |
+
update_option( $new, $options[ $old ] == 'yes' ? 'on' : '' );
|
39 |
+
}
|
40 |
+
|
41 |
+
|
42 |
+
// Add hash to main color
|
43 |
+
update_option( Options::MAIN_COLOR, '#' . $options['text_color'] );
|
44 |
+
|
45 |
+
// If the value was -1 set it to 'on' to display all
|
46 |
+
update_option( Options::GRID_COLUMNS, $options['columns'] < 0 ? 'on' : $options['columns'] );
|
47 |
+
update_option( Options::DISPLAY_LIMIT, $options['member_count'] < 0 ? 'all' : $options['member_count'] );
|
48 |
+
|
49 |
+
// If show social icons was set to open a new tab, change it to a boolean
|
50 |
+
update_option( Options::SOCIAL_LINK_ACTION, $options['social_link'] === 'new' ? 'on' : '' );
|
51 |
+
|
52 |
+
// Update the plugin version
|
53 |
+
update_option( Options::PLUGIN_VERSION, VERSION );
|
54 |
+
|
55 |
+
}
|
56 |
+
|
57 |
+
}
|
58 |
+
|
59 |
+
add_action( 'admin_init', 'ots\do_migration' );
|