Add upstream

This commit is contained in:
root
2019-10-24 00:12:05 +02:00
parent 85d41e4216
commit ac980f592c
3504 changed files with 1049983 additions and 29971 deletions

View File

@@ -0,0 +1,339 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc., <http://fsf.org/>
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
{description}
Copyright (C) {year} {fullname}
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
{signature of Ty Coon}, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License.

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,18 @@
#ab_chart {
color: #a0a5aa;
height: 140px;
margin: 0 -4px;
text-align: center;
}
#ab_chart_data {
display: none;
}
#ab_widget .inside {
height: 1%;
margin: 0;
padding-bottom: 0;
overflow: hidden;
position: relative;
white-space: nowrap;
}

View File

@@ -0,0 +1 @@
#ab_chart{color:#a0a5aa;height:140px;margin:0 -4px;text-align:center;}#ab_chart_data{display:none;}#ab_widget .inside{height:1%;margin:0;padding-bottom:0;overflow:hidden;position:relative;white-space:nowrap;}

View File

@@ -0,0 +1,268 @@
/* @group General */
.ab-main *,
.ab-main *:after,
.ab-main *:before {
border: 0;
margin: 0;
padding: 0;
outline: 0;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
/* @end group */
/* @group Browse Happy */
.browsehappy {
margin: 0 0 20px;
padding: 10px;
border: 1px solid #e66f00;
text-align: center;
}
/* @end group */
/* @group Columns */
.ab-wrap {
margin: 0 0 0 -10px;
padding: 20px 0 0 0;
text-rendering: optimizeLegibility;
}
.ab-column {
float: left;
margin: 0 0 0 10px;
position: relative;
}
/* @end group */
/* @group Headlines + Icons */
.ab-column h3 {
margin: 0;
font-size: 18px;
font-weight: normal;
line-height: 20px;
color: #23282d;
}
.ab-column h3.icon:before {
font: normal 30px/30px Dashicons;
top: 4px;
right: 20px;
speak: none;
width: 1em;
color: #8e959c;
position: absolute;
text-align: center;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.ab-column.ab-arrow h3.icon:before {
content: '\f536';
}
.ab-column.ab-join h3.icon:before {
content: '\f108';
}
.ab-column.ab-diff h3.icon:before {
content: '\f237';
}
.ab-column h6 {
clear: both;
color: #555d66;
margin: 0 0 20px;
font-weight: normal;
font-size: 13px;
}
/* @end group */
/* @group Form */
.ab-column input[type="text"],
.ab-column input[type="number"],
.ab-column select {
font-size: 13px;
text-align: center;
background: #f8f8f9;
}
.ab-column input[type="number"] {
padding: 0;
}
.ab-column select[multiple] {
width: 175px;
min-height: 60px;
}
.ab-column input.ab-mini-field {
width: 40px;
}
.ab-column .ab-medium-field {
width: 100%;
max-width: 285px;
}
.ab-column input[type="text"] + label,
.ab-column select + label {
color: #8e959c;
margin: 0 0 0 7px;
display: inline-block;
text-transform: uppercase;
}
/* @end group */
/* @group Column contents */
.ab-column > ul {
padding: 0 20px 0 0;
}
.ab-column:last-of-type > ul {
border: 0;
}
.ab-column > ul > li {
width: 330px;
margin: 0 0 36px;
padding: 10px 0 12px 12px;
position: relative;
background: #fff;
}
.ab-column > ul > li a {
text-decoration: underline;
}
.ab-column > ul > li a:hover {
border-color: inherit;
}
.ab-column > ul > li label {
cursor: default;
display: inline-block;
font-size: 14px;
max-width: 286px;
color: #23282d;
}
.ab-column > ul > li label span {
color: #555d66;
display: block;
font-size: 13px;
line-height: 16px;
margin-top: 5px;
}
/* @end group */
/* @group Separator */
.ab-column > ul > li:after,
.ab-column > ul > li:before {
width: 0;
content: '';
position: absolute;
}
.ab-column.ab-arrow > ul > li:before,
.ab-column.ab-arrow > ul > li:after {
left: 157px;
border-width: 10px 10px 0;
border-style: solid;
}
.ab-column.ab-arrow > ul > li:before {
bottom: -24px;
border-color: #fff transparent;
}
.ab-column.ab-arrow > ul > li:after {
bottom: -22px;
border-color: #f1f1f1 transparent;
}
.ab-column.ab-join > ul > li:before {
left: 171px;
bottom: -27px;
height: 18px;
border-right: 2px solid #fff;
}
.ab-column.ab-diff > ul > li:before {
left: 162px;
bottom: -19px;
width: 18px;
height: 0;
border-bottom: 2px solid #fff;
}
/* @end group */
/* @group Submit & Service */
.ab-column--submit-service {
width: 342px;
margin-top: 20px;
padding-right: 20px;
}
.ab-column--submit-service p {
padding: 5px 0;
margin: 0;
text-align: center;
width: 100%;
}
.ab-column--submit-service p:first-of-type {
border-top: 1px solid #e0e5e9;
}
.ab-column--submit-service p:last-of-type {
border-bottom: 1px solid #e0e5e9;
}
.ab-column--submit-service .button {
width: 100%;
margin: 35px 0 10px;
}
/* @end group */
/* @group 2nd level */
.ab-column > ul > li:last-of-type:after,
.ab-column > ul > li:last-of-type:before {
display: none;
}
.ab-column > ul > li > ul {
margin: 10px 10px 0 26px;
display: none;
}
.ab-column > ul > li > ul li {
padding: 2px 0;
}
.ab-column > ul > li > ul label {
margin: 0 0 0 7px;
}
.ab-column > ul > li > input[type="checkbox"]:checked ~ ul {
display: block;
}
/* @end group */

View File

@@ -0,0 +1 @@
.ab-main *,.ab-main :after,.ab-main :before{border:0;margin:0;padding:0;outline:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.browsehappy{margin:0 0 20px;padding:10px;border:1px solid #e66f00;text-align:center}.ab-wrap{margin:0 0 0 -10px;padding:20px 0 0;text-rendering:optimizeLegibility}.ab-column{float:left;margin:0 0 0 10px;position:relative}.ab-column h3{margin:0;font-size:18px;font-weight:400;line-height:20px;color:#23282d}.ab-column h3.icon:before{font:400 30px/30px Dashicons;top:4px;right:20px;speak:none;width:1em;color:#8e959c;position:absolute;text-align:center;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.ab-column.ab-arrow h3.icon:before{content:'\f536'}.ab-column.ab-join h3.icon:before{content:'\f108'}.ab-column.ab-diff h3.icon:before{content:'\f237'}.ab-column h6{clear:both;color:#555d66;margin:0 0 20px;font-weight:400;font-size:13px}.ab-column input[type=text],.ab-column input[type=number],.ab-column select{font-size:13px;text-align:center;background:#f8f8f9}.ab-column input[type=number]{padding:0}.ab-column select[multiple]{width:175px;min-height:60px}.ab-column input.ab-mini-field{width:40px}.ab-column .ab-medium-field{width:100%;max-width:285px}.ab-column input[type=text]+label,.ab-column select+label{color:#8e959c;margin:0 0 0 7px;display:inline-block;text-transform:uppercase}.ab-column>ul{padding:0 20px 0 0}.ab-column:last-of-type>ul{border:0}.ab-column>ul>li{width:330px;margin:0 0 36px;padding:10px 0 12px 12px;position:relative;background:#fff}.ab-column>ul>li a{text-decoration:underline}.ab-column>ul>li a:hover{border-color:inherit}.ab-column>ul>li label{cursor:default;display:inline-block;font-size:14px;max-width:286px;color:#23282d}.ab-column>ul>li label span{color:#555d66;display:block;font-size:13px;line-height:16px;margin-top:5px}.ab-column>ul>li:after,.ab-column>ul>li:before{width:0;content:'';position:absolute}.ab-column.ab-arrow>ul>li:after,.ab-column.ab-arrow>ul>li:before{left:157px;border-width:10px 10px 0;border-style:solid}.ab-column.ab-arrow>ul>li:before{bottom:-24px;border-color:#fff transparent}.ab-column.ab-arrow>ul>li:after{bottom:-22px;border-color:#f1f1f1 transparent}.ab-column.ab-join>ul>li:before{left:171px;bottom:-27px;height:18px;border-right:2px solid #fff}.ab-column.ab-diff>ul>li:before{left:162px;bottom:-19px;width:18px;height:0;border-bottom:2px solid #fff}.ab-column--submit-service{width:342px;margin-top:20px;padding-right:20px}.ab-column--submit-service p{padding:5px 0;margin:0;text-align:center;width:100%}.ab-column--submit-service p:first-of-type{border-top:1px solid #e0e5e9}.ab-column--submit-service p:last-of-type{border-bottom:1px solid #e0e5e9}.ab-column--submit-service .button{width:100%;margin:35px 0 10px}.ab-column>ul>li:last-of-type:after,.ab-column>ul>li:last-of-type:before{display:none}.ab-column>ul>li>ul{margin:10px 10px 0 26px;display:none}.ab-column>ul>li>ul li{padding:2px 0}.ab-column>ul>li>ul label{margin:0 0 0 7px}.ab-column>ul>li>input[type=checkbox]:checked~ul{display:block}

View File

@@ -0,0 +1,105 @@
<?php
/**
* The Columns Class.
*
* @package Antispam Bee
*/
defined( 'ABSPATH' ) || exit;
/**
* Class Antispam_Bee_Columns
*/
final class Antispam_Bee_Columns {
/**
* Register plugin columns on comments screen.
*
* @since 2.6.0
* @change 2.6.0
*
* @param array $columns Array with existing columns.
* @return array Array with extended columns.
*/
public static function register_plugin_columns( $columns ) {
return array_merge(
$columns,
array(
'antispam_bee_reason' => esc_html__( 'Spam Reason', 'antispam-bee' ),
)
);
}
/**
* Display plugin column values on comments screen
*
* @since 2.6.0
* @change 2.6.0
*
* @param string $column Currently selected column.
* @param integer $comment_id Comment ID.
*/
public static function print_plugin_column( $column, $comment_id ) {
if ( 'antispam_bee_reason' !== $column ) {
return;
}
$spam_reason = get_comment_meta( $comment_id, $column, true );
$spam_reasons = Antispam_Bee::$defaults['reasons'];
if ( empty( $spam_reason ) || empty( $spam_reasons[ $spam_reason ] ) ) {
return;
}
echo esc_html( $spam_reasons[ $spam_reason ] );
}
/**
* Register plugin sortable columns on comments screen
*
* @since 2.6.3
* @change 2.6.3
*
* @param array $columns Registered columns.
* @return array $columns Columns with AB field.
*/
public static function register_sortable_columns( $columns ) {
$columns['antispam_bee_reason'] = 'antispam_bee_reason';
return $columns;
}
/**
* Adjust orderby query
*
* @since 2.6.3
* @change 2.6.3
*
* @param \WP_Query $query Current WordPress query.
*/
public static function set_orderby_query( $query ) {
$orderby = $query->get( 'orderby' );
if ( empty( $orderby ) || 'antispam_bee_reason' !== $orderby ) {
return;
}
$query->set( 'meta_key', 'antispam_bee_reason' );
$query->set( 'orderby', 'meta_value' );
}
/**
* Print CSS for the plugin column
*
* @since 2.6.1
* @change 2.6.1
*/
public static function print_column_styles() { ?>
<style>
.column-antispam_bee_reason {
width: 10%;
}
</style>
<?php
}
}

View File

@@ -0,0 +1,576 @@
<?php
/**
* The Antispam Bee GUI
*
* @package Antispam Bee
*/
defined( 'ABSPATH' ) || exit;
/**
* Antispam_Bee_GUI
*
* @since 2.4
*/
class Antispam_Bee_GUI extends Antispam_Bee {
/**
* Save the GUI
*
* @since 0.1
* @change 2.7.0
*/
public static function save_changes() {
if ( empty( $_POST ) ) {
wp_die( esc_html__( 'Cheatin&#8217; uh?', 'antispam-bee' ) );
}
if ( ! current_user_can( 'manage_options' ) ) {
wp_die( esc_html__( 'Cheatin&#8217; uh?', 'antispam-bee' ) );
}
check_admin_referer( '_antispam_bee__settings_nonce' );
$selected_languages_raw = wp_unslash( self::get_key( $_POST, 'ab_translate_lang' ) );
if ( ! is_array( $selected_languages_raw ) ) {
$selected_languages_raw = array();
}
$selected_languages = array();
$lang = self::get_allowed_translate_languages();
$lang = array_keys( $lang );
foreach ( $selected_languages_raw as $value ) {
if ( ! in_array( $value, $lang, true ) ) {
continue;
}
$selected_languages[] = $value;
}
$options = array(
'flag_spam' => (int) ( ! empty( $_POST['ab_flag_spam'] ) ),
'email_notify' => (int) ( ! empty( $_POST['ab_email_notify'] ) ),
'cronjob_enable' => (int) ( ! empty( $_POST['ab_cronjob_enable'] ) ),
'cronjob_interval' => (int) self::get_key( $_POST, 'ab_cronjob_interval' ),
'no_notice' => (int) ( ! empty( $_POST['ab_no_notice'] ) ),
'dashboard_count' => (int) ( ! empty( $_POST['ab_dashboard_count'] ) ),
'dashboard_chart' => (int) ( ! empty( $_POST['ab_dashboard_chart'] ) ),
'advanced_check' => (int) ( ! empty( $_POST['ab_advanced_check'] ) ),
'regexp_check' => (int) ( ! empty( $_POST['ab_regexp_check'] ) ),
'spam_ip' => (int) ( ! empty( $_POST['ab_spam_ip'] ) ),
'already_commented' => (int) ( ! empty( $_POST['ab_already_commented'] ) ),
'time_check' => (int) ( ! empty( $_POST['ab_time_check'] ) ),
'always_allowed' => (int) ( ! empty( $_POST['ab_always_allowed'] ) ),
'ignore_pings' => (int) ( ! empty( $_POST['ab_ignore_pings'] ) ),
'ignore_filter' => (int) ( ! empty( $_POST['ab_ignore_filter'] ) ),
'ignore_type' => (int) self::get_key( $_POST, 'ab_ignore_type' ),
'reasons_enable' => (int) ( ! empty( $_POST['ab_reasons_enable'] ) ),
'ignore_reasons' => (array) self::get_key( $_POST, 'ab_ignore_reasons' ),
'bbcode_check' => (int) ( ! empty( $_POST['ab_bbcode_check'] ) ),
'gravatar_check' => (int) ( ! empty( $_POST['ab_gravatar_check'] ) ),
'country_code' => (int) ( ! empty( $_POST['ab_country_code'] ) ),
'country_black' => sanitize_text_field( wp_unslash( self::get_key( $_POST, 'ab_country_black' ) ) ),
'country_white' => sanitize_text_field( wp_unslash( self::get_key( $_POST, 'ab_country_white' ) ) ),
'translate_api' => (int) ( ! empty( $_POST['ab_translate_api'] ) ),
'translate_lang' => $selected_languages,
'delete_data_on_uninstall' => (int) ( ! empty( $_POST['delete_data_on_uninstall'] ) ),
);
foreach ( $options['ignore_reasons'] as $key => $val ) {
if ( ! isset( self::$defaults['reasons'][ $val ] ) ) {
unset( $options['ignore_reasons'][ $key ] );
}
}
if ( empty( $options['cronjob_interval'] ) ) {
$options['cronjob_enable'] = 0;
}
if ( empty( $options['translate_lang'] ) ) {
$options['translate_api'] = 0;
}
if ( empty( $options['reasons_enable'] ) ) {
$options['ignore_reasons'] = array();
}
if ( ! empty( $options['country_black'] ) ) {
$options['country_black'] = preg_replace(
'/[^A-Z ,;]/',
'',
strtoupper( $options['country_black'] )
);
}
if ( ! empty( $options['country_white'] ) ) {
$options['country_white'] = preg_replace(
'/[^A-Z ,;]/',
'',
strtoupper( $options['country_white'] )
);
}
if ( empty( $options['country_black'] ) && empty( $options['country_white'] ) ) {
$options['country_code'] = 0;
}
if ( $options['cronjob_enable'] && ! self::get_option( 'cronjob_enable' ) ) {
self::init_scheduled_hook();
} elseif ( ! $options['cronjob_enable'] && self::get_option( 'cronjob_enable' ) ) {
self::clear_scheduled_hook();
}
self::update_options( $options );
wp_safe_redirect(
add_query_arg(
array(
'updated' => 'true',
),
wp_get_referer()
)
);
die();
}
/**
* Generation of a selectbox
*
* @since 2.4.5
* @change 2.4.5
*
* @param string $name Name of the Selectbox.
* @param array $data Array with values.
* @param string $selected Selected value.
* @return string $html Generated HTML.
*/
private static function _build_select( $name, $data, $selected ) {
$html = '<select name="' . esc_attr( $name ) . '">';
foreach ( $data as $k => $v ) {
$html .= '<option value="' . esc_attr( $k ) . '" ' . selected( $selected, $k, false ) . '>' . esc_html( $v ) . '</option>';
}
$html .= '</select>';
return $html;
}
/**
* Display the GUI
*
* @since 0.1
* @change 2.7.0
*/
public static function options_page() { ?>
<div class="wrap" id="ab_main">
<h2>
Antispam Bee
</h2>
<form action="<?php echo esc_url( admin_url( 'admin-post.php' ) ); ?>" method="post">
<input type="hidden" name="action" value="ab_save_changes" />
<?php wp_nonce_field( '_antispam_bee__settings_nonce' ); ?>
<?php $options = self::get_options(); ?>
<div class="ab-wrap">
<!--[if lt IE 9]>
<p class="browsehappy">
<a href="http://browsehappy.com">Browse Happy</a>
</p>
<![endif]-->
<div class="ab-column ab-arrow">
<h3 class="icon">
<?php esc_html_e( 'Antispam filter', 'antispam-bee' ); ?>
</h3>
<h6>
<?php esc_html_e( 'Filter in the execution order', 'antispam-bee' ); ?>
</h6>
<ul>
<li>
<input type="checkbox" name="ab_already_commented" id="ab_already_commented" value="1" <?php checked( $options['already_commented'], 1 ); ?> />
<label for="ab_already_commented">
<?php esc_html_e( 'Trust approved commenters', 'antispam-bee' ); ?>
<span><?php esc_html_e( 'No review of already commented users', 'antispam-bee' ); ?></span>
</label>
</li>
<?php if ( 1 === (int) get_option( 'show_avatars', 0 ) ) : ?>
<li>
<input type="checkbox" name="ab_gravatar_check" id="ab_gravatar_check" value="1" <?php checked( $options['gravatar_check'], 1 ); ?> />
<label for="ab_gravatar_check">
<?php esc_html_e( 'Trust commenters with a Gravatar', 'antispam-bee' ); ?>
<span>
<?php
$link1 = sprintf(
'<a href="%s" target="_blank" rel="noopener noreferrer">',
esc_url(
__( 'https://github.com/pluginkollektiv/antispam-bee/wiki/en-Documentation#trust-commenters-with-a-gravatar', 'antispam-bee' ),
'https'
)
);
printf(
/* translators: 1: opening <a> tag with link to documentation. 2: closing </a> tag */
esc_html__( 'Check if commenter has a Gravatar image. Please note the %1$sprivacy notice%2$s for this option.', 'antispam-bee' ),
wp_kses_post( $link1 ),
'</a>'
);
?>
</span>
</label>
</li>
<?php endif; ?>
<li>
<input type="checkbox" name="ab_time_check" id="ab_time_check" value="1" <?php checked( $options['time_check'], 1 ); ?> />
<label for="ab_time_check">
<?php esc_html_e( 'Consider the comment time', 'antispam-bee' ); ?>
<span><?php esc_html_e( 'Not recommended when using page caching', 'antispam-bee' ); ?></span>
</label>
</li>
<li>
<input type="checkbox" name="ab_bbcode_check" id="ab_bbcode_check" value="1" <?php checked( $options['bbcode_check'], 1 ); ?> />
<label for="ab_bbcode_check">
<?php esc_html_e( 'BBCode is spam', 'antispam-bee' ); ?>
<span><?php esc_html_e( 'Review the comment contents for BBCode links', 'antispam-bee' ); ?></span>
</label>
</li>
<li>
<input type="checkbox" name="ab_advanced_check" id="ab_advanced_check" value="1" <?php checked( $options['advanced_check'], 1 ); ?> />
<label for="ab_advanced_check">
<?php esc_html_e( 'Validate the ip address of commenters', 'antispam-bee' ); ?>
<span><?php esc_html_e( 'Validation of the IP address used', 'antispam-bee' ); ?></span>
</label>
</li>
<li>
<input type="checkbox" name="ab_regexp_check" id="ab_regexp_check" value="1" <?php checked( $options['regexp_check'], 1 ); ?> />
<label for="ab_regexp_check">
<?php esc_html_e( 'Use regular expressions', 'antispam-bee' ); ?>
<span><?php esc_html_e( 'Predefined and custom patterns by plugin hook', 'antispam-bee' ); ?></span>
</label>
</li>
<li>
<input type="checkbox" name="ab_spam_ip" id="ab_spam_ip" value="1" <?php checked( $options['spam_ip'], 1 ); ?> />
<label for="ab_spam_ip">
<?php esc_html_e( 'Look in the local spam database', 'antispam-bee' ); ?>
<span><?php esc_html_e( 'Check for spam data on your own blog', 'antispam-bee' ); ?></span>
</label>
</li>
<li>
<input type="checkbox" name="ab_country_code" id="ab_country_code" value="1" <?php checked( $options['country_code'], 1 ); ?> />
<label for="ab_country_code">
<?php esc_html_e( 'Block or allow comments from specific countries', 'antispam-bee' ); ?>
<span>
<?php
$link1 = sprintf(
'<a href="%s" target="_blank" rel="noopener noreferrer">',
esc_url(
__( 'https://github.com/pluginkollektiv/antispam-bee/wiki/en-Documentation#block-comments-from-specific-countries', 'antispam-bee' ),
'https'
)
);
printf(
/* translators: 1: opening <a> tag with link to documentation. 2: closing </a> tag. */
esc_html__( 'Filtering the requests depending on country. Please note the %1$sprivacy notice%2$s for this option.', 'antispam-bee' ),
wp_kses_post( $link1 ), '</a>'
);
?>
</span>
</label>
<ul>
<?php
$iso_codes_link = sprintf(
'<a href="%s" target="_blank" rel="noopener noreferrer">',
esc_url(
__( 'https://www.iso.org/iso/country_names_and_code_elements', 'antispam-bee' ),
'https'
)
);
?>
<li>
<textarea name="ab_country_black" id="ab_country_black" class="ab-medium-field code" placeholder="<?php esc_attr_e( 'e.g. BF, SG, YE', 'antispam-bee' ); ?>"><?php echo esc_attr( $options['country_black'] ); ?></textarea>
<label for="ab_country_black">
<span>
<?php
printf(
/* translators: 1: opening <a> tag with link to ISO codes reference. 2: closing </a> tag. */
esc_html__( 'Blacklist %1$sISO Codes%2$s for this option.', 'antispam-bee' ),
wp_kses_post( $iso_codes_link ),
'</a>'
);
?>
</span>
</label>
</li>
<li>
<textarea name="ab_country_white" id="ab_country_white" class="ab-medium-field code" placeholder="<?php esc_attr_e( 'e.g. BF, SG, YE', 'antispam-bee' ); ?>"><?php echo esc_attr( $options['country_white'] ); ?></textarea>
<label for="ab_country_white">
<span>
<?php
printf(
/* translators: 1: opening <a> tag with link to ISO codes reference. 2: closing </a> tag. */
esc_html__( 'Whitelist %1$sISO Codes%2$s for this option.', 'antispam-bee' ),
wp_kses_post( $iso_codes_link ),
'</a>'
);
?>
</span>
</label>
</li>
</ul>
</li>
<li>
<input type="checkbox" name="ab_translate_api" id="ab_translate_api" value="1" <?php checked( $options['translate_api'], 1 ); ?> />
<label for="ab_translate_api">
<?php esc_html_e( 'Allow comments only in certain language', 'antispam-bee' ); ?>
<span>
<?php
$link1 = sprintf(
'<a href="%s" target="_blank" rel="noopener noreferrer">',
esc_url(
__( 'https://github.com/pluginkollektiv/antispam-bee/wiki/en-Documentation#allow-comments-only-in-certain-language', 'antispam-bee' ),
'https'
)
);
printf(
/* translators: 1: opening <a> tag with link to documentation. 2: closing </a> tag. */
esc_html__( 'Detect and approve only the specified language. Please note the %1$sprivacy notice%2$s for this option.', 'antispam-bee' ),
wp_kses_post( $link1 ),
'</a>'
);
?>
</span>
</label>
<ul>
<li>
<select multiple name="ab_translate_lang[]">
<?php
$lang = self::get_allowed_translate_languages();
$selected_languages = (array) $options['translate_lang'];
foreach ( $lang as $k => $v ) {
?>
<option <?php echo in_array( $k, $selected_languages, true ) ? 'selected="selected"' : ''; ?> value="<?php echo esc_attr( $k ); ?>"><?php echo esc_html( $v ); ?></option>
<?php } ?>
</select>
<label for="ab_translate_lang">
<?php esc_html_e( 'Language', 'antispam-bee' ); ?>
</label>
</li>
</ul>
</li>
</ul>
</div>
<div class="ab-column ab-join">
<h3 class="icon advanced">
<?php esc_html_e( 'Advanced', 'antispam-bee' ); ?>
</h3>
<h6>
<?php esc_html_e( 'Other antispam tools', 'antispam-bee' ); ?>
</h6>
<ul>
<li>
<input type="checkbox" name="ab_flag_spam" id="ab_flag_spam" value="1" <?php checked( $options['flag_spam'], 1 ); ?> />
<label for="ab_flag_spam">
<?php esc_html_e( 'Mark as spam, do not delete', 'antispam-bee' ); ?>
<span><?php esc_html_e( 'Keep the spam in my blog.', 'antispam-bee' ); ?></span>
</label>
</li>
<li class="ab_flag_spam_child">
<input type="checkbox" name="ab_email_notify" id="ab_email_notify" value="1" <?php checked( $options['email_notify'], 1 ); ?> />
<label for="ab_email_notify">
<?php esc_html_e( 'Spam-Notification by email', 'antispam-bee' ); ?>
<span><?php esc_html_e( 'Notify admins by e-mail about incoming spam', 'antispam-bee' ); ?></span>
</label>
</li>
<li class="ab_flag_spam_child">
<input type="checkbox" name="ab_no_notice" id="ab_no_notice" value="1" <?php checked( $options['no_notice'], 1 ); ?> />
<label for="ab_no_notice">
<?php esc_html_e( 'Do not save the spam reason', 'antispam-bee' ); ?>
<span><?php esc_html_e( 'Spam reason as a table column in the spam overview', 'antispam-bee' ); ?></span>
</label>
</li>
<li class="ab_flag_spam_child">
<input type="checkbox" name="ab_cronjob_enable" id="ab_cronjob_enable" value="1" <?php checked( $options['cronjob_enable'], 1 ); ?> />
<label for="ab_cronjob_enable">
<?php
echo sprintf(
// translators: $s is an input field containing the number of days.
esc_html__( 'Delete existing spam after %s days', 'antispam-bee' ),
'<input type="number" min="0" name="ab_cronjob_interval" value="' . esc_attr( $options['cronjob_interval'] ) . '" class="ab-mini-field" />'
)
?>
<span><?php esc_html_e( 'Cleaning up the database from old entries', 'antispam-bee' ); ?></span>
</label>
</li>
<li class="ab_flag_spam_child">
<input type="checkbox" name="ab_ignore_filter" id="ab_ignore_filter" value="1" <?php checked( $options['ignore_filter'], 1 ); ?> />
<label for="ab_ignore_filter">
<?php
echo sprintf(
// phpcs:disable WordPress.XSS.EscapeOutput.OutputNotEscaped
// Output gets escaped in _build_select()
// translators: %s is the select field.
esc_html__( 'Limit approval to %s', 'antispam-bee' ),
self::_build_select(
'ab_ignore_type',
array(
1 => esc_attr__( 'Comments', 'antispam-bee' ),
2 => esc_attr__( 'Pings', 'antispam-bee' ),
),
$options['ignore_type']
)
// phpcs:enable _build_select
);
?>
<span><?php esc_html_e( 'Other types of spam will be deleted immediately', 'antispam-bee' ); ?></span>
</label>
</li>
<li class="ab_flag_spam_child">
<input type="checkbox" name="ab_reasons_enable" id="ab_reasons_enable" value="1" <?php checked( $options['reasons_enable'], 1 ); ?> />
<label for="ab_reasons_enable">
<?php esc_html_e( 'Delete comments by spam reasons', 'antispam-bee' ); ?>
<span><?php esc_html_e( 'For multiple selections press Ctrl/CMD', 'antispam-bee' ); ?></span>
</label>
<ul>
<li>
<select name="ab_ignore_reasons[]" id="ab_ignore_reasons" size="2" multiple>
<?php foreach ( self::$defaults['reasons'] as $k => $v ) { ?>
<option <?php selected( in_array( $k, $options['ignore_reasons'], true ), true ); ?> value="<?php echo esc_attr( $k ); ?>"><?php echo esc_html( $v ); ?></option>
<?php } ?>
</select>
<label for="ab_ignore_reasons">
<?php esc_html_e( 'Spam Reason', 'antispam-bee' ); ?>
</label>
</li>
</ul>
</li>
<li class="delete_data_on_uninstall">
<input type="checkbox" name="delete_data_on_uninstall" id="delete_data_on_uninstall" value="1" <?php checked( $options['delete_data_on_uninstall'], 1 ); ?> />
<label for="delete_data_on_uninstall">
<?php esc_html_e( 'Delete Antispam Bee data when uninstalling', 'antispam-bee' ); ?>
<span><?php esc_html_e( 'If checked, you will delete all data Antispam Bee creates, when uninstalling the plugin.', 'antispam-bee' ); ?></span>
</label>
</li>
</ul>
</div>
<div class="ab-column ab-diff">
<h3 class="icon more">
<?php esc_html_e( 'More', 'antispam-bee' ); ?>
</h3>
<h6>
<?php esc_html_e( 'Various options', 'antispam-bee' ); ?>
</h6>
<ul>
<li>
<input type="checkbox" name="ab_dashboard_chart" id="ab_dashboard_chart" value="1" <?php checked( $options['dashboard_chart'], 1 ); ?> />
<label for="ab_dashboard_chart">
<?php esc_html_e( 'Generate statistics as a dashboard widget', 'antispam-bee' ); ?>
<span><?php esc_html_e( 'Daily updates of spam detection rate', 'antispam-bee' ); ?></span>
</label>
</li>
<li>
<input type="checkbox" name="ab_dashboard_count" id="ab_dashboard_count" value="1" <?php checked( $options['dashboard_count'], 1 ); ?> />
<label for="ab_dashboard_count">
<?php esc_html_e( 'Spam counter on the dashboard', 'antispam-bee' ); ?>
<span><?php esc_html_e( 'Amount of identified spam comments', 'antispam-bee' ); ?></span>
</label>
</li>
<li>
<input type="checkbox" name="ab_ignore_pings" id="ab_ignore_pings" value="1" <?php checked( $options['ignore_pings'], 1 ); ?> />
<label for="ab_ignore_pings">
<?php esc_html_e( 'Do not check trackbacks / pingbacks', 'antispam-bee' ); ?>
<span><?php esc_html_e( 'No spam check for link notifications', 'antispam-bee' ); ?></span>
</label>
</li>
<li>
<input type="checkbox" name="ab_always_allowed" id="ab_always_allowed" value="1" <?php checked( $options['always_allowed'], 1 ); ?> />
<label for="ab_always_allowed">
<?php esc_html_e( 'Comment form used outside of posts', 'antispam-bee' ); ?>
<span><?php esc_html_e( 'Check for comment forms on archive pages', 'antispam-bee' ); ?></span>
</label>
</li>
</ul>
</div>
<div class="ab-column ab-column--submit-service">
<p>
<a href="https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=TD4AMD2D8EMZW" target="_blank" rel="noopener noreferrer"><?php esc_html_e( 'Donate', 'antispam-bee' ); ?></a>
</p>
<p>
<a href="<?php echo esc_url( __( 'https://wordpress.org/plugins/antispam-bee/faq/', 'antispam-bee' ) ); ?>" target="_blank" rel="noopener noreferrer"><?php esc_html_e( 'FAQ', 'antispam-bee' ); ?></a>
</p>
<p>
<a href="<?php echo esc_url( __( 'https://github.com/pluginkollektiv/antispam-bee/wiki/', 'antispam-bee' ) ); ?>" target="_blank" rel="noopener noreferrer"><?php esc_html_e( 'Manual', 'antispam-bee' ); ?></a>
</p>
<p>
<a href="<?php echo esc_url( __( 'https://wordpress.org/support/plugin/antispam-bee', 'antispam-bee' ) ); ?>" target="_blank" rel="noopener noreferrer"><?php esc_html_e( 'Support', 'antispam-bee' ); ?></a>
</p>
<input type="submit" class="button button-primary" value="<?php esc_html_e( 'Save Changes', 'antispam-bee' ); ?>" />
</div>
</div>
</form>
</div>
<?php
}
/**
* Get the languages, which are selectable to restrict the comment language to.
*
* @since 2.7.1
* @return array $lang
*/
private static function get_allowed_translate_languages() {
$lang = array(
'de' => __( 'German', 'antispam-bee' ),
'en' => __( 'English', 'antispam-bee' ),
'fr' => __( 'French', 'antispam-bee' ),
'it' => __( 'Italian', 'antispam-bee' ),
'es' => __( 'Spanish', 'antispam-bee' ),
);
/**
* Filter the possible languages for the language spam test
*
* @since 2.7.1
* @param (array) $lang The languages
* @return (array)
*/
return apply_filters( 'ab_get_allowed_translate_languages', $lang );
}
}

View File

@@ -0,0 +1,111 @@
(function () {
// Grab the data
var labels = [],
data = [];
jQuery("#ab_chart_data tfoot th").each(function () {
labels.push(jQuery(this).text());
});
jQuery("#ab_chart_data tbody td").each(function () {
data.push(jQuery(this).text());
});
// Draw
var width = jQuery('#ab_chart').parent().width() + 8,
height = 140,
leftgutter = 0,
bottomgutter = 22,
topgutter = 22,
color = '#0073aa',
r = Raphael("ab_chart", width, height),
txt = {font: 'bold 12px "Open Sans", sans-serif', fill: "#32373c"},
X = (width - leftgutter * 2) / labels.length,
max = Math.max.apply(Math, data),
Y = (height - bottomgutter - topgutter) / max;
// Max value
r
.text(16, 16, max)
.attr(
{
'font': 'normal 10px "Open Sans", sans-serif',
fill: "#b4b9be"
}
);
var path = r.path().attr({stroke: color, "stroke-width": 2, "stroke-linejoin": "round"}),
bgp = r.path().attr({stroke: "none", opacity: .3, fill: color}),
label = r.set(),
lx = 0, ly = 0,
is_label_visible = false,
leave_timer,
blanket = r.set();
label.push(r.text(60, 12, "").attr(txt));
label.push(r.text(60, 27, "").attr(txt).attr({fill: color}));
label.hide();
var frame = r.popup(100, 100, label, "right").attr({fill: "#fff", stroke: "#444", "stroke-width": 1}).hide();
var p, bgpp;
for (var i = 0, ii = labels.length; i < ii; i++) {
var y = Math.round(height - bottomgutter - Y * data[i]),
x = Math.round(leftgutter + X * (i + .5));
if (!i) {
p = ["M", x, y, "C", x, y];
bgpp = ["M", leftgutter + X * .5, height - bottomgutter, "L", x, y, "C", x, y];
}
if (i && i < ii - 1) {
var Y0 = Math.round(height - bottomgutter - Y * data[i - 1]),
X0 = Math.round(leftgutter + X * (i - .5)),
Y2 = Math.round(height - bottomgutter - Y * data[i + 1]),
X2 = Math.round(leftgutter + X * (i + 1.5));
var a = getAnchors(X0, Y0, x, y, X2, Y2);
p = p.concat([a.x1, a.y1, x, y, a.x2, a.y2]);
bgpp = bgpp.concat([a.x1, a.y1, x, y, a.x2, a.y2]);
}
var dot = r.circle(x, y, 4).attr({fill: "#fff", stroke: color, "stroke-width": 1});
blanket.push(r.rect(leftgutter + X * i, 0, X, height - bottomgutter).attr({stroke: "none", fill: '#fff', opacity: .2}));
var rect = blanket[blanket.length - 1];
(function (x, y, data, date, dot) {
var timer, i = 0;
rect.hover(function () {
clearTimeout(leave_timer);
var side = "right";
if (x + frame.getBBox().width > width) {
side = "left";
}
// set label content to determine correct dimensions
label[0].attr({text: date });
label[1].attr({text: data + "× Spam"});
var ppp = r.popup(x, y, label, side, 1),
anim = Raphael.animation({
path: ppp.path,
transform: ["t", ppp.dx, ppp.dy]
}, 200 * is_label_visible);
lx = label[0].transform()[0][1] + ppp.dx;
ly = label[0].transform()[0][2] + ppp.dy;
frame.show().stop().animate(anim);
label[0].show().stop().animateWith(frame, anim, {transform: ["t", lx, ly]}, 200 * is_label_visible);
label[1].show().stop().animateWith(frame, anim, {transform: ["t", lx, ly]}, 200 * is_label_visible);
dot.attr("r", 6);
is_label_visible = true;
}, function () {
dot.attr("r", 4);
leave_timer = setTimeout(function () {
frame.hide();
label[0].hide();
label[1].hide();
is_label_visible = false;
}, 1);
});
})(x, y, data[i], labels[i], dot);
}
p = p.concat([x, y, x, y]);
bgpp = bgpp.concat([x, y, x, y, "L", x, height - bottomgutter, "z"]);
path.attr({path: p});
bgp.attr({path: bgpp});
frame.toFront();
label[0].toFront();
label[1].toFront();
blanket.toFront();
})();

View File

@@ -0,0 +1,5 @@
(function(){var labels=[],data=[];jQuery("#ab_chart_data tfoot th").each(function(){labels.push(jQuery(this).text())});jQuery("#ab_chart_data tbody td").each(function(){data.push(jQuery(this).text())});var width=jQuery('#ab_chart').parent().width()+8,height=140,leftgutter=0,bottomgutter=22,topgutter=22,color='#0073aa',r=Raphael("ab_chart",width,height),txt={font:'bold 12px "Open Sans", sans-serif',fill:"#32373c"},X=(width-leftgutter*2)/labels.length,max=Math.max.apply(Math,data),Y=(height-bottomgutter-topgutter)/max;r.text(16,16,max).attr({'font':'normal 10px "Open Sans", sans-serif',fill:"#b4b9be"});var path=r.path().attr({stroke:color,"stroke-width":2,"stroke-linejoin":"round"}),bgp=r.path().attr({stroke:"none",opacity:.3,fill:color}),label=r.set(),lx=0,ly=0,is_label_visible=!1,leave_timer,blanket=r.set();label.push(r.text(60,12,"").attr(txt));label.push(r.text(60,27,"").attr(txt).attr({fill:color}));label.hide();var frame=r.popup(100,100,label,"right").attr({fill:"#fff",stroke:"#444","stroke-width":1}).hide();var p,bgpp;for(var i=0,ii=labels.length;i<ii;i++){var y=Math.round(height-bottomgutter-Y*data[i]),x=Math.round(leftgutter+X*(i+.5));if(!i){p=["M",x,y,"C",x,y];bgpp=["M",leftgutter+X*.5,height-bottomgutter,"L",x,y,"C",x,y]}
if(i&&i<ii-1){var Y0=Math.round(height-bottomgutter-Y*data[i-1]),X0=Math.round(leftgutter+X*(i-.5)),Y2=Math.round(height-bottomgutter-Y*data[i+1]),X2=Math.round(leftgutter+X*(i+1.5));var a=getAnchors(X0,Y0,x,y,X2,Y2);p=p.concat([a.x1,a.y1,x,y,a.x2,a.y2]);bgpp=bgpp.concat([a.x1,a.y1,x,y,a.x2,a.y2])}
var dot=r.circle(x,y,4).attr({fill:"#fff",stroke:color,"stroke-width":1});blanket.push(r.rect(leftgutter+X*i,0,X,height-bottomgutter).attr({stroke:"none",fill:'#fff',opacity:.2}));var rect=blanket[blanket.length-1];(function(x,y,data,date,dot){var timer,i=0;rect.hover(function(){clearTimeout(leave_timer);var side="right";if(x+frame.getBBox().width>width){side="left"}
label[0].attr({text:date});label[1].attr({text:data+"× Spam"});var ppp=r.popup(x,y,label,side,1),anim=Raphael.animation({path:ppp.path,transform:["t",ppp.dx,ppp.dy]},200*is_label_visible);lx=label[0].transform()[0][1]+ppp.dx;ly=label[0].transform()[0][2]+ppp.dy;frame.show().stop().animate(anim);label[0].show().stop().animateWith(frame,anim,{transform:["t",lx,ly]},200*is_label_visible);label[1].show().stop().animateWith(frame,anim,{transform:["t",lx,ly]},200*is_label_visible);dot.attr("r",6);is_label_visible=!0},function(){dot.attr("r",4);leave_timer=setTimeout(function(){frame.hide();label[0].hide();label[1].hide();is_label_visible=!1},1)})})(x,y,data[i],labels[i],dot)}
p=p.concat([x,y,x,y]);bgpp=bgpp.concat([x,y,x,y,"L",x,height-bottomgutter,"z"]);path.attr({path:p});bgp.attr({path:bgpp});frame.toFront();label[0].toFront();label[1].toFront();blanket.toFront()})()

View File

@@ -0,0 +1,142 @@
var tokenRegex = /\{([^\}]+)\}/g,
objNotationRegex = /(?:(?:^|\.)(.+?)(?=\[|\.|$|\()|\[('|")(.+?)\2\])(\(\))?/g,
replacer = function (all, key, obj) {
var res = obj;
key.replace(objNotationRegex, function (all, name, quote, quotedName, isFunc) {
name = name || quotedName;
if (res) {
if (name in res) {
res = res[name];
}
typeof res == "function" && isFunc && (res = res());
}
});
res = (res == null || res == obj ? all : res) + "";
return res;
},
fill = function (str, obj) {
return String(str).replace(tokenRegex, function (all, key) {
return replacer(all, key, obj);
});
};
Raphael.fn.popup = function (X, Y, set, pos, ret) {
pos = String(pos || "top-middle").split("-");
pos[1] = pos[1] || "middle";
var r = 5,
bb = set.getBBox(),
w = Math.round(bb.width),
h = Math.round(bb.height),
x = Math.round(bb.x) - r,
y = Math.round(bb.y) - r,
gap = Math.min(h / 2, w / 2, 10),
shapes = {
top: "M{x},{y}h{w4},{w4},{w4},{w4}a{r},{r},0,0,1,{r},{r}v{h4},{h4},{h4},{h4}a{r},{r},0,0,1,-{r},{r}l-{right},0-{gap},{gap}-{gap}-{gap}-{left},0a{r},{r},0,0,1-{r}-{r}v-{h4}-{h4}-{h4}-{h4}a{r},{r},0,0,1,{r}-{r}z",
bottom: "M{x},{y}l{left},0,{gap}-{gap},{gap},{gap},{right},0a{r},{r},0,0,1,{r},{r}v{h4},{h4},{h4},{h4}a{r},{r},0,0,1,-{r},{r}h-{w4}-{w4}-{w4}-{w4}a{r},{r},0,0,1-{r}-{r}v-{h4}-{h4}-{h4}-{h4}a{r},{r},0,0,1,{r}-{r}z",
right: "M{x},{y}h{w4},{w4},{w4},{w4}a{r},{r},0,0,1,{r},{r}v{h4},{h4},{h4},{h4}a{r},{r},0,0,1,-{r},{r}h-{w4}-{w4}-{w4}-{w4}a{r},{r},0,0,1-{r}-{r}l0-{bottom}-{gap}-{gap},{gap}-{gap},0-{top}a{r},{r},0,0,1,{r}-{r}z",
left: "M{x},{y}h{w4},{w4},{w4},{w4}a{r},{r},0,0,1,{r},{r}l0,{top},{gap},{gap}-{gap},{gap},0,{bottom}a{r},{r},0,0,1,-{r},{r}h-{w4}-{w4}-{w4}-{w4}a{r},{r},0,0,1-{r}-{r}v-{h4}-{h4}-{h4}-{h4}a{r},{r},0,0,1,{r}-{r}z"
},
offset = {
hx0: X - (x + r + w - gap * 2),
hx1: X - (x + r + w / 2 - gap),
hx2: X - (x + r + gap),
vhy: Y - (y + r + h + r + gap),
"^hy": Y - (y - gap)
},
mask = [{
x: x + r,
y: y,
w: w,
w4: w / 4,
h4: h / 4,
right: 0,
left: w - gap * 2,
bottom: 0,
top: h - gap * 2,
r: r,
h: h,
gap: gap
}, {
x: x + r,
y: y,
w: w,
w4: w / 4,
h4: h / 4,
left: w / 2 - gap,
right: w / 2 - gap,
top: h / 2 - gap,
bottom: h / 2 - gap,
r: r,
h: h,
gap: gap
}, {
x: x + r,
y: y,
w: w,
w4: w / 4,
h4: h / 4,
left: 0,
right: w - gap * 2,
top: 0,
bottom: h - gap * 2,
r: r,
h: h,
gap: gap
}][pos[1] == "middle" ? 1 : (pos[1] == "top" || pos[1] == "left") * 2];
var dx = 0,
dy = 0,
out = this.path(fill(shapes[pos[0]], mask)).insertBefore(set);
switch (pos[0]) {
case "top":
dx = X - (x + r + mask.left + gap);
dy = Y - (y + r + h + r + gap);
break;
case "bottom":
dx = X - (x + r + mask.left + gap);
dy = Y - (y - gap);
break;
case "left":
dx = X - (x + r + w + r + gap);
dy = Y - (y + r + mask.top + gap);
break;
case "right":
dx = X - (x - gap);
dy = Y - (y + r + mask.top + gap);
break;
}
out.translate(dx, dy);
if (ret) {
ret = out.attr("path");
out.remove();
return {
path: ret,
dx: dx,
dy: dy
};
}
set.translate(dx, dy);
return out;
};
function getAnchors(p1x, p1y, p2x, p2y, p3x, p3y) {
var l1 = (p2x - p1x) / 2,
l2 = (p3x - p2x) / 2,
a = Math.atan((p2x - p1x) / Math.abs(p2y - p1y)),
b = Math.atan((p3x - p2x) / Math.abs(p2y - p3y));
a = p1y < p2y ? Math.PI - a : a;
b = p3y < p2y ? Math.PI - b : b;
var alpha = Math.PI / 2 - ((a + b) % (Math.PI * 2)) / 2,
dx1 = l1 * Math.sin(alpha + a),
dy1 = l1 * Math.cos(alpha + a),
dx2 = l2 * Math.sin(alpha + b),
dy2 = l2 * Math.cos(alpha + b);
return {
x1: p2x - dx1,
y1: p2y + dy1,
x2: p2x + dx2,
y2: p2y + dy2
};
}

View File

@@ -0,0 +1,5 @@
var tokenRegex=/\{([^\}]+)\}/g,objNotationRegex=/(?:(?:^|\.)(.+?)(?=\[|\.|$|\()|\[('|")(.+?)\2\])(\(\))?/g,replacer=function(c,h,g){var a=g;h.replace(objNotationRegex,function(c,b,f,d,g){b=b||d;a&&(b in a&&(a=a[b]),"function"==typeof a&&g&&(a=a()))});return a=(null==a||a==g?c:a)+""},fill=function(c,h){return String(c).replace(tokenRegex,function(c,a){return replacer(c,a,h)})};
Raphael.fn.popup=function(c,h,g,a,k){a=String(a||"top-middle").split("-");a[1]=a[1]||"middle";var b=g.getBBox(),f=Math.round(b.width),d=Math.round(b.height),l=Math.round(b.x)-5,b=Math.round(b.y)-5,e=Math.min(d/2,f/2,10),p=[{x:l+5,y:b,w:f,w4:f/4,h4:d/4,right:0,left:f-2*e,bottom:0,top:d-2*e,r:5,h:d,gap:e},{x:l+5,y:b,w:f,w4:f/4,h4:d/4,left:f/2-e,right:f/2-e,top:d/2-e,bottom:d/2-e,r:5,h:d,gap:e},{x:l+5,y:b,w:f,w4:f/4,h4:d/4,left:0,right:f-2*e,top:0,bottom:d-2*e,r:5,h:d,gap:e}]["middle"==a[1]?1:2*("top"==
a[1]||"left"==a[1])],m=0,n=0,q=this.path(fill({top:"M{x},{y}h{w4},{w4},{w4},{w4}a{r},{r},0,0,1,{r},{r}v{h4},{h4},{h4},{h4}a{r},{r},0,0,1,-{r},{r}l-{right},0-{gap},{gap}-{gap}-{gap}-{left},0a{r},{r},0,0,1-{r}-{r}v-{h4}-{h4}-{h4}-{h4}a{r},{r},0,0,1,{r}-{r}z",bottom:"M{x},{y}l{left},0,{gap}-{gap},{gap},{gap},{right},0a{r},{r},0,0,1,{r},{r}v{h4},{h4},{h4},{h4}a{r},{r},0,0,1,-{r},{r}h-{w4}-{w4}-{w4}-{w4}a{r},{r},0,0,1-{r}-{r}v-{h4}-{h4}-{h4}-{h4}a{r},{r},0,0,1,{r}-{r}z",right:"M{x},{y}h{w4},{w4},{w4},{w4}a{r},{r},0,0,1,{r},{r}v{h4},{h4},{h4},{h4}a{r},{r},0,0,1,-{r},{r}h-{w4}-{w4}-{w4}-{w4}a{r},{r},0,0,1-{r}-{r}l0-{bottom}-{gap}-{gap},{gap}-{gap},0-{top}a{r},{r},0,0,1,{r}-{r}z",
left:"M{x},{y}h{w4},{w4},{w4},{w4}a{r},{r},0,0,1,{r},{r}l0,{top},{gap},{gap}-{gap},{gap},0,{bottom}a{r},{r},0,0,1,-{r},{r}h-{w4}-{w4}-{w4}-{w4}a{r},{r},0,0,1-{r}-{r}v-{h4}-{h4}-{h4}-{h4}a{r},{r},0,0,1,{r}-{r}z"}[a[0]],p)).insertBefore(g);switch(a[0]){case "top":m=c-(l+5+p.left+e);n=h-(b+5+d+5+e);break;case "bottom":m=c-(l+5+p.left+e);n=h-(b-e);break;case "left":m=c-(l+5+f+5+e);n=h-(b+5+p.top+e);break;case "right":m=c-(l-e),n=h-(b+5+p.top+e)}q.translate(m,n);if(k)return k=q.attr("path"),q.remove(),
{path:k,dx:m,dy:n};g.translate(m,n);return q};function getAnchors(c,h,g,a,k,b){var f=(g-c)/2,d=(k-g)/2;c=Math.atan((g-c)/Math.abs(a-h));k=Math.atan((k-g)/Math.abs(a-b));c=h<a?Math.PI-c:c;k=b<a?Math.PI-k:k;b=Math.PI/2-(c+k)%(2*Math.PI)/2;h=f*Math.sin(b+c);f*=Math.cos(b+c);c=d*Math.sin(b+k);d*=Math.cos(b+k);return{x1:g-h,y1:a+f,x2:g+c,y2:a+d}};

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,20 @@
jQuery(document).ready(
function($) {
function ab_flag_spam() {
var $$ = $('#ab_flag_spam'),
nextAll = $$.parent('li').nextAll( '.ab_flag_spam_child' );
nextAll.css(
'display',
( $$.is(':checked') ? 'list-item' : 'none' )
);
}
$('#ab_flag_spam').on(
'change',
ab_flag_spam
);
ab_flag_spam();
}
);

View File

@@ -0,0 +1 @@
jQuery(document).ready(function(a){function b(){var b=a("#ab_flag_spam"),c=b.parent("li").nextAll(".ab_flag_spam_child");c.css("display",b.is(":checked")?"list-item":"none")}a("#ab_flag_spam").on("change",b),b()});

View File

@@ -0,0 +1,207 @@
# Antispam Bee #
* Contributors: pluginkollektiv
* Tags: anti-spam, antispam, block spam, comment, comments, comment spam, pingback, spam, spam filter, trackback, GDPR
* Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=TD4AMD2D8EMZW
* Requires at least: 4.5
* Tested up to: 5.0
* Stable tag: 2.9.1
* License: GPLv2 or later
* License URI: https://www.gnu.org/licenses/gpl-2.0.html
Antispam plugin with a sophisticated tool set for effective day to day comment and trackback spam-fighting. Build with data protection and privacy in mind.
## Description ##
Say Goodbye to comment spam on your WordPress blog or website. *Antispam Bee* blocks spam comments and trackbacks effectively, without captchas and without sending personal information to third party services. It is free of charge, ad-free and 100% GDPR compliant.
### Feature/Settings Overview ###
* Trust approved commenters.
* Trust commenters with a Gravatar.
* Consider the comment time.
* Allow comments only in a certain language.
* Block or allow commenters from certain countries.
* Treat BBCode as spam.
* Validate the IP address of commenters.
* Use regular expressions.
* Search local spam database for commenters previously marked as spammers.
* Notify admins by e-mail about incoming spam.
* Delete existing spam after n days.
* Limit approval to comments/pings (will delete other comment types).
* Select spam indicators to send comments to deletion directly.
* Optionally exclude trackbacks and pingbacks from spam detection.
* Optionally spam-check comment forms on archive pages.
* Display spam statistics on the dashboard, including daily updates of spam detection rate and a total of blocked spam comments.
### Support ###
* Community support via the [support forums on wordpress.org](https://wordpress.org/support/plugin/antispam-bee)
* Read [the documentation](https://github.com/pluginkollektiv/antispam-bee/wiki/en-Documentation)
* We dont handle support via e-mail, Twitter, GitHub issues etc.
### Contribute ###
* Active development of this plugin is handled [on GitHub](https://github.com/pluginkollektiv/antispam-bee).
* Pull requests for documented bugs are highly appreciated.
* If you think youve found a bug (e.g. youre experiencing unexpected behavior), please post at the [support forums](https://wordpress.org/support/plugin/antispam-bee) first.
* If you want to help us translate this plugin you can do so [on WordPress Translate](https://translate.wordpress.org/projects/wp-plugins/antispam-bee).
### Credits ###
* Author: [Sergej Müller](https://sergejmueller.github.io/)
* Maintainers: [pluginkollektiv](https://pluginkollektiv.org)
## Installation ##
* If you dont know how to install a plugin for WordPress, [heres how](http://codex.wordpress.org/Managing_Plugins#Installing_Plugins).
### Requirements ###
* PHP 5.2.4 or greater
* WordPress 3.8 or greater
### Settings ###
After you have activated *Antispam Bee* the plugin will block spam comments out of the box. However, you may want to visit *Settings → Antispam Bee* to configure your custom set of anti-spam options that works best for your site.
## Frequently Asked Questions ##
### Does Antispam Bee work with Jetpack, Disqus Comments and other comment plugins? ###
Antispam Bee works best with default WordPress comments. It is not compatible with Jetpack or Disqus Comments as those plugins load the comment form within an iframe. Thus Antispam Bee can not access the comment form directly.
It also wont work with any AJAX-powered comment forms.
### Does Antispam Bee store any private user data, and is it compliant with GDPR? ###
Antispam Bee is developed in Europe. You might have heard we can be a bit nitpicky over here when it comes to privacy. The plugin does not save private user data and is 100% compliant with GDPR.
### Will I have to edit any theme templates to get Antispam Bee to work? ###
No, the plugin works as is. You may want to configure your favorite settings, though.
### Does Antispam Bee work with shortened IPs? ###
Generally yes. However, commissioning the Antispam Bee plugin for canceled or shortened IP addresses in comment metadata is not recommended. Because the name and the e-mail address of the comments are not unique, an IP address is the only reliable measure. The more complete the stored IP addresses, the more reliable the assignment or detection of spam.
### How can I submit undetected spam? ###
If the antispam plugin has passed some spam comments, these comments can be reported for analysis. A [Google table](http://goo.gl/forms/ITzVHXkLVL) was created for this purpose.
### Antispam Bee with Varnish? ###
If WordPress is operated with Apache + Varnish, the actual IP address of the visitors does not appear in WordPress. Accordingly the Antispam-Plugin lacks the base for the correct functionality. An adaptation in the Varnish configuration file /etc/varnish/default.vcl provides a remedy and forwards the original (not from Apache) IP address in the HTTP header X-Forwarded-For:
```
if (req.restarts == 0) {
set req.http.X-Forwarded-For = client.ip;
}
```
### Are there some paid services or limitations? ###
No, Antispam Bee is free forever, for both private and commercial projects. You can use it on as many sites as you want. There is no limitation to the number of sites you use the plugin on.
A complete documentation is available in the [GitHub repository Wiki](https://github.com/pluginkollektiv/antispam-bee/wiki).
## Changelog ##
### 2.9.1 ###
* Improved backend accessibility
* Prefilled comment textareas do now work with the honeypot
* AMP compatibility
* Improved dashboard tooltips
* Improvements for the language detection API
* Scalable IP look up for local spam database
### 2.9.0 ###
* Introduction of coding standards.
* Switch to franc language detection API for the language check.
* Do not longer overwrite the IP address WordPress saves with the comment by using `pre_comment_user_ip`.
* Do not show "Trust commenters with a Gravatar" if the "Show Gravatar" option is not set.
* Skip the checks, when I ping myself.
* Fixes some wrong usages of the translation functions.
* Use the regular expressions check also for trackbacks.
* Add option to delete Antispam Bee related data when plugin gets deleted via the admin interface.
* Save a hashed + salted IP for every comment
* New check for incoming trackbacks.
* Introduction of behat tests.
* Updates the used JavaScript library for the statistics widget.
* Bugfix in the "Comment form used outside of posts" option.
### 2.8.1 ###
* PHP 5.3 compatibility
* Bugfix where a spam trackback produced a fatal error
* For more details see https://github.com/pluginkollektiv/antispam-bee/milestone/8?closed=1
### 2.8.0 ###
* Removed stopforumspam.com to avoid potential GDPR violation
* Improves IP handling to comply with GDPR
* Improves PHP7.2 compatibility
* Fixes small bug on mobile views
* Allow more than one language in language check
* Minor interface improvements
* Remove old russian and Dutch translation files
* For more details see https://github.com/pluginkollektiv/antispam-bee/milestone/4?closed=1
### 2.7.1 ###
* Fixes an incompatibility with Chrome autofill
* Fixes some incompatibilities with other plugins/themes where the comment field was left empty
* Support for RTL
* Solve some translation/language issues
* A new filter to add languages to the language check
* For more details see https://github.com/pluginkollektiv/antispam-bee/milestone/6?closed=1
### 2.7.0 ###
* Country check is back again (thanks to Sergej Müller for his amazing work and the service page)
* Improved Honeypot
* Language check through Google Translate API is back again (thanks to Simon Kraft of https://moenus.net/ for offering to cover the costs)
* More default Regexes
* Unit Test Framework
* Accessibility and GUI improvements
* An [english documentation](https://github.com/pluginkollektiv/antispam-bee/wiki) is now available, too. Some corrections in the german documentation.
* Some bugfixes - Among other things for WPML compatibility
* For more details see https://github.com/pluginkollektiv/antispam-bee/milestone/3?closed=1
### 2.6.9 ###
* Updates donation links throughout the plugin
* Fixes an error were JavaScript on the dashboard was erroneously being enqueued
* Ensures compatibility with the latest WordPress version
### 2.6.8 ###
* added a POT file
* updated German translation, added formal version
* updated plugin text domain to include a dash instead of an underscore
* updated, translated + formatted README.md
* updated expired link URLs in plugin and languages files
* updated [plugin authors](https://gist.github.com/glueckpress/f058c0ab973d45a72720)
### 2.6.7 ###
* Removal of functions *Block comments from specific countries* and *Allow comments only in certain language* for financial reasons - [more information](https://plus.google.com/u/0/+SergejMüller/posts/ZyquhoYjUyF) (only german)
### 2.6.6 ###
* Switch to the official Google Translation API - [more information](https://plus.google.com/u/0/+SergejMüller/posts/ZyquhoYjUyF) (only german)
* *Release time investment (Development & QA): 2.5 h*
### 2.6.5 ###
* Fix: Return parameters on `dashboard_glance_items` callback / thx [@toscho](https://twitter.com/toscho)
* New function: Trust commenters with a Gravatar / thx [@glueckpress](https://twitter.com/glueckpress)
* Additional plausibility checks and filters
* *Release time investment (Development & QA): 12 h*
### 2.6.4 ###
* Consideration of the comment time (Spam if a comment was written in less than 5 seconds) - [more information on Google+](https://plus.google.com/+SergejMüller/posts/73EbP6F1BgC) (only german)
* *Release time investment (Development & QA): 6.25 h*
### 2.6.3 ###
* Sorting for the Antispam Bee column in the spam comments overview
* Code refactoring around the use of REQUEST_URI
* *Release time investment (Development & QA): 2.75 h*
### 2.6.2 ###
* Improving detection of fake IPs
* *Release time investment (Development & QA): 11 h*
### 2.6.1 ###
* Code refactoring of options management
* Support for `HTTP_FORWARDED_FOR` header
* *Release time investment (Development & QA): 8.5 h*
### 2.6.0 ###
* Optimizations for WordPress 3.8
* Clear invalid UTF-8 characters in comment fields
* Spam reason as a column in the table with spam comments
For the complete changelog, check out our [GitHub repository](https://github.com/pluginkollektiv/antispam-bee).
== Upgrade Notice ==
= 2.8.0 =
This update makes sure your spam check is GDPR compliant, no matter the options you choose. Please make sure to update before May 25th!
## Screenshots ##
1. Antispam Bee settings

View File

@@ -0,0 +1 @@
2.6.2

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 332 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 344 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1015 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1020 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1016 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 250 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 260 B

View File

@@ -0,0 +1,242 @@
<style id='style'>.ev-{{id}} .ev-item.share_box a {background:#cat-color!important;}
.ev-{{id}} .ev-item.share_box a {background:#cat-color!important;}
</style>
<div base="default" class="chronosly perfil2 ch-default ch-front ch-dad1 ev-{{id}} {{size}} ">
<div class="ev-box both data" style="width:8.875%;clear:none;float:left;font-weight:bold;text-align:center;padding:0%;">
<div class='ev-item start_date' style='width:98.59154929577466%;clear:none;float:left;font-size:34px;line-height:38px;padding:0%;'>
<div class='ev-data start_date'>
{{start_date | time_format j}}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item start_date' style='width:98.59154929577466%;clear:none;float:left;font-size:20px;line-height:24px;text-transform:uppercase;padding:0%;'>
<div class='ev-data start_date'>
{{start_date | time_format M}}
</div>
<div class='ch-clear'></div>
</div>
<div class="ch-clear"></div>
</div>
<div class="ev-box both title" style="width:89.375%;float:right;clear:none;padding:0%;border-left:2px solid #cat-color;border-bottom:2px solid #cat-color;">
<div class='ev-item event_title' style='height:auto;width:auto;clear:none;float:left;color:#000000;font-size:20px;line-height:24px;text-transform:uppercase;'>
<div class='ev-data event_title'>
<a href='{{event_link}}' class='ch-readmore'>{{event_title}}</a>
</div>
<div class='ch-clear'></div>
</div>
<div class="ch-clear"></div>
</div>
<div class="ev-box normal content1" style="width:89.375%;float:right;clear:none;background-color:#f1f2f2;padding:0%;border-left:2px solid #cat-color;">
<div class='ev-item custom_link' style='float:none;clear:none;height:auto;width:auto;color:#ffffff;font-size:32px;line-height:36px;font-weight:bold;text-align:center;text-decoration:none;background-color:#dcddde;padding:0%;padding:0px 8px;position:absolute;top:0px;right:0px;'>
<div class='ev-data custom_link'>
<a href="javascript:void(null)" class="ch-readmore" onclick='ev_slide("{{id}}", this)'><span class="ch-more">{{translate | +}}</span></a>
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item cont_box' style=''>
<div class='sortable'>
<div class='ev-item full_time' style='clear:none;float:left;height:auto;width:auto;padding-right:25px;'>
<div class='ev-data full_time'>
{{full_time | time_format }}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item place_direction' style='height:auto;width:auto;clear:none;float:left;'>
<div class='ev-data place_direction'>
<span class='ch-address-{{place_id | id 0}}'>{{place_direction | id 0 | text_after ,}}</span>
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item place_city' style='height:auto;width:auto;clear:none;float:left;padding-left:0px;'>
<div class='ev-data place_city'>
{{place_city | id 0 | text_after ,}}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item place_state' style='height:auto;width:auto;clear:none;float:left;padding-left:0px;'>
<div class='ev-data place_state'>
{{place_state | id 0 | text_after ,}}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item place_country' style='height:auto;width:auto;clear:none;float:left;padding-left:0px;margin-right:25px;'>
<div class='ev-data place_country'>
{{place_country | id 0 }}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item ticket_price' style='clear:none;float:left;height:auto;width:auto;'>
<div class='ev-data ticket_price'>
{{ticket_price | id 1}}
</div>
<div class='ch-clear'></div>
</div>
</div>
<div class='ch-clear'></div>
</div>
<div class="ch-clear"></div>
</div>
<div class="ev-box ch-hidden content2" style="width:89.375%;float:right;clear:none;background-color:#f1f2f2;border-left:2px solid #cat-color;">
<div class='ev-item cont_box' style='width:89.08163265306122%;clear:both;float:none;background-color:#ffffff;padding:4%;margin:2%;'>
<div class='sortable'>
<div class='ev-item featured_image' style='float:right;clear:none;height:auto;width:41.10275689223057%;'>
<div class='ev-data featured_image'>
<a href='{{event_link}}' class='ch-readmore'>{{event_image}}</a>
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item cont_box' style='width:54.01069518716578%;'>
<div class='sortable'>
<div class='ev-item full_date' style='width:98.98305084745763%;clear:none;float:left;font-size:16px;line-height:20px;text-transform:uppercase;background:none;color:#cat-color;padding-left:4px;border-bottom:2px solid #cat-color; margin-bottom:15px;'>
<div class='ev-data full_date'>
{{full_date | time_format | text_before from }}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item event_description' style='float:left;clear:none;height:auto;width:98.86363636363636%;'>
<div class='ev-data event_description'>
<a href='{{event_link}}' class='ch-readmore'> {{event_description | shorten_text 500}}</a>
</div>
<div class='ch-clear'></div>
</div>
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item cont_box' style='width:98.93048128342245%;clear:none;float:left;padding:0%;margin:0%;position:relative;'>
<div class='sortable'>
<div class='ev-item cont_box' style='width:51.736745886654475%;'>
<div class='sortable'>
<div class='ev-item ticket_price' style='width:98.49056603773585%;clear:none;float:left;margin-bottom:7px;'>
<div class='ev-data ticket_price'>
{{ticket_price | id 1}}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item full_time' style=''>
<div class='ev-data full_time'>
{{full_time | time_format }}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item place_direction' style='clear:none;float:left;height:auto;width:auto;'>
<div class='ev-data place_direction'>
<a href='{{place_link | id {{place_id | id 0}}}}' class='ch-readmore'> <span class='ch-address-{{place_id | id 0}}'>{{place_direction | id 0 | text_after ,}}</span></a>
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item place_city' style='clear:none;float:left;height:auto;width:auto;padding-left:0px;'>
<div class='ev-data place_city'>
{{place_city | id 0 | text_after ,}}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item place_state' style='clear:none;float:left;height:auto;width:auto;padding-left:0px;'>
<div class='ev-data place_state'>
{{place_state | id 0 | text_after ,}}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item place_country' style='clear:none;float:left;height:auto;width:auto;padding-left:0px;'>
<div class='ev-data place_country'>
{{place_country | id 0 }}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item share_box' style='color:#fff;'>
<div class='ev-data share_box'>
{{share_box | defaultchecked 1 | share_fb 1 | share_tw 1 | share_in 1 | share_go 1 | share_pi 1 | share_ics 1}}
</div>
<div class='ch-clear'></div>
</div>
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item cont_box' style='width:45.585585585585584%;clear:none;float:none;color:#000000;text-transform:uppercase;text-align:right;bottom:0px;position:absolute;right:0px;'>
<div class='sortable'>
<div class='ev-item organizer_name' style='float:none;clear:both;width:99.18367346938776%;color:#000000;text-transform:uppercase;text-align:right;padding-right:0px;margin-bottom:7px;padding-top:15px;'>
<div class='ev-data organizer_name'>
<a href='{{organizer_link | id {{organizer_id | id 0}}}}' class='ch-readmore'><span class='ch-organizer-{{organizer_id | id 0}}'>{{organizer_name | id 0 | filter the_title | text_before Organized by }}</span></a>
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item ticket_link' style='float:right;clear:none;height:auto;width:auto;color:#ffffff;font-size:18px;line-height:22px;font-weight:bold;text-transform:uppercase;text-align:center;background:#cat-color;padding:5px 15px;'>
<div class='ev-data ticket_link'>
<a href='{{ticket_link | id 1}}' target='_blank'>{{ translate | Buy tickets}}</a>
</div>
<div class='ch-clear'></div>
</div>
</div>
<div class='ch-clear'></div>
</div>
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item place_gmap' style='width:98.23899371069183%;clear:none;float:left;margin-top:25px;'>
<div id='gmap{{id}}{{timestamp}}' class='ev-data place_gmap' style='width:100%; height:200px;margin-top:25px;'>
{{place_gmap | id 0}}
</div>
<div class='ch-clear'></div>
</div>
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item custom_link' style='float:none;clear:none;width:auto;height:auto;color:#ffffff;font-size:36px;line-height:40px;font-weight:bold;text-align:center;text-decoration:none;background-color:#dcddde;padding:0%;padding:0px 10px;padding-bottom:5px;line-height:32px;position:absolute;right:0px;bottom:0px;'>
<div class='ev-data custom_link'>
<a href="javascript:void(null)" class="ch-readmore" onclick='ev_slide("{{id}}", this)'><span class="ch-more">{{translate | -}}</span></a>
</div>
<div class='ch-clear'></div>
</div>
<div class="ch-clear"></div>
</div>
<div style="clear:both;"></div>
</div>

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,289 @@
<style id='style'>.ev-{{id}} .ev-item.share_box a {background:#cat-color!important;}
.ev-{{id}} .ev-item.share_box a {background:#cat-color!important;}
</style>
<div base="default" class="chronosly perfil2 ch-default ch-front ch-dad1 box-featured ev-{{id}} {{size}} ">
<div class="ev-box normal back_img ch-featured " style="width:auto;clear:none;float:left;border-left:12px solid #cat-color;background:url(#feat-image) center center no-repeat;">
<div class="ch-clear"></div>
</div>
<div class="ev-box normal ch-overlay ch-featured " style="width:37.375%;clear:none;float:none;color:#ffffff;background-color:#000000;margin-left:12px;">
<div class="ch-clear"></div>
</div>
<div class="ev-box normal ch-info ch-featured " style="clear:none;float:none;height:auto;width:99%;color:#ffffff;text-transform:uppercase;">
<div class='ev-item cont_box' style='height:auto;width:36.08660785886127%;clear:none;float:left;max-width:450px;padding-left:25px;'>
<div class='sortable'>
<div class='ev-item start_date' style='clear:none;float:left;height:auto;width:auto;font-size:50px;line-height:54px;padding-right:5px;'>
<div class='ev-data start_date'>
{{start_date | time_format j}}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item start_date' style='clear:none;float:left;height:auto;width:auto;font-size:18px;line-height:22px;padding-top:32px'>
<div class='ev-data start_date'>
{{start_date | time_format M}}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item event_title' style='width:auto;clear:both;float:none;height:auto;font-size:20px;line-height:24px;padding-top:0px;'>
<div class='ev-data event_title'>
<a href='{{event_link}}' class='ch-readmore'>{{event_title}}</a>
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item categories' style='width:98.91304347826086%;clear:none;float:left;font-size:14px;line-height:18px;padding-top:0px;'>
<div class='ev-data categories'>
{{categories}}
</div>
<div class='ch-clear'></div>
</div>
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item cont_box' style='clear:none;float:left;height:auto;width:98.99497487437185%;background-color:#4b4c4e;padding:0%;position:relative;'>
<div class='sortable'>
<div class='ev-item cont_box' style='width:35.8704453441296%;clear:none;float:left;max-width:450px;'>
<div class='sortable'>
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item custom_link' style='clear:none;float:none;height:auto;width:auto;color:#4b4c4e;font-size:32px;line-height:36px;background-color:#ffffff;padding:0px 8px;position:absolute;top:0px;right:0px;'>
<div class='ev-data custom_link'>
<a href="javascript:void(null)" class="ch-readmore" onclick='ev_slide("{{id}}", this)'><span class="ch-more">{{translate | +}}</span></a>
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item cont_box' style='width:20.48582995951417%;clear:none;float:left;'>
<div class='sortable'>
<div class='ev-item full_time' style=''>
<div class='ev-data full_time'>
{{full_time | time_format }}
</div>
<div class='ch-clear'></div>
</div>
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item cont_box' style='width:38.54251012145749%;clear:none;float:left;'>
<div class='sortable'>
<div class='ev-item place_direction' style='height:auto;width:auto;clear:none;float:left;padding-right:0px;'>
<div class='ev-data place_direction'>
<span class='ch-address-{{place_id | id 0}}'>{{place_direction | id 0 | text_after ,}}</span>
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item place_city' style='height:auto;width:auto;clear:none;float:left;padding-right:0px;'>
<div class='ev-data place_city'>
{{place_city | id 0 | text_after ,}}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item place_state' style='height:auto;clear:none;float:left;width:auto;padding-right:0px;'>
<div class='ev-data place_state'>
{{place_state | id 0 | text_after ,}}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item place_country' style='height:auto;width:auto;'>
<div class='ev-data place_country'>
{{place_country | id 0 }}
</div>
<div class='ch-clear'></div>
</div>
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item cont_box' style=''>
<div class='sortable'>
</div>
<div class='ch-clear'></div>
</div>
</div>
<div class='ch-clear'></div>
</div>
<div class="ch-clear"></div>
</div>
<div class="ev-box ch-hidden content2 ch-featured " style="float:none;clear:both;height:auto;width:98%;background-color:#f1f2f2;border-left:12px solid #cat-color;width:98%;">
<div class='ev-item cont_box' style='width:89.08163265306122%;clear:both;float:none;background-color:#ffffff;padding:4%;margin:2%;'>
<div class='sortable'>
<div class='ev-item featured_image' style='float:right;clear:none;height:auto;width:41.10275689223057%;'>
<div class='ev-data featured_image'>
<a href='{{event_link}}' class='ch-readmore'>{{event_image}}</a>
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item cont_box' style='width:56.32183908045977%;'>
<div class='sortable'>
<div class='ev-item event_title' style='width:99.10179640718563%;clear:none;float:left;color:#000000;font-size:20px;line-height:24px;text-transform:uppercase;'>
<div class='ev-data event_title'>
<a href='{{event_link}}' class='ch-readmore'>{{event_title}}</a>
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item full_date' style='width:99.1044776119403%;clear:none;float:left;font-size:16px;line-height:20px;text-transform:uppercase;background:none;color:#cat-color;padding-left:4px;border-bottom:2px solid #cat-color; margin-bottom:15px;'>
<div class='ev-data full_date'>
{{full_date | time_format | text_before from }}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item event_description' style='float:left;clear:none;height:auto;width:98.86363636363636%;'>
<div class='ev-data event_description'>
<a href='{{event_link}}' class='ch-readmore'> {{event_description | shorten_text 500}}</a>
</div>
<div class='ch-clear'></div>
</div>
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item cont_box' style='width:98.85057471264368%;clear:none;float:left;padding:0%;margin:0%;position:relative;'>
<div class='sortable'>
<div class='ev-item cont_box' style='width:51.736745886654475%;'>
<div class='sortable'>
<div class='ev-item ticket_price' style='width:98.49056603773585%;clear:none;float:left;margin-bottom:7px;'>
<div class='ev-data ticket_price'>
{{ticket_price | id 1}}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item full_time' style=''>
<div class='ev-data full_time'>
{{full_time | time_format }}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item place_direction' style='clear:none;float:left;height:auto;width:auto;'>
<div class='ev-data place_direction'>
<a href='{{place_link | id {{place_id | id 0}}}}' class='ch-readmore'> <span class='ch-address-{{place_id | id 0}}'>{{place_direction | id 0 | text_after ,}}</span></a>
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item place_city' style='clear:none;float:left;height:auto;width:auto;padding-left:0px;'>
<div class='ev-data place_city'>
{{place_city | id 0 | text_after ,}}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item place_state' style='clear:none;float:left;height:auto;width:auto;padding-left:0px;'>
<div class='ev-data place_state'>
{{place_state | id 0 | text_after ,}}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item place_country' style='clear:none;float:left;height:auto;width:auto;padding-left:0px;'>
<div class='ev-data place_country'>
{{place_country | id 0 }}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item share_box' style='color:#fff;'>
<div class='ev-data share_box'>
{{share_box | defaultchecked 1 | share_fb 1 | share_tw 1 | share_in 1 | share_go 1 | share_pi 1 | share_ics 1}}
</div>
<div class='ch-clear'></div>
</div>
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item cont_box' style='width:45.585585585585584%;clear:none;float:none;color:#000000;text-transform:uppercase;text-align:right;bottom:0px;position:absolute;right:0px;'>
<div class='sortable'>
<div class='ev-item organizer_name' style='float:none;clear:both;width:99.18367346938776%;color:#000000;text-transform:uppercase;text-align:right;padding-right:0px;margin-bottom:7px;padding-top:15px;'>
<div class='ev-data organizer_name'>
<a href='{{organizer_link | id {{organizer_id | id 0}}}}' class='ch-readmore'><span class='ch-organizer-{{organizer_id | id 0}}'>{{organizer_name | id 0 | filter the_title | text_before Organized by }}</span></a>
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item ticket_link' style='float:right;clear:none;height:auto;width:auto;color:#ffffff;font-size:18px;line-height:22px;font-weight:bold;text-transform:uppercase;text-align:center;background:#cat-color;padding:5px 15px;'>
<div class='ev-data ticket_link'>
<a href='{{ticket_link | id 1}}' target='_blank'>{{ translate | Buy tickets}}</a>
</div>
<div class='ch-clear'></div>
</div>
</div>
<div class='ch-clear'></div>
</div>
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item place_gmap' style='width:98.23899371069183%;clear:none;float:left;margin-top:25px;'>
<div id='gmap{{id}}{{timestamp}}' class='ev-data place_gmap' style='width:100%; height:200px;margin-top:25px;'>
{{place_gmap | id 0}}
</div>
<div class='ch-clear'></div>
</div>
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item custom_link' style='float:none;clear:none;height:auto;width:auto;color:#ffffff;font-size:36px;line-height:40px;font-weight:bold;text-align:center;text-decoration:none;background-color:#dcddde;padding:0%;padding:0px 10px;padding-bottom:5px;line-height:32px;position:absolute;right:0px;bottom:0px;'>
<div class='ev-data custom_link'>
<a href="javascript:void(null)" class="ch-readmore" onclick='ev_slide("{{id}}", this)'><span class="ch-more">{{translate | -}}</span></a>
</div>
<div class='ch-clear'></div>
</div>
<div class="ch-clear"></div>
</div>
<div style="clear:both;"></div>
</div>

View File

@@ -0,0 +1,113 @@
<style id='style'>
.ev-{{id}} .ev-box .ev-item.share_box a {background:#4b4c4e!important;}
.ev-{{id}} .ev-box .ev-item.share_box a {background:#4b4c4e!important;}
</style>
<div base="default" class="chronosly perfil2 ch-default ch-front ch-dad10 ev-{{id}} {{size}} ">
<div class="ev-box normal back_img" style="width:auto;clear:none;float:left;background:url(#feat-image) center center no-repeat;">
<div class="ch-clear"></div>
</div>
<div class="ev-box both ch-overlay" style="width:36.875%;clear:none;float:none;color:#ffffff;background-color:#000000;">
<div class="ch-clear"></div>
</div>
<div class="ev-box both ch-info" style="clear:none;float:none;height:auto;width:36.75%;color:#ffffff;text-transform:uppercase;padding-bottom:20px;">
<div class='ev-item place_name' style='clear:none;float:none;height:auto;width:102.42214532871972%;color:#ffffff;font-size:20px;line-height:24px;text-transform:uppercase;'>
<div class='ev-data place_name'>
<span class='ch-place-{{place_id | id 0}}'>{{place_name | id 0 | filter the_title}}</span>
</div>
<div class='ch-clear'></div>
</div>
<div class="ch-clear"></div>
</div>
<div class="ev-box both content2" style="float:right;clear:none;height:auto;background-color:#ffffff;">
<div class='ev-item cont_box' style='clear:both;float:none;height:auto;width:98.98348157560356%;background-color:#ffffff;padding:1%;margin:0%;'>
<div class='sortable'>
<div class='ev-item cont_box' style='clear:none;float:left;height:auto;padding:0%;'>
<div class='sortable'>
<div class='ev-item place_direction' style='height:auto;width:auto;clear:none;float:left;'>
<div class='ev-data place_direction'>
<span class='ch-address-{{place_id | id 0}}'>{{place_direction | id 0 | text_after ,}}</span>
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item place_city' style='height:auto;width:auto;clear:none;float:left;padding-left:0px;'>
<div class='ev-data place_city'>
{{place_city | id 0 | text_after ,}}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item place_state' style='height:auto;width:auto;clear:none;float:left;padding-left:0px;'>
<div class='ev-data place_state'>
{{place_state | id 0 | text_after ,}}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item place_country' style='height:auto;width:auto;clear:none;float:left;padding-left:0px;'>
<div class='ev-data place_country'>
{{place_country | id 0 }}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item place_gmap' style=''>
<div id='gmap{{id}}{{timestamp}}' class='ev-data place_gmap' style='width:100%; height:200px;'>
{{place_gmap | id 0}}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item custom_link' style='width:99.09208819714657%;clear:none;float:left;font-weight:bold;'>
<div class='ev-data custom_link'>
<a href="#gmap_link" class="ch-readmore" target="_blank" rel="nofollow"><span class="ch-more">{{translate | Open map}}</span></a>
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item place_description' style='width:99.09208819714657%;clear:none;float:left;margin-top:15px;'>
<div class='ev-data place_description'>
{{place_description | id 0 | filter the_content | shorten_text }}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item share_box' style='color:#fff;'>
<div class='ev-data share_box'>
{{share_box | share_fb | share_tw | share_in | share_go | share_pi | share_ics }}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item events_list' style=''>
<div class='ev-data events_list'>
{{event_list}}
</div>
<div class='ch-clear'></div>
</div>
</div>
<div class='ch-clear'></div>
</div>
</div>
<div class='ch-clear'></div>
</div>
<div class="ch-clear"></div>
</div>
<div style="clear:both;"></div>
</div>

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,113 @@
<style id='style'>
.ev-{{id}} .ev-box .ev-item.share_box a {background:#4b4c4e!important;}
.ev-{{id}} .ev-box .ev-item.share_box a {background:#4b4c4e!important;}
</style>
<div base="default" class="chronosly perfil2 ch-default ch-front ch-dad10 box-featured ev-{{id}} {{size}} ">
<div class="ev-box normal back_img" style="width:auto;clear:none;float:left;background:url(#feat-image) center center no-repeat;">
<div class="ch-clear"></div>
</div>
<div class="ev-box both ch-overlay" style="width:36.875%;clear:none;float:none;color:#ffffff;background-color:#000000;">
<div class="ch-clear"></div>
</div>
<div class="ev-box both ch-info" style="clear:none;float:none;height:auto;width:36.75%;color:#ffffff;text-transform:uppercase;padding-bottom:20px;">
<div class='ev-item place_name' style='clear:none;float:none;height:auto;width:102.42214532871972%;color:#ffffff;font-size:20px;line-height:24px;text-transform:uppercase;'>
<div class='ev-data place_name'>
<span class='ch-place-{{place_id | id 0}}'>{{place_name | id 0 | filter the_title}}</span>
</div>
<div class='ch-clear'></div>
</div>
<div class="ch-clear"></div>
</div>
<div class="ev-box both content2" style="float:right;clear:none;height:auto;background-color:#ffffff;">
<div class='ev-item cont_box' style='clear:both;float:none;height:auto;width:98.98348157560356%;background-color:#ffffff;padding:1%;margin:0%;'>
<div class='sortable'>
<div class='ev-item cont_box' style='clear:none;float:left;height:auto;padding:0%;'>
<div class='sortable'>
<div class='ev-item place_direction' style='height:auto;width:auto;clear:none;float:left;'>
<div class='ev-data place_direction'>
<span class='ch-address-{{place_id | id 0}}'>{{place_direction | id 0 | text_after ,}}</span>
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item place_city' style='height:auto;width:auto;clear:none;float:left;padding-left:0px;'>
<div class='ev-data place_city'>
{{place_city | id 0 | text_after ,}}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item place_state' style='height:auto;width:auto;clear:none;float:left;padding-left:0px;'>
<div class='ev-data place_state'>
{{place_state | id 0 | text_after ,}}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item place_country' style='height:auto;width:auto;clear:none;float:left;padding-left:0px;'>
<div class='ev-data place_country'>
{{place_country | id 0 }}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item place_gmap' style=''>
<div id='gmap{{id}}{{timestamp}}' class='ev-data place_gmap' style='width:100%; height:200px;'>
{{place_gmap | id 0}}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item custom_link' style='width:99.09208819714657%;clear:none;float:left;font-weight:bold;'>
<div class='ev-data custom_link'>
<a href="#gmap_link" class="ch-readmore" target="_blank" rel="nofollow"><span class="ch-more">{{translate | Open map}}</span></a>
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item place_description' style='width:99.09208819714657%;clear:none;float:left;margin-top:15px;'>
<div class='ev-data place_description'>
{{place_description | id 0 | filter the_content | shorten_text }}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item share_box' style='color:#fff;'>
<div class='ev-data share_box'>
{{share_box | share_fb | share_tw | share_in | share_go | share_pi | share_ics }}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item events_list' style=''>
<div class='ev-data events_list'>
{{event_list}}
</div>
<div class='ch-clear'></div>
</div>
</div>
<div class='ch-clear'></div>
</div>
</div>
<div class='ch-clear'></div>
</div>
<div class="ch-clear"></div>
</div>
<div style="clear:both;"></div>
</div>

View File

@@ -0,0 +1,24 @@
<div base="default" class="chronosly perfil2 ch-default ch-front ch-dad11 ev-{{id}} {{size}} ">
<div class="ev-box both " style="">
<div class='ev-item category_name' style='width:98.98348157560356%;clear:none;float:left;color:#ffffff;font-size:24px;line-height:28px;background: #cat-color;padding-left:10px;'>
<div class='ev-data category_name'>
<a href='' class='ch-readmore'><span class='ch-category-{{category_slug | id 0}}'>{{category_name | id 0 | filter the_title}}</span></a>
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item events_list' style=''>
<div class='ev-data events_list'>
{{event_list}}
</div>
<div class='ch-clear'></div>
</div>
<div class="ch-clear"></div>
</div>
<div style="clear:both;"></div>
</div>

View File

@@ -0,0 +1 @@
{"boxes":[{"type":"3","clase":"","featured":false,"style":"","items":[{"style":"width:98.98348157560356%;clear:none;float:left;color:#ffffff;font-size:24px;line-height:28px;background: #1bbc9d;padding-left:10px;","attr":[{"name":"category_name","value":"","vars":[{"name":"category_name","value":""},{"name":"readmore_check","value":true,"label":"Readmore link"},{"name":"readmore_text","value":"","label":"Readmore text"},{"name":"readmore_action","value":"2","label":"Link action"},{"name":"external_url","value":"","label":"External url"},{"name":"target_blank","value":false,"label":"Open in a new page"},{"name":"nofollow","value":false,"label":"Nofollow"}]},{"name":"color","value":"#ffffff","label":"Color"},{"name":"font-size","value":"24","label":"Text size"},{"name":"font-family","value":"","label":"Font family"},{"name":"bold","value":false,"label":"Bold"},{"name":"uppercase","value":false,"label":"Uppercase"},{"name":"text-align","value":"","label":"Align"},{"name":"text-decoration","value":"","label":"Decoration"},{"name":"background-color","value":"","label":"Background color"},{"name":"background-round","value":"","label":"Round"},{"name":"border-color","value":"","label":"Border color"},{"name":"border-size","value":"","label":"Border size"},{"name":"border-style","value":"","label":"Border style"},{"name":"padding","value":"","label":"Padding"},{"name":"margin","value":"","label":"Margin"},{"name":"css","value":"background:%20#cat-color;padding-left:10px;"}]},{"style":"","attr":[{"name":"events_list","value":"","vars":[{"name":"events_list","value":""}]},{"name":"color","value":"","label":"Color"},{"name":"font-size","value":"","label":"Text size"},{"name":"font-family","value":"","label":"Font family"},{"name":"bold","value":false,"label":"Bold"},{"name":"uppercase","value":false,"label":"Uppercase"},{"name":"text-align","value":"","label":"Align"},{"name":"text-decoration","value":"","label":"Decoration"},{"name":"background-color","value":"","label":"Background color"},{"name":"background-round","value":"","label":"Round"},{"name":"border-color","value":"","label":"Border color"},{"name":"border-size","value":"","label":"Border size"},{"name":"border-style","value":"","label":"Border style"},{"name":"padding","value":"","label":"Padding"},{"name":"margin","value":"","label":"Margin"},{"name":"css","value":""}]}],"attr":[{"name":"color","value":"","label":"Color"},{"name":"font-size","value":"","label":"Text size"},{"name":"font-family","value":"","label":"Font family"},{"name":"bold","value":false,"label":"Bold"},{"name":"uppercase","value":false,"label":"Uppercase"},{"name":"text-align","value":"","label":"Align"},{"name":"text-decoration","value":"","label":"Decoration"},{"name":"background-color","value":"","label":"Background color"},{"name":"background-round","value":"","label":"Round"},{"name":"border-color","value":"","label":"Border color"},{"name":"border-size","value":"","label":"Border size"},{"name":"border-style","value":"","label":"Border style"},{"name":"padding","value":"","label":"Padding"},{"name":"margin","value":"","label":"Margin"},{"name":"css","value":""}]}],"style":""}

View File

@@ -0,0 +1,24 @@
<div base="default" class="chronosly perfil2 ch-default ch-front ch-dad11 box-featured ev-{{id}} {{size}} ">
<div class="ev-box both " style="">
<div class='ev-item category_name' style='width:98.98348157560356%;clear:none;float:left;color:#ffffff;font-size:24px;line-height:28px;background: #cat-color;padding-left:10px;'>
<div class='ev-data category_name'>
<a href='' class='ch-readmore'><span class='ch-category-{{category_slug | id 0}}'>{{category_name | id 0 | filter the_title}}</span></a>
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item events_list' style=''>
<div class='ev-data events_list'>
{{event_list}}
</div>
<div class='ch-clear'></div>
</div>
<div class="ch-clear"></div>
</div>
<div style="clear:both;"></div>
</div>

View File

@@ -0,0 +1,31 @@
<div base="default" class="chronosly perfil2 ch-default ch-front ch-dad12 ev-{{id}} {{size}} ">
<div class="ev-box both " style="">
<div class='ev-item category_name' style='width:98.98348157560356%;clear:none;float:left;color:#ffffff;font-size:24px;line-height:28px;background: #cat-color;padding-left:10px;'>
<div class='ev-data category_name'>
<span class='ch-category-{{category_slug | id 0}}'>{{category_name | id 0 | filter the_title}}</span>
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item ' style=''>
<div class='ev-data '>
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item events_list' style=''>
<div class='ev-data events_list'>
{{event_list}}
</div>
<div class='ch-clear'></div>
</div>
<div class="ch-clear"></div>
</div>
<div style="clear:both;"></div>
</div>

View File

@@ -0,0 +1 @@
{"boxes":[{"type":"3","clase":"","featured":false,"style":"","items":[{"style":"width:98.98348157560356%;clear:none;float:left;color:#ffffff;font-size:24px;line-height:28px;background: #1bbc9d;padding-left:10px;","attr":[{"name":"category_name","value":"","vars":[{"name":"category_name","value":""},{"name":"readmore_check","value":false,"label":"Readmore link"},{"name":"readmore_text","value":"more","label":"Readmore text"},{"name":"readmore_action","value":"1","label":"Link action"},{"name":"external_url","value":"","label":"External url"},{"name":"target_blank","value":false,"label":"Open in a new page"},{"name":"nofollow","value":false,"label":"Nofollow"}]},{"name":"color","value":"#ffffff","label":"Color"},{"name":"font-size","value":"24","label":"Text size"},{"name":"font-family","value":"","label":"Font family"},{"name":"bold","value":false,"label":"Bold"},{"name":"uppercase","value":false,"label":"Uppercase"},{"name":"text-align","value":"","label":"Align"},{"name":"text-decoration","value":"","label":"Decoration"},{"name":"background-color","value":"","label":"Background color"},{"name":"background-round","value":"","label":"Round"},{"name":"border-color","value":"","label":"Border color"},{"name":"border-size","value":"","label":"Border size"},{"name":"border-style","value":"","label":"Border style"},{"name":"padding","value":"","label":"Padding"},{"name":"margin","value":"","label":"Margin"},{"name":"css","value":"background:%20#cat-color;padding-left:10px;"}]},{"style":"","attr":[""]},{"style":"","attr":[{"name":"events_list","value":"","vars":[{"name":"events_list","value":""}]},{"name":"color","value":"","label":"Color"},{"name":"font-size","value":"","label":"Text size"},{"name":"font-family","value":"","label":"Font family"},{"name":"bold","value":false,"label":"Bold"},{"name":"uppercase","value":false,"label":"Uppercase"},{"name":"text-align","value":"","label":"Align"},{"name":"text-decoration","value":"","label":"Decoration"},{"name":"background-color","value":"","label":"Background color"},{"name":"background-round","value":"","label":"Round"},{"name":"border-color","value":"","label":"Border color"},{"name":"border-size","value":"","label":"Border size"},{"name":"border-style","value":"","label":"Border style"},{"name":"padding","value":"","label":"Padding"},{"name":"margin","value":"","label":"Margin"},{"name":"css","value":""}]}],"attr":[{"name":"color","value":"","label":"Color"},{"name":"font-size","value":"","label":"Text size"},{"name":"font-family","value":"","label":"Font family"},{"name":"bold","value":false,"label":"Bold"},{"name":"uppercase","value":false,"label":"Uppercase"},{"name":"text-align","value":"","label":"Align"},{"name":"text-decoration","value":"","label":"Decoration"},{"name":"background-color","value":"","label":"Background color"},{"name":"background-round","value":"","label":"Round"},{"name":"border-color","value":"","label":"Border color"},{"name":"border-size","value":"","label":"Border size"},{"name":"border-style","value":"","label":"Border style"},{"name":"padding","value":"","label":"Padding"},{"name":"margin","value":"","label":"Margin"},{"name":"css","value":""}]}],"style":""}

View File

@@ -0,0 +1,31 @@
<div base="default" class="chronosly perfil2 ch-default ch-front ch-dad12 box-featured ev-{{id}} {{size}} ">
<div class="ev-box both " style="">
<div class='ev-item category_name' style='width:98.98348157560356%;clear:none;float:left;color:#ffffff;font-size:24px;line-height:28px;background: #cat-color;padding-left:10px;'>
<div class='ev-data category_name'>
<span class='ch-category-{{category_slug | id 0}}'>{{category_name | id 0 | filter the_title}}</span>
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item ' style=''>
<div class='ev-data '>
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item events_list' style=''>
<div class='ev-data events_list'>
{{event_list}}
</div>
<div class='ch-clear'></div>
</div>
<div class="ch-clear"></div>
</div>
<div style="clear:both;"></div>
</div>

View File

@@ -0,0 +1,179 @@
<style id='style'>
.ev-{{id}} .ev-item.share_box a {background:#cat-color!important;}
.ev-{{id}} .ev-item.share_box a {background:#cat-color!important;}
</style>
<div base="default" class="chronosly perfil2 ch-default ch-front ch-dad2 ev-{{id}} {{size}} ">
<div class="ev-box both back_img" style="width:auto;clear:none;float:left;border-left:12px solid #cat-color;background:url(#feat-image) center center no-repeat;">
<div class="ch-clear"></div>
</div>
<div class="ev-box both ch-overlay" style="width:36.875%;clear:none;float:none;color:#ffffff;background-color:#000000;margin-left:12px;">
<div class="ch-clear"></div>
</div>
<div class="ev-box both ch-info" style="clear:none;float:none;height:auto;width:101%;color:#ffffff;text-transform:uppercase;padding-bottom:20px;">
<div class='ev-item cont_box' style='height:auto;width:36.08660785886127%;clear:none;float:left;max-width:450px;padding-left:25px;'>
<div class='sortable'>
<div class='ev-item start_date' style='clear:none;float:left;height:auto;width:auto;font-size:50px;line-height:54px;padding-right:5px;'>
<div class='ev-data start_date'>
{{start_date | time_format d}}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item start_date' style='clear:none;float:left;height:auto;width:auto;font-size:18px;line-height:22px;padding-top:32px'>
<div class='ev-data start_date'>
{{start_date | time_format M}}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item event_title' style='width:auto;clear:both;float:none;height:auto;font-size:20px;line-height:24px;padding-top:0px;'>
<div class='ev-data event_title'>
{{event_title}}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item categories' style='width:98.91304347826086%;clear:none;float:left;font-size:14px;line-height:18px;padding-top:0px;'>
<div class='ev-data categories'>
{{categories}}
</div>
<div class='ch-clear'></div>
</div>
</div>
<div class='ch-clear'></div>
</div>
<div class="ch-clear"></div>
</div>
<div class="ev-box both content2" style="float:right;clear:none;height:auto;width:99%;background-color:#ffffff;padding:1%;">
<div class='ev-item organizer_name' style='float:right;clear:none;height:auto;width:auto;color:#000000;font-size:18px;line-height:22px;text-transform:uppercase;text-align:right;padding-right:0px;margin-bottom:7px;'>
<div class='ev-data organizer_name'>
<a href='{{organizer_link | id {{organizer_id | id 0}}}}' class='ch-readmore'><span class='ch-organizer-{{organizer_id | id 0}}'>{{organizer_name | id 0 | filter the_title | text_before Organized by }}</span></a>
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item ticket_price' style='width:98.49056603773585%;clear:none;float:left;margin-bottom:7px;'>
<div class='ev-data ticket_price'>
{{ticket_price | id 1}}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item full_time' style=''>
<div class='ev-data full_time'>
{{full_time | time_format }}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item cont_box' style='clear:none;float:left;height:auto;padding:0%;'>
<div class='sortable'>
<div class='ev-item place_direction' style='height:auto;width:auto;clear:none;float:left;'>
<div class='ev-data place_direction'>
<a href='{{place_link | id {{place_id | id 0}}}}' class='ch-readmore'> <span class='ch-address-{{place_id | id 0}}'>{{place_direction | id 0 | text_after ,}}</span></a>
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item place_city' style='height:auto;width:auto;clear:none;float:left;padding-left:0px;'>
<div class='ev-data place_city'>
{{place_city | id 0 | text_after ,}}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item place_state' style='height:auto;width:auto;clear:none;float:left;padding-left:0px;'>
<div class='ev-data place_state'>
{{place_state | id 0 | text_after ,}}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item place_country' style='height:auto;width:auto;clear:none;float:left;padding-left:0px;'>
<div class='ev-data place_country'>
{{place_country | id 0 }}
</div>
<div class='ch-clear'></div>
</div>
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item cont_box' style='height:auto;width:98.97523484201537%;clear:none;float:left;padding:0%;margin:0%;padding:20px 0px;'>
<div class='sortable'>
<div class='ev-item full_date' style='width:auto;clear:none;float:left;height:auto;font-size:16px;line-height:20px;text-transform:uppercase;background:none;color:#cat-color;padding-left:4px;border-bottom:2px solid #cat-color; margin-bottom:15px;'>
<div class='ev-data full_date'>
{{full_date | time_format | text_before From }}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item event_description' style='float:left;clear:none;height:auto;width:98.83268482490273%;padding:0%;'>
<div class='ev-data event_description'>
{{event_description | shorten_text }}
</div>
<div class='ch-clear'></div>
</div>
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item share_box' style='width:56%;color:#fff;'>
<div class='ev-data share_box'>
{{share_box | defaultchecked 1 | share_fb 1 | share_tw 1 | share_in 1 | share_go 1 | share_pi 1 | share_ics 1}}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item cont_box' style='clear:none;float:right;height:auto;width:40.8198121263877%;'>
<div class='sortable'>
<div class='ev-item ticket_link' style='float:right;clear:none;height:auto;width:auto;color:#ffffff;font-weight:bold;text-transform:uppercase;text-align:center;background:#cat-color;padding:5px 15px;'>
<div class='ev-data ticket_link'>
<a href='{{ticket_link | id 1}}' target='_blank'>{{ translate | Buy tickets}}</a>
</div>
<div class='ch-clear'></div>
</div>
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item place_gmap' style='clear:none;float:left;height:auto;padding:20px 0px;'>
<div id='gmap{{id}}{{timestamp}}' class='ev-data place_gmap' style='width:100%; height:200px;padding:20px 0px;'>
{{place_gmap | id 0}}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item seasons_list' style='width:98.9583%;clear:none;float:left;'>
<div class='ev-data seasons_list'>
{{seasons_list | seasons_calendar 1 | seasons_date_format | seasons_hour_format | seasons_ticket_name 1 | seasons_ticket_price 1 | seasons_ticket_link 1}}
</div>
<div class='ch-clear'></div>
</div>
<div class="ch-clear"></div>
</div>
<div style="clear:both;"></div>
</div>

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,179 @@
<style id='style'>
.ev-{{id}} .ev-item.share_box a {background:#cat-color!important;}
.ev-{{id}} .ev-item.share_box a {background:#cat-color!important;}
</style>
<div base="default" class="chronosly perfil2 ch-default ch-front ch-dad2 box-featured ev-{{id}} {{size}} ">
<div class="ev-box both back_img" style="width:auto;clear:none;float:left;border-left:12px solid #cat-color;background:url(#feat-image) center center no-repeat;">
<div class="ch-clear"></div>
</div>
<div class="ev-box both ch-overlay" style="width:36.875%;clear:none;float:none;color:#ffffff;background-color:#000000;margin-left:12px;">
<div class="ch-clear"></div>
</div>
<div class="ev-box both ch-info" style="clear:none;float:none;height:auto;width:101%;color:#ffffff;text-transform:uppercase;padding-bottom:20px;">
<div class='ev-item cont_box' style='height:auto;width:36.08660785886127%;clear:none;float:left;max-width:450px;padding-left:25px;'>
<div class='sortable'>
<div class='ev-item start_date' style='clear:none;float:left;height:auto;width:auto;font-size:50px;line-height:54px;padding-right:5px;'>
<div class='ev-data start_date'>
{{start_date | time_format d}}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item start_date' style='clear:none;float:left;height:auto;width:auto;font-size:18px;line-height:22px;padding-top:32px'>
<div class='ev-data start_date'>
{{start_date | time_format M}}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item event_title' style='width:auto;clear:both;float:none;height:auto;font-size:20px;line-height:24px;padding-top:0px;'>
<div class='ev-data event_title'>
{{event_title}}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item categories' style='width:98.91304347826086%;clear:none;float:left;font-size:14px;line-height:18px;padding-top:0px;'>
<div class='ev-data categories'>
{{categories}}
</div>
<div class='ch-clear'></div>
</div>
</div>
<div class='ch-clear'></div>
</div>
<div class="ch-clear"></div>
</div>
<div class="ev-box both content2" style="float:right;clear:none;height:auto;width:99%;background-color:#ffffff;padding:1%;">
<div class='ev-item organizer_name' style='float:right;clear:none;height:auto;width:auto;color:#000000;font-size:18px;line-height:22px;text-transform:uppercase;text-align:right;padding-right:0px;margin-bottom:7px;'>
<div class='ev-data organizer_name'>
<a href='{{organizer_link | id {{organizer_id | id 0}}}}' class='ch-readmore'><span class='ch-organizer-{{organizer_id | id 0}}'>{{organizer_name | id 0 | filter the_title | text_before Organized by }}</span></a>
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item ticket_price' style='width:98.49056603773585%;clear:none;float:left;margin-bottom:7px;'>
<div class='ev-data ticket_price'>
{{ticket_price | id 1}}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item full_time' style=''>
<div class='ev-data full_time'>
{{full_time | time_format }}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item cont_box' style='clear:none;float:left;height:auto;padding:0%;'>
<div class='sortable'>
<div class='ev-item place_direction' style='height:auto;width:auto;clear:none;float:left;'>
<div class='ev-data place_direction'>
<a href='{{place_link | id {{place_id | id 0}}}}' class='ch-readmore'> <span class='ch-address-{{place_id | id 0}}'>{{place_direction | id 0 | text_after ,}}</span></a>
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item place_city' style='height:auto;width:auto;clear:none;float:left;padding-left:0px;'>
<div class='ev-data place_city'>
{{place_city | id 0 | text_after ,}}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item place_state' style='height:auto;width:auto;clear:none;float:left;padding-left:0px;'>
<div class='ev-data place_state'>
{{place_state | id 0 | text_after ,}}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item place_country' style='height:auto;width:auto;clear:none;float:left;padding-left:0px;'>
<div class='ev-data place_country'>
{{place_country | id 0 }}
</div>
<div class='ch-clear'></div>
</div>
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item cont_box' style='height:auto;width:98.97523484201537%;clear:none;float:left;padding:0%;margin:0%;padding:20px 0px;'>
<div class='sortable'>
<div class='ev-item full_date' style='width:auto;clear:none;float:left;height:auto;font-size:16px;line-height:20px;text-transform:uppercase;background:none;color:#cat-color;padding-left:4px;border-bottom:2px solid #cat-color; margin-bottom:15px;'>
<div class='ev-data full_date'>
{{full_date | time_format | text_before From }}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item event_description' style='float:left;clear:none;height:auto;width:98.83268482490273%;padding:0%;'>
<div class='ev-data event_description'>
{{event_description | shorten_text }}
</div>
<div class='ch-clear'></div>
</div>
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item share_box' style='width:56%;color:#fff;'>
<div class='ev-data share_box'>
{{share_box | defaultchecked 1 | share_fb 1 | share_tw 1 | share_in 1 | share_go 1 | share_pi 1 | share_ics 1}}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item cont_box' style='clear:none;float:right;height:auto;width:40.8198121263877%;'>
<div class='sortable'>
<div class='ev-item ticket_link' style='float:right;clear:none;height:auto;width:auto;color:#ffffff;font-weight:bold;text-transform:uppercase;text-align:center;background:#cat-color;padding:5px 15px;'>
<div class='ev-data ticket_link'>
<a href='{{ticket_link | id 1}}' target='_blank'>{{ translate | Buy tickets}}</a>
</div>
<div class='ch-clear'></div>
</div>
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item place_gmap' style='clear:none;float:left;height:auto;padding:20px 0px;'>
<div id='gmap{{id}}{{timestamp}}' class='ev-data place_gmap' style='width:100%; height:200px;padding:20px 0px;'>
{{place_gmap | id 0}}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item seasons_list' style='width:98.9583%;clear:none;float:left;'>
<div class='ev-data seasons_list'>
{{seasons_list | seasons_calendar 1 | seasons_date_format | seasons_hour_format | seasons_ticket_name 1 | seasons_ticket_price 1 | seasons_ticket_link 1}}
</div>
<div class='ch-clear'></div>
</div>
<div class="ch-clear"></div>
</div>
<div style="clear:both;"></div>
</div>

View File

@@ -0,0 +1,24 @@
<div base="default" class="chronosly perfil2 ch-default ch-front ch-dad3 ev-{{id}} {{size}} ">
<div class="ev-box both calendar" style="width:99%;clear:none;float:left;color:#4b4c4e;text-align:center;padding:0%;margin:0%;margin:3px 0px;padding:5px;border-top:2px solid #cat-color;positon:relative;">
<div class='ev-item start_hour' style='height:auto;width:29%;clear:none;float:left;font-size:12px;line-height:16px;text-align:left;'>
<div class='ev-data start_hour'>
{{start_hour | time_format }}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item event_title' style='width:69.0956979806848%;clear:none;float:right;height:auto;font-size:14px;line-height:18px;text-transform:uppercase;text-align:center;padding:0%;margin:0%;'>
<div class='ev-data event_title'>
<a href="javascript:ev_popup('{{idurl}}&amp;post_type=chronosly')" class="ch-readmore">{{event_title}}</a>
</div>
<div class='ch-clear'></div>
</div>
<div class="ch-clear"></div>
</div>
<div style="clear:both;"></div>
</div>

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,24 @@
<div base="default" class="chronosly perfil2 ch-default ch-front ch-dad3 box-featured ev-{{id}} {{size}} ">
<div class="ev-box both calendar-feat ch-featured " style="width:99%;clear:none;float:left;text-align:center;background-color:#4b4c4e;margin:3px 0px;padding:5px;border-top:2px solid #cat-color;positon:relative;">
<div class='ev-item start_hour' style='width:29%;clear:none;float:left;height:auto;color:#ffffff;font-size:12px;line-height:16px;text-align:left;margin:0%;'>
<div class='ev-data start_hour'>
{{start_hour | time_format }}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item event_title' style='width:69.0956979806848%;clear:none;float:right;height:auto;color:#ffffff;font-size:14px;line-height:18px;text-transform:uppercase;text-align:center;padding:0%;margin:0%;'>
<div class='ev-data event_title'>
<a href="javascript:ev_popup('{{idurl}}&amp;post_type=chronosly')" class="ch-readmore">{{event_title}}</a>
</div>
<div class='ch-clear'></div>
</div>
<div class="ch-clear"></div>
</div>
<div style="clear:both;"></div>
</div>

View File

@@ -0,0 +1,243 @@
<style id='style'>
.ev-{{id}} .ev-item.share_box a {background:black!important;}
.ev-{{id}} .ev-item.share_box a {background:black!important;}
</style>
<div base="default" class="chronosly perfil2 ch-default ch-front ch-dad4 ev-{{id}} {{size}} ">
<div class="ev-box both data" style="width:8.875%;clear:none;float:left;font-weight:bold;text-align:center;padding:0%;">
<div class='ev-item start_date' style='width:98.59154929577466%;clear:none;float:left;font-size:34px;line-height:38px;padding:0%;'>
<div class='ev-data start_date'>
{{start_date | time_format d}}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item start_date' style='width:98.59154929577466%;clear:none;float:left;font-size:20px;line-height:24px;text-transform:uppercase;padding:0%;'>
<div class='ev-data start_date'>
{{start_date | time_format M}}
</div>
<div class='ch-clear'></div>
</div>
<div class="ch-clear"></div>
</div>
<div class="ev-box both title" style="width:89.375%;float:right;clear:none;padding:0%;border-left:2px solid black;border-bottom:2px solid black;">
<div class='ev-item event_title' style='height:auto;width:auto;clear:none;float:left;color:#000000;font-size:20px;line-height:24px;text-transform:uppercase;'>
<div class='ev-data event_title'>
<a href='{{event_link}}' class='ch-readmore'>{{event_title}}</a>
</div>
<div class='ch-clear'></div>
</div>
<div class="ch-clear"></div>
</div>
<div class="ev-box normal content1" style="width:89.375%;float:right;clear:none;background-color:#f1f2f2;padding:0%;border-left:2px solid black;">
<div class='ev-item custom_link' style='float:none;clear:none;height:auto;width:auto;color:#ffffff;font-size:32px;line-height:36px;font-weight:bold;text-align:center;text-decoration:none;background-color:#dcddde;padding:0%;padding:0px 8px;position:absolute;top:0px;right:0px;'>
<div class='ev-data custom_link'>
<a href="javascript:void(null)" class="ch-readmore" onclick='ev_slide("{{id}}", this)'><span class="ch-more">{{translate | +}}</span></a>
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item cont_box' style='width:92.3469387755102%;'>
<div class='sortable'>
<div class='ev-item full_time' style='width:auto;clear:none;float:left;height:auto;'>
<div class='ev-data full_time'>
{{full_time | time_format | text_before From }}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item place_direction' style='height:auto;width:auto;clear:none;float:left;'>
<div class='ev-data place_direction'>
<span class='ch-address-{{place_id | id 0}}'>{{place_direction | id 0 | text_after ,}}</span>
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item place_city' style='height:auto;width:auto;clear:none;float:left;padding-left:0px;'>
<div class='ev-data place_city'>
{{place_city | id 0 | text_after ,}}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item place_state' style='height:auto;width:auto;clear:none;float:left;padding-left:0px;'>
<div class='ev-data place_state'>
{{place_state | id 0 | text_after ,}}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item place_country' style='height:auto;width:auto;clear:none;float:left;padding-left:0px;margin-right:25px;'>
<div class='ev-data place_country'>
{{place_country | id 0 }}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item ticket_price' style='clear:none;float:left;height:auto;width:auto;'>
<div class='ev-data ticket_price'>
{{ticket_price | id 1}}
</div>
<div class='ch-clear'></div>
</div>
</div>
<div class='ch-clear'></div>
</div>
<div class="ch-clear"></div>
</div>
<div class="ev-box ch-hidden content2" style="width:89.375%;float:right;clear:none;background-color:#f1f2f2;border-left:2px solid black;">
<div class='ev-item cont_box' style='width:89.08163265306122%;clear:both;float:none;background-color:#ffffff;padding:4%;margin:2%;'>
<div class='sortable'>
<div class='ev-item featured_image' style='float:right;clear:none;height:auto;width:41.10275689223057%;'>
<div class='ev-data featured_image'>
<a href='{{event_link}}' class='ch-readmore'>{{event_image}}</a>
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item cont_box' style='width:56.22489959839358%;'>
<div class='sortable'>
<div class='ev-item full_date' style='width:auto;clear:none;float:left;height:auto;color:#000000;font-size:16px;line-height:20px;text-transform:uppercase;background:none;padding-left:4px;border-bottom:2px solid black; margin-bottom:15px;'>
<div class='ev-data full_date'>
{{full_date | time_format | text_before From }}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item event_description' style='float:left;clear:none;height:auto;width:98.86363636363636%;'>
<div class='ev-data event_description'>
<a href='{{event_link}}' class='ch-readmore'> {{event_description | shorten_text 500}}</a>
</div>
<div class='ch-clear'></div>
</div>
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item cont_box' style='width:98.93048128342245%;clear:none;float:left;padding:0%;margin:0%;position:relative;'>
<div class='sortable'>
<div class='ev-item cont_box' style='width:51.736745886654475%;'>
<div class='sortable'>
<div class='ev-item ticket_price' style='width:98.49056603773585%;clear:none;float:left;margin-bottom:7px;'>
<div class='ev-data ticket_price'>
{{ticket_price | id 1}}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item full_time' style=''>
<div class='ev-data full_time'>
{{full_time | time_format }}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item place_direction' style='clear:none;float:left;height:auto;width:auto;'>
<div class='ev-data place_direction'>
<a href='{{place_link | id {{place_id | id 0}}}}' class='ch-readmore'> <span class='ch-address-{{place_id | id 0}}'>{{place_direction | id 0 | text_after ,}}</span></a>
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item place_city' style='clear:none;float:left;height:auto;width:auto;padding-left:0px;'>
<div class='ev-data place_city'>
{{place_city | id 0 | text_after ,}}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item place_state' style='clear:none;float:left;height:auto;width:auto;padding-left:0px;'>
<div class='ev-data place_state'>
{{place_state | id 0 | text_after ,}}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item place_country' style='clear:none;float:left;height:auto;width:auto;padding-left:0px;'>
<div class='ev-data place_country'>
{{place_country | id 0 }}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item share_box' style='color:#fff;'>
<div class='ev-data share_box'>
{{share_box | defaultchecked 1 | share_fb 1 | share_tw 1 | share_in 1 | share_go 1 | share_pi 1 | share_ics 1}}
</div>
<div class='ch-clear'></div>
</div>
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item cont_box' style='width:45.585585585585584%;clear:none;float:none;color:#000000;text-transform:uppercase;text-align:right;bottom:0px;position:absolute;right:0px;'>
<div class='sortable'>
<div class='ev-item organizer_name' style='float:none;clear:both;width:99.18367346938776%;color:#000000;text-transform:uppercase;text-align:right;padding-right:0px;margin-bottom:7px;padding-top:15px;'>
<div class='ev-data organizer_name'>
<a href='{{organizer_link | id {{organizer_id | id 0}}}}' class='ch-readmore'><span class='ch-organizer-{{organizer_id | id 0}}'>{{organizer_name | id 0 | filter the_title | text_before Organized by }}</span></a>
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item ticket_link' style='float:right;clear:none;height:auto;width:auto;color:#ffffff;font-size:18px;line-height:22px;font-weight:bold;text-transform:uppercase;text-align:center;background:black;padding:5px 15px;'>
<div class='ev-data ticket_link'>
<a href='{{ticket_link | id 1}}' target='_blank'>{{ translate | Buy tickets}}</a>
</div>
<div class='ch-clear'></div>
</div>
</div>
<div class='ch-clear'></div>
</div>
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item place_gmap' style='width:98.23899371069183%;clear:none;float:left;margin-top:25px;'>
<div id='gmap{{id}}{{timestamp}}' class='ev-data place_gmap' style='width:100%; height:200px;margin-top:25px;'>
{{place_gmap | id 0}}
</div>
<div class='ch-clear'></div>
</div>
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item custom_link' style='float:none;clear:none;width:auto;height:auto;color:#ffffff;font-size:36px;line-height:40px;font-weight:bold;text-align:center;text-decoration:none;background-color:#dcddde;padding:0%;padding:0px 10px;padding-bottom:5px;line-height:32px;position:absolute;right:0px;bottom:0px;'>
<div class='ev-data custom_link'>
<a href="javascript:void(null)" class="ch-readmore" onclick='ev_slide("{{id}}", this)'><span class="ch-more">{{translate | -}}</span></a>
</div>
<div class='ch-clear'></div>
</div>
<div class="ch-clear"></div>
</div>
<div style="clear:both;"></div>
</div>

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,290 @@
<style id='style'>
.ev-{{id}} .ev-item.share_box a {background:black!important;}
.ev-{{id}} .ev-item.share_box a {background:black!important;}
</style>
<div base="default" class="chronosly perfil2 ch-default ch-front ch-dad4 box-featured ev-{{id}} {{size}} ">
<div class="ev-box normal back_img ch-featured " style="width:auto;clear:none;float:left;background:url(#feat-image) center center no-repeat;margin-left:12px;">
<div class="ch-clear"></div>
</div>
<div class="ev-box normal ch-overlay ch-featured " style="width:39.125%;clear:none;float:none;color:#ffffff;background-color:#000000;margin-left:12px;">
<div class="ch-clear"></div>
</div>
<div class="ev-box normal ch-info ch-featured " style="clear:none;float:none;height:auto;width:99.5%;color:#ffffff;text-transform:uppercase;left:12px;">
<div class='ev-item cont_box' style='height:auto;width:36.08660785886127%;clear:none;float:left;max-width:450px;padding-left:25px;'>
<div class='sortable'>
<div class='ev-item start_date' style='clear:none;float:left;height:auto;width:auto;font-size:50px;line-height:54px;padding-right:5px;'>
<div class='ev-data start_date'>
{{start_date | time_format d}}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item start_date' style='clear:none;float:left;height:auto;width:auto;font-size:18px;line-height:22px;padding-top:32px'>
<div class='ev-data start_date'>
{{start_date | time_format M}}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item event_title' style='width:auto;clear:both;float:none;height:auto;font-size:20px;line-height:24px;padding-top:0px;'>
<div class='ev-data event_title'>
<a href='{{event_link}}' class='ch-readmore'>{{event_title}}</a>
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item categories' style='width:98.91304347826086%;clear:none;float:left;font-size:14px;line-height:18px;padding-top:0px;'>
<div class='ev-data categories'>
{{categories}}
</div>
<div class='ch-clear'></div>
</div>
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item cont_box' style='clear:none;float:left;height:auto;width:98.98348157560356%;background-color:#4b4c4e;position:relative;padding:3px;'>
<div class='sortable'>
<div class='ev-item cont_box' style='width:35.8704453441296%;clear:none;float:left;max-width:450px;'>
<div class='sortable'>
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item custom_link' style='clear:none;float:none;height:auto;width:auto;color:#4b4c4e;font-size:32px;line-height:36px;background-color:#ffffff;padding:0px 8px;position:absolute;top:0px;right:0px;'>
<div class='ev-data custom_link'>
<a href="javascript:void(null)" class="ch-readmore" onclick='ev_slide("{{id}}", this)'><span class="ch-more">{{translate | +}}</span></a>
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item cont_box' style='width:23.3502538071066%;clear:none;float:left;'>
<div class='sortable'>
<div class='ev-item full_time' style=''>
<div class='ev-data full_time'>
{{full_time | time_format }}
</div>
<div class='ch-clear'></div>
</div>
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item cont_box' style='width:56.97969543147208%;clear:none;float:left;'>
<div class='sortable'>
<div class='ev-item place_direction' style='height:auto;width:auto;clear:none;float:left;padding-right:0px;'>
<div class='ev-data place_direction'>
<span class='ch-address-{{place_id | id 0}}'>{{place_direction | id 0 | text_after ,}}</span>
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item place_city' style='height:auto;width:auto;clear:none;float:left;padding-right:0px;'>
<div class='ev-data place_city'>
{{place_city | id 0 | text_after ,}}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item place_state' style='height:auto;clear:none;float:left;width:auto;padding-right:0px;'>
<div class='ev-data place_state'>
{{place_state | id 0 | text_after ,}}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item place_country' style='height:auto;width:auto;'>
<div class='ev-data place_country'>
{{place_country | id 0 }}
</div>
<div class='ch-clear'></div>
</div>
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item cont_box' style='width:3.076923076923077%;'>
<div class='sortable'>
</div>
<div class='ch-clear'></div>
</div>
</div>
<div class='ch-clear'></div>
</div>
<div class="ch-clear"></div>
</div>
<div class="ev-box ch-hidden content2 ch-featured " style="float:none;clear:both;height:auto;width:98%;background-color:#f1f2f2;width:98%;">
<div class='ev-item cont_box' style='width:89.08163265306122%;clear:both;float:none;background-color:#ffffff;padding:4%;margin:2%;'>
<div class='sortable'>
<div class='ev-item featured_image' style='float:right;clear:none;height:auto;width:41.10275689223057%;'>
<div class='ev-data featured_image'>
<a href='{{event_link}}' class='ch-readmore'>{{event_image}}</a>
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item cont_box' style='width:56.22489959839358%;'>
<div class='sortable'>
<div class='ev-item event_title' style='width:99.112426035503%;clear:none;float:left;color:#000000;font-size:20px;line-height:24px;text-transform:uppercase;'>
<div class='ev-data event_title'>
{{event_title}}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item full_date' style='width:auto;clear:none;float:left;height:auto;color:#000000;font-size:16px;line-height:20px;text-transform:uppercase;background:none;padding-left:4px;border-bottom:2px solid black; margin-bottom:15px;'>
<div class='ev-data full_date'>
{{full_date | time_format | text_before From }}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item event_description' style='float:left;clear:none;height:auto;width:98.86363636363636%;'>
<div class='ev-data event_description'>
<a href='{{event_link}}' class='ch-readmore'> {{event_description | shorten_text 500}}</a>
</div>
<div class='ch-clear'></div>
</div>
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item cont_box' style='width:99.02912621359224%;clear:none;float:left;padding:0%;margin:0%;position:relative;'>
<div class='sortable'>
<div class='ev-item cont_box' style='width:51.736745886654475%;'>
<div class='sortable'>
<div class='ev-item ticket_price' style='width:98.49056603773585%;clear:none;float:left;margin-bottom:7px;'>
<div class='ev-data ticket_price'>
{{ticket_price | id 1}}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item full_time' style=''>
<div class='ev-data full_time'>
{{full_time | time_format }}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item place_direction' style='clear:none;float:left;height:auto;width:auto;'>
<div class='ev-data place_direction'>
<a href='{{place_link | id {{place_id | id 0}}}}' class='ch-readmore'> <span class='ch-address-{{place_id | id 0}}'>{{place_direction | id 0 | text_after ,}}</span></a>
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item place_city' style='clear:none;float:left;height:auto;width:auto;padding-left:0px;'>
<div class='ev-data place_city'>
{{place_city | id 0 | text_after ,}}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item place_state' style='clear:none;float:left;height:auto;width:auto;padding-left:0px;'>
<div class='ev-data place_state'>
{{place_state | id 0 | text_after ,}}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item place_country' style='clear:none;float:left;height:auto;width:auto;padding-left:0px;'>
<div class='ev-data place_country'>
{{place_country | id 0 }}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item share_box' style='color:#fff;'>
<div class='ev-data share_box'>
{{share_box | defaultchecked 1 | share_fb 1 | share_tw 1 | share_in 1 | share_go 1 | share_pi 1 | share_ics 1}}
</div>
<div class='ch-clear'></div>
</div>
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item cont_box' style='width:45.585585585585584%;clear:none;float:none;color:#000000;text-transform:uppercase;text-align:right;bottom:0px;position:absolute;right:0px;'>
<div class='sortable'>
<div class='ev-item organizer_name' style='float:none;clear:both;width:99.18367346938776%;color:#000000;text-transform:uppercase;text-align:right;padding-right:0px;margin-bottom:7px;padding-top:15px;'>
<div class='ev-data organizer_name'>
<a href='{{organizer_link | id {{organizer_id | id 0}}}}' class='ch-readmore'><span class='ch-organizer-{{organizer_id | id 0}}'>{{organizer_name | id 0 | filter the_title | text_before Organized by }}</span></a>
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item ticket_link' style='float:right;clear:none;height:auto;width:auto;color:#ffffff;font-size:18px;line-height:22px;font-weight:bold;text-transform:uppercase;text-align:center;background:black;padding:5px 15px;'>
<div class='ev-data ticket_link'>
<a href='{{ticket_link | id 1}}' target='_blank'>{{ translate | Buy tickets}}</a>
</div>
<div class='ch-clear'></div>
</div>
</div>
<div class='ch-clear'></div>
</div>
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item place_gmap' style='width:98.23899371069183%;clear:none;float:left;margin-top:25px;'>
<div id='gmap{{id}}{{timestamp}}' class='ev-data place_gmap' style='width:100%; height:200px;margin-top:25px;'>
{{place_gmap | id 0}}
</div>
<div class='ch-clear'></div>
</div>
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item custom_link' style='float:none;clear:none;height:auto;width:auto;color:#ffffff;font-size:36px;line-height:40px;font-weight:bold;text-align:center;text-decoration:none;background-color:#dcddde;padding:0%;padding:0px 10px;padding-bottom:5px;line-height:32px;position:absolute;right:0px;bottom:0px;'>
<div class='ev-data custom_link'>
<a href="javascript:void(null)" class="ch-readmore" onclick='ev_slide("{{id}}", this)'><span class="ch-more">{{translate | -}}</span></a>
</div>
<div class='ch-clear'></div>
</div>
<div class="ch-clear"></div>
</div>
<div style="clear:both;"></div>
</div>

View File

@@ -0,0 +1,46 @@
<div base="default" class="chronosly perfil2 ch-default ch-front ch-dad5 ev-{{id}} {{size}} ">
<div class="ev-box both " style="width:98.96640826873386%;clear:none;float:left;margin-bottom:20px;">
<div class='ev-item start_date' style='height:auto;width:auto;clear:none;float:left;font-size:16px;line-height:20px;color:#cat-color;'>
<div class='ev-data start_date'>
{{start_date | time_format d/m}}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item event_title' style='height:auto;width:81.06734434561626%;clear:none;float:left;font-size:16px;line-height:20px;text-transform:uppercase;color:#cat-color;'>
<div class='ev-data event_title'>
<a href='{{event_link}}' class='ch-readmore'>{{event_title}}</a>
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item cont_box' style='float:none;clear:both;'>
<div class='sortable'>
<div class='ev-item full_time' style='height:auto;width:auto;'>
<div class='ev-data full_time'>
{{full_time | time_format }}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item ticket_price' style='clear:none;float:left;height:auto;width:auto;'>
<div class='ev-data ticket_price'>
{{ticket_price | id 1}}
</div>
<div class='ch-clear'></div>
</div>
</div>
<div class='ch-clear'></div>
</div>
<div class="ch-clear"></div>
</div>
<div style="clear:both;"></div>
</div>

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,53 @@
<div base="default" class="chronosly perfil2 ch-default ch-front ch-dad5 box-featured ev-{{id}} {{size}} ">
<div class="ev-box both ch-featured " style="width:98.9664082687339%;clear:none;float:left;margin-bottom:20px;">
<div class='ev-item featured_image' style='width:23.6013986013986%;clear:none;float:left;'>
<div class='ev-data featured_image'>
<a href='{{event_link}}' class='ch-readmore'>{{event_image}}</a>
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item cont_box' style='width:71.66454891994918%;'>
<div class='sortable'>
<div class='ev-item start_date' style='clear:none;float:left;height:auto;width:auto;font-size:16px;line-height:20px;color:#cat-color;'>
<div class='ev-data start_date'>
{{start_date | time_format d/m}}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item event_title' style='width:81.29496402877699%;clear:none;float:left;font-size:16px;line-height:20px;text-transform:uppercase;color:#cat-color;'>
<div class='ev-data event_title'>
<a href='{{event_link}}' class='ch-readmore'>{{event_title}}</a>
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item full_time' style='height:auto;width:auto;'>
<div class='ev-data full_time'>
{{full_time | time_format }}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item ticket_price' style='clear:none;float:left;height:auto;width:auto;'>
<div class='ev-data ticket_price'>
{{ticket_price | id 1}}
</div>
<div class='ch-clear'></div>
</div>
</div>
<div class='ch-clear'></div>
</div>
<div class="ch-clear"></div>
</div>
<div style="clear:both;"></div>
</div>

View File

@@ -0,0 +1,46 @@
<div base="default" class="chronosly perfil2 ch-default ch-front ch-dad6 ev-{{id}} {{size}} ">
<div class="ev-box both " style="width:98.96640826873386%;clear:none;float:left;margin-bottom:20px;">
<div class='ev-item start_date' style='height:auto;width:auto;clear:none;float:left;font-size:16px;line-height:20px;color:#cat-color;'>
<div class='ev-data start_date'>
{{start_date | time_format d/m}}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item event_title' style='height:auto;width:81.06734434561626%;clear:none;float:left;font-size:16px;line-height:20px;text-transform:uppercase;color:#cat-color;'>
<div class='ev-data event_title'>
<a href='{{event_link}}' class='ch-readmore'>{{event_title}}</a>
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item cont_box' style='float:none;clear:both;'>
<div class='sortable'>
<div class='ev-item full_time' style='height:auto;width:auto;'>
<div class='ev-data full_time'>
{{full_time | time_format }}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item ticket_price' style='clear:none;float:left;height:auto;width:auto;'>
<div class='ev-data ticket_price'>
{{ticket_price | id 1}}
</div>
<div class='ch-clear'></div>
</div>
</div>
<div class='ch-clear'></div>
</div>
<div class="ch-clear"></div>
</div>
<div style="clear:both;"></div>
</div>

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,53 @@
<div base="default" class="chronosly perfil2 ch-default ch-front ch-dad6 box-featured ev-{{id}} {{size}} ">
<div class="ev-box both ch-featured " style="width:98.9664082687339%;clear:none;float:left;margin-bottom:20px;">
<div class='ev-item featured_image' style='width:23.6013986013986%;clear:none;float:left;'>
<div class='ev-data featured_image'>
<a href='{{event_link}}' class='ch-readmore'>{{event_image}}</a>
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item cont_box' style='width:71.66454891994918%;'>
<div class='sortable'>
<div class='ev-item start_date' style='clear:none;float:left;height:auto;width:auto;font-size:16px;line-height:20px;color:#cat-color;'>
<div class='ev-data start_date'>
{{start_date | time_format d/m}}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item event_title' style='width:81.29496402877699%;clear:none;float:left;font-size:16px;line-height:20px;text-transform:uppercase;color:#cat-color;'>
<div class='ev-data event_title'>
<a href='{{event_link}}' class='ch-readmore'>{{event_title}}</a>
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item full_time' style='height:auto;width:auto;'>
<div class='ev-data full_time'>
{{full_time | time_format }}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item ticket_price' style='clear:none;float:left;height:auto;width:auto;'>
<div class='ev-data ticket_price'>
{{ticket_price | id 1}}
</div>
<div class='ch-clear'></div>
</div>
</div>
<div class='ch-clear'></div>
</div>
<div class="ch-clear"></div>
</div>
<div style="clear:both;"></div>
</div>

View File

@@ -0,0 +1,86 @@
<style id='style'>
.ev-{{id}} .ev-box .ev-item.share_box a {background:#4b4c4e!important;}
.ev-{{id}} .ev-box.ch-featured .ev-item.share_box a {background:#dcddde!important;}
.ev-{{id}} .ev-box .ev-item.share_box a {background:#4b4c4e!important;}
.ev-{{id}} .ev-box.ch-featured .ev-item.share_box a {background:#dcddde!important;}
</style>
<div base="default" class="chronosly perfil2 ch-default ch-front ch-dad7 ev-{{id}} {{size}} ">
<div class="ev-box both " style="width:23.5%;clear:none;float:left;padding:0%;">
<div class='ev-item organizer_logo' style='width:98.93048128342245%;clear:none;float:left;padding:0%;margin:0%;'>
<div class='ev-data organizer_logo'>
<a href='{{organizer_link | id {{organizer_id | id 0}}}}' class='ch-readmore'><span class='ch-organizer-{{organizer_id | id 0}}'>{{organizer_image | id 0 }}</span></a>
</div>
<div class='ch-clear'></div>
</div>
<div class="ch-clear"></div>
</div>
<div class="ev-box both " style="width:75.02153316106805%;float:right;clear:none;color:#ffffff;background-color:#4b4c4e;padding:0%;padding-left:2%;">
<div class='ev-item organizer_name' style='width:98.97260273972603%;clear:none;float:left;font-size:20px;line-height:24px;text-transform:uppercase;'>
<div class='ev-data organizer_name'>
<a href='{{organizer_link | id {{organizer_id | id 0}}}}' class='ch-readmore'><span class='ch-organizer-{{organizer_id | id 0}}'>{{organizer_name | id 0 | filter the_title}}</span></a>
</div>
<div class='ch-clear'></div>
</div>
<div class="ch-clear"></div>
</div>
<div class="ev-box normal " style="width:75%;float:right;clear:none;color:#4b4c4e;background-color:#f1f2f2;padding:2%;">
<div class='ev-item organizer_description' style='width:97.88732394366197%;clear:none;float:left;'>
<div class='ev-data organizer_description'>
{{organizer_description | id 0 | filter the_content | shorten_text 400}}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item custom_link' style='width:auto;clear:none;float:none;height:auto;color:#ffffff;font-size:32px;line-height:36px;font-weight:bold;text-align:center;text-decoration:none;background-color:#dcddde;padding:0px 8px;position:absolute;bottom:0px;right:0px;'>
<div class='ev-data custom_link'>
<a href="javascript:void(null)" class="ch-readmore" onclick='ev_slide("{{id}}", this)'><span class="ch-more">{{translate | +}}</span></a>
</div>
<div class='ch-clear'></div>
</div>
<div class="ch-clear"></div>
</div>
<div class="ev-box ch-hidden " style="width:75%;float:right;clear:none;color:#4b4c4e;background-color:#f1f2f2;padding:2%;">
<div class='ev-item organizer_description' style='width:97.7112676056338%;clear:none;float:left;'>
<div class='ev-data organizer_description'>
{{organizer_description | id 0 | filter the_content | shorten_text }}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item share_box' style='color:#F1F2F2;'>
<div class='ev-data share_box'>
{{share_box | share_fb | share_tw | share_in | share_go | share_pi | share_ics }}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item events_list' style=''>
<div class='ev-data events_list'>
{{event_list}}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item custom_link' style='width:auto;clear:none;float:none;height:auto;color:#ffffff;font-size:36px;line-height:40px;font-weight:bold;text-align:center;text-decoration:none;background-color:#dcddde;padding:0px 10px;padding-bottom:5px;line-height:32px;position:absolute;right:0px;bottom:0px;'>
<div class='ev-data custom_link'>
<a href="javascript:void(null)" class="ch-readmore" onclick='ev_slide("{{id}}", this)'><span class="ch-more">{{translate | -}}</span></a>
</div>
<div class='ch-clear'></div>
</div>
<div class="ch-clear"></div>
</div>
<div style="clear:both;"></div>
</div>

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,86 @@
<style id='style'>
.ev-{{id}} .ev-box .ev-item.share_box a {background:#4b4c4e!important;}
.ev-{{id}} .ev-box.ch-featured .ev-item.share_box a {background:#dcddde!important;}
.ev-{{id}} .ev-box .ev-item.share_box a {background:#4b4c4e!important;}
.ev-{{id}} .ev-box.ch-featured .ev-item.share_box a {background:#dcddde!important;}
</style>
<div base="default" class="chronosly perfil2 ch-default ch-front ch-dad7 box-featured ev-{{id}} {{size}} ">
<div class="ev-box both ch-featured " style="width:24.031007751938%;clear:none;float:left;padding:0%;margin:0%;">
<div class='ev-item organizer_logo' style='width:98.95833333333334%;clear:none;float:left;padding:0%;margin:0%;'>
<div class='ev-data organizer_logo'>
<a href='{{organizer_link | id {{organizer_id | id 0}}}}' class='ch-readmore'><span class='ch-organizer-{{organizer_id | id 0}}'>{{organizer_image | id 0 }}</span></a>
</div>
<div class='ch-clear'></div>
</div>
<div class="ch-clear"></div>
</div>
<div class="ev-box both ch-featured " style="width:75.0215331610681%;float:right;clear:none;color:#ffffff;background-color:#dcddde;padding:0%;padding-left:2%;">
<div class='ev-item organizer_name' style='width:98.97260273972603%;clear:none;float:left;font-size:20px;line-height:24px;text-transform:uppercase;'>
<div class='ev-data organizer_name'>
<a href='{{organizer_link | id {{organizer_id | id 0}}}}' class='ch-readmore'><span class='ch-organizer-{{organizer_id | id 0}}'>{{organizer_name | id 0 | filter the_title}}</span></a>
</div>
<div class='ch-clear'></div>
</div>
<div class="ch-clear"></div>
</div>
<div class="ev-box normal ch-featured " style="width:75.0215331610681%;float:right;clear:none;color:#ffffff;background-color:#4b4c4e;padding:2%;">
<div class='ev-item organizer_description' style='width:97.88732394366197%;clear:none;float:left;'>
<div class='ev-data organizer_description'>
{{organizer_description | id 0 | filter the_content | shorten_text 400}}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item custom_link' style='width:auto;clear:none;float:none;height:auto;color:#ffffff;font-size:32px;line-height:36px;font-weight:bold;text-align:center;text-decoration:none;background-color:#dcddde;padding:0px 8px;position:absolute;bottom:0px;right:0px;'>
<div class='ev-data custom_link'>
<a href="javascript:void(null)" class="ch-readmore" onclick='ev_slide("{{id}}", this)'><span class="ch-more">{{translate | +}}</span></a>
</div>
<div class='ch-clear'></div>
</div>
<div class="ch-clear"></div>
</div>
<div class="ev-box ch-hidden ch-featured " style="width:75.0215331610681%;float:right;clear:none;color:#ffffff;background-color:#4b4c4e;padding:2%;">
<div class='ev-item organizer_description' style='width:97.64150943396226%;clear:none;float:left;'>
<div class='ev-data organizer_description'>
{{organizer_description | id 0 | filter the_content | shorten_text }}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item share_box' style='color:#4b4c4e;'>
<div class='ev-data share_box'>
{{share_box | share_fb | share_tw | share_in | share_go | share_pi | share_ics }}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item events_list' style=''>
<div class='ev-data events_list'>
{{event_list}}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item custom_link' style='width:auto;clear:none;float:none;height:auto;color:#ffffff;font-size:36px;line-height:40px;font-weight:bold;text-align:center;text-decoration:none;background-color:#dcddde;padding:0px 10px;padding-bottom:5px;line-height:32px;position:absolute;right:0px;bottom:0px;'>
<div class='ev-data custom_link'>
<a href="javascript:void(null)" class="ch-readmore" onclick='ev_slide("{{id}}", this)'><span class="ch-more">{{translate | -}}</span></a>
</div>
<div class='ch-clear'></div>
</div>
<div class="ch-clear"></div>
</div>
<div style="clear:both;"></div>
</div>

View File

@@ -0,0 +1,79 @@
<style id='style'>
.ev-{{id}} .ev-box .ev-item.share_box a {background:#4b4c4e!important;}
.ev-{{id}} .ev-box .ev-item.share_box a {background:#4b4c4e!important;}
</style>
<div base="default" class="chronosly perfil2 ch-default ch-front ch-dad8 ev-{{id}} {{size}} ">
<div class="ev-box both " style="width:23.5%;clear:none;float:left;padding:0%;">
<div class='ev-item organizer_logo' style='width:98.90510948905109%;clear:none;float:left;padding:0%;margin:0%;'>
<div class='ev-data organizer_logo'>
<span class='ch-organizer-{{organizer_id | id 0}}'>{{organizer_image | id 0 }}</span>
</div>
<div class='ch-clear'></div>
</div>
<div class="ch-clear"></div>
</div>
<div class="ev-box both " style="width:75.02153316106805%;float:right;clear:none;color:#ffffff;background-color:#4b4c4e;padding:0%;padding-left:2%;">
<div class='ev-item organizer_name' style='width:98.97260273972603%;clear:none;float:left;font-size:20px;line-height:24px;text-transform:uppercase;'>
<div class='ev-data organizer_name'>
<span class='ch-organizer-{{organizer_id | id 0}}'>{{organizer_name | id 0 | filter the_title}}</span>
</div>
<div class='ch-clear'></div>
</div>
<div class="ch-clear"></div>
</div>
<div class="ev-box both " style="width:75%;float:right;clear:none;color:#4b4c4e;background-color:#f1f2f2;padding:2%;">
<div class='ev-item organizer_description' style='width:97.64150943396226%;clear:none;float:left;'>
<div class='ev-data organizer_description'>
{{organizer_description | id 0 | filter the_content | shorten_text }}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item organizer_email' style='width:99.02912621359224%;clear:none;float:left;'>
<div class='ev-data organizer_email'>
{{organizer_email | id 0 | text_before Mail: }}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item organizer_phone' style='width:99.02912621359224%;clear:none;float:left;'>
<div class='ev-data organizer_phone'>
{{organizer_phone | id 0 | text_before Phone: }}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item organizer_web' style='width:98.94366197183099%;clear:none;float:left;'>
<div class='ev-data organizer_web'>
{{organizer_web | id 0 | text_before Web: }}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item share_box' style='color:#F1F2F2;'>
<div class='ev-data share_box'>
{{share_box | share_fb | share_tw | share_in | share_go | share_pi | share_ics }}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item events_list' style=''>
<div class='ev-data events_list'>
{{event_list}}
</div>
<div class='ch-clear'></div>
</div>
<div class="ch-clear"></div>
</div>
<div style="clear:both;"></div>
</div>

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,79 @@
<style id='style'>
.ev-{{id}} .ev-box .ev-item.share_box a {background:#4b4c4e!important;}
.ev-{{id}} .ev-box .ev-item.share_box a {background:#4b4c4e!important;}
</style>
<div base="default" class="chronosly perfil2 ch-default ch-front ch-dad8 box-featured ev-{{id}} {{size}} ">
<div class="ev-box both " style="width:23.5%;clear:none;float:left;padding:0%;">
<div class='ev-item organizer_logo' style='width:98.90510948905109%;clear:none;float:left;padding:0%;margin:0%;'>
<div class='ev-data organizer_logo'>
<span class='ch-organizer-{{organizer_id | id 0}}'>{{organizer_image | id 0 }}</span>
</div>
<div class='ch-clear'></div>
</div>
<div class="ch-clear"></div>
</div>
<div class="ev-box both " style="width:75.02153316106805%;float:right;clear:none;color:#ffffff;background-color:#4b4c4e;padding:0%;padding-left:2%;">
<div class='ev-item organizer_name' style='width:98.97260273972603%;clear:none;float:left;font-size:20px;line-height:24px;text-transform:uppercase;'>
<div class='ev-data organizer_name'>
<span class='ch-organizer-{{organizer_id | id 0}}'>{{organizer_name | id 0 | filter the_title}}</span>
</div>
<div class='ch-clear'></div>
</div>
<div class="ch-clear"></div>
</div>
<div class="ev-box both " style="width:75%;float:right;clear:none;color:#4b4c4e;background-color:#f1f2f2;padding:2%;">
<div class='ev-item organizer_description' style='width:97.64150943396226%;clear:none;float:left;'>
<div class='ev-data organizer_description'>
{{organizer_description | id 0 | filter the_content | shorten_text }}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item organizer_email' style='width:99.02912621359224%;clear:none;float:left;'>
<div class='ev-data organizer_email'>
{{organizer_email | id 0 | text_before Mail: }}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item organizer_phone' style='width:99.02912621359224%;clear:none;float:left;'>
<div class='ev-data organizer_phone'>
{{organizer_phone | id 0 | text_before Phone: }}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item organizer_web' style='width:98.94366197183099%;clear:none;float:left;'>
<div class='ev-data organizer_web'>
{{organizer_web | id 0 | text_before Web: }}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item share_box' style='color:#F1F2F2;'>
<div class='ev-data share_box'>
{{share_box | share_fb | share_tw | share_in | share_go | share_pi | share_ics }}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item events_list' style=''>
<div class='ev-data events_list'>
{{event_list}}
</div>
<div class='ch-clear'></div>
</div>
<div class="ch-clear"></div>
</div>
<div style="clear:both;"></div>
</div>

View File

@@ -0,0 +1,123 @@
<style id='style'>
.ev-{{id}} .ev-box .ev-item.share_box a {background:#4b4c4e!important;}
.ev-{{id}} .ev-box.ch-featured .ev-item.share_box a {background:#dcddde!important;}
.ev-{{id}} .ev-box .ev-item.share_box a {background:#4b4c4e!important;}
.ev-{{id}} .ev-box.ch-featured .ev-item.share_box a {background:#dcddde!important;}
</style>
<div base="default" class="chronosly perfil2 ch-default ch-front ch-dad9 ev-{{id}} {{size}} ">
<div class="ev-box both " style="float:right;clear:none;height:auto;color:#ffffff;background-color:#4b4c4e;padding:0%;padding-left:2%;">
<div class='ev-item place_name' style='width:98.96907216494846%;clear:none;float:left;font-size:20px;line-height:24px;text-transform:uppercase;'>
<div class='ev-data place_name'>
<a href='{{place_link | id {{place_id | id 0}}}}' class='ch-readmore'><span class='ch-place-{{place_id | id 0}}'>{{place_name | id 0 | filter the_title}}</span></a>
</div>
<div class='ch-clear'></div>
</div>
<div class="ch-clear"></div>
</div>
<div class="ev-box normal " style="float:right;clear:none;height:auto;color:#4b4c4e;background-color:#f1f2f2;padding:2%;">
<div class='ev-item custom_link' style='width:auto;clear:none;float:none;height:auto;color:#ffffff;font-size:32px;line-height:36px;font-weight:bold;text-align:center;text-decoration:none;background-color:#dcddde;padding:0px 8px;position:absolute;bottom:0px;right:0px;'>
<div class='ev-data custom_link'>
<a href="javascript:void(null)" class="ch-readmore" onclick='ev_slide("{{id}}", this)'><span class="ch-more">{{translate | +}}</span></a>
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item place_direction' style='height:auto;width:auto;clear:none;float:left;'>
<div class='ev-data place_direction'>
<span class='ch-address-{{place_id | id 0}}'>{{place_direction | id 0 | text_after ,}}</span>
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item place_city' style='height:auto;width:auto;clear:none;float:left;padding-left:0px;'>
<div class='ev-data place_city'>
{{place_city | id 0 | text_after ,}}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item place_state' style='height:auto;width:auto;clear:none;float:left;padding-left:0px;'>
<div class='ev-data place_state'>
{{place_state | id 0 | text_after ,}}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item place_country' style='height:auto;width:auto;clear:none;float:left;padding-left:0px;'>
<div class='ev-data place_country'>
{{place_country | id 0 }}
</div>
<div class='ch-clear'></div>
</div>
<div class="ch-clear"></div>
</div>
<div class="ev-box ch-hidden " style="float:right;clear:none;height:auto;color:#4b4c4e;background-color:#f1f2f2;padding:2%;">
<div class='ev-item place_description' style=''>
<div class='ev-data place_description'>
{{place_description | id 0 | filter the_content | shorten_text }}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item share_box' style='color:#F1F2F2;'>
<div class='ev-data share_box'>
{{share_box | defaultchecked 1 | share_fb 1 | share_tw 1 | share_in 1 | share_go 1 | share_pi 1 | share_ics 1}}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item events_list' style=''>
<div class='ev-data events_list'>
{{event_list}}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item place_direction' style='clear:none;float:left;height:auto;width:auto;'>
<div class='ev-data place_direction'>
<a href='{{place_link | id {{place_id | id 0}}}}' class='ch-readmore'> <span class='ch-address-{{place_id | id 0}}'>{{place_direction | id 0 | text_after ,}}</span></a>
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item place_city' style='clear:none;float:left;height:auto;width:auto;padding-left:0px;'>
<div class='ev-data place_city'>
{{place_city | id 0 | text_after ,}}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item place_state' style='clear:none;float:left;height:auto;width:auto;padding-left:0px;'>
<div class='ev-data place_state'>
{{place_state | id 0 | text_after ,}}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item place_country' style='clear:none;float:left;height:auto;width:auto;padding-left:0px;'>
<div class='ev-data place_country'>
{{place_country | id 0 }}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item custom_link' style='width:auto;clear:none;float:none;height:auto;color:#ffffff;font-size:32px;line-height:36px;font-weight:bold;text-align:center;text-decoration:none;background-color:#dcddde;padding:0px 10px;padding-bottom:5px;line-height:32px;position:absolute;right:0px;bottom:0px;'>
<div class='ev-data custom_link'>
<a href="javascript:void(null)" class="ch-readmore" onclick='ev_slide("{{id}}", this)'><span class="ch-more">{{translate | -}}</span></a>
</div>
<div class='ch-clear'></div>
</div>
<div class="ch-clear"></div>
</div>
<div style="clear:both;"></div>
</div>

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,139 @@
<style id='style'>
.ev-{{id}} .ev-box .ev-item.share_box a {background:#4b4c4e!important;}
.ev-{{id}} .ev-box.ch-featured .ev-item.share_box a {background:#dcddde!important;}
.ev-{{id}} .ev-box .ev-item.share_box a {background:#4b4c4e!important;}
.ev-{{id}} .ev-box.ch-featured .ev-item.share_box a {background:#dcddde!important;}
</style>
<div base="default" class="chronosly perfil2 ch-default ch-front ch-dad9 box-featured ev-{{id}} {{size}} ">
<div class="ev-box both back_img ch-featured " style="height:auto;clear:none;float:left;padding:0%;">
<div class='ev-item place_gmap' style='clear:none;float:left;height:auto;padding:0%;'>
<div id='gmap{{id}}{{timestamp}}' class='ev-data place_gmap' style='width:100%; height:200px;padding:0%;'>
{{place_gmap | id 0}}
</div>
<div class='ch-clear'></div>
</div>
<div class="ch-clear"></div>
</div>
<div class="ev-box both ch-overlay ch-featured " style="width:36.875%;clear:none;float:none;color:#ffffff;background-color:#000000;">
<div class="ch-clear"></div>
</div>
<div class="ev-box both ch-info ch-featured " style="clear:none;float:none;height:auto;width:36.75%;color:#ffffff;text-transform:uppercase;padding-bottom:20px;">
<div class='ev-item place_name' style='clear:none;float:none;height:auto;width:102.42214532871972%;color:#ffffff;font-size:20px;line-height:24px;text-transform:uppercase;'>
<div class='ev-data place_name'>
<a href='{{place_link | id {{place_id | id 0}}}}' class='ch-readmore'><span class='ch-place-{{place_id | id 0}}'>{{place_name | id 0 | filter the_title}}</span></a>
</div>
<div class='ch-clear'></div>
</div>
<div class="ch-clear"></div>
</div>
<div class="ev-box normal ch-featured " style="float:left;clear:none;height:auto;width:99%;color:#ffffff;background-color:#4b4c4e;padding:0%;margin:0px;margin-top:-20px;padding:9px 2%;">
<div class='ev-item custom_link' style='width:auto;clear:none;float:none;height:auto;color:#ffffff;font-size:32px;line-height:36px;font-weight:bold;text-align:center;text-decoration:none;background-color:#dcddde;padding:0px 8px;position:absolute;top:0px;right:0px;'>
<div class='ev-data custom_link'>
<a href="javascript:void(null)" class="ch-readmore" onclick='ev_slide("{{id}}", this)'><span class="ch-more">{{translate | +}}</span></a>
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item place_direction' style='width:auto;clear:none;float:left;height:auto;'>
<div class='ev-data place_direction'>
<a href='{{place_link | id {{place_id | id 0}}}}' class='ch-readmore'> <span class='ch-address-{{place_id | id 0}}'>{{place_direction | id 0 | text_after ,}}</span></a>
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item place_city' style='width:auto;clear:none;float:left;height:auto;padding-left:0px;'>
<div class='ev-data place_city'>
{{place_city | id 0 | text_after ,}}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item place_state' style='width:auto;clear:none;float:left;height:auto;padding-left:0px;'>
<div class='ev-data place_state'>
{{place_state | id 0 | text_after ,}}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item place_country' style='width:auto;clear:none;float:left;height:auto;padding-left:0px;'>
<div class='ev-data place_country'>
{{place_country | id 0 }}
</div>
<div class='ch-clear'></div>
</div>
<div class="ch-clear"></div>
</div>
<div class="ev-box ch-hidden ch-featured " style="float:left;clear:none;height:auto;width:99%;color:#ffffff;background-color:#4b4c4e;padding:2%;margin:0px;margin-top:-20px;">
<div class='ev-item place_description' style=''>
<div class='ev-data place_description'>
{{place_description | id 0 | filter the_content | shorten_text }}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item share_box' style='color:#4b4c4e;'>
<div class='ev-data share_box'>
{{share_box | defaultchecked 1 | share_fb 1 | share_tw 1 | share_in 1 | share_go 1 | share_pi 1 | share_ics 1}}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item events_list' style=''>
<div class='ev-data events_list'>
{{event_list}}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item place_direction' style='clear:none;float:left;height:auto;width:auto;'>
<div class='ev-data place_direction'>
<span class='ch-address-{{place_id | id 0}}'>{{place_direction | id 0 | text_after ,}}</span>
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item place_city' style='clear:none;float:left;height:auto;width:auto;padding-left:0px;'>
<div class='ev-data place_city'>
{{place_city | id 0 | text_after ,}}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item place_state' style='clear:none;float:left;height:auto;width:auto;padding-left:0px;'>
<div class='ev-data place_state'>
{{place_state | id 0 | text_after ,}}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item place_country' style='clear:none;float:left;height:auto;width:auto;padding-left:0px;'>
<div class='ev-data place_country'>
{{place_country | id 0 }}
</div>
<div class='ch-clear'></div>
</div>
<div class='ev-item custom_link' style='width:auto;clear:none;float:none;height:auto;color:#ffffff;font-size:36px;line-height:40px;font-weight:bold;text-align:center;text-decoration:none;background-color:#dcddde;padding:0px 10px;padding-bottom:5px;line-height:32px;position:absolute;right:0px;bottom:0px;'>
<div class='ev-data custom_link'>
<a href="javascript:void(null)" class="ch-readmore" onclick='ev_slide("{{id}}", this)'><span class="ch-more">{{translate | -}}</span></a>
</div>
<div class='ch-clear'></div>
</div>
<div class="ch-clear"></div>
</div>
<div style="clear:both;"></div>
</div>

View File

@@ -0,0 +1 @@
{"id": "default", "name":"Default template", "version": "1.0", "addons_version":{"social_media_share":"1.4"}}

View File

@@ -0,0 +1,400 @@
### WordPress - Web publishing software
Copyright 2011-2019 by the contributors
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
This program incorporates work covered by the following copyright and
permission notices:
b2 is (c) 2001, 2002 Michel Valdrighi - m@tidakada.com -
http://tidakada.com
Wherever third party code has been used, credit has been given in the code's
comments.
b2 is released under the GPL
and
WordPress - Web publishing software
Copyright 2003-2010 by the contributors
WordPress is released under the GPL
---
### GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
### Preamble
The licenses for most software are designed to take away your freedom
to share and change it. By contrast, the GNU General Public License is
intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if
you distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on,
we want its recipients to know that what they have is not the
original, so that any problems introduced by others will not reflect
on the original authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at
all.
The precise terms and conditions for copying, distribution and
modification follow.
### TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
**0.** This License applies to any program or other work which
contains a notice placed by the copyright holder saying it may be
distributed under the terms of this General Public License. The
"Program", below, refers to any such program or work, and a "work
based on the Program" means either the Program or any derivative work
under copyright law: that is to say, a work containing the Program or
a portion of it, either verbatim or with modifications and/or
translated into another language. (Hereinafter, translation is
included without limitation in the term "modification".) Each licensee
is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the Program
(independent of having been made by running the Program). Whether that
is true depends on what the Program does.
**1.** You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a
fee.
**2.** You may modify your copy or copies of the Program or any
portion of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
**a)** You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
**b)** You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any part
thereof, to be licensed as a whole at no charge to all third parties
under the terms of this License.
**c)** If the modified program normally reads commands interactively
when run, you must cause it, when started running for such interactive
use in the most ordinary way, to print or display an announcement
including an appropriate copyright notice and a notice that there is
no warranty (or else, saying that you provide a warranty) and that
users may redistribute the program under these conditions, and telling
the user how to view a copy of this License. (Exception: if the
Program itself is interactive but does not normally print such an
announcement, your work based on the Program is not required to print
an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote
it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
**3.** You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
**a)** Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections 1
and 2 above on a medium customarily used for software interchange; or,
**b)** Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your cost of
physically performing source distribution, a complete machine-readable
copy of the corresponding source code, to be distributed under the
terms of Sections 1 and 2 above on a medium customarily used for
software interchange; or,
**c)** Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is allowed
only for noncommercial distribution and only if you received the
program in object code or executable form with such an offer, in
accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
**4.** You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt otherwise
to copy, modify, sublicense or distribute the Program is void, and
will automatically terminate your rights under this License. However,
parties who have received copies, or rights, from you under this
License will not have their licenses terminated so long as such
parties remain in full compliance.
**5.** You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
**6.** Each time you redistribute the Program (or any work based on
the Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
**7.** If, as a consequence of a court judgment or allegation of
patent infringement or for any other reason (not limited to patent
issues), conditions are imposed on you (whether by court order,
agreement or otherwise) that contradict the conditions of this
License, they do not excuse you from the conditions of this License.
If you cannot distribute so as to satisfy simultaneously your
obligations under this License and any other pertinent obligations,
then as a consequence you may not distribute the Program at all. For
example, if a patent license would not permit royalty-free
redistribution of the Program by all those who receive copies directly
or indirectly through you, then the only way you could satisfy both it
and this License would be to refrain entirely from distribution of the
Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
**8.** If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
**9.** The Free Software Foundation may publish revised and/or new
versions of the General Public License from time to time. Such new
versions will be similar in spirit to the present version, but may
differ in detail to address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and
"any later version", you have the option of following the terms and
conditions either of that version or of any later version published by
the Free Software Foundation. If the Program does not specify a
version number of this License, you may choose any version ever
published by the Free Software Foundation.
**10.** If you wish to incorporate parts of the Program into other
free programs whose distribution conditions are different, write to
the author to ask for permission. For software which is copyrighted by
the Free Software Foundation, write to the Free Software Foundation;
we sometimes make exceptions for this. Our decision will be guided by
the two goals of preserving the free status of all derivatives of our
free software and of promoting the sharing and reuse of software
generally.
**NO WARRANTY**
**11.** BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO
WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
**12.** IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
DAMAGES.
### END OF TERMS AND CONDITIONS
### How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these
terms.
To do so, attach the following notices to the program. It is safest to
attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
one line to give the program's name and an idea of what it does.
Copyright (C) yyyy name of author
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
Also add information on how to contact you by electronic and paper
mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
type `show w'. This is free software, and you are welcome
to redistribute it under certain conditions; type `show c'
for details.
The hypothetical commands \`show w' and \`show c' should show the
appropriate parts of the General Public License. Of course, the
commands you use may be called something other than \`show w' and
\`show c'; they could even be mouse-clicks or menu items--whatever
suits your program.
You should also get your employer (if you work as a programmer) or
your school, if any, to sign a "copyright disclaimer" for the program,
if necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright
interest in the program `Gnomovision'
(which makes passes at compilers) written
by James Hacker.
signature of Ty Coon, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library,
you may consider it more useful to permit linking proprietary
applications with the library. If this is what you want to do, use the
[GNU Lesser General Public
License](http://www.gnu.org/licenses/lgpl.html) instead of this
License.

View File

@@ -0,0 +1,941 @@
<?php
/**
* Classic Editor
*
* Plugin Name: Classic Editor
* Plugin URI: https://wordpress.org/plugins/classic-editor/
* Description: Enables the WordPress classic editor and the old-style Edit Post screen with TinyMCE, Meta Boxes, etc. Supports the older plugins that extend this screen.
* Version: 1.5
* Author: WordPress Contributors
* Author URI: https://github.com/WordPress/classic-editor/
* License: GPLv2 or later
* License URI: http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
* Text Domain: classic-editor
* Domain Path: /languages
*
* This program is free software; you can redistribute it and/or modify it under the terms of the GNU
* General Public License version 2, as published by the Free Software Foundation. You may NOT assume
* that you can use any other version of the GPL.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
* even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*/
if ( ! defined( 'ABSPATH' ) ) {
die( 'Invalid request.' );
}
if ( ! class_exists( 'Classic_Editor' ) ) :
class Classic_Editor {
private static $settings;
private static $supported_post_types = array();
private function __construct() {}
public static function init_actions() {
$block_editor = has_action( 'enqueue_block_assets' );
$gutenberg = function_exists( 'gutenberg_register_scripts_and_styles' );
register_activation_hook( __FILE__, array( __CLASS__, 'activate' ) );
register_uninstall_hook( __FILE__, array( __CLASS__, 'uninstall' ) );
$settings = self::get_settings();
if ( is_multisite() ) {
add_action( 'wpmu_options', array( __CLASS__, 'network_settings' ) );
add_action( 'update_wpmu_options', array( __CLASS__, 'save_network_settings' ) );
}
if ( ! $settings['hide-settings-ui'] ) {
// Add a link to the plugin's settings and/or network admin settings in the plugins list table.
add_filter( 'plugin_action_links', array( __CLASS__, 'add_settings_link' ), 10, 2 );
add_filter( 'network_admin_plugin_action_links', array( __CLASS__, 'add_settings_link' ), 10, 2 );
add_action( 'admin_init', array( __CLASS__, 'register_settings' ) );
if ( $settings['allow-users'] ) {
// User settings.
add_action( 'personal_options_update', array( __CLASS__, 'save_user_settings' ) );
add_action( 'profile_personal_options', array( __CLASS__, 'user_settings' ) );
}
}
// Always remove the "Try Gutenberg" dashboard widget. See https://core.trac.wordpress.org/ticket/44635.
remove_action( 'try_gutenberg_panel', 'wp_try_gutenberg_panel' );
if ( ! $block_editor && ! $gutenberg ) {
return;
}
if ( $settings['allow-users'] ) {
// Also used in Gutenberg.
add_filter( 'use_block_editor_for_post', array( __CLASS__, 'choose_editor' ), 100, 2 );
if ( $gutenberg ) {
// Support older Gutenberg versions.
add_filter( 'gutenberg_can_edit_post', array( __CLASS__, 'choose_editor' ), 100, 2 );
if ( $settings['editor'] === 'classic' ) {
self::remove_gutenberg_hooks( 'some' );
}
}
add_filter( 'get_edit_post_link', array( __CLASS__, 'get_edit_post_link' ) );
add_filter( 'redirect_post_location', array( __CLASS__, 'redirect_location' ) );
add_action( 'edit_form_top', array( __CLASS__, 'add_redirect_helper' ) );
add_action( 'admin_head-edit.php', array( __CLASS__, 'add_edit_php_inline_style' ) );
add_action( 'edit_form_top', array( __CLASS__, 'remember_classic_editor' ) );
add_filter( 'block_editor_settings', array( __CLASS__, 'remember_block_editor' ), 10, 2 );
// Post state (edit.php)
add_filter( 'display_post_states', array( __CLASS__, 'add_post_state' ), 10, 2 );
// Row actions (edit.php)
add_filter( 'page_row_actions', array( __CLASS__, 'add_edit_links' ), 15, 2 );
add_filter( 'post_row_actions', array( __CLASS__, 'add_edit_links' ), 15, 2 );
// Switch editors while editing a post
add_action( 'add_meta_boxes', array( __CLASS__, 'add_meta_box' ), 10, 2 );
add_action( 'enqueue_block_editor_assets', array( __CLASS__, 'enqueue_block_editor_scripts' ) );
} else {
if ( $settings['editor'] === 'classic' ) {
// Also used in Gutenberg.
// Consider disabling other Block Editor functionality.
add_filter( 'use_block_editor_for_post_type', '__return_false', 100 );
if ( $gutenberg ) {
// Support older Gutenberg versions.
add_filter( 'gutenberg_can_edit_post_type', '__return_false', 100 );
self::remove_gutenberg_hooks();
}
} else {
// `$settings['editor'] === 'block'`, nothing to do :)
return;
}
}
if ( $block_editor ) {
// Move the Privacy Page notice back under the title.
add_action( 'admin_init', array( __CLASS__, 'on_admin_init' ) );
}
if ( $gutenberg ) {
// These are handled by this plugin. All are older, not used in 5.3+.
remove_action( 'admin_init', 'gutenberg_add_edit_link_filters' );
remove_action( 'admin_print_scripts-edit.php', 'gutenberg_replace_default_add_new_button' );
remove_filter( 'redirect_post_location', 'gutenberg_redirect_to_classic_editor_when_saving_posts' );
remove_filter( 'display_post_states', 'gutenberg_add_gutenberg_post_state' );
remove_action( 'edit_form_top', 'gutenberg_remember_classic_editor_when_saving_posts' );
}
}
public static function remove_gutenberg_hooks( $remove = 'all' ) {
remove_action( 'admin_menu', 'gutenberg_menu' );
remove_action( 'admin_init', 'gutenberg_redirect_demo' );
if ( $remove !== 'all' ) {
return;
}
// Gutenberg 5.3+
remove_action( 'wp_enqueue_scripts', 'gutenberg_register_scripts_and_styles' );
remove_action( 'admin_enqueue_scripts', 'gutenberg_register_scripts_and_styles' );
remove_action( 'admin_notices', 'gutenberg_wordpress_version_notice' );
remove_action( 'rest_api_init', 'gutenberg_register_rest_widget_updater_routes' );
remove_action( 'admin_print_styles', 'gutenberg_block_editor_admin_print_styles' );
remove_action( 'admin_print_scripts', 'gutenberg_block_editor_admin_print_scripts' );
remove_action( 'admin_print_footer_scripts', 'gutenberg_block_editor_admin_print_footer_scripts' );
remove_action( 'admin_footer', 'gutenberg_block_editor_admin_footer' );
remove_action( 'admin_enqueue_scripts', 'gutenberg_widgets_init' );
remove_action( 'admin_notices', 'gutenberg_build_files_notice' );
remove_filter( 'load_script_translation_file', 'gutenberg_override_translation_file' );
remove_filter( 'block_editor_settings', 'gutenberg_extend_block_editor_styles' );
remove_filter( 'default_content', 'gutenberg_default_demo_content' );
remove_filter( 'default_title', 'gutenberg_default_demo_title' );
remove_filter( 'block_editor_settings', 'gutenberg_legacy_widget_settings' );
remove_filter( 'rest_request_after_callbacks', 'gutenberg_filter_oembed_result' );
// Previously used, compat for older Gutenberg versions.
remove_filter( 'wp_refresh_nonces', 'gutenberg_add_rest_nonce_to_heartbeat_response_headers' );
remove_filter( 'get_edit_post_link', 'gutenberg_revisions_link_to_editor' );
remove_filter( 'wp_prepare_revision_for_js', 'gutenberg_revisions_restore' );
remove_action( 'rest_api_init', 'gutenberg_register_rest_routes' );
remove_action( 'rest_api_init', 'gutenberg_add_taxonomy_visibility_field' );
remove_filter( 'registered_post_type', 'gutenberg_register_post_prepare_functions' );
remove_action( 'do_meta_boxes', 'gutenberg_meta_box_save' );
remove_action( 'submitpost_box', 'gutenberg_intercept_meta_box_render' );
remove_action( 'submitpage_box', 'gutenberg_intercept_meta_box_render' );
remove_action( 'edit_page_form', 'gutenberg_intercept_meta_box_render' );
remove_action( 'edit_form_advanced', 'gutenberg_intercept_meta_box_render' );
remove_filter( 'redirect_post_location', 'gutenberg_meta_box_save_redirect' );
remove_filter( 'filter_gutenberg_meta_boxes', 'gutenberg_filter_meta_boxes' );
remove_filter( 'body_class', 'gutenberg_add_responsive_body_class' );
remove_filter( 'admin_url', 'gutenberg_modify_add_new_button_url' ); // old
remove_action( 'admin_enqueue_scripts', 'gutenberg_check_if_classic_needs_warning_about_blocks' );
remove_filter( 'register_post_type_args', 'gutenberg_filter_post_type_labels' );
// Keep
// remove_filter( 'wp_kses_allowed_html', 'gutenberg_kses_allowedtags', 10, 2 ); // not needed in 5.0
// remove_filter( 'bulk_actions-edit-wp_block', 'gutenberg_block_bulk_actions' );
// remove_filter( 'wp_insert_post_data', 'gutenberg_remove_wpcom_markdown_support' );
// remove_filter( 'the_content', 'do_blocks', 9 );
// remove_action( 'init', 'gutenberg_register_post_types' );
// Continue to manage wpautop for posts that were edited in Gutenberg.
// remove_filter( 'wp_editor_settings', 'gutenberg_disable_editor_settings_wpautop' );
// remove_filter( 'the_content', 'gutenberg_wpautop', 8 );
}
private static function get_settings( $refresh = 'no' ) {
/**
* Can be used to override the plugin's settings. Always hides the settings UI when used (as users cannot change the settings).
*
* Has to return an associative array with two keys.
* The defaults are:
* 'editor' => 'classic', // Accepted values: 'classic', 'block'.
* 'allow-users' => false,
*
* @param boolean To override the settings return an array with the above keys.
*/
$settings = apply_filters( 'classic_editor_plugin_settings', false );
if ( is_array( $settings ) ) {
return array(
'editor' => ( isset( $settings['editor'] ) && $settings['editor'] === 'block' ) ? 'block' : 'classic',
'allow-users' => ! empty( $settings['allow-users'] ),
'hide-settings-ui' => true,
);
}
if ( ! empty( self::$settings ) && $refresh === 'no' ) {
return self::$settings;
}
if ( is_multisite() ) {
$defaults = array(
'editor' => get_network_option( null, 'classic-editor-replace' ) === 'block' ? 'block' : 'classic',
'allow-users' => false,
);
/**
* Filters the default network options.
*
* @param array $defaults The default options array. See `classic_editor_plugin_settings` for supported keys and values.
*/
$defaults = apply_filters( 'classic_editor_network_default_settings', $defaults );
if ( get_network_option( null, 'classic-editor-allow-sites' ) !== 'allow' ) {
// Per-site settings are disabled. Return default network options nad hide the settings UI.
$defaults['hide-settings-ui'] = true;
return $defaults;
}
// Override with the site options.
$editor_option = get_option( 'classic-editor-replace' );
$allow_users_option = get_option( 'classic-editor-allow-users' );
if ( $editor_option ) {
$defaults['editor'] = $editor_option;
}
if ( $allow_users_option ) {
$defaults['allow-users'] = ( $allow_users_option === 'allow' );
}
$editor = ( isset( $defaults['editor'] ) && $defaults['editor'] === 'block' ) ? 'block' : 'classic';
$allow_users = ! empty( $defaults['allow-users'] );
} else {
$allow_users = ( get_option( 'classic-editor-allow-users' ) === 'allow' );
$option = get_option( 'classic-editor-replace' );
// Normalize old options.
if ( $option === 'block' || $option === 'no-replace' ) {
$editor = 'block';
} else {
// empty( $option ) || $option === 'classic' || $option === 'replace'.
$editor = 'classic';
}
}
// Override the defaults with the user options.
if ( ( ! isset( $GLOBALS['pagenow'] ) || $GLOBALS['pagenow'] !== 'options-writing.php' ) && $allow_users ) {
$user_options = get_user_option( 'classic-editor-settings' );
if ( $user_options === 'block' || $user_options === 'classic' ) {
$editor = $user_options;
}
}
self::$settings = array(
'editor' => $editor,
'hide-settings-ui' => false,
'allow-users' => $allow_users,
);
return self::$settings;
}
private static function is_classic( $post_id = 0 ) {
if ( ! $post_id ) {
$post_id = self::get_edited_post_id();
}
if ( $post_id ) {
$settings = self::get_settings();
if ( $settings['allow-users'] && ! isset( $_GET['classic-editor__forget'] ) ) {
$which = get_post_meta( $post_id, 'classic-editor-remember', true );
if ( $which ) {
// The editor choice will be "remembered" when the post is opened in either Classic or Block editor.
if ( 'classic-editor' === $which ) {
return true;
} elseif ( 'block-editor' === $which ) {
return false;
}
}
return ( ! self::has_blocks( $post_id ) );
}
}
if ( isset( $_GET['classic-editor'] ) ) {
return true;
}
return false;
}
/**
* Get the edited post ID (early) when loading the Edit Post screen.
*/
private static function get_edited_post_id() {
if (
! empty( $_GET['post'] ) &&
! empty( $_GET['action'] ) &&
$_GET['action'] === 'edit' &&
! empty( $GLOBALS['pagenow'] ) &&
$GLOBALS['pagenow'] === 'post.php'
) {
return (int) $_GET['post']; // post_ID
}
return 0;
}
public static function register_settings() {
// Add an option to Settings -> Writing
register_setting( 'writing', 'classic-editor-replace', array(
'sanitize_callback' => array( __CLASS__, 'validate_option_editor' ),
) );
register_setting( 'writing', 'classic-editor-allow-users', array(
'sanitize_callback' => array( __CLASS__, 'validate_option_allow_users' ),
) );
add_option_whitelist( array(
'writing' => array( 'classic-editor-replace', 'classic-editor-allow-users' ),
) );
$heading_1 = __( 'Default editor for all users', 'classic-editor' );
$heading_2 = __( 'Allow users to switch editors', 'classic-editor' );
add_settings_field( 'classic-editor-1', $heading_1, array( __CLASS__, 'settings_1' ), 'writing' );
add_settings_field( 'classic-editor-2', $heading_2, array( __CLASS__, 'settings_2' ), 'writing' );
}
public static function save_user_settings( $user_id ) {
if (
isset( $_POST['classic-editor-user-settings'] ) &&
isset( $_POST['classic-editor-replace'] ) &&
wp_verify_nonce( $_POST['classic-editor-user-settings'], 'allow-user-settings' )
) {
$user_id = (int) $user_id;
if ( $user_id !== get_current_user_id() && ! current_user_can( 'edit_user', $user_id ) ) {
return;
}
$editor = self::validate_option_editor( $_POST['classic-editor-replace'] );
update_user_option( $user_id, 'classic-editor-settings', $editor );
}
}
/**
* Validate
*/
public static function validate_option_editor( $value ) {
if ( $value === 'block' ) {
return 'block';
}
return 'classic';
}
public static function validate_option_allow_users( $value ) {
if ( $value === 'allow' ) {
return 'allow';
}
return 'disallow';
}
public static function settings_1() {
$settings = self::get_settings( 'refresh' );
?>
<div class="classic-editor-options">
<p>
<input type="radio" name="classic-editor-replace" id="classic-editor-classic" value="classic"<?php if ( $settings['editor'] === 'classic' ) echo ' checked'; ?> />
<label for="classic-editor-classic"><?php _ex( 'Classic Editor', 'Editor Name', 'classic-editor' ); ?></label>
</p>
<p>
<input type="radio" name="classic-editor-replace" id="classic-editor-block" value="block"<?php if ( $settings['editor'] !== 'classic' ) echo ' checked'; ?> />
<label for="classic-editor-block"><?php _ex( 'Block Editor', 'Editor Name', 'classic-editor' ); ?></label>
</p>
</div>
<script>
jQuery( 'document' ).ready( function( $ ) {
if ( window.location.hash === '#classic-editor-options' ) {
$( '.classic-editor-options' ).closest( 'td' ).addClass( 'highlight' );
}
} );
</script>
<?php
}
public static function settings_2() {
$settings = self::get_settings( 'refresh' );
?>
<div class="classic-editor-options">
<p>
<input type="radio" name="classic-editor-allow-users" id="classic-editor-allow" value="allow"<?php if ( $settings['allow-users'] ) echo ' checked'; ?> />
<label for="classic-editor-allow"><?php _e( 'Yes', 'classic-editor' ); ?></label>
</p>
<p>
<input type="radio" name="classic-editor-allow-users" id="classic-editor-disallow" value="disallow"<?php if ( ! $settings['allow-users'] ) echo ' checked'; ?> />
<label for="classic-editor-disallow"><?php _e( 'No', 'classic-editor' ); ?></label>
</p>
</div>
<?php
}
/**
* Shown on the Profile page when allowed by admin.
*/
public static function user_settings() {
global $user_can_edit;
$settings = self::get_settings( 'update' );
if (
! defined( 'IS_PROFILE_PAGE' ) ||
! IS_PROFILE_PAGE ||
! $user_can_edit ||
! $settings['allow-users']
) {
return;
}
?>
<table class="form-table">
<tr class="classic-editor-user-options">
<th scope="row"><?php _e( 'Default Editor', 'classic-editor' ); ?></th>
<td>
<?php wp_nonce_field( 'allow-user-settings', 'classic-editor-user-settings' ); ?>
<?php self::settings_1(); ?>
</td>
</tr>
</table>
<script>jQuery( 'tr.user-rich-editing-wrap' ).before( jQuery( 'tr.classic-editor-user-options' ) );</script>
<?php
}
public static function network_settings() {
$editor = get_network_option( null, 'classic-editor-replace' );
$is_checked = ( get_network_option( null, 'classic-editor-allow-sites' ) === 'allow' );
?>
<h2 id="classic-editor-options"><?php _e( 'Editor Settings', 'classic-editor' ); ?></h2>
<table class="form-table">
<?php wp_nonce_field( 'allow-site-admin-settings', 'classic-editor-network-settings' ); ?>
<tr>
<th scope="row"><?php _e( 'Default editor for all sites', 'classic-editor' ); ?></th>
<td>
<p>
<input type="radio" name="classic-editor-replace" id="classic-editor-classic" value="classic"<?php if ( $editor !== 'block' ) echo ' checked'; ?> />
<label for="classic-editor-classic"><?php _ex( 'Classic Editor', 'Editor Name', 'classic-editor' ); ?></label>
</p>
<p>
<input type="radio" name="classic-editor-replace" id="classic-editor-block" value="block"<?php if ( $editor === 'block' ) echo ' checked'; ?> />
<label for="classic-editor-block"><?php _ex( 'Block Editor', 'Editor Name', 'classic-editor' ); ?></label>
</p>
</td>
</tr>
<tr>
<th scope="row"><?php _e( 'Change settings', 'classic-editor' ); ?></th>
<td>
<input type="checkbox" name="classic-editor-allow-sites" id="classic-editor-allow-sites" value="allow"<?php if ( $is_checked ) echo ' checked'; ?>>
<label for="classic-editor-allow-sites"><?php _e( 'Allow site admins to change settings', 'classic-editor' ); ?></label>
<p class="description"><?php _e( 'By default the Block Editor is replaced with the Classic Editor and users cannot switch editors.', 'classic-editor' ); ?></p>
</td>
</tr>
</table>
<?php
}
public static function save_network_settings() {
if (
isset( $_POST['classic-editor-network-settings'] ) &&
current_user_can( 'manage_network_options' ) &&
wp_verify_nonce( $_POST['classic-editor-network-settings'], 'allow-site-admin-settings' )
) {
if ( isset( $_POST['classic-editor-replace'] ) && $_POST['classic-editor-replace'] === 'block' ) {
update_network_option( null, 'classic-editor-replace', 'block' );
} else {
update_network_option( null, 'classic-editor-replace', 'classic' );
}
if ( isset( $_POST['classic-editor-allow-sites'] ) && $_POST['classic-editor-allow-sites'] === 'allow' ) {
update_network_option( null, 'classic-editor-allow-sites', 'allow' );
} else {
update_network_option( null, 'classic-editor-allow-sites', 'disallow' );
}
}
}
/**
* Add a hidden field in edit-form-advanced.php
* to help redirect back to the Classic Editor on saving.
*/
public static function add_redirect_helper() {
?>
<input type="hidden" name="classic-editor" value="" />
<?php
}
/**
* Remember when the Classic Editor was used to edit a post.
*/
public static function remember_classic_editor( $post ) {
$post_type = get_post_type( $post );
if ( $post_type && post_type_supports( $post_type, 'editor' ) ) {
self::remember( $post->ID, 'classic-editor' );
}
}
/**
* Remember when the Block Editor was used to edit a post.
*/
public static function remember_block_editor( $editor_settings, $post ) {
$post_type = get_post_type( $post );
if ( $post_type && self::can_edit_post_type( $post_type ) ) {
self::remember( $post->ID, 'block-editor' );
}
return $editor_settings;
}
private static function remember( $post_id, $editor ) {
if ( get_post_meta( $post_id, 'classic-editor-remember', true ) !== $editor ) {
update_post_meta( $post_id, 'classic-editor-remember', $editor );
}
}
/**
* Choose which editor to use for a post.
*
* Passes through `$which_editor` for Block Editor (it's sets to `true` but may be changed by another plugin).
*
* @uses `use_block_editor_for_post` filter.
*
* @param boolean $use_block_editor True for Block Editor, false for Classic Editor.
* @param WP_Post $post The post being edited.
* @return boolean True for Block Editor, false for Classic Editor.
*/
public static function choose_editor( $use_block_editor, $post ) {
$settings = self::get_settings();
$editors = self::get_enabled_editors_for_post( $post );
// If no editor is supported, pass through `$use_block_editor`.
if ( ! $editors['block_editor'] && ! $editors['classic_editor'] ) {
return $use_block_editor;
}
// Open the default editor when no $post and for "Add New" links,
// or the alternate editor when the user is switching editors.
if ( empty( $post->ID ) || $post->post_status === 'auto-draft' ) {
if (
( $settings['editor'] === 'classic' && ! isset( $_GET['classic-editor__forget'] ) ) || // Add New
( isset( $_GET['classic-editor'] ) && isset( $_GET['classic-editor__forget'] ) ) // Switch to Classic Editor when no draft post.
) {
$use_block_editor = false;
}
} elseif ( self::is_classic( $post->ID ) ) {
$use_block_editor = false;
}
// Enforce the editor if set by plugins.
if ( $use_block_editor && ! $editors['block_editor'] ) {
$use_block_editor = false;
} elseif ( ! $use_block_editor && ! $editors['classic_editor'] && $editors['block_editor'] ) {
$use_block_editor = true;
}
return $use_block_editor;
}
/**
* Keep the `classic-editor` query arg through redirects when saving posts.
*/
public static function redirect_location( $location ) {
if (
isset( $_REQUEST['classic-editor'] ) ||
( isset( $_POST['_wp_http_referer'] ) && strpos( $_POST['_wp_http_referer'], '&classic-editor' ) !== false )
) {
$location = add_query_arg( 'classic-editor', '', $location );
}
return $location;
}
/**
* Keep the `classic-editor` query arg when looking at revisions.
*/
public static function get_edit_post_link( $url ) {
$settings = self::get_settings();
if ( isset( $_REQUEST['classic-editor'] ) || $settings['editor'] === 'classic' ) {
$url = add_query_arg( 'classic-editor', '', $url );
}
return $url;
}
public static function add_meta_box( $post_type, $post ) {
$editors = self::get_enabled_editors_for_post( $post );
if ( ! $editors['block_editor'] || ! $editors['classic_editor'] ) {
// Editors cannot be switched.
return;
}
$id = 'classic-editor-switch-editor';
$title = __( 'Editor', 'classic-editor' );
$callback = array( __CLASS__, 'do_meta_box' );
$args = array(
'__back_compat_meta_box' => true,
);
add_meta_box( $id, $title, $callback, null, 'side', 'default', $args );
}
public static function do_meta_box( $post ) {
$edit_url = get_edit_post_link( $post->ID, 'raw' );
// Switching to Block Editor.
$edit_url = remove_query_arg( 'classic-editor', $edit_url );
// Forget the previous value when going to a specific editor.
$edit_url = add_query_arg( 'classic-editor__forget', '', $edit_url );
?>
<p style="margin: 1em 0;">
<a href="<?php echo esc_url( $edit_url ); ?>"><?php _e( 'Switch to Block Editor', 'classic-editor' ); ?></a>
</p>
<?php
}
public static function enqueue_block_editor_scripts() {
$editors = self::get_enabled_editors_for_post( $GLOBALS['post'] );
if ( ! $editors['classic_editor'] ) {
// Editor cannot be switched.
return;
}
wp_enqueue_script(
'classic-editor-plugin',
plugins_url( 'js/block-editor-plugin.js', __FILE__ ),
array( 'wp-element', 'wp-components', 'lodash' ),
'1.4',
true
);
wp_localize_script(
'classic-editor-plugin',
'classicEditorPluginL10n',
array( 'linkText' => __( 'Switch to Classic Editor', 'classic-editor' ) )
);
}
/**
* Add a link to the settings on the Plugins screen.
*/
public static function add_settings_link( $links, $file ) {
$settings = self::get_settings();
if ( $file === 'classic-editor/classic-editor.php' && ! $settings['hide-settings-ui'] && current_user_can( 'manage_options' ) ) {
if ( current_filter() === 'plugin_action_links' ) {
$url = admin_url( 'options-writing.php#classic-editor-options' );
} else {
$url = admin_url( '/network/settings.php#classic-editor-options' );
}
// Prevent warnings in PHP 7.0+ when a plugin uses this filter incorrectly.
$links = (array) $links;
$links[] = sprintf( '<a href="%s">%s</a>', $url, __( 'Settings', 'classic-editor' ) );
}
return $links;
}
private static function can_edit_post_type( $post_type ) {
$can_edit = false;
if ( function_exists( 'gutenberg_can_edit_post_type' ) ) {
$can_edit = gutenberg_can_edit_post_type( $post_type );
} elseif ( function_exists( 'use_block_editor_for_post_type' ) ) {
$can_edit = use_block_editor_for_post_type( $post_type );
}
return $can_edit;
}
/**
* Checks which editors are enabled for the post type.
*
* @param string $post_type The post type.
* @return array Associative array of the editors and whether they are enabled for the post type.
*/
private static function get_enabled_editors_for_post_type( $post_type ) {
if ( isset( self::$supported_post_types[ $post_type ] ) ) {
return self::$supported_post_types[ $post_type ];
}
$classic_editor = post_type_supports( $post_type, 'editor' );
$block_editor = self::can_edit_post_type( $post_type );
$editors = array(
'classic_editor' => $classic_editor,
'block_editor' => $block_editor,
);
/**
* Filters the editors that are enabled for the post type.
*
* @param array $editors Associative array of the editors and whether they are enabled for the post type.
* @param string $post_type The post type.
*/
$editors = apply_filters( 'classic_editor_enabled_editors_for_post_type', $editors, $post_type );
self::$supported_post_types[ $post_type ] = $editors;
return $editors;
}
/**
* Checks which editors are enabled for the post.
*
* @param WP_Post $post The post object.
* @return array Associative array of the editors and whether they are enabled for the post.
*/
private static function get_enabled_editors_for_post( $post ) {
$post_type = get_post_type( $post );
if ( ! $post_type ) {
return array(
'classic_editor' => false,
'block_editor' => false,
);
}
$editors = self::get_enabled_editors_for_post_type( $post_type );
/**
* Filters the editors that are enabled for the post.
*
* @param array $editors Associative array of the editors and whether they are enabled for the post.
* @param WP_Post $post The post object.
*/
return apply_filters( 'classic_editor_enabled_editors_for_post', $editors, $post );
}
/**
* Adds links to the post/page screens to edit any post or page in
* the Classic Editor or Block Editor.
*
* @param array $actions Post actions.
* @param WP_Post $post Edited post.
* @return array Updated post actions.
*/
public static function add_edit_links( $actions, $post ) {
// This is in Gutenberg, don't duplicate it.
if ( array_key_exists( 'classic', $actions ) ) {
unset( $actions['classic'] );
}
if ( ! array_key_exists( 'edit', $actions ) ) {
return $actions;
}
$edit_url = get_edit_post_link( $post->ID, 'raw' );
if ( ! $edit_url ) {
return $actions;
}
$editors = self::get_enabled_editors_for_post( $post );
// Do not show the links if only one editor is available.
if ( ! $editors['classic_editor'] || ! $editors['block_editor'] ) {
return $actions;
}
// Forget the previous value when going to a specific editor.
$edit_url = add_query_arg( 'classic-editor__forget', '', $edit_url );
// Build the edit actions. See also: WP_Posts_List_Table::handle_row_actions().
$title = _draft_or_post_title( $post->ID );
// Link to the Block Editor.
$url = remove_query_arg( 'classic-editor', $edit_url );
$text = _x( 'Edit (Block Editor)', 'Editor Name', 'classic-editor' );
/* translators: %s: post title */
$label = sprintf( __( 'Edit &#8220;%s&#8221; in the Block Editor', 'classic-editor' ), $title );
$edit_block = sprintf( '<a href="%s" aria-label="%s">%s</a>', esc_url( $url ), esc_attr( $label ), $text );
// Link to the Classic Editor.
$url = add_query_arg( 'classic-editor', '', $edit_url );
$text = _x( 'Edit (Classic Editor)', 'Editor Name', 'classic-editor' );
/* translators: %s: post title */
$label = sprintf( __( 'Edit &#8220;%s&#8221; in the Classic Editor', 'classic-editor' ), $title );
$edit_classic = sprintf( '<a href="%s" aria-label="%s">%s</a>', esc_url( $url ), esc_attr( $label ), $text );
$edit_actions = array(
'classic-editor-block' => $edit_block,
'classic-editor-classic' => $edit_classic,
);
// Insert the new Edit actions instead of the Edit action.
$edit_offset = array_search( 'edit', array_keys( $actions ), true );
array_splice( $actions, $edit_offset, 1, $edit_actions );
return $actions;
}
/**
* Show the editor that will be used in a "post state" in the Posts list table.
*/
public static function add_post_state( $post_states, $post ) {
if ( get_post_status( $post ) === 'trash' ) {
return $post_states;
}
$editors = self::get_enabled_editors_for_post( $post );
if ( ! $editors['classic_editor'] && ! $editors['block_editor'] ) {
return $post_states;
} elseif ( $editors['classic_editor'] && ! $editors['block_editor'] ) {
// Forced to Classic Editor.
$state = '<span class="classic-editor-forced-state">' . _x( 'Classic Editor', 'Editor Name', 'classic-editor' ) . '</span>';
} elseif ( ! $editors['classic_editor'] && $editors['block_editor'] ) {
// Forced to Block Editor.
$state = '<span class="classic-editor-forced-state">' . _x( 'Block Editor', 'Editor Name', 'classic-editor' ) . '</span>';
} else {
$last_editor = get_post_meta( $post->ID, 'classic-editor-remember', true );
if ( $last_editor ) {
$is_classic = ( $last_editor === 'classic-editor' );
} elseif ( ! empty( $post->post_content ) ) {
$is_classic = ! self::has_blocks( $post->post_content );
} else {
$settings = self::get_settings();
$is_classic = ( $settings['editor'] === 'classic' );
}
$state = $is_classic ? _x( 'Classic Editor', 'Editor Name', 'classic-editor' ) : _x( 'Block Editor', 'Editor Name', 'classic-editor' );
}
// Fix PHP 7+ warnings if another plugin returns unexpected type.
$post_states = (array) $post_states;
$post_states['classic-editor-plugin'] = $state;
return $post_states;
}
public static function add_edit_php_inline_style() {
?>
<style>
.classic-editor-forced-state {
font-style: italic;
font-weight: 400;
color: #72777c;
font-size: small;
}
</style>
<?php
}
public static function on_admin_init() {
global $pagenow;
if ( $pagenow !== 'post.php' ) {
return;
}
$settings = self::get_settings();
$post_id = self::get_edited_post_id();
if ( $post_id && ( $settings['editor'] === 'classic' || self::is_classic( $post_id ) ) ) {
// Move the Privacy Policy help notice back under the title field.
remove_action( 'admin_notices', array( 'WP_Privacy_Policy_Content', 'notice' ) );
add_action( 'edit_form_after_title', array( 'WP_Privacy_Policy_Content', 'notice' ) );
}
}
// Need to support WP < 5.0
private static function has_blocks( $post = null ) {
if ( ! is_string( $post ) ) {
$wp_post = get_post( $post );
if ( $wp_post instanceof WP_Post ) {
$post = $wp_post->post_content;
}
}
return false !== strpos( (string) $post, '<!-- wp:' );
}
/**
* Set defaults on activation.
*/
public static function activate() {
if ( is_multisite() ) {
add_network_option( null, 'classic-editor-replace', 'classic' );
add_network_option( null, 'classic-editor-allow-sites', 'disallow' );
}
add_option( 'classic-editor-replace', 'classic' );
add_option( 'classic-editor-allow-users', 'disallow' );
}
/**
* Delete the options on uninstall.
*/
public static function uninstall() {
if ( is_multisite() ) {
delete_network_option( null, 'classic-editor-replace' );
delete_network_option( null, 'classic-editor-allow-sites' );
}
delete_option( 'classic-editor-replace' );
delete_option( 'classic-editor-allow-users' );
}
}
add_action( 'plugins_loaded', array( 'Classic_Editor', 'init_actions' ) );
endif;

View File

@@ -0,0 +1,23 @@
( function( wp ) {
if ( ! wp ) {
return;
}
wp.plugins.registerPlugin( 'classic-editor-plugin', {
render: function() {
var createElement = wp.element.createElement;
var PluginMoreMenuItem = wp.editPost.PluginMoreMenuItem;
var url = wp.url.addQueryArgs( document.location.href, { 'classic-editor': '', 'classic-editor__forget': '' } );
var linkText = lodash.get( window, [ 'classicEditorPluginL10n', 'linkText' ] ) || 'Switch to Classic Editor';
return createElement(
PluginMoreMenuItem,
{
icon: 'editor-kitchensink',
href: url,
},
linkText
);
},
} );
} )( window.wp );

View File

@@ -0,0 +1,119 @@
=== Classic Editor ===
Contributors: wordpressdotorg, azaozz, melchoyce, chanthaboune, alexislloyd, pento, youknowriad, desrosj, luciano-croce
Tags: gutenberg, disable, disable gutenberg, editor, classic editor, block editor
Requires at least: 4.9
Tested up to: 5.2
Stable tag: 1.4
Requires PHP: 5.2.4
License: GPLv2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Enables the previous "classic" editor and the old-style Edit Post screen with TinyMCE, Meta Boxes, etc. Supports all plugins that extend this screen.
== Description ==
Classic Editor is an official plugin maintained by the WordPress team that restores the previous ("classic") WordPress editor and the "Edit Post" screen. It makes it possible to use plugins that extend that screen, add old-style meta boxes, or otherwise depend on the previous editor.
Classic Editor is an official WordPress plugin, and will be fully supported and maintained until at least 2022, or as long as is necessary.
At a glance, this plugin adds the following:
* Administrators can select the default editor for all users.
* Administrators can allow users to change their default editor.
* When allowed, the users can choose which editor to use for each post.
* Each post opens in the last editor used regardless of who edited it last. This is important for maintaining a consistent experience when editing content.
In addition, the Classic Editor plugin includes several filters that let other plugins control the settings, and the editor choice per post and per post type.
By default, this plugin hides all functionality available in the new Block Editor ("Gutenberg").
== Changelog ==
= 1.5 =
* Updated for WordPress 5.2 and Gutenberg 5.3+.
* Enhanced and fixed the "open posts in the last editor used to edit them" logic.
* Fixed adding post state so it can easily be accessed from other plugins.
= 1.4 =
* On network installations removed the restriction for only network activation.
* Added support for network administrators to choose the default network-wide editor.
* Fixed the settings link in the warning on network About screen.
* Properly added the "Switch to Classic Editor" menu item to the Block Editor menu.
= 1.3 =
* Fixed removal of the "Try Gutenberg" dashboard widget.
* Fixed condition for displaying of the after upgrade notice on the "What's New" screen. Shown when the Classic Editor is selected and users cannot switch editors.
= 1.2 =
* Fixed switching editors from the Add New (post) screen before a draft post is saved.
* Fixed typo that was appending the edit URL to the `classic-editor` query var.
* Changed detecting of WordPress 5.0 to not use version check. Fixes a bug when testing 5.1-alpha.
* Changed the default value of the option to allow users to switch editors to false.
* Added disabling of the Gutenberg plugin and lowered the required WordPress version to 4.9.
* Added `classic_editor_network_default_settings` filter.
= 1.1 =
Fixed a bug where it may attempt to load the Block Editor for post types that do not support editor when users are allowed to switch editors.
= 1.0 =
* Updated for WordPress 5.0.
* Changed all "Gutenberg" names/references to "Block Editor".
* Refreshed the settings UI.
* Removed disabling of the Gutenberg plugin. This was added for testing in WordPress 4.9. Users who want to continue following the development of Gutenberg in WordPress 5.0 and beyond will not need another plugin to disable it.
* Added support for per-user settings of default editor.
* Added support for admins to set the default editor for the site.
* Added support for admins to allow users to change their default editor.
* Added support for network admins to prevent site admins from changing the default settings.
* Added support to store the last editor used for each post and open it next time. Enabled when users can choose default editor.
* Added "post editor state" in the listing of posts on the Posts screen. Shows the editor that will be opened for the post. Enabled when users can choose default editor.
* Added `classic_editor_enabled_editors_for_post` and `classic_editor_enabled_editors_for_post_type` filters. Can be used by other plugins to control or override the editor used for a particular post of post type.
* Added `classic_editor_plugin_settings` filter. Can be used by other plugins to override the settings and disable the settings UI.
= 0.5 =
* Updated for Gutenberg 4.1 and WordPress 5.0-beta1.
* Removed some functionality that now exists in Gutenberg.
* Fixed redirecting back to the Classic Editor after looking at post revisions.
= 0.4 =
* Fixed removing of the "Try Gutenberg" call-out when the Gutenberg plugin is not activated.
* Fixed to always show the settings and the settings link in the plugins list table.
* Updated the readme text.
= 0.3 =
* Updated the option from a checkbox to couple of radio buttons, seems clearer. Thanks to @designsimply for the label text suggestions.
* Some general updates and cleanup.
= 0.2 =
* Update for Gutenberg 1.9.
* Remove warning and automatic deactivation when Gutenberg is not active.
= 0.1 =
Initial release.
== Frequently Asked Questions ==
= Default settings =
When activated this plugin will restore the previous ("classic") WordPress editor and hide the new Block Editor ("Gutenberg").
These settings can be changed at the Settings => Writing screen.
= Default settings for network installation =
There are two options:
* When network-activated this plugin will set the Classic Editor as default and prevent site administrators and users from changing editors.
The settings can be changed and default network-wide editor can be selected on the Network Settings screen.
* When not network-activated each site administrator will be able to activate the plugin and choose options for their users.
= Cannot find the "Switch to Classic Editor" link =
It is in the main Block Editor menu, see this [screenshot](https://ps.w.org/classic-editor/assets/screenshot-7.png?rev=2023480).
== Screenshots ==
1. Admin settings on the Settings -> Writing screen.
2. User settings on the Profile screen. Visible when the users are allowed to switch editors.
3. "Action links" to choose alternative editor. Visible when the users are allowed to switch editors.
4. Link to switch to the Block Editor while editing a post in the Classic Editor. Visible when the users are allowed to switch editors.
5. Link to switch to the Classic Editor while editing a post in the Block Editor. Visible when the users are allowed to switch editors.
6. Network settings to select the default editor for the network and allow site admins to change it.
7. The "Switch to Classic Editor" link.

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,112 @@
/* Cookie Notice settings */
.df-credits {
float: right;
width: 280px;
background: #fff;
margin: 20px -300px 20px 20px;
position: relative;
box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.05);
}
.df-credits .inner {
padding-left: 10px;
padding-right: 10px;
}
.df-credits h3 {
font-size: 14px;
line-height: 1.4;
margin: 0;
padding: 8px 12px;
border-bottom: 1px solid #eee;
}
.df-credits .df-link {
font-family: Georgia, "Times New Roman", "Bitstream Charter", Times, serif;
font-style: italic;
padding-bottom: 10px;
margin: 0;
}
.df-credits .df-link a {
vertical-align: middle;
padding: 5px 0 0 4px;
}
.df-promo h4 {
margin-bottom: 0;
}
.cookie-notice-settings .df-credits form {
min-width: 260px;
margin-bottom: 1em;
}
.cookie-notice-settings .df-credits form input {
margin: 0;
padding: 0;
}
.cookie-notice-settings {
margin-right: 300px;
}
.cookie-notice-settings hr, .df-credits hr {
border: solid #eee;
border-width: 1px 0 0;
clear: both;
height: 0;
}
.cookie-notice-settings form {
float: left;
min-width: 463px;
width: 100%;
}
.cookie-notice-settings .ui-button {
margin-bottom: 5px;
}
.cookie-notice-settings .description {
font-size: 13px;
margin-bottom: 8px;
}
#cn_colors label {
min-width: 10em;
display: inline-block;
}
#cn_colors div {
vertical-align: middle;
}
#cn_refuse_code .nav-tab-wrapper {
padding-top: 0;
}
#cn_refuse_code .refuse-code-tab {
display: none;
}
#cn_refuse_code .refuse-code-tab.active {
display: block;
}
#cn_refuse_code .refuse-code-tab .description {
margin-top: 10px;
}
/* All Mobile Sizes (devices and browser) */
@media only screen and (max-width: 959px) {
.df-credits {
width: 100%;
float: none;
margin: 20px 0;
}
.cookie-notice-settings {
margin-right: 0;
}
}

View File

@@ -0,0 +1 @@
.df-credits{float:right;width:280px;background:#fff;margin:20px -300px 20px 20px;position:relative;box-shadow:0 0 0 1px rgba(0,0,0,0.05)}.df-credits .inner{padding-left:10px;padding-right:10px}.df-credits h3{font-size:14px;line-height:1.4;margin:0;padding:8px 12px;border-bottom:1px solid #eee}.df-credits .df-link{font-family:Georgia,"Times New Roman","Bitstream Charter",Times,serif;font-style:italic;padding-bottom:10px;margin:0}.df-credits .df-link a{vertical-align:middle;padding:5px 0 0 4px}.df-promo h4{margin-bottom:0}.cookie-notice-settings .df-credits form{min-width:260px;margin-bottom:1em}.cookie-notice-settings .df-credits form input{margin:0;padding:0}.cookie-notice-settings{margin-right:300px}.cookie-notice-settings hr,.df-credits hr{border:solid #eee;border-width:1px 0 0;clear:both;height:0}.cookie-notice-settings form{float:left;min-width:463px;width:100%}.cookie-notice-settings .ui-button{margin-bottom:5px}.cookie-notice-settings .description{font-size:13px;margin-bottom:8px}#cn_colors label{min-width:10em;display:inline-block}#cn_colors div{vertical-align:middle}#cn_refuse_code .nav-tab-wrapper{padding-top:0}#cn_refuse_code .refuse-code-tab{display:none}#cn_refuse_code .refuse-code-tab.active{display:block}#cn_refuse_code .refuse-code-tab .description{margin-top:10px}@media only screen and (max-width: 959px){.df-credits{width:100%;float:none;margin:20px 0}.cookie-notice-settings{margin-right:0}}

View File

@@ -0,0 +1,151 @@
#cookie-notice {
display: block;
visibility: hidden;
position: fixed;
min-width: 100%;
height: auto;
z-index: 100000;
font-size: 13px;
line-height: 20px;
left: 0;
text-align: center;
}
.cn-top {
top: 0;
}
.cn-bottom {
bottom: 0;
}
.cookie-notice-container {
padding: 10px;
text-align: center;
width: 100%;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
.cookie-notice-revoke-container {
position: absolute;
bottom: 0;
width: 100%;
z-index: 1;
visibility: hidden;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
.cn-top .cookie-notice-revoke-container {
top: 0;
bottom: auto;
}
#cookie-notice .cn-revoke-cookie {
margin: 0;
}
.cn-button.wp-default,
.cn-button.wp-default:hover,
.cn-button.bootstrap,
.cn-button.bootstrap:hover {
box-shadow: none;
text-decoration: none;
}
#cookie-notice .cn-button {
margin-left: 10px;
}
.cn-button.wp-default {
font-family: sans-serif;
line-height: 18px;
padding: 2px 12px;
background: linear-gradient(to bottom, #FEFEFE, #F4F4F4) repeat scroll 0 0 #F3F3F3;
border-color: #BBB;
color: #333;
text-shadow: 0 1px 0 #FFF;
-moz-box-sizing: border-box;
border-radius: 3px 3px 3px 3px;
border-style: solid;
border-width: 1px;
cursor: pointer;
display: inline-block;
font-size: 12px;
font-style: normal;
text-decoration: none;
white-space: nowrap;
outline: none;
}
.cn-button.wp-default:hover {
background: linear-gradient(to bottom, #FFFFFF, #F3F3F3) repeat scroll 0 0 #F3F3F3;
border-color: #999;
color: #222;
}
.cn-button.bootstrap {
font-family: sans-serif;
display: inline-block;
*display: inline;
padding: 4px 12px;
margin-right: .3em;
margin-bottom: 0;
*margin-left: .3em;
line-height: 20px;
color: #333;
text-align: center;
text-shadow: 0 1px 1px rgba(255, 255, 255, .75);
font-style: normal;
vertical-align: middle;
cursor: pointer;
color: #fff;
text-shadow: 0 -1px 0 rgba(0, 0, 0, .25);
background-color: #006dcc;
*background-color: #04c;
background-image: -moz-linear-gradient(top, #0088cc, #0044cc);
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));
background-image: -webkit-linear-gradient(top, #0088cc, #0044cc);
background-image: -o-linear-gradient(top, #0088cc, #0044cc);
background-image: linear-gradient(to bottom, #0088cc, #0044cc);
background-repeat: repeat-x;
border-style: solid;
border-width: 1px;
border-color: #04c #04c #002a80;
border-color: rgba(0, 0, 0, .1) rgba(0, 0, 0, .1) rgba(0, 0, 0, .25);
box-shadow: 0 1px 0 rgba(255, 255, 255, .2) inset, 0 1px 2px rgba(0, 0, 0, .05);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
padding: 2px 10px;
font-size: 12px;
text-decoration: none;
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
border-radius: 3px;
outline: none;
}
.cn-button.bootstrap:hover {
color: #fff;
background-color: #04c;
*background-color: #003bb3;
background-position: 0 -15px;
-webkit-transition: background-position 0.1s linear;
-moz-transition: background-position 0.1s linear;
-o-transition: background-position 0.1s linear;
transition: background-position 0.1s linear;
}
@media all and (max-width: 900px) {
.cookie-notice-container #cn-notice-text {
display: block;
margin-bottom: 5px;
}
#cookie-notice .cn-button {
margin-left: 5px;
margin-right: 5px;
}
}

View File

@@ -0,0 +1 @@
#cookie-notice{display:block;visibility:hidden;position:fixed;min-width:100%;height:auto;z-index:100000;font-size:13px;line-height:20px;left:0;text-align:center}.cn-top{top:0}.cn-bottom{bottom:0}.cookie-notice-container{padding:10px;text-align:center;width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.cookie-notice-revoke-container{position:absolute;bottom:0;width:100%;z-index:1;visibility:hidden;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.cn-top .cookie-notice-revoke-container{top:0;bottom:auto}#cookie-notice .cn-revoke-cookie{margin:0}.cn-button.wp-default,.cn-button.wp-default:hover,.cn-button.bootstrap,.cn-button.bootstrap:hover{box-shadow:none;text-decoration:none}#cookie-notice .cn-button{margin-left:10px}.cn-button.wp-default{font-family:sans-serif;line-height:18px;padding:2px 12px;background:linear-gradient(to bottom,#FEFEFE,#F4F4F4) repeat scroll 0 0 #F3F3F3;border-color:#BBB;color:#333;text-shadow:0 1px 0 #FFF;-moz-box-sizing:border-box;border-radius:3px 3px 3px 3px;border-style:solid;border-width:1px;cursor:pointer;display:inline-block;font-size:12px;font-style:normal;text-decoration:none;white-space:nowrap;outline:none}.cn-button.wp-default:hover{background:linear-gradient(to bottom,#FFFFFF,#F3F3F3) repeat scroll 0 0 #F3F3F3;border-color:#999;color:#222}.cn-button.bootstrap{font-family:sans-serif;display:inline-block;*display:inline;padding:4px 12px;margin-right:.3em;margin-bottom:0;*margin-left:.3em;line-height:20px;color:#333;text-align:center;text-shadow:0 1px 1px rgba(255,255,255,.75);font-style:normal;vertical-align:middle;cursor:pointer;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25);background-color:#006dcc;*background-color:#04c;background-image:-moz-linear-gradient(top,#0088cc,#0044cc);background-image:-webkit-gradient(linear,0 0,0 100%,from(#0088cc),to(#0044cc));background-image:-webkit-linear-gradient(top,#0088cc,#0044cc);background-image:-o-linear-gradient(top,#0088cc,#0044cc);background-image:linear-gradient(to bottom,#0088cc,#0044cc);background-repeat:repeat-x;border-style:solid;border-width:1px;border-color:#04c #04c #002a80;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);box-shadow:0 1px 0 rgba(255,255,255,.2) inset,0 1px 2px rgba(0,0,0,.05);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0044cc',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);padding:2px 10px;font-size:12px;text-decoration:none;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;outline:none}.cn-button.bootstrap:hover{color:#fff;background-color:#04c;*background-color:#003bb3;background-position:0 -15px;-webkit-transition:background-position 0.1s linear;-moz-transition:background-position 0.1s linear;-o-transition:background-position 0.1s linear;transition:background-position 0.1s linear}@media all and (max-width:900px){.cookie-notice-container #cn-notice-text{display:block;margin-bottom:5px}#cookie-notice .cn-button{margin-left:5px;margin-right:5px}}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

View File

@@ -0,0 +1,26 @@
<?php
// exit if accessed directly
if ( ! defined( 'ABSPATH' ) )
exit;
/**
* Check if cookies are accepted.
*
* @return boolean Whether cookies are accepted
*/
if ( ! function_exists( 'cn_cookies_accepted' ) ) {
function cn_cookies_accepted() {
return (bool) Cookie_Notice::cookies_accepted();
}
}
/**
* Check if cookies are set.
*
* @return boolean Whether cookies are set
*/
if ( ! function_exists( 'cn_cookies_set' ) ) {
function cn_cookies_set() {
return (bool) Cookie_Notice::cookies_set();
}
}

View File

@@ -0,0 +1,34 @@
<?php
// exit if accessed directly
if ( ! defined( 'ABSPATH' ) )
exit;
new Cookie_Notice_Upgrade( $cookie_notice );
class Cookie_Notice_Upgrade {
private $defaults;
public function __construct( $cookie_notice ) {
// attributes
$this->defaults = $cookie_notice->get_defaults();
// actions
add_action( 'init', array( $this, 'check_upgrade' ) );
}
public function check_upgrade() {
if ( ! current_user_can( 'manage_options' ) )
return;
// gets current database version
$current_db_version = get_option( 'cookie_notice_version', '1.0.0' );
// new version?
if ( version_compare( $current_db_version, $this->defaults['version'], '<' ) ) {
// updates plugin version
update_option( 'cookie_notice_version', $this->defaults['version'], false );
}
}
}

View File

@@ -0,0 +1,2 @@
<?php
// Silence is golden.

View File

@@ -0,0 +1,73 @@
( function ( $ ) {
$( document ).ready( function () {
// initialize color picker
$( '.cn_color' ).wpColorPicker();
// refuse option
$( '#cn_refuse_opt' ).change( function () {
if ( $( this ).is( ':checked' ) ) {
$( '#cn_refuse_opt_container' ).slideDown( 'fast' );
} else {
$( '#cn_refuse_opt_container' ).slideUp( 'fast' );
}
} );
// revoke option
$( '#cn_revoke_cookies' ).change( function () {
if ( $( this ).is( ':checked' ) ) {
$( '#cn_revoke_opt_container' ).slideDown( 'fast' );
} else {
$( '#cn_revoke_opt_container' ).slideUp( 'fast' );
}
} );
// privacy policy option
$( '#cn_see_more' ).change( function () {
if ( $( this ).is( ':checked' ) ) {
$( '#cn_see_more_opt' ).slideDown( 'fast' );
} else {
$( '#cn_see_more_opt' ).slideUp( 'fast' );
}
} );
// privacy policy option
$( '#cn_on_scroll' ).change( function () {
if ( $( this ).is( ':checked' ) ) {
$( '#cn_on_scroll_offset' ).slideDown( 'fast' );
} else {
$( '#cn_on_scroll_offset' ).slideUp( 'fast' );
}
} );
// privacy policy link
$( '#cn_see_more_link-custom, #cn_see_more_link-page' ).change( function () {
if ( $( '#cn_see_more_link-custom:checked' ).val() === 'custom' ) {
$( '#cn_see_more_opt_page' ).slideUp( 'fast', function () {
$( '#cn_see_more_opt_link' ).slideDown( 'fast' );
} );
} else if ( $( '#cn_see_more_link-page:checked' ).val() === 'page' ) {
$( '#cn_see_more_opt_link' ).slideUp( 'fast', function () {
$( '#cn_see_more_opt_page' ).slideDown( 'fast' );
} );
}
} );
$( '#cn_refuse_code_fields' ).find( 'a' ).click( function ( e ) {
e.preventDefault();
$( '#cn_refuse_code_fields' ).find( 'a' ).removeClass( 'nav-tab-active' );
$( '.refuse-code-tab' ).removeClass( 'active' );
var id = $( this ).attr( 'id' ).replace( '-tab', '' );
$( '#' + id ).addClass( 'active' );
$( this ).addClass( 'nav-tab-active' );
} );
} );
$( document ).on( 'click', 'input#reset_cookie_notice_options', function () {
return confirm( cnArgs.resetToDefaults );
} );
} )( jQuery );

View File

@@ -0,0 +1 @@
!function(c){c(document).ready(function(){c(".cn_color").wpColorPicker(),c("#cn_refuse_opt").change(function(){c(this).is(":checked")?c("#cn_refuse_opt_container").slideDown("fast"):c("#cn_refuse_opt_container").slideUp("fast")}),c("#cn_revoke_cookies").change(function(){c(this).is(":checked")?c("#cn_revoke_opt_container").slideDown("fast"):c("#cn_revoke_opt_container").slideUp("fast")}),c("#cn_see_more").change(function(){c(this).is(":checked")?c("#cn_see_more_opt").slideDown("fast"):c("#cn_see_more_opt").slideUp("fast")}),c("#cn_on_scroll").change(function(){c(this).is(":checked")?c("#cn_on_scroll_offset").slideDown("fast"):c("#cn_on_scroll_offset").slideUp("fast")}),c("#cn_see_more_link-custom, #cn_see_more_link-page").change(function(){"custom"===c("#cn_see_more_link-custom:checked").val()?c("#cn_see_more_opt_page").slideUp("fast",function(){c("#cn_see_more_opt_link").slideDown("fast")}):"page"===c("#cn_see_more_link-page:checked").val()&&c("#cn_see_more_opt_link").slideUp("fast",function(){c("#cn_see_more_opt_page").slideDown("fast")})}),c("#cn_refuse_code_fields").find("a").click(function(e){e.preventDefault(),c("#cn_refuse_code_fields").find("a").removeClass("nav-tab-active"),c(".refuse-code-tab").removeClass("active");var n=c(this).attr("id").replace("-tab","");c("#"+n).addClass("active"),c(this).addClass("nav-tab-active")})}),c(document).on("click","input#reset_cookie_notice_options",function(){return confirm(cnArgs.resetToDefaults)})}(jQuery);

View File

@@ -0,0 +1,291 @@
( function ( $ ) {
// ready event
$( document ).ready( function () {
var notice = $( '#cookie-notice' ),
cookie = $.fn.getCookieNotice();
// handle set-cookie button click
$( document ).on( 'click', '.cn-set-cookie', function ( e ) {
e.preventDefault();
$( this ).setCookieNotice( $( this ).data( 'cookie-set' ) );
} );
// handle revoke button click
$( document ).on( 'click', '.cn-revoke-cookie', function ( e ) {
e.preventDefault();
if ( cnArgs.refuse === 'yes' ) {
var revoke = $( this );
if ( cnArgs.onScroll === 'yes' ) {
// enable cookie acceptance by scrolling again
$( window ).on( 'scroll', handleScroll );
}
if ( cnArgs.revoke_cookies === '1' ) {
// clicked shortcode button?
if ( revoke.hasClass( 'cn-revoke-inline' ) ) {
var body = $( 'body' );
// is cookie notice hidden?
if ( ! ( body.hasClass( 'cookies-revoke' ) || body.hasClass( 'cookies-not-set' ) ) ) {
// display automatic revoke button?
if ( cnArgs.revoke_cookies_opt === 'automatic' ) {
notice.showCookieNotice( 3 );
} else {
notice.showCookieNotice( 2 );
}
}
} else {
notice.showCookieNotice( 1 );
}
// update cookie value
cookie = $.fn.getCookieNotice();
// add body class
$.fn.setCookieNoticeBodyClass( 'cookies-set cookies-revoke ' + ( cookie === 'true' ? 'cookies-accepted' : 'cookies-refused' ) );
}
}
} );
// cookie is not set
if ( typeof cookie === 'undefined' ) {
// handle on scroll
if ( cnArgs.onScroll === 'yes' ) {
$( window ).on( 'scroll', handleScroll );
}
notice.showCookieNotice( 0 );
$.fn.setCookieNoticeBodyClass( 'cookies-not-set' );
// active refuse button?
} else if ( cnArgs.refuse === 'yes' ) {
if ( cnArgs.revoke_cookies === '1' ) {
if ( cnArgs.revoke_cookies_opt === 'automatic' ) {
notice.hideCookieNotice( 1 );
}
$.fn.setCookieNoticeBodyClass( 'cookies-set ' + ( cookie === 'true' ? 'cookies-accepted' : 'cookies-refused' ) );
}
// remove cookie notice
} else {
// add body class
$.fn.setCookieNoticeBodyClass( 'cookies-set ' + ( cookie === 'true' ? 'cookies-accepted' : 'cookies-refused' ) );
}
} );
// handle mouse scrolling
function handleScroll( event ) {
var win = $( this );
if ( win.scrollTop() > parseInt( cnArgs.onScrollOffset ) ) {
// accept cookie
win.setCookieNotice( 'accept' );
// remove itself after cookie accept
win.off( 'scroll', handleScroll );
}
};
// set Cookie Notice
$.fn.setCookieNotice = function ( cookie_value ) {
if ( cnArgs.onScroll === 'yes' ) {
$( window ).off( 'scroll', handleScroll );
}
var date = new Date(),
later_date = new Date(),
notice = $( '#cookie-notice' );
// set expiry time in seconds
later_date.setTime( parseInt( date.getTime() ) + parseInt( cnArgs.cookieTime ) * 1000 );
// set cookie
cookie_value = cookie_value === 'accept' ? 'true' : 'false';
document.cookie = cnArgs.cookieName + '=' + cookie_value + ';expires=' + later_date.toUTCString() + ';' + ( cnArgs.cookieDomain !== undefined && cnArgs.cookieDomain !== '' ? 'domain=' + cnArgs.cookieDomain + ';' : '' ) + ( cnArgs.cookiePath !== undefined && cnArgs.cookiePath !== '' ? 'path=' + cnArgs.cookiePath + ';' : '' ) + ( cnArgs.secure === '1' ? 'secure;' : '' );
// trigger custom event
$.event.trigger( {
type: 'setCookieNotice',
value: cookie_value,
time: date,
expires: later_date
} );
// add body class
$.fn.setCookieNoticeBodyClass( 'cookies-set ' + ( cookie_value === 'true' ? 'cookies-accepted' : 'cookies-refused' ) );
if ( cnArgs.refuse === 'yes' && cnArgs.revoke_cookies === '1' && cnArgs.revoke_cookies_opt === 'automatic' ) {
notice.hideCookieNotice( 2 );
} else {
notice.hideCookieNotice( 0 );
}
if ( cookie_value && cnArgs.redirection === '1' ) {
var url = window.location.protocol + '//',
hostname = window.location.host + '/' + window.location.pathname;
if ( cnArgs.cache === '1' ) {
url = url + hostname.replace( '//', '/' ) + ( window.location.search === '' ? '?' : window.location.search + '&' ) + 'cn-reloaded=1' + window.location.hash;
window.location.href = url;
} else {
url = url + hostname.replace( '//', '/' ) + window.location.search + window.location.hash;
window.location.reload( true );
}
return;
}
};
// add class(es) to body
$.fn.setCookieNoticeBodyClass = function( classes ) {
$( 'body' ).removeClass( 'cookies-revoke cookies-accepted cookies-refused cookies-set cookies-not-set' ).addClass( classes );
}
// get cookie value
$.fn.getCookieNotice = function () {
var value = "; " + document.cookie,
parts = value.split( '; cookie_notice_accepted=' );
if ( parts.length === 2 )
return parts.pop().split( ';' ).shift();
else
return;
}
// display cookie notice
$.fn.showCookieNotice = function( type ) {
// trigger custom event
$.event.trigger( {
type: 'showCookieNotice',
value: type,
data: cnArgs
} );
var notice = this;
switch ( type ) {
case 0:
if ( cnArgs.hideEffect === 'fade' ) {
// show cookie notice
notice.css( { 'visibility': 'visible', 'display': 'none' } ).fadeIn( 400 );
} else if ( cnArgs.hideEffect === 'slide' ) {
// show cookie notice
notice.css( { 'visibility': 'visible', 'display': 'none' } ).slideDown( 400 );
} else {
// show cookie notice
notice.css( { 'visibility': 'visible' } ).show();
}
break;
case 1:
if ( cnArgs.hideEffect === 'fade' ) {
// hide revoke button
notice.find( '.cookie-notice-revoke-container' ).fadeOut( 400, function () {
// show cookie notice
notice.css( { 'visibility': 'visible', 'display': 'none' } ).fadeIn( 400 );
} );
} else if ( cnArgs.hideEffect === 'slide' ) {
// hide revoke button
notice.find( '.cookie-notice-revoke-container' ).slideUp( 400, function () {
// show cookie notice
notice.css( { 'visibility': 'visible', 'display': 'none' } ).slideDown( 400 );
} );
} else {
// hide revoke button
notice.css( { 'visibility': 'visible' } ).find( '.cookie-notice-revoke-container' ).hide();
}
break;
case 2:
if ( cnArgs.hideEffect === 'fade' ) {
// show cookie notice
notice.css( { 'visibility': 'visible', 'display': 'none' } ).fadeIn( 400 );
} else if ( cnArgs.hideEffect === 'slide' ) {
// show cookie notice
notice.css( { 'visibility': 'visible', 'display': 'none' } ).slideDown( 400 );
} else {
// show cookie notice
notice.css( { 'visibility': 'visible' } );
}
break;
case 3:
if ( cnArgs.hideEffect === 'fade' ) {
// hide revoke button
notice.find( '.cookie-notice-revoke-container' ).fadeOut( 400, function () {
// show cookie notice
notice.css( { 'visibility': 'visible', 'display': 'none' } ).fadeIn( 400 );
} );
} else if ( cnArgs.hideEffect === 'slide' ) {
// hide revoke button
notice.find( '.cookie-notice-revoke-container' ).slideUp( 400, function () {
// show cookie notice
notice.css( { 'visibility': 'visible', 'display': 'none' } ).slideDown( 400 );
} );
} else {
// hide revoke button
notice.css( { 'visibility': 'visible' } ).find( '.cookie-notice-revoke-container' ).hide();
}
break;
}
}
// hide cookie notice
$.fn.hideCookieNotice = function ( type ) {
// trigger custom event
$.event.trigger( {
type: 'hideCookieNotice',
value: type,
data: cnArgs
} );
var notice = this,
display = this.css( 'display' );
switch ( type ) {
case 0:
if ( cnArgs.hideEffect === 'fade' ) {
notice.fadeOut( 400 );
} else if ( cnArgs.hideEffect === 'slide' ) {
notice.slideUp( 400 );
} else {
notice.css( { 'visibility': 'hidden' } );
}
break;
case 1:
if ( cnArgs.hideEffect === 'fade' ) {
notice.find( '.cookie-notice-revoke-container' ).hide().fadeIn( 400 ).css( { 'visibility': 'visible', 'display': 'block' } );
} else if ( cnArgs.hideEffect === 'slide' ) {
notice.find( '.cookie-notice-revoke-container' ).hide().slideDown( 400 ).css( { 'visibility': 'visible', 'display': 'block' } );
} else {
notice.find( '.cookie-notice-revoke-container' ).css( { 'visibility': 'visible', 'display': 'block' } );
}
break;
case 2:
if ( cnArgs.hideEffect === 'fade' ) {
notice.fadeOut( 400, function () {
// show revoke button
notice.css( { 'visibility': 'hidden', 'display': display } ).find( '.cookie-notice-revoke-container' ).hide().fadeIn( 400 ).css( { 'visibility': 'visible', 'display': 'block' } );
} );
} else if ( cnArgs.hideEffect === 'slide' ) {
notice.slideUp( 400, function () {
// show revoke button
notice.css( { 'visibility': 'hidden', 'display': display } ).find( '.cookie-notice-revoke-container' ).hide().slideDown( 400 ).css( { 'visibility': 'visible', 'display': 'block' } );
} );
} else {
// show revoke button
notice.css( { 'visibility': 'hidden' } ).find( '.cookie-notice-revoke-container' ).css( { 'visibility': 'visible', 'display': 'block' } );
}
break;
}
}
} )( jQuery );

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,378 @@
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: Cookie Notice\n"
"POT-Creation-Date: 2018-06-11 10:36+0200\n"
"PO-Revision-Date: 2015-03-24 11:30+0100\n"
"Last-Translator: Bartosz Arendt <info@dfactory.eu>\n"
"Language-Team: dFactory <info@dfactory.eu>\n"
"Language: en\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 2.0.8\n"
"X-Poedit-KeywordsList: gettext;gettext_noop;__;_e;_n\n"
"X-Poedit-Basepath: .\n"
"X-Poedit-SourceCharset: UTF-8\n"
"X-Poedit-SearchPath-0: ..\n"
#: ../cookie-notice.php:134
msgid "Top"
msgstr ""
#: ../cookie-notice.php:135
msgid "Bottom"
msgstr ""
#: ../cookie-notice.php:139 ../cookie-notice.php:176
msgid "None"
msgstr ""
#: ../cookie-notice.php:140
msgid "WordPress"
msgstr ""
#: ../cookie-notice.php:141
msgid "Bootstrap"
msgstr ""
#: ../cookie-notice.php:145
msgid "Automatic"
msgstr ""
#: ../cookie-notice.php:146
msgid "Manual"
msgstr ""
#: ../cookie-notice.php:150
msgid "Page link"
msgstr ""
#: ../cookie-notice.php:151
msgid "Custom link"
msgstr ""
#: ../cookie-notice.php:160
msgid "Text color"
msgstr ""
#: ../cookie-notice.php:161
msgid "Bar color"
msgstr ""
#: ../cookie-notice.php:165
msgid "An hour"
msgstr ""
#: ../cookie-notice.php:166
msgid "1 day"
msgstr ""
#: ../cookie-notice.php:167
msgid "1 week"
msgstr ""
#: ../cookie-notice.php:168
msgid "1 month"
msgstr ""
#: ../cookie-notice.php:169
msgid "3 months"
msgstr ""
#: ../cookie-notice.php:170
msgid "6 months"
msgstr ""
#: ../cookie-notice.php:171
msgid "1 year"
msgstr ""
#: ../cookie-notice.php:172
msgid "infinity"
msgstr ""
#: ../cookie-notice.php:177
msgid "Fade"
msgstr ""
#: ../cookie-notice.php:178
msgid "Slide"
msgstr ""
#: ../cookie-notice.php:182
msgid "Header"
msgstr ""
#: ../cookie-notice.php:183
msgid "Footer"
msgstr ""
#: ../cookie-notice.php:189
msgid "We use cookies to ensure that we give you the best experience on our website. If you continue to use this site we will assume that you are happy with it."
msgstr ""
#: ../cookie-notice.php:190
msgid "Ok"
msgstr ""
#: ../cookie-notice.php:191
msgid "No"
msgstr ""
#: ../cookie-notice.php:192 ../cookie-notice.php:394
msgid "Revoke cookies"
msgstr ""
#: ../cookie-notice.php:193 ../cookie-notice.php:391
msgid "Privacy policy"
msgstr ""
#: ../cookie-notice.php:335 ../cookie-notice.php:346 ../cookie-notice.php:349
msgid "Cookie Notice"
msgstr ""
#: ../cookie-notice.php:351
msgid "Need support?"
msgstr ""
#: ../cookie-notice.php:352
#, php-format
msgid "If you are having problems with this plugin, please browse it's <a href=\"%s\" target=\"_blank\">Documentation</a> or talk about them in the <a href=\"%s\" target=\"_blank\">Support forum</a>"
msgstr ""
#: ../cookie-notice.php:354
msgid "Do you like this plugin?"
msgstr ""
#: ../cookie-notice.php:355
#, php-format
msgid "<a href=\"%s\" target=\"_blank\">Rate it 5</a> on WordPress.org"
msgstr ""
#: ../cookie-notice.php:356
#, php-format
msgid "Blog about it & link to the <a href=\"%s\" target=\"_blank\">plugin page</a>."
msgstr ""
#: ../cookie-notice.php:357
#, php-format
msgid "Check out our other <a href=\"%s\" target=\"_blank\">WordPress plugins</a>."
msgstr ""
#: ../cookie-notice.php:372
msgid "Reset to defaults"
msgstr ""
#: ../cookie-notice.php:388
msgid "Configuration"
msgstr ""
#: ../cookie-notice.php:389
msgid "Message"
msgstr ""
#: ../cookie-notice.php:390
msgid "Button text"
msgstr ""
#: ../cookie-notice.php:392
msgid "Link target"
msgstr ""
#: ../cookie-notice.php:393
msgid "Refuse cookies"
msgstr ""
#: ../cookie-notice.php:395
msgid "Script blocking"
msgstr ""
#: ../cookie-notice.php:396
msgid "Reloading"
msgstr ""
#: ../cookie-notice.php:397
msgid "On scroll"
msgstr ""
#: ../cookie-notice.php:398
msgid "Cookie expiry"
msgstr ""
#: ../cookie-notice.php:399
msgid "Script placement"
msgstr ""
#: ../cookie-notice.php:400
msgid "Deactivation"
msgstr ""
#: ../cookie-notice.php:403
msgid "Design"
msgstr ""
#: ../cookie-notice.php:404
msgid "Position"
msgstr ""
#: ../cookie-notice.php:405
msgid "Animation"
msgstr ""
#: ../cookie-notice.php:406
msgid "Button style"
msgstr ""
#: ../cookie-notice.php:407
msgid "Button class"
msgstr ""
#: ../cookie-notice.php:408
msgid "Colors"
msgstr ""
#: ../cookie-notice.php:423
msgid "Enable if you want all plugin data to be deleted on deactivation."
msgstr ""
#: ../cookie-notice.php:435
msgid "Enter the cookie notice message."
msgstr ""
#: ../cookie-notice.php:448
msgid "The text of the option to accept the usage of the cookies and make the notification disappear."
msgstr ""
#: ../cookie-notice.php:459
msgid "Enable to give to the user the possibility to refuse third party non functional cookies."
msgstr ""
#: ../cookie-notice.php:463
msgid "The text of the button to refuse the usage of the cookies."
msgstr ""
#: ../cookie-notice.php:481
msgid "Head"
msgstr ""
#: ../cookie-notice.php:482
msgid "Body"
msgstr ""
#: ../cookie-notice.php:485
msgid "The code to be used in your site header, before the closing head tag."
msgstr ""
#: ../cookie-notice.php:489
msgid "The code to be used in your site footer, before the closing body tag."
msgstr ""
#: ../cookie-notice.php:493
msgid "Enter non functional cookies Javascript code here (for e.g. Google Analitycs) to be used after cookies are accepted."
msgstr ""
#: ../cookie-notice.php:493
msgid "To get the cookie notice status use <code>cn_cookies_accepted()</code> function."
msgstr ""
#: ../cookie-notice.php:504
msgid "Enable to give to the user the possibility to revoke their cookie consent <i>(requires \"Refuse cookies\" option enabled)</i>."
msgstr ""
#: ../cookie-notice.php:507
msgid "The text of the button to revoke the cookie consent."
msgstr ""
#: ../cookie-notice.php:515
msgid "Select the method for displaying the revoke button - automatic (in the Cookie Notice container) or manual using <code>[cookies_revoke]</code> shortcode."
msgstr ""
#: ../cookie-notice.php:526
msgid "Enable to reload the page after cookies are accepted."
msgstr ""
#: ../cookie-notice.php:549
msgid "Enable privacy policy link."
msgstr ""
#: ../cookie-notice.php:550
#, php-format
msgid "Need a Cookie Policy? Generate one with <a href=\"%s\" target=\"_blank\" title=\"iubenda\">iubenda</a>."
msgstr ""
#: ../cookie-notice.php:553
msgid "The text of the privacy policy button."
msgstr ""
#: ../cookie-notice.php:565
msgid "Select where to redirect user for more information about cookies."
msgstr ""
#: ../cookie-notice.php:568
msgid "-- select page --"
msgstr ""
#: ../cookie-notice.php:579
msgid "Select from one of your site's pages."
msgstr ""
#: ../cookie-notice.php:585
msgid "Synchronize with WordPress Privacy Policy page."
msgstr ""
#: ../cookie-notice.php:592
msgid "Enter the full URL starting with http(s)://"
msgstr ""
#: ../cookie-notice.php:614
msgid "Select the privacy policy link target."
msgstr ""
#: ../cookie-notice.php:637
msgid "The ammount of time that cookie should be stored for."
msgstr ""
#: ../cookie-notice.php:655
msgid "Select where all the plugin scripts should be placed."
msgstr ""
#: ../cookie-notice.php:675
msgid "Select location for your cookie notice."
msgstr ""
#: ../cookie-notice.php:696
msgid "Cookie notice acceptance animation."
msgstr ""
#: ../cookie-notice.php:707
msgid "Enable cookie notice acceptance when users scroll."
msgstr ""
#: ../cookie-notice.php:710
msgid "Number of pixels user has to scroll to accept the usage of the cookies and make the notification disappear."
msgstr ""
#: ../cookie-notice.php:731
msgid "Choose buttons style."
msgstr ""
#: ../cookie-notice.php:744
msgid "Enter additional button CSS classes separated by spaces."
msgstr ""
#: ../cookie-notice.php:870
msgid "Settings restored to defaults."
msgstr ""
#: ../cookie-notice.php:976
msgid "Support"
msgstr ""
#: ../cookie-notice.php:993
msgid "Settings"
msgstr ""
#: ../cookie-notice.php:1060
msgid "Are you sure you want to reset these settings to defaults?"
msgstr ""

View File

@@ -0,0 +1,267 @@
=== Cookie Notice for GDPR ===
Contributors: dfactory
Donate link: http://www.dfactory.eu/
Tags: gdpr, cookie, cookies, notice, notification, notify, cookie, cookie compliance, cookie law, eu cookie, privacy, privacy directive, consent
Requires at least: 3.3
Requires PHP: 5.2.4
Tested up to: 5.0.3
Stable tag: 1.2.46
License: MIT License
License URI: http://opensource.org/licenses/MIT
Cookie Notice allows you to elegantly inform users that your site uses cookies and to comply with the EU cookie law GDPR regulations.
== Description ==
[Cookie Notice](http://www.dfactory.eu/plugins/cookie-notice/) allows you to elegantly inform users that your site uses cookies and to comply with the EU cookie law GDPR regulations.
For more information, check out plugin page at [dFactory](http://www.dfactory.eu/) or plugin [support forum](http://www.dfactory.eu/support/forum/cookie-notice/).
= Features include: =
* Customizable cookie message
* Redirects users to specified page for more cookie information
* Multiple cookie expiry options
* Link to Privacy Policy page
* WordPress Privacy Policy page synchronization
* Option to accept cookies on scroll
* Option to set on scroll offset
* Option to refuse functional cookies
* Option to revoke the user consent
* Option to manually block scripts
* Option to reload the page after cookies are accepted
* Select the position of the cookie message box
* Animate the message box after cookie is accepted
* Select bottons style from None, WordPress and Bootstrap
* Set the text and bar background colors
* WPML and Polylang compatible
* SEO friendly
* .pot file for translations included
= Usage: =
If you'd like to code a functionality depending on the cookie notice value use the function below:
`if ( function_exists('cn_cookies_accepted') && cn_cookies_accepted() ) {
// Your third-party non functional code here
}`
= Get involved =
Feel free to contribute to the source code on the [dFactory GitHub Repository](https://github.com/dfactoryplugins).
== Installation ==
1. Install Cookie Notice either via the WordPress.org plugin directory, or by uploading the files to your server
2. Activate the plugin through the 'Plugins' menu in WordPress
3. Go to the Cookie Notice settings and set your options.
== Frequently Asked Questions ==
No questions yet.
== Screenshots ==
1. screenshot-1.png
== Changelog ==
= 1.2.46 =
* Tweak: Remove WP Super Cache cookie on deactivation
* Tweak: Remove plugin version from the db on deactivation
= 1.2.45 =
* Tweak: Improved WP Super Cache support
* Tweak: CSS container style issue and media query for mobile
= 1.2.44 =
* Fix: The text of the revoke button ignored in shortcode
* Fix: Revoke consent button not displayed automatically in top position
* Tweak: Add shortcode parsing for content of [cookies_accepted], thanks to [dsturm](https://github.com/dsturm)
= 1.2.43 =
* New: Option to revoke the user consent
* New: Script blocking extended to header and footer
* New: Synchronization with WordPress 4.9.6 Privacy Policy page
* New: Custom button class option
* Tweak: Added 1 hour cookie expiry option
= 1.2.42 =
* New: Introducing [cookies_accepted][/cookies_accepted] shortcode
* Fix: Infinite cookie expiry issue
= 1.2.41 =
* Fix: Infinite redirection loop with scroll enabled
= 1.2.40 =
* Fix: Div align center on some themes
* Tweak: Extended list of allowed HTML tags in refuse code
* Tweak: Minified CSS and JS
= 1.2.39 =
* New: Option to reload the page after cookies are accepted
= 1.2.38 =
* Tweak: Move frontend cookie js functions before the document ready call, thanks to [fgreinus](https://github.com/fgreinus)
* Tweak: Adjust functional javascript code handling
* Fix: Chhromium infinity expiration date not valid
* Fix: Remove deprecated screen_icon() function
= 1.2.37 =
* Tweak: Add aria landmark role="banner"
* Tweak: Extend cn_cookie_notice_args with button class
= 1.2.36.1 =
* Fix: Repository upload issue with 1.2.36
= 1.2.36 =
* Fix: String translation support for WMPL 3.2+
* Fix: Global var possible conflict with other plugins
* Tweak: Add $options array to "cn_cookie_notice_output" filter, thanks to [chesio](https://github.com/chesio).
* Tweak: Removed local translation files in favor of WP repository translations.
= 1.2.35 =
* Tweak: Use html_entity_decode on non-functional code block
* Tweak: get_pages() function placement optimization
* Tweak: Filterable manage cookie notice capability
= 1.2.34 =
* Fix: Empty href in links HTML validation issue
= 1.2.33 =
* New: Greek translation thanks to Elias Stefanidis
= 1.2.32 =
* Fix: Accept cookie button hidden on acceptance instead of the cookie message container
= 1.2.31 =
* New: Non functional Javascript code field
* Fix: Minified Javascript caching issue
= 1.2.30 =
* Fix: jQuery error after accepting cookies
= 1.2.29 =
* Tweak: Add class to body element when displayed
* Tweak: Italian translation update
= 1.2.28 =
* New: Option to set on scroll offset
= 1.2.27 =
* Tweak: Correctly remove scroll event, limit possible conflicts
* Tweak: Italian translation update
= 1.2.26 =
* Fix: Accept cookies on scroll option working unchecked.
* Fix: call_user_func() warning on lower version of WP
= 1.2.25 =
* New: Option to accept cookies on scroll, thanks to [Cristian Pascottini](http://cristian.pascottini.net/)
= 1.2.24 =
* New: Option to refuse to accept cookies
* New: setCookieNotice custom jQuery event
* Tweak: Italian translation updated, thanks to Luca Speranza
= 1.2.23 =
* New: Finnish translation, thanks to [Daniel Storgards](www.danielstorgards.com)
= 1.2.22 =
* Tweak: Swedish translation updated, thx to Ove Kaufeldt
= 1.2.21 =
* New: Plugin development moved to [dFactory GitHub Repository](https://github.com/dfactoryplugins)
* Tweak: Code cleanup
= 1.2.20 =
* New: Option to select scripts placement, header or footer
= 1.2.19 =
* New: Danish translation, thanks to Lui Wallentin Gottler
= 1.2.18.1 =
* Fix: Quick fix for 1.2.18 print_r in code
= 1.2.18 =
* New: More info link target option
* Tweak: Additional HTML ids, for more flexible customization
= 1.2.17 =
* New: Hebrew translation, thanks to [Ahrale Shrem](http://atar4u.com/)
= 1.2.16 =
* Tweak: Dutch translation missing due to a typo
= 1.2.15 =
* New: Danish translation, thanks to Hans C. Jorgensen
* Fix: Notice bar not visible if no animation selected
= 1.2.14 =
* New: Hungarian translation, thanks to [Surbma](http://surbma.hu)
= 1.2.13 =
* New: Croatian translation, thanks to [Marko Beus](http://www.markobeus.com/)
= 1.2.12 =
* New: Slovenian translation, thanks to Thomas Cuk
= 1.2.11 =
* New: Swedish translation, thanks to [Daniel Storgards](http://www.danielstorgards.com/)
= 1.2.10 =
* New: Italian translation, thanks to [Luca](http://www.lucacicca.it)
* Tweak: Confirmed WP 4.0 compatibility
= 1.2.9.1 =
* Tweak: Enable HTML in cookie message text
* New: Option to donate this plugin :)
= 1.2.8 =
* New: Czech translation, thanks to [Adam Laita](http://laita.cz)
= 1.2.7 =
* New: French translation, thanks to [Laura Orsal](http://www.traductrice-independante.fr)
* New: Deleting plugin settings on deactivation as an option
= 1.2.6 =
* New: German translation, thanks to Alex Ernst
= 1.2.5 =
* New: Spanish translation, thanks to Fernando Blasco
= 1.2.4 =
* New: Added filter hooks to customize where and how display the cookie notice
= 1.2.3 =
* New: Portuguese translation, thanks to Luis Maia
= 1.2.2 =
* Fix: Read more linking to default site language in WPML & Polylang
= 1.2.1 =
* Tweak: UI improvements for WP 3.8
= 1.2.0 =
* Fix: Cookie not saving in IE
* Fix: Notice hidden under Admin bar bug
* Tweak: Improved WPML & Polylang compatibility
= 1.1.0 =
* New: Rewritten cookie setting method to pure JS
* Fix: Compatibility with WP Super Cache and other caching plugins
= 1.0.2 =
* New: Dutch translation, thanks to Heleen van den Bos
= 1.0.1 =
* Tweak: Changed setting cookie mode from AJAX to JS driven
= 1.0.0 =
Initial release
== Upgrade Notice ==
= 1.2.46 =
* Tweak: Remove WP Super Cache cookie on deactivation
* Tweak: Remove plugin version from the db on deactivation

View File

@@ -0,0 +1 @@
.progress-container{position:absolute;width:100%;height:100%;background:rgba(255,255,255,0.8);top:0;left:0;z-index:90000000000}@-webkit-keyframes load{0%{stroke-dashoffset:0}50%{stroke-dashoffset:630}100%{stroke-dashoffset:0}}@keyframes load{0%{stroke-dashoffset:0}50%{stroke-dashoffset:630}100%{stroke-dashoffset:0}}.progress-container .progress{position:relative;display:inline-block;padding:0;text-align:center;display:block;margin-top:15%}.progress-container .progress .dashicons.dashicons-yes{font-size:170px;position:relative;right:174px;font-weight:200;visibility:hidden}.progress-container .progress>li{display:inline-block;position:relative;text-align:center;color:#93A2AC;font-family:Lato;font-weight:100;margin:2rem}.progress-container .progress svg{width:10rem;height:10rem}.progress-container .progress svg:nth-child(2){position:absolute;left:0;top:0;transform:rotate(-90deg);-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-ms-transform:rotate(-90deg)}.progress-container .progress svg:nth-child(2) path{fill:none;stroke-width:7;stroke-dasharray:629;stroke:rgba(255,255,255,0.9);-webkit-animation:load 5s;animation:load 5s;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.progress-container.success .progress .dashicons.dashicons-yes{visibility:visible}.progress-container.success .progress svg:nth-child(2) path{stroke:rgba(255,255,255,0)}.attachments-browser.fap-media .media-sidebar .lh-logo{visibility:visible !important;position:absolute;width:267px;bottom:25px}.attachments-browser.fap-media .media-sidebar .lh-logo img{max-width:215px;display:block;margin:auto}.attachments-browser.fap-media .media-sidebar .lh-logo:before{content:"powered by";display:block;text-align:center;font-size:10px}.broadcast{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;adjust-items:center;-webkit-flex-flow:column;-ms-flex-flow:column;flex-flow:column;position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;background-color:rgba(255,255,255,0.9);z-index:99999}.broadcast p{padding-left:30%;padding-right:30%;font-weight:bold;font-size:24px;line-height:1.5em;text-align:center}.broadcast a.close_broadcast{display:inline-block;padding:8px 20px;background-color:#008ec2!important;color:#fff;cursor:pointer;border-radius:4px}.broadcast.closed{display:none}

View File

@@ -0,0 +1,38 @@
<?php
/**
* @package lh_fap
*/
/*
Plugin Name: free-images.cc Importer
Plugin URI: http://www.free-images.cc/plugin
Description: This plugin integrates the free-images.cc image library into your media browser. With this you have beautiful, free imagery available at the tip of your fingers.
Author: Luehrsen // Heinrich
Author URI: http://www.luehrsen-heinrich.de
Version: 0.6.2
License: GNU General Public License v2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Tags: free, images, image, pictures, media, import, creative commons
Domain Path: /lang
Text Domain: lhf
*/
// Make sure we don't expose any info if called directly
if ( !function_exists( 'add_action' ) ) {
echo 'Hi there! I\'m just a plugin, not much I can do when called directly.';
exit;
}
define( 'LHFAP__PLUGIN_URL', plugin_dir_url( __FILE__ ) );
define( 'LHFAP__PLUGIN_DIR', plugin_dir_path( __FILE__ ) );
define( 'LHFAP__PLUGIN_FILE', ( __FILE__ ) );
// Require needed files
require_once( LHFAP__PLUGIN_DIR . "/inc/lhfap.core.php" ); // The actual core of the plugin
require_once( LHFAP__PLUGIN_DIR . "/inc/lhfap.admin.php" ); // The administrational backend functions of the plugin
require_once( LHFAP__PLUGIN_DIR . "/inc/lhfap.import.php" ); // The administrational backend functions of the plugin
require_once( LHFAP__PLUGIN_DIR . "/inc/lhfap.templates.php" ); // The templates for our media frame view
// Initialize the class
$lh_fap = new LH_Fap_Plugin();

View File

@@ -0,0 +1,197 @@
<svg version="1.1" id="lh_logo_svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="294px" height="44px" viewBox="0 0 294 44" xml:space="preserve">
<g>
<g clip-path="logo">
<path class="lh-blue-BG" clip-path="url(#SVGID_2_)" fill="#1564A1" d="M160.71,23.993l7.938-20.976h125.02v20.976 M189.207,21.047v-1.496
l-1.123-0.221c-0.264-0.065-0.308-0.242-0.308-0.395V8.505c0-0.153,0.044-0.33,0.308-0.396l1.123-0.22V6.393h-5.172v1.496
l1.145,0.22c0.264,0.066,0.309,0.243,0.309,0.396v4.159h-8.34V8.505c0-0.153,0.045-0.33,0.309-0.396l1.122-0.22V6.393h-5.171v1.496
l1.145,0.22c0.264,0.066,0.308,0.243,0.308,0.396v10.43c0,0.153-0.044,0.33-0.308,0.395l-1.145,0.221v1.496h5.171v-1.496
l-1.122-0.221c-0.264-0.065-0.309-0.242-0.309-0.395v-4.467h8.34v4.467c0,0.153-0.045,0.33-0.309,0.395l-1.145,0.221v1.496H189.207
z M203.836,21.047v-1.959h-8.075V14.49h7.812v-1.914h-7.812V8.352h8.075V6.393H192.02v1.496l1.145,0.22
c0.264,0.066,0.309,0.243,0.309,0.396v10.43c0,0.153-0.045,0.33-0.309,0.395l-1.145,0.221v1.496H203.836z M211.49,21.047v-1.496
l-1.122-0.221c-0.263-0.065-0.308-0.242-0.308-0.395V8.505c0-0.153,0.045-0.33,0.308-0.396l1.122-0.22V6.393h-5.17v1.496
l1.144,0.22c0.265,0.066,0.309,0.243,0.309,0.396v10.43c0,0.153-0.044,0.33-0.309,0.395l-1.144,0.221v1.496H211.49z M230.721,7.889
V6.393h-5.018v1.496l1.145,0.22c0.264,0.066,0.308,0.243,0.308,0.396v10.056c0,0.351-0.044,0.616-0.462,0.616
c-0.264,0-0.374-0.132-0.506-0.418l-5.854-12.366h-6.028v1.496l1.144,0.22c0.265,0.066,0.309,0.243,0.309,0.396v10.43
c0,0.153-0.044,0.33-0.309,0.395l-1.144,0.221v1.496h4.995v-1.496l-1.123-0.221c-0.264-0.065-0.308-0.242-0.308-0.395V8.682
c0-0.375,0.044-0.595,0.462-0.595c0.286,0,0.374,0.11,0.506,0.418l5.897,12.542h4.532V8.505c0-0.153,0.045-0.33,0.309-0.396
L230.721,7.889z M237.274,14.645h4.378v2.265l2.751,4.137h3.234v-1.496l-0.858-0.198c-0.484-0.111-0.748-0.176-1.012-0.572
l-2.377-3.499c-0.109-0.154-0.197-0.264-0.197-0.44c0-0.352,0.264-0.397,0.572-0.44c0.836-0.087,1.693-0.375,2.266-1.012
c0.616-0.683,0.924-1.628,0.924-2.882c0-3.037-1.144-4.115-4.532-4.115h-8.89v1.496l1.145,0.22
c0.264,0.066,0.309,0.243,0.309,0.396v10.43c0,0.153-0.045,0.33-0.309,0.395l-1.145,0.221v1.496h5.172v-1.496l-1.123-0.221
c-0.264-0.065-0.308-0.242-0.308-0.395V14.645z M244.579,10.529c0,0.705-0.022,1.277-0.418,1.672
c-0.353,0.309-1.034,0.529-2.509,0.529h-4.378V8.329h4.378c1.475,0,2.156,0.198,2.509,0.529
C244.557,9.253,244.579,9.848,244.579,10.529 M255.314,21.047v-1.496l-1.122-0.221c-0.265-0.065-0.308-0.242-0.308-0.395V8.505
c0-0.153,0.043-0.33,0.308-0.396l1.122-0.22V6.393h-5.171v1.496l1.144,0.22c0.265,0.066,0.309,0.243,0.309,0.396v10.43
c0,0.153-0.044,0.33-0.309,0.395l-1.144,0.221v1.496H255.314z M270.363,20.563l-0.309-1.87c0,0-2.597,0.506-4.885,0.506
c-4.334,0-4.775-1.232-4.775-5.479c0-4.423,0.441-5.435,4.842-5.435c2.288,0,4.818,0.528,4.818,0.528l0.309-1.957
c0,0-2.575-0.639-5.392-0.639c-5.148,0-6.931,1.32-6.931,7.503c0,6.182,1.782,7.481,6.931,7.481
C267.788,21.201,270.363,20.563,270.363,20.563 M288.668,21.047v-1.496l-1.123-0.221c-0.264-0.065-0.308-0.242-0.308-0.395V8.505
c0-0.153,0.044-0.33,0.308-0.396l1.123-0.22V6.393h-5.172v1.496l1.145,0.22c0.264,0.066,0.309,0.243,0.309,0.396v4.159h-8.34V8.505
c0-0.153,0.045-0.33,0.309-0.396l1.122-0.22V6.393h-5.171v1.496l1.145,0.22c0.264,0.066,0.308,0.243,0.308,0.396v10.43
c0,0.153-0.044,0.33-0.308,0.395l-1.145,0.221v1.496h5.171v-1.496l-1.122-0.221c-0.264-0.065-0.309-0.242-0.309-0.395v-4.467h8.34
v4.467c0,0.153-0.045,0.33-0.309,0.395l-1.145,0.221v1.496H288.668z"/>
<path class="lh-blue-BG" clip-path="url(#SVGID_2_)" fill="#1564A1" d="M141.434,3.017l-7.937,20.977H0V3.017 M14.454,21.047v-1.98H7.149V8.505
c0-0.153,0.044-0.33,0.308-0.395l1.122-0.221V6.393h-5.17v1.496L4.553,8.11c0.264,0.065,0.308,0.242,0.308,0.395v10.43
c0,0.153-0.044,0.33-0.308,0.395l-1.144,0.221v1.496H14.454z M31.791,7.889V6.393H26.62v1.496l1.144,0.221
c0.264,0.065,0.309,0.242,0.309,0.395v10.254c0,0-1.937,0.506-4.445,0.506c-3.037,0-3.543-0.572-3.543-3.63v-7.13
c0-0.153,0.044-0.33,0.308-0.395l1.122-0.221V6.393h-5.17v1.496l1.144,0.221c0.264,0.065,0.308,0.242,0.308,0.395v7.415
c0,4.049,1.056,5.282,5.633,5.282c0.616,0,1.826-0.111,1.826-0.111l1.826-1.188c0.198-0.132,0.352-0.264,0.594-0.264
c0.419,0,0.463,0.309,0.506,0.484l0.154,0.924h3.455v-1.496l-1.122-0.221c-0.264-0.065-0.308-0.242-0.308-0.395V8.505
c0-0.153,0.044-0.33,0.308-0.395L31.791,7.889z M46.397,21.047v-1.959h-8.075v-4.597h7.811v-1.915h-7.811V8.352h8.075V6.393H34.582
v1.496l1.144,0.221c0.265,0.065,0.309,0.242,0.309,0.395v10.43c0,0.153-0.044,0.33-0.309,0.395l-1.144,0.221v1.496H46.397z
M64.68,21.047v-1.496l-1.122-0.221c-0.264-0.065-0.308-0.242-0.308-0.395V8.505c0-0.153,0.044-0.33,0.308-0.395l1.122-0.221V6.393
h-5.17v1.496l1.144,0.221c0.264,0.065,0.308,0.242,0.308,0.395v4.159h-8.339V8.505c0-0.153,0.044-0.33,0.308-0.395l1.122-0.221
V6.393h-5.171v1.496l1.144,0.221c0.264,0.065,0.308,0.242,0.308,0.395v10.43c0,0.153-0.044,0.33-0.308,0.395l-1.144,0.221v1.496
h5.171v-1.496l-1.122-0.221c-0.264-0.065-0.308-0.242-0.308-0.395v-4.467h8.339v4.467c0,0.153-0.044,0.33-0.308,0.395l-1.144,0.221
v1.496H64.68z M71.235,14.645h4.378v2.265l2.751,4.137h3.234v-1.496l-0.858-0.198c-0.484-0.11-0.748-0.176-1.012-0.571
l-2.377-3.499c-0.109-0.155-0.198-0.265-0.198-0.441c0-0.351,0.264-0.396,0.572-0.439c0.836-0.088,1.695-0.375,2.267-1.013
c0.616-0.683,0.924-1.628,0.924-2.882c0-3.037-1.144-4.115-4.533-4.115h-8.889v1.496l1.144,0.221
c0.264,0.065,0.308,0.242,0.308,0.395v10.43c0,0.153-0.044,0.33-0.308,0.395l-1.144,0.221v1.496h5.171v-1.496l-1.123-0.221
c-0.263-0.065-0.307-0.242-0.307-0.395V14.645z M78.539,10.53c0,0.704-0.022,1.276-0.418,1.671
c-0.352,0.309-1.034,0.529-2.508,0.529h-4.378V8.329h4.378c1.474,0,2.156,0.199,2.508,0.529
C78.517,9.253,78.539,9.848,78.539,10.53 M89.979,21.202c3.476,0,5.721-0.594,5.721-4.578c0-4.114-2.685-4.005-5.897-4.158
c-2.025-0.089-3.521,0.023-3.521-2.156c0-2.2,2.112-2.112,3.829-2.112c1.914,0,4.488,0.505,4.488,0.505l0.309-1.914
c0,0-2.443-0.55-5.171-0.55c-3.895,0-5.721,0.924-5.721,4.357c0,3.982,2.64,3.916,5.941,4.137c2.398,0.153,3.432-0.045,3.432,2.244
c0,2.244-1.98,2.244-3.674,2.244c-2.289,0-5.127-0.551-5.127-0.551l-0.264,1.938C84.324,20.608,86.92,21.202,89.979,21.202
M110.22,21.047v-1.959h-8.076v-4.597h7.811v-1.915h-7.811V8.352h8.076V6.393H98.404v1.496l1.144,0.221
c0.264,0.065,0.308,0.242,0.308,0.395v10.43c0,0.153-0.044,0.33-0.308,0.395l-1.144,0.221v1.496H110.22z M129.118,7.889V6.393
h-5.017v1.496l1.144,0.221c0.264,0.065,0.308,0.242,0.308,0.395v10.056c0,0.351-0.044,0.616-0.462,0.616
c-0.264,0-0.374-0.132-0.506-0.418l-5.853-12.366h-6.029v1.496l1.144,0.221c0.265,0.065,0.309,0.242,0.309,0.395v10.43
c0,0.153-0.044,0.33-0.309,0.395l-1.144,0.221v1.496h4.995v-1.496l-1.122-0.221c-0.264-0.065-0.308-0.242-0.308-0.395V8.682
c0-0.375,0.044-0.595,0.462-0.595c0.286,0,0.374,0.111,0.506,0.418l5.897,12.542h4.532V8.505c0-0.153,0.045-0.33,0.308-0.395
L129.118,7.889z"/>
<polygon class="lh-slashes" clip-path="url(#SVGID_2_)" fill="#010202" points="147.806,0 151.838,0 141.219,27.676 137.186,27.676 "/>
<polygon class="lh-slashes" clip-path="url(#SVGID_2_)" fill="#010202" points="160.828,0 164.861,0 154.242,27.676 150.21,27.676 "/>
</g>
<g clip-path="claim">
<path class="lh-claim" fill="#676767" d="M10.555,42.794l0.475-0.105c0.119-0.026,0.211-0.04,0.211-0.158c0-0.066-0.013-0.106-0.053-0.212
l-0.449-1.161H6.16l-0.476,1.188c-0.04,0.093-0.053,0.133-0.053,0.186c0,0.118,0.093,0.145,0.225,0.171l0.462,0.093v0.897H3.375
v-0.897l0.607-0.132c0.198-0.04,0.264-0.132,0.33-0.304l2.626-6.124c0.066-0.159,0.026-0.277-0.145-0.304l-0.7-0.119v-0.91h3.538
l2.97,7.457c0.105,0.237,0.185,0.264,0.422,0.316l0.554,0.119v0.897h-3.022V42.794z M8.787,36.194
c-0.079-0.198-0.119-0.304-0.317-0.304c-0.198,0-0.237,0.105-0.317,0.304l-1.557,3.881h3.722L8.787,36.194z"/>
<path class="lh-claim" fill="#676767" d="M21.062,43.691l-0.093-0.555c-0.026-0.105-0.053-0.29-0.303-0.29c-0.146,0-0.238,0.079-0.356,0.158
l-1.096,0.713c0,0-0.607,0.066-0.977,0.066c-2.996,0-3.867-0.739-3.867-4.475c0-3.775,1.082-4.487,4.158-4.487
c1.689,0,3.366,0.436,3.366,0.436l-0.172,1.174c0,0-1.861-0.356-3.3-0.356c-2.006,0-2.64,0.277-2.64,3.234
c0,2.996,0.475,3.286,2.547,3.286c1.214,0,2.099-0.172,2.429-0.251v-3.432h1.386v4.778H21.062z"/>
<path class="lh-claim" fill="#676767" d="M23.859,43.691v-0.897l0.687-0.132c0.158-0.04,0.185-0.146,0.185-0.238v-6.256
c0-0.093-0.026-0.198-0.185-0.237l-0.687-0.132v-0.897h7.088v1.174h-4.844v2.534h4.686v1.148h-4.686v2.759h4.844v1.175H23.859z"/>
<path class="lh-claim" fill="#676767" d="M41.599,35.931c-0.159,0.039-0.185,0.145-0.185,0.237v7.523h-2.719l-3.538-7.523
c-0.079-0.185-0.132-0.251-0.303-0.251c-0.251,0-0.277,0.132-0.277,0.356v6.15c0,0.093,0.026,0.198,0.185,0.238l0.673,0.132v0.897
h-2.996v-0.897l0.687-0.132c0.158-0.04,0.185-0.146,0.185-0.238v-6.256c0-0.093-0.026-0.198-0.185-0.237l-0.687-0.132v-0.897
h3.617l3.511,7.417c0.079,0.172,0.145,0.251,0.304,0.251c0.25,0,0.277-0.158,0.277-0.369v-6.032c0-0.093-0.026-0.198-0.185-0.237
l-0.687-0.132v-0.897h3.009v0.897L41.599,35.931z"/>
<path class="lh-claim" fill="#676767" d="M47.854,36.089v6.335c0,0.093,0.026,0.198,0.185,0.238l0.686,0.132v0.897h-3.115v-0.897l0.686-0.132
c0.159-0.04,0.185-0.146,0.185-0.238v-6.335h-3.287v-1.188h7.946v1.188H47.854z"/>
<path class="lh-claim" fill="#676767" d="M60.697,35.931c-0.158,0.039-0.185,0.145-0.185,0.237v6.256c0,0.093,0.026,0.198,0.185,0.238l0.673,0.132
v0.897h-2.072l-0.092-0.555c-0.026-0.105-0.053-0.29-0.304-0.29c-0.145,0-0.237,0.079-0.356,0.158l-1.095,0.713
c0,0-0.726,0.066-1.096,0.066c-2.745,0-3.379-0.739-3.379-3.168v-4.448c0-0.093-0.026-0.198-0.185-0.237l-0.687-0.132v-0.897
h3.102v0.897l-0.673,0.132c-0.158,0.039-0.185,0.145-0.185,0.237v4.276c0,1.835,0.304,2.178,2.125,2.178
c1.505,0,2.667-0.304,2.667-0.304v-6.15c0-0.093-0.026-0.198-0.185-0.237l-0.686-0.132v-0.897h3.102v0.897L60.697,35.931z"/>
<path class="lh-claim" fill="#676767" d="M65.29,42.424c0,0.093,0.026,0.198,0.185,0.238l0.673,0.132v0.897h-3.102v-0.897l0.687-0.132
c0.158-0.04,0.185-0.146,0.185-0.238v-6.256c0-0.093-0.026-0.198-0.185-0.237l-0.687-0.132v-0.897h5.333
c2.032,0,2.719,0.646,2.719,2.468c0,0.752-0.185,1.32-0.554,1.729c-0.343,0.383-0.858,0.554-1.359,0.606
c-0.185,0.026-0.343,0.053-0.343,0.265c0,0.105,0.053,0.171,0.119,0.264l1.425,2.099c0.159,0.237,0.317,0.277,0.607,0.343
l0.515,0.119v0.897h-1.94l-1.649-2.481v-1.359H65.29V42.424z M69.421,36.379c-0.211-0.197-0.62-0.316-1.504-0.316H65.29v2.64
h2.627c0.884,0,1.293-0.132,1.504-0.316c0.238-0.238,0.251-0.581,0.251-1.003C69.672,36.974,69.659,36.617,69.421,36.379z"/>
<path class="lh-claim" fill="#676767" d="M78.199,36.075v2.601h4.409v1.175h-4.409v2.573c0,0.093,0.026,0.198,0.185,0.238l0.673,0.132v0.897h-3.102
v-0.897l0.687-0.132c0.158-0.04,0.185-0.146,0.185-0.238v-6.256c0-0.093-0.026-0.198-0.185-0.237l-0.687-0.132v-0.897h6.811v1.174
H78.199z"/>
<path class="lh-claim" fill="#676767" d="M92.559,35.931c-0.158,0.039-0.185,0.145-0.185,0.237v6.256c0,0.093,0.026,0.198,0.185,0.238l0.673,0.132
v0.897H91.16l-0.092-0.555c-0.026-0.105-0.053-0.29-0.304-0.29c-0.145,0-0.237,0.079-0.356,0.158l-1.095,0.713
c0,0-0.726,0.066-1.096,0.066c-2.745,0-3.379-0.739-3.379-3.168v-4.448c0-0.093-0.026-0.198-0.185-0.237l-0.687-0.132v-0.897
h3.102v0.897l-0.673,0.132c-0.158,0.039-0.185,0.145-0.185,0.237v4.276c0,1.835,0.304,2.178,2.125,2.178
c1.505,0,2.667-0.304,2.667-0.304v-6.15c0-0.093-0.026-0.198-0.185-0.237l-0.686-0.132v-0.897h3.102v0.897L92.559,35.931z
M86.897,33.897V32.75h1.333v1.147H86.897z M89.141,33.897V32.75h1.333v1.147H89.141z"/>
<path class="lh-claim" fill="#676767" d="M97.152,42.424c0,0.093,0.026,0.198,0.185,0.238l0.673,0.132v0.897h-3.102v-0.897l0.687-0.132
c0.158-0.04,0.185-0.146,0.185-0.238v-6.256c0-0.093-0.026-0.198-0.185-0.237l-0.687-0.132v-0.897h5.333
c2.032,0,2.719,0.646,2.719,2.468c0,0.752-0.185,1.32-0.554,1.729c-0.343,0.383-0.858,0.554-1.359,0.606
c-0.185,0.026-0.343,0.053-0.343,0.265c0,0.105,0.053,0.171,0.119,0.264l1.425,2.099c0.159,0.237,0.317,0.277,0.607,0.343
l0.515,0.119v0.897h-1.94l-1.649-2.481v-1.359h-2.627V42.424z M101.284,36.379c-0.211-0.197-0.62-0.316-1.504-0.316h-2.627v2.64
h2.627c0.884,0,1.293-0.132,1.504-0.316c0.238-0.238,0.251-0.581,0.251-1.003C101.535,36.974,101.521,36.617,101.284,36.379z"/>
<path class="lh-claim" fill="#676767" d="M119.05,35.799l-0.687,0.132c-0.158,0.039-0.185,0.145-0.185,0.237v6.256c0,0.093,0.026,0.198,0.185,0.238
l0.687,0.132v0.897h-3.115v-0.897l0.687-0.132c0.158-0.04,0.185-0.146,0.185-0.238v-6.15c0-0.211-0.04-0.356-0.277-0.356
c-0.211,0-0.264,0.146-0.343,0.304l-1.94,4.514h-1.729l-1.993-4.566c-0.066-0.132-0.132-0.251-0.303-0.251
c-0.251,0-0.277,0.146-0.277,0.356v6.15c0,0.093,0.026,0.198,0.185,0.238l0.673,0.132v0.897h-2.983v-0.897l0.687-0.132
c0.158-0.04,0.185-0.146,0.185-0.238v-6.256c0-0.093-0.026-0.198-0.185-0.237l-0.687-0.132v-0.897h3.59l1.861,4.526
c0.026,0.04,0.053,0.093,0.132,0.093c0.066,0,0.105-0.053,0.119-0.093l1.834-4.526h3.696V35.799z"/>
<path class="lh-claim" fill="#676767" d="M120.739,43.691v-0.897l0.687-0.132c0.158-0.04,0.185-0.146,0.185-0.238v-6.256
c0-0.093-0.026-0.198-0.185-0.237l-0.687-0.132v-0.897h7.088v1.174h-4.844v2.534h4.686v1.148h-4.686v2.759h4.844v1.175H120.739z"
/>
<path class="lh-claim" fill="#676767" d="M134.308,43.691h-4.989v-0.897l0.687-0.132c0.158-0.04,0.185-0.146,0.185-0.238v-6.256
c0-0.093-0.026-0.198-0.185-0.237l-0.687-0.132v-0.897h4.989c3.537,0,3.788,1.821,3.788,4.382S137.845,43.691,134.308,43.691z
M134.281,36.062h-2.719v6.468h2.719c2.375,0,2.402-1.268,2.402-3.234C136.683,37.316,136.657,36.062,134.281,36.062z"/>
<path class="lh-claim" fill="#676767" d="M139.732,43.691v-0.897l0.687-0.132c0.158-0.04,0.185-0.146,0.185-0.238v-6.256
c0-0.093-0.026-0.198-0.185-0.237l-0.687-0.132v-0.897h3.102v0.897l-0.673,0.132c-0.159,0.039-0.185,0.145-0.185,0.237v6.256
c0,0.093,0.026,0.198,0.185,0.238l0.673,0.132v0.897H139.732z"/>
<path class="lh-claim" fill="#676767" d="M144.523,43.691v-0.897l0.687-0.132c0.158-0.04,0.185-0.146,0.185-0.238v-6.256
c0-0.093-0.026-0.198-0.185-0.237l-0.687-0.132v-0.897h7.088v1.174h-4.844v2.534h4.686v1.148h-4.686v2.759h4.844v1.175H144.523z"
/>
<path class="lh-claim" fill="#676767" d="M162.263,35.931c-0.158,0.039-0.185,0.145-0.185,0.237v7.523h-2.72l-3.537-7.523
c-0.079-0.185-0.132-0.251-0.304-0.251c-0.25,0-0.276,0.132-0.276,0.356v6.15c0,0.093,0.026,0.198,0.185,0.238l0.673,0.132v0.897
h-2.996v-0.897l0.687-0.132c0.158-0.04,0.185-0.146,0.185-0.238v-6.256c0-0.093-0.026-0.198-0.185-0.237l-0.687-0.132v-0.897
h3.616l3.511,7.417c0.08,0.172,0.146,0.251,0.304,0.251c0.251,0,0.277-0.158,0.277-0.369v-6.032c0-0.093-0.026-0.198-0.185-0.237
l-0.687-0.132v-0.897h3.01v0.897L162.263,35.931z"/>
<path class="lh-claim" fill="#676767" d="M172.875,35.799l-0.674,0.185c-0.211,0.053-0.329,0.105-0.475,0.251l-3.062,2.996l3.313,3.102
c0.277,0.264,0.304,0.29,0.633,0.356l0.476,0.092v0.911h-3.26v-0.897l0.383-0.066c0.132-0.026,0.25-0.053,0.25-0.211
c0-0.079-0.053-0.146-0.105-0.185l-2.468-2.31c-0.172-0.146-0.344-0.317-0.581-0.317c-0.33,0-0.422,0.186-0.422,0.488v2.23
c0,0.093,0.026,0.198,0.185,0.238l0.673,0.132v0.897h-3.102v-0.897l0.687-0.132c0.158-0.04,0.185-0.146,0.185-0.238v-6.256
c0-0.093-0.026-0.198-0.185-0.237l-0.687-0.132v-0.897h3.102v0.897l-0.673,0.132c-0.158,0.039-0.185,0.145-0.185,0.237v2.218
c0,0.304,0.092,0.488,0.422,0.488c0.237,0,0.423-0.158,0.581-0.317l2.376-2.349c0.053-0.053,0.079-0.093,0.079-0.172
c0-0.132-0.093-0.172-0.212-0.185l-0.369-0.053v-0.897h3.115V35.799z"/>
<path class="lh-claim" fill="#676767" d="M178.049,43.784c-3.512,0-3.907-0.964-3.907-4.475c0-3.775,0.541-4.501,3.894-4.501
c3.524,0,3.881,0.95,3.881,4.501S181.546,43.784,178.049,43.784z M178.035,35.957c-2.23,0-2.481,0.33-2.481,3.353
c0,2.864,0.185,3.312,2.495,3.312c2.362,0,2.454-0.475,2.454-3.312C180.503,36.551,180.477,35.957,178.035,35.957z"/>
<path class="lh-claim" fill="#676767" d="M194.785,35.799l-0.687,0.132c-0.158,0.039-0.185,0.145-0.185,0.237v6.256
c0,0.093,0.026,0.198,0.185,0.238l0.687,0.132v0.897h-3.115v-0.897l0.687-0.132c0.158-0.04,0.185-0.146,0.185-0.238v-6.15
c0-0.211-0.039-0.356-0.277-0.356c-0.211,0-0.264,0.146-0.343,0.304l-1.94,4.514h-1.729l-1.993-4.566
c-0.066-0.132-0.132-0.251-0.304-0.251c-0.251,0-0.277,0.146-0.277,0.356v6.15c0,0.093,0.026,0.198,0.185,0.238l0.674,0.132v0.897
h-2.983v-0.897l0.687-0.132c0.158-0.04,0.185-0.146,0.185-0.238v-6.256c0-0.093-0.026-0.198-0.185-0.237l-0.687-0.132v-0.897h3.59
l1.861,4.526c0.026,0.04,0.053,0.093,0.132,0.093c0.066,0,0.105-0.053,0.119-0.093l1.834-4.526h3.696V35.799z"/>
<path class="lh-claim" fill="#676767" d="M207.707,35.799l-0.687,0.132c-0.158,0.039-0.185,0.145-0.185,0.237v6.256
c0,0.093,0.026,0.198,0.185,0.238l0.687,0.132v0.897h-3.115v-0.897l0.687-0.132c0.158-0.04,0.185-0.146,0.185-0.238v-6.15
c0-0.211-0.039-0.356-0.277-0.356c-0.211,0-0.264,0.146-0.343,0.304l-1.94,4.514h-1.729l-1.993-4.566
c-0.066-0.132-0.132-0.251-0.304-0.251c-0.251,0-0.277,0.146-0.277,0.356v6.15c0,0.093,0.026,0.198,0.185,0.238l0.674,0.132v0.897
h-2.983v-0.897l0.687-0.132c0.158-0.04,0.185-0.146,0.185-0.238v-6.256c0-0.093-0.026-0.198-0.185-0.237l-0.687-0.132v-0.897h3.59
l1.861,4.526c0.026,0.04,0.053,0.093,0.132,0.093c0.066,0,0.105-0.053,0.119-0.093l1.834-4.526h3.696V35.799z"/>
<path class="lh-claim" fill="#676767" d="M218.042,35.931c-0.158,0.039-0.185,0.145-0.185,0.237v6.256c0,0.093,0.026,0.198,0.185,0.238l0.673,0.132
v0.897h-2.072l-0.093-0.555c-0.026-0.105-0.053-0.29-0.303-0.29c-0.146,0-0.238,0.079-0.356,0.158l-1.096,0.713
c0,0-0.726,0.066-1.096,0.066c-2.745,0-3.379-0.739-3.379-3.168v-4.448c0-0.093-0.026-0.198-0.185-0.237l-0.687-0.132v-0.897
h3.102v0.897l-0.673,0.132c-0.158,0.039-0.185,0.145-0.185,0.237v4.276c0,1.835,0.304,2.178,2.125,2.178
c1.505,0,2.666-0.304,2.666-0.304v-6.15c0-0.093-0.026-0.198-0.185-0.237l-0.687-0.132v-0.897h3.102v0.897L218.042,35.931z"/>
<path class="lh-claim" fill="#676767" d="M229.552,35.931c-0.158,0.039-0.185,0.145-0.185,0.237v7.523h-2.72l-3.537-7.523
c-0.079-0.185-0.132-0.251-0.304-0.251c-0.25,0-0.276,0.132-0.276,0.356v6.15c0,0.093,0.026,0.198,0.185,0.238l0.673,0.132v0.897
h-2.996v-0.897l0.687-0.132c0.158-0.04,0.185-0.146,0.185-0.238v-6.256c0-0.093-0.026-0.198-0.185-0.237l-0.687-0.132v-0.897
h3.616l3.511,7.417c0.08,0.172,0.146,0.251,0.304,0.251c0.251,0,0.277-0.158,0.277-0.369v-6.032c0-0.093-0.026-0.198-0.185-0.237
l-0.687-0.132v-0.897h3.01v0.897L229.552,35.931z"/>
<path class="lh-claim" fill="#676767" d="M231.928,43.691v-0.897l0.687-0.132c0.158-0.04,0.185-0.146,0.185-0.238v-6.256
c0-0.093-0.026-0.198-0.185-0.237l-0.687-0.132v-0.897h3.102v0.897l-0.673,0.132c-0.158,0.039-0.185,0.145-0.185,0.237v6.256
c0,0.093,0.026,0.198,0.185,0.238l0.673,0.132v0.897H231.928z"/>
<path class="lh-claim" fill="#676767" d="M244.955,35.799l-0.674,0.185c-0.211,0.053-0.329,0.105-0.475,0.251l-3.062,2.996l3.313,3.102
c0.277,0.264,0.304,0.29,0.633,0.356l0.476,0.092v0.911h-3.26v-0.897l0.383-0.066c0.132-0.026,0.25-0.053,0.25-0.211
c0-0.079-0.053-0.146-0.105-0.185l-2.468-2.31c-0.172-0.146-0.344-0.317-0.581-0.317c-0.33,0-0.422,0.186-0.422,0.488v2.23
c0,0.093,0.026,0.198,0.185,0.238l0.673,0.132v0.897h-3.102v-0.897l0.687-0.132c0.158-0.04,0.185-0.146,0.185-0.238v-6.256
c0-0.093-0.026-0.198-0.185-0.237l-0.687-0.132v-0.897h3.102v0.897l-0.673,0.132c-0.158,0.039-0.185,0.145-0.185,0.237v2.218
c0,0.304,0.092,0.488,0.422,0.488c0.237,0,0.423-0.158,0.581-0.317l2.376-2.349c0.053-0.053,0.079-0.093,0.079-0.172
c0-0.132-0.093-0.172-0.212-0.185l-0.369-0.053v-0.897h3.115V35.799z"/>
<path class="lh-claim" fill="#676767" d="M252.609,42.794l0.476-0.105c0.119-0.026,0.211-0.04,0.211-0.158c0-0.066-0.013-0.106-0.053-0.212
l-0.448-1.161h-4.58l-0.476,1.188c-0.039,0.093-0.053,0.133-0.053,0.186c0,0.118,0.093,0.145,0.225,0.171l0.462,0.093v0.897
h-2.943v-0.897l0.607-0.132c0.197-0.04,0.264-0.132,0.33-0.304l2.626-6.124c0.066-0.159,0.026-0.277-0.145-0.304l-0.7-0.119v-0.91
h3.537l2.97,7.457c0.106,0.237,0.186,0.264,0.423,0.316l0.555,0.119v0.897h-3.023V42.794z M250.841,36.194
c-0.079-0.198-0.118-0.304-0.316-0.304s-0.237,0.105-0.316,0.304l-1.558,3.881h3.722L250.841,36.194z"/>
<path class="lh-claim" fill="#676767" d="M260.358,36.089v6.335c0,0.093,0.026,0.198,0.185,0.238l0.687,0.132v0.897h-3.115v-0.897l0.687-0.132
c0.158-0.04,0.185-0.146,0.185-0.238v-6.335h-3.286v-1.188h7.945v1.188H260.358z"/>
<path class="lh-claim" fill="#676767" d="M264.556,43.691v-0.897l0.687-0.132c0.158-0.04,0.185-0.146,0.185-0.238v-6.256
c0-0.093-0.026-0.198-0.185-0.237l-0.687-0.132v-0.897h3.102v0.897l-0.673,0.132c-0.158,0.039-0.185,0.145-0.185,0.237v6.256
c0,0.093,0.026,0.198,0.185,0.238l0.673,0.132v0.897H264.556z"/>
<path class="lh-claim" fill="#676767" d="M273.201,43.784c-3.512,0-3.907-0.964-3.907-4.475c0-3.775,0.541-4.501,3.894-4.501
c3.524,0,3.881,0.95,3.881,4.501S276.698,43.784,273.201,43.784z M273.188,35.957c-2.23,0-2.481,0.33-2.481,3.353
c0,2.864,0.185,3.312,2.495,3.312c2.362,0,2.454-0.475,2.454-3.312C275.655,36.551,275.629,35.957,273.188,35.957z"/>
<path class="lh-claim" fill="#676767" d="M287.865,35.931c-0.158,0.039-0.185,0.145-0.185,0.237v7.523h-2.72l-3.537-7.523
c-0.079-0.185-0.132-0.251-0.304-0.251c-0.25,0-0.276,0.132-0.276,0.356v6.15c0,0.093,0.026,0.198,0.185,0.238l0.673,0.132v0.897
h-2.996v-0.897l0.687-0.132c0.158-0.04,0.185-0.146,0.185-0.238v-6.256c0-0.093-0.026-0.198-0.185-0.237l-0.687-0.132v-0.897
h3.616l3.511,7.417c0.08,0.172,0.146,0.251,0.304,0.251c0.251,0,0.277-0.158,0.277-0.369v-6.032c0-0.093-0.026-0.198-0.185-0.237
l-0.687-0.132v-0.897h3.01v0.897L287.865,35.931z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 22 KiB

View File

@@ -0,0 +1,78 @@
<?php
/*
* @package lh_fap
*/
class LH_Fap_Admin {
/**
* Construct the function.
*
* @access public
* @return void
*/
public function __construct(){
$this->action_dispatcher();
$this->filter_dispatcher();
}
/**
* Contains all called actions used by the plugin core.
*
* @access private
* @return void
*/
private function action_dispatcher(){
/* PHP Solution */
add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_scripts' ) );
//add_action( 'fap_media_tab_content', array( $this, 'custom_media_tab_content' ) );
/* /PHP */
}
/**
* Contains all called filters used by the plugin core.
*
* @access private
* @return void
*/
private function filter_dispatcher(){
/* PHP Solution */
//add_filter( 'fap_media_tab', array( $this, 'custom_media_tab' ) );
/* /PHP */
/* Backbone-JS Solution */
add_filter( 'media_view_strings', array( $this, 'fap_media_localisation'), 10, 2 );
/* /BBJS */
//add_filter( 'media_upload_tabs', array($this, 'custom_media_upload_tab_name') );
}
public function fap_media_localisation($strings, $post){
$strings['menuTitle'] = __('Free Images', 'fap');
$strings['addToLibrary'] = __('Insert into Library', 'fap');
$strings['pluginUrl'] = LHFAP__PLUGIN_URL;
return $strings;
}
/**
* Enqueue the neccecary scripts in the admin panel.
*
* @access public
* @return void
*/
public function enqueue_scripts(){
global $pagenow, $post_type;
$screen = get_current_screen();
if( $pagenow === "post.php" || $pagenow === "post-new.php" ) {
// Only load the scripts when we ACTUALLY need them.
wp_register_script( 'lh_fap_admin', LHFAP__PLUGIN_URL . 'js/fap.min.js', array("jquery"), NULL, true);
wp_enqueue_script( 'lh_fap_admin' );
wp_register_style( 'lh_fap_style', LHFAP__PLUGIN_URL . 'css/admin.css', NULL, 1, 'all' );
wp_enqueue_style( 'lh_fap_style' );
}
//wp_register_style( 'lh_event_admin', LHEVENT__PLUGIN_URL . 'css/admin.css', NULL, 1, 'all');
//wp_enqueue_style( 'lh_event_admin' );
}
}

View File

@@ -0,0 +1,49 @@
<?php
/*
* @package lh_fap
*/
class LH_Fap_Plugin {
/**
* Construct the function.
*
* @access public
* @return void
*/
public function __construct(){
$this->action_dispatcher();
$this->filter_dispatcher();
if(is_admin()){
// Initialize the admin stuff
$this->admin = new LH_Fap_Admin();
// Initialize the importer
$this->importer = new LH_Fap_Import();
}
}
/**
* Contains all called actions used by the plugin core.
*
* @access private
* @return void
*/
private function action_dispatcher(){
add_action( 'init', array($this, 'do_stuff_on_init') );
}
/**
* Contains all called filters used by the plugin core.
*
* @access private
* @return void
*/
private function filter_dispatcher(){}
public function do_stuff_on_init(){
// i18n
load_plugin_textdomain('lhf', false, dirname(plugin_basename(LHFAP__PLUGIN_FILE)) . '/lang' );
}
}

View File

@@ -0,0 +1,214 @@
<?php
/*
* @package lh_fap
*/
/**
* The importer class that handles the sideloading of the images from the api endpoint.
*/
class LH_Fap_Import {
private $_apiUrl = "http://www.free-images.cc/wp-json";
/**
* The constructor of this class.
*
* @access public
* @return void
*/
public function __construct(){
$this->action_dispatcher();
$this->filter_dispatcher();
}
/**
* The function that dispatches all used actions by this class.
*
* @access private
* @return void
*/
private function action_dispatcher(){
add_action('wp_ajax_import_image', array( $this, 'import_image' ) );
add_action('wp_ajax_list_images', array( $this, 'list_images' ) );
}
/**
* The function that dispatches all used filters by this class.
*
* @access private
* @return void
*/
private function filter_dispatcher(){
}
/**
* The ajax call, that actually imports the image.
*
* @access public
* @return void
*/
public function import_image(){
$image_id = isset($_GET['image_id']) ? intval($_REQUEST['image_id']) : null;
$post_id = isset($_GET['post_id']) ? intval($_REQUEST['post_id']) : null;
$response = array(
"error" => true,
"msg" => __("An unknown error occured!", "lhf"),
);
// If the current user cannot upload files, die with an error message
if(!current_user_can("upload_files")){
http_response_code(401);
$response['msg'] = __("I'm sorry Dave, I'm afraid I can't do that. (Insufficient permissions!)", "lhf");
$this->json_response($response);
die();
}
if(!$image_id){
http_response_code(401);
$this->json_response($response);
die();
}
if($image_id){
// Check if we already have an image with that FAP ID in the database
$qry = new WP_Query(array(
"post_type" => 'attachment',
'post_status' => 'any',
"meta_query" => array(
array(
"key" => '_fap_id',
"value" => $image_id,
),
),
));
// If that query returns any results, die with the error message, including
if($qry->have_posts()){
http_response_code(400);
$response['msg'] = __("An image with that ID is already in the database!", "lhf");
$response['attachment_id'] = $qry->posts[0]->ID;
$this->json_response($response);
die();
}
// Download the data from the api
$json_data = $this->curl_download($this->_apiUrl . "/image/" . $image_id . "/");
if($json_data['header']['http_code'] !== 200){
http_response_code($json_data['header']['http_code']);
$response['msg'] = __("An image with that ID could not be retrieved!", "lhf");
$this->json_response($response);
die();
}
// At this point we should have working data from our API
$body = json_decode($json_data['body']);
$id = $this->add_to_library($body->data[0], $post_id);
if($id){
$response = array(
"error" => false,
"msg" => __("The image has been successfully added.", "lhf"),
"image_id" => $id,
);
}
}
$this->json_response($response);
die();
}
public function list_images(){
$response = array(
"success" => false,
);
$search_term = isset($_GET['s']) ? ($_REQUEST['s']) : null;
$paged = isset($_GET['paged']) ? intval($_REQUEST['paged']) : null;
$api_url = $this->_apiUrl . "/image/";
$api_url = add_query_arg(array(
"paged" => $paged,
"s" => $search_term,
), $api_url);
$json_data = $this->curl_download($api_url);
if($json_data){
$response = json_decode($json_data['body']);
}
$this->json_response($response);
die();
}
/**
* add_to_library function.
*
* @access private
* @param mixed $data
* @return void
*/
private function add_to_library($data, $post_id){
if(isset($data->url) && !filter_var($data->url, FILTER_VALIDATE_URL) === false){
// The download URL is legal
$tmp = download_url( $data->url );
if( is_wp_error( $tmp ) ){
// download failed, handle error
}
$desc = $data->title;
$file_array = array();
// Set variables for storage
// fix file filename for query strings
preg_match('/[^\?]+\.(jpg|jpeg|gif|png)/i', $data->url, $matches);
$file_array['name'] = basename($matches[0]);
$file_array['tmp_name'] = $tmp;
// If error storing temporarily, unlink
if ( is_wp_error( $tmp ) ) {
@unlink($file_array['tmp_name']);
$file_array['tmp_name'] = '';
}
$post_data = array(
'post_content' => sprintf(__("by %s via free-images.cc", "lhf"), $data->author),
);
// do the validation and storage stuff
$id = media_handle_sideload( $file_array, $post_id, $desc, $post_data );
// If error storing permanently, unlink
if ( is_wp_error($id) ) {
@unlink($file_array['tmp_name']);
return $id;
} else {
$res = update_post_meta($id, '_fap_id', $data->id);
}
return $id;
}
return false;
}
/**
* Make sure we have a legal json response.
*
* @access private
* @param mixed $response
* @return void
*/
private function json_response($response){
header('Content-Type: application/json');
echo json_encode($response);
}
/**
* Handle the downloading of the url.
*
* @access private
* @param mixed $url
* @return void
*/
private function curl_download($url){
// is cURL installed yet?
if (!function_exists('curl_init')){
die('Sorry cURL is not installed!');
}
// OK cool - then let's create a new cURL resource handle
$ch = curl_init();
// Now set some options (most are optional)
// Set URL to download
curl_setopt($ch, CURLOPT_URL, $url);
// Set a referer
curl_setopt($ch, CURLOPT_REFERER, get_bloginfo("url"));
// User agent
curl_setopt($ch, CURLOPT_USERAGENT, "MozillaXYZ/1.0");
// Include header in result? (0 = yes, 1 = no)
curl_setopt($ch, CURLOPT_HEADER, 0);
// Should cURL return or print out the data? (true = return, false = print)
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// Timeout in seconds
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
// Download the given URL, and return output
$output = curl_exec($ch);
// Get the connection info
$info = curl_getinfo($ch);
// Close the cURL resource, and free system resources
curl_close($ch);
return array(
"body" => $output,
"header" => $info,
);
}
}

View File

@@ -0,0 +1,120 @@
<?php
function fap_mediaview_templates() {
?>
<script type="text/html" id="tmpl-fap-image-upload">
<div class="progress-container">
<ul class="progress">
<li data-name="CSS Skill" data-percent="100%">
<svg viewBox="-10 -10 220 220">
<g fill="none" stroke-width="6" transform="translate(100,100)">
<path d="M 0,-100 A 100,100 0 0,1 86.6,-50" stroke="url(#cl1)"/>
<path d="M 86.6,-50 A 100,100 0 0,1 86.6,50" stroke="url(#cl2)"/>
<path d="M 86.6,50 A 100,100 0 0,1 0,100" stroke="url(#cl3)"/>
<path d="M 0,100 A 100,100 0 0,1 -86.6,50" stroke="url(#cl4)"/>
<path d="M -86.6,50 A 100,100 0 0,1 -86.6,-50" stroke="url(#cl5)"/>
<path d="M -86.6,-50 A 100,100 0 0,1 0,-100" stroke="url(#cl6)"/>
</g>
</svg>
<svg viewBox="-10 -10 220 220">
<path d="M200,100 C200,44.771525 155.228475,0 100,0 C44.771525,0 0,44.771525 0,100 C0,155.228475 44.771525,200 100,200 C155.228475,200 200,155.228475 200,100 Z" stroke-dashoffset="629"></path>
</svg>
<span class="dashicons dashicons-yes"></span>
</li>
</ul>
<!-- Defining Angle Gradient Colors -->
<svg width="0" height="0">
<defs>
<linearGradient id="cl1" gradientUnits="objectBoundingBox" x1="0" y1="0" x2="1" y2="1">
<stop stop-color="#e67724"/>
<stop offset="100%" stop-color="#e7642f"/>
</linearGradient>
<linearGradient id="cl2" gradientUnits="objectBoundingBox" x1="0" y1="0" x2="0" y2="1">
<stop stop-color="#e7642f"/>
<stop offset="100%" stop-color="#e85139"/>
</linearGradient>
<linearGradient id="cl3" gradientUnits="objectBoundingBox" x1="1" y1="0" x2="0" y2="1">
<stop stop-color="#e85139"/>
<stop offset="100%" stop-color="#e85139"/>
</linearGradient>
<linearGradient id="cl4" gradientUnits="objectBoundingBox" x1="1" y1="1" x2="0" y2="0">
<stop stop-color="#e85139"/>
<stop offset="100%" stop-color="#e7652e"/>
</linearGradient>
<linearGradient id="cl5" gradientUnits="objectBoundingBox" x1="0" y1="1" x2="0" y2="0">
<stop stop-color="#e7652e"/>
<stop offset="100%" stop-color="#e67824"/>
</linearGradient>
<linearGradient id="cl6" gradientUnits="objectBoundingBox" x1="0" y1="1" x2="1" y2="0">
<stop stop-color="#e67824"/>
<stop offset="100%" stop-color="#e67724"/>
</linearGradient>
</defs>
</svg>
</div>
</script>
<script type="text/html" id="tmpl-fap-image-details">
<h3>
<?php _e('Attachment Details'); ?>
</h3>
<div class="attachment-info">
<div class="thumbnail thumbnail-{{ data.type }}">
<# if ( 'image' === data.type && data.sizes ) { #>
<img src="{{ data.size.url }}" draggable="false" />
<# } else { #>
<img src="{{ data.icon }}" class="icon" draggable="false" />
<# } #>
</div>
<div class="details">
<div class="filename">{{ data.filename }}</div>
<div class="uploaded">{{ data.dateFormatted }}</div>
<div class="file-size">{{ data.filesizeHumanReadable }}</div>
<# if ( 'image' === data.type && ! data.uploading ) { #>
<# if ( data.width && data.height ) { #>
<div class="dimensions">{{ data.width }} &times; {{ data.height }}</div>
<a href="{{ data.link }}?utm_source=fap-plugin&utm_medium=preview&utm_campaign=media-preview&utm_term=preview" target="_blank">Preview</a>
<# } #>
<# } #>
<# if ( data.fileLength ) { #>
<div class="file-length"><?php _e( 'Length:' ); ?> {{ data.fileLength }}</div>
<# } #>
<div class="compat-meta">
<# if ( data.compat && data.compat.meta ) { #>
{{{ data.compat.meta }}}
<# } #>
</div>
</div>
</div>
<label class="setting" data-setting="url">
<span class="name"><?php _e('URL'); ?></span>
<input type="text" value="{{ data.size.url }}" readonly />
</label>
<# var maybeReadOnly = data.can.save || data.allowLocalEdits ? '' : 'readonly'; #>
<label class="setting" data-setting="title">
<span class="name"><?php _e('Title'); ?></span>
<input type="text" value="{{ data.title }}" {{ maybeReadOnly }} />
</label>
</script>
<script type="text/html" id="tmpl-lh-logo">
<div class="lh-logo">
<a href="http://www.luehrsen-heinrich.de/?utm_source=fap-plugin&utm_medium=banner&utm_campaign=media-banner&utm_term=banner" target="_blank">
<img src="<?=LHFAP__PLUGIN_URL?>img/lh_logo_head.svg" alt="Luehrsen // Heinrich GmbH" title="Luehrsen // Heinrich GmbH">
</a>
</div>
</script>
<?php
}
add_action('print_media_templates', 'fap_mediaview_templates');

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,85 @@
=== free-images.cc Importer ===
Contributors: luehrsen, ckanitz
Donate link: https://www.paypal.com/de/cgi-bin/webscr?cmd=_xclick&business=paypal@luehrsen-heinrich.de&item_name=free-images.cc%20Donation&currency_code=EUR
Tags: free, images, image, pictures, media, import, creative commons, free-images, free images
Requires at least: 4.0
Tested up to: 4.4
Stable tag: 0.6.2
License: GNU General Public License v2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
This plugin integrates the free-images.cc image library directly into your media browser.
== Description ==
Unfortunatly the free-images.cc importer will be shut down on 1st August 2017. We have decided to discontinue our plugin, because we do not find the time to keep it up to date and we do not want to burden you with an outdated, maybe insecure plugin.
Our website ( http://free-images.cc ), however, will stay online and provide marvelous cc0 licenced images for you.
Thank you all for your support! :)
------
Over the last years the creative commons movement gained traction and more and more artists followed the trend of committing their work to public domain. We believe that this will contribute to making the web a better, more beautiful place.
But we dont want to be one of many. There are several aspects, that will make [free-images.cc](http://www.free-images.cc) superior to many other sites out there. Not only do we curate the images and publish only the creme de la creme. Every image is carefully tagged for better discoverability and every photographer is named and honored.
Every free image uploaded here will be under the CC0 Public Domain license. So every image will be free to use for whatever purpose you want!
We are always keen for improvement and new artists, that publish their work under the creative commons public domain license. If you have any feedback or tips for great, free images, drop us a mail at contact@free-images.cc!
This plugin is brought to you by the awesome folks at [Luehrsen // Heinrich](http://www.luehrsen-heinrich.de).
== Installation ==
1. Upload the fap_importer folder to the /wp-content/plugins/ directory
2. Activate the 'free-images.cc Importer' plugin through the 'Plugins' menu in WordPress
3. Import your first image in the admin media screen
== Frequently Asked Questions ==
= Where are these images coming from? =
All of our images are coming from incredibly talented photographers from all over the world. The released their work to public domain and that allows us to add it to the library, to bring these works directly into your WordPress backend.
= Why are these images free? =
Because they are released under the [CC0 Public Domain license](https://creativecommons.org/publicdomain/zero/1.0/). The photographer made them free to use for everyone around the world.
= Are there any restrictions on the usage? =
Technically no. That means, that you can do whatever you want with these images without having to give attribution to the photographer or free-images.cc.
We just kindly ask you not to use these images for pornographic, criminal, defamatory or degrading purposes.
== Screenshots ==
1. The "free images" tab shows up directly in your media browser.
== Changelog ==
= 0.6.2 =
Unfortunatly the free-images.cc importer will be shut down on 1st August 2017. We have decided to discontinue our plugin, because we do not find the time to keep it up to date and we do not want to burden you with an outdated, maybe insecure plugin.
Our website ( http://free-images.cc ), however, will stay online and provide marvelous cc0 licenced images for you.
Thank you all for your support! :)
= 0.6.0 =
Added a live-search.
Added lazy load depending on the viewport.
Added a preview button within the sidebar.
Implemented client-caching to prevent long loads and/or timeouts.
Rewrote part of the JS-Core for a better workflow.
Changed template behavior.
Fixed a bug where our upload-spinner appeared in new opened media-frames sometimes.
= 0.5.2 =
Frame reload fix to ensure a reload of the local media collection.
Small template changes.
= 0.5.1 =
Template fix to work proper with php shorttag.
= 0.5 =
Initial Release

View File

@@ -1,2 +1,3 @@
<?php
// Silence is golden.
?>

View File

@@ -0,0 +1,8 @@
.git/
.gitignore
.travis.yml
readme.md
tests/
_inc/lib/icalendar-reader.php
modules/shortcodes/upcoming-events.php
modules/widgets/upcoming-events.php

View File

@@ -0,0 +1,31 @@
<?php
/**
* Compatibility files for third-party plugins.
* This is used to improve compatibility of specific Jetpack features with third-party plugins.
*
* @package Jetpack
*/
// Array of third-party compat files to always require.
$compat_files = array(
'bbpress.php',
'beaverbuilder.php',
'bitly.php',
'buddypress.php',
'class.jetpack-amp-support.php',
'class.jetpack-modules-overrides.php', // Special case. Tools to be used to override module settings.
'debug-bar.php',
'domain-mapping.php',
'polldaddy.php',
'qtranslate-x.php',
'vaultpress.php',
'wpml.php',
'woocommerce.php',
'woocommerce-services.php',
);
foreach ( $compat_files as $file ) {
if ( file_exists( JETPACK__PLUGIN_DIR . '/3rd-party/' . $file ) ) {
require_once JETPACK__PLUGIN_DIR . '/3rd-party/' . $file;
}
}

View File

@@ -0,0 +1,50 @@
<?php
add_action( 'init', 'jetpack_bbpress_compat', 11 ); // Priority 11 needed to ensure sharing_display is loaded.
/**
* Adds Jetpack + bbPress Compatibility filters.
*
* @author Brandon Kraft
* @since 3.7.1
*/
function jetpack_bbpress_compat() {
if ( function_exists( 'sharing_display' ) ) {
add_filter( 'bbp_get_topic_content', 'sharing_display', 19 );
add_action( 'bbp_template_after_single_forum', 'jetpack_sharing_bbpress' );
add_action( 'bbp_template_after_single_topic', 'jetpack_sharing_bbpress' );
}
/**
* Enable Markdown support for bbpress post types.
*
* @author Brandon Kraft
* @since 6.0.0
*/
if ( function_exists( 'bbp_get_topic_post_type' ) ) {
add_post_type_support( bbp_get_topic_post_type(), 'wpcom-markdown' );
add_post_type_support( bbp_get_reply_post_type(), 'wpcom-markdown' );
add_post_type_support( bbp_get_forum_post_type(), 'wpcom-markdown' );
}
/**
* Use Photon for all images in Topics and replies.
*
* @since 4.9.0
*/
if ( class_exists( 'Jetpack_Photon' ) && Jetpack::is_module_active( 'photon' ) ) {
add_filter( 'bbp_get_topic_content', array( 'Jetpack_Photon', 'filter_the_content' ), 999999 );
add_filter( 'bbp_get_reply_content', array( 'Jetpack_Photon', 'filter_the_content' ), 999999 );
}
}
/**
* Display Jetpack "Sharing" buttons on bbPress 2.x forums/ topics/ lead topics/ replies.
*
* Determination if the sharing buttons should display on the post type is handled within sharing_display().
*
* @author David Decker
* @since 3.7.0
*/
function jetpack_sharing_bbpress() {
sharing_display( null, true );
}

View File

@@ -0,0 +1,20 @@
<?php
/**
* Beaverbuilder Compatibility.
*/
class Jetpack_BeaverBuilderCompat {
function __construct() {
add_action( 'init', array( $this, 'beaverbuilder_refresh' ) );
}
/**
* If masterbar module is active force BeaverBuilder to refresh when publishing a layout.
*/
function beaverbuilder_refresh() {
if ( Jetpack::is_module_active( 'masterbar' ) ) {
add_filter( 'fl_builder_should_refresh_on_publish', '__return_true' );
}
}
}
new Jetpack_BeaverBuilderCompat();

View File

@@ -0,0 +1,34 @@
<?php
/*
* Fixes issues with the Official Bitly for WordPress
* https://wordpress.org/plugins/bitly/
*/
if( class_exists( 'Bitly' ) ) {
if( isset( $GLOBALS['bitly'] ) ) {
if ( method_exists( $GLOBALS['bitly'], 'og_tags' ) ) {
remove_action( 'wp_head', array( $GLOBALS['bitly'], 'og_tags' ) );
}
add_action( 'wp_head', 'jetpack_bitly_og_tag', 100 );
}
}
/**
* jetpack_bitly_og_tag
*
* @return null
*/
function jetpack_bitly_og_tag() {
if( has_filter( 'wp_head', 'jetpack_og_tags') === false ) {
// Add the bitly part again back if we don't have any jetpack_og_tags added
if ( method_exists( $GLOBALS['bitly'], 'og_tags' ) ) {
$GLOBALS['bitly']->og_tags();
}
} elseif ( isset( $GLOBALS['posts'] ) && $GLOBALS['posts'][0]->ID > 0 ) {
printf( "<meta property=\"bitly:url\" content=\"%s\" /> \n", esc_attr( $GLOBALS['bitly']->get_bitly_link_for_post_id( $GLOBALS['posts'][0]->ID ) ) );
}
}

View File

@@ -0,0 +1,9 @@
<?php
add_filter( 'bp_core_pre_avatar_handle_upload', 'blobphoto' );
function blobphoto( $bool ) {
add_filter( 'jetpack_photon_skip_image', '__return_true' );
return $bool;
}

View File

@@ -0,0 +1,443 @@
<?php //phpcs:ignore WordPress.Files.FileName.InvalidClassFileName
use Automattic\Jetpack\Sync\Functions;
/**
* Manages compatibility with the amp-wp plugin
*
* @see https://github.com/Automattic/amp-wp
*/
class Jetpack_AMP_Support {
/**
* Apply custom AMP changes onthe frontend.
*/
public static function init() {
// Add Stats tracking pixel on Jetpack sites when the Stats module is active.
if (
Jetpack::is_module_active( 'stats' )
&& ! ( defined( 'IS_WPCOM' ) && IS_WPCOM )
) {
add_action( 'amp_post_template_footer', array( 'Jetpack_AMP_Support', 'add_stats_pixel' ) );
}
// Sharing.
add_filter( 'jetpack_sharing_display_markup', array( 'Jetpack_AMP_Support', 'render_sharing_html' ), 10, 2 );
add_filter( 'sharing_enqueue_scripts', array( 'Jetpack_AMP_Support', 'amp_disable_sharedaddy_css' ) );
// enforce freedom mode for videopress.
add_filter( 'videopress_shortcode_options', array( 'Jetpack_AMP_Support', 'videopress_enable_freedom_mode' ) );
// include Jetpack og tags when rendering native AMP head.
add_action( 'amp_post_template_head', array( 'Jetpack_AMP_Support', 'amp_post_jetpack_og_tags' ) );
// Post rendering changes for legacy AMP.
add_action( 'pre_amp_render_post', array( 'Jetpack_AMP_Support', 'amp_disable_the_content_filters' ) );
// Add post template metadata for legacy AMP.
add_filter( 'amp_post_template_metadata', array( 'Jetpack_AMP_Support', 'amp_post_template_metadata' ), 10, 2 );
// Filter photon image args for AMP Stories.
add_filter( 'jetpack_photon_post_image_args', array( 'Jetpack_AMP_Support', 'filter_photon_post_image_args_for_stories' ), 10, 2 );
}
/**
* Apply custom AMP changes in wp-admin.
*/
public static function admin_init() {
// disable Likes metabox for post editor if AMP canonical disabled.
add_filter( 'post_flair_disable', array( 'Jetpack_AMP_Support', 'is_amp_canonical' ), 99 );
}
/**
* Is the page in AMP 'canonical mode'.
* Used when themes register support for AMP with `add_theme_support( 'amp' )`.
*
* @return bool is_amp_canonical
*/
public static function is_amp_canonical() {
return function_exists( 'amp_is_canonical' ) && amp_is_canonical();
}
/**
* Does the page return AMP content.
*
* @return bool $is_amp_request Are we on am AMP view.
*/
public static function is_amp_request() {
$is_amp_request = ( function_exists( 'is_amp_endpoint' ) && is_amp_endpoint() );
/**
* Returns true if the current request should return valid AMP content.
*
* @since 6.2.0
*
* @param boolean $is_amp_request Is this request supposed to return valid AMP content?
*/
return apply_filters( 'jetpack_is_amp_request', $is_amp_request );
}
/**
* Remove content filters added by Jetpack.
*/
public static function amp_disable_the_content_filters() {
if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
add_filter( 'videopress_show_2015_player', '__return_true' );
add_filter( 'protected_embeds_use_form_post', '__return_false' );
remove_filter( 'the_title', 'widont' );
}
remove_filter( 'pre_kses', array( 'Filter_Embedded_HTML_Objects', 'filter' ), 11 );
remove_filter( 'pre_kses', array( 'Filter_Embedded_HTML_Objects', 'maybe_create_links' ), 100 );
}
/**
* Add Jetpack stats pixel.
*
* @since 6.2.1
*/
public static function add_stats_pixel() {
if ( ! has_action( 'wp_footer', 'stats_footer' ) ) {
return;
}
stats_render_amp_footer( stats_build_view_data() );
}
/**
* Add publisher and image metadata to legacy AMP post.
*
* @since 6.2.0
*
* @param array $metadata Metadata array.
* @param WP_Post $post Post.
* @return array Modified metadata array.
*/
public static function amp_post_template_metadata( $metadata, $post ) {
if ( isset( $metadata['publisher'] ) && ! isset( $metadata['publisher']['logo'] ) ) {
$metadata = self::add_site_icon_to_metadata( $metadata );
}
if ( ! isset( $metadata['image'] ) ) {
$metadata = self::add_image_to_metadata( $metadata, $post );
}
return $metadata;
}
/**
* Add blavatar to legacy AMP post metadata.
*
* @since 6.2.0
*
* @param array $metadata Metadata.
*
* @return array Metadata.
*/
private static function add_site_icon_to_metadata( $metadata ) {
$size = 60;
$site_icon_url = class_exists( 'Automattic\\Jetpack\\Sync\\Functions' ) ? Functions::site_icon_url( $size ) : '';
if ( function_exists( 'blavatar_domain' ) ) {
$metadata['publisher']['logo'] = array(
'@type' => 'ImageObject',
'url' => blavatar_url( blavatar_domain( site_url() ), 'img', $size, self::staticize_subdomain( 'https://wordpress.com/i/favicons/apple-touch-icon-60x60.png' ) ),
'width' => $size,
'height' => $size,
);
} elseif ( $site_icon_url ) {
$metadata['publisher']['logo'] = array(
'@type' => 'ImageObject',
'url' => $site_icon_url,
'width' => $size,
'height' => $size,
);
}
return $metadata;
}
/**
* Add image to legacy AMP post metadata.
*
* @since 6.2.0
*
* @param array $metadata Metadata.
* @param WP_Post $post Post.
* @return array Metadata.
*/
private static function add_image_to_metadata( $metadata, $post ) {
$image = Jetpack_PostImages::get_image(
$post->ID,
array(
'fallback_to_avatars' => true,
'avatar_size' => 200,
// AMP already attempts these.
'from_thumbnail' => false,
'from_attachment' => false,
)
);
if ( empty( $image ) ) {
return self::add_fallback_image_to_metadata( $metadata );
}
if ( ! isset( $image['src_width'] ) ) {
$dimensions = self::extract_image_dimensions_from_getimagesize(
array(
$image['src'] => false,
)
);
if ( false !== $dimensions[ $image['src'] ] ) {
$image['src_width'] = $dimensions['width'];
$image['src_height'] = $dimensions['height'];
}
}
$metadata['image'] = array(
'@type' => 'ImageObject',
'url' => $image['src'],
);
if ( isset( $image['src_width'] ) ) {
$metadata['image']['width'] = $image['src_width'];
}
if ( isset( $image['src_width'] ) ) {
$metadata['image']['height'] = $image['src_height'];
}
return $metadata;
}
/**
* Add fallback image to legacy AMP post metadata.
*
* @since 6.2.0
*
* @param array $metadata Metadata.
* @return array Metadata.
*/
private static function add_fallback_image_to_metadata( $metadata ) {
/** This filter is documented in functions.opengraph.php */
$default_image = apply_filters( 'jetpack_open_graph_image_default', 'https://wordpress.com/i/blank.jpg' );
$metadata['image'] = array(
'@type' => 'ImageObject',
'url' => self::staticize_subdomain( $default_image ),
'width' => 200,
'height' => 200,
);
return $metadata;
}
/**
* Return static WordPress.com domain to use to load resources from WordPress.com.
*
* @param string $domain Asset URL.
*/
private static function staticize_subdomain( $domain ) {
// deal with WPCOM vs Jetpack.
if ( function_exists( 'staticize_subdomain' ) ) {
return staticize_subdomain( $domain );
} else {
return Jetpack::staticize_subdomain( $domain );
}
}
/**
* Extract image dimensions via wpcom/imagesize, only on WPCOM
*
* @since 6.2.0
*
* @param array $dimensions Dimensions.
* @return array Dimensions.
*/
private static function extract_image_dimensions_from_getimagesize( $dimensions ) {
if ( ! ( defined( 'IS_WPCOM' ) && IS_WPCOM && function_exists( 'require_lib' ) ) ) {
return $dimensions;
}
require_lib( 'wpcom/imagesize' );
foreach ( $dimensions as $url => $value ) {
if ( is_array( $value ) ) {
continue;
}
$result = wpcom_getimagesize( $url );
if ( is_array( $result ) ) {
$dimensions[ $url ] = array(
'width' => $result[0],
'height' => $result[1],
);
}
}
return $dimensions;
}
/**
* Display Open Graph Meta tags in AMP views.
*/
public static function amp_post_jetpack_og_tags() {
if ( ! ( defined( 'IS_WPCOM' ) && IS_WPCOM ) ) {
Jetpack::init()->check_open_graph();
}
if ( function_exists( 'jetpack_og_tags' ) ) {
jetpack_og_tags();
}
}
/**
* Force Freedom mode in VideoPress.
*
* @param array $options Array of VideoPress shortcode options.
*/
public static function videopress_enable_freedom_mode( $options ) {
if ( self::is_amp_request() ) {
$options['freedom'] = true;
}
return $options;
}
/**
* Display custom markup for the sharing buttons when in an AMP view.
*
* @param string $markup Content markup of the Jetpack sharing links.
* @param array $sharing_enabled Array of Sharing Services currently enabled.
*/
public static function render_sharing_html( $markup, $sharing_enabled ) {
if ( ! self::is_amp_request() ) {
return $markup;
}
remove_action( 'wp_footer', 'sharing_add_footer' );
if ( empty( $sharing_enabled ) ) {
return $markup;
}
$supported_services = array(
'facebook' => array(
/** This filter is documented in modules/sharedaddy/sharing-sources.php */
'data-param-app_id' => apply_filters( 'jetpack_sharing_facebook_app_id', '249643311490' ),
),
'twitter' => array(),
'pinterest' => array(),
'whatsapp' => array(),
'tumblr' => array(),
'linkedin' => array(),
);
$sharing_links = array();
foreach ( $sharing_enabled['visible'] as $id => $service ) {
if ( ! isset( $supported_services[ $id ] ) ) {
$sharing_links[] = "<!-- not supported: $id -->";
continue;
}
$args = array_merge(
array(
'type' => $id,
),
$supported_services[ $id ]
);
$sharing_link = '<amp-social-share';
foreach ( $args as $key => $value ) {
$sharing_link .= sprintf( ' %s="%s"', sanitize_key( $key ), esc_attr( $value ) );
}
$sharing_link .= '></amp-social-share>';
$sharing_links[] = $sharing_link;
}
// Wrap AMP sharing buttons in container.
$markup = preg_replace( '#(?<=<div class="sd-content">).+?(?=</div>)#s', implode( '', $sharing_links ), $markup );
// Remove any lingering share-end list items.
$markup = str_replace( '<li class="share-end"></li>', '', $markup );
return $markup;
}
/**
* Tells Jetpack not to enqueue CSS for share buttons.
*
* @param bool $enqueue Whether or not to enqueue.
* @return bool Whether or not to enqueue.
*/
public static function amp_disable_sharedaddy_css( $enqueue ) {
if ( self::is_amp_request() ) {
$enqueue = false;
}
return $enqueue;
}
/**
* Ensure proper Photon image dimensions for AMP Stories.
*
* @param array $args Array of Photon Arguments.
* @param array $details {
* Array of image details.
*
* @type string $tag Image tag (Image HTML output).
* @type string $src Image URL.
* @type string $src_orig Original Image URL.
* @type int|false $width Image width.
* @type int|false $height Image height.
* @type int|false $width_orig Original image width before constrained by content_width.
* @type int|false $height_orig Original Image height before constrained by content_width.
* @type string $transform_orig Original transform before constrained by content_width.
* }
* @return array Args.
*/
public static function filter_photon_post_image_args_for_stories( $args, $details ) {
if ( ! is_singular( 'amp_story' ) ) {
return $args;
}
// Percentage-based dimensions are not allowed in AMP, so this shouldn't happen, but short-circuit just in case.
if ( false !== strpos( $details['width_orig'], '%' ) || false !== strpos( $details['height_orig'], '%' ) ) {
return $args;
}
$max_height = 1440; // See image size with the slug \AMP_Story_Post_Type::MAX_IMAGE_SIZE_SLUG.
$transform = $details['transform_orig'];
$width = $details['width_orig'];
$height = $details['height_orig'];
// If height is available, constrain to $max_height.
if ( false !== $height ) {
if ( $height > $max_height && false !== $height ) {
$width = ( $max_height * $width ) / $height;
$height = $max_height;
} elseif ( $height > $max_height ) {
$height = $max_height;
}
}
/*
* Set a height if none is found.
* If height is set in this manner and height is available, use `fit` instead of `resize` to prevent skewing.
*/
if ( false === $height ) {
$height = $max_height;
if ( false !== $width ) {
$transform = 'fit';
}
}
// Build array of Photon args and expose to filter before passing to Photon URL function.
$args = array();
if ( false !== $width && false !== $height ) {
$args[ $transform ] = $width . ',' . $height;
} elseif ( false !== $width ) {
$args['w'] = $width;
} elseif ( false !== $height ) {
$args['h'] = $height;
}
return $args;
}
}
add_action( 'init', array( 'Jetpack_AMP_Support', 'init' ), 1 );
add_action( 'admin_init', array( 'Jetpack_AMP_Support', 'admin_init' ), 1 );

View File

@@ -0,0 +1,143 @@
<?php
/**
* Provides methods for dealing with module overrides.
*
* @since 5.9.0
*/
class Jetpack_Modules_Overrides {
/**
* Used to cache module overrides so that we minimize how many times we appy the
* option_jetpack_active_modules filter.
*
* @var null|array
*/
private $overrides = null;
/**
* Clears the $overrides member used for caching.
*
* Since get_overrides() can be passed a falsey value to skip caching, this is probably
* most useful for clearing cache between tests.
*
* @return void
*/
public function clear_cache() {
$this->overrides = null;
}
/**
* Returns true if there is a filter on the jetpack_active_modules option.
*
* @return bool Whether there is a filter on the jetpack_active_modules option.
*/
public function do_overrides_exist() {
return (bool) ( has_filter( 'option_jetpack_active_modules' ) || has_filter( 'jetpack_active_modules' ) );
}
/**
* Gets the override for a given module.
*
* @param string $module_slug The module's slug.
* @param boolean $use_cache Whether or not cached overrides should be used.
*
* @return bool|string False if no override for module. 'active' or 'inactive' if there is an override.
*/
public function get_module_override( $module_slug, $use_cache = true ) {
$overrides = $this->get_overrides( $use_cache );
if ( ! isset( $overrides[ $module_slug ] ) ) {
return false;
}
return $overrides[ $module_slug ];
}
/**
* Returns an array of module overrides where the key is the module slug and the value
* is true if the module is forced on and false if the module is forced off.
*
* @param bool $use_cache Whether or not cached overrides should be used.
*
* @return array The array of module overrides.
*/
public function get_overrides( $use_cache = true ) {
if ( $use_cache && ! is_null( $this->overrides ) ) {
return $this->overrides;
}
if ( ! $this->do_overrides_exist() ) {
return array();
}
$available_modules = Jetpack::get_available_modules();
/**
* First, let's get all modules that have been forced on.
*/
/** This filter is documented in wp-includes/option.php */
$filtered = apply_filters( 'option_jetpack_active_modules', array() );
/** This filter is documented in class.jetpack.php */
$filtered = apply_filters( 'jetpack_active_modules', $filtered );
$forced_on = array_diff( $filtered, array() );
/**
* Second, let's get all modules forced off.
*/
/** This filter is documented in wp-includes/option.php */
$filtered = apply_filters( 'option_jetpack_active_modules', $available_modules );
/** This filter is documented in class.jetpack.php */
$filtered = apply_filters( 'jetpack_active_modules', $filtered );
$forced_off = array_diff( $available_modules, $filtered );
/**
* Last, build the return value.
*/
$return_value = array();
foreach ( $forced_on as $on ) {
$return_value[ $on ] = 'active';
}
foreach ( $forced_off as $off ) {
$return_value[ $off ] = 'inactive';
}
$this->overrides = $return_value;
return $return_value;
}
/**
* A reference to an instance of this class.
*
* @var Jetpack_Modules_Overrides
*/
private static $instance = null;
/**
* Returns the singleton instance of Jetpack_Modules_Overrides
*
* @return Jetpack_Modules_Overrides
*/
public static function instance() {
if ( is_null( self::$instance ) ) {
self::$instance = new Jetpack_Modules_Overrides();
}
return self::$instance;
}
/**
* Private construct to enforce singleton.
*/
private function __construct() {
}
}
Jetpack_Modules_Overrides::instance();

Some files were not shown because too many files have changed in this diff Show More